def get_invite_award(rk_user,params): """新手的邀请奖励 """ invite_code = params['invite_code'] uid = _check_invite_code(rk_user,invite_code) friend_obj = Friend.get(rk_user.uid) if uid and not friend_obj.invite_info['inviter']: #记录邀请新手的老玩家信息 friend_obj.invite_info['inviter'] = uid friend_obj.put() data_log_mod.set_log('Invite', rk_user, inviter=uid, invited=rk_user.uid) #邀请者总邀请数增加 inviter_friend = Friend.get(uid) inviter_friend.invite_info['total_invited_usernum'] += 1 inviter_friend.record_invited_user(rk_user.uid,rk_user.user_property.lv) inviter_friend.put() #发邀请奖励 invited_award = game_config.invite_config['invited_award'] user_gift_obj = UserGift.get_instance(rk_user.uid) user_gift_obj.add_gift(invited_award,utils.get_msg('friend','invited_award_words')) else: if not uid: return 11,{'msg':utils.get_msg('friend', 'invalid_invite_code')} else: return 11,{'msg':utils.get_msg('friend', 'invite_code_only_once')} return 0,{}
def get_invite_award(rk_user, params): """新手的邀请奖励 """ invite_code = params["invite_code"] uid = _check_invite_code(rk_user, invite_code) friend_obj = Friend.get(rk_user.uid) if uid and not friend_obj.invite_info["inviter"]: # 记录邀请新手的老玩家信息 friend_obj.invite_info["inviter"] = uid friend_obj.put() data_log_mod.set_log("Invite", rk_user, inviter=uid, invited=rk_user.uid) # 邀请者总邀请数增加 inviter_friend = Friend.get(uid) inviter_friend.invite_info["total_invited_usernum"] += 1 inviter_friend.record_invited_user(rk_user.uid, rk_user.user_property.lv) inviter_friend.put() # 发邀请奖励 invited_award = game_config.invite_config["invited_award"] user_gift_obj = UserGift.get_instance(rk_user.uid) user_gift_obj.add_gift(invited_award, utils.get_msg("friend", "invited_award_words")) else: if not uid: return 11, {"msg": utils.get_msg("friend", "invalid_invite_code")} else: return 11, {"msg": utils.get_msg("friend", "invite_code_only_once")} return 0, {}
def clear_normal_dungeon(self,floor): """ 普通战场通关额外奖励 """ dungeon_clear_award = self.game_config.dungeon_world_config.get('dungeon_clear_award',{}) if floor in dungeon_clear_award: award = dungeon_clear_award[floor] user_gift_obj = UserGift.get_instance(self.uid) user_gift_obj.add_gift(award, utils.get_msg('dungeon','clear_dungeon', self))
def get_invite_friend_award(rk_user, params): """ 领取邀请好友的奖励 params: 'award_id':奖励id """ friend_obj = Friend.get(rk_user.uid) if not friend_obj: return 0, {} invite_award = game_config.invite_config["invite_award"] award_id = params.get("award_id") if award_id and award_id in invite_award: invite_info = friend_obj.invite_info # 已经领取过 if award_id in invite_info["got_invite_award"]: return 11, {"msg": utils.get_msg("friend", "invite_award_has_got")} invite_award_val = invite_award[award_id] need_lv = int(invite_award_val.get("lv", 1)) can_get = False if need_lv: need_lv_str = str(need_lv) if ( need_lv_str in invite_info["invite_users"] and len(invite_info["invite_users"][need_lv_str]) >= invite_award_val.get("invite_num", 0) and invite_award_val.get("award", {}) ): can_get = True else: if invite_info["total_invited_usernum"] >= invite_award_val.get("invite_num", 0) and invite_award_val.get( "award", {} ): can_get = True # can_get = True#测试需要暂时可以领取 if can_get: user_gift_obj = UserGift.get_instance(rk_user.uid) invite_info["got_invite_award"].append(award_id) friend_obj.put() user_gift_obj.add_gift(invite_award_val["award"], utils.get_msg("friend", "invite_award_words")) else: return 11, {"msg": utils.get_msg("friend", "invite_award_cannot_get")} else: return 11, {"msg": utils.get_msg("friend", "invite_award_err")} return 0, {}
def get_invite_friend_award(rk_user,params): """ 领取邀请好友的奖励 params: 'award_id':奖励id """ friend_obj = Friend.get(rk_user.uid) if not friend_obj: return 0,{} invite_award = game_config.invite_config['invite_award'] award_id = params.get('award_id') if award_id and award_id in invite_award: invite_info = friend_obj.invite_info #已经领取过 if award_id in invite_info['got_invite_award']: return 11,{'msg':utils.get_msg('friend', 'invite_award_has_got')} invite_award_val = invite_award[award_id] need_lv = int(invite_award_val.get('lv',1)) can_get = False if need_lv: need_lv_str = str(need_lv) if need_lv_str in invite_info['invite_users'] and \ len(invite_info['invite_users'][need_lv_str])>=invite_award_val.get('invite_num',0) and \ invite_award_val.get('award',{}): can_get = True else: if invite_info['total_invited_usernum'] >= invite_award_val.get('invite_num',0) and \ invite_award_val.get('award',{}): can_get = True #can_get = True#测试需要暂时可以领取 if can_get: user_gift_obj = UserGift.get_instance(rk_user.uid) invite_info['got_invite_award'].append(award_id) friend_obj.put() user_gift_obj.add_gift(invite_award_val['award'],utils.get_msg('friend','invite_award_words')) else: return 11,{'msg':utils.get_msg('friend', 'invite_award_cannot_get')} else: return 11,{'msg':utils.get_msg('friend', 'invite_award_err')} return 0,{}
def get_giftCode_gift(rk_user, params): """兑换礼品码 Args: gift_code: 礼品码 """ gift_keys = game_config.gift_config.get('gift_config', {}) if rk_user.client_type in settings.ANDROID_CLIENT_TYPE and 'is_open' in game_config.android_config: is_open = game_config.android_config.get('is_open', True) else: is_open = game_config.gift_config.get('is_open', True) if not is_open: msg = utils.get_msg('gift', 'gift_not_open') return 11, {'msg': msg} # 校验礼品码 gift_code = params['gift_code'] gift_code = gift_code.strip() gift_id = gift_code[:-5] if gift_id not in gift_keys: msg = utils.get_msg('gift', 'gift_code_not_exist') return 11, {'msg': msg} gift_conf = game_config.gift_config['gift_config'][gift_id] start_time = utils.string_toDatetime( gift_conf.get('start_time', '2013-05-29 00:00:00')) end_time = utils.string_toDatetime( gift_conf.get('end_time', '2020-05-29 00:00:00')) now_time = datetime.datetime.now() if now_time < start_time or now_time > end_time: return 11, {'msg': utils.get_msg('gift', 'gift_not_in_right_time')} gift_code_obj = GiftCode.get(gift_id) user_gift_obj = UserGift.get_instance(rk_user.uid) # 平台限制判断 gift_platform_list = gift_conf.get('platform_list', []) if gift_platform_list and rk_user.platform not in gift_platform_list: return 11, {'msg': utils.get_msg('gift', 'platform_not_allowed')} # 分区限制判断 gift_subarea_list = gift_conf.get('subarea_list', []) if gift_subarea_list and rk_user.subarea not in gift_subarea_list: return 11, {'msg': utils.get_msg('gift', 'subarea_not_allowed')} if gift_id in user_gift_obj.gift_code_type: return 11, {'msg': utils.get_msg('gift', 'this_type_already_get')} if not gift_code_obj or gift_code not in gift_code_obj.codes: return 11, {'msg': utils.get_msg('gift', 'gift_code_not_exist')} # 是否允许不同uid领取相同礼品码 recycling = gift_conf.get('recycling', False) if not recycling: if gift_code_obj.codes[gift_code]: return 11, {'msg': utils.get_msg('gift', 'gift_code_gived')} # 玩家是否已经领取了此礼品码 if not user_gift_obj.add_has_got_gift_code(gift_code): return 11, {'msg': utils.get_msg('gift', 'gift_code_gived')} # 记录该礼品码被最后一次领取的uid gift_code_obj.codes[gift_code] = rk_user.uid gift_code_obj.put() # 记录玩家已领的礼品码 user_gift_obj.gift_code_type.append(gift_id) # 发礼品 all_get_things = tools.add_things(rk_user, [{ '_id': thing_id, 'num': num } for thing_id, num in gift_conf.get('gift', {}).items()], where=u"giftCode_award") #对于可以升级获得的奖励 # if gift.get('lv_up_gift',{}): # user_gift_obj.add_lv_up_giftcode(gift_id) # user_gift_obj.get_giftcode_lv_up_award(gift_id) user_gift_obj.put() return {'get_info': all_get_things}
def add_gift(): ug = UserGift.get_instance(uid) ug.add_open_server_gift({'gold': 50, '1_card':1}, 8) ug.do_put()
def show_gift(): ug = UserGift.get_instance(uid) pprint(ug.gift_list)
from apps.models.user_cards import UserCards from apps.models.user_property import UserProperty from apps.models.user_dungeon import UserDungeon from apps.models.user_pack import UserPack from apps.models.user_property import UserProperty from apps.models.user_equips import UserEquips from apps.models.collection import UserCollection import json import copy import datetime from apps.common.utils import create_gen_id from apps.common import utils, tools import time from apps.models import data_log_mod from apps.models import GameModel ug = UserGift.get_instance(uid) rk_user = UserBase.get(uid) ul = rk_user.user_login def show_gift(): ug = UserGift.get_instance(uid) pprint(ug.gift_list) def add_gift(): ug = UserGift.get_instance(uid) ug.add_open_server_gift({'gold': 50, '1_card':1}, 8) ug.do_put() #add_gift() def get_gift():
def get_giftCode_gift(rk_user, params): """兑换礼品码 Args: gift_code: 礼品码 """ gift_keys = game_config.gift_config.get("gift_config", {}) if rk_user.client_type in settings.ANDROID_CLIENT_TYPE and "is_open" in game_config.android_config: is_open = game_config.android_config.get("is_open", True) else: is_open = game_config.gift_config.get("is_open", True) if not is_open: msg = utils.get_msg("gift", "gift_not_open") return 11, {"msg": msg} # 校验礼品码 gift_code = params["gift_code"] gift_code = gift_code.strip() gift_id = gift_code[:-5] if gift_id not in gift_keys: msg = utils.get_msg("gift", "gift_code_not_exist") return 11, {"msg": msg} gift_conf = game_config.gift_config["gift_config"][gift_id] start_time = utils.string_toDatetime(gift_conf.get("start_time", "2013-05-29 00:00:00")) end_time = utils.string_toDatetime(gift_conf.get("end_time", "2020-05-29 00:00:00")) now_time = datetime.datetime.now() if now_time < start_time or now_time > end_time: return 11, {"msg": utils.get_msg("gift", "gift_not_in_right_time")} gift_code_obj = GiftCode.get(gift_id) user_gift_obj = UserGift.get_instance(rk_user.uid) # 平台限制判断 gift_platform_list = gift_conf.get("platform_list", []) if gift_platform_list and rk_user.platform not in gift_platform_list: return 11, {"msg": utils.get_msg("gift", "platform_not_allowed")} # 分区限制判断 gift_subarea_list = gift_conf.get("subarea_list", []) if gift_subarea_list and rk_user.subarea not in gift_subarea_list: return 11, {"msg": utils.get_msg("gift", "subarea_not_allowed")} if gift_id in user_gift_obj.gift_code_type: return 11, {"msg": utils.get_msg("gift", "this_type_already_get")} if not gift_code_obj or gift_code not in gift_code_obj.codes: return 11, {"msg": utils.get_msg("gift", "gift_code_not_exist")} # 是否允许不同uid领取相同礼品码 recycling = gift_conf.get("recycling", False) if not recycling: if gift_code_obj.codes[gift_code]: return 11, {"msg": utils.get_msg("gift", "gift_code_gived")} # 玩家是否已经领取了此礼品码 if not user_gift_obj.add_has_got_gift_code(gift_code): return 11, {"msg": utils.get_msg("gift", "gift_code_gived")} # 记录该礼品码被最后一次领取的uid gift_code_obj.codes[gift_code] = rk_user.uid gift_code_obj.put() # 记录玩家已领的礼品码 user_gift_obj.gift_code_type.append(gift_id) # 发礼品 all_get_things = tools.add_things( rk_user, [{"_id": thing_id, "num": num} for thing_id, num in gift_conf.get("gift", {}).items()], where=u"giftCode_award", ) # 对于可以升级获得的奖励 # if gift.get('lv_up_gift',{}): # user_gift_obj.add_lv_up_giftcode(gift_id) # user_gift_obj.get_giftcode_lv_up_award(gift_id) user_gift_obj.put() return {"get_info": all_get_things}
def add_exp(self, exp, where=''): ''' 添加用户的经验 不管是加还是扣经验都会触发等级变化 返回: 是否升级, {} ''' #保存变化前的exp from apps.models.user_gift import UserGift old_exp = self.property_info['exp'] old_lv = self.lv new_lv = self.lv self.property_info['exp'] = self.property_info['exp'] + exp while True: new_lv += 1 userLevelMod = UserLevelMod.get(new_lv) if not userLevelMod.exp or self.property_info[ 'exp'] < userLevelMod.exp: new_lv -= 1 break if new_lv > old_lv: #有升级的话就写日志和重新排名 #写日志 log_data = {} log_data['old_exp'] = old_exp log_data['old_lv'] = old_lv log_data['add_exp'] = exp log_data['new_lv'] = new_lv log_data['new_exp'] = self.property_info['exp'] log_data['where'] = where data_log_mod.set_log('UserLevelHistory', self, **log_data) #新等级 self.property_info['lv'] = new_lv userLevelMod = UserLevelMod.get(new_lv) #获取前20000名对应的分数 rank_lv = lv_top_model.get_score(20000) #只有等级能到达50000名的才会进入排行榜 if not rank_lv or new_lv > rank_lv: lv_top_model.set(self.uid, new_lv) #更新体力,cost self.property_info['stamina'] += userLevelMod.lv_stamina #将用户写入新级别对应的用户列表中 subarea = self.user_base.subarea LevelUser.get_instance(subarea, self.lv_region).add_user(self.uid) inviter_uid = Friend.get(self.uid).inviter if inviter_uid: inviter_friend = Friend.get(inviter_uid) else: inviter_friend = None #升级时,检查是否有礼品码的升级奖励 user_gift_obj = UserGift.get_instance(self.uid) user_gift_obj.get_giftcode_lv_up_award() #升级时,检查是否有升级奖励 msg = utils.get_msg('user', 'lv_up_award', self) for lv in range(old_lv + 1, new_lv + 1): if 'award' in self.game_config.user_level_config[str(lv)]: user_gift_obj.add_gift( self.game_config.user_level_config[str(lv)]['award'], msg % lv) #用户升级后,将自己信息写入邀请者 if inviter_friend: inviter_friend.record_invited_user(self.uid, lv) self.user_cards.set_slot_num(new_lv) self.put() return new_lv > old_lv, {}
def login(self, params): """登录 发送登录奖励邮件 """ user_base_obj = self.user_base user_property_obj = self.user_property # game_config = self.game_config # 获取当天的字符串 now = datetime.datetime.now() # 获取注册时间 add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date() # 获取双倍充值的时间 # charge_double_date = game_config.shop_config.get('charge_double_date', '') mail_awards = {} now_str = utils.datetime_toString(now) self.login_info.setdefault('login_record_new', []).insert(0, now_str) if len(self.login_info['login_record_new']) > 5: self.login_info['login_record_new'].pop() last_login_time = self.login_info['login_time'] # 新安装用户,或玩家每天首次登入 if not last_login_time or now.date() != utils.timestamp_toDatetime( last_login_time).date(): self.login_info['total_login_num'] += 1 self.login_info['login_record'].insert(0, str(now.date())) # 获取最大的记录长度,长度不要读配置,如果配置记录长度改的太小会有bug if len(self.login_info['login_record']) > 40: self.login_info['login_record'].pop() # 连续登录 if now.date() == (utils.timestamp_toDatetime(last_login_time) + datetime.timedelta(days=1)).date(): self.login_info['continuous_login_num'] += 1 # 非连续登录 else: self.login_info['continuous_login_num'] = 1 # 每日登录奖励 # mail_awards.update(self.get_daily_login_award()) # # 判断有无系统奖励 # mail_awards.update(self.get_system_bonus()) #临时的一个系统补偿 mail_awards.update(self.get_system_compensates()) # #临时补偿 # mail_awards.update(self.get_temp_bonus()) # # 特定日期首次充值双倍再开放 # if not user_property_obj.double_charge and ( # str(add_date) != str(now.date()) and # str(now.date()) == charge_double_date): # user_property_obj.property_info['double_charge'] = True # # 特定日期之后已充值过的用户首次充值双倍关闭 # if user_property_obj.double_charge and charge_double_date and ( # str(now.date()) > charge_double_date): # user_property_obj.property_info['double_charge'] = False user_gift_obj = UserGift.get_instance(self.uid) # #连续登录奖励 # mail_awards.update(self.get_continuous_login_award()) # #累积登录奖励 # mail_awards.update(self.get_login_award()) # 领取以前未领取的等级奖励 user_gift_obj.get_lv_gift() # 月卡返还 mail_awards.update(self.get_monthCard_bonus()) # if str(add_date) != str(now.date()): # self.__refresh_month_card_info(user_property_obj) # 重置道具商店购买次数 self.user_pack.reset_store_has_bought_cnt() # vip 玩家 每日奖励 通过邮件发放 mail_awards.update(self.get_vip_daily_bonus()) # 回复战场次数重置 user_property_obj.reset_recover_times() # 如果玩家没有成功通过新手引导- 战场1-1 则reset武将编队以便继续新手引导 if user_property_obj.property_info.get( 'newbie_steps', 0) == 15 and user_property_obj.newbie: user_property_obj.user_cards.reset_cards() rtn_data = {} user_property_obj.property_info['login_time'] = int(time.time()) #版本更新奖励 strVersion = params.get("version", "") if last_login_time and strVersion != "": update_version_award = self.get_update_version_bonus(strVersion) if update_version_award and strVersion not in user_property_obj.update_award: mail_awards["update_version_award"] = { "award": update_version_award } #user_property_obj.give_award(update_version_award) user_property_obj.property_info["update_award"].append( strVersion) #判断有无绑定奖励 if UserBase.get(self.uid).platform != 'oc' and \ user_property_obj.property_info.get('bind_award'): mail_awards['bind_award'] = self.game_config.weibo_config[ 'bind_award'] user_property_obj.property_info['bind_award'] = False # if not user_property_obj.newbie: # rtn_data = self.new_login_bonus(now, user_property_obj) # 根据上一次22:00的pvp排名给予相应的功勋奖励 mail_awards.update(self.get_honor_award()) # 发得奖邮件 self.send_mails(mail_awards) #当天注册用户判断是否有活动双倍 # if not self.login_info.get('set_newbie_double_charge',False) and\ # not user_property_obj.double_charge and\ # str(now.date()) == charge_double_date and\ # str(add_date) == str(now.date()): # user_property_obj.property_info['double_charge'] = True # self.login_info['set_newbie_double_charge'] = True # 若保底求将没开 清空保底求将元宝 from apps.logics.gacha import is_open_safty self.user_gacha.reset_cost_coin() if not is_open_safty(): self.user_gacha.reset_cost_coin() # 登录时间更新 self.login_info['login_time'] = int(time.time()) self.put() user_property_obj.put() return {}
def login(self, params): """登录 发送登录奖励邮件 """ user_base_obj = self.user_base user_property_obj = self.user_property # game_config = self.game_config # 获取当天的字符串 now = datetime.datetime.now() # 获取注册时间 add_date = utils.timestamp_toDatetime(user_base_obj.add_time).date() # 获取双倍充值的时间 # charge_double_date = game_config.shop_config.get('charge_double_date', '') mail_awards = {} now_str = utils.datetime_toString(now) self.login_info.setdefault('login_record_new', []).insert(0, now_str) if len(self.login_info['login_record_new']) > 5: self.login_info['login_record_new'].pop() last_login_time = self.login_info['login_time'] # 新安装用户,或玩家每天首次登入 if not last_login_time or now.date() != utils.timestamp_toDatetime(last_login_time).date(): self.login_info['total_login_num'] += 1 self.login_info['login_record'].insert(0, str(now.date())) # 获取最大的记录长度,长度不要读配置,如果配置记录长度改的太小会有bug if len(self.login_info['login_record']) > 40: self.login_info['login_record'].pop() # 连续登录 if now.date() == (utils.timestamp_toDatetime(last_login_time) + datetime.timedelta(days=1)).date(): self.login_info['continuous_login_num'] += 1 # 非连续登录 else: self.login_info['continuous_login_num'] = 1 # 每日登录奖励 # mail_awards.update(self.get_daily_login_award()) # # 判断有无系统奖励 # mail_awards.update(self.get_system_bonus()) #临时的一个系统补偿 mail_awards.update(self.get_system_compensates()) # #临时补偿 # mail_awards.update(self.get_temp_bonus()) # # 特定日期首次充值双倍再开放 # if not user_property_obj.double_charge and ( # str(add_date) != str(now.date()) and # str(now.date()) == charge_double_date): # user_property_obj.property_info['double_charge'] = True # # 特定日期之后已充值过的用户首次充值双倍关闭 # if user_property_obj.double_charge and charge_double_date and ( # str(now.date()) > charge_double_date): # user_property_obj.property_info['double_charge'] = False user_gift_obj = UserGift.get_instance(self.uid) # #连续登录奖励 # mail_awards.update(self.get_continuous_login_award()) # #累积登录奖励 # mail_awards.update(self.get_login_award()) # 领取以前未领取的等级奖励 user_gift_obj.get_lv_gift() # 月卡返还 mail_awards.update(self.get_monthCard_bonus()) # if str(add_date) != str(now.date()): # self.__refresh_month_card_info(user_property_obj) # 重置道具商店购买次数 self.user_pack.reset_store_has_bought_cnt() # vip 玩家 每日奖励 通过邮件发放 mail_awards.update(self.get_vip_daily_bonus()) # 回复战场次数重置 user_property_obj.reset_recover_times() # 如果玩家没有成功通过新手引导- 战场1-1 则reset武将编队以便继续新手引导 if user_property_obj.property_info.get('newbie_steps', 0) == 15 and user_property_obj.newbie: user_property_obj.user_cards.reset_cards() rtn_data = {} user_property_obj.property_info['login_time'] = int(time.time()) #版本更新奖励 strVersion = params.get("version", "") if last_login_time and strVersion != "": update_version_award = self.get_update_version_bonus(strVersion) if update_version_award and strVersion not in user_property_obj.update_award: mail_awards["update_version_award"] = {"award":update_version_award} #user_property_obj.give_award(update_version_award) user_property_obj.property_info["update_award"].append(strVersion) #判断有无绑定奖励 if UserBase.get(self.uid).platform != 'oc' and \ user_property_obj.property_info.get('bind_award'): mail_awards['bind_award'] = self.game_config.weibo_config['bind_award'] user_property_obj.property_info['bind_award'] = False # if not user_property_obj.newbie: # rtn_data = self.new_login_bonus(now, user_property_obj) # 根据上一次22:00的pvp排名给予相应的功勋奖励 mail_awards.update(self.get_honor_award()) # 发得奖邮件 self.send_mails(mail_awards) #当天注册用户判断是否有活动双倍 # if not self.login_info.get('set_newbie_double_charge',False) and\ # not user_property_obj.double_charge and\ # str(now.date()) == charge_double_date and\ # str(add_date) == str(now.date()): # user_property_obj.property_info['double_charge'] = True # self.login_info['set_newbie_double_charge'] = True # 若保底求将没开 清空保底求将元宝 from apps.logics.gacha import is_open_safty self.user_gacha.reset_cost_coin() if not is_open_safty(): self.user_gacha.reset_cost_coin() # 登录时间更新 self.login_info['login_time'] = int(time.time()) self.put() user_property_obj.put() return {}
def add_exp(self, exp, where=''): ''' 添加用户的经验 不管是加还是扣经验都会触发等级变化 返回: 是否升级, {} ''' #保存变化前的exp from apps.models.user_gift import UserGift old_exp = self.property_info['exp'] old_lv = self.lv new_lv = self.lv self.property_info['exp'] = self.property_info['exp'] + exp while True: new_lv += 1 userLevelMod = UserLevelMod.get(new_lv) if not userLevelMod.exp or self.property_info['exp'] < userLevelMod.exp: new_lv -= 1 break if new_lv > old_lv: #有升级的话就写日志和重新排名 #写日志 log_data = {} log_data['old_exp'] = old_exp log_data['old_lv'] = old_lv log_data['add_exp'] = exp log_data['new_lv'] = new_lv log_data['new_exp'] = self.property_info['exp'] log_data['where'] = where data_log_mod.set_log('UserLevelHistory', self, **log_data) #新等级 self.property_info['lv'] = new_lv userLevelMod = UserLevelMod.get(new_lv) #获取前20000名对应的分数 rank_lv = lv_top_model.get_score(20000) #只有等级能到达50000名的才会进入排行榜 if not rank_lv or new_lv>rank_lv: lv_top_model.set(self.uid,new_lv) #更新体力,cost self.property_info['stamina'] += userLevelMod.lv_stamina #将用户写入新级别对应的用户列表中 subarea = self.user_base.subarea LevelUser.get_instance(subarea, self.lv_region).add_user(self.uid) inviter_uid = Friend.get(self.uid).inviter if inviter_uid: inviter_friend = Friend.get(inviter_uid) else: inviter_friend = None #升级时,检查是否有礼品码的升级奖励 user_gift_obj = UserGift.get_instance(self.uid) user_gift_obj.get_giftcode_lv_up_award() #升级时,检查是否有升级奖励 msg = utils.get_msg('user','lv_up_award', self) for lv in range(old_lv + 1, new_lv + 1): if 'award' in self.game_config.user_level_config[str(lv)]: user_gift_obj.add_gift(self.game_config.user_level_config[str(lv)]['award'],msg % lv) #用户升级后,将自己信息写入邀请者 if inviter_friend: inviter_friend.record_invited_user(self.uid, lv) self.user_cards.set_slot_num(new_lv) self.put() return new_lv > old_lv, {}