예제 #1
0
def store_sell(rk_user, params):
    """背包卖出
    params:
        items:
            itemid:num,itemid:num,itemid:num
        materials:
            materialid:num,materialid:num
    """
    sell_materials = {}
    sell_props = {}
    user_pack_obj = rk_user.user_pack
    material_config = game_config.material_config
    props_config = game_config.props_config
    get_gold = 0

    for good_type in ['materials', 'props']:
        goods = params.get(good_type, None)
        if not goods:
            continue
        if good_type == 'materials':
            material_ls = goods.split(',')
            material_ls = utils.remove_null(material_ls)
            for m in material_ls:
                m_id, m_num = m.split(':')
                m_num = abs(int(m_num))
                if not user_pack_obj.is_material_enough(m_id, m_num):
                    return 11, {
                        'msg': utils.get_msg('pack', 'not_enough_material')
                    }
                sell_materials[m_id] = m_num
                get_gold += m_num * material_config[m_id].get('sell_gold', 0)
        else:
            props_ls = goods.split(',')
            props_ls = utils.remove_null(props_ls)
            for p in props_ls:
                p_id, p_num = p.split(':')
                p_num = abs(int(p_num))
                if not user_pack_obj.is_props_enough(p_id, p_num):
                    return 11, {
                        'msg': utils.get_msg('pack', 'not_enough_props')
                    }
                sell_props[p_id] = p_num
                get_gold += p_num * props_config[p_id].get('sell_gold', 0)
    #加铜钱
    if get_gold > 0:
        rk_user.user_property.add_gold(get_gold, 'pack_store_sell')
    #减物品
    for m_id in sell_materials:
        user_pack_obj.minus_material(m_id, sell_materials[m_id],
                                     'pack_store_sell')
    for p_id in sell_props:
        user_pack_obj.minus_props(p_id, sell_props[p_id], 'pack_store_sell')
    return 0, {'get_gold': get_gold}
예제 #2
0
def store_sell(rk_user, params):
    """背包卖出
    params:
        items:
            itemid:num,itemid:num,itemid:num
        materials:
            materialid:num,materialid:num
    """
    sell_materials = {}
    sell_props = {}
    user_pack_obj = rk_user.user_pack
    material_config = game_config.material_config
    props_config = game_config.props_config
    get_gold = 0

    for good_type in ['materials', 'props']:
        goods = params.get(good_type, None)
        if not goods:
            continue
        if good_type == 'materials':
            material_ls = goods.split(',')
            material_ls = utils.remove_null(material_ls)
            for m in material_ls:
                m_id, m_num = m.split(':')
                m_num = abs(int(m_num))
                if not user_pack_obj.is_material_enough(m_id, m_num):
                    return 11, {'msg':utils.get_msg('pack', 'not_enough_material')}
                sell_materials[m_id] = m_num
                get_gold += m_num * material_config[m_id].get('sell_gold', 0)
        else:
            props_ls = goods.split(',')
            props_ls = utils.remove_null(props_ls)
            for p in props_ls:
                p_id,p_num = p.split(':')
                p_num = abs(int(p_num))
                if not user_pack_obj.is_props_enough(p_id,p_num):
                    return 11, {'msg':utils.get_msg('pack', 'not_enough_props')}
                sell_props[p_id] = p_num
                get_gold += p_num * props_config[p_id].get('sell_gold', 0)
    #加铜钱
    if get_gold > 0:
        rk_user.user_property.add_gold(get_gold, 'pack_store_sell')
    #减物品
    for m_id in sell_materials:
        user_pack_obj.minus_material(m_id, sell_materials[m_id], 'pack_store_sell')
    for p_id in sell_props:
        user_pack_obj.minus_props(p_id, sell_props[p_id], 'pack_store_sell')
    return 0,{'get_gold': get_gold}
