fix(Scripts/ShatteredHalls): Add scripts & spawn for quest "Imprisoned in the citadel" (#21114)

This commit is contained in:
Exitare
2025-01-10 09:20:47 -08:00
committed by GitHub
parent 07a077a207
commit fcfa35139e
3 changed files with 26 additions and 12 deletions

View File

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

View File

@@ -67,6 +67,7 @@ public:
{ {
if (TeamIdInInstance == TEAM_NEUTRAL) if (TeamIdInInstance == TEAM_NEUTRAL)
TeamIdInInstance = player->GetTeamId(); TeamIdInInstance = player->GetTeamId();
} }
void OnCreatureCreate(Creature* creature) override void OnCreatureCreate(Creature* creature) override
@@ -84,22 +85,26 @@ public:
case NPC_SHATTERED_EXECUTIONER: case NPC_SHATTERED_EXECUTIONER:
if (RescueTimer > 25 * MINUTE * IN_MILLISECONDS) if (RescueTimer > 25 * MINUTE * IN_MILLISECONDS)
creature->AddLootMode(2); creature->AddLootMode(2);
executionerGUID = creature->GetGUID(); ExecutionerGUID = creature->GetGUID();
break; break;
case NPC_RIFLEMAN_BROWNBEARD: case NPC_RIFLEMAN_BROWNBEARD:
if (TeamIdInInstance == TEAM_HORDE) if (TeamIdInInstance == TEAM_HORDE)
creature->UpdateEntry(NPC_KORAG_PROUDMANE); creature->UpdateEntry(NPC_KORAG_PROUDMANE);
prisonerGUID[0] = creature->GetGUID(); PrisonerGUID[0] = creature->GetGUID();
break; break;
case NPC_CAPTAIN_ALINA: case NPC_CAPTAIN_ALINA:
if (TeamIdInInstance == TEAM_HORDE) if (TeamIdInInstance == TEAM_HORDE)
creature->UpdateEntry(NPC_CAPTAIN_BONESHATTER); creature->UpdateEntry(NPC_CAPTAIN_BONESHATTER);
prisonerGUID[1] = creature->GetGUID(); PrisonerGUID[1] = creature->GetGUID();
break; break;
case NPC_PRIVATE_JACINT: case NPC_PRIVATE_JACINT:
if (TeamIdInInstance == TEAM_HORDE) if (TeamIdInInstance == TEAM_HORDE)
creature->UpdateEntry(NPC_SCOUT_ORGARR); 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; break;
} }
InstanceScript::OnCreatureCreate(creature); InstanceScript::OnCreatureCreate(creature);
@@ -126,9 +131,9 @@ public:
case DATA_PRISONER_1: case DATA_PRISONER_1:
case DATA_PRISONER_2: case DATA_PRISONER_2:
case DATA_PRISONER_3: case DATA_PRISONER_3:
return prisonerGUID[data - DATA_PRISONER_1]; return PrisonerGUID[data - DATA_PRISONER_1];
case DATA_EXECUTIONER: case DATA_EXECUTIONER:
return executionerGUID; return ExecutionerGUID;
} }
return ObjectGuid::Empty; return ObjectGuid::Empty;
@@ -144,22 +149,22 @@ public:
{ {
DoRemoveAurasDueToSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_1); DoRemoveAurasDueToSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_1);
DoCastSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_2); DoCastSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_2);
if (Creature* prisoner = instance->GetCreature(prisonerGUID[0])) if (Creature* prisoner = instance->GetCreature(PrisonerGUID[0]))
Unit::Kill(prisoner, prisoner); Unit::Kill(prisoner, prisoner);
if (Creature* executioner = instance->GetCreature(executionerGUID)) if (Creature* executioner = instance->GetCreature(ExecutionerGUID))
executioner->RemoveLootMode(2); executioner->RemoveLootMode(2);
} }
else if ((RescueTimer / IN_MILLISECONDS) == 15 * MINUTE) else if ((RescueTimer / IN_MILLISECONDS) == 15 * MINUTE)
{ {
DoRemoveAurasDueToSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_2); DoRemoveAurasDueToSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_2);
DoCastSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_3); DoCastSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_3);
if (Creature* prisoner = instance->GetCreature(prisonerGUID[1])) if (Creature* prisoner = instance->GetCreature(PrisonerGUID[1]))
Unit::Kill(prisoner, prisoner); Unit::Kill(prisoner, prisoner);
} }
else if ((RescueTimer / IN_MILLISECONDS) == 0) else if ((RescueTimer / IN_MILLISECONDS) == 0)
{ {
DoRemoveAurasDueToSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_3); DoRemoveAurasDueToSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_3);
if (Creature* prisoner = instance->GetCreature(prisonerGUID[2])) if (Creature* prisoner = instance->GetCreature(PrisonerGUID[2]))
Unit::Kill(prisoner, prisoner); Unit::Kill(prisoner, prisoner);
} }
} }
@@ -176,8 +181,8 @@ public:
} }
protected: protected:
ObjectGuid executionerGUID; ObjectGuid ExecutionerGUID;
ObjectGuid prisonerGUID[3]; ObjectGuid PrisonerGUID[3];
uint32 RescueTimer; uint32 RescueTimer;
TeamId TeamIdInInstance; TeamId TeamIdInInstance;
}; };

View File

@@ -66,6 +66,11 @@ enum CreatureIds
NPC_KORAG_PROUDMANE = 17295, NPC_KORAG_PROUDMANE = 17295,
NPC_CAPTAIN_BONESHATTER = 17296, NPC_CAPTAIN_BONESHATTER = 17296,
NPC_SCOUT_ORGARR = 17297, NPC_SCOUT_ORGARR = 17297,
//Drisella
NPC_DRISELLA = 17294,
// Randy Whizzlesprocket
NPC_RANDY_WHIZZLESPROCKET = 17288,
}; };
enum GameobjectIds enum GameobjectIds