Scripts/Aberrus: Move StringIds of Kazzara Intro trigger npcs to spawn instead of template

This commit is contained in:
ModoX
2023-11-25 03:25:34 +01:00
parent 27019a62a4
commit 5e8f023623
5 changed files with 60 additions and 38 deletions

View File

@@ -0,0 +1,5 @@
-- remove 'sundered_mob' string id
UPDATE `creature_template` SET `StringId`=NULL WHERE `entry` IN(198874, 205735, 205734, 205737, 198872, 205736, 198871, 198873, 198869);
UPDATE `creature` SET `StringId`='kazzara_intro_trash' WHERE `guid` IN(9003990, 9003965, 9003968, 9003983, 9003992, 9003985, 9003993, 9003986);

View File

@@ -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);
}

View File

@@ -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
};

View File

@@ -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);

View File

@@ -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;
_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);
}
_kazzaraAliveIntroNPCs--;
if (_kazzaraAliveIntroNPCs > 0)
return;
_kazzaraIntroState = IN_PROGRESS;
Creature* sarkareth = GetCreature(DATA_SARKARETH_AT_KAZZARA);
if (!sarkareth)
return;
sarkareth->CastSpell(nullptr, SPELL_ABERRUS_ENTRANCE_RP_CONVERSATION_3);
}
}
private:
uint8 _deadSunderedMobs;
bool _kazzaraIntroDone;
uint8 _kazzaraAliveIntroNPCs;
uint8 _kazzaraIntroState;
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override