def putFriendInfos(self, o_player): """仲間関係の情報とか. """ v_player = self.getViewerPlayer() model_mgr = self.getModelMgr() # 仲間かどうか. self.html_param['is_friend'] = BackendApi.check_friend(v_player.id, o_player.id, model_mgr, using=settings.DB_READONLY) # 仲間申請中かどうか. self.html_param['did_send_friendrequest'] = BackendApi.check_friendrequest_send(v_player.id, o_player.id, model_mgr, using=settings.DB_READONLY) # 仲間申請を受けているかどうか. self.html_param['receive_friendrequest'] = BackendApi.check_friendrequest_receive(v_player.id, o_player.id, model_mgr, using=settings.DB_READONLY) # 仲間数. self.html_param['friend_num'] = BackendApi.get_friend_num(o_player.id, model_mgr, using=settings.DB_READONLY)
def procYesno(self, v_player, fid): """外す確認. """ model_mgr = self.getModelMgr() uid = v_player.id if not BackendApi.check_friend( uid, fid, model_mgr, using=settings.DB_READONLY): raise CabaretError(u'フレンドではありません', CabaretError.Code.NOT_DATA) playerlist = self.getObjPlayerList([fid]) if len(playerlist) == 0: raise CabaretError(u'存在しないプレイヤーです', CabaretError.Code.NOT_DATA) player = playerlist[0] player['url_friendremove'] = self.makeAppLinkUrl( UrlMaker.friendremove_do(fid)) self.html_param['player'] = player self.writeAppHtml('friend/removeyesno')
def process(self): v_player = self.getViewerPlayer() args = self.getUrlArgs('/greet/') oid = args.get(0, None) o_player = None if str(oid).isdigit(): playerlist = BackendApi.get_players(self, [int(oid)], [], using=settings.DB_READONLY) if playerlist: o_player = playerlist[0] if o_player is None: raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS) point_pre = v_player.gachapt point_post = v_player.gachapt errcode = 0 model_mgr = self.getModelMgr() is_friend = BackendApi.check_friend(v_player.id, o_player.id, model_mgr, using=settings.DB_READONLY) try: model_mgr = db_util.run_in_transaction(Handler.tr_write, v_player.id, o_player.id, is_friend) model_mgr.write_end() playergachapt = model_mgr.get_wrote_model(PlayerGachaPt, v_player.id) point_post = playergachapt.gachapt except CabaretError, e: if e.code in (CabaretError.Code.ALREADY_RECEIVED, CabaretError.Code.OVER_LIMIT): # 同じ相手へのあいさつは2時間に1度. # あいさつは1日に300回まで. errcode = e.code else: raise
def getSelectedFriendCard(self, raidid, do_set_default=True): """選択済みのリーダーカード. """ v_player = self.getViewerPlayer() if not BackendApi.raid_is_can_callfriend(v_player.id): BackendApi.delete_raidhelpcard(v_player.id) return None model_mgr = self.getModelMgr() cardset = BackendApi.get_raidhelpcard(model_mgr, v_player.id, raidid, using=settings.DB_READONLY) if cardset: if not BackendApi.check_friend(v_player.id, cardset.card.uid, model_mgr, using=settings.DB_READONLY): BackendApi.delete_raidhelpcard(v_player.id) cardset = None if cardset is None and do_set_default and not BackendApi.check_raidhelpcard_canceled(model_mgr, v_player.id, raidid, using=settings.DB_READONLY): cardlist = self.getFriendLeaderCardList(1) if cardlist: cardset = cardlist[0] BackendApi.save_raidhelpcard(model_mgr, v_player.id, raidid, cardset, using=settings.DB_READONLY) return cardset
def process(self): model_mgr = self.getModelMgr() v_player = self.getViewerPlayer() self.setFromPage(Defines.FromPages.BATTLE) # 結果データ. battleresult = BackendApi.get_battleresult(model_mgr, v_player.id, using=settings.DB_READONLY) if battleresult is None: # 結果が存在しない. if settings_sub.IS_LOCAL: raise CabaretError(u'結果がない') url = UrlMaker.battle() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return # 対戦相手. 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.battle() self.appRedirect(self.makeAppLinkUrlRedirect(url)) return obj_v_player, obj_o_player = self.getObjPlayerList( [v_player, o_player]) obj_v_player['power_total'] = battleresult.data['v_power'] obj_o_player['power_total'] = battleresult.data['o_power'] 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(v_player.id, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_receive( v_player.id, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass elif BackendApi.check_friendrequest_send(v_player.id, oid, arg_model_mgr=model_mgr, using=settings.DB_READONLY): pass else: self.html_param['is_friendrequest_ok'] = True data = battleresult.data self.html_param['resultdata'] = data # 獲得したアイテム. 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) # レベルアップしたカード. 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) # 続けて戦う. url = UrlMaker.battleoppselect(0) self.html_param['url_battlecontinue'] = self.makeAppLinkUrl(url) # html書き込み. if data['is_win']: # 金の鍵の獲得率. battleplayer = self.getBattlePlayer() rankmaster = self.getBattleRankMaster() self.html_param[ 'goldkey_rate'] = BackendApi.get_battle_goldkey_rate( model_mgr, battleplayer, rankmaster, using=settings.DB_READONLY) self.writeAppHtml('battle/battlewin') else: self.writeAppHtml('battle/battlelose')
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): args = self.getUrlArgs('/greet_complete/') oid = args.get(0, None) errcode = args.get(1, None) point_pre = args.get(2, None) point_post = args.get(3, None) logid = args.get(4, None) if not (str(oid).isdigit() and str(errcode).isdigit() and str(point_pre).isdigit() and str(point_post).isdigit()): raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS) oid = int(args.get(0, None)) errcode = int(args.get(1, None)) point_pre = int(args.get(2, None)) point_post = int(args.get(3, None)) if logid: logid = int(logid) o_player = BackendApi.get_players(self, [oid], [], using=settings.DB_READONLY) if o_player: o_player = o_player[0] else: raise CabaretError(u'不正なアクセスです', CabaretError.Code.ILLEGAL_ARGS) if not logid: url = UrlMaker.profile(o_player.id) url = self.makeAppLinkUrlRedirect(url) self.appRedirect(url) return persons = BackendApi.get_dmmplayers(self, [o_player], using=settings.DB_READONLY) self.html_param['person'] = Objects.person(self, o_player, persons.get(o_player.dmmid)) is_overlimit = False is_duplicate = False if errcode == CabaretError.Code.OK: pass elif errcode == CabaretError.Code.ALREADY_RECEIVED: is_duplicate = True elif errcode == CabaretError.Code.OVER_LIMIT: is_overlimit = True self.html_param['is_duplicate'] = is_duplicate self.html_param['is_overlimit'] = is_overlimit self.html_param['gacha_pt_pre'] = point_pre self.html_param['gacha_pt_post'] = point_post self.html_param['gacha_pt_add'] = point_post - point_pre url = UrlMaker.profile(oid) self.html_param['url_profile'] = self.makeAppLinkUrl(url) url = UrlMaker.greet_complete(o_player.id, errcode, point_pre, point_post, logid) self.html_param['url_self'] = self.makeAppLinkUrl(url) errtext = False comment = u'' if self.request.method == 'POST': comment = self.request.get(self.KEY_GREET_COMMENT) if comment == u'': errtext = True # コメントのバイト数で比較 if StrUtil.getByteLength(comment) > ( Defines.GREET_COMMENT_TEXT_MAX * 2): errtext = True if not errtext and self.is_pc: # JS API経由でtextidを取得済み textid = self.request.get(self.KEY_GREET_TEXTID) elif not errtext: data = InspectionPostRequestData() data.data = comment request = self.osa_util.makeApiRequest(ApiNames.InspectionPost, data) self.addAppApiRequest('inspection_start', request) ret_data = self.execute_api() result = ret_data['inspection_start'].get() if isinstance(result, InspectionData): textid = result.textId else: if not settings_sub.IS_LOCAL: errtext = True else: textid = '0000' if not errtext: v_player = self.getViewerPlayer() point_pre = v_player.gachapt point_post = v_player.gachapt model_mgr = self.getModelMgr() is_friend = BackendApi.check_friend(v_player.id, o_player.id, model_mgr, using=settings.DB_READONLY) try: model_mgr = db_util.run_in_transaction( Handler.tr_write, v_player.id, o_player.id, is_friend, logid, textid) model_mgr.write_end() playergachapt = model_mgr.get_wrote_model( PlayerGachaPt, v_player.id) if playergachapt: point_post = playergachapt.gachapt except CabaretError, e: if e.code in (CabaretError.Code.NOT_DATA): url = UrlMaker.greet(o_player.id) url = self.makeAppLinkUrlRedirect(url) self.appRedirect(url) return else: raise errcode = 0 if point_pre >= point_post: errcode = CabaretError.Code.ALREADY_RECEIVED url = UrlMaker.greet_comment_comp(o_player.id, errcode, point_pre, point_post) url = self.makeAppLinkUrlRedirect(url) self.appRedirect(url) return