aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.cpp2
-rw-r--r--src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/aberrus_the_shadowed_crucible.h14
-rw-r--r--src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/boss_kazzara_the_hellforged.cpp2
-rw-r--r--src/server/scripts/DragonIsles/AberrusTheShadowedCrucible/instance_aberrus_the_shadowed_crucible.cpp75
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