diff options
Diffstat (limited to 'src')
4 files changed, 55 insertions, 38 deletions
diff --git a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp index 0a7268a10eb..7527b516936 100644 --- a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp +++ b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp @@ -193,7 +193,7 @@ public: if (InstanceScript* instance = conversation->GetInstanceScript()) { - instance->SetData(DATA_KAZZARA_INTRO_DONE, 1); + instance->SetData(DATA_KAZZARA_INTRO_STATE, DONE); if (Creature* kazzara = instance->GetCreature(DATA_KAZZARA_THE_HELLFORGED)) kazzara->AI()->DoAction(ACTION_START_KAZZARA_INTRO); } diff --git a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.h b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.h index e1797e26faf..33556dd97cb 100644 --- a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.h +++ b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.h @@ -38,11 +38,14 @@ enum AberrusDataTypes DATA_ECHO_OF_NELTHARION = 7, DATA_SCALECOMMANDER_SARKARETH = 8, - // Additional Data + // Creatures + DATA_SARKARETH_AT_KAZZARA, + + // Gameobjects DATA_KAZZARA_GATE, // Misc - DATA_KAZZARA_INTRO_DONE + DATA_KAZZARA_INTRO_STATE }; enum AberrusCreatureIds @@ -65,6 +68,13 @@ enum AberrusCreatureIds BOSS_ECHO_OF_NELTHARION = 204223, BOSS_SCALECOMMANDER_SARKARETH = 205319, + // Kazzara Trash + NPC_SCALECOMMANDER_SARKARETH_AT_KAZZARA = 202416, + NPC_SUNDERED_DEVASTATOR = 198869, + NPC_SUNDERED_SCALEGUARD = 198871, + NPC_SUNDERED_MANAWEAVER = 198872, + NPC_SUNDERED_EDGELORD = 198873, + // Misc NPC_SABELLIAN_AT_ABERRUS_ENTRANCE = 201575 }; diff --git a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/boss_kazzara_the_hellforged.cpp b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/boss_kazzara_the_hellforged.cpp index 2cdaaedd6df..203b871f863 100644 --- a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/boss_kazzara_the_hellforged.cpp +++ b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/boss_kazzara_the_hellforged.cpp @@ -40,7 +40,7 @@ struct boss_kazzara_the_hellforged : public BossAI void JustAppeared() override { - if (!instance->GetData(DATA_KAZZARA_INTRO_DONE)) + if (instance->GetData(DATA_KAZZARA_INTRO_STATE) != DONE) { me->SetUninteractible(true); me->SetImmuneToAll(true); diff --git a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/instance_aberrus_the_shadowed_crucible.cpp b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/instance_aberrus_the_shadowed_crucible.cpp index d6e21bd63c8..7f8b83bce13 100644 --- a/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/instance_aberrus_the_shadowed_crucible.cpp +++ b/src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/instance_aberrus_the_shadowed_crucible.cpp @@ -22,16 +22,17 @@ ObjectData const creatureData[] = { - { BOSS_KAZZARA_THE_HELLFORGED, DATA_KAZZARA_THE_HELLFORGED }, - { BOSS_SHADOWFLAME_AMALGAMATION, DATA_THE_AMALGAMATION_CHAMBER }, - { BOSS_RIONTHUS, DATA_THE_FORGOTTEN_EXPERIMENTS }, - { BOSS_WARLORD_KAGNI, DATA_ASSAULT_OF_THE_ZAQALI }, - { BOSS_RASHOK_THE_ELDER, DATA_RASHOK_THE_ELDER }, - { BOSS_ZSKARN_THE_VIGILANT_STEWARD, DATA_ZSKARN_THE_VIGILANT_STEWARD }, - { BOSS_MAGMORAX, DATA_MAGMORAX }, - { BOSS_ECHO_OF_NELTHARION, DATA_ECHO_OF_NELTHARION }, - { BOSS_SCALECOMMANDER_SARKARETH, DATA_SCALECOMMANDER_SARKARETH }, - { 0, 0 } // END + { BOSS_KAZZARA_THE_HELLFORGED, DATA_KAZZARA_THE_HELLFORGED }, + { BOSS_SHADOWFLAME_AMALGAMATION, DATA_THE_AMALGAMATION_CHAMBER }, + { BOSS_RIONTHUS, DATA_THE_FORGOTTEN_EXPERIMENTS }, + { BOSS_WARLORD_KAGNI, DATA_ASSAULT_OF_THE_ZAQALI }, + { BOSS_RASHOK_THE_ELDER, DATA_RASHOK_THE_ELDER }, + { BOSS_ZSKARN_THE_VIGILANT_STEWARD, DATA_ZSKARN_THE_VIGILANT_STEWARD }, + { BOSS_MAGMORAX, DATA_MAGMORAX }, + { BOSS_ECHO_OF_NELTHARION, DATA_ECHO_OF_NELTHARION }, + { BOSS_SCALECOMMANDER_SARKARETH, DATA_SCALECOMMANDER_SARKARETH }, + { NPC_SCALECOMMANDER_SARKARETH_AT_KAZZARA, DATA_SARKARETH_AT_KAZZARA }, + { 0, 0 } // END }; DoorData const doorData[] = @@ -59,11 +60,6 @@ DungeonEncounterData const encounters[] = { DATA_SCALECOMMANDER_SARKARETH, {{ 2685 }} } }; -enum AberrusInstanceCreatureIds -{ - NPC_SCALECOMMANDER_SARKARETH_AT_KAZZARA = 202416 -}; - enum AberrusInstanceSpells { SPELL_ABERRUS_ENTRANCE_RP_CONVERSATION_3 = 403409 // Winglord Dezran, Sarkareth and Zskarn (Kazzara Summon) @@ -84,59 +80,70 @@ public: LoadDoorData(doorData); LoadDungeonEncounterData(encounters); - _kazzaraIntroDone = false; - _deadSunderedMobs = 0; + _kazzaraIntroState = NOT_STARTED; + _kazzaraAliveIntroNPCs = 0; } uint32 GetData(uint32 dataId) const override { switch (dataId) { - case DATA_KAZZARA_INTRO_DONE: - return _kazzaraIntroDone ? 1 : 0; + case DATA_KAZZARA_INTRO_STATE: + return _kazzaraIntroState; default: break; } return 0; } - void SetData(uint32 dataId, uint32 /*value*/) override + void SetData(uint32 dataId, uint32 value) override { switch (dataId) { - case DATA_KAZZARA_INTRO_DONE: - _kazzaraIntroDone = true; // no need to pass value, it will never reset to false + case DATA_KAZZARA_INTRO_STATE: + _kazzaraIntroState = value; break; default: break; } } + void OnCreatureCreate(Creature* creature) override + { + InstanceScript::OnCreatureCreate(creature); + + if (creature->HasStringId("kazzara_intro_trash")) + _kazzaraAliveIntroNPCs++; + } + void OnUnitDeath(Unit* unit) override { Creature* creature = unit->ToCreature(); if (!creature) return; - if (creature->HasStringId("sundered_mob")) + if (creature->HasStringId("kazzara_intro_trash")) { - if (_deadSunderedMobs >= 6) + if (_kazzaraIntroState != NOT_STARTED) + return; + + _kazzaraAliveIntroNPCs--; + if (_kazzaraAliveIntroNPCs > 0) + return; + + _kazzaraIntroState = IN_PROGRESS; + + Creature* sarkareth = GetCreature(DATA_SARKARETH_AT_KAZZARA); + if (!sarkareth) return; - _deadSunderedMobs++; - if (_deadSunderedMobs >= 6) - { - Creature* sarkareth = creature->FindNearestCreature(NPC_SCALECOMMANDER_SARKARETH_AT_KAZZARA, 300.0f); - if (!sarkareth) - return; - sarkareth->CastSpell(nullptr, SPELL_ABERRUS_ENTRANCE_RP_CONVERSATION_3); - } + sarkareth->CastSpell(nullptr, SPELL_ABERRUS_ENTRANCE_RP_CONVERSATION_3); } } private: - uint8 _deadSunderedMobs; - bool _kazzaraIntroDone; + uint8 _kazzaraAliveIntroNPCs; + uint8 _kazzaraIntroState; }; InstanceScript* GetInstanceScript(InstanceMap* map) const override |