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)
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)
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'実行可能なスカウト内イベントがありません')