diff options
author | Treeston <treeston.mmoc@gmail.com> | 2017-08-21 17:40:47 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-08-23 14:52:51 +0200 |
commit | 22b754c9e22cfdd9dab998ca45e6724b62760f78 (patch) | |
tree | 36792b7a663d6a77812e1bafbddf878f8e2d08ab /src | |
parent | 2924ae08038314e3c935a132cc56a4135d9f103c (diff) |
Core/Creature: temporary summons are now dynamic flagged (oversight in dynspawn). This fixes issues with vehicle kit resets breaking AI.
Closes #20137 #20138 #20153.
(cherry picked from commit 92e9376e5eecdc3412104a0ee304d389d4ce0188)
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; |