Core/PetAI: Validate GetCharmInfo()

Port From (https://github.com/TrinityCore/TrinityCore/commit/8fd7a4b6e5f6b728c4ae40cfd2080c4dae004e8f)
This commit is contained in:
hondacrx
2022-02-27 23:36:55 -05:00
parent 7f86f6ce1e
commit f55e8ae73c
+11 -5
View File
@@ -136,7 +136,7 @@ namespace Game.AI
if (target) if (target)
{ {
if (CanAIAttack(target) && spell.CanAutoCast(target)) if (CanAttack(target) && spell.CanAutoCast(target))
{ {
targetSpellStore.Add(Tuple.Create(target, spell)); targetSpellStore.Add(Tuple.Create(target, spell));
spellUsed = true; spellUsed = true;
@@ -174,7 +174,7 @@ namespace Game.AI
if (!spellUsed) if (!spellUsed)
spell.Dispose(); spell.Dispose();
} }
else if (me.GetVictim() && CanAIAttack(me.GetVictim()) && spellInfo.CanBeUsedInCombat()) else if (me.GetVictim() && CanAttack(me.GetVictim()) && spellInfo.CanBeUsedInCombat())
{ {
Spell spell = new(me, spellInfo, TriggerCastFlags.None); Spell spell = new(me, spellInfo, TriggerCastFlags.None);
if (spell.CanAutoCast(me.GetVictim())) if (spell.CanAutoCast(me.GetVictim()))
@@ -248,7 +248,7 @@ namespace Game.AI
public void _AttackStart(Unit target) public void _AttackStart(Unit target)
{ {
// Check all pet states to decide if we can attack this target // Check all pet states to decide if we can attack this target
if (!CanAIAttack(target)) if (!CanAttack(target))
return; return;
// Only chase if not commanded to stay or if stay but commanded to attack // Only chase if not commanded to stay or if stay but commanded to attack
@@ -355,6 +355,12 @@ namespace Game.AI
if (me.IsCharmed()) if (me.IsCharmed())
return; return;
if (me.GetCharmInfo() == null)
{
Log.outWarn(LogFilter.ScriptsAi, $"me.GetCharmInfo() is NULL in PetAI::HandleReturnMovement(). Debug info: {GetDebugInfo()}");
return;
}
if (me.GetCharmInfo().HasCommandState(CommandStates.Stay)) if (me.GetCharmInfo().HasCommandState(CommandStates.Stay))
{ {
if (!me.GetCharmInfo().IsAtStay() && !me.GetCharmInfo().IsReturning()) if (!me.GetCharmInfo().IsAtStay() && !me.GetCharmInfo().IsReturning())
@@ -463,7 +469,7 @@ namespace Game.AI
} }
} }
public override bool CanAIAttack(Unit victim) public bool CanAttack(Unit victim)
{ {
// Evaluates wether a pet can attack a specific target based on CommandState, ReactState and other flags // Evaluates wether a pet can attack a specific target based on CommandState, ReactState and other flags
// IMPORTANT: The order in which things are checked is important, be careful if you add or remove checks // IMPORTANT: The order in which things are checked is important, be careful if you add or remove checks
@@ -483,7 +489,7 @@ namespace Game.AI
if (me.GetCharmInfo() == null) if (me.GetCharmInfo() == null)
{ {
Log.outError(LogFilter.ScriptsAi, $"me.GetCharmInfo() is NULL in PetAI::CanAttack(). Debug info: {GetDebugInfo()}"); Log.outWarn(LogFilter.ScriptsAi, $"me.GetCharmInfo() is NULL in PetAI::CanAttack(). Debug info: {GetDebugInfo()}");
return false; return false;
} }