diff --git a/scripts/commands/activatequest.py b/scripts/commands/activatequest.py index 5e834183..f17c5523 100644 --- a/scripts/commands/activatequest.py +++ b/scripts/commands/activatequest.py @@ -8,6 +8,6 @@ def run(core, actor, target, commandString): actor.sendSystemMessage(' \\#FE2EF7 [GM] \\#FFFFFF activateQuest: Error. You have specified an invalid quest.', 0) return - core.questService.sendQuestWindow(actor, commandString) + core.questService.sendQuestWindow(actor, actor.getPlayerObject().getQuestJournal().get(0)) actor.sendSystemMessage(' \\#FE2EF7 [GM] \\#FFFFFF activateQuest: Command completed successfully.', 0) return diff --git a/scripts/commands/waypoint.py b/scripts/commands/waypoint.py index 3790fafa..e8ce6591 100644 --- a/scripts/commands/waypoint.py +++ b/scripts/commands/waypoint.py @@ -26,7 +26,7 @@ def run(core, actor, target, commandString): waypoint.setColor(colorCheck(commandArgs[4])) name = commandString.split(" ", 5) waypoint.setName(name[5]) - waypoint.setPlanetCRC(crc.StringtoCRC(planet.getName())) + waypoint.setPlanetCrc(crc.StringtoCRC(planet.getName())) waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) @@ -39,7 +39,7 @@ def run(core, actor, target, commandString): waypoint.setColor(WaypointObject.BLUE) name = commandString.split(" ", 3) waypoint.setName(name[3]) - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setPlanetCrc(crc.StringtoCRC(actor.getPlanet().getName())) waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) @@ -52,7 +52,7 @@ def run(core, actor, target, commandString): waypoint.setColor(WaypointObject.BLUE) name = commandString.split(" ", 2) waypoint.setName(name[2]) - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setPlanetCrc(crc.StringtoCRC(actor.getPlanet().getName())) waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) @@ -64,7 +64,7 @@ def run(core, actor, target, commandString): waypoint.setActive(True) waypoint.setColor(WaypointObject.BLUE) waypoint.setName("Waypoint") - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setPlanetCrc(crc.StringtoCRC(actor.getPlanet().getName())) waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) @@ -80,7 +80,7 @@ def run(core, actor, target, commandString): name = "Waypoint" waypoint.setName(name[4]) - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setPlanetCrc(crc.StringtoCRC(actor.getPlanet().getName())) waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) actor.sendSystemMessage('A waypoint has been created in your datapad at the location.', 0) @@ -95,7 +95,7 @@ def run(core, actor, target, commandString): waypoint.setName(actor.getPlanet().name.capitalize()) else: waypoint.setName(commandString) - waypoint.setPlanetCRC(crc.StringtoCRC(actor.getPlanet().getName())) + waypoint.setPlanetCrc(crc.StringtoCRC(actor.getPlanet().getName())) waypoint.setStringAttribute('', '') # This simply allows the attributes to display (nothing else has to be done) actorPlayer.waypointAdd(waypoint) actor.sendSystemMessage('A waypoint has been created in your datapad at your location.', 0) diff --git a/src/protocol/swg/CommPlayerMessage.java b/src/protocol/swg/CommPlayerMessage.java index 3d0675f1..c08c6132 100644 --- a/src/protocol/swg/CommPlayerMessage.java +++ b/src/protocol/swg/CommPlayerMessage.java @@ -41,6 +41,12 @@ public class CommPlayerMessage extends SWGMessage { this.outOfBand = outOfBand; } + public CommPlayerMessage(long objectId, OutOfBand outOfBand, String model) { + this.objectId = objectId; + this.outOfBand = outOfBand; + this.model = model; + } + @Override public void deserialize(IoBuffer data) { diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index 8214635c..ea24c4cf 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -599,9 +599,10 @@ public class PlayerObject extends IntangibleObject implements Serializable { return (int) getBaseline(8).get("activeQuest"); } - public void setActiveQuest(String quest) { - getBaseline(8).set("activeQuest", CRC.StringtoCRC("quest/"+quest)); + public void setActiveQuest(int questCRC) { + getBaseline(8).set("activeQuest", questCRC); } + public String getProfessionWheelPosition() { return (String) getBaseline(8).get("professionWheelPosition"); } diff --git a/src/resources/quest/Quest.java b/src/resources/quest/Quest.java index ca2a270f..f38764f5 100644 --- a/src/resources/quest/Quest.java +++ b/src/resources/quest/Quest.java @@ -37,18 +37,26 @@ public class Quest extends Delta implements Serializable { private short completedStep; private boolean isCompleted = false; private String name; - private int crc; + private String filePath; public Quest() {} public Quest(String name, long ownerId) { this.ownerId = ownerId; - this.name = name; - if (name.endsWith(".qst")) - this.crc = CRC.StringtoCRC("quest/"+name.split(".qst")[0]); - else - this.crc = CRC.StringtoCRC("quest/"+name); + if (name.endsWith(".qst")) { + this.filePath = "quest/"+name; + this.name = name.split(".qst")[0]; + } else { + this.filePath = "quest/"+name+".qst"; + this.name = name; + } + + if (name.contains("/")) { + String[] split = name.split("/"); + this.name = split[split.length - 1]; + } + } public long getOwnerId() { @@ -87,13 +95,16 @@ public class Quest extends Delta implements Serializable { return name; } - public void setName(String name) { - this.name = name; - this.crc = CRC.StringtoCRC(name); + public String getFilePath() { + return filePath; } public int getCrc() { - return crc; + return CRC.StringtoCRC(getCrcName()); + } + + public String getCrcName() { + return "quest/" + name; } public byte[] getBytes() { @@ -101,7 +112,7 @@ public class Quest extends Delta implements Serializable { buffer.put((byte) 0); - buffer.putInt(crc); + buffer.putInt(getCrc()); buffer.putLong(ownerId); diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 04f8fb97..2b3f02b5 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -151,8 +151,8 @@ public class LoginService implements INetworkDispatch{ client.setSessionKey(generateSessionKey()); client.setAccountId(id); client.setSession(session); - String accessLevel = core.adminService.getAccessLevelFromDB(id); - if (accessLevel != null && !accessLevel.equals("")) { client.setAccessLevel(accessLevel); } + //String accessLevel = core.adminService.getAccessLevelFromDB(id); + //if (accessLevel != null && !accessLevel.equals("")) { client.setAccessLevel(accessLevel); } core.addClient(session, client); diff --git a/src/services/command/CommandService.java b/src/services/command/CommandService.java index 20e19e6a..c3c622a8 100644 --- a/src/services/command/CommandService.java +++ b/src/services/command/CommandService.java @@ -689,9 +689,9 @@ public class CommandService implements INetworkDispatch { public void processCommand(CreatureObject actor, SWGObject target, BaseSWGCommand command, int actionCounter, String commandArgs) { if (command.getGodLevel() > 0 || command.getCommandName().equals("setgodmode")) { - String accessLevel = actor.getClient().getAccessLevel(); + String accessLevel = core.adminService.getAccessLevelFromDB(actor.getClient().getAccountId()); String filePath = "accesslevels/" + accessLevel + ".txt"; - + if(FileUtilities.doesFileExist(filePath)) { Scanner scanner; try { @@ -700,7 +700,7 @@ public class CommandService implements INetworkDispatch { while(scanner.hasNextLine()) { String commandName = scanner.nextLine(); - if(command.getCommandName().equals(commandName)) { + if(command.getCommandName().equalsIgnoreCase(commandName)) { levelHasCommand = true; break; } diff --git a/src/services/quest/QuestService.java b/src/services/quest/QuestService.java index 60461eae..243f1e54 100644 --- a/src/services/quest/QuestService.java +++ b/src/services/quest/QuestService.java @@ -21,9 +21,14 @@ ******************************************************************************/ package services.quest; +import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.nio.ByteOrder; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -37,6 +42,7 @@ import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; import org.xml.sax.SAXException; +import protocol.swg.CommPlayerMessage; import protocol.swg.ObjControllerMessage; import protocol.swg.PlayMusicMessage; import protocol.swg.objectControllerObjects.ForceActivateQuest; @@ -47,12 +53,16 @@ import resources.datatables.DisplayType; import resources.objects.SWGList; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; +import resources.objects.waypoint.WaypointObject; import resources.quest.Quest; import main.NGECore; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.common.CRC; import engine.resources.common.StringUtilities; import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -132,75 +142,181 @@ public class QuestService implements INetworkDispatch { Quest quest = new Quest(questName, creo.getObjectID()); - try { - if (!parseQuestData(questName)) - return false; - } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); } + File questXml = new File("clientdata/" + quest.getFilePath()); + if (!questXml.exists()) return false; - if (questName.endsWith(".qst")) - questName = questName.split(".qst")[0]; + QuestData questData = getQuestData(quest); - ProsePackage prose = new ProsePackage("@quest/ground/system_message:quest_received"); + if (questData == null) + return false; - // Format for stf string if quest resides in multiple folders beyond base one - if (questName.contains("/")) { - String[] split = questName.split("/"); - questName = split[split.length - 1]; - } + //ProsePackage prose = new ProsePackage("@quest/ground/system_message:quest_received"); + //prose.setToCustomString(questData.getTasks().get(0).getJournalEntryTitle()); - prose.setToCustomString("@quest/ground/" + questName + ":journal_entry_title"); - creo.sendSystemMessage(new OutOfBand(prose), DisplayType.Quest); + //creo.sendSystemMessage(new OutOfBand(prose), DisplayType.Quest); PlayMusicMessage music = new PlayMusicMessage("sound/ui_npe2_quest_received.snd", creo.getObjectID(), 0, true); creo.getClient().getSession().write(music.serialize()); - ghost.getQuestJournal().add(quest); - ghost.setActiveQuest(quest.getName()); + QuestTask activeTask = questData.getTasks().get(0); + + /*if (activeTask.createsWaypoint()) { + WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", core.terrainService.getPlanetByName(activeTask.getPlanet())); + Point3D position = new Point3D(activeTask.getLocationX(), activeTask.getLocationY(), activeTask.getLocationZ()); + waypoint.setPosition(position); + waypoint.setName(activeTask.getWaypointName()); + waypoint.setColor(WaypointObject.BLUE); + waypoint.setActive(true); + waypoint.setStringAttribute("", ""); + + ghost.getWaypoints().put(waypoint.getObjectID(), waypoint); + }*/ + + ghost.getQuestJournal().add(quest); + ghost.setActiveQuest(quest.getCrc()); + + beginNextQuestStep(creo, quest); return true; } - public void sendQuestWindow(CreatureObject reciever, String questName) { - if (questName.endsWith(".qst")) - questName = questName.split(".qst")[0]; - - if (!questName.startsWith("quest/")) - questName = "quest/" + questName; - - ObjControllerMessage objMsg = new ObjControllerMessage(11, new ForceActivateQuest(reciever.getObjectID(), CRC.StringtoCRC(questName))); + public void sendQuestWindow(CreatureObject reciever, Quest quest) { + + ObjControllerMessage objMsg = new ObjControllerMessage(11, new ForceActivateQuest(reciever.getObjectID(), CRC.StringtoCRC(quest.getCrcName()))); reciever.getClient().getSession().write(objMsg.serialize()); } - public QuestData getQuestData(String questFile) { - if (!questFile.endsWith(".qst")) - questFile = questFile + ".qst"; + public void beginNextQuestStep(CreatureObject quester, Quest quest) { + QuestData qData = getQuestData(quest); - if (questMap.containsKey(questFile)) - return questMap.get(questFile); + if (qData == null) + return; + + // TODO: Get QuestTask for the active step + QuestTask task = qData.getTasks().get(0); + + String[] splitType = task.getType().split("\\."); + String type = splitType[splitType.length - 1]; + + switch (type) { + + case "comm_player": + CommPlayerMessage message = new CommPlayerMessage(quester.getObjectID(), OutOfBand.ProsePackage(task.getCommMessageText()), task.getCommAppearanceTemplate()); + quester.getClient().getSession().write(message.serialize()); + break; + + default: + System.out.println("Don't know what to do for quest step: " + type); + break; + + } - else return null; } - private boolean parseQuestData(String questFile) throws ParserConfigurationException, SAXException, IOException { + public QuestData getQuestData(Quest quest) { - if (!questFile.endsWith(".qst")) - questFile = questFile + ".qst"; + if (questMap.containsKey(quest.getName())) + return questMap.get(quest.getName()); + else { + QuestData data = getQuestDatatable(quest); // parsing puts it in quest map + return data; + } + } + + private QuestData getQuestDatatable(Quest quest) { - if (questMap.containsKey(questFile)) return true; + QuestData data = new QuestData(quest.getFilePath()); - File questXml = new File("clientdata/quest/" + questFile); - if (!questXml.exists()) return false; + // visitor.getObjectByColumnNameAndIndex("JOURNAL_ENTRY_TITLE", r) + try { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/questtask/quest/" + quest.getName() + ".iff", DatatableVisitor.class); + + for (int r = 0; r < visitor.getRowCount(); r++) { + + // Each row is a new task. TODO: Complete + + QuestTask task = new QuestTask(); + + if (visitor.getObjectByColumnNameAndIndex("ATTACH_SCRIPT", r) != null) task.setType((String) visitor.getObjectByColumnNameAndIndex("ATTACH_SCRIPT", r)); + if (visitor.getObjectByColumnNameAndIndex("JOURNAL_ENTRY_TITLE", r) != null) task.setJournalEntryTitle((String) visitor.getObjectByColumnNameAndIndex("JOURNAL_ENTRY_TITLE", r)); + if (visitor.getObjectByColumnNameAndIndex("JOURNAL_ENTRY_DESCRIPTION", r) != null) task.setJournalEntryDescription((String) visitor.getObjectByColumnNameAndIndex("JOURNAL_ENTRY_DESCRIPTION", r)); + if (visitor.getObjectByColumnNameAndIndex("IS_VISIBLE", r) != null) task.setVisible((boolean) visitor.getObjectByColumnNameAndIndex("IS_VISIBLE", r)); + // PREREQUISTE_TASKS + // EXCLUSION_TASKS + if (visitor.getObjectByColumnNameAndIndex("ALLOW_REPEATS", r) != null) task.setAllowRepeats((boolean) visitor.getObjectByColumnNameAndIndex("ALLOW_REPEATS", r)); + if (visitor.getObjectByColumnNameAndIndex("TASKS_ON_COMPLETE", r) != null) task.setTasksOnComplete((String) visitor.getObjectByColumnNameAndIndex("TASKS_ON_COMPLETE", r)); + if (visitor.getObjectByColumnNameAndIndex("TASKS_ON_FAIL", r) != null) task.setTasksOnFail((String) visitor.getObjectByColumnNameAndIndex("TASKS_ON_FAIL", r)); + if (visitor.getObjectByColumnNameAndIndex("SHOW_SYSTEM_MESSAGES", r) != null) task.setShowSystemMessages((boolean) visitor.getObjectByColumnNameAndIndex("SHOW_SYSTEM_MESSAGES", r)); + if (visitor.getObjectByColumnNameAndIndex("MUSIC_ON_ACTIVATE", r) != null) task.setMusicOnActivate((String) visitor.getObjectByColumnNameAndIndex("MUSIC_ON_ACTIVATE", r)); + if (visitor.getObjectByColumnNameAndIndex("TARGET", r) != null) task.setTarget((String) visitor.getObjectByColumnNameAndIndex("TARGET", r)); + if (visitor.getObjectByColumnNameAndIndex("PARAMETER", r) != null) task.setParameter((String) visitor.getObjectByColumnNameAndIndex("PARAMETER", r)); + if (visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_COMPLETE", r) != null) task.setGrantQuestOnComplete((String) visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_COMPLETE", r)); + if (visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_FAIL", r) != null) task.setGrantQuestOnFail((String) visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_FAIL", r)); + if (visitor.getObjectByColumnNameAndIndex("TASK_NAME", r) != null) task.setName((String) visitor.getObjectByColumnNameAndIndex("TASK_NAME", r)); + if (visitor.getObjectByColumnNameAndIndex("MUSIC_ON_COMPLETE", r) != null) task.setMusicOnComplete((String) visitor.getObjectByColumnNameAndIndex("MUSIC_ON_COMPLETE", r)); + if (visitor.getObjectByColumnNameAndIndex("MUSIC_ON_FAILURE", r) != null) task.setMusicOnFail((String) visitor.getObjectByColumnNameAndIndex("MUSIC_ON_FAILURE", r)); + if (visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_FAIL_SHOW_SYSTEM_MESSAGE", r) != null) task.setGrantQuestOnFailShowSystemMessage((boolean) visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_FAIL_SHOW_SYSTEM_MESSAGE", r)); + if (visitor.getObjectByColumnNameAndIndex("CREATE_WAYPOINT", r) != null) task.setCreatesWaypoint((boolean) visitor.getObjectByColumnNameAndIndex("CREATE_WAYPOINT", r)); + if (visitor.getObjectByColumnNameAndIndex("PLANET_NAME", r) != null) task.setPlanet((String) visitor.getObjectByColumnNameAndIndex("PLANET_NAME", r)); + if (visitor.getObjectByColumnNameAndIndex("LOCATION_X", r) != null) task.setLocationX(Float.parseFloat((String) visitor.getObjectByColumnNameAndIndex("LOCATION_X", r))); + if (visitor.getObjectByColumnNameAndIndex("LOCATION_Y", r) != null) task.setLocationY(Float.parseFloat((String) visitor.getObjectByColumnNameAndIndex("LOCATION_Y", r))); + if (visitor.getObjectByColumnNameAndIndex("LOCATION_Z", r) != null) task.setLocationZ(Float.parseFloat((String) visitor.getObjectByColumnNameAndIndex("LOCATION_Z", r))); + if (visitor.getObjectByColumnNameAndIndex("WAYPOINT_NAME", r) != null) task.setWaypointName((String) visitor.getObjectByColumnNameAndIndex("WAYPOINT_NAME", r)); + if (visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_COMPLETE_SHOW_SYSTEM_MESSAGE", r) != null) task.setGrantQuestOnCompleteShowSystemMessage((boolean) visitor.getObjectByColumnNameAndIndex("GRANT_QUEST_ON_COMPLETE_SHOW_SYSTEM_MESSAGE", r)); + if (visitor.getObjectByColumnNameAndIndex("SIGNALS_ON_COMPLETE", r) != null) task.setSignalsOnComplete((String) visitor.getObjectByColumnNameAndIndex("SIGNALS_ON_COMPLETE", r)); + if (visitor.getObjectByColumnNameAndIndex("INTERIOR_WAYPOINT_APPERANCE", r) != null) task.setInteriorWaypointAppearance((String) visitor.getObjectByColumnNameAndIndex("INTERIOR_WAYPOINT_APPERANCE", r)); + if (visitor.getObjectByColumnNameAndIndex("SIGNALS_ON_FAIL", r) != null) task.setSignalsOnFail((String) visitor.getObjectByColumnNameAndIndex("SIGNALS_ON_FAIL", r)); + if (visitor.getObjectByColumnNameAndIndex("COMM_MESSAGE_TEXT", r) != null) task.setCommMessageText((String) visitor.getObjectByColumnNameAndIndex("COMM_MESSAGE_TEXT", r)); + if (visitor.getObjectByColumnNameAndIndex("NPC_APPEARANCE_SERVER_TEMPLATE", r) != null) task.setCommAppearanceTemplate(convertToSharedFile((String) visitor.getObjectByColumnNameAndIndex("NPC_APPEARANCE_SERVER_TEMPLATE", r))); + if (visitor.getObjectByColumnNameAndIndex("SERVER_TEMPLATE", r) != null) task.setServerTemplate(convertToSharedFile((String) visitor.getObjectByColumnNameAndIndex("SERVER_TEMPLATE", r))); + if (visitor.getObjectByColumnNameAndIndex("NUM_REQUIRED", r) != null) task.setNumRequired((int) visitor.getObjectByColumnNameAndIndex("NUM_REQUIRED", r)); + if (visitor.getObjectByColumnNameAndIndex("ITEM_NAME", r) != null) task.setItemName((String) visitor.getObjectByColumnNameAndIndex("ITEM_NAME", r)); + if (visitor.getObjectByColumnNameAndIndex("DROP_PERCENT", r) != null) task.setDropPercent((int) visitor.getObjectByColumnNameAndIndex("DROP_PERCENT", r)); + + data.getTasks().add(task); + } + + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + questMap.put(quest.getName(), data); + return data; + } + + // useful for custom quest scripts, and for the some of the datatables that are all screwed up + private QuestData parseXmlQuestData(Quest quest) { + try { + + if (questMap.containsKey(quest.getName())) return null; + + String filePath = quest.getFilePath(); + + File questXml = new File("clientdata/" + filePath); + if (!questXml.exists()) return null; + SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); - QuestData dataObj = new QuestData(questFile); + QuestData dataObj = new QuestData(filePath); SWGQuestDataHandler questHandler = new SWGQuestDataHandler(dataObj); parser.parse(questXml, questHandler); - questMap.put(questFile, dataObj); + questMap.put(quest.getName(), dataObj); - System.out.println("Loaded quest file " + questFile); - return true; + //System.out.println("Loaded quest file " + filePath); + + return dataObj; + + } catch(SAXException | ParserConfigurationException | IOException e) { } + + return null; + } + + private String convertToSharedFile(String template) { + String[] split = template.split("/"); + String file = split[split.length - 1]; + + return template.replace(file, "shared_" + file); } } diff --git a/src/services/quest/QuestTask.java b/src/services/quest/QuestTask.java index 6d885fee..1f77bb4f 100644 --- a/src/services/quest/QuestTask.java +++ b/src/services/quest/QuestTask.java @@ -27,10 +27,8 @@ public class QuestTask { private String journalEntryTitle; private String journalEntryDescription; private String planet; - // private String prerequisiteTasks; // TODO: Figure out format for multiple - // pre-req tasks - // private String exclusionTasks; // TODO: Figure out format for multiple - // exclusion tasks + // private String prerequisiteTasks; + // private String exclusionTasks; private String musicOnActivate; private String musicOnComplete; private String musicOnFail; @@ -47,18 +45,25 @@ public class QuestTask { private String waitMarkerTemplate; private String waitMarkerPlanetName; private String waitMarkerCellName; + private String commMessageText; + private String commAppearanceTemplate; // NPC Appearance Server Template + private String tasksOnComplete; + private String serverTemplate; + private String itemName; + private String tasksOnFail; - private boolean taskOnFail; private boolean visible; private boolean grantQuestOnCompleteShowSystemMessage; private boolean grantQuestOnFailShowSystemMessage; private boolean allowRepeats; + private boolean createsWaypoint; + private boolean showSystemMessages; private int id; - private int showSystemMessages; // TODO: Possibly change to boolean - private int createWaypoint; private int waitMarkerCreate; private int timeToComplete; + private int numRequired; + private int dropPercent; private long waitMarkerBuilding; @@ -71,10 +76,9 @@ public class QuestTask { public QuestTask() {} - public QuestTask(String type, int id, boolean taskOnFail) { + public QuestTask(String type, int id) { this.type = type; this.id = id; - this.taskOnFail = taskOnFail; } public String getType() { @@ -97,8 +101,8 @@ public class QuestTask { this.journalEntryDescription = journalEntryDescription; } - public boolean isTaskOnFail() { - return taskOnFail; + public String getTasksOnFail() { + return tasksOnFail; } public int getId() { @@ -249,6 +253,22 @@ public class QuestTask { this.waitMarkerCellName = waitMarkerCellName; } + public String getCommMessageText() { + return commMessageText; + } + + public void setCommMessageText(String commMessageText) { + this.commMessageText = commMessageText; + } + + public String getCommAppearanceTemplate() { + return commAppearanceTemplate; + } + + public void setCommAppearanceTemplate(String commAppearanceTemplate) { + this.commAppearanceTemplate = commAppearanceTemplate; + } + public boolean isVisible() { return visible; } @@ -283,20 +303,20 @@ public class QuestTask { this.allowRepeats = allowRepeats; } - public int getShowSystemMessages() { + public boolean showSystemMessages() { return showSystemMessages; } - public void setShowSystemMessages(int showSystemMessages) { + public void setShowSystemMessages(boolean showSystemMessages) { this.showSystemMessages = showSystemMessages; } - public int getCreateWaypoint() { - return createWaypoint; + public boolean createsWaypoint() { + return createsWaypoint; } - public void setCreateWaypoint(int createWaypoint) { - this.createWaypoint = createWaypoint; + public void setCreatesWaypoint(boolean createWaypoint) { + this.createsWaypoint = createWaypoint; } public int getWaitMarkerCreate() { @@ -370,4 +390,56 @@ public class QuestTask { public void setWaitMarkerZ(float waitMarkerZ) { this.waitMarkerZ = waitMarkerZ; } + + public void setType(String type) { + this.type = type; + } + + public void setTasksOnFail(String tasksOnFail) { + this.tasksOnFail = tasksOnFail; + } + + public void setId(int id) { + this.id = id; + } + + public String getTasksOnComplete() { + return tasksOnComplete; + } + + public void setTasksOnComplete(String tasksOnComplete) { + this.tasksOnComplete = tasksOnComplete; + } + + public String getServerTemplate() { + return serverTemplate; + } + + public void setServerTemplate(String serverTemplate) { + this.serverTemplate = serverTemplate; + } + + public int getNumRequired() { + return numRequired; + } + + public void setNumRequired(int numRequired) { + this.numRequired = numRequired; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public int getDropPercent() { + return dropPercent; + } + + public void setDropPercent(int dropPercent) { + this.dropPercent = dropPercent; + } } diff --git a/src/services/quest/SWGQuestDataHandler.java b/src/services/quest/SWGQuestDataHandler.java index 46d5447b..c2ea3d3f 100644 --- a/src/services/quest/SWGQuestDataHandler.java +++ b/src/services/quest/SWGQuestDataHandler.java @@ -49,7 +49,7 @@ public class SWGQuestDataHandler extends DefaultHandler { break; case "task": - dataObj.getTasks().add(new QuestTask(attributes.getValue("type"), Integer.parseInt(attributes.getValue("id")), Boolean.parseBoolean(attributes.getValue("taskOnFail")))); + dataObj.getTasks().add(new QuestTask(attributes.getValue("type"), Integer.parseInt(attributes.getValue("id")))); break; case "data": @@ -103,7 +103,7 @@ public class SWGQuestDataHandler extends DefaultHandler { break; case "showSystemMessages": - task.setShowSystemMessages(Integer.parseInt(attributes.getValue("value"))); + task.setShowSystemMessages(Boolean.parseBoolean(attributes.getValue("value"))); break; case "grantQuestOnComplete": @@ -123,7 +123,7 @@ public class SWGQuestDataHandler extends DefaultHandler { break; case "createWaypoint": - task.setCreateWaypoint(Integer.parseInt(attributes.getValue("value"))); + task.setCreatesWaypoint(Boolean.parseBoolean(attributes.getValue("value"))); break; case "Planet": @@ -166,6 +166,14 @@ public class SWGQuestDataHandler extends DefaultHandler { task.setSignalsOnComplete(attributes.getValue("value")); break; + case "Comm Message Text": + task.setCommMessageText(attributes.getValue("value")); + break; + + case "NPC Appearance Server Template": + task.setCommAppearanceTemplate(attributes.getValue("value")); + break; + default: break; }