Core/Units: add new functionality for units to block or enable combat interactions

Port From (https://github.com/TrinityCore/TrinityCore/commit/2819951dce545438724719836e3a13d3039b8690)
This commit is contained in:
hondacrx
2022-03-03 13:26:46 -05:00
parent 2a2860ef10
commit 0b38096d10
4 changed files with 16 additions and 10 deletions
+2 -5
View File
@@ -57,11 +57,8 @@ namespace Game.Combat
return false; return false;
if (a.HasUnitState(UnitState.InFlight) || b.HasUnitState(UnitState.InFlight)) if (a.HasUnitState(UnitState.InFlight) || b.HasUnitState(UnitState.InFlight))
return false; return false;
Creature aCreature = a.ToCreature(); // ... both units must not be ignoring combat
if (aCreature != null && aCreature.IsCombatDisallowed()) if (a.IsIgnoringCombat() || b.IsIgnoringCombat())
return false;
Creature bCreature = b.ToCreature();
if (bCreature != null && bCreature.IsCombatDisallowed())
return false; return false;
if (a.IsFriendlyTo(b) || b.IsFriendlyTo(a)) if (a.IsFriendlyTo(b) || b.IsFriendlyTo(a))
return false; return false;
+2 -4
View File
@@ -420,6 +420,8 @@ namespace Game.Entities
ApplySpellImmune(0, SpellImmunity.Effect, SpellEffectName.AttackMe, true); ApplySpellImmune(0, SpellImmunity.Effect, SpellEffectName.AttackMe, true);
} }
SetIgnoringCombat(cInfo.FlagsExtra.HasFlag(CreatureFlagsExtra.NoCombat));
LoadTemplateRoot(); LoadTemplateRoot();
InitializeMovementFlags(); InitializeMovementFlags();
@@ -3096,10 +3098,6 @@ namespace Game.Entities
{ {
return GetCreatureTemplate().FlagsExtra.HasAnyFlag(CreatureFlagsExtra.Guard); return GetCreatureTemplate().FlagsExtra.HasAnyFlag(CreatureFlagsExtra.Guard);
} }
public bool IsCombatDisallowed()
{
return GetCreatureTemplate().FlagsExtra.HasFlag(CreatureFlagsExtra.NoCombat);
}
public bool CanWalk() { return GetMovementTemplate().IsGroundAllowed(); } public bool CanWalk() { return GetMovementTemplate().IsGroundAllowed(); }
public override bool CanSwim() { return GetMovementTemplate().IsSwimAllowed() || IsPet();} public override bool CanSwim() { return GetMovementTemplate().IsSwimAllowed() || IsPet();}
+10
View File
@@ -1491,5 +1491,15 @@ namespace Game.Entities
UpdateAttackTimeField(att); UpdateAttackTimeField(att);
m_attackTimer[(int)att] = (uint)(m_baseAttackSpeed[(int)att] * m_modAttackSpeedPct[(int)att] * remainingTimePct); m_attackTimer[(int)att] = (uint)(m_baseAttackSpeed[(int)att] * m_modAttackSpeedPct[(int)att] * remainingTimePct);
} }
/// <summary>
/// returns if the unit is ignoring any combat interaction
/// </summary>
public bool IsIgnoringCombat() { return _isIgnoringCombat; }
/// <summary>
/// enables/disables combat interaction of this unit.
/// </summary>
public void SetIgnoringCombat(bool apply) { _isIgnoringCombat = apply; }
} }
} }
+1
View File
@@ -55,6 +55,7 @@ namespace Game.Entities
uint[] m_baseAttackSpeed = new uint[(int)WeaponAttackType.Max]; uint[] m_baseAttackSpeed = new uint[(int)WeaponAttackType.Max];
internal float[] m_modAttackSpeedPct = new float[(int)WeaponAttackType.Max]; internal float[] m_modAttackSpeedPct = new float[(int)WeaponAttackType.Max];
protected uint[] m_attackTimer = new uint[(int)WeaponAttackType.Max]; protected uint[] m_attackTimer = new uint[(int)WeaponAttackType.Max];
bool _isIgnoringCombat;
// Threat+combat management // Threat+combat management
CombatManager m_combatManager; CombatManager m_combatManager;