Files
dsrc/sku.0/sys.server/compiled/game/script/quest/task/ground/craft.script
T
2013-09-10 23:17:15 -07:00

176 lines
6.1 KiB
Plaintext

include library.groundquests;
include library.utils;
// ---------------------------------------------------------------------
inherits quest.task.ground.base_task;
// ---------------------------------------------------------------------
const String dataTableColumnServerTemplate = "SERVER_OBJECT_TEMPLATE";
const String dataTableColumnCount = "COUNT";
const String objvarCount = "count";
const String dot = ".";
const String taskType = "craft";
// ---------------------------------------------------------------------
//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);
setObjVar(self, baseObjVar + dot + objvarCount, 0);
int count = groundquests.getTaskIntDataEntry(questCrc, taskId, dataTableColumnCount);
questSetQuestTaskCounter(self, questGetQuestName(questCrc), taskId, "quest/groundquests:crafting_counter", 0, count);
return SCRIPT_CONTINUE;
}
// ---------------------------------------------------------------------
trigger OnCraftedPrototype(obj_id prototypeObject, draft_schematic manufacturingSchematic)
{
int prototypeObjectTemplateCrc = getObjectTemplateCrc(getTemplateName(prototypeObject));
//get the base objvar for craft quests, all data is under that
String taskObjVarName = groundquests.getTaskTypeObjVar(self, taskType);
if(taskObjVarName != null)
{
//get the list of craft quests
obj_var_list questList = getObjVarList(self, taskObjVarName);
if(questList != null)
{
int countQuests = questList.getNumItems();
//for each craft quest, see if it cares about this object
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 crafting
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);
String craftedObjectTemplateName = groundquests.getTaskStringDataEntry(questCrc, taskId, dataTableColumnServerTemplate);
int objectTemplateCrc = getObjectTemplateCrc(craftedObjectTemplateName);
if(objectTemplateCrc != 0)
{
if(objectTemplateCrc == prototypeObjectTemplateCrc)
{
String baseObjVar = groundquests.getBaseObjVar(self, taskType, questGetQuestName(questCrc), taskId);
String countObjVar = baseObjVar + dot + objvarCount;
int currentCount = getIntObjVar(self, countObjVar);
++currentCount;
int count = groundquests.getTaskIntDataEntry(questCrc, taskId, dataTableColumnCount);
if(currentCount >= count)
{
questCompleteTask(questCrc, taskId, self);
}
else
{
groundquests.questOutputDebugInfo(self, questCrc, taskId, taskType, "OnCraftedPrototype", currentCount + "/" + count + " crafted.");
setObjVar(self, countObjVar, currentCount);
questSetQuestTaskCounter(self, questGetQuestName(questCrc), taskId, "quest/groundquests:crafting_counter", currentCount, count);
}
}
}
}
}
}
}
}
}
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;
}
// ---------------------------------------------------------------------
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)
{
groundquests.clearBaseObjVar(player, taskType, questGetQuestName(questCrc), taskId);
}
// ---------------------------------------------------------------------
trigger OnDetach()
{
//make sure the base objvar is removed
removeObjVar(self, groundquests.getTaskTypeObjVar(self, taskType));
return SCRIPT_CONTINUE;
}
// ---------------------------------------------------------------------
commandHandler handleClientLogin()
{
dictionary tasks = groundquests.getActiveTasksForTaskType(self, taskType);
if ((tasks != null) && !tasks.isEmpty())
{
java.util.Enumeration keys = tasks.keys();
while (keys.hasMoreElements())
{
String questCrcString = (string)keys.nextElement();
int questCrc = utils.stringToInt(questCrcString);
int[] tasksForCurrentQuest = tasks.getIntArray(questCrcString);
for(int i = 0; i < tasksForCurrentQuest.length; ++i)
{
int taskId = tasksForCurrentQuest[i];
String baseObjVar = groundquests.getBaseObjVar(self, taskType, questGetQuestName(questCrc), taskId);
String countObjVar = baseObjVar + dot + objvarCount;
if(hasObjVar(self, countObjVar))
{
int currentCount = getIntObjVar(self, countObjVar);
int count = groundquests.getTaskIntDataEntry(questCrc, taskId, dataTableColumnCount);
questSetQuestTaskCounter(self, questGetQuestName(questCrc), taskId, "quest/groundquests:crafting_counter", 0, count);
}
}
}
}
return SCRIPT_CONTINUE;
}