From 542ae701e2adf4110903c61a600a0189e0149a58 Mon Sep 17 00:00:00 2001 From: EricksOliveira Date: Tue, 15 Sep 2026 13:57:52 -0300 Subject: [PATCH] fix(Scripts/Icecrown): Crusaders' Pinnacle waves emerge from the ground and charge the banner (#27090) Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- .../rev_1786375644385780500.sql | 53 +++++++++++++++++++ .../scripts/Northrend/zone_icecrown.cpp | 40 +++----------- 2 files changed, 61 insertions(+), 32 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1786375644385780500.sql diff --git a/data/sql/updates/pending_db_world/rev_1786375644385780500.sql b/data/sql/updates/pending_db_world/rev_1786375644385780500.sql new file mode 100644 index 0000000000..bca0f379e6 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1786375644385780500.sql @@ -0,0 +1,53 @@ +-- Battle for Crusaders' Pinnacle (quest 13141). +-- The wave actionlist runs on the out-of-combat timer so a creature pulled on the way up keeps +-- fighting instead of breaking off to reach the position. Emote 449 = EMOTE_ONESHOT_EMERGE, so the +-- wave climbs out of the ground before it charges. +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 30989; + +-- speed_run 0.45714 is not sniffed and sits below the Drudge's own speed_walk, so it trails the wave. +UPDATE `creature_template` SET `speed_run` = 1.142857 WHERE `entry` = 30984; + +-- Wave spawn points, sniffed 2023-09-25 (build 50664). Groups 0 and 1 are the two wave flavours the +-- banner picks between, group 2 is the closing Halof wave. summonType 6 / 30000 keeps the lifetime +-- the script's own summons had. +DELETE FROM `creature_summon_groups` WHERE `summonerId` = 30891 AND `summonerType` = 0; +INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`, `Comment`) VALUES +(30891, 0, 0, 30984, 6465.638, 402.743, 488.848, 2.8623, 6, 30000, 'Scourge Drudge'), +(30891, 0, 0, 30987, 6468.084, 410.647, 487.848, 2.8990, 6, 30000, 'Hideous Plaguebringer'), +(30891, 0, 0, 30987, 6476.593, 402.247, 486.004, 2.7994, 6, 30000, 'Hideous Plaguebringer'), +(30891, 0, 1, 30984, 6465.638, 402.743, 488.848, 2.8623, 6, 30000, 'Scourge Drudge'), +(30891, 0, 1, 30986, 6470.711, 399.197, 487.660, 2.8623, 6, 30000, 'Reanimated Captain'), +(30891, 0, 1, 30986, 6471.096, 407.598, 487.279, 3.0892, 6, 30000, 'Reanimated Captain'), +(30891, 0, 2, 30984, 6460.910, 397.833, 489.997, 2.8100, 6, 30000, 'Scourge Drudge'), +(30891, 0, 2, 30984, 6460.268, 408.247, 490.122, 2.9845, 6, 30000, 'Scourge Drudge'), +(30891, 0, 2, 30989, 6469.555, 405.334, 487.743, 3.2812, 6, 30000, 'Halof the Deathbringer'); + +DELETE FROM `smart_scripts` WHERE `source_type` = 9 AND `entryorguid` IN (3098700, 3098900); +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` IN (30984, 30986, 30987, 30989); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES + -- Shared wave actionlist + (3098900, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 5, 449, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'The Battle for Crusaders\' Pinnacle - Actionlist - Play Emote Emerge'), + (3098900, 9, 1, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6419.78, 422.362, 510.995, 0, 'The Battle for Crusaders\' Pinnacle - Actionlist - Move To Position'), + -- Scourge Drudge + (30984, 0, 0, 0, 0, 0, 100, 0, 5000, 5000, 11300, 14500, 0, 0, 11, 51917, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scourge Drudge - In Combat - Cast \'Cleave\''), + (30984, 0, 1, 0, 0, 0, 100, 0, 7000, 9000, 17800, 20200, 0, 0, 11, 49678, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scourge Drudge - In Combat - Cast \'Flesh Rot\''), + (30984, 0, 2, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 80, 3098900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scourge Drudge - On Just Summoned - Run Script'), + (30984, 0, 3, 0, 34, 0, 100, 0, 8, 1, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scourge Drudge - On Reached Point 1 - Set Home Position'), + -- Reanimated Captain + (30986, 0, 0, 0, 4, 0, 100, 1, 0, 0, 0, 0, 0, 0, 11, 32674, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Reanimated Captain - On Aggro - Cast \'Avenger\'s Shield\' (No Repeat)'), + (30986, 0, 1, 0, 0, 0, 100, 0, 5000, 5000, 17800, 19800, 0, 0, 11, 58154, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Reanimated Captain - In Combat - Cast \'Hammer of Injustice\''), + (30986, 0, 2, 0, 2, 0, 100, 1, 0, 45, 0, 0, 0, 0, 11, 58153, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Reanimated Captain - Between 0-45% Health - Cast \'Unholy Light\' (No Repeat)'), + (30986, 0, 3, 0, 14, 0, 100, 0, 4000, 10, 20000, 30000, 0, 0, 11, 58153, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Reanimated Captain - Friendly At 4000 Health - Cast \'Unholy Light\''), + (30986, 0, 4, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 80, 3098900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Reanimated Captain - On Just Summoned - Run Script'), + (30986, 0, 5, 0, 34, 0, 100, 0, 8, 1, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Reanimated Captain - On Reached Point 1 - Set Home Position'), + -- Hideous Plaguebringer + (30987, 0, 0, 0, 0, 0, 100, 0, 3400, 4600, 11400, 16500, 0, 0, 11, 38761, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hideous Plaguebringer - In Combat - Cast \'Arcing Smash\''), + (30987, 0, 1, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 80, 3098900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hideous Plaguebringer - On Just Summoned - Run Script'), + (30987, 0, 2, 0, 34, 0, 100, 0, 8, 1, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hideous Plaguebringer - On Reached Point 1 - Set Home Position'), + -- Halof the Deathbringer + (30989, 0, 0, 0, 0, 0, 100, 0, 0, 5500, 5500, 11400, 0, 0, 11, 49895, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Halof the Deathbringer - In Combat - Cast \'Death Coil\''), + (30989, 0, 1, 0, 0, 0, 100, 0, 2600, 5700, 8500, 13400, 0, 0, 11, 49941, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Halof the Deathbringer - In Combat - Cast \'Blood Boil\''), + (30989, 0, 2, 0, 0, 0, 100, 0, 7300, 8700, 10300, 10400, 0, 0, 11, 49909, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Halof the Deathbringer - In Combat - Cast \'Icy Touch\''), + (30989, 0, 3, 0, 0, 0, 100, 0, 5000, 5300, 5100, 5300, 0, 0, 11, 51425, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Halof the Deathbringer - In Combat - Cast \'Obliterate\''), + (30989, 0, 4, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 80, 3098900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Halof the Deathbringer - On Just Summoned - Run Script'), + (30989, 0, 5, 0, 34, 0, 100, 0, 8, 1, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Halof the Deathbringer - On Reached Point 1 - Set Home Position'); diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 993150c02f..d25622faac 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -1718,6 +1718,10 @@ enum BlessedBanner EVENT_WAVE_SPAWN = 7, EVENT_HALOF = 8, EVENT_ENDED = 9, + + GROUP_WAVE_PLAGUEBRINGERS = 0, + GROUP_WAVE_CAPTAINS = 1, + GROUP_WAVE_HALOF = 2, }; Position const DalforsPos[3] = @@ -1775,7 +1779,6 @@ public: { npc_blessed_bannerAI(Creature* creature) : ScriptedAI(creature), Summons(me) { - HalofSpawned = false; PhaseCount = 0; Summons.DespawnAll(); @@ -1784,8 +1787,6 @@ public: EventMap events; - bool HalofSpawned; - uint32 PhaseCount; SummonList Summons; @@ -1810,17 +1811,8 @@ public: void JustSummoned(Creature* summon) override { Summons.Summon(summon); - if (summon->GetEntry() == NPC_SCOURGE_DRUDGE || summon->GetEntry() == NPC_REANIMATED_CAPTAIN || - summon->GetEntry() == NPC_HIDEOUS_PLAGUEBRINGER || summon->GetEntry() == NPC_HALOF_THE_DEATHBRINGER) - { - summon->SetHomePosition(DalforsPos[2]); - summon->SetReactState(REACT_PASSIVE); - summon->EngageWithTarget(me); - summon->m_Events.AddEventAtOffset([summon]() - { - summon->SetReactState(REACT_AGGRESSIVE); - }, 2s); - } + if (summon->GetEntry() == NPC_HALOF_THE_DEATHBRINGER) + guidHalof = summon->GetGUID(); } void JustDied(Unit* /*killer*/) override @@ -1973,17 +1965,7 @@ public: if (Creature* LK = GetClosestCreatureWithEntry(me, NPC_LK, 100)) LK->AI()->Talk(LK_TALK_3); } - DoSummon(NPC_SCOURGE_DRUDGE, Mason3Pos[0]); - if (urand(0, 1) == 0) - { - DoSummon(NPC_HIDEOUS_PLAGUEBRINGER, Mason1Pos[0]); - DoSummon(NPC_HIDEOUS_PLAGUEBRINGER, Mason2Pos[0]); - } - else - { - DoSummon(NPC_REANIMATED_CAPTAIN, Mason1Pos[0]); - DoSummon(NPC_REANIMATED_CAPTAIN, Mason2Pos[0]); - } + me->SummonCreatureGroup(urand(GROUP_WAVE_PLAGUEBRINGERS, GROUP_WAVE_CAPTAINS)); PhaseCount++; @@ -1997,13 +1979,7 @@ public: { if (Creature* LK = GetClosestCreatureWithEntry(me, NPC_LK, 100)) LK->AI()->Talk(LK_TALK_4); - DoSummon(NPC_SCOURGE_DRUDGE, Mason1Pos[0]); - DoSummon(NPC_SCOURGE_DRUDGE, Mason2Pos[0]); - if (Creature* tempsum = DoSummon(NPC_HALOF_THE_DEATHBRINGER, DalforsPos[0])) - { - HalofSpawned = true; - guidHalof = tempsum->GetGUID(); - } + me->SummonCreatureGroup(GROUP_WAVE_HALOF); } break; case EVENT_ENDED: