Example #1
0
 /**
  * @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;
 }