예제 #3
0
파일: stove.py 프로젝트: wzgdavid/myCoding
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}
예제 #4
0
def add_stamina(rk_user,params):
    '''
    * 使用体力丹回复体力
    miaoyichao
    '''
    cost_props_param = params.get('cost_props')
    cost_props = cost_props_param.split(',')
    cost_props = utils.remove_null(cost_props)
    user_pack_obj = UserPack.get_instance(rk_user.uid)
    cost_props_copy = {}
    get_stamina = 0
    for cost in cost_props:
        props_id = cost.split(':')[0]
        num = int(cost.split(':')[1])
        #判断props的用途是否是增加体力的
        if not game_config.props_config[props_id].get('used_by','') == 'stamina':
            return 11,{'msg':utils.get_msg('pack', 'wrong_used')}
        #判断道具数量是否足够
        if not user_pack_obj.is_props_enough(props_id,num):
            return 11,{'msg':utils.get_msg('pack', 'not_enough_props')}
        #道具数量足够的话就开始整理道具
        cost_props_copy[props_id] = num
        #默认没取到的时候 增加的体力值是0
        get_stamina += int(game_config.props_config[props_id].get('stamina_num',0))*num
    #扣除道具
    user_pack_obj.minus_multi_props(cost_props_copy,where='pack.add_stamina')
    #增加体力
    rk_user.user_property.add_stamina(get_stamina)
    #结果返回
    return 0,{'get_stamina':get_stamina}
예제 #5
0
def add_stamina(rk_user, params):
    '''
    * 使用体力丹回复体力
    miaoyichao
    '''
    cost_props_param = params.get('cost_props')
    cost_props = cost_props_param.split(',')
    cost_props = utils.remove_null(cost_props)
    user_pack_obj = UserPack.get_instance(rk_user.uid)
    cost_props_copy = {}
    get_stamina = 0
    for cost in cost_props:
        props_id = cost.split(':')[0]
        num = int(cost.split(':')[1])
        #判断props的用途是否是增加体力的
        if not game_config.props_config[props_id].get('used_by',
                                                      '') == 'stamina':
            return 11, {'msg': utils.get_msg('pack', 'wrong_used')}
        #判断道具数量是否足够
        if not user_pack_obj.is_props_enough(props_id, num):
            return 11, {'msg': utils.get_msg('pack', 'not_enough_props')}
        #道具数量足够的话就开始整理道具
        cost_props_copy[props_id] = num
        #默认没取到的时候 增加的体力值是0
        get_stamina += int(game_config.props_config[props_id].get(
            'stamina_num', 0)) * num
    #扣除道具
    user_pack_obj.minus_multi_props(cost_props_copy, where='pack.add_stamina')
    #增加体力
    rk_user.user_property.add_stamina(get_stamina)
    #结果返回
    return 0, {'get_stamina': get_stamina}
예제 #6
0
def card_stove(rk_user, params):
    """
    炼化
    """
    sell_ucids = params.get('sell_ucids')
    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(rk_user.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_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.get_card_info(ucid) for ucid in sell_ucids]
    return 0, {'cards_info': sell_cards, 'cards_ucids': sell_ucids}
예제 #7
0
def lock(rk_user, params):
    """
    加锁
    ucids,锁对象id
    """
    ucids = params['ucids'].split(',')
    ucids = utils.remove_null(ucids)
    user_card_obj = UserCards.get(rk_user.uid)
    for ucid in ucids:
        if not user_card_obj.has_card(ucid):
            return 11, {'msg': utils.get_msg('card', 'no_card')}
    user_card_obj.lock(ucids)
    return 0, {}
예제 #8
0
def binding_or_not(rk_user,params):
    """装备 武将
    
    ucid = ucid1|ucid2|ucid3
    ueid = ueid,ueid,ueid|ueid,ueid,ueid|ueid,ueid,ueid
    """
    params_ucid = params['ucid']
    params_ueids = params['ueid']

    ucids = params_ucid.split("|")
    ueids_group = params_ueids.split("|")

    user_equip_obj = rk_user.user_equips
    user_card_obj = rk_user.user_cards
    user_equips = user_equip_obj.equips
    all_cards = user_card_obj.cards

    equip_config = game_config.equip_config

    # 如果武将为空
    if not ucids or (len(ucids) != len(ueids_group)):
        raise ParamsError()
    ucid_ueids = dict(zip(ucids, ueids_group))
    for ucid, ueids in ucid_ueids.items():
        ueids = utils.remove_null(ueids.split(','))
        #获取用户的所有的武将和装备的 id
        if ucid not in all_cards:
            print ucid, ueids 
            print all_cards
            raise GameLogicError('card', 'no_card')
        all_eqtype = []
        # 判断装备是否存在
        for ueid in ueids:
            if ueid not in user_equips:
                raise GameLogicError('equip', 'no_equip')
            eid = user_equips[ueid]['eid']
            eqtype = equip_config[eid].get('eqtype', 1)
            if eqtype in all_eqtype:
                raise GameLogicError('equip', 'invalid_deck')
            else:
                all_eqtype.append(eqtype)
        #开始绑定信息
        user_equip_obj.bind_equip(ucid, ueids)

    #判断新手引导
    newbie_step = int(params.get('newbie_step',0))
    if newbie_step:
        rk_user.user_property.set_newbie_steps(newbie_step, "binding_equip")
    return {}
