Ejemplo n.º 1
0
    def proc_BOSS01_PRE(self, area, boss, deckcardlist):
        """ボス戦確認.
        """
        self.html_param['area'] = Objects.area(self, area, None)
        self.html_param['boss'] = Objects.boss(self, boss)
        self.__putBossResultDeck(deckcardlist)
        self.html_param['url_bossbattle'] = self.makeAppLinkUrl(
            self.makeUrlNext())

        self.writeAppHtml('tutorial/boss_tuto2')
Ejemplo n.º 2
0
    def proc_BOSS00_RESULT(self, area, boss, deckcardlist):
        """ボス戦結果 敗北.
        """
        self.html_param['area'] = Objects.area(self, area, None)
        self.html_param['boss'] = Objects.boss(self, boss,
                                               self.__getBossHp(boss, False))
        self.__putBossResultDeck(deckcardlist)
        self.html_param['url_composition_material'] = self.makeAppLinkUrl(
            self.makeUrlNext())

        self.writeAppHtml('boss/bosslose')
Ejemplo n.º 3
0
 def process(self):
     
     model_mgr = self.getModelMgr()
     v_player = self.getViewerPlayer()
     viewer_id = v_player.id
     
     arealist = BackendApi.get_playable_area_all(model_mgr, viewer_id, using=settings.DB_READONLY)
     playdata_dict = BackendApi.get_areaplaydata(model_mgr, viewer_id, [area.id for area in arealist], using=settings.DB_READONLY)
     
     self.json_result_param['arealist'] = [Objects.area(self, area, playdata_dict.get(area.id)) for area in arealist]
     
     self.writeAppJson()
Ejemplo n.º 4
0
    def proc_SCOUT00_TOP(self, area, scout, scout_cnt):
        """スカウトTop.
        """
        v_player = self.getViewerPlayer(True)

        self.html_param['area'] = Objects.area(self, area, None)

        obj_scout = Objects.scout(self, v_player, scout, scout_cnt, [])
        obj_scout['url_exec'] = self.makeAppLinkUrl(self.makeUrlNext())
        self.html_param['scoutlist'] = [obj_scout]

        self.putPlayerInfo(scout_cnt=scout_cnt)
        self.writeAppHtml('scout/scout')
Ejemplo n.º 5
0
    def proc_SCOUT02_RESULT(self, area, scout, scout_cnt):
        """宝箱獲得結果.
        """
        v_player = self.getViewerPlayer(True)

        self.html_param['area'] = Objects.area(self, area, None)
        self.html_param['scout'] = Objects.scout(self, v_player, scout,
                                                 scout_cnt, [])
        self.html_param['url_next'] = self.makeAppLinkUrl(self.makeUrlNext())
        self.html_param['treasure_view'] = Objects.treasure_view(
            self, Defines.TreasureType.SILVER)

        self.putPlayerInfo(scout_cnt=scout_cnt)

        self.writeAppHtml('scout/treasureget')
Ejemplo n.º 6
0
    def proc_BOSS01_RESULT(self, area, boss, deckcardlist):
        """ボス戦結果 勝利.
        """

        model_mgr = self.getModelMgr()
        prizelist = BackendApi.get_prizelist(model_mgr,
                                             area.prizes,
                                             using=settings.DB_READONLY)

        self.html_param['area'] = Objects.area(self, area, None)
        self.html_param['boss'] = Objects.boss(self, boss,
                                               self.__getBossHp(boss, True))
        self.__putBossResultDeck(deckcardlist)
        self.html_param['prize'] = BackendApi.make_prizeinfo(
            self, prizelist, using=settings.DB_READONLY)
        self.html_param['url_next'] = self.makeAppLinkUrl(self.makeUrlNext())

        self.writeAppHtml('boss/bosswin')
Ejemplo n.º 7
0
 def _makeAreaObj_SCOUT(self, areamaster, playdata=None):
     return Objects.area(self, areamaster, playdata)
