include ai.ai_combat; include library.ai_lib; include library.quests; include library.create; include library.groundquests; include library.locations; include library.utils; // --------------------------------------------------------------------- inherits quest.task.ground.base_task; // --------------------------------------------------------------------- const String dataTableColumnServerTemplate = "SERVER_TEMPLATE"; const String dataTableColumnDestinationNodeName = "DESTINATION_NODE_NAME"; const String dataTableColumnMovementType = "MOVEMENT_TYPE"; const String objvarAsassinateTarget = "target"; const String taskType = "assassinate"; const String dot = "."; // --------------------------------------------------------------------- //fires when this task is added to the player trigger OnTaskActivated(int questCrc, int taskId) { groundquests.questOutputDebugInfo(self, questCrc, taskId, taskType, "OnTaskActivated", taskType + " task activated."); String baseObjVar = groundquests.setBaseObjVar(self, taskType, questGetQuestName(questCrc), taskId); //gather data for this task String serverTemplate = groundquests.getTaskStringDataEntry(questCrc, taskId, dataTableColumnServerTemplate); location l = groundquests.getRandom2DLocationAroundPlayer(self, 5, 15); obj_id assassinateTarget = create.createCreature(serverTemplate, l, true); groundquests.addDestroyNotification(assassinateTarget, self); setObjVar(self, baseObjVar + dot + objvarAsassinateTarget, assassinateTarget); return SCRIPT_CONTINUE; } // --------------------------------------------------------------------- messageHandler destroyNotification() { if(params != null) { obj_id source = params.getObjId("source"); //get the base objvar for quests, all data is under that String taskObjVarName = groundquests.getTaskTypeObjVar(self, taskType); if(taskObjVarName != null) { //get the list of quests obj_var_list questList = getObjVarList(self, taskObjVarName); if(questList != null) { int countQuests = questList.getNumItems(); //for each quest, check each task for (int i = 0; i < countQuests; ++i) { obj_var ov = questList.getObjVar(i); string questName = ov.getName(); int questCrc = questGetQuestId(questName); String questObjVarName = taskObjVarName + dot + questName; if(hasObjVar(self, questObjVarName)) { //get the list of tasks for this quest that are of the right taskType obj_var_list taskList = getObjVarList(self, questObjVarName); if(taskList != null) { int countTasks = taskList.getNumItems(); for (int j = 0; j < countTasks; ++j) { obj_var ov2 = taskList.getObjVar(j); string taskName = ov2.getName(); int taskId = utils.stringToInt(taskName); //check the data specific to this task type String assassinateTargetObjVarName = questObjVarName + dot + taskName + dot + objvarAsassinateTarget; if(hasObjVar(self, assassinateTargetObjVarName)) { obj_id assassinateTarget = getObjIdObjVar(self, assassinateTargetObjVarName); if(source == assassinateTarget) { questCompleteTask(questCrc, taskId, self); } } } } } } } } } return SCRIPT_CONTINUE; } // --------------------------------------------------------------------- //fires when the task is completed trigger OnTaskCompleted(int questCrc, int taskId) { cleanup(self, questCrc, taskId); groundquests.questOutputDebugInfo(self, questCrc, taskId, taskType, "OnTaskCompleted", taskType + " task completed."); return SCRIPT_CONTINUE; } // --------------------------------------------------------------------- //fires when the task is failed trigger OnTaskFailed(int questCrc, int taskId) { cleanup(self, questCrc, taskId); groundquests.questOutputDebugInfo(self, questCrc, taskId, taskType, "OnTaskFailed", taskType + " task failed."); return SCRIPT_CONTINUE; } // --------------------------------------------------------------------- //fires when the task is failed trigger OnTaskCleared(int questCrc, int taskId) { cleanup(self, questCrc, taskId); groundquests.questOutputDebugInfo(self, questCrc, taskId, taskType, "OnTaskCleared", taskType + " task cleared."); return SCRIPT_CONTINUE; } // --------------------------------------------------------------------- void cleanup(obj_id player, int questCrc, int taskId) { // destroy the assassinate target String baseObjVar = groundquests.getBaseObjVar(player, taskType, questGetQuestName(questCrc), taskId); String assassinateTargetObjVarName = baseObjVar + dot + objvarAsassinateTarget; obj_id assassinateTarget = getObjIdObjVar(player, assassinateTargetObjVarName); if (assassinateTarget!= null) { removeObjVar(player, assassinateTargetObjVarName); if(!ai_lib.isAiDead(assassinateTarget)) destroyObject(assassinateTarget); } groundquests.clearBaseObjVar(player, taskType, questGetQuestName(questCrc), taskId); } // --------------------------------------------------------------------- trigger OnLogout() { groundquests.failAllActiveTasksOfType(self, taskType); return SCRIPT_CONTINUE; } // --------------------------------------------------------------------- trigger OnInitialize() { groundquests.failAllActiveTasksOfType(self, taskType); return SCRIPT_CONTINUE; } // --------------------------------------------------------------------- trigger OnDetach() { //make sure the base objvar is removed removeObjVar(self, groundquests.getTaskTypeObjVar(self, taskType)); return SCRIPT_CONTINUE; } // ---------------------------------------------------------------------