def wipe_out(rk_user, params): ''' 扫荡 玩家能够在已经完美过关的关卡上使用扫荡功能,扫荡不用进入战斗画面,直接返回关卡奖励 与普通战斗不同的是扫荡并不需要更新战场的关卡信息, params: dungeon_type:'normal' 战场类型,有普通战场 normal , 试炼 daily floor_id:'1' room_id:'1' do_times: '1' 扫荡次数 ''' # ------------------------------参数check start------------------------- d_type = params.get('dungeon_type') floor_id = params.get('floor_id') room_id = params.get('room_id') do_times = params.get('do_times') if d_type not in ['normal', 'daily'] or not floor_id or not room_id: return 6, {'msg':utils.get_msg('dungeon', 'invalid_params')} try: do_times = int(do_times) except ValueError: return 6, {'msg':utils.get_msg('dungeon', 'invalid_params')} if do_times < 1 or do_times > 10: return 6, {'msg':utils.get_msg('dungeon', 'invalid_params')} # 读配置 conf_dict = { 'normal': game_config.normal_dungeon_config, 'daily': game_config.daily_dungeon_config } dungeon_config = conf_dict[d_type] # 战场不存在 try: dungeon_config[floor_id]['rooms'][room_id] except KeyError: return 6,{'msg':utils.get_msg('dungeon', 'invalid_dungeon')} # ------------------------------参数check end---------------------------- # ------------------------------扫荡逻辑check start---------------- user_dungeon = rk_user.user_dungeon has_played_info = user_dungeon.has_played_info user_property = rk_user.user_property # 玩家未达到15级,不开启扫荡 open_lv = game_config.user_init_config['open_lv'].get('wipe_out', 0) if user_property.lv < open_lv: return 11,{'msg':utils.get_msg('dungeon', 'wipe_out_open_lv') % open_lv} # vip未达到4级,不开启多次扫荡 open_lv = game_config.user_init_config['open_lv'].get('vip_multi_wipe_out', 0) if do_times > 1 and user_property.vip_cur_level < open_lv: return 11,{'msg':utils.get_msg('dungeon', 'vip_wipe_out') % open_lv} # 未达到此战场 try: has_played_info[d_type][floor_id]['rooms'][room_id] except KeyError: return 11,{'msg':utils.get_msg('dungeon', 'not_arrived')} # 没达到3星 if not has_played_info[d_type][floor_id]['rooms'][room_id]['perfect']: return 11,{'msg':utils.get_msg('dungeon', 'not_three_star')} # 当前扫荡券不足 user_pack = rk_user.user_pack if not user_pack.is_props_enough('24_props', do_times): return 11,{'msg':utils.get_msg('dungeon', 'wipe_out_not_enough')} floor_config = dungeon_config[floor_id] room_config = dungeon_config[floor_id]['rooms'][room_id] # 检查用户体力是否足够 need_stamina = int(room_config['stamina']) * do_times if user_property.stamina < need_stamina: raise GameLogicError('user','not_enough_stamina') # 进入战场次数用完,不能扫荡, 或者更新repeat_info的当天日期 if user_dungeon.check_limit_dungeon(rk_user,params) is False: raise GameLogicError('dungeon', 'invalid_limit_dungeon') # 计算能够扫荡次数 if d_type == 'normal': try: # 判断dungeon_repeat_info中有无此关卡记录 user_dungeon.dungeon_repeat_info[d_type][floor_id][room_id] except KeyError: # 无此关卡记录时,把此关卡今日完成次数置零 user_dungeon.dungeon_repeat_info \ .setdefault(d_type, {}) \ .setdefault(floor_id, {}) \ .setdefault(room_id, 0) user_dungeon.put() can_make_copy_cnt = room_config['can_make_copy_cn'] has_played_cnt = user_dungeon.dungeon_repeat_info[d_type][floor_id][room_id] elif d_type == 'daily': try: # 判断dungeon_repeat_info中有无此关卡记录 user_dungeon.dungeon_repeat_info[d_type][floor_id] except KeyError: # 无此关卡记录时,把此关卡今日完成次数置零 user_dungeon.dungeon_repeat_info \ .setdefault(d_type, {}) \ .setdefault(floor_id, 0) user_dungeon.put() can_make_copy_cnt = floor_config['can_make_copy_cn'] has_played_cnt = user_dungeon.dungeon_repeat_info[d_type][floor_id] can_wipe_out_cnt = can_make_copy_cnt - has_played_cnt data = {} # 剩余战场次数不够扫荡n次 if can_wipe_out_cnt < do_times: return 11,{'msg':utils.get_msg('dungeon', 'cant_do_multi_times') % do_times} data['can_wipe_out_cnt'] = can_wipe_out_cnt # ------------------------------扫荡逻辑check end---------------- # 能扫荡次数和vip等级有关 #if utils.get_today_str() == user_property.property_info['recover_times']['today_str']: # wipe_out_times = user_property.property_info.get('wipe_out_times', 0) # vip_lv = user_property.vip_cur_level # can_wipe_out_cnt = game_config.user_vip_config[str(vip_lv)]['can_wipe_out_cnt'] # if can_wipe_out_cnt - wipe_out_times < do_times: # return 11,{'msg':utils.get_msg('dungeon', 'vip_wipe_out')} # user_property.property_info['wipe_out_times'] += do_times #else: # user_property.property_info['wipe_out_times'] = do_times # vip.check_limit_recover(rk_user, 'wipe_out') # 更新一下,防止出错 #user_property.put() # ------------------------------添加扫荡物品 start---------------- # 扫荡战利品 get_goods = { 'exp': 0, 'exp_point': 0, 'gold': 0, 'card': {}, 'equip': {}, 'soul':{ 'card': {}, 'equip': {}, }, 'mat': {}, 'props': {}, } # 扫荡一次能够得到的经验,卡经验点,和钱币 get_goods['exp'] += room_config.get('exp', 0) * do_times get_goods['exp_point'] += room_config.get('exp_point', 0) * do_times get_goods['gold'] += room_config.get('gold', 0) * do_times ######## 运营活动 特定时间额外掉落物品 万恶的代码 more_drop = activity.more_dungeon_drop(d_type, floor_id, room_id, times=do_times) if more_drop: for thing_type, things_id_num in more_drop.items(): if thing_type == 'gold': get_goods['gold'] += more_drop['gold']['num'] continue for thing_id, num in things_id_num.items(): if thing_type == 'soul': if 'card' in thing_id: soul_type = 'card' elif 'equip' in thing_id: soul_type = 'equip' get_goods[thing_type][soul_type][thing_id] = get_goods[thing_type][soul_type].get(thing_id, 0) + num else: get_goods[thing_type][thing_id] = get_goods[thing_type].get(thing_id, 0) + num ################### ############ # 扫荡能够得到的物品 drop_info = _pack_drop_info(room_config.get('drop_info', {})) invisible_drop = _pack_drop_info(room_config.get('invisible_drop', {})) drop_info.extend(invisible_drop) # 有掉落物品(包括可见和不可见)时计算掉落, 不用战斗所以不区分可见不可见 if drop_info: # sample ['12002_equip', '5_card_soul', '53001_equip_1_soul', '6_card', '23_props', '8_props'] drop_info = list(set(drop_info)) # list去重 drop_info_config = game_config.drop_info_config['normal_dungeon'] # 检查战场掉落配置中是否有此物品 for goods_id in drop_info: if 'soul' in goods_id: if goods_id[:-5] not in drop_info_config['soul']: return 11,{'msg':utils.get_msg('dungeon', 'no_this_goods')} else: if goods_id not in drop_info_config: return 11,{'msg':utils.get_msg('dungeon', 'no_this_goods')} # 计算掉落数量 for n in range(do_times): for goods_id in drop_info: if 'soul' in goods_id: goods_id = goods_id[:-5] # 去掉'_soul'后缀 value_config = drop_info_config['soul'][goods_id].get('visible', drop_info_config['soul'][goods_id].get('invisible', 0)) # 根据配置概率判断是否得到 if utils.is_happen(value_config[1]): num = random.randint(value_config[0][0], value_config[0][1]) if 'card' in goods_id: soul_type = 'card' elif 'equip' in goods_id: soul_type = 'equip' else: continue if goods_id not in get_goods['soul'][soul_type]: get_goods['soul'][soul_type][goods_id] = num else: get_goods['soul'][soul_type][goods_id] += num else: continue else: value_config = drop_info_config[goods_id].get('visible', drop_info_config[goods_id].get('invisible', 0)) # 根据配置概率判断是否得到 if utils.is_happen(value_config[1]): num = random.randint(value_config[0][0], value_config[0][1]) for t in ['card', 'equip', 'props', 'mat']: if t in goods_id: get_type = t if goods_id not in get_goods[get_type]: get_goods[get_type][goods_id] = num else: get_goods[get_type][goods_id] += num else: continue # 添加must_drop必掉物品 md = room_config.get('must_drop', {}) for goods_type in md: if goods_type == 'soul': for key in md[goods_type]: if 'card' in key: soul_type = 'card' elif 'equip' in key: soul_type = 'equip' else: continue if key in get_goods[goods_type][soul_type]: get_goods[goods_type][soul_type][key] += md[goods_type][key] else: get_goods[goods_type][soul_type][key] = md[goods_type][key] else: for key in md[goods_type]: if key in get_goods[goods_type]: get_goods[goods_type][key] += md[goods_type][key] else: get_goods[goods_type][key] = md[goods_type][key] # ------------------------------添加扫荡物品 end---------------- # 添加扫荡获得物品 tmpdata = user_property.test_give_award(get_goods, where='wipe_out') # 减扫荡券 user_pack.minus_props('24_props', do_times, 'wipe_out') # 扣体力 user_property.minus_stamina(need_stamina) # 记录repeat info user_dungeon.add_repeat_cnt(d_type, floor_id, room_id, do_times) # 给前端 data['get_exp'] = tmpdata['exp'] data['get_exp_point'] = tmpdata['exp_point'] data['get_gold'] = tmpdata['gold'] data['get_card'] = tmpdata['card'] data['get_equip'] = tmpdata['equip'] data['get_souls'] = tmpdata['soul'] data['get_material'] = tmpdata['mat'] data['get_props'] = tmpdata['props'] return 0, data
def wipe_out(rk_user, params): ''' 扫荡 玩家能够在已经完美过关的关卡上使用扫荡功能,扫荡不用进入战斗画面,直接返回关卡奖励 与普通战斗不同的是扫荡并不需要更新战场的关卡信息, params: dungeon_type:'normal' 战场类型,有普通战场 normal , 试炼 daily floor_id:'1' room_id:'1' do_times: '1' 扫荡次数 ''' # ------------------------------参数check start------------------------- d_type = params.get('dungeon_type') floor_id = params.get('floor_id') room_id = params.get('room_id') do_times = params.get('do_times') if d_type not in ['normal', 'daily'] or not floor_id or not room_id: return 6, {'msg': utils.get_msg('dungeon', 'invalid_params')} try: do_times = int(do_times) except ValueError: return 6, {'msg': utils.get_msg('dungeon', 'invalid_params')} if do_times < 1 or do_times > 10: return 6, {'msg': utils.get_msg('dungeon', 'invalid_params')} # 读配置 conf_dict = { 'normal': game_config.normal_dungeon_config, 'daily': game_config.daily_dungeon_config } dungeon_config = conf_dict[d_type] # 战场不存在 try: dungeon_config[floor_id]['rooms'][room_id] except KeyError: return 6, {'msg': utils.get_msg('dungeon', 'invalid_dungeon')} # ------------------------------参数check end---------------------------- # ------------------------------扫荡逻辑check start---------------- user_dungeon = rk_user.user_dungeon has_played_info = user_dungeon.has_played_info user_property = rk_user.user_property # 玩家未达到15级,不开启扫荡 open_lv = game_config.user_init_config['open_lv'].get('wipe_out', 0) if user_property.lv < open_lv: return 11, { 'msg': utils.get_msg('dungeon', 'wipe_out_open_lv') % open_lv } # vip未达到4级,不开启多次扫荡 open_lv = game_config.user_init_config['open_lv'].get( 'vip_multi_wipe_out', 0) if do_times > 1 and user_property.vip_cur_level < open_lv: return 11, {'msg': utils.get_msg('dungeon', 'vip_wipe_out') % open_lv} # 未达到此战场 try: has_played_info[d_type][floor_id]['rooms'][room_id] except KeyError: return 11, {'msg': utils.get_msg('dungeon', 'not_arrived')} # 没达到3星 if not has_played_info[d_type][floor_id]['rooms'][room_id]['perfect']: return 11, {'msg': utils.get_msg('dungeon', 'not_three_star')} # 当前扫荡券不足 user_pack = rk_user.user_pack if not user_pack.is_props_enough('24_props', do_times): return 11, {'msg': utils.get_msg('dungeon', 'wipe_out_not_enough')} floor_config = dungeon_config[floor_id] room_config = dungeon_config[floor_id]['rooms'][room_id] # 检查用户体力是否足够 need_stamina = int(room_config['stamina']) * do_times if user_property.stamina < need_stamina: raise GameLogicError('user', 'not_enough_stamina') # 进入战场次数用完,不能扫荡, 或者更新repeat_info的当天日期 if user_dungeon.check_limit_dungeon(rk_user, params) is False: raise GameLogicError('dungeon', 'invalid_limit_dungeon') # 计算能够扫荡次数 if d_type == 'normal': try: # 判断dungeon_repeat_info中有无此关卡记录 user_dungeon.dungeon_repeat_info[d_type][floor_id][room_id] except KeyError: # 无此关卡记录时,把此关卡今日完成次数置零 user_dungeon.dungeon_repeat_info \ .setdefault(d_type, {}) \ .setdefault(floor_id, {}) \ .setdefault(room_id, 0) user_dungeon.put() can_make_copy_cnt = room_config['can_make_copy_cn'] has_played_cnt = user_dungeon.dungeon_repeat_info[d_type][floor_id][ room_id] elif d_type == 'daily': try: # 判断dungeon_repeat_info中有无此关卡记录 user_dungeon.dungeon_repeat_info[d_type][floor_id] except KeyError: # 无此关卡记录时,把此关卡今日完成次数置零 user_dungeon.dungeon_repeat_info \ .setdefault(d_type, {}) \ .setdefault(floor_id, 0) user_dungeon.put() can_make_copy_cnt = floor_config['can_make_copy_cn'] has_played_cnt = user_dungeon.dungeon_repeat_info[d_type][floor_id] can_wipe_out_cnt = can_make_copy_cnt - has_played_cnt data = {} # 剩余战场次数不够扫荡n次 if can_wipe_out_cnt < do_times: return 11, { 'msg': utils.get_msg('dungeon', 'cant_do_multi_times') % do_times } data['can_wipe_out_cnt'] = can_wipe_out_cnt # ------------------------------扫荡逻辑check end---------------- # 能扫荡次数和vip等级有关 #if utils.get_today_str() == user_property.property_info['recover_times']['today_str']: # wipe_out_times = user_property.property_info.get('wipe_out_times', 0) # vip_lv = user_property.vip_cur_level # can_wipe_out_cnt = game_config.user_vip_config[str(vip_lv)]['can_wipe_out_cnt'] # if can_wipe_out_cnt - wipe_out_times < do_times: # return 11,{'msg':utils.get_msg('dungeon', 'vip_wipe_out')} # user_property.property_info['wipe_out_times'] += do_times #else: # user_property.property_info['wipe_out_times'] = do_times # vip.check_limit_recover(rk_user, 'wipe_out') # 更新一下,防止出错 #user_property.put() # ------------------------------添加扫荡物品 start---------------- # 扫荡战利品 get_goods = { 'exp': 0, 'exp_point': 0, 'gold': 0, 'card': {}, 'equip': {}, 'soul': { 'card': {}, 'equip': {}, }, 'mat': {}, 'props': {}, } # 扫荡一次能够得到的经验,卡经验点,和钱币 get_goods['exp'] += room_config.get('exp', 0) * do_times get_goods['exp_point'] += room_config.get('exp_point', 0) * do_times get_goods['gold'] += room_config.get('gold', 0) * do_times ######## 运营活动 特定时间额外掉落物品 万恶的代码 more_drop = activity.more_dungeon_drop(d_type, floor_id, room_id, times=do_times) if more_drop: for thing_type, things_id_num in more_drop.items(): if thing_type == 'gold': get_goods['gold'] += more_drop['gold']['num'] continue for thing_id, num in things_id_num.items(): if thing_type == 'soul': if 'card' in thing_id: soul_type = 'card' elif 'equip' in thing_id: soul_type = 'equip' get_goods[thing_type][soul_type][ thing_id] = get_goods[thing_type][soul_type].get( thing_id, 0) + num else: get_goods[ thing_type][thing_id] = get_goods[thing_type].get( thing_id, 0) + num ################### ############ # 扫荡能够得到的物品 drop_info = _pack_drop_info(room_config.get('drop_info', {})) invisible_drop = _pack_drop_info(room_config.get('invisible_drop', {})) drop_info.extend(invisible_drop) # 有掉落物品(包括可见和不可见)时计算掉落, 不用战斗所以不区分可见不可见 if drop_info: # sample ['12002_equip', '5_card_soul', '53001_equip_1_soul', '6_card', '23_props', '8_props'] drop_info = list(set(drop_info)) # list去重 drop_info_config = game_config.drop_info_config['normal_dungeon'] # 检查战场掉落配置中是否有此物品 for goods_id in drop_info: if 'soul' in goods_id: if goods_id[:-5] not in drop_info_config['soul']: return 11, { 'msg': utils.get_msg('dungeon', 'no_this_goods') } else: if goods_id not in drop_info_config: return 11, { 'msg': utils.get_msg('dungeon', 'no_this_goods') } # 计算掉落数量 for n in range(do_times): for goods_id in drop_info: if 'soul' in goods_id: goods_id = goods_id[:-5] # 去掉'_soul'后缀 value_config = drop_info_config['soul'][goods_id].get( 'visible', drop_info_config['soul'][goods_id].get('invisible', 0)) # 根据配置概率判断是否得到 if utils.is_happen(value_config[1]): num = random.randint(value_config[0][0], value_config[0][1]) if 'card' in goods_id: soul_type = 'card' elif 'equip' in goods_id: soul_type = 'equip' else: continue if goods_id not in get_goods['soul'][soul_type]: get_goods['soul'][soul_type][goods_id] = num else: get_goods['soul'][soul_type][goods_id] += num else: continue else: value_config = drop_info_config[goods_id].get( 'visible', drop_info_config[goods_id].get('invisible', 0)) # 根据配置概率判断是否得到 if utils.is_happen(value_config[1]): num = random.randint(value_config[0][0], value_config[0][1]) for t in ['card', 'equip', 'props', 'mat']: if t in goods_id: get_type = t if goods_id not in get_goods[get_type]: get_goods[get_type][goods_id] = num else: get_goods[get_type][goods_id] += num else: continue # 添加must_drop必掉物品 md = room_config.get('must_drop', {}) for goods_type in md: if goods_type == 'soul': for key in md[goods_type]: if 'card' in key: soul_type = 'card' elif 'equip' in key: soul_type = 'equip' else: continue if key in get_goods[goods_type][soul_type]: get_goods[goods_type][soul_type][key] += md[goods_type][ key] else: get_goods[goods_type][soul_type][key] = md[goods_type][key] else: for key in md[goods_type]: if key in get_goods[goods_type]: get_goods[goods_type][key] += md[goods_type][key] else: get_goods[goods_type][key] = md[goods_type][key] # ------------------------------添加扫荡物品 end---------------- # 添加扫荡获得物品 tmpdata = user_property.test_give_award(get_goods, where='wipe_out') # 减扫荡券 user_pack.minus_props('24_props', do_times, 'wipe_out') # 扣体力 user_property.minus_stamina(need_stamina) # 记录repeat info user_dungeon.add_repeat_cnt(d_type, floor_id, room_id, do_times) # 给前端 data['get_exp'] = tmpdata['exp'] data['get_exp_point'] = tmpdata['exp_point'] data['get_gold'] = tmpdata['gold'] data['get_card'] = tmpdata['card'] data['get_equip'] = tmpdata['equip'] data['get_souls'] = tmpdata['soul'] data['get_material'] = tmpdata['mat'] data['get_props'] = tmpdata['props'] return 0, data
def enter_dungeon(rk_user, params, user_dungeon_obj, conf): """进入战场""" dungeon_type = params['dungeon_type'] floor_id = params['floor_id'] room_id = params['room_id'] #增加进入战场打印 print 'start_dun_%s:%s_%s_%s' % (str(rk_user.uid),dungeon_type,floor_id,room_id) ######## 运营活动 特定时间内收益翻倍 multiply = 1 if dungeon_type == 'daily': multiply_income_conf = rk_user.game_config.operat_config.get("multiply_income", {} ).get("daily_dungeon", {}).get(floor_id) multiply = multiply_income(multiply_income_conf) ######## last_info = {} data = {} #记录战斗的唯一标识 dungeon_uid = utils.create_gen_id() data['dungeon_uid'] = dungeon_uid last_info['dungeon_uid'] = dungeon_uid #新用户前7天失败不扣体力 付费用户失败不扣体力 need_stamina = int(conf['stamina']) last_info['dungeon_stamina'] = need_stamina #计算每一个小节的敌将和掉落信息 steps_res = calculate_steps(params, conf, rk_user, multiply) ######## 运营活动 特定时间额外掉落物品 扫荡时也有类似逻辑 万恶的代码 more_drop = activity.more_dungeon_drop(dungeon_type, floor_id, room_id, times=1) if more_drop: all_drop_info = steps_res['all_drop_info'] for thing_type, things_id_num in more_drop.items(): if thing_type == 'gold': steps_res['dungeon_gold'] = steps_res['dungeon_gold'] + more_drop['gold']['num'] continue all_drop_info.setdefault(thing_type, {}) for thing_id, num in things_id_num.items(): if thing_type == 'soul': if 'card' in thing_id: soul_type = 'card' elif 'equip' in thing_id: soul_type = 'equip' all_drop_info[thing_type].setdefault(soul_type, {}) all_drop_info[thing_type][soul_type][thing_id] = all_drop_info[thing_type][soul_type].get(thing_id, 0) + num else: all_drop_info[thing_type][thing_id] = all_drop_info[thing_type].get(thing_id, 0) + num ################### #格式化返回的数据 data['all_drop_info'] = steps_res['all_drop_info'] data['steps_info'] = steps_res['steps_info'] data['dungeon_uid'] = last_info['dungeon_uid'] data['exp_point'] = steps_res['exp_point'] data['boss_id'] = conf['boss'][0] #将本次计算的信息作为历史信息保存 last_info['floor_id'] = floor_id last_info['room_id'] = room_id last_info['dungeon_type'] = dungeon_type last_info['all_drop_info'] = steps_res['all_drop_info'] ####################################################################################### last_info['total_gold'] = steps_res['total_gold'] last_info['dungeon_gold'] = steps_res['dungeon_gold'] last_info['exp_point'] = steps_res['exp_point'] ####################################################################################### last_info["dungeon_data"] = data now = datetime.datetime.now() today_str = now.strftime('%Y-%m-%d') last_info["limit_time"] = today_str last_info['exp'] = steps_res['exp'] user_dungeon_obj.dungeon_info['last'] = last_info user_dungeon_obj.put() #将结果返回给前端 return data
def enter_dungeon(rk_user, params, user_dungeon_obj, conf): """进入战场""" dungeon_type = params['dungeon_type'] floor_id = params['floor_id'] room_id = params['room_id'] #增加进入战场打印 print 'start_dun_%s:%s_%s_%s' % (str( rk_user.uid), dungeon_type, floor_id, room_id) ######## 运营活动 特定时间内收益翻倍 multiply = 1 if dungeon_type == 'daily': multiply_income_conf = rk_user.game_config.operat_config.get( "multiply_income", {}).get("daily_dungeon", {}).get(floor_id) multiply = multiply_income(multiply_income_conf) ######## last_info = {} data = {} #记录战斗的唯一标识 dungeon_uid = utils.create_gen_id() data['dungeon_uid'] = dungeon_uid last_info['dungeon_uid'] = dungeon_uid #新用户前7天失败不扣体力 付费用户失败不扣体力 need_stamina = int(conf['stamina']) last_info['dungeon_stamina'] = need_stamina #计算每一个小节的敌将和掉落信息 steps_res = calculate_steps(params, conf, rk_user, multiply) ######## 运营活动 特定时间额外掉落物品 扫荡时也有类似逻辑 万恶的代码 more_drop = activity.more_dungeon_drop(dungeon_type, floor_id, room_id, times=1) if more_drop: all_drop_info = steps_res['all_drop_info'] for thing_type, things_id_num in more_drop.items(): if thing_type == 'gold': steps_res['dungeon_gold'] = steps_res[ 'dungeon_gold'] + more_drop['gold']['num'] continue all_drop_info.setdefault(thing_type, {}) for thing_id, num in things_id_num.items(): if thing_type == 'soul': if 'card' in thing_id: soul_type = 'card' elif 'equip' in thing_id: soul_type = 'equip' all_drop_info[thing_type].setdefault(soul_type, {}) all_drop_info[thing_type][soul_type][ thing_id] = all_drop_info[thing_type][soul_type].get( thing_id, 0) + num else: all_drop_info[ thing_type][thing_id] = all_drop_info[thing_type].get( thing_id, 0) + num ################### #格式化返回的数据 data['all_drop_info'] = steps_res['all_drop_info'] data['steps_info'] = steps_res['steps_info'] data['dungeon_uid'] = last_info['dungeon_uid'] data['exp_point'] = steps_res['exp_point'] data['boss_id'] = conf['boss'][0] #将本次计算的信息作为历史信息保存 last_info['floor_id'] = floor_id last_info['room_id'] = room_id last_info['dungeon_type'] = dungeon_type last_info['all_drop_info'] = steps_res['all_drop_info'] ####################################################################################### last_info['total_gold'] = steps_res['total_gold'] last_info['dungeon_gold'] = steps_res['dungeon_gold'] last_info['exp_point'] = steps_res['exp_point'] ####################################################################################### last_info["dungeon_data"] = data now = datetime.datetime.now() today_str = now.strftime('%Y-%m-%d') last_info["limit_time"] = today_str last_info['exp'] = steps_res['exp'] user_dungeon_obj.dungeon_info['last'] = last_info user_dungeon_obj.put() #将结果返回给前端 return data