aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 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;