Ejemplo n.º 8
0
    def process(self):
        
        try:
            # エリア.
            areaid = int(self.request.get(Defines.URLQUERY_AREA, 0)) or None
            #if self.is_pc and areaid is None:
            #    raise CabaretError()
        except:
            raise CabaretError(u'閲覧できないエリアです', CabaretError.Code.ILLEGAL_ARGS)
        
        v_player = self.getViewerPlayer()
        uid = v_player.id
        
        model_mgr = self.getModelMgr()
        
        using = settings.DB_READONLY
        
        # エリア.
        area = None
        if areaid:
            area = BackendApi.get_area(model_mgr, areaid, using)
        else:
            area = BackendApi.get_lastview_area(model_mgr, uid, using)
            if area is not None:
                areaid = area.id
        
        if area and not BackendApi.check_area_playable(model_mgr, area, uid, using):
            area = None
        
        if area is None:
            # 見つからなかったので最新のエリア.
            areaid = BackendApi.get_newbie_areaid(model_mgr, uid, using)
            area = BackendApi.get_area(model_mgr, areaid, using)
        
        # エリアクリア情報.
        areaplaydata = BackendApi.get_areaplaydata(model_mgr, uid, [area.id], using).get(area.id)
        self.__putParam('area', Objects.area(self, area, areaplaydata))
        
        # スカウト.
        scoutidlist = BackendApi.get_scoutidlist_by_area(model_mgr, area.id, using)
        scoutlist = BackendApi.get_scouts(model_mgr, scoutidlist, using)
        scoutlist.sort(key=operator.attrgetter('id'))
        
        # スカウト進行情報.
        pscoutidlist = scoutidlist[:]
        pscoutidlist.extend([scout.opencondition for scout in scoutlist if scout.opencondition])
        pscoutidlist = list(set(pscoutidlist))
        scoutplaydata_dict = BackendApi.get_scoutprogress(model_mgr, uid, pscoutidlist, using)
        
        obj_scoutlist = []
        allcleared = True
        for scout in scoutlist:
            if not BackendApi.check_scout_playable(model_mgr, scout, v_player, using):
                allcleared = False
                continue
            scoutplaydata = scoutplaydata_dict.get(scout.id)
            obj_scout = self.makeScoutObj(scout, scoutplaydata)
            obj_scoutlist.insert(0, obj_scout)
            if not obj_scout['cleared']:
                allcleared = False
        self.__putParam('scoutlist', obj_scoutlist)
        
        is_last_area = False
        if allcleared:
            if areaplaydata is None:
                # ボス出現.
                boss = BackendApi.get_boss(model_mgr, area.boss, using=using)
                if boss is None:
                    raise CabaretError(u'エリアにボスがいません.%d' % area.id, CabaretError.Code.INVALID_MASTERDATA)
                self.__putParam('boss', Objects.boss(self, boss))
                # ボス戦へのURL.
                url = UrlMaker.bosspre(areaid)
                self.html_param['url_bossbattle'] = self.makeAppLinkUrl(url)
            else:
                # クリア済み.
                next_area_id = BackendApi.get_next_areaid(model_mgr, area.id, using=settings.DB_READONLY)
                if next_area_id == area.id:
                    is_last_area = True
                else:
                    next_area = BackendApi.get_area(model_mgr, next_area_id, using=settings.DB_READONLY)
                    if not BackendApi.check_area_playable(model_mgr, next_area, uid, using=settings.DB_READONLY):
                        is_last_area = True
        self.html_param['is_last_area'] = is_last_area
        
        self.html_param['player'] = Objects.player(self, v_player, None)
        
        
        arealist = BackendApi.get_playable_area_all(model_mgr, uid, using=settings.DB_READONLY)
        prev_area = None
        post_area = None
        flag = False
        for tmparea in arealist:
            if flag:
                post_area = tmparea
                break
            elif area.id == tmparea.id:
                flag = True
            else:
                prev_area = tmparea
        
        url_base = UrlMaker.scout()
        # 前のエリア.
        if prev_area:
            url = OSAUtil.addQuery(url_base, Defines.URLQUERY_AREA, prev_area.id)
            self.html_param['url_area_prev'] = self.makeAppLinkUrl(url)
        # 次のエリア.
        if post_area:
            url = OSAUtil.addQuery(url_base, Defines.URLQUERY_AREA, post_area.id)
            self.html_param['url_area_next'] = self.makeAppLinkUrl(url)
        
        # カードの上限チェック.
        if v_player.cardlimit <= BackendApi.get_cardnum(uid, arg_model_mgr=model_mgr, using=using):
            self.__putParam('overlimit_card', True)
        
        # 宝箱の上限チェック.
        overlimit_treasure_list = BackendApi.get_treasuretype_list_overlimit(model_mgr, uid, using=using)
        self.__putParam('overlimit_treasure', overlimit_treasure_list)
        
        BackendApi.save_lastview_areaid(uid, areaid)

        # スキップフラグ
        self.__putParam('flag_skip', BackendApi.get_scoutskip_flag(uid))
        
        # レイドイベント.
        BackendApi.put_raidevent_champagnedata(self, uid)
        raideventmaster = BackendApi.get_current_raideventmaster(model_mgr, using=settings.DB_READONLY)
        if raideventmaster and raideventmaster.flag_dedicated_stage:
            self.html_param['url_raidevent_scouttop'] = self.makeAppLinkUrl(UrlMaker.raidevent_scouttop())
        
        # スカウトイベント.
        scouteventmaster = BackendApi.get_current_scouteventmaster(model_mgr, using=settings.DB_READONLY)
        if scouteventmaster:
            scouteventconfig = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY)
            self.html_param['scoutevent'] = Objects.scouteventmaster(self, scouteventmaster, scouteventconfig)
            self.html_param['url_scoutevent_top'] = self.makeAppLinkUrl(UrlMaker.scoutevent_top(scouteventmaster.id))

        # プロデュースイベント.
        produceeventmaster = BackendApi.get_current_produce_event_master(model_mgr, using=settings.DB_READONLY)
        if produceeventmaster:
            produceeventconfig = BackendApi.get_current_produce_event_config(model_mgr, using=settings.DB_READONLY)
            self.html_param['produceevent'] = Objects.produceevent(self, produceeventmaster, produceeventconfig)
            self.html_param['url_produceevent_scouttop'] = self.makeAppLinkUrl(UrlMaker.produceevent_scouttop())
        
        self.writeAppHtml('scout/scout')
