From e2cfb5c5a95a38c278d76db8deecdb2596d543aa Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 6 Apr 2023 18:19:46 -0300 Subject: [PATCH 01/32] fix(Scripts/IcecrownCitadel): Fix Putricide crash (#15846) --- .../Northrend/IcecrownCitadel/boss_professor_putricide.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 125724510..aa8f61b87 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -277,12 +277,6 @@ public: _experimentState = (data ? 1 : 0); } - void AttackStart(Unit* who) override - { - if (instance->CheckRequiredBosses(DATA_PROFESSOR_PUTRICIDE)) - BossAI::AttackStart(who); - } - bool CanAIAttack(Unit const* target) const override { return me->IsVisible() && target->GetPositionZ() > 388.0f && target->GetPositionZ() < 410.0f && target->GetPositionY() > 3157.1f && target->GetExactDist2dSq(4356.0f, 3211.0f) < 80.0f * 80.0f; From c9973f3a80b19efc67fa441e66adbf9e0d3a7c6d Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Fri, 7 Apr 2023 12:57:52 -0300 Subject: [PATCH 02/32] fix(Scripts/IcecrownCitadel): Fix Svalna crash (#15862) --- .../Northrend/IcecrownCitadel/icecrown_citadel.cpp | 14 -------------- .../IcecrownCitadel/instance_icecrown_citadel.cpp | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 01f4611c4..251b2b31e 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -1007,13 +1007,6 @@ public: me->SendMovementFlagUpdate(); } - void AttackStart(Unit* victim) override - { - if (me->HasReactState(REACT_PASSIVE) || me->IsImmuneToAll()) - return; - BossAI::AttackStart(victim); - } - void JustDied(Unit* /*killer*/) override { _JustDied(); @@ -1039,13 +1032,6 @@ public: void JustEngagedWith(Unit* /*attacker*/) override { - if (me->HasReactState(REACT_PASSIVE) || me->IsImmuneToAll()) - { - me->CombatStop(false); - me->SetImmuneToAll(true); - me->SetReactState(REACT_PASSIVE); - return; - } _JustEngagedWith(); me->LowerPlayerDamageReq(me->GetMaxHealth()); if (Creature* crok = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_CROK_SCOURGEBANE))) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 177d56cbb..ca9283c49 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -1457,7 +1457,7 @@ public: bool CheckRequiredBosses(uint32 bossId, Player const* player) const override { - if (player->GetSession() && player->GetSession()->GetSecurity() >= SEC_MODERATOR) + if (player && player->GetSession() && player->GetSession()->GetSecurity() >= SEC_MODERATOR) { return true; } From af05a8ba6a43c8ac52144ac8dafa28d5d1e2e188 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Fri, 7 Apr 2023 14:10:05 -0300 Subject: [PATCH 03/32] chore(DB): Correct typo in 2023_04_02_02.sql (#15874) Update 2023_04_02_02.sql --- data/sql/updates/db_world/2023_04_02_02.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/sql/updates/db_world/2023_04_02_02.sql b/data/sql/updates/db_world/2023_04_02_02.sql index 77689ee88..5a1151054 100644 --- a/data/sql/updates/db_world/2023_04_02_02.sql +++ b/data/sql/updates/db_world/2023_04_02_02.sql @@ -1,2 +1,2 @@ -- DB update 2023_04_02_01 -> 2023_04_02_02 -UPDATE `smart_scripts` SET `event_type` = 25 AND `comment` = 'Arcatraz Sentinel - On Reset - Set Health 40%' WHERE `source_type` = 0 AND `entryorguid` = 20869 AND `id` = 0; +UPDATE `smart_scripts` SET `event_type` = 25, `comment` = 'Arcatraz Sentinel - On Reset - Set Health 40%' WHERE `source_type` = 0 AND `entryorguid` = 20869 AND `id` = 0; From 6ee42fcf7833783019673fafe1cde4f4e93bad17 Mon Sep 17 00:00:00 2001 From: Tereneckla <50233983+Tereneckla@users.noreply.github.com> Date: Sat, 8 Apr 2023 10:30:03 +0000 Subject: [PATCH 04/32] fix(Scripts/SethekkHalls) Fix Talon King Ikiss Blink (#15876) Update boss_talon_king_ikiss.cpp --- .../Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp index f09f4262a..6794a1db7 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp @@ -82,8 +82,8 @@ struct boss_talon_king_ikiss : public BossAI void TeleportAndCastExplosion() { me->InterruptNonMeleeSpells(false); - DoCastSelf(SPELL_ARCANE_BUBBLE, true); DoCastAOE(SPELL_BLINK); + DoCastSelf(SPELL_ARCANE_BUBBLE, true); Talk(EMOTE_ARCANE_EXP); scheduler.Schedule(1s, [this](TaskContext) From 54f122ec74b73f767dba74e02d354204e61e1cea Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sat, 8 Apr 2023 19:12:19 +0200 Subject: [PATCH 05/32] fix(CI): Windows build (#15879) * fix(CI): Windows build * Update windows_build.yml * Update windows_build.yml --- .github/workflows/windows_build.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/workflows/windows_build.yml b/.github/workflows/windows_build.yml index 04f42a702..83a028e98 100644 --- a/.github/workflows/windows_build.yml +++ b/.github/workflows/windows_build.yml @@ -54,14 +54,3 @@ jobs: ./worldserver -dry-run - name: Stop MySQL run: net stop mysql - - name: Copy dll files - shell: bash - run: | - rm -rf env/dist/data - cp "/c/tools/mysql/current/lib/libmysql.dll" "env/dist" - cp "/c/Program Files/OpenSSL-Win64/bin/libcrypto-1_1-x64.dll" "env/dist" - cp "/c/Program Files/OpenSSL-Win64/bin/libssl-1_1-x64.dll" "env/dist" - - uses: actions/upload-artifact@v2 - with: - name: windows-2022-MSVC17-release - path: env/dist From 5139d28e47b7184f1a16d10a1d4ab55bb572d478 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 8 Apr 2023 15:07:16 -0300 Subject: [PATCH 06/32] refactor(DB/SAI): Cleanup Shattered Halls SAI (#15880) * Create rev_1680890996039990100.sql * Update rev_1680890996039990100.sql * Update rev_1680890996039990100.sql --- .../rev_1680890996039990100.sql | 233 ++++++++++++++++++ 1 file changed, 233 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1680890996039990100.sql diff --git a/data/sql/updates/pending_db_world/rev_1680890996039990100.sql b/data/sql/updates/pending_db_world/rev_1680890996039990100.sql new file mode 100644 index 000000000..8867543ed --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1680890996039990100.sql @@ -0,0 +1,233 @@ +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (22911,36023,30481,30636,34100,30932); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES +(22911, 22911, 37511), +(36023, 36023, 36054), +(30481, 30481, 35945), +(30636, 30636, 35942), +(34100, 34100, 35950), +(30932, 30932, 40248); + +UPDATE `creature_text` SET `Text` = 'For Kargath! For Victory!', `BroadcastTextId` = 16698 WHERE `Text` = 'For Kargath! For Victory!'; +UPDATE `creature_text` SET `BroadcastTextId` = 16699 WHERE `Text` = 'Gakarah ma!'; +UPDATE `creature_text` SET `BroadcastTextId` = 16703 WHERE `Text` = 'Lok narash!'; +UPDATE `creature_text` SET `BroadcastTextId` = 16701 WHERE `Text` = 'Lok\'tar Illadari!'; +UPDATE `creature_text` SET `BroadcastTextId` = 16700 WHERE `Text` = 'The blood is our power!'; +UPDATE `creature_text` SET `BroadcastTextId` = 16702 WHERE `Text` = 'This world is OURS!'; +UPDATE `creature_text` SET `BroadcastTextId` = 16697 WHERE `Text` = 'We are the true Horde!'; + +-- Shattered Hand Sentry +DELETE FROM `creature_template_addon` WHERE (`entry` IN (16507, 20593)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(16507, 0, 0, 0, 1, 0, 0, '18950'), +(20593, 0, 0, 0, 1, 0, 0, '18950'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16507); +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`, `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 +(16507, 0, 0, 0, 0, 0, 100, 0, 1000, 3500, 13000, 16000, 0, 11, 31553, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sentry - In Combat - Cast \'Hamstring\''), +(16507, 0, 1, 0, 4, 0, 15, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sentry - On Aggro - Say Line 1 (No Repeat)'), +(16507, 0, 2, 0, 0, 0, 100, 1, 1000, 1000, 0, 0, 0, 11, 22911, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sentry - In Combat - Cast \'Charge\' (No Repeat)'); + +-- Shattered Hand Savage +DELETE FROM `creature_text` WHERE `CreatureID` = 16523 AND `GroupID` = 1; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(16523, 1, 0, 'For Kargath! For Victory!', 12, 0, 100, 0, 0, 0, 16698, 0, 'Shattered Hand Savage'), +(16523, 1, 1, 'Gakarah ma!', 12, 0, 100, 0, 0, 0, 16699, 0, 'Shattered Hand Savage'), +(16523, 1, 2, 'Lok narash!', 12, 0, 100, 0, 0, 0, 16703, 0, 'Shattered Hand Savage'), +(16523, 1, 3, 'Lok\'tar Illadari!', 12, 0, 100, 0, 0, 0, 16701, 0, 'Shattered Hand Savage'), +(16523, 1, 4, 'The blood is our power!', 12, 0, 100, 0, 0, 0, 16700, 0, 'Shattered Hand Savage'), +(16523, 1, 5, 'This world is OURS!', 12, 0, 100, 0, 0, 0, 16702, 0, 'Shattered Hand Savage'), +(16523, 1, 6, 'We are the true Horde!', 12, 0, 100, 0, 0, 0, 16697, 0, 'Shattered Hand Savage'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16523); +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`, `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 +(16523, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 36023, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Savage - On Just Died - Cast \'Deathblow\''), +(16523, 0, 1, 0, 0, 0, 100, 0, 4000, 4000, 20000, 25000, 0, 11, 30470, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Savage - In Combat - Cast \'Slice and Dice\''), +(16523, 0, 2, 3, 2, 0, 100, 0, 0, 30, 120000, 120000, 0, 11, 30485, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Savage - Between 0-30% Health - Cast \'Enrage\''), +(16523, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Savage - Between 0-30% Health - Say Line 0'), +(16523, 0, 4, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Savage - On Aggro - Say Line 1'); + +-- Shattered Hand Brawler +DELETE FROM `creature_template_addon` WHERE (`entry` IN (16593, 20582)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(16593, 0, 0, 0, 1, 0, 0, '8876'), +(20582, 0, 0, 0, 1, 0, 0, '8876'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16593); +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`, `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 +(16593, 0, 0, 0, 9, 0, 100, 0, 0, 5, 12000, 21000, 0, 11, 36020, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Brawler - Within 0-5 Range - Cast \'Curse of the Shattered Hand\''), +(16593, 0, 1, 0, 13, 0, 100, 0, 6000, 15000, 0, 0, 0, 11, 36033, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Brawler - On Victim Casting - Cast \'Kick\''), +(16593, 0, 2, 3, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Brawler - On Aggro - Say Line 1'), +(16593, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 28, 16093, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Brawler - On Aggro - Remove Aura \'Self Visual - Sleep Until Cancelled (DND)\''); + +-- Shattered Hand Reaver +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16699); +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`, `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 +(16699, 0, 0, 0, 0, 0, 100, 0, 1500, 1500, 5000, 9000, 0, 11, 15496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - In Combat - Cast \'Cleave\''), +(16699, 0, 1, 0, 0, 0, 100, 0, 8000, 12000, 9000, 13000, 0, 11, 30471, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - In Combat - Cast \'Uppercut\''), +(16699, 0, 2, 3, 2, 0, 100, 0, 0, 25, 120000, 120000, 0, 11, 30485, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - Between 0-25% Health - Cast \'Enrage\''), +(16699, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - Between 0-25% Health - Say Line 0'), +(16699, 0, 4, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - On Aggro - Say Line 1'); + +-- Shattered Hand Legionnaire //TODO: Proper Scripting for summons +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16700); +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`, `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 +(16700, 0, 0, 0, 0, 0, 100, 0, 1500, 5000, 240000, 240000, 0, 11, 30472, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - In Combat - Cast \'Aura of Discipline\''), +(16700, 0, 2, 0, 13, 0, 100, 0, 10000, 15000, 0, 0, 0, 11, 15615, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - On Victim Casting - Cast \'Pummel\''), +(16700, 0, 3, 4, 2, 0, 100, 0, 0, 25, 120000, 120000, 0, 11, 30485, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - Between 0-25% Health - Cast \'Enrage\''), +(16700, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - Between 0-25% Health - Say Line 0'), +(16700, 0, 5, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - On Aggro - Say Line 1'); + +-- Shattered Hand Sharpshooter +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16704); +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`, `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 +(16704, 0, 0, 0, 9, 0, 100, 2, 5, 30, 2300, 5000, 0, 11, 15620, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - Within 5-30 Range - Cast \'Shoot\' (Normal Dungeon)'), +(16704, 0, 1, 0, 9, 0, 100, 4, 5, 30, 2300, 5000, 0, 11, 22907, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - Within 5-30 Range - Cast \'Shoot\' (Heroic Dungeon)'), +(16704, 0, 2, 0, 9, 0, 100, 0, 5, 30, 6000, 9000, 0, 11, 30481, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - Within 5-30 Range - Cast \'Incendiary Shot\''), +(16704, 0, 3, 0, 9, 0, 100, 4, 5, 30, 10000, 14000, 0, 11, 37551, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - Within 5-30 Range - Cast \'Viper Sting\' (Heroic Dungeon)'); + +-- Creeping Ooze +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17356); +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`, `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 +(17356, 0, 0, 0, 0, 0, 100, 0, 3000, 6000, 3800, 6600, 0, 11, 30494, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Creeping Ooze - In Combat - Cast \'Sticky Ooze\''); + +-- Creeping Oozeling +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 17357; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17357); +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`, `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 +(17357, 0, 0, 0, 0, 0, 100, 0, 3000, 6000, 3800, 6500, 0, 11, 30494, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Creeping Oozeling - In Combat - Cast \'Sticky Ooze\''); + +-- Shattered Hand Heathen +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17420); +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`, `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 +(17420, 0, 0, 0, 0, 0, 100, 2, 6000, 13000, 12000, 16000, 0, 11, 30474, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Heathen - In Combat - Cast \'Bloodthirst\' (Normal Dungeon)'), +(17420, 0, 1, 0, 0, 0, 100, 4, 6000, 13000, 12000, 16000, 0, 11, 35949, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Heathen - In Combat - Cast \'Bloodthirst\' (Heroic Dungeon)'), +(17420, 0, 2, 3, 2, 0, 100, 0, 0, 30, 120000, 120000, 0, 11, 30485, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Heathen - Between 0-30% Health - Cast \'Enrage\''), +(17420, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Heathen - Between 0-30% Health - Say Line 0'), +(17420, 0, 4, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Heathen - On Aggro - Say Line 1'); + +-- Shattered Hand Archer +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17427); +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`, `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 +(17427, 0, 0, 0, 9, 0, 100, 2, 5, 30, 2300, 5000, 0, 11, 16100, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Archer - Within 5-30 Range - Cast \'Shoot\' (Normal Dungeon)'), +(17427, 0, 1, 0, 9, 0, 100, 4, 5, 30, 2300, 5000, 0, 11, 22907, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Archer - Within 5-30 Range - Cast \'Shoot\' (Heroic Dungeon)'), +(17427, 0, 2, 0, 9, 0, 100, 0, 5, 30, 6000, 9000, 0, 11, 30990, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Archer - Within 5-30 Range - Cast \'Multi-Shot\''); + +-- Shattered Hand Zealot +DELETE FROM `creature_template_addon` WHERE (`entry` IN (17462, 20595)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17462, 0, 0, 0, 1, 0, 0, '18950'), +(20595, 0, 0, 0, 1, 0, 0, '18950'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17462); +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`, `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 +(17462, 0, 0, 0, 9, 0, 100, 0, 0, 5, 10000, 13000, 0, 11, 30989, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Within 0-5 Range - Cast \'Hamstring\''); + +-- Shattered Hand Gladiator // TODO: Sparring +DELETE FROM `creature_template_addon` WHERE (`entry` IN (17464, 20586)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17464, 0, 0, 0, 1, 0, 0, '19818'), +(20586, 0, 0, 0, 1, 0, 0, '19818'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17464); +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`, `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 +(17464, 0, 0, 0, 0, 0, 100, 0, 6000, 18000, 10000, 20000, 0, 11, 16856, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Gladiator - In Combat - Cast \'Mortal Strike\''); + +-- Shattered Hand Centurion +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17465); +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`, `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 +(17465, 0, 0, 0, 0, 0, 100, 2, 1500, 2500, 4000, 6000, 0, 11, 15572, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Centurion - In Combat - Cast \'Sunder Armor\' (Normal Dungeon)'), +(17465, 0, 1, 0, 0, 0, 100, 4, 1500, 2500, 4000, 6000, 0, 11, 16145, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Centurion - In Combat - Cast \'Sunder Armor\' (Heroic Dungeon)'), +(17465, 0, 2, 0, 0, 0, 100, 2, 3000, 7000, 17000, 21000, 0, 11, 30931, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Centurion - In Combat - Cast \'Battle Shout\' (Normal Dungeon)'), +(17465, 0, 3, 0, 0, 0, 100, 4, 3000, 7000, 17000, 21000, 0, 11, 31403, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Centurion - In Combat - Cast \'Battle Shout\' (Heroic Dungeon)'), +(17465, 0, 4, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Centurion - On Aggro - Say Line 1'); + +-- Rabid Warhound +DELETE FROM `creature_template_addon` WHERE (`entry` IN (17669, 20574)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17669, 0, 0, 0, 1, 0, 0, '18950'), +(20574, 0, 0, 0, 1, 0, 0, '18950'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17669); +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`, `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 +(17669, 0, 0, 0, 0, 0, 100, 0, 500, 500, 7000, 10000, 0, 11, 30639, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Rabid Warhound - In Combat - Cast \'Carnivorous Bite\''), +(17669, 0, 1, 0, 0, 0, 40, 0, 2000, 2000, 8000, 14000, 0, 11, 30636, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rabid Warhound - In Combat - Cast \'Furious Howl\''); + +-- Shattered Hand Houndmaster +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17670); +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`, `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 +(17670, 0, 0, 0, 9, 0, 100, 2, 5, 30, 2300, 5000, 0, 11, 15620, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Houndmaster - Within 5-30 Range - Cast \'Shoot\' (Normal Dungeon)'), +(17670, 0, 1, 0, 9, 0, 100, 4, 5, 30, 2300, 5000, 0, 11, 22907, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Houndmaster - Within 5-30 Range - Cast \'Shoot\' (Heroic Dungeon)'), +(17670, 0, 2, 0, 0, 0, 100, 0, 7000, 12000, 60000, 70000, 0, 11, 34100, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Houndmaster - In Combat - Cast \'Volley\''), +(17670, 0, 3, 0, 9, 0, 100, 0, 5, 30, 12000, 16000, 0, 11, 30932, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Houndmaster - Within 5-30 Range - Cast \'Impaling Bolt\''); + +-- Shattered Hand Champion // Uncertain if Aggro Drop is related to Concussive Blow +DELETE FROM `creature_template_addon` WHERE (`entry` IN (17671, 20584)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17671, 0, 0, 0, 1, 0, 0, '12782 18950'), +(20584, 0, 0, 0, 1, 0, 0, '12782 18950'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17671); +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`, `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 +(17671, 0, 0, 4, 0, 0, 100, 0, 1500, 1500, 10000, 14000, 0, 11, 32588, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Champion - In Combat - Cast \'Concussion Blow\''), +(17671, 0, 1, 0, 0, 0, 100, 0, 3000, 6000, 12000, 15000, 0, 11, 32587, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Champion - In Combat - Cast \'Shield Block\''), +(17671, 0, 2, 0, 13, 0, 100, 0, 13000, 16000, 0, 0, 0, 11, 11972, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Champion - On Victim Casting - Cast \'Shield Bash\''), +(17671, 0, 3, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Champion - On Aggro - Say Line 1'), +(17671, 0, 4, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 13, 0, 100, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Champion - Linked - Drop Threat'); + +-- Shadowmoon Darkcaster +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17694); +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`, `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 +(17694, 0, 0, 0, 0, 0, 100, 2, 0, 0, 2400, 3800, 0, 11, 12471, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - In Combat - Cast \'Shadow Bolt\' (Normal Dungeon)'), +(17694, 0, 1, 0, 0, 0, 100, 4, 0, 0, 2400, 3800, 0, 11, 15232, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - In Combat - Cast \'Shadow Bolt\' (Heroic Dungeon)'), +(17694, 0, 2, 0, 0, 0, 100, 0, 4000, 8000, 13000, 18000, 0, 11, 12542, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - In Combat - Cast \'Fear\''), +(17694, 0, 3, 0, 0, 0, 100, 2, 2000, 6000, 14000, 18000, 0, 11, 11990, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - In Combat - Cast \'Rain of Fire\' (Normal Dungeon)'), +(17694, 0, 4, 0, 0, 0, 100, 4, 2000, 6000, 14000, 18000, 0, 11, 33508, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - In Combat - Cast \'Rain of Fire\' (Heroic Dungeon)'), +(17694, 0, 5, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - On Aggro - Say Line 1'), +(17694, 0, 6, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - Between 0-15% Health - Flee For Assist (No Repeat)'); + +-- Shattered Hand Assassin +DELETE FROM `creature_template_addon` WHERE (`entry` IN (17695, 20580)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17695, 0, 0, 0, 1, 0, 0, '30991'), +(20580, 0, 0, 0, 1, 0, 0, '30991'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17695); +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`, `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 +(17695, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Assassin - On Respawn - Set Reactstate Defensive'), +(17695, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Assassin - On Aggro - Set Reactstate Aggressive'), +(17695, 0, 2, 0, 67, 0, 100, 0, 4500, 6500, 0, 0, 0, 11, 30992, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Assassin - On Behind Target - Cast \'Backstab\''), +(17695, 0, 3, 0, 0, 0, 100, 0, 8000, 11000, 22000, 25000, 0, 11, 36974, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Assassin - In Combat - Cast \'Wound Poison\''), +(17695, 0, 4, 0, 0, 0, 100, 0, 2000, 4500, 12000, 20000, 0, 11, 30981, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Assassin - In Combat - Cast \'Crippling Poison\''), +(17695, 0, 5, 0, 10, 0, 100, 0, 0, 15, 12000, 15000, 1, 11, 30980, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Assassin - Within 0-15 Range Out of Combat LoS - Cast \'Sap\''), +(17695, 0, 6, 0, 10, 0, 100, 0, 0, 8, 4000, 8000, 0, 11, 30986, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Assassin - Within 0-8 Range Out of Combat LoS - Cast \'Cheap Shot\''), +(17695, 0, 7, 0, 9, 0, 100, 0, 0, 8, 4000, 8000, 0, 11, 30986, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Assassin - Within 0-8 Range - Cast \'Cheap Shot\''); + +-- Kargath Adds // These are sniffed +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17621); +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`, `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 +(17621, 0, 0, 0, 0, 0, 100, 0, 7300, 18300, 15550, 26450, 0, 11, 30474, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Heathen Guard - In Combat - Cast \'Bloodthirst\''), +(17621, 0, 1, 2, 2, 0, 100, 0, 0, 20, 120000, 120000, 0, 11, 30485, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Heathen Guard - Between 0-20% Health - Cast \'Enrage\''), +(17621, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Heathen Guard - Between 0-20% Health - Say Line 0'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17622); +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`, `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 +(17622, 0, 0, 0, 0, 0, 100, 2, 1200, 6100, 3100, 5600, 0, 11, 15620, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sharpshooter Guard - In Combat - Cast \'Shoot\' (Normal Dungeon)'), +(17622, 0, 1, 0, 0, 0, 100, 4, 1200, 6100, 3100, 5600, 0, 11, 22907, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sharpshooter Guard - In Combat - Cast \'Shoot\' (Heroic Dungeon)'), +(17622, 0, 2, 0, 0, 0, 100, 0, 12150, 30400, 12150, 30400, 0, 11, 30481, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Sharpshooter Guard - In Combat - Cast \'Incendiary Shot\''), +(17622, 0, 3, 0, 0, 0, 100, 0, 13350, 21000, 20700, 39250, 0, 11, 23601, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Sharpshooter Guard - In Combat - Cast \'Scatter Shot\''); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17623); +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`, `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 +(17623, 0, 0, 0, 0, 0, 100, 0, 7300, 14250, 950, 14550, 0, 11, 15496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Reaver Guard - In Combat - Cast \'Cleave\''), +(17623, 0, 1, 0, 0, 0, 100, 0, 12150, 30400, 15800, 30700, 0, 11, 30471, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Reaver Guard - In Combat - Cast \'Uppercut\''), +(17623, 0, 2, 3, 2, 0, 100, 0, 0, 25, 120000, 120000, 0, 11, 30485, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Reaver Guard - Between 0-25% Health - Cast \'Enrage\''), +(17623, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Reaver Guard - Between 0-25% Health - Say Line 0'); + +-- Shattered Hand Scout +UPDATE `creature_template_addon` SET `bytes2` = 1, `auras` = '18950' WHERE (`entry` = 17462); + +-- Blood Guard +UPDATE `creature_template_addon` SET `bytes2` = 1, `auras` = '18950' WHERE (`entry` IN (17461, 20581, 20923)); + +-- Fel Orc Convert +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|33554432 WHERE (`entry` = 17083); From 324ee93ebb91830c2ac8ef5cfdd38467b1be6931 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 8 Apr 2023 18:09:53 +0000 Subject: [PATCH 07/32] chore(DB): import pending files Referenced commit(s): 5139d28e47b7184f1a16d10a1d4ab55bb572d478 --- .../rev_1680890996039990100.sql => db_world/2023_04_08_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1680890996039990100.sql => db_world/2023_04_08_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1680890996039990100.sql b/data/sql/updates/db_world/2023_04_08_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1680890996039990100.sql rename to data/sql/updates/db_world/2023_04_08_00.sql index 8867543ed..f707ca0f3 100644 --- a/data/sql/updates/pending_db_world/rev_1680890996039990100.sql +++ b/data/sql/updates/db_world/2023_04_08_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_06_01 -> 2023_04_08_00 DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (22911,36023,30481,30636,34100,30932); INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES (22911, 22911, 37511), From a695d00932ecb721ad9767e62e396610942a7b96 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 8 Apr 2023 21:56:09 -0300 Subject: [PATCH 08/32] fix(Scripts/Steamvault): Rework Kalithresh (#15883) --- .../rev_1680984695073809300.sql | 21 ++ src/server/game/Instances/InstanceScript.cpp | 19 +- src/server/game/Instances/InstanceScript.h | 3 + .../SteamVault/boss_warlord_kalithresh.cpp | 196 ++++++++++-------- .../SteamVault/instance_steam_vault.cpp | 13 +- .../SteamVault/steam_vault.h | 5 + 6 files changed, 166 insertions(+), 91 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1680984695073809300.sql diff --git a/data/sql/updates/pending_db_world/rev_1680984695073809300.sql b/data/sql/updates/pending_db_world/rev_1680984695073809300.sql new file mode 100644 index 000000000..2ea8b1a79 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1680984695073809300.sql @@ -0,0 +1,21 @@ +-- +UPDATE `creature_template` SET `unit_flags` = `unit_flags` |33554432, `ScriptName` = '' WHERE `entry` IN (17954, 20631); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (17954, 20631); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17954, 0, 0, 0, 0, 0, 0, '25900'), +(20631, 0, 0, 0, 0, 0, 0, '25900'); + +DELETE FROM `creature_template_movement` WHERE `CreatureId` IN (17954, 20631); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Rooted`) VALUES +(17954, 1, 1), (20631, 1, 1); + +SELECT * FROM creature_template_movement WHERE creatureid = 17954; + +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_warlords_rage'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(31543, 'spell_warlords_rage'); + +DELETE FROM `creature_text` WHERE `CreatureId` = 17798 AND `GroupID` = 5; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17798, 5, 0, '%s begins to channel from the nearby distiller...', 16, 0, 100, 0, 0, 0, 19166, 0, 'kalithresh EMOTE_DISTILLER'); diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index 03c307bea..3d013e302 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -208,7 +208,10 @@ void InstanceScript::UpdateMinionState(Creature* minion, EncounterState state) minion->Respawn(); else { - minion->AI()->DoZoneInCombat(nullptr, 100.0f); + if (minion->GetReactState() == REACT_AGGRESSIVE) + { + minion->AI()->DoZoneInCombat(nullptr, 100.0f); + } } break; default: @@ -362,6 +365,20 @@ void InstanceScript::StorePersistentData(uint32 index, uint32 data) persistentData[index] = data; } +void InstanceScript::DoForAllMinions(uint32 id, std::function exec) +{ + BossInfo* bossInfo = &bosses[id]; + MinionSet listCopy = bossInfo->minion; + + for (auto const& minion : listCopy) + { + if (minion) + { + exec(minion); + } + } +} + void InstanceScript::Load(const char* data) { if (!data) diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index f5b255ebf..4f3a2d8c9 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -260,6 +260,9 @@ public: // Allows to perform particular actions virtual void DoAction(int32 /*action*/) {} + + // Allows executing code using all creatures registered in the instance script as minions + void DoForAllMinions(uint32 id, std::function exec); protected: void SetHeaders(std::string const& dataHeaders); void SetBossNumber(uint32 number) { bosses.resize(number); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp index 7b8d92e6d..93ebcb991 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp @@ -17,44 +17,110 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" -#include "SpellInfo.h" +#include "SpellScript.h" +#include "SpellAuras.h" #include "steam_vault.h" -enum NagaDistiller +enum Texts { - SAY_INTRO = 0, - SAY_REGEN = 1, - SAY_AGGRO = 2, - SAY_SLAY = 3, - SAY_DEATH = 4, + SAY_INTRO = 0, + SAY_REGEN = 1, + SAY_AGGRO = 2, + SAY_SLAY = 3, + SAY_DEATH = 4, + EMOTE_DISTILLER = 5 +}; - SPELL_SPELL_REFLECTION = 31534, - SPELL_IMPALE = 39061, - SPELL_HEAD_CRACK = 16172, - SPELL_WARLORDS_RAGE = 37081, - SPELL_WARLORDS_RAGE_NAGA = 31543, - SPELL_WARLORDS_RAGE_PROC = 36453, +enum Spells +{ + SPELL_SPELL_REFLECTION = 31534, + SPELL_IMPALE = 39061, + SPELL_HEAD_CRACK = 16172, + SPELL_WARLORDS_RAGE = 37081, + SPELL_WARLORDS_RAGE_DISTILLER = 31543, + SPELL_WARLORDS_RAGE_PROC = 36453 +}; - NPC_NAGA_DISTILLER = 17954, - - EVENT_SPELL_REFLECTION = 1, - EVENT_SPELL_IMPALE = 2, - EVENT_SPELL_HEAD_CRACK = 3, - EVENT_SPELL_RAGE = 4 +enum Misc +{ + POINT_DISTILLER = 1 }; struct boss_warlord_kalithresh : public BossAI { - boss_warlord_kalithresh(Creature* creature) : BossAI(creature, DATA_WARLORD_KALITHRESH) { } + boss_warlord_kalithresh(Creature* creature) : BossAI(creature, DATA_WARLORD_KALITHRESH), _introDone(false) { } + + void Reset() override + { + _Reset(); + instance->DoForAllMinions(DATA_WARLORD_KALITHRESH, [&](Creature* minion) { + minion->SetReactState(REACT_PASSIVE); + minion->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + }); + } + + void MoveInLineOfSight(Unit* who) override + { + if (!_introDone && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 35.0f)) + { + Talk(SAY_INTRO); + _introDone = true; + } + + ScriptedAI::MoveInLineOfSight(who); + } void JustEngagedWith(Unit* /*who*/) override { Talk(SAY_AGGRO); _JustEngagedWith(); - events.ScheduleEvent(EVENT_SPELL_REFLECTION, 20000, 36000); - events.ScheduleEvent(EVENT_SPELL_IMPALE, 7000, 14000); - events.ScheduleEvent(EVENT_SPELL_HEAD_CRACK, 15000); - events.ScheduleEvent(EVENT_SPELL_RAGE, 20000); + + scheduler.Schedule(20s, 36s, [this](TaskContext context) + { + DoCastSelf(SPELL_SPELL_REFLECTION); + context.Repeat(); + }).Schedule(7s, 14s, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_IMPALE, 0, 10.0f); + context.Repeat(7500ms, 12500ms); + }).Schedule(15s, [this](TaskContext context) + { + DoCastVictim(SPELL_HEAD_CRACK); + context.Repeat(45s, 55s); + }).Schedule(20s, [this](TaskContext context) + { + Talk(SAY_REGEN); + Talk(EMOTE_DISTILLER); + + if (Creature* distiller = me->FindNearestCreature(NPC_NAGA_DISTILLER, 8.0f)) + { + distiller->AI()->DoCast(me, SPELL_WARLORDS_RAGE_DISTILLER, true); + distiller->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + } + else + { + if (Creature* distiller = me->FindNearestCreature(NPC_NAGA_DISTILLER, 100.0f)) + { + me->GetMotionMaster()->MoveFollow(distiller, 8.0f, 0.0f); + + scheduler.Schedule(1s, [this](TaskContext chaseContext) + { + if (Creature* distiller = me->FindNearestCreature(NPC_NAGA_DISTILLER, 8.0f)) + { + distiller->AI()->DoCast(me, SPELL_WARLORDS_RAGE_DISTILLER, true); + distiller->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->ResumeChasingVictim(); + } + else + { + chaseContext.Repeat(); + } + }); + } + } + + context.Repeat(45s); + }); } void KilledUnit(Unit* victim) override @@ -69,85 +135,39 @@ struct boss_warlord_kalithresh : public BossAI { Talk(SAY_DEATH); _JustDied(); + instance->DoForAllMinions(DATA_WARLORD_KALITHRESH, [&](Creature* minion) { + minion->KillSelf(); + }); } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_REFLECTION: - me->CastSpell(me, SPELL_SPELL_REFLECTION, false); - events.Repeat(20s, 36s); - break; - case EVENT_SPELL_IMPALE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f, true)) - me->CastSpell(target, SPELL_IMPALE, false); - events.Repeat(7500ms, 12500ms); - break; - case EVENT_SPELL_HEAD_CRACK: - DoCastVictim(SPELL_HEAD_CRACK); - events.Repeat(45s, 55s); - break; - case EVENT_SPELL_RAGE: - if (Creature* distiller = me->FindNearestCreature(NPC_NAGA_DISTILLER, 100.0f)) - { - Talk(SAY_REGEN); - //me->CastSpell(me, SPELL_WARLORDS_RAGE, false); - distiller->AI()->DoAction(1); - } - events.RepeatEvent(45000); - break; - } - - DoMeleeAttackIfReady(); - } +private: + bool _introDone; }; -struct npc_naga_distiller : public NullCreatureAI +// 31543 - Warlord's Rage +class spell_warlords_rage : public AuraScript { - npc_naga_distiller(Creature* creature) : NullCreatureAI(creature) { } + PrepareAuraScript(spell_warlords_rage); - uint32 spellTimer; - - void Reset() override + void HandleAfterRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - spellTimer = 0; - me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - } - - void DoAction(int32 param) override - { - if (param != 1) - return; - - me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->CastSpell(me, SPELL_WARLORDS_RAGE_NAGA, true); - spellTimer = 1; - } - - void UpdateAI(uint32 diff) override - { - if (spellTimer) + if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) { - spellTimer += diff; - if (spellTimer >= 12000) + if (GetTarget()) { - if (Creature* kali = me->FindNearestCreature(NPC_WARLORD_KALITHRESH, 100.0f)) - kali->CastSpell(kali, SPELL_WARLORDS_RAGE_PROC, true); - me->KillSelf(); + GetTarget()->CastSpell(GetTarget(), SPELL_WARLORDS_RAGE_PROC, true); } } } + + void Register() override + { + AfterEffectRemove += AuraEffectRemoveFn(spell_warlords_rage::HandleAfterRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } }; void AddSC_boss_warlord_kalithresh() { RegisterSteamvaultCreatureAI(boss_warlord_kalithresh); - RegisterSteamvaultCreatureAI(npc_naga_distiller); + RegisterSpellScript(spell_warlords_rage); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp index 645347300..693b12a78 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp @@ -25,6 +25,12 @@ enum MainChambersAccessPanelSays SAY_LOUD_RUMBLE = 1 }; +MinionData const minionData[] = +{ + { NPC_NAGA_DISTILLER, DATA_WARLORD_KALITHRESH }, + { 0, 0 } +}; + class go_main_chambers_access_panel : public GameObjectScript { public: @@ -91,14 +97,16 @@ public: ObjectData const creatureData[] = { { NPC_MEKGINEER_STEAMRIGGER, DATA_MEKGINEER_STEAMRIGGER }, - { NPC_DOOR_CONTROLLER, DATA_DOOR_CONTROLLER } + { NPC_DOOR_CONTROLLER, DATA_DOOR_CONTROLLER }, + { 0, 0 } }; ObjectData const objectData[] = { { GO_ACCESS_PANEL_HYDRO, DATA_ACCESS_PANEL_HYDROMANCER }, { GO_ACCESS_PANEL_MEK, DATA_ACCESS_PANEL_MEKGINEER }, - { GO_MAIN_CHAMBERS_DOOR, DATA_MAIN_CHAMBERS_DOOR } + { GO_MAIN_CHAMBERS_DOOR, DATA_MAIN_CHAMBERS_DOOR }, + { 0, 0, } }; class instance_steam_vault : public InstanceMapScript @@ -113,6 +121,7 @@ public: SetHeaders(DataHeaders); SetBossNumber(EncounterCount); LoadObjectData(creatureData, objectData); + LoadMinionData(minionData); } void OnGameObjectCreate(GameObject* go) override diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h index 71e384e2f..997b0b568 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h @@ -51,6 +51,11 @@ enum steamVaultNPCGO NPC_DOOR_CONTROLLER = 20926 }; +enum NagaDistiller +{ + NPC_NAGA_DISTILLER = 17954 +}; + template inline AI* GetSteamVaultAI(T* obj) { From 4f569e47001d0c36ac3c0b3e57074dfa8ee05afd Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 9 Apr 2023 00:58:31 +0000 Subject: [PATCH 09/32] chore(DB): import pending files Referenced commit(s): a695d00932ecb721ad9767e62e396610942a7b96 --- .../rev_1680984695073809300.sql => db_world/2023_04_09_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1680984695073809300.sql => db_world/2023_04_09_00.sql} (96%) diff --git a/data/sql/updates/pending_db_world/rev_1680984695073809300.sql b/data/sql/updates/db_world/2023_04_09_00.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1680984695073809300.sql rename to data/sql/updates/db_world/2023_04_09_00.sql index 2ea8b1a79..0cffd10c4 100644 --- a/data/sql/updates/pending_db_world/rev_1680984695073809300.sql +++ b/data/sql/updates/db_world/2023_04_09_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_08_00 -> 2023_04_09_00 -- UPDATE `creature_template` SET `unit_flags` = `unit_flags` |33554432, `ScriptName` = '' WHERE `entry` IN (17954, 20631); From c07bf079f6318ff637144c9f4b92bdc2ee24ba61 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 8 Apr 2023 22:48:02 -0300 Subject: [PATCH 10/32] fix(Core/Events): fix infinite loop (#15887) fix(Core/Events): fix inifnite loop --- src/common/Utilities/EventProcessor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/Utilities/EventProcessor.cpp b/src/common/Utilities/EventProcessor.cpp index 3488d0ff3..3943a09b8 100644 --- a/src/common/Utilities/EventProcessor.cpp +++ b/src/common/Utilities/EventProcessor.cpp @@ -117,6 +117,7 @@ void EventProcessor::CancelEventGroup(uint8 group) { if (itr->second->m_eventGroup != group) { + ++itr; continue; } From 85e2e5c77b6c7d07eb727563acf659508cea9fd0 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 8 Apr 2023 23:57:44 -0300 Subject: [PATCH 11/32] chore(SQL): Remove select query (#15888) * chore(SQL): Remove select query * Update 2023_04_09_00.sql --------- Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- data/sql/updates/db_world/2023_04_09_00.sql | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/data/sql/updates/db_world/2023_04_09_00.sql b/data/sql/updates/db_world/2023_04_09_00.sql index 0cffd10c4..3984e9503 100644 --- a/data/sql/updates/db_world/2023_04_09_00.sql +++ b/data/sql/updates/db_world/2023_04_09_00.sql @@ -9,9 +9,8 @@ INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `b DELETE FROM `creature_template_movement` WHERE `CreatureId` IN (17954, 20631); INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Rooted`) VALUES -(17954, 1, 1), (20631, 1, 1); - -SELECT * FROM creature_template_movement WHERE creatureid = 17954; +(17954, 1, 1), +(20631, 1, 1); DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_warlords_rage'; INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES From 816b85b84d05f7b7b020c15bc4541ad9026b20c1 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 8 Apr 2023 23:58:11 -0300 Subject: [PATCH 12/32] fix(DB/Reputation): Correct onkill reputation for Shattered Halls (#15881) Create rev_1680910484895618500.sql --- .../rev_1680910484895618500.sql | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1680910484895618500.sql diff --git a/data/sql/updates/pending_db_world/rev_1680910484895618500.sql b/data/sql/updates/pending_db_world/rev_1680910484895618500.sql new file mode 100644 index 000000000..cc609e829 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1680910484895618500.sql @@ -0,0 +1,63 @@ +-- +SET @REP_MEDIUM_N := 12; +SET @REP_MEDIUM_H := 15; +SET @REP_SMALL_N := 2; +SET @REP_SMALL_H := 3; +SET @REP_BOSS_N := 120; +SET @REP_BOSS_H := 250; +SET @REP_LARGE_N := 24; +SET @REP_LARGE_H := 30; + +DELETE FROM `creature_onkill_reputation` WHERE (`creature_id` IN (16507,16523,16593,16594,16699,16700,16704,16807,16808,16809,17083,17356,17357,17420,17427,17461,17462,17464,17465,17471,17552,17578,17611,17621,17622,17623,17669,17670,17671,17687,17693,17694,17695,18370,19523,19524,20709,20593,20591,20582,20576,20590,20589,20594,20568,20597,20596,20567,20565,20566,20587,20579,20581,20595,20586,20583,20570,20569,20578,20575,20574,20588,20584,20592,20577,20580,20598,20572,20573)); +INSERT INTO `creature_onkill_reputation` (`creature_id`, `RewOnKillRepFaction1`, `RewOnKillRepFaction2`, `MaxStanding1`, `IsTeamAward1`, `RewOnKillRepValue1`, `MaxStanding2`, `IsTeamAward2`, `RewOnKillRepValue2`, `TeamDependent`) VALUES +(16507, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Sentry +(16523, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Savage +(16593, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Brawler +(16594, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shadowmoon Acolyte +(16699, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Reaver +(16700, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Legionnaire +(16704, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Sharpshooter +(16807, 946, 947, 7, 0, @REP_BOSS_N, 7, 0, @REP_BOSS_N, 1), -- Grand Warlock Nethekurse +(16808, 946, 947, 7, 0, @REP_BOSS_N, 7, 0, @REP_BOSS_N, 1), -- Warchief Kargath Bladefist +(16809, 946, 947, 7, 0, @REP_BOSS_N, 7, 0, @REP_BOSS_N, 1), -- Warbringer O'mrogg +(17083, 946, 947, 7, 0, @REP_SMALL_N, 7, 0, @REP_SMALL_N, 1), -- Fel Orc Convert +(17420, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Heathen +(17427, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Archer +(17461, 946, 947, 7, 0, @REP_LARGE_N, 7, 0, @REP_LARGE_N, 1), -- Shattered Hand Blood Guard +(17462, 946, 947, 7, 0, @REP_SMALL_N, 7, 0, @REP_SMALL_N, 1), -- Shattered Hand Zealot +(17464, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Gladiator +(17465, 946, 947, 7, 0, @REP_LARGE_N, 7, 0, @REP_LARGE_N, 1), -- Shattered Hand Centurion +(17621, 946, 947, 7, 0, @REP_SMALL_N, 7, 0, @REP_SMALL_N, 1), -- Heathen Guard +(17622, 946, 947, 7, 0, @REP_SMALL_N, 7, 0, @REP_SMALL_N, 1), -- Sharpshooter Guard +(17623, 946, 947, 7, 0, @REP_SMALL_N, 7, 0, @REP_SMALL_N, 1), -- Reaver Guard +(17669, 946, 947, 7, 0, @REP_SMALL_N, 7, 0, @REP_SMALL_N, 1), -- Rabid Warhound +(17670, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Houndmaster +(17671, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shattered Hand Champion +(17694, 946, 947, 7, 0, @REP_MEDIUM_N, 7, 0, @REP_MEDIUM_N, 1), -- Shadowmoon Darkcaster +(17695, 946, 947, 7, 0, @REP_SMALL_N, 7, 0, @REP_SMALL_N, 1), -- Shattered Hand Assassin + +(20593, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Sentry (1) +(20591, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Savage (1) +(20582, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Brawler (1) +(20576, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shadowmoon Acolyte (1) +(20590, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Reaver (1) +(20589, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Legionnaire (1) +(20594, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Sharpshooter (1) +(20568, 946, 947, 7, 0, @REP_BOSS_H, 7, 0, @REP_BOSS_H, 1), -- Grand Warlock Nethekurse (1) +(20597, 946, 947, 7, 0, @REP_BOSS_H, 7, 0, @REP_BOSS_H, 1), -- Warchief Kargath Bladefist (1) +(20596, 946, 947, 7, 0, @REP_BOSS_H, 7, 0, @REP_BOSS_H, 1), -- Warbringer O'mrogg (1) +(20567, 946, 947, 7, 0, @REP_SMALL_H, 7, 0, @REP_SMALL_H, 1), -- Fel Orc Convert (1) +(20587, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Heathen (1) +(20579, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Archer (1) +(20581, 946, 947, 7, 0, @REP_BOSS_H, 7, 0, @REP_BOSS_H, 1), -- Blood Guard Porung +(20595, 946, 947, 7, 0, @REP_SMALL_H, 7, 0, @REP_SMALL_H, 1), -- Shattered Hand Zealot (1) +(20586, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Gladiator (1) +(20583, 946, 947, 7, 0, @REP_LARGE_H, 7, 0, @REP_LARGE_H, 1), -- Shattered Hand Centurion (1) +(20569, 946, 947, 7, 0, @REP_SMALL_H, 7, 0, @REP_SMALL_H, 1), -- Heathen Guard (1) +(20578, 946, 947, 7, 0, @REP_SMALL_H, 7, 0, @REP_SMALL_H, 1), -- Sharpshooter Guard (1) +(20575, 946, 947, 7, 0, @REP_SMALL_H, 7, 0, @REP_SMALL_H, 1), -- Reaver Guard (1) +(20574, 946, 947, 7, 0, @REP_SMALL_H, 7, 0, @REP_SMALL_H, 1), -- Rabid Warhound (1) +(20588, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Houndmaster (1) +(20584, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shattered Hand Champion (1) +(20577, 946, 947, 7, 0, @REP_MEDIUM_H, 7, 0, @REP_MEDIUM_H, 1), -- Shadowmoon Darkcaster (1) +(20580, 946, 947, 7, 0, @REP_SMALL_H, 7, 0, @REP_SMALL_H, 1); -- Shattered Hand Assassin (1) From 0e1e0ffa0bb2dc4e153d2bea8b97cbbbb6a054e5 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 9 Apr 2023 03:00:38 +0000 Subject: [PATCH 13/32] chore(DB): import pending files Referenced commit(s): 816b85b84d05f7b7b020c15bc4541ad9026b20c1 --- .../rev_1680910484895618500.sql => db_world/2023_04_09_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1680910484895618500.sql => db_world/2023_04_09_01.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1680910484895618500.sql b/data/sql/updates/db_world/2023_04_09_01.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1680910484895618500.sql rename to data/sql/updates/db_world/2023_04_09_01.sql index cc609e829..ad25e22a1 100644 --- a/data/sql/updates/pending_db_world/rev_1680910484895618500.sql +++ b/data/sql/updates/db_world/2023_04_09_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_09_00 -> 2023_04_09_01 -- SET @REP_MEDIUM_N := 12; SET @REP_MEDIUM_H := 15; From 54d85a5f95dcc4168ebec6070d65fd2d4dcd1c38 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 9 Apr 2023 00:22:36 -0300 Subject: [PATCH 14/32] fix(DB/Conditions): Add missing SmartAI conditions to Blood Furnace (#15875) Create rev_1680885248680215700.sql --- .../rev_1680885248680215700.sql | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1680885248680215700.sql diff --git a/data/sql/updates/pending_db_world/rev_1680885248680215700.sql b/data/sql/updates/pending_db_world/rev_1680885248680215700.sql new file mode 100644 index 000000000..94222ac1e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1680885248680215700.sql @@ -0,0 +1,26 @@ +-- Shadowmoon Warlock +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17371); +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`, `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 +(17371, 0, 0, 0, 9, 0, 100, 2, 0, 40, 3300, 4900, 0, 11, 12739, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - Within 0-40 Range - Cast \'Shadow Bolt\' (Normal Dungeon)'), +(17371, 0, 1, 0, 9, 0, 100, 4, 0, 40, 3300, 4900, 0, 11, 15472, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - Within 0-40 Range - Cast \'Shadow Bolt\' (Heroic Dungeon)'), +(17371, 0, 2, 0, 0, 0, 100, 2, 1100, 7800, 14800, 30100, 0, 11, 32197, 32, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - In Combat - Cast \'Corruption\' (Normal Dungeon)'), +(17371, 0, 3, 0, 0, 0, 100, 4, 1100, 7800, 14800, 30100, 0, 11, 37113, 32, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - In Combat - Cast \'Corruption\' (Heroic Dungeon)'), +(17371, 0, 4, 0, 0, 0, 100, 0, 6600, 10700, 14900, 14900, 0, 11, 13338, 32, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - In Combat - Cast \'Curse of Tongues\''), +(17371, 0, 5, 0, 1, 0, 100, 0, 12600, 13700, 21900, 24900, 0, 11, 33111, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - Out of Combat - Cast \'Fel Power\''); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceGroup` = 6) AND (`SourceEntry` = 17371) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 29) AND (`ConditionTarget` = 1) AND (`ConditionValue1` = 18894) AND (`ConditionValue2` = 10) AND (`ConditionValue3` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 6, 17371, 0, 0, 29, 1, 18894, 10, 0, 0, 0, 0, '', 'Only cast Fel Power (33111) if a Felguard Brute (18894) is nearby'); + +-- Hellfire Imp +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17477); +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`, `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 +(17477, 0, 0, 0, 1, 0, 100, 1, 1000, 1000, 0, 0, 0, 11, 30540, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Imp - Out of Combat - Cast \'Summon Visual\' (No Repeat)'), +(17477, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 28, 30540, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Imp - On Aggro - Remove Aura \'Summon Visual\''), +(17477, 0, 2, 0, 0, 0, 100, 2, 1000, 3400, 3400, 4800, 0, 11, 15242, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Imp - In Combat - Cast \'Fireball\' (Normal Dungeon)'), +(17477, 0, 3, 0, 0, 0, 100, 4, 1000, 3400, 3400, 4800, 0, 11, 17290, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Imp - In Combat - Cast \'Fireball\' (Heroic Dungeon)'), +(17477, 0, 4, 0, 0, 0, 100, 4, 6000, 9000, 6000, 9000, 0, 11, 16144, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Imp - In Combat - Cast \'Fire Blast\' (Heroic Dungeon)'); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceGroup` = 1) AND (`SourceEntry` = 17477) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 29) AND (`ConditionTarget` = 1) AND (`ConditionValue1` = 17397) AND (`ConditionValue2` = 10) AND (`ConditionValue3` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 17477, 0, 0, 29, 1, 17397, 10, 0, 0, 0, 0, '', 'Only cast Summon Visual (30540) if a Shadowmoon Adept (17397) is nearby'); From bed7c9abdef1bad1e7124680395baac4d383a8f0 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sun, 9 Apr 2023 06:22:56 +0300 Subject: [PATCH 15/32] fix(DB/Loot): Remove Pattern: Drums of Restoration from reference loot. (#15877) fix(DB/Loot): Drums of Restoration dropping from creatures. --- data/sql/updates/pending_db_world/rev_1680893261686151600.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1680893261686151600.sql diff --git a/data/sql/updates/pending_db_world/rev_1680893261686151600.sql b/data/sql/updates/pending_db_world/rev_1680893261686151600.sql new file mode 100644 index 000000000..9555ff6c7 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1680893261686151600.sql @@ -0,0 +1,2 @@ +-- Pattern: Drums of Restoration +DELETE FROM `reference_loot_template` WHERE `Entry`=24092 AND `Item`=29714; From 32eb3c31c48a47737713ecf437787c57d6983ce6 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 9 Apr 2023 00:23:15 -0300 Subject: [PATCH 16/32] fix(DB/Quest): Improve Quest Betrayed (3506) and port from event_script to SAI (#15852) Create rev_1680812289641554100.sql Co-authored-by: Carlos Morales --- .../rev_1680812289641554100.sql | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1680812289641554100.sql diff --git a/data/sql/updates/pending_db_world/rev_1680812289641554100.sql b/data/sql/updates/pending_db_world/rev_1680812289641554100.sql new file mode 100644 index 000000000..52258a6b1 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1680812289641554100.sql @@ -0,0 +1,52 @@ +-- Blood Elf Defender +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=8581; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 8581); +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`, `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 +(8581, 0, 0, 0, 0, 0, 100, 0, 7000, 12000, 11000, 14000, 0, 11, 12169, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blood Elf Defender - In Combat - Cast \'Shield Block\''), +(8581, 0, 1, 0, 0, 0, 100, 0, 5000, 9000, 8000, 13000, 0, 11, 12170, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Blood Elf Defender - In Combat - Cast \'Revenge\''), +(8581, 0, 2, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 80, 858100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blood Elf Defender - On Just Summoned - Run Script'), +(8581, 0, 3, 0, 2, 0, 100, 513, 0, 50, 0, 0, 0, 80, 858101, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blood Elf Defender - Between 0-50% Health - Run Script (No Repeat)'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 858100); +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`, `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 +(858100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 51347, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blood Elf Defender - Actionlist - Cast \'Teleport Visual Only\''), +(858100, 9, 1, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 50, 0, 0, 0, 0, 0, 0, 0, 'Blood Elf Defender - Actionlist - Start Attacking'), +(858100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blood Elf Defender - Actionlist - Say Line 0'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 858101); +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`, `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 +(858101, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 12, 8578, 4, 300000, 0, 0, 0, 8, 0, 0, 0, 0, 4279.11, -6295.57, 95.56, 0.05, 'Blood Elf Defender - Actionlist - Summon Creature \'Magus Rimtori\''), +(858101, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blood Elf Defender - Actionlist - Say Line 1'), +(858101, 9, 2, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blood Elf Defender - Actionlist - Say Line 2'); + +DELETE FROM `creature_text` WHERE `CreatureID`=8581; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(8581,0,0,'Who dares?! I will destroy you!',12,0,100,0,0,0,4502,0,'Blood Elf Defender'), +(8581,1,0,'Mistress!! They seek to destroy your work!!',12,0,100,0,0,0,4491,0,'Blood Elf Defender'), +(8581,2,0,'Ha! Now your death is ensured!',12,0,100,0,0,0,4492,0,'Blood Elf Defender'); + +-- Magus Rimtori +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=8578; +DELETE FROM `smart_scripts` WHERE `entryorguid`=8578 AND `source_type`=0; +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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(8578,0,0,0,0,0,100,0,0,0,3000,5000,11,20823,64,0,0,0,0,2,0,0,0,0,0,0,0,'Magus Rimtori - In Combat - Cast \'Fireball\''), +(8578,0,1,0,9,0,100,0,0,8,13000,16000,11,11831,0,0,0,0,0,1,0,0,0,0,0,0,0,'Magus Rimtori - Within 0-8 Range - Cast \'Frost Nova\''), +(8578,0,2,0,54,0,100,0,0,0,0,0,11,51347,0,0,0,0,0,1,0,0,0,0,0,0,0,'Magus Rimtori - On Just Summoned - Cast \'Teleport Visual Only\''), +(8578,0,3,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Magus Rimtori - On Aggro - Say Line 0'); + +DELETE FROM `creature_text` WHERE `CreatureID`=8578; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(8578,0,0,'You dare! Now feel my wrath!',14,0,100,0,0,0,4495,0,'Magus Rimtori'); + +-- Move from Event Scripts to SAI +DELETE FROM `event_scripts` WHERE `id` = 3241; + +UPDATE `gameobject_template` SET `AIName` = 'SmartGameObjectAI' WHERE `entry` = 150140; +DELETE FROM `smart_scripts` WHERE (`source_type` = 1 AND `entryorguid` = 150140); +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`, `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 +(150140, 1, 0, 0, 71, 0, 100, 0, 3241, 0, 0, 0, 0, 12, 8581, 4, 300000, 0, 0, 0, 8, 0, 0, 0, 0, 4279.11, -6295.57, 95.56, 0.05, 'Arcane Focusing Crystal - On Event 3241 Inform - Summon Creature \'Blood Elf Defender\''); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceGroup` = 1) AND (`SourceEntry` = 150140); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 150140, 1, 0, 29, 1, 8581, 50, 0, 1, 0, 0, '', 'Event will not run if it has already started'), +(22, 1, 150140, 1, 0, 29, 1, 8578, 50, 0, 1, 0, 0, '', 'Event will not run if it has already started'); From 9d1f10c4928a1b1af539435e1a0c7775d1523656 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 9 Apr 2023 03:25:42 +0000 Subject: [PATCH 17/32] chore(DB): import pending files Referenced commit(s): 32eb3c31c48a47737713ecf437787c57d6983ce6 --- .../rev_1680812289641554100.sql => db_world/2023_04_09_02.sql} | 1 + .../rev_1680885248680215700.sql => db_world/2023_04_09_03.sql} | 1 + .../rev_1680893261686151600.sql => db_world/2023_04_09_04.sql} | 1 + 3 files changed, 3 insertions(+) rename data/sql/updates/{pending_db_world/rev_1680812289641554100.sql => db_world/2023_04_09_02.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1680885248680215700.sql => db_world/2023_04_09_03.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1680893261686151600.sql => db_world/2023_04_09_04.sql} (71%) diff --git a/data/sql/updates/pending_db_world/rev_1680812289641554100.sql b/data/sql/updates/db_world/2023_04_09_02.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1680812289641554100.sql rename to data/sql/updates/db_world/2023_04_09_02.sql index 52258a6b1..8d2e35a65 100644 --- a/data/sql/updates/pending_db_world/rev_1680812289641554100.sql +++ b/data/sql/updates/db_world/2023_04_09_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_09_01 -> 2023_04_09_02 -- Blood Elf Defender UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=8581; DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 8581); diff --git a/data/sql/updates/pending_db_world/rev_1680885248680215700.sql b/data/sql/updates/db_world/2023_04_09_03.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1680885248680215700.sql rename to data/sql/updates/db_world/2023_04_09_03.sql index 94222ac1e..9af79666c 100644 --- a/data/sql/updates/pending_db_world/rev_1680885248680215700.sql +++ b/data/sql/updates/db_world/2023_04_09_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_09_02 -> 2023_04_09_03 -- Shadowmoon Warlock DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17371); 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`, `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 diff --git a/data/sql/updates/pending_db_world/rev_1680893261686151600.sql b/data/sql/updates/db_world/2023_04_09_04.sql similarity index 71% rename from data/sql/updates/pending_db_world/rev_1680893261686151600.sql rename to data/sql/updates/db_world/2023_04_09_04.sql index 9555ff6c7..a9fd58723 100644 --- a/data/sql/updates/pending_db_world/rev_1680893261686151600.sql +++ b/data/sql/updates/db_world/2023_04_09_04.sql @@ -1,2 +1,3 @@ +-- DB update 2023_04_09_03 -> 2023_04_09_04 -- Pattern: Drums of Restoration DELETE FROM `reference_loot_template` WHERE `Entry`=24092 AND `Item`=29714; From 6da18fc005b513727ea8a3a10a6da5df008433f4 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 9 Apr 2023 09:08:27 -0300 Subject: [PATCH 18/32] fix(DB/Creature): Correct respawn timers for 2 TBC quest mobs (#15886) * Create rev_1680966459127893700.sql * Update rev_1680966459127893700.sql --- data/sql/updates/pending_db_world/rev_1680966459127893700.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1680966459127893700.sql diff --git a/data/sql/updates/pending_db_world/rev_1680966459127893700.sql b/data/sql/updates/pending_db_world/rev_1680966459127893700.sql new file mode 100644 index 000000000..a33fa83e0 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1680966459127893700.sql @@ -0,0 +1,2 @@ +-- Terokkarantula and Arconus the Insatiable +UPDATE `creature` SET `spawntimesecs` = 180 WHERE `guid` IN (86843, 87039) AND `id1` IN (20554, 20682); From b9af72ebf4323d9cbd71b93e95178e461627bfd8 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 9 Apr 2023 12:10:53 +0000 Subject: [PATCH 19/32] chore(DB): import pending files Referenced commit(s): 6da18fc005b513727ea8a3a10a6da5df008433f4 --- .../rev_1680966459127893700.sql => db_world/2023_04_09_05.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1680966459127893700.sql => db_world/2023_04_09_05.sql} (77%) diff --git a/data/sql/updates/pending_db_world/rev_1680966459127893700.sql b/data/sql/updates/db_world/2023_04_09_05.sql similarity index 77% rename from data/sql/updates/pending_db_world/rev_1680966459127893700.sql rename to data/sql/updates/db_world/2023_04_09_05.sql index a33fa83e0..a93f526d2 100644 --- a/data/sql/updates/pending_db_world/rev_1680966459127893700.sql +++ b/data/sql/updates/db_world/2023_04_09_05.sql @@ -1,2 +1,3 @@ +-- DB update 2023_04_09_04 -> 2023_04_09_05 -- Terokkarantula and Arconus the Insatiable UPDATE `creature` SET `spawntimesecs` = 180 WHERE `guid` IN (86843, 87039) AND `id1` IN (20554, 20682); From 155bacb8dd068e31604ad5e7e5249bc8837a8306 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 9 Apr 2023 20:10:53 +0200 Subject: [PATCH 20/32] fix(Scripts/ShadowLabirynth): Ambassador Hellmaw: (#15761) * fix(Scripts/ShadowLabirynth): Ambassador Hellmaw: Properly handle Banish intro event. Ambassadow Hellmaw can attack while casting Corrosive Acid. Added missing paths. Fixes #15638 * buildfix. --- .../rev_1680357334133098700.sql | 40 +++++ .../boss_ambassador_hellmaw.cpp | 144 ++++++++++++++---- .../instance_shadow_labyrinth.cpp | 37 +++-- .../ShadowLabyrinth/shadow_labyrinth.h | 4 +- 4 files changed, 180 insertions(+), 45 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1680357334133098700.sql diff --git a/data/sql/updates/pending_db_world/rev_1680357334133098700.sql b/data/sql/updates/pending_db_world/rev_1680357334133098700.sql new file mode 100644 index 000000000..c59706e8f --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1680357334133098700.sql @@ -0,0 +1,40 @@ +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=18794 AND `source_type`=0 AND `id`=16; + +DELETE FROM `script_waypoint` WHERE `entry`=18731; +DELETE FROM `waypoint_data` WHERE `id` IN (1873100,1873101); +INSERT INTO `waypoint_data` VALUES +(1873100,1,-159.51387,-2.139098,8.073091,NULL,0,0,0,100,0), +(1873100,2,-163.44856,-7.553354,8.073133,NULL,0,0,0,100,0), +(1873100,3,-168.17548,-9.746803,8.073169,NULL,0,0,0,100,0), +(1873100,4,-171.3253,-13.198364,8.073106,NULL,0,0,0,100,0), +(1873100,5,-172.78348,-25.986193,8.073088,NULL,0,0,0,100,0), +(1873100,6,-173.66841,-54.100628,8.073081,NULL,0,0,0,100,0), +(1873100,7,-168.93939,-66.52654,8.073219,NULL,0,0,0,100,0), +(1873100,8,-157.49812,-73.04389,8.077904,NULL,0,0,0,100,0), +(1873100,9,-145.8215,-67.855865,8.063689,NULL,0,0,0,100,0), +(1873100,10,-141.28224,-56.002922,8.073066,NULL,0,0,0,100,0), +(1873100,11,-142.33768,-25.135996,8.073035,NULL,0,0,0,100,0), +(1873100,12,-143.23366,-14.373271,8.073031,NULL,0,0,0,100,0), +(1873100,13,-147.05266,-10.097949,8.0730295,NULL,0,0,0,100,0), +(1873100,14,-152.87035,-5.490992,8.073108,NULL,0,0,0,100,0), +(1873100,15,-156.7587,4.856207,8.073061,4.660028934478759765,0,0,0,100,0), + +(1873101,16,-156.31073,24.4289,8.072962,NULL,0,0,0,100,0), +(1873101,17,-153.34592,40.90819,6.877141,NULL,0,0,0,100,0), +(1873101,18,-144.48116,52.74748,5.6318674,NULL,0,0,0,100,0), +(1873101,19,-130.80013,60.605686,4.2999473,NULL,0,0,0,100,0), +(1873101,20,-91.258835,61.131367,3.2408845,NULL,0,0,0,100,0), +(1873101,22,-73.11457,51.921284,1.4783795,2.705260276794433593,30000,0,0,100,0), +(1873101,23,-89.108116,61.20221,3.026778,NULL,0,0,0,100,0), +(1873101,24,-108.00966,63.536663,3.4476438,NULL,0,0,0,100,0), +(1873101,25,-130.86102,60.57378,4.3055944,NULL,0,0,0,100,0), +(1873101,26,-143.99977,52.971825,5.5921054,NULL,0,0,0,100,0), +(1873101,27,-152.94989,41.38679,6.888551,NULL,0,0,0,100,0), +(1873101,28,-156.86404,25.838596,8.125509,NULL,30000,0,0,100,0), +(1873101,29,-156.68945,2.408526,8.073063,NULL,20000,0,0,100,0); + +UPDATE `creature_text` SET `Emote`=15 WHERE `CreatureID`=18731 AND `GroupID`=0; + +UPDATE `creature_template` SET `unit_flags`=32832 WHERE `entry` IN (18731,20636); +DELETE FROM `creature_template_addon` WHERE `entry`=18731; diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp index 893a31715..d9c359f15 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_ambassador_hellmaw.cpp @@ -17,7 +17,6 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" -#include "ScriptedEscortAI.h" #include "shadow_labyrinth.h" enum eEnums @@ -35,7 +34,12 @@ enum eEnums EVENT_SPELL_CORROSIVE = 1, EVENT_SPELL_FEAR = 2, - EVENT_SPELL_ENRAGE = 3 + EVENT_SPELL_ENRAGE = 3, + + PATH_ID_START = 1873100, + PATH_ID_PATHING = 1873101, + + SOUND_INTRO = 9349 }; class boss_ambassador_hellmaw : public CreatureScript @@ -48,9 +52,9 @@ public: return GetShadowLabyrinthAI(creature); } - struct boss_ambassador_hellmawAI : public npc_escortAI + struct boss_ambassador_hellmawAI : public ScriptedAI { - boss_ambassador_hellmawAI(Creature* creature) : npc_escortAI(creature) + boss_ambassador_hellmawAI(Creature* creature) : ScriptedAI(creature) { instance = creature->GetInstanceScript(); } @@ -59,64 +63,102 @@ public: EventMap events; bool isBanished; - void DoAction(int32 param) override + void InitializeAI() override { - if (param != 1) - return; + Reset(); - me->RemoveAurasDueToSpell(SPELL_BANISH); - Talk(SAY_INTRO); - Start(true, false, ObjectGuid::Empty, nullptr, false, true); - isBanished = false; + if (instance && instance->GetData(TYPE_RITUALISTS) != DONE) + { + isBanished = true; + me->SetImmuneToAll(true); + + me->m_Events.AddEventAtOffset([this]() + { + DoCastSelf(SPELL_BANISH, true); + }, 500ms); + } + else + { + me->GetMotionMaster()->MovePath(PATH_ID_START, false); + } } void Reset() override { events.Reset(); isBanished = false; + me->SetImmuneToAll(false); if (instance) { instance->SetData(TYPE_HELLMAW, NOT_STARTED); - if (instance->GetData(TYPE_OVERSEER) != DONE) - { - isBanished = true; - me->CastSpell(me, SPELL_BANISH, true); - } - else - Start(true, false, ObjectGuid::Empty, nullptr, false, true); } } + void DoAction(int32 param) override + { + if (param != 1) + { + return; + } + + me->RemoveAurasDueToSpell(SPELL_BANISH); + Talk(SAY_INTRO); + DoPlaySoundToSet(me, SOUND_INTRO); + isBanished = false; + me->SetImmuneToAll(false); + me->GetMotionMaster()->MovePath(PATH_ID_START, false); + } + void JustEngagedWith(Unit*) override { if (isBanished) + { return; + } + Talk(SAY_AGGRO); events.ScheduleEvent(EVENT_SPELL_CORROSIVE, urand(5000, 10000)); events.ScheduleEvent(EVENT_SPELL_FEAR, urand(15000, 20000)); if (IsHeroic()) + { events.ScheduleEvent(EVENT_SPELL_ENRAGE, 180000); + } if (instance) + { instance->SetData(TYPE_HELLMAW, IN_PROGRESS); + } } void MoveInLineOfSight(Unit* who) override { if (isBanished) + { return; - npc_escortAI::MoveInLineOfSight(who); + } + + ScriptedAI::MoveInLineOfSight(who); } void AttackStart(Unit* who) override { if (isBanished) + { return; - npc_escortAI::AttackStart(who); + } + + ScriptedAI::AttackStart(who); } - void WaypointReached(uint32 /*waypointId*/) override + void PathEndReached(uint32 pathId) override { + if (pathId == PATH_ID_START) + { + me->m_Events.AddEventAtOffset([this]() + { + me->GetMotionMaster()->MovePath(PATH_ID_PATHING, true); + }, 20s); + } } void KilledUnit(Unit* victim) override @@ -132,19 +174,63 @@ public: instance->SetData(TYPE_HELLMAW, DONE); } - void UpdateAI(uint32 diff) override + bool CanAIAttack(Unit const* /*unit*/) const override { - npc_escortAI::UpdateAI(diff); + return !isBanished; + } - if (!UpdateVictim()) - return; - - if (isBanished) + void DoMeleeAttackIfReady(bool ignoreCasting) + { + if (!ignoreCasting && me->HasUnitState(UNIT_STATE_CASTING)) { - EnterEvadeMode(); return; } + Unit* victim = me->GetVictim(); + if (!victim || !victim->IsInWorld()) + { + return; + } + + if (!me->IsWithinMeleeRange(victim)) + { + return; + } + + //Make sure our attack is ready and we aren't currently casting before checking distance + if (me->isAttackReady()) + { + // xinef: prevent base and off attack in same time, delay attack at 0.2 sec + if (me->haveOffhandWeapon()) + { + if (me->getAttackTimer(OFF_ATTACK) < ATTACK_DISPLAY_DELAY) + { + me->setAttackTimer(OFF_ATTACK, ATTACK_DISPLAY_DELAY); + } + } + + me->AttackerStateUpdate(victim, BASE_ATTACK, false, ignoreCasting); + me->resetAttackTimer(); + } + + if (me->haveOffhandWeapon() && me->isAttackReady(OFF_ATTACK)) + { + // xinef: delay main hand attack if both will hit at the same time (players code) + if (me->getAttackTimer(BASE_ATTACK) < ATTACK_DISPLAY_DELAY) + { + me->setAttackTimer(BASE_ATTACK, ATTACK_DISPLAY_DELAY); + } + + me->AttackerStateUpdate(victim, OFF_ATTACK, false, ignoreCasting); + me->resetAttackTimer(OFF_ATTACK); + } + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + events.Update(diff); switch (events.ExecuteEvent()) { @@ -161,7 +247,7 @@ public: break; } - DoMeleeAttackIfReady(); + DoMeleeAttackIfReady(me->FindCurrentSpellBySpellId(SPELL_CORROSIVE_ACID) != nullptr); } }; }; diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp index 2e88a620c..f05b3e2eb 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp @@ -39,13 +39,13 @@ public: ObjectGuid m_uiRefectoryDoorGUID; ObjectGuid m_uiScreamingHallDoorGUID; - uint32 m_uiFelOverseerCount; + uint32 _ritualistsAliveCount; void Initialize() override { memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); - m_uiFelOverseerCount = 0; + _ritualistsAliveCount = 0; } bool IsEncounterInProgress() const override @@ -76,11 +76,13 @@ public: void OnCreatureCreate(Creature* creature) override { + InstanceScript::OnCreatureCreate(creature); + switch (creature->GetEntry()) { - case NPC_FEL_OVERSEER: + case NPC_CABAL_RITUALIST: if (creature->IsAlive()) - ++m_uiFelOverseerCount; + ++_ritualistsAliveCount; break; case NPC_HELLMAW: m_uiHellmawGUID = creature->GetGUID(); @@ -88,19 +90,26 @@ public: } } + void OnUnitDeath(Unit* unit) override + { + InstanceScript::OnUnitDeath(unit); + + if (unit->GetEntry() == NPC_CABAL_RITUALIST) + if (!--_ritualistsAliveCount) + { + m_auiEncounter[TYPE_RITUALISTS] = DONE; + SaveToDB(); + if (Creature* cr = instance->GetCreature(m_uiHellmawGUID)) + { + cr->AI()->DoAction(1); + } + } + } + void SetData(uint32 type, uint32 uiData) override { switch (type) { - case TYPE_OVERSEER: - if (!--m_uiFelOverseerCount) - { - m_auiEncounter[type] = DONE; - if (Creature* cr = instance->GetCreature(m_uiHellmawGUID)) - cr->AI()->DoAction(1); - } - break; - case DATA_BLACKHEARTTHEINCITEREVENT: if (uiData == DONE) DoUseDoorOrButton(m_uiRefectoryDoorGUID); @@ -125,7 +134,7 @@ public: uint32 GetData(uint32 type) const override { - if (type == TYPE_OVERSEER) + if (type == TYPE_RITUALISTS) return m_auiEncounter[0]; return 0; } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h index 7b54d4514..c8bed78e9 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h @@ -27,7 +27,7 @@ enum slData { - TYPE_OVERSEER = 0, + TYPE_RITUALISTS = 0, TYPE_HELLMAW = 1, DATA_BLACKHEARTTHEINCITEREVENT = 2, DATA_GRANDMASTERVORPILEVENT = 3, @@ -37,7 +37,7 @@ enum slData enum slNPCandGO { - NPC_FEL_OVERSEER = 18796, + NPC_CABAL_RITUALIST = 18794, NPC_HELLMAW = 18731, REFECTORY_DOOR = 183296, //door opened when blackheart the inciter dies From d167781576b1811d0e3acb6e3a0f4d8bdf30f874 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 9 Apr 2023 18:13:26 +0000 Subject: [PATCH 21/32] chore(DB): import pending files Referenced commit(s): 155bacb8dd068e31604ad5e7e5249bc8837a8306 --- .../rev_1680357334133098700.sql => db_world/2023_04_09_06.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1680357334133098700.sql => db_world/2023_04_09_06.sql} (98%) diff --git a/data/sql/updates/pending_db_world/rev_1680357334133098700.sql b/data/sql/updates/db_world/2023_04_09_06.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1680357334133098700.sql rename to data/sql/updates/db_world/2023_04_09_06.sql index c59706e8f..8786418bf 100644 --- a/data/sql/updates/pending_db_world/rev_1680357334133098700.sql +++ b/data/sql/updates/db_world/2023_04_09_06.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_09_05 -> 2023_04_09_06 -- DELETE FROM `smart_scripts` WHERE `entryorguid`=18794 AND `source_type`=0 AND `id`=16; From d47e93830f54b6221daf145aeb57a48743471e28 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 9 Apr 2023 15:37:04 -0300 Subject: [PATCH 22/32] =?UTF-8?q?feat(Core/Scripts):=20Allow=20scheduling?= =?UTF-8?q?=20multiple=20hp=20checks=20at=20once=20for=20i=E2=80=A6=20(#15?= =?UTF-8?q?897)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(Core/Scripts): Allow scheduling multiple hp checks at once for identical phases --- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 8 ++++ .../game/AI/ScriptedAI/ScriptedCreature.h | 1 + .../SethekkHalls/boss_talon_king_ikiss.cpp | 37 ++++++------------- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index fa19acaeb..25ed7b439 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -691,6 +691,14 @@ void BossAI::ScheduleHealthCheckEvent(uint32 healthPct, std::function ex _healthCheckEvents.push_back(HealthCheckEventData(healthPct, exec)); }; +void BossAI::ScheduleHealthCheckEvent(std::initializer_list healthPct, std::function exec) +{ + for (auto const& checks : healthPct) + { + _healthCheckEvents.push_back(HealthCheckEventData(checks, exec)); + } +} + bool BossAI::_ProccessHealthCheckEvent(uint8 healthPct, uint32 damage, std::function exec) const { if (me->HealthBelowPctDamaged(healthPct, damage)) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index 744d2d75d..f260a39e4 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -470,6 +470,7 @@ public: void UpdateAI(uint32 diff) override; void ScheduleHealthCheckEvent(uint32 healthPct, std::function exec); + void ScheduleHealthCheckEvent(std::initializer_list healthPct, std::function exec); // Hook used to execute events scheduled into EventMap without the need // to override UpdateAI diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp index 6794a1db7..869260040 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_talon_king_ikiss.cpp @@ -56,16 +56,19 @@ struct boss_talon_king_ikiss : public BossAI _Reset(); _spoken = false; - ScheduleHealthCheckEvent(80, [&] { - TeleportAndCastExplosion(); - }); + ScheduleHealthCheckEvent({ 80, 50, 25 }, [&] { + me->InterruptNonMeleeSpells(false); + DoCastAOE(SPELL_BLINK); + DoCastSelf(SPELL_ARCANE_BUBBLE, true); + Talk(EMOTE_ARCANE_EXP); - ScheduleHealthCheckEvent(50, [&] { - TeleportAndCastExplosion(); - }); - - ScheduleHealthCheckEvent(25, [&] { - TeleportAndCastExplosion(); + scheduler.Schedule(1s, [this](TaskContext) + { + DoCastAOE(SPELL_ARCANE_EXPLOSION); + }).Schedule(6500ms, [this](TaskContext /*context*/) + { + me->GetThreatMgr().ResetAllThreat(); + }); }); ScheduleHealthCheckEvent(20, [&] { @@ -79,22 +82,6 @@ struct boss_talon_king_ikiss : public BossAI return _spoken; } - void TeleportAndCastExplosion() - { - me->InterruptNonMeleeSpells(false); - DoCastAOE(SPELL_BLINK); - DoCastSelf(SPELL_ARCANE_BUBBLE, true); - Talk(EMOTE_ARCANE_EXP); - - scheduler.Schedule(1s, [this](TaskContext) - { - DoCastAOE(SPELL_ARCANE_EXPLOSION); - }).Schedule(6500ms, [this](TaskContext /*context*/) - { - me->GetThreatMgr().ResetAllThreat(); - }); - } - void MoveInLineOfSight(Unit* who) override { if (!_spoken && who->IsPlayer()) From 619c9384d412d397b300eb1cff0cd25359de823c Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sun, 9 Apr 2023 21:54:33 +0300 Subject: [PATCH 23/32] fix(Script/ToC5): Remove hardcoded text(s) and some minor adjustments. (#15046) * remove hardcode + fix db incorrect duplicates * cs * cs2 * dual wield google translate (fix zhCN locale) * doxygen todo * /// --- .../rev_1676378706913010600.sql | 135 ++++++++++++++++++ .../boss_argent_challenge.cpp | 32 ++--- .../TrialOfTheChampion/boss_black_knight.cpp | 17 +-- .../boss_grand_champions.cpp | 17 +-- .../instance_trial_of_the_champion.cpp | 52 ++++--- .../trial_of_the_champion.cpp | 44 +++--- .../trial_of_the_champion.h | 117 +++++++-------- 7 files changed, 274 insertions(+), 140 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1676378706913010600.sql diff --git a/data/sql/updates/pending_db_world/rev_1676378706913010600.sql b/data/sql/updates/pending_db_world/rev_1676378706913010600.sql new file mode 100644 index 000000000..1e0909dc2 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676378706913010600.sql @@ -0,0 +1,135 @@ +-- Populate creature_text for Highlord Tirion Fordring (ToC5) from ToC25 (34996) Should probably be 34996 for both, needs a sniff. +DELETE FROM `creature_text` WHERE `CreatureID`=33628; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(33628, 21, 0, 'Welcome, champions. Today, before the eyes of your leaders and peers, you will prove yourselves worthy combatants.', 14, 0, 100, 1, 0, 0, 35321, 0, 'Highlord Tirion Fordring - SAY_TIRION_CHAMPION_INTRO_1'), +(33628, 22, 0, 'You will first be facing three of the Grand Champions of the Tournament! These fierce contenders have beaten out all others to reach the pinnacle of skill in the joust.', 14, 0, 100, 0, 0, 0, 35330, 0, 'Highlord Tirion Fordring - SAY_TIRION_CHAMPION_INTRO_2'), +(33628, 23, 0, 'Begin!', 14, 0, 100, 0, 0, 8574, 35331, 0, 'Highlord Tirion Fordring - SAY_TIRION_CHAMPION_BEGIN'), +(33628, 24, 0, 'Well fought! Your next challenge comes from the Crusade\'s own ranks. You will be tested against their considerable prowess.', 14, 0, 100, 0, 0, 15882, 35541, 0, 'Highlord Tirion Fordring - SAY_TIRION_PALETRESS_INTRO_1'), +(33628, 31, 0, 'Well done. You have proven yourself today-', 14, 0, 100, 0, 0, 0, 35544, 0, 'Highlord Tirion Fordring - SAY_TIRION_KNIGHT_INTRO_2'), +(33628, 34, 0, 'What is the meaning of this?', 14, 0, 100, 0, 0, 0, 35547, 0, 'Highlord Tirion Fordring - SAY_TIRION_KNIGHT_INTRO_2'), +(33628, 41, 0, 'You may begin!', 14, 0, 100, 22, 0, 8574, 35677, 0, 'Highlord Tirion Fordring - SAY_TIRION_YOU_MAY_BEGIN'); + +-- Alliance Announcer - Arelas Brightstar +DELETE FROM `creature_text` WHERE `creatureID`=35005; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(35005, 0, 0, 'Entering the arena, a paladin who is no stranger to the battlefield or tournament ground, the Grand Champion of the Argent Crusade, Eadric the Pure!', 14, 0, 100, 0, 0, 8574, 35542, 0, 'Arelas Brightstar - SAY_EADRIC_INTRO'), +(35005, 1, 0, 'The next combatant is second to none in her passion for upholding the Light. I give you Argent Confessor Paletress!', 14, 0, 100, 0, 0, 8574, 35543, 0, 'Arelas Brightstar - SAY_ARELAS_PALETRESS_INTRO'), +(35005, 2, 0, 'The Silver Covenant is pleased to present their contenders for this event, Highlord.', 14, 0, 100, 396, 0, 8574, 35259, 0, 'Arelas Brightstar - SAY_ARELAS_GRAND_CHAMPIONS_INTRO_1'), +(35005, 3, 0, 'Coming out of the gate is Eressea Dawnsinger, skilled mage and Grand Champion of Silvermoon!\n', 12, 0, 100, 0, 0, 8573, 35338, 0, 'Arelas Brightstar - SAY_ARELAS_GRAND_CHAMPIONS_INTRO_2'), +(35005, 4, 0, 'Entering the arena is the lean and dangerous Zul\'tore, Grand Champion of Sen\'jin!\n', 12, 0, 100, 0, 0, 8573, 35335, 0, 'Arelas Brightstar - SAY_ARELAS_GRAND_CHAMPIONS_INTRO_2'), +(35005, 5, 0, 'Presenting the fierce Grand Champion of Orgrimmar, Mokra the Skullcrusher!\n', 12, 0, 100, 0, 0, 8573, 35334, 0, 'Arelas Brightstar - SAY_ARELAS_GRAND_CHAMPIONS_INTRO_2'), +(35005, 6, 0, 'Representing the tenacity of the Forsaken, here is the Grand Champion of the Undercity, Deathstalker Visceri!\n', 12, 0, 100, 0, 0, 8573, 35337, 0, 'Arelas Brightstar - SAY_ARELAS_GRAND_CHAMPIONS_INTRO_2'), +(35005, 7, 0, 'Tall in the saddle of his kodo, here is the venerable Runok Wildmane, Grand Champion of Thunder Bluff!\n', 12, 0, 100, 0, 0, 8573, 35336, 0, 'Arelas Brightstar - SAY_ARELAS_GRAND_CHAMPIONS_INTRO_2'), +(35005, 8, 0, 'What\'s that, up near the rafters?', 12, 0, 100, 25, 0, 0, 35545, 0, 'Arelas Brightstar - SAY_ARELAS_KNIGHT_INTRO'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=35005 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(35005, 0, 0, 'zhCN', '正在走进竞技场的是一位对于战场和比武场都绝不陌生的圣骑士——银色十字军的总冠军,纯洁者耶德瑞克!'), +(35005, 1, 0, 'zhCN', '接下来出场的是圣光最忠实的追随者!银色神官帕尔崔丝!'), +(35005, 2, 0, 'zhCN', '银色盟约们很高兴地在此介绍他们的斗士,大领主。'), +(35005, 3, 0, 'zhCN', '从大门中走出来的是埃蕾希·晨歌,强大的法师!银月城总冠军!'), +(35005, 4, 0, 'zhCN', '进入竞技场的是削瘦却极度危险的祖尔托,森金村的总冠军!'), +(35005, 5, 0, 'zhCN', '现在请注意,强大的奥格瑞姆总冠军,碎颅者莫克拉出场!'), +(35005, 6, 0, 'zhCN', '我们现在要介绍的是幽暗城的总冠军,强韧的亡灵,死亡猎手维赛里!'), +(35005, 7, 0, 'zhCN', '高高地骑坐在科多兽上的是雷霆崖的总冠军,令人敬畏的鲁诺克·蛮鬃!'), +(35005, 8, 0, 'zhCN', '那些椽子旁边是什么?'); + + +-- Horde Announcer - Jaeren Sunsworn, reverse matching the BroadcastTextId +DELETE FROM `creature_text` WHERE `creatureID`=35004; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(35004, 0, 0, 'Entering the arena, a paladin who is no stranger to the battlefield or tournament ground, the Grand Champion of the Argent Crusade, Eadric the Pure!', 14, 0, 100, 0, 0, 8574, 35542, 0, 'Jaeren Sunsworn - SAY_JAEREN_INTRO'), +(35004, 1, 0, 'The next combatant is second to none in her passion for upholding the Light. I give you Argent Confessor Paletress!', 14, 0, 100, 0, 0, 8574, 35543, 0, 'Jaeren Sunsworn - SAY_JAEREN_PALETRESS_INTRO'), +(35004, 2, 0, 'The Sunreavers are proud to present their representatives in this trial by combat.', 14, 0, 100, 396, 0, 8574, 35260, 0, 'Jaeren Sunsworn - SAY_JAEREN_GRAND_CHAMPIONS_INTRO_1'), +(35004, 3, 0, 'Here comes the small but deadly Ambrose Boltspark, Grand Champion of Gnomeregan!', 12, 0, 100, 0, 0, 8573, 35248, 0, 'Jaeren Sunsworn - SAY_JAEREN_GRAND_CHAMPIONS_INTRO_2'), +(35004, 4, 0, 'Entering the arena is the Grand Champion of Darnassus, the skilled sentinel Jaelyne Evensong!', 12, 0, 100, 0, 0, 8573, 35249, 0, 'Jaeren Sunsworn - SAY_JAEREN_GRAND_CHAMPIONS_INTRO_2'), +(35004, 5, 0, 'Proud and strong, give a cheer for Marshal Jacob Alerius, the Grand Champion of Stormwind!', 12, 0, 100, 0, 0, 8573, 35245, 0, 'Jaeren Sunsworn - SAY_JAEREN_GRAND_CHAMPIONS_INTRO_2'), +(35004, 6, 0, 'The might of the dwarves is represented today by the Grand Champion of Ironforge, Lana Stouthammer!', 12, 0, 100, 0, 0, 8573, 35246, 0, 'Jaeren Sunsworn - SAY_JAEREN_GRAND_CHAMPIONS_INTRO_2'), +(35004, 7, 0, 'Coming out of the gate is Colosos, the towering Grand Champion of the Exodar!', 12, 0, 100, 0, 0, 8573, 35247, 0, 'Jaeren Sunsworn - SAY_JAEREN_GRAND_CHAMPIONS_INTRO_2'), +(35004, 8, 0, 'What\'s that, up near the rafters?', 12, 0, 100, 25, 0, 0, 35545, 0, 'Jaeren Sunsworn - SAY_JAEREN_KNIGHT_INTRO'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=35004 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(35004, 0, 0, 'zhCN', '正在走进竞技场的是一位对于战场和比武场都绝不陌生的圣骑士——银色十字军的总冠军,纯洁者耶德瑞克!'), +(35004, 1, 0, 'zhCN', '接下来出场的是圣光最忠实的追随者!银色神官帕尔崔丝!'), +(35004, 2, 0, 'zhCN', '夺日者们自豪地介绍他们在这场竞赛中的代表。'), +(35004, 3, 0, 'zhCN', '现在出场的是矮小却极度致命的安布罗斯·雷钉,诺莫瑞根的总冠军!'), +(35004, 4, 0, 'zhCN', '进入竞技场的是达纳苏斯的总冠军,战技非凡的娅琳·永歌!'), +(35004, 5, 0, 'zhCN', '请向骄傲而强壮的暴风城总冠军,雅克布·奥勒留斯元帅欢呼吧!'), +(35004, 6, 0, 'zhCN', '今天,矮人的力量将在铁炉堡的总冠军,拉娜·硬锤的身上得以展现!'), +(35004, 7, 0, 'zhCN', '从大门中走出来的是克罗索斯,埃索达强大的总冠军!'), +(35004, 8, 0, 'zhCN', '那些椽子旁边是什么?'); + +-- Argent Confessor Paletress remove empty BroadcastTextId duplicates +DELETE FROM `creature_text` WHERE `CreatureID`=34928; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(34928, 0, 0, 'Thank you, good herald. Your words are too kind.', 12, 0, 100, 2, 0, 16245, 35762, 0, 'Argent Confessor Paletress - SAY_INTRO_1'), +(34928, 1, 0, 'May the Light give me strength to provide a worthy challenge.', 12, 0, 100, 16, 0, 16246, 35763, 0, 'Argent Confessor Paletress - SAY_INTRO_2'), +(34928, 2, 0, 'Well, then. Let us begin.', 14, 0, 100, 0, 0, 16247, 35229, 0, 'Argent Confessor Paletress - SAY_AGGRO'), +(34928, 3, 0, 'Take this time to consider your past deeds.', 14, 0, 100, 0, 0, 16248, 35764, 0, 'Argent Confessor Paletress - SAY_MEMORY_SUMMON'), +(34928, 4, 0, 'Even the darkest memory fades when confronted!', 14, 0, 100, 0, 0, 16249, 35231, 0, 'Argent Confessor Paletress - SAY_MEMORY_DEATH'), +(34928, 5, 0, 'Take your rest.', 14, 0, 100, 0, 0, 16250, 35765, 0, 'Argent Confessor Paletress - SAY_KILL_PLAYER'), +(34928, 5, 1, 'Be at ease.', 14, 0, 100, 0, 0, 16251, 35766, 0, 'Argent Confessor Paletress - SAY_KILL_PLAYER'), +(34928, 6, 0, 'Excellent work!', 14, 0, 100, 0, 0, 16252, 35232, 0, 'Argent Confessor Paletress - SAY_DEFEATED'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=34928 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(34928, 0, 0, 'zhCN', '感谢你,传讯者,你的话真令我高兴。'), +(34928, 1, 0, 'zhCN', '愿圣光赐我力量,让我不负众望。'), +(34928, 2, 0, 'zhCN', '好,那么,让我们开始吧。'), +(34928, 3, 0, 'zhCN', '现在,让时光在你脑中倒流。'), +(34928, 4, 0, 'zhCN', '只要敢于面对,即使是最黑暗的回忆也将不再可怕!'), +(34928, 5, 0, 'zhCN', '下去休息吧。'), +(34928, 5, 1, 'zhCN', '安心的去吧。'), +(34928, 6, 0, 'zhCN', '真是精彩!'); + + +-- Eadric the Pure remove empty BroadcastTextId duplicates +DELETE FROM `creature_text` WHERE `CreatureID`=35119; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(35119, 0, 0, 'Are you up to the challenge? I will not hold back.', 12, 0, 100, 397, 0, 16134, 35347, 0, 'Eadric the Pure - SAY_INTRO'), +(35119, 1, 0, 'Prepare yourselves!', 14, 0, 100, 0, 0, 16135, 35758, 0, 'Eadric the Pure - SAY_AGGRO'), +(35119, 2, 0, '%s begins to radiate light. Shield your eyes!', 41, 0, 100, 0, 0, 0, 35415, 0, 'Eadric the Pure - EMOTE_RADIANCE'), +(35119, 3, 0, '%s targets $n with the Hammer of the Righteous!', 41, 0, 100, 0, 0, 16136, 35408, 0, 'Eadric the Pure - EMOTE_HAMMER_RIGHTEOUS'), +(35119, 4, 0, 'Hammer of the Righteous!', 14, 0, 100, 0, 0, 16136, 35442, 0, 'Eadric the Pure - SAY_HAMMER_RIGHTEOUS'), +(35119, 5, 0, 'You! You need more practice.', 14, 0, 100, 0, 0, 16137, 35759, 0, 'Eadric the Pure - SAY_KILL_PLAYER'), +(35119, 5, 1, 'Nay, nay, and I say yet again nay! Not good enough.', 14, 0, 100, 0, 0, 16138, 35760, 0, 'Eadric the Pure - SAY_KILL_PLAYER'), +(35119, 6, 0, 'I yield! I submit. Excellent work. May I run away now?', 14, 0, 100, 0, 0, 16139, 35761, 0, 'Eadric the Pure - SAY_DEFEATED'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=35119 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(35119, 0, 0, 'zhCN', '你们准备好了吗?我会全力以赴。'), +(35119, 1, 0, 'zhCN', '做好准备!'), +(35119, 2, 0, 'zhCN', '%s开始向四周放射光芒!赶快遮住你的眼睛!'), +(35119, 3, 0, 'zhCN', '%s用正义之锤对准了$n!'), +(35119, 4, 0, 'zhCN', '正义之锤!'), +(35119, 5, 0, 'zhCN', '呃!你!回去再练练吧。'), +(35119, 5, 1, 'zhCN', '不!不!我再说一遍,不!还不够好。'), +(35119, 6, 0, 'zhCN', '我认输!我投降。你做的很好。我可以走了吧?'); + + +-- The Black Knight remove empty BroadcastTextId duplicates +DELETE FROM `creature_text` WHERE `CreatureID`=35451; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(35451, 0, 0, 'You spoiled my grand entrance, rat.', 12, 0, 100, 0, 0, 16256, 35546, 0, 'The Black Knight - SAY_INTRO_1'), +(35451, 1, 0, 'Did you honestly think an agent of the Lich King would be bested on the field of your pathetic little tournament?', 12, 0, 100, 396, 0, 16257, 35548, 0, 'The Black Knight - SAY_INTRO_2'), +(35451, 2, 0, 'I\'ve come to finish my task.', 12, 0, 100, 396, 0, 16258, 35549, 0, 'The Black Knight - SAY_INTRO_3'), +(35451, 3, 0, 'This farce ends here!', 14, 0, 100, 0, 0, 16259, 35767, 0, 'The Black Knight - SAY_AGGRO'), +(35451, 4, 0, 'My rotting flesh was just getting in the way!', 14, 0, 100, 0, 0, 16262, 35771, 0, 'The Black Knight - SAY_PHASE_2'), +(35451, 5, 0, 'I have no need for bones to best you!', 14, 0, 100, 0, 0, 16263, 35772, 0, 'The Black Knight - SAY_PHASE_3'), +(35451, 6, 0, 'Pathetic.', 14, 0, 100, 0, 0, 16260, 35768, 0, 'The Black Knight - SAY_KILL_PLAYER'), +(35451, 6, 1, 'A waste of flesh.', 14, 0, 100, 0, 0, 16261, 35769, 0, 'The Black Knight - SAY_KILL_PLAYER'), +(35451, 7, 0, 'No! I must not fail... again...', 14, 0, 100, 0, 0, 16264, 35770, 0, 'The Black Knight - SAY_DEATH'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=35451 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(35451, 0, 0, 'zhCN', '你搞砸了我的盛大登场,鼠辈。'), +(35451, 1, 0, 'zhCN', '你们真以为,巫妖王的战士会败在你们那可怜的比武场上?'), +(35451, 2, 0, 'zhCN', '我是来做个了断的。'), +(35451, 3, 0, 'zhCN', '这场闹剧该结束了!'), +(35451, 4, 0, 'zhCN', '我的烂肉还真碍事!'), +(35451, 5, 0, 'zhCN', '我可不需要用骨头来打败你!'), +(35451, 6, 0, 'zhCN', '可怜。'), +(35451, 6, 1, 'zhCN', '真是对生命的浪费。'), +(35451, 7, 0, 'zhCN', '不!我绝不能再……失败了……'); + diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index f57ed75da..fb1c34a10 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -85,8 +85,6 @@ enum PaletressEvents EVENT_SPELL_WAKING_NIGHTMARE, }; -#define TEXT_RADIATE "Eadric the Pure begins to radiate light. Shield your eyes!" - class boss_eadric : public CreatureScript { public: @@ -119,10 +117,7 @@ public: { if( who->GetTypeId() == TYPEID_PLAYER ) { - if( urand(0, 1) ) - Talk(TEXT_EADRIC_SLAIN_1); - else - Talk(TEXT_EADRIC_SLAIN_2); + Talk(SAY_EADRIC_KILL_PLAYER); } } @@ -131,7 +126,7 @@ public: events.Reset(); events.ScheduleEvent(EVENT_SPELL_RADIANCE, 16000); events.ScheduleEvent(EVENT_SPELL_HAMMER_RIGHTEOUS, 25000); - Talk(TEXT_EADRIC_AGGRO); + Talk(SAY_EADRIC_AGGRO); me->CastSpell(me, SPELL_VENGEANCE, false); if( pInstance ) pInstance->SetData(BOSS_ARGENT_CHALLENGE, IN_PROGRESS); @@ -154,7 +149,7 @@ public: me->GetMap()->UpdateEncounterState(ENCOUNTER_CREDIT_CAST_SPELL, 68574, me); // paletress' spell credits encounter, but shouldn't credit achievements me->SetFaction(FACTION_FRIENDLY); events.Reset(); - Talk(TEXT_EADRIC_DEATH); + Talk(SAY_EADRIC_DEFEATED); me->GetThreatMgr().clearReferences(); me->SetRegeneratingHealth(false); _EnterEvadeMode(); @@ -182,16 +177,14 @@ public: break; case EVENT_SPELL_RADIANCE: me->CastSpell((Unit*)nullptr, SPELL_RADIANCE, false); - me->TextEmote(TEXT_RADIATE, nullptr, true); + Talk(SAY_EADRIC_EMOTE_RADIANCE); events.Repeat(16s); break; case EVENT_SPELL_HAMMER_RIGHTEOUS: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 55.0f, true) ) { - char buffer[100]; - snprintf(buffer, sizeof(buffer), "Eadric the Pure targets %s with the Hammer of the Righteous!", target->GetName().c_str()); - me->TextEmote(buffer, nullptr, true); - Talk(TEXT_EADRIC_HAMMER); + Talk(SAY_EADRIC_EMOTE_HAMMER_RIGHTEOUS, target); + Talk(SAY_EADRIC_HAMMER_RIGHTEOUS); me->CastSpell(target, SPELL_HAMMER_JUSTICE, true); me->CastSpell(target, SPELL_HAMMER_RIGHTEOUS, false); } @@ -251,10 +244,7 @@ public: { if( who->GetTypeId() == TYPEID_PLAYER ) { - if( urand(0, 1) ) - Talk(TEXT_PALETRESS_SLAIN_1); - else - Talk(TEXT_PALETRESS_SLAIN_2); + Talk(SAY_PALETRESS_KILL_PLAYER); } } @@ -264,7 +254,7 @@ public: events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, 9s, 12s); events.ScheduleEvent(EVENT_SPELL_SMITE, 2s, 3s); me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); - Talk(TEXT_PALETRESS_AGGRO); + Talk(SAY_PALETRESS_AGGRO); if( pInstance ) pInstance->SetData(BOSS_ARGENT_CHALLENGE, IN_PROGRESS); } @@ -275,7 +265,7 @@ public: { MemoryGUID.Clear(); me->RemoveAura(SPELL_SHIELD); - Talk(TEXT_PALETRESS_MEMORY_DEFEATED); + Talk(SAY_PALETRESS_MEMORY_DEATH); } else if( param == (-1) ) { @@ -302,7 +292,7 @@ public: me->CastSpell((Unit*)nullptr, 68574, true); // achievements me->SetFaction(FACTION_FRIENDLY); events.Reset(); - Talk(TEXT_PALETRESS_DEATH); + Talk(SAY_PALETRESS_DEFEATED); me->GetThreatMgr().clearReferences(); me->SetRegeneratingHealth(false); _EnterEvadeMode(); @@ -341,7 +331,7 @@ public: if( !summoned && HealthBelowPct(25) ) { me->InterruptNonMeleeSpells(true); - Talk(TEXT_PALETRESS_MEMORY_SUMMON); + Talk(SAY_PALETRESS_MEMORY_SUMMON); me->CastSpell((Unit*)nullptr, SPELL_HOLY_NOVA, false); me->CastSpell(me, SPELL_SHIELD, false); me->CastSpell((Unit*)nullptr, SPELL_SUMMON_MEMORY, false); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index c6e600c05..81ae2cb8d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -174,7 +174,7 @@ public: return; pInstance->SetData(BOSS_BLACK_KNIGHT, IN_PROGRESS); - Talk(TEXT_BK_AGGRO); + Talk(SAY_BK_AGGRO); me->CastSpell((Unit*)nullptr, (pInstance->GetData(DATA_TEAMID_IN_INSTANCE) == TEAM_HORDE ? SPELL_RAISE_DEAD_JAEREN : SPELL_RAISE_DEAD_ARELAS), false); if( Creature* announcer = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_ANNOUNCER)) ) announcer->DespawnOrUnsummon(); @@ -209,7 +209,7 @@ public: { case 2: me->SetDisplayId(MODEL_SKELETON); - Talk(TEXT_BK_SKELETON_RES); + Talk(SAY_BK_PHASE_2); me->CastSpell(me, SPELL_ARMY_DEAD, false); events.Reset(); @@ -220,7 +220,7 @@ public: break; case 3: me->SetDisplayId(MODEL_GHOST); - Talk(TEXT_BK_GHOST_RES); + Talk(SAY_BK_PHASE_3); events.Reset(); events.ScheduleEvent(EVENT_SPELL_DEATH_BITE, 2s); @@ -251,8 +251,8 @@ public: case EVENT_ANNOUNCER_SAY_ZOMBIE: if( pInstance && !summons.empty() ) if( Creature* ghoul = pInstance->instance->GetCreature(*summons.begin()) ) - ghoul->Yell("[Zombie] .... . Brains ....", LANG_UNIVERSAL); - + if (urand(0, 1)) + ghoul->Yell("[Zombie] .... . Brains ....", LANG_UNIVERSAL); /// @todo: Multiple variations + not always happening, from video sources, needs sniff to transition from DB. break; case EVENT_SPELL_PLAGUE_STRIKE: if( me->GetVictim() ) @@ -307,17 +307,14 @@ public: { if( victim->GetTypeId() == TYPEID_PLAYER ) { - if( urand(0, 1) ) - Talk(TEXT_BK_SLAIN_1); - else - Talk(TEXT_BK_SLAIN_2); + Talk(SAY_BK_KILL_PLAYER); } } void JustDied(Unit* /*killer*/) override { me->CastSpell((Unit*)nullptr, SPELL_BK_KILL_CREDIT, true); - Talk(TEXT_BK_DEATH); + Talk(SAY_BK_DEATH); if( pInstance ) pInstance->SetData(BOSS_BLACK_KNIGHT, DONE); if( me->ToTempSummon() ) diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 120599520..83e97383a 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -90,6 +90,11 @@ enum ChampionSpells SPELL_ROLLING_THROW = 67546, // not implemented yet! }; +enum Texts +{ + SAY_TRAMPLED = 0, +}; + #define SPELL_FIREBALL DUNGEON_MODE(SPELL_FIREBALL_N, SPELL_FIREBALL_H) #define SPELL_BLAST_WAVE DUNGEON_MODE(SPELL_BLAST_WAVE_N, SPELL_BLAST_WAVE_H) #define SPELL_POLYMORPH DUNGEON_MODE(SPELL_POLYMORPH_N, SPELL_POLYMORPH_H) @@ -647,16 +652,8 @@ public: void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override { - switch( spell->Id ) - { - case SPELL_TRAMPLE_STUN: - { - char buffer[50]; - snprintf(buffer, sizeof(buffer), "%s is trampled!", me->GetName().c_str()); - me->TextEmote(buffer); - } - break; - } + if (spell->Id == SPELL_TRAMPLE_STUN) + Talk(SAY_TRAMPLED, me); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index 9292e7860..11345c86d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -25,6 +25,17 @@ const Position SpawnPosition = {746.67f, 684.08f, 412.5f, 4.65f}; #define CLEANUP_CHECK_INTERVAL 5000 +/** + * @todo: Missing dialog/RP (already populated in DB) && spawns (can use ToC25 locations?) for: + * + * Garrosh Hellscream 34995 + * King Varian Wrynn 34990 + * Lady Jaina Proudmoore 34992 (missing in DB) + * Thrall 34994 + * + * And possibly NPC_TIRION 33628 is wrong (should be 34996, from ToC25, needs a sniff to confirm, check .h) + */ + class Group; class instance_trial_of_the_champion : public InstanceMapScript @@ -523,9 +534,9 @@ public: { Counter = urand(0, 1); if( Counter ) - announcer->AI()->Talk(TEXT_INTRODUCE_EADRIC); + announcer->AI()->Talk(SAY_EADRIC_INTRO_ANNOUNCER); else - announcer->AI()->Talk(TEXT_INTRODUCE_PALETRESS); + announcer->AI()->Talk(SAY_JAEREN_PALETRESS_INTRO); } HandleGameObject(GO_EnterGateGUID, false); events.RescheduleEvent(EVENT_START_ARGENT_CHALLENGE_INTRO, 0ms); @@ -702,27 +713,27 @@ public: case 0: CHAMPION_TO_SUMMON = NPC_MOKRA; MINION_TO_SUMMON = NPC_ORGRIMMAR_MINION; - TEXT_ID = TEXT_MOKRA_SKILLCRUSHER; + TEXT_ID = SAY_GRAND_CHAMPIONS_INTRO_SKULLCRUSHER; break; case 1: CHAMPION_TO_SUMMON = NPC_ERESSEA; MINION_TO_SUMMON = NPC_SILVERMOON_MINION; - TEXT_ID = TEXT_ERESSEA_DAWNSINGER; + TEXT_ID = SAY_GRAND_CHAMPIONS_INTRO_DAWNSINGER; break; case 2: CHAMPION_TO_SUMMON = NPC_RUNOK; MINION_TO_SUMMON = NPC_THUNDER_BLUFF_MINION; - TEXT_ID = TEXT_RUNOK_WILDMANE; + TEXT_ID = SAY_GRAND_CHAMPIONS_INTRO_WILDMANE; break; case 3: CHAMPION_TO_SUMMON = NPC_ZULTORE; MINION_TO_SUMMON = NPC_SENJIN_MINION; - TEXT_ID = TEXT_ZUL_TORE; + TEXT_ID = SAY_GRAND_CHAMPIONS_INTRO_ZULTORE; break; case 4: CHAMPION_TO_SUMMON = NPC_VISCERI; MINION_TO_SUMMON = NPC_UNDERCITY_MINION; - TEXT_ID = TEXT_DEATHSTALKER_VESCERI; + TEXT_ID = SAY_GRAND_CHAMPIONS_INTRO_DEATHSTALKER; break; default: return; @@ -767,10 +778,7 @@ public: if (!shortver) if( Creature* announcer = instance->GetCreature(NPC_AnnouncerGUID) ) { - if( TeamIdInInstance == TEAM_HORDE ) - TEXT_ID -= 10; - announcer->AI()->Talk(TEXT_ID); - announcer->AI()->Talk(TEXT_ID + 1); + announcer->AI()->Talk(TEXT_ID); /// @todo: Missing Argent Raid Spectator cheers. } } @@ -1007,16 +1015,6 @@ public: HandleGameObject(GO_MainGateGUID, true, gate); HandleGameObject(GO_EnterGateGUID, false, gate); } - if( Counter ) - { - announcer->AI()->Talk(TEXT_CHEER_EADRIC_1); - announcer->AI()->Talk(TEXT_CHEER_EADRIC_2); - } - else - { - announcer->AI()->Talk(TEXT_CHEER_PALETRESS_1); - announcer->AI()->Talk(TEXT_CHEER_PALETRESS_2); - } } for( int8 i = 0; i < 3; ++i ) @@ -1060,7 +1058,7 @@ public: case EVENT_ARGENT_CHALLENGE_SAY_1: { if( Creature* ac = instance->GetCreature(NPC_ArgentChampionGUID) ) - ac->AI()->Talk(Counter ? TEXT_EADRIC_SAY_1 : TEXT_PALETRESS_SAY_1); + ac->AI()->Talk(Counter ? SAY_EADRIC_INTRO : SAY_PALETRESS_INTRO_1); if( !Counter ) events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_SAY_2, 6s); } @@ -1068,7 +1066,7 @@ public: case EVENT_ARGENT_CHALLENGE_SAY_2: { if( Creature* ac = instance->GetCreature(NPC_ArgentChampionGUID) ) - ac->AI()->Talk(TEXT_PALETRESS_SAY_2); + ac->AI()->Talk(SAY_PALETRESS_INTRO_2); } break; case EVENT_ARGENT_SOLDIER_GROUP_ATTACK: @@ -1163,7 +1161,7 @@ public: } announcer->SetFacingToObject(bk_vehicle); - announcer->AI()->Talk(TEXT_BK_RAFTERS); + announcer->AI()->Talk(SAY_KNIGHT_INTRO); } } break; @@ -1174,7 +1172,7 @@ public: Position exitPos = { 751.003357f, 638.145508f, 411.570129f, M_PI }; bk->ExitVehicle(/*&exitPos*/); bk->GetMotionMaster()->MoveJump(exitPos, 2.0f, 2.0f); - bk->AI()->Talk(TEXT_BK_SPOILED); + bk->AI()->Talk(SAY_BK_INTRO_1); } events.ScheduleEvent(EVENT_BLACK_KNIGHT_CAST_ANNOUNCER, 2s); } @@ -1212,7 +1210,7 @@ public: { bk->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); bk->GetMotionMaster()->MovePoint(0, 746.81f, 623.15f, 411.42f); - bk->AI()->Talk(TEXT_BK_LICH); + bk->AI()->Talk(SAY_BK_INTRO_2); } if( Creature* announcer = instance->GetCreature(NPC_AnnouncerGUID) ) if (announcer->IsAlive()) @@ -1225,7 +1223,7 @@ public: if( Creature* bk = instance->GetCreature(NPC_BlackKnightGUID) ) { bk->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); - bk->AI()->Talk(TEXT_BK_TASK); + bk->AI()->Talk(SAY_BK_INTRO_3); } events.ScheduleEvent(EVENT_BLACK_KNIGHT_ATTACK, 5s); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index 38edfc409..4713f9f43 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -21,10 +21,23 @@ #include "ScriptedCreature.h" #include "ScriptedGossip.h" -#define GOSSIP_START_EVENT1a "I am ready." -#define GOSSIP_START_EVENT1b "I am ready. However I'd like to skip the pageantry." -#define GOSSIP_START_EVENT2 "I'm ready for the next challenge." -#define GOSSIP_START_EVENT3 "I'm ready." +enum Texts +{ + NPC_TEXT_NOT_MOUNTED_H = 15043, // Horde text + NPC_TEXT_NOT_MOUNTED_A = 14757, // Alliance text + + NPC_TEXT_CHALLENGE_1 = 14688, + NPC_TEXT_CHALLENGE_2 = 14737, + NPC_TEXT_CHALLENGE_3 = 14738, + + GOSSIP_MENU_STAGE = 10614, + + GOSSIP_START_EVENT_1A = 0, + GOSSIP_START_EVENT_1B = 3, // Skip roleplay + GOSSIP_START_EVENT_2 = 1, + GOSSIP_START_EVENT_3 = 2, + +}; class npc_announcer_toc5 : public CreatureScript { @@ -47,29 +60,28 @@ public: if (!player->GetVehicle()) { if (pInstance->GetData(DATA_TEAMID_IN_INSTANCE) == TEAM_HORDE) - gossipTextId = 15043; //Horde text + gossipTextId = NPC_TEXT_NOT_MOUNTED_H; else - gossipTextId = 14757; //Alliance text + gossipTextId = NPC_TEXT_NOT_MOUNTED_A; } else { - gossipTextId = 14688; - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT1a, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1338); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT1b, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1341); + gossipTextId = NPC_TEXT_CHALLENGE_1; + AddGossipItemFor(player, GOSSIP_MENU_STAGE, GOSSIP_START_EVENT_1A, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + AddGossipItemFor(player, GOSSIP_MENU_STAGE, GOSSIP_START_EVENT_1B, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); } break; case INSTANCE_PROGRESS_CHAMPIONS_DEAD: - gossipTextId = 14737; - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1339); + gossipTextId = NPC_TEXT_CHALLENGE_2; + AddGossipItemFor(player, GOSSIP_MENU_STAGE, GOSSIP_START_EVENT_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); break; case INSTANCE_PROGRESS_ARGENT_CHALLENGE_DIED: - gossipTextId = 14738; - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1340); + gossipTextId = NPC_TEXT_CHALLENGE_3; + AddGossipItemFor(player, GOSSIP_MENU_STAGE, GOSSIP_START_EVENT_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); break; default: return true; } - SendGossipMenuFor(player, gossipTextId, creature->GetGUID()); return true; } @@ -83,9 +95,9 @@ public: if(!pInstance) return true; - if(uiAction == GOSSIP_ACTION_INFO_DEF + 1338 || uiAction == GOSSIP_ACTION_INFO_DEF + 1341 || uiAction == GOSSIP_ACTION_INFO_DEF + 1339 || uiAction == GOSSIP_ACTION_INFO_DEF + 1340) + if(uiAction == GOSSIP_ACTION_INFO_DEF + 1 || uiAction == GOSSIP_ACTION_INFO_DEF + 2 || uiAction == GOSSIP_ACTION_INFO_DEF + 3 || uiAction == GOSSIP_ACTION_INFO_DEF + 4) { - pInstance->SetData(DATA_ANNOUNCER_GOSSIP_SELECT, (uiAction == GOSSIP_ACTION_INFO_DEF + 1341 ? 1 : 0)); + pInstance->SetData(DATA_ANNOUNCER_GOSSIP_SELECT, (uiAction == GOSSIP_ACTION_INFO_DEF + 2 ? 1 : 0)); creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h index 8d41e0f7e..be0dfa453 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.h @@ -141,11 +141,28 @@ enum eNpcs NPC_BLACK_KNIGHT = 35451, - NPC_JAEREN = 35004, - NPC_ARELAS = 35005, + NPC_JAEREN = 35004, // Horde + NPC_ARELAS = 35005, // Alliance NPC_RISEN_JAEREN = 35545, NPC_RISEN_ARELAS = 35564, - NPC_TIRION = 33628, + NPC_TIRION = 33628, // Possibly wrong npc here, 34996 had already populated creature_text (from ToC25) that matches. Needs a sniff to confirm. + + /// @todo: Argent Raid Spectator - FX - Missing spawns for Toc5 (map 650), ToC25 probably matches positions, needs a sniff to confirm. + // Horde + NPC_SPECTATOR_HORDE = 34883, + NPC_SPECTATOR_BELF = 34904, + NPC_SPECTATOR_TAUREN = 34903, + NPC_SPECTATOR_TROLL = 34902, + NPC_SPECTATOR_ORC = 34901, + NPC_SPECTATOR_UNDEAD = 34905, + + // Alliance + NPC_SPECTATOR_ALLIANCE = 34887, + NPC_SPECTATOR_DWARF = 34906, + NPC_SPECTATOR_GNOME = 34910, + NPC_SPECTATOR_HUMAN = 34900, + NPC_SPECTATOR_NELF = 34909, + NPC_SPECTATOR_DRAENEI = 34908, }; enum eGameObjects @@ -175,69 +192,57 @@ enum eVehicles enum eTexts { - TEXT_LANA_STOUTHAMMER = 1, - TEXT_CHEER_LANA_STOUTHAMMER = 2, - TEXT_COLOSOS = 3, - TEXT_CHEER_COLOSOS = 4, - TEXT_EVENSONG = 5, - TEXT_CHEER_EVENSONG = 6, - TEXT_MARSHAL_JACOB_ALERIUS = 7, - TEXT_CHEER_MARSHAL_JACOB_ALERIUS = 8, - TEXT_AMBROSE_BOLTSPARK = 9, - TEXT_CHEER_AMBROSE_BOLTSPARK = 10, + // Spectators + SAY_SPECTATOR_CHEER = 0, - TEXT_DEATHSTALKER_VESCERI = 11, - TEXT_CHEER_DEATHSTALKER_VESCERI = 12, - TEXT_RUNOK_WILDMANE = 13, - TEXT_CHEER_RUNOK_WILDMANE = 14, - TEXT_ZUL_TORE = 15, - TEXT_CHEER_ZUL_TORE = 16, - TEXT_MOKRA_SKILLCRUSHER = 17, - TEXT_CHEER_MOKRA_SKILLCRUSHER = 18, - TEXT_ERESSEA_DAWNSINGER = 19, - TEXT_CHEER_ERESSEA_DAWNSINGER = 20, + // Announcers: Alliance Announcer - Arelas Brightstar && Horde Announcer - Jaeren Sunsworn + SAY_EADRIC_INTRO_ANNOUNCER = 0, + SAY_JAEREN_PALETRESS_INTRO = 1, + SAY_GRAND_CHAMPIONS_INTRO_1 = 2, + SAY_GRAND_CHAMPIONS_INTRO_DAWNSINGER = 3, // Boltspark + SAY_GRAND_CHAMPIONS_INTRO_ZULTORE = 4, // Jaelyne + SAY_GRAND_CHAMPIONS_INTRO_SKULLCRUSHER = 5, // Jacob + SAY_GRAND_CHAMPIONS_INTRO_DEATHSTALKER = 6, // Lana + SAY_GRAND_CHAMPIONS_INTRO_WILDMANE = 7, // Colosos + SAY_KNIGHT_INTRO = 8, + // Eadric + SAY_EADRIC_INTRO = 0, + SAY_EADRIC_AGGRO = 1, + SAY_EADRIC_EMOTE_RADIANCE = 2, + SAY_EADRIC_EMOTE_HAMMER_RIGHTEOUS = 3, + SAY_EADRIC_HAMMER_RIGHTEOUS = 4, + SAY_EADRIC_KILL_PLAYER = 5, // "You! You need more practice." && "Nay, nay, and I say yet again nay! Not good enough." + SAY_EADRIC_DEFEATED = 6, + + // Confessor Paletress + SAY_PALETRESS_INTRO_1 = 0, + SAY_PALETRESS_INTRO_2 = 1, + SAY_PALETRESS_AGGRO = 2, + SAY_PALETRESS_MEMORY_SUMMON = 3, + SAY_PALETRESS_MEMORY_DEATH = 4, + SAY_PALETRESS_KILL_PLAYER = 5, // "Take your rest. "&& "Be at ease." + SAY_PALETRESS_DEFEATED = 6, + + // Tirion TEXT_WELCOME = 21, TEXT_WELCOME_2 = 22, TEXT_BEGIN = 23, TEXT_GRATZ_SLAIN_CHAMPIONS = 24, - TEXT_INTRODUCE_EADRIC = 25, - TEXT_INTRODUCE_PALETRESS = 26, - TEXT_CHEER_EADRIC_1 = 27, - TEXT_CHEER_EADRIC_2 = 28, - TEXT_EADRIC_SAY_1 = 39, - TEXT_CHEER_PALETRESS_1 = 29, - TEXT_CHEER_PALETRESS_2 = 30, - TEXT_PALETRESS_SAY_1 = 37, - TEXT_PALETRESS_SAY_2 = 38, TEXT_YOU_MAY_BEGIN = 41, - + // Tirion - The Black Knight Interactions TEXT_BK_INTRO = 31, - TEXT_BK_RAFTERS = 32, - TEXT_BK_SPOILED = 33, TEXT_BK_MEANING = 34, - TEXT_BK_LICH = 35, - TEXT_BK_TASK = 36, - TEXT_EADRIC_AGGRO = 42, - TEXT_EADRIC_HAMMER = 43, - TEXT_EADRIC_SLAIN_1 = 44, - TEXT_EADRIC_SLAIN_2 = 45, - TEXT_EADRIC_DEATH = 46, - - TEXT_PALETRESS_AGGRO = 47, - TEXT_PALETRESS_MEMORY_SUMMON = 48, - TEXT_PALETRESS_MEMORY_DEFEATED = 51, - TEXT_PALETRESS_SLAIN_1 = 49, - TEXT_PALETRESS_SLAIN_2 = 50, - TEXT_PALETRESS_DEATH = 52, - - TEXT_BK_AGGRO = 53, - TEXT_BK_SLAIN_1 = 57, - TEXT_BK_SLAIN_2 = 58, - TEXT_BK_SKELETON_RES = 54, - TEXT_BK_GHOST_RES = 55, - TEXT_BK_DEATH = 56, + // The Black Knight + SAY_BK_INTRO_1 = 0, + SAY_BK_INTRO_2 = 1, + SAY_BK_INTRO_3 = 2, + SAY_BK_AGGRO = 3, + SAY_BK_PHASE_2 = 4, // Skeleton + SAY_BK_PHASE_3 = 5, // Ghost + SAY_BK_KILL_PLAYER = 6, // "Pathetic." && "A waste of flesh." + SAY_BK_DEATH = 7, }; template From 971e2f538efa117415c4d7adeaf0953cb7d5c920 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sun, 9 Apr 2023 21:54:53 +0300 Subject: [PATCH 24/32] fix(DB/SAI): Outland Basilisks. (#15578) * fix(DB/SAI): Outland Basilisks. * update * update * sniff for 20283 (Marshrock Stomper) Co-Authored-By: Gultask <100873791+Gultask@users.noreply.github.com> --------- Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- .../rev_1679646147806247600.sql | 118 ++++++++++++++++++ src/server/scripts/Spells/spell_generic.cpp | 36 ++++++ 2 files changed, 154 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1679646147806247600.sql diff --git a/data/sql/updates/pending_db_world/rev_1679646147806247600.sql b/data/sql/updates/pending_db_world/rev_1679646147806247600.sql new file mode 100644 index 000000000..9c22595be --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1679646147806247600.sql @@ -0,0 +1,118 @@ +-- 28728 - Feign Death - Used by outland Basilisks && 35385 - Threshalisk Charge - Used by outland Basilisks +DELETE FROM `spell_script_names` WHERE `spell_id` IN (28728,35385); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(28728,'spell_gen_feign_death_all_flags'), +(35385,'spell_gen_threshalisk_charge'); + +-- All creatures that use Threshalisk Charge (35385) and Feign Death (28728) +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` IN (20607,20924,19730,19729,20283,19706,20279,20280,20987,20925); + +DELETE FROM `creature_text` WHERE `CreatureID` IN (20607,20924,19730,19729,20283,19706,20279,20280,20987,20925); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(20607, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Craghide Basilisk - EMOTE_STOP_PLAY_DEAD'), +(20924, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Grishnath Basilisk - EMOTE_STOP_PLAY_DEAD'), +(19730, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Ironspine Gazer - EMOTE_STOP_PLAY_DEAD'), +(19729, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Ironspine Threshalisk - EMOTE_STOP_PLAY_DEAD'), +(20283, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Marshrock Stomper - EMOTE_STOP_PLAY_DEAD'), +(19706, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Marshrock Threshalisk - EMOTE_STOP_PLAY_DEAD'), +(20279, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Ragestone Threshalisk - EMOTE_STOP_PLAY_DEAD'), +(20280, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Ragestone Trampler - EMOTE_STOP_PLAY_DEAD'), +(20987, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Ruuan Weald Basilisk - EMOTE_STOP_PLAY_DEAD'), +(20925, 0, 0, '%s stops playing dead and charges forward!', 16, 0, 100, 0, 0, 0, 18325, 0, 'Scalded Basilisk - EMOTE_STOP_PLAY_DEAD'); + +-- ID 20607 (Craghide Basilisk) +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`, `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 +(20607, 0, 0, 0, 9, 0, 20, 0, 0, 40, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Craghide Basilisk - Within 0-40 Range - Cast \'Threshalisk Charge\''), +(20607, 0, 1, 0, 0, 0, 100, 0, 7000, 11000, 45000, 50000, 0, 11, 35313, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Craghide Basilisk - In Combat - Cast \'Hypnotic Gaze\''), +(20607, 0, 2, 3, 2, 0, 30, 0, 0, 15, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Craghide Basilisk - Between 0-15% Health - Cast \'Feign Death\''), +(20607, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Craghide Basilisk - Between 0-15% Health - Stop Attacking'), +(20607, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Craghide Basilisk - Between 0-15% Health - Set Event Phase 1'), +(20607, 0, 5, 6, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Craghide Basilisk - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(20607, 0, 6, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Craghide Basilisk - In Combat - Say Line 0 (Phase 1)'); + +-- ID 20924 (Grishnath Basilisk) +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`, `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 +(20924, 0, 0, 0, 2, 0, 100, 512, 0, 70, 0, 0, 0, 11, 37590, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Grishnath Basilisk - Between 0-70% Health - Cast \'Soften\' I'), +(20924, 0, 1, 0, 2, 0, 100, 512, 0, 40, 0, 0, 0, 11, 37590, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Grishnath Basilisk - Between 0-40% Health - Cast \'Soften\' II'), +(20924, 0, 2, 0, 2, 0, 100, 512, 0, 10, 0, 0, 0, 11, 37590, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Grishnath Basilisk - Between 0-10% Health - Cast \'Soften\' III'), +(20924, 0, 3, 4, 2, 0, 30, 0, 0, 15, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Grishnath Basilisk - Between 0-15% Health - Cast \'Feign Death\''), +(20924, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Grishnath Basilisk - Between 0-15% Health - Stop Attacking'), +(20924, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Grishnath Basilisk - Between 0-15% Health - Set Event Phase 1'), +(20924, 0, 6, 7, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Grishnath Basilisk - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(20924, 0, 7, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Grishnath Basilisk - In Combat - Say Line 0 (Phase 1)'); + +-- ID 19730 (Ironspine Gazer) +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`, `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 +(19730, 0, 0, 0, 9, 0, 20, 0, 0, 40, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Gazer - Within 0-40 Range - Cast \'Threshalisk Charge\''), +(19730, 0, 1, 0, 0, 0, 100, 0, 7000, 11000, 45000, 50000, 0, 11, 35313, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Gazer - In Combat - Cast \'Hypnotic Gaze\''), +(19730, 0, 2, 3, 2, 0, 30, 0, 0, 15, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Gazer - Between 0-15% Health - Cast \'Feign Death\''), +(19730, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Gazer - Between 0-15% Health - Stop Attacking'), +(19730, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Gazer - Between 0-15% Health - Set Event Phase 1'), +(19730, 0, 5, 6, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Gazer - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(19730, 0, 6, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Gazer - In Combat - Say Line 0 (Phase 1)'); + +-- ID 19729 (Ironspine Threshalisk) +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`, `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 +(19729, 0, 0, 0, 9, 0, 20, 0, 0, 40, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Threshalisk - Within 0-40 Range - Cast \'Threshalisk Charge\''), +(19729, 0, 1, 2, 2, 0, 60, 0, 0, 15, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Threshalisk - Between 0-15% Health - Cast \'Feign Death\''), +(19729, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Threshalisk - Between 0-15% Health - Stop Attacking'), +(19729, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Threshalisk - Between 0-15% Health - Set Event Phase 1'), +(19729, 0, 4, 5, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Threshalisk - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(19729, 0, 5, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Ironspine Threshalisk - In Combat - Say Line 0 (Phase 1)'); + +-- ID 20283 (Marshrock Stomper) +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 20283; +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`, `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 +(20283, 0, 0, 0, 0, 0, 100, 0, 5000, 10000, 15000, 30000, 0, 11, 12612, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Stomper - In Combat - Cast \'Stomp\''), +(20283, 0, 1, 2, 2, 0, 30, 0, 0, 30, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - Between 0-30% Health - Cast \'Feign Death\''), +(20283, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - Between 0-30% Health - Stop Attacking'), +(20283, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - Between 0-30% Health - Set Event Phase 1'), +(20283, 0, 4, 5, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(20283, 0, 5, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - In Combat - Say Line 0 (Phase 1)'); + +-- ID 19706 (Marshrock Threshalisk) +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`, `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 +(19706, 0, 0, 0, 9, 0, 20, 0, 0, 40, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - Within 0-40 Range - Cast \'Threshalisk Charge\''), +(19706, 0, 1, 2, 2, 0, 50, 0, 0, 15, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - Between 0-15% Health - Cast \'Feign Death\''), +(19706, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - Between 0-15% Health - Stop Attacking'), +(19706, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - Between 0-15% Health - Set Event Phase 1'), +(19706, 0, 4, 5, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(19706, 0, 5, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Marshrock Threshalisk - In Combat - Say Line 0 (Phase 1)'); + +-- ID 20279 (Ragestone Threshalisk) +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`, `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 +(20279, 0, 0, 0, 2, 0, 100, 0, 0, 20, 0, 0, 0, 11, 3019, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Threshalisk - Between 0-20% Health - Cast \'Frenzy\''), +(20279, 0, 1, 2, 2, 0, 30, 0, 0, 15, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Threshalisk - Between 0-15% Health - Cast \'Feign Death\''), +(20279, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Threshalisk - Between 0-15% Health - Stop Attacking'), +(20279, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Threshalisk - Between 0-15% Health - Set Event Phase 1'), +(20279, 0, 4, 5, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Threshalisk - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(20279, 0, 5, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Threshalisk - In Combat - Say Line 0 (Phase 1)'); + +-- ID 20280 (Ragestone Trampler) +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`, `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 +(20280, 0, 0, 0, 0, 0, 100, 0, 5000, 11000, 25000, 28000, 0, 11, 3019, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Trampler - In Combat - Cast \'Frenzy\''), +(20280, 0, 1, 0, 0, 0, 100, 0, 11000, 20000, 7000, 12000, 0, 11, 5568, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Trampler - In Combat - Cast \'Trample\''), +(20280, 0, 2, 3, 2, 0, 30, 0, 0, 15, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Trampler - Between 0-15% Health - Cast \'Feign Death\''), +(20280, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Trampler - Between 0-15% Health - Stop Attacking'), +(20280, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Trampler - Between 0-15% Health - Set Event Phase 1'), +(20280, 0, 5, 6, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Trampler - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(20280, 0, 6, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Ragestone Trampler - In Combat - Say Line 0 (Phase 1)'); + +-- ID 20987 (Ruuan Weald Basilisk) +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 20987; +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`, `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 +(20987, 0, 0, 0, 9, 0, 20, 0, 0, 40, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ruuan Weald Basilisk - Within 0-40 Range - Cast \'Threshalisk Charge\''), +(20987, 0, 1, 2, 2, 0, 60, 0, 0, 15, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ruuan Weald Basilisk - Between 0-15% Health - Cast \'Feign Death\''), +(20987, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ruuan Weald Basilisk - Between 0-15% Health - Stop Attacking'), +(20987, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ruuan Weald Basilisk - Between 0-15% Health - Set Event Phase 1'), +(20987, 0, 4, 5, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ruuan Weald Basilisk - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(20987, 0, 5, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Ruuan Weald Basilisk - In Combat - Say Line 0 (Phase 1)'); + +-- ID 20925 (Scalded Basilisk) +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`, `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 +(20925, 0, 0, 0, 0, 0, 85, 0, 8000, 13000, 14000, 19000, 0, 11, 35236, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scalded Basilisk - In Combat - Cast \'Heat Wave\''), +(20925, 0, 1, 2, 2, 0, 30, 0, 0, 15, 0, 0, 0, 11, 28728, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scalded Basilisk - Between 0-15% Health - Cast \'Feign Death\''), +(20925, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scalded Basilisk - Between 0-15% Health - Stop Attacking'), +(20925, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scalded Basilisk - Between 0-15% Health - Set Event Phase 1'), +(20925, 0, 4, 5, 0, 1, 100, 0, 6000, 6000, 0, 0, 0, 11, 35385, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Scalded Basilisk - In Combat - Cast \'Threshalisk Charge\' (Phase 1)'), +(20925, 0, 5, 0, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Scalded Basilisk - In Combat - Say Line 0 (Phase 1)'); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index d2e10afa2..ac326f538 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -4792,6 +4792,41 @@ class spell_freezing_circle : public SpellScript } }; +enum Threshalisk +{ + SPELL_THRESHALISK_CHARGE = 35385, + SPELL_RUSHING_CHARGE = 35382, +}; + +class spell_gen_threshalisk_charge : public SpellScript +{ + PrepareSpellScript(spell_gen_threshalisk_charge); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_THRESHALISK_CHARGE }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (Creature* caster = GetCaster()->ToCreature()) + { + if (Unit* victim = caster->GetVictim()) + { + if (caster->GetReactState() != REACT_PASSIVE) + { + caster->CastSpell(victim, GetSpellInfo()->Effects[EFFECT_1].TriggerSpell, true); + } + } + } + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_gen_threshalisk_charge::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_generic_spell_scripts() { RegisterSpellScript(spell_silithyst); @@ -4934,4 +4969,5 @@ void AddSC_generic_spell_scripts() RegisterSpellScriptWithArgs(spell_gen_apply_aura_after_expiration, "spell_itch_aq40", SPELL_VEKNISS_CATALYST, EFFECT_0, SPELL_AURA_DUMMY); RegisterSpellScript(spell_gen_basic_campfire); RegisterSpellScript(spell_freezing_circle); + RegisterSpellScript(spell_gen_threshalisk_charge); } From 55b9c2479d9f2f72e9bdf098c5b54ab45dd002a8 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sun, 9 Apr 2023 21:55:35 +0300 Subject: [PATCH 25/32] fix(Spells/Scripts): Raise Ally improvements. (#15545) * fix(Scripts/Spells): Raise Ally improvements. Co-Authored-By: GMKyle <25353073+GMKyle@users.noreply.github.com> * update * Update pet_dk.cpp * Update spell_dk.cpp --------- Co-authored-by: GMKyle <25353073+GMKyle@users.noreply.github.com> --- .../rev_1679480684395742200.sql | 16 ++++++ src/server/scripts/Pet/pet_dk.cpp | 38 ++++++++++++- src/server/scripts/Spells/spell_dk.cpp | 57 ++++++++++++++++++- 3 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1679480684395742200.sql diff --git a/data/sql/updates/pending_db_world/rev_1679480684395742200.sql b/data/sql/updates/pending_db_world/rev_1679480684395742200.sql new file mode 100644 index 000000000..70060d238 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1679480684395742200.sql @@ -0,0 +1,16 @@ +-- Risen Ally(30230) +DELETE FROM `creature_template_spell` WHERE `CreatureID` = 30230; +INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES +(30230, 0, 62225, 12340), +(30230, 1, 47480, 12340), +(30230, 2, 47481, 12340), +(30230, 3, 47482, 12340), +(30230, 4, 47484, 12340), +(30230, 5, 47496, 12340); + +UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_pet_dk_risen_ally' WHERE `entry` = 30230; + +-- Thrash +DELETE FROM `spell_script_names` WHERE `spell_id`=47480 AND `ScriptName`='spell_dk_ghoul_thrash'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(47480, 'spell_dk_ghoul_thrash'); diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index 74dbe3680..b5e638af0 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -43,7 +43,10 @@ enum DeathKnightSpells SPELL_DK_DISMISS_GARGOYLE = 50515, SPELL_DK_SANCTUARY = 54661, SPELL_DK_NIGHT_OF_THE_DEAD = 62137, - SPELL_DK_PET_SCALING = 61017 + SPELL_DK_PET_SCALING = 61017, + // Risen Ally + SPELL_DK_RAISE_ALLY = 46619, + SPELL_GHOUL_FRENZY = 62218, }; class npc_pet_dk_ebon_gargoyle : public CreatureScript @@ -255,6 +258,38 @@ public: } }; +class npc_pet_dk_risen_ally : public CreatureScript +{ +public: + npc_pet_dk_risen_ally() : CreatureScript("npc_pet_dk_risen_ally") { } + + struct npc_pet_dk_risen_allyAI : public PossessedAI + { + npc_pet_dk_risen_allyAI(Creature* c) : PossessedAI(c) { } + + void OnCharmed(bool apply) override + { + if (!apply) + { + if (Unit* owner = me->GetCharmerOrOwner()) + { + if (Player* player = owner->ToPlayer()) + { + player->RemoveAurasDueToSpell(SPELL_DK_RAISE_ALLY); // Remove Raise Ally aura + player->RemoveAurasDueToSpell(SPELL_GHOUL_FRENZY); // Remove Frenzy aura + //player->ClearResurrectRequestData(); + } + } + } + } + }; + + CreatureAI* GetAI(Creature* pCreature) const override + { + return new npc_pet_dk_risen_allyAI (pCreature); + } +}; + class npc_pet_dk_army_of_the_dead : public CreatureScript { public: @@ -335,6 +370,7 @@ void AddSC_deathknight_pet_scripts() { new npc_pet_dk_ebon_gargoyle(); new npc_pet_dk_ghoul(); + new npc_pet_dk_risen_ally(); new npc_pet_dk_army_of_the_dead(); new npc_pet_dk_dancing_rune_weapon(); RegisterSpellScript(spell_pet_dk_gargoyle_strike); diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index a0f3939e9..046dd925e 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -72,7 +72,11 @@ enum DeathKnightSpells SPELL_DK_UNHOLY_PRESENCE = 48265, SPELL_DK_UNHOLY_PRESENCE_TRIGGERED = 49772, SPELL_DK_WILL_OF_THE_NECROPOLIS_TALENT_R1 = 49189, - SPELL_DK_WILL_OF_THE_NECROPOLIS_AURA_R1 = 52284 + SPELL_DK_WILL_OF_THE_NECROPOLIS_AURA_R1 = 52284, + // Risen Ally + SPELL_DK_RAISE_ALLY = 46619, + SPELL_DK_THRASH = 47480, + SPELL_GHOUL_FRENZY = 62218, }; enum DeathKnightSpellIcons @@ -82,7 +86,8 @@ enum DeathKnightSpellIcons enum Misc { - NPC_DK_GHOUL = 26125 + NPC_DK_GHOUL = 26125, + NPC_RISEN_ALLY = 30230 }; // 50526 - Wandering Plague @@ -1496,6 +1501,53 @@ class spell_dk_ghoul_explode : public SpellScript } }; +// 47480 - Thrash +class spell_dk_ghoul_thrash : public SpellScript +{ + PrepareSpellScript(spell_dk_ghoul_thrash); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_GHOUL_FRENZY }); + } + + void CalcDamage(SpellEffIndex /*effIndex*/) + { + /* + Causes more damage per frenzy point: + 1 point : (Attack power * 40 * 0.01 + Attack power * 0.05)-(Attack power * 40 * 0.01 + Attack power * 0.10) damage + 2 points : (Attack power * 40 * 0.01 + Attack power * 0.10)-(Attack power * 40 * 0.01 + Attack power * 0.20) damage + 3 points : (Attack power * 40 * 0.01 + Attack power * 0.15)-(Attack power * 40 * 0.01 + Attack power * 0.30) damage + 4 points : (Attack power * 40 * 0.01 + Attack power * 0.20)-(Attack power * 40 * 0.01 + Attack power * 0.40) damage + 5 points : (Attack power * 40 * 0.01 + Attack power * 0.25)-(Attack power * 40 * 0.01 + Attack power * 0.50) damage + */ + + if (Aura* frenzy = GetCaster()->GetAura(SPELL_GHOUL_FRENZY)) + { + float APBonus = GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK); + float fixedDamageBonus = APBonus * GetEffectValue() * 0.01f; + APBonus *= 0.05f * frenzy->GetStackAmount(); + + SetEffectValue(fixedDamageBonus + urand(int32(APBonus), int32(APBonus * 2.f))); + + if (Unit* caster = GetCaster()) + { + caster->RemoveAurasDueToSpell(SPELL_GHOUL_FRENZY); + + if (Unit* charmer = caster->GetCharmer()) + { + charmer->RemoveAurasDueToSpell(SPELL_GHOUL_FRENZY); + } + } + } + } + + void Register() override + { + OnEffectLaunchTarget += SpellEffectFn(spell_dk_ghoul_thrash::CalcDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + // 48792 - Icebound Fortitude class spell_dk_icebound_fortitude : public AuraScript { @@ -2184,4 +2236,5 @@ void AddSC_deathknight_spell_scripts() RegisterSpellScript(spell_dk_spell_deflection); RegisterSpellScript(spell_dk_vampiric_blood); RegisterSpellScript(spell_dk_will_of_the_necropolis); + RegisterSpellScript(spell_dk_ghoul_thrash); } From 65347bc8ad3f10e05beb51a01e47aecf9687bd37 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 9 Apr 2023 20:56:06 +0200 Subject: [PATCH 26/32] fix(DB/Loot): Fel Orc Blood Vial should drop only inside Blood Furnace. (#15340) Fixes #15263 --- .../sql/updates/pending_db_world/rev_1678556255351136400.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678556255351136400.sql diff --git a/data/sql/updates/pending_db_world/rev_1678556255351136400.sql b/data/sql/updates/pending_db_world/rev_1678556255351136400.sql new file mode 100644 index 000000000..1fe7990ec --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678556255351136400.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup` IN (17370,18608) AND `SourceEntry`=23894; +INSERT INTO `conditions` VALUES +(1,17370,23894,0,0,22,0,542,0,0,0,0,0,'','Drop Fel Orc Blood Vial only inside Blood Furnace'), +(1,18608,23894,0,0,22,0,542,0,0,0,0,0,'','Drop Fel Orc Blood Vial only inside Blood Furnace'); From 421f0644cdcdede65e11a08ce20c6ef5af926745 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sun, 9 Apr 2023 21:57:04 +0300 Subject: [PATCH 27/32] fix(Script/Ahnkahet): Jedoga Shadowseeke sacrifice (#15153) * fix(Script/Instance): Jedoga Shadowseeke sacrifice * build * std::chrono --- .../rev_1676992538163701600.sql | 2 + .../ahnkahet/boss_jedoga_shadowseeker.cpp | 60 ++++++++----------- 2 files changed, 26 insertions(+), 36 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1676992538163701600.sql diff --git a/data/sql/updates/pending_db_world/rev_1676992538163701600.sql b/data/sql/updates/pending_db_world/rev_1676992538163701600.sql new file mode 100644 index 000000000..c1312cf12 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676992538163701600.sql @@ -0,0 +1,2 @@ +-- Ahn'kahet: The Old Kingdom - Jedoga Shadowseeker +DELETE FROM `spell_script_names` WHERE `spell_id`=56150 AND `ScriptName`='spell_jedoga_sacrafice_beam'; diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp index ac0277874..9416b371f 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp @@ -69,6 +69,7 @@ enum Events EVENT_JEDOGA_PREPARE_RITUAL, EVENT_JEDOGA_MOVE_UP, EVENT_JEDOGA_MOVE_DOWN, + EVENT_JEDGA_START_RITUAL, // Initiate EVENT_RITUAL_BEGIN_MOVE, @@ -384,11 +385,9 @@ struct boss_jedoga_shadowseeker : public BossAI if (!summons.empty()) { sacraficeTarget_GUID = Acore::Containers::SelectRandomContainerElement(summons); - if (Creature* volunteer = ObjectAccessor::GetCreature(*me, sacraficeTarget_GUID)) + if (ObjectAccessor::GetCreature(*me, sacraficeTarget_GUID)) { - Talk(SAY_SACRIFICE_1); - sacraficeTarget_GUID = volunteer->GetGUID(); - volunteer->AI()->DoAction(ACTION_RITUAL_BEGIN); + events.ScheduleEvent(EVENT_JEDGA_START_RITUAL, 3s, 0, PHASE_RITUAL); } // Something failed, let players continue but do not grant achievement else @@ -506,6 +505,17 @@ struct boss_jedoga_shadowseeker : public BossAI me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], false); break; } + case EVENT_JEDGA_START_RITUAL: + { + sacraficeTarget_GUID = Acore::Containers::SelectRandomContainerElement(summons); + if (Creature* volunteer = ObjectAccessor::GetCreature(*me, sacraficeTarget_GUID)) + { + Talk(SAY_SACRIFICE_1); + sacraficeTarget_GUID = volunteer->GetGUID(); + volunteer->AI()->DoAction(ACTION_RITUAL_BEGIN); + } + break; + } } } @@ -632,12 +642,8 @@ struct npc_twilight_volunteer : public ScriptedAI if (Creature* jedoga = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_JEDOGA_SHADOWSEEKER))) { jedoga->AI()->Talk(SAY_SACRIFICE_2); - jedoga->CastSpell(nullptr, SPELL_SACRIFICE_BEAM); - - if (Creature* ritualTrigger = jedoga->SummonCreature(NPC_JEDOGA_CONTROLLER, JedogaPosition[2], TEMPSUMMON_TIMED_DESPAWN, 5000)) - { - ritualTrigger->CastSpell(ritualTrigger, SPELL_SACRIFICE_VISUAL); - } + jedoga->CastSpell(nullptr, SPELL_SACRIFICE_BEAM); /// @todo: Visual is not working. (cosmetic) + jedoga->AI()->DoAction(ACTION_SACRAFICE); } Talk(SAY_SACRIFICED); @@ -656,6 +662,14 @@ struct npc_twilight_volunteer : public ScriptedAI me->SetHomePosition(JedogaPosition[2]); me->SetWalk(true); me->GetMotionMaster()->MovePoint(POINT_RITUAL, JedogaPosition[2], false); + + if (Creature* jedoga = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_JEDOGA_SHADOWSEEKER))) + { + if (Creature* ritualTrigger = jedoga->SummonCreature(NPC_JEDOGA_CONTROLLER, JedogaPosition[2], TEMPSUMMON_TIMED_DESPAWN, 15000)) + { + ritualTrigger->CastSpell(ritualTrigger, SPELL_SACRIFICE_VISUAL); + } + } } } @@ -688,31 +702,6 @@ class spell_random_lightning_visual_effect : public SpellScript } }; -// 56150 - Sacrifice Beam -class spell_jedoga_sacrafice_beam : public AuraScript -{ - PrepareAuraScript(spell_jedoga_sacrafice_beam); - - bool Load() override - { - return GetCaster()->GetTypeId() == TYPEID_UNIT; - } - - void HandleRemoval(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - AuraRemoveMode const removeMode = GetTargetApplication()->GetRemoveMode(); - if (removeMode == AURA_REMOVE_BY_DEFAULT || removeMode == AURA_REMOVE_BY_EXPIRE) - { - GetCaster()->ToCreature()->AI()->DoAction(ACTION_SACRAFICE); - } - } - - void Register() override - { - AfterEffectRemove += AuraEffectRemoveFn(spell_jedoga_sacrafice_beam::HandleRemoval, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); - } -}; - // CriteriaID 7359, Volunteer Work (2056) class achievement_volunteer_work : public AchievementCriteriaScript { @@ -740,7 +729,6 @@ void AddSC_boss_jedoga_shadowseeker() // Spells RegisterSpellScript(spell_random_lightning_visual_effect); - RegisterSpellScript(spell_jedoga_sacrafice_beam); // Achievements new achievement_volunteer_work(); From 0581206ce9f0018a8bca4a7508088f2ed7c5bda4 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 9 Apr 2023 18:59:42 +0000 Subject: [PATCH 28/32] chore(DB): import pending files Referenced commit(s): 421f0644cdcdede65e11a08ce20c6ef5af926745 --- .../rev_1676378706913010600.sql => db_world/2023_04_09_07.sql} | 1 + .../rev_1676992538163701600.sql => db_world/2023_04_09_08.sql} | 1 + .../rev_1678556255351136400.sql => db_world/2023_04_09_09.sql} | 1 + .../rev_1679480684395742200.sql => db_world/2023_04_09_10.sql} | 1 + .../rev_1679646147806247600.sql => db_world/2023_04_09_11.sql} | 1 + 5 files changed, 5 insertions(+) rename data/sql/updates/{pending_db_world/rev_1676378706913010600.sql => db_world/2023_04_09_07.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1676992538163701600.sql => db_world/2023_04_09_08.sql} (78%) rename data/sql/updates/{pending_db_world/rev_1678556255351136400.sql => db_world/2023_04_09_09.sql} (88%) rename data/sql/updates/{pending_db_world/rev_1679480684395742200.sql => db_world/2023_04_09_10.sql} (93%) rename data/sql/updates/{pending_db_world/rev_1679646147806247600.sql => db_world/2023_04_09_11.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1676378706913010600.sql b/data/sql/updates/db_world/2023_04_09_07.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676378706913010600.sql rename to data/sql/updates/db_world/2023_04_09_07.sql index 1e0909dc2..45641bf66 100644 --- a/data/sql/updates/pending_db_world/rev_1676378706913010600.sql +++ b/data/sql/updates/db_world/2023_04_09_07.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_09_06 -> 2023_04_09_07 -- Populate creature_text for Highlord Tirion Fordring (ToC5) from ToC25 (34996) Should probably be 34996 for both, needs a sniff. DELETE FROM `creature_text` WHERE `CreatureID`=33628; INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1676992538163701600.sql b/data/sql/updates/db_world/2023_04_09_08.sql similarity index 78% rename from data/sql/updates/pending_db_world/rev_1676992538163701600.sql rename to data/sql/updates/db_world/2023_04_09_08.sql index c1312cf12..602d72943 100644 --- a/data/sql/updates/pending_db_world/rev_1676992538163701600.sql +++ b/data/sql/updates/db_world/2023_04_09_08.sql @@ -1,2 +1,3 @@ +-- DB update 2023_04_09_07 -> 2023_04_09_08 -- Ahn'kahet: The Old Kingdom - Jedoga Shadowseeker DELETE FROM `spell_script_names` WHERE `spell_id`=56150 AND `ScriptName`='spell_jedoga_sacrafice_beam'; diff --git a/data/sql/updates/pending_db_world/rev_1678556255351136400.sql b/data/sql/updates/db_world/2023_04_09_09.sql similarity index 88% rename from data/sql/updates/pending_db_world/rev_1678556255351136400.sql rename to data/sql/updates/db_world/2023_04_09_09.sql index 1fe7990ec..6c072d95d 100644 --- a/data/sql/updates/pending_db_world/rev_1678556255351136400.sql +++ b/data/sql/updates/db_world/2023_04_09_09.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_09_08 -> 2023_04_09_09 -- DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=1 AND `SourceGroup` IN (17370,18608) AND `SourceEntry`=23894; INSERT INTO `conditions` VALUES diff --git a/data/sql/updates/pending_db_world/rev_1679480684395742200.sql b/data/sql/updates/db_world/2023_04_09_10.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1679480684395742200.sql rename to data/sql/updates/db_world/2023_04_09_10.sql index 70060d238..456796b30 100644 --- a/data/sql/updates/pending_db_world/rev_1679480684395742200.sql +++ b/data/sql/updates/db_world/2023_04_09_10.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_09_09 -> 2023_04_09_10 -- Risen Ally(30230) DELETE FROM `creature_template_spell` WHERE `CreatureID` = 30230; INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1679646147806247600.sql b/data/sql/updates/db_world/2023_04_09_11.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1679646147806247600.sql rename to data/sql/updates/db_world/2023_04_09_11.sql index 9c22595be..16294e598 100644 --- a/data/sql/updates/pending_db_world/rev_1679646147806247600.sql +++ b/data/sql/updates/db_world/2023_04_09_11.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_09_10 -> 2023_04_09_11 -- 28728 - Feign Death - Used by outland Basilisks && 35385 - Threshalisk Charge - Used by outland Basilisks DELETE FROM `spell_script_names` WHERE `spell_id` IN (28728,35385); INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES From 78384368ba57c78732cd043f3c96c9a8415dde92 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 9 Apr 2023 16:26:35 -0300 Subject: [PATCH 29/32] fix(Scripts/Steamvault): Rework Mekgineer Steamrigger (#15896) --- .../rev_1681055530554169200.sql | 16 ++ .../game/AI/SmartScripts/SmartScriptMgr.h | 2 +- .../SteamVault/boss_mekgineer_steamrigger.cpp | 176 ++++++------------ 3 files changed, 77 insertions(+), 117 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1681055530554169200.sql diff --git a/data/sql/updates/pending_db_world/rev_1681055530554169200.sql b/data/sql/updates/pending_db_world/rev_1681055530554169200.sql new file mode 100644 index 000000000..0778bd13e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1681055530554169200.sql @@ -0,0 +1,16 @@ +-- +DELETE FROM `spell_target_position` WHERE `ID` IN (31528, 31529, 31530); +INSERT INTO `spell_target_position` (`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `VerifiedBuild`) VALUES +(31528, 0, 545, -316.102, -166.444, -7.66667, 0, 48749), +(31529, 0, 545, -348.497, -161.719, -7.66667, 0, 48749), +(31530, 0, 545, -331.162, -112.213, -7.66667, 0, 48749); + +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 17951; + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17951) AND (`source_type` = 0) AND (`id` IN (0)); +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`, `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 +(17951, 0, 0, 0, 0, 0, 100, 0, 2000, 2000, 2000, 2000, 0, 11, 31532, 0, 0, 0, 0, 0, 205, 1, 1, 0, 0, 0, 0, 0, 0, 'Steamrigger Mechanic - In Combat - Cast \'Repair\''); + +DELETE FROM `spelldifficulty_dbc` WHERE `ID` = 31532; +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES +(31532, 31532, 37936); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 3e28906b0..0c1385ea8 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1428,7 +1428,7 @@ enum SMARTAI_TARGETS SMART_TARGET_SUMMONED_CREATURES = 204, // Entry SMART_TARGET_INSTANCE_STORAGE = 205, // Instance data index, Type (creature (1), gameobject (2)) - SMART_TARGET_AC_END = 205 // placeholder + SMART_TARGET_AC_END = 206 // placeholder }; struct SmartTarget diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp index 6f29d3544..25ef2b8e7 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp @@ -33,20 +33,22 @@ enum MekgineerSteamrigger SPELL_REPAIR_N = 31532, SPELL_REPAIR_H = 37936, - NPC_STREAMRIGGER_MECHANIC = 17951, + SPELL_SUMMON_MECHANICS_1 = 31528, + SPELL_SUMMON_MECHANICS_2 = 31529, + SPELL_SUMMON_MECHANICS_3 = 31530, - EVENT_CHECK_HP25 = 1, - EVENT_CHECK_HP50 = 2, - EVENT_CHECK_HP75 = 3, - EVENT_SPELL_SHRINK = 4, - EVENT_SPELL_SAW = 5, - EVENT_SPELL_NET = 6, - EVENT_ENRAGE = 7 + NPC_STREAMRIGGER_MECHANIC = 17951 }; struct boss_mekgineer_steamrigger : public BossAI { - boss_mekgineer_steamrigger(Creature* creature) : BossAI(creature, DATA_MEKGINEER_STEAMRIGGER) { } + boss_mekgineer_steamrigger(Creature* creature) : BossAI(creature, DATA_MEKGINEER_STEAMRIGGER) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } void JustDied(Unit* /*killer*/) override { @@ -57,131 +59,73 @@ struct boss_mekgineer_steamrigger : public BossAI void KilledUnit(Unit* victim) override { if (victim->IsPlayer()) + { Talk(SAY_SLAY); + } } void JustEngagedWith(Unit* /*who*/) override { Talk(SAY_AGGRO); _JustEngagedWith(); - events.ScheduleEvent(EVENT_SPELL_SHRINK, 26550); - events.ScheduleEvent(EVENT_SPELL_SAW, 6050, 17650); - events.ScheduleEvent(EVENT_SPELL_NET, 14400); - events.ScheduleEvent(EVENT_ENRAGE, 300000); - events.ScheduleEvent(EVENT_CHECK_HP75, 5000); - events.ScheduleEvent(EVENT_CHECK_HP50, 5000); - events.ScheduleEvent(EVENT_CHECK_HP25, 5000); - } - void SummonMechanics() - { - Talk(SAY_MECHANICS); - - me->SummonCreature(NPC_STREAMRIGGER_MECHANIC, me->GetPositionX() + 15.0f, me->GetPositionY() + 15.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - me->SummonCreature(NPC_STREAMRIGGER_MECHANIC, me->GetPositionX() - 15.0f, me->GetPositionY() + 15.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - me->SummonCreature(NPC_STREAMRIGGER_MECHANIC, me->GetPositionX() - 15.0f, me->GetPositionY() - 15.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - if (urand(0, 1)) - me->SummonCreature(NPC_STREAMRIGGER_MECHANIC, me->GetPositionX() + 15.0f, me->GetPositionY() - 15.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - } - - void JustSummoned(Creature* cr) override - { - cr->GetMotionMaster()->MoveFollow(me, 0.0f, 0.0f); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - switch (uint32 eventId = events.ExecuteEvent()) + scheduler.Schedule(26550ms, [this](TaskContext context) + { + DoCastVictim(SPELL_SUPER_SHRINK_RAY); + context.Repeat(35100ms, 54100ms); + }).Schedule(6050ms, 17650ms, [this](TaskContext context) + { + if (DoCastRandomTarget(SPELL_SAW_BLADE, 1) != SPELL_CAST_OK) + { + DoCastVictim(SPELL_SAW_BLADE); + } + + context.Repeat(6050ms, 17650ms); + }).Schedule(14400ms, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_ELECTRIFIED_NET); + context.Repeat(21800ms, 34200ms); + }).Schedule(5min, [this](TaskContext /*context*/) { - case EVENT_SPELL_SHRINK: - me->CastSpell(me->GetVictim(), SPELL_SUPER_SHRINK_RAY, false); - events.Repeat(35100ms, 54100ms); - break; - case EVENT_SPELL_SAW: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1)) - me->CastSpell(target, SPELL_SAW_BLADE, false); - else - me->CastSpell(me->GetVictim(), SPELL_SAW_BLADE, false); - events.Repeat(6050ms, 17650ms); - break; - case EVENT_SPELL_NET: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_ELECTRIFIED_NET, false); - events.Repeat(21800ms, 34200ms); - break; - case EVENT_ENRAGE: DoCastSelf(SPELL_ENRAGE, true); - break; - case EVENT_CHECK_HP25: - case EVENT_CHECK_HP50: - case EVENT_CHECK_HP75: - if (me->HealthBelowPct(eventId * 25)) - { - SummonMechanics(); - return; - } - events.RepeatEvent(2000); - break; - } - - DoMeleeAttackIfReady(); - } -}; - -struct npc_steamrigger_mechanic : public ScriptedAI -{ - npc_steamrigger_mechanic(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override - { - _scheduler.CancelAll(); - } - - void JustEngagedWith(Unit* victim) override - { - ScriptedAI::JustEngagedWith(victim); - - _scheduler.Schedule(2s, [this](TaskContext context) - { - if (InstanceScript* instance = me->GetInstanceScript()) - { - if (Creature* boss = instance->GetCreature(DATA_MEKGINEER_STEAMRIGGER)) - { - if (me->IsWithinDistInMap(boss, 13.0f)) - { - if (!me->HasUnitState(UNIT_STATE_CASTING)) - { - me->CastSpell(me, DUNGEON_MODE(SPELL_REPAIR_N, SPELL_REPAIR_H), false); - } - } - } - } - - context.Repeat(); }); + + if (!IsHeroic()) + { + ScheduleHealthCheckEvent({ 75, 50, 25 }, [&] { + Talk(SAY_MECHANICS); + + for (auto const& spell : { SPELL_SUMMON_MECHANICS_1, SPELL_SUMMON_MECHANICS_2, SPELL_SUMMON_MECHANICS_3 }) + { + DoCastAOE(spell, true); + } + }); + } + else + { + scheduler.Schedule(15600ms, [this](TaskContext context) + { + if (roll_chance_i(15)) + { + Talk(SAY_MECHANICS); + } + + DoCastAOE(RAND(SPELL_SUMMON_MECHANICS_1, SPELL_SUMMON_MECHANICS_2, SPELL_SUMMON_MECHANICS_3), true); + context.Repeat(15600ms, 25400ms); + }); + } } - void MoveInLineOfSight(Unit* /*who*/) override {} - - void UpdateAI(uint32 diff) override + void JustSummoned(Creature* creature) override { - if (!UpdateVictim()) - return; - - _scheduler.Update(diff, - std::bind(&BossAI::DoMeleeAttackIfReady, this)); + if (creature->GetEntry() == NPC_STREAMRIGGER_MECHANIC) + { + creature->GetMotionMaster()->MoveFollow(me, 5.0f, 0.0f); + } } - - private: - TaskScheduler _scheduler; }; void AddSC_boss_mekgineer_steamrigger() { RegisterSteamvaultCreatureAI(boss_mekgineer_steamrigger); - RegisterSteamvaultCreatureAI(npc_steamrigger_mechanic); } From 450d87fd86888920f461d078889ef4f0484ca1ed Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 9 Apr 2023 19:29:04 +0000 Subject: [PATCH 30/32] chore(DB): import pending files Referenced commit(s): 78384368ba57c78732cd043f3c96c9a8415dde92 --- .../rev_1681055530554169200.sql => db_world/2023_04_09_12.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1681055530554169200.sql => db_world/2023_04_09_12.sql} (96%) diff --git a/data/sql/updates/pending_db_world/rev_1681055530554169200.sql b/data/sql/updates/db_world/2023_04_09_12.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1681055530554169200.sql rename to data/sql/updates/db_world/2023_04_09_12.sql index 0778bd13e..9234a353c 100644 --- a/data/sql/updates/pending_db_world/rev_1681055530554169200.sql +++ b/data/sql/updates/db_world/2023_04_09_12.sql @@ -1,3 +1,4 @@ +-- DB update 2023_04_09_11 -> 2023_04_09_12 -- DELETE FROM `spell_target_position` WHERE `ID` IN (31528, 31529, 31530); INSERT INTO `spell_target_position` (`ID`, `EffectIndex`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `VerifiedBuild`) VALUES From 9c6a561404f83e96f7f04bbe83295a77057acbf3 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 9 Apr 2023 17:37:12 -0300 Subject: [PATCH 31/32] fix(Scripts/Steamvault): Despawn Thespia's adds on death (#15898) * fix(Scripts/Steamvault): Despawn Thespia's adds on death * stuff --- .../SteamVault/boss_hydromancer_thespia.cpp | 44 +++++++------------ .../SteamVault/instance_steam_vault.cpp | 5 ++- .../SteamVault/steam_vault.h | 5 ++- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp index a27e68485..3a83692b8 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp @@ -29,11 +29,7 @@ enum HydromancerThespia SPELL_LIGHTNING_CLOUD = 25033, SPELL_LUNG_BURST = 31481, - SPELL_ENVELOPING_WINDS = 31718, - - EVENT_SPELL_LIGHTNING = 1, - EVENT_SPELL_LUNG = 2, - EVENT_SPELL_ENVELOPING = 3 + SPELL_ENVELOPING_WINDS = 31718 }; struct boss_hydromancer_thespia : public BossAI @@ -44,47 +40,39 @@ struct boss_hydromancer_thespia : public BossAI { _JustDied(); Talk(SAY_DEAD); + + instance->DoForAllMinions(DATA_HYDROMANCER_THESPIA, [&](Creature* creature) { + creature->DespawnOrUnsummon(); + }); } void KilledUnit(Unit* victim) override { if (victim->IsPlayer()) + { Talk(SAY_SLAY); + } } void JustEngagedWith(Unit* /*who*/) override { Talk(SAY_AGGRO); _JustEngagedWith(); - events.ScheduleEvent(EVENT_SPELL_LIGHTNING, 9800); - events.ScheduleEvent(EVENT_SPELL_LUNG, 13300); - events.ScheduleEvent(EVENT_SPELL_ENVELOPING, 14500); - } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - switch (events.ExecuteEvent()) + scheduler.Schedule(9800ms, [this](TaskContext context) { - case EVENT_SPELL_LIGHTNING: Talk(SAY_SPELL); DoCastRandomTarget(SPELL_LIGHTNING_CLOUD); - events.RepeatEvent(urand(12100, 14500)); - break; - case EVENT_SPELL_LUNG: + context.Repeat(12100ms, 14500ms); + }).Schedule(13300ms, [this](TaskContext context) + { DoCastRandomTarget(SPELL_LUNG_BURST); - events.RepeatEvent(urand(21800, 25400)); - break; - case EVENT_SPELL_ENVELOPING: + context.Repeat(21800ms, 25400ms); + }).Schedule(14500ms, [this](TaskContext context) + { DoCastRandomTarget(SPELL_ENVELOPING_WINDS); - events.RepeatEvent(urand(30000, 40000)); - break; - } - - DoMeleeAttackIfReady(); + context.Repeat(30s, 40s); + }); } }; diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp index 693b12a78..f171e8d7f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp @@ -27,8 +27,9 @@ enum MainChambersAccessPanelSays MinionData const minionData[] = { - { NPC_NAGA_DISTILLER, DATA_WARLORD_KALITHRESH }, - { 0, 0 } + { NPC_NAGA_DISTILLER, DATA_WARLORD_KALITHRESH }, + { NPC_THESPIA_WATER_ELEMENTAL, DATA_HYDROMANCER_THESPIA }, + { 0, 0 } }; class go_main_chambers_access_panel : public GameObjectScript diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h index 997b0b568..af2e2c427 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h @@ -51,9 +51,10 @@ enum steamVaultNPCGO NPC_DOOR_CONTROLLER = 20926 }; -enum NagaDistiller +enum Creatures { - NPC_NAGA_DISTILLER = 17954 + NPC_NAGA_DISTILLER = 17954, + NPC_THESPIA_WATER_ELEMENTAL = 17917 }; template From fd6941de7c7e43ae3406bb91d2d80670569eff4a Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 9 Apr 2023 23:44:52 -0300 Subject: [PATCH 32/32] fix(Core/SmartAI): Prevent MOVE_TO_POS from creating large distances between target (#15899) Update SmartScript.cpp --- src/server/game/AI/SmartScripts/SmartScript.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 3f2b39ef6..b89a1d6de 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1635,7 +1635,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u float x, y, z; target->GetPosition(x, y, z); if (e.action.moveToPos.ContactDistance > 0) - target->GetContactPoint(me, x, y, z, e.action.moveToPos.ContactDistance); + { + target->GetNearPoint(me, x, y, z, e.action.moveToPos.ContactDistance, 0, target->GetAngle(me)); + } me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, x + e.target.x, y + e.target.y, z + e.target.z, true, true, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE); } break;