示例#1
0
    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
示例#2
0
    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
示例#3
0
 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
示例#4
0
    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, {}
示例#5
0
    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, {}