def recover_stamina(rk_user, params): """花费元宝回复体力 每次回复的体力值是固定的,但消耗的元宝数 是根据当天第几次回体配置的 """ user_property_obj = rk_user.user_property recover_stamina = game_config.system_config['coin_recover_stamina'] has_recover_times = user_property_obj.property_info['recover_times'][ 'recover_stamina'] need_coin = game_config.system_config['recover_stamina_need'][ has_recover_times + 1] # 检查用户体力是否已满 if user_property_obj.max_recover(): raise GameLogicError('user', 'max_recover') # 检查vip可以回复的次数到了没 vip.check_limit_recover(rk_user, 'recover_stamina') # 检查用户coin是否足够 并扣钱 if not user_property_obj.minus_coin(need_coin, 'recover_stamina'): raise GameLogicError('user', 'not_enough_coin') # 添加回复次数 user_property_obj.add_recover_times('recover_stamina') user_property_obj.add_stamina(recover_stamina) return {}
def recover_copy(): """ * 重置副本次数 """ rk_user = UserBase.get(uid) recover_copy_coin = game_config.system_config['recover_copy_coin'] #检查vip可以回复的次数到了没 if not vip.check_limit_recover(rk_user,'recover_copy'): return 11,{'msg':utils.get_msg('user','max_recover_copy_times')} else: try: #检测参数是否合法 dungeon_type = 'normal' floor_id = '1' room_id = '1' except: return 11,{'msg':utils.get_msg('dungeon','invalid_dungeon_info')} #检查用户coin是否足够 if not rk_user.user_property.minus_coin(recover_copy_coin, 'recover_copy'): return 11,{'msg':utils.get_msg('user','not_enough_coin')} #添加回复次数 rk_user.user_property.add_recover_times('recover_copy',dungeon_type) user_dungeon_obj = UserDungeon.get(rk_user.uid) user_dungeon_obj.recover_copy(dungeon_type,floor_id,room_id) rk_user.user_property.do_put() user_dungeon_obj.do_put() return 0,{}
def recover_stamina(rk_user, params): """花费元宝回复体力 每次回复的体力值是固定的,但消耗的元宝数 是根据当天第几次回体配置的 """ user_property_obj = rk_user.user_property recover_stamina = game_config.system_config["coin_recover_stamina"] has_recover_times = user_property_obj.property_info["recover_times"]["recover_stamina"] need_coin = game_config.system_config["recover_stamina_need"][has_recover_times + 1] # 检查用户体力是否已满 if user_property_obj.max_recover(): raise GameLogicError("user", "max_recover") # 检查vip可以回复的次数到了没 vip.check_limit_recover(rk_user, "recover_stamina") # 检查用户coin是否足够 并扣钱 if not user_property_obj.minus_coin(need_coin, "recover_stamina"): raise GameLogicError("user", "not_enough_coin") # 添加回复次数 user_property_obj.add_recover_times("recover_stamina") user_property_obj.add_stamina(recover_stamina) return {}
def recover_copy(rk_user, params): """重置副本可挑战次数 Args: dungeon_type: 战场类型 (normal 普通战场/ daily试炼) floor_id room_id (试炼可无) """ #检测参数是否合法 dungeon_type = params['dungeon_type'] floor_id = params['floor_id'] room_id = params.get('room_id', '') if room_id: where = 'recover_copy_' + "_".join([dungeon_type, floor_id, room_id]) else: where = 'recover_copy_' + "_".join([dungeon_type, floor_id]) # 检查vip可以回复的次数到了没 has_recover_times = vip.check_limit_recover(rk_user, 'recover_copy', dungeon_type, floor_id) next_recover_times = has_recover_times + 1 if dungeon_type == 'normal': recover_conf = game_config.system_config['recover_normal_copy_need'] elif dungeon_type == 'daily': recover_conf = game_config.system_config['recover_daily_copy_need'] # 检查重置次数是否达到上限 if next_recover_times not in recover_conf: raise GameLogicError('dungeon', 'reach_max_recover_%s' % dungeon_type) #检查用户coin是否足够 recover_need_coin = recover_conf[next_recover_times] if not rk_user.user_property.minus_coin(recover_need_coin, where): return 11, {'msg': utils.get_msg('user', 'not_enough_coin')} #添加回复次数 rk_user.user_property.add_recover_times('recover_copy', dungeon_type, floor_id) user_dungeon_obj = UserDungeon.get(rk_user.uid) user_dungeon_obj.recover_copy(dungeon_type, floor_id, room_id) return {}
def recover_copy(rk_user, params): """重置副本可挑战次数 Args: dungeon_type: 战场类型 (normal 普通战场/ daily试炼) floor_id room_id (试炼可无) """ #检测参数是否合法 dungeon_type = params['dungeon_type'] floor_id = params['floor_id'] room_id = params.get('room_id', '') if room_id: where = 'recover_copy_' + "_".join([dungeon_type, floor_id, room_id]) else: where = 'recover_copy_' + "_".join([dungeon_type, floor_id]) # 检查vip可以回复的次数到了没 has_recover_times = vip.check_limit_recover(rk_user,'recover_copy', dungeon_type, floor_id) next_recover_times = has_recover_times + 1 if dungeon_type == 'normal': recover_conf = game_config.system_config['recover_normal_copy_need'] elif dungeon_type == 'daily': recover_conf = game_config.system_config['recover_daily_copy_need'] # 检查重置次数是否达到上限 if next_recover_times not in recover_conf: raise GameLogicError('dungeon', 'reach_max_recover_%s' % dungeon_type) #检查用户coin是否足够 recover_need_coin = recover_conf[next_recover_times] if not rk_user.user_property.minus_coin(recover_need_coin, where): return 11,{'msg':utils.get_msg('user', 'not_enough_coin')} #添加回复次数 rk_user.user_property.add_recover_times('recover_copy', dungeon_type, floor_id) user_dungeon_obj = UserDungeon.get(rk_user.uid) user_dungeon_obj.recover_copy(dungeon_type,floor_id,room_id) return {}
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)
def refresh_store_by_self(rk_user,params): """ 玩家主动刷新时 调用此接口 1. 若有免费刷新次数, 消耗刷新次数 2. 若有刷新令, 消耗刷新令28_props 3. 以上都没有, 用元宝刷新 """ user_property_obj = rk_user.user_property user_mystery_store_obj = rk_user.user_mystery_store user_pack_obj = rk_user.user_pack needed_cost = int(game_config.mystery_store_config["store_refresh_cost"]) props_config = game_config.props_config refresh_mystery_props_id = '' #获取用户的道具配置 for props_id in props_config: if props_config[props_id].get('used_by','') == 'refresh_mystery': refresh_mystery_props_id = props_id if user_mystery_store_obj.free_refresh_cnt: user_mystery_store_obj.free_refresh_cnt -= 1 user_mystery_store_obj.put() elif user_pack_obj.has_props(refresh_mystery_props_id): user_pack_obj.minus_props(refresh_mystery_props_id, 1, 'refresh_mystery_store') # 根据vip用元宝可刷新次数判断是否可以刷新 elif vip.check_limit_recover(rk_user, 'recover_mystery_store') >= 0 and \ user_property_obj.minus_coin(needed_cost, 'refresh_mystery_store'): # 已刷新次数+1 user_property_obj.add_recover_times('recover_mystery_store') else: raise GameLogicError('user', 'not_enough_coin') user_mystery_store_obj.refresh_store() return _pack_store_info(user_mystery_store_obj.store_info())