diff options
Diffstat (limited to 'src')
5 files changed, 176 insertions, 51 deletions
diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h b/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h index ccd96ef81d2..f9201944cfe 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h +++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/blackrock_spire.h @@ -69,8 +69,7 @@ enum CreaturesIds NPC_BLACKHAND_SUMMONER = 9818, NPC_BLACKHAND_VETERAN = 9819, NPC_BLACKHAND_INCARCERATOR = 10316, - NPC_LORD_VICTOR_NEFARIUS = 10162, - NPC_REND_BLACKHAND = 10429 + NPC_LORD_VICTOR_NEFARIUS = 10162 }; enum AdditionalData @@ -111,7 +110,9 @@ enum GameObjectsIds GO_EMBERSEER_RUNE_6 = 175271, GO_EMBERSEER_RUNE_7 = 175272, // For Gyth event - GO_DR_PORTCULLIS = 175185 + GO_DR_PORTCULLIS = 175185, + GO_PORTCULLIS_ACTIVE = 164726, + GO_PORTCULLIS_TOBOSSROOMS = 175186 }; #endif diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp index 3c79a08487c..f20798d64fb 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_gyth.cpp @@ -42,7 +42,8 @@ enum Events EVENT_FREEZE = 2, EVENT_FLAME_BREATH = 3, EVENT_KNOCK_AWAY = 4, - EVENT_SUMMONED = 5, + EVENT_SUMMONED_1 = 5, + EVENT_SUMMONED_2 = 6 }; class boss_gyth : public CreatureScript @@ -58,7 +59,6 @@ public: void Reset() { - _Reset(); SummonedRend = false; if (instance->GetBossState(DATA_GYTH) == IN_PROGRESS) { @@ -79,7 +79,7 @@ public: void JustDied(Unit* /*killer*/) { - _JustDied(); + instance->SetBossState(DATA_GYTH, DONE); } void SetData(uint32 /*type*/, uint32 data) @@ -87,7 +87,7 @@ public: switch (data) { case 1: - events.ScheduleEvent(EVENT_SUMMONED, 1000); + events.ScheduleEvent(EVENT_SUMMONED_1, 1000); break; default: break; @@ -99,7 +99,7 @@ public: if (!SummonedRend && HealthBelowPct(5)) { - DoCast(me, SPELL_SUMMON_REND); // Rend will despawn on Gyth death. Core issue with summoned npc's all despawning after summoner dies. + DoCast(me, SPELL_SUMMON_REND); me->RemoveAura(SPELL_REND_MOUNTS); SummonedRend = true; } @@ -112,13 +112,18 @@ public: { switch (eventId) { - case EVENT_SUMMONED: + case EVENT_SUMMONED_1: me->AddAura(SPELL_REND_MOUNTS, me); - me->GetMotionMaster()->MovePath(GYTH_PATH_1, false); - if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 25.0f)) + if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 40.0f)) portcullis->UseDoorOrButton(); if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true)) - victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_2, false); + victor->AI()->SetData(1, 1); + events.ScheduleEvent(EVENT_SUMMONED_2, 2000); + break; + case EVENT_SUMMONED_2: + me->GetMotionMaster()->MovePath(GYTH_PATH_1, false); + break; + default: break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp index b989e03a8a1..eca24289945 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/boss_rend_blackhand.cpp @@ -176,15 +176,16 @@ public: void EnterCombat(Unit* /*who*/) { _EnterCombat(); - events.ScheduleEvent(EVENT_WHIRLWIND, 13000); - events.ScheduleEvent(EVENT_CLEAVE, 15000); - events.ScheduleEvent(EVENT_MORTAL_STRIKE, 17000); + events.ScheduleEvent(EVENT_WHIRLWIND, urand (13000, 15000)); + events.ScheduleEvent(EVENT_CLEAVE, urand (15000, 17000)); + events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand (17000, 19000)); } void JustDied(Unit* /*killer*/) { _JustDied(); - // Do data set on victor + if (Creature* victor = me->FindNearestCreature(NPC_LORD_VICTOR_NEFARIUS, 75.0f, true)) + victor->AI()->SetData(1, 2); } void SetData(uint32 type, uint32 data) @@ -348,8 +349,6 @@ public: victor->GetMotionMaster()->MovePath(NEFARIUS_PATH_1, true); break; case EVENT_PATH_REND: - // path to gyth and spawn gyth. - // after despawn gyth fight will start me->GetMotionMaster()->MovePath(REND_PATH_1, false); break; case EVENT_TELEPORT_1: @@ -419,11 +418,11 @@ public: break; case EVENT_CLEAVE: DoCastVictim(SPELL_CLEAVE); - events.ScheduleEvent(EVENT_CLEAVE, 10000); + events.ScheduleEvent(EVENT_CLEAVE, urand(10000, 14000)); break; case EVENT_MORTAL_STRIKE: DoCastVictim(SPELL_MORTAL_STRIKE); - events.ScheduleEvent(EVENT_MORTAL_STRIKE, 16000); + events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(14000, 16000)); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp index ab462319450..e5fd69c735e 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockSpire/instance_blackrock_spire.cpp @@ -46,24 +46,27 @@ public: instance_blackrock_spireMapScript(InstanceMap* map) : InstanceScript(map) { SetBossNumber(EncounterCount); - HighlordOmokk = 0; - ShadowHunterVoshgajin = 0; - WarMasterVoone = 0; - MotherSmolderweb = 0; - UrokDoomhowl = 0; - QuartermasterZigris = 0; - GizrultheSlavener = 0; - Halycon = 0; - OverlordWyrmthalak = 0; - PyroguardEmberseer = 0; - WarchiefRendBlackhand = 0; - Gyth = 0; - TheBeast = 0; - GeneralDrakkisath = 0; - go_emberseerin = 0; - go_doors = 0; - go_emberseerout = 0; - go_blackrockaltar = 0; + HighlordOmokk = 0; + ShadowHunterVoshgajin = 0; + WarMasterVoone = 0; + MotherSmolderweb = 0; + UrokDoomhowl = 0; + QuartermasterZigris = 0; + GizrultheSlavener = 0; + Halycon = 0; + OverlordWyrmthalak = 0; + PyroguardEmberseer = 0; + WarchiefRendBlackhand = 0; + Gyth = 0; + LordVictorNefarius = 0; + TheBeast = 0; + GeneralDrakkisath = 0; + go_emberseerin = 0; + go_doors = 0; + go_emberseerout = 0; + go_blackrockaltar = 0; + go_portcullis_active = 0; + go_portcullis_tobossrooms = 0; } void OnCreatureCreate(Creature* creature) @@ -91,19 +94,21 @@ public: case NPC_GIZRUL_THE_SLAVENER: GizrultheSlavener = creature->GetGUID(); break; - case NPC_HALYCON: + case NPC_HALYCON: Halycon = creature->GetGUID(); break; - case NPC_OVERLORD_WYRMTHALAK: + case NPC_OVERLORD_WYRMTHALAK: OverlordWyrmthalak = creature->GetGUID(); break; - case NPC_PYROGAURD_EMBERSEER: + case NPC_PYROGAURD_EMBERSEER: PyroguardEmberseer = creature->GetGUID(); if (GetBossState(DATA_PYROGAURD_EMBERSEER) == DONE) creature->DisappearAndDie(); break; - case NPC_WARCHIEF_REND_BLACKHAND: + case NPC_WARCHIEF_REND_BLACKHAND: WarchiefRendBlackhand = creature->GetGUID(); + if (GetBossState(DATA_GYTH) == DONE) + creature->DisappearAndDie(); break; case NPC_GYTH: Gyth = creature->GetGUID(); @@ -114,9 +119,10 @@ public: case NPC_GENERAL_DRAKKISATH: GeneralDrakkisath = creature->GetGUID(); break; - case NPC_BLACKHAND_DREADWEAVER: - case NPC_BLACKHAND_SUMMONER: - case NPC_BLACKHAND_VETERAN: + case NPC_LORD_VICTOR_NEFARIUS: + LordVictorNefarius = creature->GetGUID(); + if (GetBossState(DATA_GYTH) == DONE) + creature->DisappearAndDie(); break; } } @@ -213,6 +219,18 @@ public: if (GetBossState(DATA_PYROGAURD_EMBERSEER) == DONE) HandleGameObject(0, false, go); break; + case GO_PORTCULLIS_ACTIVE: + go_portcullis_active = go->GetGUID(); + if (GetBossState(DATA_GYTH) == DONE) + HandleGameObject(0, true, go); + break; + case GO_PORTCULLIS_TOBOSSROOMS: + go_portcullis_tobossrooms = go->GetGUID(); + if (GetBossState(DATA_GYTH) == DONE) + HandleGameObject(0, true, go); + break; + default: + break; } } @@ -374,6 +392,12 @@ public: case GO_EMBERSEER_RUNE_7: return go_emberseerrunes[6]; break; + case GO_PORTCULLIS_ACTIVE: + return go_portcullis_active; + break; + case GO_PORTCULLIS_TOBOSSROOMS: + return go_portcullis_tobossrooms; + break; } return 0; } @@ -554,6 +578,7 @@ public: uint64 PyroguardEmberseer; uint64 WarchiefRendBlackhand; uint64 Gyth; + uint64 LordVictorNefarius; uint64 TheBeast; uint64 GeneralDrakkisath; uint64 go_emberseerin; @@ -563,6 +588,8 @@ public: uint64 go_roomrunes[7]; uint64 go_emberseerrunes[7]; uint64 runecreaturelist[7][5]; + uint64 go_portcullis_active; + uint64 go_portcullis_tobossrooms; }; InstanceScript* GetInstanceScript(InstanceMap* map) const @@ -612,7 +639,7 @@ public: if (!instance) return false; - if (Creature* rend = player->FindNearestCreature(NPC_REND_BLACKHAND, 50.0f)) + if (Creature* rend = player->FindNearestCreature(NPC_WARCHIEF_REND_BLACKHAND, 50.0f)) { rend->AI()->SetData(AREATRIGGER, AREATRIGGER_BLACKROCK_STADIUM); return true; diff --git a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp index fde21c63840..6f90f61f420 100644 --- a/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackwingLair/boss_nefarian.cpp @@ -34,14 +34,28 @@ enum Events EVENT_VEILOFSHADOW = 6, EVENT_CLEAVE = 7, EVENT_TAILLASH = 8, - EVENT_CLASSCALL = 9 + EVENT_CLASSCALL = 9, + // UBRS + EVENT_CHAOS_1 = 10, + EVENT_CHAOS_2 = 11, + EVENT_PATH_2 = 12, + EVENT_PATH_3 = 13, + EVENT_SUCCESS_1 = 14, + EVENT_SUCCESS_2 = 15, + EVENT_SUCCESS_3 = 16, }; enum Says { - SAY_GAMESBEGIN_1 = 11, - SAY_GAMESBEGIN_2 = 12, - // SAY_VAEL_INTRO = 13, Not used - when he corrupts Vaelastrasz + // Nefarius + // UBRS + SAY_CHAOS_SPELL = 9, + SAY_SUCCESS = 10, + SAY_FAILURE = 11, + // BWL + SAY_GAMESBEGIN_1 = 12, + SAY_GAMESBEGIN_2 = 13, + // SAY_VAEL_INTRO = 14, Not used - when he corrupts Vaelastrasz // Nefarian SAY_RANDOM = 0, @@ -67,6 +81,18 @@ enum Gossip GOSSIP_OPTION_ID = 0 }; +enum Paths +{ + NEFARIUS_PATH_2 = 1379671, + NEFARIUS_PATH_3 = 1379672 +}; + +enum GameObjects +{ + GO_PORTCULLIS_ACTIVE = 164726, + GO_PORTCULLIS_TOBOSSROOMS = 175186 +}; + enum Creatures { NPC_BRONZE_DRAKANOID = 14263, @@ -75,7 +101,9 @@ enum Creatures NPC_GREEN_DRAKANOID = 14262, NPC_BLACK_DRAKANOID = 14265, NPC_CHROMATIC_DRAKANOID = 14302, - NPC_BONE_CONSTRUCT = 14605 + NPC_BONE_CONSTRUCT = 14605, + // UBRS + NPC_GYTH = 10339 }; enum Spells @@ -192,8 +220,73 @@ public: void JustSummoned(Creature* /*summon*/) {} + void SetData(uint32 type, uint32 data) + { + if (instance && type == 1 && data == 1) + { + me->StopMoving(); + events.ScheduleEvent(EVENT_PATH_2, 9000); + } + + if (instance && type == 1 && data == 2) + { + events.ScheduleEvent(EVENT_SUCCESS_1, 5000); + } + } + void UpdateAI(uint32 diff) { + if (!UpdateVictim()) + { + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_PATH_2: + me->GetMotionMaster()->MovePath(NEFARIUS_PATH_2, false); + events.ScheduleEvent(EVENT_CHAOS_1, 7000); + break; + case EVENT_CHAOS_1: + if (Creature* gyth = me->FindNearestCreature(NPC_GYTH, 75.0f, true)) + { + me->SetFacingToObject(gyth); + Talk(SAY_CHAOS_SPELL); + } + events.ScheduleEvent(EVENT_CHAOS_2, 2000); + break; + case EVENT_CHAOS_2: + DoCast(SPELL_CHROMATIC_CHAOS); + me->SetFacingTo(1.570796f); + break; + case EVENT_SUCCESS_1: + if (Unit* player = me->SelectNearestPlayer(60.0f)) + { + me->SetInFront(player); + me->SendMovementFlagUpdate(); + Talk(SAY_SUCCESS); + if (GameObject* portcullis1 = me->FindNearestGameObject(GO_PORTCULLIS_ACTIVE, 65.0f)) + portcullis1->SetGoState(GO_STATE_ACTIVE); + if (GameObject* portcullis2 = me->FindNearestGameObject(GO_PORTCULLIS_TOBOSSROOMS, 80.0f)) + portcullis2->SetGoState(GO_STATE_ACTIVE); + } + events.ScheduleEvent(EVENT_SUCCESS_2, 4000); + break; + case EVENT_SUCCESS_2: + DoCast(me, SPELL_VAELASTRASZZ_SPAWN); + me->DespawnOrUnsummon(1000); + break; + case EVENT_PATH_3: + me->GetMotionMaster()->MovePath(NEFARIUS_PATH_3, false); + break; + default: + break; + } + } + return; + } + // Only do this if we haven't spawned nefarian yet if (UpdateVictim() && SpawnedAdds <= 42) { |