refactor(Core/Unit): PC&NPC Immunity (#11986)

* initial

* refactor(Core/Unit): PC & NPC Immunities

Cherry-pick TC: 74af880217

Co-authored-by: Treeston <treeston.nmoc@gmail.com>

* fix builds error

Cherry-pick TC: 74af880217

Co-authored-by: Treeston <treeston.nmoc@gmail.com>

* Fix nef combat, and replace SetFlag by SetUnitFlag

* fix combat with jedoga

Co-authored-by: Treeston <treeston.nmoc@gmail.com>
This commit is contained in:
Maelthyr
2022-06-18 14:16:45 +02:00
committed by GitHub
parent 4bc99f8070
commit d928d8d96a
88 changed files with 450 additions and 328 deletions

View File

@@ -92,7 +92,7 @@ public:
ScriptedAI::InitializeAI();
me->SetReactState(REACT_PASSIVE);
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(true);
events2.Reset();
events2.ScheduleEvent(EVENT_TELEPORT_VISUAL, 0);
events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO1, 3000);
@@ -174,7 +174,7 @@ public:
case EVENT_MILLHOUSE_INTRO9:
me->SetFacingTo(M_PI * 1.5f);
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), M_PI * 1.5f);
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(false);
me->SetReactState(REACT_AGGRESSIVE);
events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1000);
break;
@@ -365,7 +365,7 @@ public:
{
_Reset();
me->setActive(false);
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(false);
me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD);
me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
me->CastSpell((Unit*)nullptr, SPELL_TARGET_OMEGA, false);
@@ -379,7 +379,7 @@ public:
{
me->setActive(true);
me->InterruptNonMeleeSpells(false);
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(true);
events.ScheduleEvent(EVENT_WARDEN_INTRO1, 1500);
events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1000);
instance->SetBossState(DATA_WARDEN_MELLICHAR, IN_PROGRESS);
@@ -535,7 +535,7 @@ public:
case EVENT_WARDEN_INTRO25:
if (Creature* cr = me->SummonCreature(NPC_HARBINGER_SKYRISS, 445.763f, -191.639f, 44.64f, 1.60f, TEMPSUMMON_MANUAL_DESPAWN))
{
cr->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
cr->SetImmuneToAll(true);
cr->CastSpell(cr, SPELL_TELEPORT_VISUAL, true);
}
events.ScheduleEvent(EVENT_WARDEN_INTRO26, 1000);
@@ -562,7 +562,7 @@ public:
me->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH);
if (Creature* creature = summons.GetCreatureWithEntry(NPC_HARBINGER_SKYRISS))
{
creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
creature->SetImmuneToAll(false);
if (Player* player = SelectTargetFromPlayerList(50.0f))
AttackStart(player);
}

View File

@@ -66,14 +66,14 @@ public:
{
_Reset();
events2.Reset();
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(false);
}
void InitializeAI() override
{
BossAI::InitializeAI();
if (instance->GetBossState(DATA_SOCCOTHRATES) != DONE)
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(true);
}
void JustDied(Unit* /*killer*/) override

View File

@@ -75,7 +75,7 @@ public:
{
events.Reset();
summons.DespawnAll();
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(false);
}
void EnterCombat(Unit* /*who*/) override

View File

@@ -87,14 +87,14 @@ public:
_Reset();
events2.Reset();
me->CastSpell(me, SPELL_FEL_IMMOLATION, true);
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(false);
}
void InitializeAI() override
{
BossAI::InitializeAI();
if (!preFight)
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(true);
}
void JustDied(Unit* /*killer*/) override
@@ -185,9 +185,9 @@ public:
if (Creature* dalliah = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_DALLIAH)))
{
dalliah->SetFacingToObject(me);
dalliah->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
dalliah->SetImmuneToAll(false);
me->SetFacingToObject(dalliah);
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetImmuneToAll(false);
dalliah->SetHomePosition(dalliah->GetPositionX(), dalliah->GetPositionY(), dalliah->GetPositionZ(), 1.51737f);
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 4.725722f);
}