Core/Creatures: Implemented unsummoning and resummoning critter pets on flying mounts and teleports (and related static flags)

Port From (https://github.com/TrinityCore/TrinityCore/commit/f2ce5072d62e2835c4426220ebf8ade5fa67a79b)
This commit is contained in:
hondacrx
2024-03-04 11:50:36 -05:00
parent a042fb4b57
commit 3a976b2353
6 changed files with 61 additions and 5 deletions
+30
View File
@@ -667,6 +667,7 @@ namespace Game.Entities
StopCastingCharm();
StopCastingBindSight();
UnsummonPetTemporaryIfAny();
UnsummonBattlePetTemporaryIfAny();
SetPower(PowerType.ComboPoints, 0);
GetSession().DoLootReleaseAll();
m_lootRolls.Clear();
@@ -1079,6 +1080,35 @@ namespace Game.Entities
m_temporaryUnsummonedPetNumber = 0;
}
public void UnsummonBattlePetTemporaryIfAny(bool onFlyingMount = false)
{
Creature battlepet = GetSummonedBattlePet();
if (battlepet == null || !battlepet.IsSummon())
return;
if (onFlyingMount && !battlepet.ToTempSummon().IsDismissedOnFlyingMount())
return;
if (battlepet.ToTempSummon().IsAutoResummoned())
m_temporaryUnsummonedBattlePet = battlepet.GetBattlePetCompanionGUID();
GetSession().GetBattlePetMgr().DismissPet();
}
public void ResummonBattlePetTemporaryUnSummonedIfAny()
{
if (m_temporaryUnsummonedBattlePet.IsEmpty())
return;
// not resummon in not appropriate state
if (IsPetNeedBeTemporaryUnsummoned())
return;
GetSession().GetBattlePetMgr().SummonPet(m_temporaryUnsummonedBattlePet);
m_temporaryUnsummonedBattlePet.Clear();
}
public bool IsPetNeedBeTemporaryUnsummoned()
{
return !IsInWorld || !IsAlive() || HasUnitMovementFlag(MovementFlag.Flying) || HasExtraUnitMovementFlag2(MovementFlags3.AdvFlying);