예제 #9
0
def binding_or_not(rk_user, params):
    """装备 武将
    
    ucid = ucid1|ucid2|ucid3
    ueid = ueid,ueid,ueid|ueid,ueid,ueid|ueid,ueid,ueid
    """
    params_ucid = params['ucid']
    params_ueids = params['ueid']

    ucids = params_ucid.split("|")
    ueids_group = params_ueids.split("|")

    user_equip_obj = rk_user.user_equips
    user_card_obj = rk_user.user_cards
    user_equips = user_equip_obj.equips
    all_cards = user_card_obj.cards

    equip_config = game_config.equip_config

    # 如果武将为空
    if not ucids or (len(ucids) != len(ueids_group)):
        raise ParamsError()
    ucid_ueids = dict(zip(ucids, ueids_group))
    for ucid, ueids in ucid_ueids.items():
        ueids = utils.remove_null(ueids.split(','))
        #获取用户的所有的武将和装备的 id
        if ucid not in all_cards:
            print ucid, ueids
            print all_cards
            raise GameLogicError('card', 'no_card')
        all_eqtype = []
        # 判断装备是否存在
        for ueid in ueids:
            if ueid not in user_equips:
                raise GameLogicError('equip', 'no_equip')
            eid = user_equips[ueid]['eid']
            eqtype = equip_config[eid].get('eqtype', 1)
            if eqtype in all_eqtype:
                raise GameLogicError('equip', 'invalid_deck')
            else:
                all_eqtype.append(eqtype)
        #开始绑定信息
        user_equip_obj.bind_equip(ucid, ueids)

    #判断新手引导
    newbie_step = int(params.get('newbie_step', 0))
    if newbie_step:
        rk_user.user_property.set_newbie_steps(newbie_step, "binding_equip")
    return {}
예제 #10
0
def equip_stove(rk_user, params):
    """
    炼化
    """
    sell_ueids = params.get('sell_ueids')
    #卖出的装备为空的时候的处理
    if not sell_ueids:
        return 11, {'msg': utils.get_msg('equip', 'no_equip')}
    #获取装备的列表
    sell_ueids = sell_ueids.split(',')
    #装备列表去空
    sell_ueids = utils.remove_null(sell_ueids)
    #这里执行两次的原因是防止前台传递过来的是 ,,
    if not sell_ueids:
        return 11, {'msg': utils.get_msg('equip', 'no_equip')}
    #获取用户装备对象
    user_equip_obj = UserEquips.get_instance(rk_user.uid)
    user_equips = user_equip_obj.equips
    #循环要卖出的装备 判断是否可以卖出
    for sell_ueid in sell_ueids:
        #检查装备是否存在
        if sell_ueid not in user_equips:
            return 11, {'msg': utils.get_msg('equip', 'no_equip')}
        #检查装备是否装备武将
        try:
            sell_ueid_bind = user_equips[sell_ueid]['used_by']
        except:
            sell_ueid_bind = ''
        #判断装备是否已经装备在武将身上
        if sell_ueid_bind:
            return 11, {'msg': utils.get_msg('equip', 'is_used')}
    #计算卖出获得的铜钱数量
    #get_gold = 0
    #获取用户的装备的eid和等级
    sell_eids_info = [
        user_equip_obj.get_equip_dict(ueid) for ueid in sell_ueids
    ]
    #treasure_sell_gold = game_config.equip_exp_config['treasure_sell_gold']
    #common_base_gold = game_config.equip_exp_config['common_base_gold']
    return 0, {'equips_info': sell_eids_info, 'equips_ueids': sell_ueids}
