Core/Creature: temporary summons are now dynamic flagged (oversight in dynspawn). This fixes issues with vehicle kit resets breaking AI.

Port From (https://github.com/TrinityCore/TrinityCore/commit/22b754c9e22cfdd9dab998ca45e6724b62760f78)
This commit is contained in:
hondacrx
2020-08-24 19:13:15 -04:00
parent a27c86a385
commit 35c13d69ca
3 changed files with 15 additions and 24 deletions
+9 -3
View File
@@ -213,7 +213,12 @@ namespace Game.Entities
SaveRespawnTime(0, false); 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) if (IsAIEnabled && triggerJustAppeared && m_deathState == DeathState.Alive)
{ {
triggerJustAppeared = false;
GetAI().JustAppeared();
if (m_respawnCompatibilityMode && VehicleKit != null) if (m_respawnCompatibilityMode && VehicleKit != null)
VehicleKit.Reset(); VehicleKit.Reset();
triggerJustAppeared = false;
GetAI().JustAppeared();
} }
UpdateMovementFlags(); UpdateMovementFlags();
+4 -19
View File
@@ -52,9 +52,11 @@ namespace Game.Entities
UnSummon(); UnSummon();
return; return;
} }
switch (m_type) switch (m_type)
{ {
case TempSummonType.ManualDespawn: case TempSummonType.ManualDespawn:
case TempSummonType.DeadDespawn:
break; break;
case TempSummonType.TimedDespawn: case TempSummonType.TimedDespawn:
{ {
@@ -102,27 +104,17 @@ namespace Game.Entities
case TempSummonType.CorpseDespawn: case TempSummonType.CorpseDespawn:
{ {
// if m_deathState is DEAD, CORPSE was skipped // if m_deathState is DEAD, CORPSE was skipped
if (m_deathState == DeathState.Corpse || m_deathState == DeathState.Dead) if (m_deathState == DeathState.Corpse)
{ {
UnSummon(); UnSummon();
return; return;
} }
break;
}
case TempSummonType.DeadDespawn:
{
if (m_deathState == DeathState.Dead)
{
UnSummon();
return;
}
break; break;
} }
case TempSummonType.TimedOrCorpseDespawn: case TempSummonType.TimedOrCorpseDespawn:
{ {
// if m_deathState is DEAD, CORPSE was skipped if (m_deathState == DeathState.Corpse)
if (m_deathState == DeathState.Corpse || m_deathState == DeathState.Dead)
{ {
UnSummon(); UnSummon();
return; return;
@@ -144,13 +136,6 @@ namespace Game.Entities
} }
case TempSummonType.TimedOrDeadDespawn: case TempSummonType.TimedOrDeadDespawn:
{ {
// if m_deathState is DEAD, CORPSE was skipped
if (m_deathState == DeathState.Dead)
{
UnSummon();
return;
}
if (!IsInCombat() && IsAlive()) if (!IsInCombat() && IsAlive())
{ {
if (m_timer <= diff) if (m_timer <= diff)
+2 -2
View File
@@ -3901,7 +3901,7 @@ namespace Game.Maps
} }
} }
TempSummon summon = null; TempSummon summon;
switch (mask) switch (mask)
{ {
case UnitTypeMask.Summon: case UnitTypeMask.Summon:
@@ -3923,7 +3923,7 @@ namespace Game.Maps
return null; 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; return null;
// Set the summon to the summoner's phase // Set the summon to the summoner's phase