Ejemplo n.º 9
0
    def process(self):

        model_mgr = self.getModelMgr()
        v_player = self.getViewerPlayer()
        viewer_id = v_player.id

        page_contentnum = Defines.SCOUTAREAMAP_CONTENTNUM_PER_PAGE

        # 遊べるエリア.
        arealist = BackendApi.get_playable_area_all(model_mgr,
                                                    viewer_id,
                                                    using=settings.DB_READONLY)
        if not arealist:
            raise CabaretError(u'エリアがありません',
                               CabaretError.Code.INVALID_MASTERDATA)

        arealist.sort(key=operator.attrgetter('id'), reverse=True)
        playdata_dict = BackendApi.get_areaplaydata(
            model_mgr,
            viewer_id, [area.id for area in arealist],
            using=settings.DB_READONLY)

        # 現在ページ.
        contentnum = len(arealist)
        page_max = max(
            1, int((contentnum + page_contentnum - 1) / page_contentnum))
        page = 0
        try:
            page = min(page_max - 1,
                       int(self.request.get(Defines.URLQUERY_PAGE, 0)))
        except:
            pass

        scoutidlist = []

        # 現在エリア.
        cur_area = arealist[0]
        self.html_param['area'] = Objects.area(self, cur_area,
                                               playdata_dict.get(cur_area.id))

        # 現在のスカウト.
        arr = BackendApi.get_scoutidlist_by_area(model_mgr,
                                                 cur_area.id,
                                                 using=settings.DB_READONLY)
        if not arr:
            raise CabaretError(u'エリアのスカウトがありません',
                               CabaretError.Code.INVALID_MASTERDATA)
        arr.sort(reverse=True)
        scoutmasterdict = BackendApi.get_scout_dict(model_mgr,
                                                    arr,
                                                    using=settings.DB_READONLY)
        for scoutid in arr:
            master = scoutmasterdict.get(scoutid)
            if master and BackendApi.check_scout_playable(
                    model_mgr, master, v_player, using=settings.DB_READONLY):
                scoutidlist.append(scoutid)
                break

        # ページのエリア.
        start = page * page_contentnum
        end = start + page_contentnum
        arealist = arealist[start:end]

        obj_arealist = []
        for area in arealist:
            if area.id != cur_area.id:
                arr = BackendApi.get_scoutidlist_by_area(
                    model_mgr, area.id, using=settings.DB_READONLY)
                if not arr:
                    raise CabaretError(u'エリアのスカウトがありません',
                                       CabaretError.Code.INVALID_MASTERDATA)
                arr.sort(reverse=False)
                scoutidlist.append(arr[0])
            obj_arealist.append(
                Objects.area(self, area, playdata_dict.get(area.id)))

        obj_scout_dict = dict([
            (scout.area, Objects.scout(self, v_player, scout, 0, []))
            for scout in BackendApi.get_scouts(
                model_mgr, scoutidlist, using=settings.DB_READONLY)
        ])
        self.html_param['arealist'] = obj_arealist
        self.html_param['area_scout_dict'] = obj_scout_dict

        # ページング.
        url = UrlMaker.areamap()
        self.putPagenation(url, page, contentnum, page_contentnum)

        self.writeAppHtml('scout/areamap')
