From 4ac44f388e497c321e87fb346dcc265c947c74fb Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Tue, 7 Jan 2020 20:25:27 +0100 Subject: [PATCH] Scripts/SFK: handle Alliance faction troup spawning when defeating Commander Springvale and when walking on the walls afterwards * handle announcement message when a player triggers the gargoyle area trigger events --- .../custom/custom_2020_01_07_04_world.sql | 43 ++++++++++++++ .../instance_shadowfang_keep.cpp | 57 ++++++++++++++----- .../ShadowfangKeep/shadowfang_keep.cpp | 34 +++++++++-- .../ShadowfangKeep/shadowfang_keep.h | 8 ++- 4 files changed, 120 insertions(+), 22 deletions(-) create mode 100644 sql/updates/world/custom/custom_2020_01_07_04_world.sql diff --git a/sql/updates/world/custom/custom_2020_01_07_04_world.sql b/sql/updates/world/custom/custom_2020_01_07_04_world.sql new file mode 100644 index 00000000000..d1befe7641a --- /dev/null +++ b/sql/updates/world/custom/custom_2020_01_07_04_world.sql @@ -0,0 +1,43 @@ +DELETE FROM `spawn_group_template` WHERE `groupId` IN (425, 426); +INSERT INTO `spawn_group_template` (`groupId`, `groupName`, `groupFlags`) VALUES +(425, 'Shadowfang Keep - Commander Springvale Alliance Troups', 4), +(426, 'Shadowfang Keep - Outside Alliance Troups', 4); + +SET @CGUID := 395363; +DELETE FROM `spawn_group` WHERE `groupId` IN (425, 426); +INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`) VALUES +-- Commander Springvale Alliance Troups +(425, 0, @CGUID+0), +(425, 0, @CGUID+1), +(425, 0, @CGUID+2), +-- Outside Alliance Troups +(426, 0, @CGUID+3), +(426, 0, @CGUID+4), +(426, 0, @CGUID+5), +(426, 0, @CGUID+6); + +DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+6; +INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `PhaseId`, `PhaseGroup`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `VerifiedBuild`) VALUES +-- Commander Springvale Alliance Troups +(@CGUID+0, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -263.906, 2269.6, 97.62373, 5.88176, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2) +(@CGUID+1, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -262.012, 2268.67, 98.67534, 5.934119, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2) +(@CGUID+2, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -259.929, 2267.86, 99.79284, 5.934119, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2) +-- Outside Alliance Troups +(@CGUID+3, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -220.9429, 2223.227, 105.8726, 4.528842, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2) +(@CGUID+4, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -226.6541, 2222.231, 106.2409, 4.48631, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2) +(@CGUID+5, 47006, 33, 209, 209, 3, 169, 0, 0, 0, -241.7395, 2217.392, 106.464, 4.622139, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153), -- Packleader Ivar Bloodfang (Area: Shadowfang Keep - Difficulty: 2) +(@CGUID+6, 47027, 33, 209, 209, 3, 169, 0, 0, 0, -234.9143, 2216.633, 106.979, 4.32102, 7200, 0, 0, 0, 0, 0, 0, 0, 0, 28153); -- Bloodfang Berserker (Area: Shadowfang Keep - Difficulty: 2) + +DELETE FROM `areatrigger_scripts` WHERE `ScriptName` IN +('at_sfk_pre_walden', +'at_sfk_outside_troups', +'at_sfk_gargoyle_event'); + +INSERT INTO `areatrigger_scripts` (`entry`,`ScriptName`) VALUES +(6425, 'at_sfk_outside_troups'), +(255, 'at_sfk_gargoyle_event'), +(256, 'at_sfk_gargoyle_event'); + +DELETE FROM `creature_text` WHERE `CreatureID`= 43679; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `TextRange`, `BroadcastTextId`, `comment`) VALUES +(43679, 0, 0, 'A nearby Gargoyle comes to life!', 41, 0, 100, 0, 0, 0, 3, 47423, 'DEBUG Announcer'); diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index 6c2d940788a..4fa7e5f9136 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -30,6 +30,7 @@ ObjectData const creatureData[] = { BOSS_COMMANDER_SPRINGVALE, DATA_COMMANDER_SPRINGVALE }, { BOSS_LORD_WALDEN, DATA_LORD_WALDEN }, { BOSS_LORD_GODFREY, DATA_LORD_GODFREY }, + { NPC_DEBUG_ANNOUNCER, DATA_DEBUG_ANNOUNCER }, { 0, 0 } // END }; @@ -57,20 +58,21 @@ BossBoundaryData const boundaries = enum SpawnGroups { - SPAWN_GROUP_ENTRANCE_ALLIANCE = 412, - SPAWN_GROUP_ENTRANCE_HORDE = 413, - SPAWN_GROUP_DISEASE_CLOUDS_ENTRANCE = 414, - SPAWN_GROUP_DISEASE_CLOUDS_BARON_ASHBURY = 415, - SPAWN_GROUP_DISEASE_CLOUDS_BARON_SILVERLAINE = 416, - SPAWN_GROUP_DISEASE_CLOUDS_COMMANDER_SPRINGVALE = 417, - SPAWN_GROUP_DISEASE_CLOUDS_LORD_WALDEN = 418, - SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_ALLIANCE = 419, - SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_HORDE = 420, - SPAWN_GROUP_BARON_ASHBURY_TROUPS_ALLIANCE = 421, - SPAWN_GROUP_BARON_ASHBURY_TROUPS_HORDE = 422, - SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_ALLIANCE = 423, - SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_HORDE = 424 - + SPAWN_GROUP_ENTRANCE_ALLIANCE = 412, + SPAWN_GROUP_ENTRANCE_HORDE = 413, + SPAWN_GROUP_DISEASE_CLOUDS_ENTRANCE = 414, + SPAWN_GROUP_DISEASE_CLOUDS_BARON_ASHBURY = 415, + SPAWN_GROUP_DISEASE_CLOUDS_BARON_SILVERLAINE = 416, + SPAWN_GROUP_DISEASE_CLOUDS_COMMANDER_SPRINGVALE = 417, + SPAWN_GROUP_DISEASE_CLOUDS_LORD_WALDEN = 418, + SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_ALLIANCE = 419, + SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_HORDE = 420, + SPAWN_GROUP_BARON_ASHBURY_TROUPS_ALLIANCE = 421, + SPAWN_GROUP_BARON_ASHBURY_TROUPS_HORDE = 422, + SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_ALLIANCE = 423, + SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_HORDE = 424, + SPAWN_GROUP_COMMANDER_SPRINGVALE_TROUPS_ALLIANCE = 425, + SPAWN_GROUP_OUTSIDE_TROUPS_ALLIANCE = 426, }; class instance_shadowfang_keep : public InstanceMapScript @@ -152,6 +154,13 @@ public: _currentlyActiveTroupSpawnGroup = *_teamInInstance == ALLIANCE ? SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_ALLIANCE : SPAWN_GROUP_BARON_SILVERLAINE_TROUPS_HORDE; instance->SpawnGroupSpawn(_currentlyActiveTroupSpawnGroup); break; + case DATA_COMMANDER_SPRINGVALE: + if (*_teamInInstance == ALLIANCE) + { + _currentlyActiveTroupSpawnGroup = 0; + instance->SpawnGroupSpawn(SPAWN_GROUP_COMMANDER_SPRINGVALE_TROUPS_ALLIANCE); + } + break; default: break; } @@ -180,7 +189,7 @@ public: instance->SpawnGroupSpawn(SPAWN_GROUP_DISEASE_CLOUDS_LORD_WALDEN); } - // Despawning previous troup + // Despawning previous troups if (_currentlyActiveTroupSpawnGroup) instance->SpawnGroupDespawn(_currentlyActiveTroupSpawnGroup); @@ -196,6 +205,24 @@ public: instance->SpawnGroupSpawn(*_teamInInstance == ALLIANCE ? SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_ALLIANCE : SPAWN_GROUP_LORD_GODFREY_DEAD_TROUPS_HORDE); } + void SetData(uint32 type, uint32 value) override + { + switch (type) + { + case DATA_OUTSIDE_TROUPS_SPAWN: + if (*_teamInInstance == ALLIANCE) + { + if (_currentlyActiveTroupSpawnGroup) + instance->SpawnGroupDespawn(_currentlyActiveTroupSpawnGroup); + + instance->SpawnGroupSpawn(SPAWN_GROUP_OUTSIDE_TROUPS_ALLIANCE); + } + break; + default: + break; + } + } + uint32 GetData(uint32 type) const override { switch (type) diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index 1f953dfcf63..3833d88686f 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -74,7 +74,10 @@ enum Texts SAY_IVAR_ROOM_OPEN = 13, // Bloodfang Berserker - SAY_SHOW_COMMANDER_SPRINGVALE = 1 + SAY_SHOW_COMMANDER_SPRINGVALE = 1, + + // DEBUG Announcer + SAY_ANNOUNCE_GARGOYLES = 0 }; enum SKShieldOfBones @@ -119,13 +122,16 @@ public: } }; -class at_sfk_pre_walden : public OnlyOnceAreaTriggerScript +class at_sfk_outside_troups : public OnlyOnceAreaTriggerScript { public: - at_sfk_pre_walden() : OnlyOnceAreaTriggerScript("at_sfk_pre_walden") { } + at_sfk_outside_troups() : OnlyOnceAreaTriggerScript("at_sfk_outside_troups") { } - bool _OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*areaTrigger*/) override + bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override { + if (InstanceScript* instance = player->GetInstanceScript()) + instance->SetData(DATA_OUTSIDE_TROUPS_SPAWN, DONE); + return true; } }; @@ -141,10 +147,28 @@ public: } }; +class at_sfk_gargoyle_event : public OnlyOnceAreaTriggerScript +{ +public: + at_sfk_gargoyle_event() : OnlyOnceAreaTriggerScript("at_sfk_gargoyle_event") { } + + bool _OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override + { + if (InstanceScript* instance = player->GetInstanceScript()) + { + if (Creature* announcer = instance->GetCreature(DATA_DEBUG_ANNOUNCER)) + if (announcer->IsAIEnabled) + announcer->AI()->Talk(SAY_ANNOUNCE_GARGOYLES); + } + return true; + } +}; + void AddSC_shadowfang_keep() { RegisterAuraScript(spell_sfk_shield_of_bones); - new at_sfk_pre_walden(); + new at_sfk_outside_troups(); new at_sfk_godfrey_intro(); new at_sfk_baron_silverlaine_post_floor(); + new at_sfk_gargoyle_event(); } diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h index 8a00c3f19dc..0d8fc8a5906 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h @@ -75,7 +75,7 @@ enum SKCreatures NPC_BLOODTHIRSTY_GHOUL = 50561, NPC_PISTOL_BARRAGE_DUMMY = 52065, - // Generic NPCs + // Generic NPCs NPC_VETERAN_FORSAKEN_TROOPER = 47030, NPC_DEATHSTALKER_BELMONT = 47293, NPC_FORSAKEN_BLIGHTSPREADER = 47031, @@ -83,7 +83,8 @@ enum SKCreatures NPC_DISEASE_BUNNY = 23837, NPC_BLOODFANG_BERSERKER = 47027, NPC_PACKLEADER_IVAR = 47006, - NPC_HIGH_MAGISTRATE_HENRY = 47862 + NPC_HIGH_MAGISTRATE_HENRY = 47862, + NPC_DEBUG_ANNOUNCER = 43679, }; enum SKGameObjectIds @@ -104,6 +105,9 @@ enum SKDataTypes DATA_APOTHECARY_HUMMEL = 5, DATA_TEAM_IN_INSTANCE, + DATA_OUTSIDE_TROUPS_SPAWN, + + DATA_DEBUG_ANNOUNCER, DATA_ARUGAL_DOOR, DATA_SORCERER_GATE,