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

@@ -377,7 +377,7 @@ public:
events.Reset();
summons.DespawnAll();
me->SetReactState(REACT_PASSIVE);
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetImmuneToPC(false);
me->SetSheath(SHEATH_STATE_UNARMED);
me->SetFaction(190);
me->CastSpell(me, SPELL_DUAL_WIELD, true);
@@ -403,7 +403,7 @@ public:
{
case ACTION_START_INTRO:
{
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetImmuneToPC(true);
me->SetUnitFlag2(UNIT_FLAG2_DO_NOT_FADE_IN);
me->SetDisableGravity(true);
me->CastSpell(me, SPELL_ARRIVAL, true);
@@ -446,7 +446,7 @@ public:
case ACTION_INIT_ALGALON:
_firstPull = false;
_fedOnTears = false;
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetImmuneToPC(false);
break;
case ACTION_ASCEND:
summons.DespawnAll();
@@ -477,7 +477,8 @@ public:
uint32 introDelay = 0;
me->setActive(true);
me->SetInCombatWithZone();
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetImmuneToNPC(true);
events.Reset();
events.SetPhase(PHASE_ROLE_PLAY);
@@ -649,7 +650,7 @@ public:
break;
case EVENT_INTRO_FINISH:
events.Reset();
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
me->SetImmuneToPC(false);
if (Creature* brann = ObjectAccessor::GetCreature(*me, m_pInstance->GetGuidData(NPC_BRANN_BRONZBEARD_ALG)))
brann->AI()->DoAction(ACTION_FINISH_INTRO);
break;
@@ -659,7 +660,8 @@ public:
break;
case EVENT_REMOVE_UNNATTACKABLE:
me->SetSheath(SHEATH_STATE_MELEE);
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC);
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetImmuneToNPC(false);
break;
case EVENT_INTRO_TIMER_DONE:
events.SetPhase(PHASE_NORMAL);
@@ -985,7 +987,8 @@ public:
{
case ACTION_ACTIVATE_STAR:
me->SetReactState(REACT_AGGRESSIVE);
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
me->SetImmuneToAll(false);
_isActive = true;
if (Player* target = SelectTargetFromPlayerList(250.0f))

View File

@@ -770,7 +770,8 @@ public:
}
else
{
turret->ReplaceAllUnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
turret->ReplaceAllUnitFlags(UNIT_FLAG_NOT_SELECTABLE);
turret->SetImmuneToAll(true);
if (turret->GetTypeId() == TYPEID_UNIT)
turret->ToCreature()->AI()->EnterEvadeMode();
}

View File

@@ -185,7 +185,7 @@ public:
else // if (m_algalonTimer = TIMER_ALGALON_TO_SUMMON)
{
m_algalonTimer = TIMER_ALGALON_SUMMONED;
algalon->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
algalon->SetImmuneToPC(false);
}
}
}