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

View File

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