예제 #11
0
파일: stove.py 프로젝트: wzgdavid/myCoding
def equip_stove():
    """
    炼化
    """
    sell_ueids ='201410201603035844619' 
    #卖出的装备为空的时候的处理
    if not sell_ueids:
        return 11,{'msg':utils.get_msg('equip','no_equip')}
    #获取装备的列表
    sell_ueids = sell_ueids.split(',')
    #装备列表去空
    sell_ueids = utils.remove_null(sell_ueids)
    #这里执行两次的原因是防止前台传递过来的是 ,,
    if not sell_ueids:
        return 11,{'msg':utils.get_msg('equip','no_equip')}
    #获取用户装备对象
    user_equip_obj = UserEquips.get_instance(uid)
    user_equips = user_equip_obj.equips
    #循环要卖出的装备 判断是否可以卖出
    for sell_ueid in sell_ueids:
        #检查装备是否存在
        if sell_ueid not in user_equips:
            return 11,{'msg':utils.get_msg('equip','no_equip')}
        #检查装备是否装备武将
        try:
            sell_ueid_bind = user_equips[sell_ueid]['used_by']
        except:
            sell_ueid_bind = ''
        #判断装备是否已经装备在武将身上
        if sell_ueid_bind:
            return 11,{'msg':utils.get_msg('equip','is_used')}
    #计算卖出获得的铜钱数量
    #get_gold = 0
    #获取用户的装备的eid和等级
    sell_eids_info = [user_equip_obj.get_equip_dict(ueid) for ueid in sell_ueids]
    #treasure_sell_gold = game_config.equip_exp_conf['treasure_sell_gold']
    #common_base_gold = game_config.equip_exp_conf['common_base_gold']
    return 0,{'equips_info':sell_eids_info,'equips_ueids':sell_ueids}
예제 #12
0
def set_decks(rk_user, params):
    """设置编队
    params:
        deck_index:当前编队编号0-9
        new_deck:  武将id:是否是主将 1是 0 否
            ucid:0,ucid:1,ucid:0,,ucid:0_ucid:0,ucid:1,ucid:0,,ucid:0
    """
    #获取参数
    #new_decks = params['new_deck']
    new_deck = params.get('new_deck')
    cur_deck_index = int(params["deck_index"])
    #判断编队是否符合要求
    if cur_deck_index < 0 or cur_deck_index > 4:
        raise GameLogicError('card', 'invalid_deck')
    if new_deck:
        new_decks = new_deck.split('_')
        user_card_obj = UserCards.get_instance(rk_user.uid)

        decks = user_card_obj.decks
        if len(decks) == 5:
            new_decks_lst = [[{}] * 5] * 5
        else:
            raise GameLogicError('card', 'invalid_deck')
        for i, new_deck in enumerate(new_decks):
            new_new_deck = new_deck.split(',')
            #检查队伍长度是否合法
            if len(new_new_deck) == 0:
                continue
            if len(new_new_deck) < game_config.system_config['deck_length']:
                new_new_deck.extend([':0'] *
                                    (game_config.system_config['deck_length'] -
                                     len(new_new_deck)))
                # return 11,{'msg':utils.get_msg('card','invalid_deck')}
            #检查这些武将是否存在
            new_deck_copy = []
            for card_info in new_new_deck:
                card_info_ls = card_info.split(':')
                if card_info_ls:
                    ucid, is_leader = card_info_ls
                else:
                    ucid = ''
                    is_leader = 0
                if ucid and not user_card_obj.has_card(ucid):
                    raise GameLogicError('card', 'no_card')
                #判断升级和强化素材不能上阵
                if ucid:
                    tmp_dict = {'ucid': ucid}
                    if int(is_leader) == 1:
                        tmp_dict['leader'] = 1
                    new_deck_copy.append(tmp_dict)
                else:
                    new_deck_copy.append({})
            #队伍中不能出现重复的ucid和重复的ueid和多个leader
            no_repeat_deck = utils.remove_null(new_deck_copy)
            ucids = [
                card['ucid'] for card in no_repeat_deck
                if card.get('ucid', '')
            ]
            leader_cnt = len([
                card['leader'] for card in no_repeat_deck
                if card.get('leader', 0)
            ])
            if len(ucids) != len(set(ucids)) or leader_cnt != 1:
                raise GameLogicError('card', 'invalid_deck')
            new_decks_lst[i] = copy.deepcopy(new_deck_copy)

        #设置最新队伍
        user_card_obj.set_decks(new_decks_lst)
        #设置当前编队索引
        user_card_obj.set_cur_deck_index(cur_deck_index)

    if params.get('yuanjun_deck'):
        set_yuanjun_decks(rk_user, params)
    return {}
