def procBattleClosed(self): """バトル終了. """ # ユーザの状態チェック. if not self.checkBattleEventUser(do_check_battle_open=False, do_check_regist=False, do_check_emergency=False): return model_mgr = self.getModelMgr() eventid = self.__eventmaster.id v_player = self.getViewerPlayer() uid = v_player.id # ランク情報. rankrecord = BackendApi.get_battleevent_rankrecord( model_mgr, eventid, uid, using=settings.DB_READONLY) if rankrecord and rankrecord.groups: groupnum = len(rankrecord.groups) for i in xrange(groupnum): index = groupnum - (i + 1) func_rankinfo = self.makeRankRecordObj( rankrecord, groupid=rankrecord.groups[index], player_num=2, do_execute=False) if func_rankinfo: def put_rankinfo(): self.html_param['battleevent_rank'] = func_rankinfo() self.addExecuteApiWork(put_rankinfo) break # スコア情報. scorerecord = BackendApi.get_battleevent_scorerecord( model_mgr, eventid, uid, using=settings.DB_READONLY) self.html_param['battleevent_score'] = self.makeScoreRecordObj( scorerecord) # グループの詳細へ. self.html_param['url_battleevent_group'] = self.makeAppLinkUrl( UrlMaker.battleevent_group())
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')
def procOpened(self): """開催中. """ # ユーザの状態チェック. if not self.checkBattleEventUser(do_check_battle_open=False, do_check_emergency=False): return model_mgr = self.getModelMgr() eventid = self.__eventmaster.id v_player = self.getViewerPlayer() uid = v_player.id if BackendApi.check_battleevent_lead_scenario( model_mgr, uid, eventid, using=settings.DB_READONLY): # 中押し演出を見ていない. url = UrlMaker.battleevent_scenario() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return False # ランク情報. rankrecord = BackendApi.get_battleevent_rankrecord( model_mgr, eventid, uid, using=settings.DB_READONLY) func_rankinfo = self.makeRankRecordObj(rankrecord, player_num=2, do_execute=False) # スコア情報. scorerecord = BackendApi.get_battleevent_scorerecord( model_mgr, eventid, uid, using=settings.DB_READONLY) rank_beginer = BackendApi.get_battleevent_rank(eventid, uid, is_beginer=True) obj_scorerecord = self.makeScoreRecordObj(scorerecord, rank_beginer=rank_beginer) self.html_param['battleevent_score'] = obj_scorerecord if func_rankinfo: def put_rankinfo(): obj_rankinfo = func_rankinfo() self.html_param['battleevent_rank'] = obj_rankinfo # グループ内ランキング報酬. prizeinfo = None if 0 < obj_scorerecord['point']: grouprank = obj_rankinfo['grouprankingdata']['rank'] rankmaster = BackendApi.get_battleevent_rankmaster( model_mgr, eventid, obj_rankinfo['rank'], using=settings.DB_READONLY) if rankmaster: prizeidlist = [] for data in rankmaster.group_rankingprizes: if not data.get('prize') or not (data['rank_min'] <= grouprank <= data['rank_max']): continue prizeidlist.extend(data.get('prize')) prizelist = BackendApi.get_prizelist( model_mgr, prizeidlist, using=settings.DB_READONLY) prizeinfo = BackendApi.make_prizeinfo( self, prizelist, using=settings.DB_READONLY) self.html_param['prize'] = prizeinfo self.addExecuteApiWork(put_rankinfo) # グループの詳細へ. self.html_param['url_battleevent_group'] = self.makeAppLinkUrl( UrlMaker.battleevent_group()) url = UrlMaker.battleevent_explain(eventid, 'prizes') self.html_param['url_prizes_group_ranking'] = self.makeAppLinkUrl( OSAUtil.addQuery(url, Defines.URLQUERY_CTYPE, 'group_ranking')) # バトルTOPへ. self.html_param['url_battleevent_opplist'] = self.makeAppLinkUrl( UrlMaker.battleevent_opplist())