Some missed stuff.
This commit is contained in:
@@ -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}");
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user