Example #1
0
 def procStar(self, mid, stagemaster, playdata, event):
     """星獲得.
     """
     model_mgr = self.getModelMgr()
     config = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY)
     obj_scouteventmaster = Objects.scouteventmaster(self, self.eventmaster, config)
     self.html_param['scoutevent'] = obj_scouteventmaster
     
     self.html_param['star_add'] = event.num
     
     self.writeScoutEventHTML('eventstarget', self.eventmaster)
Example #2
0
 def procEventGacha(self, mid, stagemaster, playdata, event):
     """イベントガチャポイント.
     """
     model_mgr = self.getModelMgr()
     config = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY)
     obj_scouteventmaster = Objects.scouteventmaster(self, self.eventmaster, config)
     self.html_param['scoutevent'] = obj_scouteventmaster
     
     self.html_param['point_add'] = event.point
     
     self.writeScoutEventHTML('eventgachaptget', self.eventmaster)
Example #3
0
    def process(self):

        args = self.getUrlArgs('/sceventexplain/')
        str_eventid = str(args.get(0))
        ope = args.get(1)

        model_mgr = self.getModelMgr()
        eventmaster = None
        mid = None
        if str_eventid.isdigit():
            mid = int(str_eventid)
            eventmaster = BackendApi.get_scouteventmaster(
                model_mgr, mid, using=settings.DB_READONLY)

        if eventmaster is None:
            raise CabaretError(u'閲覧できないイベントです', CabaretError.Code.ILLEGAL_ARGS)

        # 開催中判定.
        cur_eventmaster = self.getCurrentScoutEvent(quiet=True)
        if cur_eventmaster and cur_eventmaster.id == mid:
            is_opened = True
        else:
            is_opened = False
        self.html_param['is_opened'] = is_opened

        # イベント情報.
        config = BackendApi.get_current_scouteventconfig(
            model_mgr, using=settings.DB_READONLY)
        self.html_param['scoutevent'] = Objects.scouteventmaster(
            self, eventmaster, config)

        self.putEventTopic(mid, 'explain')

        self.html_param['current_topic'] = ope

        table = {
            'detail': self.__proc_detail,
            'prizes': self.__proc_prizes,
            'nomination': self.__proc_nomination,
            'faq': self.__proc_faq,
        }

        for k in table.keys():
            self.html_param['url_explain_%s' % k] = self.makeAppLinkUrl(
                UrlMaker.scoutevent_explain(mid, k))
        table.get(ope, self.__proc_detail)(eventmaster, is_opened)
Example #4
0
 def process(self):
     model_mgr = self.getModelMgr()
     
     # 引数.
     args = self.getUrlArgs('/sceventmovie/')
     stage = args.getInt(0)
     
     # イベントマスターID.
     eventmaster = self.getCurrentScoutEvent(do_check_schedule=True)
     eventid = eventmaster.id
     
     # 対象のステージ.
     eventstagemaster = None
     if stage:
         eventstagemaster = BackendApi.get_event_stage_by_stagenumber(model_mgr, eventid, stage, using=settings.DB_READONLY)
     
     # 動画の閲覧可否.
     eventmovieid = None
     if stage == 0 and eventmaster.movie_op:
         # オープニング用.
         eventmovieid = eventmaster.movie_op
     elif eventstagemaster and eventstagemaster.movie:
         # イベント進行状況.
         v_player = self.getViewerPlayer()
         uid = v_player.id
         playdata = BackendApi.get_event_playdata(model_mgr, eventid, uid, using=settings.DB_READONLY)
         if stage < playdata.stage:
             eventmovieid = eventstagemaster.movie
     
     eventmoviemaster = None
     if eventmovieid:
         eventmoviemaster = BackendApi.get_eventmovie_master(model_mgr, eventmovieid, using=settings.DB_READONLY)
     
     # イベント情報.
     config = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY)
     self.html_param['scoutevent'] = Objects.scouteventmaster(self, eventmaster, config)
     
     if eventmoviemaster:
         # 動画詳細.
         self.__procDetail(eventmaster, eventstagemaster, eventmoviemaster)
     else:
         # 動画一覧.
         self.__procList(eventmaster)
