예제 #1
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)
예제 #2
0
파일: top.py 프로젝트: hitandaway100/caba
    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)
예제 #3
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'実行可能なスカウト内イベントがありません')