From 35fa9840e6d5502cb0215bcaf6894a8b5e2ab354 Mon Sep 17 00:00:00 2001 From: Mads Boddum Date: Sat, 22 Oct 2016 18:35:31 +0200 Subject: [PATCH] Fixed an issue where resuscitation timers weren't being cancelled properly --- src/services/combat/CorpseService.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/services/combat/CorpseService.java b/src/services/combat/CorpseService.java index 546adc1e4..040d661b9 100644 --- a/src/services/combat/CorpseService.java +++ b/src/services/combat/CorpseService.java @@ -238,14 +238,17 @@ public final class CorpseService extends Service { private void scheduleCloneTimer(CreatureObject corpse) { Terrain corpseTerrain = corpse.getTerrain(); List availableFacilities = getAvailableFacilities(corpse); - - if (!availableFacilities.isEmpty()) { - SuiWindow cloningWindow = createSuiWindow(availableFacilities, corpse); - - cloningWindow.display(corpse.getOwner()); - executor.schedule(() -> expireCloneTimer(corpse, availableFacilities, cloningWindow), CLONE_TIMER, TimeUnit.MINUTES); - } else { + + if (availableFacilities.isEmpty()) { Log.e(this, "No cloning facility is available for terrain %s - %s has nowhere to properly clone", corpseTerrain, corpse); + return; + } + + SuiWindow cloningWindow = createSuiWindow(availableFacilities, corpse); + + cloningWindow.display(corpse.getOwner()); + synchronized (reviveTimers) { + reviveTimers.put(corpse, executor.schedule(() -> expireCloneTimer(corpse, availableFacilities, cloningWindow), CLONE_TIMER, TimeUnit.MINUTES)); } }