Esempio n. 1
0
 def update_dungeon_info(self,dungeon_type,floor_id,room_id, once_daily = False):
     """
     更新用户的战场信息
     """
     #通关奖励
     clear_floor_coin = 0
     #如果是普通战场
     if dungeon_type == 'normal':
         #所完成战场是该用户当前的最新战场时,更新最新战场信息
         normal_current = self.dungeon_info['normal_current']
         if floor_id == normal_current['floor_id'] and \
         room_id == normal_current['room_id'] and normal_current['status'] != 2:
             conf = self.game_config.normal_dungeon_config
             #有下一局时,更新为下一局
             if str(int(room_id) + 1) in conf[floor_id]['rooms']:
                 #更新当前最新战场为下一局
                 self.dungeon_info['normal_current']['room_id'] = str(int(room_id) + 1)
             #没有下一局时,当前场clear
             else:
                 #有下一场时,更新为下一场,局数从1开始
                 if str(int(floor_id) + 1) in conf:
                     self.dungeon_info['normal_current']['floor_id'] = str(int(floor_id) + 1)
                     self.dungeon_info['normal_current']['room_id'] = '1'
                 else:
                     #没有下一场时,只标识当前场clear
                     self.dungeon_info['normal_current']['status'] = 2
                 #赠送元宝
                 clear_floor_coin = UserProperty.get(self.uid).dungeon_clear()
                 self.clear_normal_dungeon(str(floor_id))
     elif dungeon_type == 'special' or dungeon_type == 'weekly' or dungeon_type == 'daily':
         self.__resolve_once_daily(floor_id, room_id, dungeon_type, once_daily)
         #活动战场时,更新最短通关时间
         if self.dungeon_info[dungeon_type][floor_id]['rooms'].get(room_id,0) != 2:
             self.dungeon_info[dungeon_type][floor_id]['rooms'][room_id] = 2
             #全部小关卡clear并且该战场没有clear时
             if self.dungeon_info[dungeon_type][floor_id]['status'] != 2:
                 clear_fg = True
                 for rmid in self.dungeon_info[dungeon_type][floor_id]['rooms']:
                     if self.dungeon_info[dungeon_type][floor_id]['rooms'][rmid] != 2:
                         clear_fg = False
                         break
                 if clear_fg:
                     self.dungeon_info[dungeon_type][floor_id]['status'] = 2
                     #赠送元宝
                     clear_floor_coin = UserProperty.get(self.uid).dungeon_clear()
     #清除未完成的迷宫信息
     self.dungeon_info['last'] = {}
     self.put()
     data = {
         'normal_current':self.dungeon_info['normal_current'],
         # 'special':self.dungeon_info['special'],
         # 'weekly':self.dungeon_info.get('weekly',{}),
         'daily':self.dungeon_info.get('daily',{}),
     }
     if clear_floor_coin:
         data['clear_floor_coin'] = clear_floor_coin
     return data
Esempio n. 2
0
def get_friend_list(rk_user,params):
    """获取好友列表
    """
    data = {'friends':[]}
    user_friend_obj = Friend.get(rk_user.uid)
    for fid in user_friend_obj.get_friend_ids():
        friend_user = UserBase.get(fid)
        friend_property = UserProperty.get(fid)
        leader_card = friend_property.leader_card
        user_pvp_obj = UserPvp.getEx(fid)
        if user_pvp_obj:
            pvp_title = user_pvp_obj.pvp_title
        else:
            pvp_title = ''
        temp = {
            'fid':fid,
            'name':friend_user.username,
            'country':friend_property.country,
            'leader_card':leader_card,
            'lv':friend_property.lv,
            'login_time':friend_property.login_time,
            'want_gift':Friend.getEx(fid).friend_gift.get('want_gift',['','','']),
            'signature':friend_user.signature,
            'lock':user_friend_obj.is_lock(fid),
            'pvp_title':pvp_title,
        }
        data['friends'].append(temp)
    data['now_num'] = len(data['friends'])
    data['max_num'] = rk_user.user_property.max_friend_num
    return 0,data
Esempio n. 3
0
def add_exp_point(rk_user, params):
    '''
    添加经验点接口
    根据用户提交的道具 id 给用户添加经验点
    '''
    props_id = params['props_id']
    num = int(params['num'])
    #根据 id 获取道具的使用途径
    props_id_config = game_config.props_config.get(props_id, {})
    used_by = props_id_config.get('used_by', '')
    #判断使用的用途
    if used_by != 'card':
        return 11, {'msg': utils.get_msg('pack', 'wrong_used')}
    #判断用户道具是否足够
    user_pack_obj = UserPack.get_instance(rk_user.uid)
    if not user_pack_obj.is_props_enough(props_id, num):
        return 11, {'msg': utils.get_msg('pack', 'not_enough_props')}
    #计算经验点数
    add_exp_point = int(num * props_id_config.get('exp', 0))
    #所有条件都满足的话  删除道具 添加经验点
    user_pack_obj.minus_props(props_id, num, where='add_exp_point')
    user_property_obj = UserProperty.get(rk_user.uid)
    user_property_obj.add_card_exp_point(add_exp_point, "by_props")
    #结果返回
    return 0, {'add_exp_point': add_exp_point}
Esempio n. 4
0
def card_stove():
    """
    炼化
    """
    game_config.subareas_conf()
    game_config.set_subarea('1')
    #sell_ucids = params['sell_ucids']
    user_property_obj = UserProperty.get_instance(uid)
    sell_ucids = '201410161423224907513'
    if not sell_ucids:
        return 11,{'msg':utils.get_msg('card','no_cost_card')}
    sell_ucids = sell_ucids.split(',')
    sell_ucids = utils.remove_null(sell_ucids)
    user_card_obj = UserCards.get(uid)
    #检查武将是否存在
    for ucid in sell_ucids:
        if ucid and not user_card_obj.has_card(ucid):
            return 11,{'msg':utils.get_msg('card','no_card')}
    #如果有主角卡,则不能消耗
    if user_property_obj.leader_role_card in sell_ucids:
        return 11,{'msg':utils.get_msg('card','role_card')}
    #带装备武将不允许卖出
    if user_card_obj.is_equip_used(sell_ucids):
        return 11,{'msg':utils.get_msg('equip','is_used')}
    #被锁定武将不能卖出
    if user_card_obj.is_locked(sell_ucids):
        return 11,{'msg':utils.get_msg('card','locked')}
    #检查武将是否在deck中
    rc,msg = check_card_in_deck(user_card_obj,sell_ucids)
    if rc:
        return rc,{'msg':msg}
    sell_cards = [user_card_obj.cards[ucid] for ucid in sell_ucids]
    return 0,{'cards_info':sell_cards,'cards_ucids':sell_ucids}
Esempio n. 5
0
 def get_giftcode_lv_up_award(self,gift_id=''):
     """
     检查是否有可领取的升级奖励
     """
     if not gift_id:
         gift_ids = self.gift_code_info.get('lv_up',{}).keys()
     else:
         gift_ids = [gift_id]
     if not gift_ids:
         return
     gift_config = self.game_config.gift_config.get('gift_config',{})
     user_prop_obj = UserProperty.get(self.uid)
     pt_fg = False
     for _id in gift_ids:
         if _id not in gift_config or _id not in self.gift_code_info.get('lv_up',{}):
             continue
         lv_up_gift = gift_config[_id].get('lv_up_gift',{})
         for need_lv in lv_up_gift:
             if int(need_lv)<=user_prop_obj.lv and need_lv not in self.gift_code_info['lv_up'][_id]:
                 self.gift_code_info['lv_up'][_id].append(need_lv)
                 pt_fg = True
                 msg = utils.get_msg('gift', 'lv_up_gift_award', self)
                 self.add_gift(lv_up_gift[need_lv], content=msg % need_lv)
     if pt_fg:
         self.put()
Esempio n. 6
0
 def get_bind_phone_gift(self):
     """
     领取绑定奖励, 每个礼拜只能领一次
     miaoyichao
     """
     #获取是否开启手机绑定功能
     bind_phone_is_open = self.game_config.system_config.get('bind_phone_is_open')
     if not bind_phone_is_open:
         return
     #获取绑定手机的奖励配置信息
     bind_phone_award_conf = copy.deepcopy(self.game_config.loginbonus_config.get("bind_phone_award"))
     if not bind_phone_award_conf:
         return
     #检查是否绑定手机
     user_property_obj = UserProperty.get(self.uid)
     has_bind = user_property_obj.property_info['bind_phone_number_info']['has_bind']
     if not has_bind:
         return
     #获取当前的星期
     now_week = datetime.date.today().isocalendar()[:2]
     last_got_award_week = user_property_obj.property_info['bind_phone_number_info'].get('last_got_award_week')
     # 最后一次领取的星期 与现在相同  不发
     if last_got_award_week and now_week <= last_got_award_week:
         return
     #获取提示语信息
     msg = utils.get_msg('bind', 'get_bind_award_msg', self)
     #添加奖励
     self.add_gift(bind_phone_award_conf, msg)
     #更新绑定信息
     user_property_obj.property_info['bind_phone_number_info']['last_got_award_week'] = now_week
     user_property_obj.put()
     self.put()
Esempio n. 7
0
def get_banquet_stamina():
    """
    开始宴席
    params:
        click_num:  玩家点击次数,据此来算玩家回体数
    """
    open_time_gaps = game_config.operat_config.get('open_stamina_banquet_gaps', [])
    now = datetime.datetime.now()
    now_date_day = now.strftime('%Y-%m-%d')
    now_hour_min = now.strftime('%H:%M')
    this_time_gap = utils.between_gap(now_hour_min, open_time_gaps)
    if not this_time_gap:
        return 11,{'msg':utils.get_msg('active', 'not_in_time')}
    #获取时间区间的最小值
    time_start = '%s %s:00'%(now_date_day,str(this_time_gap[0]))
    start_time = utils.string_toTimestamp(time_start)
    #查询是否已经领取体力
    ul = UserLogin.get_instance(uid)
    ul.banquet_info[str(start_time)] = False
    ul.do_put()
    banquet_info = ul.banquet_info
    if banquet_info.get(str(start_time), False):
        return 11, {'msg':utils.get_msg('active', 'already_banquet')}
    #根据点击次数获取可以领取多少体力
    click_num = 30
    click_num_awards_conf = game_config.operat_config.get('banquet_click_num_awards', {})
    suitable_gap = utils.between_gap(click_num, click_num_awards_conf)
    get_stamina = click_num_awards_conf.get(suitable_gap, 0)
    user_property = UserProperty.get_instance(uid)   
    user_property.add_stamina(get_stamina)
    print get_stamina
    return {'add_stamina': get_stamina}
Esempio n. 8
0
def add_exp_point(rk_user,params):
    '''
    添加经验点接口
    根据用户提交的道具 id 给用户添加经验点
    '''
    props_id = params['props_id']
    num = int(params['num'])
    #根据 id 获取道具的使用途径
    props_id_config = game_config.props_config.get(props_id,{})
    used_by = props_id_config.get('used_by','')
    #判断使用的用途
    if used_by != 'card':
        return 11,{'msg':utils.get_msg('pack', 'wrong_used')}
    #判断用户道具是否足够
    user_pack_obj = UserPack.get_instance(rk_user.uid)
    if not user_pack_obj.is_props_enough(props_id,num):
        return 11,{'msg':utils.get_msg('pack', 'not_enough_props')}
    #计算经验点数
    add_exp_point = int(num*props_id_config.get('exp',0))
    #所有条件都满足的话  删除道具 添加经验点
    user_pack_obj.minus_props(props_id,num,where='add_exp_point')
    user_property_obj = UserProperty.get(rk_user.uid)
    user_property_obj.add_card_exp_point(add_exp_point, "by_props")
    #结果返回
    return 0,{'add_exp_point':add_exp_point}
Esempio n. 9
0
def search_friend(rk_user,params):
    """查找好友
    """
    fid = params['fid']
    try:
        fid = str(fid)
    except:
        return 11,{'msg':utils.get_msg('friend','invalid_fid')}
    friend_user = UserBase.get(fid)
    if not friend_user:
        return 11,{'msg':utils.get_msg('user','no_user')}
    friend_friend_obj = Friend.getEx(fid)
    friend_property = UserProperty.get(fid)
    leader_card = friend_property.leader_card
    user_pvp_obj = UserPvp.getEx(fid)
    if user_pvp_obj:
        pvp_title = user_pvp_obj.pvp_title
    else:
        pvp_title = ''
    data = {
        'friend_info':{
            'fid':fid,
            'name':friend_user.username,
            'country':friend_property.country,
            'leader_card':leader_card,
            'lv':friend_property.lv,
            'max_friend_num':friend_property.max_friend_num,
            'now_friend_num':friend_friend_obj.friend_num,
            'signature':friend_user.signature,
            'pvp_title':pvp_title,
        }
    }
    return 0,data
Esempio n. 10
0
 def get_giftcode_lv_up_award(self, gift_id=''):
     """
     检查是否有可领取的升级奖励
     """
     if not gift_id:
         gift_ids = self.gift_code_info.get('lv_up', {}).keys()
     else:
         gift_ids = [gift_id]
     if not gift_ids:
         return
     gift_config = self.game_config.gift_config.get('gift_config', {})
     user_prop_obj = UserProperty.get(self.uid)
     pt_fg = False
     for _id in gift_ids:
         if _id not in gift_config or _id not in self.gift_code_info.get(
                 'lv_up', {}):
             continue
         lv_up_gift = gift_config[_id].get('lv_up_gift', {})
         for need_lv in lv_up_gift:
             if int(
                     need_lv
             ) <= user_prop_obj.lv and need_lv not in self.gift_code_info[
                     'lv_up'][_id]:
                 self.gift_code_info['lv_up'][_id].append(need_lv)
                 pt_fg = True
                 msg = utils.get_msg('gift', 'lv_up_gift_award', self)
                 self.add_gift(lv_up_gift[need_lv], content=msg % need_lv)
     if pt_fg:
         self.put()
