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:
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user