From fcfa35139e2a92ae1166718ab64ce8b980fd03e7 Mon Sep 17 00:00:00 2001 From: Exitare Date: Fri, 10 Jan 2025 09:20:47 -0800 Subject: [PATCH] fix(Scripts/ShatteredHalls): Add scripts & spawn for quest "Imprisoned in the citadel" (#21114) --- .../rev_1736296967844459600.sql | 4 +++ .../instance_shattered_halls.cpp | 29 +++++++++++-------- .../ShatteredHalls/shattered_halls.h | 5 ++++ 3 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1736296967844459600.sql diff --git a/data/sql/updates/pending_db_world/rev_1736296967844459600.sql b/data/sql/updates/pending_db_world/rev_1736296967844459600.sql new file mode 100644 index 000000000..ade2aba1e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1736296967844459600.sql @@ -0,0 +1,4 @@ +-- Spawn alliance quest giver for Shattered Halls Imprisoned in the Citadel quest +DELETE FROM `creature` WHERE (`id1` = 17288) AND (`guid` IN (151300)); +INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES +(151300, 17288, 0, 0, 540, 37114, 3714, 2, 1, 0, 120.88, 252.78, -14.57, 0.82, 7200, 0, 0, 6104, 0, 0, 2, 0, 0, '', 0); diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp index 3e739e6a4..03e4c3250 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp @@ -67,6 +67,7 @@ public: { if (TeamIdInInstance == TEAM_NEUTRAL) TeamIdInInstance = player->GetTeamId(); + } void OnCreatureCreate(Creature* creature) override @@ -84,22 +85,26 @@ public: case NPC_SHATTERED_EXECUTIONER: if (RescueTimer > 25 * MINUTE * IN_MILLISECONDS) creature->AddLootMode(2); - executionerGUID = creature->GetGUID(); + ExecutionerGUID = creature->GetGUID(); break; case NPC_RIFLEMAN_BROWNBEARD: if (TeamIdInInstance == TEAM_HORDE) creature->UpdateEntry(NPC_KORAG_PROUDMANE); - prisonerGUID[0] = creature->GetGUID(); + PrisonerGUID[0] = creature->GetGUID(); break; case NPC_CAPTAIN_ALINA: if (TeamIdInInstance == TEAM_HORDE) creature->UpdateEntry(NPC_CAPTAIN_BONESHATTER); - prisonerGUID[1] = creature->GetGUID(); + PrisonerGUID[1] = creature->GetGUID(); break; case NPC_PRIVATE_JACINT: if (TeamIdInInstance == TEAM_HORDE) creature->UpdateEntry(NPC_SCOUT_ORGARR); - prisonerGUID[2] = creature->GetGUID(); + PrisonerGUID[2] = creature->GetGUID(); + break; + case NPC_RANDY_WHIZZLESPROCKET: + if (TeamIdInInstance == TEAM_HORDE) + creature->UpdateEntry(NPC_DRISELLA); break; } InstanceScript::OnCreatureCreate(creature); @@ -126,9 +131,9 @@ public: case DATA_PRISONER_1: case DATA_PRISONER_2: case DATA_PRISONER_3: - return prisonerGUID[data - DATA_PRISONER_1]; + return PrisonerGUID[data - DATA_PRISONER_1]; case DATA_EXECUTIONER: - return executionerGUID; + return ExecutionerGUID; } return ObjectGuid::Empty; @@ -144,22 +149,22 @@ public: { DoRemoveAurasDueToSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_1); DoCastSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_2); - if (Creature* prisoner = instance->GetCreature(prisonerGUID[0])) + if (Creature* prisoner = instance->GetCreature(PrisonerGUID[0])) Unit::Kill(prisoner, prisoner); - if (Creature* executioner = instance->GetCreature(executionerGUID)) + if (Creature* executioner = instance->GetCreature(ExecutionerGUID)) executioner->RemoveLootMode(2); } else if ((RescueTimer / IN_MILLISECONDS) == 15 * MINUTE) { DoRemoveAurasDueToSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_2); DoCastSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_3); - if (Creature* prisoner = instance->GetCreature(prisonerGUID[1])) + if (Creature* prisoner = instance->GetCreature(PrisonerGUID[1])) Unit::Kill(prisoner, prisoner); } else if ((RescueTimer / IN_MILLISECONDS) == 0) { DoRemoveAurasDueToSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_3); - if (Creature* prisoner = instance->GetCreature(prisonerGUID[2])) + if (Creature* prisoner = instance->GetCreature(PrisonerGUID[2])) Unit::Kill(prisoner, prisoner); } } @@ -176,8 +181,8 @@ public: } protected: - ObjectGuid executionerGUID; - ObjectGuid prisonerGUID[3]; + ObjectGuid ExecutionerGUID; + ObjectGuid PrisonerGUID[3]; uint32 RescueTimer; TeamId TeamIdInInstance; }; diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h index 9001522a8..f0c0a3647 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h @@ -66,6 +66,11 @@ enum CreatureIds NPC_KORAG_PROUDMANE = 17295, NPC_CAPTAIN_BONESHATTER = 17296, NPC_SCOUT_ORGARR = 17297, + + //Drisella + NPC_DRISELLA = 17294, + // Randy Whizzlesprocket + NPC_RANDY_WHIZZLESPROCKET = 17288, }; enum GameobjectIds