aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxinef1 <w.szyszko2@gmail.com>2017-01-30 10:57:24 +0100
committerShauren <shauren.trinity@gmail.com>2017-01-30 10:57:24 +0100
commitf86ca9e3c97ab708705eef262bf69837f84bc3d9 (patch)
tree6a17a7dddabfe62f3828a5022989fbf02c082345
parent5e46bb3e8c352cfa73b074da2608287f6d8f1513 (diff)
Core/Creatures: Stop falling if corpse is removed (can happen when alive unit is despawned instantly in air) (#18995)
Do not allow to start waypoint movement when unit is dead
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp4
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp4
2 files changed, 8 insertions, 0 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 52e7611ebb5..b3bc0765e4a 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -295,6 +295,10 @@ void Creature::RemoveCorpse(bool setSpawnTime)
if (setSpawnTime)
m_respawnTime = time(NULL) + respawnDelay;
+ // if corpse was removed during falling, the falling will continue and override relocation to respawn position
+ if (IsFalling())
+ StopMoving();
+
float x, y, z, o;
GetRespawnPosition(x, y, z, &o);
SetHomePosition(x, y, z, o);
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index 50e1444ac4f..2644b670de7 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -98,6 +98,10 @@ bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
if (!i_path || i_path->empty())
return false;
+ // Dont allow dead creatures to move
+ if (!creature->IsAlive())
+ return false;
+
if (Stopped())
return true;