Added support for quest.task.ground.clear_quest task type, so that a wider selection of quests can be added to the game

This commit is contained in:
Ziggy
2024-01-23 15:53:53 +01:00
parent 178355cc97
commit 8a6f0c827b
2 changed files with 30 additions and 2 deletions
@@ -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)
@@ -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