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
def putEventTopic(self, mid, cur_topic='top'): """eventbase.htmlのトピック用のパラメータを埋め込む. """ self.html_param['cur_topic'] = cur_topic # イベントTopのURL. url = UrlMaker.battleevent_top(mid) self.html_param['url_battleevent_top'] = self.makeAppLinkUrl(url) # イベント説明のURL. url = UrlMaker.battleevent_explain(mid) self.html_param['url_battleevent_explain'] = self.makeAppLinkUrl(url) # ランキングのURL. url = UrlMaker.battleevent_ranking(mid) self.html_param['url_battleevent_ranking'] = self.makeAppLinkUrl(url) table = ( 'detail', 'prizes', 'nomination', 'faq', ) for k in table: self.html_param['url_explain_%s' % k] = self.makeAppLinkUrl(UrlMaker.battleevent_explain(mid, k)) # 贈り物. if BackendApi.get_battleeventpresent_master_by_eventdid(self.getModelMgr(), mid, using=settings.DB_READONLY): self.html_param['url_battleevent_present'] = self.makeAppLinkUrl(UrlMaker.battleevent_present()) # ガチャページ. url = OSAUtil.addQuery(UrlMaker.gacha(), Defines.URLQUERY_GTYPE, Defines.GachaConsumeType.GTYPE_NAMES[Defines.GachaConsumeType.OMAKE]) self.html_param['url_battleevent_gacha'] = self.makeAppLinkUrl(url)
def __proc_prizes_battlepoint(self, eventmaster, is_opened): """ランク別バトルポイント達成報酬. """ model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() uid = v_player.id # 自分のランク. myrank = self.__get_myrank(eventmaster) # 選択したランク. rankmaster = self.__get_selected_rank(eventmaster, myrank) if rankmaster is None: # ランクが存在しない. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battleevent_top(eventmaster.id))) return # セレクトBOX. self.__put_rankmaster_list_for_selectbox(eventmaster, myrank) # 現在のポイント. rankscorerecord = BackendApi.get_battleevent_score_per_rank_record(model_mgr, uid, eventmaster.id, rankmaster.rank, using=settings.DB_READONLY) point = rankscorerecord.point if rankscorerecord else 0 self.html_param['point'] = point # 報酬. prizedatalist = self.__make_pointprizelist(rankmaster.battlepointprizes, point) self.html_param['pointprizelist'] = prizedatalist self.writeHtml(eventmaster, 'bpsuccessbonus')
def process(self): eventmaster = self.getCurrentBattleEvent() if not self.checkBattleEventUser(do_check_battle_open=False, do_check_loginbonus=False): return model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() uid = v_player.id # ランクレコード取得. rankrecord = self.getCurrentBattleRankRecord() # 更新確認. config = BackendApi.get_current_battleeventconfig( self.getModelMgr(), using=settings.DB_READONLY) now = OSAUtil.get_now() received_data = None if rankrecord.isNeedUpdate(config, now=now): # 書き込み. try: model_mgr, received_data = db_util.run_in_transaction( Handler.tr_write, eventmaster, uid, now) model_mgr.write_end() except CabaretError, err: if settings_sub.IS_LOCAL: raise err else: url = self.makeAppLinkUrlRedirect( UrlMaker.battleevent_top(eventmaster.id)) self.appRedirect(url) return
def checkBattleEventUser(self, do_check_opening=True, do_check_battle_open=True, do_check_regist=True, do_check_loginbonus=True, do_check_emergency=True): """ユーザーチェック. """ model_mgr = self.getModelMgr() if do_check_opening: uid = self.getViewerPlayer().id cur_eventmaster = self.getCurrentBattleEvent(quiet=True) if cur_eventmaster: if BackendApi.check_battleevent_lead_opening(model_mgr, uid, cur_eventmaster.id, using=settings.DB_READONLY): # オープニングを見ていない. url = UrlMaker.battleevent_opening() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return False config = BackendApi.get_current_battleeventconfig(model_mgr, using=settings.DB_READONLY) is_battleopen = self.isBattleOpen() if do_check_battle_open and not is_battleopen: # バトルが閉じている. url = UrlMaker.battleevent_top(config.mid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return False elif do_check_emergency and config.is_emergency: # 緊急停止. url = UrlMaker.battleevent_top(config.mid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return False else: cur_group = self.getCurrentBattleGroup(do_search_log=not is_battleopen) if do_check_regist and cur_group is None: # イベントに参加していない. if is_battleopen: url = UrlMaker.battleevent_regist() else: url = UrlMaker.battleevent_top(config.mid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return False elif do_check_loginbonus: rankrecord = self.getCurrentBattleRankRecord() if rankrecord and rankrecord.isNeedUpdate(config): url = UrlMaker.battleevent_loginbonus() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return False return True
def preprocess(self): BattleHandler.preprocess(self) self.__current_event = None self.__current_event_flagrecord = None self.__current_event_scorerecord = None self.__current_event_rankrecord = None self.__current_event_group = None # イベントTopのURL. url = UrlMaker.battleevent_top() self.html_param['url_battleevent_top'] = self.makeAppLinkUrl(url)
def process(self): model_mgr = self.getModelMgr() args = self.getUrlArgs('/battleeventresultanim/') eventid = args.getInt(0) rarity = args.getInt(1) piecenumber = args.getInt(2) is_complete = args.getInt(3) 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 swf_params = {} piecedata = battleresult.data.get('piecedata') if piecedata and not piecedata.get('is_item'): url = UrlMaker.battleevent_battlepiecepresent( eventid, piecedata['rarity'], piecedata['piece'], piecedata['is_complete']) else: url = UrlMaker.battleevent_battleresult(eventid) swf_params['backUrl'] = self.makeAppLinkUrl(url) # 結果によって演出を変更. data = battleresult.data if data['is_win']: self.appRedirectToEffect('youwin/effect.html', swf_params) else: self.appRedirectToEffect('youlose/effect.html', swf_params)
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 __proc_prizes_group_ranking(self, eventmaster, is_opened): """ランク別ランキング報酬. """ # 自分のランク. myrank = self.__get_myrank(eventmaster) # 選択したランク. rankmaster = self.__get_selected_rank(eventmaster, myrank) if rankmaster is None: # ランクが存在しない. self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battleevent_top(eventmaster.id))) return # セレクトBOX. self.__put_rankmaster_list_for_selectbox(eventmaster, myrank) # 報酬. prizedatalist = self.make_rankingprizelist(rankmaster.group_rankingprizes) self.html_param['rankingprizelist'] = prizedatalist self.writeHtml(eventmaster, 'daily_groupbonus')
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 now < config.endtime: cur_eventmaster = BackendApi.get_battleevent_master( model_mgr, config.mid, using=settings.DB_READONLY) if cur_eventmaster is None or not cur_eventmaster.is_goukon: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.mypage())) return v_player = self.getViewerPlayer() uid = v_player.id # 閲覧フラグを立てる. if BackendApi.check_battleevent_lead_scenario( model_mgr, uid, config.mid, using=settings.DB_READONLY): flagrecord = BackendApi.update_battleevent_flagrecord( cur_eventmaster.id, uid, scvtime=now) model_mgr.set_got_models([flagrecord]) # 演出のパラメータ. effectpath = '%s/event_nakaoshi/effect.html' % cur_eventmaster.effectname params = { 'backUrl': self.makeAppLinkUrl(UrlMaker.battleevent_top(cur_eventmaster.id)), 'pre': self.url_static + 'effect/sp/v2/%s/data/' % cur_eventmaster.effectname, 'logo_img': 'scenario/event_logo.png', 'logo_w_img': 'scenario/event_logo_w.png', } self.appRedirectToEffect(effectpath, params)
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.endtime < now: 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 v_player = self.getViewerPlayer() uid = v_player.id # EP閲覧フラグを立てる. if BackendApi.check_battleevent_lead_epilogue( model_mgr, uid, cur_eventmaster.id, using=settings.DB_READONLY): flagrecord = BackendApi.update_battleevent_flagrecord( cur_eventmaster.id, uid, epvtime=now) model_mgr.set_got_models([flagrecord]) url = UrlMaker.battleevent_top(cur_eventmaster.id) if cur_eventmaster.ed: # 演出のパラメータ. effectpath = UrlMaker.event_scenario() dataUrl = self.makeAppLinkUrlEffectParamGet( 'eventscenario/%d/last%s' % (cur_eventmaster.ed, url)) self.appRedirectToEffect2(effectpath, dataUrl) else: # 演出なし. self.appRedirect(self.makeAppLinkUrlRedirect(url))
def process(self): args = self.getUrlArgs('/battleeventbattleanim/') eventid = args.getInt(0) rarity = args.getInt(1) piecenumber = args.getInt(2) is_complete = args.getInt(3) if is_complete is None: is_complete = 0 if eventid is None: if settings_sub.IS_LOCAL: raise CabaretError(u'引数がおかしい') self.redirectToTop() return model_mgr = self.getModelMgr() 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 or not battleresult.anim: # 結果が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'結果がない') url = UrlMaker.battleevent_top(eventid) self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 演出用パラメータ. if (not rarity is None) and (not piecenumber is None) and (not is_complete is None): dataUrl = self.makeAppLinkUrlEffectParamGet('battleevent/%d/%d/%d/%d/' % (eventid, rarity, piecenumber, is_complete)) else: dataUrl = self.makeAppLinkUrlEffectParamGet('battleevent/%d/' % eventid) self.appRedirectToEffect2('battle2/effect2.html', dataUrl)
'rank_next': rankrecord.rank, } basetime = DateTimeUtil.toLoginTime(OSAUtil.get_now()) yesterday = datetime.date(basetime.year, basetime.month, basetime.day) - datetime.timedelta(days=1) target_grouplog = None for grouplog in BackendApi.get_battleevent_grouplog_dict( model_mgr, rankrecord.groups, using=settings.DB_READONLY).values(): if grouplog.cdate == yesterday: target_grouplog = grouplog break if target_grouplog is None: url = self.makeAppLinkUrlRedirect( UrlMaker.battleevent_top(eventmaster.id)) self.appRedirect(url) return elif eventmaster.is_goukon: # 合コンでは演出はない. if self.getFromPageName() == Defines.FromPages.BATTLEEVENT: args = self.getFromPageArgs() mid = int(args[0]) if args and str(args[0]).isdigit() else None url = self.makeAppLinkUrlRedirect( UrlMaker.battleevent_top(mid)) else: url = self.makeAppLinkUrlRedirect(UrlMaker.mypage()) self.appRedirect(url) return elif received_data is None: url = self.makeAppLinkUrlRedirect(
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'))
def process(self): v_player = self.getViewerPlayer() uid = v_player.id eventmaster = self.getCurrentBattleEvent() if not self.checkBattleEventUser(do_check_battle_open=False): return model_mgr = self.getModelMgr() group = self.getCurrentBattleGroup(do_search_log=True) page = int(self.request.get(Defines.URLQUERY_PAGE) or 0) rankmaster = BackendApi.get_battleevent_rankmaster_byId(model_mgr, group.rankid, using=settings.DB_READONLY) if rankmaster is None: self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battleevent_top(eventmaster.id))) return now = OSAUtil.get_now() eventid = eventmaster.id if isinstance(group, BattleEventGroupLog): userdatalist = group.userdata else: scorerecords = BackendApi.get_battleevent_scorerecord_dict(model_mgr, eventid, group.useridlist[:], get_instance=True, using=settings.DB_READONLY) scorerecord_list = scorerecords.values() scorerecord_list.sort(key=lambda x:x.getPointToday(now), reverse=True) userdatalist = [] pointpre = None for idx,scorerecord in enumerate(scorerecord_list): point = scorerecord.getPointToday(now) if pointpre is None or point < pointpre: rank = idx + 1 pointpre = point userdata = BattleEventGroupUserData.createByScoreRecord(scorerecord, rank, now) userdatalist.append(userdata) userdatalist.sort(key=lambda x:x.grouprank) nummax = len(userdatalist) offset = page * Handler.CONTENT_NUM_PER_PAGE targetlist = userdatalist[offset:(offset + Handler.CONTENT_NUM_PER_PAGE)] obj_playerlist = [] if targetlist: uidlist = [data.uid for data in targetlist] playerlist = BackendApi.get_players(self, uidlist, [PlayerExp], using=settings.DB_READONLY) obj_player_dict = dict([(obj_player['id'], obj_player) for obj_player in self.getObjPlayerList(playerlist)]) for data in targetlist: obj_player = obj_player_dict.get(data.uid) if obj_player: obj_player['event_rank'] = data.grouprank obj_player['event_score'] = data.point obj_player['is_me'] = uid == data.uid obj_playerlist.append(obj_player) self.html_param['playerlist'] = obj_playerlist self.putPagenation(UrlMaker.battleevent_group(), page, nummax, Handler.CONTENT_NUM_PER_PAGE) self.putEventTopic(eventid) rankrecord = BackendApi.get_battleevent_rankrecord(model_mgr, rankmaster.eventid, uid, using=settings.DB_READONLY) self.html_param['battleevent_rank'] = Objects.battleevent_rank(self, rankrecord, rankmaster, group) if eventmaster.is_goukon: self.writeAppHtml('gcevent/grouprank') else: self.writeAppHtml('btevent/grouprank')
except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass elif settings_sub.IS_LOCAL: raise err else: url = self.makeAppLinkUrlRedirect(UrlMaker.battleevent_opplist()) self.appRedirect(url) return elif v_player.req_alreadykey == confirmkey: # 処理済みのリクエスト. pass else: # おかしなリクエスト. model_mgr.delete_models_from_cache(PlayerRequest, [uid]) self.appRedirect(self.makeAppLinkUrlRedirect(UrlMaker.battleevent_top(eventmaster.id))) return url = UrlMaker.battleevent_battleanim(eventmaster.id) self.appRedirect(self.makeAppLinkUrlRedirect(url)) def tr_write(self, eventmaster, eventrankmaster, o_eventrankmaster, uid, oid, v_deck_cardidlist, o_deck_cardidlist, data, grouprank, is_worst, revengeid, confirmkey, now, rival_key): model_mgr = ModelRequestMgr() players = BackendApi.get_players(self, [uid, oid], [PlayerGold, PlayerExp, PlayerFriend], model_mgr=model_mgr) v_player = None o_player = None for player in players: if player.id == uid: v_player = player else: o_player = player
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')
model_mgr, eventid, using=settings.DB_READONLY) rankmaster_list.sort(key=lambda x: x.rank) try: db_util.run_in_transaction(self.tr_write, config, eventmaster, uid, v_player.level, rankmaster_list).write_end() except CabaretError, err: if err.code == CabaretError.Code.ALREADY_RECEIVED: pass else: url = UrlMaker.mypage() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return url = UrlMaker.battleevent_top() self.appRedirect(self.makeAppLinkUrlRedirect(url)) def tr_write(self, config, eventmaster, uid, level, rankmaster_list, target_rank=None): """書き込み. """ model_mgr = ModelRequestMgr() BackendApi.tr_battleevent_regist_group_for_user( model_mgr, config,