/** * c++剧情触发 * @param $roles * @param $target_id * @return bool */ public function trigger_drama_task($roles, $target_id) { if (empty($roles) || empty($target_id)) { $this->throw_error('10107'); } // Com_Log::write("trigger_drama_task","roles:".var_export($roles,true)); // Com_Log::write("trigger_drama_task","target_id:".var_export($target_id,true)); $target_type = 9; $drama_config = Cache_DramaTrigger::getInstance()->get_drama_trigger_drama_config($target_id); $arr_player_task = null; foreach ($roles as $player_id) { if ($drama_config['task_sid'] > 0) { $arr_player_task = $this->get_data('PlayerTask')->get_task_info($player_id); if (!isset($arr_player_task['main_val'][$drama_config['task_sid']]) || $arr_player_task['main_val'][$drama_config['task_sid']]['task_status'] == 2 || $arr_player_task['main_val'][$drama_config['task_sid']]['step'] != $drama_config['task_step_id']) { continue; } } if ($drama_config['need_pause'] && $drama_config['drama_id']) { $drama_data = array('player_id' => $player_id, 'status' => 1, 'map_sid' => $drama_config['map_sid']); Protocol::input($player_id, 7, 4, 416, $drama_data); } if (!IS_FRONT || defined('FROM_GATEWAY')) { $cmd0 = 8; } else { $cmd0 = 3; } if ($drama_config['drama_id']) { // if($drama_config['task_sid'] > 0){ // if(!isset($arr_player_task['main_val'][$drama_config['task_sid']]) || $arr_player_task['main_val'][$drama_config['task_sid']]['task_status'] == 2 || $arr_player_task['main_val'][$drama_config['task_sid']]['step'] != $drama_config['task_step_id']){ // continue; // } // } Protocol::input($player_id, $cmd0, 10, 1004, array(0 => $drama_config['drama_id'], 1 => $target_id)); } else { $cur_step_config = Cache_TaskStepConfig::getInstance()->get_task_step_config($drama_config['task_sid'], $drama_config['task_step_id']); if ($cur_step_config['btn_dialog']) { Protocol::input($player_id, $cmd0, 10, 1004, array()); } } try { // Com_Log::write("trigger_drama_task","arr_player_task:".var_export($arr_player_task,true)); // Com_Log::write("trigger_drama_task","task_sid:{$drama_config['task_sid']} drama_id:{$drama_config['drama_id']}"); if ($drama_config['task_sid'] > 0 && $drama_config['drama_id'] == 0) { //9类型的任务分剧情 和非具体 非剧情的在这出发触发 具体的 在剧情完成的方法里触发 $this->trigger_task($player_id, $target_type, $target_id, 1, $arr_player_task); } } catch (Exception $e) { continue; } } return true; }
/** * 生成触发器jie * @param $player_id * @param $task_step_config * @return array */ public function get_target_val($player_id, $task_step_config, $current_num = 0) { $target = array(); //:战斗;2:对话;3:通关副本;4:护送;5:收集道具;6:使用道具;7:小玩法;8:升级;9:剧场,10:读条(烟花)) if ($task_step_config['step_type'] == 1 || $task_step_config['step_type'] == 116) { //战斗 杀怪 || 日常任务杀怪 $arr = explode("_", $task_step_config['kill_npc']); if (!empty($arr)) { foreach ($arr as $val) { $tar = explode("|", $val); $target[$tar[0]] = array('target_id' => $tar[0], 'target_num' => $tar[1], 'current_num' => $current_num); } } } elseif ($task_step_config['step_type'] == 2) { $target[$task_step_config['pay_npc_id']] = array('target_id' => $task_step_config['pay_npc_id'], 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 3) { //通关副本 $target[$task_step_config['dup_id']] = array('target_id' => $task_step_config['dup_id'], 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 4) { //护送 暂时没有这个任务改成通过副本了 $arr = explode("_", $task_step_config['pro_npc']); $target[$arr[0]] = array('target_id' => $arr[0], 'target_num' => $arr[1], 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 5 || $task_step_config['step_type'] == 11) { //收集道具 $arr = explode("_", $task_step_config['gather_prop']); if (!empty($arr)) { foreach ($arr as $val) { $tar = explode("|", $val); $cur_num = $this->get_has_collect_prop_num($player_id, $tar[0]); $target[$tar[0]] = array('target_id' => $tar[0], 'target_num' => $tar[1], 'current_num' => intval($cur_num)); } } } elseif ($task_step_config['step_type'] == 6) { //使用道具 $arr = explode("_", $task_step_config['use_prop']); if (!empty($arr)) { foreach ($arr as $val) { $tar = explode("|", $val); $target[$tar[0]] = array('target_id' => $tar[0], 'target_num' => $tar[1], 'current_num' => $current_num); } } } elseif ($task_step_config['step_type'] == 7) { $target[$task_step_config['minigame_id']] = array('target_id' => $task_step_config['minigame_id'], 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 8) { $target[8] = array('target_id' => 8, 'target_num' => $task_step_config['level_limit'], 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 9) { $drama_config = Cache_DramaTrigger::getInstance()->get_drama_trigger_drama_config($task_step_config['drama_trigger_sid']); $target[$task_step_config['drama_trigger_sid']] = array('target_id' => $task_step_config['drama_trigger_sid'], 'target_num' => 1, 'current_num' => $current_num, 'x' => $drama_config['x'], 'y' => $drama_config['y'], 'drama_id' => $drama_config['drama_id'], 'map_sid' => $drama_config['map_sid']); } elseif ($task_step_config['step_type'] == 10) { //读条 烟花 $arr = explode("_", $task_step_config['kill_npc']); if (!empty($arr)) { foreach ($arr as $val) { $tar = explode("|", $val); $target[$tar[0]] = array('target_id' => $tar[0], 'target_num' => $tar[1], 'current_num' => $current_num); } } } elseif ($task_step_config['step_type'] == 12) { $target[$task_step_config['city_id']] = array('target_id' => $task_step_config['city_id'], 'target_num' => 1, 'current_num' => $current_num, 'city_id' => $task_step_config['city_id'], 'pro_addr_x' => $task_step_config['pro_addr_x'], 'pro_addr_y' => $task_step_config['pro_addr_y'], 'pro_npc' => $task_step_config['pro_npc']); } elseif ($task_step_config['step_type'] == 13) { #女神出战引导 $target[13] = array('target_id' => 13, 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 14) { #翅膀激活引导 $target[14] = array('target_id' => 14, 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 15) { #装备道具引导 $target[15] = array('target_id' => 15, 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 16) { #技能学习升级 $target[16] = array('target_id' => 16, 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 17) { #英雄出战 $target[17] = array('target_id' => 17, 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 18) { #酒馆招募 $target[18] = array('target_id' => 18, 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 19) { #女神培养 3次 $target[19] = array('target_id' => 19, 'target_num' => 3, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] == 20) { #购买金币商城道具 环任务的特殊需求 $arr = explode("|", $task_step_config['need_item']); if (!empty($arr)) { foreach ($arr as $val) { $tar = explode(":", $val); $target[$tar[0]] = array('target_id' => $tar[0], 'target_num' => $tar[1], 'current_num' => $current_num); } } } elseif ($task_step_config['step_type'] == 21) { #获取英雄 环任务特殊需求 $arr = explode("|", $task_step_config['need_hero']); if (!empty($arr)) { foreach ($arr as $val) { $tar = explode(":", $val); $target[$tar[0]] = array('target_id' => $tar[0], 'target_num' => $tar[1], 'current_num' => $current_num, 'hero_sid' => ''); } } } elseif ($task_step_config['step_type'] == 100) { # 日常任务,主线副本 $target[$task_step_config['dup_id']] = array('target_id' => $task_step_config['dup_id'], 'target_num' => $task_step_config['dup_cle_grade'], 'current_num' => $current_num, 'func_id' => $task_step_config['func_id'], 'func_param' => $task_step_config['func_param']); } elseif ($task_step_config['step_type'] == 101) { # 日常任务,挑战副本 || 通关副本 $target[$task_step_config['dup_id']] = array('target_id' => $task_step_config['dup_id'], 'target_num' => 1, 'current_num' => $current_num, 'func_id' => $task_step_config['func_id'], 'func_param' => $task_step_config['func_param']); } elseif ($task_step_config['step_type'] == 103 || $task_step_config['step_type'] == 104 || $task_step_config['step_type'] == 105) { # 日常任务,守卫雅典娜,世界BOSS,抢矿 $target[$task_step_config['dup_id']] = array('target_id' => $task_step_config['dup_id'], 'target_num' => $task_step_config['task_req_act_num'], 'current_num' => $current_num, 'func_id' => $task_step_config['func_id'], 'func_param' => $task_step_config['func_param']); } elseif ($task_step_config['step_type'] == 117) { # 日常任务,NPC对话 $target[$task_step_config['pay_npc_id']] = array('target_id' => $task_step_config['pay_npc_id'], 'target_num' => 1, 'current_num' => $current_num); } elseif ($task_step_config['step_type'] >= 102) { # 日常任务,其它 $target[$task_step_config['step_type']] = array('target_id' => $task_step_config['step_type'], 'target_num' => $task_step_config['task_req_act_num'], 'current_num' => $current_num, 'func_id' => $task_step_config['func_id'], 'func_param' => $task_step_config['func_param']); } return $target; }