/** * @Purpose: * c++副本结算请求 * @Method Name: fb_reward_req_s2p() * @Parameter: $player_id 玩家ID * @Parameter: $egg_count 金蛋数量(如果是金蛋副本才有数据) * @Parameter: $combos_count 连击次数 * @Parameter: $passed 通关状态 * @Parameter: $spend_time 耗时 * @Parameter: $map_id 副本ID * @Return: 返回请求结果 */ public function fb_reward_req_s2p($player_id, $egg_count, $combos_count, $passed, $spend_time, $map_id) { $map_id = intval($map_id); $passed = intval($passed); $spend_time = intval($spend_time) / 1000; $data = array(); if (!$map_id) { foreach ($player_id as $keys1 => $id1) { $data[$keys1]['player_id'] = $id1; $data[$keys1]['map_id'] = $map_id; $data[$keys1]['error_code'] = '40402'; #map_id参数错误 $rtn_error[$keys1] = Struct_PlayerAttr::get_fb_liquidate_struct($data[$keys1]); } } if (is_array($player_id)) { if ($passed) { foreach ($player_id as $id) { //更新任务 $this->update_task($id, $map_id); } } else { $rtn_error = array(); foreach ($player_id as $keys9 => $id9) { $data[$keys9]['player_id'] = $id9; $data[$keys9]['map_id'] = $map_id; $data[$keys9]['passed'] = $passed; $rtn_error[$keys9] = Struct_PlayerAttr::get_fb_liquidate_struct($data[$keys9]); } return $rtn_error; } //获取副本配置表 $fb_table = $this->get_fb_table_data($map_id); //副本章节合法性验证 if (!$fb_table || $fb_table['chapter'] < 0 || $fb_table['page'] < 1) { foreach ($player_id as $keys2 => $id2) { $data[$keys2]['player_id'] = $id2; $data[$keys2]['map_id'] = $map_id; $data[$keys2]['error_code'] = '40401'; #map配置表章节或页数配置错误 $rtn_error[$keys2] = Struct_PlayerAttr::get_fb_liquidate_struct($data[$keys2]); } return $rtn_error; } $this->start_trans(); $data_copy = array(); # 副本用来任务触发取数据 $update_fb_pass = array(); $is_update_fb_res = array(); $update_res = array(); foreach ($player_id as $keys => $val) { if (!$player_id[$keys]) { foreach ($player_id as $keys3 => $id3) { $data[$keys3]['player_id'] = $id3; $data[$keys3]['map_id'] = $map_id; $data[$keys3]['error_code'] = '40403'; #player_id参数错误 $rtn_error[$keys3] = Struct_PlayerAttr::get_fb_liquidate_struct($data[$keys3]); } return $rtn_error; } /* $player_fb_data = $this->get_player_chapter_by_id($val); //副本章节合法性验证 if ($fb_table['chapter'] > $player_fb_data['chapter_id']) { if ($fb_table['chapter'] != $this->test_fb_chapter) { foreach ($player_id as $keys => $id) { $data[$keys]['player_id'] = $id; $data[$keys]['error_code'] = $this->error_code['10109']; $rtn_error[$keys] = Struct_PlayerAttr::get_fb_liquidate_struct($data[$keys]); } return $rtn_error; } } //副本页合法性验证 if ($fb_table['page'] > $player_fb_data['page']) { foreach ($player_id as $keys => $id) { $data['player_id'][$keys] = $id; $data['error_code'][$keys] = $this->return_code['sql_error'];; } $data['map_id'] = $map_id; $rtn_error = Struct_PlayerAttr::get_enter_fb_ack_struct_p2s($data); return $rtn_error; } */ //副本结算 $liquidate_fb_res[$keys] = $this->liquidate_fb_reward($player_id[$keys], $egg_count[$keys], $combos_count[$keys], $passed, $spend_time, $map_id, $fb_table['dungeon_type'], $data[$keys]); $data_copy[$keys] = $data[$keys]; if ($liquidate_fb_res[$keys] !== true) { foreach ($player_id as $keys4 => $id4) { $data[$keys4]['player_id'] = $id4; $data[$keys4]['map_id'] = $map_id; $data[$keys4]['error_code'] = $liquidate_fb_res[$keys]; $rtn_error[$keys4] = Struct_PlayerAttr::get_fb_liquidate_struct($data[$keys4]); } return $rtn_error; } $cmd_id = 4043; $prop_data = array(); #VIP副本奖励 if ($this->vip_fb_chapter == $fb_table['chapter'] && $this->vip_fb_page == $fb_table['page']) { $cmd_id = 40431; $player_level = $this->get_data('Player')->get_player_info($player_id[$keys], 'level'); $map_vip_level_table = Cache_MapVip::getInstance()->get_map_vip_level_add_info(array('level' => $player_level)); if (!empty($map_vip_level_table['add']) && is_string($map_vip_level_table['add'])) { $add_info = explode(":", $map_vip_level_table['add']); if (isset($add_info[1])) { $data[$keys]['all_exp'] = $add_info[1] * ($data[$keys]['all_exp'] / 100); $data[$keys]['grade_exp'] = $data[$keys]['all_exp']; } else { $data[$keys]['all_exp'] = 0; $data[$keys]['grade_exp'] = 0; } } else { $data[$keys]['all_exp'] = 0; $data[$keys]['grade_exp'] = 0; } } //添加玩家副本奖励金币 if ($data[$keys]['grade_coin']) { $prop_data[] = array('type' => 'silver', 'item_id' => '3', 'item_num' => $data[$keys]['all_exp']); } else { if ($data[$keys]['crystal']) { $prop_data[] = array('type' => 'crystal', 'item_id' => '13', 'item_num' => $data[$keys]['all_exp']); } else { if ($data[$keys]['all_exp']) { $prop_data[] = array('type' => 'exp', 'item_id' => '1', 'item_num' => $data[$keys]['all_exp']); } } } if (Com_Array::is_good_arr($prop_data)) { $result = $this->get_game('Reward')->send_reward($player_id[$keys], $prop_data, array('cmd_id' => $cmd_id), 1); if ($result !== true) { foreach ($player_id as $keys5 => $id5) { $data[$keys5]['player_id'] = $id5; $data[$keys5]['map_id'] = $map_id; $data[$keys5]['error_code'] = '10104'; $rtn_error[$keys5] = Struct_PlayerAttr::get_fb_liquidate_struct($data[$keys5]); } return $rtn_error; } } //副本信息变化再更新 $is_update_fb_res[$keys] = $this->is_change_fb_info($data[$keys], $fb_table['chapter'], $fb_table['page']); if ($is_update_fb_res[$keys]) { $update_pass = $is_update_fb_res[$keys]['passed']; $update_star = $is_update_fb_res[$keys]['star']; $update_best_time = $is_update_fb_res[$keys]['bt']; $update_grade = $is_update_fb_res[$keys]['grade']; $update_egg = $is_update_fb_res[$keys]['egg']; //更新玩家副本信息 $update_res[$keys] = $this->update_player_fb_info($player_id[$keys], $fb_table['chapter'], $fb_table['page'], $map_id, $update_pass, $update_star, $update_best_time, $update_grade, $update_egg, $data[$keys]['grade_level'], $data[$keys]['grade_exp']); if ($update_best_time) { if (!isset($update_fb_pass['pass_time']) || isset($update_fb_pass['pass_time']) && $update_best_time < $update_fb_pass['pass_time']) { $update_fb_pass['player_id'] = $player_id[$keys]; $update_fb_pass['pass_time'] = $update_best_time; } } if ($update_egg) { if (!isset($update_fb_pass['pass_grade']) || isset($update_fb_pass['pass_grade']) && $update_egg > $update_fb_pass['pass_grade']) { $update_fb_pass['player_id'] = $player_id[$keys]; $update_fb_pass['pass_grade'] = $update_egg; } } } } //更新副本最佳通关信息 $update_info = $this->update_fb_pass_info($update_fb_pass['player_id'], $map_id, $update_fb_pass['pass_time'], $update_fb_pass['pass_grade']); if ($update_info !== false) { //获取人物名称,职业属性 $obj_player_data = $this->get_data('Player'); if (Com_Array::is_good_arr($data)) { foreach ($data as $keys5 => $val5) { $cur_player = $obj_player_data->get_player_info($val5['player_id'], array('name', 'career_type')); $data[$keys5]['player_name'] = $cur_player['name']; $data[$keys5]['player_type'] = $cur_player['career_type']; $data[$keys5]['best_player_name'] = $update_info['player_name']; $data[$keys5]['best_player_type'] = $update_info['player_type']; $data[$keys5]['best_time'] = $update_info['pass_time']; $data[$keys5]['best_grade'] = $update_info['pass_grade']; $data[$keys5] = Struct_PlayerAttr::get_fb_liquidate_struct($data[$keys5]); } } } $is_update = false; //是否有更新 if (is_array($is_update_fb_res)) { foreach ($is_update_fb_res as $val9) { if ($val9) { $is_update = true; break; } } } else { if ($is_update_fb_res) { $is_update = true; } } if ($is_update) { //更新成功判断 foreach ($update_res as $res) { if ($res !== true) { foreach ($player_id as $keys7 => $id7) { $data[$keys7]['player_id'] = $id7; $data[$keys7]['map_id'] = $map_id; $data[$keys7]['error_code'] = $res; $rtn_error[$keys7] = Struct_PlayerAttr::get_fb_liquidate_struct($data[$keys7]); } return $rtn_error; } } } $this->commit(); $this->get_game('Reward')->add_reward_log(); foreach ($player_id as $keys8 => $id8) { if ($this->vip_fb_chapter == $fb_table['chapter'] && $this->vip_fb_page == $fb_table['page']) { $this->get_game('TaskTrigger')->async_trigger_guide_task($id8, 18, 1); } else { #更新公会福利大厅任务 $this->get_game('UnionBoonHall')->async_trigger_union_task($id8, 2, 1020); //更新成就 $this->get_game('PlayerAchieve')->async_trigger_achieve_target($id8, 17, $map_id, 1); #更新日常任务 $this->get_game('TaskTrigger')->async_trigger_task($id8, 100, $map_id, $data_copy[$keys8]['grade_level']); #$this->get_game('TaskTrigger')->async_trigger_task($id8, 100, $fb_table['link_key'], $data_copy[$keys8]['grade_level']); } } #Com_Log::write('player_fb_res', json_encode($data)); } return $data; }