예제 #13
0
def advanced_talent(rk_user, params):
    '''
    miaoyichao
    *天赋进阶
    *params : ucid = ucid
    * cost_cards = ucid,ucid,ucid.ucid
    '''
    ucid = params['ucid']
    #获取用户武将对象
    user_card_obj = UserCards.get_instance(rk_user.uid)
    #检查要天赋进阶的武将是否存在
    if not user_card_obj.has_card(ucid):
        return 11, {'msg': utils.get_msg('card', 'no_card')}
    #获取武将的cid
    cid = user_card_obj.cards[ucid]['cid']
    #获取武将的star
    star = str(game_config.card_config[cid].get('star', 4))
    #获取武将的当前天赋等级和最大等级
    cur_talent_lv = user_card_obj.cards[ucid].get('talent_lv', 0)
    max_talent_lv = int(game_config.card_config[cid]['max_talent_lv'])
    #是否已经是最大进阶等级
    if cur_talent_lv >= max_talent_lv:
        return 11, {'msg': utils.get_msg('card', 'max_talent_lv')}
    #取得天赋进阶的配置信息
    advanced_talent_config = game_config.talent_skill_config[
        'advanced_talent_config']
    #获取所需要的进阶丹和card数量
    need_things = advanced_talent_config.get(star,
                                             '4').get(str(cur_talent_lv + 1))
    need_card_num = need_things.get('card', 0)
    if need_card_num:
        #需要消耗其他的武将
        cost_ucids = params['cost_cards'].split(',')
        cost_ucids = utils.remove_null(cost_ucids)
        #检查武将是否存在
        for cost_ucid in cost_ucids:
            #判断是否存在该武将
            if not user_card_obj.has_card(cost_ucid):
                return 11, {'msg': utils.get_msg('card', 'no_card')}
            #判断是否是同名卡牌
            if cid != user_card_obj.cards[cost_ucid]['cid']:
                return 11, {'msg': utils.get_msg('card', 'params_wrong')}
        #带装备武将不允许用于进阶
        if user_card_obj.is_equip_used(cost_ucids):
            return 11, {'msg': utils.get_msg('equip', 'is_used')}
        #被锁定武将不能卖出
        if user_card_obj.is_locked(cost_ucids):
            return 11, {'msg': utils.get_msg('card', 'locked')}
        #有天赋技能的不能用于天赋进阶
        if user_card_obj.has_talent(cost_ucids):
            return 11, {'msg': utils.get_msg('card', 'has_talent_card')}
        #检查武将是否在deck中
        rc, msg = check_card_in_deck(user_card_obj, cost_ucids)
        if rc:
            return rc, {'msg': msg}
        #判断消耗的武将数量是否足够
        if len(cost_ucids) < need_card_num:
            return 11, {'msg': utils.get_msg('card', 'not_enough_card')}
    #这里开始处理道具的逻辑
    props_config = game_config.props_config
    #判断道具是否足够
    user_pack_obj = UserPack.get_instance(rk_user.uid)
    need_props = need_things.get('props', ['8_props', 100])
    props_id = need_props[0]
    #检查道具的类型是否正确
    if props_config.get(props_id, {}).get('used_by', '') != 'talent':
        return 11, {'msg': utils.get_msg('pack', 'wrong_used')}
    #检查道具是否足够
    num = int(need_props[1])
    if not user_pack_obj.is_props_enough(props_id, num):
        return 11, {'msg': utils.get_msg('pack', 'not_enough_item')}
    #检查天赋进阶的金币是否足够
    cost_gold = int(need_things.get('cost_gold', 10000))
    if not rk_user.user_property.is_gold_enough(cost_gold):
        return 11, {'msg': utils.get_msg('user', 'not_enough_gold')}
    #扣用户金钱
    rk_user.user_property.minus_gold(cost_gold, 'advanced_talent')
    #删除道具
    user_pack_obj.minus_props(props_id, num, where='advanced_talent')
    #天赋进阶
    user_card_obj.advanced_talent(ucid)
    if need_card_num:
        #删除武将
        user_card_obj.del_card_info(cost_ucids, where='advanced_talent')
    data = {'new_card_info': {}}
    data['new_card_info']['ucid'] = ucid
    data['new_card_info'].update(user_card_obj.cards[ucid])
    return 0, data
