diff --git a/Server/src/main/core/game/node/entity/combat/graves/GraveController.kt b/Server/src/main/core/game/node/entity/combat/graves/GraveController.kt index 9cc61aef2..78fb837bf 100644 --- a/Server/src/main/core/game/node/entity/combat/graves/GraveController.kt +++ b/Server/src/main/core/game/node/entity/combat/graves/GraveController.kt @@ -244,6 +244,7 @@ class GraveController : PersistWorld, TickListener, InteractionListener, Command fun serializeToServerStore() { val archive = ServerStore.getArchive("active-graves") + archive.clear() for ((uid,grave) in activeGraves) { val g = JSONObject() g["ticksRemaining"] = grave.ticksRemaining diff --git a/Server/src/test/kotlin/content/DeathTests.kt b/Server/src/test/kotlin/content/DeathTests.kt index 58299514e..e91c121c7 100644 --- a/Server/src/test/kotlin/content/DeathTests.kt +++ b/Server/src/test/kotlin/content/DeathTests.kt @@ -153,6 +153,38 @@ class DeathTests { Assertions.assertEquals(true, newGrave?.isActive) } + @Test fun graveDeserializedFromServerStoreShouldNaturallyExpire() { + TestUtils.getMockPlayer("graveExpirationFromDeserializationTest").use {p -> + val inventory = arrayOf( + Items.BRONZE_2H_SWORD_1307.asItem(), + Items.BRONZE_AXE_1351.asItem() + ) + val startTime = GameWorld.ticks + val grave = GraveController.produceGrave(GraveType.MEM_PLAQUE) + grave.initialize(p, Location.create(0,0,0), inventory) + val expectedTicksRemaining = secondsToTicks(GraveType.MEM_PLAQUE.durationMinutes * 60) - (GameWorld.ticks - startTime) + Assertions.assertEquals(expectedTicksRemaining, grave.ticksRemaining) + + GraveController.serializeToServerStore() + GraveController.activeGraves.remove(p.details.uid) + GraveController.deserializeFromServerStore() + + var newGrave = GraveController.activeGraves[p.details.uid] + Assertions.assertNotNull(newGrave) + Assertions.assertEquals(expectedTicksRemaining, newGrave?.ticksRemaining ?: -1) + Assertions.assertEquals(2, newGrave?.getItems()?.size ?: -1) + + TestUtils.advanceTicks(expectedTicksRemaining + 1, false) + Assertions.assertEquals(null, GraveController.activeGraves[p.details.uid]) + + GraveController.serializeToServerStore() + GraveController.deserializeFromServerStore() + + newGrave = GraveController.activeGraves[p.details.uid] + Assertions.assertNull(newGrave) + } + } + @Test fun regularDeathShouldSpawnGraveWithItems() { val inventory = arrayOf( Items.RUNE_SCIMITAR_1333.asItem(),