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; }