Example #1
0
 /**
  * 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;
 }
Example #2
0
 /**
  * 生成触发器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;
 }