Example #5
0
    def process(self):

        args = self.getUrlArgs('/sceventtippopulatecomplete/')
        tanzaku_number = args.getInt(0)
        tip_num = args.getInt(1)
        if not tip_num or tip_num < 1:
            # チップ数が不正.
            url = UrlMaker.scoutevent_top()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        model_mgr = self.getModelMgr()

        using = settings.DB_READONLY

        eventmaster = BackendApi.get_current_scouteventmaster(model_mgr,
                                                              using=using)
        if eventmaster is None:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)
        mid = eventmaster.id

        # 短冊のマスターデータ.
        tanzakumaster = BackendApi.get_scoutevent_tanzakumaster(
            model_mgr, mid, tanzaku_number, using=settings.DB_READONLY)
        if tanzakumaster is None:
            # 存在しない短冊.
            url = UrlMaker.scoutevent_top()
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        self.html_param['scoutevent'] = Objects.scouteventmaster(
            self, eventmaster, None)
        self.html_param['scoutevent_tanzaku'] = Objects.scoutevent_tanzaku(
            self, tanzakumaster)
        self.html_param['tip_add'] = tip_num

        # トピック.
        self.putEventTopic(mid)

        self.writeScoutEventHTML('tip_populate_complete', eventmaster)
Example #6
0
    def process(self):

        v_player = self.getViewerPlayer()
        uid = v_player.id

        model_mgr = self.getModelMgr()

        using = settings.DB_READONLY

        # イベントマスター.
        eventmaster = self.getCurrentScoutEvent()
        mid = eventmaster.id

        # イベントプレイ情報
        playdata = BackendApi.get_event_playdata(model_mgr, mid, uid, using)

        # 今いるステージ.
        stage = BackendApi.get_current_scouteventstage_master(
            model_mgr, eventmaster, playdata, using=settings.DB_READONLY)
        stageid = stage.stage

        cardget_event = BackendApi.find_scout_event(
            playdata, Defines.ScoutEventType.GET_CARD)
        if cardget_event and not cardget_event.is_received:
            # カード獲得で離脱した.
            url = UrlMaker.scouteventresult(stage.id, playdata.alreadykey)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # プレイ情報.
        self.__putParam('scout',
                        Objects.scoutevent_stage(self, stage, playdata))

        # ボス出現.
        bossattack = False
        allcleared = BackendApi.check_event_boss_playable(playdata, stage)
        boss = None
        if 0 < stage.boss and allcleared:
            boss = BackendApi.get_boss(model_mgr, stage.boss, using=using)
            if boss is not None:
                bossattack = True

        # ステージ情報.
        obj_stage = self.makeStageObj(stage, playdata, stageid, bossattack)
        self.__putParam('stagelist', [obj_stage])

        # ボス
        if bossattack:
            # ボス戦へのURL.
            self.__putParam('boss', Objects.boss(self, boss))
            self.setFromPage(Defines.FromPages.SCOUTEVENT, stage.id)
            url = UrlMaker.bosspre(stage.id)
            self.html_param['url_bossbattle'] = self.makeAppLinkUrl(url)

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

        self.html_param['scoutevent'] = Objects.scouteventmaster(
            self, eventmaster, None)

        # フィーバー
        self.html_param['scouteventfever'] = Objects.scoutevent_fever(playdata)

        # 説明とランキングのリンク.
        self.putEventTopic(mid, 'top')

        # カードの上限チェック.
        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)

        self.__putParam('flag_skip', BackendApi.get_scoutskip_flag(uid))

        config = BackendApi.get_current_scouteventconfig(
            model_mgr, using=settings.DB_READONLY)
        max_stage = config.get_stage_max()
        is_all_open = max_stage is None
        self.__putParam('is_all_open', is_all_open)

        is_all_cleared = False
        if is_all_open:
            if allcleared and not bossattack:
                stagelist_all = BackendApi.get_event_stage_by_stagenumber(
                    model_mgr, mid, using=settings.DB_READONLY)
                stagelist_all.sort(key=lambda x: x.stage, reverse=True)
                is_all_cleared = stagelist_all[0].stage <= playdata.cleared
        else:
            is_all_cleared = max_stage <= playdata.cleared
        self.__putParam('is_all_cleared', is_all_cleared)

        # 短冊情報.
        BackendApi.put_scoutevent_tanzakudata(self, uid)

        self.writeScoutEventHTML('scout', eventmaster)
