def this_lv_now_exp(self): """ 当前级别内,现在积累的经验值 如果达到最大等级,返回最后两等级的差 """ if self.reach_max_lv(): return UserLevelMod.get(self.lv).exp - UserLevelMod.get(self.lv - 1).exp return self.exp - self.this_lv_exp
def this_lv_now_exp(self): """ 当前级别内,现在积累的经验值 如果达到最大等级,返回最后两等级的差 """ if self.reach_max_lv(): return UserLevelMod.get( self.lv).exp - UserLevelMod.get(self.lv - 1).exp return self.exp - self.this_lv_exp
def create(cls,uid): up = cls() up.uid = uid up.charge_award_info = {} up.consume_award_info = {} up.property_info = { 'exp':0,#经验值 'lv':1, 'gold':0, 'coin':0, 'stamina':0, 'card_exp_point': 1000, # 拥有的武将经验点数 'fight_soul': 0, #战魂 'stamina_upd_time': int(time.time()), 'newbie': False, # 是否新手 'newbie_steps':0, # 已完成的新手步骤 'bind_award':True, 'has_bought_vip_package':[], #Vip等级所购买的vip礼包 只可以买一次 'charge_coins': 0, # 总共充值的人民币 'charge_money': 0, # 总共购买过元宝数 'charge_item_bought_times': {}, # 每种充值商品已购买次数 'monthCard_remain_days': {}, # 每种月卡剩余使用天数 'monthCard30': 29 "update_award":[], #版本更新奖励 'charged_user':False,#是否付费用户,包含大礼包 'recover_times':{ 'today_str':utils.get_today_str(), 'recover_stamina':0, #回复体力次数 'recover_pvp_stamina':0, #回复PVP次数 'recover_mystery_store':0, #刷新神秘商店的次数 'recover_copy':{ 'normal':0, 'special':0, 'daily': {}, }, #刷新副本次数 }, #使用元宝购买回复的次数 'wipe_out_times': 0, # 当天已扫荡次数 } # 初始化每个试炼战场回复次数都为0 daily_floods = up.game_config.daily_dungeon_config.keys() for daily_flood in daily_floods: up.property_info['recover_times']['recover_copy']['daily'][daily_flood] = 0 # 用户初始化 体力值 userLevelMod = UserLevelMod.get(str(up.property_info['lv']), game_config=up.game_config) up.property_info['stamina'] = userLevelMod.stamina # 用户初始化 铜钱 元宝等 user_info_init = up.game_config.user_init_config["init_user_info"] up.property_info.update(user_info_init) up.put() return up
def max_friend_num(self): lv = self.property_info['lv'] level = UserLevelMod.get(lv) vip_lv = self.vip_cur_level #miaoyichao start vip_add_friend_num = self.game_config.user_vip_config[str(vip_lv)].get('friend_upper',0) max_num = level.friend_num + self.property_info.get('friend_extend_num',0)+vip_add_friend_num #miaoyichao end #max_num = level.friend_num + self.property_info.get('friend_extend_num',0) return max_num
def max_friend_num(self): lv = self.property_info['lv'] level = UserLevelMod.get(lv) vip_lv = self.vip_cur_level #miaoyichao start vip_add_friend_num = self.game_config.user_vip_config[str(vip_lv)].get( 'friend_upper', 0) max_num = level.friend_num + self.property_info.get( 'friend_extend_num', 0) + vip_add_friend_num #miaoyichao end #max_num = level.friend_num + self.property_info.get('friend_extend_num',0) return max_num
def create(cls, uid): up = cls() up.uid = uid up.charge_award_info = {} up.consume_award_info = {} up.property_info = { 'exp': 0, #经验值 'lv': 1, 'gold': 0, 'coin': 0, 'stamina': 0, 'card_exp_point': 1000, # 拥有的武将经验点数 'fight_soul': 0, #战魂 'stamina_upd_time': int(time.time()), 'newbie': False, # 是否新手 'newbie_steps': 0, # 已完成的新手步骤 'bind_award': True, 'has_bought_vip_package': [], #Vip等级所购买的vip礼包 只可以买一次 'charge_coins': 0, # 总共充值的人民币 'charge_money': 0, # 总共购买过元宝数 'charge_item_bought_times': {}, # 每种充值商品已购买次数 'monthCard_remain_days': {}, # 每种月卡剩余使用天数 'monthCard30': 29 "update_award": [], #版本更新奖励 'charged_user': False, #是否付费用户,包含大礼包 'recover_times': { 'today_str': utils.get_today_str(), 'recover_stamina': 0, #回复体力次数 'recover_pvp_stamina': 0, #回复PVP次数 'recover_mystery_store': 0, #刷新神秘商店的次数 'recover_copy': { 'normal': 0, 'special': 0, 'daily': {}, }, #刷新副本次数 }, #使用元宝购买回复的次数 'wipe_out_times': 0, # 当天已扫荡次数 } # 初始化每个试炼战场回复次数都为0 daily_floods = up.game_config.daily_dungeon_config.keys() for daily_flood in daily_floods: up.property_info['recover_times']['recover_copy']['daily'][ daily_flood] = 0 # 用户初始化 体力值 userLevelMod = UserLevelMod.get(str(up.property_info['lv']), game_config=up.game_config) up.property_info['stamina'] = userLevelMod.stamina # 用户初始化 铜钱 元宝等 user_info_init = up.game_config.user_init_config["init_user_info"] up.property_info.update(user_info_init) up.put() return up
def refresh_lv(self,version): """ 刷新等级 """ max_lv = max([int(i) for i in self.game_config.user_level_config.keys()]) new_lv = 1 old_lv = self.lv for next_lv in range(1,max_lv + 1): userLevelMod = UserLevelMod.get(next_lv) if self.property_info['exp'] >= userLevelMod.exp: new_lv = next_lv else: break if old_lv != new_lv: self.property_info['lv'] = new_lv userLevelMod = UserLevelMod.get(new_lv) self.property_info['stamina'] = userLevelMod.stamina #将用户写入新级别对应的用户列表中 subarea = self.user_base.subarea LevelUser.get_instance(subarea, self.lv_region).add_user(self.uid) self.put()
def refresh_lv(self, version): """ 刷新等级 """ max_lv = max( [int(i) for i in self.game_config.user_level_config.keys()]) new_lv = 1 old_lv = self.lv for next_lv in range(1, max_lv + 1): userLevelMod = UserLevelMod.get(next_lv) if self.property_info['exp'] >= userLevelMod.exp: new_lv = next_lv else: break if old_lv != new_lv: self.property_info['lv'] = new_lv userLevelMod = UserLevelMod.get(new_lv) self.property_info['stamina'] = userLevelMod.stamina #将用户写入新级别对应的用户列表中 subarea = self.user_base.subarea LevelUser.get_instance(subarea, self.lv_region).add_user(self.uid) self.put()
def max_stamina(self): ''' 根据用户的等级获取最大体力值 ''' userlvmod = UserLevelMod.get(self.lv, self.game_config) return userlvmod.stamina
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 next_lv_exp(self): """ 下一级别所需的经验值 miaoyichao """ return UserLevelMod.get(self.next_lv).exp
def this_lv_exp(self): """ 当前级别所需的经验值 miaoyichao """ return UserLevelMod.get(self.lv).exp
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, {}