aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2017-08-21 17:40:47 +0200
committerShauren <shauren.trinity@gmail.com>2020-08-23 14:52:51 +0200
commit22b754c9e22cfdd9dab998ca45e6724b62760f78 (patch)
tree36792b7a663d6a77812e1bafbddf878f8e2d08ab /src
parent2924ae08038314e3c935a132cc56a4135d9f103c (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.cpp10
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp22
-rw-r--r--src/server/game/Entities/Object/Object.cpp2
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;