Example #7
0
    def process(self):

        args = self.getUrlArgs('/happeningend/')

        model_mgr = self.getModelMgr()

        happeningid = str(args.get(0, ''))
        happeningraid = None
        if happeningid.isdigit():
            happeningraid = BackendApi.get_happeningraidset(
                model_mgr, int(happeningid), using=settings.DB_READONLY)
        if happeningraid is None:
            raise CabaretError(u'ハプニングが見つかりません',
                               CabaretError.Code.ILLEGAL_ARGS)

        # プレイヤー情報.
        v_player = self.getViewerPlayer()

        happeningset = happeningraid.happening
        raideventid = HappeningUtil.get_raideventid(
            happeningset.happening.event)
        if happeningset.happening.is_end(
        ) and not happeningset.happening.is_missed_and_not_end():
            pass
        else:
            if happeningset.happening.is_cleared():
                if v_player.id == happeningset.happening.oid:
                    # 終了書き込みをさせる.
                    if settings_sub.IS_LOCAL:
                        raise CabaretError(u'まだ終わっていません')
                    url = UrlMaker.raidend(happeningset.happening.id)
                    self.appRedirect(self.makeAppLinkUrlRedirect(url))
                    return
                else:
                    pass
            elif happeningset.happening.is_missed_and_not_end():
                if v_player.id == happeningset.happening.oid:
                    # 終了書き込みをさせる.
                    if settings_sub.IS_LOCAL and not self.request.get('_test'):
                        raise CabaretError(u'終了処理を行っていません')
                    elif raideventid:
                        self.appRedirect(
                            self.makeAppLinkUrlRedirect(UrlMaker.happening()))
                        return
                    else:
                        self.writeHappeningMissed(happeningset.id)
                else:
                    pass
            else:
                if settings_sub.IS_LOCAL:
                    raise CabaretError(u'まだ終わっていません')
                url = UrlMaker.happening()
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return

        eventmaster = None
        if raideventid:
            eventmaster = BackendApi.get_raideventmaster(
                model_mgr, raideventid, using=settings.DB_READONLY)

        if eventmaster:
            # イベント開催中.
            self.html_param['url_raidevent_top'] = self.makeAppLinkUrl(
                UrlMaker.raidevent_top(eventmaster.id))
            self.html_param['prize'] = None

            if eventmaster.flag_dedicated_stage:
                self.html_param[
                    'url_raidevent_scouttop'] = self.makeAppLinkUrl(
                        UrlMaker.raidevent_scouttop())

            if happeningset.happening.is_canceled():
                # キャンセル.
                self.html_param['cancel'] = True
                self.writeAppHtml('raidevent/failed')
            elif happeningset.happening.is_missed():
                # 失敗.
                self.html_param['cancel'] = False
                self.writeAppHtml('raidevent/failed')
            else:
                # 成功.
                url = UrlMaker.raidend(happeningset.happening.id)
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return
        else:
            model_mgr = self.getModelMgr()

            # スカウトイベント.
            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_scouttop'] = self.makeAppLinkUrl(
                        UrlMaker.scoutevent())

            # ハプニングの報酬.
            prizeinfo = None
            if v_player.id == happeningset.happening.oid:
                prizelist = self.getPooledPrizeList(
                    happeningset.happening.is_canceled())
                if prizelist:
                    prizeinfo = BackendApi.make_prizeinfo(
                        self, prizelist, using=settings.DB_READONLY)

            # 成否.
            if happeningset.happening.state in (Defines.HappeningState.END,
                                                Defines.HappeningState.CLEAR):

                # ハプニング情報.
                self.html_param['happening'] = Objects.happening(
                    self, happeningraid, prizeinfo)

                # レイドの報酬.
                self.html_param['raidprize'] = Objects.raidprize(
                    self, v_player, happeningraid.raidboss,
                    happeningset.happening.items.get('dropitems', []))

                self.writeAppHtml('happening/prizeget')
            else:
                self.html_param['prize'] = prizeinfo
                self.html_param['cancel'] = happeningset.happening.is_canceled(
                )
                self.writeAppHtml('happening/failed')
