diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index 711143985..5b03035dd 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -213,7 +213,12 @@ namespace Game.Entities SaveRespawnTime(0, false); } - AddObjectToRemoveList(); + + TempSummon summon = ToTempSummon(); + if (summon != null) + summon.UnSummon(); + else + AddObjectToRemoveList(); } } @@ -416,10 +421,11 @@ namespace Game.Entities { if (IsAIEnabled && triggerJustAppeared && m_deathState == DeathState.Alive) { - triggerJustAppeared = false; - GetAI().JustAppeared(); if (m_respawnCompatibilityMode && VehicleKit != null) VehicleKit.Reset(); + + triggerJustAppeared = false; + GetAI().JustAppeared(); } UpdateMovementFlags(); diff --git a/Source/Game/Entities/TemporarySummon.cs b/Source/Game/Entities/TemporarySummon.cs index 5ed3ceee9..89cdc559c 100644 --- a/Source/Game/Entities/TemporarySummon.cs +++ b/Source/Game/Entities/TemporarySummon.cs @@ -52,9 +52,11 @@ namespace Game.Entities UnSummon(); return; } + switch (m_type) { case TempSummonType.ManualDespawn: + case TempSummonType.DeadDespawn: break; case TempSummonType.TimedDespawn: { @@ -102,27 +104,17 @@ namespace Game.Entities case TempSummonType.CorpseDespawn: { // if m_deathState is DEAD, CORPSE was skipped - if (m_deathState == DeathState.Corpse || m_deathState == DeathState.Dead) + if (m_deathState == DeathState.Corpse) { UnSummon(); return; } - break; - } - case TempSummonType.DeadDespawn: - { - if (m_deathState == DeathState.Dead) - { - UnSummon(); - return; - } break; } case TempSummonType.TimedOrCorpseDespawn: { - // if m_deathState is DEAD, CORPSE was skipped - if (m_deathState == DeathState.Corpse || m_deathState == DeathState.Dead) + if (m_deathState == DeathState.Corpse) { UnSummon(); return; @@ -144,13 +136,6 @@ namespace Game.Entities } case TempSummonType.TimedOrDeadDespawn: { - // if m_deathState is DEAD, CORPSE was skipped - if (m_deathState == DeathState.Dead) - { - UnSummon(); - return; - } - if (!IsInCombat() && IsAlive()) { if (m_timer <= diff) diff --git a/Source/Game/Maps/Map.cs b/Source/Game/Maps/Map.cs index 302bc32db..51268add2 100644 --- a/Source/Game/Maps/Map.cs +++ b/Source/Game/Maps/Map.cs @@ -3901,7 +3901,7 @@ namespace Game.Maps } } - TempSummon summon = null; + TempSummon summon; switch (mask) { case UnitTypeMask.Summon: @@ -3923,7 +3923,7 @@ namespace Game.Maps return null; } - if (!summon.Create(GenerateLowGuid(HighGuid.Creature), this, entry, pos, null, vehId)) + if (!summon.Create(GenerateLowGuid(HighGuid.Creature), this, entry, pos, null, vehId, true)) return null; // Set the summon to the summoner's phase