mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-31 00:15:54 -04:00
180 lines
5.6 KiB
Plaintext
180 lines
5.6 KiB
Plaintext
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;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------
|