Example #8
0
    def process(self):

        model_mgr = self.getModelMgr()
        now = OSAUtil.get_now()

        # スカウトイベントの設定.
        config = BackendApi.get_current_scouteventconfig(
            model_mgr, using=settings.DB_READONLY)
        if config.mid == 0 or config.present_endtime < now:
            # 交換が終了している.
            url = UrlMaker.scoutevent_top(config.mid)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        eventid = config.mid
        eventmaster = BackendApi.get_scouteventmaster(
            model_mgr, eventid, using=settings.DB_READONLY)

        # 説明とランキングのリンク.
        self.putEventTopic(eventid, '')

        if self.request.method == 'POST':
            self.__procPost(eventmaster)
            if self.response.isEnd:
                return

        v_player = self.getViewerPlayer()
        uid = v_player.id

        record = BackendApi.get_scoutevent_presentnums_record(
            model_mgr,
            eventid,
            uid,
            get_instance=True,
            using=settings.DB_READONLY)

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

        # イベントデータ.
        obj_scoutevent = Objects.scouteventmaster(self, eventmaster, config)
        self.html_param['scoutevent'] = obj_scoutevent

        # ハート所持数.
        self.html_param['scoutevent_heartnum'] = record.point

        # 各項目.
        presentprizemasterlist = BackendApi.get_scoutevent_presentprizemaster_by_eventid(
            model_mgr, eventid, using=settings.DB_READONLY)
        obj_presentprizelist = []
        flag_allreceived = True
        for presentprizemaster in presentprizemasterlist:
            obj_presentprize = BackendApi.make_scoutevent_presentprizeinfo(
                self, presentprizemaster, record)
            obj_presentprizelist.append(obj_presentprize)
            if not obj_presentprize['all_received']:
                flag_allreceived = False
        self.html_param['scoutevent_presentprizelist'] = obj_presentprizelist
        self.html_param['scoutevent_flag_allreceived'] = flag_allreceived

        # 書き込み先URL.
        self.html_param['url_post'] = self.makeAppLinkUrl(
            UrlMaker.scouteventproduce())

        target_number = None
        try:
            target_number = int(self.request.get(Defines.URLQUERY_NUMBER))
        except:
            pass

        if target_number is not None and target_number == record.result_number:
            # 投入結果.
            pointprizemaster = BackendApi.get_scoutevent_presentprizemaster(
                model_mgr,
                eventid,
                record.result_number,
                using=settings.DB_READONLY)
            if pointprizemaster:
                prize_table = pointprizemaster.get_pointprizes(
                    record.result_pointpre + 1, record.result_pointpost)
                prizeinfo = None
                if prize_table:
                    prizeidlist = prize_table.values()[0]
                    prizelist = BackendApi.get_prizelist(
                        model_mgr, prizeidlist, using=settings.DB_READONLY)
                    prizeinfo = BackendApi.make_prizeinfo(
                        self, prizelist, using=settings.DB_READONLY)
                self.html_param[
                    'scoutevent_present_result'] = Objects.scoutevent_present_result(
                        self, record.result_pointpost - record.result_pointpre,
                        prizeinfo)

        self.writeScoutEventHTML('present', eventmaster)
