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 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 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')
# MVP. mvp_uidlist = raidboss.getMVPList() self.html_param['mvp_uidlist'] = mvp_uidlist # それ以外の協力したユーザー. func_raidattacklog_callback = self.putRaidAttackLog(raidboss) # 秘宝所持数. scorerecord = BackendApi.get_raidevent_scorerecord( model_mgr, raideventid, v_player.id, using=settings.DB_READONLY) rank = BackendApi.get_raidevent_rank(raideventid, v_player.id) self.html_param['raideventscore'] = Objects.raidevent_score( raideventmaster, scorerecord, rank) # 報酬受取り判定. flag = False flagrecord = BackendApi.get_raidevent_flagrecord( model_mgr, raideventid, v_player.id, using=settings.DB_READONLY) if scorerecord: if scorerecord.destroy and BackendApi.choice_raidevent_notfixed_destroy_prizeids( raideventmaster, scorerecord.destroy, flagrecord, False): flag = True elif scorerecord.destroy_big and BackendApi.choice_raidevent_notfixed_destroy_prizeids( raideventmaster, scorerecord.destroy_big, flagrecord, True):
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')