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 aacc786bf..1c9a98575 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 @@ -126,8 +126,7 @@ class QuestService(private val destroyMultiAndLootDie: Die = RandomDie(), privat StandardLog.onPlayerTrace(this, player, "attempted to abandon quest %s which they have completed", questName) return } - playerObject.removeQuest(questName) - retrievedItemRepository.clearPreviousAttempts(questName, playerObject) + removeQuest(playerObject, questName) StandardLog.onPlayerTrace(this, player, "abandoned quest %s", questName) } @@ -415,9 +414,16 @@ class QuestService(private val destroyMultiAndLootDie: Die = RandomDie(), privat "quest.task.ground.nothing" -> handleNothing(player, questName, currentTask) "quest.task.ground.go_to_location" -> handleGoToLocation(player, currentTask) "quest.task.ground.retrieve_item" -> handleRetrieveItem(player, questName, currentTask) + "quest.task.ground.clear_quest" -> handleClearQuest(player, questName) } } + private fun handleClearQuest(player: Player, questName: String) { + val playerObject = player.getPlayerObject() + removeQuest(playerObject, questName) + StandardLog.onPlayerTrace(this, player, "cleared quest %s", questName) + } + private fun handleRetrieveItem(player: Player, questName: String, currentTask: QuestTaskInfo) { val task = currentTask.index val max = currentTask.numRequired @@ -435,6 +441,11 @@ class QuestService(private val destroyMultiAndLootDie: Die = RandomDie(), privat } } + private fun removeQuest(playerObject: PlayerObject, questName: String) { + playerObject.removeQuest(questName) + retrievedItemRepository.clearPreviousAttempts(questName, playerObject) + } + private fun createQuestWaypoint(currentTask: QuestTaskInfo, player: Player) { val waypoint = ObjectCreator.createObjectFromTemplate("object/waypoint/shared_waypoint.iff") as WaypointObject waypoint.setPosition(Terrain.getTerrainFromName(currentTask.planetName), currentTask.locationX, currentTask.locationY, currentTask.locationZ) diff --git a/src/test/java/com/projectswg/holocore/services/gameplay/player/quest/QuestTaskTypeTest.kt b/src/test/java/com/projectswg/holocore/services/gameplay/player/quest/QuestTaskTypeTest.kt index 271573628..c8125f88a 100644 --- a/src/test/java/com/projectswg/holocore/services/gameplay/player/quest/QuestTaskTypeTest.kt +++ b/src/test/java/com/projectswg/holocore/services/gameplay/player/quest/QuestTaskTypeTest.kt @@ -226,6 +226,23 @@ class QuestTaskTypeTest : TestRunnerSynchronousIntents() { assertNotNull(questCompletedMessage, "Quest not completed in time") } + @Test + @DisplayName("quest.task.ground.clear_quest") + fun clearQuest() { + val player = createPlayer() + + GrantQuestIntent.broadcast(player, "quest/c_newbie_quest6") + val desiredLocation = LocationBuilder() + .setTerrain(Terrain.TATOOINE) + .setX(3429.0) + .setY(0.0) + .setZ(-4730.0) + .build() + player.creatureObject.moveToLocation(desiredLocation) + + assertFalse(player.playerObject.isQuestInJournal("quest/c_newbie_quest6"), "Quest should have been cleared") + } + private class CharacterSnapshot(private val player: GenericPlayer) { // Helper class to snapshot a character's state val xp = player.playerObject.getExperiencePoints("dance") val rebelFactionPoints = player.playerObject.getFactionPoints()["rebel"] ?: 0