예제 #14
0
def update(rk_user,params):
    """
    * 装备的升级
    * miaoyichao
    """
    #获取要升级的装备和升级所需要的参数  要升多少级 或者是升级的经验
    base_ueid = params['base_ueid']
    #获取前台传递过来的装备类型

    base_type = int(params['base_type'])

    #获取装备配置信息
    user_equips_obj = UserEquips.get_instance(rk_user.uid)
    #获取该用户的装备信息
    user_equips_lists = user_equips_obj.equips
    #武器、护甲、头盔、饰品4类通过游戏中的铜钱来升级强化  兵法及坐骑,升级方式通过消耗特定素材进行强化
    #获取装备的类型 1:武器(攻击),2:护甲(防御),3:头盔(血量),4:饰品(回复),5:兵法,6:坐骑
    base_eid = user_equips_lists[base_ueid]['eid']
    uetype = int(game_config.equip_config[base_eid]['eqtype'])
    #传递过来的参数类型和从配置数据库得到的不一致
    if not base_type == uetype:
        return 11,{'msg':utils.get_msg('equip','params_wrong')}
    #检查要强化的武器是不是在用户装备中
    if base_ueid not in user_equips_lists:
        return 11,{'msg':utils.get_msg('equip','no_equip')}
    #获取用户的该装备信息
    base_ueid_info = user_equips_obj.get_equip_dict(base_ueid)    
    #获取用户的等级
    user_lv = get_user_lv(rk_user.uid)
    #检查base卡是是否满级
    if not __check_can_update(base_ueid_info,user_lv):
        return 11,{'msg':utils.get_msg('equip','cannot_update')}

    # 暴击次数
    crit_time = 0
    #只需要金钱就可以强化的
    if uetype<=4:
        #获取vip等级
        vip_lv = rk_user.user_property.vip_cur_level
        #获取装备的当前等级
        cur_equip_lv = base_ueid_info['cur_lv']
        cur_cost_gold = game_config.equip_exp_config['common_gold'].get(str(cur_equip_lv),0)
        next_cost_gold = game_config.equip_exp_config['common_gold'].get(str(cur_equip_lv+1),100)
        #获取装备的星级
        star = game_config.equip_config[base_ueid_info['eid']].get('star',2)
        #获取系数
        coefficient =  game_config.equip_exp_config['common_gold_coe'][str(star)]
        update_gold = int((next_cost_gold - cur_cost_gold)*coefficient)
        # #判断用户金币是否足够
        if not rk_user.user_property.is_gold_enough(update_gold):
            return 11,{'msg':utils.get_msg('user','not_enough_gold')}
        try:
            auto_flag = params['auto_flag']
        except:
            auto_flag = ''
        if not auto_flag:
            #给装备增加经验和等级
            crit_time, new_equip_info = user_equips_obj.add_com_equip_exp(base_ueid,vip_lv,user_lv,where='equip_update')
            #扣除消费的金币
            rk_user.user_property.minus_gold(update_gold,'common_equip_update')
            #格式化返回的数据的内容
            data = {}
            # tmp = {}
            # tmp['ueid'] = base_ueid
            # user_equips_obj = UserEquips.get_instance(rk_user.uid)
            # user_equips_lists = user_equips_obj.equips
            # tmp.update(user_equips_lists[base_ueid])
            data['up_lv'] = [new_equip_info['cur_lv']]
            data['new_equip_info'] = new_equip_info
        else:
            #自动强化装备
            crit_time, data = user_equips_obj.auto_update_equip(rk_user,base_ueid,vip_lv,user_lv,where='common_equip_auto_update')
        data['crit_time'] = crit_time

        return 0, data
    elif 5<=uetype<=6:
        #该部分需要特定的道具进行升级
        #检查参数是否合法
        try:
            cost_props = params['cost_props']
        except:
            return 11,{'msg':utils.get_msg('equip','params_wrong')}
        cost_props_list = cost_props.split(',')
        cost_props_list = utils.remove_null(cost_props_list)
        #格式化消耗的道具
        all_cost_props = {}
        for cost_props_id in cost_props_list:
            if cost_props_id not in all_cost_props:
                all_cost_props[cost_props_id] = 0
            all_cost_props[cost_props_id] += 1
        #获取用户背包信息
        user_pack_obj = UserPack.get_instance(rk_user.uid)
        check_use_type = 'equip%s' %uetype
        all_exp = 0
        #检查用户背包是否有这么多的道具和道具的使用类型
        for props_id in all_cost_props:
            num = int(all_cost_props[props_id])
            #检查数量是否足够
            if not user_pack_obj.is_props_enough(props_id,num):
                return 11,{'msg':utils.get_msg('pack', 'not_enough_props')}
            if not check_use_type == game_config.props_config[props_id]['used_by']:
                return 11,{'msg':utils.get_msg('pack', 'wrong_used')}
            all_exp += int(game_config.props_config[props_id]['exp']) * num
        #计算升级所消耗的金钱 强制转化为int类型的
        update_gold = int(all_exp * game_config.equip_exp_config['gold_exp_transform_coe'].get('treasure_update_coe',1))
        #判断用户金币是否足够
        if not rk_user.user_property.is_gold_enough(update_gold):
            return 11,{'msg':utils.get_msg('user','not_enough_gold')}
        #所有条件都满足的情况下 开始扣除金币和道具 然后开始添加经验
        #扣除消费的金币
        rk_user.user_property.minus_gold(update_gold,'treasure_equip_update')
        #扣除道具
        user_pack_obj.minus_multi_props(all_cost_props,where='treasure_equip_update')
        #添加经验
        new_equip_info = user_equips_obj.add_treasure_equip_exp(base_ueid,all_exp,user_lv,where='treasure_equip_update')
        #格式化返回的数据的内容
        data = {}
        data['up_lv'] = [new_equip_info['cur_lv']]
        data['new_equip_info'] = new_equip_info

        return 0,data
    else:
        return 11,{'msg':utils.get_msg('equip','params_wrong')}