Example #9
0
    def process(self):
        args = self.getUrlArgs('/sceventcardgetresult/')
        try:
            stageid = int(args.get(0))
        except:
            raise CabaretError(u'引数が想定外です', CabaretError.Code.ILLEGAL_ARGS)

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

        using = settings.DB_READONLY

        eventmaster = BackendApi.get_current_scouteventmaster(model_mgr,
                                                              using=using)
        if eventmaster is None:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)
        mid = eventmaster.id

        # 進行情報.
        playdata = BackendApi.get_event_playdata(model_mgr, mid, v_player.id,
                                                 using)
        target_event = BackendApi.find_scout_event(
            playdata, Defines.ScoutEventType.GET_CARD)

        if target_event is None:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'女の子を発見していません')
            url = self.makeAppLinkUrlRedirect(UrlMaker.scoutevent())
            self.appRedirect(url)
            return
        elif not target_event.is_received:
            if settings_sub.IS_LOCAL:
                raise CabaretError(u'まだ女の子をスカウトしていません')
            url = self.makeAppLinkUrlRedirect(
                UrlMaker.scouteventresult(stageid, playdata.alreadykey))
            self.appRedirect(url)
            return

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

        # 獲得したカード.
        cardmaster = BackendApi.get_cardmasters([target_event.card],
                                                arg_model_mgr=model_mgr,
                                                using=using).get(
                                                    target_event.card)
        card = BackendApi.create_card_by_master(cardmaster)
        cardset = CardSet(card, cardmaster)
        self.html_param['card'] = Objects.card(self,
                                               cardset,
                                               is_new=target_event.is_new)

        # ステージ.
        arr = BackendApi.get_event_stages(model_mgr, [stageid], using=using)
        stagemaster = arr[0] if arr else None
        self.html_param['scout'] = self.makeStageObj(stagemaster, playdata,
                                                     stagemaster.stage)

        # フィーバー
        self.html_param['scouteventfever'] = Objects.scoutevent_fever(playdata)

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

        # イベントポイント
        self.putEventPoint(mid, v_player.id, playdata)

        config = BackendApi.get_current_scouteventconfig(
            model_mgr, using=settings.DB_READONLY)
        obj_scouteventmaster = Objects.scouteventmaster(
            self, eventmaster, config)
        self.html_param['scoutevent'] = obj_scouteventmaster

        if target_event.is_success:
            if target_event.autosell:
                # 自動退店.
                self.html_param['autosell'] = target_event.autosell
                self.html_param['_gold_add'] = target_event.sellprice
                self.html_param['_ckt'] = getattr(target_event,
                                                  'sellprice_treasure', 0)

            self.writeScoutEventHTML('cardgetresult_success', eventmaster)
        else:
            self.writeScoutEventHTML('cardgetresult_failed', eventmaster)
