def process(self): eventmaster = self.getCurrentBattleEvent() if not self.checkBattleEventUser(): return args = self.getUrlArgs('/battleeventopplist/') target = args.get(0) table = { 'revenge': self.procRevenge, } func = table.get(target, None) if func is None: func = self.procLevel target = 'lv' func(eventmaster, args) if self.response.isEnd: return v_player = self.getViewerPlayer() # バトルイベント. self.html_param['battleevent'] = Objects.battleevent(self, eventmaster) # 選択中の項目. self.html_param['cur_topic'] = target # 連勝数の表示. model_mgr = self.getModelMgr() user_cvictory_count = BackendApi.get_battleevent_continue_victory( model_mgr, v_player.id, eventmaster.id, using=settings.DB_READONLY).count self.put_user_continue_victory_data(user_cvictory_count) # リンク. self.html_param['url_battleevent_opplist_lv'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist('lv')) self.html_param[ 'url_battleevent_opplist_revenge'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist('revenge')) self.html_param[ 'url_battleevent_opplist_update'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist(target, True)) if eventmaster.is_goukon: self.writeAppHtml('gcevent/battletop') else: self.writeAppHtml('btevent/battletop')
def process(self): args = self.getUrlArgs('/battleeventexplain/') eventid = args.getInt(0) ope = args.get(1) model_mgr = self.getModelMgr() eventmaster = None if eventid: eventmaster = BackendApi.get_battleevent_master(model_mgr, eventid, using=settings.DB_READONLY) if eventmaster is None: raise CabaretError(u'閲覧できないイベントです', CabaretError.Code.ILLEGAL_ARGS) v_player = self.getViewerPlayer() uid = v_player.id # 開催中判定. cur_eventmaster = self.getCurrentBattleEvent(quiet=True) if cur_eventmaster and cur_eventmaster.id == eventid: is_opened = True do_check_loginbonus = not cur_eventmaster.is_goukon if not self.checkBattleEventUser(do_check_battle_open=False, do_check_regist=False, do_check_emergency=False, do_check_loginbonus=do_check_loginbonus): return else: is_opened = False self.html_param['is_opened'] = is_opened # イベント情報. self.html_param['battleevent'] = Objects.battleevent(self, eventmaster) # スコア. scorerecord = BackendApi.get_battleevent_scorerecord(model_mgr, eventid, uid, using=settings.DB_READONLY) rank = BackendApi.get_battleevent_rank(eventid, uid) self.html_param['battleevent_score'] = Objects.battleevent_score(self, scorerecord, rank) self.putEventTopic(eventid, '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.battleevent_explain(eventid, k)) table.get(ope, self.__proc_detail)(eventmaster, is_opened)
def process(self): self.setFromPage(None) v_player = self.getViewerPlayer() battleplayer = self.getBattlePlayer() if battleplayer is None or not battleplayer.lpvtime or OSAUtil.get_now( ) <= battleplayer.lpvtime: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battlelp())) return # 現在のランク. rankmaster = self.getBattleRankMaster() # プレイヤー. self.html_param['player'] = Objects.player(self, v_player) # バトル情報. self.html_param['battleplayer'] = Objects.battleplayer( self, battleplayer, rankmaster) # 対戦相手検索のUrl. self.html_param['url_battlepre'] = self.makeAppLinkUrl( UrlMaker.battlepre()) # 気力回復のUrl. self.html_param['url_bprecover'] = self.makeAppLinkUrl( UrlMaker.bprecover()) # 最大ランク. model_mgr = self.getModelMgr() self.html_param['max_rank'] = BackendApi.get_battlerank_max( model_mgr, using=settings.DB_READONLY) # 鍵情報. self.html_param['treasurekey'] = Objects.key(self, v_player) # イベント開催中判定. cur_eventmaster = BackendApi.get_current_battleevent_master( model_mgr, using=settings.DB_READONLY) self.html_param['battleevent'] = Objects.battleevent( self, cur_eventmaster) if cur_eventmaster else None self.html_param['url_battleevent_top'] = self.makeAppLinkUrl( UrlMaker.battleevent_top()) # 書き込み. self.writeAppHtml('battle/battle')
def process(self): args = self.getUrlArgs('/battleeventteaser/') mid = args.getInt(0) def redirectToMypage(): self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage())) model_mgr = self.getModelMgr() now = OSAUtil.get_now() config = BackendApi.get_current_battleeventconfig(model_mgr, using=settings.DB_READONLY) mid = mid or config.mid eventmaster = BackendApi.get_battleevent_master(model_mgr, config.mid, using=settings.DB_READONLY) if eventmaster is None or not eventmaster.is_goukon: # 合コンイベントじゃない. redirectToMypage() return # ティザー期間判定. is_teaser_open = config.mid == mid and now < config.starttime self.html_param['is_teaser_open'] = is_teaser_open # イベント情報. self.html_param['battleevent'] = Objects.battleevent(self, eventmaster, now) if is_teaser_open: # ティザー期間中. v_player = self.getViewerPlayer() rankrecord = BackendApi.get_battleevent_rankrecord(model_mgr, eventmaster.id, v_player.id, using=settings.DB_READONLY) if rankrecord: # 登録済み. self.__procRegistered(config, eventmaster, rankrecord) else: self.__procNotRegistered(config, eventmaster) if self.response.isEnd: return self.writeAppHtml('gcevent/teaser_info')
def process(self): args = self.getUrlArgs('/battleeventranking/') eventid = args.getInt(0) view_myrank = args.getInt(1) == 1 model_mgr = self.getModelMgr() eventmaster = None if eventid: eventmaster = BackendApi.get_battleevent_master( model_mgr, eventid, using=settings.DB_READONLY) if eventmaster is None: if settings_sub.IS_LOCAL: raise CabaretError(u'引数がおかしい') self.redirectToTop() return # 開催中判定. cur_eventmaster = self.getCurrentBattleEvent(quiet=True) if cur_eventmaster and cur_eventmaster.id == eventid: is_opened = True if not self.checkBattleEventUser(do_check_battle_open=False, do_check_regist=False, do_check_emergency=False): return else: is_opened = False self.html_param['is_opened'] = is_opened # イベント情報. self.html_param['battleevent'] = Objects.battleevent(self, eventmaster) self.putEventTopic(eventid, 'ranking') v_player = self.getViewerPlayer() uid = v_player.id url_battleevent_ranking = UrlMaker.battleevent_ranking(eventid, False) url_battleevent_myrank = UrlMaker.battleevent_ranking(eventid, True) # 初心者判定. is_beginer = BackendApi.check_battleevent_beginer( model_mgr, uid, eventmaster, 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 self.putRanking(uid, eventid, view_myrank, url_battleevent_ranking, url_battleevent_myrank, view_beginer=view_beginer) if eventmaster.is_goukon: self.writeAppHtml('gcevent/ranking') else: self.writeAppHtml('btevent/ranking')
def process(self): model_mgr = self.getModelMgr() args = self.getUrlArgs('/battleeventbattleresult/') eventid = args.getInt(0) eventmaster = None if eventid: eventmaster = BackendApi.get_battleevent_master( model_mgr, eventid, using=settings.DB_READONLY) if eventmaster is None: if settings_sub.IS_LOCAL: raise CabaretError(u'引数がおかしい') self.redirectToTop() return v_player = self.getViewerPlayer() uid = v_player.id # 結果データ. battleresult = BackendApi.get_battleevent_battleresult( model_mgr, eventid, uid, using=settings.DB_READONLY) if battleresult is None: # 結果が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'結果がない') url = UrlMaker.battleevent_top(eventid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return self.setFromPage(Defines.FromPages.BATTLEEVENTPRE) data = battleresult.data # 対戦相手. oid = battleresult.oid arr = BackendApi.get_players(self, [oid], [PlayerExp], using=settings.DB_READONLY) o_player = arr[0] if arr else None if o_player is None: # 相手が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'相手が存在しない') url = UrlMaker.battleevent_top(eventid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return obj_v_player, obj_o_player = self.getObjPlayerList( [v_player, o_player]) rival_key = BackendApi.get_rival_key(oid, eventid, args) self.html_param['resultdata'] = data obj_v_player['power_total'] = data['v_power'] obj_o_player['power_total'] = data['o_power'] obj_v_player['sp_powup'] = (data.get('v_sp_powup') or 0) * data['fever_powerup_rate'] / 100 obj_o_player['sp_powup'] = data.get('o_sp_powup') or 0 obj_v_player['spt_powup'] = (data.get('v_spt_powup') or 0) * data['fever_powerup_rate'] / 100 obj_o_player['spt_powup'] = data.get('o_spt_powup') or 0 obj_v_player['skilllist'] = battleresult.anim.make_html_skilllist(True) obj_o_player['skilllist'] = battleresult.anim.make_html_skilllist( False) self.html_param['player'] = obj_v_player self.html_param['o_player'] = obj_o_player if BackendApi.check_friend(uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_receive( uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_send(uid, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass else: self.html_param['is_friendrequest_ok'] = True # 獲得したアイテム. prizes = data.get('prizes') if prizes: prizelist = BackendApi.get_prizelist(model_mgr, prizes, using=settings.DB_READONLY) self.html_param['prize'] = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) battle_ticket_num = self.get_base_battle_ticket_num(data) self.html_param['battle_ticket_num'] = battle_ticket_num self.html_param[ 'battle_ticket_bonus'] = self.get_player_battle_ticket_bonus( model_mgr, uid, battle_ticket_num, eventmaster) # レベルアップしたカード. obj_lebelupcardlist = [] levelupcardlist = BackendApi.get_cards(battleresult.levelupcard.keys(), model_mgr, using=settings.DB_READONLY) for levelupcard in levelupcardlist: obj_card = Objects.card(self, levelupcard) obj_card['level_add'] = battleresult.levelupcard.get( levelupcard.id, 0) obj_lebelupcardlist.append(obj_card) self.html_param['levelupcardlist'] = obj_lebelupcardlist # 回復アイテム. BackendApi.put_bprecover_uselead_info(self) # 獲得したポイント. scorerecord = BackendApi.get_battleevent_scorerecord( model_mgr, eventid, uid, using=settings.DB_READONLY) self.html_param['battleevent_score'] = self.makeScoreRecordObj( scorerecord, battleresult) # 特効キャスト分のポイント. effect_percent = data.get('effp', 0) if 0 < effect_percent: point_add = data['eventpoint'] point_base = int(point_add * 100 / (effect_percent + 100)) self.html_param['effect_point'] = point_add - point_base # 現在の贈り物情報を確認. presentdata = BackendApi.get_battleeventpresent_pointdata( model_mgr, uid, eventid, using=settings.DB_READONLY) if presentdata: cur_data = presentdata.getData() presentmaster = BackendApi.get_battleeventpresent_master( model_mgr, eventid, cur_data['number'], using=settings.DB_READONLY) self.html_param[ 'is_present_open'] = presentmaster.point <= presentdata.point else: self.html_param['is_present_open'] = False # トピック. self.putEventTopic(eventid) # 続けて競う. target = 'revenge' if data.get('revenge') else 'lv' self.html_param['url_battlecontinue'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist(target, do_update=True)) # グループ詳細. self.html_param['url_battleevent_group'] = self.makeAppLinkUrl( UrlMaker.battleevent_group()) self.html_param["battleevent"] = Objects.battleevent( self, eventmaster) if data['is_win']: piecedata = battleresult.data.get('piecedata') if piecedata: if piecedata.get('is_item'): # キャスト名. _, cardmaster = self.get_dirname_and_castname( eventid, piecedata['rarity']) # アイテム獲得. prizelist = BackendApi.get_prizelist( model_mgr, piecedata.get('item_prizeids') or [], using=settings.DB_READONLY) self.html_param['piece_dropiteminfo'] = dict( cardmaster=Objects.cardmaster(self, cardmaster), prize=BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY)) else: self.put_drop_castname(model_mgr, eventid, piecedata['rarity'], piecedata['piece']) self.writeAppHtml( '%s/battlewin' % ('gcevent' if eventmaster.is_goukon else 'btevent')) else: self.writeAppHtml( '%s/battlelose' % ('gcevent' if eventmaster.is_goukon else 'btevent'))
class Handler(BattleEventBaseHandler): """バトルイベント参加. バトル公開中だけ受け付ける. バトル公開中にグループに所属していないユーザーが対象. 合コンイベントの時は登録ページ. """ @classmethod def getViewerPlayerClassList(cls): return [PlayerExp] def process(self): eventmaster = self.getCurrentBattleEvent() if not self.checkBattleEventUser(do_check_regist=False, do_check_loginbonus=False): return if eventmaster.is_goukon: self.__procGoukon(eventmaster) else: self.__procNormal(eventmaster) def __procGoukon(self, eventmaster): """合コンバトルイベント. """ model_mgr = self.getModelMgr() eventid = eventmaster.id basetime = DateTimeUtil.toLoginTime(OSAUtil.get_now()) cdate = datetime.date(basetime.year, basetime.month, basetime.day) cur_group = self.getCurrentBattleGroup(do_search_log=False) # 設定済みの場合はイベントTOPへリダイレクト. if cur_group and cur_group.cdate == cdate: url = UrlMaker.battleevent_top(eventmaster.id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 最大ランク. config = BackendApi.get_current_battleeventconfig( model_mgr, using=settings.DB_READONLY) # 公開中のランク. rankmaster_list = BackendApi.get_battleevent_rankmaster_by_eventid( model_mgr, eventid, using=settings.DB_READONLY) rankmaster_list.sort(key=lambda x: x.rank) # 未設定で引数がある場合は書き込み. rank = str(self.request.get(Defines.URLQUERY_ID)) if rank.isdigit(): rank = int(rank) # ランクの公開確認. target_rankmaster = None for rankmaster in rankmaster_list: if rankmaster.rank == rank: target_rankmaster = rankmaster break if target_rankmaster: # 登録書き込み. v_player = self.getViewerPlayer() uid = v_player.id try: db_util.run_in_transaction(self.tr_write, config, eventmaster, uid, v_player.level, rankmaster_list, rank).write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass elif settings_sub.IS_DEV: raise else: url = UrlMaker.mypage() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 書き込み後はイベントTOPへ. url = UrlMaker.battleevent_top(eventmaster.id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 未設定で引数がない場合は選択ページ. # イベント情報. self.html_param['battleevent'] = Objects.battleevent(self, eventmaster) # 各ランクの情報. obj_rank_list = [] rankmaster_list.sort(key=lambda x: x.rank, reverse=True) for rankmaster in rankmaster_list: obj_rank = BackendApi.make_battleevent_rank_selectobj( self, rankmaster) obj_rank_list.append(obj_rank) self.html_param['battleevent_rank_select'] = obj_rank_list # 書き込み実行URL. url = UrlMaker.battleevent_regist() self.html_param['url_do'] = self.makeAppLinkUrl(url) self.putEventTopic(eventmaster.id) self.writeAppHtml('gcevent/start')
def process(self): now = OSAUtil.get_now() model_mgr = self.getModelMgr() config = BackendApi.get_current_battleeventconfig( model_mgr, using=settings.DB_READONLY) cur_eventmaster = None if config.mid and config.starttime <= now < config.epilogue_endtime: cur_eventmaster = BackendApi.get_battleevent_master( model_mgr, config.mid, using=settings.DB_READONLY) if cur_eventmaster is None: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage())) return elif config.starttime <= now < config.endtime: self.checkBattleEventUser(do_check_battle_open=False, do_check_regist=False) if self.response.isEnd: return v_player = self.getViewerPlayer() uid = v_player.id # 現在の贈り物情報を確認. cur_number = None presentdata = BackendApi.get_battleeventpresent_pointdata( model_mgr, uid, cur_eventmaster.id, using=settings.DB_READONLY) if presentdata: cur_data = presentdata.getData() cur_number = cur_data['number'] self.html_param['cur_number'] = cur_number client = localcache.Client() key = 'battleeventpresent_contentlist:%s' % config.mid obj_contentlist = client.get(key) if obj_contentlist is None: presentmasterlist = BackendApi.get_battleeventpresent_master_by_eventdid( model_mgr, config.mid, using=settings.DB_READONLY).values() presentmasterlist.sort(key=lambda x: x.number) obj_contentlist = [] for presentmaster in presentmasterlist: tmp_dict = dict(presentmaster.contents) contentmasterlist = BackendApi.get_battleeventpresent_content_master_list( model_mgr, tmp_dict.keys(), using=settings.DB_READONLY) contentmasterlist.sort(key=lambda x: x.pri, reverse=True) prizeinfo_list = [] for contentmaster in contentmasterlist: prizelist = BackendApi.get_prizelist( model_mgr, contentmaster.prizes, using=settings.DB_READONLY) prizeinfo = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) prizeinfo['name'] = contentmaster.name prizeinfo_list.append(prizeinfo) obj = Objects.battleevent_present_content( self, presentmaster, prizeinfo_list) obj_contentlist.append(obj) client.set(key, obj_contentlist) self.html_param['battleeventpresent_contentlist'] = obj_contentlist # 贈り物確認のリンク. url = UrlMaker.battleevent_present() self.html_param['url_battleevent_present'] = self.makeAppLinkUrl(url) # イベント情報. self.html_param['battleevent'] = Objects.battleevent( self, cur_eventmaster, now) # HTML書き出し. self.writeAppHtml( '%s/presentlist' % ('gcevent' if cur_eventmaster.is_goukon else 'btevent'))
def process(self): eventmaster = self.getCurrentBattleEvent() if not self.checkBattleEventUser(): return args = self.getUrlArgs('/battleeventbattlepre/') oid = args.getInt(0) rival_index = BackendApi._check_is_rival_strings( oid, eventmaster.id, args) rival_key = BackendApi.get_rival_key(oid, eventmaster.id, args) if rival_key and rival_index == 2: revengeid = args.getInt(1) elif not rival_key: revengeid = args.getInt(1) else: revengeid = None v_player = self.getViewerPlayer() uid = v_player.id obj_v_player = None obj_o_player = None if oid: o_player = BackendApi.get_player(self, oid, [PlayerFriend, PlayerExp], using=settings.DB_READONLY) if o_player: tmp = self.getObjPlayerList([o_player, v_player]) for obj_player in tmp: if obj_player['id'] == oid: obj_o_player = obj_player elif obj_player['id'] == uid: obj_v_player = obj_player if tmp: obj_o_player = tmp[0] is_battle_ok = True if not obj_o_player: url = UrlMaker.battleevent_opplist() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return elif not self.checkOpponentId( oid, revengeid, do_redirect=revengeid, args=args): # 対戦できない相手. if revengeid: return is_battle_ok = False obj_o_player['is_battle_ok'] = is_battle_ok self.setFromPage(Defines.FromPages.BATTLEEVENTPRE, [oid, revengeid, rival_key]) # バトルイベント. self.html_param['battleevent'] = Objects.battleevent(self, eventmaster) # 各プレイヤーの情報. self.html_param['player'] = obj_v_player self.html_param['o_player'] = obj_o_player # ランク情報. rankrecord = self.getCurrentBattleRankRecord() obj_rankrecord = self.makeRankRecordObj(rankrecord) self.html_param['battleevent_rank'] = obj_rankrecord # 回復への導線. BackendApi.put_bprecover_uselead_info(self) # バトル開始URL. url = UrlMaker.battleevent_battledo(v_player.req_confirmkey, oid, revengeid, rival_key=rival_key) self.html_param['url_battle_do'] = self.makeAppLinkUrl(url) # 相手変更URL. target = 'revenge' if revengeid else 'lv' url = UrlMaker.battleevent_opplist(target) self.html_param['url_battle_oppselect'] = self.makeAppLinkUrl(url) # 書き込み. if eventmaster.is_goukon: self.writeAppHtml('gcevent/battleselect') else: self.writeAppHtml('btevent/battleselect')
def process(self): now = OSAUtil.get_now() model_mgr = self.getModelMgr() config = BackendApi.get_current_battleeventconfig( model_mgr, using=settings.DB_READONLY) cur_eventmaster = None if config.mid and config.starttime <= now < config.epilogue_endtime: cur_eventmaster = BackendApi.get_battleevent_master( model_mgr, config.mid, using=settings.DB_READONLY) if cur_eventmaster is None: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage())) return elif config.starttime <= now < config.endtime: self.checkBattleEventUser(do_check_battle_open=False, do_check_regist=False) if self.response.isEnd: return v_player = self.getViewerPlayer() uid = v_player.id view_result = self.request.get(Defines.URLQUERY_FLAG) == '1' # 現在の贈り物情報を確認. presentdata = BackendApi.get_battleeventpresent_pointdata( model_mgr, uid, cur_eventmaster.id, using=(settings.DB_DEFAULT if view_result else settings.DB_READONLY)) if presentdata is None: raise CabaretError(u'このイベントでは閲覧できません') cur_data = presentdata.getData() presentmaster = BackendApi.get_battleeventpresent_master( model_mgr, cur_eventmaster.id, cur_data['number'], using=settings.DB_READONLY) if presentmaster.point <= presentdata.point: # 達成済み. playerrequest = BackendApi.get_playerrequest(model_mgr, uid) url = UrlMaker.battleevent_presentreceive( playerrequest.req_confirmkey) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 結果表示フラグ. if view_result and presentdata.precontent: contentmaster = BackendApi.get_battleeventpresent_content_master( model_mgr, presentdata.precontent, using=settings.DB_READONLY) prizelist = BackendApi.get_prizelist(model_mgr, contentmaster.prizes, using=settings.DB_READONLY) self.html_param['prize'] = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) # 現在の贈り物情報. self.html_param['battleeventpresent'] = Objects.battleevent_present( self, presentmaster, presentdata) # イベント情報. self.html_param['battleevent'] = Objects.battleevent( self, cur_eventmaster, now) # 対戦相手一覧のリンク. url = UrlMaker.battleevent_opplist() self.html_param['url_battleevent_opplist'] = self.makeAppLinkUrl(url) # 報酬一覧のリンク. url = UrlMaker.battleevent_presentlist() self.html_param['url_battleevent_presentlist'] = self.makeAppLinkUrl( url) # HTML書き出し. self.writeAppHtml( '%s/present' % ('gcevent' if cur_eventmaster.is_goukon else 'btevent'))
def process(self): self.__execute_end_worklist = [] model_mgr = self.getModelMgr() config = BackendApi.get_current_battleeventconfig( model_mgr, using=settings.DB_READONLY) args = self.getUrlArgs('/battleeventtop/') eventid = str(args.get(0)) eventmaster = None if eventid and eventid.isdigit(): eventid = int(eventid) elif config: eventid = config.mid if eventid: eventmaster = BackendApi.get_battleevent_master( model_mgr, eventid, using=settings.DB_READONLY) if eventmaster is None: raise CabaretError(u'Event Closed.', CabaretError.Code.EVENT_CLOSED) return self.__eventmaster = eventmaster eventid = eventmaster.id cur_eventmaster = self.getCurrentBattleEvent(quiet=True) v_player = self.getViewerPlayer() uid = v_player.id is_open = cur_eventmaster and eventid == cur_eventmaster.id self.setFromPage(Defines.FromPages.BATTLEEVENT, eventid) if is_open: # 開催中. if self.isBattleOpen(): # バトルが開いている時. self.procOpened() else: # バトルが閉じている時. self.procBattleClosed() # イベント参加KPI保存. BackendApi.save_kpi_battleevent_join(uid, self.is_pc) else: self.procClosed() if self.response.isEnd: return self.html_param['player'] = Objects.player(self, v_player) # イベント情報. battleevent = Objects.battleevent(self, eventmaster) self.html_param['battleevent'] = battleevent # バトルチケットの使用期限 if is_open: self.html_param[ 'battle_ticket_expiry_date'] = self.get_battle_ticket_expiry_date( config.ticket_endtime) BackendApi.check_battleevent_piececollection_userdata_and_create( model_mgr, uid, eventid) self.html_param['allrarity_piece'] = self.create_piece_image_paths( uid, eventid) # トピック. self.putEventTopic(eventid) # バトル履歴. if not eventmaster.is_goukon: loglist = BackendApi.get_battleevent_battlelog_list( model_mgr, uid, limit=1, using=settings.DB_READONLY) if loglist: func_battleloginfo = BackendApi.make_battleevent_battleloginfo( self, loglist, do_execute=False) if func_battleloginfo: def put_battleloginfo(): self.html_param['battleloglist'] = func_battleloginfo() self.addExecuteApiWork(put_battleloginfo) # バトル履歴のリンク. self.html_param['url_battleevent_battlelog'] = self.makeAppLinkUrl( UrlMaker.battleevent_loglist()) tradeshop_urlparam = OSAUtil.addQuery( UrlMaker.trade(), Defines.URLQUERY_CTYPE, Defines.GachaConsumeType.GachaTopTopic.TICKET) self.html_param['url_battleticket_trade'] = self.makeAppLinkUrl( tradeshop_urlparam) battleticket = BackendApi.get_additional_gachaticket_nums( model_mgr, v_player.id, [Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET], using=settings.DB_READONLY) if battleticket: battle_ticket_num = battleticket[ Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET].num else: battle_ticket_num = 0 self.html_param['battleticket'] = { 'name': Defines.GachaConsumeType.NAMES[ Defines.GachaConsumeType.BATTLE_TICKET], 'num': battle_ticket_num, 'unit': Defines.ItemType.UNIT[Defines.ItemType.ADDITIONAL_GACHATICKET], } # グループ履歴のリンク. self.html_param['url_battleevent_grouplog'] = self.makeAppLinkUrl( UrlMaker.battleevent_grouploglist(eventid)) if not self.html_param.has_key('battleevent_rank'): # ランク情報がないのでデフォルトのを設定. if config.isFirstDay(): rankmaster = BackendApi.get_battleevent_rankmaster( model_mgr, eventid, eventmaster.rankstart, using=settings.DB_READONLY) else: rankmaster = BackendApi.get_battleevent_rankmaster( model_mgr, eventid, eventmaster.rankbeginer, using=settings.DB_READONLY) self.html_param['battleevent_rank'] = Objects.battleevent_rank( self, None, rankmaster, None) self.executeApiWithWork() # 初心者フラグ. is_beginer = BackendApi.check_battleevent_beginer( model_mgr, uid, eventmaster, config, using=settings.DB_READONLY) self.html_param['is_beginer'] = is_beginer # ユーザーデータのチェック, カウントの取得 user_cvictory_count = self.check_user_continue_victory_data( uid, eventid) self.put_user_continue_victory_data(user_cvictory_count) # ランキング. 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.battleevent_top(eventid), Defines.URLQUERY_FLAG, "0") url_myrank = OSAUtil.addQuery(UrlMaker.battleevent_top(eventid), Defines.URLQUERY_FLAG, "1") self.putRanking(uid, eventid, view_myrank, url_ranking, url_myrank, view_beginer=view_beginer) if eventmaster.is_goukon: self.writeAppHtml('gcevent/top') else: self.writeAppHtml('btevent/top')