diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 27684e4ad..25152b05b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -158,7 +158,7 @@ public: me->getThreatMgr().clearReferences(); me->SetRegeneratingHealth(false); _EnterEvadeMode(); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( pInstance ) pInstance->SetData(BOSS_ARGENT_CHALLENGE, DONE); } @@ -305,7 +305,7 @@ public: me->getThreatMgr().clearReferences(); me->SetRegeneratingHealth(false); _EnterEvadeMode(); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( pInstance ) { pInstance->SetData(BOSS_ARGENT_CHALLENGE, DONE); @@ -404,6 +404,7 @@ 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); events.ScheduleEvent(EVENT_MEMORY_SCALE, 500); } @@ -439,7 +440,7 @@ public: break; case EVENT_MEMORY_START_ATTACK: - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( Unit* target = me->SelectNearestTarget(200.0f) ) { AttackStart(target); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index 887d3555b..de57f2891 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -120,7 +120,7 @@ public: summons.DespawnAll(); Phase = 1; me->SetDisplayId(me->GetNativeDisplayId()); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->SetReactState(REACT_PASSIVE); if( pInstance ) pInstance->SetData(BOSS_BLACK_KNIGHT, NOT_STARTED); @@ -193,7 +193,7 @@ public: { case SPELL_BLACK_KNIGHT_RES: me->SetHealth(me->GetMaxHealth()); - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->SetControlled(false, UNIT_STATE_STUNNED); me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT); @@ -342,6 +342,7 @@ 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); } void DoAction(int32 param) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index ee9f9f644..5bee3c218 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -361,7 +361,6 @@ public: BossOrder = 0; NewMountGUID.Clear(); me->CastSpell(me, SPELL_BOSS_DEFEND_PERIODIC, true); - me->SetUnitFlag(UNIT_FLAG_PACIFIED); events.Reset(); events.ScheduleEvent(EVENT_MOUNT_CHARGE, urand(2500, 4000)); @@ -401,7 +400,7 @@ public: { DoAction(1); DoAction(2); - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); me->SetReactState(REACT_AGGRESSIVE); } @@ -489,7 +488,7 @@ public: me->SetRegeneratingHealth(true); me->RemoveUnitFlag(UNIT_FLAG_PACIFIED); me->SetSpeed(MOVE_RUN, 1.0f, false); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); me->RemoveAllAuras(); AddCreatureAddonAuras(); @@ -557,7 +556,7 @@ public: me->StopMoving(); me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); me->SetRegeneratingHealth(false); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); if( pInstance ) { @@ -575,6 +574,7 @@ public: { if( damage >= me->GetHealth() ) { + MountPhase = true; events.Reset(); damage = me->GetHealth() - 1; me->SetReactState(REACT_PASSIVE); @@ -584,7 +584,7 @@ public: me->CombatStop(true); me->GetMotionMaster()->Clear(); me->SetRegeneratingHealth(false); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( pInstance ) pInstance->SetData(DATA_GRAND_CHAMPION_DIED, BossOrder); } @@ -627,7 +627,7 @@ 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); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( Unit* target = me->SelectNearestTarget(200.0f) ) AttackStart(target); DoZoneInCombat(); @@ -720,7 +720,7 @@ public: { me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); NewMountGUID = mount->GetGUID(); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); me->GetMotionMaster()->MovePoint(7, *mount); events.RepeatEvent(200); break; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index c1c8d8dc6..bbbafa9df 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -156,6 +156,7 @@ public: // Coliseum Announcer: case NPC_JAEREN: + case NPC_ARELAS: NPC_AnnouncerGUID = creature->GetGUID(); //if( TeamIdInInstance == TEAM_ALLIANCE ) // creature->UpdateEntry(NPC_ARELAS); @@ -731,17 +732,19 @@ public: if( Creature* pBoss = instance->SummonCreature(CHAMPION_TO_SUMMON, SpawnPos) ) { NPC_GrandChampionGUID[BossOrder] = pBoss->GetGUID(); - pBoss->ToCreature()->SetHomePosition(748.309f, 619.448f, 411.3f, M_PI / 2); 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->ToCreature()->SetHomePosition(748.309f, 619.448f, 411.3f, M_PI / 2); pBoss->AI()->SetData(BossOrder, (shortver ? 1 : 0)); for( uint8 i = 0; i < 3; ++i ) if( Creature* pAdd = instance->SummonCreature(MINION_TO_SUMMON, SpawnPos) ) { 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->SetHomePosition(748.309f, 619.448f, 411.3f, M_PI / 2); pAdd->GetMotionMaster()->MoveFollow(pBoss, 2.0f, (i + 1)*M_PI / 2); - pAdd->SetReactState(REACT_PASSIVE); } } @@ -836,7 +839,7 @@ public: if( Creature* c = instance->GetCreature(NPC_GrandChampionMinionsGUID[1][i]) ) { c->SetReactState(REACT_AGGRESSIVE); - c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( Unit* target = c->SelectNearestTarget(200.0f) ) c->AI()->AttackStart(target); c->AI()->DoZoneInCombat(); @@ -862,7 +865,7 @@ public: if( Creature* c = instance->GetCreature(NPC_GrandChampionMinionsGUID[0][i]) ) { c->SetReactState(REACT_AGGRESSIVE); - c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( Unit* target = c->SelectNearestTarget(200.0f) ) c->AI()->AttackStart(target); c->AI()->DoZoneInCombat(); @@ -887,7 +890,7 @@ public: if( Creature* c = instance->GetCreature(NPC_GrandChampionMinionsGUID[2][i]) ) { c->SetReactState(REACT_AGGRESSIVE); - c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( Unit* target = c->SelectNearestTarget(200.0f) ) c->AI()->AttackStart(target); c->AI()->DoZoneInCombat(); @@ -912,7 +915,7 @@ public: if( Creature* c = instance->GetCreature(NPC_GrandChampionGUID[i]) ) { c->SetReactState(REACT_AGGRESSIVE); - c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( Unit* target = c->SelectNearestTarget(200.0f) ) c->AI()->AttackStart(target); c->AI()->DoZoneInCombat(); @@ -949,7 +952,7 @@ public: if( Creature* c = instance->GetCreature(NPC_GrandChampionGUID[i]) ) { c->SetReactState(REACT_AGGRESSIVE); - c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( Unit* target = c->SelectNearestTarget(200.0f) ) c->AI()->AttackStart(target); c->AI()->DoZoneInCombat(); @@ -1053,7 +1056,7 @@ public: if( Creature* c = instance->GetCreature(NPC_ArgentSoldierGUID[i][j]) ) { c->SetReactState(REACT_AGGRESSIVE); - c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + c->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); //c->AI()->DoZoneInCombat(); } if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) ) @@ -1074,7 +1077,7 @@ public: if( Creature* boss = instance->GetCreature(NPC_ArgentChampionGUID) ) { boss->SetReactState(REACT_AGGRESSIVE); - boss->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + boss->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); if( Unit* target = boss->SelectNearestTarget(200.0f) ) boss->AI()->AttackStart(target); boss->AI()->DoZoneInCombat();