Some missed stuff.

This commit is contained in:
hondacrx
2021-06-18 15:19:41 -04:00
parent 88c9b21ec2
commit fbd7df7c3f
10 changed files with 40 additions and 25 deletions
+2 -1
View File
@@ -336,7 +336,8 @@ namespace Game.AI
if (point) if (point)
{ {
point.SetObjectScale(SharedConst.BoundaryVisualizeCreatureScale); point.SetObjectScale(SharedConst.BoundaryVisualizeCreatureScale);
point.AddUnitFlag(UnitFlags.ImmuneToPc | UnitFlags.Stunned | UnitFlags.ImmuneToNpc); point.AddUnitFlag(UnitFlags.Stunned);
point.SetImmuneToAll(true);
if (!hasOutOfBoundsNeighbor) if (!hasOutOfBoundsNeighbor)
point.AddUnitFlag(UnitFlags.NotSelectable); point.AddUnitFlag(UnitFlags.NotSelectable);
} }
@@ -163,7 +163,7 @@ namespace Game.AI
{ {
me.GetMotionMaster().MoveTargetedHome(); me.GetMotionMaster().MoveTargetedHome();
if (_hasImmuneToNPCFlags) if (_hasImmuneToNPCFlags)
me.AddUnitFlag(UnitFlags.ImmuneToNpc); me.SetImmuneToNPC(true);
Reset(); Reset();
} }
} }
@@ -443,10 +443,10 @@ namespace Game.AI
//disable npcflags //disable npcflags
me.SetNpcFlags(NPCFlags.None); me.SetNpcFlags(NPCFlags.None);
me.SetNpcFlags2(NPCFlags2.None); me.SetNpcFlags2(NPCFlags2.None);
if (me.HasUnitFlag(UnitFlags.ImmuneToNpc)) if (me.IsImmuneToNPC())
{ {
_hasImmuneToNPCFlags = true; _hasImmuneToNPCFlags = true;
me.RemoveUnitFlag(UnitFlags.ImmuneToNpc); me.SetImmuneToNPC(false);
} }
Log.outDebug(LogFilter.Scripts, $"EscortAI.Start: (script: {me.GetScriptName()}, creature entry: {me.GetEntry()}) started with {_path.nodes.Count} waypoints. ActiveAttacker = {_activeAttacker}, Run = {_running}, Player = {_playerGUID}"); Log.outDebug(LogFilter.Scripts, $"EscortAI.Start: (script: {me.GetScriptName()}, creature entry: {me.GetEntry()}) started with {_path.nodes.Count} waypoints. ActiveAttacker = {_activeAttacker}, Run = {_running}, Player = {_playerGUID}");
+4 -4
View File
@@ -167,8 +167,8 @@ namespace Game.Combat
if (!IsInCombatWith(refe.Key)) if (!IsInCombatWith(refe.Key))
{ {
Unit target = refe.Value.GetOther(who); Unit target = refe.Value.GetOther(who);
if ((_owner.HasUnitFlag(UnitFlags.ImmuneToPc) && target.HasUnitFlag(UnitFlags.PvpAttackable)) || if ((_owner.IsImmuneToPC() && target.HasUnitFlag(UnitFlags.PvpAttackable)) ||
(_owner.HasUnitFlag(UnitFlags.ImmuneToNpc) && !target.HasUnitFlag(UnitFlags.PvpAttackable))) (_owner.IsImmuneToNPC() && !target.HasUnitFlag(UnitFlags.PvpAttackable)))
continue; continue;
SetInCombatWith(target); SetInCombatWith(target);
} }
@@ -178,8 +178,8 @@ namespace Game.Combat
if (!IsInCombatWith(refe.Key)) if (!IsInCombatWith(refe.Key))
{ {
Unit target = refe.Value.GetOther(who); Unit target = refe.Value.GetOther(who);
if ((_owner.HasUnitFlag(UnitFlags.ImmuneToPc) && target.HasUnitFlag(UnitFlags.PvpAttackable)) || if ((_owner.IsImmuneToPC() && target.HasUnitFlag(UnitFlags.PvpAttackable)) ||
(_owner.HasUnitFlag(UnitFlags.ImmuneToNpc) && !target.HasUnitFlag(UnitFlags.PvpAttackable))) (_owner.IsImmuneToNPC() && !target.HasUnitFlag(UnitFlags.PvpAttackable)))
continue; continue;
SetInCombatWith(target); SetInCombatWith(target);
} }
+6 -4
View File
@@ -1718,9 +1718,7 @@ namespace Game.Entities
return false; return false;
// This set of checks is should be done only for creatures // This set of checks is should be done only for creatures
if ((HasUnitFlag(UnitFlags.ImmuneToNpc) && !who.IsTypeId(TypeId.Player)) // flag is valid only for non player characters if ((IsImmuneToNPC() && !who.HasUnitFlag(UnitFlags.PvpAttackable)) || (IsImmuneToPC() && who.HasUnitFlag(UnitFlags.PvpAttackable)))
|| (HasUnitFlag(UnitFlags.ImmuneToPc) && who.IsTypeId(TypeId.Player)) // immune to PC and target is a player, return false
|| (who.GetOwner() && who.GetOwner().IsTypeId(TypeId.Player) && HasUnitFlag(UnitFlags.ImmuneToPc))) // player pets are immune to pc as well
return false; return false;
// Do not attack non-combat pets // Do not attack non-combat pets
@@ -2219,7 +2217,7 @@ namespace Game.Entities
if (IsCivilian()) if (IsCivilian())
return false; return false;
if (HasUnitFlag(UnitFlags.NonAttackable | UnitFlags.NotSelectable | UnitFlags.ImmuneToPc)) if (HasUnitFlag(UnitFlags.NonAttackable | UnitFlags.NotSelectable) || IsImmuneToNPC())
return false; return false;
// skip fighting creature // skip fighting creature
@@ -3115,6 +3113,10 @@ namespace Game.Entities
return (reactState == state); return (reactState == state);
} }
public override void SetImmuneToAll(bool apply) { SetImmuneToAll(apply, HasReactState(ReactStates.Passive)); }
public override void SetImmuneToPC(bool apply) { SetImmuneToPC(apply, HasReactState(ReactStates.Passive)); }
public override void SetImmuneToNPC(bool apply) { SetImmuneToNPC(apply, HasReactState(ReactStates.Passive)); }
public bool IsInEvadeMode() { return HasUnitState(UnitState.Evade); } public bool IsInEvadeMode() { return HasUnitState(UnitState.Evade); }
public bool IsEvadingAttacks() { return IsInEvadeMode() || CanNotReachTarget(); } public bool IsEvadingAttacks() { return IsInEvadeMode() || CanNotReachTarget(); }
@@ -2074,7 +2074,7 @@ namespace Game.Entities
return; return;
// remove immunity flags, to allow spell to target anything // remove immunity flags, to allow spell to target anything
trigger.RemoveUnitFlag(UnitFlags.ImmuneToNpc | UnitFlags.ImmuneToPc); trigger.SetImmuneToAll(false);
PhasingHandler.InheritPhaseShift(trigger, this); PhasingHandler.InheritPhaseShift(trigger, this);
+5 -5
View File
@@ -1660,12 +1660,12 @@ namespace Game.Entities
// check flags // check flags
if (target.HasUnitFlag(UnitFlags.NonAttackable | UnitFlags.TaxiFlight | UnitFlags.NotAttackable1 | UnitFlags.Unk16) if (target.HasUnitFlag(UnitFlags.NonAttackable | UnitFlags.TaxiFlight | UnitFlags.NotAttackable1 | UnitFlags.Unk16)
|| (!HasUnitFlag(UnitFlags.PvpAttackable) && target.HasUnitFlag(UnitFlags.ImmuneToNpc)) || (!HasUnitFlag(UnitFlags.PvpAttackable) && target.IsImmuneToNPC())
|| (!target.HasUnitFlag(UnitFlags.PvpAttackable) && HasUnitFlag(UnitFlags.ImmuneToNpc))) || (!target.HasUnitFlag(UnitFlags.PvpAttackable) && IsImmuneToNPC()))
return false; return false;
if ((bySpell == null || !bySpell.HasAttribute(SpellAttr8.AttackIgnoreImmuneToPCFlag)) if ((bySpell == null || !bySpell.HasAttribute(SpellAttr8.AttackIgnoreImmuneToPCFlag))
&& (HasUnitFlag(UnitFlags.PvpAttackable) && target.HasUnitFlag(UnitFlags.ImmuneToPc)) && (HasUnitFlag(UnitFlags.PvpAttackable) && target.IsImmuneToPC())
// check if this is a world trigger cast - GOs are using world triggers to cast their spells, so we need to ignore their immunity flag here, this is a temp workaround, needs removal when go cast is implemented properly // check if this is a world trigger cast - GOs are using world triggers to cast their spells, so we need to ignore their immunity flag here, this is a temp workaround, needs removal when go cast is implemented properly
&& GetEntry() != SharedConst.WorldTrigger) && GetEntry() != SharedConst.WorldTrigger)
return false; return false;
@@ -1782,12 +1782,12 @@ namespace Game.Entities
{ {
if (HasUnitFlag(UnitFlags.PvpAttackable)) if (HasUnitFlag(UnitFlags.PvpAttackable))
{ {
if (target.HasUnitFlag(UnitFlags.ImmuneToPc)) if (target.IsImmuneToPC())
return false; return false;
} }
else else
{ {
if (target.HasUnitFlag(UnitFlags.ImmuneToNpc)) if (target.IsImmuneToNPC())
return false; return false;
} }
} }
+15 -3
View File
@@ -3115,7 +3115,9 @@ namespace Game.Entities
return gain; return gain;
} }
void SetImmuneToAll(bool apply, bool keepCombat) public bool IsImmuneToAll() { return IsImmuneToPC() && IsImmuneToNPC(); }
public void SetImmuneToAll(bool apply, bool keepCombat)
{ {
if (apply) if (apply)
{ {
@@ -3133,7 +3135,11 @@ namespace Game.Entities
} }
} }
void SetImmuneToPC(bool apply, bool keepCombat) public virtual void SetImmuneToAll(bool apply) { SetImmuneToAll(apply, false); }
public bool IsImmuneToPC() { return HasUnitFlag(UnitFlags.ImmuneToPc); }
public void SetImmuneToPC(bool apply, bool keepCombat)
{ {
if (apply) if (apply)
{ {
@@ -3163,7 +3169,11 @@ namespace Game.Entities
} }
} }
void SetImmuneToNPC(bool apply, bool keepCombat) public virtual void SetImmuneToPC(bool apply) { SetImmuneToPC(apply, false); }
public bool IsImmuneToNPC() { return HasUnitFlag(UnitFlags.ImmuneToNpc); }
public void SetImmuneToNPC(bool apply, bool keepCombat)
{ {
if (apply) if (apply)
{ {
@@ -3193,6 +3203,8 @@ namespace Game.Entities
} }
} }
public virtual void SetImmuneToNPC(bool apply) { SetImmuneToNPC(apply, false); }
public virtual float GetBlockPercent(uint attackerLevel) { return 30.0f; } public virtual float GetBlockPercent(uint attackerLevel) { return 30.0f; }
void UpdateReactives(uint p_time) void UpdateReactives(uint p_time)
+1 -1
View File
@@ -1685,7 +1685,7 @@ namespace Game.Spells
summon.SetNpcFlags((NPCFlags)((int)summon.GetCreatureTemplate().Npcflag & 0xFFFFFFFF)); summon.SetNpcFlags((NPCFlags)((int)summon.GetCreatureTemplate().Npcflag & 0xFFFFFFFF));
summon.SetNpcFlags2((NPCFlags2)((int)summon.GetCreatureTemplate().Npcflag >> 32)); summon.SetNpcFlags2((NPCFlags2)((int)summon.GetCreatureTemplate().Npcflag >> 32));
summon.AddUnitFlag(UnitFlags.ImmuneToPc | UnitFlags.ImmuneToNpc); summon.SetImmuneToAll(true);
summon.GetAI().EnterEvadeMode(); summon.GetAI().EnterEvadeMode();
break; break;
+2 -2
View File
@@ -434,13 +434,13 @@ namespace Scripts.Spells.Quest
void HandleEffectApply(AuraEffect aurEff, AuraEffectHandleModes mode) void HandleEffectApply(AuraEffect aurEff, AuraEffectHandleModes mode)
{ {
Unit target = GetTarget(); Unit target = GetTarget();
target.AddUnitFlag(UnitFlags.ImmuneToPc); target.SetImmuneToPC(true);
target.AddUnitState(UnitState.Root); target.AddUnitState(UnitState.Root);
} }
void HandleEffectRemove(AuraEffect aurEff, AuraEffectHandleModes mode) void HandleEffectRemove(AuraEffect aurEff, AuraEffectHandleModes mode)
{ {
GetTarget().RemoveUnitFlag(UnitFlags.ImmuneToPc); GetTarget().SetImmuneToPC(false);
} }
public override void Register() public override void Register()
+1 -1
View File
@@ -241,7 +241,7 @@ namespace Scripts.World.ItemScripts
{ {
summon.SetVisible(false); summon.SetVisible(false);
summon.SetReactState(ReactStates.Passive); summon.SetReactState(ReactStates.Passive);
summon.AddUnitFlag(UnitFlags.ImmuneToPc); summon.SetImmuneToPC(true);
} }
return false; return false;
} }