Core/Creatures: Implemented serverside checks for UNIT_FLAG2_INTERACT_WHILE_HOSTILE and UNIT_FLAG3_ALLOW_INTERACTION_WHILE_IN_COMBAT

* Also stop sending npc flags for hostile creatures
Port From (https://github.com/TrinityCore/TrinityCore/commit/c2e36dea6c6af6139bf60454e9299447ec7d9897)
This commit is contained in:
hondacrx
2024-03-05 18:16:38 -05:00
parent 0325d8b523
commit e646b8008d
8 changed files with 125 additions and 39 deletions
+47
View File
@@ -35,6 +35,9 @@ namespace Game.Entities
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags.EnteringCombat);
ProcSkillsAndAuras(this, null, new ProcFlagsInit(ProcFlags.EnterCombat), new ProcFlagsInit(ProcFlags.None), ProcFlagsSpellType.MaskAll, ProcFlagsSpellPhase.None, ProcFlagsHit.None, null, null, null);
if (!IsInteractionAllowedInCombat())
UpdateNearbyPlayersInteractions();
}
public virtual void AtExitCombat()
@@ -43,6 +46,9 @@ namespace Game.Entities
pair.Value.GetBase().CallScriptEnterLeaveCombatHandlers(pair.Value, false);
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags.LeavingCombat);
if (!IsInteractionAllowedInCombat())
UpdateNearbyPlayersInteractions();
}
public virtual void AtEngage(Unit target) { }
@@ -1654,5 +1660,46 @@ namespace Game.Entities
/// enables / disables combat interaction of this unit
/// </summary>
public void SetIsCombatDisallowed(bool apply) { _isCombatDisallowed = apply; }
public bool IsInteractionAllowedWhileHostile()
{
return HasUnitFlag2(UnitFlags2.InteractWhileHostile);
}
public virtual void SetInteractionAllowedWhileHostile(bool interactionAllowed)
{
if (interactionAllowed)
SetUnitFlag2(UnitFlags2.InteractWhileHostile);
else
RemoveUnitFlag2(UnitFlags2.InteractWhileHostile);
UpdateNearbyPlayersInteractions();
}
public bool IsInteractionAllowedInCombat()
{
return HasUnitFlag3(UnitFlags3.AllowInteractionWhileInCombat);
}
public virtual void SetInteractionAllowedInCombat(bool interactionAllowed)
{
if (interactionAllowed)
SetUnitFlag3(UnitFlags3.AllowInteractionWhileInCombat);
else
RemoveUnitFlag3(UnitFlags3.AllowInteractionWhileInCombat);
if (IsInCombat())
UpdateNearbyPlayersInteractions();
}
public virtual void UpdateNearbyPlayersInteractions()
{
for (int i = 0; i < m_unitData.NpcFlags.GetSize(); ++i)
if (m_unitData.NpcFlags[i] != 0)
{
m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, i);
ForceUpdateFieldChange();
}
}
}
}