aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxinef1 <w.szyszko2@gmail.com>2017-01-30 10:57:24 +0100
committerShauren <shauren.trinity@gmail.com>2018-12-09 14:18:42 +0100
commitbefea2f7a63f6fd244e27b3a000665c7839616e6 (patch)
tree4ce6dc0b01e8f063969e91409b25907063a3a471
parent2e454235377b2f3525a3f4d1a27657254ef67a3a (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 (cherry-picked from f86ca9e3c97ab708705eef262bf69837f84bc3d9)
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp4
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp3
2 files changed, 7 insertions, 0 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index d7ae09c1ab6..6b9e5bd74ed 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -287,6 +287,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 51e54b3ba26..c9f75345754 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -120,6 +120,9 @@ bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
if (!i_path || i_path->nodes.empty())
return false;
+ if (Stopped())
+ return true;
+
bool transportPath = creature->GetTransport() != nullptr;
if (IsArrivalDone)