mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-02-15 00:06:11 +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:
@@ -158,7 +158,8 @@ public:
|
||||
me->GetThreatMgr().clearReferences();
|
||||
me->SetRegeneratingHealth(false);
|
||||
_EnterEvadeMode();
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
if( pInstance )
|
||||
pInstance->SetData(BOSS_ARGENT_CHALLENGE, DONE);
|
||||
}
|
||||
@@ -305,7 +306,8 @@ public:
|
||||
me->GetThreatMgr().clearReferences();
|
||||
me->SetRegeneratingHealth(false);
|
||||
_EnterEvadeMode();
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
if( pInstance )
|
||||
{
|
||||
pInstance->SetData(BOSS_ARGENT_CHALLENGE, DONE);
|
||||
@@ -404,7 +406,8 @@ public:
|
||||
events.Reset();
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetObjectScale(0.01f);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
events.ScheduleEvent(EVENT_MEMORY_SCALE, 500);
|
||||
}
|
||||
|
||||
@@ -440,7 +443,8 @@ public:
|
||||
|
||||
break;
|
||||
case EVENT_MEMORY_START_ATTACK:
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
if( Unit* target = me->SelectNearestTarget(200.0f) )
|
||||
{
|
||||
AttackStart(target);
|
||||
|
||||
@@ -120,7 +120,8 @@ public:
|
||||
summons.DespawnAll();
|
||||
Phase = 1;
|
||||
me->SetDisplayId(me->GetNativeDisplayId());
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
if( pInstance )
|
||||
pInstance->SetData(BOSS_BLACK_KNIGHT, NOT_STARTED);
|
||||
@@ -193,7 +194,8 @@ public:
|
||||
{
|
||||
case SPELL_BLACK_KNIGHT_RES:
|
||||
me->SetHealth(me->GetMaxHealth());
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetControlled(false, UNIT_STATE_STUNNED);
|
||||
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||
@@ -342,7 +344,8 @@ public:
|
||||
{
|
||||
Start(false, true, ObjectGuid::Empty, nullptr);
|
||||
SetDespawnAtEnd(true);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
}
|
||||
|
||||
void DoAction(int32 param) override
|
||||
|
||||
@@ -400,7 +400,8 @@ public:
|
||||
{
|
||||
DoAction(1);
|
||||
DoAction(2);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
}
|
||||
@@ -488,7 +489,8 @@ public:
|
||||
me->SetRegeneratingHealth(true);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_PACIFIED);
|
||||
me->SetSpeed(MOVE_RUN, 1.0f, false);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
me->RemoveAllAuras();
|
||||
AddCreatureAddonAuras();
|
||||
@@ -556,7 +558,8 @@ public:
|
||||
me->StopMoving();
|
||||
me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
|
||||
me->SetRegeneratingHealth(false);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
if( pInstance )
|
||||
{
|
||||
@@ -584,7 +587,8 @@ public:
|
||||
me->CombatStop(true);
|
||||
me->GetMotionMaster()->Clear();
|
||||
me->SetRegeneratingHealth(false);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
if( pInstance )
|
||||
pInstance->SetData(DATA_GRAND_CHAMPION_DIED, BossOrder);
|
||||
}
|
||||
@@ -627,7 +631,8 @@ public:
|
||||
events.ScheduleEvent(EVENT_SHIELD_BREAKER, urand(5000, 8000));
|
||||
events.ScheduleEvent(EVENT_THRUST, urand(3000, 5000));
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(false);
|
||||
if( Unit* target = me->SelectNearestTarget(200.0f) )
|
||||
AttackStart(target);
|
||||
DoZoneInCombat();
|
||||
@@ -720,7 +725,8 @@ public:
|
||||
{
|
||||
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||
NewMountGUID = mount->GetGUID();
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetImmuneToAll(true);
|
||||
me->GetMotionMaster()->MovePoint(7, *mount);
|
||||
events.RepeatEvent(200);
|
||||
break;
|
||||
|
||||
@@ -733,7 +733,8 @@ public:
|
||||
{
|
||||
NPC_GrandChampionGUID[BossOrder] = pBoss->GetGUID();
|
||||
pBoss->ToCreature()->SetReactState(REACT_PASSIVE);
|
||||
pBoss->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_PACIFIED);
|
||||
pBoss->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED);
|
||||
pBoss->SetImmuneToAll(true);
|
||||
pBoss->ToCreature()->SetHomePosition(748.309f, 619.448f, 411.3f, M_PI / 2);
|
||||
pBoss->AI()->SetData(BossOrder, (shortver ? 1 : 0));
|
||||
|
||||
@@ -742,7 +743,8 @@ public:
|
||||
{
|
||||
NPC_GrandChampionMinionsGUID[BossOrder][i] = pAdd->GetGUID();
|
||||
pAdd->SetReactState(REACT_PASSIVE);
|
||||
pAdd->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
pAdd->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
pAdd->SetImmuneToAll(true);
|
||||
pAdd->SetHomePosition(748.309f, 619.448f, 411.3f, M_PI / 2);
|
||||
pAdd->GetMotionMaster()->MoveFollow(pBoss, 2.0f, (i + 1)*M_PI / 2);
|
||||
}
|
||||
@@ -839,7 +841,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionMinionsGUID[1][i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -865,7 +868,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionMinionsGUID[0][i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -890,7 +894,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionMinionsGUID[2][i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -915,7 +920,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionGUID[i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -952,7 +958,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_GrandChampionGUID[i]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
if( Unit* target = c->SelectNearestTarget(200.0f) )
|
||||
c->AI()->AttackStart(target);
|
||||
c->AI()->DoZoneInCombat();
|
||||
@@ -1056,7 +1063,8 @@ public:
|
||||
if( Creature* c = instance->GetCreature(NPC_ArgentSoldierGUID[i][j]) )
|
||||
{
|
||||
c->SetReactState(REACT_AGGRESSIVE);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
c->SetImmuneToAll(false);
|
||||
//c->AI()->DoZoneInCombat();
|
||||
}
|
||||
if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) )
|
||||
@@ -1077,7 +1085,8 @@ public:
|
||||
if( Creature* boss = instance->GetCreature(NPC_ArgentChampionGUID) )
|
||||
{
|
||||
boss->SetReactState(REACT_AGGRESSIVE);
|
||||
boss->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
boss->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
boss->SetImmuneToAll(false);
|
||||
if( Unit* target = boss->SelectNearestTarget(200.0f) )
|
||||
boss->AI()->AttackStart(target);
|
||||
boss->AI()->DoZoneInCombat();
|
||||
|
||||
Reference in New Issue
Block a user