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}
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}
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}
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}
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}
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}
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, {}
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 {}
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 {}
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}
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}
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 {}
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
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')}
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')}