diff options
Diffstat (limited to 'src')
-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 6eab8bef3ec..06e93dd3160 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -462,7 +462,11 @@ void Creature::RemoveCorpse(bool setSpawnTime, bool destroyForNearbyPlayers) SaveRespawnTime(0, false); } - AddObjectToRemoveList(); + + if (TempSummon* summon = ToTempSummon()) + summon->UnSummon(); + else + AddObjectToRemoveList(); } } @@ -669,10 +673,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 60a29dbd739..e522e1c3365 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -56,6 +56,7 @@ void TempSummon::Update(uint32 diff) switch (m_type) { case TEMPSUMMON_MANUAL_DESPAWN: + case TEMPSUMMON_DEAD_DESPAWN: break; case TEMPSUMMON_TIMED_DESPAWN: { @@ -103,7 +104,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; @@ -111,19 +112,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; @@ -145,13 +136,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 3efc014ffaf..696d8a05555 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1742,7 +1742,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert break; } - if (!summon->Create(GenerateLowGuid<HighGuid::Creature>(), this, entry, pos, nullptr, vehId)) + if (!summon->Create(GenerateLowGuid<HighGuid::Creature>(), this, entry, pos, nullptr, vehId, true)) { delete summon; return nullptr; |