def putRaidEventParams(self, eventmaster=None): """レイドイベント用の交換パラメータ. """ model_mgr = self.getModelMgr() if eventmaster is None: eventmaster = self.getCurrentEventMaster() if eventmaster: v_player = self.getViewerPlayer() uid = v_player.id # イベント情報. config = BackendApi.get_current_raideventconfig( model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent( self, eventmaster, config) # スコア. scorerecord = BackendApi.get_raidevent_scorerecord( model_mgr, eventmaster.id, uid, using=settings.DB_READONLY) rank = BackendApi.get_raidevent_rank(eventmaster.id, uid) self.html_param['raideventscore'] = Objects.raidevent_score( eventmaster, scorerecord, rank) return eventmaster
def writeHtml(self, eventmaster, name): """HTML書き込み. """ if not self.html_param.get('raidevent'): # raideventは必ず必要. model_mgr = self.getModelMgr() config = BackendApi.get_current_raideventconfig(model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent(self, eventmaster, config) # HTML作成. self.writeAppHtml('raidevent/%s' % name)
def process(self): args = self.getUrlArgs('/raideventexplain/') 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_raideventmaster( model_mgr, mid, using=settings.DB_READONLY) if eventmaster is None: raise CabaretError(u'閲覧できないイベントです', CabaretError.Code.ILLEGAL_ARGS) # 開催中判定. cur_eventmaster = self.getCurrentRaidEvent(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_raideventconfig( model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent( self, eventmaster, config) # スコア. v_player = self.getViewerPlayer() scorerecord = BackendApi.get_raidevent_scorerecord( model_mgr, eventmaster.id, v_player.id, using=settings.DB_READONLY) rank = BackendApi.get_raidevent_rank(eventmaster.id, v_player.id) self.html_param['raideventscore'] = Objects.raidevent_score( eventmaster, scorerecord, rank) 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.raidevent_explain(mid, k)) table.get(ope, self.__proc_detail)(eventmaster, is_opened)
def writeHtmlSwitchEvent(self, name, eventid=None, eventmaster=None, basedir_normal='happening'): """イベントと通常のHTMLを切り替えて書き込む. """ model_mgr = self.getModelMgr() if eventmaster is None: eventmaster = BackendApi.get_current_raideventmaster(model_mgr, using=settings.DB_READONLY) if eventmaster and (eventid is None or eventmaster.id == eventid): if not self.html_param.has_key('url_raidevent_top'): self.html_param['url_raidevent_top'] = self.makeAppLinkUrl(UrlMaker.raidevent_top(eventmaster.id)) if not self.html_param.has_key('raidevent'): config = BackendApi.get_current_raideventconfig(model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent(self, eventmaster, config) self.writeAppHtml('raidevent/%s' % name) else: self.writeAppHtml('%s/%s' % (basedir_normal, name))
def process(self): args = self.getUrlArgs('/raideventrecipecomplete/') recipe_id = args.getInt(0) trade_num = self.getRecipeTradeNum() self.html_param['trade_num'] = trade_num model_mgr = self.getModelMgr() eventmaster = self.getCurrentRaidTicketEvent() eventid = eventmaster.id # レシピ. recipemaster = None if recipe_id: recipemaster = BackendApi.get_raidevent_recipemaster( model_mgr, recipe_id, using=settings.DB_READONLY) if recipemaster is None or recipemaster.eventid != eventid: url = UrlMaker.raidevent_recipe_list() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # レシピのHTMLデータ. obj_recipe = BackendApi.make_raidevent_recipe_htmlobj( self, recipemaster) self.html_param['recipe'] = obj_recipe # イベント情報. config = BackendApi.get_current_raideventconfig( model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent( self, eventmaster, config) self.putEventTopic(eventid) # 交換所TOP. url = UrlMaker.raidevent_recipe_list() self.html_param['url_raidevent_recipelist'] = self.makeAppLinkUrl(url) self.writeHtml(eventmaster, 'presenttradecomp')
def process(self): model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() uid = v_player.id # 開催中判定. cur_eventmaster = self.getCurrentRaidEvent() mid = cur_eventmaster.id # 現在発生中のレイド. happeningraidset = self.getHappeningRaidSet() if happeningraidset is None or happeningraidset.raidboss is None: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage())) return # イベントのレイド判定. happeningset = happeningraidset.happening raidboss = happeningraidset.raidboss eventid = HappeningUtil.get_raideventid(happeningset.happening.event) if happeningset.happening.oid != uid: # 自分のじゃないのは救援詳細へ. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.raidhelpdetail(happeningset.id))) return elif eventid != mid: # イベントじゃないレイド. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.happening())) return elif not happeningset.happening.is_active(): # 終了済み. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.raidend(happeningset.happening.id))) return raideventraidmaster = BackendApi.get_raidevent_raidmaster(model_mgr, cur_eventmaster.id, raidboss.master.id, using=settings.DB_READONLY) # キャストを借りる. func_put_playerlist = self.putHelpFriend(raidboss) # ダメージ履歴. func_put_attacklog = self.putRaidAttackLog(raidboss) # イベント情報. config = BackendApi.get_current_raideventconfig(model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent(self, cur_eventmaster, config) # レイド情報. obj_happening = Objects.happening(self, happeningraidset) self.html_param['happening'] = obj_happening # 実行リンク 等倍と3倍. url = UrlMaker.raiddo(raidboss.id, v_player.req_confirmkey) self.html_param['url_exec'] = self.makeAppLinkUrl(url) self.html_param['url_exec_strong'] = self.makeAppLinkUrl(OSAUtil.addQuery(url, Defines.URLQUERY_STRONG, 1)) # 諦める. self.html_param['url_happeningcancel_yesno'] = self.makeAppLinkUrl(UrlMaker.happeningcancel_yesno()) # 初心者フラグ. is_beginer = BackendApi.check_raidevent_beginer(model_mgr, uid, cur_eventmaster, config, using=settings.DB_READONLY) self.html_param['is_beginer'] = is_beginer # イベントデータ. scorerecord = BackendApi.get_raidevent_scorerecord(model_mgr, mid, uid, using=settings.DB_READONLY) rank = BackendApi.get_raidevent_rank(cur_eventmaster.id, uid) rank_beginer = BackendApi.get_raidevent_rank(cur_eventmaster.id, uid, is_beginer=True) self.html_param['raideventscore'] = Objects.raidevent_score(cur_eventmaster, scorerecord, rank, rank_beginer) # 特攻カード. BackendApi.put_raidevent_specialcard_info(self, uid, raideventraidmaster, using=settings.DB_READONLY) # このページに戻ってくるリンク. self.setFromPage(Defines.FromPages.HAPPENING, happeningset.id) BackendApi.put_bprecover_uselead_info(self) self.html_param['url_deck_raid'] = self.makeAppLinkUrl(UrlMaker.deck_raid()) # デッキ情報. deckcardlist = self.getDeckCardList() self.putDeckParams(deckcardlist) self.execute_api() if func_put_attacklog: func_put_attacklog() if func_put_playerlist: func_put_playerlist() # 説明とランキングのリンク. url = UrlMaker.raidevent_top(mid) self.html_param['url_raidevent_top'] = self.makeAppLinkUrl(url) self.html_param['player'] = Objects.player(self, v_player) self.writeHtml(cur_eventmaster, 'bossappear')
def procDetail(self, helplog): """詳細. """ model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() # レイド情報. raidboss = BackendApi.get_raid(model_mgr, helplog.raidid, using=settings.DB_READONLY, get_instance=True) is_owner = v_player.id == raidboss.raid.oid if not (is_owner or v_player.id in raidboss.getDamageRecordUserIdList()): # 閲覧できない. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.happening())) return damagerecord = raidboss.getDamageRecord(v_player.id) is_cleared = raidboss.raid.hp == 0 is_canceled = False prizelist = None # ハプニング情報. happeningset = BackendApi.get_happening(model_mgr, raidboss.id, using=settings.DB_READONLY) if happeningset is None: BackendApi.save_raidlog_idlist(model_mgr, v_player.id, using=settings.DB_READONLY) url = UrlMaker.raidloglist() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # イベント情報を設定. BackendApi.reset_raidboss_eventraidmaster(model_mgr, raidboss, happeningset.happening.event, using=settings.DB_READONLY) raideventmaster = None excludes = None raideventid = HappeningUtil.get_raideventid( happeningset.happening.event) if raideventid: raideventmaster = BackendApi.get_raideventmaster( model_mgr, raideventid, using=settings.DB_READONLY) destroypoint_info = None if is_cleared: bonusscore = 0 if happeningset.happening.oid == v_player.id: specialscore_obj = BackendApi.get_model( model_mgr, RaidEventSpecialBonusScoreLog, raidboss.id, using=settings.DB_READONLY) if isinstance(specialscore_obj, RaidEventSpecialBonusScoreLog): bonusscore = specialscore_obj.bonusscore else: _helpbonusscore = BackendApi.get_raidevent_helpspecialbonusscore( raidboss.id, v_player.id, using=settings.DB_DEFAULT) if isinstance(_helpbonusscore, RaidEventHelpSpecialBonusScore): bonusscore = _helpbonusscore.bonusscore destroypoint_info = BackendApi.make_raidevent_destroypoint_info( model_mgr, v_player.id, raideventmaster, HappeningRaidSet(happeningset, raidboss), bonusscore, using=settings.DB_READONLY) # MVP. mvp_uidlist = raidboss.getMVPList() self.html_param['mvp_uidlist'] = mvp_uidlist self.html_param['destroy_time'] = helplog.ctime # イベント情報. config = BackendApi.get_current_raideventconfig( model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent( self, raideventmaster, config) # シャンパン. if 0 < damagerecord.champagne_num_add: self.html_param[ 'champagne_num_pre'] = damagerecord.champagne_num_pre self.html_param[ 'champagne_num_post'] = damagerecord.champagne_num_post self.html_param[ 'champagne_num_add'] = damagerecord.champagne_num_add # 素材. if 0 < damagerecord.material_num: materials = raideventmaster.getMaterialDict() material_id = materials.get( raidboss.raideventraidmaster.material) if material_id: materialmaster = BackendApi.get_raidevent_materialmaster( model_mgr, material_id, using=settings.DB_READONLY) materialnumdata = BackendApi.get_raidevent_materialdata( model_mgr, v_player.id, using=settings.DB_READONLY) obj = Objects.raidevent_material( self, materialmaster, materialnumdata.getMaterialNum( raideventid, raidboss.raideventraidmaster.material)) obj['num_add'] = damagerecord.material_num self.html_param['material'] = obj self.html_param['destroypoint_info'] = destroypoint_info elif raidboss.scouteventraidmaster: scouteventid = raidboss.scouteventraidmaster.eventid tanzaku_number = raidboss.get_tanzaku_number(v_player.id) tanzakumaster = BackendApi.get_scoutevent_tanzakumaster( model_mgr, scouteventid, tanzaku_number, using=settings.DB_READONLY ) if tanzaku_number is not None else None if tanzakumaster is not None: # 短冊. self.html_param[ 'scoutevent_tanzaku'] = Objects.scoutevent_tanzaku( self, tanzakumaster) self.html_param[ 'tanzaku_num_pre'] = damagerecord.tanzaku_num_pre self.html_param[ 'tanzaku_num_post'] = damagerecord.tanzaku_num_post self.html_param['tanzaku_num_add'] = damagerecord.tanzaku_num if raideventmaster or RaidBoss.RAIDEVENT_PRIZE_UPDATETIME <= happeningset.happening.ctime: if is_cleared: # 報酬. prizelist = [] if is_owner: # 発見者. if raideventmaster: cabaretking = raidboss.get_cabaretking() if 0 < cabaretking: prizelist.append( PrizeData.create(cabaretking=cabaretking)) prizelist.extend( BackendApi.get_prizelist(model_mgr, raidboss.master.prizes, using=settings.DB_READONLY)) prizelist.extend( BackendApi.aggregate_happeningprize( happeningset.happening)) elif 0 < damagerecord.damage_cnt: # 救援者. if raideventmaster: demiworld = raidboss.get_demiworld() if 0 < demiworld: prizelist.append( PrizeData.create(demiworld=demiworld)) prizelist = BackendApi.get_prizelist( model_mgr, raidboss.master.helpprizes, using=settings.DB_READONLY) elif happeningset.happening.is_canceled( ) and v_player.id == happeningset.happening.oid: # キャンセル. prizelist = BackendApi.aggregate_happeningprize( happeningset.happening, cancel=True) is_canceled = True # ダメージ履歴. func_put_attacklog = self.putRaidAttackLog(raidboss, excludes=excludes) prizeinfo = None if prizelist: prizeinfo = BackendApi.make_prizeinfo(self, prizelist, using=settings.DB_READONLY) persons = {} dmmid = '' if not is_owner: o_players = BackendApi.get_players(self, [happeningset.happening.oid], [], using=settings.DB_READONLY) if o_players: o_player = o_players[0] dmmid = o_player.dmmid persons = BackendApi.get_dmmplayers(self, o_players, using=settings.DB_READONLY, do_execute=False) self.html_param['player'] = Objects.player(self, v_player) self.html_param['is_cleared'] = is_cleared self.html_param['is_canceled'] = is_canceled self.execute_api() self.html_param['happening'] = Objects.happening( self, HappeningRaidSet(happeningset, raidboss), prizeinfo, o_person=persons.get(dmmid)) if func_put_attacklog: func_put_attacklog() self.setFromPage(Defines.FromPages.RAIDLOG, helplog.id) self.html_param['url_trade'] = self.makeAppLinkUrl(UrlMaker.trade(), add_frompage=True) self.writeHtmlSwitchEvent('log', eventmaster=raideventmaster, basedir_normal='raid')
def procResult(self, args): """ボス戦結果. """ model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() raidbattle = BackendApi.get_raid_battleresult( model_mgr, v_player.id, using=settings.DB_READONLY) if raidbattle is None: if settings_sub.IS_LOCAL: raise CabaretError(u'想定外の遷移です') url = UrlMaker.happening() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # レイド情報を取得. raidboss = BackendApi.get_raid(model_mgr, raidbattle.raidid, using=settings.DB_READONLY) if raidboss is None: raise CabaretError(u'超太客が存在しません', CabaretError.Code.NOT_DATA) animdata = raidbattle.process raidboss.raid.hp = animdata.bossHpPost if raidboss.raid.hp < 1: url = UrlMaker.raidend(raidbattle.raidid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 借りたカード. func_put_playerlist = None helpleadercard = raidbattle.getHelpCard() if helpleadercard: cardmaster = BackendApi.get_cardmasters( [helpleadercard.mid], model_mgr, using=settings.DB_READONLY).get(helpleadercard.mid) helpleader = CardSet(helpleadercard, cardmaster) func_put_playerlist = self.putPlayerListByLeaderList( raidbattle.raidid, [helpleader]) # 与えたダメージ. self.html_param['damage'] = animdata.bossDamage specialcard_powup = getattr(animdata, 'specialcard_powup', 0) str_specialcard_powup = None if 0 < specialcard_powup: str_specialcard_powup = '+%s' % specialcard_powup elif specialcard_powup < 0: str_specialcard_powup = '%s' % specialcard_powup self.html_param['specialcard_powup'] = str_specialcard_powup # 属性ボーナス. weak_powup = getattr(animdata, 'weak_powup', 0) str_weak_powup = None if 0 < weak_powup: str_weak_powup = '+%s' % weak_powup elif weak_powup < 0: str_weak_powup = '%s' % weak_powup self.html_param['weak_powup'] = str_weak_powup # 発動したスキル. self.html_param['skilllist'] = animdata.make_html_skilllist() # プレイヤー情報. self.html_param['player'] = Objects.player(self, v_player) # 救援のUrl(フレンド). url = UrlMaker.raidhelpsend() self.html_param['url_helpsend'] = self.makeAppLinkUrl(url) self.html_param['url_helpsend_other'] = self.makeAppLinkUrl( OSAUtil.addQuery(url, Defines.URLQUERY_FLAG, "1")) # ハプニング情報. happeningset = BackendApi.get_happening(model_mgr, raidboss.id, using=settings.DB_READONLY) func_happeninginfo_callback = self.putHappeningInfo(happeningset, raidboss, do_execute=False) func_put_attacklog = None is_event = False raideventmaster = None eventid = HappeningUtil.get_raideventid(happeningset.happening.event) if eventid: raideventmaster = BackendApi.get_raideventmaster( model_mgr, eventid, using=settings.DB_READONLY) if raideventmaster: # イベント情報. config = BackendApi.get_current_raideventconfig( model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent( self, raideventmaster, config) # ダメージ履歴. func_put_attacklog = self.putRaidAttackLog(raidboss) # イベント用の設定. eventraidmaster = BackendApi.get_raidevent_raidmaster( model_mgr, raideventmaster.id, raidboss.raid.mid, using=settings.DB_READONLY) BackendApi.put_raidevent_specialcard_info( self, v_player.id, eventraidmaster, using=settings.DB_READONLY) url = OSAUtil.addQuery( UrlMaker.gacha(), Defines.URLQUERY_CTYPE, Defines.GachaConsumeType.GachaTopTopic.TICKET) self.html_param['url_gacha_event'] = self.makeAppLinkUrl(url) self.html_param['url_raidevent_top'] = self.makeAppLinkUrl( UrlMaker.raidevent_top(raideventmaster.id)) is_event = True # 戻るUrl. if raidboss.raid.oid == v_player.id: # 発見者. if is_event: url = UrlMaker.raidevent_battlepre() else: url = UrlMaker.happening() else: # 救援者. url = UrlMaker.raidhelpdetail(raidboss.raid.id) self.html_param['url_return'] = self.makeAppLinkUrl(url, add_frompage=False) # デッキ情報. deckcardlist = self.getDeckCardList() self.__putDeckParams(deckcardlist) self.execute_api() func_happeninginfo_callback() if func_put_playerlist: func_put_playerlist() if func_put_attacklog: func_put_attacklog() eventid = HappeningUtil.get_raideventid(happeningset.happening.event) self.writeHtmlSwitchEvent('bosslose', eventid, eventmaster=raideventmaster)
url = UrlMaker.happeningend(happeningset.id) self.html_param['url_happeningend'] = self.makeAppLinkUrl(url) func_raidattacklog_callback = None url_scout_top = None raideventid = 0 if raidboss.raideventraidmaster: raideventid = raidboss.raideventraidmaster.eventid raideventmaster = BackendApi.get_raideventmaster( model_mgr, raideventid, using=settings.DB_READONLY) # レイドイベント. config = BackendApi.get_current_raideventconfig( model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent( self, raideventmaster, config) specialbonusscore = 0 if v_player.id == happeningset.happening.oid: specialbonusscore_model = model_mgr.get_model( RaidEventSpecialBonusScore, v_player.id) if isinstance(specialbonusscore_model, RaidEventSpecialBonusScore): specialbonusscore = specialbonusscore_model.last_happening_score else: # 救援かつ撃破者に特効ボーナスポイント付与する. specialbonusscore_model = BackendApi.get_raidevent_helpspecialbonusscore( raidboss.raid.id, v_player.id, using=settings.DB_DEFAULT) if isinstance(specialbonusscore_model, RaidEventHelpSpecialBonusScore): specialbonusscore = specialbonusscore_model.bonusscore
def process(self): args = self.getUrlArgs('/raidhelpdetail/') raidid = str(args.get(0, '')) if not raidid.isdigit(): if settings_sub.IS_LOCAL: raise CabaretError(u'レイドIDの指定がおかしい') self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.happening()), u'Illegal ID.') return raidid = int(raidid) model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() uid = v_player.id # レイド情報. raidboss = BackendApi.get_raid(model_mgr, raidid, using=settings.DB_READONLY) if raidboss is None: if settings_sub.IS_LOCAL: raise CabaretError(u'存在しないレイド') raidlog = BackendApi.get_raidlog_by_raidid(model_mgr, uid, raidid, using=settings.DB_READONLY) if raidlog: self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.raidlogdetail(raidlog.id)), u'Raid not Found.') else: self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.happening()), u'Raid not Found and Log not Found.') return elif raidboss.raid.oid == uid: if settings_sub.IS_LOCAL: raise CabaretError(u'自分のレイド') self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.happening()), u'Mine.') return happeningset = BackendApi.get_happening(model_mgr, raidid, using=settings.DB_READONLY) is_end = False if happeningset.happening.is_active(): # 参加可能かを確認. if not BackendApi.check_raid_joinable(model_mgr, raidboss, uid, using=settings.DB_READONLY): # もう一度開催確認. happeningset = BackendApi.get_happening(ModelRequestMgr(), raidid, using=settings.DB_DEFAULT) if happeningset.happening.is_active(): if settings_sub.IS_LOCAL: raise CabaretError(u'参加できないレイド') self.__redirectWithError(self.makeAppLinkUrlRedirect(UrlMaker.happening()), u'Cannot Join.') return else: # チェック中に終了した. is_end = True else: is_end = True BackendApi.reset_raidboss_eventraidmaster(model_mgr, raidboss, happeningset.happening.event, using=settings.DB_READONLY) # プレイヤー情報. self.html_param['player'] = Objects.player(self, v_player) # ダメージ履歴. func_put_attacklog = self.putRaidAttackLog(raidboss) # お助け. func_put_playerlist = self.putHelpFriend(raidboss) # ハプニング情報. o_players = BackendApi.get_players(self, [happeningset.happening.oid], [], using=settings.DB_READONLY) dmmid = '' if o_players: o_player = o_players[0] dmmid = o_player.dmmid persons = BackendApi.get_dmmplayers(self, o_players, using=settings.DB_READONLY, do_execute=False) else: persons = {} if not is_end: # デッキ情報. deckcardlist = self.getDeckCardList() self.putDeckParams(deckcardlist) self.execute_api() obj_happening = Objects.happening(self, HappeningRaidSet(happeningset, raidboss), o_person=persons.get(dmmid)) self.html_param['happening'] = obj_happening if func_put_attacklog or func_put_playerlist: if func_put_attacklog: func_put_attacklog() if func_put_playerlist: func_put_playerlist() self.setFromPage(Defines.FromPages.RAID, raidid) BackendApi.put_bprecover_uselead_info(self) self.html_param['url_deck_raid'] = self.makeAppLinkUrl(UrlMaker.deck_raid()) # 実行Url. url = UrlMaker.raiddo(raidboss.id, v_player.req_confirmkey) self.html_param['url_exec_strong'] = self.makeAppLinkUrl(OSAUtil.addQuery(url, Defines.URLQUERY_STRONG, 1)) self.html_param['url_exec'] = self.makeAppLinkUrl(url) self.html_param['url_trade'] = self.makeAppLinkUrl(UrlMaker.trade(), add_frompage=True) cur_eventmaster = BackendApi.get_current_raideventmaster(model_mgr, using=settings.DB_READONLY) eventid = HappeningUtil.get_raideventid(happeningset.happening.event) if cur_eventmaster and cur_eventmaster.id == eventid: # イベント情報. config = BackendApi.get_current_raideventconfig(model_mgr, using=settings.DB_READONLY) self.html_param['raidevent'] = Objects.raidevent(self, cur_eventmaster, config) # イベントデータ. scorerecord = BackendApi.get_raidevent_scorerecord(model_mgr, cur_eventmaster.id, uid, using=settings.DB_READONLY) rank = BackendApi.get_raidevent_rank(cur_eventmaster.id, uid) self.html_param['raideventscore'] = Objects.raidevent_score(cur_eventmaster, scorerecord, rank) # 特攻カード. raideventraidmaster = BackendApi.get_raidevent_raidmaster(model_mgr, cur_eventmaster.id, raidboss.master.id, using=settings.DB_READONLY) BackendApi.put_raidevent_specialcard_info(self, uid, raideventraidmaster, using=settings.DB_READONLY) self.html_param['url_raidevent_top'] = self.makeAppLinkUrl(UrlMaker.raidevent_top(cur_eventmaster.id)) self.html_param['is_end'] = is_end self.writeAppHtml('raidevent/bossappear') elif is_end: self.writeAppHtml('raid/helpend') else: self.writeAppHtml('raid/helpdetail')
def process(self): model_mgr = self.getModelMgr() config = BackendApi.get_current_raideventconfig(model_mgr, using=settings.DB_READONLY) args = self.getUrlArgs('/raideventtop/') mid = str(args.get(0)) eventmaster = None if mid and mid.isdigit(): mid = int(mid) elif config: mid = config.mid if mid: eventmaster = BackendApi.get_raideventmaster(model_mgr, mid, using=settings.DB_READONLY) if eventmaster is None: raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED) return cur_eventmaster = self.getCurrentRaidEvent(quiet=True) mid = eventmaster.id # 開催中判定. is_open = cur_eventmaster and cur_eventmaster.id == mid v_player = self.getViewerPlayer() uid = v_player.id scorerecord = BackendApi.get_raidevent_scorerecord(model_mgr, mid, uid, using=settings.DB_READONLY) flagrecord = BackendApi.get_raidevent_flagrecord(model_mgr, mid, uid, using=settings.DB_READONLY) # イベント情報. self.html_param['raidevent'] = Objects.raidevent(self, eventmaster, config) # 説明とランキングのリンク. self.putEventTopic(mid, 'top') if is_open: # 救援(1件だけ). func_raidhelp = self.putRaidHelpList(do_execute=False, limit=1) self.html_param['url_raidhelp_list'] = self.makeAppLinkUrl(UrlMaker.raidevent_helplist()) # 履歴(1件だけ). raidlogidlist = BackendApi.get_raidlog_idlist(model_mgr, v_player.id, 0, 1, using=settings.DB_READONLY) raidloglist = BackendApi.get_raidlogs(model_mgr, raidlogidlist, using=settings.DB_READONLY).values() func_raidlog = BackendApi.put_list_raidlog_obj(self, raidloglist) self.html_param['url_raidloglist'] = self.makeAppLinkUrl(UrlMaker.raidloglist()) # 発生中のレイド情報. happeningraidset = self.getHappeningRaidSet() happeningset = None if happeningraidset: happeningset = happeningraidset.happening if happeningset: # レイドがある. if (happeningset.happening.is_cleared() or happeningset.happening.is_missed_and_not_end()): # 未確認の結果がある. url = UrlMaker.raidresultanim(happeningset.id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return elif not happeningset.happening.is_end(): obj_happening = Objects.happening(self, happeningraidset) obj_happening['url_battlepre'] = self.makeAppLinkUrl(UrlMaker.raidevent_battlepre()) self.html_param['happening'] = obj_happening # デッキ編成へのリンクを上書き. self.setFromPage(Defines.FromPages.RAIDEVENT) self.html_param['url_deck_raid'] = self.makeAppLinkUrl(UrlMaker.deck_raid()) elif BackendApi.check_raidevent_lead_epilogue(model_mgr, uid, mid, using=settings.DB_READONLY): # EDを見ないといけない. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.raidevent_epilogue())) return # 報酬受取り判定. flag = False if scorerecord: if flagrecord is None: flagrecord = BackendApi.update_raideventflagrecord(model_mgr, eventmaster.id, uid, OSAUtil.get_datetime_max()) if scorerecord.destroy and BackendApi.choice_raidevent_notfixed_destroy_prizeids(eventmaster, scorerecord.destroy, flagrecord, False): flag = True elif scorerecord.destroy_big and BackendApi.choice_raidevent_notfixed_destroy_prizeids(eventmaster, scorerecord.destroy_big, flagrecord, True): flag = True if flag: self.html_param['url_raidevent_prizereceive'] = self.makeAppLinkUrl(UrlMaker.raidevent_prizereceive_do(mid, v_player.req_confirmkey)) # イベント秘宝所持数. # 討伐回数. rank = BackendApi.get_raidevent_rank(mid, uid) rank_beginer = BackendApi.get_raidevent_rank(mid, uid, is_beginer=True) self.html_param['raideventscore'] = Objects.raidevent_score(eventmaster, scorerecord, rank, rank_beginer) # イベントガチャのリンク. self.putEventGachaUrl() # 初心者フラグ. is_beginer = BackendApi.check_raidevent_beginer(model_mgr, uid, eventmaster, config, using=settings.DB_READONLY) self.html_param['is_beginer'] = is_beginer # ランキング. view_myrank = False view_beginer = self.request.get(Defines.URLQUERY_BEGINER) == "1" if not view_beginer or is_beginer: view_myrank = self.request.get(Defines.URLQUERY_FLAG) == "1" url_ranking = OSAUtil.addQuery(UrlMaker.raidevent_top(mid), Defines.URLQUERY_FLAG, "0") url_myrank = OSAUtil.addQuery(UrlMaker.raidevent_top(mid), Defines.URLQUERY_FLAG, "1") self.putRanking(uid, mid, view_myrank, url_ranking, url_myrank, view_beginer) # シャンパン. self.putChampagneData() # 素材. self.putMaterialHtml() # 交換所のURL. self.putRecipeUrl() if eventmaster.flag_dedicated_stage: # イベント専用ステージ情報. eventstageplaydata = BackendApi.get_raideventstage_playdata(model_mgr, mid, uid, using=settings.DB_READONLY) # 現在のステージ. cur_stagemaster = BackendApi.get_current_raideventstage_master(model_mgr, eventmaster, eventstageplaydata, using=settings.DB_READONLY) if cur_stagemaster is None: raise CabaretError(u'ステージが存在いません', CabaretError.Code.INVALID_MASTERDATA) # 現在のステージ情報. progress = eventstageplaydata.progress confirmkey = eventstageplaydata.confirmkey self.html_param['raideventstage'] = Objects.raidevent_stage(self, v_player, cur_stagemaster.stage, cur_stagemaster, progress, confirmkey) # イベント専用スカウトのTOPページへのリンク. self.html_param['url_raidevent_scouttop'] = self.makeAppLinkUrl(UrlMaker.raidevent_scouttop()) self.execute_api() if is_open: if func_raidhelp: func_raidhelp() func_raidlog() # イベント参加のKPIを保存. BackendApi.save_kpi_raidevent_join(uid, self.is_pc) self.writeHtml(eventmaster, 'top')