Esempio n. 11
0
def search_friend(rk_user, params):
    """查找好友
    """
    fid = params["fid"]
    try:
        fid = str(fid)
    except:
        return 11, {"msg": utils.get_msg("friend", "invalid_fid")}
    friend_user = UserBase.get(fid)
    if not friend_user:
        return 11, {"msg": utils.get_msg("user", "no_user")}
    friend_friend_obj = Friend.getEx(fid)
    friend_property = UserProperty.get(fid)
    leader_card = friend_property.leader_card
    user_pvp_obj = UserPvp.getEx(fid)
    if user_pvp_obj:
        pvp_title = user_pvp_obj.pvp_title
    else:
        pvp_title = ""
    data = {
        "friend_info": {
            "fid": fid,
            "name": friend_user.username,
            "country": friend_property.country,
            "leader_card": leader_card,
            "lv": friend_property.lv,
            "max_friend_num": friend_property.max_friend_num,
            "now_friend_num": friend_friend_obj.friend_num,
            "signature": friend_user.signature,
            "pvp_title": pvp_title,
        }
    }
    return 0, data
Esempio n. 12
0
    def get_lv_gift(self):
        """
        领取等级奖励
        """
        lv_up_award_conf = copy.deepcopy(
            self.game_config.operat_config.get("lv_up_award"))
        if not lv_up_award_conf:
            return

        main_msg = utils.get_msg('operat', 'lv_up_award', self)

        all_awards_lv = sorted(map(int, lv_up_award_conf.keys()))
        user_property_obj = UserProperty.get(self.uid)
        user_level = user_property_obj.lv
        # 比现在lv小的等级奖励都应该获得
        sould_send_awards_lv = all_awards_lv[:bisect.
                                             bisect(all_awards_lv, user_level)]
        for awards_lv in sould_send_awards_lv:
            awards_lv = str(awards_lv)
            if awards_lv in self.has_got_lv_gift:
                continue
            self.add_gift(lv_up_award_conf[awards_lv],
                          main_msg.format(awards_lv))
            self.has_got_lv_gift.append(awards_lv)
        self.put()
Esempio n. 13
0
def get_friend_list(rk_user, params):
    """获取好友列表
    """
    data = {"friends": []}
    user_friend_obj = Friend.get(rk_user.uid)
    for fid in user_friend_obj.get_friend_ids():
        friend_user = UserBase.get(fid)
        friend_property = UserProperty.get(fid)
        leader_card = friend_property.leader_card
        user_pvp_obj = UserPvp.getEx(fid)
        if user_pvp_obj:
            pvp_title = user_pvp_obj.pvp_title
        else:
            pvp_title = ""
        temp = {
            "fid": fid,
            "name": friend_user.username,
            "country": friend_property.country,
            "leader_card": leader_card,
            "lv": friend_property.lv,
            "login_time": friend_property.login_time,
            "want_gift": Friend.getEx(fid).friend_gift.get("want_gift", ["", "", ""]),
            "signature": friend_user.signature,
            "lock": user_friend_obj.is_lock(fid),
            "pvp_title": pvp_title,
        }
        data["friends"].append(temp)
    data["now_num"] = len(data["friends"])
    data["max_num"] = rk_user.user_property.max_friend_num
    return 0, data
