Core/Units: Added helper functions to modify UNIT_FLAG_UNINTERACTIBLE

Port From (https://github.com/TrinityCore/TrinityCore/commit/88ff97c1f96381565c47f8ca1993bdc7fce19fd6)
This commit is contained in:
hondacrx
2023-09-04 07:50:01 -04:00
parent 9ba60f66f8
commit fb44221203
24 changed files with 76 additions and 56 deletions
@@ -205,7 +205,7 @@ namespace Scripts.Argus.AntorusTheBurningThrone.GarothiWorldbreaker
_events.Reset();
_events.ScheduleEvent(EventIds.ReengagePlayers, TimeSpan.FromSeconds(3.5));
HideCannons();
me.RemoveUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(false);
break;
default:
break;
@@ -229,14 +229,14 @@ namespace Scripts.Argus.AntorusTheBurningThrone.GarothiWorldbreaker
DoCastSelf(SpellIds.ApocalypseDriveFinalDamage);
Talk(TextIds.SayAnnounceApocalypseDrive);
Talk(TextIds.SayApocalypseDrive);
me.SetUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(true);
Creature decimator = instance.GetCreature(DataTypes.Decimator);
if (decimator)
{
instance.SendEncounterUnit(EncounterFrameType.Engage, decimator, 2);
decimator.SetUnitFlag(UnitFlags.InCombat);
decimator.RemoveUnitFlag(UnitFlags.Uninteractible);
decimator.SetUninteractible(false);
}
Creature annihilator = instance.GetCreature(DataTypes.Annihilator);
@@ -244,7 +244,7 @@ namespace Scripts.Argus.AntorusTheBurningThrone.GarothiWorldbreaker
{
instance.SendEncounterUnit(EncounterFrameType.Engage, annihilator, 2);
annihilator.SetUnitFlag(UnitFlags.InCombat);
annihilator.RemoveUnitFlag(UnitFlags.Uninteractible);
annihilator.SetUninteractible(false);
}
++_apocalypseDriveCount;
}
@@ -279,7 +279,7 @@ namespace Scripts.Argus.AntorusTheBurningThrone.GarothiWorldbreaker
case CreatureIds.Annihilator:
me.InterruptNonMeleeSpells(true);
me.RemoveAurasDueToSpell(SpellIds.ApocalypseDrive);
me.RemoveUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(false);
if (summon.GetEntry() == CreatureIds.Annihilator)
_searingBarrageSpellId = SpellIds.SearingBarrageAnnihilator;
@@ -411,14 +411,16 @@ namespace Scripts.Argus.AntorusTheBurningThrone.GarothiWorldbreaker
if (decimator)
{
instance.SendEncounterUnit(EncounterFrameType.Disengage, decimator);
decimator.SetUnitFlag(UnitFlags.Uninteractible | UnitFlags.Immune);
decimator.SetUninteractible(true);
decimator.SetUnitFlag(UnitFlags.Immune);
}
Creature annihilator = instance.GetCreature(DataTypes.Annihilator);
if (annihilator)
{
instance.SendEncounterUnit(EncounterFrameType.Disengage, annihilator);
annihilator.SetUnitFlag(UnitFlags.Uninteractible | UnitFlags.Immune);
annihilator.SetUninteractible(true);
annihilator.SetUnitFlag(UnitFlags.Immune);
}
}
}
@@ -46,7 +46,7 @@ namespace Scripts.EasternKingdoms.BlackrockMountain.BlackrockSpire.PyroguardEmbe
public override void Reset()
{
me.SetUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(true);
me.SetImmuneToPC(true);
_scheduler.CancelAll();
// Apply auras on spawn and reset
@@ -172,7 +172,7 @@ namespace Scripts.EasternKingdoms.BlackrockMountain.BlackrockSpire.PyroguardEmbe
me.CastSpell(me, SpellIds.EmberseerFullStrength);
Talk(TextIds.EmoteFreeOfBonds);
Talk(TextIds.YellFreeOfBonds);
me.RemoveUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(false);
me.SetImmuneToPC(false);
_scheduler.Schedule(TimeSpan.FromSeconds(2), task =>
{
@@ -204,7 +204,7 @@ namespace Scripts.EasternKingdoms.BlackrockMountain.BlackwingLair.VictorNefarius
if (summon.GetEntry() != BWLCreatureIds.Nefarian)
{
summon.UpdateEntry(CreatureIds.BoneConstruct);
summon.SetUnitFlag(UnitFlags.Uninteractible);
summon.SetUninteractible(true);
summon.SetReactState(ReactStates.Passive);
summon.SetStandState(UnitStandStateType.Dead);
}
@@ -561,7 +561,7 @@ namespace Scripts.EasternKingdoms.BlackrockMountain.BlackwingLair.VictorNefarius
{
creature.Respawn();
DoZoneInCombat(creature);
creature.RemoveUnitFlag(UnitFlags.Uninteractible);
creature.SetUninteractible(false);
creature.SetReactState(ReactStates.Aggressive);
creature.SetStandState(UnitStandStateType.Stand);
}
@@ -43,7 +43,7 @@ namespace Scripts.EasternKingdoms.BlackrockMountain.BlackwingLair.Vaelastrasz
Initialize();
creature.SetNpcFlag(NPCFlags.Gossip);
creature.SetFaction((uint)FactionTemplates.Friendly);
creature.RemoveUnitFlag(UnitFlags.Uninteractible);
creature.SetUninteractible(false);
}
void Initialize()
@@ -161,7 +161,7 @@ namespace Scripts.EasternKingdoms.BlackrockMountain.MoltenCore
//Become unbanished again
me.SetReactState(ReactStates.Aggressive);
me.SetFaction((uint)FactionTemplates.Monster);
me.RemoveUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(false);
me.SetEmoteState(Emote.OneshotNone);
me.HandleEmoteCommand(Emote.OneshotEmerge);
Unit target = SelectTarget(SelectTargetMethod.Random, 0);
@@ -240,7 +240,7 @@ namespace Scripts.EasternKingdoms.BlackrockMountain.MoltenCore
//Root self
//DoCast(me, 23973);
me.SetFaction((uint)FactionTemplates.Friendly);
me.SetUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(true);
me.SetEmoteState(Emote.StateSubmerged);
me.HandleEmoteCommand(Emote.OneshotSubmerge);
instance.SetData(MCMiscConst.DataRagnarosAdds, 0);
@@ -131,7 +131,7 @@ namespace Scripts.EasternKingdoms.Karazhan.Curator
_scheduler.Schedule(TimeSpan.FromSeconds(2), task =>
{
me.SetReactState(ReactStates.Aggressive);
me.RemoveUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(false);
DoZoneInCombat();
});
}
@@ -118,7 +118,7 @@ namespace Scripts.EasternKingdoms.Karazhan.Nightbane
phase = NightbanePhases.Intro;
me.SetActive(true);
me.SetFarVisible(true);
me.RemoveUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(false);
me.GetMotionMaster().MoveAlongSplineChain(PointIds.IntroStart, SplineChainIds.IntroStart, false);
HandleTerraceDoors(false);
}
@@ -150,7 +150,7 @@ namespace Scripts.EasternKingdoms.Karazhan.EsOpera
creature.InterruptNonMeleeSpells(true);
creature.RemoveAllAuras();
creature.SetHealth(0);
creature.SetUnitFlag(UnitFlags.Uninteractible);
creature.SetUninteractible(true);
creature.GetMotionMaster().Clear();
creature.GetMotionMaster().MoveIdle();
creature.SetStandState(UnitStandStateType.Dead);
@@ -158,7 +158,7 @@ namespace Scripts.EasternKingdoms.Karazhan.EsOpera
public static void Resurrect(Creature target)
{
target.RemoveUnitFlag(UnitFlags.Uninteractible);
target.SetUninteractible(false);
target.SetFullHealth();
target.SetStandState(UnitStandStateType.Stand);
target.CastSpell(target, SpellIds.ResVisual, true);
@@ -1070,7 +1070,7 @@ namespace Scripts.EasternKingdoms.Karazhan.EsOpera
Creature Romulo = ObjectAccessor.GetCreature(me, RomuloGUID);
if (Romulo)
{
Romulo.RemoveUnitFlag(UnitFlags.Uninteractible);
Romulo.SetUninteractible(false);
Romulo.GetMotionMaster().Clear();
Romulo.SetDeathState(DeathState.JustDied);
Romulo.CombatStop(true);
@@ -1320,7 +1320,7 @@ namespace Scripts.EasternKingdoms.Karazhan.EsOpera
Creature Julianne = ObjectAccessor.GetCreature(me, JulianneGUID);
if (Julianne)
{
Julianne.RemoveUnitFlag(UnitFlags.Uninteractible);
Julianne.SetUninteractible(false);
Julianne.GetMotionMaster().Clear();
Julianne.SetDeathState(DeathState.JustDied);
Julianne.CombatStop(true);
@@ -89,7 +89,7 @@ namespace Scripts.EasternKingdoms.Karazhan.PrinceMalchezaar
if (spellInfo.Id == SpellIds.InfernalRelay)
{
me.SetDisplayId(me.GetNativeDisplayId());
me.SetUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(true);
_scheduler.Schedule(TimeSpan.FromSeconds(4), task => DoCast(me, SpellIds.Hellfire));
_scheduler.Schedule(TimeSpan.FromSeconds(170), task =>
@@ -402,7 +402,7 @@ namespace Scripts.EasternKingdoms.Karazhan.PrinceMalchezaar
Creature axe = me.SummonCreature(MiscConst.MalchezarsAxe, me.GetPositionX(), me.GetPositionY(), me.GetPositionZ(), 0, TempSummonType.TimedDespawnOutOfCombat, TimeSpan.FromSeconds(1));
if (axe)
{
axe.SetUnitFlag(UnitFlags.Uninteractible);
axe.SetUninteractible(true);
axe.SetFaction(me.GetFaction());
axes[i] = axe.GetGUID();
if (target)
@@ -378,7 +378,7 @@ namespace Scripts.EasternKingdoms.MagistersTerrace.FelbloodKaelthas
me.AttackStop();
me.SetReactState(ReactStates.Passive);
me.RemoveAllAuras();
me.SetUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(true);
DoCastSelf(SpellIds.EmberBlast);
// DoCastSelf(SpellSummonPhoenixEgg); -- We do a manual summon for now. Feel free to move it to spelleffect_dbc
Creature egg = DoSummon(CreatureIds.PhoenixEgg, me.GetPosition(), TimeSpan.FromSeconds(0));
@@ -407,7 +407,7 @@ namespace Scripts.EasternKingdoms.MagistersTerrace.FelbloodKaelthas
_isInEgg = false;
DoCastSelf(SpellIds.FullHeal);
DoCastSelf(SpellIds.Burn);
me.RemoveUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(false);
engageTask.Schedule(TimeSpan.FromSeconds(2), task => me.SetReactState(ReactStates.Aggressive));
});
});
@@ -139,7 +139,7 @@ namespace Scripts.EasternKingdoms.MagistersTerrace.SelinFireheart
Unit CrystalChosen = Global.ObjAccessor.GetUnit(me, CrystalGUID);
if (CrystalChosen != null && CrystalChosen.IsAlive())
{
CrystalChosen.RemoveUnitFlag(UnitFlags.Uninteractible);
CrystalChosen.SetUninteractible(false);
CrystalChosen.CastSpell(me, SpellIds.ManaRage, true);
_events.ScheduleEvent(EventIds.Empower, TimeSpan.FromSeconds(10), PhaseIds.Drain);
}
+6 -2
View File
@@ -1916,7 +1916,9 @@ namespace Scripts.Spells.Generic
Unit target = GetTarget();
target.SetUnitFlag3(UnitFlags3.FakeDead);
target.SetUnitFlag2(UnitFlags2.FeignDeath);
target.SetUnitFlag(UnitFlags.PreventEmotesFromChatText | UnitFlags.ImmuneToPc | UnitFlags.ImmuneToNpc | UnitFlags.Uninteractible);
target.SetUnitFlag(UnitFlags.PreventEmotesFromChatText);
target.SetImmuneToAll(true);
target.SetUninteractible(true);
target.ToCreature()?.SetReactState(ReactStates.Passive);
}
@@ -1926,7 +1928,9 @@ namespace Scripts.Spells.Generic
Unit target = GetTarget();
target.RemoveUnitFlag3(UnitFlags3.FakeDead);
target.RemoveUnitFlag2(UnitFlags2.FeignDeath);
target.RemoveUnitFlag(UnitFlags.PreventEmotesFromChatText | UnitFlags.ImmuneToPc | UnitFlags.ImmuneToNpc | UnitFlags.Uninteractible);
target.RemoveUnitFlag(UnitFlags.PreventEmotesFromChatText);
target.SetImmuneToAll(false);
target.SetUninteractible(false);
target.ToCreature()?.InitializeReactState();
}
+6 -3
View File
@@ -87,7 +87,8 @@ namespace Scripts.World.EmeraldDragons
public override void Reset()
{
base.Reset();
me.RemoveUnitFlag(UnitFlags.Uninteractible | UnitFlags.NonAttackable);
me.RemoveUnitFlag(UnitFlags.NonAttackable);
me.SetUninteractible(false);
me.SetReactState(ReactStates.Aggressive);
DoCast(me, SpellIds.MarkOfNatureAura, new CastSpellExtraArgs(true));
@@ -439,7 +440,8 @@ namespace Scripts.World.EmeraldDragons
_shades += (byte)SpellIds.TaerarShadeSpells.Length;
DoCast(SpellIds.Shade);
me.SetUnitFlag(UnitFlags.Uninteractible | UnitFlags.NonAttackable);
me.SetUnitFlag(UnitFlags.NonAttackable);
me.SetUninteractible(true);
me.SetReactState(ReactStates.Passive);
++_stage;
@@ -458,7 +460,8 @@ namespace Scripts.World.EmeraldDragons
{
_banished = false;
me.RemoveUnitFlag(UnitFlags.Uninteractible | UnitFlags.NonAttackable);
me.RemoveUnitFlag(UnitFlags.NonAttackable);
me.SetUninteractible(false);
me.RemoveAurasDueToSpell(SpellIds.Shade);
me.SetReactState(ReactStates.Aggressive);
}
+5 -5
View File
@@ -779,7 +779,7 @@ namespace Scripts.World.NpcSpecial
public override void Reset()
{
Initialize();
me.RemoveUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(false);
}
public void BeginEvent(Player player)
@@ -804,7 +804,7 @@ namespace Scripts.World.NpcSpecial
}
Event = true;
me.SetUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(true);
}
public void PatientDied(Position point)
@@ -961,7 +961,7 @@ namespace Scripts.World.NpcSpecial
Initialize();
//no select
me.RemoveUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(false);
//no regen health
me.SetUnitFlag(UnitFlags.InCombat);
@@ -1007,7 +1007,7 @@ namespace Scripts.World.NpcSpecial
}
//make not selectable
me.SetUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(true);
//regen health
me.RemoveUnitFlag(UnitFlags.InCombat);
@@ -1044,7 +1044,7 @@ namespace Scripts.World.NpcSpecial
if (me.IsAlive() && me.GetHealth() <= 6)
{
me.RemoveUnitFlag(UnitFlags.InCombat);
me.SetUnitFlag(UnitFlags.Uninteractible);
me.SetUninteractible(true);
me.SetDeathState(DeathState.JustDied);
me.SetUnitFlag3(UnitFlags3.FakeDead);