diff options
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/TemporarySummon.cpp | 22 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 2 |
3 files changed, 11 insertions, 23 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 092f1798de3..9a2c210b92e 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -419,7 +419,11 @@ void Creature::RemoveCorpse(bool setSpawnTime, bool destroyForNearbyPlayers) SaveRespawnTime(0, false); } - AddObjectToRemoveList(); + + if (TempSummon* summon = ToTempSummon()) + summon->UnSummon(); + else + AddObjectToRemoveList(); } } @@ -614,10 +618,10 @@ void Creature::Update(uint32 diff) { if (IsAIEnabled && m_triggerJustAppeared && m_deathState == ALIVE) { - m_triggerJustAppeared = false; - AI()->JustAppeared(); if (m_respawnCompatibilityMode && m_vehicleKit) m_vehicleKit->Reset(); + m_triggerJustAppeared = false; + AI()->JustAppeared(); } UpdateMovementFlags(); diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 7e9cf6bf7a3..70a7e3446d4 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -57,6 +57,7 @@ void TempSummon::Update(uint32 diff) switch (m_type) { case TEMPSUMMON_MANUAL_DESPAWN: + case TEMPSUMMON_DEAD_DESPAWN: break; case TEMPSUMMON_TIMED_DESPAWN: { @@ -104,7 +105,7 @@ void TempSummon::Update(uint32 diff) case TEMPSUMMON_CORPSE_DESPAWN: { // if m_deathState is DEAD, CORPSE was skipped - if (m_deathState == CORPSE || m_deathState == DEAD) + if (m_deathState == CORPSE) { UnSummon(); return; @@ -112,19 +113,9 @@ void TempSummon::Update(uint32 diff) break; } - case TEMPSUMMON_DEAD_DESPAWN: - { - if (m_deathState == DEAD) - { - UnSummon(); - return; - } - break; - } case TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN: { - // if m_deathState is DEAD, CORPSE was skipped - if (m_deathState == CORPSE || m_deathState == DEAD) + if (m_deathState == CORPSE) { UnSummon(); return; @@ -146,13 +137,6 @@ void TempSummon::Update(uint32 diff) } case TEMPSUMMON_TIMED_OR_DEAD_DESPAWN: { - // if m_deathState is DEAD, CORPSE was skipped - if (m_deathState == DEAD) - { - UnSummon(); - return; - } - if (!IsInCombat() && IsAlive()) { if (m_timer <= diff) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index d7dc720f55f..c87282efa36 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1908,7 +1908,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert break; } - if (!summon->Create(GenerateLowGuid<HighGuid::Unit>(), this, phase, entry, pos, nullptr, vehId)) + if (!summon->Create(GenerateLowGuid<HighGuid::Unit>(), this, phase, entry, pos, nullptr, vehId, true)) { delete summon; return nullptr; |