Example #10
0
    def process(self):
        args = self.getUrlArgs('/sceventresult/')
        try:
            stageid = 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
        
        eventmaster = BackendApi.get_current_scouteventmaster(model_mgr, using=using)
        if eventmaster is None:
            raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED)
        mid = eventmaster.id
        self.eventmaster = eventmaster
        
        # 進行情報.
        playdata = BackendApi.get_event_playdata(model_mgr, mid, v_player.id, using)
        if playdata and playdata.confirmkey == scoutkey:
            # DBからとり直すべき.
            playdata = BackendApi.get_event_playdata(model_mgr, mid, v_player.id, using=settings.DB_DEFAULT, reflesh=True)
        
        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.scoutevent())
            self.appRedirect(url)
            return
        
        # プレイヤー.
        self.html_param['player'] = Objects.player(self, v_player)
        
        # ステージ.
        arr = BackendApi.get_event_stages(model_mgr, [stageid], using=using)
        stagemaster = arr[0] if arr else None
        if stagemaster is None:
            url = self.makeAppLinkUrlRedirect(UrlMaker.scoutevent())
            self.appRedirect(url)
            return
        self.html_param['scout'] = self.makeStageObj(stagemaster, playdata, stagemaster.stage)
        
        # フィーバー.
        self.html_param['scouteventfever'] = Objects.scoutevent_fever(playdata)
        
        # イベントポイント.
        self.putEventPoint(mid, v_player.id, playdata)
        
        # エリアクリア情報.
        self.html_param['stage'] = Objects.scoutevent_stage(self, stagemaster, playdata)
        
        # 続ける.
        url = UrlMaker.scouteventdo(stagemaster.id, playdata.confirmkey)
        self.html_param['url_scoutdo'] = self.makeAppLinkUrl(url)
        
        eventlist = playdata.result.get('event', [])
        if not eventlist:
            raise CabaretError(u'スカウト実行の実装に問題があります')
        
        config = BackendApi.get_current_scouteventconfig(model_mgr, using=settings.DB_READONLY)
        obj_scouteventmaster = Objects.scouteventmaster(self, self.eventmaster, config)
        self.html_param['scoutevent'] = obj_scouteventmaster

        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.EVENTGACHA, self.procEventGacha),
            (Defines.ScoutEventType.LOVETIME_STAR, self.procStar),
            (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(mid, stagemaster, playdata, event)
                return
        raise CabaretError(u'実行可能なスカウト内イベントがありません')
Example #11
0
    def process(self):

        args = self.getUrlArgs('/sceventranking/')
        str_eventid = str(args.get(0))
        view_myrank = args.get(1) == '1'

        model_mgr = self.getModelMgr()
        eventmaster = None
        mid = None
        if str_eventid.isdigit():
            mid = int(str_eventid)
            eventmaster = BackendApi.get_scouteventmaster(
                model_mgr, mid, using=settings.DB_READONLY)

        if eventmaster is None:
            raise CabaretError(u'閲覧できないイベントです', CabaretError.Code.ILLEGAL_ARGS)

        # 開催中判定.
        cur_eventmaster = self.getCurrentScoutEvent(quiet=True)
        if cur_eventmaster and cur_eventmaster.id == mid:
            is_opened = True
        else:
            is_opened = False
        self.html_param['is_opened'] = is_opened

        self.putEventTopic(mid, 'ranking')

        # イベント情報.
        config = BackendApi.get_current_scouteventconfig(
            model_mgr, using=settings.DB_READONLY)
        obj_scouteventmaster = Objects.scouteventmaster(
            self, eventmaster, config)
        self.html_param['scoutevent'] = obj_scouteventmaster

        v_player = self.getViewerPlayer()
        uid = v_player.id

        # 初心者判定.
        is_beginer = BackendApi.check_scoutevent_beginer(
            model_mgr,
            uid,
            eventmaster,
            config=config,
            using=settings.DB_READONLY)
        self.html_param['is_beginer'] = is_beginer

        # ランキング.
        view_beginer = self.request.get(Defines.URLQUERY_BEGINER) == "1"
        if view_beginer and not is_beginer:
            view_myrank = False

        url_scoutevent_ranking = UrlMaker.scoutevent_ranking(mid, False)
        url_scoutevent_myrank = UrlMaker.scoutevent_ranking(mid, True)
        self.putRanking(uid,
                        mid,
                        view_myrank,
                        url_scoutevent_ranking,
                        url_scoutevent_myrank,
                        view_beginer=view_beginer)

        self.writeScoutEventHTML('ranking', eventmaster)
Example #12
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')