diff --git a/src/intents/combat/CreatureKilledIntent.java b/src/intents/combat/CreatureKilledIntent.java index 9db56032..dd830d40 100644 --- a/src/intents/combat/CreatureKilledIntent.java +++ b/src/intents/combat/CreatureKilledIntent.java @@ -34,21 +34,21 @@ public class CreatureKilledIntent extends Intent { public static final String TYPE = "CreatureKilledIntent"; - private final CreatureObject killerCreature; - private final CreatureObject killedCreature; + private final CreatureObject killer; + private final CreatureObject corpse; - public CreatureKilledIntent(CreatureObject killerCreature, CreatureObject killedCreature) { + public CreatureKilledIntent(CreatureObject killer, CreatureObject corpse) { super(TYPE); - this.killerCreature = killerCreature; - this.killedCreature = killedCreature; + this.killer = killer; + this.corpse = corpse; } - public CreatureObject getKillerCreature() { - return killerCreature; + public CreatureObject getKiller() { + return killer; } - public CreatureObject getKilledCreature() { - return killedCreature; + public CreatureObject getCorpse() { + return corpse; } - + } diff --git a/src/intents/combat/DeathblowIntent.java b/src/intents/combat/DeathblowIntent.java index b8e31753..67eb4d14 100644 --- a/src/intents/combat/DeathblowIntent.java +++ b/src/intents/combat/DeathblowIntent.java @@ -34,25 +34,25 @@ public class DeathblowIntent extends Intent { public static final String TYPE = "DeathblowIntent"; - private final CreatureObject killerCreature; - private final CreatureObject killedCreature; + private final CreatureObject killer; + private final CreatureObject corpse; /** - * @param killerCreature {@code CreatureObject} that's deathblowing - * @param killedCreature {@code CreatureObject} that's being deathblown + * @param killer {@code CreatureObject} that's deathblowing + * @param corpse {@code CreatureObject} that's being deathblown */ - public DeathblowIntent(CreatureObject killerCreature, CreatureObject killedCreature) { + public DeathblowIntent(CreatureObject killer, CreatureObject corpse) { super(TYPE); - this.killerCreature = killerCreature; - this.killedCreature = killedCreature; + this.killer = killer; + this.corpse = corpse; } - public CreatureObject getKillerCreature() { - return killerCreature; + public CreatureObject getKiller() { + return killer; } - public CreatureObject getKilledCreature() { - return killedCreature; + public CreatureObject getCorpse() { + return corpse; } } diff --git a/src/services/combat/CombatManager.java b/src/services/combat/CombatManager.java index 8d5629b0..9f9a94d3 100644 --- a/src/services/combat/CombatManager.java +++ b/src/services/combat/CombatManager.java @@ -382,40 +382,44 @@ public class CombatManager extends Manager { Log.i(this, "% was revived", revivedCreature); } - private void killCreature(CreatureObject killerCreature, CreatureObject killedCreature) { - killedCreature.setPosture(Posture.DEAD); - Log.i(this, "%s was killed", killedCreature); - new CreatureKilledIntent(killerCreature, killedCreature).broadcast(); + private void killCreature(CreatureObject killer, CreatureObject corpse) { + corpse.setPosture(Posture.DEAD); + Log.i(this, "%s was killed", corpse); + new CreatureKilledIntent(killer, corpse).broadcast(); } private void procesDeathblow(DeathblowIntent i) { - CreatureObject killerCreature = i.getKillerCreature(); - CreatureObject killedCreature = i.getKilledCreature(); + CreatureObject killer = i.getKiller(); + CreatureObject corpse = i.getCorpse(); - // Only players may deathblow eachother - if (killerCreature.isPlayer() && killedCreature.isPlayer()) { - // They must be enemies - if (killedCreature.isEnemy(killerCreature)) { - // The target of the deathblow must be incapacitated! - if (killedCreature.getPosture() == Posture.INCAPACITATED) { - // If this happens, they obviously can't get back up - synchronized (incapacitatedCreatures) { - Future incapacitationTimer = incapacitatedCreatures.remove(killedCreature); + // Only deathblowing players is allowed! + if (!corpse.isPlayer()) { + return; + } + + // They must be enemies + if (!corpse.isEnemy(killer)) { + return; + } + + // The target of the deathblow must be incapacitated! + if (corpse.getPosture() != Posture.INCAPACITATED) { + return; + } + + // If they're deathblown while incapacitated, their incapacitation expiration timer should cancel + synchronized (incapacitatedCreatures) { + Future incapacitationTimer = incapacitatedCreatures.remove(corpse); - if (incapacitationTimer != null) { - if (incapacitationTimer.cancel(false)) { // If the task is running, let them get back up - killCreature(killerCreature, killedCreature); - Log.i(this, "%s was deathblown by %s", killedCreature, killerCreature); - } - } else { - // Can't happen with the current code, but in case it's ever refactored... - Log.e(this, "Incapacitation timer for player %s being deathblown unexpectedly didn't exist!", ""); - } - } + if (incapacitationTimer != null) { + if (incapacitationTimer.cancel(false)) { // If the task is running, let them get back up + killCreature(killer, corpse); + Log.i(this, "%s was deathblown by %s", corpse, killer); } + } else { + // Can't happen with the current code, but in case it's ever refactored... + Log.e(this, "Incapacitation timer for player %s being deathblown unexpectedly didn't exist!", ""); } - } else { - Log.i(this, "%s tried to deathblow NPC %s", killerCreature, killedCreature); } } diff --git a/src/services/combat/CorpseService.java b/src/services/combat/CorpseService.java index cc0297f7..e50e08dc 100644 --- a/src/services/combat/CorpseService.java +++ b/src/services/combat/CorpseService.java @@ -207,11 +207,11 @@ public final class CorpseService extends Service { } private void handleCreatureKilledIntent(CreatureKilledIntent i) { - CreatureObject corpse = i.getKilledCreature(); + CreatureObject corpse = i.getCorpse(); if(corpse.isPlayer()) { Player corpseOwner = corpse.getOwner(); - new ChatBroadcastIntent(corpseOwner, new ProsePackage(new StringId("base_player", "prose_victim_dead"), "TT", i.getKillerCreature().getName())).broadcast(); + new ChatBroadcastIntent(corpseOwner, new ProsePackage(new StringId("base_player", "prose_victim_dead"), "TT", i.getKiller().getName())).broadcast(); new ChatBroadcastIntent(corpseOwner, new ProsePackage(new StringId("base_player", "revive_exp_msg"), "TT", CLONE_TIMER + " minutes.")).broadcast(); scheduleCloneTimer(corpse); @@ -566,4 +566,4 @@ public final class CorpseService extends Service { } } -} \ No newline at end of file +}