diff --git a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/QuestLoader.kt b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/QuestLoader.kt
index eefb3f565..7a5593297 100644
--- a/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/QuestLoader.kt
+++ b/src/main/java/com/projectswg/holocore/resources/support/data/server_info/loader/QuestLoader.kt
@@ -93,6 +93,7 @@ class QuestLoader : DataLoader() {
class QuestListInfo(set: SdbResultSet) {
val journalEntryTitle: String = set.getText("journal_entry_title")
val journalEntryDescription: String = set.getText("journal_entry_description")
+ val category: String = set.getText("category")
val isCompleteWhenTasksComplete: Boolean = set.getBoolean("complete_when_tasks_complete")
val isRepeatable: Boolean = set.getBoolean("allow_repeats")
}
diff --git a/src/main/java/com/projectswg/holocore/services/gameplay/player/quest/QuestService.kt b/src/main/java/com/projectswg/holocore/services/gameplay/player/quest/QuestService.kt
index 9e0f93abd..fa0f51ff5 100644
--- a/src/main/java/com/projectswg/holocore/services/gameplay/player/quest/QuestService.kt
+++ b/src/main/java/com/projectswg/holocore/services/gameplay/player/quest/QuestService.kt
@@ -112,7 +112,7 @@ class QuestService(private val destroyMultiAndLootDie: Die = RandomDie(), privat
retrievedItemRepository.clearPreviousAttempts(questName, playerObject) // In case this quest is being repeated
playerObject.addQuest(questName)
StandardLog.onPlayerTrace(this, player, "received quest %s", questName)
- val prose = ProsePackage(StringId("quest/ground/system_message", "quest_received"), "TO", questListInfo.journalEntryTitle)
+ val prose = ProsePackage(StringId("quest/ground/system_message", "quest_received"), "TT", questListInfo.category, "TO", questListInfo.journalEntryTitle)
SystemMessageIntent.broadcastPersonal(player, prose, ChatSystemMessage.SystemChatType.QUEST)
activateTask(player, questName, questLoader.getTaskListInfos(questName)[0])
}
diff --git a/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/TestQuestLoader.java b/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/TestQuestLoader.java
deleted file mode 100644
index 9eb0ad4bc..000000000
--- a/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/TestQuestLoader.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/***********************************************************************************
- * Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
- * *
- * ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
- * July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
- * Our goal is to create an emulator which will provide a server for players to *
- * continue playing a game similar to the one they used to play. We are basing *
- * it on the final publish of the game prior to end-game events. *
- * *
- * This file is part of Holocore. *
- * *
- * --------------------------------------------------------------------------------*
- * *
- * Holocore is free software: you can redistribute it and/or modify *
- * it under the terms of the GNU Affero General Public License as *
- * published by the Free Software Foundation, either version 3 of the *
- * License, or (at your option) any later version. *
- * *
- * Holocore is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU Affero General Public License for more details. *
- * *
- * You should have received a copy of the GNU Affero General Public License *
- * along with Holocore. If not, see . *
- ***********************************************************************************/
-package com.projectswg.holocore.resources.support.data.server_info.loader;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-public class TestQuestLoader {
-
- @Nested
- public class TestQuestInfo {
-
- private static QuestLoader.QuestListInfo questInfo;
-
- @BeforeEach
- public void setup() throws IOException {
- questInfo = ServerData.INSTANCE.getQuestLoader().getQuestListInfo("quest/c_newbie_quest4");
- }
-
- @Test
- public void canLoadQuestListInfo() {
- assertNotNull(questInfo);
- }
-
- @Test
- public void canLoadJournalEntryTitle() {
- assertEquals("@quest/ground/c_newbie_quest4:journal_entry_title", questInfo.getJournalEntryTitle());
- }
-
- @Test
- public void canLoadJournalEntryDescription() {
- assertEquals("@quest/ground/c_newbie_quest4:journal_entry_description", questInfo.getJournalEntryDescription());
- }
-
- @Test
- public void canloadCompleteWhenTasksCompleteFlag() {
- assertTrue(questInfo.isCompleteWhenTasksComplete());
- }
-
- @Test
- public void canLoadRepeatableFlag() {
- assertTrue(questInfo.isRepeatable());
- }
-
- }
-
- @Nested
- public class TestQuestTask {
-
- private static List taskListInfos;
-
- @BeforeEach
- public void setup() throws IOException {
- taskListInfos = ServerData.INSTANCE.getQuestLoader().getTaskListInfos("quest/c_syren5");
- }
-
- @Test
- public void canLoadRightAmountOfTasks() {
- assertEquals(8, taskListInfos.size());
- }
-
- @Test
- public void canLoadMinTime() {
- assertEquals(0, taskListInfos.get(5).getMinTime());
- }
-
- @Test
- public void canLoadMaxTime() {
- assertEquals(0, taskListInfos.get(5).getMaxTime());
- }
-
- @Test
- public void canLoadIndex() {
- assertEquals(5, taskListInfos.get(5).getIndex());
- }
-
- @Test
- public void canLoadType() {
- assertEquals("quest.task.ground.destroy_multi_and_loot", taskListInfos.get(1).getType());
- }
-
- @Test
- public void canLoadName() {
- assertEquals("encounterWithCalHandro", taskListInfos.get(3).getName());
- }
-
- @Test
- public void canLoadTargetServerTemplate() {
- List taskListInfos = ServerData.INSTANCE.getQuestLoader().getTaskListInfos("quest/yavin_fallenstar_pt_2");
- assertEquals("imperial_major", taskListInfos.get(1).getTargetServerTemplate());
- }
-
- @Test
- public void canLoadMessageBoxTitle() {
- List taskListInfos = ServerData.INSTANCE.getQuestLoader().getTaskListInfos("quest/c_newbie_start");
- assertEquals("@quest/ground/c_newbie_start:task00_message_box_title", taskListInfos.getFirst().getMessageBoxTitle());
- }
-
- @Test
- public void canLoadMessageBoxText() {
- List taskListInfos = ServerData.INSTANCE.getQuestLoader().getTaskListInfos("quest/c_newbie_start");
- assertEquals("@quest/ground/c_newbie_start:task00_message_box_text", taskListInfos.getFirst().getMessageBoxText());
- }
-
- @Test
- public void canLoadNpcAppearanceServerTemplate() {
- assertEquals("object/mobile/boba_fett.iff", taskListInfos.get(5).getNpcAppearanceServerTemplate());
- }
-
- @Test
- public void canLoadCommMessageText() {
- assertEquals("@quest/ground/c_syren5:task05_comm_message_text", taskListInfos.get(5).getCommMessageText());
- }
-
- @Test
- public void canLoadCount() {
- assertEquals(1, taskListInfos.get(4).getCount());
- }
-
- @Test
- public void canLoadNextTasksOnCompleteMultipleTasks() {
- Collection nextTasksOnComplete = taskListInfos.get(3).getNextTasksOnComplete();
- Collection expected = List.of(4, 5, 6);
-
- assertIterableEquals(expected, nextTasksOnComplete);
- }
-
- @Test
- public void canLoadNextTasksOnCompleteSingleTask() {
- Collection nextTasksOnComplete = taskListInfos.get(1).getNextTasksOnComplete();
- Collection expected = List.of(2);
-
- assertIterableEquals(expected, nextTasksOnComplete);
- }
-
- @Test
- public void canLoadNextTasksOnCompleteEmpty() {
- Collection nextTasksOnComplete = taskListInfos.get(6).getNextTasksOnComplete();
- Collection expected = List.of();
-
- assertIterableEquals(expected, nextTasksOnComplete);
- }
- }
-}
diff --git a/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/TestQuestLoader.kt b/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/TestQuestLoader.kt
new file mode 100644
index 000000000..06b67bb30
--- /dev/null
+++ b/src/test/java/com/projectswg/holocore/resources/support/data/server_info/loader/TestQuestLoader.kt
@@ -0,0 +1,158 @@
+/***********************************************************************************
+ * Copyright (c) 2024 /// Project SWG /// www.projectswg.com *
+ * *
+ * ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
+ * July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
+ * Our goal is to create an emulator which will provide a server for players to *
+ * continue playing a game similar to the one they used to play. We are basing *
+ * it on the final publish of the game prior to end-game events. *
+ * *
+ * This file is part of Holocore. *
+ * *
+ * --------------------------------------------------------------------------------*
+ * *
+ * Holocore is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU Affero General Public License as *
+ * published by the Free Software Foundation, either version 3 of the *
+ * License, or (at your option) any later version. *
+ * *
+ * Holocore is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU Affero General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Affero General Public License *
+ * along with Holocore. If not, see . *
+ ***********************************************************************************/
+package com.projectswg.holocore.resources.support.data.server_info.loader
+
+import com.projectswg.holocore.resources.support.data.server_info.loader.ServerData.questLoader
+import org.junit.jupiter.api.Assertions.*
+import org.junit.jupiter.api.Nested
+import org.junit.jupiter.api.Test
+
+class TestQuestLoader {
+ @Nested
+ inner class TestQuestListInfo {
+
+ private val questListInfo = questLoader.getQuestListInfo("quest/c_newbie_quest4") ?: throw IllegalStateException("Quest info not found")
+
+ @Test
+ fun canLoadJournalEntryTitle() {
+ assertEquals("@quest/ground/c_newbie_quest4:journal_entry_title", questListInfo.journalEntryTitle)
+ }
+
+ @Test
+ fun canLoadJournalEntryDescription() {
+ assertEquals("@quest/ground/c_newbie_quest4:journal_entry_description", questListInfo.journalEntryDescription)
+ }
+
+ @Test
+ fun canLoadCategory() {
+ assertEquals("@quest/ground/c_newbie_quest4:category", questListInfo.category)
+ }
+
+ @Test
+ fun canloadCompleteWhenTasksCompleteFlag() {
+ assertTrue(questListInfo.isCompleteWhenTasksComplete)
+ }
+
+ @Test
+ fun canLoadRepeatableFlag() {
+ assertTrue(questListInfo.isRepeatable)
+ }
+ }
+
+ @Nested
+ inner class TestQuestTaskInfo {
+
+ private val taskListInfos = questLoader.getTaskListInfos("quest/c_syren5")
+
+ @Test
+ fun canLoadRightAmountOfTasks() {
+ assertEquals(8, taskListInfos.size)
+ }
+
+ @Test
+ fun canLoadMinTime() {
+ assertEquals(0, taskListInfos[5].minTime)
+ }
+
+ @Test
+ fun canLoadMaxTime() {
+ assertEquals(0, taskListInfos[5].maxTime)
+ }
+
+ @Test
+ fun canLoadIndex() {
+ assertEquals(5, taskListInfos[5].index)
+ }
+
+ @Test
+ fun canLoadType() {
+ assertEquals("quest.task.ground.destroy_multi_and_loot", taskListInfos[1].type)
+ }
+
+ @Test
+ fun canLoadName() {
+ assertEquals("encounterWithCalHandro", taskListInfos[3].name)
+ }
+
+ @Test
+ fun canLoadTargetServerTemplate() {
+ val taskListInfos = questLoader.getTaskListInfos("quest/yavin_fallenstar_pt_2")
+ assertEquals("imperial_major", taskListInfos[1].targetServerTemplate)
+ }
+
+ @Test
+ fun canLoadMessageBoxTitle() {
+ val taskListInfos = questLoader.getTaskListInfos("quest/c_newbie_start")
+ assertEquals("@quest/ground/c_newbie_start:task00_message_box_title", taskListInfos.first().messageBoxTitle)
+ }
+
+ @Test
+ fun canLoadMessageBoxText() {
+ val taskListInfos = questLoader.getTaskListInfos("quest/c_newbie_start")
+ assertEquals("@quest/ground/c_newbie_start:task00_message_box_text", taskListInfos.first().messageBoxText)
+ }
+
+ @Test
+ fun canLoadNpcAppearanceServerTemplate() {
+ assertEquals("object/mobile/boba_fett.iff", taskListInfos[5].npcAppearanceServerTemplate)
+ }
+
+ @Test
+ fun canLoadCommMessageText() {
+ assertEquals("@quest/ground/c_syren5:task05_comm_message_text", taskListInfos[5].commMessageText)
+ }
+
+ @Test
+ fun canLoadCount() {
+ assertEquals(1, taskListInfos[4].count)
+ }
+
+ @Test
+ fun canLoadNextTasksOnCompleteMultipleTasks() {
+ val nextTasksOnComplete = taskListInfos[3].nextTasksOnComplete
+ val expected = listOf(4, 5, 6)
+
+ assertIterableEquals(expected, nextTasksOnComplete)
+ }
+
+ @Test
+ fun canLoadNextTasksOnCompleteSingleTask() {
+ val nextTasksOnComplete = taskListInfos[1].nextTasksOnComplete
+ val expected = listOf(2)
+
+ assertIterableEquals(expected, nextTasksOnComplete)
+ }
+
+ @Test
+ fun canLoadNextTasksOnCompleteEmpty() {
+ val nextTasksOnComplete = taskListInfos[6].nextTasksOnComplete
+ val expected = emptyList()
+
+ assertIterableEquals(expected, nextTasksOnComplete)
+ }
+ }
+}