Ejemplo n.º 10
0
    def process(self):
        args = self.getUrlArgs('/scoutresult/')
        try:
            scoutid = int(args.get(0))
            scoutkey = urllib.unquote(args.get(1))
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)

        v_player = self.getViewerPlayer()
        model_mgr = self.getModelMgr()

        using = settings.DB_READONLY

        # 進行情報.
        playdata = BackendApi.get_scoutprogress(model_mgr,
                                                v_player.id, [scoutid],
                                                using=using).get(
                                                    scoutid, None)
        if playdata and playdata.confirmkey == scoutkey:
            # DBからとり直すべき.
            playdata = BackendApi.get_scoutprogress(model_mgr,
                                                    v_player.id, [scoutid],
                                                    using=settings.DB_DEFAULT,
                                                    reflesh=True).get(
                                                        scoutid, None)

        if playdata is None or playdata.alreadykey != scoutkey:
            if settings_sub.IS_LOCAL:
                raise CabaretError(
                    u'キーが正しくありません %s vs %s' %
                    (playdata.alreadykey if playdata else 'None', scoutkey))
            url = self.makeAppLinkUrlRedirect(UrlMaker.scout())
            self.appRedirect(url)
            return

        # プレイヤー.
        self.html_param['player'] = Objects.player(self, v_player)

        # スカウト.
        arr = BackendApi.get_scouts(model_mgr, [scoutid], using=using)
        scoutmaster = arr[0] if arr else None
        self.html_param['scout'] = self.makeScoutObj(scoutmaster, playdata)

        # エリアマスターデータ.
        areamaster = BackendApi.get_area(model_mgr, scoutmaster.area, using)
        if areamaster is None:
            url = self.makeAppLinkUrlRedirect(UrlMaker.scout())
            self.appRedirect(url)
            return

        # エリアクリア情報.
        areaplaydata = BackendApi.get_areaplaydata(model_mgr, v_player.id,
                                                   [areamaster.id],
                                                   using).get(areamaster.id)
        self.html_param['area'] = Objects.area(self, areamaster, areaplaydata)

        # 続ける.
        url = UrlMaker.scoutdo(scoutmaster.id, playdata.confirmkey)
        self.html_param['url_scoutdo'] = self.makeAppLinkUrl(url)

        eventlist = playdata.result.get('event', [])
        if not eventlist:
            raise CabaretError(u'スカウト実行の実装に問題があります')

        # レイドイベント.
        BackendApi.put_raidevent_champagnedata(self, v_player.id)

        table = (
            (Defines.ScoutEventType.LEVELUP, self.procLevelup),
            (Defines.ScoutEventType.GET_CARD, self.procGetCard),
            (Defines.ScoutEventType.GET_TREASURE, self.procGetTreasure),
            (Defines.ScoutEventType.COMPLETE, self.procComplete),
            (Defines.ScoutEventType.HAPPENING, self.procHappening),
            (Defines.ScoutEventType.AP_NONE, self.procApNone),
            (Defines.ScoutEventType.NONE, self.procNone),
        )

        eventdict = {}
        for event in eventlist:
            eventdict[event.get_type()] = event
        self.__eventdict = eventdict

        # スカウト結果.
        resultlist = playdata.result.get('result', [])
        self.html_param['scoutresultinfo'] = BackendApi.make_scoutresult_info(
            resultlist)

        for eventtype, func in table:
            event = eventdict.get(eventtype)
            if event:
                func(scoutmaster, playdata, event)
                return
        raise CabaretError(u'実行可能なスカウト内イベントがありません')