def friend(self): """用户好友 """ if not self._friend: from apps.models.friend import Friend self._friend = Friend.get(self.uid) if not self._friend: self._friend = Friend._install(self.uid) return self._friend
def wrapper_info(self): """每次返回前端api请求都会附带的信息 """ data = { 'pid': self.pid, 'platform': self.baseinfo.get('platform'), 'username': self.username, 'sex': self.sex, 'max_stamina': self.user_property.max_stamina, 'vip_cur_level': self.user_property.vip_cur_level, 'vip_next_level': self.user_property.vip_next_level, 'vip_charge_money': self.user_property.charge_sumcoin, 'vip_next_lv_need_money': self.user_property.next_lv_need_coin, 'uid': self.uid, 'signature': self.baseinfo.get('signature', ''), # 'max_friend_num': self.user_property.max_friend_num, } data.update(self.user_property.property_info) if 'get_card' in data: data.pop('get_card') if 'invite_info' in data: data.pop('invite_info') if 'bind_award' in data: data.pop('bind_award') if 'tapjoy' in data: data.pop('tapjoy') if 'bind_award' in data: data.pop('bind_award') if 'charge_sumcoin' in data: data.pop('charge_sumcoin') if 'update_award' in data: data.pop('update_award') if 'charge_sum_money' in data: data.pop('charge_sum_money') #data['cost'] = self.user_property.cost data['this_lv_now_exp'] = self.user_property.this_lv_now_exp data['next_lv_need_exp'] = self.user_property.next_lv_need_exp data['invite_code'] = self.user_property.invite_code #也许Friend不存在 from apps.models.friend import Friend objFriend = Friend.get_instance(self.uid) data["friend_request_num"] = len(objFriend.get_request_ids()) data['friend_gift_num'] = objFriend.get_gift_num() # 实时pvp相关 data['real_pvp_title'] = self.user_real_pvp.pvp_title data['honor'] = self.user_real_pvp.honor #新礼包数 # from apps.models.user_gift import UserGift # user_gift_obj = UserGift.get(self.uid) # data['new_gift_num'] = user_gift_obj.get_new_gift_num(self.user_property) #首冲标志 data['first_charge'] = self.user_property.double_charge or self.user_property.first_charge #倒计时求将时间 data['next_free_gacha_time'] = UserGacha.get_instance(self.uid).next_free_gacha_time #跑马灯信息,每隔10分钟返回一次 data['marquee_info'] = self.marquee_info() # 新邮件数量 data['new_mail_num'] = UserMail.new_mail_num(self.uid) #推送信息 data['push_info'] = utils.get_push_info(self) data['push_open'] = self.game_config.system_config.get('push_open',False) # 援军槽数 data['yuanjun_slot_num'] = self.user_cards.slot_num # 能否添加援军 data['can_add_yuanjun'] = self.user_cards.can_add_yuanjun() # 能否签到 data['today_can_sign'] = self.user_gift.today_can_sign() # 能否领开服礼包 data['openserver_can_get'] = self.user_gift.openserver_can_get() # 发运营邮件 from apps.logics.mails import send_op_mail send_op_mail(self) # 有可以领取的每日任务宝箱 data['task_box_can_get'] = self.user_task.today_can_get() # 检查主线任务 self.user_task.check_main_tasks() # 是否有能领取的主线任务奖励 data['can_get_maintask_award'] = self.user_task.can_get_award() # 珠子伤害 data['zhuzi_damage'] = self.user_character.zhuzi_damage() return data
def has_friend(self, fid): """检查用户是否有该好友 """ from apps.models.friend import Friend user_friend_obj = Friend.get(self.uid) return fid in user_friend_obj.friends
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 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, {}