Esempio n. 14
0
def show_property_fields():
    user_property_obj = UserProperty.get_instance(uid)
    print 'user_property_obj.property_info','-'*50
    pprint(user_property_obj.property_info)
    #user_property_obj.property_info['wipe_out_times'] = 0
    #user_property_obj.do_put()
    '''
Esempio n. 15
0
def pk_top(request):
    ''' PK, 即实时 PvP (Real Time Peer-vs-Peer)
    '''
    data = []
    #       data.append(tmp)

    top_model = pvp_redis.get_pvp_redis('1', top_name='real_pvp')
    top_30_uid_score = top_model.get(30, desc=False)
    top_30_uid_score.reverse()

    for uid, score in top_30_uid_score:
        pk_obj = UserRealPvp.get(uid)
        ub_obj = UserBase.get(uid)

        if pk_obj and ub_obj:
            user_prop_obj = UserProperty.get(uid)
            tmp = {}
            #base_info = pvp_obj.pvp_info['base_info']
            tmp['uid'] = uid
            tmp['pt'] = int(score)
            tmp['pvp_title'] = pk_obj.pvp_title
            tmp['username'] = ub_obj.username
            tmp['lv'] = user_prop_obj.lv
            data.append(tmp)

    return "admin/pk_top.html", {'data': data}
Esempio n. 16
0
def pk_top(request):
    ''' PK, 即实时 PvP (Real Time Peer-vs-Peer)
    '''
    data = []
#       data.append(tmp)

    top_model = pvp_redis.get_pvp_redis('1', top_name='real_pvp')
    top_30_uid_score = top_model.get(30, desc=False)
    top_30_uid_score.reverse()

    for uid, score in top_30_uid_score:
        pk_obj = UserRealPvp.get(uid)
        ub_obj = UserBase.get(uid)

        if pk_obj and ub_obj:
            user_prop_obj = UserProperty.get(uid)
            tmp = {}
            #base_info = pvp_obj.pvp_info['base_info']
            tmp['uid'] = uid
            tmp['pt'] = int(score)
            tmp['pvp_title'] = pk_obj.pvp_title
            tmp['username'] = ub_obj.username
            tmp['lv'] = user_prop_obj.lv
            data.append(tmp)

    return "admin/pk_top.html", {'data':data}
Esempio n. 17
0
def modify_vip_lv(lv):
    '''vip等级是通过玩家充值元宝的总数来判断的,没vip等级这个字段,所以是间接改'''
    vip_conf = game_config.user_vip_config[str(lv)] 
    coin = vip_conf['coin']
    up = UserProperty.get_instance(uid)
    #up.add_charge_sumcoin(coin)
    up.property_info["charge_sumcoin"] = coin
    up.do_put()
Esempio n. 18
0
 def get_gift(self,gift_id):
     tmp = {}
     if gift_id in self.gift_list and not self.gift_list[gift_id].get('has_got',0):
         up_obj = UserProperty.get(self.uid)
         tmp = up_obj.give_award(self.gift_list[gift_id]['award'],where='gift')
         self.gift_list[gift_id]['has_got'] = 1
         self.gift_list[gift_id]['got_time'] = int(time.time())
         self.put()
     return tmp
Esempio n. 19
0
def get_box_gift(rk_user,params):
    '''
    * 领取宝箱奖励
    '''
    data = {}
    get_step = params.get('step','0')
    floor_id = params.get('floor_id')
    box_type = params.get('box_type')
    dungeon_config = game_config.dungeon_world_config.get('box_info',{})
    floor_conf = dungeon_config.get(floor_id,{})
    if not box_type in floor_conf:
        return 11,{'msg':utils.get_msg('dungeon', 'no_box_config')}
    box_info = floor_conf[box_type]
    if get_step == '0':
        #处理前端要显示的宝箱的内容
        data['box_info'] = utils.format_award(box_info)
        data['box_star'] = int(floor_conf[box_type+'_star'])
        return 0,data
    elif get_step == '1':
        #处理前端要领取的宝箱信息
        user_dungeon_obj = UserDungeon.get(rk_user.uid)
        has_played_info_copy = copy.deepcopy(user_dungeon_obj.has_played_info)
        if floor_id in has_played_info_copy.get('normal',{}):
            floor_info = has_played_info_copy['normal'][floor_id]
            #查看领取条件是否合适
            floor_get_star = floor_info['cur_star']
            if floor_get_star < int(floor_conf[box_type+'_star']):
                return 11,{'msg':utils.get_msg('dungeon', 'box_can_not_open')}
            if floor_info[box_type]:
                #宝箱已领取情况
                return 11,{'msg':utils.get_msg('dungeon', 'has_got_box_award')}
            else:
                #领取宝箱逻辑 格式化内容
                award = utils.format_award(box_info)
                user_property_obj = UserProperty.get(rk_user.uid)
                #将宝箱里面的内容添加到用户信息里面
                award_info = user_property_obj.test_give_award(award,where='get_'+box_type)
                #格式化要返回的内容
                data['award_info'] = award_info
                data['floor_info'] = {}
                data['floor_info']['floor_id'] = floor_id
                data['floor_info']['box_type'] = box_type
                data['floor_info']['box_flag'] = True
                #重置标志位
                user_dungeon_obj.has_played_info['normal'][floor_id][box_type] = True
                user_dungeon_obj.put()
                #判断新手引导
                newbie_step = int(params.get('newbie_step', 0))
                if newbie_step:
                    rk_user.user_property.set_newbie_steps(newbie_step, "get_box_gift")
                #结果返回
                return 0,data
        else:
            return 11,{'msg':utils.get_msg('dungeon', 'invalid_dungeon_info')}
    else:
        #未识别的内容
        return 11,{'msg':utils.get_msg('dungeon', 'invalid_dungeon_info')}
Esempio n. 20
0
 def get_gift(self, gift_id):
     tmp = {}
     if gift_id in self.gift_list and not self.gift_list[gift_id].get(
             'has_got', 0):
         up_obj = UserProperty.get(self.uid)
         tmp = up_obj.give_award(self.gift_list[gift_id]['award'],
                                 where='gift')
         self.gift_list[gift_id]['has_got'] = 1
         self.gift_list[gift_id]['got_time'] = int(time.time())
         self.put()
     return tmp
Esempio n. 21
0
def get_store_info():
    """
    得到当前玩家的神秘商店信息
    前段点击 和 前段倒计时结束时调用此接口 神秘商店时调用此接口
     此接口会先判断是否要自动刷新商品
    """
    user_property_obj = UserProperty.get_instance(uid) 
    print user_property_obj.get_fight_soul
    user_mystery_store_obj = UserMysteryStore.get_instance(uid)
    #return 0, _pack_store_info(user_mystery_store_obj.auto_refresh_store())
    k =  _pack_store_info(user_mystery_store_obj.auto_refresh_store())
    print 'data=',json.dumps(k,indent=1)
Esempio n. 22
0
    def get_consume_award(self, coin):
        try:
            #获取运营配置的消耗奖励
            consume_award_conf = copy.deepcopy(
                self.game_config.operat_config.get("consume_award"))
            if not consume_award_conf:
                return
            #获取消耗奖励的内容
            user_property_obj = UserProperty.get(self.uid)
            consume_award_info = user_property_obj.consume_award_info
            old_consume_award_info = copy.deepcopy(consume_award_info)
            #遍历查找奖励内容
            for gift_id in consume_award_conf:
                gift_conf = consume_award_conf[gift_id]
                start_time = gift_conf.get('start_time')
                end_time = gift_conf.get('end_time', '2111-11-11 11:11:11')
                now_str = datetime_toString(datetime.datetime.now())
                #未开放或已过期的礼包
                if now_str > end_time or now_str < start_time:
                    continue
                if gift_id not in consume_award_info:
                    consume_award_info[gift_id] = {
                        'consume_coin': coin,
                        'has_got_cnt': 0,  # 已领取的次数
                    }
                else:
                    consume_award_info[gift_id]['consume_coin'] += coin

                #金额未达到
                if consume_award_info[gift_id]['consume_coin'] - gift_conf.get(
                        'consume_coin', 0) < 0:
                    continue
                #满足条件,发奖励

                #已经领取过的礼包
                print('chenhaiou gift_id: ', gift_id)
                # 如果有一次消耗元宝超过两倍 gift_conf['consume_coin']
                for cnt in range(consume_award_info[gift_id]['consume_coin'] /
                                 gift_conf.get('consume_coin', 0)):
                    consume_award_info[gift_id]['has_got_cnt'] += 1
                    if gift_conf.get('award', []):
                        msg = gift_conf.get('name', '') + utils.get_msg(
                            'operat', 'consume_award', self).format(
                                gift_conf.get('consume_coin', 0))
                        for award_warp in gift_conf['award'].values():
                            award = utils.get_item_by_random_simple(award_warp)
                            self.add_gift_by_dict(award, msg)
                consume_award_info[gift_id]['consume_coin'] %= gift_conf.get(
                    'consume_coin', 0)
            if old_consume_award_info != consume_award_info:
                user_property_obj.put()
        except:
            print traceback.format_exc()
Esempio n. 23
0
def get_request_list(rk_user,params):
    """获取申请列表以及自己申请的
    """
    data = {'self_requests':[],'friend_requests':[]}
    user_friend_obj = Friend.get(rk_user.uid)
    for fid in user_friend_obj.self_requests:
        request_friend_user = UserBase.get(fid)
        if not request_friend_user:
            continue
        request_friend_property = UserProperty.get(fid)
        leader_card = request_friend_property.leader_card
        temp = {
            'fid':fid,
            'name':request_friend_user.username,
            'country':request_friend_property.country,
            'leader_card':leader_card,
            'lv':request_friend_property.lv,
            'request_time':user_friend_obj.self_requests[fid],
        }
        data['self_requests'].append(temp)
    fids = user_friend_obj.get_request_ids()
    for fid in fids:
        friend_user = UserBase.get(fid)
        if not friend_user:
            continue
        friend_property = UserProperty.get(fid)
        leader_card = friend_property.leader_card
        temp = {
            'fid':fid,
            'name':friend_user.username,
            'country':friend_property.country,
            'leader_card':leader_card,
            'lv':friend_property.lv,
            'request_time':user_friend_obj.requests[fid],
        }
        data['friend_requests'].append(temp)
    return 0,data
Esempio n. 24
0
def get_request_list(rk_user, params):
    """获取申请列表以及自己申请的
    """
    data = {"self_requests": [], "friend_requests": []}
    user_friend_obj = Friend.get(rk_user.uid)
    for fid in user_friend_obj.self_requests:
        request_friend_user = UserBase.get(fid)
        if not request_friend_user:
            continue
        request_friend_property = UserProperty.get(fid)
        leader_card = request_friend_property.leader_card
        temp = {
            "fid": fid,
            "name": request_friend_user.username,
            "country": request_friend_property.country,
            "leader_card": leader_card,
            "lv": request_friend_property.lv,
            "request_time": user_friend_obj.self_requests[fid],
        }
        data["self_requests"].append(temp)
    fids = user_friend_obj.get_request_ids()
    for fid in fids:
        friend_user = UserBase.get(fid)
        if not friend_user:
            continue
        friend_property = UserProperty.get(fid)
        leader_card = friend_property.leader_card
        temp = {
            "fid": fid,
            "name": friend_user.username,
            "country": friend_property.country,
            "leader_card": leader_card,
            "lv": friend_property.lv,
            "request_time": user_friend_obj.requests[fid],
        }
        data["friend_requests"].append(temp)
    return 0, data
Esempio n. 25
0
def ttest_give_award():
    user_property = UserProperty.get_instance(uid)
    uc = UserCards.get_instance(uid) 
    ue = UserEquips.get_instance(uid) 
    up = UserPack.get_instance(uid)
    us = UserSouls.get_instance(uid) 
    #award = {'card':{'1_card':1}}
    #award = {'equip':{'13001_equip': 2}}
    #award = {'props':{'1_props':2}}
    #award = {'soul':{'card':{'1_card':1}}}
    award = {'soul':{'equip':{'13001_equip':1}}}
    print user_property.test_give_award(award)
    uc.do_put()   
    ue.do_put()
    up.do_put()
    us.do_put()
Esempio n. 26
0
    def get_consume_award(self, coin):
        try:
            #获取运营配置的消耗奖励
            consume_award_conf = copy.deepcopy(self.game_config.operat_config.get("consume_award"))
            if not consume_award_conf:
                return
            #获取消耗奖励的内容
            user_property_obj = UserProperty.get(self.uid)
            consume_award_info = user_property_obj.consume_award_info
            old_consume_award_info = copy.deepcopy(consume_award_info)
            #遍历查找奖励内容
            for gift_id in consume_award_conf:
                gift_conf = consume_award_conf[gift_id]
                start_time = gift_conf.get('start_time')
                end_time = gift_conf.get('end_time','2111-11-11 11:11:11')
                now_str = datetime_toString(datetime.datetime.now())
                #未开放或已过期的礼包
                if now_str > end_time or now_str < start_time:
                    continue
                if gift_id not in consume_award_info:
                    consume_award_info[gift_id] = {
                                              'consume_coin': coin,
                                              'has_got_cnt': 0,   # 已领取的次数
                    }
                else:
                    consume_award_info[gift_id]['consume_coin'] += coin

                #金额未达到
                if consume_award_info[gift_id]['consume_coin'] - gift_conf.get('consume_coin',0) < 0:
                    continue
                #满足条件,发奖励

                #已经领取过的礼包
                print('chenhaiou gift_id: ', gift_id)
                # 如果有一次消耗元宝超过两倍 gift_conf['consume_coin']    
                for cnt in range(consume_award_info[gift_id]['consume_coin'] / gift_conf.get('consume_coin',0)):
                    consume_award_info[gift_id]['has_got_cnt'] += 1
                    if gift_conf.get('award', []):
                        msg =  gift_conf.get('name', '') + utils.get_msg('operat', 'consume_award', self).format(gift_conf.get('consume_coin',0))
                        for award_warp in gift_conf['award'].values():
                            award = utils.get_item_by_random_simple(award_warp)
                            self.add_gift_by_dict(award, msg)
                consume_award_info[gift_id]['consume_coin'] %= gift_conf.get('consume_coin',0)
            if old_consume_award_info != consume_award_info:
                user_property_obj.put()
        except:
            print traceback.format_exc()
Esempio n. 27
0
def buy_store_goods():
    """
    玩家购买指定商品时逻辑
    params  参数需包含 store_type: 可选  "packages"   "gold_store"  or  "coin_store" 
                     goods_index:  int  为所买商品在所属类型的index   
    """
    #store_type = params['store_type']
    store_type = 'fight_coin_store'
    goods_index = 1

    buy_goods_info = {}
    goods_list = []
    user_mystery_store_obj = UserMysteryStore.get_instance(uid)

    buy_goods_info = user_mystery_store_obj.store_info()[store_type][goods_index]
    goods_list.append(buy_goods_info['goods'])
    fight_or_coin = "coin" if buy_goods_info.get("coin", 0) else "fight_soul"
    needed_cost = buy_goods_info.get(fight_or_coin, 0)
   
    user_property = UserProperty.get_instance(uid)
    #  根据store_type  决定是 消耗元宝还是战魂
    minus_func = getattr(user_property, "minus_" + fight_or_coin)

    if not minus_func(needed_cost, 'buy_mystery_store_goods'):
         return 11, {'msg': utils.get_msg('user', 'not_enough_' + fight_or_coin)}

    # 发商品    
    # 前端通过rc 是否等于 0 判断是否购买成功
    if not user_mystery_store_obj.update_goods_info_by_index(store_type, goods_index):
        return 11, {'msg': 'has bought this item'}
    all_get_goods = {}
    award_return = {'stamina':0,'gold':0,'coin':0,'gacha_pt':0,'fight_soul':0,'stone':0,'item':{}, 'super_soul': 0, 'material':{},'card':{},'equip':{}, 'normal_soul': {},}

    for goods in goods_list:
        tmp = user_property.test_give_award(_pack_goods(goods), where=u"buy_from_mystery_store")
        for _k in tmp:
            if _k in ['gold','coin','gacha_pt','stone', 'fight_soul','super_soul','stamina']:
                award_return[_k] = award_return.get(_k,0) + tmp.get(_k,0)
            elif _k in ['item','material', 'normal_soul']:
                for __kk in tmp[_k]:
                    award_return[_k][__kk] = award_return[_k].get(__kk,0) + tmp[_k][__kk]
            elif _k in ['card','equip']:
                award_return[_k].update(tmp[_k])
    all_get_goods = {i: award_return[i] for i in award_return if award_return[i]}


    return 0, {'get_info': all_get_goods}
Esempio n. 28
0
def __check_can_add_friend(rk_user,friend):
    """
    检查是否可以添加好友
    """
    #好友id不能是自己
    if rk_user.uid == friend.uid:
        return 11,utils.get_msg('friend','cannot_self')
    user_friend_obj = Friend.get(rk_user.uid)
    #已经添加过的好友不能再添加
    if friend.uid in user_friend_obj.friends:
        return 11,utils.get_msg('friend','already_friend')
    #检查自己是否已经达到最大好友数量
    if user_friend_obj.friend_num >= rk_user.user_property.max_friend_num:
        return 11,utils.get_msg('friend','self_max_friend')
    #检查对方是否已经达到最大好友数量
    friend_friend_obj = Friend.getEx(friend.uid)
    friend_property = UserProperty.get(friend.uid)
    if friend_friend_obj.friend_num >= friend_property.max_friend_num:
        return 11,utils.get_msg('friend','other_max_friend')
    return 0,''
Esempio n. 29
0
def __check_can_add_friend(rk_user, friend):
    """
    检查是否可以添加好友
    """
    # 好友id不能是自己
    if rk_user.uid == friend.uid:
        return 11, utils.get_msg("friend", "cannot_self")
    user_friend_obj = Friend.get(rk_user.uid)
    # 已经添加过的好友不能再添加
    if friend.uid in user_friend_obj.friends:
        return 11, utils.get_msg("friend", "already_friend")
    # 检查自己是否已经达到最大好友数量
    if user_friend_obj.friend_num >= rk_user.user_property.max_friend_num:
        return 11, utils.get_msg("friend", "self_max_friend")
    # 检查对方是否已经达到最大好友数量
    friend_friend_obj = Friend.getEx(friend.uid)
    friend_property = UserProperty.get(friend.uid)
    if friend_friend_obj.friend_num >= friend_property.max_friend_num:
        return 11, utils.get_msg("friend", "other_max_friend")
    return 0, ""
Esempio n. 30
0
def get_recover_times():
    while True:
        data = {}
        all_dungeon = ['normal','daily','special']
        #获取vip等级
        up = UserProperty.get_instance(uid)
        vip_lv = up.vip_cur_level
        vip_conf = game_config.user_vip_conf
        user_config = vip_conf.get(str(vip_lv),{})
        today_str = utils.get_today_str()
        recover_list = ['recover_stamina','recover_pvp_stamina','recover_mystery_store']
        recover_times = up.property_info['recover_times']
        if recover_times['today_str'] == today_str:
            for recover in recover_list:
                data[recover] = user_config['can_'+recover+'_cnt'] - recover_times[recover]
            data['recover_copy'] = {}
            for i in all_dungeon:
                data['recover_copy'][i] = user_config['can_recover_copy_cnt'][i]  - recover_times['recover_copy'][i]
        else:
            up.reset_recover_times()
            data = self.property_info['recover_times']
        return data
Esempio n. 31
0
    def get_lv_gift(self):
        """
        领取等级奖励
        """
        lv_up_award_conf = copy.deepcopy(self.game_config.operat_config.get("lv_up_award"))
        if not lv_up_award_conf:
            return

        main_msg = utils.get_msg('operat', 'lv_up_award', self)

        all_awards_lv = sorted(map(int, lv_up_award_conf.keys()))
        user_property_obj = UserProperty.get(self.uid)
        user_level = user_property_obj.lv
        # 比现在lv小的等级奖励都应该获得
        sould_send_awards_lv = all_awards_lv[:bisect.bisect(all_awards_lv, user_level)]
        for awards_lv in sould_send_awards_lv:
            awards_lv = str(awards_lv)
            if awards_lv in self.has_got_lv_gift:
                continue
            self.add_gift(lv_up_award_conf[awards_lv], main_msg.format(awards_lv))
            self.has_got_lv_gift.append(awards_lv)
        self.put()
Esempio n. 32
0
 def get_bind_phone_gift(self):
     """
     领取绑定奖励, 每个礼拜只能领一次
     miaoyichao
     """
     #获取是否开启手机绑定功能
     bind_phone_is_open = self.game_config.system_config.get(
         'bind_phone_is_open')
     if not bind_phone_is_open:
         return
     #获取绑定手机的奖励配置信息
     bind_phone_award_conf = copy.deepcopy(
         self.game_config.loginbonus_config.get("bind_phone_award"))
     if not bind_phone_award_conf:
         return
     #检查是否绑定手机
     user_property_obj = UserProperty.get(self.uid)
     has_bind = user_property_obj.property_info['bind_phone_number_info'][
         'has_bind']
     if not has_bind:
         return
     #获取当前的星期
     now_week = datetime.date.today().isocalendar()[:2]
     last_got_award_week = user_property_obj.property_info[
         'bind_phone_number_info'].get('last_got_award_week')
     # 最后一次领取的星期 与现在相同  不发
     if last_got_award_week and now_week <= last_got_award_week:
         return
     #获取提示语信息
     msg = utils.get_msg('bind', 'get_bind_award_msg', self)
     #添加奖励
     self.add_gift(bind_phone_award_conf, msg)
     #更新绑定信息
     user_property_obj.property_info['bind_phone_number_info'][
         'last_got_award_week'] = now_week
     user_property_obj.put()
     self.put()
Esempio n. 33
0
def refresh_store_by_self():
    """
    玩家主动刷新时  调用此接口
    params  参数需包含 store_type :  "gold_store"  or  "coin_store"
    """
    game_config.subareas_conf()
    game_config.set_subarea('1') 
    store_type_list = ['coin_store','fight_soul_store']
    needed_cost = game_config.mystery_store["store_refresh_cost"]
    user_property_obj = UserProperty.get_instance(uid)
    # 消耗元宝
    minus_func = getattr(user_property_obj, "minus_coin")

    #根据vip刷新次数
    if not vip.check_limit_recover(user_property_obj,'recover_mystery_store'):
        return 11,{'msg':utils.get_msg('user','max_times')}
    #回复次数+1
    user_property_obj.add_recover_times('recover_mystery_store')
    # 再判断是否 coin or gold  足够
    if not minus_func(needed_cost, 'refresh_mystery_store'):
        return 11,{'msg': utils.get_msg('user', 'not_enough_coin')}
    # 记录 消费元宝log
    #data_log_mod.set_log("ConsumeRecord", rk_user, 
    #                        lv=rk_user.user_property.lv,
    #                        num=needed_cost,
    #                        consume_type='refresh_coin_store',
    #                        before_coin=rk_user.user_property.coin + needed_cost,
    #                        after_coin=rk_user.user_property.coin
    #)

    user_mystery_store_obj = UserMysteryStore.get_instance(uid)
    for store_type  in store_type_list:
        user_mystery_store_obj.refresh_store(store_type)
    #return 0, _pack_store_info(user_mystery_store_obj.store_info())
    k = _pack_store_info(user_mystery_store_obj.store_info())
    print 'data=',json.dumps(k,indent=1)
Esempio n. 34
0
def edit_user(request):
    """
    编辑用户页
    """
    uid = request.GET.get('uid','').strip()
    if not uid:
        pid = request.GET.get('pid','').strip()
        if not pid:
            username = request.GET.get('username','')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid=ocapp.mongo_store.mongo.db['username'].find({'name':username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid


    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')

    user_equips_obj = UserEquips.get_instance(uid)
    user_pack_obj = UserPack.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_card_obj = UserCards.get(user.uid)
    user_real_pvp_obj = user.user_real_pvp
    game_config.set_subarea(user.subarea)

    data = {
        'deck_cards':[],
        'other_cards':[],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k,v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key = lambda x :(all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_instance(user.uid)

    #充值信息
    data['charge_sum_money'] = user_property_obj.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find({'uid':uid})[-1] if ChargeRecord.find({'uid':uid}) else {}

######神秘商店   代码往前方 因为此操作会改变玩家武将,物品等信息##############
    #   刷新  物品列表
    if request.POST.get('refresh_mystery_store',''):
        store_type = request.POST.get('store_type')
        params = {
        }
        mystery_store.refresh_store_by_self(user, params)
    #   购买  物品
    if request.POST.get('buy_mystery_store_goods',''):
        store_type = request.POST.get('store_type')
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'store_type': store_type,
            'goods_index': goods_index,
        }
        mystery_store.buy_store_goods(user, params)
######Pk商店   ##
    #   刷新  物品列表
    if request.POST.get('refresh_pk_store', ''):
        pk_store.refresh_store_by_self(user, {})
    #   购买  物品
    if request.POST.get('buy_pk_store_goods',''):
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'goods_index': goods_index,
        }
        pk_store.buy_store_goods(user, params)
####################

    moderator = auth.get_moderator_by_request(request)
    qa_edit = 'qa edited by '+str(moderator.username)

    #提交状态
    if request.method == "POST":
        state = int(request.POST.get("state","0"))
        state = bool(state)
        #冻结
        if state != user.in_frozen:
            if state:
                user.froze()
            #解冻
            else:
                user.unfroze()
        #删除账号
        if request.POST.get('del_user',''):
            if not user.account:
                return HttpResponseRedirect('/admin/user/?status=1')
            user.account.delete()
        if request.POST.get('add_gold',''):
            add_gold = int(request.POST.get('add_gold'))
            if add_gold>0:
                user_property_obj.add_gold(add_gold,where=qa_edit)
            else:
                user_property_obj.minus_gold(add_gold)
        #增加元宝
        if request.POST.get('add_coin',''):
            add_coin = int(request.POST.get('add_coin'))
            if add_coin>0:
                user_property_obj.add_coin(add_coin, where=qa_edit)
            else:
                user_property_obj.minus_coin(add_coin, where=qa_edit)
        #增加 经验点
        if request.POST.get('add_card_point',''):
            add_card_point = int(request.POST.get('add_card_point'))
            if add_card_point>0:
                user_property_obj.add_card_exp_point(add_card_point, qa_edit)
            else:
                user_property_obj.minus_card_exp_point(add_card_point, qa_edit)
        #增加经验
        if request.POST.get('add_exp',''):
            add_exp = int(request.POST.get('add_exp'))
            user_property_obj.add_exp(add_exp,where=qa_edit)
        #更改等级
        if request.POST.get('modify_lv',''):
            lv = request.POST.get('modify_lv')
            lv_exp = game_config.user_level_config[lv]['exp']
            now_exp = user_property_obj.property_info['exp']
            user_property_obj.add_exp(lv_exp-now_exp,where=qa_edit)
        # 增加pk 积分
        if request.POST.get('add_pk_pt', 0):
            pvp_pt = int(request.POST.get('add_pk_pt'))
            user_real_pvp_obj.add_pt(pvp_pt)
        # 加功勋
        if request.POST.get('add_honor',''):
            honor = int(request.POST.get('add_honor'))
            urp = UserRealPvp.get(user.uid)
            urp.add_honor(honor, where=qa_edit)
        # 加战魂
        if request.POST.get('add_fight_soul',''):
            fight_soul_num = int(request.POST.get('add_fight_soul'))
            user_property_obj.add_fight_soul(fight_soul_num, where=qa_edit)
        #发邮件
        if request.POST.get('mail_title') or request.POST.get('mail_goods'):
            from apps.models.user_mail import UserMail
            from apps.common import utils
            sid = 'system_%s' % (utils.create_gen_id())
            mail_title = request.POST.get('mail_title', '')
            mail_content = request.POST.get('mail_content', '')
            goods_str = request.POST.get('mail_goods', '').strip()
            award = {}
            for goods_info in goods_str.split(";"):
                goods_info = goods_info.strip()
                print "debug guochen email", goods_info
                if not goods_info:
                    continue

                goods_id, num = goods_info.strip().split(":")
                award.setdefault(goods_id, 0)
                award[goods_id] += int(num)

            mailtype = 'system_qa'
            user_mail_obj = UserMail.hget(uid, sid)
            user_mail_obj.set_mail(mailtype=mailtype, title=mail_title, content=mail_content, award=award)

        # 修改vip等级
        if request.POST.get('modify_vip_lv'):
            vip_lv = request.POST.get('modify_vip_lv')
            vip_conf = game_config.user_vip_config.get(str(vip_lv))
            if vip_conf:
                coin = vip_conf['coin']
                user_property_obj.property_info["charge_coins"] = coin
                user_property_obj.put()

        #补武将
        if request.POST.get("add_card_ex", ""):
            user_card_obj = UserCards.get(user.uid)
            strCardInfo = request.POST.get("add_card_ex")
            lstCardInfo = strCardInfo.strip().split(";")
            for strAddCard in lstCardInfo:
                cid = strAddCard.split(":")[0]
                cid = cid.strip() + '_card'
                num = int(strAddCard.split(":")[1])
                for i in range(num):
                    clv = 1
                    user_card_obj.add_card(cid,clv,where=qa_edit)
        #增加武将
        if request.POST.getlist('add_card'):
            add_cids = request.POST.getlist('add_card')
            user_card_obj = UserCards.get(user.uid)
            for add_cid in add_cids:
                if add_cid in game_config.card_config:
                    clv = 1
                    user_card_obj.add_card(add_cid,clv,where=qa_edit)
        #增加武将经验
        if request.POST.get('add_card_exp',''):
            add_exp = int(request.POST.get('add_card_exp'))
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_exp(ucid,add_exp)

        #增加武将技能级别
        if request.POST.get('add_card_sk_lv',''):
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_sk_lv(ucid)
        #卖掉卡片
        if request.POST.get('sell_card',''):
            ucid = request.POST.get('ucid')
            #this_card = Card.get(user_card_obj.cards[ucid]['cid'],user_card_obj.cards[ucid]['lv'])
            user_card_obj.del_card_info([ucid])
            #user.user_property.add_gold(this_card.sell_gold,where=qa_edit)
        #踢出队伍
        if request.POST.get('kick_deck',''):
            kick_index = int(request.POST.get('deck_index'))
            if user_card_obj.deck[kick_index].get('ucid','') != user_card_obj.get_leader(user_card_obj.cur_deck_index):
                user_card_obj.deck[kick_index] = {}
                user_card_obj.put()
        #设置主将
        if request.POST.get('set_deck_main',''):
            ucid = request.POST.get('ucid')
            find_fg = False
            for card in user_card_obj.deck:
                if card.get('leader',0):
                    card['ucid'] = ucid
                    user_card_obj.put()
                    find_fg = True
                    break
            if not find_fg:
                user_card_obj.deck[0] = {'ucid':ucid,'leader':1}
                user_card_obj.put()

        #设置副将
        if request.POST.get('set_deck_sub',''):
            ucid = request.POST.get('ucid')
            for card in user_card_obj.deck:
                if not card:
                    card['ucid'] = ucid
                    user_card_obj.put()
                    break

        #一键送所有武将碎片
        if request.POST.get('give_all_card_soul',''):
            for cid in game_config.card_config:
                user_card_obj.add_card(cid,1,where=qa_edit)
            user_card_obj.put()
            
        #一键送所有武将
        if request.POST.get('give_all_card',''):
            #一键送所有武将
            for cid in all_cids:
                ucid = user_card_obj.add_card(cid, 1, where=qa_edit)[2]
        # if request.POST.get('give_all_card',''):
        #     user_card_obj.cards = {}
        #     user_card_obj.cards_info = {
        #                     "decks":[[{}] * 5] * 10,
        #                     "cur_deck_index":0,
        #                 }
        #     for eid in user_equips_obj.equips:
        #         if user_equips_obj.equips[eid].get("used_by"):
        #             user_equips_obj.equips[eid]['used_by'] = ''
        #     user_equips_obj.put()     
        #     card_index = 0
        #     for cid in all_cids:
        #         clv = 1
        #         ucid = user_card_obj.add_card(cid,clv,where=qa_edit)[2]
        #         if card_index < 5:
        #             user_card_obj.deck[card_index]['ucid'] = ucid
        #         card_index += 1

        #一键删除军队外的所有武将
        if request.POST.get('del_other_card',''):
            decks = []
            for deck in user_card_obj.decks:
                decks.extend([card['ucid'] for card in deck if card.get('ucid','')])
            del_cids = filter(lambda x:x not in decks,user_card_obj.cards.keys())
            user_card_obj.del_card_info(del_cids)
            for eid in user_equips_obj.equips:
                if user_equips_obj.equips[eid].get("used_by"):
                    user_equips_obj.equips[eid]['used_by'] = ''
            user_equips_obj.put()
        #开放战场
        if request.POST.get('open_dungeon',''):
            open_dungeon = request.POST.get('open_dungeon')
            floor_id = open_dungeon.split('-')[0]
            room_id = open_dungeon.split('-')[1]
            user_dungeon_obj.dungeon_info['normal_current']['floor_id'] = floor_id
            user_dungeon_obj.dungeon_info['normal_current']['room_id'] = room_id
            user_dungeon_obj.dungeon_info['normal_current']['status'] = 0
            user_dungeon_obj.put()
        #回复体力
        if request.POST.get('add_stamina', ''):
            add_stamina = int(request.POST.get('add_stamina'))
            user_property_obj.add_stamina(add_stamina)
        #equip
        if request.POST.get("add_equips", ""):
            user_equips_obj = UserEquips.get(uid)
            strEquipsInfo = request.POST.get("add_equips")
            lstEquipsInfo = strEquipsInfo.strip().split(";")
            for strAddEquip in lstEquipsInfo:
                eid = strAddEquip.split(":")[0]
                eid = eid.strip() + '_equip'
                num = int(strAddEquip.split(":")[1])
                for i in range(num):
                    user_equips_obj.add_equip(eid,where=qa_edit)
        #材料
        if request.POST.get("add_mats", ""):
            strItemsInfo = request.POST.get("add_mats")
            lstItemsInfo = strItemsInfo.strip().split(";")
            for strAddItem in lstItemsInfo:
                mid = strAddItem.split(":")[0]
                mid = mid.strip() + '_mat'
                num = int(strAddItem.split(":")[1])
                user_pack_obj.add_material(mid,num,where=qa_edit)
                
        #道具
        if request.POST.get("add_props", ""):
            strPropsInfo = request.POST.get("add_props")
            lstPropsInfo = strPropsInfo.strip().split(";")
            for strAddProps in lstPropsInfo:
                pid = strAddProps.split(":")[0]
                pid = pid.strip() + '_props'
                num = int(strAddProps.split(":")[1])
                user_pack_obj.add_props(pid,num,where=qa_edit)

        if request.POST.get("add_materials_num", 0):
            mid = request.POST.get("mid")
            user_pack_obj.add_material(mid,int(request.POST.get("add_materials_num", 0)),where=qa_edit)


        if  request.POST.get("add_props_num", 0):
            pid = request.POST["prop"]
            user_pack_obj.add_props(pid, int(request.POST.get("add_props_num", 0)),where=qa_edit)

        if request.POST.get('give_all_props'):
            num = int(request.POST.get('all_props_num'))if request.POST.get('all_props_num') else 99
            for iid in game_config.props_config:
                user_pack_obj.add_props(iid,num,where=qa_edit)

        
        if request.POST.get('del_all_props'):
            user_pack_obj.props = {}
            user_pack_obj.put()


        if request.POST.get('give_all_equips'):
            user_equips = UserEquips.get(uid)
            for eid in game_config.equip_config:
                user_equips.add_equip(eid,where=qa_edit)

        #一键送所有的装备碎片
        if request.POST.get('give_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            for eid in game_config.equip_config:
                if game_config.equip_config[eid].get('need_soul_types_num',0):
                    parts = game_config.equip_config[eid].get('need_soul_types_num',0)
                    for i in xrange(1,parts+1):
                        user_souls_obj.add_equip_soul(eid+'_'+str(i),100,where=qa_edit)
                else:
                    user_souls_obj.add_equip_soul(eid,1,where=qa_edit)

        #一键删除所有的装备碎片
        if request.POST.get('del_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            user_souls_obj.equip_souls_info = {}
            user_souls_obj.put()

        #添加单个装备碎片
        if request.POST.get('add_single_equip_soul'):
            sid = request.POST.get('sid')
            num = int(request.POST.get('add_single_equip_soul'))
            user_souls_obj = UserSouls.get_instance(uid)
            user_souls_obj.add_equip_soul(sid, num,where=qa_edit)
            user_souls_obj.put()
        
        if request.POST.get('del_other_equips'):
            user_equips = UserEquips.get(uid)
            ueids = [ ueid for ueid in user_equips.equips if not user_equips.is_used(ueid)]
            user_equips.delete_equip(ueids)
        if request.POST.get('give_all_materials'):
            num = int(request.POST.get('all_materials_num'))if request.POST.get('all_materials_num') else 99
            user_pack_obj = UserPack.get_instance(uid)
            for mid in game_config.material_config:
                user_pack_obj.add_material(mid,num,where=qa_edit)
        if request.POST.get('del_all_materials'):
            user_pack_obj = UserPack.get_instance(uid)
            user_pack_obj.materials = {}
            user_pack_obj.put()
        #一键过新手引导
        if request.POST.get('newbie_pass','') and user.user_property.newbie:
            newbie_steps_num = int(user.game_config.system_config.get('newbie_steps', 6))
            user.user_property.property_info['newbie_steps'] = (1 << newbie_steps_num) - 1
            user.user_property.set_newbie()
            user.user_property.do_put()

        data['status'] = 1

    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(map(lambda x:int(x),game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id,room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index('%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips ]
    data['user_equips'] = [game_config.equip_config.get(eid_dict['eid'])  for eid_dict in eqids_dict]
    all_equips_tag = sorted([int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i,game_config.equip_config.get(str(i)+'_equip')) for i in all_equips_tag]

    #mat
    data['user_materials'] = {mid :{'name':game_config.material_config.get(mid, {}).get('name', ''),'num':user_pack_obj.materials[mid]} for mid in user_pack_obj.materials }
    all_materials_tag = sorted([int(i.split('_')[0]) for i in game_config.material_config.keys()])

    data['all_materials'] = [(i,game_config.material_config.get(str(i)+'_mat')) for i in all_materials_tag]

    #props
    data['user_props'] = {pid :{'name':game_config.props_config.get(pid, {}).get('name'),'num':user_pack_obj.props[pid]} for pid in user_pack_obj.props }
    all_props_tag = sorted([int(i.split('_')[0]) for i in game_config.props_config.keys()])
    data['all_props'] = [(i,game_config.props_config.get(str(i)+'_props')) for i in all_props_tag]

######将魂系统   代码要在其他逻辑偏后 以保证是最新的信息##############
    user_souls_obj = UserSouls.get_instance(uid)
    #   添加  普通将魂
    if request.POST.get('add_normal_soul',''):
        add_normal_soul_num = int(request.POST.get('add_normal_soul'))
        sid = request.POST.get('sid')
        user_souls_obj.add_normal_soul(sid, add_normal_soul_num, where=qa_edit)
    #   批量添加  普通将魂
    if request.POST.get('dump_normal_soul'):
        dump_normal_soul_str = request.POST.get('dump_normal_soul').strip()
        for item in dump_normal_soul_str.split(';'):
            sid, num = item.split(':')
            user_souls_obj.add_normal_soul(sid + '_card', int(num), where=qa_edit)
    #   批量添加  装备碎片
    if request.POST.get('add_equip_soul'):
        add_equip_soul_str = request.POST.get('add_equip_soul').strip()
        for equip_info in add_equip_soul_str.split(';'):
            eid, num = equip_info.split(':')
            user_souls_obj.add_equip_soul(eid, int(num), where=qa_edit)

    #   添加  英雄将魂
    if request.POST.get('add_super_soul',''):
        add_super_soul_num = int(request.POST.get('add_super_soul'))
        if add_super_soul_num >= 0:
            user_souls_obj.add_super_soul(add_super_soul_num, where=qa_edit)
        else:
            user_souls_obj.minus_card_soul('super_soul', -add_super_soul_num, where=qa_edit)

    # 武将碎片兑换武将
    if request.POST.get('soul_exchange_card'):
        sid = request.POST.get('sid')
        params = {'cid':sid}
        user['uid'] = uid
        soul.exchange_card(user, params)
    # 删除将魂
    if request.POST.get('delete_card_soul'):
        sid = request.POST.get('sid')
        num = int(request.POST.get('num'))
        user_souls_obj = UserSouls.get_instance(uid)
        user_souls_obj.minus_card_soul(sid, num,where=qa_edit)
        user_souls_obj.put()
    data.update(copy.deepcopy(soul.get_all(user, None)[1]))

    #武将碎片的显示
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get('star','') + u'星 ' + game_config.card_config[sid].get('name','') + u' 碎片'
    #装备碎片的显示
    for sid, soul_conf in data['equip_souls_info'].items():
        all_parts = sid.split('_')
        if len(all_parts) == 2:
            soul_conf['name'] = str(game_config.equip_config[sid].get('star','')) + u'星 ' + game_config.equip_config[sid].get('name','') + u' 碎片'
        else:
            sid = '%s_%s'%(all_parts[0],all_parts[1])
            soul_conf['name'] = str(game_config.equip_config[sid].get('star','')) + u'星 ' + game_config.equip_config[sid].get('name','') + u' 碎片第%s部分'%all_parts[2]

    #  获取玩家武将信息  代码往后放 以保证是最新的信息
    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader',0)
            eid = ''#user_card_obj.get_eid(ucid)
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)
    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid and ucid in other_ucids:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''#user_card_obj.get_eid(ucid)
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    # 邮件
    show_mails = mails.show_mails(user, {})['show_mails']
    temp_mails =  show_mails.values()

    # 整理awards内容,就显示good_id和num
    for mail in temp_mails:
        for award in mail['awards'][:]:
            if not 'good_id' in award.values()[0]:
                continue
            mail['awards'].append({award.values()[0]['good_id']: award.values()[0].get('num', 0)})
            mail['awards'].pop(0)


    data.update({
        'mails': sorted(temp_mails, key=operator.itemgetter('can_get', 'create_time'), reverse=True),
        'user_property_obj':user_property_obj,
        'user':user,
        'add_time':timestamp_toString(user.add_time),
        'last_login_time':timestamp_toString(user.user_property.login_time),
        'login_record':UserLogin.get(uid).login_info['login_record'],
        'user_real_pvp_obj': user_real_pvp_obj.pvp_detail,
        'mystery_store': mystery_store.get_store_info(user, {}),
        'pk_store': pk_store.get_store_info(user, {}),
    })

    return 'user/edit.html', data
Esempio n. 35
0
def property_real_pvp():
    user_property_obj = UserProperty.get_instance(uid)
    user_real_pvp = user_property_obj.user_base.user_real_pvp
    print user_real_pvp
Esempio n. 36
0
def stove(rk_user,params):
    """
    熔炼炉
    类似一个回收系统,消耗武将,装备等,来得到相应的资源,资源包括战魂,铜钱,素材,道具等。
    返还的范围包括物品的初始花费和后续花费,比如升级某样物品所花费的铜钱也返还
    """
    #练化类型
    category = params.get('category','')
    data = {}
    rc = 0
    user_property_obj = UserProperty.get_instance(rk_user.uid)
    user_card_obj = UserCards.get_instance(rk_user.uid)
    user_equip_obj = UserEquips.get_instance(rk_user.uid)
    user_pack_obj = UserPack.get_instance(rk_user.uid)
    user_property_obj = UserProperty.get_instance(rk_user.uid)
    #出售逻辑很炼丹炉一样,所以直接调用出售逻辑获得数据结构
    #武将
    if category == 'card':
        rc,msg = card.card_stove(rk_user,params)
        if rc:
            return rc,msg
        #获取武将计算系数                       card_update_config:武将强化
        card_stove_gold_coe = float(game_config.card_update_config['card_stove_gold_coe'])
        card_stove_props_coe = float(game_config.card_update_config['card_stove_props_coe'])
        #取得天赋进阶的配置信息                 talent_skill_config 武将天赋技能
        advanced_talent_config = game_config.talent_skill_config['advanced_talent_config']
        #总计获取的战魂
        fight_soul = 0
        #总计返回的进阶丹  
        return_props = 0
        #返回铜钱
        return_gold = 0
        for card_info in msg['cards_info']:
            cid = card_info['cid']
#           print '#### cid=', cid

            #获取武将的当前天赋等级
            cur_talent_lv = card_info['talent_lv']
#           print '#### cur_talent_lv=', cur_talent_lv

            #获取武将星级            card_config 武将设置
            star = str(game_config.card_config[cid].get('star',4))
#           print '#### card star=', star

            #读取计算战魂系统    card_update_config:武将强化
            stove_card_fight_soul = int(game_config.card_update_config['card_stove_fight_soul'].get(star,1))
            #获取当前经验
            cost_update_gold = card_info['exp']
            #武将炼化基础值
            base_gold = int(game_config.card_update_config['sell_base_gold'].get(star,3000))
            #获取当前进阶所需的配置(武将,铜钱,进阶丹)

            #铜钱计算公式 = 基础数值 + int(当前状态总共消耗铜钱 * 0.8)
            return_gold  += base_gold + int(cost_update_gold * card_stove_gold_coe)
            #战魂计算公式 =(1 + 进阶到当前状态总消耗武将个数)* 系数
            fight_soul  += stove_card_fight_soul

            for talent_lv in range(1, int(cur_talent_lv)+1):
                cur_talent = advanced_talent_config[star].get(str(talent_lv),{})
                cost_talent_gold  = int(cur_talent.get('cost_gold',0))
                cost_talent_card  = int(cur_talent.get('card',0))   #武将
                cost_talent_props = cur_talent.get('props',[]) #进阶丹

                #铜钱计算公式 = 基础数值 + int(当前状态总共消耗铜钱 * 0.8)
                return_gold  += int( cost_talent_gold * card_stove_gold_coe )
                #进阶丹 = int(当前状态总消耗 * 0.8)
                if cost_talent_props:
                    return_props += int(cost_talent_props[1] * card_stove_props_coe)
                #战魂计算公式 =(1 + 进阶到当前状态总消耗武将个数)* 系数
                fight_soul  += int(cost_talent_card * stove_card_fight_soul)

#               print '#### return_gold, return_props, fight_soul=', \
#                       return_gold, return_props, fight_soul

        #添加战魂
        user_property_obj.add_fight_soul(fight_soul, 'stove')
        #返还进阶丹
        user_pack_obj.add_props('8_props',return_props, 'stove')
        #用户删卡
        user_card_obj.del_card_info(msg['cards_ucids'], where='stove')
        #返还铜钱
        user_property_obj.add_gold(return_gold, 'stove')
        data = {'gold':return_gold,'fight_soul':fight_soul,'props':{'8_props':return_props}}

    #普通装备(1:武器(攻击),2:护甲(防御),3:头盔(血量),4:饰品(回复)
    elif category == 'common_equip':
        rc,msg = equip.equip_stove(rk_user,params)
        if rc:
            return rc,msg
        # category check,防止category和装备eid不匹配
        for equip_info in msg['equips_info']:
            eid = equip_info['eid']
            eqtype = game_config.equip_config[eid]['eqtype']
            if eqtype not in [1, 2, 3, 4]:
                return 11,{'msg':utils.get_msg('mystery_store','category_not_match')}
        #获取普通装备计算系数                      equip_exp_conf:装备等级配置
        common_stove_gold_coe = float(game_config.equip_exp_config['common_stove_gold_coe'])
        #返回铜钱
        return_gold = 0
        for equip_info in msg['equips_info']:
            # equip_info 是 UserEquips实例的equips[ueid]字段
            eid = equip_info['eid'] 
            uetype = int(game_config.equip_config[eid]['eqtype'])
            #获取当前等级
            cur_equip_lv = equip_info['cur_lv']
            #获取当前经验(升级到该经验所需铜钱)
            cost_update_gold = equip_info['cur_experience']

            #获取装备的星级
            star = str(game_config.equip_config[eid].get('star',1))
            #普通装备炼化基础值            equip_exp_config:装备等级配置

            base_gold = int(game_config.equip_exp_config['common_base_gold'].get(star,500))
            return_gold += int((base_gold + cost_update_gold) * common_stove_gold_coe)


        #用户删除装备
        user_equip_obj.delete_equip(msg['equips_ueids'], where='stove')
        #返还铜钱
        user_property_obj.add_gold(return_gold, 'stove')

        data = {'gold':return_gold}

    #宝物(5:兵法,6:坐骑)
    elif category == 'treasure_equip':
        rc,msg = equip.equip_stove(rk_user,params)
        if rc:
            return rc,msg
        # category check,防止category和装备eid不匹配
        for equip_info in msg['equips_info']:
            eid = equip_info['eid']
            eqtype = game_config.equip_config[eid]['eqtype']
            if eqtype not in [5, 6]:
                return 11,{'msg':utils.get_msg('mystery_store','category_not_match')}

        #获取宝物计算系数                             装备等级配置
        treasure_stove_gold_coe = float(game_config.equip_exp_config['treasure_stove_gold_coe'])
        #返回铜钱
        return_gold = 0
        #返回道具
        return_props = {}
        #返还的 不同等级的经验马/经验书数量
        num_book4=num_book3=num_book2=num_book1=num_horse4=num_horse3=num_horse2=num_horse1 = 0
        # 不同等级的经验马/经验书提供的经验
        props_conf = game_config.props_config
        equip5_prop_list = []
        equip6_prop_list = []
        for prop_id in props_conf:
            if props_conf[prop_id].get('used_by') == 'equip5':
                equip5_prop_list.append((prop_id, props_conf[prop_id]['exp']))
            elif props_conf[prop_id].get('used_by') == 'equip6':
                equip6_prop_list.append((prop_id, props_conf[prop_id]['exp']))
        equip5_prop_list.sort(reverse=True)
        equip6_prop_list.sort(reverse=True)

        def calculate_rebate(prop_exp_list, all_exp):
            rebate_props = {}
            left_exp = all_exp
            for prop, exp in prop_exp_list:
                rebate_props[prop] = left_exp // exp
                left_exp = left_exp % exp
                if not left_exp:
                    break
            return rebate_props

        for equip_info in msg['equips_info']:
            eid = equip_info['eid']
            #宝物装备升级所消耗铜钱
            cost_update_gold = equip_info['cur_experience'] * treasure_stove_gold_coe
            #获取装备的星级
            star = str(game_config.equip_config[eid].get('star',1))
            #宝物装备炼化基础值
            base_gold = game_config.equip_exp_config['treasure_sell_gold'].get(star,500)
            eqtype = game_config.equip_config[eid]['eqtype']
            #计算返还经验书的数量。经验书有不同等级,分别计算个数。5000 3000 1000 500为相应等级的经验书所提供的经验
            if eqtype == 5:
                return_props.update(calculate_rebate(equip5_prop_list, cost_update_gold))
            #计算返还经验马  逻辑同经验书
            elif eqtype == 6:
                return_props.update(calculate_rebate(equip6_prop_list, cost_update_gold))
            return_gold += int(base_gold + (cost_update_gold * treasure_stove_gold_coe))
        #返还道具
        for props_id in return_props:
            user_pack_obj.add_props(props_id,return_props[props_id], 'stove')
        #用户删除装备
        user_equip_obj.delete_equip(msg['equips_ueids'], where='stove')
        #返还铜钱
        user_property_obj.add_gold(return_gold, where='stove')
        data = {'gold':return_gold,'props':return_props}
    else:
        return 11,{'msg':utils.get_msg('mystery_store','no_stove_category')}

#   print '#### stove_info:', data

    return rc,{'stove_info':data}
Esempio n. 37
0
def view_user(request):
    """
     更新用户信息
    """

    uid = request.GET.get('uid', '').strip()
    if not uid:
        pid = request.GET.get('pid', '').strip()
        if not pid:
            username = request.GET.get('username', '')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid = ocapp.mongo_store.mongo.db['username'].find(
                    {'name': username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid

    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')

    ##### view raw db data
    check_raw_db_data = request.GET.get('check_raw_db_data', '').strip()
    db_data_name = request.GET.get('db_data_name', '').strip()

    #using exec/eval, need consider safety, or user could provide malicious
    #string, do bad behavior
    if db_data_name and db_data_name not in raw_db_data_list:
        return HttpResponse(
            'Wrong raw db data name, or not allowed to show yet')

    if check_raw_db_data in ('on', 'checked'):
        data = {'user': {}}
        data['user']['uid'] = uid
        data['user']['username'] = user.username
        module_name, data_class, db_data = db_data_name.split('.')

        #exec('from apps.models.' + module_name + ' import ' + data_class)
        exec 'from apps.models.' + module_name + ' import ' + data_class in globals(
        ), locals()

        if data_class == 'UserMail':
            raw_db_data = eval(data_class + '.hget("' + uid + '", "' + uid +
                               '").' + db_data)
        else:
            raw_db_data = eval(data_class + '.get(' + uid + ').' + db_data)

        data['db_data_name'] = db_data_name
        data['raw_db_data'] = pformat(raw_db_data)
        return render_to_response('user/view_raw.html', data,
                                  RequestContext(request))
    ###### end view raw db

    user_card_obj = UserCards.get(user.uid)
    user_equips_obj = UserEquips.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_pack_obj = UserPack.get_instance(uid)

    data = {
        'user_property_obj': user_property_obj,
        'user': user,
        'deck_cards': [],
        'other_cards': [],
        'add_time': timestamp_toString(user.add_time),
        'last_login_time': timestamp_toString(user.user_property.login_time),
        'login_record': UserLogin.get(uid).login_info['login_record'],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k, v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key=lambda x: (all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_Ex(user.uid)
    #pvp_obj = UserPvp.getEx(user.uid)
    #pvp 排名
    top_model = pvp_redis.get_pvp_redis('1')
    rank = top_model.rank(uid)
    #pvp_obj.rank = rank+1 if rank != None else 0
    #data['pvp'] = pvp_obj
    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(
        map(lambda x: int(x), game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]
                              ['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id, room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'], data['current_dungeon']
                  ['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index(
            '%s-%s' % (data['current_dungeon']['floor_id'],
                       data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader', 0)
            eid = ''
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)

    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips]
    data['user_equips'] = [
        game_config.equip_config[eid_dict['eid']] for eid_dict in eqids_dict
    ]
    all_equips_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i, game_config.equip_config[str(i) + '_equip'])
                          for i in all_equips_tag]

    #mat
    data['user_materials'] = {
        mid: {
            'name': game_config.material_config[mid]['name'],
            'num': user_pack_obj.materials[mid]
        }
        for mid in user_pack_obj.materials
    }
    all_materials_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.material_config.keys()])
    data['all_materials'] = [(i, game_config.material_config[str(i) + '_mat'])
                             for i in all_materials_tag]
    #
    data['charge_sum_money'] = user.user_property.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find(
        {'uid': uid})[-1] if ChargeRecord.find({'uid': uid}) else {}

    ######将魂系统##############

    data.update(soul.get_all(user, None)[1])
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get(
            'star', '') + u'星 ' + game_config.card_config[sid].get('name',
                                                                   '') + u' 将魂'
    #data["index_list"] = request.index_list
    return render_to_response('user/view.html', data, RequestContext(request))
Esempio n. 38
0
from apps.models.user_souls import UserSouls
import json
import copy
import datetime
from apps.common.utils import create_gen_id
from apps.common import utils
import time
from apps.models import data_log_mod
from apps.models import GameModel


#uid = '9100214781'
game_config.subareas_conf()
game_config.set_subarea('1')

up = UserProperty.get_instance(uid)
pprint(up.property_info)
def show_property_fields():
    user_property_obj = UserProperty.get_instance(uid)
    print 'user_property_obj.property_info','-'*50
    pprint(user_property_obj.property_info)
    #user_property_obj.property_info['wipe_out_times'] = 0
    #user_property_obj.do_put()
    '''
    print 'user_property_obj.charge_award_info','-'*50
    print user_property_obj.charge_award_info
    print 'user_property_obj.consume_award_info','-'*50
    print user_property_obj.consume_award_info
    print 'user_property_obj.month_item_info','-'*50
    print user_property_obj.month_item_info
    '''
Esempio n. 39
0
def modify_attr():
    up = UserProperty.get_instance(uid)
    up.property_info['lv'] = 43
    up.do_put()
Esempio n. 40
0
def t_give_award():
    user_property_obj = UserProperty.get_instance(uid)
    user_property_obj.give_award({'gold':3})
    user_property_obj.do_put()
Esempio n. 41
0
 def add_card_exp(self, ucid, exp, where=None):
     """
     增加卡片经验值
     args:
         ucid:卡片的唯一id
         exp:所要增加的经验值
     return:
         {
             'old_exp':原始经验
             'old_lv':原始lv
             'old_attack':原始攻击
             'old_defense':原始防御
             'new_exp':新经验
             'new_lv’:新lv
             'new_attack':新攻击
             'new_defense':新防御
             'max_lv':最大级别
         }
     """
     data = {}
     #获取武将对象
     card_info = self.cards[ucid]
     #加经验
     card_info['exp'] += exp
     #获取用户的等级
     user_lv = UserPropertyMod.get(self.uid).lv
     all_lv = range(card_info['lv'], user_lv + 1)
     #初始化参数
     new_lv = card_info['lv']
     old_lv = card_info['lv']
     cid_config = self.game_config.card_config[card_info['cid']]
     #获取可以升级的最大等级
     for lv in all_lv:
         if lv <= new_lv:
             continue
         if card_info['exp'] >= self.game_config.card_level_config[
                 'exp_type'][cid_config['exp_type']][str(lv)]:
             new_lv = lv
         else:
             break
     #判断是否大于用户的当前等级
     if new_lv >= user_lv:
         card_info['exp'] = self.game_config.card_level_config['exp_type'][
             cid_config['exp_type']][str(user_lv)]
         new_lv = user_lv
     card_info['lv'] = new_lv
     if old_lv < new_lv and where:
         #log message
         card_msg = {
             'cid': card_info['cid'],
             'ctype': cid_config['ctype'],
             'lv': card_info['lv'],
             'exp': card_info['exp'],
             'name': cid_config['name'],
             'star': cid_config['star'],
             'defense': cid_config['defense'],
             'attack': cid_config['attack'],
         }
         log_data = {
             'where': where,
             'ucid': ucid,
             'card_msg': card_msg,
         }
         data_log_mod.set_log('CardUpdate', self, **log_data)
     self.put()
     return data
Esempio n. 42
0
def get_user_lv(uid):
    '''
    * 获取用户的等级
    '''
    up = UserProperty.get(uid)
    return up.property_info.get('lv', 1)
Esempio n. 43
0
def edit_user(request):
    """
    编辑用户页
    """
    uid = request.GET.get('uid', '').strip()
    if not uid:
        pid = request.GET.get('pid', '').strip()
        if not pid:
            username = request.GET.get('username', '')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid = ocapp.mongo_store.mongo.db['username'].find(
                    {'name': username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid

    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')

    user_equips_obj = UserEquips.get_instance(uid)
    user_pack_obj = UserPack.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_card_obj = UserCards.get(user.uid)
    user_real_pvp_obj = user.user_real_pvp
    game_config.set_subarea(user.subarea)

    data = {
        'deck_cards': [],
        'other_cards': [],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k, v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key=lambda x: (all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_instance(user.uid)

    #充值信息
    data['charge_sum_money'] = user_property_obj.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find(
        {'uid': uid})[-1] if ChargeRecord.find({'uid': uid}) else {}

    ######神秘商店   代码往前方 因为此操作会改变玩家武将,物品等信息##############
    #   刷新  物品列表
    if request.POST.get('refresh_mystery_store', ''):
        store_type = request.POST.get('store_type')
        params = {}
        mystery_store.refresh_store_by_self(user, params)
    #   购买  物品
    if request.POST.get('buy_mystery_store_goods', ''):
        store_type = request.POST.get('store_type')
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'store_type': store_type,
            'goods_index': goods_index,
        }
        mystery_store.buy_store_goods(user, params)
######Pk商店   ##
#   刷新  物品列表
    if request.POST.get('refresh_pk_store', ''):
        pk_store.refresh_store_by_self(user, {})
    #   购买  物品
    if request.POST.get('buy_pk_store_goods', ''):
        goods_index = int(request.POST.get('goods_index'))
        params = {
            'goods_index': goods_index,
        }
        pk_store.buy_store_goods(user, params)


####################

    moderator = auth.get_moderator_by_request(request)
    qa_edit = 'qa edited by ' + str(moderator.username)

    #提交状态
    if request.method == "POST":
        state = int(request.POST.get("state", "0"))
        state = bool(state)
        #冻结
        if state != user.in_frozen:
            if state:
                user.froze()
            #解冻
            else:
                user.unfroze()
        #删除账号
        if request.POST.get('del_user', ''):
            if not user.account:
                return HttpResponseRedirect('/admin/user/?status=1')
            user.account.delete()
        if request.POST.get('add_gold', ''):
            add_gold = int(request.POST.get('add_gold'))
            if add_gold > 0:
                user_property_obj.add_gold(add_gold, where=qa_edit)
            else:
                user_property_obj.minus_gold(add_gold)
        #增加元宝
        if request.POST.get('add_coin', ''):
            add_coin = int(request.POST.get('add_coin'))
            if add_coin > 0:
                user_property_obj.add_coin(add_coin, where=qa_edit)
            else:
                user_property_obj.minus_coin(add_coin, where=qa_edit)
        #增加 经验点
        if request.POST.get('add_card_point', ''):
            add_card_point = int(request.POST.get('add_card_point'))
            if add_card_point > 0:
                user_property_obj.add_card_exp_point(add_card_point, qa_edit)
            else:
                user_property_obj.minus_card_exp_point(add_card_point, qa_edit)
        #增加经验
        if request.POST.get('add_exp', ''):
            add_exp = int(request.POST.get('add_exp'))
            user_property_obj.add_exp(add_exp, where=qa_edit)
        #更改等级
        if request.POST.get('modify_lv', ''):
            lv = request.POST.get('modify_lv')
            lv_exp = game_config.user_level_config[lv]['exp']
            now_exp = user_property_obj.property_info['exp']
            user_property_obj.add_exp(lv_exp - now_exp, where=qa_edit)
        # 增加pk 积分
        if request.POST.get('add_pk_pt', 0):
            pvp_pt = int(request.POST.get('add_pk_pt'))
            user_real_pvp_obj.add_pt(pvp_pt)
        # 加功勋
        if request.POST.get('add_honor', ''):
            honor = int(request.POST.get('add_honor'))
            urp = UserRealPvp.get(user.uid)
            urp.add_honor(honor, where=qa_edit)
        # 加战魂
        if request.POST.get('add_fight_soul', ''):
            fight_soul_num = int(request.POST.get('add_fight_soul'))
            user_property_obj.add_fight_soul(fight_soul_num, where=qa_edit)
        #发邮件
        if request.POST.get('mail_title') or request.POST.get('mail_goods'):
            from apps.models.user_mail import UserMail
            from apps.common import utils
            sid = 'system_%s' % (utils.create_gen_id())
            mail_title = request.POST.get('mail_title', '')
            mail_content = request.POST.get('mail_content', '')
            goods_str = request.POST.get('mail_goods', '').strip()
            award = {}
            for goods_info in goods_str.split(";"):
                goods_info = goods_info.strip()
                print "debug guochen email", goods_info
                if not goods_info:
                    continue

                goods_id, num = goods_info.strip().split(":")
                award.setdefault(goods_id, 0)
                award[goods_id] += int(num)

            mailtype = 'system_qa'
            user_mail_obj = UserMail.hget(uid, sid)
            user_mail_obj.set_mail(mailtype=mailtype,
                                   title=mail_title,
                                   content=mail_content,
                                   award=award)

        # 修改vip等级
        if request.POST.get('modify_vip_lv'):
            vip_lv = request.POST.get('modify_vip_lv')
            vip_conf = game_config.user_vip_config.get(str(vip_lv))
            if vip_conf:
                coin = vip_conf['coin']
                user_property_obj.property_info["charge_coins"] = coin
                user_property_obj.put()

        #补武将
        if request.POST.get("add_card_ex", ""):
            user_card_obj = UserCards.get(user.uid)
            strCardInfo = request.POST.get("add_card_ex")
            lstCardInfo = strCardInfo.strip().split(";")
            for strAddCard in lstCardInfo:
                cid = strAddCard.split(":")[0]
                cid = cid.strip() + '_card'
                num = int(strAddCard.split(":")[1])
                for i in range(num):
                    clv = 1
                    user_card_obj.add_card(cid, clv, where=qa_edit)
        #增加武将
        if request.POST.getlist('add_card'):
            add_cids = request.POST.getlist('add_card')
            user_card_obj = UserCards.get(user.uid)
            for add_cid in add_cids:
                if add_cid in game_config.card_config:
                    clv = 1
                    user_card_obj.add_card(add_cid, clv, where=qa_edit)
        #增加武将经验
        if request.POST.get('add_card_exp', ''):
            add_exp = int(request.POST.get('add_card_exp'))
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_exp(ucid, add_exp)

        #增加武将技能级别
        if request.POST.get('add_card_sk_lv', ''):
            ucid = request.POST.get('ucid')
            user_card_obj.add_card_sk_lv(ucid)
        #卖掉卡片
        if request.POST.get('sell_card', ''):
            ucid = request.POST.get('ucid')
            #this_card = Card.get(user_card_obj.cards[ucid]['cid'],user_card_obj.cards[ucid]['lv'])
            user_card_obj.del_card_info([ucid])
            #user.user_property.add_gold(this_card.sell_gold,where=qa_edit)
        #踢出队伍
        if request.POST.get('kick_deck', ''):
            kick_index = int(request.POST.get('deck_index'))
            if user_card_obj.deck[kick_index].get(
                    'ucid', '') != user_card_obj.get_leader(
                        user_card_obj.cur_deck_index):
                user_card_obj.deck[kick_index] = {}
                user_card_obj.put()
        #设置主将
        if request.POST.get('set_deck_main', ''):
            ucid = request.POST.get('ucid')
            find_fg = False
            for card in user_card_obj.deck:
                if card.get('leader', 0):
                    card['ucid'] = ucid
                    user_card_obj.put()
                    find_fg = True
                    break
            if not find_fg:
                user_card_obj.deck[0] = {'ucid': ucid, 'leader': 1}
                user_card_obj.put()

        #设置副将
        if request.POST.get('set_deck_sub', ''):
            ucid = request.POST.get('ucid')
            for card in user_card_obj.deck:
                if not card:
                    card['ucid'] = ucid
                    user_card_obj.put()
                    break

        #一键送所有武将碎片
        if request.POST.get('give_all_card_soul', ''):
            for cid in game_config.card_config:
                user_card_obj.add_card(cid, 1, where=qa_edit)
            user_card_obj.put()

        #一键送所有武将
        if request.POST.get('give_all_card', ''):
            #一键送所有武将
            for cid in all_cids:
                ucid = user_card_obj.add_card(cid, 1, where=qa_edit)[2]
        # if request.POST.get('give_all_card',''):
        #     user_card_obj.cards = {}
        #     user_card_obj.cards_info = {
        #                     "decks":[[{}] * 5] * 10,
        #                     "cur_deck_index":0,
        #                 }
        #     for eid in user_equips_obj.equips:
        #         if user_equips_obj.equips[eid].get("used_by"):
        #             user_equips_obj.equips[eid]['used_by'] = ''
        #     user_equips_obj.put()
        #     card_index = 0
        #     for cid in all_cids:
        #         clv = 1
        #         ucid = user_card_obj.add_card(cid,clv,where=qa_edit)[2]
        #         if card_index < 5:
        #             user_card_obj.deck[card_index]['ucid'] = ucid
        #         card_index += 1

        #一键删除军队外的所有武将
        if request.POST.get('del_other_card', ''):
            decks = []
            for deck in user_card_obj.decks:
                decks.extend(
                    [card['ucid'] for card in deck if card.get('ucid', '')])
            del_cids = filter(lambda x: x not in decks,
                              user_card_obj.cards.keys())
            user_card_obj.del_card_info(del_cids)
            for eid in user_equips_obj.equips:
                if user_equips_obj.equips[eid].get("used_by"):
                    user_equips_obj.equips[eid]['used_by'] = ''
            user_equips_obj.put()
        #开放战场
        if request.POST.get('open_dungeon', ''):
            open_dungeon = request.POST.get('open_dungeon')
            floor_id = open_dungeon.split('-')[0]
            room_id = open_dungeon.split('-')[1]
            user_dungeon_obj.dungeon_info['normal_current'][
                'floor_id'] = floor_id
            user_dungeon_obj.dungeon_info['normal_current'][
                'room_id'] = room_id
            user_dungeon_obj.dungeon_info['normal_current']['status'] = 0
            user_dungeon_obj.put()
        #回复体力
        if request.POST.get('add_stamina', ''):
            add_stamina = int(request.POST.get('add_stamina'))
            user_property_obj.add_stamina(add_stamina)
        #equip
        if request.POST.get("add_equips", ""):
            user_equips_obj = UserEquips.get(uid)
            strEquipsInfo = request.POST.get("add_equips")
            lstEquipsInfo = strEquipsInfo.strip().split(";")
            for strAddEquip in lstEquipsInfo:
                eid = strAddEquip.split(":")[0]
                eid = eid.strip() + '_equip'
                num = int(strAddEquip.split(":")[1])
                for i in range(num):
                    user_equips_obj.add_equip(eid, where=qa_edit)
        #材料
        if request.POST.get("add_mats", ""):
            strItemsInfo = request.POST.get("add_mats")
            lstItemsInfo = strItemsInfo.strip().split(";")
            for strAddItem in lstItemsInfo:
                mid = strAddItem.split(":")[0]
                mid = mid.strip() + '_mat'
                num = int(strAddItem.split(":")[1])
                user_pack_obj.add_material(mid, num, where=qa_edit)

        #道具
        if request.POST.get("add_props", ""):
            strPropsInfo = request.POST.get("add_props")
            lstPropsInfo = strPropsInfo.strip().split(";")
            for strAddProps in lstPropsInfo:
                pid = strAddProps.split(":")[0]
                pid = pid.strip() + '_props'
                num = int(strAddProps.split(":")[1])
                user_pack_obj.add_props(pid, num, where=qa_edit)

        if request.POST.get("add_materials_num", 0):
            mid = request.POST.get("mid")
            user_pack_obj.add_material(
                mid,
                int(request.POST.get("add_materials_num", 0)),
                where=qa_edit)

        if request.POST.get("add_props_num", 0):
            pid = request.POST["prop"]
            user_pack_obj.add_props(pid,
                                    int(request.POST.get("add_props_num", 0)),
                                    where=qa_edit)

        if request.POST.get('give_all_props'):
            num = int(request.POST.get('all_props_num')) if request.POST.get(
                'all_props_num') else 99
            for iid in game_config.props_config:
                user_pack_obj.add_props(iid, num, where=qa_edit)

        if request.POST.get('del_all_props'):
            user_pack_obj.props = {}
            user_pack_obj.put()

        if request.POST.get('give_all_equips'):
            user_equips = UserEquips.get(uid)
            for eid in game_config.equip_config:
                user_equips.add_equip(eid, where=qa_edit)

        #一键送所有的装备碎片
        if request.POST.get('give_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            for eid in game_config.equip_config:
                if game_config.equip_config[eid].get('need_soul_types_num', 0):
                    parts = game_config.equip_config[eid].get(
                        'need_soul_types_num', 0)
                    for i in xrange(1, parts + 1):
                        user_souls_obj.add_equip_soul(eid + '_' + str(i),
                                                      100,
                                                      where=qa_edit)
                else:
                    user_souls_obj.add_equip_soul(eid, 1, where=qa_edit)

        #一键删除所有的装备碎片
        if request.POST.get('del_all_equip_soul'):
            user_souls_obj = UserSouls.get(uid)
            user_souls_obj.equip_souls_info = {}
            user_souls_obj.put()

        #添加单个装备碎片
        if request.POST.get('add_single_equip_soul'):
            sid = request.POST.get('sid')
            num = int(request.POST.get('add_single_equip_soul'))
            user_souls_obj = UserSouls.get_instance(uid)
            user_souls_obj.add_equip_soul(sid, num, where=qa_edit)
            user_souls_obj.put()

        if request.POST.get('del_other_equips'):
            user_equips = UserEquips.get(uid)
            ueids = [
                ueid for ueid in user_equips.equips
                if not user_equips.is_used(ueid)
            ]
            user_equips.delete_equip(ueids)
        if request.POST.get('give_all_materials'):
            num = int(request.POST.get('all_materials_num')
                      ) if request.POST.get('all_materials_num') else 99
            user_pack_obj = UserPack.get_instance(uid)
            for mid in game_config.material_config:
                user_pack_obj.add_material(mid, num, where=qa_edit)
        if request.POST.get('del_all_materials'):
            user_pack_obj = UserPack.get_instance(uid)
            user_pack_obj.materials = {}
            user_pack_obj.put()
        #一键过新手引导
        if request.POST.get('newbie_pass', '') and user.user_property.newbie:
            newbie_steps_num = int(
                user.game_config.system_config.get('newbie_steps', 6))
            user.user_property.property_info['newbie_steps'] = (
                1 << newbie_steps_num) - 1
            user.user_property.set_newbie()
            user.user_property.do_put()

        data['status'] = 1

    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(
        map(lambda x: int(x), game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]
                              ['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id, room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'], data['current_dungeon']
                  ['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index(
            '%s-%s' % (data['current_dungeon']['floor_id'],
                       data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips]
    data['user_equips'] = [
        game_config.equip_config.get(eid_dict['eid'])
        for eid_dict in eqids_dict
    ]
    all_equips_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i, game_config.equip_config.get(str(i) + '_equip'))
                          for i in all_equips_tag]

    #mat
    data['user_materials'] = {
        mid: {
            'name': game_config.material_config.get(mid, {}).get('name', ''),
            'num': user_pack_obj.materials[mid]
        }
        for mid in user_pack_obj.materials
    }
    all_materials_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.material_config.keys()])

    data['all_materials'] = [(i,
                              game_config.material_config.get(str(i) + '_mat'))
                             for i in all_materials_tag]

    #props
    data['user_props'] = {
        pid: {
            'name': game_config.props_config.get(pid, {}).get('name'),
            'num': user_pack_obj.props[pid]
        }
        for pid in user_pack_obj.props
    }
    all_props_tag = sorted(
        [int(i.split('_')[0]) for i in game_config.props_config.keys()])
    data['all_props'] = [(i, game_config.props_config.get(str(i) + '_props'))
                         for i in all_props_tag]

    ######将魂系统   代码要在其他逻辑偏后 以保证是最新的信息##############
    user_souls_obj = UserSouls.get_instance(uid)
    #   添加  普通将魂
    if request.POST.get('add_normal_soul', ''):
        add_normal_soul_num = int(request.POST.get('add_normal_soul'))
        sid = request.POST.get('sid')
        user_souls_obj.add_normal_soul(sid, add_normal_soul_num, where=qa_edit)
    #   批量添加  普通将魂
    if request.POST.get('dump_normal_soul'):
        dump_normal_soul_str = request.POST.get('dump_normal_soul').strip()
        for item in dump_normal_soul_str.split(';'):
            sid, num = item.split(':')
            user_souls_obj.add_normal_soul(sid + '_card',
                                           int(num),
                                           where=qa_edit)
    #   批量添加  装备碎片
    if request.POST.get('add_equip_soul'):
        add_equip_soul_str = request.POST.get('add_equip_soul').strip()
        for equip_info in add_equip_soul_str.split(';'):
            eid, num = equip_info.split(':')
            user_souls_obj.add_equip_soul(eid, int(num), where=qa_edit)

    #   添加  英雄将魂
    if request.POST.get('add_super_soul', ''):
        add_super_soul_num = int(request.POST.get('add_super_soul'))
        if add_super_soul_num >= 0:
            user_souls_obj.add_super_soul(add_super_soul_num, where=qa_edit)
        else:
            user_souls_obj.minus_card_soul('super_soul',
                                           -add_super_soul_num,
                                           where=qa_edit)

    # 武将碎片兑换武将
    if request.POST.get('soul_exchange_card'):
        sid = request.POST.get('sid')
        params = {'cid': sid}
        user['uid'] = uid
        soul.exchange_card(user, params)
    # 删除将魂
    if request.POST.get('delete_card_soul'):
        sid = request.POST.get('sid')
        num = int(request.POST.get('num'))
        user_souls_obj = UserSouls.get_instance(uid)
        user_souls_obj.minus_card_soul(sid, num, where=qa_edit)
        user_souls_obj.put()
    data.update(copy.deepcopy(soul.get_all(user, None)[1]))

    #武将碎片的显示
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get(
            'star', '') + u'星 ' + game_config.card_config[sid].get('name',
                                                                   '') + u' 碎片'
    #装备碎片的显示
    for sid, soul_conf in data['equip_souls_info'].items():
        all_parts = sid.split('_')
        if len(all_parts) == 2:
            soul_conf['name'] = str(game_config.equip_config[sid].get(
                'star', '')) + u'星 ' + game_config.equip_config[sid].get(
                    'name', '') + u' 碎片'
        else:
            sid = '%s_%s' % (all_parts[0], all_parts[1])
            soul_conf['name'] = str(game_config.equip_config[sid].get(
                'star', '')) + u'星 ' + game_config.equip_config[sid].get(
                    'name', '') + u' 碎片第%s部分' % all_parts[2]

    #  获取玩家武将信息  代码往后放 以保证是最新的信息
    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader', 0)
            eid = ''  #user_card_obj.get_eid(ucid)
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)
    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid and ucid in other_ucids:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''  #user_card_obj.get_eid(ucid)
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    # 邮件
    show_mails = mails.show_mails(user, {})['show_mails']
    temp_mails = show_mails.values()

    # 整理awards内容,就显示good_id和num
    for mail in temp_mails:
        for award in mail['awards'][:]:
            if not 'good_id' in award.values()[0]:
                continue
            mail['awards'].append({
                award.values()[0]['good_id']:
                award.values()[0].get('num', 0)
            })
            mail['awards'].pop(0)

    data.update({
        'mails':
        sorted(temp_mails,
               key=operator.itemgetter('can_get', 'create_time'),
               reverse=True),
        'user_property_obj':
        user_property_obj,
        'user':
        user,
        'add_time':
        timestamp_toString(user.add_time),
        'last_login_time':
        timestamp_toString(user.user_property.login_time),
        'login_record':
        UserLogin.get(uid).login_info['login_record'],
        'user_real_pvp_obj':
        user_real_pvp_obj.pvp_detail,
        'mystery_store':
        mystery_store.get_store_info(user, {}),
        'pk_store':
        pk_store.get_store_info(user, {}),
    })

    return 'user/edit.html', data
Esempio n. 44
0
def view_user(request):
    """
     更新用户信息
    """

    uid = request.GET.get('uid','').strip()
    if not uid:
        pid = request.GET.get('pid','').strip()
        if not pid:
            username = request.GET.get('username','')
            if not username:
                return HttpResponseRedirect('/admin/user/?status=1')
            try:
                uid=ocapp.mongo_store.mongo.db['username'].find({'name':username})[0]['uid']
            except:
                return HttpResponseRedirect('/admin/user/?status=1')
        else:
            account = AccountMapping.get(pid)
            if not account:
                return HttpResponseRedirect('/admin/user/?status=1')
            uid = account.uid

    user = UserBase.get(uid)
    if not user or not user.account:
        return HttpResponseRedirect('/admin/user/?status=1')




    ##### view raw db data
    check_raw_db_data = request.GET.get('check_raw_db_data','').strip()
    db_data_name = request.GET.get('db_data_name','').strip()

    #using exec/eval, need consider safety, or user could provide malicious
    #string, do bad behavior
    if db_data_name and db_data_name not in raw_db_data_list:
        return HttpResponse('Wrong raw db data name, or not allowed to show yet')

    if check_raw_db_data in ('on', 'checked'):
        data={ 'user': {} }
        data['user']['uid'] = uid
        data['user']['username'] = user.username
        module_name, data_class, db_data = db_data_name.split('.')

        #exec('from apps.models.' + module_name + ' import ' + data_class)
        exec 'from apps.models.' + module_name + ' import ' + data_class in globals(), locals() 

        if data_class == 'UserMail':
            raw_db_data = eval(data_class + '.hget("' + uid + '", "' + uid + '").' + db_data )
        else:
            raw_db_data = eval(data_class + '.get(' + uid + ').' + db_data )

        data['db_data_name'] = db_data_name
        data['raw_db_data'] = pformat(raw_db_data)
        return render_to_response('user/view_raw.html', data, 
                    RequestContext(request))
    ###### end view raw db


    user_card_obj = UserCards.get(user.uid)
    user_equips_obj = UserEquips.get_instance(uid)
    user_property_obj = UserProperty.get(uid)
    user_pack_obj = UserPack.get_instance(uid)

    data = {
        'user_property_obj':user_property_obj,
        'user':user,
        'deck_cards':[],
        'other_cards':[],
        'add_time':timestamp_toString(user.add_time),
        'last_login_time':timestamp_toString(user.user_property.login_time),
        'login_record':UserLogin.get(uid).login_info['login_record'],
    }
    if not user.client_type:
        data['client_type'] = 'appstore_ios'
    else:
        data['client_type'] = user.client_type
    all_cards = []

    all_cids = game_config.card_config.keys()

    all_cids_cp = copy.deepcopy(game_config.card_config)
    for k,v in all_cids_cp.iteritems():
        all_cids_cp[k]['no'] = int(k.split('_')[0])
    all_cids.sort(key = lambda x :(all_cids_cp[x]['no']))
    for cid in all_cids:
        all_cards.append(Card.get(cid))
    data['all_cards'] = all_cards
    #用户当前战场信息
    user_dungeon_obj = UserDungeon.get_Ex(user.uid)
    #pvp_obj = UserPvp.getEx(user.uid)
    #pvp 排名
    top_model = pvp_redis.get_pvp_redis('1')
    rank = top_model.rank(uid)
    #pvp_obj.rank = rank+1 if rank != None else 0
    #data['pvp'] = pvp_obj
    data['current_dungeon'] = user_dungeon_obj.dungeon_info['normal_current']
    #配置中的所有战场
    data['all_dungeon'] = []
    floor_ids = sorted(map(lambda x:int(x),game_config.normal_dungeon_config.keys()))
    for floor_id in floor_ids:
        for room_id in sorted(game_config.normal_dungeon_config[str(floor_id)]['rooms'].keys()):
            data['all_dungeon'].append('%d-%s' % (floor_id,room_id))
    #用户已经达到最深层时
    if '%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']) == data['all_dungeon'][-1]:
        data['max_dungeon'] = True
    else:
        data['max_dungeon'] = False
        now_index = data['all_dungeon'].index('%s-%s' % (data['current_dungeon']['floor_id'],data['current_dungeon']['room_id']))
        data['all_dungeon'] = data['all_dungeon'][now_index + 1:]

    deck_num = 0
    for card in user_card_obj.deck:
        if card:
            ucid = card['ucid']
            card_info = user_card_obj.cards[ucid]
            this_card = Card.get_from_dict(card_info)
            this_card.ucid = ucid
            this_card.is_leader = card.get('leader',0)
            eid = ''
            if eid:
                this_card.equip = game_config.equip_config[eid]['name']
            else:
                this_card.equip = ''
            this_card.now_exp = card_info['exp']
            data['deck_cards'].append(this_card)
            deck_num += 1
        else:
            data['deck_cards'].append(None)

    data['deck_num'] = deck_num
    other_ucids = user_card_obj.cards.keys()
    for card in user_card_obj.deck:
        ucid = card.get('ucid')
        if ucid:
            other_ucids.remove(ucid)
    for ucid in other_ucids:
        card_info = user_card_obj.cards[ucid]
        this_card = Card.get_from_dict(card_info)
        this_card.ucid = ucid
        this_card.now_exp = card_info['exp']
        eid = ''
        if eid:
            this_card.equip = game_config.equip_config[eid]['name']
        else:
            this_card.equip = ''
        data['other_cards'].append(this_card)
    #重新整理 下编队
    user_card_obj.decks

    #装备
    equips = user_equips_obj.equips
    eqids_dict = [user_equips_obj.get_equip_dict(ueid) for ueid in equips ]
    data['user_equips'] = [game_config.equip_config[eid_dict['eid']]  for eid_dict in eqids_dict]
    all_equips_tag = sorted([int(i.split('_')[0]) for i in game_config.equip_config.keys()])
    data['all_equips'] = [(i,game_config.equip_config[str(i)+'_equip']) for i in all_equips_tag]

    #mat
    data['user_materials'] = {mid :{'name':game_config.material_config[mid]['name'],'num':user_pack_obj.materials[mid]} for mid in user_pack_obj.materials }
    all_materials_tag = sorted([int(i.split('_')[0]) for i in game_config.material_config.keys()])
    data['all_materials'] = [(i,game_config.material_config[str(i)+'_mat']) for i in all_materials_tag]
    #
    data['charge_sum_money'] = user.user_property.charge_sum_money
    data['last_charge_record'] = ChargeRecord.find({'uid':uid})[-1] if ChargeRecord.find({'uid':uid}) else {}


######将魂系统##############

    data.update(soul.get_all(user, None)[1])
    for sid, soul_conf in data['normal_souls'].items():
        soul_conf['name'] = game_config.card_config[sid].get('star','') + u'星 ' + game_config.card_config[sid].get('name','') + u' 将魂'
    #data["index_list"] = request.index_list
    return render_to_response('user/view.html',data,RequestContext(request))
Esempio n. 45
0
 def add_card_exp(self,ucid,exp,where=None):
     """
     增加卡片经验值
     args:
         ucid:卡片的唯一id
         exp:所要增加的经验值
     return:
         {
             'old_exp':原始经验
             'old_lv':原始lv
             'old_attack':原始攻击
             'old_defense':原始防御
             'new_exp':新经验
             'new_lv’:新lv
             'new_attack':新攻击
             'new_defense':新防御
             'max_lv':最大级别
         }
     """
     data = {}
     #获取武将对象
     card_info = self.cards[ucid]
     #加经验
     card_info['exp'] += exp
     #获取用户的等级
     user_lv = UserPropertyMod.get(self.uid).lv
     all_lv = range(card_info['lv'],user_lv + 1)
     #初始化参数
     new_lv = card_info['lv']
     old_lv = card_info['lv']
     cid_config = self.game_config.card_config[card_info['cid']]
     #获取可以升级的最大等级
     for lv in all_lv:
         if lv <= new_lv:
             continue
         if card_info['exp'] >= self.game_config.card_level_config['exp_type'][cid_config['exp_type']][str(lv)]:
             new_lv = lv
         else:
             break
     #判断是否大于用户的当前等级
     if new_lv>=user_lv:
         card_info['exp'] = self.game_config.card_level_config['exp_type'][cid_config['exp_type']][str(user_lv)]
         new_lv = user_lv
     card_info['lv'] = new_lv
     if old_lv < new_lv and where:
         #log message
         card_msg = {
             'cid': card_info['cid'],
             'ctype': cid_config['ctype'],
             'lv': card_info['lv'],
             'exp': card_info['exp'],
             'name': cid_config['name'],
             'star': cid_config['star'],
             'defense': cid_config['defense'],
             'attack': cid_config['attack'],
         }
         log_data = {
             'where':where,
             'ucid':ucid,
             'card_msg': card_msg,
         }
         data_log_mod.set_log('CardUpdate', self, **log_data)
     self.put()
     return data
Esempio n. 46
0
def get_box_gift(rk_user, params):
    '''
    * 领取宝箱奖励
    '''
    data = {}
    get_step = params.get('step', '0')
    floor_id = params.get('floor_id')
    box_type = params.get('box_type')
    dungeon_config = game_config.dungeon_world_config.get('box_info', {})
    floor_conf = dungeon_config.get(floor_id, {})
    if not box_type in floor_conf:
        return 11, {'msg': utils.get_msg('dungeon', 'no_box_config')}
    box_info = floor_conf[box_type]
    if get_step == '0':
        #处理前端要显示的宝箱的内容
        data['box_info'] = utils.format_award(box_info)
        data['box_star'] = int(floor_conf[box_type + '_star'])
        return 0, data
    elif get_step == '1':
        #处理前端要领取的宝箱信息
        user_dungeon_obj = UserDungeon.get(rk_user.uid)
        has_played_info_copy = copy.deepcopy(user_dungeon_obj.has_played_info)
        if floor_id in has_played_info_copy.get('normal', {}):
            floor_info = has_played_info_copy['normal'][floor_id]
            #查看领取条件是否合适
            floor_get_star = floor_info['cur_star']
            if floor_get_star < int(floor_conf[box_type + '_star']):
                return 11, {
                    'msg': utils.get_msg('dungeon', 'box_can_not_open')
                }
            if floor_info[box_type]:
                #宝箱已领取情况
                return 11, {
                    'msg': utils.get_msg('dungeon', 'has_got_box_award')
                }
            else:
                #领取宝箱逻辑 格式化内容
                award = utils.format_award(box_info)
                user_property_obj = UserProperty.get(rk_user.uid)
                #将宝箱里面的内容添加到用户信息里面
                award_info = user_property_obj.test_give_award(award,
                                                               where='get_' +
                                                               box_type)
                #格式化要返回的内容
                data['award_info'] = award_info
                data['floor_info'] = {}
                data['floor_info']['floor_id'] = floor_id
                data['floor_info']['box_type'] = box_type
                data['floor_info']['box_flag'] = True
                #重置标志位
                user_dungeon_obj.has_played_info['normal'][floor_id][
                    box_type] = True
                user_dungeon_obj.put()
                #判断新手引导
                newbie_step = int(params.get('newbie_step', 0))
                if newbie_step:
                    rk_user.user_property.set_newbie_steps(
                        newbie_step, "get_box_gift")
                #结果返回
                return 0, data
        else:
            return 11, {
                'msg': utils.get_msg('dungeon', 'invalid_dungeon_info')
            }
    else:
        #未识别的内容
        return 11, {'msg': utils.get_msg('dungeon', 'invalid_dungeon_info')}
Esempio n. 47
0
def add_vip_lv():
    user_property = UserProperty.get_instance(uid)
    user_property.add_charge_sumcoin(10)    # vip lv 1
    #user_property.property_info["charge_sumcoin"] = 0     # vip lv 0 
    user_property.do_put()