예제 #15
0
def update(rk_user, params):
    """
    * 装备的升级
    * miaoyichao
    """
    #获取要升级的装备和升级所需要的参数  要升多少级 或者是升级的经验
    base_ueid = params['base_ueid']
    #获取前台传递过来的装备类型

    base_type = int(params['base_type'])

    #获取装备配置信息
    user_equips_obj = UserEquips.get_instance(rk_user.uid)
    #获取该用户的装备信息
    user_equips_lists = user_equips_obj.equips
    #武器、护甲、头盔、饰品4类通过游戏中的铜钱来升级强化  兵法及坐骑,升级方式通过消耗特定素材进行强化
    #获取装备的类型 1:武器(攻击),2:护甲(防御),3:头盔(血量),4:饰品(回复),5:兵法,6:坐骑
    base_eid = user_equips_lists[base_ueid]['eid']
    uetype = int(game_config.equip_config[base_eid]['eqtype'])
    #传递过来的参数类型和从配置数据库得到的不一致
    if not base_type == uetype:
        return 11, {'msg': utils.get_msg('equip', 'params_wrong')}
    #检查要强化的武器是不是在用户装备中
    if base_ueid not in user_equips_lists:
        return 11, {'msg': utils.get_msg('equip', 'no_equip')}
    #获取用户的该装备信息
    base_ueid_info = user_equips_obj.get_equip_dict(base_ueid)
    #获取用户的等级
    user_lv = get_user_lv(rk_user.uid)
    #检查base卡是是否满级
    if not __check_can_update(base_ueid_info, user_lv):
        return 11, {'msg': utils.get_msg('equip', 'cannot_update')}

    # 暴击次数
    crit_time = 0
    #只需要金钱就可以强化的
    if uetype <= 4:
        #获取vip等级
        vip_lv = rk_user.user_property.vip_cur_level
        #获取装备的当前等级
        cur_equip_lv = base_ueid_info['cur_lv']
        cur_cost_gold = game_config.equip_exp_config['common_gold'].get(
            str(cur_equip_lv), 0)
        next_cost_gold = game_config.equip_exp_config['common_gold'].get(
            str(cur_equip_lv + 1), 100)
        #获取装备的星级
        star = game_config.equip_config[base_ueid_info['eid']].get('star', 2)
        #获取系数
        coefficient = game_config.equip_exp_config['common_gold_coe'][str(
            star)]
        update_gold = int((next_cost_gold - cur_cost_gold) * coefficient)
        # #判断用户金币是否足够
        if not rk_user.user_property.is_gold_enough(update_gold):
            return 11, {'msg': utils.get_msg('user', 'not_enough_gold')}
        try:
            auto_flag = params['auto_flag']
        except:
            auto_flag = ''
        if not auto_flag:
            #给装备增加经验和等级
            crit_time, new_equip_info = user_equips_obj.add_com_equip_exp(
                base_ueid, vip_lv, user_lv, where='equip_update')
            #扣除消费的金币
            rk_user.user_property.minus_gold(update_gold,
                                             'common_equip_update')
            #格式化返回的数据的内容
            data = {}
            # tmp = {}
            # tmp['ueid'] = base_ueid
            # user_equips_obj = UserEquips.get_instance(rk_user.uid)
            # user_equips_lists = user_equips_obj.equips
            # tmp.update(user_equips_lists[base_ueid])
            data['up_lv'] = [new_equip_info['cur_lv']]
            data['new_equip_info'] = new_equip_info
        else:
            #自动强化装备
            crit_time, data = user_equips_obj.auto_update_equip(
                rk_user,
                base_ueid,
                vip_lv,
                user_lv,
                where='common_equip_auto_update')
        data['crit_time'] = crit_time

        return 0, data
    elif 5 <= uetype <= 6:
        #该部分需要特定的道具进行升级
        #检查参数是否合法
        try:
            cost_props = params['cost_props']
        except:
            return 11, {'msg': utils.get_msg('equip', 'params_wrong')}
        cost_props_list = cost_props.split(',')
        cost_props_list = utils.remove_null(cost_props_list)
        #格式化消耗的道具
        all_cost_props = {}
        for cost_props_id in cost_props_list:
            if cost_props_id not in all_cost_props:
                all_cost_props[cost_props_id] = 0
            all_cost_props[cost_props_id] += 1
        #获取用户背包信息
        user_pack_obj = UserPack.get_instance(rk_user.uid)
        check_use_type = 'equip%s' % uetype
        all_exp = 0
        #检查用户背包是否有这么多的道具和道具的使用类型
        for props_id in all_cost_props:
            num = int(all_cost_props[props_id])
            #检查数量是否足够
            if not user_pack_obj.is_props_enough(props_id, num):
                return 11, {'msg': utils.get_msg('pack', 'not_enough_props')}
            if not check_use_type == game_config.props_config[props_id][
                    'used_by']:
                return 11, {'msg': utils.get_msg('pack', 'wrong_used')}
            all_exp += int(game_config.props_config[props_id]['exp']) * num
        #计算升级所消耗的金钱 强制转化为int类型的
        update_gold = int(
            all_exp *
            game_config.equip_exp_config['gold_exp_transform_coe'].get(
                'treasure_update_coe', 1))
        #判断用户金币是否足够
        if not rk_user.user_property.is_gold_enough(update_gold):
            return 11, {'msg': utils.get_msg('user', 'not_enough_gold')}
        #所有条件都满足的情况下 开始扣除金币和道具 然后开始添加经验
        #扣除消费的金币
        rk_user.user_property.minus_gold(update_gold, 'treasure_equip_update')
        #扣除道具
        user_pack_obj.minus_multi_props(all_cost_props,
                                        where='treasure_equip_update')
        #添加经验
        new_equip_info = user_equips_obj.add_treasure_equip_exp(
            base_ueid, all_exp, user_lv, where='treasure_equip_update')
        #格式化返回的数据的内容
        data = {}
        data['up_lv'] = [new_equip_info['cur_lv']]
        data['new_equip_info'] = new_equip_info

        return 0, data
    else:
        return 11, {'msg': utils.get_msg('equip', 'params_wrong')}