mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-29 00:23:48 +00:00
refactor(Core/Unit): PC&NPC Immunity (#11986)
* initial * refactor(Core/Unit): PC & NPC Immunities Cherry-pick TC:74af880217Co-authored-by: Treeston <treeston.nmoc@gmail.com> * fix builds error Cherry-pick TC:74af880217Co-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:
@@ -58,7 +58,8 @@ public:
|
||||
events.Reset();
|
||||
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
canAttack = false;
|
||||
|
||||
if (instance)
|
||||
@@ -130,7 +131,8 @@ public:
|
||||
events.ScheduleEvent(EVENT_SPELL_BOLT, 7000);
|
||||
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
canAttack = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -93,7 +93,8 @@ public:
|
||||
ApplyImmunities(true);
|
||||
SummonChannelers();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
if (instance)
|
||||
instance->SetData(DATA_KELIDAN, NOT_STARTED);
|
||||
}
|
||||
@@ -143,7 +144,8 @@ public:
|
||||
return;
|
||||
}
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
if (Unit* target = me->SelectNearestPlayer(100.0f))
|
||||
AttackStart(target);
|
||||
}
|
||||
|
||||
@@ -240,7 +240,8 @@ public:
|
||||
{
|
||||
if (!prisoner->IsAlive())
|
||||
prisoner->Respawn(true);
|
||||
prisoner->SetUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
|
||||
prisoner->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
prisoner->SetImmuneToAll(true);
|
||||
}
|
||||
|
||||
void StorePrisoner(Creature* creature)
|
||||
@@ -316,7 +317,8 @@ public:
|
||||
for (ObjectGuid const& guid : prisoners)
|
||||
if (Creature* prisoner = instance->GetCreature(guid))
|
||||
{
|
||||
prisoner->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
|
||||
prisoner->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
prisoner->SetImmuneToAll(false);
|
||||
prisoner->SetInCombatWithZone();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +114,8 @@ public:
|
||||
_Reset();
|
||||
me->CastSpell(me, SPELL_SHADOW_CAGE, true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToPC(true);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
@@ -184,7 +185,8 @@ public:
|
||||
Talk(SAY_FREE);
|
||||
break;
|
||||
case EVENT_ENTER_COMBAT:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetImmuneToPC(false);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 9000);
|
||||
events.ScheduleEvent(EVENT_BLAST_NOVA, 60000);
|
||||
|
||||
Reference in New Issue
Block a user