From cd86054332a447b919f59b9ed30cf43f2791e534 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 1 Mar 2023 16:56:29 -0300 Subject: [PATCH 001/159] fix(DB/SAI): Fix WP_START parameter mistakes (#15214) --- .../rev_1677460150899347600.sql | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677460150899347600.sql diff --git a/data/sql/updates/pending_db_world/rev_1677460150899347600.sql b/data/sql/updates/pending_db_world/rev_1677460150899347600.sql new file mode 100644 index 000000000..503cb8347 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677460150899347600.sql @@ -0,0 +1,38 @@ +-- Bonechewer Messenger +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=0 AND `entryorguid`=21244 AND `id`=0; +-- Coilskar Cistern +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=0 AND `entryorguid`=-25065 AND `id`=1002; +-- The Botanica +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=9 AND `entryorguid` IN (1842000, 1842002) AND `id`=3; +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=9 AND `entryorguid` IN (1842001, 1842003) AND `id`=5; +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=0 AND `entryorguid` IN (-147029, -147030, -147031, -147032, -147034) AND `id`=1001; +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=0 AND `entryorguid`=-147058 AND `id`=1002; +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=9 AND `entryorguid`=1842100 AND `id`=5; +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=9 AND `entryorguid` IN (1950501, 1950502, 1950503, 1950504) AND `id`=1; +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=0 AND `entryorguid` IN (-147019, -147021, -147022, -147023, -147020, -147024, -147006, -147018, -147005, -147007) AND `id`=1002; +UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=0 AND `entryorguid`=-147035 AND `id` IN (1001, 1004); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (-147040, -147025, -147026)); +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 +(-147040, 0, 0, 0, 0, 0, 100, 0, 2500, 3000, 12500, 13000, 0, 11, 34793, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Peacekeeper - In Combat - Cast \'Arcane Blast\''), +(-147040, 0, 1, 0, 2, 0, 100, 1, 60, 80, 0, 0, 0, 11, 34791, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Peacekeeper - Between 60-80% Health - Cast \'Arcane Explosion\' (No Repeat)'), +(-147040, 0, 2, 0, 2, 0, 100, 1, 20, 40, 0, 0, 0, 11, 34785, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Peacekeeper - Between 20-40% Health - Cast \'Arcane Volley\' (No Repeat)'), +(-147040, 0, 1001, 1002, 10, 0, 100, 1, 0, 90, 0, 0, 1, 45, 1, 1, 0, 0, 0, 0, 10, 147025, 17993, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Peacekeeper - Within 0-90 Range Out of Combat LoS - Set Data 1 1'), +(-147040, 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 147026, 17993, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Peacekeeper - Within 0-90 Range Out of Combat LoS - Set Data 1 1'), + +(-147026, 0, 0, 0, 0, 0, 100, 1, 2000, 4000, 0, 0, 0, 11, 34784, 0, 0, 0, 0, 0, 26, 20, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - In Combat - Cast \'Intervene\' (No Repeat)'), +(-147026, 0, 1, 0, 0, 0, 100, 0, 4000, 6000, 9000, 11000, 0, 11, 29765, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - In Combat - Cast \'Crystal Strike\''), +(-147026, 0, 2, 0, 0, 0, 100, 0, 8000, 10000, 15000, 20000, 0, 11, 35399, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - In Combat - Cast \'Spell Reflection\''), +(-147026, 0, 1001, 0, 58, 0, 100, 1, 6, 1799308, 0, 0, 0, 80, 1799301, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - On Waypoint Finished - Run Script'), +(-147026, 0, 1002, 0, 38, 0, 100, 1, 1, 1, 0, 0, 0, 53, 0, 1799308, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - On Data Set 1 1 - Start Waypoint'), +(-147026, 0, 1003, 0, 11, 0, 100, 1, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - On Respawn - Set Sheath Unarmed'), + +(-147025, 0, 0, 0, 0, 0, 100, 1, 2000, 4000, 0, 0, 0, 11, 34784, 0, 0, 0, 0, 0, 26, 20, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - In Combat - Cast \'Intervene\' (No Repeat)'), +(-147025, 0, 1, 0, 0, 0, 100, 0, 4000, 6000, 9000, 11000, 0, 11, 29765, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - In Combat - Cast \'Crystal Strike\''), +(-147025, 0, 2, 0, 0, 0, 100, 0, 8000, 10000, 15000, 20000, 0, 11, 35399, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - In Combat - Cast \'Spell Reflection\''), +(-147025, 0, 1001, 0, 58, 0, 100, 1, 7, 1799309, 0, 0, 0, 80, 1799301, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - On Waypoint Finished - Run Script'), +(-147025, 0, 1002, 0, 38, 0, 100, 1, 1, 1, 0, 0, 0, 53, 0, 1799309, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - On Data Set 1 1 - Start Waypoint'), +(-147025, 0, 1003, 0, 11, 0, 100, 1, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - On Respawn - Set Sheath Unarmed'); + +UPDATE `creature` SET `position_x`=6.90713, `position_y`=230.813, `position_z`=-5.45704, `orientation`=3.45575 WHERE `id1`=17993 AND `guid`=147025; +UPDATE `creature` SET `position_x`=-8.30962, `position_y`=231.934, `position_z`=-5.45701, `orientation`=0.349066 WHERE `id1`=17993 AND `guid`=147026; From a607d438b3b0b974884ea3984a7fe0cdf55485db Mon Sep 17 00:00:00 2001 From: Eddy Vega <61223313+Si1ker@users.noreply.github.com> Date: Wed, 1 Mar 2023 13:58:02 -0600 Subject: [PATCH 002/159] fix(Scripts/BlackTemple): Combat status (#15222) Co-authored-by: Si1ker --- .../scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index 38b8f8f78..b638c1926 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -250,6 +250,9 @@ public: me->CastCustomSpell(SPELL_SUMMON_ENSLAVED_SOUL, SPELLVALUE_MAX_TARGETS, 1, me, false); break; } + + if (!UpdateVictim()) + return; } bool CheckEvadeIfOutOfCombatArea() const override From 78b97930f32d9e61be38241a1030bdb8f0961a1f Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Wed, 1 Mar 2023 20:00:55 +0000 Subject: [PATCH 003/159] chore(DB): import pending files Referenced commit(s): a607d438b3b0b974884ea3984a7fe0cdf55485db --- .../rev_1677460150899347600.sql => db_world/2023_03_01_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1677460150899347600.sql => db_world/2023_03_01_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1677460150899347600.sql b/data/sql/updates/db_world/2023_03_01_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677460150899347600.sql rename to data/sql/updates/db_world/2023_03_01_00.sql index 503cb8347..03dbfd4ac 100644 --- a/data/sql/updates/pending_db_world/rev_1677460150899347600.sql +++ b/data/sql/updates/db_world/2023_03_01_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_02_28_00 -> 2023_03_01_00 -- Bonechewer Messenger UPDATE `smart_scripts` SET `action_param6`=2 WHERE `source_type`=0 AND `entryorguid`=21244 AND `id`=0; -- Coilskar Cistern From efe62bea4a598f13d9b8f30fb95723486b35786a Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Wed, 1 Mar 2023 17:16:37 -0300 Subject: [PATCH 004/159] fix(Scripts/IcecrownCitadel): fix Lord Marrowgar bone spikes (#15238) --- .../IcecrownCitadel/boss_lord_marrowgar.cpp | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 1fa5d63ad..57b90967d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -408,27 +408,29 @@ public: { if (!summoner) return; - - if (summoner->GetTypeId() != TYPEID_UNIT) + if (Unit* summonerUnit = summoner->ToUnit()) { - return; + if (Vehicle* v = summonerUnit->GetVehicle()) + { + if (Unit* u = v->GetBase()) + { + if (u->GetEntry() == NPC_BONE_SPIKE && u->GetTypeId() == TYPEID_UNIT) + { + u->ToCreature()->AI()->DoAction(-1337); + } + } + } + ObjectGuid petGUID = summonerUnit->GetPetGUID(); + summonerUnit->SetPetGUID(ObjectGuid::Empty); + me->CastSpell(summonerUnit, SPELL_IMPALED, true); + summonerUnit->CastSpell(me, SPELL_RIDE_VEHICLE, true); + //summoner->ClearUnitState(UNIT_STATE_ONVEHICLE); + summonerUnit->SetPetGUID(petGUID); + summonerUnit->GetMotionMaster()->Clear(); + summonerUnit->StopMoving(); + events.ScheduleEvent(1, 8000); + hasTrappedUnit = true; } - - if (Vehicle* v = summoner->ToUnit()->GetVehicle()) - if (Unit* u = v->GetBase()) - if (u->GetEntry() == NPC_BONE_SPIKE && u->GetTypeId() == TYPEID_UNIT) - u->ToCreature()->AI()->DoAction(-1337); - - ObjectGuid petGUID = summoner->ToUnit()->GetPetGUID(); - summoner->ToUnit()->SetPetGUID(ObjectGuid::Empty); - me->CastSpell(summoner->ToUnit(), SPELL_IMPALED, true); - summoner->ToUnit()->CastSpell(me, SPELL_RIDE_VEHICLE, true); - //summoner->ClearUnitState(UNIT_STATE_ONVEHICLE); - summoner->ToUnit()->SetPetGUID(petGUID); - summoner->ToUnit()->GetMotionMaster()->Clear(); - summoner->ToUnit()->StopMoving(); - events.ScheduleEvent(1, 8000); - hasTrappedUnit = true; } void UpdateAI(uint32 diff) override From 0ddf00c7bece48e63eb9aa84b81eea87c858e396 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 1 Mar 2023 17:36:56 -0300 Subject: [PATCH 005/159] fix(Core/Gameobject): Fix lootable chests related to quests but not having quest loot (#15197) Authored-by: Shauren --- data/sql/updates/pending_db_world/rev_1677339915510744100.sql | 4 ++++ src/server/game/Entities/GameObject/GameObject.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 data/sql/updates/pending_db_world/rev_1677339915510744100.sql diff --git a/data/sql/updates/pending_db_world/rev_1677339915510744100.sql b/data/sql/updates/pending_db_world/rev_1677339915510744100.sql new file mode 100644 index 000000000..6537ace77 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677339915510744100.sql @@ -0,0 +1,4 @@ +-- Delete hack fix +UPDATE `gameobject_template` SET `Data1` = 0 WHERE (`entry` = 182583); + +DELETE FROM `gameobject_loot_template` WHERE `Entry` = 19414; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 7431b5050..1365834de 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1343,7 +1343,7 @@ bool GameObject::ActivateToQuest(Player* target) const case GAMEOBJECT_TYPE_CHEST: { // scan GO chest with loot including quest items - if (LootTemplates_Gameobject.HaveQuestLootForPlayer(GetGOInfo()->GetLootId(), target)) + if (target->GetQuestStatus(GetGOInfo()->chest.questId) == QUEST_STATUS_INCOMPLETE || LootTemplates_Gameobject.HaveQuestLootForPlayer(GetGOInfo()->GetLootId(), target)) { //TODO: fix this hack //look for battlegroundAV for some objects which are only activated after mine gots captured by own team From f79858a5d7b52bda8d2200ea7feac7723e8cfc4d Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Wed, 1 Mar 2023 20:39:27 +0000 Subject: [PATCH 006/159] chore(DB): import pending files Referenced commit(s): 0ddf00c7bece48e63eb9aa84b81eea87c858e396 --- .../rev_1677339915510744100.sql => db_world/2023_03_01_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1677339915510744100.sql => db_world/2023_03_01_01.sql} (77%) diff --git a/data/sql/updates/pending_db_world/rev_1677339915510744100.sql b/data/sql/updates/db_world/2023_03_01_01.sql similarity index 77% rename from data/sql/updates/pending_db_world/rev_1677339915510744100.sql rename to data/sql/updates/db_world/2023_03_01_01.sql index 6537ace77..ab8f8401c 100644 --- a/data/sql/updates/pending_db_world/rev_1677339915510744100.sql +++ b/data/sql/updates/db_world/2023_03_01_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_01_00 -> 2023_03_01_01 -- Delete hack fix UPDATE `gameobject_template` SET `Data1` = 0 WHERE (`entry` = 182583); From f2ee3ce05057bffbae07f057d874e1d456d54464 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 1 Mar 2023 20:17:11 -0300 Subject: [PATCH 007/159] fix(DB/Gameobject): Ever-burning Ash (#15055) --- .../rev_1676493665842878700.sql | 192 ++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676493665842878700.sql diff --git a/data/sql/updates/pending_db_world/rev_1676493665842878700.sql b/data/sql/updates/pending_db_world/rev_1676493665842878700.sql new file mode 100644 index 000000000..873a56f3b --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676493665842878700.sql @@ -0,0 +1,192 @@ +-- +UPDATE `gameobject` SET `spawntimesecs`=180 WHERE `id`=184948; + +DELETE FROM `gameobject` WHERE `id`=184948 AND `map`=530 AND `guid` IN (20041,20329,20330,20331,20363,20366,20370,20372,20374,20376,20401,20444,20453,20466,20474,20475,20476,20477,20497,20511,20577,20593,20594,20595,20596,20597,20598,20599,20600,20601,20602,20603,20604,20605,20606,20607,20608,20609,20610,20611,20612,20613,20614,20615,20653,20724,20734,20742,20751,20753,20754,20755,20817); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`) VALUES +(20041, 184948, 530, 3520, 1, -3177.23, 2372.84, 61.9757, -2.96704, 0, 0, -0.996194, 0.0871655, 180, 100, 1), +(20329, 184948, 530, 3520, 1, -3595.77, 2014.1, 68.6959, -2.25147, 0, 0, -0.902584, 0.430513, 180, 100, 1), +(20330, 184948, 530, 3520, 1, -3436.98, 2072.21, 80.8401, 1.18682, 0, 0, 0.559191, 0.829039, 180, 100, 1), +(20331, 184948, 530, 3520, 1, -3469.44, 1924.83, 91.0128, 0.750491, 0, 0, 0.366501, 0.930418, 180, 100, 1), +(20363, 184948, 530, 3520, 1, -3457.95, 1948.24, 86.7169, 0.715585, 0, 0, 0.350207, 0.936672, 180, 100, 1), +(20366, 184948, 530, 3520, 1, -3585.65, 2028.37, 67.4767, -0.593412, 0, 0, -0.292372, 0.956305, 180, 100, 1), +(20370, 184948, 530, 3520, 1, -3446.31, 1970.54, 83.1735, 2.58308, 0, 0, 0.961261, 0.275641, 180, 100, 1), +(20372, 184948, 530, 3520, 1, -3484.72, 1913.96, 90.9911, 0.139624, 0, 0, 0.0697553, 0.997564, 180, 100, 1), +(20374, 184948, 530, 3520, 1, -3597.36, 2068.67, 69.3172, 0.733038, 0, 0, 0.358368, 0.93358, 180, 100, 1), +(20376, 184948, 530, 3520, 1, -3467.85, 2101.52, 86.6204, -2.93214, 0, 0, -0.994521, 0.104535, 180, 100, 1), +(20401, 184948, 530, 3520, 1, -3445.23, 2089.97, 82.252, 0.872664, 0, 0, 0.422618, 0.906308, 180, 100, 1), +(20444, 184948, 530, 3520, 1, -3452.18, 2118.2, 86.034, -2.14675, 0, 0, -0.878816, 0.477161, 180, 100, 1), +(20453, 184948, 530, 3520, 1, -3488.5, 2111.64, 88.7521, 0.209439, 0, 0, 0.104528, 0.994522, 180, 100, 1), +(20466, 184948, 530, 3520, 1, -3053.35, 2390.32, 62.1312, 0.698131, 0, 0, 0.34202, 0.939693, 180, 100, 1), +(20474, 184948, 530, 3520, 1, -3268.56, 2484.83, 63.7767, 1.32645, 0, 0, 0.615661, 0.788011, 180, 100, 1), +(20475, 184948, 530, 3520, 1, -4045.82, 1988.78, 83.6576, -2.11185, 0, 0, -0.870356, 0.492423, 180, 100, 1), +(20476, 184948, 530, 3520, 1, -3232.92, 2440.37, 62.4803, 2.74016, 0, 0, 0.979924, 0.199371, 180, 100, 1), +(20477, 184948, 530, 3520, 1, -4161.6, 1688.8, 91.149, 2.9845, 0, 0, 0.996917, 0.0784656, 180, 100, 1), +(20497, 184948, 530, 3520, 1, -3336.36, 2577.88, 58.2156, -0.453785, 0, 0, -0.224951, 0.97437, 180, 100, 1), +(20511, 184948, 530, 3520, 1, -4166.13, 1668.65, 91.3104, 0.261798, 0, 0, 0.130525, 0.991445, 180, 100, 1), +(20577, 184948, 530, 3520, 1, -3365.5, 2583.54, 58.8089, -2.53072, 0, 0, -0.953716, 0.300709, 180, 100, 1), +(20593, 184948, 530, 3520, 1, -3443.75, 1923.5, 92.7791, 0.279252, 0, 0, 0.139173, 0.990268, 180, 100, 1), +(20594, 184948, 530, 3520, 1, -3421.82, 1955.19, 83.447, 2.67035, 0, 0, 0.972369, 0.233447, 180, 100, 1), +(20595, 184948, 530, 3520, 1, -3438.19, 2188.66, 76.2026, -1.78023, 0, 0, -0.777144, 0.629323, 180, 100, 1), +(20596, 184948, 530, 3520, 1, -3403.01, 2439.82, 59.7999, -0.890117, 0, 0, -0.430511, 0.902586, 180, 100, 1), +(20597, 184948, 530, 3520, 1, -3464.85, 1907, 94.9282, 3.14159, 0, 0, 1, 0.00000126759, 180, 100, 1), +(20598, 184948, 530, 3520, 1, -3433.8, 2110, 80.1981, 0.872664, 0, 0, 0.422618, 0.906308, 180, 100, 1), +(20599, 184948, 530, 3520, 1, -4149.18, 1901.43, 70.6008, -1.27409, 0, 0, -0.594823, 0.803857, 180, 100, 1), +(20600, 184948, 530, 3520, 1, -3390.48, 2348.3, 64.3622, 0.349065, 0, 0, 0.173648, 0.984808, 180, 100, 1), +(20601, 184948, 530, 3520, 1, -3610.32, 2090.33, 70.4547, 2.54818, 0, 0, 0.956305, 0.292372, 180, 100, 1), +(20602, 184948, 530, 3520, 1, -3454.63, 2382.61, 62.9693, -2.09439, 0, 0, -0.866024, 0.500002, 180, 100, 1), +(20603, 184948, 530, 3520, 1, -4161.62, 1716.38, 92.6141, -2.84488, 0, 0, -0.989015, 0.147813, 180, 100, 1), +(20604, 184948, 530, 3520, 1, -3486.04, 2451.25, 66.7612, -2.77507, 0, 0, -0.983255, 0.182237, 180, 100, 1), +(20605, 184948, 530, 3520, 1, -3256.08, 2546.08, 63.4731, 0.139624, 0, 0, 0.0697553, 0.997564, 180, 100, 1), +(20606, 184948, 530, 3520, 1, -4192.01, 1877.2, 105.001, 1.43117, 0, 0, 0.656059, 0.75471, 180, 100, 1), +(20607, 184948, 530, 3520, 1, -3346.29, 2470.03, 60.5083, -1.18682, 0, 0, -0.559191, 0.829039, 180, 100, 1), +(20608, 184948, 530, 3520, 1, -4162.95, 1878.71, 92.3995, 0.680677, 0, 0, 0.333806, 0.942642, 180, 100, 1), +(20609, 184948, 530, 3520, 1, -4206.43, 1652.69, 90.5876, 1.67551, 0, 0, 0.743143, 0.669133, 180, 100, 1), +(20610, 184948, 530, 3520, 1, -4232.03, 1656.2, 94.187, 2.42601, 0, 0, 0.936673, 0.350206, 180, 100, 1), +(20611, 184948, 530, 3520, 1, -3380.86, 2383.34, 62.0297, 2.72271, 0, 0, 0.978147, 0.207914, 180, 100, 1), +(20612, 184948, 530, 3520, 1, -3419.74, 2536.26, 52.5607, -0.104719, 0, 0, -0.0523356, 0.99863, 180, 100, 1), +(20613, 184948, 530, 3520, 1, -3477.63, 2540.58, 60.9018, 0.610864, 0, 0, 0.300705, 0.953717, 180, 100, 1), +(20614, 184948, 530, 3520, 1, -3250.76, 2549.58, 63.816, 1.98967, 0, 0, 0.838669, 0.544641, 180, 100, 1), +(20615, 184948, 530, 3520, 1, -3357.01, 2617.84, 61.5568, 0.122173, 0, 0, 0.0610485, 0.998135, 180, 100, 1), +(20653, 184948, 530, 3520, 1, -3413.61, 2610.21, 59.8124, 0.523598, 0, 0, 0.258819, 0.965926, 180, 100, 1), +(20724, 184948, 530, 3520, 1, -3443.52, 2543.19, 58.7163, 2.53072, 0, 0, 0.953716, 0.300709, 180, 100, 1), +(20734, 184948, 530, 3520, 1, -3322.32, 2588.94, 59.6109, -1.23918, 0, 0, -0.580701, 0.814117, 180, 100, 1), +(20742, 184948, 530, 3520, 1, -3550.19, 2258.08, 77.5607, 1.43117, 0, 0, 0.656059, 0.75471, 180, 100, 1), +(20751, 184948, 530, 3520, 1, -3567.57, 2204.41, 79.3999, 1.27409, 0, 0, 0.594823, 0.803857, 180, 100, 1), +(20753, 184948, 530, 3520, 1, -3400.29, 2575.96, 59.6093, -1.5708, 0, 0, -0.707108, 0.707106, 180, 100, 1), +(20754, 184948, 530, 3520, 1, -3447.04, 2525.51, 60.1205, 0.069812, 0, 0, 0.0348989, 0.999391, 180, 100, 1), +(20755, 184948, 530, 3520, 1, -3303.98, 2538.64, 58.1634, -0.209439, 0, 0, -0.104528, 0.994522, 180, 100, 1), +(20817, 184948, 530, 3520, 1, -3429.94, 2452.05, 56.4512, -2.04204, 0, 0, -0.852641, 0.522496, 180, 100, 1); + +SET @POOL := 104; + +DELETE FROM `pool_template` WHERE `entry`=@POOL AND `description`='Ever-burning Ash (184948)'; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES (@POOL, 68, 'Ever-burning Ash (184948)'); + +DELETE FROM `pool_gameobject` WHERE `pool_entry`=@POOL AND `description`='Ever-burning Ash (184948)'; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(20041 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20329 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20330 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20331 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20363 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20366 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20370 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20372 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20374 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20376 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20401 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20444 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20453 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20466 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20474 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20475 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20476 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20477 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20497 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20511 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20577 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20593 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20594 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20595 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20596 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20597 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20598 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20599 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20600 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20601 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20602 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20603 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20604 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20605 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20606 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20607 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20608 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20609 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20610 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20611 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20612 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20613 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20614 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20615 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20653 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20724 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20734 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20742 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20751 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20753 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20754 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20755 , @POOL, 0, 'Ever-burning Ash (184948)'), +(20817 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25834 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25835 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25836 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25837 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25838 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25839 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25840 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25841 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25842 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25843 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25844 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25845 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25846 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25847 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25848 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25849 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25850 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25851 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25852 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25853 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25854 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25855 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25856 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25857 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25858 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25859 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25860 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25861 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25862 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25863 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25864 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25865 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25866 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25867 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25868 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25869 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25870 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25871 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25872 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25873 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25874 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25875 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25876 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25877 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25878 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25879 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25880 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25881 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25882 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25883 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25884 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25885 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25886 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25887 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25888 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25889 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25890 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25891 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25892 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25893 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25894 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25895 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25896 , @POOL, 0, 'Ever-burning Ash (184948)'), +(25897 , @POOL, 0, 'Ever-burning Ash (184948)'), +(28424 , @POOL, 0, 'Ever-burning Ash (184948)'), +(28479 , @POOL, 0, 'Ever-burning Ash (184948)'), +(28480 , @POOL, 0, 'Ever-burning Ash (184948)'), +(28481 , @POOL, 0, 'Ever-burning Ash (184948)'), +(28482 , @POOL, 0, 'Ever-burning Ash (184948)'), +(28483 , @POOL, 0, 'Ever-burning Ash (184948)'), +(28485 , @POOL, 0, 'Ever-burning Ash (184948)'), +(28486 , @POOL, 0, 'Ever-burning Ash (184948)'), +(100374, @POOL, 0, 'Ever-burning Ash (184948)'); From 2f28c8e90e0ea12e703b24c989b57870d27f2c56 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 1 Mar 2023 20:17:21 -0300 Subject: [PATCH 008/159] refactor(DB/SAI): Re-organize Teron Gorefiend, I am... script and add time limit properly (#15164) --- .../rev_1677121723939096800.sql | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677121723939096800.sql diff --git a/data/sql/updates/pending_db_world/rev_1677121723939096800.sql b/data/sql/updates/pending_db_world/rev_1677121723939096800.sql new file mode 100644 index 000000000..4c6f4018b --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677121723939096800.sql @@ -0,0 +1,88 @@ +-- Karsius (21877) +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21877); +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 +(21877, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 86, 37784, 0, 9, 21876, 0, 100, 19, 21867, 100, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Aggro - Cross Cast \'Enforced Submission\''), +(21877, 0, 1, 0, 38, 0, 100, 512, 2, 2, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Data Set 2 2 - Evade'), +(21877, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 80, 2187700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Respawn - Run Script'), +(21877, 0, 3, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 21872, 200, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Just Died - Set Data 1 1'), +(21877, 0, 4, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 21872, 200, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Evade - Set Data 2 2'); + +-- Karsius On Respawn +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2187700); +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 +(2187700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 17, 333, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Respawn - Set Emote State 333'), +(2187700, 9, 1, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Respawn - Set Unit Flags'), +(2187700, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 19, 21867, 0, 0, 0, 0, 0, 0, 0, 'Karsius the Ancient Watcher - On Respawn - Set Unit Flags'); + +-- Success Event (On Karsius Death) +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (2187200, 2187201, 2187202)); +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 +-- Set Event Phase for success +(2187200, 9, 0, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 21877, 100, 1, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Death - Say Line 1'), +(2187200, 9, 1, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 9, 21876, 0, 200, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Death - Despawn Chain of Shadows'), +(2187200, 9, 2, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 21867, 0, 0, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Death - Set Data 1 1'), +(2187200, 9, 3, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 28, 37782, 0, 0, 0, 0, 0, 17, 0, 200, 0, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Death - Remove Aura \'Serverside - Disembodied Spirit\''), +(2187200, 9, 4, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 28, 37748, 0, 0, 0, 0, 0, 17, 0, 200, 0, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Death - Remove Aura \'Teron Gorefiend\''), +(2187200, 9, 5, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 28, 37748, 0, 0, 0, 0, 0, 9, 21867, 0, 200, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Death - Remove Aura \'Teron Gorefiend\''), +(2187200, 9, 6, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 41, 5000, 0, 0, 0, 0, 0, 19, 21877, 100, 1, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Death - Despawn'), + +-- Failure Event 1 (Evade) +-- Set Event Phase +(2187201, 9, 0, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 21877, 100, 0, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Evade - Say Line 2'), +(2187201, 9, 1, 0, 0, 0, 100, 512, 1200, 1200, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 9, 21876, 0, 200, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Evade - Despawn Instant'), +(2187201, 9, 2, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21797, 0, 1, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Evade - Despawn Instant'), +(2187201, 9, 3, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21867, 0, 1, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Evade - Despawn Instant'), +(2187201, 9, 4, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 21877, 100, 0, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Karsius Evade - Despawn Instant'); + +-- Teron Gorefiend (21867) +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21867); + +-- Ancient Shadowmoon Spirit (21797) +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21797); +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 +(21797, 0, 0, 1, 19, 0, 100, 512, 10645, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Quest \'Teron Gorefiend, I am...\' Taken - Store Targetlist'), +(21797, 0, 1, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 80, 2179700, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Quest \'Teron Gorefiend, I am...\' Taken - Run Script'), +(21797, 0, 2, 3, 19, 0, 100, 512, 10639, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Quest \'Teron Gorefiend, I am...\' Taken - Store Targetlist'), +(21797, 0, 3, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 80, 2179700, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Quest \'Teron Gorefiend, I am...\' Taken - Run Script'), +(21797, 0, 4, 0, 38, 0, 100, 512, 1, 1, 0, 0, 0, 80, 2179701, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Data Set - Run Script 2'), +(21797, 0, 5, 0, 40, 0, 100, 512, 3, 21867, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Reached WP7 - Despawn'), +(21797, 0, 6, 7, 6, 0, 100, 512, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 21877, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Death - Set Data 2 2 on Karsius the Ancient Watcher'), +(21797, 0, 7, 8, 61, 0, 100, 512, 0, 0, 0, 0, 0, 28, 37782, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Just Died - Remove Aura Disembodied Spirit'), +(21797, 0, 8, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 28, 37748, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Just Died - Remove Aura Teron Gorefiend'), +(21797, 0, 9, 0, 60, 1, 100, 513, 300000, 300000, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - On Update - Despawn Instant (Phase 1) (No Repeat)'); + +-- The Voice of Gorefiend (21872) +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 21872; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21872); +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 +(21872, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 2187200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Data Set 1 1 - Run Success Script'), +(21872, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 80, 2187201, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'The Voice of Gorefiend - On Data Set 2 2 - Run Failure Script'); + +-- Script Start +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2179700); +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 +(2179700, 9, 0 , 0, 0, 0, 100, 0, 1400, 1400, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Set Orientation Player (Stored)'), +(2179700, 9, 1 , 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Say Line 0'), +(2179700, 9, 2 , 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 0, 36, 21867, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Update Template To \'Teron Gorefiend\''), +(2179700, 9, 3 , 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 18, 256, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Set Flags Immune To Players'), +(2179700, 9, 4 , 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Set Npc Flag '), +(2179700, 9, 5 , 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 75, 37782, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Add Aura \'Serverside - Disembodied Spirit\''), +(2179700, 9, 6 , 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 85, 37769, 2, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Invoker Cast \'Serverside - Teron Gorefiend\''), +(2179700, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Set Event Phase 1'), +(2179700, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 37789, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Cast \'Teron Freed\''), +(2179700, 9, 9, 0, 0, 0, 100, 512, 2000, 2000, 0, 0, 0, 12, 21877, 1, 300000, 0, 0, 0, 8, 0, 0, 0, 0, -4535.79, 1029.28, 8.83636, 3.78736, 'Ancient Shadowmoon Spirit - Actionlist - Summon Creature \'Karsius the Ancient Watcher\''), +(2179700, 9, 10, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21877, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Say Line 0'), +(2179700, 9, 11, 0, 0, 0, 100, 512, 9000, 9000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 21872, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Say Line 0'); + +-- Script End Event +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2179701); +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 +(2179701, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Evade'), +(2179701, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Set Event Phase 0'), +(2179701, 9, 2, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 0, 43, 0, 10720, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Mount To Model 10720'), +(2179701, 9, 3, 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, 'Ancient Shadowmoon Spirit - Actionlist - Say Line 0'), +(2179701, 9, 4, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Say Line 1'), +(2179701, 9, 5, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 53, 1, 21867, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ancient Shadowmoon Spirit - Actionlist - Start Waypoint'); + +-- Cleanup Chain of Shadows Script +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 21876) AND (`source_type` = 0) AND (`id` IN (3)); From 7032f2bd92de6827f4e918c7f722085b3d4c7fa1 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 1 Mar 2023 20:17:32 -0300 Subject: [PATCH 009/159] fix(DB/SAI): Rewrite Deathblow to the Legion and Turning Point in SmartAI (#15182) --- .../rev_1677165107723442200.sql | 280 +++++ .../scripts/Outland/zone_netherstorm.cpp | 1024 ----------------- .../scripts/Outland/zone_shattrath_city.cpp | 117 -- 3 files changed, 280 insertions(+), 1141 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1677165107723442200.sql diff --git a/data/sql/updates/pending_db_world/rev_1677165107723442200.sql b/data/sql/updates/pending_db_world/rev_1677165107723442200.sql new file mode 100644 index 000000000..04ffac6ac --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677165107723442200.sql @@ -0,0 +1,280 @@ +-- Delete old custom creature_template entries +DELETE FROM `creature_template` WHERE `entry` IN ( +61021, -- Adyen the Lightwarden +50004, -- Adyen Trigger +50002, -- Exarch Orelis +50001 -- Anchorite Karja +); + +-- Delete Adyen Trigger +DELETE FROM `creature` WHERE `id1`=50004 AND `guid`=3110359; + +DELETE FROM `creature_equip_template` WHERE (`CreatureID` IN (50001, 50002, 61021)); + +DELETE FROM `creature_template_spell` WHERE (`CreatureID` IN (50001, 50002, 61021)); + +-- Delete old waypoints +DELETE FROM `waypoint_data` WHERE `id` IN ( +610210, -- ADYEN_PATH_ID +500010, -- KARJA_PATH_ID +500020, -- ORELIS_PATH_ID +207940, -- KAYLAAN_PATH_ID1 +207941, -- KAYLAAN_PATH_ID2 +500050 -- ISHANAH_PATH_ID +); + +-- Delete old texts +DELETE FROM `creature_text` WHERE `creatureid`=61021; +DELETE FROM `creature_text` WHERE `creatureid`=18537; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(18537, 0, 0, 'We\'re here for you, lost brother. It is custom to offer you a chance to repent before you are destroyed. We offer you this chance, as the naaru\'s law commands.', 12, 0, 100, 0, 0, 0, 18389, 0, ''), +(18537, 1, 0, 'We may be few, Socrethar, but our faith is strong. Something you will never understand. Now that custom has been served, prepare to meet your end.', 12, 0, 100, 0, 0, 0, 18391, 0, ''), +(18537, 2, 0, 'How... how could you?!', 12, 0, 100, 0, 0, 0, 18393, 0, ''), +(18537, 3, 0, 'Socrethar is clouding your mind, Kaylaan! You do not mean these words! I remember training you when you were but a youngling. Your will was strong even then!', 12, 0, 100, 0, 0, 0, 18397, 0, ''); + +-- Add proper trigger creature +DELETE FROM `creature` WHERE `id1`=23491; +INSERT INTO `creature` (`guid`, `id1`, `map`, `zoneId`, `areaId`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `VerifiedBuild`) VALUES +(111111, 23491, 530, 3523, 3742, 4819.2363, 3775.88, 210.25194, 5.515240192413330078, 120, 48069); + +-- Adyen (18537) +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE (`entry` IN ( +18537, -- Adyen the Lightwarden +18538, -- Ishanah +19466, -- Exarch Orelis +19467, -- Anchorite Karja +20132, -- Socrethar +20794, -- Kaylaan the Lost +23491 -- Socrethar Event Trigger +)); + +-- Orelis (19466) +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -69725); +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 +(-69725, 0, 0, 0, 1, 0, 100, 512, 0, 30000, 180000, 240000, 0, 80, 1946600, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Exarch Orelis - OOC - Run Script'); + +-- Karja (19467) +UPDATE `creature_template_addon` SET `bytes1` = 0, `bytes2` = 1 WHERE (`entry` = 19467); +DELETE FROM `creature_addon` WHERE (`guid` = 69727); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(69727, 0, 0, 6, 4097, 0, 0, NULL); + +UPDATE `creature` SET `position_x`=4946.936, `position_y`=3849.2083, `position_z`=211.5767, `orientation`=3.892084121704101562, `VerifiedBuild`=48069 WHERE `id1`=20132; + +-- Waypoints +DELETE FROM `waypoints` WHERE `entry` IN (1853700, 2079400, 2079401, 2079402, 1853800, 1853801); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `point_comment`) VALUES +-- Adyen +(1853700,1,4819.1963,3769.3455,210.50163,NULL,'Adyen the Lightwarden'), +(1853700,2,4842.374,3776.3086,206.5136,NULL,'Adyen the Lightwarden'), +(1853700,3,4860.4517,3791.8281,199.58647,NULL,'Adyen the Lightwarden'), +(1853700,4,4883.19,3808.0283,198.98213,NULL,'Adyen the Lightwarden'), +(1853700,5,4898.159,3817.5452,208.13782,NULL,'Adyen the Lightwarden'), +(1853700,6,4912.548,3827.1858,211.50491,NULL,'Adyen the Lightwarden'), +(1853700,7,4925.748,3835.356,211.49062,NULL,'Adyen the Lightwarden'), +-- Kaylaan +(2079400,1,4950.1494,3887.8508,212.33162,NULL,'Kaylaan the Lost'), +(2079400,2,4946.882,3872.5073,211.48543,NULL,'Kaylaan the Lost'), +(2079400,3,4939.2324,3853.8499,211.48567,NULL,'Kaylaan the Lost'), +(2079400,4,4941.726,3852.1892,211.46687,NULL,'Kaylaan the Lost'), -- Kneel +(2079401,1,4940.221,3847.4336,211.49857,NULL,'Kaylaan the Lost'), -- Stand by Socrethar +(2079402,1,4938.0044,3834.3682,211.35002,NULL,'Kaylaan the Lost'), -- Stand by Ishanah +-- Ishanah - The Decomposed Waypoints are to avoid floating/flying. If in the future movement is changed then they could be safely removed +(1853800,1 ,4881.5283,3806.9114,199.50269,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,2 ,4883.5283,3808.6614,199.50269,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,3 ,4885.7783,3810.4114,199.50269,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,4 ,4889.5283,3812.4114,202.75269,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,5 ,4894.203,3814.9324,205.52324,NULL,'Ishanah'), +(1853800,6 ,4898.7446,3817.81,208.48784,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,7 ,4907.2446,3822.81,211.73784,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,8 ,4909.8877,3824.375,211.50648,NULL,'Ishanah'), +(1853800,9 ,4910.0957,3824.607,211.6725,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,10,4919.0957,3826.607,211.6725,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,11,4919.5957,3826.607,211.6725,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,12,4922.5957,3827.357,211.6725,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,13,4923.284,3827.5364,211.48683,NULL,'Ishanah'), +(1853800,14,4926.301,3828.2864,211.71806,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,15,4932.801,3829.7864,211.71806,NULL,'Ishanah - Decomposed Waypoint'), +(1853800,16,4933.633,3830.1167,211.43718,NULL,'Ishanah'), +(1853800,17,4935.647,3831.1455,211.39305,NULL,'Ishanah'), +(1853800,18,4937.065,3832.6042,211.42769,NULL,'Ishanah'); + +-- Spawning Event +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 23491); +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 +(23491, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar Event Trigger - On Data Set 1 1 - Summon Creature Group 0'); + +DELETE FROM `creature_summon_groups` WHERE `summonerId`=23491 AND `summonerType`=0 AND `Comment` LIKE 'Deathblow to the Legion%'; +INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`, `Comment`) VALUES +(23491, 0, 0, 18537, 4805.796, 3774.1116, 210.61717, 5.550147056579589843, 6, 60000, 'Deathblow to the Legion - Adyen'), +(23491, 0, 0, 19466, 4804.807, 3775.562, 210.6171, 5.532693862915039062, 6, 60000, 'Deathblow to the Legion - Orelis'), +(23491, 0, 0, 19467, 4803.6367, 3773.8438, 210.61761, 5.602506637573242187, 6, 60000, 'Deathblow to the Legion - Karja'); + +-- Gossips +DELETE FROM `gossip_menu` WHERE (`MenuID` = 8117); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES +(8117, 10051), +(8117, 10210); + +DELETE FROM `gossip_menu_option` WHERE (`MenuID` = 8117); +INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES +(8117, 0, 0, 'I\'m ready, Adyen.', 18591, 1, 1, 0, 0, 0, 0, '', 0, 0); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` IN (14, 15)) AND (`SourceGroup` IN (7735, 8117)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +-- Adyen Gossip +(14, 8117, 10051, 0, 0, 23, 1, 3742, 0, 0, 1, 0, 0, '', 'Show text when outside Socrethar\'s Seat'), +(14, 8117, 10210, 0, 0, 23, 1, 3742, 0, 0, 0, 0, 0, '', 'Show text when inside Socrethar\'s Seat'), +(15, 8117, 0, 0, 0, 23, 1, 3742, 0, 0, 0, 0, 0, '', 'Show gossip option only when inside Socrethar\'s Seat'), +(15, 8117, 0, 0, 0, 29, 1, 20132, 200, 0, 0, 0, 0, '', 'Show gossip option only when Socrethar is alive'), +(15, 8117, 0, 0, 0, 29, 1, 20794, 200, 0, 1, 0, 0, '', 'Show gossip option only when Kaylaan hasn\'t spawned'), +(15, 8117, 0, 0, 0, 9, 0, 10409, 0, 0, 0, 0, 0, '', 'Show gossip option only if player has quest \'Deathblow to the Legion\''), +-- Ishanah Gossip +(14, 7735, 9457, 0, 0, 23, 1, 3703, 0, 0, 0, 0, 0, '', 'Show text only when inside Shattrath'), +(15, 7735, 0, 0, 0, 23, 1, 3703, 0, 0, 0, 0, 0, '', 'Show gossip option only when inside Shattrath'), +(15, 7735, 1, 0, 0, 23, 1, 3703, 0, 0, 0, 0, 0, '', 'Show gossip option only when inside Shattrath'); + +-- SAI Conditions +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceEntry` = 23491); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 23491, 0, 0, 29, 1, 18537, 200, 0, 1, 0, 0, '', 'Do not spawn Socrethar Event group if there is already one spawned within 200y'), +(22, 1, 23491, 0, 0, 29, 1, 20794, 200, 0, 1, 0, 0, '', 'Do not spawn Socrethar Event group if Kaylaan has already spawned within 200y'); + +-- Spell Conditions +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceEntry` IN (35598, 35599, 35600)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 35598, 0, 0, 31, 0, 3, 18538, 0, 0, 0, 0, '', 'Wrath of Socrethar (35598) targets Ishanah'), +(13, 1, 35599, 0, 0, 31, 0, 3, 18538, 0, 0, 0, 0, '', 'Resurrection (35599) targets Ishanah'), +(13, 1, 35600, 0, 0, 31, 0, 3, 20794, 0, 0, 0, 0, '', 'Wrath of Socrethar (35600) targets Kaylaan the Lost'); + +UPDATE `gameobject_template` SET `AIName` = 'SmartGameObjectAI' WHERE `entry` = 184604; +DELETE FROM `smart_scripts` WHERE (`source_type` = 1 AND `entryorguid` = 184604); +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 +(184604, 1, 0, 0, 63, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 111111, 23491, 0, 0, 0, 0, 0, 0, 'Portal to Socrethar\'s Seat - On Just Created - Set Data 1 1'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (18537, 18538, 19466, 19467, 20132, 20794)); +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 +(18537, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - On Just Summoned - Set Npc Flags Gossip'), +(18537, 0, 1, 2, 62, 0, 100, 0, 8117, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - On Gossip Option 0 Selected - Store Targetlist'), +(18537, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - On Gossip Option 0 Selected - Close Gossip'), +(18537, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 1853700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - On Gossip Option 0 Selected - Run Script'), +(18537, 0, 4, 5, 58, 0, 100, 0, 7, 1853700, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - On Waypoint Finished - Set Data 1 1 on Socrethar (Request Event Start)'), +(18537, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - On Waypoint Finished - Send Target List to Socrethar'), +(18537, 0, 6, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 39, 30, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - On Aggro - Call For Help'), +(18537, 0, 7, 0, 0, 0, 100, 0, 0, 3500, 2000, 7500, 0, 11, 14518, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - In Combat - Cast \'Crusader Strike\''), +(18537, 0, 8, 0, 0, 0, 100, 0, 15000, 40000, 20000, 60000, 0, 11, 13005, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - In Combat - Cast \'Hammer of Justice\''), +(18538, 0, 0, 1, 38, 0, 100, 0, 1, 1, 0, 0, 0, 53, 1, 1853800, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - On Data Set 1 1 - Start Waypoint'), +(18538, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 83, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - On Data Set 1 1 - Remove Npc Flags Gossip & Questgiver'), +(18538, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 2, 250, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - On Data Set 1 1 - Set Faction 250'), +(18538, 0, 3, 0, 40, 0, 100, 0, 18, 1853800, 0, 0, 0, 80, 1853800, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - On Waypoint 18 Reached - Run Script'), +(18538, 0, 4, 0, 8, 0, 100, 0, 35598, 0, 0, 0, 0, 11, 29266, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - On Spellhit \'Wrath of Socrethar\' - Cast \'Permanent Feign Death\''), -- Yes, these are sniffed +(18538, 0, 5, 0, 8, 0, 100, 0, 35599, 0, 0, 0, 0, 28, 29266, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - On Spellhit \'Resurrection\' - Remove Aura \'Permanent Feign Death\''), +(18538, 0, 6, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 39, 50, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - On Aggro - Call For Help'), +(18538, 0, 7, 0, 0, 0, 100, 0, 0, 3500, 2500, 7500, 0, 11, 15238, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - In Combat - Cast \'Holy Smite\''), +(18538, 0, 8, 0, 14, 0, 100, 0, 5000, 40, 30000, 60000, 0, 11, 35096, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - Friendly At 5000 Health - Cast \'Greater Heal\''), +(18538, 0, 9, 0, 14, 0, 100, 0, 3000, 40, 45000, 75000, 0, 11, 22187, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - Friendly At 3000 Health - Cast \'Power Word: Shield\''), +(19466, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Exarch Orelis - On Just Summoned - Set Npc Flag '), +(19466, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 1946601, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Exarch Orelis - On Data Set 1 1 - Run Script'), +(19466, 0, 2, 0, 0, 0, 100, 0, 0, 3500, 15000, 21000, 0, 11, 29426, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Exarch Orelis - In Combat - Cast \'Heroic Strike\''), +(19466, 0, 3, 0, 0, 0, 100, 0, 10000, 15000, 30000, 30000, 0, 11, 16509, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Exarch Orelis - In Combat - Cast \'Rend\''), +(19466, 0, 4, 0, 0, 0, 100, 0, 7500, 21000, 20000, 45000, 0, 11, 13730, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Exarch Orelis - In Combat - Cast \'Demoralizing Shout\''), +(19467, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Karja - On Just Summoned - Set Npc Flag '), +(19467, 0, 1, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 1946701, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Karja - On Data Set 1 1 - Run Script'), +(19467, 0, 2, 0, 0, 0, 100, 0, 3500, 10000, 7500, 15000, 0, 11, 9734, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Karja - In Combat - Cast \'Holy Smite\''), +(19467, 0, 3, 0, 14, 0, 100, 0, 4000, 40, 15000, 30000, 0, 11, 35096, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Karja - Friendly At 4000 Health - Cast \'Greater Heal\''), +(20132, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 2013200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - On Data Set 1 1 - Run Script'), +(20132, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 11, 35596, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - On Data Set 2 2 - Cast \'Power of the Legion\''), +(20132, 0, 2, 0, 38, 0, 100, 0, 3, 3, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 18538, 50, 0, 0, 0, 0, 0, 0, 'Socrethar - On Data Set 3 3 - Set Orientation Closest Creature \'Ishanah\''), +(20132, 0, 3, 0, 38, 0, 100, 0, 4, 4, 0, 0, 0, 80, 2013201, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - On Data Set 4 4 - Run Script'), +(20132, 0, 4, 0, 38, 0, 100, 0, 5, 5, 0, 0, 0, 80, 2013202, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - On Data Set 5 5 - Run Script'), +(20132, 0, 5, 6, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35762, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - On Just Died - Cast \'Serverside - Socrethar Quest Credit\''), +(20132, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 0, 82, 3, 0, 0, 0, 0, 0, 19, 18538, 100, 0, 0, 0, 0, 0, 0, 'Socrethar - On Just Died - Add Npc Flags Gossip & Questgiver to Ishanah'), +(20132, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 60000, 0, 0, 0, 0, 0, 19, 20794, 100, 0, 0, 0, 0, 0, 0, 'Socrethar - On Just Died - Cleanup Event'), +(20132, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 60000, 0, 0, 0, 0, 0, 19, 18537, 100, 0, 0, 0, 0, 0, 0, 'Socrethar - On Just Died - Cleanup Event'), +(20132, 0, 9, 10, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 150000, 0, 0, 0, 0, 0, 19, 18538, 100, 0, 0, 0, 0, 0, 0, 'Socrethar - On Just Died - Cleanup Event'), +(20132, 0, 10, 11, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 60000, 0, 0, 0, 0, 0, 19, 19466, 100, 0, 0, 0, 0, 0, 0, 'Socrethar - On Just Died - Cleanup Event'), +(20132, 0, 11, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 60000, 0, 0, 0, 0, 0, 19, 19467, 100, 0, 0, 0, 0, 0, 0, 'Socrethar - On Just Died - Cleanup Event'), +(20132, 0, 12, 0, 23, 0, 100, 0, 37539, 0, 3600, 3600, 0, 11, 37539, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - On Missing Aura \'Nether Protection\' - Cast \'Nether Protection\''), +(20132, 0, 13, 0, 0, 0, 100, 0, 2500, 7500, 15000, 25000, 0, 11, 15496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - In Combat - Cast \'Cleave\''), +(20132, 0, 14, 0, 0, 0, 100, 0, 10000, 15000, 40000, 60000, 0, 11, 37538, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - In Combat - Cast \'Anti-Magic Shield\''), +(20132, 0, 15, 0, 0, 0, 100, 0, 17000, 24000, 10000, 35000, 0, 11, 28448, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - In Combat - Cast \'Shadow Bolt Volley\''), +(20132, 0, 16, 0, 0, 0, 100, 0, 30000, 40000, 30000, 40000, 0, 11, 37540, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - In Combat - Cast \'Fireball Barrage\''), +(20132, 0, 17, 0, 0, 0, 100, 0, 30000, 45000, 35000, 50000, 0, 11, 37537, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - In Combat - Cast \'Backlash\''), +(20794, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 53, 0, 2079400, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - On Data Set 1 1 - Start Waypoint'), +(20794, 0, 1, 0, 58, 0, 100, 0, 4, 2079400, 0, 0, 0, 80, 2079400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - On Waypoint Finished - Run Script'), +(20794, 0, 2, 0, 2, 0, 100, 1, 0, 25, 0, 0, 0, 80, 2079401, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Between 0-25% Health - Run Script (No Repeat)'), +(20794, 0, 3, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 18538, 50, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - On Data Set 2 2 - Set Orientation Closest Creature \'Ishanah\''), +(20794, 0, 4, 0, 38, 0, 100, 0, 3, 3, 0, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - On Data Set 3 3 - Set Flag Standstate Kneel'), +(20794, 0, 5, 0, 38, 0, 100, 0, 4, 4, 0, 0, 0, 80, 2079402, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - On Data Set 4 4 - Run Script'), +(20794, 0, 6, 0, 8, 0, 100, 0, 35600, 0, 0, 0, 0, 11, 29266, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - On Spellhit \'Wrath of Socrethar\' - Cast \'Permanent Feign Death\''), +(20794, 0, 7, 0, 0, 0, 100, 0, 2500, 7500, 3500, 8500, 0, 11, 37552, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - In Combat - Cast \'Burning Light\''), +(20794, 0, 8, 0, 0, 0, 100, 0, 8000, 12000, 12000, 21000, 0, 11, 37553, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - In Combat - Cast \'Consecration\''); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1853700, 1946601, 1946701, 2013200, 2079400, 2079401, 1853800, 2013201, 2079402, 2013202)); +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 +(1853700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 19466, 15, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - Actionlist - Set Data 1 1 on Exarch Orelis (Start Follow, Set Faction)'), +(1853700, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 19467, 15, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - Actionlist - Set Data 1 1 on Anchorite Karja (Start Follow, Set Faction)'), +(1853700, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - Actionlist - Remove Npc Flags Gossip'), +(1853700, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - Actionlist - Set Faction 495'), +(1853700, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 18, 33600, 0, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - Actionlist - Set Socrethar Flags Immune To Players & Immune To NPC\'s'), +(1853700, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 1853700, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Adyen the Lightwarden - Actionlist - Start Waypoint'), +(1946601, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Exarch Orelis - Actionlist - Set Faction 495'), +(1946601, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 2, 120, 0, 0, 0, 0, 19, 18537, 15, 0, 0, 0, 0, 0, 0, 'Exarch Orelis - Actionlist - Start Follow Closest Creature \'Adyen the Lightwarden\''), +(1946601, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 19, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Exarch Orelis - Actionlist - Remove Flags Immune To NPC\'s'), +(1946701, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 495, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Karja - Actionlist - Set Faction 495'), +(1946701, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 29, 2, 240, 0, 0, 0, 0, 19, 18537, 15, 0, 0, 0, 0, 0, 0, 'Anchorite Karja - Actionlist - Start Follow Closest Creature \'Adyen the Lightwarden\''), +(1946701, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 19, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Anchorite Karja - Actionlist - Remove Flags Immune To NPC\'s'), +(2013200, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 18537, 40, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Say Line 0 (Adyen the Lightwarden)'), +(2013200, 9, 1, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Say Line 0 (Socrethar)'), +(2013200, 9, 2, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 19, 18537, 40, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Say Line 1 (Adyen the Lightwarden)'), +(2013200, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 12, 20794, 6, 180000, 0, 0, 0, 8, 0, 0, 0, 0, 4955.0845, 3921.3977, 209.04483, 4.570129871368408, 'Socrethar - Actionlist - Summon Creature \'Kaylaan the Lost\''), +(2013200, 9, 5, 0, 0, 0, 100, 0, 6600, 6600, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Say Line 1 (Socrethar)'), +(2013200, 9, 6, 0, 0, 0, 100, 0, 800, 800, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 20794, 100, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Set Data 1 1'), +(2079400, 9, 0, 0, 0, 0, 100, 0, 600, 600, 0, 0, 0, 90, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Flag Standstate Kneel'), +(2079400, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 19, 18537, 40, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 2 (Adyen the Lightwarden)'), +(2079400, 9, 2, 0, 0, 0, 100, 0, 3400, 3400, 0, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Flag Standstate Stand Up'), +(2079400, 9, 3, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 53, 0, 2079401, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Start Waypoint'), +(2079400, 9, 4, 0, 0, 0, 100, 0, 2200, 2200, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 18537, 40, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Orientation Closest Creature \'Adyen the Lightwarden\''), +(2079400, 9, 5, 0, 0, 0, 100, 0, 3800, 3800, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 0 (Self)'), +(2079400, 9, 6, 0, 0, 0, 100, 0, 8500, 8500, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 1 (Self)'), +(2079400, 9, 7, 0, 0, 0, 100, 0, 8500, 8500, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 2 (Self)'), +(2079400, 9, 8, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 19, 18537, 40, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 3 (Adyen the Lightwarden)'), +(2079400, 9, 9, 0, 0, 0, 100, 0, 6400, 6400, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 3 (Self)'), +(2079400, 9, 10, 0, 0, 0, 100, 0, 6400, 6400, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Data 2 2 on Socrethar - Cast \'Power of the Legion\''), +(2079400, 9, 11, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 2, 14, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Faction 14'), +(2079400, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 2 (Socrethar)'), +(2079400, 9, 13, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Invincibility Hp 1'), +(2079400, 9, 14, 0, 0, 0, 100, 0, 100, 100, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 19, 18537, 40, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Start Attacking'), +(2079401, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 18, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Flags Immune To Players & Immune To NPC\'s'), +(2079401, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Evade'), +(2079401, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 3 (Socrethar)'), +(2079401, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 12, 18538, 6, 180000, 0, 0, 0, 8, 0, 0, 0, 0, 4866.1997, 3799.0156, 199.14102, 0.46805843710899353, 'Kaylaan the Lost - Actionlist - Summon Creature \'Ishanah\''), +(2079401, 9, 4, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 18538, 100, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Data 1 1 on Ishanah - Start WP'), +(2079401, 9, 5, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 4 (Self)'), +(2079401, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 18, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Flags Immune To Players'), +(1853800, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 19, 20794, 50, 0, 0, 0, 0, 0, 0, 'Ishanah - Actionlist - Set Data 2 2 on Kaylaan - Set Facing'), +(1853800, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Ishanah - Actionlist - Set Data 3 3 on Socrethar - Set Facing'), +(1853800, 9, 2, 0, 0, 0, 100, 0, 100, 100, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 19, 20794, 50, 0, 0, 0, 0, 0, 0, 'Ishanah - Actionlist - Say Line 5 (Kaylaan)'), +(1853800, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 19, 20794, 50, 0, 0, 0, 0, 0, 0, 'Ishanah - Actionlist - Set Data 3 3 on Kaylaan - Set Standstate'), +(1853800, 9, 4, 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, 'Ishanah - Actionlist - Say Line 0 (Self)'), +(1853800, 9, 5, 0, 0, 0, 100, 0, 6200, 6200, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ishanah - Actionlist - Say Line 1 (Self)'), +(1853800, 9, 6, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Ishanah - Actionlist - Say Line 4 (Socrethar)'), +(1853800, 9, 7, 0, 0, 0, 100, 0, 3400, 3400, 0, 0, 0, 45, 4, 4, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Ishanah - Actionlist - Set Data 4 4 on Socrethar - Start Script'), +(2013201, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35598, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Cast \'Wrath of Socrethar\''), +(2013201, 9, 1, 0, 0, 0, 100, 0, 7300, 7300, 0, 0, 0, 45, 4, 4, 0, 0, 0, 0, 19, 20794, 50, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Set Data 4 4 on Kaylaan - Start Script'), +(2079402, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 6'), +(2079402, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Remove FlagStandstate Kneel'), +(2079402, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35597, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Cast \'Cancel Power of the Legion\''), +(2079402, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 2079402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Start Waypoint'), +(2079402, 9, 4, 0, 0, 0, 100, 0, 5600, 5600, 0, 0, 0, 2, 290, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Faction 290'), +(2079402, 9, 5, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 0, 1, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Say Line 7'), +(2079402, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 13874, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Cast \'Divine Shield\''), +(2079402, 9, 7, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 0, 11, 35599, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Cast \'Resurrection\''), +(2079402, 9, 8, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 45, 5, 5, 0, 0, 0, 0, 10, 71631, 20132, 0, 0, 0, 0, 0, 0, 'Kaylaan the Lost - Actionlist - Set Data 5 5 on Socrethar - Start Last Script'), +(2013202, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Say Line 5'), +(2013202, 9, 1, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 11, 35600, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Cast \'Wrath of Socrethar\''), +(2013202, 9, 2, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Remove Flags Immune To Players & Immune To NPC\'s'), +(2013202, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 19, 18538, 50, 0, 0, 0, 0, 0, 0, 'Socrethar - Actionlist - Start Attacking'); + +-- Remove Civilian flag, Add IMMUNE_TO_PLAYERS instead +UPDATE `creature_template` SET `flags_extra`=`flags_extra`&~2, `unit_flags`=`unit_flags`|256 WHERE (`entry` IN (19466, 19467, 18538, 18537)); diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 8936a0598..06526c199 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -37,1023 +37,6 @@ EndContentData */ #include "ScriptedGossip.h" #include "SpellInfo.h" -/* ################################### - # QUEST: Deathblow to the legion # - ################################### -*/ - -enum DeathblowToTheLegion -{ - ADYEN_THE_LIGHTBRINGER = 61021, - ANCHORITE_KARJA = 50001, - EXARCH_ORELIS = 50002, - SOCRETHAR = 20132, - KAYLAAN_THE_LOST = 20794, - ISHANAH_HIGH_PRIESTESS = 18538, - - DEATHBLOW_TO_THE_LEGION = 10409, // Quest ID - TURNING_POINT = 10507, // Quest ID - SOCRETHAR_QUEST_CREDIT = 35762, // Quest spell - SOCRETHAR_TP_STONE = 29796 -}; - -enum RoleplayActions -{ - // ADYEN TEXTS - EVENT_ADYEN_SAY_1 = 1, - EVENT_ADYEN_SAY_2 = 2, - EVENT_ADYEN_SAY_3 = 3, - EVENT_ADYEN_SAY_4 = 4, - - // SOCRETHAR TEXT - EVENT_SOCRETHAR_SAY_1 = 5, - EVENT_SOCRETHAR_SAY_2 = 6, - EVENT_SOCRETHAR_SAY_3 = 7, - EVENT_SOCRETHAR_SAY_4 = 8, - EVENT_SOCRETHAR_SAY_5 = 9, - EVENT_SOCRETHAR_SAY_6 = 10, - - // KAYLAAN TEXT - EVENT_KAYLAAN_SAY_1 = 11, - EVENT_KAYLAAN_SAY_2 = 12, - EVENT_KAYLAAN_SAY_3 = 13, - EVENT_KAYLAAN_SAY_4 = 14, - EVENT_KAYLAAN_SAY_5 = 15, // Spawn Ishanah at this point - EVENT_KAYLAAN_SAY_6 = 16, - EVENT_KAYLAAN_SAY_7 = 17, - - // ISHANAH TEXT - EVENT_ISHANAH_SAY_1 = 18, // Make kaylaan bow - EVENT_ISHANAH_SAY_2 = 19, - - // SOCRETHAR ROLEPLAY EVENTS - EVENT_KILL_ISHANAH = 20, - EVENT_KILL_KAYLAAN = 21, - EVENT_FINAL_FIGHT = 22, // On death grant credit to all players on threat list - - // KAYLAAN ROLEPLAY EVENTS - EVENT_KAYLAAN_WALK_TO_ADYEN = 23, // Adyen talks and 3s later he triggers next event - EVENT_KAYLAAN_RESSURECTION = 24, // Ress Ishanah - EVENT_FIGHT_ALDOR = 25, - EVENT_END_ALDOR_FIGHT = 26, - RESET_DEATHBLOW_EVENT = 27 -}; - -enum Adyen -{ - // ADYEN SPELL EVENTS - EVENT_CRUSADER_STRIKE = 1, - EVENT_HAMMER_OF_JUSTICE = 2, - EVENT_HOLY_LIGHT = 3, - - // ADYEN ROLEPLAY EVENTS - EVENT_START_PLAYER_READY = 4, - - // ADYEN SPELLS - CRUSADER_STRIKE = 14518, - HAMMER_OF_JUSTICE = 13005, - HOLY_LIGHT = 13952, - REDEMPTION = 7328, - DIVINE_SHIELD = 40733, - - ADYEN_PATH_ID = 610210 -}; - -enum Karja -{ - // KARJA SPELL EVENTS - EVENT_SPELL_HOLY_SMITE = 1, - - // KARJA ROLEPLAY EVENTS - EVENT_KARJA_WALK = 2, - - // KARJA SPELLS - HOLY_SMITE_KARJA = 9734, - - KARJA_PATH_ID = 500010 -}; - -enum Orelis -{ - // ORELIS SPELL EVENTS - EVENT_SPELL_DEMORALIZING_SHOUT = 1, - EVENT_SPELL_HEROIC_STRIKE = 2, - EVENT_SPELL_REND = 3, - - // ORELIS ROLEPLAY EVENTS - EVENT_ORELIS_WALK = 4, - - // ORELIS SPELLS - DEMORALIZING_SHOUT = 13730, - HEROIC_STRIKE = 29426, - REND = 16509, - - ORELIS_PATH_ID = 500020 -}; - -enum Kaylaan -{ - // KAYLAAN SPELL EVENTS - EVENT_SPELL_BURNING_LIGHT = 6, - EVENT_SPELL_CONSECRATION = 7, - - // KAYLAAN SPELLS - BURNING_LIGHT = 37552, - CONSECRATION = 37553, - - KAYLAAN_PATH_ID1 = 207940, - KAYLAAN_PATH_ID2 = 207941 -}; - -enum Socrethar -{ - // SOCRETHAR SPELL EVENTS # start high to avoid issues with RP enum - EVENT_SPELL_ANTI_MAGIC_SHIELD = 40, - EVENT_SPELL_BACKLASH = 41, - EVENT_SPELL_CLEAVE = 42, - EVENT_SPELL_FIREBALL_BARRAGE = 43, - EVENT_SPELL_NETHER_PROTECTION = 44, - EVENT_SPELL_POWER_OF_THE_LEGION = 45, - EVENT_SPELL_SHADOW_BOLT_VOLLEY = 46, - EVENT_ISHANAH_DIES = 47, - EVENT_KAYLAAN_DIES = 48, - EVENT_ISHANAH_IS_BACK_AGAIN = 49, - - // SOCRETHAR SPELLS - ANTI_MAGIC_SHIELD = 37538, - BACKLASH = 37537, - CLEAVE = 15496, - FIREBALL_BARRAGE = 37540, - NETHER_PROTECTION = 37539, - POWER_OF_THE_LEGION = 35596, - SHADOW_BOLT_VOLLEY = 28448, - WRATH_OF_SOCRETHAR = 35600 -}; - -enum Ishanah -{ - ISHANAH_PATH_ID = 500050 -}; - -// Ishanah script part is in zone shattrath city . cpp - -const Position AdyenSpawnPosition { 4804.839355f, 3773.218750f, 210.530884f, 5.517495f }; -const Position OrelisSpawnPosition { 4805.345215f, 3774.829346f, 210.535095f, 5.517495f }; -const Position KarjaSpawnPosition { 4803.249512f, 3772.649170f, 210.535095f, 5.517495f }; -const Position KaylaanSpawnPosition { 4955.089355f, 3916.570557f, 209.577209f, 4.603052f }; -const Position IshanahSpawnPosition { 4926.066895f, 3825.549072f, 211.494125f, 0.510522f }; - -class deathblow_to_the_legion_trigger : public CreatureScript -{ -public: - deathblow_to_the_legion_trigger() : CreatureScript("deathblow_to_the_legion_trigger") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return new deathblow_to_the_legion_triggerAI(creature); - } - - struct deathblow_to_the_legion_triggerAI : public ScriptedAI - { - deathblow_to_the_legion_triggerAI(Creature* creature) : ScriptedAI(creature), _summons(me) { } - - EventMap _events; - SummonList _summons; - - void JustSummoned(Creature* cr) override { _summons.Summon(cr); } - - void MoveInLineOfSight(Unit* who) override - { - if (who->GetTypeId() == TYPEID_PLAYER && who->IsAlive()) - { - if (who->ToPlayer()->GetQuestStatus(DEATHBLOW_TO_THE_LEGION) == QUEST_STATUS_INCOMPLETE && me->FindNearestCreature(SOCRETHAR, 500.0f, true)) - { - if (!_summons.HasEntry(ADYEN_THE_LIGHTBRINGER)) - { - _summons.RemoveNotExisting(); - me->SummonCreature(ADYEN_THE_LIGHTBRINGER, AdyenSpawnPosition, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); - if (!_summons.HasEntry(EXARCH_ORELIS)) - me->SummonCreature(EXARCH_ORELIS, OrelisSpawnPosition, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); - if (!_summons.HasEntry(ANCHORITE_KARJA)) - me->SummonCreature(ANCHORITE_KARJA, KarjaSpawnPosition, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); - } - } - } - } - }; -}; - -class adyen_the_lightbringer : public CreatureScript -{ -public: - adyen_the_lightbringer(): CreatureScript("adyen_the_lightbringer") { } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (player->GetQuestStatus(DEATHBLOW_TO_THE_LEGION) == QUEST_STATUS_INCOMPLETE) - AddGossipItemFor(player, ADYEN_THE_LIGHTBRINGER, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - - SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); - - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - ClearGossipMenuFor(player); - - if (action == GOSSIP_ACTION_INFO_DEF + 1) - { - CloseGossipMenuFor(player); - creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); - creature->AI()->DoAction(EVENT_START_PLAYER_READY); - if (Creature* orelis = creature->FindNearestCreature(EXARCH_ORELIS, 15.0f, true)) - orelis->AI()->DoAction(EVENT_ORELIS_WALK); - if (Creature* karja = creature->FindNearestCreature(ANCHORITE_KARJA, 15.0f, true)) - karja->AI()->DoAction(EVENT_KARJA_WALK); - if (Creature* socrethar = creature->FindNearestCreature(SOCRETHAR, 500.0f, true)) - socrethar->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE); - } - - return true; - } - - struct adyen_the_lightbringerAI : public ScriptedAI - { - adyen_the_lightbringerAI(Creature* creature) : ScriptedAI(creature), event_started(false) { } - - EventMap _events; - uint32 eventTimer, eventPhase; - bool event_started = false; - - void DoAction(int32 param) override - { - if (param == EVENT_START_PLAYER_READY) - { - me->GetMotionMaster()->MovePath(ADYEN_PATH_ID, false); - event_started = true; - } - else if (param == RESET_DEATHBLOW_EVENT) - { - me->ClearInCombat(); - me->AttackStop(); - me->GetMotionMaster()->MoveTargetedHome(); - me->DespawnOrUnsummon(15000); - } - } - - void MovementInform(uint32 type, uint32 point) override - { - if (type != POINT_MOTION_TYPE) - if (point == 9) - { - if (Creature* socrethar = me->FindNearestCreature(SOCRETHAR, 50.0f, true)) - socrethar->AI()->DoAction(EVENT_ADYEN_SAY_1); - me->SetHomePosition(me->GetPosition()); - } - } - - void JustEngagedWith(Unit* /*who*/) override - { - _events.ScheduleEvent(EVENT_CRUSADER_STRIKE, 3000); - _events.ScheduleEvent(EVENT_HAMMER_OF_JUSTICE, 6000); - _events.ScheduleEvent(EVENT_HOLY_LIGHT, 1000); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - _events.Update(diff); - - while (uint32 eventId = _events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_CRUSADER_STRIKE: - me->CastSpell(me->GetVictim(), CRUSADER_STRIKE, false); - _events.RepeatEvent(3500); - break; - case EVENT_HAMMER_OF_JUSTICE: - me->CastSpell(me->GetVictim(), HAMMER_OF_JUSTICE, false); - _events.RepeatEvent(urand(10000, 14000)); - break; - case EVENT_HOLY_LIGHT: - // if low enough will heal and trigger again in 18s. - if (me->GetHealthPct() <= 45) - { - me->CastSpell(me, HOLY_LIGHT, false); - _events.RepeatEvent(urand(18000, 22000)); - } - else if (Unit* who = me->FindNearestCreature(ANCHORITE_KARJA, 30.0f, true)) - { - if (who->GetHealthPct() <= 45) - { - me->CastSpell(who, HOLY_LIGHT, false); - _events.RepeatEvent(urand(18000, 22000)); - } - } - else if (Unit* who = me->FindNearestCreature(EXARCH_ORELIS, 30.0f, true)) - { - if (who->GetHealthPct() <= 45) - { - me->CastSpell(who, HOLY_LIGHT, false); - _events.RepeatEvent(urand(18000, 22000)); - } - } - else - _events.RepeatEvent(1000); - break; - } - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new adyen_the_lightbringerAI(creature); - } -}; - -class anchorite_karja : public CreatureScript -{ -public: - anchorite_karja() : CreatureScript("anchorite_karja") { } - - struct anchorite_karjaAI : public ScriptedAI - { - anchorite_karjaAI(Creature* creature) : ScriptedAI(creature) { } - - EventMap _events; - - void DoAction(int32 param) override - { - if (param == EVENT_KARJA_WALK) - { - me->GetMotionMaster()->MovePath(KARJA_PATH_ID, false); - me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); - } - else if (param == RESET_DEATHBLOW_EVENT) - { - me->ClearInCombat(); - me->AttackStop(); - me->GetMotionMaster()->MoveTargetedHome(); - me->DespawnOrUnsummon(15000); - } - } - - void MovementInform(uint32 type, uint32 point) override - { - if (type != POINT_MOTION_TYPE) - if (point == 11) - me->SetHomePosition(me->GetPosition()); - } - - void JustEngagedWith(Unit* who) override - { - AttackStart(who); - _events.ScheduleEvent(EVENT_SPELL_HOLY_SMITE, 1000); - } - - void UpdateAI(uint32 diff) override - { - _events.Update(diff); - - if (!UpdateVictim()) - return; - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch ( _events.ExecuteEvent()) - { - case EVENT_SPELL_HOLY_SMITE: - me->CastSpell(me->GetVictim(), HOLY_SMITE_KARJA, false); - _events.ScheduleEvent(EVENT_SPELL_HOLY_SMITE, 2500); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new anchorite_karjaAI(creature); - } -}; - -class exarch_orelis : public CreatureScript -{ -public: - exarch_orelis() : CreatureScript("exarch_orelis") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return new exarch_orelisAI(creature); - } - - struct exarch_orelisAI : public ScriptedAI - { - exarch_orelisAI(Creature* creature) : ScriptedAI(creature) { } - - EventMap _events; - - void DoAction(int32 param) override - { - if (param == EVENT_ORELIS_WALK) - { - me->GetMotionMaster()->MovePath(ORELIS_PATH_ID, false); - me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); - } - else if (param == RESET_DEATHBLOW_EVENT) - { - me->ClearInCombat(); - me->AttackStop(); - me->GetMotionMaster()->MoveTargetedHome(); - me->DespawnOrUnsummon(15000); - } - } - - void JustSummoned(Creature*) override - { - me->SetHomePosition(me->GetPosition()); - } - - void AttackStart(Unit* who) override - { - ScriptedAI::AttackStart(who); - } - - void MovementInform(uint32 type, uint32 point) override - { - if (type != POINT_MOTION_TYPE) - if (point == 11) - me->SetHomePosition(me->GetPosition()); - } - - void JustEngagedWith(Unit* /*who*/) override - { - _events.ScheduleEvent(EVENT_SPELL_DEMORALIZING_SHOUT, 1000); - _events.ScheduleEvent(EVENT_SPELL_HEROIC_STRIKE, urand(2500, 4000)); - _events.ScheduleEvent(EVENT_SPELL_REND, urand(1500, 6000)); - } - - void UpdateAI(uint32 diff) override - { - _events.Update(diff); - - if (!UpdateVictim()) - return; - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (_events.ExecuteEvent()) - { - case EVENT_SPELL_DEMORALIZING_SHOUT: - if (me->FindNearestCreature(me->GetVictim()->GetEntry(), 10.0f, true)) - { - me->CastSpell(me->GetVictim(), DEMORALIZING_SHOUT, false); - _events.ScheduleEvent(EVENT_SPELL_DEMORALIZING_SHOUT, urand(10000, 12000)); - } - else - _events.ScheduleEvent(EVENT_SPELL_DEMORALIZING_SHOUT, 1000); - break; - case EVENT_SPELL_HEROIC_STRIKE: - me->CastSpell(me->GetVictim(), HEROIC_STRIKE, false); - _events.ScheduleEvent(EVENT_SPELL_HEROIC_STRIKE, urand(3000, 4000)); - break; - case EVENT_SPELL_REND: - me->CastSpell(me->GetVictim(), REND, false); - _events.ScheduleEvent(EVENT_SPELL_REND, urand(5000, 8000)); - break; - } - - DoMeleeAttackIfReady(); - } - }; -}; - -class socrethar : public CreatureScript -{ -public: - socrethar() : CreatureScript("socrethar") { } - - struct socretharAI : public ScriptedAI - { - socretharAI(Creature* creature) : ScriptedAI(creature), - adyen(nullptr), orelis(nullptr), karja(nullptr), kaylaan(nullptr), ishanah(nullptr) { } - - EventMap _actionEvents, combatEvents; - bool DeathblowToTheLegionRunning = false; - Creature* adyen, *orelis, *karja, *kaylaan, *ishanah; - - bool GetCreature(uint32 CreatureID) - { - switch (CreatureID) - { - case ADYEN_THE_LIGHTBRINGER: - adyen = me->FindNearestCreature(ADYEN_THE_LIGHTBRINGER, 100.0f, true); - if (adyen) - return true; - break; - case EXARCH_ORELIS: - orelis = me->FindNearestCreature(EXARCH_ORELIS, 100.0f, true); - if (orelis) - return true; - break; - case ANCHORITE_KARJA: - karja = me->FindNearestCreature(ANCHORITE_KARJA, 100.0f, true); - if (karja) - return true; - break; - case KAYLAAN_THE_LOST: - kaylaan = me->FindNearestCreature(KAYLAAN_THE_LOST, 100.0f, true); - if (kaylaan) - return true; - break; - case ISHANAH_HIGH_PRIESTESS: - ishanah = me->FindNearestCreature(ISHANAH_HIGH_PRIESTESS, 100.0f, true); - if (!ishanah) - { - // Ishanah may be dead; in this case we also need a reference to the creature for the respawn - ishanah = me->FindNearestCreature(ISHANAH_HIGH_PRIESTESS, 100.0f, false); - if (ishanah) - return true; - } - else - return true; - break; - } - return false; // When he doesn't find anyone - } - - void Reset() override - { - me->SetReactState(REACT_PASSIVE); - me->SetFaction(FACTION_DEMON); - } - - void DoAction(int32 param) override - { - switch (param) - { - case EVENT_ADYEN_SAY_1: - DeathblowToTheLegionRunning = true; - _actionEvents.ScheduleEvent(EVENT_ADYEN_SAY_1, 1000); - break; - case EVENT_ADYEN_SAY_3: - _actionEvents.ScheduleEvent(EVENT_ADYEN_SAY_3, 2000); - break; - case EVENT_KAYLAAN_SAY_1: - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_SAY_1, 4000); - break; - case EVENT_END_ALDOR_FIGHT: - _actionEvents.ScheduleEvent(EVENT_END_ALDOR_FIGHT, 1); - break; - case EVENT_ISHANAH_SAY_1: - _actionEvents.ScheduleEvent(EVENT_ISHANAH_SAY_1, 2000); - break; - case RESET_DEATHBLOW_EVENT: - DeathblowToTheLegionRunning = false; - Reset(); - break; - } - } - - void JustDied(Unit* /*killer*/) override - { - DoCast(me, SOCRETHAR_QUEST_CREDIT); - - if (GetCreature(ISHANAH_HIGH_PRIESTESS)) - { - ishanah->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); - ishanah->DespawnOrUnsummon(60000); - } - - if (GetCreature(ADYEN_THE_LIGHTBRINGER)) - adyen->GetAI()->DoAction(RESET_DEATHBLOW_EVENT); - - if (GetCreature(EXARCH_ORELIS)) - orelis->GetAI()->DoAction(RESET_DEATHBLOW_EVENT); - - if (GetCreature(ANCHORITE_KARJA)) - karja->GetAI()->DoAction(RESET_DEATHBLOW_EVENT); - } - - void JustEngagedWith(Unit* /*who*/) override - { - combatEvents.ScheduleEvent(EVENT_SPELL_ANTI_MAGIC_SHIELD, 20000); - combatEvents.ScheduleEvent(EVENT_SPELL_BACKLASH, 4000); - combatEvents.ScheduleEvent(EVENT_SPELL_CLEAVE, 2000); - combatEvents.ScheduleEvent(EVENT_SPELL_FIREBALL_BARRAGE, 9000); - combatEvents.ScheduleEvent(EVENT_SPELL_SHADOW_BOLT_VOLLEY, 5000); - combatEvents.ScheduleEvent(EVENT_SPELL_NETHER_PROTECTION, 1); - } - - void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) override - { - me->SetReactState(REACT_AGGRESSIVE); - } - - void UpdateAI(uint32 diff) override - { - if (DeathblowToTheLegionRunning) - { - _actionEvents.Update(diff); - - switch (_actionEvents.ExecuteEvent()) - { - case EVENT_ADYEN_SAY_1: - if (GetCreature(ADYEN_THE_LIGHTBRINGER)) - adyen->AI()->Talk(0); - _actionEvents.ScheduleEvent(EVENT_SOCRETHAR_SAY_1, 11000); - break; - case EVENT_SOCRETHAR_SAY_1: - Talk(0); - _actionEvents.ScheduleEvent(EVENT_ADYEN_SAY_2, 7000); - break; - case EVENT_ADYEN_SAY_2: - if (GetCreature(ADYEN_THE_LIGHTBRINGER)) - adyen->AI()->Talk(1); - _actionEvents.ScheduleEvent(EVENT_SOCRETHAR_SAY_2, 11000); - break; - case EVENT_SOCRETHAR_SAY_2: - Talk(1); - if (Creature* summonKaylaan = me->SummonCreature(KAYLAAN_THE_LOST, KaylaanSpawnPosition, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 240000)) - summonKaylaan->GetMotionMaster()->MovePath(KAYLAAN_PATH_ID1, false); - break; - case EVENT_ADYEN_SAY_3: - if (GetCreature(ADYEN_THE_LIGHTBRINGER)) - adyen->AI()->Talk(2); - if (GetCreature(KAYLAAN_THE_LOST)) - kaylaan->SetStandState(UNIT_STAND_STATE_STAND); - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_WALK_TO_ADYEN, 3500); - break; - case EVENT_KAYLAAN_WALK_TO_ADYEN: - if (GetCreature(KAYLAAN_THE_LOST)) - kaylaan->GetMotionMaster()->MovePath(KAYLAAN_PATH_ID2, false); - break; - case EVENT_KAYLAAN_SAY_1: - if (GetCreature(KAYLAAN_THE_LOST)) - { - kaylaan->AI()->Talk(0); - kaylaan->SetHomePosition(kaylaan->GetPosition()); - } - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_SAY_2, 9000); - break; - case EVENT_KAYLAAN_SAY_2: - if (GetCreature(KAYLAAN_THE_LOST)) - kaylaan->AI()->Talk(1); - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_SAY_3, 8000); - break; - case EVENT_KAYLAAN_SAY_3: - if (GetCreature(KAYLAAN_THE_LOST)) - kaylaan->AI()->Talk(2); - _actionEvents.ScheduleEvent(EVENT_ADYEN_SAY_4, 8000); - break; - case EVENT_ADYEN_SAY_4: - if (GetCreature(ADYEN_THE_LIGHTBRINGER)) - adyen->AI()->Talk(3); - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_SAY_4, 11000); - break; - case EVENT_KAYLAAN_SAY_4: - if (GetCreature(KAYLAAN_THE_LOST)) - kaylaan->AI()->Talk(3); - _actionEvents.ScheduleEvent(EVENT_SPELL_POWER_OF_THE_LEGION, 5000); - break; - case EVENT_SPELL_POWER_OF_THE_LEGION: - if (GetCreature(KAYLAAN_THE_LOST)) - me->CastSpell(kaylaan, POWER_OF_THE_LEGION, false); - Talk(2); - _actionEvents.ScheduleEvent(EVENT_FIGHT_ALDOR, 3000); - break; - case EVENT_FIGHT_ALDOR: - if (GetCreature(KAYLAAN_THE_LOST)) - { - kaylaan->SetFaction(FACTION_DEMON); - if (GetCreature(ADYEN_THE_LIGHTBRINGER)) - kaylaan->AI()->AttackStart(adyen); - } - break; - case EVENT_END_ALDOR_FIGHT: - if (GetCreature(KAYLAAN_THE_LOST)) - { - kaylaan->SetFaction(FACTION_DEMON); - kaylaan->GetMotionMaster()->MoveTargetedHome(); - kaylaan->CombatStop(); - kaylaan->ClearInCombat(); - } - - if (GetCreature(ADYEN_THE_LIGHTBRINGER)) - { - adyen->GetMotionMaster()->MoveTargetedHome(); - adyen->CombatStop(); - adyen->ClearInCombat(); - } - - if (GetCreature(EXARCH_ORELIS)) - { - orelis->GetMotionMaster()->MoveTargetedHome(); - orelis->CombatStop(); - orelis->ClearInCombat(); - } - - if (GetCreature(ANCHORITE_KARJA)) - { - karja->GetMotionMaster()->MoveTargetedHome(); - karja->CombatStop(); - karja->ClearInCombat(); - } - _actionEvents.ScheduleEvent(EVENT_SOCRETHAR_SAY_4, 2000); - break; - case EVENT_SOCRETHAR_SAY_4: - Talk(3); - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_SAY_5, 8000); - break; - case EVENT_KAYLAAN_SAY_5: - if (GetCreature(KAYLAAN_THE_LOST)) - kaylaan->AI()->Talk(4); - if (Creature* summonIshanah = me->SummonCreature(ISHANAH_HIGH_PRIESTESS, IshanahSpawnPosition, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 180000)) - { - summonIshanah->GetMotionMaster()->MovePath(ISHANAH_PATH_ID, false); - summonIshanah->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); - } - break; - case EVENT_ISHANAH_SAY_1: - if (GetCreature(ISHANAH_HIGH_PRIESTESS)) - ishanah->AI()->Talk(0); - if (GetCreature(KAYLAAN_THE_LOST)) - { - kaylaan->RemoveAurasDueToSpell(POWER_OF_THE_LEGION); - kaylaan->SetStandState(UNIT_STAND_STATE_KNEEL); - } - _actionEvents.ScheduleEvent(EVENT_ISHANAH_SAY_2, 6000); - break; - case EVENT_ISHANAH_SAY_2: - if (GetCreature(ISHANAH_HIGH_PRIESTESS)) - ishanah->AI()->Talk(1); - _actionEvents.ScheduleEvent(EVENT_SOCRETHAR_SAY_5, 8000); - break; - case EVENT_SOCRETHAR_SAY_5: - Talk(4); - _actionEvents.ScheduleEvent(EVENT_KILL_ISHANAH, 4000); - break; - case EVENT_KILL_ISHANAH: - if (GetCreature(ISHANAH_HIGH_PRIESTESS)) - me->CastSpell(ishanah, WRATH_OF_SOCRETHAR); - _actionEvents.ScheduleEvent(EVENT_ISHANAH_DIES, 1500); - break; - case EVENT_ISHANAH_DIES: - if (GetCreature(ISHANAH_HIGH_PRIESTESS)) - me->Kill(me, ishanah); - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_SAY_6, 4000); - break; - case EVENT_KAYLAAN_SAY_6: - if (GetCreature(KAYLAAN_THE_LOST)) - { - kaylaan->AI()->Talk(6); - kaylaan->SetStandState(UNIT_STAND_STATE_STAND); - kaylaan->GetMotionMaster()->MovePath(207942, false); - } - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_SAY_7, 9000); - break; - case EVENT_KAYLAAN_SAY_7: - if (GetCreature(KAYLAAN_THE_LOST)) - { - kaylaan->AI()->Talk(7); - kaylaan->CastSpell(kaylaan, DIVINE_SHIELD); - } - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_RESSURECTION, 1000); - break; - case EVENT_KAYLAAN_RESSURECTION: - if (GetCreature(KAYLAAN_THE_LOST) && GetCreature(ISHANAH_HIGH_PRIESTESS)) - kaylaan->CastSpell(ishanah, REDEMPTION); - _actionEvents.ScheduleEvent(EVENT_ISHANAH_IS_BACK_AGAIN, 11000); - break; - case EVENT_ISHANAH_IS_BACK_AGAIN: - if (GetCreature(ISHANAH_HIGH_PRIESTESS)) - { - ishanah->Respawn(); - ishanah->setActive(true); // ensure that Ishanah disappears, even when no player is near - ishanah->DespawnOrUnsummon(600000); // ensure that Ishanah disappears after 10 minutes - ishanah->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); - } - _actionEvents.ScheduleEvent(EVENT_SOCRETHAR_SAY_6, 3000); - break; - case EVENT_SOCRETHAR_SAY_6: - Talk(5); - _actionEvents.ScheduleEvent(EVENT_KILL_KAYLAAN, 4000); - break; - case EVENT_KILL_KAYLAAN: - if (GetCreature(KAYLAAN_THE_LOST)) - me->CastSpell(kaylaan, WRATH_OF_SOCRETHAR); - _actionEvents.ScheduleEvent(EVENT_KAYLAAN_DIES, 1500); - break; - case EVENT_KAYLAAN_DIES: - if (GetCreature(KAYLAAN_THE_LOST)) - me->Kill(me, kaylaan); - _actionEvents.ScheduleEvent(EVENT_FINAL_FIGHT, 3000); - break; - case EVENT_FINAL_FIGHT: - // Prepare Socrethar for encounter - me->SetFaction(FACTION_DEMON); - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE); - me->SetReactState(REACT_AGGRESSIVE); - - // Engage combat with Socrethar - if (GetCreature(ADYEN_THE_LIGHTBRINGER)) - adyen->AI()->JustEngagedWith(me); - if (GetCreature(EXARCH_ORELIS)) - orelis->AI()->JustEngagedWith(me); - if (GetCreature(ANCHORITE_KARJA)) - karja->AI()->JustEngagedWith(me); - if (GetCreature(ISHANAH_HIGH_PRIESTESS)) - ishanah->AI()->JustEngagedWith(me); - break; - } - } - - if (!UpdateVictim()) - return; - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - combatEvents.Update(diff); - - switch (combatEvents.ExecuteEvent()) - { - case EVENT_SPELL_NETHER_PROTECTION: - if (!me->HasAura(NETHER_PROTECTION)) - me->CastSpell(me, NETHER_PROTECTION, false); - break; - case EVENT_SPELL_ANTI_MAGIC_SHIELD: - me->CastSpell(me, ANTI_MAGIC_SHIELD, false); - combatEvents.ScheduleEvent(EVENT_SPELL_ANTI_MAGIC_SHIELD, 20000); - break; - case EVENT_SPELL_BACKLASH: - DoCastVictim(BACKLASH); - combatEvents.ScheduleEvent(EVENT_SPELL_BACKLASH, 7000); - break; - case EVENT_SPELL_CLEAVE: - me->CastSpell(me->GetVictim(), CLEAVE, false); - combatEvents.ScheduleEvent(EVENT_SPELL_CLEAVE, 3000); - break; - case EVENT_SPELL_FIREBALL_BARRAGE: - me->CastSpell(me->GetVictim(), FIREBALL_BARRAGE, false); - combatEvents.ScheduleEvent(EVENT_SPELL_FIREBALL_BARRAGE, 15000); - break; - case EVENT_SPELL_SHADOW_BOLT_VOLLEY: - me->CastSpell(me->GetVictim(), SHADOW_BOLT_VOLLEY, false); - combatEvents.ScheduleEvent(EVENT_SPELL_SHADOW_BOLT_VOLLEY, 10000); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new socretharAI(creature); - } -}; - -class kaylaan_the_lost : public CreatureScript -{ -public: - kaylaan_the_lost() : CreatureScript("kaylaan_the_lost") { } - - struct kaylaan_the_lostAI : public ScriptedAI - { - kaylaan_the_lostAI(Creature* creature) : ScriptedAI(creature) { } - - EventMap _events; - bool first_waypath_done = false; - bool second_waypath_done = false; - bool adyen_dead = false, karja_dead = false, orelis_dead = false; - - void JustEngagedWith(Unit* /*who*/) override - { - _events.ScheduleEvent(EVENT_SPELL_BURNING_LIGHT, 2000); - _events.ScheduleEvent(EVENT_SPELL_CONSECRATION, 3000); - } - - void ResetDeathblowEvent(bool event_over /* If true then reset the event*/) - { - me->RemoveAurasDueToSpell(POWER_OF_THE_LEGION); - me->GetMotionMaster()->MoveTargetedHome(); - - // Get socrethar AI so we can reset the event - if (event_over) - { - if (Unit* socrethar = me->FindNearestCreature(SOCRETHAR, 100.0f, true)) - socrethar->GetAI()->DoAction(RESET_DEATHBLOW_EVENT); - - karja_dead = false; - orelis_dead = false; - adyen_dead = false; - - me->DespawnOrUnsummon(5000); // Despawn in 5 seconds to reset event - } - } - - void KilledUnit(Unit* victim) override - { - switch (victim->GetEntry()) - { - case ADYEN_THE_LIGHTBRINGER: - adyen_dead = true; - break; - case ANCHORITE_KARJA: - karja_dead = true; - break; - case EXARCH_ORELIS: - orelis_dead = true; - break; - } - - if (adyen_dead && karja_dead && orelis_dead) - ResetDeathblowEvent(true); - } - - void MovementInform(uint32 type, uint32 point) override - { - if (type != POINT_MOTION_TYPE) - { - if (point == 4) - { - // First waypath complete - me->SetStandState(UNIT_STAND_STATE_KNEEL); - if (Creature* socrethar = me->FindNearestCreature(SOCRETHAR, 30.0f, true)) - socrethar->AI()->DoAction(EVENT_ADYEN_SAY_3); - first_waypath_done = true; - } - else if (point == 0) - { - if (first_waypath_done) - { - if (!second_waypath_done) - { - // Second waypath complete - me->SetHomePosition(me->GetPosition()); - if (Creature* adyen = me->FindNearestCreature(ADYEN_THE_LIGHTBRINGER, 30.0f, true)) - me->SetOrientation(adyen->GetPositionX()); - if (Creature* socrethar = me->FindNearestCreature(SOCRETHAR, 30.0f, true)) - { - socrethar->AI()->DoAction(EVENT_KAYLAAN_SAY_1); - second_waypath_done = true; - } - } - } - } - } - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - _events.Update(diff); - - if (me->GetHealthPct() <= 30) - if (Creature* socrethar = me->FindNearestCreature(SOCRETHAR, 200.0f, true)) - socrethar->AI()->DoAction(EVENT_END_ALDOR_FIGHT); - - switch (_events.ExecuteEvent()) - { - case EVENT_SPELL_BURNING_LIGHT: - me->CastSpell(me->GetVictim(), BURNING_LIGHT, false); - _events.ScheduleEvent(EVENT_SPELL_BURNING_LIGHT, 4000); - break; - case EVENT_SPELL_CONSECRATION: - me->CastSpell(me->GetVictim(), CONSECRATION, false); - _events.ScheduleEvent(EVENT_SPELL_CONSECRATION, 14000); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new kaylaan_the_lostAI(creature); - } -}; - // Ours enum saeed { @@ -2001,11 +984,4 @@ void AddSC_netherstorm() new npc_bessy(); new npc_maxx_a_million_escort(); - // Deathblow to the legion - new deathblow_to_the_legion_trigger(); - new adyen_the_lightbringer(); - new anchorite_karja(); - new exarch_orelis(); - new kaylaan_the_lost(); - new socrethar(); } diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index 35b7234c4..477d6b999 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -28,7 +28,6 @@ npc_salsalabim npc_shattrathflaskvendors npc_zephyr npc_kservant -npc_ishanah EndContentData */ #include "Player.h" @@ -421,121 +420,6 @@ public: }; }; -/*###### -# npc_ishanah -######*/ - -enum Ishanah -{ - // ISHANAH SPELL EVENTS - EVENT_SPELL_ISHANAH_HOLY_SMITE = 3, - EVENT_SPELL_POWER_WORD_SHIELD = 4, - EVENT_ISHANAH_SAY_1 = 18, // Make kaylaan bow - SOCRETHAR = 20132, - KAYLAAN_THE_LOST = 20794, - - // ISHANAH SPELLS - HOLY_SMITE_ISHANAH = 15238, - POWER_WORLD_SHIELD = 22187 -}; - -#define ISANAH_GOSSIP_1 "Who are the Sha'tar?" -#define ISANAH_GOSSIP_2 "Isn't Shattrath a draenei city? Why do you allow others here?" - -class npc_ishanah : public CreatureScript -{ -public: - npc_ishanah() : CreatureScript("npc_ishanah") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - ClearGossipMenuFor(player); - if (action == GOSSIP_ACTION_INFO_DEF + 1) - SendGossipMenuFor(player, 9458, creature->GetGUID()); - else if (action == GOSSIP_ACTION_INFO_DEF + 2) - SendGossipMenuFor(player, 9459, creature->GetGUID()); - - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - AddGossipItemFor(player, GOSSIP_ICON_CHAT, ISANAH_GOSSIP_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, ISANAH_GOSSIP_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - - SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); - - return true; - } - - struct ishanahAI : public ScriptedAI - { - ishanahAI(Creature* creature) : ScriptedAI(creature) { } - - EventMap _events; - - void JustEngagedWith(Unit* who) override - { - AttackStart(who); - _events.ScheduleEvent(EVENT_SPELL_ISHANAH_HOLY_SMITE, 2000); - _events.ScheduleEvent(EVENT_SPELL_POWER_WORD_SHIELD, 1000); - } - - void MovementInform(uint32 type, uint32 point) override - { - if (type != POINT_MOTION_TYPE) - { - if (point == 2) - { - if (Creature* kaylaan = me->FindNearestCreature(KAYLAAN_THE_LOST, 30.0f, true)) - { - kaylaan->AI()->Talk(5); - kaylaan->SetOrientation(me->GetPositionX()); - if (Creature* socrethar = me->FindNearestCreature(SOCRETHAR, 30.0f, true)) - { - socrethar->AI()->DoAction(EVENT_ISHANAH_SAY_1); - socrethar->SetOrientation(me->GetPositionX()); - } - } - } - } - } - - void UpdateAI(uint32 diff) override - { - if (!me->GetVictim()) - return; - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - _events.Update(diff); - - switch (_events.ExecuteEvent()) - { - case EVENT_SPELL_ISHANAH_HOLY_SMITE: - me->CastSpell(me->GetVictim(), HOLY_SMITE_ISHANAH, false); - _events.ScheduleEvent(EVENT_SPELL_ISHANAH_HOLY_SMITE, 2500); - break; - case EVENT_SPELL_POWER_WORD_SHIELD: - me->CastSpell(me, POWER_WORLD_SHIELD, false); - _events.ScheduleEvent(EVENT_SPELL_POWER_WORD_SHIELD, 30000); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new ishanahAI(creature); - } -}; - void AddSC_shattrath_city() { new npc_raliq_the_drunk(); @@ -543,5 +427,4 @@ void AddSC_shattrath_city() new npc_shattrathflaskvendors(); new npc_zephyr(); new npc_kservant(); - new npc_ishanah(); } From 412ada54a33beb09f88f278a2dd3bd46931df334 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 1 Mar 2023 20:17:41 -0300 Subject: [PATCH 010/159] fix(DB/Quest): Dissension Amongst the Ranks... (#15191) --- .../rev_1677327485586754700.sql | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677327485586754700.sql diff --git a/data/sql/updates/pending_db_world/rev_1677327485586754700.sql b/data/sql/updates/pending_db_world/rev_1677327485586754700.sql new file mode 100644 index 000000000..e7649fbfc --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677327485586754700.sql @@ -0,0 +1,51 @@ +-- +DELETE FROM `creature` WHERE `id1`=19823 AND `guid` IN (1007, 10994, 25745, 25746); +INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`) VALUES +(1007 , 19823, 530, 1, -4486.58, 1998.88, 112.765, 0.113942, 300, 20, 1), +(10994, 19823, 530, 1, -4527.13, 2106.33, 38.1019, 0.221064, 300, 20, 1), +(25745, 19823, 530, 1, -4561.13, 2024.76, 92.2968, 5.31829, 300, 20, 1), +(25746, 19823, 530, 1, -4399.99, 2334.17, 28.1067, 0.071826, 300, 20, 1); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19823); +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 +(19823, 0, 0, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 11, 38223, 3, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Crazed Colossus - On Just Died - Cast \'Quest Credit: Crazed Colossus\''), +(19823, 0, 1, 0, 2, 0, 100, 1, 0, 75, 0, 0, 0, 11, 37947, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Crazed Colossus - Between 0-75% Health - Cast \'Serverside - Summon Crazed Shardling\' (No Repeat)'), +(19823, 0, 2, 0, 2, 0, 100, 1, 0, 50, 0, 0, 0, 11, 37948, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Crazed Colossus - Between 0-50% Health - Cast \'Serverside - Summon Crazed Shardling\' (No Repeat)'), +(19823, 0, 3, 0, 2, 0, 100, 1, 0, 25, 0, 0, 0, 11, 37949, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Crazed Colossus - Between 0-25% Health - Cast \'Serverside - Summon Crazed Shardling\' (No Repeat)'); + +UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectMiscValueB_1` = 64, `EffectBasePoints_1` = 0 WHERE `ID` IN (37947, 37948, 37949); + +DELETE FROM `creature_text` WHERE `CreatureID`=22054; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(22054, 0, 0, 'Brashly you have attacked my children, Illidan! The pact is broken. Giant will never side with elf! NEVER!', 14, 0, 100, 0, 0, 0, 19737, 2, 'Behemothon, King of the Colossi'), +(22054, 1, 0, '%s roars in defiance.', 16, 0, 100, 0, 0, 3685, 19739, 2, 'Behemothon, King of the Colossi'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2205400); +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 +(2205400, 9, 0, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Behemothon, King of the Colossi - Actionlist - Say Line 0'), +(2205400, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Behemothon, King of the Colossi - Actionlist - Say Line 1'); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 22054; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 22054); +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 +(22054, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 3, 0, 20577, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Behemothon, King of the Colossi - On Respawn - Hack: Change modelid to correct one by script'), +(22054, 0, 1, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Behemothon, King of the Colossi - On Respawn - Set Active On'), +(22054, 0, 2, 0, 38, 0, 100, 0, 1, 1, 60000, 60000, 0, 80, 2205400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Behemothon, King of the Colossi - On Data Set 1 1 - Run Script'); + +UPDATE `creature_template_addon` SET `visibilityDistanceType` = 5 WHERE (`entry` = 22054); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21769); +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 +(21769, 0, 0, 1, 62, 0, 100, 512, 30008, 1, 0, 0, 0, 56, 31108, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - On Gossip Option 1 Selected - Add Item \'Kor\'kron Flare Gun\' 1 Time'), +(21769, 0, 1, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - On Gossip Option 1 Selected - Close Gossip'), +(21769, 0, 2, 0, 1, 0, 100, 0, 120000, 120000, 300000, 300000, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - Out of Combat - Say Line 0'), +(21769, 0, 3, 4, 62, 0, 100, 512, 8443, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - On Gossip Option 0 Selected - Close Gossip'), +(21769, 0, 4, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 85, 38172, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - On Gossip Option 0 Selected - Invoker Cast \'Serverside - Create Kor`kron Flare Gun\''), +(21769, 0, 5, 0, 20, 0, 100, 0, 10769, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 77278, 22054, 0, 0, 0, 0, 0, 0, 'Overlord Or\'barokh - On Quest \'Dissension Amongst the Ranks...\' Finished - Set Data 1 1'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21773); +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 +(21773, 0, 0, 0, 1, 0, 100, 0, 120000, 120000, 200000, 260000, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Thane Yoregar - Out of Combat - Say Line 0'), +(21773, 0, 1, 2, 62, 0, 100, 512, 8457, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Thane Yoregar - On Gossip Option 0 Selected - Close Gossip'), +(21773, 0, 2, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 85, 38251, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Thane Yoregar - On Gossip Option 0 Selected - Invoker Cast \'Serverside - Create Wildhammer Flare Gun\''), +(21773, 0, 3, 0, 20, 0, 100, 0, 10776, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 77278, 22054, 0, 0, 0, 0, 0, 0, 'Thane Yoregar - On Quest \'Dissension Amongst the Ranks...\' Finished - Set Data 1 1'); From 4d6e3c136a9b0898e3c1f61a7491f92097519bdc Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 1 Mar 2023 20:17:50 -0300 Subject: [PATCH 011/159] fix(DB/Quest): The Flesh Lies... (#15195) --- .../rev_1677334339053733900.sql | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677334339053733900.sql diff --git a/data/sql/updates/pending_db_world/rev_1677334339053733900.sql b/data/sql/updates/pending_db_world/rev_1677334339053733900.sql new file mode 100644 index 000000000..507f3f222 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677334339053733900.sql @@ -0,0 +1,182 @@ +-- +DELETE FROM `creature` WHERE `id1` IN (20561, 20340); +INSERT INTO `creature` (`guid`, `id1`, `map`, `ZoneId`, `AreaId`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`, `wander_distance`) VALUES +(25747, 20561, 530, 3523, 3880, 1, 3835.91, 2045.9, 145.151, 0.942478, 180, 0, 0), +(25748, 20561, 530, 3523, 3880, 1, 3870.96, 2103.97, 133.353, 1.58825, 180, 0, 0), +(25749, 20561, 530, 3523, 3880, 1, 3987.21, 2132.56, 162.681, 3.40339, 180, 0, 0), +(25750, 20561, 530, 3523, 3880, 1, 3935.88, 2138.8, 160.69, 1.23918, 180, 0, 0), +(25751, 20561, 530, 3523, 3880, 1, 3968.76, 2112.71, 162.382, 6.19592, 180, 0, 0), +(25752, 20561, 530, 3523, 3880, 1, 3926.43, 2105.75, 159.264, 3.61283, 180, 0, 0), +(25753, 20561, 530, 3523, 3880, 1, 3912.87, 2079.35, 153.77, 1.37881, 180, 0, 0), +(25754, 20561, 530, 3523, 3880, 1, 3902.53, 2052.92, 150.162, 3.21141, 180, 0, 0), +(25755, 20561, 530, 3523, 3880, 1, 3908.28, 2081.01, 133.479, 4.18879, 180, 0, 0), +(25756, 20561, 530, 3523, 3880, 1, 3839.54, 2137.05, 145.967, 3.54302, 180, 0, 0), +(25757, 20561, 530, 3523, 3880, 1, 3815.1, 2102.61, 148.003, 1.72788, 180, 0, 0), +(25758, 20561, 530, 3523, 3880, 1, 3890.49, 2102.26, 153.708, 4.62512, 180, 0, 0), +(25759, 20561, 530, 3523, 3880, 1, 3881.19, 2078.43, 131.736, 3.66519, 180, 0, 0), +(25760, 20561, 530, 3523, 3880, 1, 3867.95, 2023.28, 144.585, 5.65487, 180, 0, 0), +(25761, 20561, 530, 3523, 3880, 1, 3823.88, 2064.43, 147.579, 6.21337, 180, 0, 0), +(25762, 20561, 530, 3523, 3880, 1, 3790.07, 2073.02, 153.16, 4.60767, 180, 0, 0), +(25763, 20561, 530, 3523, 3880, 1, 3711.35, 2096.57, 151.984, 1.18682, 180, 0, 0), +(25764, 20561, 530, 3523, 3880, 1, 3737.86, 2082.16, 148.9, 0.837758, 180, 0, 0), +(25765, 20561, 530, 3523, 3880, 1, 3750.9, 2055.32, 148.853, 5.44543, 180, 0, 0), +(25766, 20561, 530, 3523, 3880, 1, 3760.86, 2082.87, 152.837, 2.40855, 180, 0, 0), +(25767, 20561, 530, 3523, 3880, 1, 3840.47, 2122.01, 146.953, 1.71989, 180, 0, 0), +(25769, 20561, 530, 3523, 3880, 1, 3863.25, 2120.24, 146.842, 5.46288, 180, 0, 0), +(25770, 20561, 530, 3523, 3880, 1, 3848.73, 2147.21, 140.23, 1.94765, 180, 0, 0), +(25771, 20561, 530, 3523, 3880, 1, 3852.86, 2153.85, 140.535, 1.10727, 180, 0, 0), +(25772, 20561, 530, 3523, 3880, 1, 3875.74, 2150.16, 139.272, 3.61283, 180, 0, 0), +(25773, 20561, 530, 3523, 3880, 1, 3903.43, 2124.28, 137.706, 0.244346, 180, 0, 0), +(25774, 20340, 530, 3523, 3880, 0, 3838.25, 2043.45, 144.456, 2.28582, 300, 2, 0), +(25775, 20340, 530, 3523, 3880, 0, 3845.78, 2111.57, 148.651, 5.05916, 300, 1, 5), +(25776, 20340, 530, 3523, 3880, 0, 3970.96, 2131.35, 161.178, 0.563203, 300, 1, 5), +(25777, 20340, 530, 3523, 3880, 0, 3700.07, 2104.38, 154.187, 1.05376, 300, 2, 0), +(25778, 20340, 530, 3523, 3880, 0, 3802, 2077.1, 149.618, 2.7682, 300, 1, 5), +(25779, 20340, 530, 3523, 3880, 0, 3757.67, 2080.25, 151.914, 3.0616, 300, 1, 2), +(25780, 20340, 530, 3523, 3880, 0, 3830.72, 2152.55, 145.842, 4.57919, 300, 1, 5), +(25781, 20340, 530, 3523, 3880, 0, 3845.32, 2111.13, 148.712, 3.38892, 300, 2, 0), +(25782, 20340, 530, 3523, 3880, 0, 3864.73, 2158.55, 139.53, 5.98851, 300, 1, 5), +(25783, 20340, 530, 3523, 3880, 0, 3883.87, 2131.02, 133.884, 5.14029, 300, 1, 5), +(25784, 20340, 530, 3523, 3880, 0, 3873.85, 2104.63, 133.388, 4.74834, 300, 2, 0), +(25785, 20340, 530, 3523, 3880, 0, 3919.83, 2087.85, 133.488, 2.46537, 300, 1, 5), +(25786, 20340, 530, 3523, 3880, 0, 3895.68, 2034.48, 148.256, 3.45105, 300, 1, 5), +(25787, 20340, 530, 3523, 3880, 0, 3909.46, 2090.17, 155.839, 2.58317, 300, 1, 5), +(25788, 20340, 530, 3523, 3880, 0, 3927.87, 2118.67, 159.924, 4.58354, 300, 2, 0); + +DELETE FROM `creature_addon` WHERE (`guid` IN (25774, 25777, 25781, 25784, 25788)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(25774, 257740, 0, 0, 0, 0, 0, NULL), +(25777, 257770, 0, 0, 0, 0, 0, NULL), +(25781, 257810, 0, 0, 0, 0, 0, NULL), +(25784, 257840, 0, 0, 0, 0, 0, NULL), +(25788, 257880, 0, 0, 0, 0, 0, NULL); + +DELETE FROM `waypoint_data` WHERE `id` IN (257740, 257770, 257810, 257840, 257880); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(257740, 1, 3828.6, 2052.43, 146.299), +(257740, 2, 3814.57, 2068.55, 148.037), +(257740, 3, 3803.64, 2075.73, 148.999), +(257740, 4, 3793.57, 2076.63, 152.807), +(257740, 5, 3772.9, 2078.11, 154.741), +(257740, 6, 3793.79, 2077.36, 152.872), +(257740, 7, 3806.68, 2075.38, 148.988), +(257740, 8, 3817.08, 2066.81, 147.837), +(257740, 9, 3829.58, 2051.22, 145.945), +(257740, 10, 3837.99, 2045.38, 144.981), +(257740, 11, 3844.06, 2036.32, 143.92), +(257740, 12, 3853.07, 2030.52, 142.777), +(257740, 13, 3865.79, 2024.48, 144.208), +(257740, 14, 3851.93, 2030.9, 142.805), +(257740, 15, 3844.37, 2036.31, 143.849), +(257740, 16, 3838.85, 2044.04, 144.628), +(257770, 1, 3708.42, 2110.91, 152.714), +(257770, 2, 3718.47, 2112.17, 150.762), +(257770, 3, 3738.52, 2109.59, 148.183), +(257770, 4, 3711.96, 2112.24, 152.367), +(257770, 5, 3702.12, 2107.95, 153.659), +(257770, 6, 3692.42, 2098.89, 155.214), +(257770, 7, 3686.26, 2093.03, 149.364), +(257770, 8, 3683.91, 2089.67, 152.259), +(257770, 9, 3688.53, 2083.23, 152.775), +(257770, 10, 3698.57, 2069.71, 150.483), +(257770, 11, 3715.1, 2062.27, 147.368), +(257770, 12, 3728.18, 2056.63, 144.842), +(257770, 13, 3740.76, 2052.12, 146.617), +(257770, 14, 3756.8, 2056.43, 150.487), +(257770, 15, 3741.21, 2052.22, 146.648), +(257770, 16, 3727.44, 2056.94, 144.813), +(257770, 17, 3698.21, 2070.22, 150.638), +(257770, 18, 3689.34, 2085.61, 152.047), +(257770, 19, 3687.46, 2092.86, 149.402), +(257770, 20, 3690.78, 2097.36, 154.156), +(257770, 21, 3700.04, 2104.35, 154.194), +(257810, 1, 3832.22, 2107.48, 149.717), +(257810, 2, 3825.75, 2105.58, 151.003), +(257810, 3, 3820.36, 2104.75, 148.444), +(257810, 4, 3811.88, 2098.79, 147.848), +(257810, 5, 3804.56, 2091.55, 149.842), +(257810, 6, 3813.68, 2099.89, 147.724), +(257810, 7, 3820.93, 2105.03, 148.563), +(257810, 8, 3825.93, 2106.17, 151.103), +(257810, 9, 3832.41, 2107.12, 149.743), +(257810, 10, 3843.08, 2112.63, 148.908), +(257810, 11, 3843.73, 2122.31, 147.232), +(257810, 12, 3839.65, 2131.35, 146.628), +(257810, 13, 3837.69, 2138.62, 145.446), +(257810, 14, 3832.25, 2154.89, 145.916), +(257810, 15, 3838.13, 2137.13, 145.727), +(257810, 16, 3842.26, 2122.59, 147.082), +(257810, 17, 3846.68, 2115.09, 148.459), +(257810, 18, 3855.48, 2114.4, 147.42), +(257810, 19, 3870.42, 2114.12, 147.612), +(257810, 20, 3885.1, 2109.86, 149.593), +(257810, 21, 3893.09, 2104.7, 152.478), +(257810, 22, 3903.74, 2097.1, 154.744), +(257810, 23, 3895.22, 2104.42, 153.216), +(257810, 24, 3883.14, 2110.8, 149.206), +(257810, 25, 3867.52, 2114.77, 147.194), +(257810, 26, 3852.24, 2113.81, 147.649), +(257810, 27, 3846.62, 2115.55, 148.453), +(257810, 28, 3840.54, 2128.64, 146.783), +(257810, 29, 3837.58, 2140.16, 145.256), +(257810, 30, 3832.01, 2155.39, 145.949), +(257810, 31, 3837.48, 2140.4, 145.27), +(257840, 1, 3874.85, 2092.38, 131.986), +(257840, 2, 3881.79, 2076.72, 132.069), +(257840, 3, 3876.13, 2088.46, 131.757), +(257840, 4, 3873.89, 2102.41, 132.905), +(257840, 5, 3875.56, 2109.94, 135.03), +(257840, 6, 3879.99, 2120.42, 133.436), +(257840, 7, 3882.52, 2130.11, 133.948), +(257840, 8, 3877.94, 2139.1, 135.257), +(257840, 9, 3876.27, 2145.36, 139.053), +(257840, 10, 3874.56, 2152.62, 138.963), +(257840, 11, 3867.19, 2159.01, 139.152), +(257840, 12, 3857.43, 2157.18, 140.557), +(257840, 13, 3846.26, 2156.16, 141.191), +(257840, 14, 3842.13, 2158.58, 141.856), +(257840, 15, 3848.25, 2155.62, 140.979), +(257840, 16, 3858.78, 2157.24, 140.533), +(257840, 17, 3872.4, 2155.03, 138.92), +(257840, 18, 3875.87, 2150.28, 139.98), +(257840, 19, 3876.41, 2145.97, 139.209), +(257840, 20, 3878.13, 2140.38, 135.46), +(257840, 21, 3882.97, 2129.62, 133.867), +(257840, 22, 3880.17, 2118.79, 133.545), +(257840, 23, 3875.72, 2110.03, 134.98), +(257840, 24, 3874.23, 2103.02, 132.96), +(257880, 1, 3923.03, 2102, 158.719), +(257880, 2, 3918.22, 2094.92, 157.148), +(257880, 3, 3909.27, 2086.84, 156.194), +(257880, 4, 3908.21, 2079.6, 153.654), +(257880, 5, 3907.09, 2069.95, 152.617), +(257880, 6, 3906.22, 2058.27, 150.862), +(257880, 7, 3901.95, 2047.35, 149.152), +(257880, 8, 3907.01, 2060.82, 151.077), +(257880, 9, 3907.93, 2080.42, 153.756), +(257880, 10, 3909.4, 2086.92, 156.191), +(257880, 11, 3913.55, 2091.18, 155.927), +(257880, 12, 3920.32, 2096.83, 157.939), +(257880, 13, 3926.47, 2109.47, 159.1), +(257880, 14, 3927.97, 2121.86, 160.375), +(257880, 15, 3930.43, 2129, 160.119), +(257880, 16, 3940.05, 2136.96, 160.067), +(257880, 17, 3952.66, 2135.78, 161.632), +(257880, 18, 3957.72, 2133.09, 162.299), +(257880, 19, 3946.18, 2137.7, 160.791), +(257880, 20, 3936.69, 2136.25, 160.133), +(257880, 21, 3928.27, 2125.16, 160.584), +(257880, 22, 3927.47, 2118.3, 159.805); + +UPDATE `creature_template_addon` SET `auras` = '31261' WHERE (`entry` = 20561); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=20561 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`, `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 +(20561, 0, 0, 1, 8, 0, 100, 0, 35372, 0, 0, 0, 0, 33, 20561, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Withered Corpse - On Spellhit \'Protectorate Igniter\' - Quest Credit \'The Flesh Lies...\'\''), +(20561, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 11, 35374, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Withered Corpse - On Spellhit \'Protectorate Igniter\' - Summon Gameobject \'Charred Remains\''), +(20561, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Withered Corpse - On Spellhit \'Protectorate Igniter\' - Kill Target'), +(20561, 0, 3, 4, 10, 0, 100, 1, 0, 4, 0, 0, 1, 11, 35309, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Withered Corpse - Within 0-4 Range Out of Combat LoS - Cast \'Bloody Explosion\''), +(20561, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 36, 20335, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Withered Corpse - Within 0-4 Range Out of Combat LoS - Update Template To \'Parasitic Fleshbeast\''), +(20561, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 28, 31261, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Withered Corpse - Within 0-4 Range Out of Combat LoS - Remove Aura \'Permanent Feign Death (Root)\' (No Repeat)'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2056100); From 0b7fc7cca0c06de4a38adec0d6c92c4975e1ab72 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 1 Mar 2023 20:18:01 -0300 Subject: [PATCH 012/159] fix(DB/Gameobject): Rotten Arakkoa Eggs (#15199) --- .../rev_1677346935817380600.sql | 130 ++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677346935817380600.sql diff --git a/data/sql/updates/pending_db_world/rev_1677346935817380600.sql b/data/sql/updates/pending_db_world/rev_1677346935817380600.sql new file mode 100644 index 000000000..e16423742 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677346935817380600.sql @@ -0,0 +1,130 @@ +-- +SET @GUID := 105196; +SET @POOL := 13398; + +DELETE FROM `gameobject` WHERE `id` IN (184795, 184796); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES +-- Trapped Eggs +(@GUID+0 , 184796, 530, 3520, 3932, 1, 1, -4082.12, 1765.66, 99.3064, 6.02139, 0, 0, -0.130526, 0.991445, 180, 255, 1, '', 15595), +(@GUID+2 , 184796, 530, 3520, 3932, 1, 1, -4127.22, 1788.2, 110.085, 1.18682, 0, 0, 0.559193, 0.829038, 180, 255, 1, '', 15595), +(@GUID+4 , 184796, 530, 3520, 3932, 1, 1, -4068.59, 1933.35, 76.9559, 1.85005, 0, 0, 0.798635, 0.601815, 180, 255, 1, '', 15595), +(@GUID+6 , 184796, 530, 3520, 3932, 1, 1, -4071.22, 1931.08, 76.9124, 5.95157, 0, 0, -0.165047, 0.986286, 180, 255, 1, '', 15595), +(@GUID+8 , 184796, 530, 3520, 3932, 1, 1, -4120.26, 1693.84, 101.657, 4.90438, 0, 0, -0.636078, 0.771625, 180, 255, 1, '', 15595), +(@GUID+10, 184796, 530, 3520, 3932, 1, 1, -4199.02, 1828.67, 119.586, 1.69297, 0, 0, 0.748956, 0.66262, 180, 255, 1, '', 15595), +(@GUID+12, 184796, 530, 3520, 3932, 1, 1, -4059.63, 1748.61, 99.8074, 3.31614, 0, 0, -0.996194, 0.087165, 180, 255, 1, '', 15595), +(@GUID+14, 184796, 530, 3520, 3932, 1, 1, -4083.81, 1757.47, 99.3434, 0.104721, 0, 0, 0.0523361, 0.99863, 180, 255, 1, '', 15595), +(@GUID+16, 184796, 530, 3520, 3932, 1, 1, -4056.73, 1796.72, 94.6073, 2.98451, 0, 0, 0.996917, 0.0784656, 180, 255, 1, '', 15595), +(@GUID+18, 184796, 530, 3520, 3932, 1, 1, -4050.61, 1818.76, 86.4054, -0.73303, 0, 0, -0.358368, 0.93358, 180, 255, 1, '', 15595), +(@GUID+20, 184796, 530, 3520, 3932, 1, 1, -4032.65, 1821.49, 86.1867, -2.39111, 0, 0, -0.930417, 0.366502, 180, 255, 1, '', 15595), +(@GUID+22, 184796, 530, 3520, 3932, 1, 1, -4008.57, 1765.89, 97.1208, -0.95993, 0, 0, -0.461749, 0.887011, 180, 255, 1, '', 15595), +(@GUID+24, 184796, 530, 3520, 3932, 1, 1, -4002.44, 1844.23, 81.5785, 0.226893, 0, 0, 0.113203, 0.993572, 180, 255, 1, '', 15595), +(@GUID+26, 184796, 530, 3520, 3932, 1, 1, -3972.18, 1767.47, 99.7536, -0.22689, 0, 0, -0.113203, 0.993572, 180, 255, 1, '', 15595), +(@GUID+28, 184796, 530, 3520, 3932, 1, 1, -3951.12, 1842.48, 91.3865, -2.56563, 0, 0, -0.958819, 0.284017, 180, 255, 1, '', 15595), +(@GUID+30, 184796, 530, 3520, 3932, 1, 1, -3965.86, 1861.5, 82.6874, -0.10472, 0, 0, -0.0523361, 0.99863, 180, 255, 1, '', 15595), +(@GUID+32, 184796, 530, 3520, 3932, 1, 1, -4176.82, 1821.99, 111.444, -1.23918, 0, 0, -0.580701, 0.814117, 180, 255, 1, '', 15595), +(@GUID+34, 184796, 530, 3520, 3932, 1, 1, -4011.48, 1762.5, 97.2144, -0.959931, 0, 0, -0.461749, 0.887011, 180, 255, 1, '', 15595), +(@GUID+36, 184796, 530, 3520, 3932, 1, 1, -4016, 1792.08, 93.6583, 2.56563, 0, 0, 0.958819, 0.284017, 180, 255, 1, '', 15595), +(@GUID+38, 184796, 530, 3520, 3932, 1, 1, -4020.93, 1784.86, 95.3865, -2.04204, 0, 0, -0.852641, 0.522496, 180, 255, 1, '', 15595), +(@GUID+40, 184796, 530, 3520, 3932, 1, 1, -4029.34, 1783.06, 95.5917, -2.1293, 0, 0, -0.874619, 0.48481, 180, 255, 1, '', 15595), +(@GUID+42, 184796, 530, 3520, 3932, 1, 1, -4091.62, 1897.92, 75.4492, 1.90241, 0, 0, 0.814116, 0.580702, 180, 255, 1, '', 15595), +(@GUID+44, 184796, 530, 3520, 3932, 1, 1, -4091.07, 1892.19, 75.4612, -2.60054, 0, 0, -0.96363, 0.267239, 180, 255, 1, '', 15595), +-- Real Eggs +(@GUID+1 , 184795, 530, 3520, 3932, 1, 1, -4082.12, 1765.66, 99.3064, 6.02139, 0, 0, -0.130526, 0.991445, 180, 255, 1, '', 15595), +(@GUID+3 , 184795, 530, 3520, 3932, 1, 1, -4127.22, 1788.2, 110.085, 1.18682, 0, 0, 0.559193, 0.829038, 180, 255, 1, '', 15595), +(@GUID+5 , 184795, 530, 3520, 3932, 1, 1, -4068.59, 1933.35, 76.9559, 1.85005, 0, 0, 0.798635, 0.601815, 180, 255, 1, '', 15595), +(@GUID+7 , 184795, 530, 3520, 3932, 1, 1, -4071.22, 1931.08, 76.9124, 5.95157, 0, 0, -0.165047, 0.986286, 180, 255, 1, '', 15595), +(@GUID+9 , 184795, 530, 3520, 3932, 1, 1, -4120.26, 1693.84, 101.657, 4.90438, 0, 0, -0.636078, 0.771625, 180, 255, 1, '', 15595), +(@GUID+11, 184795, 530, 3520, 3932, 1, 1, -4199.02, 1828.67, 119.586, 1.69297, 0, 0, 0.748956, 0.66262, 180, 255, 1, '', 15595), +(@GUID+13, 184795, 530, 3520, 3932, 1, 1, -4059.63, 1748.61, 99.8074, 3.31614, 0, 0, -0.996194, 0.087165, 180, 255, 1, '', 15595), +(@GUID+15, 184795, 530, 3520, 3932, 1, 1, -4083.81, 1757.47, 99.3434, 0.104721, 0, 0, 0.0523361, 0.99863, 180, 255, 1, '', 15595), +(@GUID+17, 184795, 530, 3520, 3932, 1, 1, -4056.73, 1796.72, 94.6073, 2.98451, 0, 0, 0.996917, 0.0784656, 180, 255, 1, '', 15595), +(@GUID+19, 184795, 530, 3520, 3932, 1, 1, -4050.61, 1818.76, 86.4054, -0.73303, 0, 0, -0.358368, 0.93358, 180, 255, 1, '', 15595), +(@GUID+21, 184795, 530, 3520, 3932, 1, 1, -4032.65, 1821.49, 86.1867, -2.39111, 0, 0, -0.930417, 0.366502, 180, 255, 1, '', 15595), +(@GUID+23, 184795, 530, 3520, 3932, 1, 1, -4008.57, 1765.89, 97.1208, -0.95993, 0, 0, -0.461749, 0.887011, 180, 255, 1, '', 15595), +(@GUID+25, 184795, 530, 3520, 3932, 1, 1, -4002.44, 1844.23, 81.5785, 0.226893, 0, 0, 0.113203, 0.993572, 180, 255, 1, '', 15595), +(@GUID+27, 184795, 530, 3520, 3932, 1, 1, -3972.18, 1767.47, 99.7536, -0.22689, 0, 0, -0.113203, 0.993572, 180, 255, 1, '', 15595), +(@GUID+29, 184795, 530, 3520, 3932, 1, 1, -3951.12, 1842.48, 91.3865, -2.56563, 0, 0, -0.958819, 0.284017, 180, 255, 1, '', 15595), +(@GUID+31, 184795, 530, 3520, 3932, 1, 1, -3965.86, 1861.5, 82.6874, -0.10472, 0, 0, -0.0523361, 0.99863, 180, 255, 1, '', 15595), +(@GUID+33, 184795, 530, 3520, 3932, 1, 1, -4176.82, 1821.99, 111.444, -1.23918, 0, 0, -0.580701, 0.814117, 180, 255, 1, '', 15595), +(@GUID+35, 184795, 530, 3520, 3932, 1, 1, -4011.48, 1762.5, 97.2144, -0.959931, 0, 0, -0.461749, 0.887011, 180, 255, 1, '', 15595), +(@GUID+37, 184795, 530, 3520, 3932, 1, 1, -4016, 1792.08, 93.6583, 2.56563, 0, 0, 0.958819, 0.284017, 180, 255, 1, '', 15595), +(@GUID+39, 184795, 530, 3520, 3932, 1, 1, -4020.93, 1784.86, 95.3865, -2.04204, 0, 0, -0.852641, 0.522496, 180, 255, 1, '', 15595), +(@GUID+41, 184795, 530, 3520, 3932, 1, 1, -4029.34, 1783.06, 95.5917, -2.1293, 0, 0, -0.874619, 0.48481, 180, 255, 1, '', 15595), +(@GUID+43, 184795, 530, 3520, 3932, 1, 1, -4091.62, 1897.92, 75.4492, 1.90241, 0, 0, 0.814116, 0.580702, 180, 255, 1, '', 15595), +(@GUID+45, 184795, 530, 3520, 3932, 1, 1, -4091.07, 1892.19, 75.4612, -2.60054, 0, 0, -0.96363, 0.267239, 180, 255, 1, '', 15595); + +DELETE FROM `pool_template` WHERE `description`='Rotten Arakkoa Egg (184795/184796)' AND `entry` BETWEEN @POOL+0 AND @POOL+22; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(@POOL+0 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+1 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+2 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+3 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+4 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+5 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+6 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+7 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+8 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+9 , 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+10, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+11, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+12, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+13, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+14, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+15, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+16, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+17, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+18, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+19, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+20, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+21, 1, 'Rotten Arakkoa Egg (184795/184796)'), +(@POOL+22, 1, 'Rotten Arakkoa Egg (184795/184796)'); + +DELETE FROM `pool_gameobject` WHERE `description` LIKE 'Rotten Arakkoa Egg (18479%' AND `pool_entry` BETWEEN @POOL+0 AND @POOL+22; +INSERT INTO `pool_gameobject` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(@GUID+0 , @POOL+0 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+2 , @POOL+1 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+4 , @POOL+2 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+6 , @POOL+3 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+8 , @POOL+4 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+10, @POOL+5 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+12, @POOL+6 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+14, @POOL+7 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+16, @POOL+8 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+18, @POOL+9 , 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+20, @POOL+10, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+22, @POOL+11, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+24, @POOL+12, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+26, @POOL+13, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+28, @POOL+14, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+30, @POOL+15, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+32, @POOL+16, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+34, @POOL+17, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+36, @POOL+18, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+38, @POOL+19, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+40, @POOL+20, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+42, @POOL+21, 0, 'Rotten Arakkoa Egg (184796)'), +(@GUID+44, @POOL+22, 0, 'Rotten Arakkoa Egg (184796)'), +-- Real Eggs +(@GUID+1 , @POOL+0 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+3 , @POOL+1 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+5 , @POOL+2 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+7 , @POOL+3 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+9 , @POOL+4 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+11, @POOL+5 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+13, @POOL+6 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+15, @POOL+7 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+17, @POOL+8 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+19, @POOL+9 , 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+21, @POOL+10, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+23, @POOL+11, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+25, @POOL+12, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+27, @POOL+13, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+29, @POOL+14, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+31, @POOL+15, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+33, @POOL+16, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+35, @POOL+17, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+37, @POOL+18, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+39, @POOL+19, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+41, @POOL+20, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+43, @POOL+21, 10, 'Rotten Arakkoa Egg (184795)'), +(@GUID+45, @POOL+22, 10, 'Rotten Arakkoa Egg (184795)'); From 91baa86c132e2e433a08fd034256ff9a49121990 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Wed, 1 Mar 2023 23:21:04 +0000 Subject: [PATCH 013/159] chore(DB): import pending files Referenced commit(s): 0b7fc7cca0c06de4a38adec0d6c92c4975e1ab72 --- .../rev_1676493665842878700.sql => db_world/2023_03_01_02.sql} | 1 + .../rev_1677121723939096800.sql => db_world/2023_03_01_03.sql} | 1 + .../rev_1677165107723442200.sql => db_world/2023_03_01_04.sql} | 1 + .../rev_1677327485586754700.sql => db_world/2023_03_01_05.sql} | 1 + .../rev_1677334339053733900.sql => db_world/2023_03_01_06.sql} | 1 + .../rev_1677346935817380600.sql => db_world/2023_03_01_07.sql} | 1 + 6 files changed, 6 insertions(+) rename data/sql/updates/{pending_db_world/rev_1676493665842878700.sql => db_world/2023_03_01_02.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1677121723939096800.sql => db_world/2023_03_01_03.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1677165107723442200.sql => db_world/2023_03_01_04.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1677327485586754700.sql => db_world/2023_03_01_05.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1677334339053733900.sql => db_world/2023_03_01_06.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1677346935817380600.sql => db_world/2023_03_01_07.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1676493665842878700.sql b/data/sql/updates/db_world/2023_03_01_02.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1676493665842878700.sql rename to data/sql/updates/db_world/2023_03_01_02.sql index 873a56f3b..4259d1861 100644 --- a/data/sql/updates/pending_db_world/rev_1676493665842878700.sql +++ b/data/sql/updates/db_world/2023_03_01_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_01_01 -> 2023_03_01_02 -- UPDATE `gameobject` SET `spawntimesecs`=180 WHERE `id`=184948; diff --git a/data/sql/updates/pending_db_world/rev_1677121723939096800.sql b/data/sql/updates/db_world/2023_03_01_03.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677121723939096800.sql rename to data/sql/updates/db_world/2023_03_01_03.sql index 4c6f4018b..b94b87043 100644 --- a/data/sql/updates/pending_db_world/rev_1677121723939096800.sql +++ b/data/sql/updates/db_world/2023_03_01_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_01_02 -> 2023_03_01_03 -- Karsius (21877) DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21877); 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_1677165107723442200.sql b/data/sql/updates/db_world/2023_03_01_04.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677165107723442200.sql rename to data/sql/updates/db_world/2023_03_01_04.sql index 04ffac6ac..90658693c 100644 --- a/data/sql/updates/pending_db_world/rev_1677165107723442200.sql +++ b/data/sql/updates/db_world/2023_03_01_04.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_01_03 -> 2023_03_01_04 -- Delete old custom creature_template entries DELETE FROM `creature_template` WHERE `entry` IN ( 61021, -- Adyen the Lightwarden diff --git a/data/sql/updates/pending_db_world/rev_1677327485586754700.sql b/data/sql/updates/db_world/2023_03_01_05.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677327485586754700.sql rename to data/sql/updates/db_world/2023_03_01_05.sql index e7649fbfc..b9f9425c2 100644 --- a/data/sql/updates/pending_db_world/rev_1677327485586754700.sql +++ b/data/sql/updates/db_world/2023_03_01_05.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_01_04 -> 2023_03_01_05 -- DELETE FROM `creature` WHERE `id1`=19823 AND `guid` IN (1007, 10994, 25745, 25746); INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1677334339053733900.sql b/data/sql/updates/db_world/2023_03_01_06.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677334339053733900.sql rename to data/sql/updates/db_world/2023_03_01_06.sql index 507f3f222..b8b0c94db 100644 --- a/data/sql/updates/pending_db_world/rev_1677334339053733900.sql +++ b/data/sql/updates/db_world/2023_03_01_06.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_01_05 -> 2023_03_01_06 -- DELETE FROM `creature` WHERE `id1` IN (20561, 20340); INSERT INTO `creature` (`guid`, `id1`, `map`, `ZoneId`, `AreaId`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `MovementType`, `wander_distance`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1677346935817380600.sql b/data/sql/updates/db_world/2023_03_01_07.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677346935817380600.sql rename to data/sql/updates/db_world/2023_03_01_07.sql index e16423742..e1c07bb47 100644 --- a/data/sql/updates/pending_db_world/rev_1677346935817380600.sql +++ b/data/sql/updates/db_world/2023_03_01_07.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_01_06 -> 2023_03_01_07 -- SET @GUID := 105196; SET @POOL := 13398; From d3baf668b260b00661f9de2aa37598a0eca236bd Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 1 Mar 2023 22:19:01 -0300 Subject: [PATCH 014/159] fix(DB/SAI): Rewrite Ring of Blood (#15205) --- .../rev_1677368120858755900.sql | 341 ++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677368120858755900.sql diff --git a/data/sql/updates/pending_db_world/rev_1677368120858755900.sql b/data/sql/updates/pending_db_world/rev_1677368120858755900.sql new file mode 100644 index 000000000..245a0b692 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677368120858755900.sql @@ -0,0 +1,341 @@ +-- Gurthock Gossip +DELETE FROM `gossip_menu` WHERE (`MenuID` = 7699); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES +(7699, 9394), +(7699, 9403); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 14) AND (`SourceGroup` = 7699) AND (`SourceEntry` IN (9394, 9403)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(14, 7699, 9394, 0, 0, 8, 0, 9977, 0, 0, 1, 0, 0, '', 'Show text if player does not have quest \'The Ring of Blood: The Final Challenge\' rewarded'), +(14, 7699, 9403, 0, 0, 8, 0, 9977, 0, 0, 0, 0, 0, '', 'Show text if player has quest \'The Ring of Blood: The Final Challenge\' rewarded'); + +-- Minor Adjustments +DELETE FROM `creature_template_addon` WHERE (`entry` IN (18400, 18402)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(18400, 0, 0, 0, 0, 0, 0, '21911'), +(18402, 0, 0, 0, 1, 0, 0, ''); + +UPDATE `creature_template_addon` SET `bytes2` = 1 WHERE (`entry` = 18399); + +UPDATE `creature_text` SET `Emote`=15 WHERE `CreatureID`=18399 AND `GroupID`=0 AND `ID`=0; +UPDATE `creature_text` SET `Type`=12, `Emote`=15 WHERE `CreatureID`=18402 AND `GroupID`=0 AND `ID`=0; + +UPDATE `creature` SET `spawntimesecs`=1 WHERE `guid`=48191 AND `id1`=18069; + +-- Add Boss immunities to challengers +UPDATE `creature_template` SET `mechanic_immune_mask` = 650854271 WHERE (`entry` IN (18398, 18399, 18400, 18401, 18402)); + +-- Skra'gath Text +DELETE FROM `creature_text` WHERE `CreatureID`=18401; +INSERT INTO `creature_text` (`CreatureID`, `BroadcastTextId`, `GroupID`, `ID`, `Text`, `Type`, `comment`) VALUES +(18401, 15472, 0, 0, 'Closer... Come closer... See what the void brings!', 14, 'Skra\'gath'), +(18401, 17110, 1, 0, '%s absorbs the holy energy of the attack.', 16, 'Skra\'gath'), +(18401, 17105, 2, 0, '%s absorbs the fire energy of the attack.', 16, 'Skra\'gath'), +(18401, 17107, 3, 0, '%s absorbs the nature energy of the attack.', 16, 'Skra\'gath'), +(18401, 17106, 4, 0, '%s absorbs the frost energy of the attack.', 16, 'Skra\'gath'), +(18401, 17108, 5, 0, '%s absorbs the shadow energy of the attack.', 16, 'Skra\'gath'), +(18401, 17109, 6, 0, '%s absorbs the arcane energy of the attack.', 16, 'Skra\'gath'); + +-- Text for Mogor and Gurgthock +DELETE FROM `creature_text` WHERE `CreatureID` IN (18069, 18398, 18471); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(18398, 0, 0, 'Brokentoe prepares to charge.', 41, 0, 100, 0, 0, 0, 15438, 0, 'Brokentoe'), +(18069, 0, 0, '%s goes into a frenzy!', 16, 0, 100, 0, 0, 0, 38630, 0, 'Mogor'), +(18069, 1, 0, 'Dat was poop! Mogor could put up much better fight den dat!', 14, 0, 100, 15, 0, 0, 15470, 0, 'Mogor'), +(18069, 2, 0, 'Mogor not impressed! Skra\'gath wuz made of da air and shadow! Soft like da squishy orcies!', 14, 0, 100, 15, 0, 0, 15474, 0, 'Mogor'), +(18069, 3, 0, 'WUT!? UNPOSSIBLE!! You fight Mogor now! Mogor destroy!', 14, 0, 100, 15, 0, 0, 15477, 0, 'Mogor'), +(18069, 4, 0, 'Now you face da true champion! I give you chance to run away little one. Run away now before Mogor decim... destyor... Run away before Mogor KILL!', 14, 0, 100, 0, 0, 0, 15478, 0, 'Mogor'), +(18069, 5, 0, 'No more chances! Now you pay da ogre!', 14, 0, 100, 15, 0, 0, 15479, 0, 'Mogor'), +(18069, 6, 0, 'No more nice ogre! You hurt Mogor!!', 14, 0, 100, 0, 0, 0, 15483, 0, 'Mogor'), +(18471, 0 , 0, 'Get in the Ring of Blood, $n. The fight is about to start!', 12, 0, 100, 1, 0, 0, 15441, 0, 'Gurgthock'), +(18471, 1 , 0, 'The battle is about to begin! $n versus the ferocious clefthoof, Brokentoe!', 14, 0, 100, 15, 0, 0, 15439, 0, 'Gurgthock'), +(18471, 2 , 0, '$n has defeated Brokentoe!', 14, 0, 100, 15, 0, 0, 15442, 0, 'Gurgthock'), +(18471, 3 , 0, 'The battle is about to begin! The unmerciful Murkblood twins versus $n!', 14, 0, 100, 15, 0, 0, 15461, 0, 'Gurgthock'), +(18471, 4 , 0, 'Unbelievable! $n has defeated the Murkblood twins!', 14, 0, 100, 15, 0, 0, 15462, 0, 'Gurgthock'), +(18471, 5 , 0, 'Hailing from the mountains of Blade\'s Edge comes Rokdar the Sundered Lord! $n is in for the fight of $g his:her, life.', 14, 0, 100, 15, 0, 0, 15467, 0, 'Gurgthock'), +(18471, 6 , 0, 'From parts unknown: Skra\'gath! Can $n possibly survive the onslaught of void energies?', 14, 0, 100, 15, 0, 0, 15473, 0, 'Gurgthock'), +(18471, 7 , 0, 'This is the moment we\'ve all been waiting for! The Warmaul champion is about to make his first showing at the Ring of Blood in weeks! Will $n go down in defeat as easily as the champion\'s other opponents? We shall see...', 14, 0, 100, 15, 0, 0, 15475, 0, 'Gurgthock'), +(18471, 8 , 0, '$n is victorious once more!', 14, 0, 100, 15, 0, 0, 15469, 0, 'Gurgthock'), +(18471, 9 , 1, 'All that\'s left of $n is a red stain on the floor!', 14, 0, 100, 15, 0, 0, 15485, 0, 'Gurgthock'), +(18471, 9, 0, '$n went down like a sack of orc skulls!', 14, 0, 100, 15, 0, 0, 15484, 0, 'Gurgthock'), +(18471, 10, 0, 'Mogor has challenged you. You have to accept! Get in the ring if you are ready to fight.', 12, 0, 100, 1, 0, 0, 15480, 0, 'Gurgthock'), +(18471, 11, 0, 'For the first time in the Ring of Blood\'s history, Mogor has chosen to exercise his right of battle! On this wartorn ground, $n will face Mogor, hero of the Warmaul!', 14, 0, 100, 15, 0, 0, 15481, 0, 'Gurgthock'), +(18471, 12, 0, '$n has defeated the hero of the Warmaul, Mogor! All hail $n!', 14, 0, 100, 15, 0, 0, 15482, 2, 'Gurgthock'), +(18471, 13, 0, '$n has been defeated!', 14, 0, 100, 15, 0, 0, 15443, 2, 'Gurgthock'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18471); +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 +(18471, 0, 0 , 0, 19, 0, 100, 0, 9962, 0, 0, 0, 0, 80, 1847100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Quest \'The Ring of Blood: Brokentoe\' Taken - Run Script'), +(18471, 0, 1 , 0, 19, 0, 100, 0, 9967, 0, 0, 0, 0, 80, 1847103, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Quest \'The Ring of Blood: The Blue Brothers\' Taken - Run Script'), +(18471, 0, 2 , 0, 19, 0, 100, 0, 9970, 0, 0, 0, 0, 80, 1847106, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Quest \'The Ring of Blood: Rokdar the Sundered Lord\' Taken - Run Script'), +(18471, 0, 3 , 0, 19, 0, 100, 0, 9972, 0, 0, 0, 0, 80, 1847109, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Quest \'The Ring of Blood: Skra\'gath\' Taken - Run Script'), +(18471, 0, 4 , 0, 19, 0, 100, 0, 9973, 0, 0, 0, 0, 80, 1847112, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Quest \'The Ring of Blood: The Warmaul Champion\' Taken - Run Script'), +(18471, 0, 5 , 0, 19, 0, 100, 0, 9977, 0, 0, 0, 0, 80, 1847115, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Quest \'The Ring of Blood: The Final Challenge\' Taken - Run Script'), +(18471, 0, 6 , 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 1847101, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 1 1 - Run Brokentoe Success Script'), +(18471, 0, 7 , 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 80, 1847102, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 2 2 - Run Brokentoe Failure Script'), +(18471, 0, 8 , 9, 77, 0, 100, 0, 1, 2, 0, 0, 0, 80, 1847104, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On 2 Twins Killed - Run Murkblood Twins Success Script'), +(18471, 0, 9 , 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 63, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On 2 Twins Killed - Reset Counter'), +(18471, 0, 10, 0, 38, 0, 100, 0, 5, 5, 0, 0, 0, 80, 1847105, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 5 5 - Run Murkblood Twins Failure Script'), +(18471, 0, 11, 0, 38, 0, 100, 0, 7, 7, 0, 0, 0, 80, 1847107, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 7 7 - Run Rokdar Success Script'), +(18471, 0, 12, 0, 38, 0, 100, 0, 8, 8, 0, 0, 0, 80, 1847108, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 8 8 - Run Rokdar Failure Script'), +(18471, 0, 13, 0, 38, 0, 100, 0, 10, 10, 0, 0, 0, 80, 1847110, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 10 10 - Run Skra\'gath Success Script'), +(18471, 0, 14, 0, 38, 0, 100, 0, 11, 11, 0, 0, 0, 80, 1847111, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 11 11 - Run Skra\'gath Failure Script'), +(18471, 0, 15, 0, 38, 0, 100, 0, 13, 13, 0, 0, 0, 80, 1847113, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 13 13 - Run Champion Success Script'), +(18471, 0, 16, 0, 38, 0, 100, 0, 14, 14, 0, 0, 0, 80, 1847114, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 14 14 - Run Champion Failure Script'), +(18471, 0, 17, 0, 38, 0, 100, 0, 16, 16, 0, 0, 0, 80, 1847116, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 16 16 - Run Mogor Success Script'), +(18471, 0, 18, 0, 38, 0, 100, 0, 17, 17, 0, 0, 0, 80, 1847117, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - On Data Set 17 17 - Run Mogor Failure Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` BETWEEN 1847100 AND 1847117); +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 +-- Brokentoe Spawn +(1847100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Spawn Script - Store Targetlist Invoker'), +(1847100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Spawn Script - Store Targetlist Invoker Party'), +(1847100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Spawn Script - Remove Npc Flags Questgiver'), +(1847100, 9, 3, 0, 0, 0, 100, 0, 3200, 3200, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Spawn Script - Say Line 0'), +(1847100, 9, 4, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Spawn Script - Say Line 1'), +(1847100, 9, 5, 0, 0, 0, 100, 0, 3400, 3400, 0, 0, 0, 12, 18398, 6, 5000, 0, 0, 0, 8, 0, 0, 0, 0, -709.046, 7882.44, 46.0542, 1.98968, 'Gurgthock - Brokentoe Spawn Script - Summon Creature \'Brokentoe\''), +-- Brokentoe Success +(1847101, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Success Script - Say Line 2'), +(1847101, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Success Script - Add Npc Flags Questgiver'), +(1847101, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 15, 9962, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Success Script - Quest Credit \'The Ring of Blood: Brokentoe\''), +-- Brokentoe Failure +(1847102, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 9, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Failure Script - Say Line 9'), +(1847102, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Failure Script - Add Npc Flags Questgiver'), +(1847102, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 6, 9962, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Brokentoe Failure Script - Fail Quest \'The Ring of Blood: Brokentoe\''), +-- Murkblood Twins Spawn +(1847103, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Spawn Script - Store Targetlist Invoker'), +(1847103, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Spawn Script - Store Targetlist Invoker Party for Quest Credit'), +(1847103, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Spawn Script - Remove Npc Flags Questgiver'), +(1847103, 9, 3, 0, 0, 0, 100, 0, 3200, 3200, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Spawn Script - Say Line 0'), +(1847103, 9, 4, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 0, 1, 3, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Spawn Script - Say Line 3'), +(1847103, 9, 5, 0, 0, 0, 100, 0, 3400, 3400, 0, 0, 0, 12, 18399, 6, 5000, 0, 0, 0, 8, 0, 0, 0, 0, -718.036, 7871.62, 45.2835, 1.5708, 'Gurgthock - Murkblood Twins Spawn Script - Summon Creature \'Murkblood Twin\''), +(1847103, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 12, 18399, 6, 5000, 0, 0, 0, 8, 0, 0, 0, 0, -696.431, 7883.26, 47.4277, 2.47837, 'Gurgthock - Murkblood Twins Spawn Script - Summon Creature \'Murkblood Twin\''), +-- (1847103, 9, 7, 0, 0, 0, 100, 0, 200, 200, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 18399, 100, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Spawn Script - Set Data 1 1 on Left Twin'), +-- (1847103, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 9, 18399, 0, 100, 1, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Spawn Script - Set Data 2 2 on Right Twin'), +(1847103, 9, 7, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 9, 18399, 0, 100, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Spawn Script - Send Target 1 to both Twins'), -- Attack Start on Stored Target within 1200ms if not already in combat +-- Murkblood Twins Success +(1847104, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 4, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Success Script - Say Line 4'), +(1847104, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Success Script - Add Npc Flags Questgiver'), +(1847104, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 15, 9967, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Success Script - Quest Credit \'The Ring of Blood: The Blue Brothers\''), +-- Murkblood Twins Failure +(1847105, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 9, 18399, 0, 200, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Failure Script - Despawn Twins for Safety'), +(1847105, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 9, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Failure Script - Say Line 9'), +(1847105, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Failure Script - Add Npc Flags Questgiver'), +(1847105, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 6, 9967, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Failure Script - Fail Quest \'The Ring of Blood: The Blue Brothers\''), +(1847105, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 63, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Murkblood Twins Failure Script - Reset Counter'), +-- Rokdar Spawn +(1847106, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Spawn Script - Store Targetlist Invoker'), +(1847106, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Spawn Script - Store Targetlist Invoker Party'), +(1847106, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Spawn Script - Remove Npc Flags Questgiver'), +(1847106, 9, 3, 0, 0, 0, 100, 0, 3200, 3200, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Spawn Script - Say Line 0'), +(1847106, 9, 4, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 0, 1, 5, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Spawn Script - Say Line 5'), +(1847106, 9, 5, 0, 0, 0, 100, 0, 3400, 3400, 0, 0, 0, 12, 18400, 6, 5000, 0, 0, 0, 8, 0, 0, 0, 0, -709.567, 7882.856, 46.109646, 1.9024088382720947, 'Gurgthock - Rokdar Spawn Script - Summon Creature \'Rokdar the Sundered Lord\''), +(1847106, 9, 6, 0, 0, 0, 100, 0, 200, 200, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 18400, 100, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Spawn Script - Send Stored Target to Rokdar'), +(1847106, 9, 7, 0, 0, 0, 100, 0, 200, 200, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 18400, 100, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Spawn Script - Set Data 1 1 on Rokdar'), -- Talk and Attack Stored Target within 2000ms if not already in combat +-- Rokdar Success +(1847107, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 8, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Success Script - Say Line 8'), +(1847107, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Success Script - Add Npc Flags Questgiver'), +(1847107, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 15, 9970, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Success Script - Quest Credit \'The Ring of Blood: Rokdar the Sundered Lord\''), +(1847107, 9, 3, 0, 0, 0, 100, 0, 5200, 5200, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 10, 48191, 18069, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Success Script - Mogor Say Line 1'), +-- Rokdar Failure +(1847108, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 9, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Failure Script - Say Line 9'), +(1847108, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Failure Script - Add Npc Flags Questgiver'), +(1847108, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 6, 9970, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Rokdar Failure Script - Fail Quest \'The Ring of Blood: Rokdar the Sundered Lord\''), +-- Skra'gath Spawn +(1847109, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Spawn Script - Store Targetlist Invoker'), +(1847109, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Spawn Script - Store Targetlist Invoker Party'), +(1847109, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Spawn Script - Remove Npc Flags Questgiver'), +(1847109, 9, 3, 0, 0, 0, 100, 0, 3200, 3200, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Spawn Script - Say Line 0'), +(1847109, 9, 4, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 0, 1, 6, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Spawn Script - Say Line 6'), +(1847109, 9, 5, 0, 0, 0, 100, 0, 3400, 3400, 0, 0, 0, 12, 18401, 6, 5000, 0, 0, 0, 8, 0, 0, 0, 0, -708.91364, 7883.2563, 46.199944, 1.832595705986023, 'Gurgthock - Skra\'gath Spawn Script - Summon Creature \'Skra\'gath\''), +(1847109, 9, 6, 0, 0, 0, 100, 0, 400, 400, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 18401, 100, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Spawn Script - Send Target 1'), +(1847109, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 18401, 100, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Spawn Script - Set Data 1 1 on Skra\'gath'), +-- Skra'gath Success +(1847110, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 8, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Success Script - Say Line 8'), +(1847110, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Success Script - Add Npc Flags Questgiver'), +(1847110, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 15, 9972, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Success Script - Quest Credit \'The Ring of Blood: Skra\'gath\''), +(1847110, 9, 3, 0, 0, 0, 100, 0, 5200, 5200, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 10, 48191, 18069, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Success Script - Mogor Say Line 2'), +-- Skra'gath Failure +(1847111, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 9, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Failure Script - Say Line 9'), +(1847111, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Failure Script - Add Npc Flags Questgiver'), +(1847111, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 6, 9972, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Skra\'gath Failure Script - Fail Quest \'The Ring of Blood: Skra\'gath\''), +-- Champion Spawn +(1847112, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Spawn Script - Store Targetlist Invoker'), +(1847112, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Spawn Script - Store Targetlist Invoker Party'), +(1847112, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Spawn Script - Remove Npc Flags Questgiver'), +(1847112, 9, 3, 0, 0, 0, 100, 0, 3200, 3200, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Spawn Script - Say Line 0'), +(1847112, 9, 4, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 0, 1, 7, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Spawn Script - Say Line 7'), +(1847112, 9, 5, 0, 0, 0, 100, 0, 3400, 3400, 0, 0, 0, 12, 18402, 6, 5000, 0, 0, 0, 8, 0, 0, 0, 0, -705.97473, 7866.7163, 45.06112, 1.5707963705062866, 'Gurgthock - Champion Spawn Script - Summon Creature \'Warmaul Champion\''), +(1847112, 9, 6, 0, 0, 0, 100, 0, 400, 400, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 18402, 100, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Spawn Script - Send Target 1'), +(1847112, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 18402, 100, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Spawn Script - Set Data 1 1 on Champion'), +-- Champion Success +(1847113, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 8, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Success Script - Say Line 8'), +(1847113, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Success Script - Add Npc Flags Questgiver'), +(1847113, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 15, 9973, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Success Script - Quest Credit \'The Ring of Blood: The Warmaul Champion\''), +(1847113, 9, 3, 0, 0, 0, 100, 0, 5200, 5200, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 10, 48191, 18069, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Success Script - Mogor Say Line 3'), +-- Champion Failure +(1847114, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 9, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Failure Script - Say Line 9'), +(1847114, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Failure Script - Add Npc Flags Questgiver'), +(1847114, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 6, 9973, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Champion Failure Script - Fail Quest \'The Ring of Blood: The Warmaul Champion\''), +-- Mogor Start +(1847115, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Start Script - Store Targetlist Invoker'), +(1847115, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Start Script - Store Targetlist Invoker Party'), +(1847115, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Start Script - Remove Npc Flags Questgiver'), +(1847115, 9, 3, 0, 0, 0, 100, 0, 3200, 3200, 0, 0, 0, 1, 10, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Start Script - Say Line 10'), +(1847115, 9, 4, 0, 0, 0, 100, 0, 11000, 11000, 0, 0, 0, 1, 11, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Start Script - Say Line 11'), +(1847115, 9, 5, 0, 0, 0, 100, 0, 3400, 3400, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 48191, 18069, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Start Script - Set Data 1 1'), +(1847115, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 10, 48191, 18069, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Start Script - Send Target 1'), +-- Mogor Success +(1847116, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 12, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Success Script - Say Line 12'), +(1847116, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 15, 9977, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Success Script - Quest Credit \'The Ring of Blood: The Final Challenge\''), +(1847116, 9, 2, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Success Script - Add Npc Flags Questgiver'), +-- Mogor Failure +(1847117, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 13, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Failure Script - Say Line 13'), +(1847117, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 82, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Failure Script - Add Npc Flags Questgiver'), +(1847117, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 6, 9977, 0, 0, 0, 0, 0, 12, 2, 0, 0, 0, 0, 0, 0, 0, 'Gurgthock - Mogor Failure Script - Fail Quest \'The Ring of Blood: The Final Challenge\''); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (18398, 18399, 18400, 18401, 18402)); +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 +(18398, 0, 0, 0, 0, 0, 100, 0, 1000, 1000, 9000, 11000, 0, 11, 32023, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Brokentoe - In Combat - Cast \'Hoof Stomp\''), +(18398, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Brokentoe - On Just Died - Set Data 1 1 on Gurgthock'), +(18398, 0, 2, 3, 1, 0, 100, 1, 30000, 30000, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Brokentoe - Out of Combat - Set Data 2 2 on Gurgthock (No Repeat)'), +(18398, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Brokentoe - Out of Combat - Despawn Instant (No Repeat)'), +(18398, 0, 4, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Brokentoe - On Aggro - Say Line 0'), + +(18399, 0, 0, 0, 0, 0, 100, 0, 1000, 1000, 2000, 2000, 0, 11, 14873, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - In Combat - Cast \'Sinister Strike\''), +(18399, 0, 1, 0, 0, 0, 100, 0, 5000, 6000, 11000, 12000, 0, 11, 15692, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - In Combat - Cast \'Eviscerate\''), +(18399, 0, 2, 0, 0, 0, 100, 0, 8000, 9000, 15000, 16000, 0, 11, 32319, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - In Combat - Cast \'Mutilate\''), +(18399, 0, 3, 0, 6, 0, 100, 1, 0, 0, 0, 0, 0, 63, 1, 1, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - On Just Died - Add to Counter for Victory Event'), +(18399, 0, 4, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 39, 25, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - On Aggro - Call For Help'), +(18399, 0, 5, 6, 1, 0, 100, 1, 30000, 30000, 0, 0, 0, 45, 5, 5, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - Out of Combat - Set Data 5 5 (No Repeat)'), +(18399, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 19, 18399, 100, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - Out of Combat - Despawn Instant (No Repeat)'), +(18399, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - Out of Combat - Despawn Instant (No Repeat)'), +(18399, 0, 8, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 87, 1839900, 1839901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - On Respawn - Run Random Script'), +-- (18399, 0, 8, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 1839900, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - On Data Set 1 1 - Run Left Script'), +-- (18399, 0, 9, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 80, 1839901, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Twin - On Data Set 2 2 - Run Right Script'), + +(18400, 0, 0, 0, 0, 0, 100, 0, 23000, 27000, 34000, 37000, 0, 11, 16727, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - In Combat - Cast \'War Stomp\''), +(18400, 0, 1, 0, 31, 0, 100, 0, 31389, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - On Target Spellhit \'Knock Away\' - Say Line 0'), +(18400, 0, 2, 0, 0, 0, 100, 0, 6000, 6000, 12000, 12000, 0, 11, 31389, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - In Combat - Cast \'Knock Away\''), +(18400, 0, 3, 0, 0, 0, 100, 0, 20000, 20000, 25000, 25000, 0, 11, 15976, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - In Combat - Cast \'Puncture\''), +(18400, 0, 4, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 45, 7, 7, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - On Just Died - Set Data 7 7'), +(18400, 0, 5, 6, 1, 0, 100, 1, 30000, 30000, 0, 0, 0, 45, 8, 8, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - Out of Combat - Set Data 8 8 (No Repeat)'), +(18400, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - Out of Combat - Despawn Instant (No Repeat)'), +(18400, 0, 7, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 1840000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - On Data Set 1 1 - Run Script'), + +(18401, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 29299, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Respawn - Cast \'Draining Touch\''), +(18401, 0, 1, 0, 0, 0, 100, 0, 6000, 9000, 24000, 27000, 0, 11, 16429, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - In Combat - Cast \'Piercing Shadow\''), +(18401, 0, 2, 8, 9, 0, 100, 0, 0, 5, 16000, 19000, 0, 11, 32324, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - Within 0-5 Range - Cast \'Shadow Burst\''), +(18401, 0, 3, 0, 0, 0, 100, 0, 12000, 15000, 33000, 37000, 0, 11, 32322, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - In Combat - Cast \'Dark Shriek\''), +(18401, 0, 4, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 45, 10, 10, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Just Died - Set Data 10 10'), +(18401, 0, 5, 6, 1, 0, 100, 1, 30000, 30000, 0, 0, 0, 45, 11, 11, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Skra\'gath - Out of Combat - Set Data 11 11 (No Repeat)'), +(18401, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - Out of Combat - Despawn Instant (No Repeat)'), +(18401, 0, 7, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 1840100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Data Set 1 1 - Run Script'), +(18401, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 14, 0, 100, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - After Shadow Burst - Wipe All Threat'), +(18401, 0, 9 , 10, 8, 1, 100, 0, 0, 2, 0, 0, 0, 11, 34336, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Holy\' - Cast \'Damage Reduction: Holy\' (Phase 1)'), +(18401, 0, 10, 11, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Holy\' - Say Line 1 (Phase 1)'), +(18401, 0, 11, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Holy\' - Set Event Phase 0 (Phase 1)'), +(18401, 0, 12, 13, 8, 1, 100, 0, 0, 4, 0, 0, 0, 11, 34333, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Fire\' - Cast \'Damage Reduction: Fire\' (Phase 1)'), +(18401, 0, 13, 14, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Fire\' - Say Line 2 (Phase 1)'), +(18401, 0, 14, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Holy\' - Set Event Phase 0 (Phase 1)'), +(18401, 0, 15, 16, 8, 1, 100, 0, 0, 8, 0, 0, 0, 11, 34335, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Nature\' - Cast \'Damage Reduction: Nature\' (Phase 1)'), +(18401, 0, 16, 17, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Nature\' - Say Line 3 (Phase 1)'), +(18401, 0, 17, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Holy\' - Set Event Phase 0 (Phase 1)'), +(18401, 0, 18, 19, 8, 1, 100, 0, 0, 16, 0, 0, 0, 11, 34334, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Frost\' - Cast \'Damage Reduction: Frost\' (Phase 1)'), +(18401, 0, 19, 20, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Frost\' - Say Line 4 (Phase 1)'), +(18401, 0, 20, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Holy\' - Set Event Phase 0 (Phase 1)'), +(18401, 0, 21, 22, 8, 1, 100, 0, 0, 32, 0, 0, 0, 11, 34338, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Shadow\' - Cast \'Damage Reduction: Shadow\' (Phase 1)'), +(18401, 0, 22, 23, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Shadow\' - Say Line 5 (Phase 1)'), +(18401, 0, 23, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Holy\' - Set Event Phase 0 (Phase 1)'), +(18401, 0, 24, 25, 8, 1, 100, 0, 0, 64, 0, 0, 0, 11, 34331, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Arcane\' - Cast \'Damage Reduction: Arcane\' (Phase 1)'), +(18401, 0, 25, 26, 61, 1, 100, 0, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Arcane\' - Say Line 6 (Phase 1)'), +(18401, 0, 26, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Spellhit \'Holy\' - Set Event Phase 0 (Phase 1)'), +(18401, 0, 27, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - On Aggro - Set Event Phase 1'), + +(18402, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 11, 31403, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - On Aggro - Cast \'Battle Shout\''), +(18402, 0, 1, 0, 9, 0, 100, 0, 8, 25, 23000, 25000, 0, 11, 32323, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - Within 8-25 Range - Cast \'Charge\''), +(18402, 0, 2, 0, 0, 0, 100, 0, 3000, 4000, 14000, 17000, 0, 11, 15708, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - In Combat - Cast \'Mortal Strike\''), +(18402, 0, 3, 0, 9, 0, 100, 0, 0, 5, 9000, 13000, 0, 11, 17963, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - Within 0-5 Range - Cast \'Sundering Cleave\''), +(18402, 0, 4, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 45, 13, 13, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - On Just Died - Set Data 13 13'), +(18402, 0, 5, 6, 1, 0, 100, 1, 30000, 30000, 0, 0, 0, 45, 14, 14, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - Out of Combat - Set Data 14 14 (No Repeat)'), +(18402, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - Out of Combat - Despawn Instant (No Repeat)'), +(18402, 0, 7, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 1840200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - On Data Set 1 1 - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1839900, 1839901, 1840000, 1840100, 1840200)); +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 +(1839900, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 5, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Right Murkblood Twin - Actionlist - Play Emote 71'), +(1839900, 9, 1, 0, 0, 0, 100, 0, 2200, 2200, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Right Murkblood Twin - Actionlist - Start Attacking'), + +(1839901, 9, 0, 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, 'Left Murkblood Twin - Actionlist - Say Line 0'), +(1839901, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Left Murkblood Twin - Actionlist - Start Attacking'), + +(1840000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - Actionlist - Say Line 0'), +(1840000, 9, 1, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Rokdar the Sundered Lord - Actionlist - Start Attacking'), + +(1840100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - Actionlist - Say Line 0'), +(1840100, 9, 1, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Skra\'gath - Actionlist - Start Attacking'), + +(1840200, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - Actionlist - Say Line 0'), +(1840200, 9, 1, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Warmaul Champion - Actionlist - Start Attacking'); + +-- Adjustments to Mogor script +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18069); +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 +(18069, 0, 0, 0, 9, 0, 100, 0, 0, 30, 6000, 8000, 0, 11, 16033, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Within 0-30 Range - Cast \'Chain Lightning\''), +(18069, 0, 1, 0, 9, 0, 100, 0, 0, 20, 8000, 18000, 0, 11, 39529, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Within 0-20 Range - Cast \'Flame Shock\''), +(18069, 0, 2, 0, 2, 0, 100, 0, 0, 50, 15000, 15000, 0, 11, 15982, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Between 0-50% Health - Cast \'Healing Wave\''), +(18069, 0, 3, 0, 0, 0, 100, 0, 3400, 6400, 13200, 26400, 0, 11, 18975, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - In Combat - Cast \'Summon Ice Totem\''), +(18069, 0, 5, 0, 2, 0, 100, 1, 0, 1, 1200, 1200, 0, 80, 1806902, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Between 0-1% Health - Run Script (No Repeat)'), +(18069, 0, 4, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 80, 1806900, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - On Data Set 1 1 - Run Script'), +-- (18069, 0, 6, 7, 1, 0, 100, 0, 45000, 45000, 45000, 45000, 0, 45, 17, 17, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Mogor - Out of Combat - Set Data 17 17 - Failure Event'), -- Does not work. Event seems to be queued until the condition (near Gurgthock) is passed +-- (18069, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Out of Combat - Despawn Instant - Failure Event'), +(18069, 0, 6, 7, 7, 0, 100, 0, 0, 0, 0, 0, 0, 45, 17, 17, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Mogor - On Evade - Set Data 17 17 - Failure Event'), -- This is where I gave up. Should be a timer but it did not work with OOC timers or event phases in cases of reset +(18069, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - On Evade - Despawn Instant - Failure Event'), +(18069, 0, 8, 9, 6, 0, 100, 0, 0, 0, 0, 0, 0, 45, 16, 16, 0, 0, 0, 0, 10, 66480, 18471, 0, 0, 0, 0, 0, 0, 'Mogor - On Just Died - Set Data 16 16 - Success Event'), +(18069, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 5000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - On Just Died - Despawn In 5000 ms'), +(18069, 0, 10, 0, 58, 0, 100, 0, 17, 1806900, 0, 0, 0, 80, 1806901, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - On Waypoint Finished - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1806900, 1806901, 1806902)); +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 +(1806900, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Say Line 4'), +(1806900, 9, 1, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 53, 0, 1806900, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Start Waypoint'), + +(1806901, 9, 0, 0, 0, 0, 100, 0, 500, 500, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Set Orientation Stored Target'), +(1806901, 9, 1, 0, 0, 0, 100, 0, 3200, 3200, 0, 0, 0, 1, 5, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Say Line 5'), +(1806901, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Set Invincibility Hp 1'), +(1806901, 9, 3, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 2, 14, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Set Faction 14'), +(1806901, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Set Event Phase 1'), +(1806901, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Set Reactstate Aggressive'), +(1806901, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Start Attacking Stored Target'), + +(1806902, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 11, 12141, 50, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Despawn Instant'), +(1806902, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Missing comment for action_type 27'), +(1806902, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Remove All Auras'), +(1806902, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 31261, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Cast \'Permanent Feign Death (Root)\''), +(1806902, 9, 4, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 11, 32343, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Cast \'Revive Self\''), +(1806902, 9, 5, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Remove All Auras'), +(1806902, 9, 6, 0, 0, 0, 100, 0, 1200, 1200, 0, 0, 0, 11, 28747, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Cast \'Frenzy\''), +(1806902, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Start Attacking'), +(1806902, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 6, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Say Line 6'), +(1806902, 9, 9, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mogor - Actionlist - Reset Invincibility Hp'); + +DELETE FROM `waypoints` WHERE `entry`=18069; -- Delete old one +DELETE FROM `waypoints` WHERE `entry`=1806900 AND `point_comment`='Mogor'; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `point_comment`) VALUES +(1806900,1 ,-714.55914,7927.985,58.98062,NULL,'Mogor'), +(1806900,2 ,-715.80914,7925.235,59.23062,NULL,'Mogor'), +(1806900,3 ,-716.05914,7924.235,59.48062,NULL,'Mogor'), +(1806900,4 ,-717.30914,7920.735,58.98062,NULL,'Mogor'), +(1806900,5 ,-718.05914,7918.985,58.23062,NULL,'Mogor'), +(1806900,6 ,-718.80914,7916.985,57.98062,NULL,'Mogor'), +(1806900,7 ,-719.30914,7916.235,57.23062,NULL,'Mogor'), +(1806900,8 ,-719.55914,7915.235,56.48062,NULL,'Mogor'), +(1806900,9 ,-720.21796,7914.135,55.32333,NULL,'Mogor'), +(1806900,10,-720.4691,7905.346,50.524868,NULL,'Mogor'), +(1806900,11,-720.1519,7905.2637,50.770866,NULL,'Mogor'), +(1806900,12,-719.6519,7904.5137,50.520866,NULL,'Mogor'), +(1806900,13,-719.4019,7903.5137,50.020866,NULL,'Mogor'), +(1806900,14,-718.4019,7902.0137,49.770866,NULL,'Mogor'), +(1806900,15,-717.6519,7900.2637,49.520866,NULL,'Mogor'), +(1806900,16,-716.9019,7898.5137,49.270866,NULL,'Mogor'), +(1806900,17,-715.9375,7896.4297,48.333324,NULL,'Mogor'); From 73e289ad95c551b9ba4822c6149bcc98c3422665 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Thu, 2 Mar 2023 01:21:27 +0000 Subject: [PATCH 015/159] chore(DB): import pending files Referenced commit(s): d3baf668b260b00661f9de2aa37598a0eca236bd --- .../rev_1677368120858755900.sql => db_world/2023_03_02_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1677368120858755900.sql => db_world/2023_03_02_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1677368120858755900.sql b/data/sql/updates/db_world/2023_03_02_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677368120858755900.sql rename to data/sql/updates/db_world/2023_03_02_00.sql index 245a0b692..ea96d5be7 100644 --- a/data/sql/updates/pending_db_world/rev_1677368120858755900.sql +++ b/data/sql/updates/db_world/2023_03_02_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_01_07 -> 2023_03_02_00 -- Gurthock Gossip DELETE FROM `gossip_menu` WHERE (`MenuID` = 7699); INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES From 9f9b320e66f421c1c9b6886bad58166f7b9c9ef4 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Fri, 3 Mar 2023 10:47:51 +0200 Subject: [PATCH 016/159] fix(DB/Conditions): Show correct Zorbin Fandazzle gossip on quests rewarded. (#15216) --- .../sql/updates/pending_db_world/rev_1677450429923552400.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677450429923552400.sql diff --git a/data/sql/updates/pending_db_world/rev_1677450429923552400.sql b/data/sql/updates/pending_db_world/rev_1677450429923552400.sql new file mode 100644 index 000000000..a02537abd --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677450429923552400.sql @@ -0,0 +1,5 @@ +-- Zorbin Fandazzle - show gossip menu if Quests Zapped Giants (7003) and Fuel for the Zapping (7721) are rewarded +DELETE FROM `conditions` WHERE `SourceGroup` = 11361 AND `SourceTypeOrReferenceId` = 14 AND `ConditionValue1` IN (7003, 7721); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(14, 11361, 7116, 0, 0, 8, 0, 7003, 0, 0, 0, 0, 0, '', '(AND) Zorbin Fandazzle - Show gossip menu if Quests Zapped Giants is rewarded'), +(14, 11361, 7116, 0, 0, 8, 0, 7721, 0, 0, 0, 0, 0, '', '(AND) Zorbin Fandazzle - Show gossip menu if Fuel for the Zapping is rewarded'); From 7a78146498f8064da99cf899d2d8b33030d2f0ef Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Fri, 3 Mar 2023 08:50:15 +0000 Subject: [PATCH 017/159] chore(DB): import pending files Referenced commit(s): 9f9b320e66f421c1c9b6886bad58166f7b9c9ef4 --- .../rev_1677450429923552400.sql => db_world/2023_03_03_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1677450429923552400.sql => db_world/2023_03_03_00.sql} (94%) diff --git a/data/sql/updates/pending_db_world/rev_1677450429923552400.sql b/data/sql/updates/db_world/2023_03_03_00.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1677450429923552400.sql rename to data/sql/updates/db_world/2023_03_03_00.sql index a02537abd..83087f9cb 100644 --- a/data/sql/updates/pending_db_world/rev_1677450429923552400.sql +++ b/data/sql/updates/db_world/2023_03_03_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_02_00 -> 2023_03_03_00 -- Zorbin Fandazzle - show gossip menu if Quests Zapped Giants (7003) and Fuel for the Zapping (7721) are rewarded DELETE FROM `conditions` WHERE `SourceGroup` = 11361 AND `SourceTypeOrReferenceId` = 14 AND `ConditionValue1` IN (7003, 7721); INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES From 86b0b3dbde65f632c16ef69d85ac751067dc6578 Mon Sep 17 00:00:00 2001 From: M'Dic Date: Fri, 3 Mar 2023 17:51:02 -0500 Subject: [PATCH 018/159] fix(Core/Warden): FMT (#15254) --- src/server/game/Warden/Warden.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/game/Warden/Warden.cpp b/src/server/game/Warden/Warden.cpp index 3cc6019cb..1faae7f1e 100644 --- a/src/server/game/Warden/Warden.cpp +++ b/src/server/game/Warden/Warden.cpp @@ -240,14 +240,14 @@ void Warden::ApplyPenalty(uint16 checkId, std::string const& reason) { if (Player const* plr = _session->GetPlayer()) { - std::string const reportFormat = "Player %s (guid %u, account id: %u) failed warden %u check (%s). Action: %s"; + std::string const reportFormat = "Player {} (guid {}, account id: {}) failed warden {} check ({}). Action: {}"; reportMsg = Acore::StringFormat(reportFormat, plr->GetName().c_str(), plr->GetGUID().GetCounter(), _session->GetAccountId(), checkId, ((checkData && !checkData->Comment.empty()) ? checkData->Comment.c_str() : ""), GetWardenActionStr(action).c_str()); } else { - std::string const reportFormat = "Account id: %u failed warden %u check. Action: %s"; + std::string const reportFormat = "Account id: {} failed warden {} check. Action: {}"; reportMsg = Acore::StringFormat(reportFormat, _session->GetAccountId(), checkId, GetWardenActionStr(action).c_str()); } } @@ -255,12 +255,12 @@ void Warden::ApplyPenalty(uint16 checkId, std::string const& reason) { if (Player const* plr = _session->GetPlayer()) { - std::string const reportFormat = "Player %s (guid %u, account id: %u) triggered warden penalty by reason: %s. Action: %s"; + std::string const reportFormat = "Player {} (guid {}, account id: {}) triggered warden penalty by reason: {}. Action: {}"; reportMsg = Acore::StringFormat(reportFormat, plr->GetName().c_str(), plr->GetGUID().GetCounter(), _session->GetAccountId(), causeMsg.c_str(), GetWardenActionStr(action).c_str()); } else { - std::string const reportFormat = "Account id: %u failed warden %u check. Action: %s"; + std::string const reportFormat = "Account id: {} failed warden {} check. Action: {}"; reportMsg = Acore::StringFormat(reportFormat, _session->GetAccountId(), causeMsg.c_str(), GetWardenActionStr(action).c_str()); } } From 23fbdd0fe3b6d74816411feb4c00f88a5d54c08a Mon Sep 17 00:00:00 2001 From: IntelligentQuantum Date: Sat, 4 Mar 2023 12:22:22 +0330 Subject: [PATCH 019/159] fix(Core/Scripts): Zort's Protective Elixir (#14365) --- .../rev_1671948396193749028.sql | 3 ++ .../scripts/Northrend/zone_dragonblight.cpp | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1671948396193749028.sql diff --git a/data/sql/updates/pending_db_world/rev_1671948396193749028.sql b/data/sql/updates/pending_db_world/rev_1671948396193749028.sql new file mode 100644 index 000000000..852260c1f --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1671948396193749028.sql @@ -0,0 +1,3 @@ +-- +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_dragonblight_corrosive_spit'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (47447, 'spell_dragonblight_corrosive_spit'); diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 7b78d8d11..56905fbbe 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -26,6 +26,7 @@ #include "ScriptedCreature.h" #include "ScriptedGossip.h" #include "SpellAuras.h" +#include "SpellAuraEffects.h" #include "SpellScript.h" #include "Vehicle.h" @@ -2258,6 +2259,38 @@ public: } }; +// 47447 - Corrosive Spit +class spell_dragonblight_corrosive_spit : public AuraScript +{ + PrepareAuraScript(spell_dragonblight_corrosive_spit); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo({ uint32(spellInfo->GetEffect(EFFECT_0).CalcValue()) }); + } + + void AfterApply(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + if (GetTarget()->HasAura(aurEff->GetSpellInfo()->GetEffect(EFFECT_0).CalcValue())) + GetAura()->Remove(); + } + + void PeriodicTick(AuraEffect const* aurEff) + { + if (GetTarget()->HasAura(aurEff->GetSpellInfo()->GetEffect(EFFECT_0).CalcValue())) + { + PreventDefaultAction(); + GetAura()->Remove(); + } + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_dragonblight_corrosive_spit::AfterApply, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_dragonblight_corrosive_spit::PeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE); + } +}; + void AddSC_dragonblight() { // Ours @@ -2287,4 +2320,6 @@ void AddSC_dragonblight() new spell_q12096_q12092_dummy(); new spell_q12096_q12092_bark(); new npc_torturer_lecraft(); + + RegisterSpellScript(spell_dragonblight_corrosive_spit); } From 5b0b02259bedc68ab757814bee1cc7194cde3b82 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 4 Mar 2023 08:54:53 +0000 Subject: [PATCH 020/159] chore(DB): import pending files Referenced commit(s): 23fbdd0fe3b6d74816411feb4c00f88a5d54c08a --- .../rev_1671948396193749028.sql => db_world/2023_03_04_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1671948396193749028.sql => db_world/2023_03_04_00.sql} (82%) diff --git a/data/sql/updates/pending_db_world/rev_1671948396193749028.sql b/data/sql/updates/db_world/2023_03_04_00.sql similarity index 82% rename from data/sql/updates/pending_db_world/rev_1671948396193749028.sql rename to data/sql/updates/db_world/2023_03_04_00.sql index 852260c1f..c50a1d704 100644 --- a/data/sql/updates/pending_db_world/rev_1671948396193749028.sql +++ b/data/sql/updates/db_world/2023_03_04_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_03_00 -> 2023_03_04_00 -- DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_dragonblight_corrosive_spit'; INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (47447, 'spell_dragonblight_corrosive_spit'); From 428f8e0aaa62c144c3e6571607360bcc63110ce0 Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Sat, 4 Mar 2023 12:31:05 -0300 Subject: [PATCH 021/159] fix: Crash on unit charm (#15256) --- src/server/game/Entities/Unit/Unit.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7bdb3d14b..0321294eb 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -15888,7 +15888,10 @@ bool CharmInfo::AddSpellToActionBar(SpellInfo const* spellInfo, ActiveStates new { WorldPacket data; creature->BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, spell_id, cooldown); - creature->GetCharmer()->ToPlayer()->SendDirectMessage(&data); + if (creature->GetCharmer() && creature->GetCharmer()->IsPlayer()) + { + creature->GetCharmer()->ToPlayer()->SendDirectMessage(&data); + } } }, 500ms); } From 0f9a4e15d5f5eb9406f51187d7eecea44723a526 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 4 Mar 2023 15:42:29 -0300 Subject: [PATCH 022/159] refactor(Scripts/Steamvault): Modernize boss/instance scripts (#15224) --- .../SteamVault/boss_hydromancer_thespia.cpp | 119 ++++----- .../SteamVault/boss_mekgineer_steamrigger.cpp | 235 ++++++++---------- .../SteamVault/boss_warlord_kalithresh.cpp | 184 ++++++-------- .../SteamVault/instance_steam_vault.cpp | 207 +++++---------- .../SteamVault/steam_vault.h | 18 +- 5 files changed, 300 insertions(+), 463 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 87523b579..3ff8a02f2 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_hydromancer_thespia.cpp @@ -35,90 +35,63 @@ enum HydromancerThespia EVENT_SPELL_ENVELOPING = 3 }; -class boss_hydromancer_thespia : public CreatureScript +struct boss_hydromancer_thespia : public BossAI { -public: - boss_hydromancer_thespia() : CreatureScript("boss_hydromancer_thespia") { } + boss_hydromancer_thespia(Creature* creature) : BossAI(creature, DATA_HYDROMANCER_THESPIA) { } - CreatureAI* GetAI(Creature* creature) const override + void JustDied(Unit* /*killer*/) override { - return GetSteamVaultAI(creature); + _JustDied(); + Talk(SAY_DEAD); } - struct boss_thespiaAI : public ScriptedAI + void KilledUnit(Unit* victim) override { - boss_thespiaAI(Creature* creature) : ScriptedAI(creature) + if (victim->IsPlayer()) + Talk(SAY_SLAY); + } + + void JustEngagedWith(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + _JustEngagedWith(); + events.ScheduleEvent(EVENT_SPELL_LIGHTNING, 15000); + events.ScheduleEvent(EVENT_SPELL_LUNG, 7000); + events.ScheduleEvent(EVENT_SPELL_ENVELOPING, 9000); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + switch (events.ExecuteEvent()) { - instance = creature->GetInstanceScript(); + case EVENT_SPELL_LIGHTNING: + for (uint8 i = 0; i < DUNGEON_MODE(1, 2); ++i) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) + me->CastSpell(target, SPELL_LIGHTNING_CLOUD, false); + events.RepeatEvent(urand(15000, 25000)); + break; + case EVENT_SPELL_LUNG: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) + DoCast(target, SPELL_LUNG_BURST); + events.RepeatEvent(urand(7000, 12000)); + break; + case EVENT_SPELL_ENVELOPING: + for (uint8 i = 0; i < DUNGEON_MODE(1, 2); ++i) + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) + me->CastSpell(target, SPELL_ENVELOPING_WINDS, false); + events.RepeatEvent(urand(10000, 15000)); + break; } - InstanceScript* instance; - EventMap events; - - void Reset() override - { - events.Reset(); - if (instance) - instance->SetData(TYPE_HYDROMANCER_THESPIA, NOT_STARTED); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEAD); - if (instance) - instance->SetData(TYPE_HYDROMANCER_THESPIA, DONE); - } - - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); - } - - void JustEngagedWith(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SPELL_LIGHTNING, 15000); - events.ScheduleEvent(EVENT_SPELL_LUNG, 7000); - events.ScheduleEvent(EVENT_SPELL_ENVELOPING, 9000); - - if (instance) - instance->SetData(TYPE_HYDROMANCER_THESPIA, IN_PROGRESS); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_LIGHTNING: - for (uint8 i = 0; i < DUNGEON_MODE(1, 2); ++i) - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_LIGHTNING_CLOUD, false); - events.RepeatEvent(urand(15000, 25000)); - break; - case EVENT_SPELL_LUNG: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - DoCast(target, SPELL_LUNG_BURST); - events.RepeatEvent(urand(7000, 12000)); - break; - case EVENT_SPELL_ENVELOPING: - for (uint8 i = 0; i < DUNGEON_MODE(1, 2); ++i) - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_ENVELOPING_WINDS, false); - events.RepeatEvent(urand(10000, 15000)); - break; - } - - DoMeleeAttackIfReady(); - } - }; + DoMeleeAttackIfReady(); + } }; void AddSC_boss_hydromancer_thespia() { - new boss_hydromancer_thespia(); + RegisterSteamvaultCreatureAI(boss_hydromancer_thespia); } 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 6c2356e88..c5c4612d9 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp @@ -42,171 +42,140 @@ enum MekgineerSteamrigger EVENT_SPELL_NET = 6 }; -class boss_mekgineer_steamrigger : public CreatureScript +struct boss_mekgineer_steamrigger : public BossAI { -public: - boss_mekgineer_steamrigger() : CreatureScript("boss_mekgineer_steamrigger") { } + boss_mekgineer_steamrigger(Creature* creature) : BossAI(creature, DATA_MEKGINEER_STEAMRIGGER) { } - CreatureAI* GetAI(Creature* creature) const override + void JustDied(Unit* /*killer*/) override { - return GetSteamVaultAI(creature); + Talk(SAY_DEATH); + _JustDied(); } - struct boss_mekgineer_steamriggerAI : public ScriptedAI + void KilledUnit(Unit* victim) override { - boss_mekgineer_steamriggerAI(Creature* creature) : ScriptedAI(creature) + if (victim->IsPlayer()) + Talk(SAY_SLAY); + } + + void JustEngagedWith(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + _JustEngagedWith(); + events.ScheduleEvent(EVENT_SPELL_SHRINK, 20000); + events.ScheduleEvent(EVENT_SPELL_SAW, 15000); + events.ScheduleEvent(EVENT_SPELL_NET, 10000); + 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()) { - instance = creature->GetInstanceScript(); - } - - InstanceScript* instance; - EventMap events; - - void Reset() override - { - events.Reset(); - if (instance) - instance->SetData(TYPE_MEKGINEER_STEAMRIGGER, NOT_STARTED); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - if (instance) - instance->SetData(TYPE_MEKGINEER_STEAMRIGGER, DONE); - } - - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); - } - - void JustEngagedWith(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SPELL_SHRINK, 20000); - events.ScheduleEvent(EVENT_SPELL_SAW, 15000); - events.ScheduleEvent(EVENT_SPELL_NET, 10000); - events.ScheduleEvent(EVENT_CHECK_HP75, 5000); - events.ScheduleEvent(EVENT_CHECK_HP50, 5000); - events.ScheduleEvent(EVENT_CHECK_HP25, 5000); - - if (instance) - instance->SetData(TYPE_MEKGINEER_STEAMRIGGER, IN_PROGRESS); - } - - 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()) + case EVENT_SPELL_SHRINK: + me->CastSpell(me->GetVictim(), SPELL_SUPER_SHRINK_RAY, false); + events.RepeatEvent(20000); + 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.RepeatEvent(15000); + break; + case EVENT_SPELL_NET: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) + me->CastSpell(target, SPELL_ELECTRIFIED_NET, false); + events.RepeatEvent(10000); + break; + case EVENT_CHECK_HP25: + case EVENT_CHECK_HP50: + case EVENT_CHECK_HP75: + if (me->HealthBelowPct(eventId * 25)) { - case EVENT_SPELL_SHRINK: - me->CastSpell(me->GetVictim(), SPELL_SUPER_SHRINK_RAY, false); - events.RepeatEvent(20000); - 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.RepeatEvent(15000); - break; - case EVENT_SPELL_NET: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_ELECTRIFIED_NET, false); - events.RepeatEvent(10000); - break; - case EVENT_CHECK_HP25: - case EVENT_CHECK_HP50: - case EVENT_CHECK_HP75: - if (me->HealthBelowPct(eventId * 25)) - { - SummonMechanics(); - return; - } - events.RepeatEvent(2000); - break; + SummonMechanics(); + return; } - - DoMeleeAttackIfReady(); + events.RepeatEvent(2000); + break; } - }; + + DoMeleeAttackIfReady(); + } }; -class npc_steamrigger_mechanic : public CreatureScript +struct npc_steamrigger_mechanic : public ScriptedAI { -public: - npc_steamrigger_mechanic() : CreatureScript("npc_steamrigger_mechanic") { } + npc_steamrigger_mechanic(Creature* creature) : ScriptedAI(creature) { } - CreatureAI* GetAI(Creature* creature) const override + void Reset() override { - return GetSteamVaultAI(creature); + _scheduler.CancelAll(); } - struct npc_steamrigger_mechanicAI : public ScriptedAI + void JustEngagedWith(Unit* victim) override { - npc_steamrigger_mechanicAI(Creature* creature) : ScriptedAI(creature) - { - } + ScriptedAI::JustEngagedWith(victim); - uint32 repairTimer; - ObjectGuid bossGUID; - - void Reset() override + _scheduler.Schedule(2s, [this](TaskContext context) { - repairTimer = 0; - bossGUID.Clear(); if (InstanceScript* instance = me->GetInstanceScript()) - bossGUID = instance->GetGuidData(TYPE_MEKGINEER_STEAMRIGGER); - } - - void MoveInLineOfSight(Unit* /*who*/) override {} - - void UpdateAI(uint32 diff) override - { - repairTimer += diff; - if (repairTimer >= 2000) { - repairTimer = 0; - if (Unit* boss = ObjectAccessor::GetUnit(*me, bossGUID)) + 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); + } + } } - return; } - if (!UpdateVictim()) - return; + context.Repeat(); + }); + } - DoMeleeAttackIfReady(); - } - }; + void MoveInLineOfSight(Unit* /*who*/) override {} + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + _scheduler.Update(diff, + std::bind(&BossAI::DoMeleeAttackIfReady, this)); + } + + private: + TaskScheduler _scheduler; }; void AddSC_boss_mekgineer_steamrigger() { - new boss_mekgineer_steamrigger(); - new npc_steamrigger_mechanic(); + RegisterSteamvaultCreatureAI(boss_mekgineer_steamrigger); + RegisterSteamvaultCreatureAI(npc_steamrigger_mechanic); } 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 704c88d31..4a7b5caa7 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp @@ -41,146 +41,106 @@ enum NagaDistiller EVENT_SPELL_RAGE = 3 }; -class boss_warlord_kalithresh : public CreatureScript +struct boss_warlord_kalithresh : public BossAI { -public: - boss_warlord_kalithresh() : CreatureScript("boss_warlord_kalithresh") { } + boss_warlord_kalithresh(Creature* creature) : BossAI(creature, DATA_WARLORD_KALITHRESH) { } - CreatureAI* GetAI(Creature* creature) const override + void JustEngagedWith(Unit* /*who*/) override { - return GetSteamVaultAI(creature); + Talk(SAY_AGGRO); + _JustEngagedWith(); + events.ScheduleEvent(EVENT_SPELL_REFLECTION, 10000); + events.ScheduleEvent(EVENT_SPELL_IMPALE, urand(7000, 14000)); + events.ScheduleEvent(EVENT_SPELL_RAGE, 20000); } - struct boss_warlord_kalithreshAI : public ScriptedAI + void KilledUnit(Unit* victim) override { - boss_warlord_kalithreshAI(Creature* creature) : ScriptedAI(creature) + if (victim->IsPlayer()) { - instance = creature->GetInstanceScript(); + Talk(SAY_SLAY); } + } - InstanceScript* instance; - EventMap events; + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + _JustDied(); + } - void Reset() override + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + switch (events.ExecuteEvent()) { - events.Reset(); - if (instance) - instance->SetData(TYPE_WARLORD_KALITHRESH, NOT_STARTED); - } - - void JustEngagedWith(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SPELL_REFLECTION, 10000); - events.ScheduleEvent(EVENT_SPELL_IMPALE, urand(7000, 14000)); - events.ScheduleEvent(EVENT_SPELL_RAGE, 20000); - - if (instance) - instance->SetData(TYPE_WARLORD_KALITHRESH, IN_PROGRESS); - } - - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - if (instance) - instance->SetData(TYPE_WARLORD_KALITHRESH, DONE); - } - - 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.RepeatEvent(urand(15000, 20000)); + break; + case EVENT_SPELL_IMPALE: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f, true)) + me->CastSpell(target, SPELL_IMPALE, false); + events.RepeatEvent(urand(7500, 12500)); + break; + case EVENT_SPELL_RAGE: + if (Creature* distiller = me->FindNearestCreature(NPC_NAGA_DISTILLER, 100.0f)) { - case EVENT_SPELL_REFLECTION: - me->CastSpell(me, SPELL_SPELL_REFLECTION, false); - events.RepeatEvent(urand(15000, 20000)); - break; - case EVENT_SPELL_IMPALE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f, true)) - me->CastSpell(target, SPELL_IMPALE, false); - events.RepeatEvent(urand(7500, 12500)); - 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; + Talk(SAY_REGEN); + //me->CastSpell(me, SPELL_WARLORDS_RAGE, false); + distiller->AI()->DoAction(1); } - - DoMeleeAttackIfReady(); + events.RepeatEvent(45000); + break; } - }; + + DoMeleeAttackIfReady(); + } }; -class npc_naga_distiller : public CreatureScript +struct npc_naga_distiller : public NullCreatureAI { -public: - npc_naga_distiller() : CreatureScript("npc_naga_distiller") { } + npc_naga_distiller(Creature* creature) : NullCreatureAI(creature) { } - CreatureAI* GetAI(Creature* creature) const override + uint32 spellTimer; + + void Reset() override { - return GetSteamVaultAI(creature); + spellTimer = 0; + me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } - struct npc_naga_distillerAI : public NullCreatureAI + void DoAction(int32 param) override { - npc_naga_distillerAI(Creature* creature) : NullCreatureAI(creature) + 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) { - instance = creature->GetInstanceScript(); - } - - InstanceScript* instance; - uint32 spellTimer; - - void Reset() override - { - 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) + spellTimer += diff; + if (spellTimer >= 12000) { - spellTimer += diff; - if (spellTimer >= 12000) - { - if (Creature* kali = me->FindNearestCreature(NPC_WARLORD_KALITHRESH, 100.0f)) - kali->CastSpell(kali, SPELL_WARLORDS_RAGE_PROC, true); - me->KillSelf(); - } + if (Creature* kali = me->FindNearestCreature(NPC_WARLORD_KALITHRESH, 100.0f)) + kali->CastSpell(kali, SPELL_WARLORDS_RAGE_PROC, true); + me->KillSelf(); } } - }; + } }; void AddSC_boss_warlord_kalithresh() { - new boss_warlord_kalithresh(); - new npc_naga_distiller(); + RegisterSteamvaultCreatureAI(boss_warlord_kalithresh); + RegisterSteamvaultCreatureAI(npc_naga_distiller); } 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 14093447a..5ec64023d 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp @@ -26,71 +26,62 @@ public: bool OnGossipHello(Player* /*player*/, GameObject* go) override { - InstanceScript* instance = go->GetInstanceScript(); - if (!instance) - return false; - - if (go->GetEntry() == GO_ACCESS_PANEL_HYDRO) - if (instance->GetData(TYPE_HYDROMANCER_THESPIA) == DONE) + if (InstanceScript* instance = go->GetInstanceScript()) + { + if (go->GetEntry() == GO_ACCESS_PANEL_HYDRO) { - go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - instance->SetData(TYPE_HYDROMANCER_THESPIA, SPECIAL); + if (instance->GetBossState(DATA_HYDROMANCER_THESPIA) == DONE) + { + go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); + } + } + else + { + if (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE) + { + go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); + } } - if (go->GetEntry() == GO_ACCESS_PANEL_MEK) - if (instance->GetData(TYPE_MEKGINEER_STEAMRIGGER) == DONE) + if (instance->GetBossState(DATA_HYDROMANCER_THESPIA) == DONE && instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE) { - go->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - instance->SetData(TYPE_MEKGINEER_STEAMRIGGER, SPECIAL); + if (GameObject* mainGate = instance->GetGameObject(DATA_MAIN_CHAMBERS_DOOR)) + { + instance->HandleGameObject(ObjectGuid::Empty, true, mainGate); + } } - return true; + return true; + } + + return false; } }; +ObjectData const creatureData[] = +{ + { NPC_MEKGINEER_STEAMRIGGER, DATA_MEKGINEER_STEAMRIGGER } +}; + +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 } +}; + class instance_steam_vault : public InstanceMapScript { public: instance_steam_vault() : InstanceMapScript("instance_steam_vault", 545) { } - InstanceScript* GetInstanceScript(InstanceMap* map) const override - { - return new instance_steam_vault_InstanceMapScript(map); - } - struct instance_steam_vault_InstanceMapScript : public InstanceScript { - instance_steam_vault_InstanceMapScript(Map* map) : InstanceScript(map) {} - - uint32 m_auiEncounter[MAX_ENCOUNTER]; - - ObjectGuid MekgineerGUID; - ObjectGuid MainChambersDoor; - ObjectGuid AccessPanelHydro; - ObjectGuid AccessPanelMek; - - void Initialize() override + instance_steam_vault_InstanceMapScript(Map* map) : InstanceScript(map) { - memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); - } - - bool IsEncounterInProgress() const override - { - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) - if (m_auiEncounter[i] == IN_PROGRESS) - return true; - - return false; - } - - void OnCreatureCreate(Creature* creature) override - { - switch (creature->GetEntry()) - { - case NPC_MEKGINEER_STEAMRIGGER: - MekgineerGUID = creature->GetGUID(); - break; - } + SetHeaders(DataHeaders); + SetBossNumber(EncounterCount); + LoadObjectData(creatureData, objectData); } void OnGameObjectCreate(GameObject* go) override @@ -98,122 +89,56 @@ public: switch (go->GetEntry()) { case GO_MAIN_CHAMBERS_DOOR: - MainChambersDoor = go->GetGUID(); - if (GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL && GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL) + if (GetBossState(DATA_HYDROMANCER_THESPIA) == DONE && GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE) HandleGameObject(ObjectGuid::Empty, true, go); break; case GO_ACCESS_PANEL_HYDRO: - AccessPanelHydro = go->GetGUID(); - if (GetData(TYPE_HYDROMANCER_THESPIA) == DONE) + if (GetBossState(DATA_HYDROMANCER_THESPIA) == DONE) go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - else if (GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL) + else if (GetBossState(DATA_HYDROMANCER_THESPIA) == SPECIAL) HandleGameObject(ObjectGuid::Empty, true, go); break; case GO_ACCESS_PANEL_MEK: - AccessPanelMek = go->GetGUID(); - if (GetData(TYPE_MEKGINEER_STEAMRIGGER) == DONE) + if (GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE) go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - else if (GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL) + else if (GetBossState(DATA_MEKGINEER_STEAMRIGGER) == SPECIAL) HandleGameObject(ObjectGuid::Empty, true, go); break; } + + InstanceScript::OnGameObjectCreate(go); } - void SetData(uint32 type, uint32 data) override + bool SetBossState(uint32 bossId, EncounterState state) override { - switch (type) + if (!InstanceScript::SetBossState(bossId, state)) { - case TYPE_HYDROMANCER_THESPIA: - if (data == SPECIAL) - { - if (GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL) - HandleGameObject(MainChambersDoor, true); - } - else if (data == DONE) - { - if (GameObject* panel = instance->GetGameObject(AccessPanelHydro)) - panel->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - } - - m_auiEncounter[type] = data; - break; - case TYPE_MEKGINEER_STEAMRIGGER: - if (data == SPECIAL) - { - if (GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL) - HandleGameObject(MainChambersDoor, true); - } - else if (data == DONE) - { - if (GameObject* panel = instance->GetGameObject(AccessPanelMek)) - panel->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - } - - m_auiEncounter[type] = data; - break; - case TYPE_WARLORD_KALITHRESH: - m_auiEncounter[type] = data; - break; + return false; } - if (data == DONE || data == SPECIAL) - SaveToDB(); - } - - uint32 GetData(uint32 type) const override - { - switch (type) + if (bossId == DATA_HYDROMANCER_THESPIA && state == DONE) { - case TYPE_HYDROMANCER_THESPIA: - case TYPE_MEKGINEER_STEAMRIGGER: - case TYPE_WARLORD_KALITHRESH: - return m_auiEncounter[type]; - } - return 0; - } - - ObjectGuid GetGuidData(uint32 data) const override - { - if (data == TYPE_MEKGINEER_STEAMRIGGER) - return MekgineerGUID; - - return ObjectGuid::Empty; - } - - std::string GetSaveData() override - { - OUT_SAVE_INST_DATA; - - std::ostringstream stream; - stream << "S V " << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2]; - - OUT_SAVE_INST_DATA_COMPLETE; - return stream.str(); - } - - void Load(const char* strIn) override - { - if (!strIn) - { - OUT_LOAD_INST_DATA_FAIL; - return; - } - - char dataHead1, dataHead2; - std::istringstream loadStream(strIn); - loadStream >> dataHead1 >> dataHead2; - - if (dataHead1 == 'S' && dataHead2 == 'V') - for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) + if (GameObject* panel = GetGameObject(DATA_ACCESS_PANEL_HYDROMANCER)) { - loadStream >> m_auiEncounter[i]; - if (m_auiEncounter[i] == IN_PROGRESS) - m_auiEncounter[i] = NOT_STARTED; + panel->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); } + } + else if (bossId == DATA_MEKGINEER_STEAMRIGGER && state == DONE) + { + if (GameObject* panel = GetGameObject(DATA_ACCESS_PANEL_MEKGINEER)) + { + panel->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); + } + } - OUT_LOAD_INST_DATA_COMPLETE; + return true; } }; + + InstanceScript* GetInstanceScript(InstanceMap* map) const override + { + return new instance_steam_vault_InstanceMapScript(map); + } }; void AddSC_instance_steam_vault() diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h index 73e2b8d5c..d34aff65f 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/steam_vault.h @@ -21,14 +21,22 @@ #include "CreatureAIImpl.h" #include "PassiveAI.h" +#define DataHeaders "SV" + +uint32 const EncounterCount = 3; + #define SteamVaultScriptName "instance_steam_vault" enum steamVault { - TYPE_HYDROMANCER_THESPIA = 0, - TYPE_MEKGINEER_STEAMRIGGER = 1, - TYPE_WARLORD_KALITHRESH = 2, - MAX_ENCOUNTER = 3 + DATA_HYDROMANCER_THESPIA = 0, + DATA_MEKGINEER_STEAMRIGGER = 1, + DATA_WARLORD_KALITHRESH = 2, + MAX_ENCOUNTER = 3, + + DATA_ACCESS_PANEL_HYDROMANCER = 4, + DATA_ACCESS_PANEL_MEKGINEER = 5, + DATA_MAIN_CHAMBERS_DOOR = 6 }; enum steamVaultNPCGO @@ -47,4 +55,6 @@ inline AI* GetSteamVaultAI(T* obj) return GetInstanceAI(obj, SteamVaultScriptName); } +#define RegisterSteamvaultCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetSteamVaultAI) + #endif From 12e69248f828df95686de00a92aebfa5dbf51c4a Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 4 Mar 2023 17:22:56 -0300 Subject: [PATCH 023/159] =?UTF-8?q?chore(Core/DB):=20Display=20the=20SQL?= =?UTF-8?q?=20client=20version=20found=20when=20throwing=20th=E2=80=A6=20(?= =?UTF-8?q?#15266)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/database/Database/DatabaseWorkerPool.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/server/database/Database/DatabaseWorkerPool.cpp b/src/server/database/Database/DatabaseWorkerPool.cpp index 5a391e0cd..e320e0903 100644 --- a/src/server/database/Database/DatabaseWorkerPool.cpp +++ b/src/server/database/Database/DatabaseWorkerPool.cpp @@ -73,7 +73,8 @@ DatabaseWorkerPool::DatabaseWorkerPool() : bool isSameClientDB = true; // Client version 3.2.3? #endif - WPFatal(isSupportClientDB, "AzerothCore does not support MySQL versions below 5.7 and MariaDB 10.5\nSearch the wiki for ACE00043 in Common Errors (https://www.azerothcore.org/wiki/common-errors#ace00043)."); + WPFatal(isSupportClientDB, "AzerothCore does not support MySQL versions below 5.7 and MariaDB 10.5\n\nFound version: {} / {}. Server compiled with: {}.\nSearch the wiki for ACE00043 in Common Errors (https://www.azerothcore.org/wiki/common-errors#ace00043).", + mysql_get_client_info(), mysql_get_client_version(), MYSQL_VERSION_ID); WPFatal(isSameClientDB, "Used MySQL library version ({} id {}) does not match the version id used to compile AzerothCore (id {}).\nSearch the wiki for ACE00046 in Common Errors (https://www.azerothcore.org/wiki/common-errors#ace00046).", mysql_get_client_info(), mysql_get_client_version(), MYSQL_VERSION_ID); } @@ -403,7 +404,8 @@ uint32 DatabaseWorkerPool::OpenConnections(InternalIndex type, uint8 numConne } else if (connection->GetServerVersion() < MIN_MYSQL_SERVER_VERSION) { - LOG_ERROR("sql.driver", "AzerothCore does not support MySQL versions below 5.7 or MariaDB versions below 10.5"); + LOG_ERROR("sql.driver", "AzerothCore does not support MySQL versions below 5.7 or MariaDB versions below 10.5.\n\nFound version: {} / {}. Server compiled with: {}.", + mysql_get_client_info(), mysql_get_client_version(), MYSQL_VERSION_ID); return 1; } else From b546c6829ec1e6e607e251105ff969ef92316e5b Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 4 Mar 2023 17:23:58 -0300 Subject: [PATCH 024/159] fix(Scripts/TheBotanica): Rework Commander Sarannis (#15264) Co-authored-by: offl <11556157+offl@users.noreply.github.com> --- .../rev_1677959284674069900.sql | 8 + .../botanica/boss_commander_sarannis.cpp | 211 +++++++++--------- 2 files changed, 112 insertions(+), 107 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1677959284674069900.sql diff --git a/data/sql/updates/pending_db_world/rev_1677959284674069900.sql b/data/sql/updates/pending_db_world/rev_1677959284674069900.sql new file mode 100644 index 000000000..5598e220b --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677959284674069900.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `spell_script_names` WHERE `spell_id` = 34799 AND `ScriptName` = 'spell_commander_sarannis_arcane_devastation'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(34799,'spell_commander_sarannis_arcane_devastation'); + +UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectMiscValueB_1` = 64 WHERE `ID` IN (34810, 34817, 34818, 34819); + +UPDATE `creature_addon` SET `auras` = '34792 19818' WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 17976); diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp index 34a885db2..84d8ed7a9 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp @@ -35,142 +35,139 @@ enum Spells { SPELL_ARCANE_RESONANCE = 34794, SPELL_ARCANE_DEVASTATION = 34799, - SPELL_SUMMON_REINFORCEMENTS = 34803 + SPELL_SUMMON_REINFORCEMENTS = 34803, + SPELL_SUMMON_MENDER_1 = 34810, + SPELL_SUMMON_RESERVIST_1 = 34817, + SPELL_SUMMON_RESERVIST_2 = 34818, + SPELL_SUMMON_RESERVIST_3 = 34819 }; -enum Events +struct boss_commander_sarannis : public BossAI { - EVENT_ARCANE_RESONANCE = 1, - EVENT_ARCANE_DEVASTATION = 2, - EVENT_HEALTH_CHECK = 3 -}; + boss_commander_sarannis(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS), _summoned(false) { } -class boss_commander_sarannis : public CreatureScript -{ -public: - boss_commander_sarannis() : CreatureScript("boss_commander_sarannis") { } - - struct boss_commander_sarannisAI : public BossAI + void Reset() override { - boss_commander_sarannisAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS) { } + _Reset(); + _summoned = false; + } - void Reset() override + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + Talk(SAY_AGGRO); + + scheduler.Schedule(20s, [this](TaskContext context) { - _Reset(); + if (roll_chance_i(50)) + Talk(SAY_ARCANE_RESONANCE); + DoCastVictim(SPELL_ARCANE_RESONANCE); + context.Repeat(27s); + }).Schedule(10s, [this](TaskContext context) + { + if (roll_chance_i(50)) + Talk(SAY_ARCANE_DEVASTATION); + DoCastVictim(SPELL_ARCANE_DEVASTATION); + context.Repeat(17s); + }); + + if (IsHeroic()) + { + ScheduleReinforcements(); } + } - void JustEngagedWith(Unit* /*who*/) override + void KilledUnit(Unit* victim) override + { + if (victim->IsPlayer()) { - _JustEngagedWith(); - Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_ARCANE_RESONANCE, 20000); - events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, 10000); - events.ScheduleEvent(EVENT_HEALTH_CHECK, 500); + Talk(SAY_KILL); } + } - void KilledUnit(Unit* victim) override + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_DEATH); + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) override + { + if (!_summoned && me->HealthBelowPctDamaged(55, damage) && !IsHeroic()) { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_KILL); + _summoned = true; + ScheduleReinforcements(); } + } - void JustDied(Unit* /*killer*/) override + void ScheduleReinforcements() + { + scheduler.Schedule(IsHeroic() ? 1min : 1s, [this](TaskContext context) { - _JustDied(); - Talk(SAY_DEATH); - } + Talk(EMOTE_SUMMON); + Talk(SAY_SUMMON); + DoCast(SPELL_SUMMON_REINFORCEMENTS); - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) + if (IsHeroic()) { - case EVENT_ARCANE_RESONANCE: - if (roll_chance_i(50)) - Talk(SAY_ARCANE_RESONANCE); - me->CastSpell(me->GetVictim(), SPELL_ARCANE_RESONANCE, false); - events.ScheduleEvent(EVENT_ARCANE_RESONANCE, 27000); - break; - case EVENT_ARCANE_DEVASTATION: - if (roll_chance_i(50)) - Talk(SAY_ARCANE_DEVASTATION); - me->CastSpell(me->GetVictim(), SPELL_ARCANE_DEVASTATION, false); - events.ScheduleEvent(EVENT_ARCANE_DEVASTATION, 17000); - break; - case EVENT_HEALTH_CHECK: - if (me->HealthBelowPct(50)) - { - Talk(EMOTE_SUMMON); - Talk(SAY_SUMMON); - me->CastSpell(me, SPELL_SUMMON_REINFORCEMENTS, true); - break; - } - events.ScheduleEvent(EVENT_HEALTH_CHECK, 500); - break; + context.Repeat(); } + }); + } - DoMeleeAttackIfReady(); - } - }; + private: + bool _summoned; +}; - CreatureAI* GetAI(Creature* creature) const override +// 34799 - Arcane Devastation +class spell_commander_sarannis_arcane_devastation : public AuraScript +{ + PrepareAuraScript(spell_commander_sarannis_arcane_devastation); + + bool Validate(SpellInfo const* /*spell*/) override { - return GetTheBotanicaAI(creature); + return ValidateSpellInfo({ SPELL_ARCANE_RESONANCE }); + } + + void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->RemoveAurasDueToSpell(SPELL_ARCANE_RESONANCE); + } + + void Register() override + { + AfterEffectApply += AuraEffectApplyFn(spell_commander_sarannis_arcane_devastation::AfterApply, EFFECT_2, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); } }; -Position const PosSummonReinforcements[4] = -{ - { 160.4483f, 287.6435f, -3.887904f, 2.3841f }, - { 153.4406f, 289.9929f, -4.736916f, 2.3841f }, - { 154.4137f, 292.8956f, -4.683603f, 2.3841f }, - { 157.1544f, 294.2599f, -4.726504f, 2.3841f } -}; +// 34803 - Summon Reinforcements + class spell_commander_sarannis_summon_reinforcements : public SpellScript + { + PrepareSpellScript(spell_commander_sarannis_summon_reinforcements); -enum Creatures -{ - NPC_SUMMONED_BLOODWARDER_MENDER = 20083, - NPC_SUMMONED_BLOODWARDER_RESERVIST = 20078 -}; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SUMMON_MENDER_1, SPELL_SUMMON_RESERVIST_1, SPELL_SUMMON_RESERVIST_2, SPELL_SUMMON_RESERVIST_3 }); + } -class spell_commander_sarannis_summon_reinforcements : public SpellScriptLoader -{ -public: - spell_commander_sarannis_summon_reinforcements() : SpellScriptLoader("spell_commander_sarannis_summon_reinforcements") { } + void HandleCast(SpellEffIndex /*effIndex*/) + { + std::vector reinforcementSpells = { SPELL_SUMMON_MENDER_1, SPELL_SUMMON_RESERVIST_1, SPELL_SUMMON_RESERVIST_2, SPELL_SUMMON_RESERVIST_3 }; + for (uint32 spellId : reinforcementSpells) + { + GetCaster()->CastSpell((Unit*)nullptr, spellId, true); + } + } - class spell_commander_sarannis_summon_reinforcements_SpellScript : public SpellScript - { - PrepareSpellScript(spell_commander_sarannis_summon_reinforcements_SpellScript); - - void HandleCast(SpellEffIndex /*effIndex*/) - { - GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_MENDER, PosSummonReinforcements[0], TEMPSUMMON_CORPSE_DESPAWN); - GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_RESERVIST, PosSummonReinforcements[1], TEMPSUMMON_CORPSE_DESPAWN); - GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_RESERVIST, PosSummonReinforcements[2], TEMPSUMMON_CORPSE_DESPAWN); - if (GetCaster()->GetMap()->IsHeroic()) - GetCaster()->SummonCreature(NPC_SUMMONED_BLOODWARDER_RESERVIST, PosSummonReinforcements[3], TEMPSUMMON_CORPSE_DESPAWN); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_commander_sarannis_summon_reinforcements_SpellScript::HandleCast, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_commander_sarannis_summon_reinforcements_SpellScript(); - } -}; + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_commander_sarannis_summon_reinforcements::HandleCast, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; void AddSC_boss_commander_sarannis() { - new boss_commander_sarannis(); - new spell_commander_sarannis_summon_reinforcements(); + RegisterTheBotanicaCreatureAI(boss_commander_sarannis); + RegisterSpellScript(spell_commander_sarannis_arcane_devastation); + RegisterSpellScript(spell_commander_sarannis_summon_reinforcements); } From 52b4c3736333fc186d9d9c85de13e3782f8c0654 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 4 Mar 2023 20:26:35 +0000 Subject: [PATCH 025/159] chore(DB): import pending files Referenced commit(s): b546c6829ec1e6e607e251105ff969ef92316e5b --- .../rev_1677959284674069900.sql => db_world/2023_03_04_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1677959284674069900.sql => db_world/2023_03_04_01.sql} (91%) diff --git a/data/sql/updates/pending_db_world/rev_1677959284674069900.sql b/data/sql/updates/db_world/2023_03_04_01.sql similarity index 91% rename from data/sql/updates/pending_db_world/rev_1677959284674069900.sql rename to data/sql/updates/db_world/2023_03_04_01.sql index 5598e220b..14a7ccc44 100644 --- a/data/sql/updates/pending_db_world/rev_1677959284674069900.sql +++ b/data/sql/updates/db_world/2023_03_04_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_00 -> 2023_03_04_01 -- DELETE FROM `spell_script_names` WHERE `spell_id` = 34799 AND `ScriptName` = 'spell_commander_sarannis_arcane_devastation'; INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES From 3261dfb416fc8d1d9d450afe4ea6b0c76e5ab463 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 4 Mar 2023 17:35:26 -0300 Subject: [PATCH 026/159] fix(DB/Loot): Fix Talon King Ikiss Normal Mode loot table (#15246) --- .../rev_1677807108312300000.sql | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677807108312300000.sql diff --git a/data/sql/updates/pending_db_world/rev_1677807108312300000.sql b/data/sql/updates/pending_db_world/rev_1677807108312300000.sql new file mode 100644 index 000000000..0ff6ee0be --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677807108312300000.sql @@ -0,0 +1,20 @@ +-- +DELETE FROM `reference_loot_template` WHERE `Entry` IN (24740, 24741) AND `Item` IN (27925,27946,27980,27981,27985,27986,27776,27838,27875,27936,27948); +INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(24740, 27925, 0, 0, 0, 1, 1, 1, 1, 'Ravenclaw Band'), +(24740, 27946, 0, 0, 0, 1, 1, 1, 1, 'Avian Cloak of Feathers'), +(24740, 27980, 0, 0, 0, 1, 1, 1, 1, 'Terokk\'s Nightmace'), +(24740, 27981, 0, 0, 0, 1, 1, 1, 1, 'Sethekk Oracle Cloak'), +(24740, 27985, 0, 0, 0, 1, 1, 1, 1, 'Deathforge Girdle'), +(24740, 27986, 0, 0, 0, 1, 1, 1, 1, 'Crow Wing Reaper'), + +(24741, 27776, 0, 0, 0, 1, 1, 1, 1, 'Shoulderpads of Assassination'), +(24741, 27838, 0, 0, 0, 1, 1, 1, 1, 'Incanter\'s Trousers'), +(24741, 27875, 0, 0, 0, 1, 1, 1, 1, 'Hallowed Trousers'), +(24741, 27936, 0, 0, 0, 1, 1, 1, 1, 'Greaves of Desolation'), +(24741, 27948, 0, 0, 0, 1, 1, 1, 1, 'Trousers of Oblivion'); + +DELETE FROM `creature_loot_template` WHERE (`Entry` = 18473) AND (`Item` IN (25006, 1, 2)); +INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(18473, 1, 24740, 100, 0, 1, 0, 1, 1, 'Talon King Ikiss (Reference Table)'), +(18473, 2, 24741, 100, 0, 1, 0, 1, 1, 'Talon King Ikiss (Reference Table)'); From 2e9bdd83fbf762e777ddb4baa3c9aebfc076cd72 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 4 Mar 2023 17:35:43 -0300 Subject: [PATCH 027/159] fix(DB/Loot): Spirit Shards (#15244) --- data/sql/updates/pending_db_world/rev_1677805290069827400.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677805290069827400.sql diff --git a/data/sql/updates/pending_db_world/rev_1677805290069827400.sql b/data/sql/updates/pending_db_world/rev_1677805290069827400.sql new file mode 100644 index 000000000..149581c47 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677805290069827400.sql @@ -0,0 +1,4 @@ +-- In Shadow Labyrinth and Sethekk Halls, bosses should drop 2 Spirit Shards per kill +UPDATE `creature_loot_template` SET `MinCount`=2, `MaxCount`=2 WHERE `Item`=28558 AND `Entry` IN (20636, 20637, 20653, 20657, 20690, 20706, 23035, 18732, 18473, 18667, 18708); +-- Yor +UPDATE `creature_loot_template` SET `MinCount`=1, `MaxCount`=1 WHERE `Item`=28558 AND `Entry`=22930; From 30c19a56e5a39f1294563783735a0e93ff375515 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 4 Mar 2023 22:36:06 +0200 Subject: [PATCH 028/159] fix(DB/Gossips): Wrong gossip text for Franclorn Forgewright. (#15253) --- data/sql/updates/pending_db_world/rev_1677870148388497400.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677870148388497400.sql diff --git a/data/sql/updates/pending_db_world/rev_1677870148388497400.sql b/data/sql/updates/pending_db_world/rev_1677870148388497400.sql new file mode 100644 index 000000000..5e6ffb6af --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677870148388497400.sql @@ -0,0 +1,2 @@ +-- Franclorn Forgewright +UPDATE `gossip_menu` SET `TextID` = 2319 WHERE `MenuID` = 1667; From 5cc5b3522db13e833ba6679409f5af612bf8a022 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 4 Mar 2023 17:36:18 -0300 Subject: [PATCH 029/159] fix(DB/Creature): Correct Flags for Raging Souls (#15245) --- data/sql/updates/pending_db_world/rev_1677805981976626800.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677805981976626800.sql diff --git a/data/sql/updates/pending_db_world/rev_1677805981976626800.sql b/data/sql/updates/pending_db_world/rev_1677805981976626800.sql new file mode 100644 index 000000000..ccb03b6f3 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677805981976626800.sql @@ -0,0 +1,3 @@ +-- Detected build: V3_4_0_46368 +UPDATE `creature_template` SET `unit_flags` = 33554688 WHERE (`entry` = 18778); +UPDATE `creature_template` SET `unit_flags` = 33555200 WHERE (`entry` = 18726); From 1c23bca9cbd6847b0b2cfe02c32afea9c7359505 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 4 Mar 2023 22:37:15 +0200 Subject: [PATCH 030/159] fix(Scripts/WorldNPCs): npcs_special hardcode removal and fixes. (#15240) --- .../rev_1677761748533314800.sql | 4 + src/server/scripts/World/npcs_special.cpp | 333 +++++++++--------- 2 files changed, 171 insertions(+), 166 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1677761748533314800.sql diff --git a/data/sql/updates/pending_db_world/rev_1677761748533314800.sql b/data/sql/updates/pending_db_world/rev_1677761748533314800.sql new file mode 100644 index 000000000..10efb7a22 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677761748533314800.sql @@ -0,0 +1,4 @@ +-- Sayge - fix wrong gossip_option (was npc_text) +DELETE FROM `gossip_menu_option` WHERE `MenuID` = 6210 AND `OptionID` = 0; +INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES +(6210, 0, 0, 'I would show my liege the beast\'s ear and claim the beast\'s death as my own, taking the reward for my own use. It is wrong to claim a deed as your own that someone else in fact did.', 10087, 1, 1, 6211, 0, 0, 0, '', 0, 0); diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index e7fe02949..9d310a29c 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -15,27 +15,6 @@ * with this program. If not, see . */ -/* ScriptData -SDName: Npcs_Special -SD%Complete: 100 -SDComment: To be used for special NPCs that are located globally. -SDCategory: NPCs -EndScriptData -*/ - -/* ContentData -npc_air_force_bots 80% support for misc (invisible) guard bots in areas where player allowed to fly. Summon guards after a preset time if tagged by spell -npc_chicken_cluck 100% support for quest 3861 (Cluck!) -npc_dancing_flames 100% midsummer event NPC -npc_guardian 100% guardianAI used to prevent players from accessing off-limits areas. Not in use by SD2 -npc_garments_of_quests 80% NPC's related to all Garments of-quests 5621, 5624, 5625, 5648, 565 -npc_injured_patient 100% patients for triage-quests (6622 and 6624) -npc_doctor 100% Gustaf Vanhowzen and Gregory Victor, quest 6622 and 6624 (Triage) -npc_sayge 100% Darkmoon event fortune teller, buff player based on answers given -npc_locksmith 75% list of keys needs to be confirmed -npc_firework 100% NPC's summoned by rockets and rocket clusters, for making them cast visual -EndContentData */ - #include "CellImpl.h" #include "Chat.h" #include "CombatAI.h" @@ -1516,24 +1495,39 @@ enum Sayge SPELL_FORTUNE = 23765 // faire fortune }; -#define GOSSIP_HELLO_SAYGE "Yes" -#define GOSSIP_SENDACTION_SAYGE1 "Slay the Man" -#define GOSSIP_SENDACTION_SAYGE2 "Turn him over to liege" -#define GOSSIP_SENDACTION_SAYGE3 "Confiscate the corn" -#define GOSSIP_SENDACTION_SAYGE4 "Let him go and have the corn" -#define GOSSIP_SENDACTION_SAYGE5 "Execute your friend painfully" -#define GOSSIP_SENDACTION_SAYGE6 "Execute your friend painlessly" -#define GOSSIP_SENDACTION_SAYGE7 "Let your friend go" -#define GOSSIP_SENDACTION_SAYGE8 "Confront the diplomat" -#define GOSSIP_SENDACTION_SAYGE9 "Show not so quiet defiance" -#define GOSSIP_SENDACTION_SAYGE10 "Remain quiet" -#define GOSSIP_SENDACTION_SAYGE11 "Speak against your brother openly" -#define GOSSIP_SENDACTION_SAYGE12 "Help your brother in" -#define GOSSIP_SENDACTION_SAYGE13 "Keep your brother out without letting him know" -#define GOSSIP_SENDACTION_SAYGE14 "Take credit, keep gold" -#define GOSSIP_SENDACTION_SAYGE15 "Take credit, share the gold" -#define GOSSIP_SENDACTION_SAYGE16 "Let the knight take credit" -#define GOSSIP_SENDACTION_SAYGE17 "Thanks" +enum SaygeGossip +{ + // Start + GOSSIP_MENU_SAYGE_HELLO = 6186, + NPC_TEXT_SAYGE_HELLO = 7339, + + // Theif - initial gossip after start + GOSSIP_MENU_SAYGE_1 = 6185, + NPC_TEXT_SAYGE_1 = 7340, + + // Slay + GOSSIP_MENU_SAYGE_SLAY = 6187, + NPC_TEXT_SAYGE_SLAY = 7341, + + // Turn Over + GOSSIP_MENU_SAYGE_TURN_OVER = 6208, + NPC_TEXT_SAYGE_TURN_OVER = 7361, + + // Confiscate + GOSSIP_MENU_SAYGE_CONFISCATE = 6209, + NPC_TEXT_SAYGE_CONFISCATE = 7362, + + // Let him go + GOSSIP_MENU_SAYGE_LET_GO = 6210, + NPC_TEXT_SAYGE_LET_GO = 7363, + + // End + GOSSIP_MENU_SAYGE_END = 6211, + NPC_TEXT_SAYGE_END = 7364, + + // End - Take fortune + NPC_TEXT_SAYGE_END_FORTUNE = 7365, // menuID 6212 +}; class npc_sayge : public CreatureScript { @@ -1546,18 +1540,20 @@ public: player->PrepareQuestMenu(creature->GetGUID()); if (player->HasSpellCooldown(SPELL_INT) || - player->HasSpellCooldown(SPELL_ARM) || - player->HasSpellCooldown(SPELL_DMG) || - player->HasSpellCooldown(SPELL_RES) || - player->HasSpellCooldown(SPELL_STR) || - player->HasSpellCooldown(SPELL_AGI) || - player->HasSpellCooldown(SPELL_STM) || - player->HasSpellCooldown(SPELL_SPI)) - SendGossipMenuFor(player, 7393, creature->GetGUID()); + player->HasSpellCooldown(SPELL_ARM) || + player->HasSpellCooldown(SPELL_DMG) || + player->HasSpellCooldown(SPELL_RES) || + player->HasSpellCooldown(SPELL_STR) || + player->HasSpellCooldown(SPELL_AGI) || + player->HasSpellCooldown(SPELL_STM) || + player->HasSpellCooldown(SPELL_SPI)) + { + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); + } else { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_SAYGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - SendGossipMenuFor(player, 7339, creature->GetGUID()); + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_HELLO, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); } return true; @@ -1568,43 +1564,43 @@ public: switch (action) { case GOSSIP_ACTION_INFO_DEF + 1: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - SendGossipMenuFor(player, 7340, creature->GetGUID()); + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_1, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); // Slay + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_1, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); // Turn over + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_1, 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); // Confiscate + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_1, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); // Let him go + SendGossipMenuFor(player, NPC_TEXT_SAYGE_1, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 2: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE5, GOSSIP_SENDER_MAIN + 1, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE6, GOSSIP_SENDER_MAIN + 2, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE7, GOSSIP_SENDER_MAIN + 3, GOSSIP_ACTION_INFO_DEF); - SendGossipMenuFor(player, 7341, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF + 2: // Slay + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_SLAY, 0, GOSSIP_SENDER_MAIN + 1, GOSSIP_ACTION_INFO_DEF); // Painfully + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_SLAY, 1, GOSSIP_SENDER_MAIN + 2, GOSSIP_ACTION_INFO_DEF); // Painlessly + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_SLAY, 2, GOSSIP_SENDER_MAIN + 3, GOSSIP_ACTION_INFO_DEF); // Let go + SendGossipMenuFor(player, NPC_TEXT_SAYGE_SLAY, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 3: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE8, GOSSIP_SENDER_MAIN + 4, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE9, GOSSIP_SENDER_MAIN + 5, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE10, GOSSIP_SENDER_MAIN + 2, GOSSIP_ACTION_INFO_DEF); - SendGossipMenuFor(player, 7361, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF + 3: // Turn over + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_TURN_OVER, 0, GOSSIP_SENDER_MAIN + 4, GOSSIP_ACTION_INFO_DEF); // Confront + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_TURN_OVER, 1, GOSSIP_SENDER_MAIN + 5, GOSSIP_ACTION_INFO_DEF); // Inform + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_TURN_OVER, 2, GOSSIP_SENDER_MAIN + 2, GOSSIP_ACTION_INFO_DEF); // Ignore + SendGossipMenuFor(player, NPC_TEXT_SAYGE_TURN_OVER, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 4: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE11, GOSSIP_SENDER_MAIN + 6, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE12, GOSSIP_SENDER_MAIN + 7, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE13, GOSSIP_SENDER_MAIN + 8, GOSSIP_ACTION_INFO_DEF); - SendGossipMenuFor(player, 7362, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF + 4: // Confiscate + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_CONFISCATE, 0, GOSSIP_SENDER_MAIN + 6, GOSSIP_ACTION_INFO_DEF); // Speak against + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_CONFISCATE, 1, GOSSIP_SENDER_MAIN + 7, GOSSIP_ACTION_INFO_DEF); // Help + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_CONFISCATE, 2, GOSSIP_SENDER_MAIN + 8, GOSSIP_ACTION_INFO_DEF); // Without knowing + SendGossipMenuFor(player, NPC_TEXT_SAYGE_CONFISCATE, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 5: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE14, GOSSIP_SENDER_MAIN + 5, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE15, GOSSIP_SENDER_MAIN + 4, GOSSIP_ACTION_INFO_DEF); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE16, GOSSIP_SENDER_MAIN + 3, GOSSIP_ACTION_INFO_DEF); - SendGossipMenuFor(player, 7363, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF + 5: // Let him go + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_LET_GO, 0, GOSSIP_SENDER_MAIN + 5, GOSSIP_ACTION_INFO_DEF); // Take credit, keep gold + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_LET_GO, 1, GOSSIP_SENDER_MAIN + 4, GOSSIP_ACTION_INFO_DEF); // Take credit, share gold + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_LET_GO, 2, GOSSIP_SENDER_MAIN + 3, GOSSIP_ACTION_INFO_DEF); // Let the knight keep + SendGossipMenuFor(player, NPC_TEXT_SAYGE_LET_GO, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF: - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_SENDACTION_SAYGE17, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - SendGossipMenuFor(player, 7364, creature->GetGUID()); + case GOSSIP_ACTION_INFO_DEF: // End + AddGossipItemFor(player, GOSSIP_MENU_SAYGE_END, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + SendGossipMenuFor(player, NPC_TEXT_SAYGE_END, creature->GetGUID()); break; - case GOSSIP_ACTION_INFO_DEF + 6: + case GOSSIP_ACTION_INFO_DEF + 6: // End - Take fortune creature->CastSpell(player, SPELL_FORTUNE, false); - SendGossipMenuFor(player, 7365, creature->GetGUID()); + SendGossipMenuFor(player, NPC_TEXT_SAYGE_END_FORTUNE, creature->GetGUID()); break; } } @@ -1699,14 +1695,7 @@ public: # npc_wormhole ######*/ -#define GOSSIP_ENGINEERING1 "Borean Tundra" -#define GOSSIP_ENGINEERING2 "Howling Fjord" -#define GOSSIP_ENGINEERING3 "Sholazar Basin" -#define GOSSIP_ENGINEERING4 "Icecrown" -#define GOSSIP_ENGINEERING5 "Storm Peaks" -#define GOSSIP_ENGINEERING6 "Underground..." - -enum WormholeSpells +enum WormholeMisc { SPELL_BOREAN_TUNDRA = 67834, SPELL_SHOLAZAR_BASIN = 67835, @@ -1715,9 +1704,9 @@ enum WormholeSpells SPELL_HOWLING_FJORD = 67838, SPELL_UNDERGROUND = 68081, - TEXT_WORMHOLE = 907, - DATA_SHOW_UNDERGROUND = 1, + + GOSSIP_MENU_WORMHOLE = 10668, }; class npc_wormhole : public CreatureScript @@ -1749,16 +1738,16 @@ public: { if (player == creature->ToTempSummon()->GetSummonerUnit()) { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); // Borean Tundra + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); // Howling Fjord + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); // Sholazar Basin + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); // Icecrown + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); // Storm Peaks if (creature->AI()->GetData(DATA_SHOW_UNDERGROUND)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ENGINEERING6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + AddGossipItemFor(player, GOSSIP_MENU_WORMHOLE, 5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); // Underground... - SendGossipMenuFor(player, TEXT_WORMHOLE, creature); + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature); } } @@ -1845,48 +1834,59 @@ public: ## npc_locksmith ######*/ +/// @todo: Key to the Focusing Iris (And Heroic) Should be given by Alexstrasza, check broadcasttext ID 32832 & 32836 enum LockSmith { - QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ = 10704, - QUEST_DARK_IRON_LEGACY = 3802, + // Skeleton Key - Scholomance QUEST_THE_KEY_TO_SCHOLOMANCE_A = 5505, QUEST_THE_KEY_TO_SCHOLOMANCE_H = 5511, + ITEM_SKELETON_KEY = 13704, + SPELL_SKELETON_KEY = 54883, + + // Arcatraz Key + QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ = 10704, + ITEM_ARCATRAZ_KEY = 31084, + SPELL_ARCATRAZ_KEY = 54881, + + // Shatered Halls Key QUEST_HOTTER_THAN_HELL_A = 10758, QUEST_HOTTER_THAN_HELL_H = 10764, - QUEST_RETURN_TO_KHAGDAR = 9837, - QUEST_CONTAINMENT = 13159, - QUEST_ETERNAL_VIGILANCE = 11011, - QUEST_KEY_TO_THE_FOCUSING_IRIS = 13372, - QUEST_HC_KEY_TO_THE_FOCUSING_IRIS = 13375, - - ITEM_ARCATRAZ_KEY = 31084, - ITEM_SHADOWFORGE_KEY = 11000, - ITEM_SKELETON_KEY = 13704, ITEM_SHATTERED_HALLS_KEY = 28395, - ITEM_THE_MASTERS_KEY = 24490, - ITEM_VIOLET_HOLD_KEY = 42482, - ITEM_ESSENCE_INFUSED_MOONSTONE = 32449, - ITEM_KEY_TO_THE_FOCUSING_IRIS = 44582, - ITEM_HC_KEY_TO_THE_FOCUSING_IRIS = 44581, - - SPELL_ARCATRAZ_KEY = 54881, - SPELL_SHADOWFORGE_KEY = 54882, - SPELL_SKELETON_KEY = 54883, SPELL_SHATTERED_HALLS_KEY = 54884, - SPELL_THE_MASTERS_KEY = 54885, - SPELL_VIOLET_HOLD_KEY = 67253, - SPELL_ESSENCE_INFUSED_MOONSTONE = 40173, -}; -#define GOSSIP_LOST_ARCATRAZ_KEY "I've lost my key to the Arcatraz." -#define GOSSIP_LOST_SHADOWFORGE_KEY "I've lost my key to the Blackrock Depths." -#define GOSSIP_LOST_SKELETON_KEY "I've lost my key to the Scholomance." -#define GOSSIP_LOST_SHATTERED_HALLS_KEY "I've lost my key to the Shattered Halls." -#define GOSSIP_LOST_THE_MASTERS_KEY "I've lost my key to the Karazhan." -#define GOSSIP_LOST_VIOLET_HOLD_KEY "I've lost my key to the Violet Hold." -#define GOSSIP_LOST_ESSENCE_INFUSED_MOONSTONE "I've lost my Essence-Infused Moonstone." -#define GOSSIP_LOST_KEY_TO_THE_FOCUSING_IRIS "I've lost my Key to the Focusing Iris." -#define GOSSIP_LOST_HC_KEY_TO_THE_FOCUSING_IRIS "I've lost my Heroic Key to the Focusing Iris." + // Searing Gorge Key + QUEST_AT_LAST = 3201, + ITEM_SEARING_GORGE = 5396, + SPELL_SEARING_GORGE_KEY = 54880, + + // Shadowforge Key + QUEST_DARK_IRON_LEGACY = 3802, + ITEM_SHADOWFORGE_KEY = 11000, + SPELL_SHADOWFORGE_KEY = 54882, + + // Eye of Haramad + QUEST_THE_EYE_OF_HARAMAD = 10982, + ITEM_EYE_OF_HARAMAD = 32092, + SPELL_EYE_OF_HARMAD = 54887, + + // Master's Key + QUEST_RETURN_TO_KHAGDAR = 9837, + ITEM_THE_MASTERS_KEY = 24490, + SPELL_THE_MASTERS_KEY = 54885, + + // Violet Hold Key + QUEST_CONTAINMENT = 13159, + ITEM_VIOLET_HOLD_KEY = 42482, + SPELL_VIOLET_HOLD_KEY = 67253, + + // Essence-Infused Moonstone + QUEST_ETERNAL_VIGILANCE = 11011, + ITEM_ESSENCE_INFUSED_MOONSTONE = 32449, + SPELL_ESSENCE_INFUSED_MOONSTONE = 40173, + + // Gossip + GOSSIP_MENU_LOCKSMITH = 9823, +}; class npc_locksmith : public CreatureScript { @@ -1895,43 +1895,43 @@ public: bool OnGossipHello(Player* player, Creature* creature) override { - // Arcatraz Key - if (player->GetQuestRewardStatus(QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ) && !player->HasItemCount(ITEM_ARCATRAZ_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_ARCATRAZ_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - - // Shadowforge Key - if (player->GetQuestRewardStatus(QUEST_DARK_IRON_LEGACY) && !player->HasItemCount(ITEM_SHADOWFORGE_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_SHADOWFORGE_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - - // Skeleton Key + // Skeleton Key - Scholomance if ((player->GetQuestRewardStatus(QUEST_THE_KEY_TO_SCHOLOMANCE_A) || player->GetQuestRewardStatus(QUEST_THE_KEY_TO_SCHOLOMANCE_H)) && !player->HasItemCount(ITEM_SKELETON_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_SKELETON_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + + // Arcatraz Key + if (player->GetQuestRewardStatus(QUEST_HOW_TO_BRAKE_IN_TO_THE_ARCATRAZ) && !player->HasItemCount(ITEM_ARCATRAZ_KEY, 1, true)) + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); // Shatered Halls Key if ((player->GetQuestRewardStatus(QUEST_HOTTER_THAN_HELL_A) || player->GetQuestRewardStatus(QUEST_HOTTER_THAN_HELL_H)) && !player->HasItemCount(ITEM_SHATTERED_HALLS_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_SHATTERED_HALLS_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + + // Searing Gorge Key + if (player->GetQuestRewardStatus(QUEST_AT_LAST) && !player->HasItemCount(ITEM_SEARING_GORGE, 1, true)) + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + + // Shadowforge Key + if (player->GetQuestRewardStatus(QUEST_DARK_IRON_LEGACY) && !player->HasItemCount(ITEM_SHADOWFORGE_KEY, 1, true)) + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + + // Eye of Haramad + if (player->GetQuestRewardStatus(QUEST_THE_EYE_OF_HARAMAD) && !player->HasItemCount(ITEM_EYE_OF_HARAMAD, 1, true)) + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); // Master's Key if (player->GetQuestRewardStatus(QUEST_RETURN_TO_KHAGDAR) && !player->HasItemCount(ITEM_THE_MASTERS_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_THE_MASTERS_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); // Violet Hold Key if (player->GetQuestRewardStatus(QUEST_CONTAINMENT) && !player->HasItemCount(ITEM_VIOLET_HOLD_KEY, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_VIOLET_HOLD_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); // Essence-Infused Moonstone if (player->GetQuestRewardStatus(QUEST_ETERNAL_VIGILANCE) && !player->HasItemCount(ITEM_ESSENCE_INFUSED_MOONSTONE, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_ESSENCE_INFUSED_MOONSTONE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - - // Key to the Focusing Iris - if (player->GetQuestRewardStatus(QUEST_KEY_TO_THE_FOCUSING_IRIS) && !player->HasItemCount(ITEM_KEY_TO_THE_FOCUSING_IRIS, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_KEY_TO_THE_FOCUSING_IRIS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - - // Heroic Key to the Focusing Iris - if (player->GetQuestRewardStatus(QUEST_HC_KEY_TO_THE_FOCUSING_IRIS) && !player->HasItemCount(ITEM_HC_KEY_TO_THE_FOCUSING_IRIS, 1, true)) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LOST_HC_KEY_TO_THE_FOCUSING_IRIS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + AddGossipItemFor(player, GOSSIP_MENU_LOCKSMITH, 8, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); @@ -1945,39 +1945,39 @@ public: { case GOSSIP_ACTION_INFO_DEF + 1: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_ARCATRAZ_KEY, false); + player->CastSpell(player, SPELL_SKELETON_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 2: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_SHADOWFORGE_KEY, false); + player->CastSpell(player, SPELL_ARCATRAZ_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 3: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_SKELETON_KEY, false); + player->CastSpell(player, SPELL_SHATTERED_HALLS_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 4: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_SHATTERED_HALLS_KEY, false); + player->CastSpell(player, SPELL_SEARING_GORGE_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 5: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_THE_MASTERS_KEY, false); + player->CastSpell(player, SPELL_SHADOWFORGE_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 6: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_VIOLET_HOLD_KEY, false); + player->CastSpell(player, SPELL_EYE_OF_HARMAD, false); break; case GOSSIP_ACTION_INFO_DEF + 7: CloseGossipMenuFor(player); - player->CastSpell(player, SPELL_ESSENCE_INFUSED_MOONSTONE, false); + player->CastSpell(player, SPELL_THE_MASTERS_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 8: CloseGossipMenuFor(player); - player->AddItem(ITEM_KEY_TO_THE_FOCUSING_IRIS, 1); + player->CastSpell(player, SPELL_VIOLET_HOLD_KEY, false); break; case GOSSIP_ACTION_INFO_DEF + 9: CloseGossipMenuFor(player); - player->AddItem(ITEM_HC_KEY_TO_THE_FOCUSING_IRIS, 1); + player->CastSpell(player, SPELL_ESSENCE_INFUSED_MOONSTONE, false); break; } return true; @@ -1988,9 +1988,10 @@ public: ## npc_experience ######*/ -#define GOSSIP_TEXT_EXP 14736 -#define GOSSIP_XP_OFF "I no longer wish to gain experience." -#define GOSSIP_XP_ON "I wish to start gaining experience again." +enum ExperienceNPCgossip +{ + GOSSIP_MENU_EXP_NPC = 10638 +}; class npc_experience : public CreatureScript { @@ -1999,9 +2000,9 @@ public: bool OnGossipHello(Player* player, Creature* creature) override { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_XP_OFF, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_XP_ON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - SendGossipMenuFor(player, GOSSIP_TEXT_EXP, creature); + AddGossipItemFor(player, GOSSIP_MENU_EXP_NPC, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); // "I no longer wish to gain experience." + AddGossipItemFor(player, GOSSIP_MENU_EXP_NPC, 1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); // "I wish to start gaining experience again." + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature); return true; } From d6152df5a48f948f6dccb75ffaaad40b8e7ea71d Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 4 Mar 2023 17:37:34 -0300 Subject: [PATCH 031/159] fix(DB/Creature): Add NO_PLAYER_DAMAGE_REQ flag to Socrethar (#15243) --- data/sql/updates/pending_db_world/rev_1677797244323339200.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677797244323339200.sql diff --git a/data/sql/updates/pending_db_world/rev_1677797244323339200.sql b/data/sql/updates/pending_db_world/rev_1677797244323339200.sql new file mode 100644 index 000000000..aeba1fc63 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677797244323339200.sql @@ -0,0 +1,2 @@ +-- Too many friendly NPCs dealing damage can interfere with quest objective for killing Socrethar (Quest Credit is self-cast) +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|2097152 WHERE (`entry` = 20132); From d8b9df2a2d6eb9ddcdb11b7113d95c0ec8106b7c Mon Sep 17 00:00:00 2001 From: neifion-00000000 <91289495+neifion-00000000@users.noreply.github.com> Date: Sat, 4 Mar 2023 14:37:46 -0600 Subject: [PATCH 032/159] fix(DB/creature): Remove 1.X-era mobs from Mirror Lake Orchid (#15234) --- data/sql/updates/pending_db_world/rev_1677639790735595900.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677639790735595900.sql diff --git a/data/sql/updates/pending_db_world/rev_1677639790735595900.sql b/data/sql/updates/pending_db_world/rev_1677639790735595900.sql new file mode 100644 index 000000000..c9b3f533f --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677639790735595900.sql @@ -0,0 +1,3 @@ +-- +-- Remove 1.X mobs that are not in wotlk +DELETE FROM creature where guid IN (80391, 80392, 80393, 80394, 80396, 80397, 80399, 80400, 80401, 80402, 80403, 80404, 80405) AND id1 IN(116, 94); From c7a44082b4c1fa14c30b5a6e70919efe82377c92 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 4 Mar 2023 21:38:01 +0100 Subject: [PATCH 033/159] fix(DB/Spells): Blazing Speed should proc off from absorbed damage. (#15210) --- data/sql/updates/pending_db_world/rev_1677410180671468300.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677410180671468300.sql diff --git a/data/sql/updates/pending_db_world/rev_1677410180671468300.sql b/data/sql/updates/pending_db_world/rev_1677410180671468300.sql new file mode 100644 index 000000000..dd22dd97e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677410180671468300.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `spell_proc_event` WHERE `entry`=-31641; +INSERT INTO `spell_proc_event` VALUES +(-31641,0,0,0,0,0,0x000002A8,0x0000403,2,0,0,0); From 0380360cc2db795cef2a48d049a7ea789e0740de Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 4 Mar 2023 22:38:24 +0200 Subject: [PATCH 034/159] fix(DB/Quest): Zandalari Tribe missing rogue quest and race restrictions. (#15229) --- .../pending_db_world/rev_1677597663131840800.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677597663131840800.sql diff --git a/data/sql/updates/pending_db_world/rev_1677597663131840800.sql b/data/sql/updates/pending_db_world/rev_1677597663131840800.sql new file mode 100644 index 000000000..96221ecd5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677597663131840800.sql @@ -0,0 +1,11 @@ +-- Falthir the Sightless, add 8143 (Rogue revered neck quest) +DELETE FROM `creature_queststarter` WHERE `id` = 14905 AND `quest` = 8143; +INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES (14905, 8143); + +DELETE FROM `creature_questender` WHERE `id` = 14905 AND `quest` = 8143; +INSERT INTO `creature_questender` (`id`, `quest`) VALUES (14905, 8143); +-- Remove race restrictions. (Rogue exalted neck quest) +UPDATE `quest_template` SET `AllowableRaces` = 0 WHERE `ID` = 8144; + +-- Remove race restrictions. (Paladin exalted neck quest) +UPDATE `quest_template` SET `AllowableRaces` = 0 WHERE `ID` = 8048; From e3ed2e99e67cf23baf67e132abf57432d9de4cc9 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 4 Mar 2023 21:39:05 +0100 Subject: [PATCH 035/159] fix(Core/Spells): Goblin Rocket Helmet should not cause auto-attack. (#15207) --- src/server/game/Spells/SpellEffects.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index bf518f291..4f620f10a 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4939,7 +4939,8 @@ void Spell::EffectCharge(SpellEffIndex /*effIndex*/) m_caster->ToPlayer()->SetFallInformation(GameTime::GetGameTime().count(), m_caster->GetPositionZ()); ObjectGuid targetGUID = ObjectGuid::Empty; - if (!m_spellInfo->IsPositive() && m_caster->GetTypeId() == TYPEID_PLAYER && m_caster->GetTarget() == unitTarget->GetGUID()) + if (!m_spellInfo->HasAttribute(SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT) && !m_spellInfo->IsPositive() && m_caster->GetTypeId() == TYPEID_PLAYER && + m_caster->GetTarget() == unitTarget->GetGUID()) { targetGUID = unitTarget->GetGUID(); } From ea19c7f808aa414bbd1a67087c97d8fb24404769 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 4 Mar 2023 22:39:34 +0200 Subject: [PATCH 036/159] fix(Scripts/HallsOfReflection): Halls of Reflection - Fix Alliance side, text broadcasts and hardcodes. (#15227) --- .../rev_1677495939101704800.sql | 352 ++++++++++++++++++ .../HallsOfReflection/boss_falric.cpp | 13 +- .../HallsOfReflection/boss_marwyn.cpp | 16 +- .../HallsOfReflection/halls_of_reflection.cpp | 79 +++- .../HallsOfReflection/halls_of_reflection.h | 208 ++++++----- .../instance_halls_of_reflection.cpp | 39 +- 6 files changed, 575 insertions(+), 132 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1677495939101704800.sql diff --git a/data/sql/updates/pending_db_world/rev_1677495939101704800.sql b/data/sql/updates/pending_db_world/rev_1677495939101704800.sql new file mode 100644 index 000000000..eca4e5877 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677495939101704800.sql @@ -0,0 +1,352 @@ +-- Halls of Reflection - remove the used duplicates (no broadcastid) and add missing texts. +-- Marwyn +DELETE FROM `creature_text` WHERE `CreatureID`=38113; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(38113, 0, 0, 'Death is all that you will find here!', 14, 0, 100, 0, 0, 16734, 37948, 0, 'marwyn SAY_AGGRO'), +(38113, 1, 0, 'I saw the same look in his eyes when he died. Terenas could hardly believe it.', 14, 0, 100, 0, 0, 16735, 37949, 0, 'marwyn SAY_SLAY_1'), +(38113, 1, 1, 'Choke on your suffering!', 14, 0, 100, 0, 0, 16736, 37950, 0, 'marwyn SAY_SLAY_2'), +(38113, 2, 0, 'Yes... Run... Run to meet your destiny... Its bitter, cold embrace, awaits you.', 14, 0, 100, 0, 0, 16737, 37951, 0, 'marwyn SAY_DEATH'), +(38113, 3, 0, 'Your flesh shall decay before your very eyes!', 14, 0, 100, 0, 0, 16739, 37954, 0, 'marwyn SAY_CORRUPTED_FLESH'), +(38113, 4, 0, 'Waste away into nothingness!', 14, 0, 100, 0, 0, 16740, 37955, 0, 'marwyn SAY_CORRUPTED_WELL'), +(38113, 5, 0, 'As you wish, my lord.', 14, 0, 100, 0, 0, 16741, 37953, 0, 'marwyn SAY_MARWYN_INTRO_1'), +(38113, 6, 0, 'Spirits appear and surround the altar!', 41, 0, 100, 0, 0, 0, 38623, 0, 'marwyn EMOTE_MARWYN_INTRO_SPIRITS'), +(38113, 7, 0, 'The master surveyed his kingdom and found it... Lacking. His judgement was swift and without mercy: DEATH TO ALL!', 14, 0, 100, 0, 0, 16738, 37952, 0, 'marwyn SAY_MARWYN_WIPE_AFTER_FALRIC'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=38113 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(38113, 0, 0, 'zhCN', '你们只会寻得死亡!'), +(38113, 1, 0, 'zhCN', '我看到的是同样的眼神。泰瑞纳斯怎么也想不到。'), +(38113, 1, 1, 'zhCN', '痛苦的窒息吧!'), +(38113, 2, 0, 'zhCN', '对,去吧……迎接你的命运吧……痛苦、冰冷的拥抱正等着你。'), +(38113, 3, 0, 'zhCN', '你的躯壳将在你的眼前朽化!'), +(38113, 4, 0, 'zhCN', '灰飞烟灭吧!'), +(38113, 5, 0, 'zhCN', '如您所愿,我的主人。'), +(38113, 6, 0, 'zhCN', '灵魂们出现并围在祭坛四周!'), +(38113, 7, 0, 'zhCN', '主人审视他的王国,找到了它的……不足。他的决断迅速而无情:生灵俱灭!'); + +-- Falric +DELETE FROM `creature_text` WHERE `CreatureID`=38112; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(38112, 0, 0, 'Men, women, and children... None were spared the master\'s wrath. Your death will be no different.', 14, 0, 100, 0, 0, 16710, 37931, 0, 'falric SAY_AGGRO'), +(38112, 1, 0, 'Sniveling maggot!', 14, 0, 100, 0, 0, 16711, 37941, 0, 'falric SAY_SLAY_1'), +(38112, 1, 1, 'The children of Stratholme fought with more ferocity!', 14, 0, 100, 0, 0, 16712, 37942, 0, 'falric SAY_SLAY_2'), +(38112, 2, 0, 'Marwyn, finish them...', 14, 0, 100, 0, 0, 16713, 37943, 0, 'falric SAY_DEATH'), +(38112, 3, 0, 'Despair... so delicious...', 14, 0, 100, 0, 0, 16715, 37945, 0, 'falric SAY_IMPENDING_DESPAIR'), +(38112, 4, 0, 'Fear... so exhilarating...', 14, 0, 100, 0, 0, 16716, 37946, 0, 'falric SAY_DEFILING_HORROR'), +(38112, 5, 0, 'As you wish, my lord.', 14, 0, 100, 0, 0, 16717, 37953, 0, 'Falric SAY_FALRIC_INTRO_1'), +(38112, 6, 0, 'Soldiers of Lordaeron, rise to meet your master\'s call!', 14, 0, 100, 0, 0, 16714, 37944, 0, 'Falric SAY_FALRIC_INTRO_2'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=38112 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(38112, 0, 0, 'zhCN', '男人,女人,还有孩子……没人能逃过主人的怒火。你的死早已注定。'), +(38112, 1, 0, 'zhCN', '无能的家伙!'), +(38112, 1, 1, 'zhCN', '斯坦索姆的小孩子都要比你们勇猛!'), +(38112, 2, 0, 'zhCN', '玛维恩,干掉他们……'), +(38112, 3, 0, 'zhCN', '绝望……如此甘甜……'), +(38112, 4, 0, 'zhCN', '恐惧……如此美好……'), +(38112, 5, 0, 'zhCN', '遵命,我的主人。'), +(38112, 6, 0, 'zhCN', '洛丹伦的战士们,服从主人的召唤!'); + +-- Frostsworn General (Big add after the wave encounter) +DELETE FROM `creature_text` WHERE `CreatureID`=36723; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(36723, 0, 0, 'You are not worthy to face the Lich King!', 14, 0, 100, 0, 0, 16921, 38664, 0, 'SAY_FROSTSWORN_GENERAL_AGGRO'), +(36723, 1, 0, 'Master, I have failed...', 14, 0, 100, 0, 0, 16922, 36921, 0, 'SAY_FROSTSWORN_GENERAL_DEATH'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36723 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(36723, 0, 0, 'zhCN', '你根本没有资格晋见巫妖王。'), +(36723, 1, 0, 'zhCN', '主人,我失败了……'); + +-- The Lich King (Event) +DELETE FROM `creature_text` WHERE `CreatureID`=37226; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(37226, 0, 0, 'SILENCE, PALADIN!', 14, 0, 100, 0, 0, 17225, 37613, 0, 'Lich King SAY_LK_INTRO_1'), +(37226, 1, 0, 'So you wish to commune with the dead? You shall have your wish.', 14, 0, 100, 0, 0, 17226, 37614, 0, 'Lich King SAY_LK_INTRO_2'), +(37226, 2, 0, 'Falric. Marwyn. Bring their corpses to my chamber when you are through.', 14, 0, 100, 0, 0, 17227, 37615, 0, 'Lich King SAY_LK_INTRO_3'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=37226 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(37226, 0, 0, 'zhCN', '闭嘴,圣骑士!'), +(37226, 1, 0, 'zhCN', '你真的想和死人交谈?我会满足你。'), +(37226, 2, 0, 'zhCN', '法瑞克,玛维恩,杀掉他们,送到我的大殿来。'); + +-- Quel'Delar +DELETE FROM `creature_text` WHERE `CreatureID`=37158; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(37158, 0, 0, 'Quel\'Delar leaps to life in the presence of Frostmourne!', 41, 0, 100, 0, 0, 0, 37645, 0, 'Quel\'Delar EMOTE_QUEL_SPAWN'), +(37158, 1, 0, '%s prepares to attack!', 41, 0, 100, 0, 0, 0, 37211, 0, 'Quel\'Delar EMOTE_QUEL_PREPARE'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=37158 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(37158, 0, 0, 'zhCN', '面对霜之哀伤,奎尔德拉很快复苏了!'), +(37158, 1, 0, 'zhCN', '%s准备攻击!'); + +-- Uther the Lightbringer +DELETE FROM `creature_text` WHERE `CreatureID`=37225; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(37225, 0, 0, 'Jaina! Could it truly be you?', 12, 0, 100, 0, 0, 16666, 37603, 0, 'Uther SAY_UTHER_INTRO_A2_1'), +(37225, 1, 0, 'Jaina, you haven\'t much time. The Lich King sees what the sword sees. He will be here shortly. ', 12, 0, 100, 0, 0, 16667, 37604, 0, 'Uther SAY_UTHER_INTRO_A2_2'), +(37225, 2, 0, 'No, girl. Arthas is not here. Arthas is merely a presence within the Lich King\'s mind. A dwindling presence...', 12, 0, 100, 0, 0, 16668, 37605, 0, 'Uther SAY_UTHER_INTRO_A2_3'), +(37225, 3, 0, 'Jaina, listen to me. You must destroy the Lich King. You cannot reason with him. He will kill you and your allies and raise you all as powerful soldiers of the Scourge.', 12, 0, 100, 0, 0, 16669, 37606, 0, 'Uther SAY_UTHER_INTRO_A2_4'), +(37225, 4, 0, 'Snap out of it, girl. You must destroy the Lich King at the place where he merged with Ner\'zhul - atop the spire, at the Frozen Throne. It is the only way.', 12, 0, 100, 0, 0, 16670, 37607, 0, 'Uther SAY_UTHER_INTRO_A2_5'), +(37225, 5, 0, 'There is... something else that you should know about the Lich King. Control over the Scourge must never be lost. Even if you were to strike down the Lich King, another would have to take his place. For without the control of its master, the Scourge would run rampant across the world - destroying all living things.', 12, 0, 100, 0, 0, 16671, 37608, 0, 'Uther SAY_UTHER_INTRO_A2_6'), +(37225, 6, 0, 'A grand sacrifice by a noble soul...', 12, 0, 100, 0, 0, 16672, 37609, 0, 'Uther SAY_UTHER_INTRO_A2_7'), +(37225, 7, 0, 'I do not know, Jaina. I suspect that the piece of Arthas that might be left inside the Lich King is all that holds the Scourge from annihilating Azeroth.', 12, 0, 100, 0, 0, 16673, 37610, 0, 'Uther SAY_UTHER_INTRO_A2_8'), +(37225, 8, 0, 'No, Jaina! ARRRRRRGHHHH... He... He is coming. You... You must...', 12, 0, 100, 0, 0, 16674, 37611, 0, 'Uther SAY_UTHER_INTRO_A2_9'), +(37225, 9, 0, 'Careful, girl. I\'ve heard talk of that cursed blade saving us before. Look around you and see what has been born of Frostmourne.', 12, 0, 100, 0, 0, 16659, 37583, 0, 'Uther SAY_UTHER_INTRO_H2_1'), +(37225, 10, 0, 'You haven\'t much time. The Lich King sees what the sword sees. He will be here shortly. ', 12, 0, 100, 0, 0, 16660, 37584, 0, 'Uther SAY_UTHER_INTRO_H2_2'), +(37225, 11, 0, 'You cannot defeat the Lich King. Not here. You would be a fool to try. He will kill those that follow you and raise them as powerful soldiers of the Scourge. But for you, Sylvanas, his reward for you would be worse than the last.', 12, 0, 100, 0, 0, 16661, 37585, 0, 'Uther SAY_UTHER_INTRO_H2_3'), +(37225, 12, 0, 'Perhaps, but know this: there must always be a Lich King. Even if you were to strike down Arthas, another would have to take his place, for without the control of the Lich King, the Scourge would wash over this world like locusts, destroying all that they touched.', 12, 0, 100, 0, 0, 16662, 37586, 0, 'Uther SAY_UTHER_INTRO_H2_4'), +(37225, 13, 0, 'I do not know, Banshee Queen. I suspect that the piece of Arthas that might be left inside the Lich King is all that holds the Scourge from annihilating Azeroth.', 12, 0, 100, 0, 0, 16663, 37587, 0, 'Uther SAY_UTHER_INTRO_H2_5'), +(37225, 14, 0, 'Alas, the only way to defeat the Lich King is to destroy him at the place where he was created.', 12, 0, 100, 0, 0, 16664, 37588, 0, 'Uther SAY_UTHER_INTRO_H2_6'), +(37225, 15, 0, 'Aye. ARRRRRRGHHHH... He... He is coming. You... You must...', 12, 0, 100, 0, 0, 16665, 37589, 0, 'Uther SAY_UTHER_INTRO_H2_7'), +(37225, 16, 0, 'Halt! Do not carry that blade any further!', 14, 0, 100, 25, 0, 16675, 37201, 0, 'Uther SAY_BATTERED_HILT_HALT'), +(37225, 17, 0, 'Do you realize what you\'ve done?', 14, 0, 100, 5, 0, 16676, 37202, 0, 'Uther SAY_BATTERED_HILT_REALIZE'), +(37225, 18, 0, 'You have forged this blade from saronite, the very blood of an old god. The power of the Lich King calls to this weapon.', 12, 0, 100, 1, 0, 16677, 37204, 0, 'Uther SAY_BATTERED_HILT_OUTRO1'), +(37225, 19, 0, 'Each moment you tarry here, Quel\'Delar drinks in the evil of this place.', 12, 0, 100, 1, 0, 16678, 38442, 0, 'Uther SAY_BATTERED_HILT_OUTRO2'), +(37225, 20, 0, 'There is only one way to cleanse this sword. Make haste for the Sunwell and immerse the blade in its waters.', 12, 0, 100, 25, 0, 16679, 37205, 0, 'Uther SAY_BATTERED_HILT_OUTRO3'), +(37225, 21, 0, 'I can resist Frostmourne\'s call no more...', 12, 0, 100, 1, 0, 16680, 37206, 0, 'Uther SAY_BATTERED_HILT_OUTRO4'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=37225 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(37225, 0, 0, 'zhCN', '吉安娜!真的是你吗?'), +(37225, 1, 0, 'zhCN', '吉安娜,你没有时间了。巫妖王能看到剑旁的一切。他就要来了。'), +(37225, 2, 0, 'zhCN', '不,孩子。阿尔萨斯不在这里。阿尔萨斯只是巫妖王意识中的一个存在。一个即将泯灭的存在……'), +(37225, 3, 0, 'zhCN', '吉安娜,听我说。你必须终结巫妖王。不要试图说服他。他会把你们全杀掉,变成天灾军团的战士。'), +(37225, 4, 0, 'zhCN', '振作起来,女孩。你必须在巫妖王和耐奥祖融合的地方--冰封王座,将他终结。这是唯一的办法。'), +(37225, 5, 0, 'zhCN', '还有…还有一些事情你需要知道。天灾军团绝不能失去控制。即使你战胜了这个巫妖王,也要有别人来取代他。没有巫妖王的控制,天灾军团就会横扫整个世界,摧毁一切生灵。'), +(37225, 6, 0, 'zhCN', '要有个崇高的灵魂作出牺牲……'), +(37225, 7, 0, 'zhCN', '我不知道,吉安娜。我怀疑正是阿尔萨斯残留在巫妖王体内的一缕灵魂阻止了天灾军团彻底毁灭艾泽拉斯。'), +(37225, 8, 0, 'zhCN', '不,吉安娜!啊……他……他来了。你……你必须……'), +(37225, 9, 0, 'zhCN', '小心,女孩。我听说这把被诅咒的剑救过我们。注意周围,看看霜之哀伤都创造了些什么。'), +(37225, 10, 0, 'zhCN', '你没有时间了。巫妖王能看到剑旁的一切。他就要来了。'), +(37225, 11, 0, 'zhCN', '在这里,你无法击败巫妖王。这种企图是愚蠢的。他会打倒那些跟随你的人,把他们变成强大的天灾战士。只有你除外,希尔瓦娜斯……他对你的“馈赠”要比上次更恐怖。'), +(37225, 12, 0, 'zhCN', '也许吧,但要记住:一定要有一位巫妖王。即使你终结了阿尔萨斯,也要有另一个人来取代他。没有了巫妖王的控制,天灾军团就会像蝗灾一样横扫世界,所到之处,寸草不生。'), +(37225, 13, 0, 'zhCN', '我不知道,女妖之王。我怀疑正是阿尔萨斯残留在巫妖王体内的一缕灵魂阻止了天灾军团彻底毁灭艾泽拉斯。'), +(37225, 14, 0, 'zhCN', '唉,击败巫妖王的唯一方法就是在他的诞生地摧毁他。'), +(37225, 15, 0, 'zhCN', '啊……他……他来了。你……你必须……'), +(37225, 16, 0, 'zhCN', '住手!你快把那剑放下!'), +(37225, 17, 0, 'zhCN', '你知道你在干什么吗?'), +(37225, 18, 0, 'zhCN', '你用上古之神的血,萨隆邪铁重铸了这把剑。巫妖王的力量会召唤它。'), +(37225, 19, 0, 'zhCN', '只要你留在这里,奎尔德拉就会汲取这里的邪能。'), +(37225, 20, 0, 'zhCN', '只有一个办法能净化它。赶快到太阳之井去,将剑沉入井水之中。'), +(37225, 21, 0, 'zhCN', '我抵抗不了霜之哀伤的召唤……巫妖王来了……'); + +-- Sylvanas (Part 1) +DELETE FROM `creature_text` WHERE `CreatureID`=37223; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(37223, 0, 0, 'I... I don\'t believe it! Frostmourne stands before us - unguarded - just as the gnome claimed. Come, heroes!', 14, 0, 100, 0, 0, 17049, 37568, 0, 'Sylvanas SAY_SYLVANAS_INTRO_1'), +(37223, 1, 0, 'Standing this close to the blade that ended my life... The pain... It is renewed.', 14, 0, 100, 0, 0, 17050, 37569, 0, 'Sylvanas SAY_SYLVANAS_INTRO_2'), +(37223, 2, 0, 'I dare not touch it. Stand back! Stand back as I attempt to commune with the blade! Perhaps our salvation lies within...', 14, 0, 100, 0, 0, 17051, 37570, 0, 'Sylvanas SAY_SYLVANAS_INTRO_3'), +(37223, 3, 0, 'Uther... Uther the Lightbringer. How...', 12, 0, 100, 0, 0, 17052, 37571, 0, 'Sylvanas SAY_SYLVANAS_INTRO_4'), +(37223, 4, 0, 'The Lich King is here? Then my destiny shall be fulfilled on this day! ', 12, 0, 100, 0, 0, 17053, 37572, 0, 'Sylvanas SAY_SYLVANAS_INTRO_5'), +(37223, 5, 0, 'There must be a way...', 12, 0, 100, 0, 0, 17054, 37573, 0, 'Sylvanas SAY_SYLVANAS_INTRO_6'), +(37223, 6, 0, 'Who could bear such a burden?', 12, 0, 100, 0, 0, 17055, 37600, 0, 'Sylvanas SAY_SYLVANAS_INTRO_7'), +(37223, 7, 0, 'The Frozen Throne...', 12, 0, 100, 0, 0, 17056, 37575, 0, 'Sylvanas SAY_SYLVANAS_INTRO_8'), +(37223, 8, 0, 'You will not escape me that easily, Arthas! I will have my vengeance! ', 14, 0, 100, 0, 0, 17057, 37576, 0, 'Sylvanas SAY_SYLVANAS_INTRO_END'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=37223 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(37223, 0, 0, 'zhCN', '真是……不敢相信!霜之哀伤居然……无人看管,那个侏儒说的没错。来吧,英雄们!'), +(37223, 1, 0, 'zhCN', '就是这把剑终结了我的生命……那种痛苦……挥之不去。'), +(37223, 2, 0, 'zhCN', '我不敢碰它。后退!后退,我要试着和这把剑交谈!也许我们的救赎就在其中……'), +(37223, 3, 0, 'zhCN', '乌瑟尔……乌瑟尔·光明使者。怎么……'), +(37223, 4, 0, 'zhCN', '巫妖王就在这里?那今天就是我完成使命的日子!'), +(37223, 5, 0, 'zhCN', '一定有办法……'), +(37223, 6, 0, 'zhCN', '谁能扛起这样的重担?'), +(37223, 7, 0, 'zhCN', '冰封王座……'), +(37223, 8, 0, 'zhCN', '你别想轻易逃走,阿尔萨斯!我的仇一定要报!'); + +-- Jaina (Part 1) +DELETE FROM `creature_text` WHERE `CreatureID`=37221; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(37221, 0, 0, 'The chill of this place... I can feel my blood freezing.', 14, 0, 100, 0, 0, 16631, 37591, 0, 'Jaina SAY_JAINA_INTRO_1'), +(37221, 1, 0, 'What is that! Up ahead! Could it be? Heroes, at my side!', 14, 0, 100, 0, 0, 16632, 37592, 0, 'Jaina SAY_JAINA_INTRO_2'), +(37221, 2, 0, 'Frostmourne: the blade that destroyed our kingdom...', 14, 0, 100, 0, 0, 16633, 37593, 0, 'Jaina SAY_JAINA_INTRO_3'), +(37221, 3, 0, 'Stand back! Touch that blade and your soul will be scarred for all eternity! I must attempt to commune with the spirits locked away within Frostmourne. Give me space. Back up, please. ', 14, 0, 100, 0, 0, 16634, 37594, 0, 'Jaina SAY_JAINA_INTRO_4'), +(37221, 4, 0, 'Uther! Dear Uther! I... I\'m so sorry.', 12, 0, 100, 0, 0, 16635, 37595, 0, 'Jaina SAY_JAINA_INTRO_5'), +(37221, 5, 0, 'Arthas is here? Maybe I...', 12, 0, 100, 0, 0, 16636, 37596, 0, 'Jaina SAY_JAINA_INTRO_6'), +(37221, 6, 0, 'But Uther, if there\'s any hope of reaching Arthas. I... I must try.', 12, 0, 100, 0, 0, 16637, 37597, 0, 'Jaina SAY_JAINA_INTRO_7'), +(37221, 7, 0, 'Tell me how, Uther? How do I destroy my prince? My...', 12, 0, 100, 0, 0, 16638, 37598, 0, 'Jaina SAY_JAINA_INTRO_8'), +(37221, 8, 0, 'You\'re right, Uther. Forgive me. I... I don\'t know what got a hold of me. We will deliver this information to the King and the knights that battle the Scourge within Icecrown Citadel.', 12, 0, 100, 0, 0, 16639, 37599, 0, 'Jaina SAY_JAINA_INTRO_9'), +(37221, 9, 0, 'Who could bear such a burden?', 12, 0, 100, 0, 0, 16640, 37600, 0, 'Jaina SAY_JAINA_INTRO_10'), +(37221, 10, 0, 'Then maybe there is still hope...', 12, 0, 100, 0, 0, 16641, 37601, 0, 'Jaina SAY_JAINA_INTRO_11'), +(37221, 11, 0, 'You won\'t deny me this, Arthas! I must know... I must find out... ', 14, 0, 100, 0, 0, 16642, 37602, 0, 'Jaina SAY_JAINA_INTRO_END'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=37221 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(37221, 0, 0, 'zhCN', '这种刺骨的寒冷……血液好像都要凝结了。'), +(37221, 1, 0, 'zhCN', '看前面!那是什么!难道是?英雄们,到我身边来!'), +(37221, 2, 0, 'zhCN', '霜之哀伤:正是它摧毁了我们的王国。'), +(37221, 3, 0, 'zhCN', '后退!如果碰到这把剑,你的灵魂就会受到永恒的创伤!我必须试着与封印在霜之哀伤中的灵魂交谈。远离我,请再后退一点。'), +(37221, 4, 0, 'zhCN', '乌瑟尔!亲爱的乌瑟尔!我……很难过。'), +(37221, 5, 0, 'zhCN', '阿尔萨斯在这里?也许我……'), +(37221, 6, 0, 'zhCN', '但是,乌瑟尔,哪怕有一丝见到他的可能,我……我也要去。'), +(37221, 7, 0, 'zhCN', '告诉我,乌瑟尔,我该怎样终结我的王子?我的……'), +(37221, 8, 0, 'zhCN', '你是对的,乌瑟尔。原谅我。我……我不知道自己是怎么了。正在冰冠堡垒与天灾军团作战的国王和骑士们很快就会得到我们的报告。'), +(37221, 9, 0, 'zhCN', '谁能扛起这样的重担?'), +(37221, 10, 0, 'zhCN', '也许还有希望……'), +(37221, 11, 0, 'zhCN', '你不能拒绝我,阿尔萨斯!我必须知道……必须明白……'); + +-- The Lich King Boss (Part 2) +DELETE FROM `creature_text` WHERE `CreatureID`=36954; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(36954, 0, 0, 'Your allies have arrived Jaina, just as you promised. You will all become powerful agents of the Scourge.', 14, 0, 100, 0, 0, 17212, 37172, 0, 'Lich King SAY_LK_AGGRO_ALLY'), +(36954, 1, 0, 'I will not make the same mistake again, Sylvanas. This time there will be no escape. You will all serve me in death!', 14, 0, 100, 0, 0, 17213, 37173, 0, 'Lich King SAY_LK_AGGRO_HORDE'), +(36954, 2, 0, 'There is no escape!', 14, 0, 100, 0, 0, 17217, 37177, 0, 'Lich King SAY_LK_WALL_01'), +(36954, 3, 0, 'Succumb to the chill of the grave.', 14, 0, 100, 0, 0, 17218, 37175, 0, 'Lich King SAY_LK_WALL_02'), +(36954, 4, 0, 'Another dead end.', 14, 0, 100, 0, 0, 17219, 37176, 0, 'Lich King SAY_LK_WALL_03'), +(36954, 5, 0, 'How long can you fight it?', 14, 0, 100, 0, 0, 17220, 38668, 0, 'Lich King SAY_LK_WALL_04'), +(36954, 6, 0, 'Arise minions. Do not let them pass.', 14, 0, 100, 0, 0, 17216, 38669, 0, 'Lich King SAY_LK_GHOUL'), +(36954, 7, 0, 'Minions, sieze them. Bring their corpses back to me.', 14, 0, 100, 0, 0, 17222, 38670, 0, 'Lich King SAY_LK_ABON'), +(36954, 8, 0, 'Death\'s cold embrace awaits.', 14, 0, 100, 0, 0, 17221, 37174, 0, 'Lich King SAY_LK_KING_WINTER'), +(36954, 9, 0, 'Nowhere to run! You\'re mine now...', 14, 0, 100, 0, 0, 17223, 36994, 0, 'Lich King SAY_LK_NOWHERE_TO_RUN'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36954 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(36954, 0, 0, 'zhCN', '你的盟友到了,吉安娜,你说的没错。全都变成效忠我的天灾战士吧。'), +(36954, 1, 0, 'zhCN', '我不会再犯同样的错误,希尔瓦娜斯。这次你走不了了,你们死后都会成为我的奴仆!'), +(36954, 2, 0, 'zhCN', '你们无路可逃!'), +(36954, 3, 0, 'zhCN', '屈服于死亡的严寒吧!'), +(36954, 4, 0, 'zhCN', '死路一条!'), +(36954, 5, 0, 'zhCN', '你们能抵挡多久?'), +(36954, 6, 0, 'zhCN', '苏醒吧,奴仆们。拦住他们。'), +(36954, 7, 0, 'zhCN', '奴仆们,抓住他们!带他们的尸体来见我!'), +(36954, 8, 0, 'zhCN', '阴冷的死亡等待着你。'), +(36954, 9, 0, 'zhCN', '穷途末路……变成我的奴仆吧!'); + +-- (Horde) Sky-Reaver Korm Blackscar +DELETE FROM `creature_text` WHERE `CreatureID`=30824; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(30824, 0, 0, 'FIRE! FIRE!', 14, 0, 100, 0, 0, 16732, 38681, 0, 'Sky-Reaver Korm Blackscar SAY_FIRE_HORDE'), +(30824, 1, 0, 'Get on board, now! This whole mountainside could collapse at any moment.', 14, 0, 100, 0, 0, 16733, 37212, 0, 'Sky-Reaver Korm Blackscar SAY_ONBOARD_HORDE'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=30824 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(30824, 0, 0, 'zhCN', '开火!开火!'), +(30824, 1, 0, 'zhCN', '立刻上船!快!这面山壁随时都可能塌陷。'); + +-- (Alliance) High Captain Justin Bartlett +DELETE FROM `creature_text` WHERE `CreatureID`=30344; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(30344, 0, 0, 'FIRE! FIRE!', 14, 0, 100, 0, 0, 16721, 36993, 0, 'High Captain Justin Bartlett SAY_FIRE_ALLY'), +(30344, 1, 0, 'Quickly, climb aboard! We mustn\'t tarry here! There\'s no telling when this whole mountainside will collapse.', 14, 0, 100, 0, 0, 16722, 37213, 0, 'High Captain Justin Bartlett SAY_ONBOARD_ALLY'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=30344 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(30344, 0, 0, 'zhCN', '开火!开火!'), +(30344, 1, 0, 'zhCN', '快!立刻上船!此地不可久留,整面山壁随时都可能塌陷。'); + +-- Sylvanas (Part 2) +DELETE FROM `creature_text` WHERE `CreatureID`=37554; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `comment`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`) VALUES +(37554, 0, 0, 'He\'s... too powerful. Heroes, quickly... come to me! We must leave this place at once! I will do what I can do hold him in place while we flee.', 14, 'Sylvanas SAY_SYLVANA_AGGRO', 0, 100, 0, 0, 17058, 37168, 0), +(37554, 1, 0, 'No wall can hold the Banshee Queen. Keep the undead at bay, heroes. I will tear this barrier down!', 14, 'Sylvanas SAY_SYLVANA_WALL_01', 0, 100, 0, 0, 17029, 38540, 0), +(37554, 2, 0, 'Another barrier? Stand strong, champions. I will bring the wall down.', 14, 'Sylvanas SAY_SYLVANA_WALL_02', 0, 100, 0, 0, 17030, 38541, 0), +(37554, 3, 0, 'I grow tired of these games, Arthas! Your walls can\'t stop me!', 14, 'Sylvanas SAY_SYLVANA_WALL_03', 0, 100, 0, 0, 17031, 38542, 0), +(37554, 4, 0, 'You won\'t impede our escape, fiend! Keep the undead off me while I bring this barrier down.', 14, 'Sylvanas SAY_SYLVANA_WALL_04', 0, 100, 0, 0, 17032, 38543, 0), +(37554, 5, 0, 'There\'s an opening up ahead. GO NOW!', 14, 'Sylvanas SAY_SYLVANA_ESCAPE_01', 0, 100, 1, 0, 17059, 38551, 0), +(37554, 6, 0, 'We\'re almost there... Don\'t give up!', 14, 'Sylvanas SAY_SYLVANA_ESCAPE_02', 0, 100, 0, 0, 17060, 38538, 0), +(37554, 7, 0, 'BLASTED DEAD END! So this is how it ends. Prepare yourselves, heroes, for today we make our final stand!', 14, 'Sylvanas SAY_SYLVANA_TRAP', 0, 100, 5, 0, 17061, 37170, 0), +(37554, 8, 0, 'We are safe... for now. His strength has increased tenfold since our last battle. It will take a mighty army to destroy the Lich King. An army greater than even the Horde can rouse.', 14, 'Sylvanas SAY_SYLVANA_FINAL', 0, 100, 1, 0, 17062, 37171, 0); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=37554 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(37554, 0, 0, 'zhCN', '他……太强大了。英雄们,快,快过来!我们必须马上离开!你们先走。我会尽全力挡住他。'), +(37554, 1, 0, 'zhCN', '没有墙壁能阻挡女妖之王。挡住那些亡灵,英雄们。我会粉碎这道屏障!'), +(37554, 2, 0, 'zhCN', '又是一道!坚持住,勇士们。我会粉碎这面冰墙。'), +(37554, 3, 0, 'zhCN', '我厌倦了你的把戏,阿尔萨斯!你的冰墙阻挡不了我!'), +(37554, 4, 0, 'zhCN', '你们这些恶魔拦不住我们!挡住那些亡灵,我在努力摧毁冰墙!'), +(37554, 5, 0, 'zhCN', '前面有个出口,赶快!'), +(37554, 6, 0, 'zhCN', '我们就要到了……不要放弃!'), +(37554, 7, 0, 'zhCN', '天杀的死路!看来真的无路可走了。准备战斗,英雄们,让我们放手一搏!'), +(37554, 8, 0, 'zhCN', '我们暂时……安全了。他的力量已经十倍于往昔。只有一支大军才能战胜巫妖王。单凭部落的力量毫无胜算。'); + +-- Jaina (Part 2) +DELETE FROM `creature_text` WHERE `CreatureID`=36955; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(36955, 0, 0, 'He is too powerful, we must leave this place at once! My magic will hold him in place for only a short time! Come quickly, heroes!', 14, 0, 100, 1, 0, 16644, 36821, 0, 'Jaina SAY_JAINA_AGGRO'), +(36955, 1, 0, 'I will destroy this barrier. You must hold the undead back!', 14, 0, 100, 0, 0, 16607, 38536, 0, 'Jaina SAY_JAINA_WALL_01'), +(36955, 2, 0, 'Another ice wall! Keep the undead from interrupting my incantations so that I may bring this wall down.', 14, 0, 100, 0, 0, 16608, 38537, 0, 'Jaina SAY_JAINA_WALL_02'), +(36955, 3, 0, 'We\'re almost there... Don\'t give up', 14, 0, 100, 0, 0, 16646, 38538, 0, 'Jaina SAY_JAINA_WALL_03'), +(36955, 4, 0, 'Your barriers can\'t hold us back much longer, monster! I will shatter them all!', 14, 0, 100, 0, 0, 16610, 38539, 0, 'Jaina SAY_JAINA_WALL_04'), +(36955, 5, 0, 'There\'s an opening up ahead. GO NOW!', 14, 0, 100, 1, 0, 16645, 38551, 0, 'Jaina SAY_JAINA_ESCAPE_01'), +(36955, 6, 0, 'It... It\'s a dead end. We have no choice but to fight. Steel yourselves, heroes, for this is our last stand!', 14, 0, 100, 1, 0, 16647, 36992, 0, 'Jaina SAY_JAINA_TRAP'), +(36955, 7, 0, 'Forgive me, heroes. I should have listened to Uther. I... I just had to see for myself. To look into his eyes one last time. I am sorry.', 14, 0, 100, 1, 0, 16648, 36990, 0, 'Jaina SAY_JAINA_FINAL_1'), +(36955, 8, 0, 'We now know what must be done. I will deliver this news to King Varian and Highlord Fordring.', 14, 0, 100, 1, 0, 16649, 36991, 0, 'Jaina SAY_JAINA_FINAL_2'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36955 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(36955, 0, 0, 'zhCN', '太强大了。我们必须马上离开!我的魔法只能暂时拖住他。快来,英雄们!'), +(36955, 1, 0, 'zhCN', '我会摧毁这道屏障,但你必须挡住那些亡灵!'), +(36955, 2, 0, 'zhCN', '又是一道冰墙!不要让那些亡灵打断我的法术,这样我才能摧毁冰墙。'), +(36955, 3, 0, 'zhCN', '我们就要到了……不要放弃!'), +(36955, 4, 0, 'zhCN', '你的屏障挡不住我们,怪物!我会将它们全部粉碎!'), +(36955, 5, 0, 'zhCN', '前面有个出口,赶快!'), +(36955, 6, 0, 'zhCN', '这……这是死路!我们别无选择,只能战斗。准备迎战,英雄们,这是我们最后的阵地。'), +(36955, 7, 0, 'zhCN', '原谅我,英雄们。我应该听乌瑟尔的。我……我只是希望能够,能够看他最后一眼。对不起。'), +(36955, 8, 0, 'zhCN', '我们知道该怎么做了。我会把这个消息带给瓦里安国王和弗丁大人。'); + +-- Wave mobs - Ghostly Priest, Phantom Mage, Shadowy Mercenary, Spectral Footman, Tortured Rifleman +SET @PRIEST := 38175; +SET @MAGE := 38172; +SET @MERC := 38177; +SET @FOOTMAN := 38173; +SET @RIFLEMAN := 38176; + +DELETE FROM `creature_text` WHERE `CreatureID` IN (@PRIEST, @MAGE, @MERC, @FOOTMAN, @RIFLEMAN); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(@PRIEST, 0, 0, 'All serve the master in death.', 12, 0, 100, 0, 0, 0, 38527, 0, 'Priest SAY_WAVE_DEATH_1'), +(@PRIEST, 0, 1, 'Our souls will never be freed.', 12, 0, 100, 0, 0, 0, 38529, 0, 'Priest SAY_WAVE_DEATH_2'), +(@PRIEST, 0, 2, 'Our torment is eternal.', 12, 0, 100, 0, 0, 0, 38525, 0, 'Priest SAY_WAVE_DEATH_3'), +(@PRIEST, 0, 3, 'This is but a brief repose...', 12, 0, 100, 0, 0, 0, 38528, 0, 'Priest SAY_WAVE_DEATH_4'), +(@PRIEST, 0, 4, 'This is not our final rest.', 12, 0, 100, 0, 0, 0, 38526, 0, 'Priest SAY_WAVE_DEATH_5'), +(@MAGE, 0, 0, 'All serve the master in death.', 12, 0, 100, 0, 0, 0, 38527, 0, 'Mage SAY_WAVE_DEATH_1'), +(@MAGE, 0, 1, 'Our souls will never be freed.', 12, 0, 100, 0, 0, 0, 38529, 0, 'Mage SAY_WAVE_DEATH_2'), +(@MAGE, 0, 2, 'Our torment is eternal.', 12, 0, 100, 0, 0, 0, 38525, 0, 'Mage SAY_WAVE_DEATH_3'), +(@MAGE, 0, 3, 'This is but a brief repose...', 12, 0, 100, 0, 0, 0, 38528, 0, 'Mage SAY_WAVE_DEATH_4'), +(@MAGE, 0, 4, 'This is not our final rest.', 12, 0, 100, 0, 0, 0, 38526, 0, 'Mage SAY_WAVE_DEATH_5'), +(@MERC, 0, 0, 'All serve the master in death.', 12, 0, 100, 0, 0, 0, 38527, 0, 'Mercenary SAY_WAVE_DEATH_1'), +(@MERC, 0, 1, 'Our souls will never be freed.', 12, 0, 100, 0, 0, 0, 38529, 0, 'Mercenary SAY_WAVE_DEATH_2'), +(@MERC, 0, 2, 'Our torment is eternal.', 12, 0, 100, 0, 0, 0, 38525, 0, 'Mercenary SAY_WAVE_DEATH_3'), +(@MERC, 0, 3, 'This is but a brief repose...', 12, 0, 100, 0, 0, 0, 38528, 0, 'Mercenary SAY_WAVE_DEATH_4'), +(@MERC, 0, 4, 'This is not our final rest.', 12, 0, 100, 0, 0, 0, 38526, 0, 'Mercenary SAY_WAVE_DEATH_5'), +(@FOOTMAN, 0, 0, 'All serve the master in death.', 12, 0, 100, 0, 0, 0, 38527, 0, 'Footman SAY_WAVE_DEATH_1'), +(@FOOTMAN, 0, 1, 'Our souls will never be freed.', 12, 0, 100, 0, 0, 0, 38529, 0, 'Footman SAY_WAVE_DEATH_2'), +(@FOOTMAN, 0, 2, 'Our torment is eternal.', 12, 0, 100, 0, 0, 0, 38525, 0, 'Footman SAY_WAVE_DEATH_3'), +(@FOOTMAN, 0, 3, 'This is but a brief repose...', 12, 0, 100, 0, 0, 0, 38528, 0, 'Footman SAY_WAVE_DEATH_4'), +(@FOOTMAN, 0, 4, 'This is not our final rest.', 12, 0, 100, 0, 0, 0, 38526, 0, 'Footman SAY_WAVE_DEATH_5'), +(@RIFLEMAN, 0, 0, 'All serve the master in death.', 12, 0, 100, 0, 0, 0, 38527, 0, 'Rifleman SAY_WAVE_DEATH_1'), +(@RIFLEMAN, 0, 1, 'Our souls will never be freed.', 12, 0, 100, 0, 0, 0, 38529, 0, 'Rifleman SAY_WAVE_DEATH_2'), +(@RIFLEMAN, 0, 2, 'Our torment is eternal.', 12, 0, 100, 0, 0, 0, 38525, 0, 'Rifleman SAY_WAVE_DEATH_3'), +(@RIFLEMAN, 0, 3, 'This is but a brief repose...', 12, 0, 100, 0, 0, 0, 38528, 0, 'Rifleman SAY_WAVE_DEATH_4'), +(@RIFLEMAN, 0, 4, 'This is not our final rest.', 12, 0, 100, 0, 0, 0, 38526, 0, 'Rifleman SAY_WAVE_DEATH_5'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID` IN (@PRIEST, @MAGE, @MERC, @FOOTMAN, @RIFLEMAN) AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(@PRIEST, 0, 0, 'zhCN', '死后仍为主人效命。'), +(@PRIEST, 0, 1, 'zhCN', '我们的灵魂将永无宁日。'), +(@PRIEST, 0, 2, 'zhCN', '我们永远无法摆脱折磨。'), +(@PRIEST, 0, 3, 'zhCN', '这只不过是暂时的休息…。'), +(@PRIEST, 0, 4, 'zhCN', '最终的胜利还没有到来。'), +(@MAGE, 0, 0, 'zhCN', '死后仍为主人效命。'), +(@MAGE, 0, 1, 'zhCN', '我们的灵魂将永无宁日。'), +(@MAGE, 0, 2, 'zhCN', '我们永远无法摆脱折磨。'), +(@MAGE, 0, 3, 'zhCN', '这只不过是暂时的休息…。'), +(@MAGE, 0, 4, 'zhCN', '最终的胜利还没有到来。'), +(@MERC, 0, 0, 'zhCN', '死后仍为主人效命。'), +(@MERC, 0, 1, 'zhCN', '我们的灵魂将永无宁日。'), +(@MERC, 0, 2, 'zhCN', '我们永远无法摆脱折磨。'), +(@MERC, 0, 3, 'zhCN', '这只不过是暂时的休息…。'), +(@MERC, 0, 4, 'zhCN', '最终的胜利还没有到来。'), +(@FOOTMAN, 0, 0, 'zhCN', '死后仍为主人效命。'), +(@FOOTMAN, 0, 1, 'zhCN', '我们的灵魂将永无宁日。'), +(@FOOTMAN, 0, 2, 'zhCN', '我们永远无法摆脱折磨。'), +(@FOOTMAN, 0, 3, 'zhCN', '这只不过是暂时的休息…。'), +(@FOOTMAN, 0, 4, 'zhCN', '最终的胜利还没有到来。'), +(@RIFLEMAN, 0, 0, 'zhCN', '死后仍为主人效命。'), +(@RIFLEMAN, 0, 1, 'zhCN', '我们的灵魂将永无宁日。'), +(@RIFLEMAN, 0, 2, 'zhCN', '我们永远无法摆脱折磨。'), +(@RIFLEMAN, 0, 3, 'zhCN', '这只不过是暂时的休息…。'), +(@RIFLEMAN, 0, 4, 'zhCN', '最终的胜利还没有到来。'); diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index b01c72b90..bd4ff3fc2 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -19,12 +19,11 @@ enum Yells { - SAY_AGGRO = 50, - SAY_SLAY_1 = 51, - SAY_SLAY_2 = 52, - SAY_DEATH = 53, - SAY_IMPENDING_DESPAIR = 54, - SAY_DEFILING_HORROR = 55, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_IMPENDING_DESPAIR = 3, + SAY_DEFILING_HORROR = 4, }; enum Spells @@ -161,7 +160,7 @@ public: void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) - Talk(RAND(SAY_SLAY_1, SAY_SLAY_2)); + Talk(SAY_SLAY); } void EnterEvadeMode(EvadeReason why) override diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp index 607c19e39..adca1d771 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp @@ -19,12 +19,11 @@ enum Yells { - SAY_AGGRO = 60, - SAY_SLAY_1 = 61, - SAY_SLAY_2 = 62, - SAY_DEATH = 63, - SAY_CORRUPTED_FLESH_1 = 64, - SAY_CORRUPTED_FLESH_2 = 65, + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_CORRUPTED_FLESH = 3, + SAY_CORRUPTED_WELL = 4, }; enum Spells @@ -121,12 +120,13 @@ public: events.ScheduleEvent(EVENT_OBLITERATE, 3000); break; case EVENT_WELL_OF_CORRUPTION: + Talk(SAY_CORRUPTED_WELL); if (Unit* target = SelectTargetFromPlayerList(40.0f, 0, true)) me->CastSpell(target, SPELL_WELL_OF_CORRUPTION, false); events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); break; case EVENT_CORRUPTED_FLESH: - Talk(RAND(SAY_CORRUPTED_FLESH_1, SAY_CORRUPTED_FLESH_2)); + Talk(SAY_CORRUPTED_FLESH); me->CastSpell((Unit*)nullptr, SPELL_CORRUPTED_FLESH, false); events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); break; @@ -150,7 +150,7 @@ public: void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) - Talk(RAND(SAY_SLAY_1, SAY_SLAY_2)); + Talk(SAY_SLAY); } void EnterEvadeMode(EvadeReason why) override diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 35f53e006..2001b8f01 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -84,6 +84,15 @@ enum Events EVENT_INTRO_END_SET, }; +enum Gossips +{ + GOSSIP_MENU_SYLVANAS = 10950, + GOSISP_MENU_JAINA = 11031, + + GOSSIP_OPTION_START = 0, + GOSSIP_OPTION_START_SKIP = 1, +}; + class npc_hor_leader : public CreatureScript { public: @@ -107,27 +116,19 @@ public: { QuestStatus status = player->GetQuestStatus(creature->GetEntry() == NPC_SYLVANAS_PART1 ? QUEST_DELIVRANCE_FROM_THE_PIT_H2 : QUEST_DELIVRANCE_FROM_THE_PIT_A2); if (status == QUEST_STATUS_COMPLETE || status == QUEST_STATUS_REWARDED) - AddGossipItemFor(player, 0, "Can you remove the sword?", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + { + AddGossipItemFor(player, creature->GetEntry() == NPC_SYLVANAS_PART1 ? GOSSIP_MENU_SYLVANAS : GOSISP_MENU_JAINA, GOSSIP_OPTION_START, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + } // once last quest is completed, she offers this shortcut of the starting event status = player->GetQuestStatus(creature->GetEntry() == NPC_SYLVANAS_PART1 ? QUEST_WRATH_OF_THE_LICH_KING_H2 : QUEST_WRATH_OF_THE_LICH_KING_A2); if (status == QUEST_STATUS_COMPLETE || status == QUEST_STATUS_REWARDED) { - if (creature->GetEntry() == NPC_SYLVANAS_PART1) - AddGossipItemFor(player, 0, "Dark Lady, I think I hear Arthas coming. Whatever you're going to do, do it quickly.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - else - AddGossipItemFor(player, 0, "My Lady, I think I hear Arthas coming. Whatever you're going to do, do it quickly.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + AddGossipItemFor(player, creature->GetEntry() == NPC_SYLVANAS_PART1 ? GOSSIP_MENU_SYLVANAS : GOSISP_MENU_JAINA, GOSSIP_OPTION_START_SKIP, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); } } - if (creature->GetEntry() == NPC_SYLVANAS_PART1) - { - SendGossipMenuFor(player, 15215, creature->GetGUID()); - } - else if (creature->GetEntry() == NPC_JAINA_PART1) - { - SendGossipMenuFor(player, 15339, creature->GetGUID()); - } + SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); return true; } @@ -703,6 +704,14 @@ public: events.ScheduleEvent(EVENT_DARK_MENDING, 8000); } + void JustDied(Unit* /*killer*/) override + { + if (!urand(0,9)) + { + Talk(SAY_WAVE_DEATH); + } + } + void AttackStart(Unit* who) override { if (!me->IsVisible() || me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) @@ -803,6 +812,14 @@ public: events.ScheduleEvent(EVENT_HALLUCINATION, 40000); } + void JustDied(Unit* /*killer*/) override + { + if (!urand(0,9)) + { + Talk(SAY_WAVE_DEATH); + } + } + void AttackStart(Unit* who) override { if (!me->IsVisible() || me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) @@ -949,6 +966,14 @@ public: events.ScheduleEvent(EVENT_KIDNEY_SHOT, 5000); } + void JustDied(Unit* /*killer*/) override + { + if (!urand(0,9)) + { + Talk(SAY_WAVE_DEATH); + } + } + void AttackStart(Unit* who) override { if (!me->IsVisible() || me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) @@ -1046,6 +1071,14 @@ public: events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); } + void JustDied(Unit* /*killer*/) override + { + if (!urand(0,9)) + { + Talk(SAY_WAVE_DEATH); + } + } + void AttackStart(Unit* who) override { if (!me->IsVisible() || me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) @@ -1132,6 +1165,14 @@ public: events.ScheduleEvent(EVENT_ICE_SHOT, 15000); } + void JustDied(Unit* /*killer*/) override + { + if (!urand(0,9)) + { + Talk(SAY_WAVE_DEATH); + } + } + void AttackStart(Unit* who) override { if (!me->IsVisible() || me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) @@ -1542,7 +1583,7 @@ public: me->CastSpell((Unit*)nullptr, SPELL_FURY_OF_FROSTMOURNE, false); } break; - case EVENT_LK_START_FOLLOWING: + case EVENT_LK_START_FOLLOWING: /// @todo: LK Moves too fast at the begining and too slow after and the leaders (Sylvana/Jaina) should be running instead of walking. { me->SetSpeed(MOVE_RUN, 9.0f / 7.0f); Movement::PointsArray path; @@ -1555,7 +1596,7 @@ public: case EVENT_LK_REMORSELESS_WINTER: { me->SetSpeed(MOVE_RUN, me->GetCreatureTemplate()->speed_run); - Talk(SAY_LK_IW_1_SUMMON); + Talk(SAY_LK_WINTER); me->CastSpell(me, SPELL_REMORSELESS_WINTER, true); Movement::PointsArray path; path.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ())); @@ -1755,7 +1796,7 @@ public: if (Player* p = itr->GetSource()) p->KilledMonsterCredit(me->GetEntry()); // for quest - Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_LEAVE : SAY_SYLVANAS_LEAVE); + Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_AGGRO : SAY_SYLVANA_AGGRO); me->GetMotionMaster()->MovePoint(0, LeaderEscapePos); events.ScheduleEvent(EVENT_ADD_GOSSIP, 8000); } @@ -1797,11 +1838,9 @@ public: textId = SAY_SYLVANAS_IW_4; break; case 5: - textId = SAY_SYLVANAS_END; + textId = (me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_TRAP : SAY_SYLVANA_TRAP); break; } - if (me->GetEntry() == NPC_JAINA_PART2) - textId += 10; Talk(textId); if (currentStopPoint <= 4) me->CastSpell((Unit*)nullptr, (me->GetEntry() == NPC_JAINA_PART2 ? SPELL_DESTROY_WALL_JAINA : SPELL_DESTROY_WALL_SYLVANAS), false); @@ -1813,7 +1852,7 @@ public: } break; case EVENT_SAY_OPENING: - Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_OPENING : SAY_SYLVANAS_OPENING); + Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_ESCAPE_01 : SAY_SYLVANA_ESCAPE_01); break; } } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h index 9c1d584a3..55d9de53f 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h @@ -68,12 +68,13 @@ enum Creatures NPC_DARK_RANGER_LORALEN = 37779, NPC_ARCHMAGE_KORELN = 37582, + // Wave mobs + NPC_WAVE_PRIEST = 38175, + NPC_WAVE_MAGE = 38172, + NPC_PHANTOM_HALLUCINATION = 38567, // Doesn't talk NPC_WAVE_MERCENARY = 38177, NPC_WAVE_FOOTMAN = 38173, NPC_WAVE_RIFLEMAN = 38176, - NPC_WAVE_PRIEST = 38175, - NPC_WAVE_MAGE = 38172, - NPC_PHANTOM_HALLUCINATION = 38567, NPC_FROSTSWORN_GENERAL = 36723, NPC_SPIRITUAL_REFLECTION = 37068, @@ -124,94 +125,122 @@ enum BatteredHiltStatusFlags enum hYells { - SAY_JAINA_INTRO_1 = 1, - SAY_JAINA_INTRO_2 = 2, - SAY_JAINA_INTRO_3 = 3, - SAY_JAINA_INTRO_4 = 4, - SAY_UTHER_INTRO_A2_1 = 5, - SAY_JAINA_INTRO_5 = 6, - SAY_UTHER_INTRO_A2_2 = 7, - SAY_JAINA_INTRO_6 = 8, - SAY_UTHER_INTRO_A2_3 = 9, - SAY_JAINA_INTRO_7 = 10, - SAY_UTHER_INTRO_A2_4 = 11, - SAY_JAINA_INTRO_8 = 12, - SAY_UTHER_INTRO_A2_5 = 13, - SAY_JAINA_INTRO_9 = 14, - SAY_UTHER_INTRO_A2_6 = 15, - SAY_UTHER_INTRO_A2_7 = 16, - SAY_JAINA_INTRO_10 = 17, - SAY_UTHER_INTRO_A2_8 = 18, - SAY_JAINA_INTRO_11 = 19, - SAY_UTHER_INTRO_A2_9 = 20, + // Part 1 + // Alliance + SAY_JAINA_INTRO_1 = 0, + SAY_JAINA_INTRO_2 = 1, + SAY_JAINA_INTRO_3 = 2, + SAY_JAINA_INTRO_4 = 3, + SAY_UTHER_INTRO_A2_1 = 0, + SAY_JAINA_INTRO_5 = 4, + SAY_UTHER_INTRO_A2_2 = 1, + SAY_JAINA_INTRO_6 = 5, + SAY_UTHER_INTRO_A2_3 = 2, + SAY_JAINA_INTRO_7 = 6, + SAY_UTHER_INTRO_A2_4 = 3, + SAY_JAINA_INTRO_8 = 7, + SAY_UTHER_INTRO_A2_5 = 4, + SAY_JAINA_INTRO_9 = 8, + SAY_UTHER_INTRO_A2_6 = 5, + SAY_UTHER_INTRO_A2_7 = 6, + SAY_JAINA_INTRO_10 = 9, + SAY_UTHER_INTRO_A2_8 = 7, + SAY_JAINA_INTRO_11 = 10, + SAY_UTHER_INTRO_A2_9 = 8, - SAY_SYLVANAS_INTRO_1 = 21, - SAY_SYLVANAS_INTRO_2 = 22, - SAY_SYLVANAS_INTRO_3 = 23, - SAY_UTHER_INTRO_H2_1 = 24, - SAY_SYLVANAS_INTRO_4 = 25, - SAY_UTHER_INTRO_H2_2 = 26, - SAY_SYLVANAS_INTRO_5 = 27, - SAY_UTHER_INTRO_H2_3 = 28, - SAY_SYLVANAS_INTRO_6 = 29, - SAY_UTHER_INTRO_H2_4 = 30, - SAY_SYLVANAS_INTRO_7 = 31, - SAY_UTHER_INTRO_H2_5 = 32, - SAY_UTHER_INTRO_H2_6 = 33, - SAY_SYLVANAS_INTRO_8 = 34, - SAY_UTHER_INTRO_H2_7 = 35, + // Horde + SAY_SYLVANAS_INTRO_1 = 0, + SAY_SYLVANAS_INTRO_2 = 1, + SAY_SYLVANAS_INTRO_3 = 2, + SAY_UTHER_INTRO_H2_1 = 9, + SAY_SYLVANAS_INTRO_4 = 3, + SAY_UTHER_INTRO_H2_2 = 10, + SAY_SYLVANAS_INTRO_5 = 4, + SAY_UTHER_INTRO_H2_3 = 11, + SAY_SYLVANAS_INTRO_6 = 5, + SAY_UTHER_INTRO_H2_4 = 12, + SAY_SYLVANAS_INTRO_7 = 6, + SAY_UTHER_INTRO_H2_5 = 13, + SAY_UTHER_INTRO_H2_6 = 14, + SAY_SYLVANAS_INTRO_8 = 7, + SAY_UTHER_INTRO_H2_7 = 15, - SAY_LK_INTRO_1 = 36, - SAY_LK_INTRO_2 = 37, - SAY_LK_INTRO_3 = 38, - SAY_FALRIC_INTRO_1 = 39, - SAY_MARWYN_INTRO_1 = 40, - SAY_FALRIC_INTRO_2 = 41, + // The Lich King Event + SAY_LK_INTRO_1 = 0, + SAY_LK_INTRO_2 = 1, + SAY_LK_INTRO_3 = 2, + SAY_FALRIC_INTRO_1 = 5, + SAY_MARWYN_INTRO_1 = 5, + SAY_FALRIC_INTRO_2 = 6, - SAY_JAINA_INTRO_END = 42, - SAY_SYLVANAS_INTRO_END = 43, + SAY_JAINA_INTRO_END = 11, + SAY_SYLVANAS_INTRO_END = 8, - SAY_FROSTSWORN_GENERAL_AGGRO = 98, - SAY_FROSTSWORN_GENERAL_DEATH = 99, + // Wave mobs + SAY_WAVE_DEATH = 0, - SAY_LK_AGGRO_HORDE = 100, - SAY_LK_AGGRO_ALLY = 101, - SAY_SYLVANAS_LEAVE = 102, - SAY_JAINA_LEAVE = 103, - SAY_LK_IW_1 = 104, - SAY_LK_IW_2 = 105, - SAY_LK_IW_3 = 106, - SAY_LK_IW_4 = 107, - SAY_LK_IW_1_SUMMON = 108, - SAY_SYLVANAS_IW_1 = 109, - SAY_SYLVANAS_IW_2 = 110, - SAY_SYLVANAS_IW_3 = 111, - SAY_SYLVANAS_IW_4 = 112, - SAY_SYLVANAS_OPENING = 113, - SAY_SYLVANAS_END = 114, - SAY_LK_NOWHERE_TO_RUN = 115, - SAY_FIRE_HORDE = 116, - SAY_ONBOARD_HORDE = 117, - SAY_FINAL_HORDE = 118, - SAY_JAINA_IW_1 = 119, - SAY_JAINA_IW_2 = 120, - SAY_JAINA_IW_3 = 121, - SAY_JAINA_IW_4 = 122, - SAY_JAINA_OPENING = 123, - SAY_JAINA_END = 124, - SAY_FIRE_ALLY = 125, - SAY_ONBOARD_ALLY = 126, - SAY_FINAL_ALLY = 127, - SAY_FINAL_ALLY_SECOND = 128, + // Frostsworn General - Big add after Falrick and Marwyn + SAY_FROSTSWORN_GENERAL_AGGRO = 0, + SAY_FROSTSWORN_GENERAL_DEATH = 1, - SAY_BATTERED_HILT_HALT = 200, - SAY_BATTERED_HILT_LEAP = 201, - SAY_BATTERED_HILT_REALIZE = 202, - SAY_BATTERED_HILT_PREPARE = 203, - SAY_BATTERED_HILT_OUTRO1 = 204, - SAY_BATTERED_HILT_OUTRO2 = 205, - SAY_BATTERED_HILT_OUTRO3 = 206, - SAY_BATTERED_HILT_OUTRO4 = 207, + // Part 2 + // The Lich King Boss + SAY_LK_AGGRO_ALLY = 0, + SAY_LK_AGGRO_HORDE = 1, + SAY_LK_IW_1 = 2, + SAY_LK_IW_2 = 3, + SAY_LK_IW_3 = 4, + SAY_LK_IW_4 = 5, + //SAY_LK_GHOUL = 6, // Unused + //SAY_LK_ABON = 7, // Unused + SAY_LK_WINTER = 8, + SAY_LK_NOWHERE_TO_RUN = 9, + + // Horde + SAY_SYLVANA_AGGRO = 0, + SAY_SYLVANAS_IW_1 = 1, + SAY_SYLVANAS_IW_2 = 2, + SAY_SYLVANAS_IW_3 = 3, + SAY_SYLVANAS_IW_4 = 4, + SAY_SYLVANA_ESCAPE_01 = 5, + //SAY_SYLVANA_ESCAPE_02 = 6, // Unused + SAY_SYLVANA_TRAP = 7, + SAY_SYLVANA_FINAL = 8, + + // (H) Ship Captain 30824 + SAY_FIRE_HORDE = 0, + SAY_ONBOARD_HORDE = 1, + + // Alliance + SAY_JAINA_AGGRO = 0, + SAY_JAINA_IW_1 = 1, + SAY_JAINA_IW_2 = 2, + SAY_JAINA_IW_3 = 3, + SAY_JAINA_IW_4 = 4, + SAY_JAINA_ESCAPE_01 = 5, + SAY_JAINA_TRAP = 6, + SAY_JAINA_FINAL_1 = 7, + SAY_JAINA_FINAL_2 = 8, + + // (A) Ship Captain 30344 + SAY_FIRE_ALLY = 0, + SAY_ONBOARD_ALLY = 1, + + // Battered Hilt - Quest: The Halls Of Reflection + // Uther + SAY_BATTERED_HILT_HALT = 16, + EMOTE_QUEL_SPAWN = 0, // "Quel'Delar leeps to life in the presence of Frostmourne!" + SAY_BATTERED_HILT_REALIZE = 17, + EMOTE_QUEL_PREPARE = 1, // "Quel'Delar prepares to attack!" + SAY_BATTERED_HILT_OUTRO1 = 18, + SAY_BATTERED_HILT_OUTRO2 = 19, + SAY_BATTERED_HILT_OUTRO3 = 20, + SAY_BATTERED_HILT_OUTRO4 = 21, + + // Marwin - Said when starting after a wipe + EMOTE_MARWYN_INTRO_SPIRIT = 6, + // Marwin - Wipe between wave 6 and 9 + SAY_MARWYN_WIPE_AFTER_FALRIC = 7, }; enum hMisc @@ -264,6 +293,9 @@ enum hMisc SPELL_SUMMON_LUMBERING_ABOMINATION = 69835, SPELL_GUNSHIP_CANNON_FIRE_PERIODIC = 70017, SPELL_ACHIEVEMENT_CHECK = 72830, + + // Battered Hilt - Summon Quel'Delar + SPELL_SUMMON_EVIL_QUEL = 69966, }; const uint32 allowedCompositions[8][5] = @@ -339,12 +371,12 @@ const Position CannonFirePos[2][3] = const Position StairsPos[2][3] = { - { + { // Alliance stairs {5226.36f, 1640.87f, 785.737f, 5.56137f}, - {5213.76f, 1626.21f, 798.068f, 5.56534f}, + {5213.76f, 1626.21f, 798.068f, 5.56534f}, /// @todo: Issue with the clipping on the top most part, probably needs a positional sniff. {0.0f, 0.0f, 0.0f, 0.0f} }, - { + { // Horde stairs {5233.61f, 1607.48f, 796.5f, 5.77774f}, {5223.32f, 1589.24f, 809.0f, 5.76989f}, {5243.42f, 1624.8f, 784.361f, 5.76592f} diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index 41660c3bc..437351418 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -40,10 +40,14 @@ public: _owner.AI()->Talk(SAY_BATTERED_HILT_HALT); break; case 3: - _owner.CastSpell((Unit*)nullptr, 69966, true); + _owner.CastSpell((Unit*)nullptr, SPELL_SUMMON_EVIL_QUEL, true); _owner.AI()->Talk(SAY_BATTERED_HILT_REALIZE); if (InstanceScript* instance = _owner.GetInstanceScript()) instance->SetData(DATA_BATTERED_HILT, 4); + if (Creature* quel = _owner.FindNearestCreature(NPC_QUEL_DELAR, 50)) + { + quel->AI()->Talk(EMOTE_QUEL_SPAWN); + } _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, 4), _owner.m_Events.CalculateTime(3500)); break; case 4: @@ -62,8 +66,13 @@ public: break; case 7: if (InstanceScript* instance = _owner.GetInstanceScript()) + { instance->SetData(DATA_BATTERED_HILT, 7); - _owner.AI()->Talk(SAY_BATTERED_HILT_PREPARE); + } + if (Creature* quel = _owner.FindNearestCreature(NPC_QUEL_DELAR, 50)) + { + quel->AI()->Talk(EMOTE_QUEL_PREPARE); + } _owner.m_Events.AddEvent(new UtherBatteredHiltEvent(_owner, 8), _owner.m_Events.CalculateTime(4000)); break; case 8: @@ -606,8 +615,7 @@ public: BatteredHiltStatus |= BHSF_THROWN; if (Creature* c = instance->GetCreature(NPC_UtherGUID)) { - c->AI()->Talk(SAY_BATTERED_HILT_LEAP); - c->m_Events.AddEvent(new UtherBatteredHiltEvent(*c, 3), c->m_Events.CalculateTime(1500)); + c->m_Events.AddEvent(new UtherBatteredHiltEvent(*c, 3), c->m_Events.CalculateTime(5500)); } break; case 4: @@ -980,7 +988,7 @@ public: { if (ResumeFirstEventTimer <= diff) { - switch (ResumeFirstEventStep) + switch (ResumeFirstEventStep) // After a wipe { case 0: if (Creature* pFalric = instance->GetCreature(NPC_FalricGUID)) @@ -1007,14 +1015,27 @@ public: a->SetDuration(8000); } - pMarwyn->TextEmote("Spirits appear and surround the altar!", nullptr, true); + pMarwyn->AI()->Talk(EMOTE_MARWYN_INTRO_SPIRIT); } ++ResumeFirstEventStep; ResumeFirstEventTimer = 7500; break; case 1: if (Creature* pFalric = instance->GetCreature(NPC_FalricGUID)) - pFalric->AI()->Talk(SAY_FALRIC_INTRO_2); + { + if (pFalric->IsAlive()) + { + pFalric->AI()->Talk(SAY_FALRIC_INTRO_2); // Between wave 1 and 4 + } + else + { + if (Creature* marwyn = instance->GetCreature(NPC_MarwynGUID)) + { + marwyn->AI()->Talk(SAY_MARWYN_WIPE_AFTER_FALRIC); // Between wave 6 and 9 + } + } + } + SetData(ACTION_SHOW_TRASH, 1); ResumeFirstEventStep = 0; ResumeFirstEventTimer = 0; @@ -1154,7 +1175,7 @@ public: break; case 9: if (Creature* c = instance->GetCreature(NPC_LeaderGUID)) - c->AI()->Talk(TeamIdInInstance == TEAM_ALLIANCE ? SAY_FINAL_ALLY : SAY_FINAL_HORDE); + c->AI()->Talk(TeamIdInInstance == TEAM_ALLIANCE ? SAY_JAINA_FINAL_1 : SAY_SYLVANA_FINAL); HandleGameObject(GO_CaveInGUID, true); ++outroStep; outroTimer = 11000; @@ -1168,7 +1189,7 @@ public: if (TeamIdInInstance == TEAM_ALLIANCE) if (Creature* c = instance->GetCreature(NPC_LeaderGUID)) { - c->AI()->Talk(SAY_FINAL_ALLY_SECOND); + c->AI()->Talk(SAY_JAINA_FINAL_2); outroTimer = 10000; } break; From 88401360ab94d9d1704c928b0ed5edc8cef8caf9 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 4 Mar 2023 21:40:33 +0100 Subject: [PATCH 037/159] =?UTF-8?q?fix(Core/Spells):=20Seal=20of=20Command?= =?UTF-8?q?,=20Seal=20of=20Vengeance=20and=20Seal=20of=20Corr=E2=80=A6=20(?= =?UTF-8?q?#15193)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Spells/SpellEffects.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 4f620f10a..e10f6b620 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3352,6 +3352,7 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) // some spell specific modifiers float totalDamagePercentMod = 100.0f; // applied to final bonus+weapon damage int32 spell_bonus = 0; // bonus specific for spell + bool normalized = false; switch (m_spellInfo->SpellFamilyName) { @@ -3438,6 +3439,18 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) spell_bonus += int32(0.08f * m_caster->GetTotalAttackPowerValue(BASE_ATTACK)); spell_bonus += int32(0.13f * m_caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask())); } + + switch (m_spellInfo->Id) + { + case 20424: // Seal of Command + case 42463: // Seal of Vengeance + case 53739: // Seal of Corruption + case 53385: // Divine Storm + normalized = true; + break; + default: + break; + } break; } case SPELLFAMILY_SHAMAN: @@ -3557,14 +3570,9 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) } } - bool normalized = false; float weaponDamagePercentMod = 100.0f; int32 fixed_bonus = 0; - // xinef: Divine Storm deals normalized damage - if (m_spellInfo->Id == 53385) - normalized = true; - for (int j = 0; j < MAX_SPELL_EFFECTS; ++j) { switch (m_spellInfo->Effects[j].Effect) From d68913d1df8d8fec338dc2693bdf52a4e024739c Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 4 Mar 2023 21:40:48 +0100 Subject: [PATCH 038/159] =?UTF-8?q?fix(DB/Spells):=20Dirge's=20Kickin'=20C?= =?UTF-8?q?himaerok=20Chops=20should=20not=20stack=20with=E2=80=A6=20(#152?= =?UTF-8?q?09)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/sql/updates/pending_db_world/rev_1677409485979883900.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677409485979883900.sql diff --git a/data/sql/updates/pending_db_world/rev_1677409485979883900.sql b/data/sql/updates/pending_db_world/rev_1677409485979883900.sql new file mode 100644 index 000000000..fccb80e2d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677409485979883900.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `spell_group` WHERE `id`=1001 AND `spell_id`=25661; +INSERT INTO `spell_group` VALUES +(1001,25661,0); From ac0581bd43d5f7fc69c157bb458945bde021406e Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 4 Mar 2023 21:41:10 +0100 Subject: [PATCH 039/159] fix(Core/Pet): Fixed set hunter pet's speed on load. (#15206) --- .../game/Entities/Creature/Creature.cpp | 11 +---------- src/server/game/Entities/Pet/Pet.cpp | 5 +++++ src/server/game/Entities/Unit/Unit.cpp | 19 ++++++++++++------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 2d8e49251..afbed2ee0 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -459,17 +459,8 @@ bool Creature::InitEntry(uint32 Entry, const CreatureData* data) SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); - float runSpeed = cinfo->speed_run; - if (Pet* pet = ToPet()) - { - if (pet->isControlled() && pet->GetOwnerGUID().IsPlayer()) - { - runSpeed = 1.15f; - } - } - SetSpeed(MOVE_WALK, cinfo->speed_walk); - SetSpeed(MOVE_RUN, runSpeed); + SetSpeed(MOVE_RUN, cinfo->speed_run); SetSpeed(MOVE_SWIM, cinfo->speed_swim); SetSpeed(MOVE_FLIGHT, cinfo->speed_flight); diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index bc095df32..4548a76ea 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1048,6 +1048,11 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) else if (petType != SUMMON_PET) LOG_ERROR("entities.pet", "Unknown type pet {} is summoned by player class {}", GetEntry(), owner->getClass()); } + + if (petType == HUNTER_PET || petType == SUMMON_PET) + { + SetSpeed(MOVE_RUN, 1.15f); + } } uint32 creature_ID = (petType == HUNTER_PET) ? 1 : cinfo->Entry; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 0321294eb..f01645f3c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10700,11 +10700,6 @@ void Unit::SetMinion(Minion* minion, bool apply) // PvP, FFAPvP minion->SetByteValue(UNIT_FIELD_BYTES_2, 1, GetByteValue(UNIT_FIELD_BYTES_2, 1)); - // FIXME: hack, speed must be set only at follow - if (GetTypeId() == TYPEID_PLAYER && minion->IsPet()) - for (uint8 i = 0; i < MAX_MOVE_TYPE; ++i) - minion->SetSpeed(UnitMoveType(i), m_speed_rate[i], true); - // Ghoul pets have energy instead of mana (is anywhere better place for this code?) if (minion->IsPetGhoul() || minion->GetEntry() == 24207 /*ENTRY_ARMY_OF_THE_DEAD*/) minion->setPowerType(POWER_ENERGY); @@ -14251,7 +14246,17 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced) { // Set creature speed rate if (GetTypeId() == TYPEID_UNIT) - speed *= ToCreature()->GetCreatureTemplate()->speed_run; // at this point, MOVE_WALK is never reached + { + if (IsPet() && ToPet()->isControlled() && IsControlledByPlayer()) + { + // contant value for player pets + speed *= 1.15f; + } + else + { + speed *= ToCreature()->GetCreatureTemplate()->speed_run; // at this point, MOVE_WALK is never reached + } + } // Normalize speed by 191 aura SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED if need /// @todo possible affect only on MOVE_RUN @@ -15380,7 +15385,7 @@ void Unit::SetHealth(uint32 val) SetUInt32Value(UNIT_FIELD_HEALTH, val); // mobs that are now or were below 30% need to update their speed - if (GetTypeId() == TYPEID_UNIT && (prevHealthPct < 30.0 || HealthBelowPct(30))) + if (GetTypeId() == TYPEID_UNIT && !(IsPet() && ToPet()->isControlled() && IsControlledByPlayer()) && (prevHealthPct < 30.0 || HealthBelowPct(30))) { UpdateSpeed(MOVE_RUN, false); } From ab4e95cc208ab694e0dd439391a5496b60861130 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 4 Mar 2023 21:41:31 +0100 Subject: [PATCH 040/159] fix(Core/Spells): Fixed sending category cooldowns. (#15192) --- src/server/game/Entities/Player/Player.cpp | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index d5c99078b..0a87fed7f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -10798,7 +10798,6 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite // cooldown information stored in item prototype // This used in same way in WorldSession::HandleItemQuerySingleOpcode data sending to client. - bool useSpellCooldown = spellInfo->HasAttribute(SPELL_ATTR7_CAN_BE_MULTI_CAST); if (itemId) { if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemId)) @@ -10810,12 +10809,6 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite cat = proto->Spells[idx].SpellCategory; rec = proto->Spells[idx].SpellCooldown; catrec = proto->Spells[idx].SpellCategoryCooldown; - - if (static_cast(cat) != catrec) - { - useSpellCooldown = true; - } - break; } } @@ -10852,14 +10845,7 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite // Now we have cooldown data (if found any), time to apply mods if (rec > 0) - { - int32 oldRec = rec; ApplySpellMod(spellInfo->Id, SPELLMOD_COOLDOWN, rec, spell); - if (oldRec != rec) - { - useSpellCooldown = true; - } - } if (catrec > 0 && !spellInfo->HasAttribute(SPELL_ATTR6_NO_CATEGORY_COOLDOWN_MODS)) { @@ -10872,7 +10858,6 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite if (HasSpell(spellInfo->Id)) { needsCooldownPacket = true; - useSpellCooldown = true; rec += cooldownMod * IN_MILLISECONDS; // SPELL_AURA_MOD_COOLDOWN does not affect category cooldows, verified with shaman shocks } } @@ -10892,11 +10877,11 @@ void Player::AddSpellAndCategoryCooldowns(SpellInfo const* spellInfo, uint32 ite // category spells if (cat && catrec > 0) { - _AddSpellCooldown(spellInfo->Id, cat, itemId, useSpellCooldown ? recTime : catrecTime, true, true); + _AddSpellCooldown(spellInfo->Id, 0, itemId, recTime, true, true); if (needsCooldownPacket) { WorldPacket data; - BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, spellInfo->Id, useSpellCooldown ? recTime : catrecTime); + BuildCooldownPacket(data, SPELL_COOLDOWN_FLAG_NONE, spellInfo->Id, recTime); SendDirectMessage(&data); } From 321195f4f8896bf66d441662d470dbc60c1c8c3a Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 4 Mar 2023 21:42:02 +0100 Subject: [PATCH 041/159] Scripts/OldHisbradFoothills): Improved Escape from Durnholde Keep event. (#15189) --- .../rev_1677322470662676600.sql | 72 +++++ .../boss_captain_skarloc.cpp | 6 +- .../boss_epoch_hunter.cpp | 8 +- .../EscapeFromDurnholdeKeep/old_hillsbrad.cpp | 272 +++++++++++++----- .../EscapeFromDurnholdeKeep/old_hillsbrad.h | 4 +- 5 files changed, 281 insertions(+), 81 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1677322470662676600.sql diff --git a/data/sql/updates/pending_db_world/rev_1677322470662676600.sql b/data/sql/updates/pending_db_world/rev_1677322470662676600.sql new file mode 100644 index 000000000..fa2e4c6fe --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677322470662676600.sql @@ -0,0 +1,72 @@ +-- +DELETE FROM `creature_text` WHERE `CreatureID`=17876 AND `groupid` IN (21,22,23); +INSERT INTO `creature_text` VALUES +(17876,21,0,'Thrall startles the horse with a fierce yell!',16,0,100,0,0,0,0,0,'Thrall Horse Emote'), +(17876,22,0,'Thrall tries to calm the horse down.',16,0,100,0,0,0,0,0,'Thrall Horse Emote 2'), +(17876,23,0,'Taretha isn\'t here. Let\'s head into town.',12,0,100,0,0,0,0,0,'Thrall Say Lead'); + +UPDATE `creature_text` SET `groupid`=8 WHERE `CreatureID`=18096 AND `GroupId`=6; +UPDATE `creature_text` SET `groupid`=7 WHERE `CreatureID`=18096 AND `GroupId`=5; +UPDATE `creature_text` SET `groupid`=6 WHERE `CreatureID`=18096 AND `GroupId`=4; +UPDATE `creature_text` SET `groupid`=5 WHERE `CreatureID`=18096 AND `GroupId`=3; +UPDATE `creature_text` SET `groupid`=4 WHERE `CreatureID`=18096 AND `GroupId`=2; +UPDATE `creature_text` SET `groupid`=3 WHERE `CreatureID`=18096 AND `GroupId`=1; +UPDATE `creature_text` SET `groupid`=2 WHERE `CreatureID`=18096 AND `GroupId`=0 AND `id`=2; +UPDATE `creature_text` SET `groupid`=1 WHERE `CreatureID`=18096 AND `GroupId`=0 AND `id`=1; + +UPDATE `script_waypoint` SET `waitTime`=13000 WHERE `entry`=17876 AND `pointid`=10; +UPDATE `script_waypoint` SET `waitTime`=20000 WHERE `entry`=17876 AND `pointid`=67; + +DELETE FROM `waypoints` WHERE `entry` IN (180920,180921,180930,180940); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`) VALUES +(180920,1,2498.1045,695.5946,55.63158), +(180920,2,2495.6223,694.5012,55.63158), +(180920,3,2492.622,693.5881,55.699432), +(180920,4,2490.3777,695.98254,55.72346), +(180920,5,2490.0405,699.02325,55.73774), +(180920,6,2489.702,702.07544,55.759163), +(180920,7,2489.3306,702.90985,55.765854), +(180920,8,2488.1714,702.7047,55.77027), + +(180921,1,2496.374,695.5221,55.63158), +(180921,2,2493.9353,694.89294,55.699627), +(180921,3,2490.935,693.97974,55.711452), +(180921,4,2491.0732,697.56885,55.724335), +(180921,5,2490.736,700.60956,55.741653), +(180921,6,2490.3975,703.66174,55.76295), +(180921,7,2487.7026,703.5013,55.777214), + +(180930,1,2497.1765,697.05707,55.63158), +(180930,2,2495.118,696.15826,55.63158), +(180930,3,2492.1177,695.24506,55.70963), +(180930,4,2492.099,696.17346,55.713726), +(180930,5,2491.762,699.2142,55.728592), +(180930,6,2491.4233,702.26636,55.751934), +(180930,7,2489.0288,704.6154,55.77536), +(180930,8,2487.8696,704.4103,55.780678), + +(180940,1,2495.4795,694.95447,55.63158), +(180940,2,2491.4536,694.1376,55.70895), +(180940,3,2490.363,703.972,55.764732); + +UPDATE `smart_scripts` SET `link`=4 WHERE `entryorguid`=18092 AND `source_type`=0 AND `id`=3; +DELETE FROM `smart_scripts` WHERE `entryorguid`=18092 AND `source_type`=0 AND `id` IN (4,5,6); +INSERT INTO `smart_scripts` VALUES +(18092,0,4,0,61,0,100,0,0,0,0,0,0,53,0,180920,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Guardsman - Do Action - Start WP'), +(18092,0,5,6,72,0,100,0,2,0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Tarren Mill Guardsman - Do Action - Remove Unit Flag'), +(18092,0,6,0,61,0,100,0,0,0,0,0,0,53,0,180921,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Guardsman - Do Action - Start WP'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=18092 AND `SourceId` IN (4,6); +INSERT INTO `conditions` VALUES +(22,0,18092,4,0,1,1,22805,0,0,0,0,0,'','Exeucte SAI if aura present'), +(22,0,18092,6,0,1,1,22805,0,0,1,0,0,'','Exeucte SAI if aura not present'); + +UPDATE `smart_scripts` SET `link`=8 WHERE `entryorguid`=18093 AND `source_type`=0 AND `id`=7; +DELETE FROM `smart_scripts` WHERE `entryorguid`=18093 AND `source_type`=0 AND `id`=8; +INSERT INTO `smart_scripts` VALUES +(18093,0,8,0,61,0,100,0,0,0,0,0,0,53,0,180930,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Protector - Do Action - Start WP'); + +UPDATE `smart_scripts` SET `link`=6 WHERE `entryorguid`=18094 AND `source_type`=0 AND `id`=5; +DELETE FROM `smart_scripts` WHERE `entryorguid`=18094 AND `source_type`=0 AND `id`=6; +INSERT INTO `smart_scripts` VALUES +(18094,0,6,0,61,0,100,0,0,0,0,0,0,53,0,180940,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Lookout - Do Action - Start WP'); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp index 8ede6f1c0..a82410d0d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_captain_skarloc.cpp @@ -118,12 +118,16 @@ public: } else if (id == 2) { - me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN); me->Dismount(); me->SetWalk(true); for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) summon->SetWalk(true); + if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN)) + { + mount->SetImmuneToNPC(true); + mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + } } if (me->movespline->Finalized()) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp index 66d6916a5..42c4b358f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_epoch_hunter.cpp @@ -21,10 +21,10 @@ enum EpochHunter { - SAY_AGGRO = 3, - SAY_SLAY = 4, - SAY_BREATH = 5, - SAY_DEATH = 6, + SAY_AGGRO = 5, + SAY_SLAY = 6, + SAY_BREATH = 7, + SAY_DEATH = 8, SPELL_SAND_BREATH = 31914, SPELL_IMPENDING_DEATH = 31916, diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index 3b19bc645..00725de54 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -54,6 +54,9 @@ enum Says SAY_ENTER_CHURCH = 18, SAY_GREET_TARETHA = 19, SAY_CHAT_TARETHA1 = 20, + SAY_EMOTE_HORSE = 21, + SAY_EMOTE_HORSE_2 = 22, + SAY_LEAD = 23, SAY_TARETHA_FREE = 0, SAY_TARETHA_ESCAPED = 1, @@ -87,7 +90,10 @@ enum Spells SPELL_TELEPORT = 34776, SPELL_MEMORY_WIPE = 33336, - SPELL_MEMORY_WIPE_RESUME = 33337 + SPELL_MEMORY_WIPE_RESUME = 33337, + SPELL_KNOCKOUT_ARMORER = 32890, + SPELL_SALVATION = 33790, + SPELL_DUMMY_AURA = 22805 }; enum Npcs @@ -133,8 +139,10 @@ enum Events EVENT_START_WP = 7, EVENT_SET_FACING = 9, - EVENT_KILL_ARMORER = 10, - EVENT_TALK_KILL_ARMORER = 11, + EVENT_ARMORER_SAY = 10, + EVENT_THRALL_EMOTE = 11, + EVENT_KILL_ARMORER = 12, + EVENT_TALK_KILL_ARMORER = 13, EVENT_DRESSING_KNEEL = 20, EVENT_DRESSING_ARMOR = 21, @@ -149,12 +157,14 @@ enum Events EVENT_LOOK_1 = 40, EVENT_MOVE_AROUND = 41, EVENT_LOOK_2 = 42, - EVENT_LOOK_3 = 43, - EVENT_SUMMON_GUARDS = 44, + EVENT_SUMMON_GUARDS = 43, + EVENT_LOOK_3 = 44, EVENT_SUMMON_TALK1 = 45, - EVENT_SUMMON_TALK2 = 46, + EVENT_LOOK_4 = 46, + EVENT_SUMMON_TALK2 = 47, + EVENT_GUARDS_MOVING = 48, - EVENT_LOOK_4 = 50, + EVENT_LOOK_5 = 50, EVENT_SUMMON_GUARDS_2 = 51, EVENT_SUMMON_TALK3 = 52, @@ -186,7 +196,8 @@ enum Events EVENT_EROZION_TALK_3 = 89, EVENT_THRALL_TALK_6 = 90, EVENT_THRALL_RUN_AWAY = 91, - EVENT_TARETHA_TALK_2 = 92 + EVENT_TARETHA_TALK_2 = 92, + EVENT_EROZION_FLAGS = 93 }; class npc_thrall_old_hillsbrad : public CreatureScript @@ -238,6 +249,8 @@ public: npc_thrall_old_hillsbradAI(Creature* creature) : npc_escortAI(creature), summons(me) { instance = creature->GetInstanceScript(); + _barnWave = false; + _churchWave = false; } void DoAction(int32 param) override @@ -258,7 +271,7 @@ public: events.ScheduleEvent(EVENT_SUMMON_CHRONO, 0); events.ScheduleEvent(EVENT_THRALL_TALK_2, 6000); events.ScheduleEvent(EVENT_TARETHA_FALL, 11000); - events.ScheduleEvent(EVENT_THRALL_TALK_3, 14000); + events.ScheduleEvent(EVENT_THRALL_TALK_3, 15000); events.ScheduleEvent(EVENT_THRALL_MOVE_DOWN, 17000); break; case NPC_TARETHA: @@ -268,13 +281,14 @@ public: events.ScheduleEvent(EVENT_THRALL_TALK_5, 17000); events.ScheduleEvent(EVENT_SUMMON_EROZION, 17500); events.ScheduleEvent(EVENT_EROZION_TALK_1, 18000); - events.ScheduleEvent(EVENT_EROZION_ACTION_1, 26000); + events.ScheduleEvent(EVENT_EROZION_ACTION_1, 24000); events.ScheduleEvent(EVENT_EROZION_TALK_2, 29000); - events.ScheduleEvent(EVENT_EROZION_TALK_3, 42000); - events.ScheduleEvent(EVENT_EROZION_ACTION_2, 47000); + events.ScheduleEvent(EVENT_EROZION_TALK_3, 40000); + events.ScheduleEvent(EVENT_EROZION_ACTION_2, 46000); events.ScheduleEvent(EVENT_THRALL_TALK_6, 48000); events.ScheduleEvent(EVENT_THRALL_RUN_AWAY, 51000); events.ScheduleEvent(EVENT_TARETHA_TALK_2, 53000); + events.ScheduleEvent(EVENT_EROZION_FLAGS, 56000); break; } } @@ -298,11 +312,13 @@ public: break; case 8: events.ScheduleEvent(EVENT_SET_FACING, 500); + events.ScheduleEvent(EVENT_ARMORER_SAY, 700); + events.ScheduleEvent(EVENT_THRALL_EMOTE, 1300); break; case 9: SetRun(false); events.ScheduleEvent(EVENT_KILL_ARMORER, 500); - events.ScheduleEvent(EVENT_TALK_KILL_ARMORER, 4000); + events.ScheduleEvent(EVENT_TALK_KILL_ARMORER, 3000); break; case 10: SetRun(true); @@ -313,35 +329,33 @@ public: events.ScheduleEvent(EVENT_DRESSING_SHIELD, 9000); events.ScheduleEvent(EVENT_DRESSING_TALK, 12000); break; - case 13: - me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2200.28f, 137.37f, 87.93f, 5.07f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2197.44f, 131.83f, 87.93f, 0.78f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_MAGE, 2203.62f, 135.40f, 87.93f, 3.70f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2200.75f, 130.13f, 87.93f, 1.48f, TEMPSUMMON_MANUAL_DESPAWN); - break; - case 16: - me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2147.43f, 122.194f, 76.422f, 0.67f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2146.27f, 126.13f, 76.241f, 0.60f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_MAGE, 2142.62f, 120.38f, 75.862f, 0.48f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2141.74f, 123.95f, 75.732f, 0.24f, TEMPSUMMON_MANUAL_DESPAWN); - break; case 18: - me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2138.37f, 167.98f, 66.23f, 2.59f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_WARDEN, 2142.76f, 173.62f, 66.23f, 2.59f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_MAGE, 2140.96f, 168.64f, 66.23f, 2.59f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2142.53f, 171.03f, 66.23f, 2.59f, TEMPSUMMON_MANUAL_DESPAWN); - break; - case 22: - me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2108.73f, 190.43f, 66.23f, 5.56f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_MAGE, 2109.74f, 195.29f, 66.23f, 5.56f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_MAGE, 2107.74f, 192.59f, 66.23f, 5.56f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2112.26f, 195.13f, 66.23f, 5.56f, TEMPSUMMON_MANUAL_DESPAWN); + if (Creature* warden = me->SummonCreature(NPC_DURNHOLDE_WARDEN, 2149.4634f, 104.97559f, 73.632385f, 1.9065f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) + { + warden->SetWalk(true); + warden->GetMotionMaster()->MovePoint(0, 2144.9893f, 117.81233f, 75.98518f); + } + if (Creature* veteran = me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2147.3281f, 106.72353f, 74.34447f, 1.6904f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) + { + veteran->SetWalk(true); + veteran->GetMotionMaster()->MovePoint(0, 2145.2092f, 124.361f, 76.13655f); + } + if (Creature* veteran = me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2149.212f, 107.20052f, 74.15676f, 1.9887f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) + { + veteran->SetWalk(true); + veteran->GetMotionMaster()->MovePoint(0, 2143.7898f, 119.41281f, 75.96626f); + } + if (Creature* mage = me->SummonCreature(NPC_DURNHOLDE_MAGE, 2147.624f, 104.61046f, 73.909294f, 1.6186f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) + { + mage->SetWalk(true); + mage->GetMotionMaster()->MovePoint(0, 2146.975f, 118.05078f, 76.098465f); + } break; case 27: instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_AMBUSHES_1); break; case 28: - me->SummonCreature(NPC_CAPTAIN_SKARLOC, 1995.78f, 277.46f, 66.64f, 0.74f, TEMPSUMMON_MANUAL_DESPAWN); + me->SummonCreature(NPC_CAPTAIN_SKARLOC, 1995.78f, 277.46f, 66.64f, 0.74f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2 * MINUTE * IN_MILLISECONDS); break; case 29: SetEscortPaused(true); @@ -353,34 +367,45 @@ public: break; case 59: instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_TARREN_MILL); - me->SummonCreature(NPC_SKARLOC_MOUNT, 2488.64f, 625.77f, 58.26f, 4.71f, TEMPSUMMON_TIMED_DESPAWN, 7000); + if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2488.64f, 625.77f, 58.26f, 4.71f, TEMPSUMMON_TIMED_DESPAWN, 7000)) + { + mount->SetImmuneToNPC(true); + mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + } UnMountSelf(); _mounted = false; SetRun(false); + me->SetFacingTo(6.0388f); break; case 60: - me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER); if (Creature* horse = me->FindNearestCreature(NPC_SKARLOC_MOUNT, 10.0f)) + { horse->GetMotionMaster()->MovePoint(0, 2501.15f, 572.14f, 54.13f); - + horse->DespawnOrUnsummon(30 * IN_MILLISECONDS); + } + Talk(SAY_EMOTE_HORSE); SetEscortPaused(true); SetRun(true); me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); + me->SetFacingTo(4.1364f); break; case 64: SetRun(false); break; case 67: - events.ScheduleEvent(EVENT_LOOK_1, 500); + events.ScheduleEvent(EVENT_LOOK_1, 1200); events.ScheduleEvent(EVENT_MOVE_AROUND, 3500); events.ScheduleEvent(EVENT_LOOK_2, 5000); - events.ScheduleEvent(EVENT_LOOK_3, 6700); - events.ScheduleEvent(EVENT_SUMMON_GUARDS, 6000); - events.ScheduleEvent(EVENT_SUMMON_TALK1, 6500); - events.ScheduleEvent(EVENT_SUMMON_TALK2, 12000); + events.ScheduleEvent(EVENT_SUMMON_GUARDS, 5100); + events.ScheduleEvent(EVENT_LOOK_3, 7000); + events.ScheduleEvent(EVENT_SUMMON_TALK1, 12000); + events.ScheduleEvent(EVENT_LOOK_4, 17000); + events.ScheduleEvent(EVENT_SUMMON_TALK2, 19000); + events.ScheduleEvent(EVENT_GUARDS_MOVING, 21000); break; case 82: - events.ScheduleEvent(EVENT_LOOK_4, 500); + events.ScheduleEvent(EVENT_LOOK_5, 500); events.ScheduleEvent(EVENT_SUMMON_GUARDS_2, 1000); events.ScheduleEvent(EVENT_SUMMON_TALK3, 1500); break; @@ -401,8 +426,11 @@ public: SetRun(true); instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_TARETHA_MEET); if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID))) + { + Taretha->HandleEmoteCommand(EMOTE_ONESHOT_CHEER); Taretha->AI()->Talk(SAY_TARETHA_ESCAPED); - events.ScheduleEvent(EVENT_THRALL_TALK, 2000); + } + events.ScheduleEvent(EVENT_THRALL_TALK, 4000); break; case 101: SetEscortPaused(true); @@ -412,8 +440,6 @@ public: events.ScheduleEvent(EVENT_START_WAVE_1, 25000); break; case 103: - if (Creature* erozion = summons.GetCreatureWithEntry(NPC_EROZION)) - erozion->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_FINISHED); me->SetVisible(false); break; @@ -476,6 +502,20 @@ public: ReorderInstance(data); } + void JustReachedHome() override + { + if (_barnWave) + { + _barnWave = false; + Talk(SAY_LEAD); + } + else if (_churchWave) + { + _churchWave = false; + Talk(SAY_CHURCH_END); + } + } + void KilledUnit(Unit*) override { Talk(SAY_RANDOM_KILL); @@ -517,6 +557,13 @@ public: case EVENT_OPEN_DOORS: if (GameObject* doors = me->FindNearestGameObject(GO_PRISON_DOOR, 10.0f)) doors->SetGoState(GO_STATE_ACTIVE); + me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2142.372f, 174.2907f, 66.30494f, 2.5656f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2138.178f, 168.6046f, 66.30494f, 2.4783f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2140.1458f, 169.23643f, 66.30494f, 2.4958f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2107.9377f, 192.07530f, 66.30494f, 2.5481f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_DURNHOLDE_MAGE, 2142.3633f, 172.42600f, 66.30494f, 2.5481f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_DURNHOLDE_MAGE, 2109.8518f, 195.14030f, 66.30493f, 2.4260f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_DURNHOLDE_MAGE, 2108.4856f, 189.93457f, 66.30494f, 2.6878f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); break; case EVENT_START_WP: Start(true, true); @@ -525,15 +572,28 @@ public: case EVENT_SET_FACING: if (Creature* armorer = me->FindNearestCreature(NPC_DURNHOLDE_ARMORER, 30.0f)) { - armorer->AI()->Talk(SAY_ARMORER_THRALL); + armorer->GetMotionMaster()->Clear(); + armorer->GetMotionMaster()->MoveIdle(); armorer->SetFacingToObject(me); me->SetFacingToObject(armorer); } break; + case EVENT_ARMORER_SAY: + if (Creature* armorer = me->FindNearestCreature(NPC_DURNHOLDE_ARMORER, 30.0f)) + { + armorer->AI()->Talk(SAY_ARMORER_THRALL); + } + break; + case EVENT_THRALL_EMOTE: + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + break; case EVENT_KILL_ARMORER: me->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK_UNARMED); if (Creature* armorer = me->FindNearestCreature(NPC_DURNHOLDE_ARMORER, 30.0f)) + { + DoCast(armorer, SPELL_KNOCKOUT_ARMORER, true); armorer->SetStandState(UNIT_STAND_STATE_DEAD); + } break; case EVENT_TALK_KILL_ARMORER: Talk(SAY_KILL_ARMORER); @@ -557,7 +617,29 @@ public: break; case EVENT_DRESSING_TALK: instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_THRALL_ARMORED); + DoCastSelf(SPELL_SALVATION); + me->SetFacingTo(5.6897f); Talk(SAY_GO_ARMORED); + if (Creature* sentry = me->SummonCreature(NPC_DURNHOLDE_SENTRY, 2185.916f, 140.38835f, 88.299866f, 5.9238f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) + { + sentry->SetWalk(true); + sentry->GetMotionMaster()->MovePoint(0, 2191.9712f, 138.11394f, 88.2125f); + } + if (Creature* warden = me->SummonCreature(NPC_DURNHOLDE_WARDEN, 2188.5586f, 138.88553f, 88.299866f, 1.6031f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) + { + warden->SetWalk(true); + warden->GetMotionMaster()->MovePoint(0, 2188.5068f, 140.48346f, 88.21251f); + } + if (Creature* veteran = me->SummonCreature(NPC_DURNHOLDE_VETERAN, 2186.9856f, 142.199f, 88.299866f, 5.9049f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) + { + veteran->SetWalk(true); + veteran->GetMotionMaster()->MovePoint(0, 2190.48f, 140.81056f, 88.21251f); + } + if (Creature* mage = me->SummonCreature(NPC_DURNHOLDE_MAGE, 2189.7336f, 140.64551f, 88.299866f, 3.9532f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) + { + mage->SetWalk(true); + mage->GetMotionMaster()->MovePoint(0, 2187.8035f, 138.61118f, 88.21251f); + } break; case EVENT_ENTER_MOUNT: MountSelf(); @@ -571,43 +653,60 @@ public: Talk(SAY_MOUNTS_UP); break; case EVENT_LOOK_1: - me->SetFacingTo(5.058f); + me->SetFacingTo(5.0090f); + me->SetImmuneToNPC(true); break; case EVENT_MOVE_AROUND: me->GetMotionMaster()->MovePoint(0, 2477.146f, 695.041f, 55.801f); break; case EVENT_LOOK_2: - me->SetFacingTo(2.297f); - break; - case EVENT_LOOK_3: - me->SetFacingTo(0.64f); + me->SetFacingTo(2.0071f); break; case EVENT_SUMMON_GUARDS: SetRun(true); - me->SummonCreature(NPC_TM_PROTECTOR, 2501.34f, 700.80f, 55.573f, 3.92f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_TM_LOOKOUT, 2503.02f, 699.11f, 55.57f, 3.92f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_TM_GUARDSMAN, 2503.04f, 702.495f, 50.63f, 3.92f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_TM_GUARDSMAN, 2504.72f, 700.806f, 55.62f, 3.92f, TEMPSUMMON_MANUAL_DESPAWN); + me->SummonCreature(NPC_TM_PROTECTOR, 2501.5708f, 699.38086f, 55.64138f, 3.8571f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_TM_LOOKOUT, 2500.7002f, 698.26746f, 55.618248f, 3.7350f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + if (Creature* guardsman = me->SummonCreature(NPC_TM_GUARDSMAN, 2500.0908f, 699.9389f, 55.629555f, 4.2935f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) + { + guardsman->CastSpell(guardsman, SPELL_DUMMY_AURA, true); + } + me->SummonCreature(NPC_TM_GUARDSMAN, 2499.0579f, 698.99725f, 55.611156f, 4.5727f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); summons.DoAction(ACTION_SET_IMMUNE_FLAG); break; + case EVENT_LOOK_3: + me->SetFacingTo(0.3490f); + break; case EVENT_SUMMON_TALK1: if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT)) summon->AI()->Talk(SAY_LOOKOUT_SAW); - break; - case EVENT_SUMMON_TALK2: - if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT)) - summon->AI()->Talk(SAY_LOOKOUT_GO); - summons.DoAction(ACTION_REMOVE_IMMUNE_FLAG); + me->SetFacingTo(0.4363f); break; case EVENT_LOOK_4: - me->SetFacingTo(0.41f); + me->SetFacingTo(4.7510f); + me->HandleEmoteCommand(EMOTE_ONESHOT_NO); + Talk(SAY_EMOTE_HORSE_2); + break; + case EVENT_SUMMON_TALK2: + me->SetFacingTo(0.4363f); + if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT)) + summon->AI()->Talk(SAY_LOOKOUT_GO); + me->SetImmuneToNPC(true); + break; + case EVENT_GUARDS_MOVING: + me->SetImmuneToNPC(false); + summons.DoAction(ACTION_REMOVE_IMMUNE_FLAG); + _barnWave = true; + break; + case EVENT_LOOK_5: + me->SetFacingTo(0.4886f); Talk(SAY_ENTER_CHURCH); break; case EVENT_SUMMON_GUARDS_2: - me->SummonCreature(NPC_TM_PROTECTOR, 2630.75f, 664.80f, 54.28f, 4.37f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_TM_LOOKOUT, 2632.20f, 661.98f, 54.30f, 4.37f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_TM_GUARDSMAN, 2630.02f, 662.75f, 54.28f, 4.37f, TEMPSUMMON_MANUAL_DESPAWN); - me->SummonCreature(NPC_TM_GUARDSMAN, 2632.86f, 664.05f, 54.31f, 4.37f, TEMPSUMMON_MANUAL_DESPAWN); + me->SummonCreature(NPC_TM_PROTECTOR, 2630.75f, 664.80f, 54.28f, 4.37f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_TM_LOOKOUT, 2632.20f, 661.98f, 54.30f, 4.37f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_TM_GUARDSMAN, 2630.02f, 662.75f, 54.28f, 4.37f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + me->SummonCreature(NPC_TM_GUARDSMAN, 2632.86f, 664.05f, 54.31f, 4.37f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); + _churchWave = true; break; case EVENT_SUMMON_TALK3: if (Creature* summon = summons.GetCreatureWithEntry(NPC_TM_LOOKOUT)) @@ -625,7 +724,7 @@ public: } break; case EVENT_THRALL_TALK_2: - me->SetFacingTo(2.67f); + me->SetFacingTo(2.60f); Talk(SAY_EPOCH_WONDER); break; case EVENT_TARETHA_FALL: @@ -638,16 +737,22 @@ public: } break; case EVENT_THRALL_TALK_3: - me->SetFacingTo(5.78f); + if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID))) + { + me->SetFacingToObject(Taretha); + } Talk(SAY_EPOCH_KILL_TARETHA); break; case EVENT_THRALL_MOVE_DOWN: SetEscortPaused(false); break; case EVENT_EPOCH_INTRO: - me->SetFacingTo(1.33f); if (Creature* epoch = summons.GetCreatureWithEntry(NPC_EPOCH_HUNTER)) + { + me->SetFacingToObject(epoch); + epoch->SetFacingToObject(me); epoch->AI()->Talk(SAY_EPOCH_ENTER3); + } break; case EVENT_SUMMON_INFINITES: me->SummonCreature(NPC_EPOCH_LOOKOUT, 2647.57f, 701.17f, 56.215f, 4.3f, TEMPSUMMON_MANUAL_DESPAWN); @@ -715,15 +820,24 @@ public: if (Player* player = itr->GetSource()) player->KilledMonsterCredit(20156); - me->SetFacingTo(5.76f); + if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID))) + { + me->SetFacingToObject(Taretha); + } + me->SetImmuneToNPC(true); break; } case EVENT_THRALL_TALK_4: + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK); Talk(SAY_GREET_TARETHA); break; case EVENT_TARETHA_TALK_1: + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID))) + { + Taretha->HandleEmoteCommand(EMOTE_ONESHOT_TALK); Taretha->AI()->Talk(SAY_TARETHA_TALK1); + } break; case EVENT_THRALL_TALK_5: Talk(SAY_CHAT_TARETHA1); @@ -766,10 +880,14 @@ public: case EVENT_TARETHA_TALK_2: if (Creature* Taretha = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_TARETHA_GUID))) { - Taretha->SetFacingTo(4.233f); + Taretha->SetFacingToObject(me); Taretha->AI()->Talk(SAY_TARETHA_TALK2); } break; + case EVENT_EROZION_FLAGS: + if (Creature* erozion = summons.GetCreatureWithEntry(NPC_EROZION)) + erozion->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + break; } } @@ -832,7 +950,11 @@ public: SetNextWaypoint(27, false); break; case ENCOUNTER_PROGRESS_SKARLOC_KILLED: - me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN); + if (Creature* mount = me->SummonCreature(NPC_SKARLOC_MOUNT, 2049.12f, 252.31f, 62.855f, me->GetOrientation(), TEMPSUMMON_MANUAL_DESPAWN)) + { + mount->SetImmuneToNPC(true); + mount->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + } SetNextWaypoint(30, false); break; case ENCOUNTER_PROGRESS_TARREN_MILL: @@ -853,6 +975,8 @@ public: SummonList summons; bool _mounted; + bool _barnWave; + bool _churchWave; }; }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h index e7b96c383..602b5475f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.h @@ -50,8 +50,8 @@ enum NpcIds NPC_DURNHOLDE_ARMORER = 18764, NPC_DURNHOLDE_WARDEN = 17833, NPC_DURNHOLDE_VETERAN = 17860, - NPC_DURNHOLDE_MAGE = 17860, - NPC_DURNHOLDE_SENTRY = 17860, + NPC_DURNHOLDE_MAGE = 18934, + NPC_DURNHOLDE_SENTRY = 17819, NPC_CAPTAIN_SKARLOC = 17862, NPC_SKARLOC_MOUNT = 18798, From 349d590d7a7c903b58ae184b8b7d6d666ff2f79a Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 4 Mar 2023 22:42:24 +0200 Subject: [PATCH 042/159] fix(DB/SAI): Scarlet Enchanter & Scarlet Cleric - OOC attack (#15180) --- .../sql/updates/pending_db_world/rev_1677174924847719800.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677174924847719800.sql diff --git a/data/sql/updates/pending_db_world/rev_1677174924847719800.sql b/data/sql/updates/pending_db_world/rev_1677174924847719800.sql new file mode 100644 index 000000000..dd172388d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677174924847719800.sql @@ -0,0 +1,5 @@ +-- Scarlet Enchanter - Remove OOC attack closest player +DELETE FROM `smart_scripts` WHERE `entryorguid` = 9452 AND `source_type` = 0 AND `id` = 2; + +-- Scarlet Cleric - Remove OOC attack closest player +DELETE FROM `smart_scripts` WHERE `entryorguid` = 9449 AND `source_type` = 0 AND `id` = 3; From 6e61f38454b50bce96b7696739667fac43462e4c Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 4 Mar 2023 22:42:45 +0200 Subject: [PATCH 043/159] fix(Script/PitOfSaron): Pit of Saron - Remove hardcode and duplicated texts in DB (#15160) --- .../rev_1677008695688965000.sql | 135 ++++++++++++++++++ .../PitOfSaron/boss_forgemaster_garfrost.cpp | 28 ++-- .../PitOfSaron/boss_krickandick.cpp | 41 +++--- .../PitOfSaron/boss_scourgelord_tyrannus.cpp | 23 ++- .../FrozenHalls/PitOfSaron/pit_of_saron.cpp | 8 +- .../FrozenHalls/PitOfSaron/pit_of_saron.h | 38 ++--- 6 files changed, 200 insertions(+), 73 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1677008695688965000.sql diff --git a/data/sql/updates/pending_db_world/rev_1677008695688965000.sql b/data/sql/updates/pending_db_world/rev_1677008695688965000.sql new file mode 100644 index 000000000..cde29743a --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677008695688965000.sql @@ -0,0 +1,135 @@ +-- Pit of Saron - Fix order, add missing creature_text and remove duplicates from original sniffs. +-- Forgemaster Garfrost +DELETE FROM `creature_text` WHERE `CreatureID`=36494; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(36494, 0, 0, 'Tiny creatures under feet, you bring Garfrost something good to eat!', 14, 0, 100, 0, 0, 16912, 37218, 0, 'Forgemaster Garfrost SAY_AGGRO'), +(36494, 1, 0, 'Axe too weak. Garfrost make better and CRUSH YOU.', 14, 0, 100, 0, 0, 16916, 36445, 0, 'Forgemaster Garfrost SAY_HP_66'), +(36494, 2, 0, 'Garfrost tired of puny mortals. Now your bones will freeze!', 14, 0, 100, 0, 0, 16917, 36444, 0, 'Forgemaster Garfrost SAY_HP_33'), +(36494, 3, 0, 'Garfrost hope giant underpants clean. Save boss great shame. For later.', 14, 0, 100, 0, 0, 16915, 37221, 0, 'Forgemaster Garfrost SAY_DEATH'), +(36494, 4, 0, 'Will save for snack. For later.', 14, 0, 100, 0, 0, 16913, 37219, 0, 'Forgemaster Garfrost SAY_SLAY'), +(36494, 5, 0, 'That one maybe not so good to eat now. Stupid Garfrost! BAD! BAD!', 14, 0, 100, 0, 0, 16914, 37220, 0, 'Forgemaster Garfrost SAY_BOULDER_HIT'), +(36494, 6, 0, '%s hurls a massive saronite boulder at you!', 42, 0, 100, 0, 0, 0, 37438, 0, 'Forgemaster Garfrost WHISPER_BOULDER'), +(36494, 7, 0, '%s casts |cFF00AACCDeep Freeze|r at $n.', 41, 0, 100, 0, 0, 0, 37260, 0, 'Forgemaster Garfrost EMOTE_DEEP_FREEZE'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36494 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(36494, 0, 0, 'zhCN', '看这些小东西,你给加弗斯特带来了好吃的!'), +(36494, 1, 0, 'zhCN', '斧子太弱了。看我弄好他,然后……然后砸扁你。'), +(36494, 2, 0, 'zhCN', '加弗斯特厌倦了这些凡人。刺骨的寒风刮起来!'), +(36494, 3, 0, 'zhCN', '加弗斯特不想弄的太狼狈。不想给头领丢脸。晚了。'), +(36494, 4, 0, 'zhCN', '可以留下来当个小点心。'), +(36494, 5, 0, 'zhCN', '这个好像不……不太好吃。加弗斯特真笨!真笨!'), +(36494, 6, 0, 'zhCN', '%s向你用力投出一大块萨隆邪铁巨石!'), +(36494, 7, 0, 'zhCN', '%s向$n施放|cFF00AACC深度冻结|r。'); + +-- Ick +DELETE FROM `creature_text` WHERE `CreatureID`=36476; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(36476, 0, 0, '%s begins to unleash a toxic poison cloud!', 41, 0, 100, 0, 0, 0, 36531, 0, 'Ick EMOTE_ICK_POISON_NOVA'), +(36476, 1, 0, '%s is chasing you. Run!', 41, 0, 100, 0, 0, 0, 36529, 0, 'Ick EMOTE_ICK_CHASE'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36476 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(36476, 0, 0, 'zhCN', '%s开始释放一块毒云!'), +(36476, 1, 0, 'zhCN', '%s正在追赶你。快跑!'); + +-- Krick +DELETE FROM `creature_text` WHERE `CreatureID`=36477; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(36477, 0, 0, 'Our work must not be interrupted! Ick, take care of them!', 14, 0, 100, 0, 0, 16926, 37222, 0, 'Krick SAY_AGGRO'), +(36477, 1, 0, 'We could probably use these parts.', 14, 0, 100, 0, 0, 16927, 37223, 0, 'Krick SAY_SLAY_1'), +(36477, 1, 1, 'Arms and legs are in short supply! Thanks for your contribution!', 14, 0, 100, 0, 0, 16928, 37224, 0, 'Krick SAY_SLAY_2'), +(36477, 2, 0, 'Enough moving around! Hold still while I blow them all up!', 14, 0, 100, 0, 0, 16929, 36538, 0, 'Krick SAY_BARRAGE_1'), +(36477, 3, 0, '%s begins rapidly conjuring explosive mines!', 41, 0, 100, 0, 0, 0, 36550, 0, 'Krick SAY_BARRAGE_2'), +(36477, 4, 0, 'Quickly! Poison them all while they\'re still close!', 14, 0, 100, 0, 0, 16930, 36537, 0, 'Krick SAY_POISON_NOVA'), +(36477, 5, 0, 'No, that one! That one! Get that one!', 14, 0, 100, 0, 0, 16931, 36536, 0, 'Krick SAY_CHASE_1'), +(36477, 5, 1, 'I\'ve changed my mind, go get that one instead!', 14, 0, 100, 0, 0, 16932, 37225, 0, 'Krick SAY_CHASE_2'), +(36477, 5, 2, 'What are you attacking him for? The dangerous one is over there!', 14, 0, 100, 0, 0, 16933, 37226, 0, 'Krick SAY_CHASE_3'), +(36477, 6, 0, 'Wait! Stop! Don\'t kill me, please! I\'ll tell you everything!', 14, 0, 100, 0, 0, 16934, 36841, 0, 'Krick SAY_KRICK_OUTRO_1'), +(36477, 7, 0, 'What you seek is in the master\'s lair, but you must destroy Tyrannus to gain entry. Now, within the Halls of Reflection you will find Frostmourne. It... It holds the truth.', 14, 0, 100, 0, 0, 16935, 36842, 0, 'Krick SAY_KRICK_OUTRO_3'), +(36477, 8, 0, 'I swear it is true! Please, don\'t kill me!!', 14, 0, 100, 0, 0, 16936, 36843, 0, 'Krick SAY_KRICK_OUTRO_5'), +(36477, 9, 0, 'Urg... no!!', 14, 0, 100, 0, 0, 16937, 36844, 0, 'Krick SAY_KRICK_OUTRO_8'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36477 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(36477, 0, 0, 'zhCN', '我们的工作绝不能被干扰!伊克,招呼他们!'), +(36477, 1, 0, 'zhCN', '这些部件也许对我们有用。'), +(36477, 1, 1, 'zhCN', '我们正缺胳膊和腿呢!感谢你们的大力援助!'), +(36477, 2, 0, 'zhCN', '不要乱动!站稳了,等我把他们都炸飞!'), +(36477, 3, 0, 'zhCN', '%s开始不断召唤出炸雷!'), +(36477, 4, 0, 'zhCN', '快点,趁他们在一起的时候上毒!'), +(36477, 5, 0, 'zhCN', '不,是那个!那个!就是他!'), +(36477, 5, 1, 'zhCN', '我改主意了,现在我要的是这个!'), +(36477, 5, 2, 'zhCN', '你打这个家伙干什么?真正危险的人在那儿,傻子!'), +(36477, 6, 0, 'zhCN', '等等!停!别杀我!我把一切都告诉你!'), +(36477, 7, 0, 'zhCN', '你要找的就在主人的巢穴里,但要先干掉泰兰努斯才能进去。霜之哀伤就在映像大厅里……你们……你们能在它那里找到真相。'), +(36477, 8, 0, 'zhCN', '我发誓我没说谎!求你了!别杀我!'), +(36477, 9, 0, 'zhCN', '啊…不!!'); + +-- Scourgelord Tyrannus +DELETE FROM `creature_text` WHERE `CreatureID`=36658; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(36658, 0, 0, 'Alas, brave, brave adventurers, your meddling has reached its end. Do you hear the clatter of bone and steel coming up the tunnel behind you? That is the sound of your impending demise.', 14, 0, 100, 0, 0, 16758, 37233, 0, 'Tyrannus SAY_BOSS_TYRANNUS_INTRO_1'), +(36658, 1, 0, 'Ha, such an amusing gesture from the rabble. When I have finished with you, my master\'s blade will feast upon your souls. Die.', 14, 0, 100, 0, 0, 16759, 37234, 0, 'Tyrannus SAY_BOSS_TYRANNUS_INTRO_2'), +(36658, 2, 0, 'I shall not fail the Lich King. Come and meet your end!', 14, 0, 100, 0, 0, 16760, 38718, 0, 'Tyrannus SAY_AGGRO'), +(36658, 3, 0, 'Such a shameful display. You are better off dead.', 14, 0, 100, 0, 0, 16761, 38715, 0, 'Tyrannus SAY_SLAY_1'), +(36658, 3, 1, 'Perhaps you should have stayed... in the mountains!', 14, 0, 100, 0, 0, 16762, 38716, 0, 'Tyrannus SAY_SLAY_2'), +(36658, 4, 0, 'Impossible.... Rimefang.... warn....', 14, 0, 100, 0, 0, 16763, 38714, 0, 'Tyrannus SAY_DEATH'), +(36658, 5, 0, 'Rimefang, destroy this fool!', 14, 0, 100, 0, 0, 16764, 36648, 0, 'Tyrannus SAY_MARK_RIMEFANG'), +(36658, 6, 0, 'The frostwyrm Rimefang gazes at $n and readies an icy attack!', 41, 0, 100, 0, 0, 0, 36649, 0, 'Tyrannus EMOTE_MARK_RIMEFANG'), +(36658, 7, 0, 'Power... overwhelming!', 14, 0, 100, 0, 0, 16765, 38717, 0, 'Tyrannus SAY_DARK_MIGHT'), +(36658, 8, 0, '%s roars and swells with dark might!', 41, 0, 100, 0, 0, 0, 36628, 0, 'Tyrannus EMOTE_DARK_MIGHT'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36658 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(36658, 0, 0, 'zhCN', '唉,勇敢的冒险者,你们的路已经到头了。难道你们没有听到身后隧道里钢铁撞击的声音吗?那就是末日降临的乐章。'), +(36658, 1, 0, 'zhCN', '哈,一群不自量力的乌合之众。等我杀了你们之后,主人的剑就能尽情享用你们的灵魂了。去死吧。'), +(36658, 2, 0, 'zhCN', '我不会让巫妖王失望的。准备受死吧!'), +(36658, 3, 0, 'zhCN', '低劣的顽抗,死亡是对你的优待。'), +(36658, 3, 1, 'zhCN', '也许你早应该留在……群山里!'), +(36658, 4, 0, 'zhCN', '不可能……霜牙……警报……'), +(36658, 5, 0, 'zhCN', '霜牙,干掉那个蠢货!'), +(36658, 6, 0, 'zhCN', '冰霜巨龙霜牙凝视着$n,准备发动一次冰霜袭击!'), +(36658, 7, 0, 'zhCN', '力量……无上的力量!'), +(36658, 8, 0, 'zhCN', '%s发出怒吼,在黑暗力量的作用下开始膨胀!'); + +-- Rimefang - Delete "The frostwyrm Rimefang gazes at $n and readies an icy attack!", already being used by Scourgelord Tyrannus (6) +DELETE FROM `creature_text` WHERE `CreatureID`=36661; +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36661 AND `Locale`='zhCN'; + +-- Scourgelord Tyrannus Voice +DELETE FROM `creature_text` WHERE `CreatureID`=36795; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(36795, 0, 0, 'Another shall take his place. You waste your time.', 14, 0, 100, 0, 0, 16752, 36765, 0, 'tyrannus SAY_TYRANNUS_GARFROST'), +(36795, 1, 0, 'Rimefang! Trap them within the tunnel! Bury them alive!', 14, 0, 100, 0, 0, 16757, 36714, 0, 'tyrannus SAY_TYRANNUS_TRAP_TUNNEL'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36795 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(36795, 0, 0, 'zhCN', '别人会取代他。你是在浪费时间。'), +(36795, 1, 0, 'zhCN', '霜牙,把他们困在隧道里!统统给我埋了!'); + +-- Scourgelord Tyrannus Event +DELETE FROM `creature_text` WHERE `CreatureID`=36794; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(36794, 0, 0, 'Worthless gnat! Death is all that awaits you!', 14, 0, 100, 0, 0, 16753, 36852, 0, 'tyrannus SAY_TYRANNUS_KRICK_1'), +(36794, 1, 0, 'Do not think that I shall permit you entry into my master\'s sanctum so easily. Pursue me if you dare.', 14, 0, 100, 0, 0, 16754, 36853, 0, 'tyrannus SAY_TYRANNUS_KRICK_2'), +(36794, 2, 0, 'Your pursuit shall be in vain, intruders, for the Lich King has placed an army of undead at my command! Behold!', 14, 0, 100, 0, 0, 16755, 36708, 0, 'tyrannus SAY_TYRANNUS_AMBUSH_1'), +(36794, 3, 0, 'Persistent whelps! You will not reach the entrance of my lord\'s lair! Soldiers, destroy them!', 14, 0, 100, 0, 0, 16756, 36709, 0, 'tyrannus SAY_TYRANNUS_AMBUSH_2'), +(36794, 4, 0, 'Intruders have entered the master\'s domain. Signal the alarms!', 14, 0, 100, 0, 0, 16747, 37093, 0, 'tyrannus SAY_TYRANNUS_INTRO_1'), +(36794, 5, 0, 'Hrmph, fodder. Not even fit to labor in the quarry. Relish these final moments for soon you will be nothing more than mindless undead.', 14, 0, 100, 0, 0, 16748, 37094, 0, 'tyrannus SAY_TYRANNUS_INTRO_2'), +(36794, 6, 0, 'Your last waking memory will be of agonizing pain.', 14, 0, 100, 0, 0, 16749, 37095, 0, 'tyrannus SAY_TYRANNUS_INTRO_3'), +(36794, 7, 0, 'Minions, destroy these interlopers!', 14, 0, 100, 0, 0, 16751, 37096, 0, 'tyrannus SAY_TYRANNUS_INTRO_4'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=36794 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(36794, 0, 0, 'zhCN', '没用的虫子!死亡正等待着你!'), +(36794, 1, 0, 'zhCN', '不要以为我会那么容易让你进入主人的密室。有本事放马过来吧。'), +(36794, 2, 0, 'zhCN', '你们的努力是徒劳的,入侵者。巫妖王让我统率的可是一支亡灵大军!小心了!'), +(36794, 3, 0, 'zhCN', '固执的家伙!你们根本到不了主人的密室!士兵们,消灭他们!'), +(36794, 4, 0, 'zhCN', '入侵者进入了主人的领地。拉响警报!'), +(36794, 5, 0, 'zhCN', '哼,废物,就连在矿坑里作苦力都不配。享受最后的时刻吧。很快你们就会变成行尸走肉了。'), +(36794, 6, 0, 'zhCN', '你们最后的记忆将填满痛苦。'), +(36794, 7, 0, 'zhCN', '奴仆们,消灭那些闯入者!'); + +-- Sindragosa (NullCreature) - fix air walking +UPDATE `creature_template_movement` SET `Flight` = 2 WHERE `CreatureId` = 37755; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 1be51bb47..223f5b7f4 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -27,18 +27,16 @@ enum Yells { - SAY_AGGRO = 14, - SAY_SLAY_1 = 15, - SAY_DEATH = 17, - SAY_FORGE_1 = 18, - SAY_FORGE_2 = 19, - - SAY_BOULDER_HIT = 16, - EMOTE_DEEP_FREEZE = 23, + SAY_AGGRO = 0, + SAY_HP_66 = 1, + SAY_HP_33 = 2, + SAY_DEATH = 3, + SAY_SLAY = 4, + SAY_BOULDER_HIT = 5, + WHISPER_BOULDER = 6, + EMOTE_DEEP_FREEZE = 7, }; -#define EMOTE_THROW_SARONITE "%s hurls a massive saronite boulder at you!" - enum MiscData { EQUIP_ID_SWORD = 49345, @@ -158,14 +156,14 @@ public: { me->SetControlled(true, UNIT_STATE_ROOT); me->CastSpell(me, SPELL_FORGE_BLADE, false); - Talk(SAY_FORGE_1); + Talk(SAY_HP_66); } else if (phase == 2) { me->SetControlled(true, UNIT_STATE_ROOT); me->RemoveAurasDueToSpell(SPELL_FORGE_BLADE); me->CastSpell(me, SPELL_FORGE_MACE, false); - Talk(SAY_FORGE_2); + Talk(SAY_HP_33); } } @@ -244,9 +242,7 @@ public: bCanSayBoulderHit = true; if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 140.0f, true)) { - WorldPacket data; - ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID_BOSS_EMOTE, LANG_UNIVERSAL, me, nullptr, EMOTE_THROW_SARONITE); - target->ToPlayer()->GetSession()->SendPacket(&data); + Talk(WHISPER_BOULDER, target); me->CastSpell(target, SPELL_THROW_SARONITE, false); } events.RepeatEvent(urand(12500, 20000)); @@ -286,7 +282,7 @@ public: void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY_1); + Talk(SAY_SLAY); } void EnterEvadeMode(EvadeReason why) override diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index d2a9dd9bc..75be8654d 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -28,19 +28,18 @@ enum Yells { - SAY_AGGRO = 24, - SAY_SLAY_1 = 25, - SAY_SLAY_2 = 26, - SAY_ORDER_STOP = 27, - SAY_ORDER_BLOW = 28, - SAY_TARGET_1 = 29, - SAY_TARGET_2 = 30, - SAY_TARGET_3 = 31, - EMOTE_KRICK_MINES = 32, - EMOTE_ICK_POISON = 33, -}; + // Ick + EMOTE_ICK_POISON_NOVA = 0, + EMOTE_ICK_CHASE = 1, -#define EMOTE_ICK_CHASING "%s is chasing you!" + // Krick + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_BARRAGE_1 = 2, + SAY_BARRAGE_2 = 3, + SAY_POISON_NOVA = 4, + SAY_CHASE = 5, +}; enum Spells { @@ -119,11 +118,7 @@ public: return; if (spell->Id == SPELL_PURSUIT && target->GetTypeId() == TYPEID_PLAYER) { - WorldPacket data; - - ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID_BOSS_EMOTE, LANG_UNIVERSAL, me, nullptr, EMOTE_ICK_CHASING); - target->ToPlayer()->GetSession()->SendPacket(&data); - + Talk(EMOTE_ICK_CHASE, target); AttackStart(target); me->SetReactState(REACT_PASSIVE); events.RescheduleEvent(EVENT_SET_REACT_AGGRESSIVE, 12000); @@ -222,23 +217,23 @@ public: { case 0: // Pursuit if (Creature* k = GetKrick()) - k->AI()->Talk(RAND(SAY_TARGET_1, SAY_TARGET_2, SAY_TARGET_3)); + k->AI()->Talk(SAY_CHASE); if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 70.0f, true)) me->CastSpell(target, SPELL_PURSUIT, false); break; case 1: // Poison Nova if (Creature* k = GetKrick()) { - k->AI()->Talk(SAY_ORDER_BLOW); - Talk(EMOTE_ICK_POISON); + k->AI()->Talk(SAY_POISON_NOVA); + Talk(EMOTE_ICK_POISON_NOVA); } me->CastSpell(me, SPELL_POISON_NOVA, false); break; case 2: // Explosive Barrage if (Creature* k = GetKrick()) { - k->AI()->Talk(SAY_ORDER_STOP); - k->AI()->Talk(EMOTE_KRICK_MINES); + k->AI()->Talk(SAY_BARRAGE_1); + k->AI()->Talk(SAY_BARRAGE_2); k->InterruptNonMeleeSpells(false); me->InterruptNonMeleeSpells(false); k->CastSpell(k, SPELL_EXPLOSIVE_BARRAGE_KRICK, false); @@ -270,7 +265,7 @@ public: if (who->GetTypeId() == TYPEID_PLAYER) if (Creature* k = GetKrick()) - k->AI()->Talk(RAND(SAY_SLAY_1, SAY_SLAY_2)); + k->AI()->Talk(SAY_SLAY); } void JustSummoned(Creature* /*summon*/) override diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index a761929cf..908a75263 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -22,14 +22,13 @@ enum Texts { - SAY_AGGRO = 53, - SAY_SLAY_1 = 54, - SAY_SLAY_2 = 55, - SAY_DEATH = 56, - SAY_MARK = 57, - SAY_SMASH = 58, - EMOTE_RIMEFANG_ICEBOLT = 59, - EMOTE_SMASH = 60, + SAY_AGGRO = 2, + SAY_SLAY = 3, + SAY_DEATH = 4, + SAY_MARK = 5, + EMOTE_MARK = 6, + SAY_DARK_MIGHT = 7, + EMOTE_DARK_MIGHT = 8, }; enum Spells @@ -166,8 +165,8 @@ public: events.RepeatEvent(3000); break; case EVENT_SPELL_UNHOLY_POWER: - Talk(SAY_SMASH); - Talk(EMOTE_SMASH); + Talk(SAY_DARK_MIGHT); + Talk(EMOTE_DARK_MIGHT); me->CastSpell(me, SPELL_UNHOLY_POWER, false); events.ScheduleEvent(EVENT_SPELL_FORCEFUL_SMASH, urand(40000, 48000)); @@ -188,7 +187,7 @@ public: if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID))) { Talk(SAY_MARK); - c->AI()->Talk(EMOTE_RIMEFANG_ICEBOLT, target); + Talk(EMOTE_MARK, target); c->CastSpell(target, RIMEFANG_SPELL_HOARFROST, false); } events.RepeatEvent(25000); @@ -211,7 +210,7 @@ public: void KilledUnit(Unit* who) override { if (who->GetTypeId() == TYPEID_PLAYER) - Talk(RAND(SAY_SLAY_1, SAY_SLAY_2)); + Talk(SAY_SLAY); } bool CanAIAttack(Unit const* who) const override diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index 1e2777ac7..cc6828eac 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -175,7 +175,7 @@ public: events.RescheduleEvent(7, 5000); break; - case 7: + case 7: /// @todo: (Initial RP, when zoning in the instance) is not complete. if (pInstance) { if (Creature* n1 = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_NECROLYTE_1_GUID))) @@ -929,7 +929,7 @@ public: if (pInstance) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_GUID))) { - c->AI()->Talk(SAY_PREFIGHT_1); + c->AI()->Talk(SAY_BOSS_TYRANNUS_INTRO_1); c->SetImmuneToPC(false); c->SetReactState(REACT_AGGRESSIVE); //c->ClearUnitState(UNIT_STATE_ONVEHICLE); @@ -1034,7 +1034,7 @@ public: case 3: if (pInstance) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_GUID))) - c->AI()->Talk(SAY_PREFIGHT_2); + c->AI()->Talk(SAY_BOSS_TYRANNUS_INTRO_2); me->SetFacingTo(5.26f); me->SetOrientation(5.26f); @@ -1203,7 +1203,9 @@ public: break; case 1: if (me->GetEntry() == NPC_JAINA_PART2) + { Talk(SAY_JAINA_OUTRO_3); + } break; case 6: me->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h index 64f752a24..312238c28 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.h @@ -145,16 +145,17 @@ enum eSpells *** INTRO: ************/ -enum eIntroTexts +// Tyrannus speaker - NPC_TYRANNUS_EVENT +enum eIntroTexts // Before Cave { - SAY_TYRANNUS_INTRO_1 = 1, + SAY_TYRANNUS_INTRO_1 = 4, SAY_JAINA_INTRO_1 = 2, SAY_SYLVANAS_INTRO_1 = 3, - SAY_TYRANNUS_INTRO_2 = 4, - SAY_TYRANNUS_INTRO_3 = 5, + SAY_TYRANNUS_INTRO_2 = 5, + SAY_TYRANNUS_INTRO_3 = 6, SAY_JAINA_INTRO_2 = 6, SAY_SYLVANAS_INTRO_2 = 7, - SAY_TYRANNUS_INTRO_4 = 8, + SAY_TYRANNUS_INTRO_4 = 7, SAY_JAINA_INTRO_3 = 9, SAY_JAINA_INTRO_4 = 10, SAY_SYLVANAS_INTRO_3 = 11, @@ -206,7 +207,7 @@ const ChampionPosition introPositions[] = enum eFBSTexts { SAY_GENERAL_GARFROST = 21, - SAY_TYRANNUS_GARFROST = 20, + SAY_TYRANNUS_GARFROST = 0, }; const Position FBSSpawnPos = {695.685f, -118.825f, 513.877f, 3 * M_PI / 2}; @@ -240,18 +241,18 @@ const Position SBSTyrannusStartPos = {781.127f, 265.825f, 552.31f, 0.0f}; const Position SBSLeaderStartPos = {772.716f, 111.517f, 510.81f, 0.0f}; const Position SBSLeaderEndPos = {823.2f, -4.4497f, 509.49f, 0.86f}; -enum eSBSTexts +enum eSBSTexts // Ick outro { - SAY_OUTRO_KRICK_1 = 35, + SAY_OUTRO_KRICK_1 = 6, SAY_JAINA_KRICK_1 = 36, SAY_SYLVANAS_KRICK_1 = 37, - SAY_OUTRO_KRICK_2 = 38, + SAY_OUTRO_KRICK_2 = 7, SAY_JAINA_KRICK_2 = 39, SAY_SYLVANAS_KRICK_2 = 40, - SAY_OUTRO_KRICK_3 = 41, - SAY_TYRANNUS_KRICK_1 = 42, - SAY_OUTRO_KRICK_4 = 43, - SAY_TYRANNUS_KRICK_2 = 44, + SAY_OUTRO_KRICK_3 = 8, + SAY_TYRANNUS_KRICK_1 = 0, + SAY_OUTRO_KRICK_4 = 9, + SAY_TYRANNUS_KRICK_2 = 1, SAY_JAINA_KRICK_3 = 45, SAY_SYLVANAS_KRICK_3 = 46, }; @@ -266,9 +267,9 @@ const Position PTSTyrannusWaitPos3 = {1117.93f, -125.16f, 760.34f, 0.10f}; enum ePTSTexts { - SAY_TYRANNUS_AMBUSH_1 = 47, - SAY_TYRANNUS_AMBUSH_2 = 48, - SAY_TYRANNUS_TRAP_TUNNEL = 49, + SAY_TYRANNUS_AMBUSH_1 = 2, // NPC_TYRANNUS_EVENT + SAY_TYRANNUS_AMBUSH_2 = 3, // NPC_TYRANNUS_EVENT + SAY_TYRANNUS_TRAP_TUNNEL = 1, // NPC_TYRANNUS_VOICE }; /************ @@ -313,10 +314,9 @@ const TSPosition TSData[] = enum eTSTexts { - SAY_PREFIGHT_1 = 50, + SAY_BOSS_TYRANNUS_INTRO_1 = 0, SAY_GENERAL_HORDE_TRASH = 51, - SAY_PREFIGHT_2 = 52, - SAY_PREFIGHT_AGGRO = 53, + SAY_BOSS_TYRANNUS_INTRO_2 = 1, SAY_GENERAL_HORDE_OUTRO_1 = 61, SAY_GENERAL_OUTRO_2 = 62, From 9eb4b3a336c703705bcdf089fb34a219cd4d9881 Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Sat, 4 Mar 2023 21:43:14 +0100 Subject: [PATCH 044/159] feat(Core/Character): Implement profanity_name (#15156) --- .../rev_1677013247854223400.sql | 6 ++ .../rev_1677012340406860800.sql | 4 + .../Implementation/CharacterDatabase.cpp | 1 + .../Implementation/CharacterDatabase.h | 1 + src/server/game/Battlegrounds/ArenaTeam.cpp | 2 +- .../game/Entities/Player/PlayerStorage.cpp | 2 +- src/server/game/Globals/ObjectMgr.cpp | 80 +++++++++++++++++++ src/server/game/Globals/ObjectMgr.h | 9 +++ src/server/game/Guilds/Guild.cpp | 2 +- src/server/game/Handlers/PetHandler.cpp | 6 ++ src/server/game/Handlers/PetitionsHandler.cpp | 8 +- src/server/game/Miscellaneous/Language.h | 2 +- src/server/game/World/World.cpp | 5 +- src/server/scripts/Commands/cs_character.cpp | 7 ++ src/server/scripts/Commands/cs_guild.cpp | 2 +- src/server/scripts/Commands/cs_reload.cpp | 14 +++- 16 files changed, 139 insertions(+), 12 deletions(-) create mode 100644 data/sql/updates/pending_db_characters/rev_1677013247854223400.sql create mode 100644 data/sql/updates/pending_db_world/rev_1677012340406860800.sql diff --git a/data/sql/updates/pending_db_characters/rev_1677013247854223400.sql b/data/sql/updates/pending_db_characters/rev_1677013247854223400.sql new file mode 100644 index 000000000..93da5ac19 --- /dev/null +++ b/data/sql/updates/pending_db_characters/rev_1677013247854223400.sql @@ -0,0 +1,6 @@ +-- +DROP TABLE IF EXISTS `profanity_name`; +CREATE TABLE `profanity_name` ( + `name` VARCHAR(12) NOT NULL, + PRIMARY KEY (`name`) +) ENGINE=InnoDB; diff --git a/data/sql/updates/pending_db_world/rev_1677012340406860800.sql b/data/sql/updates/pending_db_world/rev_1677012340406860800.sql new file mode 100644 index 000000000..52372b074 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677012340406860800.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `acore_string` WHERE `entry` = 187; +INSERT INTO `acore_string` (`entry`, `content_default`) VALUE +(187, 'This name is profane, choose another one'); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 749f46056..c3e4bb02a 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -596,6 +596,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() // Character names PrepareStatement(CHAR_INS_RESERVED_PLAYER_NAME, "INSERT IGNORE INTO reserved_name (name) VALUES (?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_PROFANITY_PLAYER_NAME, "INSERT IGNORE INTO profanity_name (name) VALUES (?)", CONNECTION_ASYNC); // Character settings PrepareStatement(CHAR_SEL_CHAR_SETTINGS, "SELECT source, data FROM character_settings WHERE guid = ?", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index 939f1d863..6a85c7aba 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -510,6 +510,7 @@ enum CharacterDatabaseStatements : uint32 CHAR_SEL_ARENAPOINTS, CHAR_INS_RESERVED_PLAYER_NAME, + CHAR_INS_PROFANITY_PLAYER_NAME, CHAR_SEL_CHAR_SETTINGS, CHAR_REP_CHAR_SETTINGS, diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp index 2d326dcd0..c19f66833 100644 --- a/src/server/game/Battlegrounds/ArenaTeam.cpp +++ b/src/server/game/Battlegrounds/ArenaTeam.cpp @@ -281,7 +281,7 @@ bool ArenaTeam::LoadMembersFromDB(QueryResult result) bool ArenaTeam::SetName(std::string const& name) { - if (TeamName == name || name.empty() || name.length() > 24 || sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name)) + if (TeamName == name || name.empty() || name.length() > 24 || sObjectMgr->IsReservedName(name) || sObjectMgr->IsProfanityName(name) || !ObjectMgr::IsValidCharterName(name)) return false; TeamName = name; diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index 9d55b21e4..0637a4a3a 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -4990,7 +4990,7 @@ bool Player::LoadFromDB(ObjectGuid playerGuid, CharacterDatabaseQueryHolder cons // check name limitations if (ObjectMgr::CheckPlayerName(m_name) != CHAR_NAME_SUCCESS || - (AccountMgr::IsPlayerAccount(GetSession()->GetSecurity()) && sObjectMgr->IsReservedName(m_name))) + (AccountMgr::IsPlayerAccount(GetSession()->GetSecurity()) && (sObjectMgr->IsReservedName(m_name) || sObjectMgr->IsProfanityName(m_name)))) { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG); stmt->SetData(0, uint16(AT_LOGIN_RENAME)); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index a9fe13080..e471dfa79 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -8204,6 +8204,81 @@ void ObjectMgr::AddReservedPlayerName(std::string const& name) } } +void ObjectMgr::LoadProfanityPlayersNames() +{ + uint32 oldMSTime = getMSTime(); + + _profanityNamesStore.clear(); // need for reload case + + QueryResult result = CharacterDatabase.Query("SELECT name FROM profanity_name"); + + if (!result) + { + LOG_WARN("server.loading", ">> Loaded 0 profanity player names. DB table `profanity_name` is empty!"); + LOG_INFO("server.loading", " "); + return; + } + + uint32 count = 0; + + Field* fields; + do + { + fields = result->Fetch(); + std::string name = fields[0].Get(); + + std::wstring wstr; + if (!Utf8toWStr (name, wstr)) + { + LOG_ERROR("sql.sql", "Table `profanity_name` have invalid name: {}", name); + continue; + } + + wstrToLower(wstr); + + _profanityNamesStore.insert(wstr); + ++count; + } while (result->NextRow()); + + LOG_INFO("server.loading", ">> Loaded {} profanity player names in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); + LOG_INFO("server.loading", " "); +} + +bool ObjectMgr::IsProfanityName(std::string_view name) const +{ + // pussywizard + if (name.size() >= 2 && (name[name.size() - 2] == 'G' || name[name.size() - 2] == 'g') && (name[name.size() - 1] == 'M' || name[name.size() - 1] == 'm')) + return true; + + std::wstring wstr; + if (!Utf8toWStr (name, wstr)) + return false; + + wstrToLower(wstr); + + return _profanityNamesStore.find(wstr) != _profanityNamesStore.end(); +} + +void ObjectMgr::AddProfanityPlayerName(std::string const& name) +{ + if (!IsProfanityName(name)) + { + std::wstring wstr; + if (!Utf8toWStr(name, wstr)) + { + LOG_ERROR("server", "Could not add invalid name to profanity player names: {}", name); + return; + } + wstrToLower(wstr); + + _profanityNamesStore.insert(wstr); + + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_PROFANITY_PLAYER_NAME); + stmt->SetData(0, name); + CharacterDatabase.Execute(stmt); + } +} + enum LanguageType { LT_BASIC_LATIN = 0x0000, @@ -8311,6 +8386,11 @@ uint8 ObjectMgr::CheckPlayerName(std::string_view name, bool create) return CHAR_NAME_RESERVED; } + if (sObjectMgr->IsProfanityName(name)) + { + return CHAR_NAME_PROFANE; + } + // Check for Reserved Name from DBC if (sWorld->getBoolConfig(CONFIG_STRICT_NAMES_RESERVED)) { diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 28b13f10c..0e40a20b0 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -1337,6 +1337,11 @@ public: [[nodiscard]] bool IsReservedName(std::string_view name) const; void AddReservedPlayerName(std::string const& name); + // profanity names + void LoadProfanityPlayersNames(); + [[nodiscard]] bool IsProfanityName(std::string_view name) const; + void AddProfanityPlayerName(std::string const& name); + // name with valid structure and symbols static uint8 CheckPlayerName(std::string_view name, bool create = false); static PetNameInvalidReason CheckPetName(std::string_view name); @@ -1506,6 +1511,10 @@ private: typedef std::set ReservedNamesContainer; ReservedNamesContainer _reservedNamesStore; + //character profanity names + typedef std::set ProfanityNamesContainer; + ReservedNamesContainer _profanityNamesStore; + GameTeleContainer _gameTeleStore; ScriptNameContainer _scriptNamesStore; diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 849f75487..e04b70411 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1184,7 +1184,7 @@ void Guild::OnPlayerStatusChange(Player* player, uint32 flag, bool state) bool Guild::SetName(std::string_view const& name) { - if (m_name == name || name.empty() || name.length() > 24 || sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name)) + if (m_name == name || name.empty() || name.length() > 24 || sObjectMgr->IsReservedName(name) || sObjectMgr->IsProfanityName(name) || !ObjectMgr::IsValidCharterName(name)) { return false; } diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index ca040451d..71c8c3cbc 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -861,6 +861,12 @@ void WorldSession::HandlePetRename(WorldPacket& recvData) return; } + if (sObjectMgr->IsProfanityName(name)) + { + SendPetNameInvalid(PET_NAME_PROFANE, name, nullptr); + return; + } + pet->SetName(name); Unit* owner = pet->GetOwner(); diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index e8cc33152..0f159d1fe 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -137,7 +137,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) return; } - if (sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name)) + if (sObjectMgr->IsReservedName(name) || sObjectMgr->IsProfanityName(name) || !ObjectMgr::IsValidCharterName(name)) { Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_INVALID, name); return; @@ -150,7 +150,7 @@ void WorldSession::HandlePetitionBuyOpcode(WorldPacket& recvData) SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_EXISTS_S); return; } - if (sObjectMgr->IsReservedName(name) || !ObjectMgr::IsValidCharterName(name)) + if (sObjectMgr->IsReservedName(name) || sObjectMgr->IsProfanityName(name) || !ObjectMgr::IsValidCharterName(name)) { SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, name, "", ERR_ARENA_TEAM_NAME_INVALID); return; @@ -351,7 +351,7 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket& recvData) Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_EXISTS_S, newName); return; } - if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName)) + if (sObjectMgr->IsReservedName(newName) || sObjectMgr->IsProfanityName(newName) || !ObjectMgr::IsValidCharterName(newName)) { Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_INVALID, newName); return; @@ -364,7 +364,7 @@ void WorldSession::HandlePetitionRenameOpcode(WorldPacket& recvData) SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_EXISTS_S); return; } - if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName)) + if (sObjectMgr->IsReservedName(newName) || sObjectMgr->IsProfanityName(newName) || !ObjectMgr::IsValidCharterName(newName)) { SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S, newName, "", ERR_ARENA_TEAM_NAME_INVALID); return; diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 587abd97c..8f314fa38 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -218,7 +218,7 @@ enum AcoreStrings LANG_GRID_POSITION = 178, // 179-185 used in other client versions LANG_TRANSPORT_POSITION = 186, - // 187 + LANG_PROFANITY_NAME = 187, LANG_2FA_SECRET_TOO_LONG = 188, LANG_2FA_SECRET_INVALID = 189, LANG_2FA_SECRET_SET_COMPLETE = 190, diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 9a74e7494..59936d0a2 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1911,9 +1911,12 @@ void World::SetInitialWorldSettings() LOG_INFO("server.loading", "Loading Groups..."); sGroupMgr->LoadGroups(); - LOG_INFO("server.loading", "Loading ReservedNames..."); + LOG_INFO("server.loading", "Loading Reserved Names..."); sObjectMgr->LoadReservedPlayersNames(); + LOG_INFO("server.loading", "Loading Profanity Names..."); + sObjectMgr->LoadProfanityPlayersNames(); + LOG_INFO("server.loading", "Loading GameObjects for Quests..."); sObjectMgr->LoadGameObjectForQuests(); diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index e1a065b75..6192b83bc 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -363,6 +363,13 @@ public: return false; } + if (sObjectMgr->IsProfanityName(newName)) + { + handler->SendSysMessage(LANG_PROFANITY_NAME); + handler->SetSentErrorMessage(true); + return false; + } + CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHECK_NAME); stmt->SetData(0, newName); PreparedQueryResult result = CharacterDatabase.Query(stmt); diff --git a/src/server/scripts/Commands/cs_guild.cpp b/src/server/scripts/Commands/cs_guild.cpp index 45efab856..b5f40ba10 100644 --- a/src/server/scripts/Commands/cs_guild.cpp +++ b/src/server/scripts/Commands/cs_guild.cpp @@ -100,7 +100,7 @@ public: return false; } - if (sObjectMgr->IsReservedName(guildName) || !sObjectMgr->IsValidCharterName(guildName)) + if (sObjectMgr->IsReservedName(guildName) || sObjectMgr->IsProfanityName(guildName) || !sObjectMgr->IsValidCharterName(guildName)) { handler->SendSysMessage(LANG_BAD_VALUE); handler->SetSentErrorMessage(true); diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index a0d2fad31..b7265e89c 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -143,6 +143,7 @@ public: { "quest_template", HandleReloadQuestTemplateCommand, SEC_ADMINISTRATOR, Console::Yes }, { "reference_loot_template", HandleReloadLootTemplatesReferenceCommand, SEC_ADMINISTRATOR, Console::Yes }, { "reserved_name", HandleReloadReservedNameCommand, SEC_ADMINISTRATOR, Console::Yes }, + { "profanity_name", HandleReloadProfanityNameCommand, SEC_ADMINISTRATOR, Console::Yes }, { "reputation_reward_rate", HandleReloadReputationRewardRateCommand, SEC_ADMINISTRATOR, Console::Yes }, { "reputation_spillover_template", HandleReloadReputationRewardRateCommand, SEC_ADMINISTRATOR, Console::Yes }, { "skill_discovery_template", HandleReloadSkillDiscoveryTemplateCommand, SEC_ADMINISTRATOR, Console::Yes }, @@ -204,6 +205,7 @@ public: HandleReloadMailServerTemplateCommand(handler); HandleReloadCommandCommand(handler); HandleReloadReservedNameCommand(handler); + HandleReloadProfanityNameCommand(handler); HandleReloadAcoreStringCommand(handler); HandleReloadGameTeleCommand(handler); HandleReloadCreatureMovementOverrideCommand(handler); @@ -779,9 +781,17 @@ public: static bool HandleReloadReservedNameCommand(ChatHandler* handler) { - LOG_INFO("server.loading", "Loading ReservedNames... (`reserved_name`)"); + LOG_INFO("server.loading", "Re-Loading `reserved_player` Table!"); sObjectMgr->LoadReservedPlayersNames(); - handler->SendGlobalGMSysMessage("DB table `reserved_name` (player reserved names) reloaded."); + handler->SendGlobalGMSysMessage("DB table `reserved_name` reloaded."); + return true; + } + + static bool HandleReloadProfanityNameCommand(ChatHandler* handler) + { + LOG_INFO("server.loading", "Re-Loading `profanity_player` Table!"); + sObjectMgr->LoadProfanityPlayersNames(); + handler->SendGlobalGMSysMessage("DB table `profanity_player` reloaded."); return true; } From 3a3c9b69bb650709cfbf71636fdf448f71fe3777 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 4 Mar 2023 22:43:53 +0200 Subject: [PATCH 045/159] fix(DB/SAI): Rift Spawn no emote/flags (#15150) Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- .../rev_1676968393827350700.sql | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676968393827350700.sql diff --git a/data/sql/updates/pending_db_world/rev_1676968393827350700.sql b/data/sql/updates/pending_db_world/rev_1676968393827350700.sql new file mode 100644 index 000000000..c5dc9a811 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676968393827350700.sql @@ -0,0 +1,26 @@ +-- Rift Spawn (Mage Quest NPC) +DELETE FROM `creature_text` WHERE `CreatureID`=6492; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(6492, 0, 0, '%s is angered and attacks!', 16, 0, 100, 0, 0, 0, 3074, 0, 'Rift Spawn'), +(6492, 1, 0, '%s escapes into the void!', 16, 0, 100, 0, 0, 0, 2564, 0, 'Rift Spawn'), +(6492, 2, 0, '%s is sucked into the coffer!', 16, 0, 100, 0, 0, 0, 2553, 0, 'Rift Spawn'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 6492); +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 +(6492, 0, 0, 1, 25, 0, 100, 0, 0, 0, 0, 0, 0, 11, 9093, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Reset - Cast \'Rift Spawn Invisibility\''), +(6492, 0, 1, 2, 61, 0, 100, 512, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Reset - Set Invincibility Hp 1'), +(6492, 0, 2, 3, 61, 0, 100, 512, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Reset - Set Event Phase 0'), +(6492, 0, 3, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 19, 33685508, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Reset - Remove Flags Disable Movement & Pacified & Not Selectable'), +(6492, 0, 4, 5, 8, 0, 100, 512, 9095, 0, 0, 0, 0, 28, 9093, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Spellhit \'Cantation of Manifestation\' - Remove Aura \'Rift Spawn Invisibility\''), +(6492, 0, 5, 6, 61, 0, 100, 512, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Spellhit \'Cantation of Manifestation\' - Set Event Phase 1'), +(6492, 0, 6, 7, 61, 0, 100, 513, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Spellhit \'Cantation of Manifestation\' - Say Line 0 " is angered and attacks!"'), +(6492, 0, 7, 0, 61, 0, 100, 513, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Spellhit \'Cantation of Manifestation\' - Start Attacking'), +(6492, 0, 8, 9, 2, 1, 100, 0, 0, 1, 1000, 1000, 0, 11, 9032, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - Between 0-1% Health - Cast \'Self Stun - 30 seconds\' (Phase 1)'), +(6492, 0, 9, 10, 61, 0, 100, 512, 0, 0, 0, 0, 0, 41, 30000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - Between 0-1% Health - Despawn In 30000 ms (Phase 1)'), +(6492, 0, 10, 11, 61, 0, 100, 512, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - Between 0-1% Health - Set Event Phase 2 (Phase 1)'), +(6492, 0, 11, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 18, 33685508, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - Between 0-1% Health - Set Flags Disable Movement & Pacified & Not Selectable'), +(6492, 0, 12, 0, 60, 2, 100, 0, 29000, 29000, 10000, 10000, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Update - Say Line 1 "escapes into the void" (Phase 2)'), +(6492, 0, 13, 14, 38, 2, 100, 512, 1, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Data Set 1 0 - Remove All Auras (Phase 2)'), +(6492, 0, 14, 15, 61, 0, 100, 512, 0, 0, 0, 0, 0, 11, 9010, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Data Set 1 0 - Cast \'Create Filled Containment Coffer\' (Phase 2)'), +(6492, 0, 15, 16, 61, 0, 100, 512, 0, 0, 0, 0, 0, 41, 2500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Data Set 1 0 - Despawn In 2500 ms (Phase 2)'), +(6492, 0, 16, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rift Spawn - On Data Set 1 0 - Say Line 2 "is sucked into the coffer!" (Phase 2)'); From edb9df9347a14454341bbf2be6fd13be8d9fe4b4 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 4 Mar 2023 20:46:13 +0000 Subject: [PATCH 046/159] chore(DB): import pending files Referenced commit(s): 3a3c9b69bb650709cfbf71636fdf448f71fe3777 --- .../2023_03_04_00.sql} | 1 + .../rev_1676968393827350700.sql => db_world/2023_03_04_02.sql} | 1 + .../rev_1677008695688965000.sql => db_world/2023_03_04_03.sql} | 1 + .../rev_1677012340406860800.sql => db_world/2023_03_04_04.sql} | 1 + .../rev_1677174924847719800.sql => db_world/2023_03_04_05.sql} | 1 + .../rev_1677322470662676600.sql => db_world/2023_03_04_06.sql} | 1 + .../rev_1677409485979883900.sql => db_world/2023_03_04_07.sql} | 1 + .../rev_1677410180671468300.sql => db_world/2023_03_04_08.sql} | 1 + .../rev_1677495939101704800.sql => db_world/2023_03_04_09.sql} | 1 + .../rev_1677597663131840800.sql => db_world/2023_03_04_10.sql} | 1 + .../rev_1677639790735595900.sql => db_world/2023_03_04_11.sql} | 1 + .../rev_1677761748533314800.sql => db_world/2023_03_04_12.sql} | 1 + .../rev_1677797244323339200.sql => db_world/2023_03_04_13.sql} | 1 + .../rev_1677805290069827400.sql => db_world/2023_03_04_14.sql} | 1 + .../rev_1677805981976626800.sql => db_world/2023_03_04_15.sql} | 1 + .../rev_1677807108312300000.sql => db_world/2023_03_04_16.sql} | 1 + .../rev_1677870148388497400.sql => db_world/2023_03_04_17.sql} | 1 + 17 files changed, 17 insertions(+) rename data/sql/updates/{pending_db_characters/rev_1677013247854223400.sql => db_characters/2023_03_04_00.sql} (76%) rename data/sql/updates/{pending_db_world/rev_1676968393827350700.sql => db_world/2023_03_04_02.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1677008695688965000.sql => db_world/2023_03_04_03.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1677012340406860800.sql => db_world/2023_03_04_04.sql} (78%) rename data/sql/updates/{pending_db_world/rev_1677174924847719800.sql => db_world/2023_03_04_05.sql} (86%) rename data/sql/updates/{pending_db_world/rev_1677322470662676600.sql => db_world/2023_03_04_06.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1677409485979883900.sql => db_world/2023_03_04_07.sql} (72%) rename data/sql/updates/{pending_db_world/rev_1677410180671468300.sql => db_world/2023_03_04_08.sql} (76%) rename data/sql/updates/{pending_db_world/rev_1677495939101704800.sql => db_world/2023_03_04_09.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1677597663131840800.sql => db_world/2023_03_04_10.sql} (93%) rename data/sql/updates/{pending_db_world/rev_1677639790735595900.sql => db_world/2023_03_04_11.sql} (81%) rename data/sql/updates/{pending_db_world/rev_1677761748533314800.sql => db_world/2023_03_04_12.sql} (93%) rename data/sql/updates/{pending_db_world/rev_1677797244323339200.sql => db_world/2023_03_04_13.sql} (83%) rename data/sql/updates/{pending_db_world/rev_1677805290069827400.sql => db_world/2023_03_04_14.sql} (89%) rename data/sql/updates/{pending_db_world/rev_1677805981976626800.sql => db_world/2023_03_04_15.sql} (81%) rename data/sql/updates/{pending_db_world/rev_1677807108312300000.sql => db_world/2023_03_04_16.sql} (96%) rename data/sql/updates/{pending_db_world/rev_1677870148388497400.sql => db_world/2023_03_04_17.sql} (66%) diff --git a/data/sql/updates/pending_db_characters/rev_1677013247854223400.sql b/data/sql/updates/db_characters/2023_03_04_00.sql similarity index 76% rename from data/sql/updates/pending_db_characters/rev_1677013247854223400.sql rename to data/sql/updates/db_characters/2023_03_04_00.sql index 93da5ac19..319f59a25 100644 --- a/data/sql/updates/pending_db_characters/rev_1677013247854223400.sql +++ b/data/sql/updates/db_characters/2023_03_04_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_01_31_00 -> 2023_03_04_00 -- DROP TABLE IF EXISTS `profanity_name`; CREATE TABLE `profanity_name` ( diff --git a/data/sql/updates/pending_db_world/rev_1676968393827350700.sql b/data/sql/updates/db_world/2023_03_04_02.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1676968393827350700.sql rename to data/sql/updates/db_world/2023_03_04_02.sql index c5dc9a811..d172fdfa7 100644 --- a/data/sql/updates/pending_db_world/rev_1676968393827350700.sql +++ b/data/sql/updates/db_world/2023_03_04_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_01 -> 2023_03_04_02 -- Rift Spawn (Mage Quest NPC) DELETE FROM `creature_text` WHERE `CreatureID`=6492; 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_1677008695688965000.sql b/data/sql/updates/db_world/2023_03_04_03.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677008695688965000.sql rename to data/sql/updates/db_world/2023_03_04_03.sql index cde29743a..d13f003b2 100644 --- a/data/sql/updates/pending_db_world/rev_1677008695688965000.sql +++ b/data/sql/updates/db_world/2023_03_04_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_02 -> 2023_03_04_03 -- Pit of Saron - Fix order, add missing creature_text and remove duplicates from original sniffs. -- Forgemaster Garfrost DELETE FROM `creature_text` WHERE `CreatureID`=36494; diff --git a/data/sql/updates/pending_db_world/rev_1677012340406860800.sql b/data/sql/updates/db_world/2023_03_04_04.sql similarity index 78% rename from data/sql/updates/pending_db_world/rev_1677012340406860800.sql rename to data/sql/updates/db_world/2023_03_04_04.sql index 52372b074..fc1ac552a 100644 --- a/data/sql/updates/pending_db_world/rev_1677012340406860800.sql +++ b/data/sql/updates/db_world/2023_03_04_04.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_03 -> 2023_03_04_04 -- DELETE FROM `acore_string` WHERE `entry` = 187; INSERT INTO `acore_string` (`entry`, `content_default`) VALUE diff --git a/data/sql/updates/pending_db_world/rev_1677174924847719800.sql b/data/sql/updates/db_world/2023_03_04_05.sql similarity index 86% rename from data/sql/updates/pending_db_world/rev_1677174924847719800.sql rename to data/sql/updates/db_world/2023_03_04_05.sql index dd172388d..2161a96c5 100644 --- a/data/sql/updates/pending_db_world/rev_1677174924847719800.sql +++ b/data/sql/updates/db_world/2023_03_04_05.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_04 -> 2023_03_04_05 -- Scarlet Enchanter - Remove OOC attack closest player DELETE FROM `smart_scripts` WHERE `entryorguid` = 9452 AND `source_type` = 0 AND `id` = 2; diff --git a/data/sql/updates/pending_db_world/rev_1677322470662676600.sql b/data/sql/updates/db_world/2023_03_04_06.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1677322470662676600.sql rename to data/sql/updates/db_world/2023_03_04_06.sql index fa2e4c6fe..3275348e0 100644 --- a/data/sql/updates/pending_db_world/rev_1677322470662676600.sql +++ b/data/sql/updates/db_world/2023_03_04_06.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_05 -> 2023_03_04_06 -- DELETE FROM `creature_text` WHERE `CreatureID`=17876 AND `groupid` IN (21,22,23); INSERT INTO `creature_text` VALUES diff --git a/data/sql/updates/pending_db_world/rev_1677409485979883900.sql b/data/sql/updates/db_world/2023_03_04_07.sql similarity index 72% rename from data/sql/updates/pending_db_world/rev_1677409485979883900.sql rename to data/sql/updates/db_world/2023_03_04_07.sql index fccb80e2d..a117bfd8e 100644 --- a/data/sql/updates/pending_db_world/rev_1677409485979883900.sql +++ b/data/sql/updates/db_world/2023_03_04_07.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_06 -> 2023_03_04_07 -- DELETE FROM `spell_group` WHERE `id`=1001 AND `spell_id`=25661; INSERT INTO `spell_group` VALUES diff --git a/data/sql/updates/pending_db_world/rev_1677410180671468300.sql b/data/sql/updates/db_world/2023_03_04_08.sql similarity index 76% rename from data/sql/updates/pending_db_world/rev_1677410180671468300.sql rename to data/sql/updates/db_world/2023_03_04_08.sql index dd22dd97e..363979806 100644 --- a/data/sql/updates/pending_db_world/rev_1677410180671468300.sql +++ b/data/sql/updates/db_world/2023_03_04_08.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_07 -> 2023_03_04_08 -- DELETE FROM `spell_proc_event` WHERE `entry`=-31641; INSERT INTO `spell_proc_event` VALUES diff --git a/data/sql/updates/pending_db_world/rev_1677495939101704800.sql b/data/sql/updates/db_world/2023_03_04_09.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677495939101704800.sql rename to data/sql/updates/db_world/2023_03_04_09.sql index eca4e5877..41bd31e1a 100644 --- a/data/sql/updates/pending_db_world/rev_1677495939101704800.sql +++ b/data/sql/updates/db_world/2023_03_04_09.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_08 -> 2023_03_04_09 -- Halls of Reflection - remove the used duplicates (no broadcastid) and add missing texts. -- Marwyn DELETE FROM `creature_text` WHERE `CreatureID`=38113; diff --git a/data/sql/updates/pending_db_world/rev_1677597663131840800.sql b/data/sql/updates/db_world/2023_03_04_10.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1677597663131840800.sql rename to data/sql/updates/db_world/2023_03_04_10.sql index 96221ecd5..ddf8119ab 100644 --- a/data/sql/updates/pending_db_world/rev_1677597663131840800.sql +++ b/data/sql/updates/db_world/2023_03_04_10.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_09 -> 2023_03_04_10 -- Falthir the Sightless, add 8143 (Rogue revered neck quest) DELETE FROM `creature_queststarter` WHERE `id` = 14905 AND `quest` = 8143; INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES (14905, 8143); diff --git a/data/sql/updates/pending_db_world/rev_1677639790735595900.sql b/data/sql/updates/db_world/2023_03_04_11.sql similarity index 81% rename from data/sql/updates/pending_db_world/rev_1677639790735595900.sql rename to data/sql/updates/db_world/2023_03_04_11.sql index c9b3f533f..0332df31d 100644 --- a/data/sql/updates/pending_db_world/rev_1677639790735595900.sql +++ b/data/sql/updates/db_world/2023_03_04_11.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_10 -> 2023_03_04_11 -- -- Remove 1.X mobs that are not in wotlk DELETE FROM creature where guid IN (80391, 80392, 80393, 80394, 80396, 80397, 80399, 80400, 80401, 80402, 80403, 80404, 80405) AND id1 IN(116, 94); diff --git a/data/sql/updates/pending_db_world/rev_1677761748533314800.sql b/data/sql/updates/db_world/2023_03_04_12.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1677761748533314800.sql rename to data/sql/updates/db_world/2023_03_04_12.sql index 10efb7a22..1ec886264 100644 --- a/data/sql/updates/pending_db_world/rev_1677761748533314800.sql +++ b/data/sql/updates/db_world/2023_03_04_12.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_11 -> 2023_03_04_12 -- Sayge - fix wrong gossip_option (was npc_text) DELETE FROM `gossip_menu_option` WHERE `MenuID` = 6210 AND `OptionID` = 0; INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1677797244323339200.sql b/data/sql/updates/db_world/2023_03_04_13.sql similarity index 83% rename from data/sql/updates/pending_db_world/rev_1677797244323339200.sql rename to data/sql/updates/db_world/2023_03_04_13.sql index aeba1fc63..e602a5c57 100644 --- a/data/sql/updates/pending_db_world/rev_1677797244323339200.sql +++ b/data/sql/updates/db_world/2023_03_04_13.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_04_12 -> 2023_03_04_13 -- Too many friendly NPCs dealing damage can interfere with quest objective for killing Socrethar (Quest Credit is self-cast) UPDATE `creature_template` SET `flags_extra`=`flags_extra`|2097152 WHERE (`entry` = 20132); diff --git a/data/sql/updates/pending_db_world/rev_1677805290069827400.sql b/data/sql/updates/db_world/2023_03_04_14.sql similarity index 89% rename from data/sql/updates/pending_db_world/rev_1677805290069827400.sql rename to data/sql/updates/db_world/2023_03_04_14.sql index 149581c47..10a015678 100644 --- a/data/sql/updates/pending_db_world/rev_1677805290069827400.sql +++ b/data/sql/updates/db_world/2023_03_04_14.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_13 -> 2023_03_04_14 -- In Shadow Labyrinth and Sethekk Halls, bosses should drop 2 Spirit Shards per kill UPDATE `creature_loot_template` SET `MinCount`=2, `MaxCount`=2 WHERE `Item`=28558 AND `Entry` IN (20636, 20637, 20653, 20657, 20690, 20706, 23035, 18732, 18473, 18667, 18708); -- Yor diff --git a/data/sql/updates/pending_db_world/rev_1677805981976626800.sql b/data/sql/updates/db_world/2023_03_04_15.sql similarity index 81% rename from data/sql/updates/pending_db_world/rev_1677805981976626800.sql rename to data/sql/updates/db_world/2023_03_04_15.sql index ccb03b6f3..e3871f52d 100644 --- a/data/sql/updates/pending_db_world/rev_1677805981976626800.sql +++ b/data/sql/updates/db_world/2023_03_04_15.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_14 -> 2023_03_04_15 -- Detected build: V3_4_0_46368 UPDATE `creature_template` SET `unit_flags` = 33554688 WHERE (`entry` = 18778); UPDATE `creature_template` SET `unit_flags` = 33555200 WHERE (`entry` = 18726); diff --git a/data/sql/updates/pending_db_world/rev_1677807108312300000.sql b/data/sql/updates/db_world/2023_03_04_16.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1677807108312300000.sql rename to data/sql/updates/db_world/2023_03_04_16.sql index 0ff6ee0be..a1f659de0 100644 --- a/data/sql/updates/pending_db_world/rev_1677807108312300000.sql +++ b/data/sql/updates/db_world/2023_03_04_16.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_04_15 -> 2023_03_04_16 -- DELETE FROM `reference_loot_template` WHERE `Entry` IN (24740, 24741) AND `Item` IN (27925,27946,27980,27981,27985,27986,27776,27838,27875,27936,27948); INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1677870148388497400.sql b/data/sql/updates/db_world/2023_03_04_17.sql similarity index 66% rename from data/sql/updates/pending_db_world/rev_1677870148388497400.sql rename to data/sql/updates/db_world/2023_03_04_17.sql index 5e6ffb6af..cddf77c93 100644 --- a/data/sql/updates/pending_db_world/rev_1677870148388497400.sql +++ b/data/sql/updates/db_world/2023_03_04_17.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_04_16 -> 2023_03_04_17 -- Franclorn Forgewright UPDATE `gossip_menu` SET `TextID` = 2319 WHERE `MenuID` = 1667; From 7d970d057c33242bbf3866926d8d9379b0aa6602 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 4 Mar 2023 20:32:37 -0300 Subject: [PATCH 047/159] chore: fix cherry-pick (MariaDB) (#15274) --- data/sql/updates/db_world/2023_03_04_01.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/sql/updates/db_world/2023_03_04_01.sql b/data/sql/updates/db_world/2023_03_04_01.sql index 14a7ccc44..acd83a94c 100644 --- a/data/sql/updates/db_world/2023_03_04_01.sql +++ b/data/sql/updates/db_world/2023_03_04_01.sql @@ -6,4 +6,4 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectMiscValueB_1` = 64 WHERE `ID` IN (34810, 34817, 34818, 34819); -UPDATE `creature_addon` SET `auras` = '34792 19818' WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 17976); +UPDATE `creature_addon` SET `auras` = '34792 19818' WHERE `guid` = 147001; From 81d831faaca78ac204ca56296cb132b513755826 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 4 Mar 2023 23:25:43 -0300 Subject: [PATCH 048/159] =?UTF-8?q?feat(Core/AI):=20Implement=20ScheduleHe?= =?UTF-8?q?althCheckEvent()=20for=20events=20that=20fire=20=E2=80=A6=20(#1?= =?UTF-8?q?5275)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 35 +++++++++++++++++++ .../game/AI/ScriptedAI/ScriptedCreature.h | 13 +++++++ .../botanica/boss_thorngrin_the_tender.cpp | 26 ++++---------- 3 files changed, 54 insertions(+), 20 deletions(-) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 638c67c3a..fa19acaeb 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -577,6 +577,7 @@ void BossAI::_Reset() events.Reset(); scheduler.CancelAll(); summons.DespawnAll(); + _healthCheckEvents.clear(); if (instance) instance->SetBossState(_bossId, NOT_STARTED); } @@ -586,6 +587,7 @@ void BossAI::_JustDied() events.Reset(); scheduler.CancelAll(); summons.DespawnAll(); + _healthCheckEvents.clear(); if (instance) { instance->SetBossState(_bossId, DONE); @@ -667,6 +669,39 @@ void BossAI::UpdateAI(uint32 diff) DoMeleeAttackIfReady(); } +void BossAI::DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damagetype*/, SpellSchoolMask /*damageSchoolMask*/) +{ + if (!_healthCheckEvents.empty()) + { + _healthCheckEvents.remove_if([&](HealthCheckEventData data) -> bool + { + return _ProccessHealthCheckEvent(data._healthPct, damage, data._exec); + }); + } +} + +/** + * @brief Executes a function once the creature reaches the defined health point percent. + * + * @param healthPct The health percent at which the code will be executed. + * @param exec The fuction to be executed. + */ +void BossAI::ScheduleHealthCheckEvent(uint32 healthPct, std::function exec) +{ + _healthCheckEvents.push_back(HealthCheckEventData(healthPct, exec)); +}; + +bool BossAI::_ProccessHealthCheckEvent(uint8 healthPct, uint32 damage, std::function exec) const +{ + if (me->HealthBelowPctDamaged(healthPct, damage)) + { + exec(); + return true; + } + + return false; +} + // WorldBossAI - for non-instanced bosses WorldBossAI::WorldBossAI(Creature* creature) : diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index f846a4367..4778c2215 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -430,6 +430,14 @@ private: bool _isHeroic; }; +struct HealthCheckEventData +{ + HealthCheckEventData(uint8 healthPct, std::function exec) : _healthPct(healthPct), _exec(exec) { }; + + uint8 _healthPct; + std::function _exec; +}; + class BossAI : public ScriptedAI { public: @@ -440,12 +448,15 @@ public: bool CanRespawn() override; + void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask) override; void JustSummoned(Creature* summon) override; void SummonedCreatureDespawn(Creature* summon) override; void SummonedCreatureDespawnAll() override; void UpdateAI(uint32 diff) override; + void ScheduleHealthCheckEvent(uint32 healthPct, std::function exec); + // Hook used to execute events scheduled into EventMap without the need // to override UpdateAI // note: You must re-schedule the event within this method if the event @@ -464,6 +475,7 @@ protected: void _JustEngagedWith(); void _JustDied(); void _JustReachedHome() { me->setActive(false); } + [[nodiscard]] bool _ProccessHealthCheckEvent(uint8 healthPct, uint32 damage, std::function exec) const; void TeleportCheaters(); @@ -473,6 +485,7 @@ protected: private: uint32 const _bossId; + std::list _healthCheckEvents; }; class WorldBossAI : public ScriptedAI diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp index dee13b043..8a4551bf4 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp @@ -44,8 +44,6 @@ enum Events EVENT_SACRIFICE = 1, EVENT_HELLFIRE = 2, EVENT_ENRAGE = 3, - EVENT_HEALTH_CHECK_50 = 4, - EVENT_HEALTH_CHECK_20 = 5 }; class boss_thorngrin_the_tender : public CreatureScript @@ -64,6 +62,12 @@ public: void Reset() override { _Reset(); + ScheduleHealthCheckEvent(20, [&]() { + Talk(SAY_20_PERCENT_HP); + }); + ScheduleHealthCheckEvent(50, [&]() { + Talk(SAY_50_PERCENT_HP); + }); } void MoveInLineOfSight(Unit* who) override @@ -83,8 +87,6 @@ public: events.ScheduleEvent(EVENT_SACRIFICE, 6000); events.ScheduleEvent(EVENT_HELLFIRE, 18000); events.ScheduleEvent(EVENT_ENRAGE, 15000); - events.ScheduleEvent(EVENT_HEALTH_CHECK_50, 500); - events.ScheduleEvent(EVENT_HEALTH_CHECK_20, 500); } void KilledUnit(Unit* victim) override @@ -129,22 +131,6 @@ public: me->CastSpell(me, SPELL_ENRAGE, false); events.ScheduleEvent(EVENT_ENRAGE, 30000); break; - case EVENT_HEALTH_CHECK_50: - if (me->HealthBelowPct(50)) - { - Talk(SAY_50_PERCENT_HP); - break; - } - events.ScheduleEvent(EVENT_HEALTH_CHECK_50, 500); - break; - case EVENT_HEALTH_CHECK_20: - if (me->HealthBelowPct(20)) - { - Talk(SAY_20_PERCENT_HP); - break; - } - events.ScheduleEvent(EVENT_HEALTH_CHECK_20, 500); - break; } DoMeleeAttackIfReady(); From 0b308b1a7f5f2e68e44214a9a73ce58a5e03ab3f Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 5 Mar 2023 00:42:44 -0300 Subject: [PATCH 049/159] refactor(Scripts/TheBotanica): Modernize Thorngrin the Tender's script (#15277) --- .../rev_1677984661498248100.sql | 2 + .../botanica/boss_thorngrin_the_tender.cpp | 148 +++++++----------- 2 files changed, 61 insertions(+), 89 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1677984661498248100.sql diff --git a/data/sql/updates/pending_db_world/rev_1677984661498248100.sql b/data/sql/updates/pending_db_world/rev_1677984661498248100.sql new file mode 100644 index 000000000..3f1a9fc45 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677984661498248100.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `ScriptName` = 'boss_thorngrin_the_tender' WHERE `entry` = 17978; diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp index 8a4551bf4..d000f30d0 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp @@ -39,114 +39,84 @@ enum Spells SPELL_ENRAGE = 34670 }; -enum Events +struct boss_thorngrin_the_tender : public BossAI { - EVENT_SACRIFICE = 1, - EVENT_HELLFIRE = 2, - EVENT_ENRAGE = 3, -}; - -class boss_thorngrin_the_tender : public CreatureScript -{ -public: - boss_thorngrin_the_tender() : CreatureScript("thorngrin_the_tender") { } - - struct boss_thorngrin_the_tenderAI : public BossAI + boss_thorngrin_the_tender(Creature* creature) : BossAI(creature, DATA_THORNGRIN_THE_TENDER) { - boss_thorngrin_the_tenderAI(Creature* creature) : BossAI(creature, DATA_THORNGRIN_THE_TENDER) + me->m_SightDistance = 100.0f; + _intro = false; + scheduler.SetValidator([this] { - me->m_SightDistance = 100.0f; - _intro = false; - } + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } - void Reset() override - { - _Reset(); - ScheduleHealthCheckEvent(20, [&]() { - Talk(SAY_20_PERCENT_HP); - }); - ScheduleHealthCheckEvent(50, [&]() { - Talk(SAY_50_PERCENT_HP); - }); - } + void Reset() override + { + _Reset(); + ScheduleHealthCheckEvent(20, [&]() { + Talk(SAY_20_PERCENT_HP); + }); + ScheduleHealthCheckEvent(50, [&]() { + Talk(SAY_50_PERCENT_HP); + }); + } - void MoveInLineOfSight(Unit* who) override + void MoveInLineOfSight(Unit* who) override + { + if (!_intro && who->IsPlayer()) { - if (!_intro && who->GetTypeId() == TYPEID_PLAYER) + _intro = true; + Talk(SAY_INTRO); + } + BossAI::MoveInLineOfSight(who); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + Talk(SAY_AGGRO); + + scheduler.Schedule(6s, [this](TaskContext context) + { + if (DoCastRandomTarget(SPELL_SACRIFICE, 1) == SPELL_CAST_OK) { - _intro = true; - Talk(SAY_INTRO); + Talk(SAY_CAST_SACRIFICE); } - BossAI::MoveInLineOfSight(who); - } - - void JustEngagedWith(Unit* /*who*/) override + context.Repeat(30s); + }).Schedule(18s, [this](TaskContext context) { - _JustEngagedWith(); - Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SACRIFICE, 6000); - events.ScheduleEvent(EVENT_HELLFIRE, 18000); - events.ScheduleEvent(EVENT_ENRAGE, 15000); - } - - void KilledUnit(Unit* victim) override + if (roll_chance_i(50)) + Talk(SAY_CAST_HELLFIRE); + DoCastAOE(SPELL_HELLFIRE); + context.Repeat(22s); + }).Schedule(15s, [this](TaskContext context) { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_KILL); - } + Talk(EMOTE_ENRAGE); + DoCastSelf(SPELL_ENRAGE); + context.Repeat(30s); + }); + } - void JustDied(Unit* /*killer*/) override + void KilledUnit(Unit* victim) override + { + if (victim->IsPlayer()) { - _JustDied(); - Talk(SAY_DEATH); + Talk(SAY_KILL); } + } - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SACRIFICE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true)) - { - Talk(SAY_CAST_SACRIFICE); - me->CastSpell(target, SPELL_SACRIFICE, false); - } - events.ScheduleEvent(EVENT_SACRIFICE, 30000); - break; - case EVENT_HELLFIRE: - if (roll_chance_i(50)) - Talk(SAY_CAST_HELLFIRE); - me->CastSpell(me, SPELL_HELLFIRE, false); - events.ScheduleEvent(EVENT_HELLFIRE, 22000); - break; - case EVENT_ENRAGE: - Talk(EMOTE_ENRAGE); - me->CastSpell(me, SPELL_ENRAGE, false); - events.ScheduleEvent(EVENT_ENRAGE, 30000); - break; - } - - DoMeleeAttackIfReady(); - } + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_DEATH); + } private: bool _intro; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetTheBotanicaAI(creature); - } }; void AddSC_boss_thorngrin_the_tender() { - new boss_thorngrin_the_tender(); + RegisterTheBotanicaCreatureAI(boss_thorngrin_the_tender); } From 5d55449b891cb07e91437be869b237faed17edb5 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 5 Mar 2023 03:45:12 +0000 Subject: [PATCH 050/159] chore(DB): import pending files Referenced commit(s): 0b308b1a7f5f2e68e44214a9a73ce58a5e03ab3f --- .../rev_1677984661498248100.sql => db_world/2023_03_05_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1677984661498248100.sql => db_world/2023_03_05_00.sql} (69%) diff --git a/data/sql/updates/pending_db_world/rev_1677984661498248100.sql b/data/sql/updates/db_world/2023_03_05_00.sql similarity index 69% rename from data/sql/updates/pending_db_world/rev_1677984661498248100.sql rename to data/sql/updates/db_world/2023_03_05_00.sql index 3f1a9fc45..2416e77dd 100644 --- a/data/sql/updates/pending_db_world/rev_1677984661498248100.sql +++ b/data/sql/updates/db_world/2023_03_05_00.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_04_17 -> 2023_03_05_00 -- UPDATE `creature_template` SET `ScriptName` = 'boss_thorngrin_the_tender' WHERE `entry` = 17978; From a5b4aecd52ddd7e478b14dfc31f9f701fa8e192b Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 5 Mar 2023 11:14:46 -0300 Subject: [PATCH 051/159] fix(Scripts/TheBotanica): Rework Laj (#15279) --- src/common/Utilities/Containers.h | 15 ++ src/server/game/Entities/Creature/Creature.h | 6 + .../Outland/TempestKeep/botanica/boss_laj.cpp | 157 ++++++++---------- 3 files changed, 88 insertions(+), 90 deletions(-) diff --git a/src/common/Utilities/Containers.h b/src/common/Utilities/Containers.h index 84947d671..c77a48be7 100644 --- a/src/common/Utilities/Containers.h +++ b/src/common/Utilities/Containers.h @@ -139,6 +139,21 @@ namespace Acore::Containers return *it; } + /* + * Select a random element from a container. + * + * Note: container cannot be empty + */ + template + inline auto SelectRandomContainerElementIf(C const& container, Predicate&& predicate) -> typename std::add_const::type& + { + C containerCopy; + std::copy_if(std::begin(container), std::end(container), std::inserter(containerCopy, std::end(containerCopy)), predicate); + auto it = std::begin(containerCopy); + std::advance(it, urand(0, uint32(std::size(containerCopy)) - 1)); + return *it; + } + /* * Select a random element from a container where each element has a different chance to be selected. * diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index ef2033317..903ae7099 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -392,6 +392,12 @@ public: void ModifyThreatPercentTemp(Unit* victim, int32 percent, Milliseconds duration); + /** + * @brief Helper to resume chasing current victim. + * + * */ + void ResumeChasingVictim() { GetMotionMaster()->MoveChase(GetVictim()); }; + std::string GetDebugInfo() const override; protected: diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp index b9399aff0..5e15308d4 100644 --- a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp +++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp @@ -48,109 +48,86 @@ enum Misc MODEL_FIRE = 13110, MODEL_FROST = 14112, MODEL_NATURE = 14214, - - EVENT_ALERGIC_REACTION = 1, - EVENT_TRANSFORM = 2, - EVENT_TELEPORT = 3, - EVENT_SUMMON = 4 }; -class boss_laj : public CreatureScript +struct LajTransformData { -public: - boss_laj() : CreatureScript("boss_laj") { } + uint32 spellId; + uint32 modelId; +}; - struct boss_lajAI : public BossAI +LajTransformData const LajTransform[5] = +{ + { SPELL_DAMAGE_IMMUNE_SHADOW, MODEL_DEFAULT }, + { SPELL_DAMAGE_IMMUNE_ARCANE, MODEL_ARCANE }, + { SPELL_DAMAGE_IMMUNE_FIRE, MODEL_FIRE }, + { SPELL_DAMAGE_IMMUNE_FROST, MODEL_FROST }, + { SPELL_DAMAGE_IMMUNE_NATURE, MODEL_NATURE } +}; + +struct boss_laj : public BossAI +{ + boss_laj(Creature* creature) : BossAI(creature, DATA_LAJ) { } + + void Reset() override { - boss_lajAI(Creature* creature) : BossAI(creature, DATA_LAJ) { } + _Reset(); + me->SetDisplayId(MODEL_DEFAULT); + _lastTransform = LajTransform[0]; + DoCastSelf(SPELL_DAMAGE_IMMUNE_SHADOW, true); - void Reset() override + if (_transformContainer.empty()) { - _Reset(); - me->SetDisplayId(MODEL_DEFAULT); - _lastTransform = SPELL_DAMAGE_IMMUNE_SHADOW; - me->CastSpell(me, SPELL_DAMAGE_IMMUNE_SHADOW, true); - } - - void DoTransform() - { - me->RemoveAurasDueToSpell(_lastTransform); - - switch (_lastTransform = RAND(SPELL_DAMAGE_IMMUNE_SHADOW, SPELL_DAMAGE_IMMUNE_FIRE, SPELL_DAMAGE_IMMUNE_FROST, SPELL_DAMAGE_IMMUNE_NATURE, SPELL_DAMAGE_IMMUNE_ARCANE)) + for (auto const& val : LajTransform) { - case SPELL_DAMAGE_IMMUNE_SHADOW: - me->SetDisplayId(MODEL_DEFAULT); - break; - case SPELL_DAMAGE_IMMUNE_ARCANE: - me->SetDisplayId(MODEL_ARCANE); - break; - case SPELL_DAMAGE_IMMUNE_FIRE: - me->SetDisplayId(MODEL_FIRE); - break; - case SPELL_DAMAGE_IMMUNE_FROST: - me->SetDisplayId(MODEL_FROST); - break; - case SPELL_DAMAGE_IMMUNE_NATURE: - me->SetDisplayId(MODEL_NATURE); - break; + _transformContainer.push_back(val); } - - me->CastSpell(me, _lastTransform, true); } - - void JustEngagedWith(Unit* /*who*/) override - { - _JustEngagedWith(); - - events.ScheduleEvent(EVENT_ALERGIC_REACTION, 5000); - events.ScheduleEvent(EVENT_TRANSFORM, 30000); - events.ScheduleEvent(EVENT_TELEPORT, 20000); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_ALERGIC_REACTION: - me->CastSpell(me->GetVictim(), SPELL_ALLERGIC_REACTION, false); - events.ScheduleEvent(EVENT_ALERGIC_REACTION, 25000); - break; - case EVENT_TELEPORT: - me->CastSpell(me, SPELL_TELEPORT_SELF, false); - events.ScheduleEvent(EVENT_SUMMON, 2500); - events.ScheduleEvent(EVENT_TELEPORT, 30000); - break; - case EVENT_SUMMON: - Talk(EMOTE_SUMMON); - me->CastSpell(me, SPELL_SUMMON_LASHER_1, true); - me->CastSpell(me, SPELL_SUMMON_FLAYER_1, true); - break; - case EVENT_TRANSFORM: - DoTransform(); - events.ScheduleEvent(EVENT_TRANSFORM, 35000); - break; - } - - DoMeleeAttackIfReady(); - } - private: - uint32 _lastTransform; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetTheBotanicaAI(creature); } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + + scheduler.Schedule(5s, [this](TaskContext context) + { + DoCastVictim(SPELL_ALLERGIC_REACTION); + context.Repeat(25s); + }).Schedule(30s, [this](TaskContext context) + { + me->RemoveAurasDueToSpell(_lastTransform.spellId); + _lastTransform = Acore::Containers::SelectRandomContainerElementIf(_transformContainer, [&](LajTransformData data) -> bool + { + return data.spellId != _lastTransform.spellId; + }); + me->SetDisplayId(_lastTransform.modelId); + DoCastSelf(_lastTransform.spellId, true); + context.Repeat(35s); + }).Schedule(20s, [this](TaskContext context) + { + DoCastSelf(SPELL_TELEPORT_SELF); + me->SetReactState(REACT_PASSIVE); + me->GetMotionMaster()->Clear(); + + scheduler.Schedule(2500ms, [this](TaskContext) + { + Talk(EMOTE_SUMMON); + DoCastAOE(SPELL_SUMMON_LASHER_1, true); + DoCastAOE(SPELL_SUMMON_FLAYER_1, true); + me->SetReactState(REACT_AGGRESSIVE); + me->ResumeChasingVictim(); + }); + + context.Repeat(30s); + }); + } + +private: + LajTransformData _lastTransform; + std::vector _transformContainer; }; void AddSC_boss_laj() { - new boss_laj(); + RegisterTheBotanicaCreatureAI(boss_laj); } From 034b5215013600e644bd346c5273bd2ea65c2000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefano=20Borz=C3=AC?= Date: Sun, 5 Mar 2023 18:47:18 +0100 Subject: [PATCH 052/159] feat(CI): add cppcheck (#15211) Co-authored-by: Skjalf <47818697+Nyeriah@users.noreply.github.com> --- .github/workflows/cpp-check.yml | 36 +++++++++++++++++++ .../Collision/BoundingIntervalHierarchy.cpp | 1 + .../Collision/BoundingIntervalHierarchy.h | 14 ++++---- src/common/Platform/ServiceWin32.cpp | 1 + src/server/database/Database/Transaction.cpp | 4 +-- .../game/Autobroadcast/AutobroadcastMgr.cpp | 4 +-- .../game/Autobroadcast/AutobroadcastMgr.h | 4 +-- .../game/Battlegrounds/BattlegroundQueue.cpp | 8 ++--- .../game/Entities/Player/PlayerQuest.cpp | 1 + src/server/game/Loot/LootMgr.cpp | 1 + .../BlackrockDepths/blackrock_depths.cpp | 4 +-- .../EasternKingdoms/zone_hinterlands.cpp | 14 ++++---- .../EasternKingdoms/zone_undercity.cpp | 11 +++--- src/server/scripts/Kalimdor/zone_silithus.cpp | 2 +- .../boss_professor_putricide.cpp | 9 +++-- .../Outland/zone_shadowmoon_valley.cpp | 4 +-- .../shared/DataStores/DBCDatabaseLoader.cpp | 3 ++ src/tools/map_extractor/System.cpp | 1 + src/tools/map_extractor/dbcfile.h | 5 +-- src/tools/map_extractor/loadlib/loadlib.h | 1 + src/tools/map_extractor/mpq_libmpq04.h | 2 ++ src/tools/mmaps_generator/MapBuilder.cpp | 2 +- 22 files changed, 91 insertions(+), 41 deletions(-) create mode 100644 .github/workflows/cpp-check.yml diff --git a/.github/workflows/cpp-check.yml b/.github/workflows/cpp-check.yml new file mode 100644 index 000000000..d5c95a313 --- /dev/null +++ b/.github/workflows/cpp-check.yml @@ -0,0 +1,36 @@ +name: cpp-check +on: + push: + branches: + - "master" + paths: + - src/** + - "!README.md" + - "!docs/**" + pull_request: + paths: + - src/** + - "!README.md" + - "!docs/**" + +jobs: + cpp-check: + strategy: + fail-fast: false + runs-on: ubuntu-22.04 + name: cpp check + steps: + - uses: actions/checkout@v2 + - name: cpp check + run: | + sudo apt update -y + sudo apt install -y cppcheck + cppcheck --force --inline-suppr \ + -i src/server/game/Achievements/AchievementMgr.cpp \ + -i src/server/game/AuctionHouse/AuctionHouseMgr.cpp \ + -i src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp \ + -i src/server/game/DungeonFinding/LFGMgr.cpp \ + -i src/server/game/Entities/GameObject/GameObject.cpp \ + -i src/server/game/Entities/Pet/Pet.cpp \ + -i src/server/game/Entities/Player/Player.cpp \ + src/ diff --git a/src/common/Collision/BoundingIntervalHierarchy.cpp b/src/common/Collision/BoundingIntervalHierarchy.cpp index e76e9ca1e..7e44771e8 100644 --- a/src/common/Collision/BoundingIntervalHierarchy.cpp +++ b/src/common/Collision/BoundingIntervalHierarchy.cpp @@ -26,6 +26,7 @@ void BIH::buildHierarchy(std::vector& tempTree, buildData& dat, BuildStats& stats) { // create space for the first node + // cppcheck-suppress integerOverflow tempTree.push_back(uint32(3 << 30)); // dummy leaf tempTree.insert(tempTree.end(), 2, 0); //tempTree.add(0); diff --git a/src/common/Collision/BoundingIntervalHierarchy.h b/src/common/Collision/BoundingIntervalHierarchy.h index ce2a93d6d..d626bc86f 100644 --- a/src/common/Collision/BoundingIntervalHierarchy.h +++ b/src/common/Collision/BoundingIntervalHierarchy.h @@ -187,9 +187,9 @@ public: while (true) { uint32 tn = tree[node]; - uint32 axis = (tn & (3 << 30)) >> 30; - bool BVH2 = tn & (1 << 29); - int offset = tn & ~(7 << 29); + uint32 axis = (tn & (3 << 30)) >> 30; // cppcheck-suppress integerOverflow + bool BVH2 = tn & (1 << 29); // cppcheck-suppress integerOverflow + int offset = tn & ~(7 << 29); // cppcheck-suppress integerOverflow if (!BVH2) { if (axis < 3) @@ -297,9 +297,9 @@ public: while (true) { uint32 tn = tree[node]; - uint32 axis = (tn & (3 << 30)) >> 30; - bool BVH2 = tn & (1 << 29); - int offset = tn & ~(7 << 29); + uint32 axis = (tn & (3 << 30)) >> 30; // cppcheck-suppress integerOverflow + bool BVH2 = tn & (1 << 29); // cppcheck-suppress integerOverflow + int offset = tn & ~(7 << 29); // cppcheck-suppress integerOverflow if (!BVH2) { if (axis < 3) @@ -425,7 +425,7 @@ protected: void createNode(std::vector& tempTree, int nodeIndex, uint32 left, uint32 right) const { // write leaf node - tempTree[nodeIndex + 0] = (3 << 30) | left; + tempTree[nodeIndex + 0] = (3 << 30) | left; // cppcheck-suppress integerOverflow tempTree[nodeIndex + 1] = right - left + 1; } diff --git a/src/common/Platform/ServiceWin32.cpp b/src/common/Platform/ServiceWin32.cpp index 9d9540aba..7ff540ba8 100644 --- a/src/common/Platform/ServiceWin32.cpp +++ b/src/common/Platform/ServiceWin32.cpp @@ -42,6 +42,7 @@ SERVICE_STATUS serviceStatus; SERVICE_STATUS_HANDLE serviceStatusHandle = 0; +// cppcheck-suppress syntaxError typedef WINADVAPI BOOL (WINAPI* CSD_T)(SC_HANDLE, DWORD, LPCVOID); bool WinServiceInstall() diff --git a/src/server/database/Database/Transaction.cpp b/src/server/database/Database/Transaction.cpp index 38f2ab051..d5cf4fceb 100644 --- a/src/server/database/Database/Transaction.cpp +++ b/src/server/database/Database/Transaction.cpp @@ -110,7 +110,7 @@ bool TransactionTask::Execute() // Make sure only 1 async thread retries a transaction so they don't keep dead-locking each other std::lock_guard lock(_deadlockLock); - for (Milliseconds loopDuration = 0s, startMSTime = GetTimeMS(); loopDuration <= DEADLOCK_MAX_RETRY_TIME_MS; loopDuration = GetMSTimeDiffToNow(startMSTime)) + for (Milliseconds loopDuration{}, startMSTime = GetTimeMS(); loopDuration <= DEADLOCK_MAX_RETRY_TIME_MS; loopDuration = GetMSTimeDiffToNow(startMSTime)) { if (!TryExecute()) return true; @@ -157,7 +157,7 @@ bool TransactionWithResultTask::Execute() // Make sure only 1 async thread retries a transaction so they don't keep dead-locking each other std::lock_guard lock(_deadlockLock); - for (Milliseconds loopDuration = 0s, startMSTime = GetTimeMS(); loopDuration <= DEADLOCK_MAX_RETRY_TIME_MS; loopDuration = GetMSTimeDiffToNow(startMSTime)) + for (Milliseconds loopDuration{}, startMSTime = GetTimeMS(); loopDuration <= DEADLOCK_MAX_RETRY_TIME_MS; loopDuration = GetMSTimeDiffToNow(startMSTime)) { if (!TryExecute()) { diff --git a/src/server/game/Autobroadcast/AutobroadcastMgr.cpp b/src/server/game/Autobroadcast/AutobroadcastMgr.cpp index 1ed046685..846f8cb54 100644 --- a/src/server/game/Autobroadcast/AutobroadcastMgr.cpp +++ b/src/server/game/Autobroadcast/AutobroadcastMgr.cpp @@ -129,12 +129,12 @@ void AutobroadcastMgr::SendAutobroadcasts() LOG_DEBUG("autobroadcast", "AutobroadcastMgr::SendAutobroadcasts: '{}'", msg); } -void AutobroadcastMgr::SendWorldAnnouncement(std::string_view msg) +void AutobroadcastMgr::SendWorldAnnouncement(std::string msg) { sWorld->SendWorldTextOptional(LANG_AUTO_BROADCAST, ANNOUNCER_FLAG_DISABLE_AUTOBROADCAST, msg.data()); } -void AutobroadcastMgr::SendNotificationAnnouncement(std::string_view msg) +void AutobroadcastMgr::SendNotificationAnnouncement(std::string msg) { WorldPacket data(SMSG_NOTIFICATION, (msg.size() + 1)); data << msg.data(); diff --git a/src/server/game/Autobroadcast/AutobroadcastMgr.h b/src/server/game/Autobroadcast/AutobroadcastMgr.h index 2a45d48dd..3f4066e91 100644 --- a/src/server/game/Autobroadcast/AutobroadcastMgr.h +++ b/src/server/game/Autobroadcast/AutobroadcastMgr.h @@ -37,8 +37,8 @@ public: void SendAutobroadcasts(); private: - void SendWorldAnnouncement(std::string_view msg); - void SendNotificationAnnouncement(std::string_view msg); + void SendWorldAnnouncement(std::string msg); + void SendNotificationAnnouncement(std::string msg); typedef std::map AutobroadcastsMap; typedef std::map AutobroadcastsWeightMap; diff --git a/src/server/game/Battlegrounds/BattlegroundQueue.cpp b/src/server/game/Battlegrounds/BattlegroundQueue.cpp index ebb4ad8ec..dc326d784 100644 --- a/src/server/game/Battlegrounds/BattlegroundQueue.cpp +++ b/src/server/game/Battlegrounds/BattlegroundQueue.cpp @@ -895,8 +895,8 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId { if (!(*itr3)->IsInvitedToBGInstanceGUID && (((*itr3)->ArenaMatchmakerRating >= arenaMinRating && (*itr3)->ArenaMatchmakerRating <= arenaMaxRating) || (int32)(*itr3)->JoinTime < discardTime) - && ((*itr_teams[0])->ArenaTeamId != (*itr3)->PreviousOpponentsTeamId || ((int32)(*itr3)->JoinTime < discardOpponentsTime)) - && (*itr_teams[0])->ArenaTeamId != (*itr3)->ArenaTeamId) + && ((*(itr_teams[0]))->ArenaTeamId != (*itr3)->PreviousOpponentsTeamId || ((int32)(*itr3)->JoinTime < discardOpponentsTime)) + && (*(itr_teams[0]))->ArenaTeamId != (*itr3)->ArenaTeamId) { itr_teams[found++] = itr3; break; @@ -907,8 +907,8 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId //if we have 2 teams, then start new arena and invite players! if (found == 2) { - GroupQueueInfo* aTeam = *itr_teams[TEAM_ALLIANCE]; - GroupQueueInfo* hTeam = *itr_teams[TEAM_HORDE]; + GroupQueueInfo* aTeam = *(itr_teams[TEAM_ALLIANCE]); + GroupQueueInfo* hTeam = *(itr_teams[TEAM_HORDE]); Battleground* arena = sBattlegroundMgr->CreateNewBattleground(bgTypeId, bracketEntry, arenaType, true); if (!arena) diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index 83adc2eeb..a7793122e 100644 --- a/src/server/game/Entities/Player/PlayerQuest.cpp +++ b/src/server/game/Entities/Player/PlayerQuest.cpp @@ -1310,6 +1310,7 @@ bool Player::SatisfyQuestSeasonal(Quest const* qInfo, bool /*msg*/) const if (!qInfo->IsSeasonal() || m_seasonalquests.empty()) return true; + // cppcheck-suppress mismatchingContainers Player::SeasonalEventQuestMap::iterator itr = ((Player*)this)->m_seasonalquests.find(qInfo->GetEventIdForQuest()); if (itr == m_seasonalquests.end() || itr->second.empty()) diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index 7b76b47bb..7d64fed6e 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -190,6 +190,7 @@ uint32 LootStore::LoadLootTable() // Looking for the template of the entry // often entries are put together + // cppcheck-suppress eraseDereference if (m_LootTemplates.empty() || tab->first != entry) { // Searching the template (in case template Id changed) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index 585756c01..f35fa073c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -121,13 +121,13 @@ public: }; }; -struct Wave +struct WaveCreature { uint32 entry; uint32 amount; }; -static Wave RingMobs[] = // different amounts based on the type +static WaveCreature RingMobs[] = // different amounts based on the type { {NPC_DREDGE_WORM, 3}, {NPC_DEEP_STINGER, 3}, diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp index 886f89d48..6ea8a812d 100644 --- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp @@ -49,18 +49,18 @@ enum Rinji GO_RINJI_CAGE = 142036 }; -struct Location +struct LocationXYZ { - float posX, posY, posZ; + float x, y, z; }; -Location AmbushSpawn[] = +LocationXYZ AmbushSpawn[] = { { 191.296204f, -2839.329346f, 107.388f }, { 70.972466f, -2848.674805f, 109.459f } }; -Location AmbushMoveTo[] = +LocationXYZ AmbushMoveTo[] = { { 166.630386f, -2824.780273f, 108.153f }, { 70.886589f, -2874.335449f, 116.675f } @@ -118,12 +118,12 @@ public: if (!_first) spawnId = 1; - me->SummonCreature(NPC_RANGER, AmbushSpawn[spawnId].posX, AmbushSpawn[spawnId].posY, AmbushSpawn[spawnId].posZ, 0.0f, + me->SummonCreature(NPC_RANGER, AmbushSpawn[spawnId].x, AmbushSpawn[spawnId].y, AmbushSpawn[spawnId].z, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); for (int i = 0; i < 2; ++i) { - me->SummonCreature(NPC_OUTRUNNER, AmbushSpawn[spawnId].posX, AmbushSpawn[spawnId].posY, AmbushSpawn[spawnId].posZ, 0.0f, + me->SummonCreature(NPC_OUTRUNNER, AmbushSpawn[spawnId].x, AmbushSpawn[spawnId].y, AmbushSpawn[spawnId].z, 0.0f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); } } @@ -131,7 +131,7 @@ public: void JustSummoned(Creature* summoned) override { summoned->SetWalk(false); - summoned->GetMotionMaster()->MovePoint(0, AmbushMoveTo[spawnId].posX, AmbushMoveTo[spawnId].posY, AmbushMoveTo[spawnId].posZ); + summoned->GetMotionMaster()->MovePoint(0, AmbushMoveTo[spawnId].x, AmbushMoveTo[spawnId].y, AmbushMoveTo[spawnId].z); } void sQuestAccept(Player* player, Quest const* quest) override diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index 3a753350e..27cc04c2b 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -748,12 +748,11 @@ enum Worldstates WORLD_STATE_FAIL_H = 3878 }; -struct Location -{ +struct LocationXYZO { float x, y, z, o; }; -static Location AllianceSpawn[] = +static LocationXYZO AllianceSpawn[] = { { 1603.97f, 718.02f, 65.10f, 0 }, // guardian // sewers { 1604.78f, 657.22f, 40.80f, 0 }, // wave 1 @@ -788,7 +787,7 @@ static Location AllianceSpawn[] = { 1307.92f, 395.53f, -63.24f, 4.472f }, }; -static Location AllianceWP[] = +static LocationXYZO AllianceWP[] = { { 1737.06f, 734.176f, 48.8f, 0 }, // Jaina sewers UNUSED { 1682.92f, 730.89f, 76.84f, 0 }, // UNUSED @@ -802,12 +801,12 @@ static Location AllianceWP[] = { 1300.75f, 347.39f, -65.02f, 0 }, // jaina throne room }; -static Location HordeSpawn[] = +static LocationXYZO HordeSpawn[] = { { 1581.94f, 383.22f, -62.22f, 0 } // Khanok }; -static Location ThrallSpawn[] = +static LocationXYZO ThrallSpawn[] = { // Vortex { 1880.0001f, 237.8242f, 59.472f, 3.060f }, diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp index 03ef895d4..9507c0a88 100644 --- a/src/server/scripts/Kalimdor/zone_silithus.cpp +++ b/src/server/scripts/Kalimdor/zone_silithus.cpp @@ -1078,7 +1078,7 @@ public: bool GossipSelect(Player* player, uint32 sender, uint32 action) override { - Seconds respawnTimer = 0s; + Seconds respawnTimer{}; player->PlayerTalkClass->SendCloseGossip(); Creature* lastSpawn = ObjectAccessor::GetCreature(*me, _creatureGuid); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index f910ded64..a6c9358b0 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -1008,9 +1008,12 @@ public: break; } - if (Aura* aura = target->GetAura(uint32(GetSpellInfo()->Effects[stage].CalcValue()))) - if (aura->GetOwner() == target) // avoid assert(false) at any cost - aura->UpdateOwner(5000, target); // update whole aura so previous periodic ticks before refreshed by new one + if (target) + { + if (Aura* aura = target->GetAura(uint32(GetSpellInfo()->Effects[stage].CalcValue()))) + if (aura->GetOwner() == target) // avoid assert(false) at any cost + aura->UpdateOwner(5000, target); // update whole aura so previous periodic ticks before refreshed by new one + } GetCaster()->CastSpell(target, uint32(GetSpellInfo()->Effects[stage].CalcValue()), true, nullptr, nullptr, GetCaster()->GetGUID()); } diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 6e4c6354d..c8e7fe7b0 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -870,13 +870,13 @@ static Location SpawnLocation[] = {-4627.1240f, 1378.8752f, 139.9f, 2.544f} //Torloth The Magnificent }; -struct WaveData +struct WaveDataCreature { uint8 SpawnCount, UsedSpawnPoint; uint32 CreatureId, SpawnTimer, YellTimer; }; -static WaveData WavesInfo[] = +static WaveDataCreature WavesInfo[] = { {9, 0, 22075, 10000, 7000}, //Illidari Soldier {2, 9, 22074, 10000, 7000}, //Illidari Mind Breaker diff --git a/src/server/shared/DataStores/DBCDatabaseLoader.cpp b/src/server/shared/DataStores/DBCDatabaseLoader.cpp index 05fb5e1c2..e24fea285 100644 --- a/src/server/shared/DataStores/DBCDatabaseLoader.cpp +++ b/src/server/shared/DataStores/DBCDatabaseLoader.cpp @@ -122,7 +122,10 @@ char* DBCDatabaseLoader::Load(uint32& records, char**& indexTable) // insert new records to index table for (uint32 i = 0; i < newRecords; ++i) + { + // cppcheck-suppress autoVariables indexTable[newIndexes[i]] = &dataTable[i * _recordSize]; + } records = indexTableSize; diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index 6e62cfa15..34f4a2f57 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -57,6 +57,7 @@ #endif extern ArchiveSet gOpenArchives; +// cppcheck-suppress ctuOneDefinitionRuleViolation typedef struct { char name[64]; diff --git a/src/tools/map_extractor/dbcfile.h b/src/tools/map_extractor/dbcfile.h index 364712953..6b8ed5086 100644 --- a/src/tools/map_extractor/dbcfile.h +++ b/src/tools/map_extractor/dbcfile.h @@ -21,6 +21,7 @@ #include #include +// cppcheck-suppress ctuOneDefinitionRuleViolation class DBCFile { public: @@ -48,8 +49,8 @@ public: { } }; // Iteration over database - class Iterator; - class Record + class Iterator; // cppcheck-suppress ctuOneDefinitionRuleViolation + class Record // cppcheck-suppress ctuOneDefinitionRuleViolation { public: [[nodiscard]] float getFloat(size_t field) const diff --git a/src/tools/map_extractor/loadlib/loadlib.h b/src/tools/map_extractor/loadlib/loadlib.h index f8259d9ac..68fd5ea00 100644 --- a/src/tools/map_extractor/loadlib/loadlib.h +++ b/src/tools/map_extractor/loadlib/loadlib.h @@ -32,6 +32,7 @@ union u_map_fcc // // File version chunk // +// cppcheck-suppress ctuOneDefinitionRuleViolation struct file_MVER { union diff --git a/src/tools/map_extractor/mpq_libmpq04.h b/src/tools/map_extractor/mpq_libmpq04.h index ff9b74d05..049cd7987 100644 --- a/src/tools/map_extractor/mpq_libmpq04.h +++ b/src/tools/map_extractor/mpq_libmpq04.h @@ -28,6 +28,7 @@ using namespace std; +// cppcheck-suppress ctuOneDefinitionRuleViolation class MPQArchive { public: @@ -69,6 +70,7 @@ public: }; typedef std::deque ArchiveSet; +// cppcheck-suppress ctuOneDefinitionRuleViolation class MPQFile { //MPQHANDLE handle; diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index d991a4d26..e83daf1fe 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -340,7 +340,7 @@ namespace MMAP { fclose(file); delete[] verts; - delete[] inds; + delete[] inds; // cppcheck-suppress uninitdata return; } From 0b04c7f3b6070f08b7314fa57c27f644819f939d Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 5 Mar 2023 16:29:41 -0300 Subject: [PATCH 053/159] fix(Core/Spells): Un-hack Spellcloth trigger spell (#15284) Co-authored-by: Skjalf <47818697+Nyeriah@users.noreply.github.com> --- .../updates/pending_db_world/rev_1678037942434622700.sql | 2 ++ src/server/game/Spells/Auras/SpellAuraEffects.cpp | 7 ------- 2 files changed, 2 insertions(+), 7 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1678037942434622700.sql diff --git a/data/sql/updates/pending_db_world/rev_1678037942434622700.sql b/data/sql/updates/pending_db_world/rev_1678037942434622700.sql new file mode 100644 index 000000000..530c6c280 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678037942434622700.sql @@ -0,0 +1,2 @@ +-- +UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectMiscValueB_1` = 64, `EffectBasePoints_1` = 0 WHERE `ID` = 31374; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 799bf9e55..197a17fe8 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -6032,13 +6032,6 @@ void AuraEffect::HandlePeriodicTriggerSpellAuraTick(Unit* target, Unit* caster) Unit::Kill(target, target); return; } - // Spellcloth - case 31373: - { - // Summon Elemental after create item - target->SummonCreature(17870, 0, 0, 0, target->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 0); - return; - } // Eye of Grillok case 38495: triggerSpellId = 38530; From 6bb3775cf95ae2277054e48fabc0a6e5a3810e74 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 5 Mar 2023 19:32:09 +0000 Subject: [PATCH 054/159] chore(DB): import pending files Referenced commit(s): 0b04c7f3b6070f08b7314fa57c27f644819f939d --- .../rev_1678037942434622700.sql => db_world/2023_03_05_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1678037942434622700.sql => db_world/2023_03_05_01.sql} (72%) diff --git a/data/sql/updates/pending_db_world/rev_1678037942434622700.sql b/data/sql/updates/db_world/2023_03_05_01.sql similarity index 72% rename from data/sql/updates/pending_db_world/rev_1678037942434622700.sql rename to data/sql/updates/db_world/2023_03_05_01.sql index 530c6c280..5ed1898b6 100644 --- a/data/sql/updates/pending_db_world/rev_1678037942434622700.sql +++ b/data/sql/updates/db_world/2023_03_05_01.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_05_00 -> 2023_03_05_01 -- UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectMiscValueB_1` = 64, `EffectBasePoints_1` = 0 WHERE `ID` = 31374; From 8cbe63f110ed0515974ac607f076ec87f2c5be58 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sun, 5 Mar 2023 17:32:04 -0300 Subject: [PATCH 055/159] chore(Core/Scripts): Use serverside spell instead of SummonCreature for Nether-wraith Beacon (#15285) --- .../rev_1678042235460663800.sql | 8 ++++++ src/server/scripts/World/item_scripts.cpp | 25 ------------------- 2 files changed, 8 insertions(+), 25 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1678042235460663800.sql diff --git a/data/sql/updates/pending_db_world/rev_1678042235460663800.sql b/data/sql/updates/pending_db_world/rev_1678042235460663800.sql new file mode 100644 index 000000000..c4a6d5b30 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678042235460663800.sql @@ -0,0 +1,8 @@ +-- +UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectMiscValueB_1` = 64, `EffectBasePoints_1` = 0 WHERE `ID` = 39111; + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceEntry` = 39105); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(17, 0, 39105, 0, 0, 47, 0, 10832, 8, 0, 0, 0, 0, '', 'Player can only use Nether-wraith Beacon (31742) while quest Becoming a Spellfire Tailor (10832) is in progress'); + +UPDATE `item_template` SET `ScriptName` = '' WHERE (`entry` = 31742); diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp index fff776729..c7f59a982 100644 --- a/src/server/scripts/World/item_scripts.cpp +++ b/src/server/scripts/World/item_scripts.cpp @@ -23,7 +23,6 @@ SDCategory: Items EndScriptData */ /* ContentData -item_nether_wraith_beacon(i31742) Summons creatures for quest Becoming a Spellfire Tailor (q10832) item_flying_machine(i34060, i34061) Engineering crafted flying machines item_gor_dreks_ointment(i30175) Protecting Our Own(q10488) item_only_for_flight Items which should only useable while flying @@ -80,29 +79,6 @@ public: } }; -/*##### -# item_nether_wraith_beacon -#####*/ - -class item_nether_wraith_beacon : public ItemScript -{ -public: - item_nether_wraith_beacon() : ItemScript("item_nether_wraith_beacon") { } - - bool OnUse(Player* player, Item* /*item*/, SpellCastTargets const& /*targets*/) override - { - if (player->GetQuestStatus(10832) == QUEST_STATUS_INCOMPLETE) - { - if (Creature* nether = player->SummonCreature(22408, player->GetPositionX(), player->GetPositionY() + 20, player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 180000)) - nether->AI()->AttackStart(player); - - if (Creature* nether = player->SummonCreature(22408, player->GetPositionX(), player->GetPositionY() - 20, player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 180000)) - nether->AI()->AttackStart(player); - } - return false; - } -}; - /*##### # item_gor_dreks_ointment #####*/ @@ -272,7 +248,6 @@ public: void AddSC_item_scripts() { new item_only_for_flight(); - new item_nether_wraith_beacon(); new item_gor_dreks_ointment(); new item_incendiary_explosives(); new item_mysterious_egg(); From bf0b3a081ac2cbb91d746f65171a3fd6d04d589a Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sun, 5 Mar 2023 22:32:18 +0200 Subject: [PATCH 056/159] fix(DB/SAI): Deathstalker Vincent being killable. (#15282) --- .../updates/pending_db_world/rev_1678028975514038300.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678028975514038300.sql diff --git a/data/sql/updates/pending_db_world/rev_1678028975514038300.sql b/data/sql/updates/pending_db_world/rev_1678028975514038300.sql new file mode 100644 index 000000000..9692834ef --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678028975514038300.sql @@ -0,0 +1,9 @@ +-- Deathstalker Vincent +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` = 4444; +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 +(4444, 0, 0, 0, 4, 0, 100, 512, 0, 0, 0, 0, 0, 91, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Deathstalker Vincent - On Aggro - Remove FlagStandstate Dead'), +(4444, 0, 1, 2, 25, 0, 100, 513, 0, 0, 0, 0, 0, 42, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Deathstalker Vincent - On Reset - Set Invincibility Hp 1% (No Repeat)'), +(4444, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 90, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Deathstalker Vincent - On Reset - Set Flag Standstate Dead (No Repeat)'), +(4444, 0, 3, 4, 2, 0, 100, 513, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Deathstalker Vincent - Between 0-1% Health - Say Line 0 (No Repeat)'), +(4444, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Deathstalker Vincent - Between 0-1% Health - Set Home Position (No Repeat)'), +(4444, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 2, 35, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Deathstalker Vincent - Between 0-1% Health - Set Faction 35 (No Repeat)'); From f4bff8b41c7e817a8bfeead8425298cd82045bf4 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sun, 5 Mar 2023 22:32:27 +0200 Subject: [PATCH 057/159] fix(DB/SAI): Add Emberstrife's missing SAI. (#15149) --- .../updates/pending_db_world/rev_1676933500733249000.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676933500733249000.sql diff --git a/data/sql/updates/pending_db_world/rev_1676933500733249000.sql b/data/sql/updates/pending_db_world/rev_1676933500733249000.sql new file mode 100644 index 000000000..9ad57d22d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676933500733249000.sql @@ -0,0 +1,9 @@ +-- Emberstrife add SAI +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 10321; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 10321); +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 +(10321, 0, 0, 0, 0, 0, 100, 0, 2000, 3000, 12000, 14000, 0, 11, 40504, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - In Combat - Cast \'Cleave\''), +(10321, 0, 1, 0, 0, 0, 100, 0, 8000, 10000, 25000, 28000, 0, 11, 9573, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - In Combat - Cast \'Flame Breath\''), +(10321, 0, 2, 0, 0, 0, 100, 0, 15000, 18000, 135000, 138000, 0, 11, 8269, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - In Combat - Cast \'Frenzy\''), +(10321, 0, 3, 0, 2, 0, 100, 1, 0, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Emberstrife - Between 0-10% Health - Say Line 0 (No Repeat)'); From bc19347ffc2cc0fc02c1c880b82fc88191994bb3 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sun, 5 Mar 2023 22:32:51 +0200 Subject: [PATCH 058/159] fix(DB/Creature): Add missing spell to Infected Kodo Beast & disable gravity for Column Ornament (#15087) Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- .../updates/pending_db_world/rev_1676663461812301700.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676663461812301700.sql diff --git a/data/sql/updates/pending_db_world/rev_1676663461812301700.sql b/data/sql/updates/pending_db_world/rev_1676663461812301700.sql new file mode 100644 index 000000000..91de9ef9e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676663461812301700.sql @@ -0,0 +1,8 @@ +-- Infected Kodo Beast - add missing ability, Stampede. +DELETE FROM `creature_template_spell` WHERE `CreatureID`=25596; +INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES +(25596, 0, 45876, 12340), +(25596, 1, 45877, 12340); + +-- Column Ornament - disable gravity, previously falling to the ground. +UPDATE `creature_template_movement` SET `Flight` = 1 WHERE `CreatureId` = 29754; From a8d928e2a2e73820e668b9c0cbb52fe99ab80848 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 5 Mar 2023 21:11:04 +0000 Subject: [PATCH 059/159] chore(DB): import pending files Referenced commit(s): bc19347ffc2cc0fc02c1c880b82fc88191994bb3 --- .../rev_1676663461812301700.sql => db_world/2023_03_05_02.sql} | 1 + .../rev_1676933500733249000.sql => db_world/2023_03_05_03.sql} | 1 + .../rev_1678028975514038300.sql => db_world/2023_03_05_04.sql} | 1 + .../rev_1678042235460663800.sql => db_world/2023_03_05_05.sql} | 1 + 4 files changed, 4 insertions(+) rename data/sql/updates/{pending_db_world/rev_1676663461812301700.sql => db_world/2023_03_05_02.sql} (90%) rename data/sql/updates/{pending_db_world/rev_1676933500733249000.sql => db_world/2023_03_05_03.sql} (96%) rename data/sql/updates/{pending_db_world/rev_1678028975514038300.sql => db_world/2023_03_05_04.sql} (97%) rename data/sql/updates/{pending_db_world/rev_1678042235460663800.sql => db_world/2023_03_05_05.sql} (94%) diff --git a/data/sql/updates/pending_db_world/rev_1676663461812301700.sql b/data/sql/updates/db_world/2023_03_05_02.sql similarity index 90% rename from data/sql/updates/pending_db_world/rev_1676663461812301700.sql rename to data/sql/updates/db_world/2023_03_05_02.sql index 91de9ef9e..d148909f4 100644 --- a/data/sql/updates/pending_db_world/rev_1676663461812301700.sql +++ b/data/sql/updates/db_world/2023_03_05_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_05_01 -> 2023_03_05_02 -- Infected Kodo Beast - add missing ability, Stampede. DELETE FROM `creature_template_spell` WHERE `CreatureID`=25596; INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1676933500733249000.sql b/data/sql/updates/db_world/2023_03_05_03.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1676933500733249000.sql rename to data/sql/updates/db_world/2023_03_05_03.sql index 9ad57d22d..ed6fc652c 100644 --- a/data/sql/updates/pending_db_world/rev_1676933500733249000.sql +++ b/data/sql/updates/db_world/2023_03_05_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_05_02 -> 2023_03_05_03 -- Emberstrife add SAI UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 10321; diff --git a/data/sql/updates/pending_db_world/rev_1678028975514038300.sql b/data/sql/updates/db_world/2023_03_05_04.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1678028975514038300.sql rename to data/sql/updates/db_world/2023_03_05_04.sql index 9692834ef..402aa7eaf 100644 --- a/data/sql/updates/pending_db_world/rev_1678028975514038300.sql +++ b/data/sql/updates/db_world/2023_03_05_04.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_05_03 -> 2023_03_05_04 -- Deathstalker Vincent DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` = 4444; 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_1678042235460663800.sql b/data/sql/updates/db_world/2023_03_05_05.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1678042235460663800.sql rename to data/sql/updates/db_world/2023_03_05_05.sql index c4a6d5b30..ebf9d3d2e 100644 --- a/data/sql/updates/pending_db_world/rev_1678042235460663800.sql +++ b/data/sql/updates/db_world/2023_03_05_05.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_05_04 -> 2023_03_05_05 -- UPDATE `spell_dbc` SET `Effect_1` = 28, `EffectMiscValueB_1` = 64, `EffectBasePoints_1` = 0 WHERE `ID` = 39111; From ef0b20928bfb25c0b5ee4c012f1239344ebefdaa Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 6 Mar 2023 05:49:51 -0300 Subject: [PATCH 060/159] refactor(Scripts/Blackmorass): Rewrite Blackmorass (#15290) --- .../TheBlackMorass/boss_aeonus.cpp | 182 +++--- .../TheBlackMorass/boss_chrono_lord_deja.cpp | 173 +++--- .../TheBlackMorass/boss_temporus.cpp | 176 +++--- .../instance_the_black_morass.cpp | 528 ++++++++---------- .../TheBlackMorass/the_black_morass.cpp | 35 +- .../TheBlackMorass/the_black_morass.h | 19 +- 6 files changed, 465 insertions(+), 648 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp index d2fd5b07e..410b32ca1 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp @@ -36,131 +36,87 @@ enum Enums SPELL_BANISH_DRAGON_HELPER = 31550 }; -enum Events +struct boss_aeonus : public BossAI { - EVENT_SANDBREATH = 1, - EVENT_TIMESTOP = 2, - EVENT_FRENZY = 3, - EVENT_CLEAVE = 4 -}; + boss_aeonus(Creature* creature) : BossAI(creature, DATA_AEONUS) { } -class boss_aeonus : public CreatureScript -{ -public: - boss_aeonus() : CreatureScript("boss_aeonus") { } - - struct boss_aeonusAI : public ScriptedAI + void JustReachedHome() override { - boss_aeonusAI(Creature* creature) : ScriptedAI(creature) + if (Creature* medivh = instance->GetCreature(DATA_MEDIVH)) { - instance = creature->GetInstanceScript(); - } - - EventMap events; - InstanceScript* instance; - - void Reset() override - { - events.Reset(); - } - - void JustReachedHome() override - { - if (Unit* medivh = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_MEDIVH))) - if (me->GetDistance2d(medivh) < 20.0f) - me->CastSpell(me, SPELL_CORRUPT_MEDIVH, false); - } - - void InitializeAI() override - { - Talk(SAY_ENTER); - ScriptedAI::InitializeAI(); - - if (Unit* medivh = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_MEDIVH))) + if (me->GetDistance2d(medivh) < 20.0f) { - me->SetHomePosition(medivh->GetPositionX() + 14.0f * cos(medivh->GetAngle(me)), medivh->GetPositionY() + 14.0f * std::sin(medivh->GetAngle(me)), medivh->GetPositionZ(), me->GetAngle(medivh)); - me->GetMotionMaster()->MoveTargetedHome(); + DoCastAOE(SPELL_CORRUPT_MEDIVH); } } + } - void JustEngagedWith(Unit* /*who*/) override - { - events.ScheduleEvent(EVENT_CLEAVE, 5000); - events.ScheduleEvent(EVENT_SANDBREATH, 20000); - events.ScheduleEvent(EVENT_TIMESTOP, 15000); - events.ScheduleEvent(EVENT_FRENZY, 30000); - - Talk(SAY_AGGRO); - } - - void MoveInLineOfSight(Unit* who) override - { - if (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_TIME_KEEPER) - { - if (me->IsWithinDistInMap(who, 20.0f)) - { - Talk(SAY_BANISH); - me->CastSpell(me, SPELL_BANISH_DRAGON_HELPER, true); - return; - } - } - - ScriptedAI::MoveInLineOfSight(who); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - instance->SetData(TYPE_AEONUS, DONE); - } - - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_CLEAVE: - me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - events.ScheduleEvent(EVENT_CLEAVE, 10000); - break; - case EVENT_SANDBREATH: - me->CastSpell(me->GetVictim(), SPELL_SAND_BREATH, false); - events.ScheduleEvent(EVENT_SANDBREATH, 20000); - break; - case EVENT_TIMESTOP: - me->CastSpell(me, SPELL_TIME_STOP, false); - events.ScheduleEvent(EVENT_TIMESTOP, 25000); - break; - case EVENT_FRENZY: - Talk(EMOTE_FRENZY); - me->CastSpell(me, SPELL_ENRAGE, false); - events.ScheduleEvent(EVENT_FRENZY, 30000); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override + void IsSummonedBy(WorldObject* /*summoner*/) override { - return GetTheBlackMorassAI(creature); + Talk(SAY_ENTER); + + if (Creature* medivh = instance->GetCreature(DATA_MEDIVH)) + { + me->SetHomePosition(medivh->GetPositionX() + 14.0f * cos(medivh->GetAngle(me)), medivh->GetPositionY() + 14.0f * std::sin(medivh->GetAngle(me)), medivh->GetPositionZ(), me->GetAngle(medivh)); + me->GetMotionMaster()->MoveTargetedHome(); + } + } + + void JustEngagedWith(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + + scheduler.Schedule(5s, [this](TaskContext context) + { + DoCastVictim(SPELL_CLEAVE); + context.Repeat(10s); + }).Schedule(20s, [this](TaskContext context) + { + DoCastVictim(SPELL_SAND_BREATH); + context.Repeat(20s); + }).Schedule(15s, [this](TaskContext context) + { + DoCastAOE(SPELL_TIME_STOP); + context.Repeat(25s); + }).Schedule(30s, [this](TaskContext context) + { + Talk(EMOTE_FRENZY); + DoCastSelf(SPELL_ENRAGE); + context.Repeat(30s); + }); + } + + void MoveInLineOfSight(Unit* who) override + { + if (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_TIME_KEEPER) + { + if (me->IsWithinDistInMap(who, 20.0f)) + { + Talk(SAY_BANISH); + DoCastAOE(SPELL_BANISH_DRAGON_HELPER, true); + return; + } + } + + ScriptedAI::MoveInLineOfSight(who); + } + + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + _JustDied(); + } + + void KilledUnit(Unit* victim) override + { + if (victim->IsPlayer()) + { + Talk(SAY_SLAY); + } } }; void AddSC_boss_aeonus() { - new boss_aeonus(); + RegisterTheBlackMorassCreatureAI(boss_aeonus); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp index 8ef6ce89c..617fb5b38 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp @@ -35,121 +35,84 @@ enum Enums SPELL_BANISH_DRAGON_HELPER = 31550, }; -enum Events -{ - EVENT_ARCANE_BLAST = 1, - EVENT_TIME_LAPSE = 2, - EVENT_ARCANE_DISCHARGE = 3, - EVENT_ATTRACTION = 4 -}; + struct boss_chrono_lord_deja : public BossAI + { + boss_chrono_lord_deja(Creature* creature) : BossAI(creature, DATA_CHRONO_LORD_DEJA) { } -class boss_chrono_lord_deja : public CreatureScript -{ -public: - boss_chrono_lord_deja() : CreatureScript("boss_chrono_lord_deja") { } + void OwnTalk(uint32 id) + { + if (me->GetEntry() == NPC_CHRONO_LORD_DEJA) + { + Talk(id); + } + } - struct boss_chrono_lord_dejaAI : public ScriptedAI - { - boss_chrono_lord_dejaAI(Creature* creature) : ScriptedAI(creature) { } + void InitializeAI() override + { + OwnTalk(SAY_ENTER); + ScriptedAI::InitializeAI(); + } - EventMap events; + void JustEngagedWith(Unit* /*who*/) override + { + OwnTalk(SAY_AGGRO); + _JustEngagedWith(); - void Reset() override - { - events.Reset(); - } + scheduler.Schedule(10s, [this](TaskContext context) + { + DoCastVictim(SPELL_ARCANE_BLAST); + context.Repeat(20s); + }).Schedule(15s, [this](TaskContext context) + { + DoCastAOE(SPELL_TIME_LAPSE); + context.Repeat(20s); + }).Schedule(20s, [this](TaskContext context) + { + DoCastAOE(SPELL_ARCANE_DISCHARGE); + context.Repeat(25s); + }); - void OwnTalk(uint32 id) - { - if (me->GetEntry() == NPC_CHRONO_LORD_DEJA) - Talk(id); - } + if (IsHeroic()) + { + scheduler.Schedule(20s, [this](TaskContext context) + { + DoCastAOE(SPELL_ATTRACTION); + context.Repeat(30s); + }); + } + } - void InitializeAI() override - { - OwnTalk(SAY_ENTER); - ScriptedAI::InitializeAI(); - } + void MoveInLineOfSight(Unit* who) override + { + if (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_TIME_KEEPER) + { + if (me->IsWithinDistInMap(who, 20.0f)) + { + OwnTalk(SAY_BANISH); + DoCastAOE(SPELL_BANISH_DRAGON_HELPER); + return; + } + } - void JustEngagedWith(Unit* /*who*/) override - { - events.ScheduleEvent(EVENT_ARCANE_BLAST, 10000); - events.ScheduleEvent(EVENT_TIME_LAPSE, 15000); - events.ScheduleEvent(EVENT_ARCANE_DISCHARGE, 25000); - if (IsHeroic()) - events.ScheduleEvent(EVENT_ATTRACTION, 20000); + ScriptedAI::MoveInLineOfSight(who); + } - OwnTalk(SAY_AGGRO); - } + void KilledUnit(Unit* victim) override + { + if (victim->IsPlayer()) + { + OwnTalk(SAY_SLAY); + } + } - void MoveInLineOfSight(Unit* who) override - { - if (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_TIME_KEEPER) - { - if (me->IsWithinDistInMap(who, 20.0f)) - { - OwnTalk(SAY_BANISH); - me->CastSpell(me, SPELL_BANISH_DRAGON_HELPER, true); - return; - } - } - - ScriptedAI::MoveInLineOfSight(who); - } - - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - OwnTalk(SAY_SLAY); - } - - void JustDied(Unit* /*killer*/) override - { - OwnTalk(SAY_DEATH); - if (InstanceScript* instance = me->GetInstanceScript()) - instance->SetData(TYPE_CHRONO_LORD_DEJA, DONE); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - events.Update(diff); - switch (events.ExecuteEvent()) - { - case EVENT_ARCANE_BLAST: - me->CastSpell(me->GetVictim(), SPELL_ARCANE_BLAST, false); - events.ScheduleEvent(EVENT_ARCANE_BLAST, 20000); - break; - case EVENT_TIME_LAPSE: - me->CastSpell(me, SPELL_TIME_LAPSE, false); - events.ScheduleEvent(EVENT_TIME_LAPSE, 20000); - break; - case EVENT_ARCANE_DISCHARGE: - me->CastSpell(me, SPELL_ARCANE_DISCHARGE, false); - events.ScheduleEvent(EVENT_ARCANE_DISCHARGE, 25000); - break; - case EVENT_ATTRACTION: - me->CastSpell(me, SPELL_ATTRACTION, false); - events.ScheduleEvent(EVENT_ATTRACTION, 30000); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetTheBlackMorassAI(creature); - } -}; + void JustDied(Unit* /*killer*/) override + { + OwnTalk(SAY_DEATH); + _JustDied(); + } + }; void AddSC_boss_chrono_lord_deja() { - new boss_chrono_lord_deja(); + RegisterTheBlackMorassCreatureAI(boss_chrono_lord_deja); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp index f17bc8f60..85577952a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp @@ -34,121 +34,83 @@ enum Enums SPELL_BANISH_DRAGON_HELPER = 31550 }; -enum Events +struct boss_temporus : public BossAI { - EVENT_HASTEN = 1, - EVENT_MORTAL_WOUND = 2, - EVENT_WING_BUFFET = 3, - EVENT_SPELL_REFLECTION = 4 -}; + boss_temporus(Creature* creature) : BossAI(creature, DATA_TEMPORUS) { } -class boss_temporus : public CreatureScript -{ -public: - boss_temporus() : CreatureScript("boss_temporus") { } - - struct boss_temporusAI : public ScriptedAI + void OwnTalk(uint32 id) { - boss_temporusAI(Creature* creature) : ScriptedAI(creature) { } + if (me->GetEntry() == NPC_TEMPORUS) + Talk(id); + } - EventMap events; - - void OwnTalk(uint32 id) - { - if (me->GetEntry() == NPC_TEMPORUS) - Talk(id); - } - - void Reset() override - { - events.Reset(); - } - - void InitializeAI() override - { - OwnTalk(SAY_ENTER); - ScriptedAI::InitializeAI(); - } - - void JustEngagedWith(Unit* /*who*/) override - { - events.ScheduleEvent(EVENT_HASTEN, 12000); - events.ScheduleEvent(EVENT_MORTAL_WOUND, 5000); - events.ScheduleEvent(EVENT_WING_BUFFET, 20000); - if (IsHeroic()) - events.ScheduleEvent(EVENT_SPELL_REFLECTION, 28000); - - OwnTalk(SAY_AGGRO); - } - - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - OwnTalk(SAY_SLAY); - } - - void JustDied(Unit* /*killer*/) override - { - OwnTalk(SAY_DEATH); - if (InstanceScript* instance = me->GetInstanceScript()) - instance->SetData(TYPE_TEMPORUS, DONE); - } - - void MoveInLineOfSight(Unit* who) override - { - if (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_TIME_KEEPER) - { - if (me->IsWithinDistInMap(who, 20.0f)) - { - OwnTalk(SAY_BANISH); - me->CastSpell(me, SPELL_BANISH_DRAGON_HELPER, true); - return; - } - } - - ScriptedAI::MoveInLineOfSight(who); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_HASTEN: - me->CastSpell(me, SPELL_HASTEN, false); - events.ScheduleEvent(EVENT_HASTEN, 20000); - break; - case EVENT_MORTAL_WOUND: - me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false); - events.ScheduleEvent(EVENT_MORTAL_WOUND, 10000); - break; - case EVENT_WING_BUFFET: - me->CastSpell(me, SPELL_WING_BUFFET, false); - events.ScheduleEvent(EVENT_WING_BUFFET, 20000); - break; - case EVENT_SPELL_REFLECTION: - me->CastSpell(me, SPELL_REFLECT, false); - events.ScheduleEvent(EVENT_SPELL_REFLECTION, 30000); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override + void InitializeAI() override { - return GetTheBlackMorassAI(creature); + OwnTalk(SAY_ENTER); + ScriptedAI::InitializeAI(); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + + scheduler.Schedule(12s, [this](TaskContext context) + { + DoCastSelf(SPELL_HASTEN); + context.Repeat(20s); + }).Schedule(5s, [this](TaskContext context) + { + DoCastVictim(SPELL_MORTAL_WOUND); + context.Repeat(10s); + }).Schedule(20s, [this](TaskContext context) + { + DoCastAOE(SPELL_WING_BUFFET); + context.Repeat(20s); + }); + + if (IsHeroic()) + { + scheduler.Schedule(28s, [this](TaskContext context) + { + DoCastSelf(SPELL_REFLECT); + context.Repeat(30s); + }); + } + + OwnTalk(SAY_AGGRO); + } + + void KilledUnit(Unit* victim) override + { + if (victim->IsPlayer()) + { + OwnTalk(SAY_SLAY); + } + } + + void JustDied(Unit* /*killer*/) override + { + OwnTalk(SAY_DEATH); + _JustDied(); + } + + void MoveInLineOfSight(Unit* who) override + { + if (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_TIME_KEEPER) + { + if (me->IsWithinDistInMap(who, 20.0f)) + { + OwnTalk(SAY_BANISH); + me->CastSpell(me, SPELL_BANISH_DRAGON_HELPER, true); + return; + } + } + + ScriptedAI::MoveInLineOfSight(who); } }; void AddSC_boss_temporus() { - new boss_temporus(); + RegisterTheBlackMorassCreatureAI(boss_temporus); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index aa80861ad..e98a27561 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -23,8 +23,7 @@ #include "TemporarySummon.h" #include "the_black_morass.h" -#define MAX_PORTAL_LOCATIONS 4 -const Position PortalLocation[MAX_PORTAL_LOCATIONS] = +const Position PortalLocation[4] = { { -2030.8318f, 7024.9443f, 23.071817f, 3.14159f }, { -1961.7335f, 7029.5280f, 21.811401f, 2.12931f }, @@ -32,6 +31,11 @@ const Position PortalLocation[MAX_PORTAL_LOCATIONS] = { -1930.9106f, 7183.5970f, 23.007639f, 3.59537f } }; +ObjectData const creatureData[1] = +{ + { NPC_MEDIVH, DATA_MEDIVH } +}; + class instance_the_black_morass : public InstanceMapScript { public: @@ -44,67 +48,172 @@ public: struct instance_the_black_morass_InstanceMapScript : public InstanceScript { - instance_the_black_morass_InstanceMapScript(Map* map) : InstanceScript(map) { } - - GuidSet encounterNPCs; - uint32 encounters[MAX_ENCOUNTER]; - ObjectGuid _medivhGUID; - uint8 _currentRift; - int8 _shieldPercent; - - void Initialize() override + instance_the_black_morass_InstanceMapScript(Map* map) : InstanceScript(map) { SetHeaders(DataHeader); - memset(&encounters, 0, sizeof(encounters)); + SetBossNumber(EncounterCount); + LoadObjectData(creatureData, nullptr); _currentRift = 0; _shieldPercent = 100; - encounterNPCs.clear(); + _encounterNPCs.clear(); _timerToNextBoss = 0; } void CleanupInstance() { - Events.Reset(); _currentRift = 0; _shieldPercent = 100; - _usedRiftPostions.fill(ObjectGuid::Empty); + _availableRiftPositions.clear(); + _scheduler.CancelAll(); - instance->LoadGrid(-2023.0f, 7121.0f); - if (Creature* medivh = instance->GetCreature(_medivhGUID)) + for (Position const& pos : PortalLocation) { - medivh->DespawnOrUnsummon(); - medivh->SetRespawnTime(3); + _availableRiftPositions.push_back(pos); } - GuidSet eCopy = encounterNPCs; - for (ObjectGuid const& guid : eCopy) - if (Creature* creature = instance->GetCreature(guid)) - creature->DespawnOrUnsummon(); + instance->LoadGrid(-2023.0f, 7121.0f); + if (Creature* medivh = GetCreature(DATA_MEDIVH)) + { + medivh->DespawnOrUnsummon(0ms, 3s); + } } - bool IsEncounterInProgress() const override + bool SetBossState(uint32 type, EncounterState state) override { - return false; + if (!InstanceScript::SetBossState(type, state)) + { + return false; + } + + if (state == DONE) + { + switch (type) + { + case DATA_AEONUS: + { + if (Creature* medivh = GetCreature(DATA_MEDIVH)) + { + medivh->AI()->DoAction(ACTION_OUTRO); + } + + instance->DoForAllPlayers([&](Player* player) + { + if (player->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE) + { + player->AreaExploredOrEventHappens(QUEST_OPENING_PORTAL); + } + + if (player->GetQuestStatus(QUEST_MASTER_TOUCH) == QUEST_STATUS_INCOMPLETE) + { + player->AreaExploredOrEventHappens(QUEST_MASTER_TOUCH); + } + }); + break; + } + case DATA_CHRONO_LORD_DEJA: + case DATA_TEMPORUS: + { + for (ObjectGuid const& guid : _encounterNPCs) + { + if (Creature* creature = instance->GetCreature(guid)) + { + switch (creature->GetEntry()) + { + case NPC_RIFT_KEEPER_WARLOCK: + case NPC_RIFT_KEEPER_MAGE: + case NPC_RIFT_LORD: + case NPC_RIFT_LORD_2: + case NPC_TIME_RIFT: + creature->DespawnOrUnsummon(); + break; + default: + break; + } + } + } + + if (!_timerToNextBoss || _timerToNextBoss > 30 * IN_MILLISECONDS) + { + ScheduleNextPortal(30s); + } + else + { + ScheduleNextPortal(Milliseconds(_timerToNextBoss)); + } + + _timerToNextBoss = (instance->IsHeroic() ? 300 : 150) * IN_MILLISECONDS; + break; + } + default: + break; + } + } + + return true; } void OnPlayerEnter(Player* player) override { - if (instance->GetPlayersCountExceptGMs() <= 1 && GetData(TYPE_AEONUS) != DONE) + if (instance->GetPlayersCountExceptGMs() <= 1 && GetBossState(DATA_AEONUS) != DONE) + { CleanupInstance(); + } player->SendUpdateWorldState(WORLD_STATE_BM, _currentRift > 0 ? 1 : 0); player->SendUpdateWorldState(WORLD_STATE_BM_SHIELD, _shieldPercent); player->SendUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); } + void ScheduleNextPortal(Milliseconds time) + { + _scheduler.CancelGroup(CONTEXT_GROUP_RIFTS); + + _scheduler.Schedule(time, [this](TaskContext context) + { + if (GetCreature(DATA_MEDIVH)) + { + Position spawnPos; + if (!_availableRiftPositions.empty()) + { + spawnPos = Acore::Containers::SelectRandomContainerElement(_availableRiftPositions); + _availableRiftPositions.remove(spawnPos); + + DoUpdateWorldState(WORLD_STATE_BM_RIFT, ++_currentRift); + + if (Creature* rift = instance->SummonCreature(NPC_TIME_RIFT, spawnPos)) + { + _scheduler.Schedule(6s, [this, rift](TaskContext) + { + SummonPortalKeeper(rift); + }); + } + + // Here we check if we have available rift spots. + // If there are spots available, spawn a rift instantly. + if (!_availableRiftPositions.empty()) + { + context.Repeat((_currentRift >= 13 ? 2min : 90s)); + } + else + { + context.Repeat(3s); + } + } + else + { + context.Repeat(3s); + } + + context.SetGroup(CONTEXT_GROUP_RIFTS); + } + }); + } + void OnCreatureCreate(Creature* creature) override { switch (creature->GetEntry()) { - case NPC_MEDIVH: - _medivhGUID = creature->GetGUID(); - break; case NPC_TIME_RIFT: case NPC_CHRONO_LORD_DEJA: case NPC_INFINITE_CHRONO_LORD: @@ -121,9 +230,11 @@ public: case NPC_INFINITE_EXECUTIONER: case NPC_INFINITE_VANQUISHER: case NPC_DP_BEAM_STALKER: - encounterNPCs.insert(creature->GetGUID()); + _encounterNPCs.insert(creature->GetGUID()); break; } + + InstanceScript::OnCreatureCreate(creature); } void OnCreatureRemove(Creature* creature) override @@ -131,6 +242,22 @@ public: switch (creature->GetEntry()) { case NPC_TIME_RIFT: + _availableRiftPositions.push_back(creature->GetHomePosition()); + + if (GetBossState(DATA_AEONUS) != DONE) + { + // Here we check if we have available rift spots. + // If there are spots available, spawn a rift instantly. + if (!_availableRiftPositions.empty()) + { + ScheduleNextPortal(4s); + } + else + { + ScheduleNextPortal((_currentRift >= 13 ? 2min : 90s)); + } + } + [[fallthrough]]; case NPC_CHRONO_LORD_DEJA: case NPC_INFINITE_CHRONO_LORD: case NPC_TEMPORUS: @@ -145,92 +272,28 @@ public: case NPC_INFINITE_CRONOMANCER: case NPC_INFINITE_EXECUTIONER: case NPC_INFINITE_VANQUISHER: - encounterNPCs.erase(creature->GetGUID()); + _encounterNPCs.erase(creature->GetGUID()); break; } + + InstanceScript::OnCreatureRemove(creature); } void SetData(uint32 type, uint32 data) override { switch (type) { - case TYPE_AEONUS: - { - encounters[type] = DONE; - SaveToDB(); - - if (Creature* medivh = instance->GetCreature(_medivhGUID)) - { - medivh->AI()->DoAction(ACTION_OUTRO); - } - - Map::PlayerList const& players = instance->GetPlayers(); - if (!players.IsEmpty()) - { - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) - { - if (Player* player = itr->GetSource()) - { - if (player->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE) - { - player->AreaExploredOrEventHappens(QUEST_OPENING_PORTAL); - } - - if (player->GetQuestStatus(QUEST_MASTER_TOUCH) == QUEST_STATUS_INCOMPLETE) - { - player->AreaExploredOrEventHappens(QUEST_MASTER_TOUCH); - } - } - } - } - break; - } - case TYPE_CHRONO_LORD_DEJA: - case TYPE_TEMPORUS: - { - GuidSet eCopy = encounterNPCs; - for (ObjectGuid const& guid : eCopy) - { - if (Creature* creature = instance->GetCreature(guid)) - { - switch (creature->GetEntry()) - { - case NPC_RIFT_KEEPER_WARLOCK: - case NPC_RIFT_KEEPER_MAGE: - case NPC_RIFT_LORD: - case NPC_RIFT_LORD_2: - case NPC_TIME_RIFT: - creature->DespawnOrUnsummon(); - break; - default: - break; - } - } - } - encounters[type] = DONE; - - if (!_timerToNextBoss || _timerToNextBoss > 30 * IN_MILLISECONDS) - { - Events.RescheduleEvent(EVENT_NEXT_PORTAL, 30 * IN_MILLISECONDS); - } - else - { - Events.RescheduleEvent(EVENT_NEXT_PORTAL, _timerToNextBoss); - } - Events.SetPhase(1); - SaveToDB(); - _timerToNextBoss = (instance->IsHeroic() ? 300 : 150) * IN_MILLISECONDS; - break; - } case DATA_MEDIVH: { DoUpdateWorldState(WORLD_STATE_BM, 1); DoUpdateWorldState(WORLD_STATE_BM_SHIELD, _shieldPercent); DoUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); - Events.RescheduleEvent(EVENT_NEXT_PORTAL, 3000); + + ScheduleNextPortal(3s); + _timerToNextBoss = (instance->IsHeroic() ? 300 : 150) * IN_MILLISECONDS; - for (ObjectGuid const& guid : encounterNPCs) + for (ObjectGuid const& guid : _encounterNPCs) { if (guid.GetEntry() == NPC_DP_BEAM_STALKER) { @@ -264,26 +327,73 @@ public: if (!_shieldPercent) { - if (Creature* medivh = instance->GetCreature(_medivhGUID)) + if (Creature* medivh = GetCreature(DATA_MEDIVH)) { - if (medivh->IsAlive()) + if (medivh->IsAlive() && medivh->IsAIEnabled) { medivh->SetImmuneToNPC(true); + medivh->AI()->Talk(SAY_MEDIVH_DEATH); - if (medivh->IsAIEnabled) - { - medivh->AI()->Talk(SAY_MEDIVH_DEATH); - } - - Events.ScheduleEvent(EVENT_WIPE_1, 4s); - - for (ObjectGuid const& guid : encounterNPCs) + for (ObjectGuid const& guid : _encounterNPCs) { if (Creature* creature = instance->GetCreature(guid)) { creature->InterruptNonMeleeSpells(true); } } + + // Step 1 - Medivh loses all auras. + _scheduler.Schedule(4s, [this](TaskContext) + { + if (Creature* medivh = GetCreature(DATA_MEDIVH)) + { + medivh->RemoveAllAuras(); + } + + // Step 2 - Medivh dies and visual effect NPCs are despawned. + _scheduler.Schedule(500ms, [this](TaskContext) + { + if (Creature* medivh = GetCreature(DATA_MEDIVH)) + { + medivh->KillSelf(false); + + GuidSet encounterNPCSCopy = _encounterNPCs; + for (ObjectGuid const& guid : encounterNPCSCopy) + { + switch (guid.GetEntry()) + { + case NPC_TIME_RIFT: + case NPC_DP_EMITTER_STALKER: + case NPC_DP_CRYSTAL_STALKER: + case NPC_DP_BEAM_STALKER: + if (Creature* creature = instance->GetCreature(guid)) + { + creature->DespawnOrUnsummon(); + } + break; + default: + break; + } + } + } + + // Step 3 - All summoned creatures despawn + _scheduler.Schedule(2s, [this](TaskContext) + { + GuidSet encounterNPCSCopy = _encounterNPCs; + for (ObjectGuid const& guid : encounterNPCSCopy) + { + if (Creature* creature = instance->GetCreature(guid)) + { + creature->CastSpell(creature, SPELL_TELEPORT_VISUAL, true); + creature->DespawnOrUnsummon(1200ms, 0s); + } + } + + _scheduler.CancelAll(); + }); + }); + }); } } } @@ -298,10 +408,6 @@ public: { switch (type) { - case TYPE_CHRONO_LORD_DEJA: - case TYPE_TEMPORUS: - case TYPE_AEONUS: - return encounters[type]; case DATA_SHIELD_PERCENT: return _shieldPercent; case DATA_RIFT_NUMBER: @@ -310,66 +416,21 @@ public: return 0; } - void SetGuidData(uint32 type, ObjectGuid data) override + void SummonPortalKeeper(Creature* rift) { - if (type == DATA_SUMMONED_NPC) - encounterNPCs.insert(data); - else if (type == DATA_DELETED_NPC) - encounterNPCs.erase(data); - else if (type == DATA_RIFT_KILLED) - { - if (!Events.IsInPhase(1)) - { - uint8 emptySpots = 0; - for (uint8 i = 0; i < MAX_PORTAL_LOCATIONS; ++i) - { - if (!_usedRiftPostions[i]) - { - ++emptySpots; - } - - if (_usedRiftPostions[i] == data) - { - _usedRiftPostions[i].Clear(); - } - } - - if (emptySpots >= MAX_PORTAL_LOCATIONS - 1) - { - Events.RescheduleEvent(EVENT_NEXT_PORTAL, 4000); - } - else if (!emptySpots) - { - Events.RescheduleEvent(EVENT_NEXT_PORTAL, (_currentRift >= 13 ? 120 : 90) * IN_MILLISECONDS); - } - } - } - } - - ObjectGuid GetGuidData(uint32 data) const override - { - if (data == DATA_MEDIVH) - return _medivhGUID; - - return ObjectGuid::Empty; - } - - void SummonPortalKeeper(uint32 eventId) - { - uint8 riftPosition = eventId - EVENT_SUMMON_KEEPER_1; - ObjectGuid const& riftGUID = _usedRiftPostions[riftPosition]; - Creature* rift = instance->GetCreature(riftGUID); if (!rift) + { return; + } int32 entry = 0; switch (_currentRift) { case 6: - entry = GetData(TYPE_CHRONO_LORD_DEJA) == DONE ? (instance->IsHeroic() ? NPC_INFINITE_CHRONO_LORD : -NPC_CHRONO_LORD_DEJA) : NPC_CHRONO_LORD_DEJA; + entry = GetBossState(DATA_CHRONO_LORD_DEJA) == DONE ? (instance->IsHeroic() ? NPC_INFINITE_CHRONO_LORD : -NPC_CHRONO_LORD_DEJA) : NPC_CHRONO_LORD_DEJA; break; case 12: - entry = GetData(TYPE_TEMPORUS) == DONE ? (instance->IsHeroic() ? NPC_INFINITE_TIMEREAVER : -NPC_TEMPORUS) : NPC_TEMPORUS; + entry = GetBossState(DATA_TEMPORUS) == DONE ? (instance->IsHeroic() ? NPC_INFINITE_TIMEREAVER : -NPC_TEMPORUS) : NPC_TEMPORUS; break; case 18: entry = NPC_AEONUS; @@ -381,21 +442,22 @@ public: Position pos = rift->GetNearPosition(10.0f, 2 * M_PI * rand_norm()); - if (TempSummon* summon = instance->SummonCreature(std::abs(entry), pos)) + if (Creature* summon = rift->SummonCreature(std::abs(entry), pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3 * MINUTE * IN_MILLISECONDS)) { - summon->SetTempSummonType(TEMPSUMMON_CORPSE_TIMED_DESPAWN); - summon->SetTimer(3 * MINUTE * IN_MILLISECONDS); - if (entry < 0) + { summon->SetLootMode(0); + } if (summon->GetEntry() != NPC_AEONUS) { - rift->AI()->SetGUID(summon->GetGUID()); rift->CastSpell(summon, SPELL_RIFT_CHANNEL, false); } else + { summon->SetReactState(REACT_DEFENSIVE); + _scheduler.CancelGroup(CONTEXT_GROUP_RIFTS); + } } } @@ -413,130 +475,16 @@ public: } } - Events.Update(diff); - - uint32 eventId = Events.ExecuteEvent(); - switch (eventId) - { - case EVENT_NEXT_PORTAL: - { - if (instance->GetCreature(_medivhGUID)) - { - uint8 position = MAX_PORTAL_LOCATIONS; - - std::vector possibleSpots; - for (uint8 i = 0; i < MAX_PORTAL_LOCATIONS; ++i) - { - if (!_usedRiftPostions[i]) - { - possibleSpots.push_back(i); - } - } - - if (!possibleSpots.empty()) - { - position = Acore::Containers::SelectRandomContainerElement(possibleSpots); - } - - if (position < MAX_PORTAL_LOCATIONS) - { - ++_currentRift; - DoUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); - Events.ScheduleEvent(EVENT_SUMMON_KEEPER_1 + position, 6000); - Events.SetPhase(0); - - if (Creature* rift = instance->SummonCreature(NPC_TIME_RIFT, PortalLocation[position])) - { - _usedRiftPostions[position] = rift->GetGUID(); - - for (uint8 i = 0; i < MAX_PORTAL_LOCATIONS; ++i) - { - if (!_usedRiftPostions[i]) - { - Events.RescheduleEvent(EVENT_NEXT_PORTAL, (_currentRift >= 13 ? 120 : 90) * IN_MILLISECONDS); - break; - } - } - } - } - } - break; - } - case EVENT_SUMMON_KEEPER_1: - case EVENT_SUMMON_KEEPER_2: - case EVENT_SUMMON_KEEPER_3: - case EVENT_SUMMON_KEEPER_4: - SummonPortalKeeper(eventId); - break; - case EVENT_WIPE_1: - if (Creature* medivh = instance->GetCreature(_medivhGUID)) - { - medivh->RemoveAllAuras(); - } - Events.ScheduleEvent(EVENT_WIPE_2, 500ms); - break; - case EVENT_WIPE_2: - if (Creature* medivh = instance->GetCreature(_medivhGUID)) - { - medivh->KillSelf(false); - - GuidSet encounterNPCSCopy = encounterNPCs; - for (ObjectGuid const& guid : encounterNPCSCopy) - { - switch (guid.GetEntry()) - { - case NPC_TIME_RIFT: - case NPC_DP_EMITTER_STALKER: - case NPC_DP_CRYSTAL_STALKER: - case NPC_DP_BEAM_STALKER: - if (Creature* creature = instance->GetCreature(guid)) - { - creature->DespawnOrUnsummon(); - } - break; - default: - break; - } - } - } - Events.ScheduleEvent(EVENT_WIPE_3, 2s); - break; - case EVENT_WIPE_3: - { - GuidSet encounterNPCSCopy = encounterNPCs; - for (ObjectGuid const& guid : encounterNPCSCopy) - { - if (Creature* creature = instance->GetCreature(guid)) - { - creature->CastSpell(creature, SPELL_TELEPORT_VISUAL, true); - creature->DespawnOrUnsummon(1200ms, 0s); - } - } - break; - } - default: - break; - } - } - - void ReadSaveDataMore(std::istringstream& data) override - { - data >> encounters[0]; - data >> encounters[1]; - data >> encounters[2]; - } - - void WriteSaveDataMore(std::ostringstream& data) override - { - data << encounters[0] << ' ' - << encounters[1] << ' ' - << encounters[2] << ' '; + _scheduler.Update(); } protected: - EventMap Events; - std::array _usedRiftPostions; + std::list _availableRiftPositions; uint32 _timerToNextBoss; + GuidSet _encounterNPCs; + uint8 _currentRift; + int8 _shieldPercent; + TaskScheduler _scheduler; }; }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index 873411b44..cd8877d6c 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -91,7 +91,7 @@ struct npc_medivh_bm : public ScriptedAI events.Reset(); me->CastSpell(me, SPELL_MANA_SHIELD, true); - if (_instance->GetData(TYPE_AEONUS) != DONE) + if (_instance->GetBossState(DATA_AEONUS) != DONE) { me->CastSpell(me, SPELL_MEDIVH_CHANNEL, false); } @@ -101,8 +101,6 @@ struct npc_medivh_bm : public ScriptedAI void JustSummoned(Creature* summon) override { - _instance->SetGuidData(DATA_SUMMONED_NPC, summon->GetGUID()); - if (summon->GetEntry() == NPC_DP_CRYSTAL_STALKER) { summon->DespawnOrUnsummon(25000); @@ -119,14 +117,9 @@ struct npc_medivh_bm : public ScriptedAI } } - void SummonedCreatureDespawn(Creature* summon) override - { - _instance->SetGuidData(DATA_DELETED_NPC, summon->GetGUID()); - } - void MoveInLineOfSight(Unit* who) override { - if (!events.Empty() || _instance->GetData(TYPE_AEONUS) == DONE) + if (!events.Empty() || _instance->GetBossState(DATA_AEONUS) == DONE) { return; } @@ -274,9 +267,12 @@ struct npc_time_rift : public NullCreatureAI events.ScheduleEvent(EVENT_CHECK_DEATH, 8000); } - void SetGUID(ObjectGuid guid, int32) override + void JustSummoned(Creature* creature) override { - _riftKeeperGUID = guid; + if (creature->GetEntry() != NPC_AEONUS) + { + _riftKeeperGUID = creature->GetGUID(); + } } void DoSummonAtRift(uint32 entry) @@ -284,16 +280,15 @@ struct npc_time_rift : public NullCreatureAI Position pos = me->GetNearPosition(10.0f, 2 * M_PI * rand_norm()); if (Creature* summon = me->SummonCreature(entry, pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 150000)) - if (_instance) + { + if (Creature* medivh = _instance->GetCreature(DATA_MEDIVH)) { - if (Unit* medivh = ObjectAccessor::GetUnit(*me, _instance->GetGuidData(DATA_MEDIVH))) - { - float o = medivh->GetAngle(summon) + frand(-1.0f, 1.0f); - summon->SetHomePosition(medivh->GetPositionX() + 14.0f * cos(o), medivh->GetPositionY() + 14.0f * std::sin(o), medivh->GetPositionZ(), summon->GetAngle(medivh)); - summon->GetMotionMaster()->MoveTargetedHome(true); - summon->SetReactState(REACT_DEFENSIVE); - } + float o = medivh->GetAngle(summon) + frand(-1.0f, 1.0f); + summon->SetHomePosition(medivh->GetPositionX() + 14.0f * cos(o), medivh->GetPositionY() + 14.0f * std::sin(o), medivh->GetPositionZ(), summon->GetAngle(medivh)); + summon->GetMotionMaster()->MoveTargetedHome(true); + summon->SetReactState(REACT_DEFENSIVE); } + } } void DoSelectSummon() @@ -326,8 +321,6 @@ struct npc_time_rift : public NullCreatureAI Creature* riftKeeper = ObjectAccessor::GetCreature(*me, _riftKeeperGUID); if (!riftKeeper || !riftKeeper->IsAlive()) { - _instance->SetGuidData(DATA_RIFT_KILLED, me->GetGUID()); - me->DespawnOrUnsummon(0); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h index 6d895c210..5fd011238 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h @@ -24,13 +24,15 @@ #define DataHeader "TBM" +uint32 const EncounterCount = 3; + #define TheBlackMorassScriptName "instance_the_black_morass" enum DataTypes { - TYPE_CHRONO_LORD_DEJA = 0, - TYPE_TEMPORUS = 1, - TYPE_AEONUS = 2, + DATA_CHRONO_LORD_DEJA = 0, + DATA_TEMPORUS = 1, + DATA_AEONUS = 2, MAX_ENCOUNTER = 3, DATA_MEDIVH = 10, @@ -89,16 +91,9 @@ enum Misc SPELL_RIFT_CHANNEL = 31387, SPELL_TELEPORT_VISUAL = 7791, - EVENT_NEXT_PORTAL = 1, - EVENT_SUMMON_KEEPER_1 = 2, - EVENT_SUMMON_KEEPER_2 = 3, - EVENT_SUMMON_KEEPER_3 = 4, - EVENT_SUMMON_KEEPER_4 = 5, - EVENT_WIPE_1 = 6, - EVENT_WIPE_2 = 7, - EVENT_WIPE_3 = 8, + ACTION_OUTRO = 1, - ACTION_OUTRO = 1 + CONTEXT_GROUP_RIFTS = 1 }; enum medivhSays From 6b4be39341dbad6e591fc1f3402db226298d67ab Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 6 Mar 2023 10:52:05 -0300 Subject: [PATCH 061/159] chore(Core/Database): Improve error wording (#15270) --- src/server/database/Database/DatabaseWorkerPool.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/database/Database/DatabaseWorkerPool.cpp b/src/server/database/Database/DatabaseWorkerPool.cpp index e320e0903..4e0f466cf 100644 --- a/src/server/database/Database/DatabaseWorkerPool.cpp +++ b/src/server/database/Database/DatabaseWorkerPool.cpp @@ -73,7 +73,7 @@ DatabaseWorkerPool::DatabaseWorkerPool() : bool isSameClientDB = true; // Client version 3.2.3? #endif - WPFatal(isSupportClientDB, "AzerothCore does not support MySQL versions below 5.7 and MariaDB 10.5\n\nFound version: {} / {}. Server compiled with: {}.\nSearch the wiki for ACE00043 in Common Errors (https://www.azerothcore.org/wiki/common-errors#ace00043).", + WPFatal(isSupportClientDB, "AzerothCore does not support MySQL versions below 5.7 or MariaDB versions below 10.5.\n\nFound version: {} / {}. Server compiled with: {}.\nSearch the wiki for ACE00043 in Common Errors (https://www.azerothcore.org/wiki/common-errors#ace00043).", mysql_get_client_info(), mysql_get_client_version(), MYSQL_VERSION_ID); WPFatal(isSameClientDB, "Used MySQL library version ({} id {}) does not match the version id used to compile AzerothCore (id {}).\nSearch the wiki for ACE00046 in Common Errors (https://www.azerothcore.org/wiki/common-errors#ace00046).", mysql_get_client_info(), mysql_get_client_version(), MYSQL_VERSION_ID); @@ -404,8 +404,8 @@ uint32 DatabaseWorkerPool::OpenConnections(InternalIndex type, uint8 numConne } else if (connection->GetServerVersion() < MIN_MYSQL_SERVER_VERSION) { - LOG_ERROR("sql.driver", "AzerothCore does not support MySQL versions below 5.7 or MariaDB versions below 10.5.\n\nFound version: {} / {}. Server compiled with: {}.", - mysql_get_client_info(), mysql_get_client_version(), MYSQL_VERSION_ID); + LOG_ERROR("sql.driver", "AzerothCore does not support MySQL versions below 5.7 or MariaDB versions below 10.5.\n\nFound server version: {}. Server compiled with: {}.", + connection->GetServerVersion(), MYSQL_VERSION_ID); return 1; } else From 16075d5b7d19bb35e3af2e2b5085a9330e203735 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Mon, 6 Mar 2023 10:53:37 -0300 Subject: [PATCH 062/159] fix(DB/Loot): Correct Gorefiend Truncheon drop rate (#15287) --- data/sql/updates/pending_db_world/rev_1678044696832996700.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678044696832996700.sql diff --git a/data/sql/updates/pending_db_world/rev_1678044696832996700.sql b/data/sql/updates/pending_db_world/rev_1678044696832996700.sql new file mode 100644 index 000000000..eba96c6c5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678044696832996700.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_loot_template` SET `Chance`=100 WHERE (`Entry` = 21784) AND (`Item`=30800); From 850dfb93203ba80ae66deb597abd612c61878777 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 6 Mar 2023 13:56:10 +0000 Subject: [PATCH 063/159] chore(DB): import pending files Referenced commit(s): 16075d5b7d19bb35e3af2e2b5085a9330e203735 --- .../rev_1678044696832996700.sql => db_world/2023_03_06_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1678044696832996700.sql => db_world/2023_03_06_00.sql} (68%) diff --git a/data/sql/updates/pending_db_world/rev_1678044696832996700.sql b/data/sql/updates/db_world/2023_03_06_00.sql similarity index 68% rename from data/sql/updates/pending_db_world/rev_1678044696832996700.sql rename to data/sql/updates/db_world/2023_03_06_00.sql index eba96c6c5..e5e60ecf2 100644 --- a/data/sql/updates/pending_db_world/rev_1678044696832996700.sql +++ b/data/sql/updates/db_world/2023_03_06_00.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_05_05 -> 2023_03_06_00 -- UPDATE `creature_loot_template` SET `Chance`=100 WHERE (`Entry` = 21784) AND (`Item`=30800); From 86a2e9474621375552d24bbd830c86cc35c3b9df Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 7 Mar 2023 05:32:53 -0300 Subject: [PATCH 064/159] feat(Core/AI): Implement DoForAllSummons() function to summon lists (#15262) --- src/server/game/AI/ScriptedAI/ScriptedCreature.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index 4778c2215..744d2d75d 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -139,6 +139,20 @@ public: } } + void DoForAllSummons(std::function exec) + { + // We need to use a copy of SummonList here, otherwise original SummonList would be modified + StorageType listCopy = storage_; + + for (auto const& guid : listCopy) + { + if (WorldObject* summon = ObjectAccessor::GetWorldObject(*me, guid)) + { + exec(summon); + } + } + } + void DoZoneInCombat(uint32 entry = 0); void RemoveNotExisting(); bool HasEntry(uint32 entry) const; From 527f4628262b95b198666a874b23551152aaef60 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 7 Mar 2023 09:19:48 -0300 Subject: [PATCH 065/159] fix(Scripts/Blackmorass): Clean unnecessary repetitions (#15299) --- .../instance_the_black_morass.cpp | 73 ++++++------------- .../TheBlackMorass/the_black_morass.cpp | 2 +- 2 files changed, 23 insertions(+), 52 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index e98a27561..762df4d07 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -56,7 +56,6 @@ public: _currentRift = 0; _shieldPercent = 100; _encounterNPCs.clear(); - _timerToNextBoss = 0; } void CleanupInstance() @@ -114,6 +113,8 @@ public: case DATA_CHRONO_LORD_DEJA: case DATA_TEMPORUS: { + _scheduler.RescheduleGroup(CONTEXT_GROUP_RIFTS, 2min + 30s); + for (ObjectGuid const& guid : _encounterNPCs) { if (Creature* creature = instance->GetCreature(guid)) @@ -132,17 +133,6 @@ public: } } } - - if (!_timerToNextBoss || _timerToNextBoss > 30 * IN_MILLISECONDS) - { - ScheduleNextPortal(30s); - } - else - { - ScheduleNextPortal(Milliseconds(_timerToNextBoss)); - } - - _timerToNextBoss = (instance->IsHeroic() ? 300 : 150) * IN_MILLISECONDS; break; } default: @@ -190,23 +180,21 @@ public: } // Here we check if we have available rift spots. - // If there are spots available, spawn a rift instantly. - if (!_availableRiftPositions.empty()) + if (_currentRift < 18) { - context.Repeat((_currentRift >= 13 ? 2min : 90s)); - } - else - { - context.Repeat(3s); + if (!_availableRiftPositions.empty()) + { + context.Repeat((_currentRift >= 13 ? 2min : 90s)); + } + else + { + context.Repeat(4s); + } } } - else - { - context.Repeat(3s); - } - - context.SetGroup(CONTEXT_GROUP_RIFTS); } + + context.SetGroup(CONTEXT_GROUP_RIFTS); }); } @@ -242,21 +230,19 @@ public: switch (creature->GetEntry()) { case NPC_TIME_RIFT: - _availableRiftPositions.push_back(creature->GetHomePosition()); - - if (GetBossState(DATA_AEONUS) != DONE) + if (_currentRift < 18) { - // Here we check if we have available rift spots. - // If there are spots available, spawn a rift instantly. - if (!_availableRiftPositions.empty()) - { - ScheduleNextPortal(4s); - } - else + if (!_availableRiftPositions.empty() && _availableRiftPositions.size() < 3) { ScheduleNextPortal((_currentRift >= 13 ? 2min : 90s)); } + else + { + ScheduleNextPortal(4s); + } } + + _availableRiftPositions.push_back(creature->GetHomePosition()); [[fallthrough]]; case NPC_CHRONO_LORD_DEJA: case NPC_INFINITE_CHRONO_LORD: @@ -291,8 +277,6 @@ public: ScheduleNextPortal(3s); - _timerToNextBoss = (instance->IsHeroic() ? 300 : 150) * IN_MILLISECONDS; - for (ObjectGuid const& guid : _encounterNPCs) { if (guid.GetEntry() == NPC_DP_BEAM_STALKER) @@ -463,24 +447,11 @@ public: void Update(uint32 diff) override { - if (_timerToNextBoss) - { - if (_timerToNextBoss <= diff) - { - _timerToNextBoss = 0; - } - else - { - _timerToNextBoss -= diff; - } - } - - _scheduler.Update(); + _scheduler.Update(diff); } protected: std::list _availableRiftPositions; - uint32 _timerToNextBoss; GuidSet _encounterNPCs; uint8 _currentRift; int8 _shieldPercent; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index cd8877d6c..cab4a86c8 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -269,7 +269,7 @@ struct npc_time_rift : public NullCreatureAI void JustSummoned(Creature* creature) override { - if (creature->GetEntry() != NPC_AEONUS) + if (creature->GetEntry() != NPC_AEONUS && _riftKeeperGUID.IsEmpty()) { _riftKeeperGUID = creature->GetGUID(); } From 0200a288cd89034a8b491253006a0b0055178deb Mon Sep 17 00:00:00 2001 From: Maelthyr <100411212+Maelthyrr@users.noreply.github.com> Date: Tue, 7 Mar 2023 13:23:33 +0100 Subject: [PATCH 066/159] refactor(Scripts/Northrend): conversion to std::chrono (#15269) Co-authored-by: Maelthyrr --- src/server/game/Entities/Unit/Unit.h | 2 +- src/server/game/Spells/Auras/SpellAuras.h | 2 +- .../AzjolNerub/AzjolNerub/boss_anubarak.cpp | 40 +- .../AzjolNerub/AzjolNerub/boss_hadronox.cpp | 32 +- .../boss_krikthir_the_gatewatcher.cpp | 32 +- .../AzjolNerub/ahnkahet/boss_amanitar.cpp | 30 +- .../AzjolNerub/ahnkahet/boss_elder_nadox.cpp | 14 +- .../ahnkahet/boss_herald_volazj.cpp | 12 +- .../ahnkahet/boss_jedoga_shadowseeker.cpp | 20 +- .../ahnkahet/boss_prince_taldaram.cpp | 16 +- .../ObsidianSanctum/boss_sartharion.cpp | 72 +-- .../boss_baltharus_the_warborn.cpp | 56 +- .../RubySanctum/boss_general_zarithrian.cpp | 28 +- .../RubySanctum/boss_halion.cpp | 80 +-- .../RubySanctum/boss_saviana_ragefire.cpp | 24 +- .../boss_argent_challenge.cpp | 70 +-- .../TrialOfTheChampion/boss_black_knight.cpp | 44 +- .../boss_grand_champions.cpp | 108 ++-- .../instance_trial_of_the_champion.cpp | 78 +-- .../boss_anubarak_trial.cpp | 61 +- .../boss_faction_champions.cpp | 579 +++++++++--------- .../TrialOfTheCrusader/boss_lord_jaraxxus.cpp | 50 +- .../boss_northrend_beasts.cpp | 110 ++-- .../TrialOfTheCrusader/boss_twin_valkyr.cpp | 26 +- .../instance_trial_of_the_crusader.cpp | 7 +- .../Northrend/DraktharonKeep/boss_dred.cpp | 28 +- .../Northrend/DraktharonKeep/boss_novos.cpp | 32 +- .../DraktharonKeep/boss_tharon_ja.cpp | 38 +- .../DraktharonKeep/boss_trollgore.cpp | 24 +- .../ForgeOfSouls/boss_bronjahm.cpp | 18 +- .../ForgeOfSouls/boss_devourer_of_souls.cpp | 24 +- .../ForgeOfSouls/forge_of_souls.cpp | 26 +- .../HallsOfReflection/boss_falric.cpp | 14 +- .../HallsOfReflection/boss_marwyn.cpp | 18 +- .../HallsOfReflection/halls_of_reflection.cpp | 294 ++++----- .../PitOfSaron/boss_forgemaster_garfrost.cpp | 18 +- .../PitOfSaron/boss_krickandick.cpp | 42 +- .../PitOfSaron/boss_scourgelord_tyrannus.cpp | 20 +- .../FrozenHalls/PitOfSaron/pit_of_saron.cpp | 114 ++-- .../Gundrak/boss_drakkari_colossus.cpp | 32 +- .../scripts/Northrend/Gundrak/boss_eck.cpp | 16 +- .../Northrend/Gundrak/boss_gal_darah.cpp | 26 +- .../Northrend/Gundrak/boss_moorabi.cpp | 22 +- .../Northrend/Gundrak/boss_slad_ran.cpp | 30 +- .../boss_blood_prince_council.cpp | 42 +- .../boss_blood_queen_lana_thel.cpp | 50 +- .../boss_deathbringer_saurfang.cpp | 52 +- .../IcecrownCitadel/boss_festergut.cpp | 32 +- .../boss_icecrown_gunship_battle.cpp | 90 +-- .../boss_lady_deathwhisper.cpp | 110 ++-- .../IcecrownCitadel/boss_lord_marrowgar.cpp | 36 +- .../boss_professor_putricide.cpp | 28 +- .../IcecrownCitadel/boss_rotface.cpp | 40 +- .../IcecrownCitadel/boss_sindragosa.cpp | 104 ++-- .../IcecrownCitadel/boss_the_lich_king.cpp | 216 +++---- .../boss_valithria_dreamwalker.cpp | 50 +- .../IcecrownCitadel/icecrown_citadel.cpp | 308 +++++----- .../instance_icecrown_citadel.cpp | 12 +- .../Northrend/Naxxramas/boss_anubrekhan.cpp | 14 +- .../Northrend/Naxxramas/boss_faerlina.cpp | 16 +- .../Naxxramas/boss_four_horsemen.cpp | 18 +- .../Northrend/Naxxramas/boss_gluth.cpp | 16 +- .../Northrend/Naxxramas/boss_gothik.cpp | 58 +- .../Northrend/Naxxramas/boss_grobbulus.cpp | 10 +- .../Northrend/Naxxramas/boss_heigan.cpp | 24 +- .../Northrend/Naxxramas/boss_kelthuzad.cpp | 66 +- .../Northrend/Naxxramas/boss_loatheb.cpp | 22 +- .../Northrend/Naxxramas/boss_maexxna.cpp | 24 +- .../scripts/Northrend/Naxxramas/boss_noth.cpp | 24 +- .../Northrend/Naxxramas/boss_patchwerk.cpp | 14 +- .../Northrend/Naxxramas/boss_razuvious.cpp | 12 +- .../Northrend/Naxxramas/boss_sapphiron.cpp | 40 +- .../Northrend/Naxxramas/boss_thaddius.cpp | 34 +- .../Naxxramas/instance_naxxramas.cpp | 10 +- .../Nexus/EyeOfEternity/boss_malygos.cpp | 120 ++-- .../Northrend/Nexus/Nexus/boss_anomalus.cpp | 20 +- .../boss_commander_stoutbeard_kolurg.cpp | 18 +- .../Nexus/Nexus/boss_keristrasza.cpp | 18 +- .../Nexus/Nexus/boss_magus_telestra.cpp | 30 +- .../Northrend/Nexus/Nexus/boss_ormorok.cpp | 26 +- .../Northrend/Nexus/Oculus/boss_drakos.cpp | 14 +- .../Northrend/Nexus/Oculus/boss_eregos.cpp | 18 +- .../Northrend/Nexus/Oculus/boss_urom.cpp | 14 +- .../Northrend/Nexus/Oculus/boss_varos.cpp | 20 +- .../HallsOfLightning/boss_bjarngrim.cpp | 48 +- .../Ulduar/HallsOfLightning/boss_ionar.cpp | 16 +- .../Ulduar/HallsOfLightning/boss_loken.cpp | 16 +- .../Ulduar/HallsOfLightning/boss_volkhan.cpp | 58 +- .../Ulduar/HallsOfStone/boss_krystallus.cpp | 22 +- .../HallsOfStone/boss_maiden_of_grief.cpp | 16 +- .../Ulduar/HallsOfStone/boss_sjonnir.cpp | 44 +- .../Ulduar/HallsOfStone/brann_bronzebeard.cpp | 50 +- .../Ulduar/boss_algalon_the_observer.cpp | 86 +-- .../Ulduar/Ulduar/boss_assembly_of_iron.cpp | 54 +- .../Northrend/Ulduar/Ulduar/boss_auriaya.cpp | 24 +- .../Ulduar/Ulduar/boss_flame_leviathan.cpp | 44 +- .../Northrend/Ulduar/Ulduar/boss_freya.cpp | 96 +-- .../Ulduar/Ulduar/boss_general_vezax.cpp | 32 +- .../Northrend/Ulduar/Ulduar/boss_hodir.cpp | 82 +-- .../Northrend/Ulduar/Ulduar/boss_ignis.cpp | 16 +- .../Northrend/Ulduar/Ulduar/boss_kologarn.cpp | 30 +- .../Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 176 +++--- .../Ulduar/Ulduar/boss_razorscale.cpp | 54 +- .../Northrend/Ulduar/Ulduar/boss_thorim.cpp | 210 +++---- .../Northrend/Ulduar/Ulduar/boss_xt002.cpp | 28 +- .../Ulduar/Ulduar/boss_yoggsaron.cpp | 40 +- .../Ulduar/Ulduar/instance_ulduar.cpp | 6 +- .../Northrend/Ulduar/Ulduar/ulduar.cpp | 26 +- .../UtgardeKeep/boss_ingvar_the_plunderer.cpp | 54 +- .../UtgardeKeep/UtgardeKeep/boss_keleseth.cpp | 26 +- .../UtgardeKeep/boss_skarvald_dalronn.cpp | 34 +- .../UtgardeKeep/UtgardeKeep/utgarde_keep.cpp | 12 +- .../UtgardePinnacle/boss_palehoof.cpp | 70 +-- .../UtgardePinnacle/boss_skadi.cpp | 32 +- .../UtgardePinnacle/boss_svala.cpp | 38 +- .../UtgardePinnacle/boss_ymiron.cpp | 32 +- .../VaultOfArchavon/boss_archavon.cpp | 16 +- .../Northrend/VaultOfArchavon/boss_emalon.cpp | 16 +- .../VaultOfArchavon/boss_koralon.cpp | 12 +- .../VaultOfArchavon/boss_toravon.cpp | 14 +- .../Northrend/VioletHold/boss_cyanigosa.cpp | 22 +- .../Northrend/VioletHold/boss_erekem.cpp | 42 +- .../Northrend/VioletHold/boss_lavanthor.cpp | 16 +- .../Northrend/VioletHold/boss_moragg.cpp | 10 +- .../Northrend/VioletHold/boss_xevozz.cpp | 16 +- .../Northrend/VioletHold/boss_zuramat.cpp | 12 +- .../VioletHold/instance_violet_hold.cpp | 27 +- .../Northrend/VioletHold/violet_hold.cpp | 8 +- .../scripts/Northrend/isle_of_conquest.cpp | 22 +- .../scripts/Northrend/zone_borean_tundra.cpp | 112 ++-- .../Northrend/zone_crystalsong_forest.cpp | 8 - src/server/scripts/Northrend/zone_dalaran.cpp | 32 +- .../scripts/Northrend/zone_dragonblight.cpp | 108 ++-- .../scripts/Northrend/zone_grizzly_hills.cpp | 40 +- .../scripts/Northrend/zone_howling_fjord.cpp | 12 - .../scripts/Northrend/zone_icecrown.cpp | 153 +++-- .../scripts/Northrend/zone_sholazar_basin.cpp | 26 +- .../scripts/Northrend/zone_storm_peaks.cpp | 22 +- .../scripts/Northrend/zone_wintergrasp.cpp | 16 +- src/server/scripts/Northrend/zone_zuldrak.cpp | 44 +- 140 files changed, 3306 insertions(+), 3371 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 6fa06c994..536d18dce 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1337,7 +1337,7 @@ public: void Update(uint32 time) override; - void setAttackTimer(WeaponAttackType type, int32 time) { m_attackTimer[type] = time; } + void setAttackTimer(WeaponAttackType type, int32 time) { m_attackTimer[type] = time; } /// @todo - Look to convert to std::chrono void resetAttackTimer(WeaponAttackType type = BASE_ATTACK); [[nodiscard]] int32 getAttackTimer(WeaponAttackType type) const { return m_attackTimer[type]; } [[nodiscard]] bool isAttackReady(WeaponAttackType type = BASE_ATTACK) const { return m_attackTimer[type] <= 0; } diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h index 47c134341..c1433c381 100644 --- a/src/server/game/Spells/Auras/SpellAuras.h +++ b/src/server/game/Spells/Auras/SpellAuras.h @@ -131,7 +131,7 @@ public: int32 CalcMaxDuration() const { return CalcMaxDuration(GetCaster()); } int32 CalcMaxDuration(Unit* caster) const; int32 GetDuration() const { return m_duration; } - void SetDuration(int32 duration, bool withMods = false); + void SetDuration(int32 duration, bool withMods = false); /// @todo - Look to convert to std::chrono void RefreshDuration(bool withMods = false); void RefreshTimers(bool periodicReset = false); void RefreshTimersWithMods(); diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 8e1b945f9..24e9b2d5d 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -110,7 +110,7 @@ class boss_anub_arak : public CreatureScript if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -133,13 +133,13 @@ class boss_anub_arak : public CreatureScript Talk(SAY_AGGRO); instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); - events.ScheduleEvent(EVENT_CARRION_BEETELS, 6500); - events.ScheduleEvent(EVENT_LEECHING_SWARM, 20000); - events.ScheduleEvent(EVENT_POUND, 15000); - events.ScheduleEvent(EVENT_CHECK_HEALTH_75, 1000); - events.ScheduleEvent(EVENT_CHECK_HEALTH_50, 1000); - events.ScheduleEvent(EVENT_CHECK_HEALTH_25, 1000); - events.ScheduleEvent(EVENT_CLOSE_DOORS, 5000); + events.ScheduleEvent(EVENT_CARRION_BEETELS, 6500ms); + events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s); + events.ScheduleEvent(EVENT_POUND, 15s); + events.ScheduleEvent(EVENT_CHECK_HEALTH_75, 1s); + events.ScheduleEvent(EVENT_CHECK_HEALTH_50, 1s); + events.ScheduleEvent(EVENT_CHECK_HEALTH_25, 1s); + events.ScheduleEvent(EVENT_CLOSE_DOORS, 5s); } void SummonHelpers(float x, float y, float z, uint32 spellId) @@ -164,12 +164,12 @@ class boss_anub_arak : public CreatureScript break; case EVENT_CARRION_BEETELS: me->CastSpell(me, SPELL_CARRION_BEETLES, false); - events.ScheduleEvent(EVENT_CARRION_BEETELS, 25000); + events.ScheduleEvent(EVENT_CARRION_BEETELS, 25s); break; case EVENT_LEECHING_SWARM: Talk(SAY_LOCUST); me->CastSpell(me, SPELL_LEECHING_SWARM, false); - events.ScheduleEvent(EVENT_LEECHING_SWARM, 20000); + events.ScheduleEvent(EVENT_LEECHING_SWARM, 20s); break; case EVENT_POUND: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f)) @@ -177,10 +177,10 @@ class boss_anub_arak : public CreatureScript me->CastSpell(me, SPELL_SELF_ROOT, true); me->DisableRotate(true); me->SendMovementFlagUpdate(); - events.ScheduleEvent(EVENT_ENABLE_ROTATE, 3300); + events.ScheduleEvent(EVENT_ENABLE_ROTATE, 3300ms); me->CastSpell(target, SPELL_POUND, false); } - events.ScheduleEvent(EVENT_POUND, 18000); + events.ScheduleEvent(EVENT_POUND, 18s); break; case EVENT_ENABLE_ROTATE: me->RemoveAurasDueToSpell(SPELL_SELF_ROOT); @@ -197,16 +197,16 @@ class boss_anub_arak : public CreatureScript me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); events.DelayEvents(46000, 0); - events.ScheduleEvent(EVENT_EMERGE, 45000); - events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 2000); - events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4000); - events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 15000); - events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 20000); - events.ScheduleEvent(EVENT_SUMMON_DARTER, 30000); - events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 35000); + events.ScheduleEvent(EVENT_EMERGE, 45s); + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 2s); + events.ScheduleEvent(EVENT_SUMMON_GUARDIAN, 4s); + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 15s); + events.ScheduleEvent(EVENT_SUMMON_VENOMANCER, 20s); + events.ScheduleEvent(EVENT_SUMMON_DARTER, 30s); + events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 35s); break; } - events.ScheduleEvent(eventId, 500); + events.ScheduleEvent(eventId, 500ms); break; case EVENT_EMERGE: me->CastSpell(me, SPELL_EMERGE, true); diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp index 147206777..4f5103a45 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp @@ -97,10 +97,10 @@ public: { instance->SetBossState(DATA_HADRONOX_EVENT, IN_PROGRESS); me->setActive(true); - events.ScheduleEvent(EVENT_HADRONOX_MOVE1, 20000); - events.ScheduleEvent(EVENT_HADRONOX_MOVE2, 40000); - events.ScheduleEvent(EVENT_HADRONOX_MOVE3, 60000); - events.ScheduleEvent(EVENT_HADRONOX_MOVE4, 80000); + events.ScheduleEvent(EVENT_HADRONOX_MOVE1, 20s); + events.ScheduleEvent(EVENT_HADRONOX_MOVE2, 40s); + events.ScheduleEvent(EVENT_HADRONOX_MOVE3, 60s); + events.ScheduleEvent(EVENT_HADRONOX_MOVE4, 80s); } } @@ -139,10 +139,10 @@ public: void JustEngagedWith(Unit*) override { - events.RescheduleEvent(EVENT_HADRONOX_ACID, 10000); - events.RescheduleEvent(EVENT_HADRONOX_LEECH, 4000); - events.RescheduleEvent(EVENT_HADRONOX_PIERCE, 1000); - events.RescheduleEvent(EVENT_HADRONOX_GRAB, 15000); + events.RescheduleEvent(EVENT_HADRONOX_ACID, 10s); + events.RescheduleEvent(EVENT_HADRONOX_LEECH, 4s); + events.RescheduleEvent(EVENT_HADRONOX_PIERCE, 1s); + events.RescheduleEvent(EVENT_HADRONOX_GRAB, 15s); } bool AnyPlayerValid() const @@ -183,20 +183,20 @@ public: { case EVENT_HADRONOX_PIERCE: me->CastSpell(me->GetVictim(), SPELL_PIERCE_ARMOR, false); - events.ScheduleEvent(EVENT_HADRONOX_PIERCE, 8000); + events.ScheduleEvent(EVENT_HADRONOX_PIERCE, 8s); break; case EVENT_HADRONOX_ACID: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, false)) me->CastSpell(target, SPELL_ACID_CLOUD, false); - events.ScheduleEvent(EVENT_HADRONOX_ACID, 25000); + events.ScheduleEvent(EVENT_HADRONOX_ACID, 25s); break; case EVENT_HADRONOX_LEECH: me->CastSpell(me, SPELL_LEECH_POISON, false); - events.ScheduleEvent(EVENT_HADRONOX_LEECH, 12000); + events.ScheduleEvent(EVENT_HADRONOX_LEECH, 12s); break; case EVENT_HADRONOX_GRAB: me->CastSpell(me, SPELL_WEB_GRAB, false); - events.ScheduleEvent(EVENT_HADRONOX_GRAB, 25000); + events.ScheduleEvent(EVENT_HADRONOX_GRAB, 25s); break; case EVENT_HADRONOX_MOVE4: me->CastSpell(me, SPELL_WEB_FRONT_DOORS, true); @@ -281,8 +281,8 @@ public: Talk(SAY_CRUSHER_AGGRO); } - events.ScheduleEvent(EVENT_CRUSHER_SMASH, 8000, 0, 0); - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); + events.ScheduleEvent(EVENT_CRUSHER_SMASH, 8s, 0, 0); + events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s); } void UpdateAI(uint32 diff) override @@ -298,7 +298,7 @@ public: { case EVENT_CRUSHER_SMASH: me->CastSpell(me->GetVictim(), SPELL_SMASH, false); - events.ScheduleEvent(EVENT_CRUSHER_SMASH, 15000); + events.ScheduleEvent(EVENT_CRUSHER_SMASH, 15s); break; case EVENT_CHECK_HEALTH: if (me->HealthBelowPct(30)) @@ -307,7 +307,7 @@ public: me->CastSpell(me, SPELL_FRENZY, false); break; } - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); + events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s); break; } diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp index 7fc1c7d3a..27bd5612e 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp @@ -105,17 +105,17 @@ public: if (events.Empty() && who->GetPositionZ() < 785.0f) { - events2.ScheduleEvent(EVENT_KRIK_START_WAVE, 10000); - events2.ScheduleEvent(EVENT_KRIK_START_WAVE, 40000); - events2.ScheduleEvent(EVENT_KRIK_START_WAVE, 70000); - events2.ScheduleEvent(EVENT_KRIK_ENTER_COMBAT, 100000); - events2.ScheduleEvent(EVENT_KRIK_CHECK_EVADE, 5000); + events2.ScheduleEvent(EVENT_KRIK_START_WAVE, 10s); + events2.ScheduleEvent(EVENT_KRIK_START_WAVE, 40s); + events2.ScheduleEvent(EVENT_KRIK_START_WAVE, 70s); + events2.ScheduleEvent(EVENT_KRIK_ENTER_COMBAT, 100s); + events2.ScheduleEvent(EVENT_KRIK_CHECK_EVADE, 5s); - events.ScheduleEvent(EVENT_KRIK_HEALTH_CHECK, 1000); - events.ScheduleEvent(EVENT_KRIK_MIND_FLAY, 13000); - events.ScheduleEvent(EVENT_KRIK_SUMMON, 17000); - events.ScheduleEvent(EVENT_KRIK_CURSE, 8000); - events.ScheduleEvent(EVENT_CALL_ADDS, 1000); + events.ScheduleEvent(EVENT_KRIK_HEALTH_CHECK, 1s); + events.ScheduleEvent(EVENT_KRIK_MIND_FLAY, 13s); + events.ScheduleEvent(EVENT_KRIK_SUMMON, 17s); + events.ScheduleEvent(EVENT_KRIK_CURSE, 8s); + events.ScheduleEvent(EVENT_CALL_ADDS, 1s); me->setActive(true); } } @@ -145,7 +145,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -178,7 +178,7 @@ public: EnterEvadeMode(); return; } - events2.ScheduleEvent(EVENT_KRIK_CHECK_EVADE, 5000); + events2.ScheduleEvent(EVENT_KRIK_CHECK_EVADE, 5s); break; } @@ -197,21 +197,21 @@ public: me->CastSpell(me, SPELL_FRENZY, true); break; } - events.ScheduleEvent(EVENT_KRIK_HEALTH_CHECK, 1000); + events.ScheduleEvent(EVENT_KRIK_HEALTH_CHECK, 1s); break; case EVENT_KRIK_SUMMON: Talk(SAY_SWARM); me->CastSpell(me, SPELL_SWARM, false); - events.ScheduleEvent(EVENT_KRIK_SUMMON, 20000); + events.ScheduleEvent(EVENT_KRIK_SUMMON, 20s); break; case EVENT_KRIK_MIND_FLAY: me->CastSpell(me->GetVictim(), SPELL_MIND_FLAY, false); - events.ScheduleEvent(EVENT_KRIK_MIND_FLAY, 15000); + events.ScheduleEvent(EVENT_KRIK_MIND_FLAY, 15s); break; case EVENT_KRIK_CURSE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) me->CastSpell(target, SPELL_CURSE_OF_FATIGUE, true); - events.ScheduleEvent(EVENT_KRIK_CURSE, 10000); + events.ScheduleEvent(EVENT_KRIK_CURSE, 10s); break; case EVENT_CALL_ADDS: summons.DoZoneInCombat(); diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp index 28cdc0f68..ea496cda9 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_amanitar.cpp @@ -116,11 +116,11 @@ struct boss_amanitar : public BossAI void JustEngagedWith(Unit* /*attacker*/) override { - events.ScheduleEvent(EVENT_ROOTS, urand(5000, 9000)); - events.ScheduleEvent(EVENT_BASH, urand(10000, 14000)); - events.ScheduleEvent(EVENT_BOLT, urand(15000, 20000)); - events.ScheduleEvent(EVENT_MINI, 1000); - events.ScheduleEvent(EVENT_RESPAWN, 40000, 60000); + events.ScheduleEvent(EVENT_ROOTS, 5s, 9s); + events.ScheduleEvent(EVENT_BASH, 10s, 14s); + events.ScheduleEvent(EVENT_BOLT, 15s, 20s); + events.ScheduleEvent(EVENT_MINI, 1s); + events.ScheduleEvent(EVENT_RESPAWN, 40s, 60s); } void JustDied(Unit* /*killer*/) override @@ -158,7 +158,7 @@ struct boss_amanitar : public BossAI _mushroomsDeque.pop_front(); } - events.RepeatEvent(urand(40000, 60000)); + events.Repeat(40s, 60s); break; } case EVENT_ROOTS: @@ -168,13 +168,13 @@ struct boss_amanitar : public BossAI DoCast(pTarget, SPELL_ENTANGLING_ROOTS, false); } - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; } case EVENT_BASH: { DoCastVictim(SPELL_BASH, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; } case EVENT_BOLT: @@ -184,13 +184,13 @@ struct boss_amanitar : public BossAI DoCast(pTarget, SPELL_VENOM_BOLT_VOLLEY, false); } - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; } case EVENT_REMOVE_MUSHROOM_POWER: { DoCastAOE(SPELL_REMOVE_MUSHROOM_POWER, true); - events.RescheduleEvent(EVENT_MINI, 1000); + events.RescheduleEvent(EVENT_MINI, 1s); break; } case EVENT_MINI: @@ -208,7 +208,7 @@ struct boss_amanitar : public BossAI { DoCastSelf(SPELL_REMOVE_MUSHROOM_POWER, true); DoCastAOE(SPELL_MINI); - events.RescheduleEvent(EVENT_REMOVE_MUSHROOM_POWER, 29000); + events.RescheduleEvent(EVENT_REMOVE_MUSHROOM_POWER, 29s); } else { @@ -261,11 +261,11 @@ struct npc_amanitar_mushrooms : public ScriptedAI DoCastSelf(SPELL_HEALTHY_MUSHROOM_VISUAL_AURA, true); } - events.ScheduleEvent(EVENT_GROW, 800); + events.ScheduleEvent(EVENT_GROW, 800ms); if (me->GetEntry() == NPC_POISONOUS_MUSHROOM) { - events.ScheduleEvent(EVENT_CHECK_PLAYER, 250); + events.ScheduleEvent(EVENT_CHECK_PLAYER, 250ms); } } @@ -300,11 +300,11 @@ struct npc_amanitar_mushrooms : public ScriptedAI DoCastSelf(SPELL_POISONOUS_MUSHROOM_VISUAL_AREA); DoCastSelf(SPELL_POISONOUS_MUSHROOM_POISON_CLOUD); DoCastSelf(SPELL_SHRINK); - events.ScheduleEvent(EVENT_KILLSELF, 4000); + events.ScheduleEvent(EVENT_KILLSELF, 4s); } else { - events.RepeatEvent(250); + events.Repeat(250ms); } break; diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp index ad2412fc9..e974a18c6 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp @@ -94,13 +94,13 @@ struct boss_elder_nadox : public BossAI _JustEngagedWith(); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SWARMER, 10000); - events.ScheduleEvent(EVENT_CHECK_HOME, 2000); - events.ScheduleEvent(EVENT_PLAGUE, urand(5000, 8000)); + events.ScheduleEvent(EVENT_SWARMER, 10s); + events.ScheduleEvent(EVENT_CHECK_HOME, 2s); + events.ScheduleEvent(EVENT_PLAGUE, 5s, 8s); if (IsHeroic()) { - events.ScheduleEvent(EVENT_BROOD_RAGE, 5000); + events.ScheduleEvent(EVENT_BROOD_RAGE, 5s); } // Cache eggs @@ -198,19 +198,19 @@ struct boss_elder_nadox : public BossAI if (Creature* pSwarmer = me->FindNearestCreature(NPC_AHNKAHAR_SWARMER, 40, true)) DoCast(pSwarmer, SPELL_BROOD_RAGE_H, true); - events.RepeatEvent(10000); + events.Repeat(10s); break; } case EVENT_PLAGUE: { DoCastVictim(SPELL_BROOD_PLAGUE, false); - events.RepeatEvent(urand(12000, 17000)); + events.Repeat(12s, 17s); break; } case EVENT_SWARMER: { SummonHelpers(true); - events.RepeatEvent(10000); + events.Repeat(10s); break; } case EVENT_CHECK_HOME: diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp index de2878b81..1dc0dfa00 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_herald_volazj.cpp @@ -115,9 +115,9 @@ struct boss_volazj : public BossAI void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); - events.ScheduleEvent(EVENT_HERALD_MIND_FLAY, 8000); - events.ScheduleEvent(EVENT_HERALD_SHADOW, 5000); - events.ScheduleEvent(EVENT_HERALD_SHIVER, 15000); + events.ScheduleEvent(EVENT_HERALD_MIND_FLAY, 8s); + events.ScheduleEvent(EVENT_HERALD_SHADOW, 5s); + events.ScheduleEvent(EVENT_HERALD_SHIVER, 15s); Talk(SAY_AGGRO); DoCastSelf(SPELL_WHISPER_AGGRO); instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT); @@ -241,13 +241,13 @@ struct boss_volazj : public BossAI case EVENT_HERALD_MIND_FLAY: { DoCastVictim(SPELL_MIND_FLAY, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; } case EVENT_HERALD_SHADOW: { DoCastVictim(SPELL_SHADOW_BOLT_VOLLEY, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; } case EVENT_HERALD_SHIVER: @@ -257,7 +257,7 @@ struct boss_volazj : public BossAI DoCast(pTarget, SPELL_SHIVER, false); } - events.RepeatEvent(15000); + events.Repeat(15s); break; } } 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 3509f5776..ac0277874 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp @@ -280,7 +280,7 @@ struct boss_jedoga_shadowseeker : public BossAI { DoCastSelf(SPELL_GIFT_OF_THE_HERALD, true); } - events.ScheduleEvent(EVENT_JEDOGA_MOVE_DOWN, 1000, 0, PHASE_RITUAL); + events.ScheduleEvent(EVENT_JEDOGA_MOVE_DOWN, 1s, 0, PHASE_RITUAL); break; } } @@ -299,7 +299,7 @@ struct boss_jedoga_shadowseeker : public BossAI me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); events.SetPhase(PHASE_RITUAL); - events.ScheduleEvent(EVENT_JEDOGA_PREPARE_RITUAL, 1000, 0, PHASE_RITUAL); + events.ScheduleEvent(EVENT_JEDOGA_PREPARE_RITUAL, 1s, 0, PHASE_RITUAL); ritualTriggered = true; return; } @@ -405,7 +405,7 @@ struct boss_jedoga_shadowseeker : public BossAI { me->SetFacingTo(5.66f); DoCastSelf(SPELL_HOVER_FALL); - events.ScheduleEvent(EVENT_JEDOGA_MOVE_UP, 1000, 0, PHASE_RITUAL); + events.ScheduleEvent(EVENT_JEDOGA_MOVE_UP, 1s, 0, PHASE_RITUAL); break; } case POINT_INITIAL: @@ -461,7 +461,7 @@ struct boss_jedoga_shadowseeker : public BossAI case EVENT_JEDOGA_CYCLONE: { DoCastSelf(DUNGEON_MODE(SPELL_CYCLONE_STRIKE, SPELL_CYCLONE_STRIKE_H), false); - events.RepeatEvent(urand(10000, 14000)); + events.Repeat(10s, 14s); break; } case EVENT_JEDOGA_LIGHTNING_BOLT: @@ -470,7 +470,7 @@ struct boss_jedoga_shadowseeker : public BossAI { DoCast(pTarget, DUNGEON_MODE(SPELL_LIGHTNING_BOLT, SPELL_LIGHTNING_BOLT_H), false); } - events.RepeatEvent(urand(11000, 15000)); + events.Repeat(11s, 15s); break; } case EVENT_JEDOGA_THUNDERSHOCK: @@ -480,7 +480,7 @@ struct boss_jedoga_shadowseeker : public BossAI DoCast(pTarget, DUNGEON_MODE(SPELL_THUNDERSHOCK, SPELL_THUNDERSHOCK_H), false); } - events.RepeatEvent(urand(16000, 22000)); + events.Repeat(16s, 22s); break; } // Ritual phase @@ -534,9 +534,9 @@ private: void ReschedulleCombatEvents() { events.SetPhase(PHASE_NORMAL); - events.RescheduleEvent(EVENT_JEDOGA_CYCLONE, 3000, 0, PHASE_NORMAL); - events.RescheduleEvent(EVENT_JEDOGA_LIGHTNING_BOLT, 7000, 0, PHASE_NORMAL); - events.RescheduleEvent(EVENT_JEDOGA_THUNDERSHOCK, 12000, 0, PHASE_NORMAL); + events.RescheduleEvent(EVENT_JEDOGA_CYCLONE, 3s, 0, PHASE_NORMAL); + events.RescheduleEvent(EVENT_JEDOGA_LIGHTNING_BOLT, 7s, 0, PHASE_NORMAL); + events.RescheduleEvent(EVENT_JEDOGA_THUNDERSHOCK, 12s, 0, PHASE_NORMAL); } void DespawnOOCSummons() @@ -592,7 +592,7 @@ struct npc_twilight_volunteer : public ScriptedAI Talk(SAY_CHOSEN); me->SetStandState(UNIT_STAND_STATE_STAND); - events.ScheduleEvent(EVENT_RITUAL_BEGIN_MOVE, 1500); + events.ScheduleEvent(EVENT_RITUAL_BEGIN_MOVE, 1500ms); } } diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp index a4a50d1d1..bf04a4ad4 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_prince_taldaram.cpp @@ -383,7 +383,7 @@ struct boss_taldaram : public BossAI case EVENT_PRINCE_BLOODTHIRST: { DoCastSelf(SPELL_BLOODTHIRST); - events.RepeatEvent(10000); + events.Repeat(10s); break; } case EVENT_PRINCE_FLAME_SPHERES: @@ -396,15 +396,15 @@ struct boss_taldaram : public BossAI if (!events.GetNextEventTime(EVENT_PRINCE_VANISH)) { - events.RescheduleEvent(EVENT_PRINCE_VANISH, 14000); + events.RescheduleEvent(EVENT_PRINCE_VANISH, 14s); } else { // Make sure that Vanish won't get triggered at same time as sphere summon - events.DelayEvents(4000); + events.DelayEvents(4s); } - events.RepeatEvent(15000); + events.Repeat(15s); break; } case EVENT_PRINCE_VANISH: @@ -439,7 +439,7 @@ struct boss_taldaram : public BossAI events.CancelEvent(EVENT_PRINCE_FLAME_SPHERES); events.CancelEvent(EVENT_PRINCE_BLOODTHIRST); - events.ScheduleEvent(EVENT_PRINCE_VANISH_RUN, 2499); + events.ScheduleEvent(EVENT_PRINCE_VANISH_RUN, 2499ms); } break; } @@ -453,7 +453,7 @@ struct boss_taldaram : public BossAI me->RemoveAura(SPELL_VANISH); } - events.ScheduleEvent(EVENT_PRINCE_RESCHEDULE, 20000); + events.ScheduleEvent(EVENT_PRINCE_RESCHEDULE, 20s); break; } case EVENT_PRINCE_RESCHEDULE: @@ -483,8 +483,8 @@ private: void ScheduleCombatEvents() { events.Reset(); - events.RescheduleEvent(EVENT_PRINCE_FLAME_SPHERES, 10000); - events.RescheduleEvent(EVENT_PRINCE_BLOODTHIRST, 10000); + events.RescheduleEvent(EVENT_PRINCE_FLAME_SPHERES, 10s); + events.RescheduleEvent(EVENT_PRINCE_BLOODTHIRST, 10s); vanishTarget_GUID.Clear(); vanishDamage = 0; } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index 689160f5a..405a4953f 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -291,15 +291,15 @@ public: Talk(SAY_SARTHARION_AGGRO); // Combat events - events.ScheduleEvent(EVENT_SARTHARION_CAST_CLEAVE, 7000); - events.ScheduleEvent(EVENT_SARTHARION_CAST_FLAME_BREATH, 15000); - events.ScheduleEvent(EVENT_SARTHARION_CAST_TAIL_LASH, 11000); + events.ScheduleEvent(EVENT_SARTHARION_CAST_CLEAVE, 7s); + events.ScheduleEvent(EVENT_SARTHARION_CAST_FLAME_BREATH, 15s); + events.ScheduleEvent(EVENT_SARTHARION_CAST_TAIL_LASH, 11s); // Extra events - extraEvents.ScheduleEvent(EVENT_SARTHARION_SUMMON_LAVA, 20000); - extraEvents.ScheduleEvent(EVENT_SARTHARION_LAVA_STRIKE, 5000); - extraEvents.ScheduleEvent(EVENT_SARTHARION_BERSERK, 900000); - extraEvents.ScheduleEvent(EVENT_SARTHARION_BOUNDARY, 250); + extraEvents.ScheduleEvent(EVENT_SARTHARION_SUMMON_LAVA, 20s); + extraEvents.ScheduleEvent(EVENT_SARTHARION_LAVA_STRIKE, 5s); + extraEvents.ScheduleEvent(EVENT_SARTHARION_BERSERK, 15min); + extraEvents.ScheduleEvent(EVENT_SARTHARION_BOUNDARY, 250ms); // Store dragons for (uint8 i = 0; i < MAX_DRAGONS; ++i) @@ -321,19 +321,19 @@ public: case DATA_TENEBRON: { dragon->CastSpell(dragon, SPELL_POWER_OF_TENEBRON, true); - extraEvents.ScheduleEvent(EVENT_SARTHARION_CALL_TENEBRON, 10000); + extraEvents.ScheduleEvent(EVENT_SARTHARION_CALL_TENEBRON, 10s); break; } case DATA_SHADRON: { dragon->CastSpell(dragon, SPELL_POWER_OF_SHADRON, true); - extraEvents.ScheduleEvent(EVENT_SARTHARION_CALL_SHADRON, 65000); + extraEvents.ScheduleEvent(EVENT_SARTHARION_CALL_SHADRON, 65s); break; } case DATA_VESPERON: { dragon->CastSpell(dragon, SPELL_POWER_OF_VESPERON, true); - extraEvents.ScheduleEvent(EVENT_SARTHARION_CALL_VESPERON, 115000); + extraEvents.ScheduleEvent(EVENT_SARTHARION_CALL_VESPERON, 115s); break; } } @@ -469,7 +469,7 @@ public: } else { - extraEvents.RepeatEvent(250); + extraEvents.Repeat(250ms); } break; } @@ -481,7 +481,7 @@ public: } SummonLavaWaves(); - extraEvents.RepeatEvent(25000); + extraEvents.Repeat(25s); return; } case EVENT_SARTHARION_START_LAVA: @@ -542,19 +542,19 @@ public: case EVENT_SARTHARION_CAST_CLEAVE: { DoCastVictim(SPELL_SARTHARION_CLEAVE, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; } case EVENT_SARTHARION_CAST_FLAME_BREATH: { DoCastVictim(SPELL_SARTHARION_FLAME_BREATH, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; } case EVENT_SARTHARION_CAST_TAIL_LASH: { DoCastSelf(SPELL_SARTHARION_TAIL_LASH, false); - events.RepeatEvent(18000); + events.Repeat(18s); break; } case EVENT_SARTHARION_LAVA_STRIKE: @@ -617,8 +617,8 @@ public: { summons.RemoveNotExisting(); Talk(WHISPER_LAVA_CHURN); - extraEvents.ScheduleEvent(EVENT_SARTHARION_START_LAVA, 2000); - extraEvents.ScheduleEvent(EVENT_SARTHARION_FINISH_LAVA, 9000); + extraEvents.ScheduleEvent(EVENT_SARTHARION_START_LAVA, 2s); + extraEvents.ScheduleEvent(EVENT_SARTHARION_FINISH_LAVA, 9s); // Send wave from left if (lastLavaSide == LAVA_RIGHT_SIDE) @@ -743,7 +743,7 @@ struct boss_sartharion_dragonAI : public BossAI if (param == ACTION_CALL_DRAGON && !isCalledBySartharion) { isCalledBySartharion = true; - extraEvents.RescheduleEvent(EVENT_MINIDRAKE_SPEECH, 4000); + extraEvents.RescheduleEvent(EVENT_MINIDRAKE_SPEECH, 4s); } } @@ -1037,9 +1037,9 @@ public: summons2.DespawnAll(); } - events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_FISSURE, 20000); - events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_BREATH, 10000); - events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 15000); + events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_FISSURE, 20s); + events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_BREATH, 10s); + events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 15s); } void JustSummoned(Creature* summon) override @@ -1112,8 +1112,8 @@ public: instance->DoAction(ACTION_ADD_PORTAL); } - events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2000); - events.RepeatEvent(60000); + events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2s); + events.Repeat(60s); break; } case EVENT_MINIBOSS_SPAWN_HELPERS: @@ -1135,7 +1135,7 @@ public: } } - events.ScheduleEvent(EVENT_MINIBOSS_HATCH_EGGS, 25000); + events.ScheduleEvent(EVENT_MINIBOSS_HATCH_EGGS, 25s); break; } case EVENT_MINIBOSS_HATCH_EGGS: @@ -1215,9 +1215,9 @@ public: void Reset() override { boss_sartharion_dragonAI::Reset(); - events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_FISSURE, 20000); - events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_BREATH, 10000); - events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 15000); + events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_FISSURE, 20s); + events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_BREATH, 10s); + events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 15s); } void SummonedCreatureDies(Creature* /*summon*/, Unit* /*summon*/) override @@ -1241,7 +1241,7 @@ public: me->RemoveAura(SPELL_GIFT_OF_TWILIGHT_SHADOW); } - events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 30000); + events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 30s); } void HandleExtraEvent(uint32 const eventId) override @@ -1295,7 +1295,7 @@ public: instance->DoAction(ACTION_ADD_PORTAL); } - events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2000); + events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2s); break; } case EVENT_MINIBOSS_SPAWN_HELPERS: @@ -1340,9 +1340,9 @@ public: void Reset() override { boss_sartharion_dragonAI::Reset(); - events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_FISSURE, 20000); - events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_BREATH, 10000); - events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 30000); + events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_FISSURE, 20s); + events.ScheduleEvent(EVENT_MINIBOSS_SHADOW_BREATH, 10s); + events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 30s); } void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override @@ -1357,7 +1357,7 @@ public: instance->DoAction(ACTION_CLEAR_PORTAL); } - events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 30000); + events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 30s); } void HandleExtraEvent(uint32 const eventId) override @@ -1383,7 +1383,7 @@ public: } DoCastVictim(SPELL_SHADOW_BREATH, false); - events.RepeatEvent(17500); + events.Repeat(17s + 500ms); break; } case EVENT_MINIBOSS_SHADOW_FISSURE: @@ -1393,7 +1393,7 @@ public: DoCast(target, SPELL_SHADOW_FISSURE, false); } - events.RepeatEvent(22500); + events.Repeat(22s + 500ms); break; } case EVENT_MINIBOSS_OPEN_PORTAL: @@ -1412,7 +1412,7 @@ public: instance->DoAction(ACTION_ADD_PORTAL); } - events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2000); + events.ScheduleEvent(EVENT_MINIBOSS_SPAWN_HELPERS, 2s); break; } case EVENT_MINIBOSS_SPAWN_HELPERS: diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp index aa0a0b7b3..ec4498925 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp @@ -154,7 +154,7 @@ public: { me->CastSpell(me, SPELL_REPELLING_WAVE, false); me->CastSpell(me, SPELL_CLEAR_DEBUFFS, false); - events.ScheduleEvent(EVENT_SUMMON_CLONE, 1000); + events.ScheduleEvent(EVENT_SUMMON_CLONE, 1s); } } @@ -164,15 +164,15 @@ public: BossAI::JustEngagedWith(who); me->InterruptNonMeleeSpells(false); - events.ScheduleEvent(EVENT_CLEAVE, 11000); - events.ScheduleEvent(EVENT_ENERVATING_BRAND, 13000); - events.ScheduleEvent(EVENT_BLADE_TEMPEST, 15000); + events.ScheduleEvent(EVENT_CLEAVE, 11s); + events.ScheduleEvent(EVENT_ENERVATING_BRAND, 13s); + events.ScheduleEvent(EVENT_BLADE_TEMPEST, 15s); if (!Is25ManRaid()) - events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1000); + events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1s); else { - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); - events.ScheduleEvent(EVENT_CHECK_HEALTH3, 1000); + events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1s); + events.ScheduleEvent(EVENT_CHECK_HEALTH3, 1s); } } @@ -190,7 +190,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -216,17 +216,17 @@ public: { case EVENT_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - events.ScheduleEvent(EVENT_CLEAVE, 24000); + events.ScheduleEvent(EVENT_CLEAVE, 24s); break; case EVENT_BLADE_TEMPEST: me->CastSpell(me, SPELL_BLADE_TEMPEST, false); - events.ScheduleEvent(EVENT_BLADE_TEMPEST, 24000); + events.ScheduleEvent(EVENT_BLADE_TEMPEST, 24s); break; case EVENT_ENERVATING_BRAND: for (uint8 i = 0; i < RAID_MODE(2, 4, 2, 4); i++) if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true, true, -SPELL_ENERVATING_BRAND)) me->CastSpell(target, SPELL_ENERVATING_BRAND, true); - events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26000); + events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26s); break; case EVENT_CHECK_HEALTH1: if (me->HealthBelowPct(50)) @@ -234,7 +234,7 @@ public: DoAction(ACTION_CLONE); break; } - events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1000); + events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1s); break; case EVENT_CHECK_HEALTH2: if (me->HealthBelowPct(66)) @@ -242,7 +242,7 @@ public: DoAction(ACTION_CLONE); break; } - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); + events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1s); break; case EVENT_CHECK_HEALTH3: if (me->HealthBelowPct(33)) @@ -250,7 +250,7 @@ public: DoAction(ACTION_CLONE); break; } - events.ScheduleEvent(EVENT_CHECK_HEALTH3, 1000); + events.ScheduleEvent(EVENT_CHECK_HEALTH3, 1s); break; case EVENT_SUMMON_CLONE: me->CastSpell(me, SPELL_CLONE, false); @@ -285,9 +285,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { _events.Reset(); - _events.ScheduleEvent(EVENT_CLEAVE, urand(5000, 10000)); - _events.ScheduleEvent(EVENT_BLADE_TEMPEST, urand(18000, 25000)); - _events.ScheduleEvent(EVENT_ENERVATING_BRAND, urand(10000, 15000)); + _events.ScheduleEvent(EVENT_CLEAVE, 5s, 10s); + _events.ScheduleEvent(EVENT_BLADE_TEMPEST, 18s, 25s); + _events.ScheduleEvent(EVENT_ENERVATING_BRAND, 10s, 15s); } void UpdateAI(uint32 diff) override @@ -303,17 +303,17 @@ public: { case EVENT_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - _events.ScheduleEvent(EVENT_CLEAVE, 24000); + _events.ScheduleEvent(EVENT_CLEAVE, 24s); break; case EVENT_BLADE_TEMPEST: me->CastSpell(me, SPELL_BLADE_TEMPEST, false); - _events.ScheduleEvent(EVENT_BLADE_TEMPEST, 24000); + _events.ScheduleEvent(EVENT_BLADE_TEMPEST, 24s); break; case EVENT_ENERVATING_BRAND: for (uint8 i = 0; i < RAID_MODE(4, 10, 4, 10); i++) if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true, true, -SPELL_ENERVATING_BRAND)) me->CastSpell(target, SPELL_ENERVATING_BRAND, true); - _events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26000); + _events.ScheduleEvent(EVENT_ENERVATING_BRAND, 26s); break; } @@ -391,14 +391,14 @@ public: me->setActive(true); _isIntro = false; - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_0, 6000); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_1, 22000); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_2, 31000); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_3, 38000); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_4, 48000); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_5, 57000); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_6, 67000); - _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_7, 75000); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_0, 6s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_1, 22s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_2, 31s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_3, 38s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_4, 48s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_5, 57s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_6, 67s); + _events.ScheduleEvent(EVENT_XERESTRASZA_EVENT_7, 75s); } else if (action == ACTION_INTRO_BALTHARUS && !_introDone && me->IsAlive()) { diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp index ac19f4e3f..281f25526 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp @@ -116,11 +116,11 @@ public: BossAI::JustEngagedWith(who); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_CLEAVE, 9000); - events.ScheduleEvent(EVENT_INTIDMDATING_ROAR, 14000); - events.ScheduleEvent(EVENT_SUMMON_ADDS1, 18000); + events.ScheduleEvent(EVENT_CLEAVE, 9s); + events.ScheduleEvent(EVENT_INTIDMDATING_ROAR, 14s); + events.ScheduleEvent(EVENT_SUMMON_ADDS1, 18s); if (Is25ManRaid()) - events.ScheduleEvent(EVENT_SUMMON_ADDS2, 20000); + events.ScheduleEvent(EVENT_SUMMON_ADDS2, 20s); } void JustSummoned(Creature* summon) override @@ -139,7 +139,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -160,22 +160,22 @@ public: stalker1->CastSpell(stalker1, SPELL_SUMMON_FLAMECALLER, false); if (Creature* stalker2 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ZARITHRIAN_SPAWN_STALKER_2))) stalker2->CastSpell(stalker2, SPELL_SUMMON_FLAMECALLER, false); - events.ScheduleEvent(EVENT_SUMMON_ADDS1, 40000); + events.ScheduleEvent(EVENT_SUMMON_ADDS1, 40s); break; case EVENT_SUMMON_ADDS2: if (Creature* stalker1 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ZARITHRIAN_SPAWN_STALKER_1))) stalker1->CastSpell(stalker1, SPELL_SUMMON_FLAMECALLER, false); if (Creature* stalker2 = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ZARITHRIAN_SPAWN_STALKER_2))) stalker2->CastSpell(stalker2, SPELL_SUMMON_FLAMECALLER, false); - events.ScheduleEvent(EVENT_SUMMON_ADDS2, 40000); + events.ScheduleEvent(EVENT_SUMMON_ADDS2, 40s); break; case EVENT_INTIDMDATING_ROAR: me->CastSpell(me, SPELL_INTIMIDATING_ROAR, false); - events.ScheduleEvent(EVENT_INTIDMDATING_ROAR, 30000); + events.ScheduleEvent(EVENT_INTIDMDATING_ROAR, 30s); break; case EVENT_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE_ARMOR, false); - events.ScheduleEvent(EVENT_CLEAVE, 15000); + events.ScheduleEvent(EVENT_CLEAVE, 15s); break; } @@ -216,8 +216,8 @@ public: void JustEngagedWith(Unit* /*who*/) override { _events.Reset(); - _events.ScheduleEvent(EVENT_BLAST_NOVA, urand(20000, 30000)); - _events.ScheduleEvent(EVENT_LAVA_GOUT, 5000); + _events.ScheduleEvent(EVENT_BLAST_NOVA, 20s, 30s); + _events.ScheduleEvent(EVENT_LAVA_GOUT, 5s); } void EnterEvadeMode(EvadeReason /*why*/) override @@ -265,18 +265,18 @@ public: { case EVENT_BLAST_NOVA: DoCastAOE(SPELL_BLAST_NOVA); - _events.ScheduleEvent(EVENT_BLAST_NOVA, urand(20000, 30000)); + _events.ScheduleEvent(EVENT_BLAST_NOVA, 20s, 30s); break; case EVENT_LAVA_GOUT: if (_lavaGoutCount >= 3) { _lavaGoutCount = 0; - _events.ScheduleEvent(EVENT_LAVA_GOUT, 8000); + _events.ScheduleEvent(EVENT_LAVA_GOUT, 8s); break; } DoCastVictim(SPELL_LAVA_GOUT); _lavaGoutCount++; - _events.ScheduleEvent(EVENT_LAVA_GOUT, 1500); + _events.ScheduleEvent(EVENT_LAVA_GOUT, 1500ms); break; } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index f6bf6c995..dbf583d55 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -225,7 +225,7 @@ public: me->SetVisible(false); me->SetReactState(REACT_PASSIVE); _events2.Reset(); - _events2.RescheduleEvent(EVENT_HALION_VISIBILITY, 30000); + _events2.RescheduleEvent(EVENT_HALION_VISIBILITY, 30s); } void JustSummoned(Creature* summon) override @@ -300,14 +300,14 @@ public: Talk(SAY_AGGRO); instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1); - events.ScheduleEvent(EVENT_CLEAVE, urand(8000, 10000)); - events.ScheduleEvent(EVENT_TAIL_LASH, 10000); - events.ScheduleEvent(EVENT_BREATH, urand(10000, 15000)); - events.ScheduleEvent(EVENT_ACTIVATE_FIREWALL, 5000); - events.ScheduleEvent(EVENT_METEOR_STRIKE, urand(20000, 25000)); - events.ScheduleEvent(EVENT_FIERY_COMBUSTION, urand(15000, 18000)); - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - _events2.ScheduleEvent(EVENT_TRIGGER_BERSERK, 8 * MINUTE * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_CLEAVE, 8s, 10s); + events.ScheduleEvent(EVENT_TAIL_LASH, 10s); + events.ScheduleEvent(EVENT_BREATH, 10s, 15s); + events.ScheduleEvent(EVENT_ACTIVATE_FIREWALL, 5s); + events.ScheduleEvent(EVENT_METEOR_STRIKE, 20s, 25s); + events.ScheduleEvent(EVENT_FIERY_COMBUSTION, 15s, 18s); + events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s); + _events2.ScheduleEvent(EVENT_TRIGGER_BERSERK, 8min); } void KilledUnit(Unit* victim) override @@ -315,7 +315,7 @@ public: if (victim->GetTypeId() == TYPEID_PLAYER && events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -378,15 +378,15 @@ public: { case EVENT_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - events.ScheduleEvent(EVENT_CLEAVE, urand(8000, 10000)); + events.ScheduleEvent(EVENT_CLEAVE, 8s, 10s); break; case EVENT_TAIL_LASH: me->CastSpell(me, SPELL_TAIL_LASH, false); - events.ScheduleEvent(EVENT_TAIL_LASH, 10000); + events.ScheduleEvent(EVENT_TAIL_LASH, 10s); break; case EVENT_BREATH: me->CastSpell(me->GetVictim(), SPELL_FLAME_BREATH, false); - events.ScheduleEvent(EVENT_BREATH, urand(10000, 12000)); + events.ScheduleEvent(EVENT_BREATH, 10s, 12s); break; case EVENT_ACTIVATE_FIREWALL: instance->HandleGameObject(instance->GetGuidData(GO_FLAME_RING), false, nullptr); @@ -396,22 +396,22 @@ public: _livingEmberCount = summons.GetEntryCount(NPC_LIVING_EMBER); me->CastCustomSpell(SPELL_METEOR_STRIKE_TARGETING, SPELLVALUE_MAX_TARGETS, 1, me, false); Talk(SAY_METEOR_STRIKE); - events.ScheduleEvent(EVENT_METEOR_STRIKE, 40000); + events.ScheduleEvent(EVENT_METEOR_STRIKE, 40s); break; case EVENT_FIERY_COMBUSTION: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, true, -SPELL_TWILIGHT_REALM)) me->CastSpell(target, SPELL_FIERY_COMBUSTION, false); - events.ScheduleEvent(EVENT_FIERY_COMBUSTION, 25000); + events.ScheduleEvent(EVENT_FIERY_COMBUSTION, 25s); break; case EVENT_CHECK_HEALTH: if (me->HealthBelowPct(75)) { Talk(SAY_PHASE_TWO); me->CastSpell(me, SPELL_TWILIGHT_PHASING, false); - events.DelayEvents(10000); + events.DelayEvents(10s); return; } - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); + events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s); break; } @@ -462,13 +462,13 @@ public: void JustEngagedWith(Unit* /*who*/) override { _events.Reset(); - _events.ScheduleEvent(EVENT_CLEAVE, urand(8000, 10000)); - _events.ScheduleEvent(EVENT_TAIL_LASH, 10000); - _events.ScheduleEvent(EVENT_BREATH, urand(10000, 15000)); - _events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, 20000); - _events.ScheduleEvent(EVENT_SHADOW_PULSARS, 16000); - _events.ScheduleEvent(EVENT_SEND_ENCOUNTER_UNIT, 2000); - _events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); + _events.ScheduleEvent(EVENT_CLEAVE, 8s, 10s); + _events.ScheduleEvent(EVENT_TAIL_LASH, 10s); + _events.ScheduleEvent(EVENT_BREATH, 10s, 15s); + _events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, 20s); + _events.ScheduleEvent(EVENT_SHADOW_PULSARS, 16s); + _events.ScheduleEvent(EVENT_SEND_ENCOUNTER_UNIT, 2s); + _events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s); me->SetInCombatWithZone(); } @@ -482,7 +482,7 @@ public: if (victim->GetTypeId() == TYPEID_PLAYER && _events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - _events.ScheduleEvent(EVENT_KILL_TALK, 6000); + _events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -531,20 +531,20 @@ public: break; case EVENT_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - _events.ScheduleEvent(EVENT_CLEAVE, urand(8000, 10000)); + _events.ScheduleEvent(EVENT_CLEAVE, 8s, 10s); break; case EVENT_TAIL_LASH: me->CastSpell(me, SPELL_TAIL_LASH, false); - _events.ScheduleEvent(EVENT_TAIL_LASH, 10000); + _events.ScheduleEvent(EVENT_TAIL_LASH, 10s); break; case EVENT_BREATH: me->CastSpell(me->GetVictim(), SPELL_DARK_BREATH, false); - _events.ScheduleEvent(EVENT_BREATH, urand(10000, 12000)); + _events.ScheduleEvent(EVENT_BREATH, 10s, 12s); break; case EVENT_SOUL_CONSUMPTION: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, true, SPELL_TWILIGHT_REALM)) me->CastSpell(target, SPELL_SOUL_CONSUMPTION, false); - _events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, 20000); + _events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, 20s); break; case EVENT_CHECK_HEALTH: if (me->HealthBelowPct(50)) @@ -554,13 +554,13 @@ public: Talk(SAY_PHASE_THREE); return; } - _events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); + _events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s); break; case EVENT_SHADOW_PULSARS: Talk(SAY_SPHERE_PULSE); Talk(EMOTE_WARN_LASER); - _events.ScheduleEvent(EVENT_SHADOW_PULSARS, 29000); - _events.ScheduleEvent(EVENT_SHADOW_PULSARS_SHOOT, 5000); + _events.ScheduleEvent(EVENT_SHADOW_PULSARS, 29s); + _events.ScheduleEvent(EVENT_SHADOW_PULSARS_SHOOT, 5s); break; case EVENT_SHADOW_PULSARS_SHOOT: if (Creature* orbCarrier = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(NPC_ORB_CARRIER))) @@ -612,13 +612,13 @@ public: void DoAction(int32 action) override { if (action == ACTION_INTRO_HALION) - _events.ScheduleEvent(EVENT_START_INTRO, 2000); + _events.ScheduleEvent(EVENT_START_INTRO, 2s); else if (action == ACTION_CHECK_CORPOREALITY) { _materialDamage = 1; _twilightDamage = 1; _corporeality = 5; - _events.ScheduleEvent(EVENT_CHECK_CORPOREALITY, 7000); + _events.ScheduleEvent(EVENT_CHECK_CORPOREALITY, 7s); } else if (action == ACTION_RESET_ENCOUNTER) { @@ -637,23 +637,23 @@ public: // Intro case EVENT_START_INTRO: me->CastSpell(me, SPELL_COSMETIC_FIRE_PILLAR, false); - _events.ScheduleEvent(EVENT_INTRO_PROGRESS_1, 5000); + _events.ScheduleEvent(EVENT_INTRO_PROGRESS_1, 5s); break; case EVENT_INTRO_PROGRESS_1: _instance->SetBossState(DATA_HALION_INTRO1, NOT_STARTED); _instance->SetBossState(DATA_HALION_INTRO1, DONE); - _events.ScheduleEvent(EVENT_INTRO_PROGRESS_2, 5000); + _events.ScheduleEvent(EVENT_INTRO_PROGRESS_2, 5s); break; case EVENT_INTRO_PROGRESS_2: _instance->SetBossState(DATA_HALION_INTRO2, NOT_STARTED); _instance->SetBossState(DATA_HALION_INTRO2, DONE); - _events.ScheduleEvent(EVENT_INTRO_PROGRESS_3, 4000); + _events.ScheduleEvent(EVENT_INTRO_PROGRESS_3, 4s); break; case EVENT_INTRO_PROGRESS_3: _instance->SetBossState(DATA_HALION_INTRO_DONE, NOT_STARTED); _instance->SetBossState(DATA_HALION_INTRO_DONE, DONE); me->CastSpell(me, SPELL_FIERY_EXPLOSION, false); - _events.ScheduleEvent(EVENT_INTRO_PROGRESS_4, 500); + _events.ScheduleEvent(EVENT_INTRO_PROGRESS_4, 500ms); break; case EVENT_INTRO_PROGRESS_4: if (Creature* halion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(NPC_HALION))) @@ -668,7 +668,7 @@ public: break; case EVENT_CHECK_CORPOREALITY: UpdateCorporeality(); - _events.ScheduleEvent(EVENT_CHECK_CORPOREALITY, 10000); + _events.ScheduleEvent(EVENT_CHECK_CORPOREALITY, 10s); break; } } @@ -686,7 +686,7 @@ public: float damageRatio = float(_materialDamage) / float(_twilightDamage); if (_twilightDamage == 1 || _materialDamage == 1) - _events.ScheduleEvent(EVENT_TWILIGHT_MENDING, 4000); + _events.ScheduleEvent(EVENT_TWILIGHT_MENDING, 4s); _twilightDamage = 1; _materialDamage = 1; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp index 9442165ce..986c7ba77 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp @@ -79,9 +79,9 @@ public: BossAI::JustEngagedWith(who); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_ENRAGE, 15000); - events.ScheduleEvent(EVENT_FLAME_BREATH, 10000); - events.ScheduleEvent(EVENT_FLIGHT, 30000); + events.ScheduleEvent(EVENT_ENRAGE, 15s); + events.ScheduleEvent(EVENT_FLAME_BREATH, 10s); + events.ScheduleEvent(EVENT_FLIGHT, 30s); } void JustDied(Unit* killer) override @@ -99,13 +99,13 @@ public: { case POINT_FLIGHT: me->SetFacingTo(4.69f); - events.ScheduleEvent(EVENT_CONFLAGRATION, 1000); - events.ScheduleEvent(EVENT_LAND_BACK, 7000); + events.ScheduleEvent(EVENT_CONFLAGRATION, 1s); + events.ScheduleEvent(EVENT_LAND_BACK, 7s); Talk(SAY_CONFLAGRATION); break; case POINT_LAND: me->SetDisableGravity(false); - events.ScheduleEvent(EVENT_LAND_GROUND, 500); + events.ScheduleEvent(EVENT_LAND_GROUND, 500ms); break; } } @@ -122,7 +122,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -143,9 +143,9 @@ public: me->AttackStop(); me->SetDisableGravity(true); me->GetMotionMaster()->MovePoint(POINT_TAKEOFF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 6.0f, false); - events.ScheduleEvent(EVENT_FLIGHT, 50000); - events.DelayEvents(15000); - events.ScheduleEvent(EVENT_AIR_MOVEMENT, 2000); + events.ScheduleEvent(EVENT_FLIGHT, 50s); + events.DelayEvents(15s); + events.ScheduleEvent(EVENT_AIR_MOVEMENT, 2s); break; } case EVENT_CONFLAGRATION: @@ -154,11 +154,11 @@ public: case EVENT_ENRAGE: me->CastSpell(me, SPELL_ENRAGE, false); Talk(EMOTE_ENRAGED); - events.ScheduleEvent(EVENT_ENRAGE, urand(15000, 20000)); + events.ScheduleEvent(EVENT_ENRAGE, 15s, 20s); break; case EVENT_FLAME_BREATH: me->CastSpell(me->GetVictim(), SPELL_FLAME_BREATH, false); - events.ScheduleEvent(EVENT_FLAME_BREATH, urand(20000, 30000)); + events.ScheduleEvent(EVENT_FLAME_BREATH, 20s, 30s); break; case EVENT_AIR_MOVEMENT: me->GetMotionMaster()->MovePoint(POINT_FLIGHT, 3155.51f, 683.844f, 95.0f, false); 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 7d5897ec3..f57ed75da 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -183,7 +183,7 @@ public: case EVENT_SPELL_RADIANCE: me->CastSpell((Unit*)nullptr, SPELL_RADIANCE, false); me->TextEmote(TEXT_RADIATE, nullptr, true); - events.RepeatEvent(16000); + events.Repeat(16s); break; case EVENT_SPELL_HAMMER_RIGHTEOUS: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 55.0f, true) ) @@ -195,7 +195,7 @@ public: me->CastSpell(target, SPELL_HAMMER_JUSTICE, true); me->CastSpell(target, SPELL_HAMMER_RIGHTEOUS, false); } - events.RepeatEvent(25000); + events.Repeat(25s); break; } @@ -261,8 +261,8 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, urand(9000, 12000)); - events.ScheduleEvent(EVENT_SPELL_SMITE, urand(2000, 3000)); + events.ScheduleEvent(EVENT_SPELL_HOLY_FIRE, 9s, 12s); + events.ScheduleEvent(EVENT_SPELL_SMITE, 2s, 3s); me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); Talk(TEXT_PALETRESS_AGGRO); if( pInstance ) @@ -347,7 +347,7 @@ public: me->CastSpell((Unit*)nullptr, SPELL_SUMMON_MEMORY, false); SummonMemory(); me->CastSpell((Unit*)nullptr, SPELL_CONFESS, false); - events.ScheduleEvent(EVENT_SPELL_RENEW, urand(6000, 8000)); + events.ScheduleEvent(EVENT_SPELL_RENEW, 6s, 8s); summoned = true; return; } @@ -362,12 +362,12 @@ public: case EVENT_SPELL_SMITE: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true) ) me->CastSpell(target, SPELL_SMITE, false); - events.RepeatEvent(urand(3000, 4000)); + events.Repeat(3s, 4s); break; case EVENT_SPELL_HOLY_FIRE: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true) ) me->CastSpell(target, SPELL_HOLY_FIRE, false); - events.RepeatEvent(urand(9000, 12000)); + events.Repeat(9s, 12s); break; case EVENT_SPELL_RENEW: if( !MemoryGUID ) @@ -379,7 +379,7 @@ public: else if( Creature* memory = ObjectAccessor::GetCreature(*me, MemoryGUID) ) if( memory->IsAlive() ) me->CastSpell(memory, SPELL_RENEW, false); - events.RepeatEvent(urand(15000, 17000)); + events.Repeat(15s, 17s); break; } @@ -408,7 +408,7 @@ public: me->SetObjectScale(0.01f); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetImmuneToAll(true); - events.ScheduleEvent(EVENT_MEMORY_SCALE, 500); + events.ScheduleEvent(EVENT_MEMORY_SCALE, 500ms); } InstanceScript* pInstance; @@ -439,7 +439,7 @@ public: break; case EVENT_MEMORY_SCALE: me->SetObjectScale(1.0f); - events.ScheduleEvent(EVENT_MEMORY_START_ATTACK, 5000); + events.ScheduleEvent(EVENT_MEMORY_START_ATTACK, 5s); break; case EVENT_MEMORY_START_ATTACK: @@ -451,23 +451,23 @@ public: DoZoneInCombat(); } me->SetReactState(REACT_AGGRESSIVE); - events.ScheduleEvent(EVENT_SPELL_OLD_WOUNDS, 8000); - events.ScheduleEvent(EVENT_SPELL_SHADOWS_PAST, 4000); - events.ScheduleEvent(EVENT_SPELL_WAKING_NIGHTMARE, urand(20000, 30000)); + events.ScheduleEvent(EVENT_SPELL_OLD_WOUNDS, 8s); + events.ScheduleEvent(EVENT_SPELL_SHADOWS_PAST, 4s); + events.ScheduleEvent(EVENT_SPELL_WAKING_NIGHTMARE, 20s, 30s); break; case EVENT_SPELL_OLD_WOUNDS: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f, true) ) me->CastSpell(target, SPELL_OLD_WOUNDS, true); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_SPELL_SHADOWS_PAST: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true) ) me->CastSpell(target, SPELL_SHADOWS_PAST, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; case EVENT_SPELL_WAKING_NIGHTMARE: me->CastSpell(me, SPELL_WAKING_NIGHTMARE, false); - events.RepeatEvent(35000); + events.Repeat(35s); break; } @@ -626,7 +626,7 @@ public: { bCheck = false; damage = me->GetHealth() - 1; - events.DelayEvents(10000); + events.DelayEvents(10s); me->CastSpell(me, SPELL_DIVINE_SHIELD_H, true); me->CastSpell((Unit*)nullptr, SPELL_FINAL_MEDITATION_H, true); } @@ -637,23 +637,23 @@ public: switch( me->GetEntry() ) { case NPC_ARGENT_MONK: - events.RescheduleEvent(EVENT_MONK_SPELL_FLURRY_OF_BLOWS, 5000); - events.RescheduleEvent(EVENT_MONK_SPELL_PUMMEL, 7000); + events.RescheduleEvent(EVENT_MONK_SPELL_FLURRY_OF_BLOWS, 5s); + events.RescheduleEvent(EVENT_MONK_SPELL_PUMMEL, 7s); if( IsHeroic() ) bCheck = true; break; case NPC_PRIESTESS: - events.RescheduleEvent(EVENT_PRIESTESS_SPELL_HOLY_SMITE, urand(5000, 8000)); - events.RescheduleEvent(EVENT_PRIESTESS_SPELL_SHADOW_WORD_PAIN, urand(3000, 6000)); - events.RescheduleEvent(EVENT_PRIESTESS_SPELL_FOUNTAIN_OF_LIGHT, urand(8000, 15000)); + events.RescheduleEvent(EVENT_PRIESTESS_SPELL_HOLY_SMITE, 5s, 8s); + events.RescheduleEvent(EVENT_PRIESTESS_SPELL_SHADOW_WORD_PAIN, 3s, 6s); + events.RescheduleEvent(EVENT_PRIESTESS_SPELL_FOUNTAIN_OF_LIGHT, 8s, 15s); if( IsHeroic() ) - events.RescheduleEvent(EVENT_PRIESTESS_SPELL_MIND_CONTROL_H, 12000); + events.RescheduleEvent(EVENT_PRIESTESS_SPELL_MIND_CONTROL_H, 12s); break; case NPC_ARGENT_LIGHTWIELDER: - events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_BLAZING_LIGHT, urand(12000, 15000)); - events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_CLEAVE, urand(3000, 5000)); + events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_BLAZING_LIGHT, 12s, 15s); + events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_CLEAVE, 3s, 5s); if( IsHeroic() ) - events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE_H, urand(8000, 12000)); + events.RescheduleEvent(EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE_H, 8s, 12s); break; } } @@ -677,32 +677,32 @@ public: case EVENT_MONK_SPELL_FLURRY_OF_BLOWS: me->CastSpell(me, SPELL_FLURRY_OF_BLOWS, false); - events.RepeatEvent(urand(12000, 18000)); + events.Repeat(12s, 18s); break; case EVENT_MONK_SPELL_PUMMEL: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_PUMMEL, false); - events.RepeatEvent(urand(8000, 11000)); + events.Repeat(8s, 11s); break; case EVENT_PRIESTESS_SPELL_HOLY_SMITE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_HOLY_SMITE, false); - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); break; case EVENT_PRIESTESS_SPELL_SHADOW_WORD_PAIN: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_SHADOW_WORD_PAIN, false); - events.RepeatEvent(urand(12000, 15000)); + events.Repeat(12s, 15s); break; case EVENT_PRIESTESS_SPELL_FOUNTAIN_OF_LIGHT: me->CastSpell((Unit*)nullptr, SPELL_FOUNTAIN_OF_LIGHT, false); - events.RepeatEvent(urand(35000, 45000)); + events.Repeat(35s, 45s); break; case EVENT_PRIESTESS_SPELL_MIND_CONTROL_H: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true) ) me->CastSpell(target, SPELL_MIND_CONTROL_H, false); - events.RepeatEvent(urand(22000, 30000)); + events.Repeat(22s, 30s); break; case EVENT_LIGHTWIELDER_SPELL_BLAZING_LIGHT: @@ -711,18 +711,18 @@ public: if( !target ) target = me; me->CastSpell(target, SPELL_BLAZING_LIGHT, false); - events.RepeatEvent(urand(8000, 12000)); + events.Repeat(8s, 12s); } break; case EVENT_LIGHTWIELDER_SPELL_CLEAVE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); break; case EVENT_LIGHTWIELDER_SPELL_UNBALANCING_STRIKE_H: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE_H, false); - events.RepeatEvent(urand(12000, 15000)); + events.Repeat(12s, 15s); break; } 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 eb9c57b46..c6e600c05 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -180,11 +180,11 @@ public: announcer->DespawnOrUnsummon(); events.Reset(); - events.ScheduleEvent(EVENT_ANNOUNCER_SAY_ZOMBIE, 2500); - events.ScheduleEvent(EVENT_SPELL_PLAGUE_STRIKE, urand(7000, 9000)); - events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, urand(3500, 7000)); - events.ScheduleEvent(EVENT_SPELL_DEATH_RESPITE, urand(13000, 15000)); - events.ScheduleEvent(EVENT_SPELL_OBLITERATE, urand(11000, 19000)); + events.ScheduleEvent(EVENT_ANNOUNCER_SAY_ZOMBIE, 2500ms); + events.ScheduleEvent(EVENT_SPELL_PLAGUE_STRIKE, 7s, 9s); + events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7000ms); + events.ScheduleEvent(EVENT_SPELL_DEATH_RESPITE, 13s, 15s); + events.ScheduleEvent(EVENT_SPELL_OBLITERATE, 11s, 19s); } } @@ -213,18 +213,18 @@ public: me->CastSpell(me, SPELL_ARMY_DEAD, false); events.Reset(); - events.ScheduleEvent(EVENT_SPELL_PLAGUE_STRIKE, urand(7000, 9000)); - events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, urand(3500, 7000)); - events.ScheduleEvent(EVENT_SPELL_OBLITERATE, urand(11000, 19000)); - events.ScheduleEvent(EVENT_SPELL_DESECRATION, urand(2000, 3000)); + events.ScheduleEvent(EVENT_SPELL_PLAGUE_STRIKE, 7s, 9s); + events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7000ms); + events.ScheduleEvent(EVENT_SPELL_OBLITERATE, 11s, 19s); + events.ScheduleEvent(EVENT_SPELL_DESECRATION, 2s, 3s); break; case 3: me->SetDisplayId(MODEL_GHOST); Talk(TEXT_BK_GHOST_RES); events.Reset(); - events.ScheduleEvent(EVENT_SPELL_DEATH_BITE, 2000); - events.ScheduleEvent(EVENT_SPELL_MARKED_DEATH, 1000); + events.ScheduleEvent(EVENT_SPELL_DEATH_BITE, 2s); + events.ScheduleEvent(EVENT_SPELL_MARKED_DEATH, 1s); break; default: EnterEvadeMode(EVADE_REASON_OTHER); @@ -257,36 +257,36 @@ public: case EVENT_SPELL_PLAGUE_STRIKE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_PLAGUE_STRIKE, false); - events.RepeatEvent(urand(10000, 12000)); + events.Repeat(10s, 12s); break; case EVENT_SPELL_ICY_TOUCH: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_ICY_TOUCH, false); - events.RepeatEvent(urand(5000, 6000)); + events.Repeat(5s, 6s); break; case EVENT_SPELL_DEATH_RESPITE: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true) ) me->CastSpell(target, SPELL_DEATH_RESPITE, false); - events.RepeatEvent(urand(13000, 15000)); + events.Repeat(13s, 15s); break; case EVENT_SPELL_OBLITERATE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_OBLITERATE, false); - events.RepeatEvent(urand(15000, 17000)); + events.Repeat(15s, 17s); break; case EVENT_SPELL_DESECRATION: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true) ) me->CastSpell(target, SPELL_DESECRATION, false); - events.RepeatEvent(urand(14000, 17000)); + events.Repeat(14s, 17s); break; case EVENT_SPELL_DEATH_BITE: me->CastSpell((Unit*)nullptr, SPELL_DEATH_BITE, false); - events.RepeatEvent(urand(2000, 4000)); + events.Repeat(2s, 4s); break; case EVENT_SPELL_MARKED_DEATH: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.000000f, true) ) me->CastSpell(target, SPELL_MARKED_DEATH, false); - events.RepeatEvent(9000); + events.Repeat(9s); break; } @@ -410,8 +410,8 @@ public: { events.Reset(); if (me->GetEntry() == NPC_RISEN_JAEREN || me->GetEntry() == NPC_RISEN_ARELAS) - events.RescheduleEvent(1, 1000); // leap - events.RescheduleEvent(2, urand(3000, 4000)); // claw + events.RescheduleEvent(1, 1s); // leap + events.RescheduleEvent(2, 3s, 4s); // claw } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override @@ -466,12 +466,12 @@ public: break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; case 2: // claw if (Unit* target = me->GetVictim()) me->CastSpell(target, SPELL_CLAW_N, false); - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); break; } 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 27d3c7b9e..120599520 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -246,9 +246,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(EVENT_MOUNT_CHARGE, urand(2500, 4000)); - events.ScheduleEvent(EVENT_SHIELD_BREAKER, urand(5000, 8000)); - events.ScheduleEvent(EVENT_THRUST, urand(3000, 5000)); + events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4000ms); + events.ScheduleEvent(EVENT_SHIELD_BREAKER, 5s, 8s); + events.ScheduleEvent(EVENT_THRUST, 3s, 5s); me->CastSpell(me, SPELL_TRAMPLE_AURA, true); } @@ -302,7 +302,7 @@ public: me->CastSpell(target, SPELL_MINIONS_CHARGE, false); } } - events.RepeatEvent(urand(4500, 6000)); + events.Repeat(4500ms, 6000ms); } break; case EVENT_SHIELD_BREAKER: @@ -324,13 +324,13 @@ public: if( Unit* target = ObjectAccessor::GetCreature(*me, LIST.at(rnd)) ) me->CastSpell(target, SPELL_NPC_SHIELD_BREAKER, false); } - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); } break; case EVENT_THRUST: if( me->GetVictim() && me->GetExactDist(me->GetVictim()) <= 5.5f ) me->CastSpell(me->GetVictim(), SPELL_PLAYER_VEHICLE_THRUST, false); - events.RepeatEvent(urand(3000, 5000)); + events.Repeat(3s, 5s); break; } } @@ -363,9 +363,9 @@ public: me->CastSpell(me, SPELL_BOSS_DEFEND_PERIODIC, true); events.Reset(); - events.ScheduleEvent(EVENT_MOUNT_CHARGE, urand(2500, 4000)); - events.ScheduleEvent(EVENT_SHIELD_BREAKER, urand(5000, 8000)); - events.ScheduleEvent(EVENT_THRUST, urand(3000, 5000)); + events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4000ms); + events.ScheduleEvent(EVENT_SHIELD_BREAKER, 5s, 8s); + events.ScheduleEvent(EVENT_THRUST, 3s, 5s); me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_CHARM, true); me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_DISORIENTED, true); @@ -421,36 +421,34 @@ public: { case NPC_AMBROSE: // Ambrose Boltspark case NPC_ERESSEA: // Eressea Dawnsinger - events.RescheduleEvent(EVEMT_MAGE_SPELL_FIREBALL, 5000); - events.RescheduleEvent(EVEMT_MAGE_SPELL_BLAST_WAVE, 12000); - events.RescheduleEvent(EVEMT_MAGE_SPELL_HASTE, 22000); - events.RescheduleEvent(EVEMT_MAGE_SPELL_POLYMORPH, 8000); + events.RescheduleEvent(EVEMT_MAGE_SPELL_FIREBALL, 5s); + events.RescheduleEvent(EVEMT_MAGE_SPELL_BLAST_WAVE, 12s); + events.RescheduleEvent(EVEMT_MAGE_SPELL_HASTE, 22s); + events.RescheduleEvent(EVEMT_MAGE_SPELL_POLYMORPH, 8s); break; case NPC_COLOSOS: // Colosos case NPC_RUNOK: // Runok Wildmane - events.RescheduleEvent(EVENT_SHAMAN_SPELL_CHAIN_LIGHTNING, 16000); - events.RescheduleEvent(EVENT_SHAMAN_SPELL_EARTH_SHIELD, urand(30000, 35000)); - events.RescheduleEvent(EVENT_SHAMAN_SPELL_HEALING_WAVE, 12000); - events.RescheduleEvent(EVENT_SHAMAN_SPELL_HEX_OF_MENDING, urand(20000, 25000)); + events.RescheduleEvent(EVENT_SHAMAN_SPELL_CHAIN_LIGHTNING, 16s); + events.RescheduleEvent(EVENT_SHAMAN_SPELL_EARTH_SHIELD, 30s, 35s); + events.RescheduleEvent(EVENT_SHAMAN_SPELL_HEALING_WAVE, 12s); + events.RescheduleEvent(EVENT_SHAMAN_SPELL_HEX_OF_MENDING, 20s, 25s); break; case NPC_JAELYNE: // Jaelyne Evensong case NPC_ZULTORE: // Zul'tore - //events.RescheduleEvent(EVENT_HUNTER_SPELL_DISENGAGE, x); - events.RescheduleEvent(EVENT_HUNTER_SPELL_LIGHTNING_ARROWS, 7000); - events.RescheduleEvent(EVENT_HUNTER_SPELL_MULTI_SHOT, 12000); + events.RescheduleEvent(EVENT_HUNTER_SPELL_LIGHTNING_ARROWS, 7s); + events.RescheduleEvent(EVENT_HUNTER_SPELL_MULTI_SHOT, 12s); break; case NPC_LANA: // Lana Stouthammer case NPC_VISCERI: // Deathstalker Visceri - events.RescheduleEvent(EVENT_ROGUE_SPELL_EVISCERATE, 8000); - events.RescheduleEvent(EVENT_ROGUE_SPELL_FAN_OF_KNIVES, 14000); - events.RescheduleEvent(EVENT_ROGUE_SPELL_POISON_BOTTLE, 19000); + events.RescheduleEvent(EVENT_ROGUE_SPELL_EVISCERATE, 8s); + events.RescheduleEvent(EVENT_ROGUE_SPELL_FAN_OF_KNIVES, 14s); + events.RescheduleEvent(EVENT_ROGUE_SPELL_POISON_BOTTLE, 19s); break; case NPC_JACOB: // Marshal Jacob Alerius case NPC_MOKRA: // Mokra the Skullcrusher - events.RescheduleEvent(EVENT_WARRIOR_SPELL_MORTAL_STRIKE, urand(8000, 12000)); - events.RescheduleEvent(EVENT_WARRIOR_SPELL_BLADESTORM, urand(15000, 20000)); - events.RescheduleEvent(EVENT_WARRIOR_SPELL_INTERCEPT, 7000); - //events.RescheduleEvent(EVENT_WARRIOR_SPELL_ROLLING_THROW, x); + events.RescheduleEvent(EVENT_WARRIOR_SPELL_MORTAL_STRIKE, 8s, 12s); + events.RescheduleEvent(EVENT_WARRIOR_SPELL_BLADESTORM, 15s, 20s); + events.RescheduleEvent(EVENT_WARRIOR_SPELL_INTERCEPT, 7s); break; default: break; @@ -568,7 +566,7 @@ public: { NewMountGUID = mount->GetGUID(); me->GetMotionMaster()->MovePoint(7, *mount); - events.RescheduleEvent(EVENT_FIND_NEW_MOUNT, 1000); + events.RescheduleEvent(EVENT_FIND_NEW_MOUNT, 1s); } } } @@ -627,9 +625,9 @@ public: me->CastSpell(me, SPELL_BOSS_DEFEND_PERIODIC, true); me->SetRegeneratingHealth(true); events.Reset(); - events.ScheduleEvent(EVENT_MOUNT_CHARGE, urand(2500, 4000)); - events.ScheduleEvent(EVENT_SHIELD_BREAKER, urand(5000, 8000)); - events.ScheduleEvent(EVENT_THRUST, urand(3000, 5000)); + events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4000ms); + events.ScheduleEvent(EVENT_SHIELD_BREAKER, 5s, 8s); + events.ScheduleEvent(EVENT_THRUST, 3s, 5s); me->SetReactState(REACT_AGGRESSIVE); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetImmuneToAll(false); @@ -681,7 +679,7 @@ public: { if( me->HasAura(SPELL_TRAMPLE_STUN) ) { - events.RepeatEvent(200); + events.Repeat(200ms); break; } @@ -707,7 +705,7 @@ public: if( trample ) { - events.RepeatEvent(15100); + events.Repeat(15s); break; } } @@ -717,7 +715,7 @@ public: { if( me->GetMotionMaster()->GetCurrentMovementGeneratorType() != POINT_MOTION_TYPE ) me->GetMotionMaster()->MovePoint(7, *mount); - events.RepeatEvent(200); + events.Repeat(200ms); break; } @@ -728,7 +726,7 @@ public: me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetImmuneToAll(true); me->GetMotionMaster()->MovePoint(7, *mount); - events.RepeatEvent(200); + events.Repeat(200ms); break; } } @@ -761,7 +759,7 @@ public: me->CastSpell(target, SPELL_MINIONS_CHARGE, false); } } - events.RepeatEvent(urand(4500, 6000)); + events.Repeat(4500ms, 6000ms); } break; case EVENT_SHIELD_BREAKER: @@ -783,34 +781,34 @@ public: if( Unit* target = ObjectAccessor::GetCreature(*me, LIST.at(rnd)) ) me->CastSpell(target, SPELL_NPC_SHIELD_BREAKER, false); } - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); } break; case EVENT_THRUST: if( Unit* victim = me->GetVictim() ) if( me->GetExactDist(victim) <= 6.0f ) me->CastSpell(victim, SPELL_PLAYER_VEHICLE_THRUST, false); - events.RepeatEvent(urand(3000, 5000)); + events.Repeat(3s, 5s); break; /******************* MAGE *******************/ case EVEMT_MAGE_SPELL_FIREBALL: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_FIREBALL, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVEMT_MAGE_SPELL_BLAST_WAVE: me->CastSpell((Unit*)nullptr, SPELL_BLAST_WAVE, false); - events.RepeatEvent(13000); + events.Repeat(13s); break; case EVEMT_MAGE_SPELL_HASTE: me->CastSpell(me, SPELL_HASTE, false); - events.RepeatEvent(22000); + events.Repeat(22s); break; case EVEMT_MAGE_SPELL_POLYMORPH: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true) ) me->CastSpell(target, SPELL_POLYMORPH, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; /***************** MAGE END *****************/ @@ -818,11 +816,11 @@ public: case EVENT_SHAMAN_SPELL_CHAIN_LIGHTNING: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true) ) me->CastSpell(target, SPELL_CHAIN_LIGHTNING, false); - events.RepeatEvent(16000); + events.Repeat(16s); break; case EVENT_SHAMAN_SPELL_EARTH_SHIELD: me->CastSpell(me, SPELL_EARTH_SHIELD, false); - events.RepeatEvent(urand(30000, 35000)); + events.Repeat(30s, 35s); break; case EVENT_SHAMAN_SPELL_HEALING_WAVE: { @@ -836,13 +834,13 @@ public: else target = me; me->CastSpell(target, SPELL_HEALING_WAVE, false); - events.RepeatEvent(22000); + events.Repeat(22s); } break; case EVENT_SHAMAN_SPELL_HEX_OF_MENDING: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_HEX_OF_MENDING, false); - events.RepeatEvent(urand(20000, 25000)); + events.Repeat(20s, 25s); break; /**************** SHAMAN END ****************/ @@ -852,7 +850,7 @@ public: break; case EVENT_HUNTER_SPELL_LIGHTNING_ARROWS: me->CastSpell((Unit*)nullptr, SPELL_LIGHTNING_ARROWS, false); - events.RepeatEvent(urand(20000, 25000)); + events.Repeat(20s, 25s); break; case EVENT_HUNTER_SPELL_MULTI_SHOT: { @@ -863,7 +861,7 @@ public: me->CastSpell(target, SPELL_SHOOT, false); UnitTargetGUID = target->GetGUID(); } - events.RepeatEvent(2000); + events.Repeat(2s); break; } else @@ -886,7 +884,7 @@ public: } UnitTargetGUID.Clear(); } - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); } break; /**************** HUNTER END ****************/ @@ -895,16 +893,16 @@ public: case EVENT_ROGUE_SPELL_EVISCERATE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_EVISCERATE, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; case EVENT_ROGUE_SPELL_FAN_OF_KNIVES: me->CastSpell((Unit*)nullptr, SPELL_FAN_OF_KNIVES, false); - events.RepeatEvent(14000); + events.Repeat(14s); break; case EVENT_ROGUE_SPELL_POISON_BOTTLE: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true) ) me->CastSpell(target, SPELL_POISON_BOTTLE, false); - events.RepeatEvent(19000); + events.Repeat(19s); break; /**************** ROGUE END *****************/ @@ -912,12 +910,12 @@ public: case EVENT_WARRIOR_SPELL_MORTAL_STRIKE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false); - events.RepeatEvent(urand(8000, 12000)); + events.Repeat(8s, 12s); break; case EVENT_WARRIOR_SPELL_BLADESTORM: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_BLADESTORM, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; case EVENT_WARRIOR_SPELL_INTERCEPT: { @@ -933,7 +931,7 @@ public: break; } } - events.RepeatEvent(7000); + events.Repeat(7s); } break; case EVENT_WARRIOR_SPELL_ROLLING_THROW: 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 8e54fb614..9292e7860 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 @@ -224,7 +224,7 @@ public: { CLEANED = false; events.Reset(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms); if( !in ) { @@ -492,7 +492,7 @@ public: if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) ) tirion->AI()->Talk(TEXT_WELCOME); } - events.RescheduleEvent(EVENT_YELL_WELCOME_2, 8000); + events.RescheduleEvent(EVENT_YELL_WELCOME_2, 8s); } else // short version { @@ -515,7 +515,7 @@ public: announcer->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); announcer->GetMotionMaster()->MovePoint(1, 735.81f, 661.92f, 412.39f); } - events.ScheduleEvent(EVENT_GRAND_GROUP_1_MOVE_MIDDLE, 10000); + events.ScheduleEvent(EVENT_GRAND_GROUP_1_MOVE_MIDDLE, 10s); } break; case INSTANCE_PROGRESS_CHAMPIONS_DEAD: @@ -528,12 +528,12 @@ public: announcer->AI()->Talk(TEXT_INTRODUCE_PALETRESS); } HandleGameObject(GO_EnterGateGUID, false); - events.RescheduleEvent(EVENT_START_ARGENT_CHALLENGE_INTRO, 0); + events.RescheduleEvent(EVENT_START_ARGENT_CHALLENGE_INTRO, 0ms); break; case INSTANCE_PROGRESS_ARGENT_CHALLENGE_DIED: if( Creature* tirion = instance->GetCreature(NPC_TirionGUID) ) tirion->AI()->Talk(TEXT_BK_INTRO); - events.RescheduleEvent(EVENT_SUMMON_BLACK_KNIGHT, 3000); + events.RescheduleEvent(EVENT_SUMMON_BLACK_KNIGHT, 3s); break; } break; @@ -543,10 +543,10 @@ public: switch( uiData ) { case 0: - events.ScheduleEvent(EVENT_SUMMON_GRAND_CHAMPION_2, 0); + events.ScheduleEvent(EVENT_SUMMON_GRAND_CHAMPION_2, 0ms); break; case 1: - events.ScheduleEvent(EVENT_SUMMON_GRAND_CHAMPION_3, 0); + events.ScheduleEvent(EVENT_SUMMON_GRAND_CHAMPION_3, 0ms); break; case 2: if( Creature* announcer = instance->GetCreature(NPC_AnnouncerGUID) ) @@ -555,7 +555,7 @@ public: uiData = DONE; // save to db announcer->SetUnitMovementFlags(MOVEMENTFLAG_WALKING); announcer->GetMotionMaster()->MovePoint(1, 735.81f, 661.92f, 412.39f); - events.ScheduleEvent(EVENT_GRAND_GROUP_1_MOVE_MIDDLE, 8500); + events.ScheduleEvent(EVENT_GRAND_GROUP_1_MOVE_MIDDLE, 8500ms); } break; } @@ -569,7 +569,7 @@ public: Counter = 0; InstanceProgress = INSTANCE_PROGRESS_CHAMPION_GROUP_DIED_1; uiData = DONE; // save to db - events.ScheduleEvent(EVENT_GRAND_GROUP_2_MOVE_MIDDLE, 0); + events.ScheduleEvent(EVENT_GRAND_GROUP_2_MOVE_MIDDLE, 0ms); } break; case INSTANCE_PROGRESS_CHAMPION_GROUP_DIED_1: // fighting group 2/3 @@ -578,7 +578,7 @@ public: Counter = 0; InstanceProgress = INSTANCE_PROGRESS_CHAMPION_GROUP_DIED_2; uiData = DONE; // save to db - events.ScheduleEvent(EVENT_GRAND_GROUP_3_MOVE_MIDDLE, 0); + events.ScheduleEvent(EVENT_GRAND_GROUP_3_MOVE_MIDDLE, 0ms); } break; case INSTANCE_PROGRESS_CHAMPION_GROUP_DIED_2: // fighting group 3/3 @@ -587,7 +587,7 @@ public: Counter = 0; InstanceProgress = INSTANCE_PROGRESS_CHAMPION_GROUP_DIED_3; uiData = DONE; // save to db - events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_MOVE_MIDDLE, 0); + events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_MOVE_MIDDLE, 0ms); } break; case INSTANCE_PROGRESS_CHAMPION_GROUP_DIED_3: // fighting grand champions (on vehicles) @@ -598,7 +598,7 @@ public: for (ObjectGuid const& guid : VehicleList) if (Creature* veh = instance->GetCreature(guid)) veh->DespawnOrUnsummon(); - events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_MOVE_SIDE, 0); + events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_MOVE_SIDE, 0ms); } break; } @@ -629,8 +629,8 @@ public: { announcer->GetMotionMaster()->MovePoint(0, 743.14f, 628.77f, 411.2f); announcer->SummonGameObject(instance->IsHeroic() ? GO_CHAMPIONS_LOOT_H : GO_CHAMPIONS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000); // [LOOT] - events.ScheduleEvent(EVENT_RESTORE_ANNOUNCER_GOSSIP, 15000); - events.ScheduleEvent(EVENT_GRATZ_SLAIN_CHAMPIONS, 6000); + events.ScheduleEvent(EVENT_RESTORE_ANNOUNCER_GOSSIP, 15s); + events.ScheduleEvent(EVENT_GRATZ_SLAIN_CHAMPIONS, 6s); } // bind players to instance @@ -644,7 +644,7 @@ public: Counter = 0; InstanceProgress = INSTANCE_PROGRESS_ARGENT_SOLDIERS_DIED; uiData = DONE; // save to db - events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_MOVE_FORWARD, 0); + events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_MOVE_FORWARD, 0ms); } break; case BOSS_ARGENT_CHALLENGE: @@ -654,7 +654,7 @@ public: { HandleGameObject(GO_EnterGateGUID, true); InstanceProgress = INSTANCE_PROGRESS_ARGENT_CHALLENGE_DIED; - events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_RUN_MIDDLE, 0); + events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_RUN_MIDDLE, 0ms); } } break; @@ -663,7 +663,7 @@ public: break; case DATA_SKELETAL_GRYPHON_LANDED: { - events.ScheduleEvent(EVENT_START_BLACK_KNIGHT_SCENE, 3000); + events.ScheduleEvent(EVENT_START_BLACK_KNIGHT_SCENE, 3s); } break; case BOSS_BLACK_KNIGHT: @@ -795,7 +795,7 @@ public: temp1 = urand(0, 4); DoSummonGrandChampion(temp1, 0); HandleGameObject(GO_MainGateGUID, true); - events.ScheduleEvent(EVENT_CLOSE_GATE, 6000); + events.ScheduleEvent(EVENT_CLOSE_GATE, 6s); } break; case EVENT_SUMMON_GRAND_CHAMPION_2: @@ -804,7 +804,7 @@ public: while( temp1 == temp2 ); DoSummonGrandChampion(temp2, 1); HandleGameObject(GO_MainGateGUID, true); - events.ScheduleEvent(EVENT_CLOSE_GATE, 6000); + events.ScheduleEvent(EVENT_CLOSE_GATE, 6s); } break; case EVENT_SUMMON_GRAND_CHAMPION_3: @@ -829,7 +829,7 @@ public: tirion->AI()->Talk(TEXT_WELCOME_2); } - events.RescheduleEvent(EVENT_SUMMON_GRAND_CHAMPION_1, 8000); + events.RescheduleEvent(EVENT_SUMMON_GRAND_CHAMPION_1, 8s); break; } case EVENT_GRAND_GROUP_1_MOVE_MIDDLE: @@ -848,7 +848,7 @@ public: c->GetMotionMaster()->MovePoint(0, 748.309f + 3.0f * cos(angle), 619.448f + 3.0f * std::sin(angle), 411.3f); } - events.ScheduleEvent(EVENT_GRAND_GROUP_1_ATTACK, 3000); + events.ScheduleEvent(EVENT_GRAND_GROUP_1_ATTACK, 3s); } break; case EVENT_GRAND_GROUP_1_ATTACK: @@ -875,7 +875,7 @@ public: c->GetMotionMaster()->MovePoint(0, 748.309f + 3.0f * cos(angle), 619.448f + 3.0f * std::sin(angle), 411.3f); } - events.ScheduleEvent(EVENT_GRAND_GROUP_2_ATTACK, 3000); + events.ScheduleEvent(EVENT_GRAND_GROUP_2_ATTACK, 3s); } break; case EVENT_GRAND_GROUP_2_ATTACK: @@ -901,7 +901,7 @@ public: c->GetMotionMaster()->MovePoint(0, 748.309f + 3.0f * cos(angle), 619.448f + 3.0f * std::sin(angle), 411.3f); } - events.ScheduleEvent(EVENT_GRAND_GROUP_3_ATTACK, 3000); + events.ScheduleEvent(EVENT_GRAND_GROUP_3_ATTACK, 3s); } break; case EVENT_GRAND_GROUP_3_ATTACK: @@ -927,7 +927,7 @@ public: c->GetMotionMaster()->MovePoint(4, 748.309f + 3.0f * cos(angle), 619.448f + 3.0f * std::sin(angle), 411.3f); } - events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_MOUNTS_ATTACK, 3000); + events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_MOUNTS_ATTACK, 3s); } break; case EVENT_GRAND_CHAMPIONS_MOUNTS_ATTACK: @@ -965,7 +965,7 @@ public: } } - events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_ATTACK, 15000); + events.ScheduleEvent(EVENT_GRAND_CHAMPIONS_ATTACK, 15s); } break; case EVENT_GRAND_CHAMPIONS_ATTACK: @@ -1043,7 +1043,7 @@ public: NPC_ArgentSoldierGUID[i][2] = pTrash->GetGUID(); } } - events.ScheduleEvent(EVENT_SUMMON_ARGENT_CHALLENGE, 4000); + events.ScheduleEvent(EVENT_SUMMON_ARGENT_CHALLENGE, 4s); } break; case EVENT_SUMMON_ARGENT_CHALLENGE: @@ -1052,9 +1052,9 @@ public: announcer->GetMotionMaster()->MovePoint(0, 735.81f, 661.92f, 412.39f); if (Creature* boss = instance->SummonCreature(Counter ? NPC_EADRIC : NPC_PALETRESS, SpawnPosition)) boss->GetMotionMaster()->MovePoint(0, 746.881f, 660.263f, 411.7f); - events.ScheduleEvent(EVENT_CLOSE_GATE, 5000); - events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_SAY_1, 4000); - events.ScheduleEvent(EVENT_ARGENT_SOLDIER_GROUP_ATTACK, 12500); + events.ScheduleEvent(EVENT_CLOSE_GATE, 5s); + events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_SAY_1, 4s); + events.ScheduleEvent(EVENT_ARGENT_SOLDIER_GROUP_ATTACK, 12s + 500ms); } break; case EVENT_ARGENT_CHALLENGE_SAY_1: @@ -1062,7 +1062,7 @@ public: if( Creature* ac = instance->GetCreature(NPC_ArgentChampionGUID) ) ac->AI()->Talk(Counter ? TEXT_EADRIC_SAY_1 : TEXT_PALETRESS_SAY_1); if( !Counter ) - events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_SAY_2, 6000); + events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_SAY_2, 6s); } break; case EVENT_ARGENT_CHALLENGE_SAY_2: @@ -1093,7 +1093,7 @@ public: { boss->GetMotionMaster()->MovePoint(0, 746.881f, 635.263f, 411.7f); } - events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_ATTACK, 3000); + events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_ATTACK, 3s); } break; case EVENT_ARGENT_CHALLENGE_ATTACK: @@ -1114,7 +1114,7 @@ public: if( Creature* boss = instance->GetCreature(NPC_ArgentChampionGUID) ) { boss->GetMotionMaster()->MovePoint(1, 747.13f, 628.037f, 411.2f); - events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_LEAVE_CHEST, 6000); + events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_LEAVE_CHEST, 6s); } } break; @@ -1132,8 +1132,8 @@ public: announcer->SummonGameObject(chest, 746.59f, 618.49f, 411.09f, 1.42f, 0, 0, 0, 0, 90000000); // [LOOT] } - events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_DISAPPEAR, 4000); - events.ScheduleEvent(EVENT_RESTORE_ANNOUNCER_GOSSIP, 15000); + events.ScheduleEvent(EVENT_ARGENT_CHALLENGE_DISAPPEAR, 4s); + events.ScheduleEvent(EVENT_RESTORE_ANNOUNCER_GOSSIP, 15s); } break; case EVENT_ARGENT_CHALLENGE_DISAPPEAR: @@ -1176,7 +1176,7 @@ public: bk->GetMotionMaster()->MoveJump(exitPos, 2.0f, 2.0f); bk->AI()->Talk(TEXT_BK_SPOILED); } - events.ScheduleEvent(EVENT_BLACK_KNIGHT_CAST_ANNOUNCER, 2000); + events.ScheduleEvent(EVENT_BLACK_KNIGHT_CAST_ANNOUNCER, 2s); } break; case EVENT_BLACK_KNIGHT_CAST_ANNOUNCER: @@ -1195,7 +1195,7 @@ public: tirion->AI()->Talk(TEXT_BK_MEANING); } } - events.ScheduleEvent(EVENT_BLACK_KNIGHT_KILL_ANNOUNCER, 1000); + events.ScheduleEvent(EVENT_BLACK_KNIGHT_KILL_ANNOUNCER, 1s); } break; case EVENT_BLACK_KNIGHT_KILL_ANNOUNCER: @@ -1203,7 +1203,7 @@ public: if( Creature* bk_vehicle = instance->GetCreature(NPC_BlackKnightVehicleGUID) ) bk_vehicle->AI()->DoAction(1); - events.ScheduleEvent(EVENT_BLACK_KNIGHT_MOVE_FORWARD, 4000); + events.ScheduleEvent(EVENT_BLACK_KNIGHT_MOVE_FORWARD, 4s); } break; case EVENT_BLACK_KNIGHT_MOVE_FORWARD: @@ -1217,7 +1217,7 @@ public: if( Creature* announcer = instance->GetCreature(NPC_AnnouncerGUID) ) if (announcer->IsAlive()) Unit::Kill(announcer, announcer); - events.ScheduleEvent(EVENT_BLACK_KNIGHT_SAY_TASK, 14000); + events.ScheduleEvent(EVENT_BLACK_KNIGHT_SAY_TASK, 14s); } break; case EVENT_BLACK_KNIGHT_SAY_TASK: @@ -1227,7 +1227,7 @@ public: bk->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); bk->AI()->Talk(TEXT_BK_TASK); } - events.ScheduleEvent(EVENT_BLACK_KNIGHT_ATTACK, 5000); + events.ScheduleEvent(EVENT_BLACK_KNIGHT_ATTACK, 5s); } break; case EVENT_BLACK_KNIGHT_ATTACK: diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index 129dfe45e..6e209bc94 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -140,9 +140,6 @@ enum AnubEvents EVENT_SUMMON_SCARAB, }; -#define SUBMERGE_INTERVAL 80000 -#define EMERGE_INTERVAL 60000 - class boss_anubarak_trial : public CreatureScript { public: @@ -205,13 +202,13 @@ public: { me->setActive(true); events.Reset(); - events.RescheduleEvent(EVENT_ENRAGE, 600000); - events.RescheduleEvent(EVENT_SPELL_FREEZING_SLASH, urand(7000, 15000)); - events.RescheduleEvent(EVENT_SPELL_PENETRATING_COLD, urand(15000, 20000)); - events.RescheduleEvent(EVENT_SUMMON_NERUBIAN, urand(5000, 8000)); - events.RescheduleEvent(EVENT_SUBMERGE, SUBMERGE_INTERVAL); + events.RescheduleEvent(EVENT_ENRAGE, 10min); + events.RescheduleEvent(EVENT_SPELL_FREEZING_SLASH, 7s, 15s); + events.RescheduleEvent(EVENT_SPELL_PENETRATING_COLD, 15s, 20s); + events.RescheduleEvent(EVENT_SUMMON_NERUBIAN, 5s, 8s); + events.RescheduleEvent(EVENT_SUBMERGE, 80s); if( !IsHeroic() ) - events.RescheduleEvent(EVENT_RESPAWN_SPHERE, 4000); + events.RescheduleEvent(EVENT_RESPAWN_SPHERE, 4s); for (ObjectGuid const& guid : summons) if (pInstance) @@ -289,26 +286,26 @@ public: } i = (i + 1) % 6; } while( i != StartAt ); - events.RepeatEvent(4000); + events.Repeat(4s); } break; case EVENT_SPELL_FREEZING_SLASH: { if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_FREEZING_SLASH, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); } break; case EVENT_SPELL_PENETRATING_COLD: { me->CastCustomSpell(SPELL_PENETRATING_COLD, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5, 2, 5)); - events.RepeatEvent(18000); + events.Repeat(18s); } break; case EVENT_SUMMON_NERUBIAN: { me->CastCustomSpell(SPELL_SUMMON_BURROWER, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 2, 2, 4)); - events.RepeatEvent(45000); + events.Repeat(45s); } break; case EVENT_SUBMERGE: @@ -324,9 +321,9 @@ public: events.CancelEvent(EVENT_SUMMON_NERUBIAN); events.CancelEvent(EVENT_SPELL_FREEZING_SLASH); events.CancelEvent(EVENT_SPELL_PENETRATING_COLD); - events.RescheduleEvent(EVENT_EMERGE, EMERGE_INTERVAL); - events.RescheduleEvent(EVENT_SPELL_SUMMON_SPIKE, 2500); - events.RescheduleEvent(EVENT_SUMMON_SCARAB, 3000); + events.RescheduleEvent(EVENT_EMERGE, 1min); + events.RescheduleEvent(EVENT_SPELL_SUMMON_SPIKE, 2500ms); + events.RescheduleEvent(EVENT_SUMMON_SCARAB, 3s); } break; case EVENT_SUMMON_SCARAB: @@ -334,7 +331,7 @@ public: uint8 i = urand(0, 3); if( Creature* c = ObjectAccessor::GetCreature(*me, BurrowGUID[i]) ) me->CastSpell(c, SPELL_SUMMON_SCARAB, true); - events.RepeatEvent(4000); + events.Repeat(4s); } break; case EVENT_EMERGE: @@ -342,7 +339,7 @@ public: me->CastSpell(me, SPELL_SPIKE_TELE, true); summons.DespawnEntry(NPC_SPIKE); events.CancelEvent(EVENT_SUMMON_SCARAB); - events.RescheduleEvent(EVENT_EMERGE_2, 2000); + events.RescheduleEvent(EVENT_EMERGE_2, 2s); } break; case EVENT_EMERGE_2: @@ -352,10 +349,10 @@ public: me->setAttackTimer(BASE_ATTACK, 3000); me->RemoveAura(SPELL_SUBMERGE); me->CastSpell(me, SPELL_EMERGE, false); - events.RescheduleEvent(EVENT_SUMMON_NERUBIAN, urand(5000, 8000)); - events.RescheduleEvent(EVENT_SPELL_FREEZING_SLASH, urand(7000, 15000)); - events.RescheduleEvent(EVENT_SPELL_PENETRATING_COLD, urand(15000, 20000)); - events.RescheduleEvent(EVENT_SUBMERGE, SUBMERGE_INTERVAL); + events.RescheduleEvent(EVENT_SUMMON_NERUBIAN, 5s, 8s); + events.RescheduleEvent(EVENT_SPELL_FREEZING_SLASH, 7s, 15s); + events.RescheduleEvent(EVENT_SPELL_PENETRATING_COLD, 15s, 20s); + events.RescheduleEvent(EVENT_SUBMERGE, 80s); } break; case EVENT_SPELL_SUMMON_SPIKE: @@ -630,9 +627,9 @@ public: me->CastSpell(me, SPELL_EXPOSE_WEAKNESS, true); me->CastSpell(me, SPELL_SPIDER_FRENZY, true); events.Reset(); - events.RescheduleEvent(EVENT_SUBMERGE, 30000); + events.RescheduleEvent(EVENT_SUBMERGE, 30s); if( IsHeroic() ) - events.RescheduleEvent(EVENT_SPELL_SHADOW_STRIKE, urand(30000, 45000)); + events.RescheduleEvent(EVENT_SPELL_SHADOW_STRIKE, 30s, 45s); if( Unit* target = me->SelectNearestTarget(250.0f) ) { AttackStart(target); @@ -676,7 +673,7 @@ public: case EVENT_SPELL_SHADOW_STRIKE: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 250.0f, true) ) me->CastSpell(target, SPELL_SHADOW_STRIKE, false); - events.RepeatEvent(urand(30000, 45000)); + events.Repeat(30s, 45s); break; case EVENT_SUBMERGE: if( HealthBelowPct(80) && !me->HasAura(RAID_MODE(66193, 67855, 67856, 67857)) ) // not having permafrost - allow submerge @@ -688,11 +685,11 @@ public: me->CastSpell(me, SPELL_SPIDER_FRENZY, true); me->CastSpell(me, SPELL_SUBMERGE, false); - events.DelayEvents(15000); - events.RescheduleEvent(EVENT_EMERGE, 10000); + events.DelayEvents(15s); + events.RescheduleEvent(EVENT_EMERGE, 10s); } else - events.RepeatEvent(3000); + events.Repeat(3s); break; case EVENT_EMERGE: me->SetHealth(me->GetMaxHealth()); @@ -701,7 +698,7 @@ public: me->CastSpell(me, SPELL_EMERGE, false); me->RemoveAura(SPELL_SUBMERGE); - events.RescheduleEvent(EVENT_SUBMERGE, 30000); + events.RescheduleEvent(EVENT_SUBMERGE, 30s); break; } @@ -751,7 +748,7 @@ public: me->RemoveAllAuras(); me->GetMotionMaster()->MoveIdle(); events.Reset(); - events.RescheduleEvent(3, 4000); + events.RescheduleEvent(3, 4s); } } @@ -774,7 +771,7 @@ public: { me->CastSpell(me, SPELL_SPIKE_SPEED1, true); me->CastSpell(me, SPELL_SPIKE_TRAIL, true); - events.RescheduleEvent(1, 7000); + events.RescheduleEvent(1, 7s); } TargetGUID = target->GetGUID(); me->CastSpell(target, SPELL_MARK, true); @@ -810,7 +807,7 @@ public: case 1: me->CastSpell(me, SPELL_SPIKE_SPEED2, true); - events.RescheduleEvent(2, 7000); + events.RescheduleEvent(2, 7s); break; case 2: me->CastSpell(me, SPELL_SPIKE_SPEED3, true); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index 0de30a7bf..f0617de21 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -117,6 +117,7 @@ struct boss_faction_championsAI : public ScriptedAI } } + /// @todo - Convert to std::chrono void EventMapGCD(EventMap& e, uint32 delay, uint32 gcd = 0) { e.DelayEventsToMax(delay, gcd); @@ -278,14 +279,14 @@ public: { SetEquipmentSlots(false, 51799, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_LIFEBLOOM, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_NOURISH, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_REGROWTH, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_REJUVENATION, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_TRANQUILITY, urand(25000, 40000)); - events.RescheduleEvent(EVENT_SPELL_BARKSKIN, 10000); - events.RescheduleEvent(EVENT_SPELL_THORNS, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_NATURE_GRASP, urand(5000, 15000)); + events.RescheduleEvent(EVENT_SPELL_LIFEBLOOM, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_NOURISH, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_REGROWTH, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_REJUVENATION, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_TRANQUILITY, 25s, 40s); + events.RescheduleEvent(EVENT_SPELL_BARKSKIN, 10s); + events.RescheduleEvent(EVENT_SPELL_THORNS, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_NATURE_GRASP, 5s, 15s); } EventMap events; @@ -313,51 +314,51 @@ public: case EVENT_SPELL_LIFEBLOOM: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_LIFEBLOOM, 40.0f) ) me->CastSpell(target, SPELL_LIFEBLOOM, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_NOURISH: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_NOURISH, 40.0f) ) me->CastSpell(target, SPELL_NOURISH, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_REGROWTH: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_REGROWTH, 40.0f) ) me->CastSpell(target, SPELL_REGROWTH, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_REJUVENATION: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_REJUVENATION, 40.0f) ) me->CastSpell(target, SPELL_REJUVENATION, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_THORNS: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_THORNS, 30.0f) ) me->CastSpell(target, SPELL_THORNS, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_TRANQUILITY: me->CastSpell(me, SPELL_TRANQUILITY, false); - events.RepeatEvent(urand(120000, 180000)); + events.Repeat(2min, 3min); EventMapGCD(events, 1500); break; case EVENT_SPELL_BARKSKIN: if( HealthBelowPct(50) ) { me->CastSpell(me, SPELL_BARKSKIN, false); - events.RepeatEvent(60000); + events.Repeat(1min); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_NATURE_GRASP: me->CastSpell(me, SPELL_NATURE_GRASP, false); - events.RepeatEvent(60000); + events.Repeat(1min); EventMapGCD(events, 1500); break; } @@ -408,13 +409,13 @@ public: { SetEquipmentSlots(false, 49992, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_HEALING_WAVE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_RIPTIDE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_SPIRIT_CLEANSE, urand(10000, 15000)); - events.RescheduleEvent(EVENT_SPELL_HEROISM_OR_BLOODLUST, urand(25000, 40000)); - events.RescheduleEvent(EVENT_SPELL_HEX, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_EARTH_SHIELD, urand(15000, 25000)); - events.RescheduleEvent(EVENT_SPELL_EARTH_SHOCK, urand(3000, 10000)); + events.RescheduleEvent(EVENT_SPELL_HEALING_WAVE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_RIPTIDE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_SPIRIT_CLEANSE, 10s, 15s); + events.RescheduleEvent(EVENT_SPELL_HEROISM_OR_BLOODLUST, 25s, 40s); + events.RescheduleEvent(EVENT_SPELL_HEX, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_EARTH_SHIELD, 15s, 25s); + events.RescheduleEvent(EVENT_SPELL_EARTH_SHOCK, 3s, 10s); } EventMap events; @@ -442,19 +443,19 @@ public: case EVENT_SPELL_HEALING_WAVE: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HEALING_WAVE, 40.0f) ) me->CastSpell(target, SPELL_HEALING_WAVE, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_RIPTIDE: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_RIPTIDE, 40.0f) ) me->CastSpell(target, SPELL_RIPTIDE, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_SPIRIT_CLEANSE: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_SPIRIT_CLEANSE, 40.0f) ) me->CastSpell(target, SPELL_SPIRIT_CLEANSE, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_HEROISM_OR_BLOODLUST: @@ -462,25 +463,25 @@ public: me->CastSpell((Unit*)nullptr, SPELL_HEROISM, true); else me->CastSpell((Unit*)nullptr, SPELL_BLOODLUST, true); - events.RepeatEvent(600000); + events.Repeat(10min); EventMapGCD(events, 1500); break; case EVENT_SPELL_HEX: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 20.0f, true) ) me->CastSpell(target, SPELL_HEX, false); - events.RepeatEvent(45000); + events.Repeat(45s); EventMapGCD(events, 1500); break; case EVENT_SPELL_EARTH_SHIELD: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_EARTH_SHIELD, 40.0f) ) me->CastSpell(target, SPELL_EARTH_SHIELD, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_EARTH_SHOCK: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_EARTH_SHOCK, false); - events.RepeatEvent(urand(5000, 10000)); + events.Repeat(5s, 10s); EventMapGCD(events, 1500); break; } @@ -530,14 +531,14 @@ public: { SetEquipmentSlots(false, 50771, 47079, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_HAND_OF_FREEDOM, urand(10000, 15000)); - events.RescheduleEvent(EVENT_SPELL_BUBBLE, 10000); - events.RescheduleEvent(EVENT_SPELL_CLEANSE, urand(10000, 15000)); - events.RescheduleEvent(EVENT_SPELL_FLASH_OF_LIGHT, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_HOLY_LIGHT, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_HOLY_SHOCK, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_HAND_OF_PROTECTION, urand(20000, 35000)); - events.RescheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, urand(10000, 20000)); + events.RescheduleEvent(EVENT_SPELL_HAND_OF_FREEDOM, 10s, 15s); + events.RescheduleEvent(EVENT_SPELL_BUBBLE, 10s); + events.RescheduleEvent(EVENT_SPELL_CLEANSE, 10s, 15s); + events.RescheduleEvent(EVENT_SPELL_FLASH_OF_LIGHT, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_HOLY_LIGHT, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_HOLY_SHOCK, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_HAND_OF_PROTECTION, 20s, 35s); + events.RescheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 10s, 20s); } EventMap events; @@ -565,62 +566,62 @@ public: case EVENT_SPELL_HAND_OF_FREEDOM: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HAND_OF_FREEDOM, 30.0f) ) me->CastSpell(target, SPELL_HAND_OF_FREEDOM, false); - events.RepeatEvent(25000); + events.Repeat(25s); EventMapGCD(events, 1500); break; case EVENT_SPELL_BUBBLE: if( HealthBelowPct(25) ) { me->CastSpell(me, SPELL_BUBBLE, false); - events.RepeatEvent(300000); + events.Repeat(5min); EventMapGCD(events, 1500); } else - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_SPELL_CLEANSE: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_CLEANSE, 40.0f) ) me->CastSpell(target, SPELL_CLEANSE, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_FLASH_OF_LIGHT: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_FLASH_OF_LIGHT, 40.0f) ) me->CastSpell(target, SPELL_FLASH_OF_LIGHT, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_HOLY_LIGHT: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HOLY_LIGHT, 40.0f) ) me->CastSpell(target, SPELL_HOLY_LIGHT, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_HOLY_SHOCK: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HOLY_SHOCK, 40.0f) ) me->CastSpell(target, SPELL_HOLY_SHOCK, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_HAND_OF_PROTECTION: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HAND_OF_PROTECTION, 40.0f) ) { me->CastSpell(target, SPELL_HAND_OF_PROTECTION, false); - events.RepeatEvent(300000); + events.Repeat(5min); EventMapGCD(events, 1500); } else - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_SPELL_HAMMER_OF_JUSTICE: if( Unit* target = SelectTarget(SelectTargetMethod::MaxDistance, 0, 15.0f, true) ) { me->CastSpell(target, SPELL_HAMMER_OF_JUSTICE, false); - events.RepeatEvent(40000); + events.Repeat(40s); EventMapGCD(events, 1500); } else - events.RepeatEvent(10000); + events.Repeat(10s); break; } @@ -665,12 +666,12 @@ public: { SetEquipmentSlots(false, 49992, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_RENEW, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_SHIELD, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_FLASH_HEAL, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_DISPEL, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_MANA_BURN, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_PSYCHIC_SCREAM, 10000); + events.RescheduleEvent(EVENT_SPELL_RENEW, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_SHIELD, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_FLASH_HEAL, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_DISPEL, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_MANA_BURN, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_PSYCHIC_SCREAM, 10s); } EventMap events; @@ -698,46 +699,46 @@ public: case EVENT_SPELL_RENEW: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_RENEW, 40.0f) ) me->CastSpell(target, SPELL_RENEW, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_SHIELD: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_SHIELD, 40.0f) ) me->CastSpell(target, SPELL_SHIELD, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_FLASH_HEAL: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_FLASH_HEAL, 40.0f) ) me->CastSpell(target, SPELL_FLASH_HEAL, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_DISPEL: if( Unit* target = (urand(0, 1) ? SelectTarget(SelectTargetMethod::MaxThreat, 0, 30.0f, true) : SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_DISPEL, 40.0f)) ) me->CastSpell(target, SPELL_DISPEL, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_MANA_BURN: if( Unit* target = SelectEnemyCaster(false, 30.0f) ) { me->CastSpell(target, SPELL_MANA_BURN, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_PSYCHIC_SCREAM: if( HealthBelowPct(50) && EnemiesInRange(8.0f) >= 3 ) { me->CastSpell((Unit*)nullptr, SPELL_PSYCHIC_SCREAM, false); - events.RepeatEvent(30000); + events.Repeat(30s); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; } @@ -785,15 +786,15 @@ public: { SetEquipmentSlots(false, 50040, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_SILENCE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_VAMPIRIC_TOUCH, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_SW_PAIN, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_MIND_FLAY, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_MIND_BLAST, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_HORROR, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_DISPERSION, 10000); - events.RescheduleEvent(EVENT_SPELL_DISPEL, urand(5000, 10000)); - events.RescheduleEvent(EVENT_SPELL_PSYCHIC_SCREAM, 10000); + events.RescheduleEvent(EVENT_SPELL_SILENCE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_VAMPIRIC_TOUCH, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_SW_PAIN, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_MIND_FLAY, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_MIND_BLAST, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_HORROR, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_DISPERSION, 10s); + events.RescheduleEvent(EVENT_SPELL_DISPEL, 5s, 10s); + events.RescheduleEvent(EVENT_SPELL_PSYCHIC_SCREAM, 10s); } EventMap events; @@ -822,72 +823,72 @@ public: if( Unit* target = SelectEnemyCaster(false, 30.0f) ) { me->CastSpell(target, SPELL_SILENCE, false); - events.RepeatEvent(45000); + events.Repeat(45s); EventMapGCD(events, 1500); break; } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_VAMPIRIC_TOUCH: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_VAMPIRIC_TOUCH, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_SW_PAIN: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_SW_PAIN, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_MIND_FLAY: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_MIND_FLAY, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_MIND_BLAST: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_MIND_BLAST, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_HORROR: if( me->GetVictim() && me->GetExactDist2d(me->GetVictim()) <= 30.0f ) { me->CastSpell(me->GetVictim(), SPELL_HORROR, false); - events.RepeatEvent(120000); + events.Repeat(2min); EventMapGCD(events, 1500); } else - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_SPELL_DISPERSION: if( HealthBelowPct(25) ) { me->CastSpell(me, SPELL_DISPERSION, false); - events.RepeatEvent(180000); + events.Repeat(3min); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_DISPEL: if( Unit* target = (urand(0, 1) ? SelectTarget(SelectTargetMethod::MaxThreat, 0, 30.0f, true) : SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_DISPEL, 40.0f)) ) me->CastSpell(target, SPELL_DISPEL, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_PSYCHIC_SCREAM: if( EnemiesInRange(8.0f) >= 3 ) { me->CastSpell((Unit*)nullptr, SPELL_PSYCHIC_SCREAM, false); - events.RepeatEvent(30000); + events.Repeat(30s); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; } @@ -939,15 +940,15 @@ public: { SetEquipmentSlots(false, 49992, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_HELLFIRE, 10000); - events.RescheduleEvent(EVENT_SPELL_CORRUPTION, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_CURSE_OF_AGONY, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_CURSE_OF_EXHAUSTION, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_FEAR, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_SEARING_PAIN, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_SHADOW_BOLT, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_UNSTABLE_AFFLICTION, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_SUMMON_FELHUNTER, 0); + events.RescheduleEvent(EVENT_SPELL_HELLFIRE, 10s); + events.RescheduleEvent(EVENT_SPELL_CORRUPTION, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_CURSE_OF_AGONY, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_CURSE_OF_EXHAUSTION, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_FEAR, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_SEARING_PAIN, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_SHADOW_BOLT, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_UNSTABLE_AFFLICTION, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_SUMMON_FELHUNTER, 0ms); } EventMap events; @@ -986,52 +987,52 @@ public: if( EnemiesInRange(9.0f) >= 3 ) { me->CastSpell((Unit*)nullptr, SPELL_HELLFIRE, false); - events.RepeatEvent(30000); + events.Repeat(30s); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_CORRUPTION: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_CORRUPTION, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); EventMapGCD(events, 1500); break; case EVENT_SPELL_CURSE_OF_AGONY: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_CURSE_OF_AGONY, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); EventMapGCD(events, 1500); break; case EVENT_SPELL_CURSE_OF_EXHAUSTION: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_CURSE_OF_EXHAUSTION, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); EventMapGCD(events, 1500); break; case EVENT_SPELL_FEAR: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 20.0f, true) ) me->CastSpell(target, SPELL_FEAR, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_SEARING_PAIN: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_SEARING_PAIN, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_SHADOW_BOLT: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_UNSTABLE_AFFLICTION: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_UNSTABLE_AFFLICTION, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; } @@ -1083,14 +1084,14 @@ public: { SetEquipmentSlots(false, 47524, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_ARCANE_BARRAGE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_ARCANE_BLAST, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_ARCANE_EXPLOSION, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_BLINK, 10000); - events.RescheduleEvent(EVENT_SPELL_COUNTERSPELL, urand(10000, 20000)); - events.RescheduleEvent(EVENT_SPELL_FROSTBOLT, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_ICE_BLOCK, 10000); - events.RescheduleEvent(EVENT_SPELL_POLYMORPH, urand(5000, 10000)); + events.RescheduleEvent(EVENT_SPELL_ARCANE_BARRAGE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_ARCANE_BLAST, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_ARCANE_EXPLOSION, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_BLINK, 10s); + events.RescheduleEvent(EVENT_SPELL_COUNTERSPELL, 10s, 20s); + events.RescheduleEvent(EVENT_SPELL_FROSTBOLT, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_ICE_BLOCK, 10s); + events.RescheduleEvent(EVENT_SPELL_POLYMORPH, 5s, 10s); } EventMap events; @@ -1118,66 +1119,66 @@ public: case EVENT_SPELL_ARCANE_BARRAGE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_ARCANE_BARRAGE, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_ARCANE_BLAST: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_ARCANE_BLAST, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_ARCANE_EXPLOSION: if( EnemiesInRange(9.0f) >= 3 ) { me->CastSpell((Unit*)nullptr, SPELL_ARCANE_EXPLOSION, false); - events.RepeatEvent(6000); + events.Repeat(6s); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_BLINK: if( HealthBelowPct(50) && EnemiesInRange(10.0f) >= 3 ) { me->CastSpell((Unit*)nullptr, SPELL_FROST_NOVA, false); - events.RepeatEvent(15000); + events.Repeat(15s); EventMapGCD(events, 1500); // blink disabled, movement not working } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_COUNTERSPELL: if( Unit* target = SelectEnemyCaster(true, 30.0f) ) { me->CastSpell(target, SPELL_COUNTERSPELL, false); - events.RepeatEvent(24000); + events.Repeat(24s); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_FROSTBOLT: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_FROSTBOLT, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_ICE_BLOCK: if( HealthBelowPct(25) ) { me->CastSpell(me, SPELL_ICE_BLOCK, false); - events.RepeatEvent(300000); + events.Repeat(5min); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_POLYMORPH: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true) ) me->CastSpell(target, SPELL_POLYMORPH, false); - events.RepeatEvent(15000); + events.Repeat(15s); EventMapGCD(events, 1500); break; } @@ -1230,15 +1231,15 @@ public: { SetEquipmentSlots(false, 47156, EQUIP_NO_CHANGE, 48711); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_AIMED_SHOT, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_DETERRENCE, 10000); - //events.RescheduleEvent(EVENT_SPELL_DISENGAGE, 10000); - events.RescheduleEvent(EVENT_SPELL_EXPLOSIVE_SHOT, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_FROST_TRAP, urand(15000, 20000)); - events.RescheduleEvent(EVENT_SPELL_STEADY_SHOT, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_WING_CLIP, 10000); - events.RescheduleEvent(EVENT_SPELL_WYVERN_STING, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_CALL_PET, 0); + events.RescheduleEvent(EVENT_SPELL_AIMED_SHOT, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_DETERRENCE, 10s); + //events.RescheduleEvent(EVENT_SPELL_DISENGAGE, 10s); + events.RescheduleEvent(EVENT_SPELL_EXPLOSIVE_SHOT, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_FROST_TRAP, 15s, 20s); + events.RescheduleEvent(EVENT_SPELL_STEADY_SHOT, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_WING_CLIP, 10s); + events.RescheduleEvent(EVENT_SPELL_WYVERN_STING, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_CALL_PET, 0ms); } EventMap events; @@ -1276,61 +1277,61 @@ public: case EVENT_SPELL_AIMED_SHOT: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_AIMED_SHOT, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_DETERRENCE: if( HealthBelowPct(25) ) { me->CastSpell(me, SPELL_DETERRENCE, false); - events.RepeatEvent(90000); + events.Repeat(90s); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_DISENGAGE: if( EnemiesInRange(10.0f) >= 3 ) { me->CastSpell(me, SPELL_DISENGAGE, false); - events.RepeatEvent(20000); + events.Repeat(20s); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_EXPLOSIVE_SHOT: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_EXPLOSIVE_SHOT, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_FROST_TRAP: me->CastSpell(me, SPELL_FROST_TRAP, false); - events.RepeatEvent(30000); + events.Repeat(30s); EventMapGCD(events, 1500); break; case EVENT_SPELL_STEADY_SHOT: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_STEADY_SHOT, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_WING_CLIP: if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) <= 5.0f ) me->CastSpell(me->GetVictim(), SPELL_WING_CLIP, false); - events.RepeatEvent(8000); + events.Repeat(8s); EventMapGCD(events, 1500); break; case EVENT_SPELL_WYVERN_STING: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 35.0f, true) ) { me->CastSpell(target, SPELL_WYVERN_STING, false); - events.RepeatEvent(60000); + events.Repeat(1min); EventMapGCD(events, 1500); break; } - events.RepeatEvent(10000); + events.Repeat(10s); break; } @@ -1383,15 +1384,15 @@ public: { SetEquipmentSlots(false, 50966, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_BARKSKIN, 10000); - events.RescheduleEvent(EVENT_SPELL_WRATH, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_MOONFIRE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_STARFIRE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_INSECT_SWARM, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_FAERIE_FIRE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_CYCLONE, urand(10000, 15000)); - events.RescheduleEvent(EVENT_SPELL_FORCE_OF_NATURE, urand(20000, 40000)); + events.RescheduleEvent(EVENT_SPELL_BARKSKIN, 10s); + events.RescheduleEvent(EVENT_SPELL_WRATH, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_MOONFIRE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_STARFIRE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_INSECT_SWARM, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_FAERIE_FIRE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_CYCLONE, 10s, 15s); + events.RescheduleEvent(EVENT_SPELL_FORCE_OF_NATURE, 20s, 40s); } EventMap events; @@ -1426,57 +1427,57 @@ public: if( HealthBelowPct(50) ) { me->CastSpell(me, SPELL_BARKSKIN, false); - events.RepeatEvent(60000); + events.Repeat(1min); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_WRATH: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_WRATH, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_MOONFIRE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_MOONFIRE, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_STARFIRE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_STARFIRE, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_INSECT_SWARM: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_INSECT_SWARM, false); - events.RepeatEvent(urand(5000, 15000)); + events.Repeat(5s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_ENTANGLING_ROOTS: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true) ) me->CastSpell(target, SPELL_ENTANGLING_ROOTS, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_FAERIE_FIRE: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_FAERIE_FIRE, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); EventMapGCD(events, 1500); break; case EVENT_SPELL_CYCLONE: if( Unit* target = SelectTarget(SelectTargetMethod::MaxDistance, 0, 20.0f, true) ) me->CastSpell(target, SPELL_CYCLONE, false); - events.RepeatEvent(urand(25000, 40000)); + events.Repeat(25s, 40s); EventMapGCD(events, 1500); break; case EVENT_SPELL_FORCE_OF_NATURE: me->CastSpell((Unit*)nullptr, SPELL_FORCE_OF_NATURE, false); - events.RepeatEvent(180000); + events.Repeat(3min); EventMapGCD(events, 1500); break; } @@ -1528,15 +1529,15 @@ public: { SetEquipmentSlots(false, 47427, 46964, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_BLADESTORM, 20000); - events.RescheduleEvent(EVENT_SPELL_INTIMIDATING_SHOUT, 14000); - events.RescheduleEvent(EVENT_SPELL_MORTAL_STRIKE, urand(5000, 10000)); - events.RescheduleEvent(EVENT_SPELL_CHARGE, 3000); - events.RescheduleEvent(EVENT_SPELL_DISARM, urand(15000, 25000)); - events.RescheduleEvent(EVENT_SPELL_OVERPOWER, urand(5000, 10000)); - events.RescheduleEvent(EVENT_SPELL_SUNDER_ARMOR, urand(5000, 10000)); - events.RescheduleEvent(EVENT_SPELL_SHATTERING_THROW, urand(25000, 40000)); - events.RescheduleEvent(EVENT_SPELL_RETALIATION, urand(25000, 40000)); + events.RescheduleEvent(EVENT_SPELL_BLADESTORM, 20s); + events.RescheduleEvent(EVENT_SPELL_INTIMIDATING_SHOUT, 14s); + events.RescheduleEvent(EVENT_SPELL_MORTAL_STRIKE, 5s, 10s); + events.RescheduleEvent(EVENT_SPELL_CHARGE, 3s); + events.RescheduleEvent(EVENT_SPELL_DISARM, 15s, 25s); + events.RescheduleEvent(EVENT_SPELL_OVERPOWER, 5s, 10s); + events.RescheduleEvent(EVENT_SPELL_SUNDER_ARMOR, 5s, 10s); + events.RescheduleEvent(EVENT_SPELL_SHATTERING_THROW, 25s, 40s); + events.RescheduleEvent(EVENT_SPELL_RETALIATION, 25s, 40s); } EventMap events; @@ -1564,118 +1565,118 @@ public: case EVENT_SPELL_BLADESTORM: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( EnemiesInRange(8.0f) >= 3 ) { me->CastSpell(me, SPELL_BLADESTORM, false); - events.RepeatEvent(90000); - events.DelayEvents(9000); + events.Repeat(90s); + events.DelayEvents(9s); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_INTIMIDATING_SHOUT: if( EnemiesInRange(8.0f) >= 3 ) { me->CastSpell((Unit*)nullptr, SPELL_INTIMIDATING_SHOUT, false); - events.RepeatEvent(120000); + events.Repeat(2min); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_MORTAL_STRIKE: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false); - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); EventMapGCD(events, 1500); break; case EVENT_SPELL_CHARGE: if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) > 8.0f && me->GetDistance2d(me->GetVictim()) < 25.0f ) { me->CastSpell(me->GetVictim(), SPELL_CHARGE, false); - events.RepeatEvent(10000); + events.Repeat(10s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_DISARM: if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) < 5.0f ) { me->CastSpell(me->GetVictim(), SPELL_DISARM, false); - events.RepeatEvent(60000); + events.Repeat(1min); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_OVERPOWER: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) < 5.0f ) { me->CastSpell(me->GetVictim(), SPELL_OVERPOWER, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_SUNDER_ARMOR: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) < 5.0f ) { me->CastSpell(me->GetVictim(), SPELL_SUNDER_ARMOR, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_SHATTERING_THROW: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) < 25.0f ) { me->CastSpell(me->GetVictim(), SPELL_SHATTERING_THROW, false); - events.RepeatEvent(300000); + events.Repeat(5min); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_RETALIATION: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( EnemiesInRange(8.0f) >= 3 ) { me->CastSpell(me, SPELL_RETALIATION, false); - events.RepeatEvent(300000); + events.Repeat(5min); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; } @@ -1722,13 +1723,13 @@ public: { SetEquipmentSlots(false, 47518, 51021, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_CHAINS_OF_ICE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_DEATH_COIL, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_DEATH_GRIP, 0); - events.RescheduleEvent(EVENT_SPELL_FROST_STRIKE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_ICEBOUND_FORTITUDE, 10000); - events.RescheduleEvent(EVENT_SPELL_ICY_TOUCH, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_STRANGULATE, urand(20000, 30000)); + events.RescheduleEvent(EVENT_SPELL_CHAINS_OF_ICE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_DEATH_COIL, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_DEATH_GRIP, 0ms); + events.RescheduleEvent(EVENT_SPELL_FROST_STRIKE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_ICEBOUND_FORTITUDE, 10s); + events.RescheduleEvent(EVENT_SPELL_ICY_TOUCH, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_STRANGULATE, 20s, 30s); } EventMap events; @@ -1757,21 +1758,21 @@ public: if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) <= 25.0f ) { me->CastSpell(me->GetVictim(), SPELL_CHAINS_OF_ICE, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_DEATH_COIL: if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) <= 30.0f ) { me->CastSpell(me->GetVictim(), SPELL_DEATH_COIL, false); - events.RepeatEvent(urand(5000, 8000)); + events.Repeat(5s, 8s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_DEATH_GRIP: if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) <= 30.0f && me->GetDistance2d(me->GetVictim()) >= 12.0f ) @@ -1782,56 +1783,56 @@ public: me->GetClosePoint(x, y, z, 3.0f); pos.Relocate(x, y, z); me->GetVictim()->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), 49575, true); - events.RepeatEvent(35000); + events.Repeat(35s); EventMapGCD(events, 2000); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_FROST_STRIKE: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) < 5.0f ) { me->CastSpell(me->GetVictim(), SPELL_FROST_STRIKE, false); - events.RepeatEvent(urand(6000, 10000)); + events.Repeat(6s, 10s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_ICEBOUND_FORTITUDE: if( HealthBelowPct(50) ) { me->CastSpell(me, SPELL_ICEBOUND_FORTITUDE, false); - events.RepeatEvent(60000); + events.Repeat(1min); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_ICY_TOUCH: if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) < 20.0f ) { me->CastSpell(me->GetVictim(), SPELL_ICY_TOUCH, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_STRANGULATE: if(SelectEnemyCaster(false, 30.0f)) { me->CastSpell(me->GetVictim(), SPELL_STRANGULATE, false); - events.RepeatEvent(120000); + events.Repeat(2min); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; } @@ -1879,13 +1880,13 @@ public: SetEquipmentSlots(false, 47422, 49982, EQUIP_NO_CHANGE); me->setPowerType(POWER_ENERGY); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_FAN_OF_KNIVES, 10000); - events.RescheduleEvent(EVENT_SPELL_BLIND, urand(10000, 15000)); - events.RescheduleEvent(EVENT_SPELL_CLOAK, 10000); - events.RescheduleEvent(EVENT_SPELL_BLADE_FLURRY, urand(20000, 40000)); - //events.RescheduleEvent(EVENT_SPELL_SHADOWSTEP, urand(15000,25000)); - events.RescheduleEvent(EVENT_SPELL_HEMORRHAGE, urand(3000, 5000)); - events.RescheduleEvent(EVENT_SPELL_EVISCERATE, urand(20000, 25000)); + events.RescheduleEvent(EVENT_SPELL_FAN_OF_KNIVES, 10s); + events.RescheduleEvent(EVENT_SPELL_BLIND, 10s, 15s); + events.RescheduleEvent(EVENT_SPELL_CLOAK, 10s); + events.RescheduleEvent(EVENT_SPELL_BLADE_FLURRY, 20s, 40s); + //events.RescheduleEvent(EVENT_SPELL_SHADOWSTEP, 15s, 25s); + events.RescheduleEvent(EVENT_SPELL_HEMORRHAGE, 3s, 5s); + events.RescheduleEvent(EVENT_SPELL_EVISCERATE, 20s, 25s); } EventMap events; @@ -1913,45 +1914,45 @@ public: case EVENT_SPELL_FAN_OF_KNIVES: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( EnemiesInRange(10.0f) >= 3 ) { me->CastSpell(me->GetVictim(), SPELL_FAN_OF_KNIVES, false); - events.RepeatEvent(urand(6000, 10000)); + events.Repeat(6s, 10s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_BLIND: if( Unit* target = SelectTarget(SelectTargetMethod::MinThreat, 0, 20.0f, true) ) { me->CastSpell(target, SPELL_BLIND, false); - events.RepeatEvent(120000); + events.Repeat(2min); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_CLOAK: if( HealthBelowPct(50) ) { me->CastSpell(me, SPELL_CLOAK, false); - events.RepeatEvent(90000); + events.Repeat(90s); EventMapGCD(events, 1500); } else - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_BLADE_FLURRY: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) - events.RepeatEvent(5000); + events.Repeat(5s); else { me->CastSpell(me, SPELL_BLADE_FLURRY, false); - events.RepeatEvent(120000); + events.Repeat(2min); EventMapGCD(events, 1500); } break; @@ -1959,41 +1960,41 @@ public: if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) < 40.0f && me->GetDistance2d(me->GetVictim()) > 10.0f ) { me->CastSpell(me->GetVictim(), SPELL_SHADOWSTEP, false); - events.RepeatEvent(30000); + events.Repeat(30s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_HEMORRHAGE: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) <= 5.0f ) { me->CastSpell(me->GetVictim(), SPELL_HEMORRHAGE, false); - events.RepeatEvent(5000); + events.Repeat(5s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_EVISCERATE: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( me->GetVictim() && me->GetDistance2d(me->GetVictim()) <= 5.0f ) { me->CastSpell(me->GetVictim(), SPELL_EVISCERATE, false); - events.RepeatEvent(urand(15000, 25000)); + events.Repeat(15s, 25s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; } @@ -2039,11 +2040,11 @@ public: me->UpdateDamagePhysical(OFF_ATTACK); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_HEROISM_OR_BLOODLUST, urand(25000, 40000)); - events.RescheduleEvent(EVENT_SPELL_EARTH_SHOCK_ENH, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_LAVA_LASH, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_STORMSTRIKE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SUMMON_TOTEM, urand(10000, 20000)); + events.RescheduleEvent(EVENT_SPELL_HEROISM_OR_BLOODLUST, 25s, 40s); + events.RescheduleEvent(EVENT_SPELL_EARTH_SHOCK_ENH, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_LAVA_LASH, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_STORMSTRIKE, 3s, 10s); + events.RescheduleEvent(EVENT_SUMMON_TOTEM, 10s, 20s); } EventMap events; @@ -2071,59 +2072,59 @@ public: case EVENT_SPELL_EARTH_SHOCK_ENH: if( me->HasUnitFlag(UNIT_FLAG_SILENCED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, 25.0f, true) ) { me->CastSpell(target, SPELL_EARTH_SHOCK_ENH, false); - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_LAVA_LASH: if( me->HasUnitFlag2(UNIT_FLAG2_DISARM_OFFHAND) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, 5.0f, true) ) { me->CastSpell(target, SPELL_LAVA_LASH, false); - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_STORMSTRIKE: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) && me->HasUnitFlag2(UNIT_FLAG2_DISARM_OFFHAND) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, 5.0f, true) ) { me->CastSpell(target, SPELL_STORMSTRIKE, false); - events.RepeatEvent(urand(8000, 9000)); + events.Repeat(8s, 9s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_HEROISM_OR_BLOODLUST: if( me->GetEntry() == NPC_ALLIANCE_SHAMAN_RESTORATION ) me->CastSpell((Unit*)nullptr, SPELL_HEROISM, true); else me->CastSpell((Unit*)nullptr, SPELL_BLOODLUST, true); - events.RepeatEvent(600000); + events.Repeat(10min); EventMapGCD(events, 1500); break; case EVENT_SUMMON_TOTEM: me->CastSpell((Unit*)nullptr, RAND(SPELL_GROUNDING_TOTEM, SPELL_WINDFURY_TOTEM, SPELL_TREMOR_TOTEM), false); - events.RepeatEvent(30000); + events.Repeat(30s); EventMapGCD(events, 1500); break; } @@ -2174,14 +2175,14 @@ public: { SetEquipmentSlots(false, 47519, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_AVENGING_WRATH, urand(20000, 30000)); - events.RescheduleEvent(EVENT_SPELL_CRUSADER_STRIKE, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_DIVINE_SHIELD, 10000); - events.RescheduleEvent(EVENT_SPELL_DIVINE_STORM, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE_RET, urand(15000, 25000)); - events.RescheduleEvent(EVENT_SPELL_HAND_OF_PROTECTION_RET, urand(25000, 40000)); - events.RescheduleEvent(EVENT_SPELL_JUDGEMENT_OF_COMMAND, urand(3000, 10000)); - events.RescheduleEvent(EVENT_SPELL_REPENTANCE, urand(10000, 15000)); + events.RescheduleEvent(EVENT_SPELL_AVENGING_WRATH, 20s, 30s); + events.RescheduleEvent(EVENT_SPELL_CRUSADER_STRIKE, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_DIVINE_SHIELD, 10s); + events.RescheduleEvent(EVENT_SPELL_DIVINE_STORM, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE_RET, 15s, 25s); + events.RescheduleEvent(EVENT_SPELL_HAND_OF_PROTECTION_RET, 25s, 40s); + events.RescheduleEvent(EVENT_SPELL_JUDGEMENT_OF_COMMAND, 3s, 10s); + events.RescheduleEvent(EVENT_SPELL_REPENTANCE, 10s, 15s); } EventMap events; @@ -2208,88 +2209,88 @@ public: break; case EVENT_SPELL_AVENGING_WRATH: me->CastSpell(me, SPELL_AVENGING_WRATH, false); - events.RepeatEvent(180000); + events.Repeat(3min); EventMapGCD(events, 1500); break; case EVENT_SPELL_CRUSADER_STRIKE: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, 5.0f, true) ) { me->CastSpell(target, SPELL_CRUSADER_STRIKE, false); - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_DIVINE_SHIELD: if( HealthBelowPct(25) ) { me->CastSpell(me, SPELL_DIVINE_SHIELD, false); - events.RepeatEvent(300000); + events.Repeat(5min); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_DIVINE_STORM: if( me->HasUnitFlag(UNIT_FLAG_DISARMED) ) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } if( EnemiesInRange(5.0f) >= 3 ) { me->CastSpell((Unit*)nullptr, SPELL_DIVINE_STORM, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_HAMMER_OF_JUSTICE_RET: if( Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, 15.0f, true) ) { me->CastSpell(target, SPELL_HAMMER_OF_JUSTICE_RET, false); - events.RepeatEvent(40000); + events.Repeat(40s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_HAND_OF_PROTECTION_RET: if( Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HAND_OF_PROTECTION_RET, 30.0f) ) { me->CastSpell(target, SPELL_HAND_OF_PROTECTION_RET, false); - events.RepeatEvent(300000); + events.Repeat(5min); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_JUDGEMENT_OF_COMMAND: if( Unit* target = SelectTarget(SelectTargetMethod::MaxThreat, 0, 20.0f, true) ) { me->CastSpell(target, SPELL_JUDGEMENT_OF_COMMAND, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_REPENTANCE: if( Unit* target = SelectTarget(SelectTargetMethod::MinThreat, 0, 20.0f, true) ) { me->CastSpell(target, SPELL_REPENTANCE, false); - events.RepeatEvent(60000); + events.Repeat(1min); EventMapGCD(events, 1500); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; } @@ -2325,8 +2326,8 @@ public: npc_toc_pet_warlockAI(Creature* pCreature) : boss_faction_championsAI(pCreature, AI_PET) { events.Reset(); - events.RescheduleEvent(EVENT_SPELL_DEVOUR_MAGIC, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_SPELL_LOCK, urand(5000, 15000)); + events.RescheduleEvent(EVENT_SPELL_DEVOUR_MAGIC, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_SPELL_LOCK, 5s, 15s); } EventMap events; @@ -2354,13 +2355,13 @@ public: case EVENT_SPELL_DEVOUR_MAGIC: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_DEVOUR_MAGIC, false); - events.RepeatEvent(urand(8000, 15000)); + events.Repeat(8s, 15s); EventMapGCD(events, 1500); break; case EVENT_SPELL_SPELL_LOCK: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_SPELL_LOCK, false); - events.RepeatEvent(24000); + events.Repeat(24s); EventMapGCD(events, 1500); break; } @@ -2400,7 +2401,7 @@ public: npc_toc_pet_hunterAI(Creature* pCreature) : boss_faction_championsAI(pCreature, AI_PET) { events.Reset(); - events.RescheduleEvent(EVENT_SPELL_CLAW, urand(5000, 15000)); + events.RescheduleEvent(EVENT_SPELL_CLAW, 5s, 15s); } EventMap events; @@ -2428,7 +2429,7 @@ public: case EVENT_SPELL_CLAW: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_CLAW, false); - events.RepeatEvent(urand(8000, 15000)); + events.Repeat(8s, 15s); break; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index 62877d27c..2ea3e2813 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -129,14 +129,14 @@ public: { me->setActive(true); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_FEL_FIREBALL, 5000); - events.RescheduleEvent(EVENT_SPELL_FEL_LIGHTNING, urand(10000, 15000)); - events.RescheduleEvent(EVENT_SPELL_INCINERATE_FLESH, urand(24000, 26000)); - events.RescheduleEvent(EVENT_SPELL_NETHER_POWER, urand(25000, 45000)); - events.RescheduleEvent(EVENT_SPELL_LEGION_FLAME, 30000); + events.RescheduleEvent(EVENT_SPELL_FEL_FIREBALL, 5s); + events.RescheduleEvent(EVENT_SPELL_FEL_LIGHTNING, 10s, 15s); + events.RescheduleEvent(EVENT_SPELL_INCINERATE_FLESH, 24s, 26s); + events.RescheduleEvent(EVENT_SPELL_NETHER_POWER, 25s, 45s); + events.RescheduleEvent(EVENT_SPELL_LEGION_FLAME, 30s); //if( GetDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC ) - // events.RescheduleEvent(EVENT_SPELL_TOUCH_OF_JARAXXUS, urand(10000,15000)); - events.RescheduleEvent(EVENT_SUMMON_NETHER_PORTAL, 20000); // it schedules EVENT_SUMMON_VOLCANO + // events.RescheduleEvent(EVENT_SPELL_TOUCH_OF_JARAXXUS, 10s, 15s); + events.RescheduleEvent(EVENT_SUMMON_NETHER_PORTAL, 20s); // it schedules EVENT_SUMMON_VOLCANO me->RemoveAura(SPELL_CHAINS); Talk(SAY_AGGRO); @@ -208,12 +208,12 @@ public: case EVENT_SPELL_FEL_FIREBALL: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_FEL_FIREBALL, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; case EVENT_SPELL_FEL_LIGHTNING: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true) ) me->CastSpell(target, SPELL_FEL_LIGHTNING, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; case EVENT_SPELL_INCINERATE_FLESH: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true) ) @@ -222,12 +222,12 @@ public: Talk(SAY_INCINERATE); me->CastSpell(target, SPELL_INCINERATE_FLESH, false); } - events.RepeatEvent(urand(20000, 25000)); + events.Repeat(20s, 25s); break; case EVENT_SPELL_NETHER_POWER: me->CastSpell(me, SPELL_NETHER_POWER, false); - events.DelayEvents(5000); - events.RepeatEvent(urand(25000, 45000)); + events.DelayEvents(5s); + events.Repeat(25s, 45s); break; case EVENT_SPELL_LEGION_FLAME: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true) ) @@ -235,26 +235,26 @@ public: Talk(EMOTE_LEGION_FLAME, target); me->CastSpell(target, SPELL_LEGION_FLAME, false); } - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_SPELL_TOUCH_OF_JARAXXUS: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true) ) me->CastSpell(target, SPELL_TOUCH_OF_JARAXXUS, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; case EVENT_SUMMON_NETHER_PORTAL: Talk(EMOTE_NETHER_PORTAL); Talk(SAY_MISTRESS_OF_PAIN); me->CastSpell((Unit*)nullptr, SPELL_SUMMON_NETHER_PORTAL, false); - events.RescheduleEvent(EVENT_SUMMON_VOLCANO, 60000); + events.RescheduleEvent(EVENT_SUMMON_VOLCANO, 1min); break; case EVENT_SUMMON_VOLCANO: Talk(EMOTE_INFERNAL_ERUPTION); Talk(SAY_INFERNAL_ERUPTION); me->CastSpell((Unit*)nullptr, SPELL_SUMMON_VOLCANO, false); - events.RescheduleEvent(EVENT_SUMMON_NETHER_PORTAL, 60000); + events.RescheduleEvent(EVENT_SUMMON_NETHER_PORTAL, 1min); break; } @@ -316,7 +316,7 @@ public: DoZoneInCombat(); } events.Reset(); - events.RescheduleEvent(EVENT_SPELL_FEL_STEAK, urand(7000, 20000)); + events.RescheduleEvent(EVENT_SPELL_FEL_STEAK, 7s, 20s); } void UpdateAI(uint32 diff) override @@ -340,10 +340,10 @@ public: me->AddThreat(target, 50000.0f); me->CastSpell(target, SPELL_FEL_STEAK_MORPH, true); me->CastSpell(target, SPELL_FEL_STEAK, true); - events.RepeatEvent(30000); + events.Repeat(30s); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; } @@ -386,10 +386,10 @@ public: DoZoneInCombat(); } events.Reset(); - events.RescheduleEvent(EVENT_SPELL_SHIVAN_SLASH, urand(10000, 20000)); - events.RescheduleEvent(EVENT_SPELL_SPINNING_PAIN_SPIKE, urand(22000, 30000)); + events.RescheduleEvent(EVENT_SPELL_SHIVAN_SLASH, 10s, 20s); + events.RescheduleEvent(EVENT_SPELL_SPINNING_PAIN_SPIKE, 22s, 30s); if( IsHeroic() ) - events.RescheduleEvent(EVENT_SPELL_MISTRESS_KISS, urand(10000, 15000)); + events.RescheduleEvent(EVENT_SPELL_MISTRESS_KISS, 10s, 15s); } void SpellHit(Unit* /*caster*/, SpellInfo const* /*spell*/) override @@ -415,16 +415,16 @@ public: case EVENT_SPELL_SHIVAN_SLASH: if( me->GetVictim() ) me->CastSpell(me->GetVictim(), SPELL_SHIVAN_SLASH, false); - events.RepeatEvent(urand(15000, 25000)); + events.Repeat(15s, 25s); break; case EVENT_SPELL_SPINNING_PAIN_SPIKE: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 140.0f, true) ) me->CastSpell(target, SPELL_SPINNING_PAIN_SPIKE, false); - events.RepeatEvent(urand(25000, 30000)); + events.Repeat(25s, 30s); break; case EVENT_SPELL_MISTRESS_KISS: me->CastSpell((Unit*)nullptr, SPELL_MISTRESS_KISS, false); - events.RepeatEvent(urand(25000, 35000)); + events.Repeat(25s, 35s); break; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index a785f6c1a..984e4b25e 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -100,15 +100,15 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(EVENT_SPELL_FIRE_BOMB, urand(10000, 30000)); + events.ScheduleEvent(EVENT_SPELL_FIRE_BOMB, 10s, 30s); } void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(EVENT_SPELL_SNOBOLLED, 1500); - events.ScheduleEvent(EVENT_SPELL_BATTER, 5000); - events.ScheduleEvent(EVENT_SPELL_HEAD_CRACK, 25000); + events.ScheduleEvent(EVENT_SPELL_SNOBOLLED, 1500ms); + events.ScheduleEvent(EVENT_SPELL_BATTER, 5s); + events.ScheduleEvent(EVENT_SPELL_HEAD_CRACK, 25s); } void AttackStart(Unit* who) override @@ -168,7 +168,7 @@ public: case EVENT_SPELL_BATTER: if( t->GetTypeId() == TYPEID_PLAYER ) me->CastSpell(t, SPELL_BATTER); - events.RepeatEvent(urand(6000, 8000)); + events.Repeat(6s, 8s); break; case EVENT_SPELL_FIRE_BOMB: { @@ -194,13 +194,13 @@ public: } } - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); } break; case EVENT_SPELL_HEAD_CRACK: if( t->GetTypeId() == TYPEID_PLAYER ) me->CastSpell(t, SPELL_HEAD_CRACK); - events.RepeatEvent(urand(30000, 35000)); + events.Repeat(30s, 35s); break; } @@ -260,9 +260,9 @@ public: { me->setActive(true); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_IMPALE, urand(9000, 10000)); - events.RescheduleEvent(EVENT_SPELL_STAGGERING_STOMP, 15000); - events.RescheduleEvent(EVENT_PICK_SNOBOLD_TARGET, urand(16000, 24000)); + events.RescheduleEvent(EVENT_SPELL_IMPALE, 9s, 10s); + events.RescheduleEvent(EVENT_SPELL_STAGGERING_STOMP, 15s); + events.RescheduleEvent(EVENT_PICK_SNOBOLD_TARGET, 16s, 24s); // refresh snobold position if( Vehicle* vk = me->GetVehicleKit() ) @@ -297,14 +297,14 @@ public: { if( Unit* victim = me->GetVictim() ) me->CastSpell(victim, SPELL_IMPALE, false); - events.RepeatEvent(urand(9000, 10000)); + events.Repeat(9s, 10s); } else - events.RepeatEvent(2500); + events.Repeat(2500ms); break; case EVENT_SPELL_STAGGERING_STOMP: me->CastSpell((Unit*)nullptr, SPELL_STAGGERING_STOMP, false); - events.RepeatEvent(urand(20000, 25000)); + events.Repeat(20s, 25s); break; case EVENT_PICK_SNOBOLD_TARGET: if( Vehicle* vk = me->GetVehicleKit() ) @@ -326,12 +326,12 @@ public: snobold->ChangeSeat(4); // switch to hand me->setAttackTimer(BASE_ATTACK, 3000); PlayerGUID = p->GetGUID(); - events.RescheduleEvent(EVENT_RELEASE_SNOBOLD, 2500); + events.RescheduleEvent(EVENT_RELEASE_SNOBOLD, 2500ms); } break; } - events.RepeatEvent(urand(16000, 24000)); + events.Repeat(16s, 24s); break; case EVENT_RELEASE_SNOBOLD: { @@ -355,7 +355,7 @@ public: } else if( Vehicle* vk = me->GetVehicleKit() ) { - events.RescheduleEvent(EVENT_PICK_SNOBOLD_TARGET, 5000); // player not found (died? left instance?), pick new one faster! + events.RescheduleEvent(EVENT_PICK_SNOBOLD_TARGET, 5s); if( Unit* snobold = vk->GetPassenger(4) ) if( snobold->GetTypeId() == TYPEID_UNIT ) { @@ -492,13 +492,13 @@ struct boss_jormungarAI : public ScriptedAI { case -1: if( !me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE) ) - events.RescheduleEvent(EVENT_SUBMERGE, 1500); + events.RescheduleEvent(EVENT_SUBMERGE, 1500ms); break; case -2: if( me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE) ) bIsStationary = true; // it will come out mobile soon else if( me->GetDisplayId() == _MODEL_STATIONARY ) - events.RescheduleEvent(EVENT_SUBMERGE, 1000); + events.RescheduleEvent(EVENT_SUBMERGE, 1s); else events.CancelEvent(EVENT_SUBMERGE); me->CastSpell(me, SPELL_ENRAGE, true); @@ -513,18 +513,18 @@ struct boss_jormungarAI : public ScriptedAI if( me->GetDisplayId() == _MODEL_STATIONARY ) { me->SetAttackTime(BASE_ATTACK, 1500); - events.RescheduleEvent(EVENT_SPELL_SPRAY, (me->GetEntry() == NPC_ACIDMAW ? 20000 : 15000)); - events.RescheduleEvent(EVENT_SPELL_SWEEP, urand(15000, 30000)); + events.RescheduleEvent(EVENT_SPELL_SPRAY, (me->GetEntry() == NPC_ACIDMAW ? 20s : 15s)); + events.RescheduleEvent(EVENT_SPELL_SWEEP, 15s, 30s); } else { me->SetAttackTime(BASE_ATTACK, 2000); - events.RescheduleEvent(EVENT_SPELL_BITE, (me->GetEntry() == NPC_ACIDMAW ? 20000 : 15000)); - events.RescheduleEvent(EVENT_SPELL_SPEW, urand(15000, 30000)); - events.RescheduleEvent(EVENT_SPELL_SLIME_POOL, 15000); + events.RescheduleEvent(EVENT_SPELL_BITE, (me->GetEntry() == NPC_ACIDMAW ? 20s : 15s)); + events.RescheduleEvent(EVENT_SPELL_SPEW, 15s, 30s); + events.RescheduleEvent(EVENT_SPELL_SLIME_POOL, 15s); } if( !me->HasAura(SPELL_ENRAGE) ) - events.RescheduleEvent(EVENT_SUBMERGE, urand(45000, 50000)); + events.RescheduleEvent(EVENT_SUBMERGE, 45s, 50s); } void JustEngagedWith(Unit* /*who*/) override @@ -578,7 +578,7 @@ struct boss_jormungarAI : public ScriptedAI c->AI()->DoAction(-1); events.Reset(); - events.RescheduleEvent(EVENT_MOVE_UNDERGROUND, 2500); + events.RescheduleEvent(EVENT_MOVE_UNDERGROUND, 2500ms); } break; case EVENT_MOVE_UNDERGROUND: @@ -595,7 +595,7 @@ struct boss_jormungarAI : public ScriptedAI me->StopMovingOnCurrentPos(); DoResetThreatList(); - events.RescheduleEvent(EVENT_EMERGE, 6000); + events.RescheduleEvent(EVENT_EMERGE, 6s); } break; case EVENT_EMERGE: @@ -625,25 +625,25 @@ struct boss_jormungarAI : public ScriptedAI case EVENT_SPELL_SPRAY: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true) ) me->CastSpell(target, _SPELL_SPRAY, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SPELL_SWEEP: me->CastSpell((Unit*)nullptr, SPELL_SWEEP_0, false); - events.RepeatEvent(urand(15000, 30000)); + events.Repeat(15s, 30s); break; case EVENT_SPELL_BITE: if( Unit* victim = me->GetVictim() ) me->CastSpell(victim, _SPELL_BITE, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SPELL_SPEW: me->CastSpell(me->GetVictim(), _SPELL_SPEW, false); - events.RepeatEvent(urand(15000, 30000)); + events.Repeat(15s, 30s); break; case EVENT_SPELL_SLIME_POOL: if( Creature* c = me->SummonCreature(NPC_SLIME_POOL, *me, TEMPSUMMON_TIMED_DESPAWN, 30000) ) c->CastSpell(c, SPELL_SLIME_POOL_EFFECT, true); - events.RepeatEvent(30000); + events.Repeat(30s); break; } @@ -802,10 +802,10 @@ public: { me->setActive(true); events.Reset(); - events.ScheduleEvent(EVENT_SPELL_FEROCIOUS_BUTT, urand(15000, 30000)); - events.RescheduleEvent(EVENT_SPELL_WHIRL, urand(10000, 12000)); - events.RescheduleEvent(EVENT_SPELL_ARCTIC_BREATH, 14000); - events.RescheduleEvent(EVENT_JUMP_MIDDLE, 30000); + events.ScheduleEvent(EVENT_SPELL_FEROCIOUS_BUTT, 15s, 30s); + events.RescheduleEvent(EVENT_SPELL_WHIRL, 10s, 12s); + events.RescheduleEvent(EVENT_SPELL_ARCTIC_BREATH, 14s); + events.RescheduleEvent(EVENT_JUMP_MIDDLE, 30s); } void JustReachedHome() override @@ -832,10 +832,10 @@ public: if( id == EVENT_CHARGE ) { events.Reset(); - events.RescheduleEvent(EVENT_SPELL_FEROCIOUS_BUTT, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_WHIRL, urand(2000, 5000)); - events.RescheduleEvent(EVENT_SPELL_ARCTIC_BREATH, urand(5000, 8000)); - events.RescheduleEvent(EVENT_JUMP_MIDDLE, urand(30000, 50000)); + events.RescheduleEvent(EVENT_SPELL_FEROCIOUS_BUTT, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_WHIRL, 2s, 5s); + events.RescheduleEvent(EVENT_SPELL_ARCTIC_BREATH, 5s, 8s); + events.RescheduleEvent(EVENT_JUMP_MIDDLE, 30s, 50s); float angle = me->GetAngle(&Locs[LOC_CENTER]); angle = angle >= M_PI ? angle - M_PI : angle + M_PI; @@ -877,16 +877,16 @@ public: case EVENT_SPELL_FEROCIOUS_BUTT: if( Unit* victim = me->GetVictim() ) me->CastSpell(victim, SPELL_FEROCIOUS_BUTT, false); - events.RepeatEvent(urand(15000, 30000)); + events.Repeat(15s, 30s); break; case EVENT_SPELL_WHIRL: me->CastSpell((Unit*)nullptr, SPELL_WHIRL, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; case EVENT_SPELL_ARCTIC_BREATH: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 90.0f, true) ) me->CastSpell(target, SPELL_ARCTIC_BREATH, false); - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); break; case EVENT_JUMP_MIDDLE: me->StopMoving(); @@ -897,13 +897,13 @@ public: me->GetMotionMaster()->MoveJump(Locs[LOC_CENTER].GetPositionX(), Locs[LOC_CENTER].GetPositionY(), Locs[LOC_CENTER].GetPositionZ(), 40.0f, 12.0f); me->SetGuidValue(UNIT_FIELD_TARGET, ObjectGuid::Empty); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_MASSIVE_CRASH, 2000); + events.RescheduleEvent(EVENT_SPELL_MASSIVE_CRASH, 2s); break; case EVENT_SPELL_MASSIVE_CRASH: me->GetMotionMaster()->Clear(); me->CastSpell((Unit*)nullptr, SPELL_MASSIVE_CRASH, false); - events.RescheduleEvent(EVENT_GAZE, 2000); + events.RescheduleEvent(EVENT_GAZE, 2s); break; case EVENT_GAZE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 500.0f, true) ) @@ -913,14 +913,14 @@ public: me->SetFacingToObject(target); Talk(EMOTE_TRAMPLE_STARE, target); me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); - events.RescheduleEvent(EVENT_JUMP_BACK, 2000); + events.RescheduleEvent(EVENT_JUMP_BACK, 2s); } else // in case something went wrong { - events.RescheduleEvent(EVENT_SPELL_FEROCIOUS_BUTT, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_WHIRL, urand(2000, 5000)); - events.RescheduleEvent(EVENT_SPELL_ARCTIC_BREATH, urand(5000, 8000)); - events.RescheduleEvent(EVENT_JUMP_MIDDLE, urand(30000, 50000)); + events.RescheduleEvent(EVENT_SPELL_FEROCIOUS_BUTT, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_WHIRL, 2s, 5s); + events.RescheduleEvent(EVENT_SPELL_ARCTIC_BREATH, 5s, 8s); + events.RescheduleEvent(EVENT_JUMP_MIDDLE, 30s, 50s); me->GetMotionMaster()->MovementExpired(); me->SetReactState(REACT_AGGRESSIVE); } @@ -944,7 +944,7 @@ public: me->StopMoving(); me->GetMotionMaster()->MoveJump(Locs[LOC_CENTER].GetPositionX() + cos(jumpangle) * 35.0f, Locs[LOC_CENTER].GetPositionY() + std::sin(jumpangle) * 35.0f, Locs[LOC_CENTER].GetPositionZ() + 1.0f, 40.0f, 12.0f); - events.RescheduleEvent(EVENT_TRAMPLE, 1500); + events.RescheduleEvent(EVENT_TRAMPLE, 1500ms); if( pInstance ) switch( GetDifficulty() ) @@ -972,17 +972,17 @@ public: me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveCharge(destX, destY, destZ + 1.0f, 65.0f); me->SetGuidValue(UNIT_FIELD_TARGET, ObjectGuid::Empty); - events.RescheduleEvent(EVENT_CHECK_TRAMPLE_PLAYERS, 100); + events.RescheduleEvent(EVENT_CHECK_TRAMPLE_PLAYERS, 100ms); break; case EVENT_CHECK_TRAMPLE_PLAYERS: if( DoTrampleIfValid() ) { events.Reset(); - events.RescheduleEvent(EVENT_SPELL_FEROCIOUS_BUTT, urand(5000, 15000)); - events.RescheduleEvent(EVENT_SPELL_WHIRL, urand(2000, 5000)); - events.RescheduleEvent(EVENT_SPELL_ARCTIC_BREATH, urand(5000, 8000)); - events.RescheduleEvent(EVENT_JUMP_MIDDLE, urand(30000, 50000)); + events.RescheduleEvent(EVENT_SPELL_FEROCIOUS_BUTT, 5s, 15s); + events.RescheduleEvent(EVENT_SPELL_WHIRL, 2s, 5s); + events.RescheduleEvent(EVENT_SPELL_ARCTIC_BREATH, 5s, 8s); + events.RescheduleEvent(EVENT_JUMP_MIDDLE, 30s, 50s); Talk(EMOTE_TRAMPLE_FAIL); me->CastSpell(me, SPELL_FROTHING_RAGE, true); me->GetMotionMaster()->MovementExpired(); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index e43b729fa..f09617a47 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -123,13 +123,13 @@ struct boss_twin_valkyrAI : public ScriptedAI pInstance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, 21853); // special events here - events.RescheduleEvent(EVENT_BERSERK, IsHeroic() ? 360000 : 600000); - events.RescheduleEvent(EVENT_SUMMON_BALLS_1, urand(10000, 15000)); - events.RescheduleEvent(EVENT_SPECIAL, 45000); + events.RescheduleEvent(EVENT_BERSERK, IsHeroic() ? 6min : 10min); + events.RescheduleEvent(EVENT_SUMMON_BALLS_1, 10s, 15s); + events.RescheduleEvent(EVENT_SPECIAL, 45s); } - events.RescheduleEvent(EVENT_SPELL_SPIKE, urand(5000, 8000)); + events.RescheduleEvent(EVENT_SPELL_SPIKE, 5s, 8s); if( IsHeroic() ) - events.RescheduleEvent(EVENT_SPELL_TOUCH, urand(10000, 25000), 1); + events.RescheduleEvent(EVENT_SPELL_TOUCH, 10s, 25s, 1); me->SetCanFly(true); me->SetDisableGravity(true); @@ -196,7 +196,7 @@ struct boss_twin_valkyrAI : public ScriptedAI case -3: me->SetCanDualWield(true); me->CastSpell(me, SPELL_TWIN_POWER, true); - events.RescheduleEvent(EVENT_REMOVE_DUAL_WIELD, 15000); + events.RescheduleEvent(EVENT_REMOVE_DUAL_WIELD, 15s); break; } } @@ -326,20 +326,20 @@ struct boss_twin_valkyrAI : public ScriptedAI switch( eventId ) { case EVENT_SUMMON_BALLS_1: - events.RescheduleEvent(EVENT_SUMMON_BALLS_2, 8000); + events.RescheduleEvent(EVENT_SUMMON_BALLS_2, 8s); break; case EVENT_SUMMON_BALLS_2: - events.RescheduleEvent(EVENT_SUMMON_BALLS_3, 8000); + events.RescheduleEvent(EVENT_SUMMON_BALLS_3, 8s); break; case EVENT_SUMMON_BALLS_3: - events.RescheduleEvent(EVENT_SUMMON_BALLS_1, 15000); + events.RescheduleEvent(EVENT_SUMMON_BALLS_1, 15s); break; } } break; case EVENT_SPELL_SPIKE: me->CastSpell(me->GetVictim(), me->GetEntry() == NPC_LIGHTBANE ? SPELL_LIGHT_TWIN_SPIKE : SPELL_DARK_TWIN_SPIKE, false); - events.RepeatEvent(urand(7000, 10000)); + events.Repeat(7s, 10s); break; case EVENT_SPELL_TOUCH: { @@ -402,11 +402,11 @@ struct boss_twin_valkyrAI : public ScriptedAI if (Player* target = ObjectAccessor::GetPlayer(*me, tList[urand(0, tList.size() - 1)])) { me->CastSpell(target, me->GetEntry() == NPC_LIGHTBANE ? SPELL_LIGHT_TOUCH : SPELL_DARK_TOUCH, false); - events.RepeatEvent(urand(45000, 50000)); + events.Repeat(45s, 50s); break; } } - events.RepeatEvent(10000); + events.Repeat(10s); } break; case EVENT_SPECIAL: @@ -458,7 +458,7 @@ struct boss_twin_valkyrAI : public ScriptedAI } if( (SpecialMask & 0xF) == 0xF ) SpecialMask = 0; - events.RepeatEvent(45000); + events.Repeat(45s); events.DelayEventsToMax(15000, 1); // no touch of light/darkness during special abilities! } break; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index 70dda3ebf..18df8c460 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -22,7 +22,6 @@ #include "ScriptedCreature.h" #include "trial_of_the_crusader.h" -#define CLEANUP_CHECK_INTERVAL 5000 std::map validDedicatedInsanityItems; class instance_trial_of_the_crusader : public InstanceMapScript @@ -575,7 +574,7 @@ public: { InstanceCleanup(); } - events.RepeatEvent(CLEANUP_CHECK_INTERVAL); + events.Repeat(5s); } break; case EVENT_OPEN_GATE: @@ -1415,7 +1414,7 @@ public: // if missing spawn anub'arak SpawnAnubArak(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s); } bool DoNeedCleanup(Player* ignoredPlayer = nullptr) @@ -1590,7 +1589,7 @@ public: Counter = 0; EncounterStatus = NOT_STARTED; events.Reset(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s); } void ReadSaveDataMore(std::istringstream& data) override diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp index ae37e7b52..206cfa9ff 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp @@ -86,15 +86,15 @@ public: BossAI::JustEngagedWith(who); _raptorCount = 0; - events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 33000); - events.ScheduleEvent(EVENT_SPELL_GRIEVOUS_BITE, 20000); - events.ScheduleEvent(EVENT_SPELL_MANGLING_SLASH, 18500); - events.ScheduleEvent(EVENT_SPELL_FEARSOME_ROAR, urand(10000, 20000)); - events.ScheduleEvent(EVENT_SPELL_PIERCING_SLASH, 17000); + events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 33s); + events.ScheduleEvent(EVENT_SPELL_GRIEVOUS_BITE, 20s); + events.ScheduleEvent(EVENT_SPELL_MANGLING_SLASH, 18s + 500ms); + events.ScheduleEvent(EVENT_SPELL_FEARSOME_ROAR, 10s, 20s); + events.ScheduleEvent(EVENT_SPELL_PIERCING_SLASH, 17s); if (IsHeroic()) { - events.ScheduleEvent(EVENT_MENACING_CLAW, 21000); - events.ScheduleEvent(EVENT_SPELL_RAPTOR_CALL, urand(20000, 25000)); + events.ScheduleEvent(EVENT_MENACING_CLAW, 21s); + events.ScheduleEvent(EVENT_SPELL_RAPTOR_CALL, 20s, 25s); } } @@ -111,27 +111,27 @@ public: { case EVENT_SPELL_BELLOWING_ROAR: me->CastSpell(me, SPELL_BELLOWING_ROAR, false); - events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 40000); + events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 40s); break; case EVENT_SPELL_GRIEVOUS_BITE: me->CastSpell(me->GetVictim(), SPELL_GRIEVOUS_BITE, false); - events.ScheduleEvent(EVENT_SPELL_GRIEVOUS_BITE, 20000); + events.ScheduleEvent(EVENT_SPELL_GRIEVOUS_BITE, 20s); break; case EVENT_SPELL_MANGLING_SLASH: me->CastSpell(me->GetVictim(), SPELL_MANGLING_SLASH, false); - events.ScheduleEvent(EVENT_SPELL_MANGLING_SLASH, 20000); + events.ScheduleEvent(EVENT_SPELL_MANGLING_SLASH, 20s); break; case EVENT_SPELL_FEARSOME_ROAR: me->CastSpell(me, SPELL_FEARSOME_ROAR, false); - events.ScheduleEvent(EVENT_SPELL_FEARSOME_ROAR, 17000); + events.ScheduleEvent(EVENT_SPELL_FEARSOME_ROAR, 17s); break; case EVENT_SPELL_PIERCING_SLASH: me->CastSpell(me->GetVictim(), SPELL_PIERCING_SLASH, false); - events.ScheduleEvent(EVENT_SPELL_PIERCING_SLASH, 20000); + events.ScheduleEvent(EVENT_SPELL_PIERCING_SLASH, 20s); break; case EVENT_SPELL_RAPTOR_CALL: me->CastSpell(me, SPELL_RAPTOR_CALL, false); - events.ScheduleEvent(EVENT_SPELL_RAPTOR_CALL, 20000); + events.ScheduleEvent(EVENT_SPELL_RAPTOR_CALL, 20s); break; case EVENT_MENACING_CLAW: Talk(SAY_CLAW_EMOTE); @@ -141,7 +141,7 @@ public: me->AttackerStateUpdate(me->GetVictim()); if (me->GetVictim()) me->AttackerStateUpdate(me->GetVictim()); - events.ScheduleEvent(EVENT_MENACING_CLAW, 20000); + events.ScheduleEvent(EVENT_MENACING_CLAW, 20s); break; } diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index 23cb5f6b6..8d63edb50 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -122,11 +122,11 @@ public: Talk(SAY_AGGRO); BossAI::JustEngagedWith(who); - events.ScheduleEvent(EVENT_SUMMON_FETID_TROLL, 3000); - events.ScheduleEvent(EVENT_SUMMON_SHADOWCASTER, 9000); - events.ScheduleEvent(EVENT_SUMMON_HULKING_CORPSE, 30000); - events.ScheduleEvent(EVENT_SUMMON_CRYSTAL_HANDLER, 20000); - events.ScheduleEvent(EVENT_CHECK_PHASE, 80000); + events.ScheduleEvent(EVENT_SUMMON_FETID_TROLL, 3s); + events.ScheduleEvent(EVENT_SUMMON_SHADOWCASTER, 9s); + events.ScheduleEvent(EVENT_SUMMON_HULKING_CORPSE, 30s); + events.ScheduleEvent(EVENT_SUMMON_CRYSTAL_HANDLER, 20s); + events.ScheduleEvent(EVENT_CHECK_PHASE, 80s); me->CastSpell(me, SPELL_ARCANE_BLAST, true); me->CastSpell(me, SPELL_ARCANE_FIELD, true); @@ -167,7 +167,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -191,17 +191,17 @@ public: case EVENT_SUMMON_FETID_TROLL: if (Creature* trigger = summons.GetCreatureWithEntry(NPC_CRYSTAL_CHANNEL_TARGET)) trigger->CastSpell(trigger, SPELL_SUMMON_FETID_TROLL_CORPSE, true, nullptr, nullptr, me->GetGUID()); - events.ScheduleEvent(EVENT_SUMMON_FETID_TROLL, 3000); + events.ScheduleEvent(EVENT_SUMMON_FETID_TROLL, 3s); break; case EVENT_SUMMON_HULKING_CORPSE: if (Creature* trigger = summons.GetCreatureWithEntry(NPC_CRYSTAL_CHANNEL_TARGET)) trigger->CastSpell(trigger, SPELL_SUMMON_HULKING_CORPSE, true, nullptr, nullptr, me->GetGUID()); - events.ScheduleEvent(EVENT_SUMMON_HULKING_CORPSE, 30000); + events.ScheduleEvent(EVENT_SUMMON_HULKING_CORPSE, 30s); break; case EVENT_SUMMON_SHADOWCASTER: if (Creature* trigger = summons.GetCreatureWithEntry(NPC_CRYSTAL_CHANNEL_TARGET)) trigger->CastSpell(trigger, SPELL_SUMMON_RISEN_SHADOWCASTER, true, nullptr, nullptr, me->GetGUID()); - events.ScheduleEvent(EVENT_SUMMON_SHADOWCASTER, 10000); + events.ScheduleEvent(EVENT_SUMMON_SHADOWCASTER, 10s); break; case EVENT_SUMMON_CRYSTAL_HANDLER: if (_crystalCounter++ < 4) @@ -211,18 +211,18 @@ public: if (Creature* target = ObjectAccessor::GetCreature(*me, _stage ? _summonTargetLeftGUID : _summonTargetRightGUID)) target->CastSpell(target, SPELL_SUMMON_CRYSTAL_HANDLER, true, nullptr, nullptr, me->GetGUID()); _stage = _stage ? 0 : 1; - events.ScheduleEvent(EVENT_SUMMON_CRYSTAL_HANDLER, 20000); + events.ScheduleEvent(EVENT_SUMMON_CRYSTAL_HANDLER, 20s); } break; case EVENT_CHECK_PHASE: if (me->HasAura(SPELL_BEAM_CHANNEL)) { - events.ScheduleEvent(EVENT_CHECK_PHASE, 2000); + events.ScheduleEvent(EVENT_CHECK_PHASE, 2s); break; } events.Reset(); - events.ScheduleEvent(EVENT_CAST_OFFENSIVE_SPELL, 3000); - events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 10000); + events.ScheduleEvent(EVENT_CAST_OFFENSIVE_SPELL, 3s); + events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 10s); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->InterruptNonMeleeSpells(false); @@ -232,16 +232,16 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) me->CastSpell(target, RAND(SPELL_BLIZZARD, SPELL_FROSTBOLT, SPELL_TOUCH_OF_MISERY), false); - events.ScheduleEvent(EVENT_CAST_OFFENSIVE_SPELL, 500); + events.ScheduleEvent(EVENT_CAST_OFFENSIVE_SPELL, 500ms); break; case EVENT_SPELL_SUMMON_MINIONS: if (me->HasUnitState(UNIT_STATE_CASTING)) { me->CastSpell(me, SPELL_SUMMON_MINIONS, false); - events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 15000); + events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 15s); break; } - events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 500); + events.ScheduleEvent(EVENT_SPELL_SUMMON_MINIONS, 500ms); break; } } diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp index d88c2886b..928255505 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp @@ -94,10 +94,10 @@ public: { Talk(SAY_AGGRO); BossAI::JustEngagedWith(who); - events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 5000); - events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, urand(14000, 18000)); - events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, urand(8000, 10000)); - events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1000); + events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 5s); + events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 14s, 18s); + events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s); + events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s); } void KilledUnit(Unit* /*victim*/) override @@ -105,7 +105,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -115,7 +115,7 @@ public: { Talk(SAY_SKELETON); events.Reset(); - events.ScheduleEvent(EVENT_TURN_BONES_REAL, 3000); + events.ScheduleEvent(EVENT_TURN_BONES_REAL, 3s); } } @@ -146,16 +146,16 @@ public: case EVENT_SPELL_CURSE_OF_LIFE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true)) me->CastSpell(target, SPELL_CURSE_OF_LIFE, false); - events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 13000); + events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 13s); break; case EVENT_SPELL_RAIN_OF_FIRE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true)) me->CastSpell(target, SPELL_RAIN_OF_FIRE, false); - events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 16000); + events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 16s); break; case EVENT_SPELL_SHADOW_VOLLEY: me->CastSpell(me, SPELL_SHADOW_VOLLEY, false); - events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 9000); + events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 9s); break; case EVENT_SPELL_TURN_FLESH: if (me->HealthBelowPct(50)) @@ -165,18 +165,18 @@ public: me->CastSpell((Unit*)nullptr, SPELL_TURN_FLESH, false); events.Reset(); - events.ScheduleEvent(EVENT_TURN_FLESH_REAL, 3000); + events.ScheduleEvent(EVENT_TURN_FLESH_REAL, 3s); return; } - events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1000); + events.ScheduleEvent(EVENT_SPELL_TURN_FLESH, 1s); break; case EVENT_TURN_FLESH_REAL: me->CastSpell(me, SPELL_DUMMY, true); me->GetMotionMaster()->MoveChase(me->GetVictim()); - events.ScheduleEvent(EVENT_SPELL_EYE_BEAM, 11000); - events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 3000); - events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 6000); + events.ScheduleEvent(EVENT_SPELL_EYE_BEAM, 11s); + events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 3s); + events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 6s); break; case EVENT_SPELL_EYE_BEAM: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 35.0f, true)) @@ -184,21 +184,21 @@ public: break; case EVENT_SPELL_LIGHTNING_BREATH: me->CastSpell(me->GetVictim(), SPELL_LIGHTNING_BREATH, false); - events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 8000); + events.ScheduleEvent(EVENT_SPELL_LIGHTNING_BREATH, 8s); break; case EVENT_SPELL_POISON_CLOUD: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 35.0f, true)) me->CastSpell(target, SPELL_POISON_CLOUD, false); - events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 10000); + events.ScheduleEvent(EVENT_SPELL_POISON_CLOUD, 10s); break; case EVENT_TURN_BONES_REAL: me->SetDisplayId(me->GetNativeDisplayId()); me->CastSpell(me, SPELL_FLESH_VISUAL, true); me->CastSpell(me, SPELL_CLEAR_GIFT, true); events.Reset(); - events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 1000); - events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, urand(12000, 14000)); - events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, urand(8000, 10000)); + events.ScheduleEvent(EVENT_SPELL_CURSE_OF_LIFE, 1s); + events.ScheduleEvent(EVENT_SPELL_RAIN_OF_FIRE, 12s, 14s); + events.ScheduleEvent(EVENT_SPELL_SHADOW_VOLLEY, 8s, 10s); break; } diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index 60c86d2f9..f521cf9f1 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -69,16 +69,16 @@ public: { BossAI::Reset(); events2.Reset(); - events2.ScheduleEvent(EVENT_SPAWN_INVADERS, 30000); + events2.ScheduleEvent(EVENT_SPAWN_INVADERS, 30s); } void JustEngagedWith(Unit* who) override { - events.ScheduleEvent(EVENT_SPELL_INFECTED_WOUND, urand(6000, 10000)); - events.ScheduleEvent(EVENT_SPELL_CRUSH, urand(3000, 5000)); - events.ScheduleEvent(EVENT_SPELL_CONSUME, 15000); - events.ScheduleEvent(EVENT_SPELL_CORPSE_EXPLODE, 35000); - events.ScheduleEvent(EVENT_SPAWN_INVADERS, 20000, 30000); + events.ScheduleEvent(EVENT_SPELL_INFECTED_WOUND, 6s, 10s); + events.ScheduleEvent(EVENT_SPELL_CRUSH, 3s, 5s); + events.ScheduleEvent(EVENT_SPELL_CONSUME, 15s); + events.ScheduleEvent(EVENT_SPELL_CORPSE_EXPLODE, 35s); + events.ScheduleEvent(EVENT_SPAWN_INVADERS, 20s, 30s); me->setActive(true); instance->SetBossState(DATA_TROLLGORE, IN_PROGRESS); @@ -100,7 +100,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -118,7 +118,7 @@ public: me->CastSpell(me, SPELL_SUMMON_INVADER_A, true); me->CastSpell(me, SPELL_SUMMON_INVADER_B, true); me->CastSpell(me, SPELL_SUMMON_INVADER_C, true); - events2.ScheduleEvent(EVENT_SPAWN_INVADERS, 30000); + events2.ScheduleEvent(EVENT_SPAWN_INVADERS, 30s); break; } @@ -133,21 +133,21 @@ public: { case EVENT_SPELL_INFECTED_WOUND: me->CastSpell(me->GetVictim(), SPELL_INFECTED_WOUND, false); - events.ScheduleEvent(EVENT_SPELL_INFECTED_WOUND, urand(25000, 35000)); + events.ScheduleEvent(EVENT_SPELL_INFECTED_WOUND, 25s, 35s); break; case EVENT_SPELL_CRUSH: me->CastSpell(me->GetVictim(), SPELL_CRUSH, false); - events.ScheduleEvent(EVENT_SPELL_CRUSH, urand(10000, 15000)); + events.ScheduleEvent(EVENT_SPELL_CRUSH, 10s, 15s); break; case EVENT_SPELL_CONSUME: Talk(SAY_CONSUME); me->CastSpell(me, SPELL_CONSUME, false); - events.ScheduleEvent(EVENT_SPELL_CONSUME, 15000); + events.ScheduleEvent(EVENT_SPELL_CONSUME, 15s); break; case EVENT_SPELL_CORPSE_EXPLODE: Talk(SAY_EXPLODE); me->CastSpell(me, SPELL_CORPSE_EXPLODE, false); - events.ScheduleEvent(EVENT_SPELL_CORPSE_EXPLODE, urand(15000, 19000)); + events.ScheduleEvent(EVENT_SPELL_CORPSE_EXPLODE, 15s, 19s); break; } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index 725bf303b..959a790d7 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -96,9 +96,9 @@ public: DoZoneInCombat(); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_SHADOW_BOLT, 2000); - events.RescheduleEvent(EVENT_SPELL_MAGICS_BANE, urand(5000, 10000)); - events.RescheduleEvent(EVENT_SPELL_CORRUPT_SOUL, urand(14000, 20000)); + events.RescheduleEvent(EVENT_SPELL_SHADOW_BOLT, 2s); + events.RescheduleEvent(EVENT_SPELL_MAGICS_BANE, 5s, 10s); + events.RescheduleEvent(EVENT_SPELL_CORRUPT_SOUL, 14s, 20s); if (pInstance) pInstance->SetData(DATA_BRONJAHM, IN_PROGRESS); @@ -114,7 +114,7 @@ public: me->CastSpell(me, SPELL_TELEPORT, false); events.CancelEvent(EVENT_SPELL_CORRUPT_SOUL); events.DelayEvents(6000); - events.RescheduleEvent(EVENT_SPELL_FEAR, urand(8000, 14000)); + events.RescheduleEvent(EVENT_SPELL_FEAR, 8s, 14s); } } @@ -123,7 +123,7 @@ public: if (spell->Id == SPELL_TELEPORT) { me->CastSpell(me, SPELL_TELEPORT_VISUAL, true); - events.RescheduleEvent(EVENT_START_SOULSTORM, 1); + events.RescheduleEvent(EVENT_START_SOULSTORM, 1ms); } } @@ -148,16 +148,16 @@ public: case EVENT_SPELL_SHADOW_BOLT: if (!me->IsWithinMeleeRange(me->GetVictim())) me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false); - events.RepeatEvent(2000); + events.Repeat(2s); break; case EVENT_SPELL_FEAR: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f, true)) me->CastCustomSpell(SPELL_FEAR, SPELLVALUE_MAX_TARGETS, 1, target, false); - events.RepeatEvent(urand(8000, 12000)); + events.Repeat(8s, 12s); break; case EVENT_SPELL_MAGICS_BANE: me->CastSpell(me->GetVictim(), SPELL_MAGICS_BANE, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; case EVENT_SPELL_CORRUPT_SOUL: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) @@ -165,7 +165,7 @@ public: Talk(SAY_CORRUPT_SOUL); me->CastSpell(target, SPELL_CORRUPT_SOUL, false); } - events.RepeatEvent(urand(20000, 25000)); + events.Repeat(20s, 25s); break; case EVENT_START_SOULSTORM: Talk(SAY_SOUL_STORM); diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index 065e80fde..b51d43f65 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -121,11 +121,11 @@ public: Talk(SAY_FACE_AGGRO); DoZoneInCombat(); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_PHANTOM_BLAST, 5000); - events.RescheduleEvent(EVENT_SPELL_MIRRORED_SOUL, 9000); - events.RescheduleEvent(EVENT_SPELL_WELL_OF_SOULS, urand(6000, 8000)); - events.RescheduleEvent(EVENT_SPELL_UNLEASHED_SOULS, urand(18000, 20000)); - events.RescheduleEvent(EVENT_SPELL_WAILING_SOULS, 65000); + events.RescheduleEvent(EVENT_SPELL_PHANTOM_BLAST, 5s); + events.RescheduleEvent(EVENT_SPELL_MIRRORED_SOUL, 9s); + events.RescheduleEvent(EVENT_SPELL_WELL_OF_SOULS, 6s, 8s); + events.RescheduleEvent(EVENT_SPELL_UNLEASHED_SOULS, 18s, 20s); + events.RescheduleEvent(EVENT_SPELL_WAILING_SOULS, 65s); if (pInstance) pInstance->SetData(DATA_DEVOURER, IN_PROGRESS); @@ -183,10 +183,10 @@ public: break; case EVENT_SPELL_PHANTOM_BLAST: me->CastSpell(me->GetVictim(), SPELL_PHANTOM_BLAST, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; default: - events.RepeatEvent(1000); + events.Repeat(1s); break; } @@ -209,7 +209,7 @@ public: break; case EVENT_SPELL_PHANTOM_BLAST: me->CastSpell(me->GetVictim(), SPELL_PHANTOM_BLAST, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_MIRRORED_SOUL: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 90.0f, true)) @@ -218,19 +218,19 @@ public: me->setAttackTimer(BASE_ATTACK, 2500); Talk(EMOTE_MIRRORED_SOUL); } - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); break; case EVENT_SPELL_WELL_OF_SOULS: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) me->CastSpell(target, SPELL_WELL_OF_SOULS, false); - events.RepeatEvent(urand(25000, 30000)); + events.Repeat(25s, 30s); events.DelayEventsToMax(4000, 0); break; case EVENT_SPELL_UNLEASHED_SOULS: me->CastSpell(me, SPELL_UNLEASHED_SOULS, false); Talk(SAY_FACE_UNLEASH_SOUL); Talk(EMOTE_UNLEASH_SOUL); - events.RepeatEvent(urand(30000, 40000)); + events.Repeat(30s, 40s); events.DelayEventsToMax(5000, 0); me->setAttackTimer(BASE_ATTACK, 5500); break; @@ -239,7 +239,7 @@ public: Talk(EMOTE_WAILING_SOUL); if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true)) me->CastCustomSpell(SPELL_WAILING_SOULS_TARGETING, SPELLVALUE_MAX_TARGETS, 1, target, false); - events.RepeatEvent(80000); + events.Repeat(80s); events.DelayEventsToMax(20000, 0); break; } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp index dacea6bc7..1ab5b52c5 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp @@ -73,7 +73,7 @@ public: { me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); events.Reset(); - events.ScheduleEvent(1, 1000); + events.ScheduleEvent(1, 1s); } } @@ -89,12 +89,12 @@ public: if (me->GetEntry() == NPC_JAINA_PART1) { Talk(SAY_JAINA_INTRO_1); - events.ScheduleEvent(2, 8000); + events.ScheduleEvent(2, 8s); } else { Talk(SAY_SYLVANAS_INTRO_1); - events.ScheduleEvent(2, 11500); + events.ScheduleEvent(2, 11s + 500ms); } break; case 2: @@ -102,12 +102,12 @@ public: if (me->GetEntry() == NPC_JAINA_PART1) { Talk(SAY_JAINA_INTRO_2); - events.ScheduleEvent(3, 9000); + events.ScheduleEvent(3, 9s); } else { Talk(SAY_SYLVANAS_INTRO_2); - events.ScheduleEvent(3, 10500); + events.ScheduleEvent(3, 10s + 500ms); } break; case 3: @@ -115,12 +115,12 @@ public: if (me->GetEntry() == NPC_JAINA_PART1) { Talk(SAY_JAINA_INTRO_3); - events.ScheduleEvent(4, 8000); + events.ScheduleEvent(4, 8s); } else { Talk(SAY_SYLVANAS_INTRO_3); - events.ScheduleEvent(4, 10500); + events.ScheduleEvent(4, 10s + 500ms); } break; case 4: @@ -128,12 +128,12 @@ public: if (me->GetEntry() == NPC_JAINA_PART1) { Talk(SAY_JAINA_INTRO_4); - events.ScheduleEvent(5, 10000); + events.ScheduleEvent(5, 10s); } else { Talk(SAY_SYLVANAS_INTRO_4); - events.ScheduleEvent(5, 11000); + events.ScheduleEvent(5, 11s); } break; case 5: @@ -141,12 +141,12 @@ public: if (me->GetEntry() == NPC_JAINA_PART1) { Talk(SAY_JAINA_INTRO_5); - events.ScheduleEvent(6, 8000); + events.ScheduleEvent(6, 8s); } else { Talk(SAY_SYLVANAS_INTRO_5); - events.ScheduleEvent(6, 9500); + events.ScheduleEvent(6, 9500ms); } break; case 6: @@ -154,7 +154,7 @@ public: if (me->GetEntry() == NPC_JAINA_PART1) { Talk(SAY_JAINA_INTRO_6); - events.ScheduleEvent(7, 12000); + events.ScheduleEvent(7, 12s); } else { @@ -166,7 +166,7 @@ public: if (me->GetEntry() == NPC_JAINA_PART1) { Talk(SAY_JAINA_INTRO_7); - events.ScheduleEvent(8, 8000); + events.ScheduleEvent(8, 8s); } break; case 8: diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index bd4ff3fc2..561d5f0c0 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -76,9 +76,9 @@ public: { me->SetImmuneToAll(false); - events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 5000); - events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 11000); - events.ScheduleEvent(EVENT_DEFILING_HORROR, 20000); + events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 5s); + events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 11s); + events.ScheduleEvent(EVENT_DEFILING_HORROR, 20s); } void DoAction(int32 a) override @@ -115,7 +115,7 @@ public: { case EVENT_QUIVERING_STRIKE: me->CastSpell(me->GetVictim(), SPELL_QUIVERING_STRIKE, false); - events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 5000); + events.ScheduleEvent(EVENT_QUIVERING_STRIKE, 5s); break; case EVENT_IMPENDING_DESPAIR: if (Unit* target = SelectTargetFromPlayerList(45.0f, 0, true)) @@ -123,15 +123,15 @@ public: Talk(SAY_IMPENDING_DESPAIR); me->CastSpell(target, SPELL_IMPENDING_DESPAIR, false); } - events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 12000); + events.ScheduleEvent(EVENT_IMPENDING_DESPAIR, 12s); break; case EVENT_DEFILING_HORROR: Talk(SAY_DEFILING_HORROR); me->CastSpell((Unit*)nullptr, SPELL_DEFILING_HORROR, false); me->SetControlled(true, UNIT_STATE_ROOT); events.DelayEventsToMax(5000, 0); - events.ScheduleEvent(EVENT_UNROOT, 4000); - events.ScheduleEvent(EVENT_DEFILING_HORROR, 20000); + events.ScheduleEvent(EVENT_UNROOT, 4s); + events.ScheduleEvent(EVENT_DEFILING_HORROR, 20s); break; case EVENT_UNROOT: me->SetControlled(false, UNIT_STATE_ROOT); diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp index adca1d771..05628e00b 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_marwyn.cpp @@ -72,10 +72,10 @@ public: { me->SetImmuneToAll(false); - events.ScheduleEvent(EVENT_OBLITERATE, 15000); - events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); - events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); - events.ScheduleEvent(EVENT_SHARED_SUFFERING, 5000); + events.ScheduleEvent(EVENT_OBLITERATE, 15s); + events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13s); + events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20s); + events.ScheduleEvent(EVENT_SHARED_SUFFERING, 5s); } void DoAction(int32 a) override @@ -114,26 +114,26 @@ public: if (me->IsWithinMeleeRange(me->GetVictim())) { me->CastSpell(me->GetVictim(), SPELL_OBLITERATE, false); - events.ScheduleEvent(EVENT_OBLITERATE, 15000); + events.ScheduleEvent(EVENT_OBLITERATE, 15s); } else - events.ScheduleEvent(EVENT_OBLITERATE, 3000); + events.ScheduleEvent(EVENT_OBLITERATE, 3s); break; case EVENT_WELL_OF_CORRUPTION: Talk(SAY_CORRUPTED_WELL); if (Unit* target = SelectTargetFromPlayerList(40.0f, 0, true)) me->CastSpell(target, SPELL_WELL_OF_CORRUPTION, false); - events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13000); + events.ScheduleEvent(EVENT_WELL_OF_CORRUPTION, 13s); break; case EVENT_CORRUPTED_FLESH: Talk(SAY_CORRUPTED_FLESH); me->CastSpell((Unit*)nullptr, SPELL_CORRUPTED_FLESH, false); - events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20000); + events.ScheduleEvent(EVENT_CORRUPTED_FLESH, 20s); break; case EVENT_SHARED_SUFFERING: if (Unit* target = SelectTargetFromPlayerList(200.0f, 0, true)) me->CastSpell(target, SPELL_SHARED_SUFFERING, true); - events.ScheduleEvent(EVENT_SHARED_SUFFERING, 15000); + events.ScheduleEvent(EVENT_SHARED_SUFFERING, 15s); break; } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 2001b8f01..5d24f7dd8 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -196,9 +196,9 @@ public: if (first) { first = false; - events.ScheduleEvent(EVENT_PRE_INTRO_1, 10000); - events.ScheduleEvent(EVENT_PRE_INTRO_2, 11000); - events.ScheduleEvent(EVENT_PRE_INTRO_3, 17000); + events.ScheduleEvent(EVENT_PRE_INTRO_1, 10s); + events.ScheduleEvent(EVENT_PRE_INTRO_2, 11s); + events.ScheduleEvent(EVENT_PRE_INTRO_3, 17s); } } @@ -207,10 +207,10 @@ public: switch(actionId) { case ACTION_START_INTRO: - events.ScheduleEvent(EVENT_START_INTRO, 0); + events.ScheduleEvent(EVENT_START_INTRO, 0ms); break; case ACTION_SKIP_INTRO: - events.ScheduleEvent(EVENT_SKIP_INTRO, 0); + events.ScheduleEvent(EVENT_SKIP_INTRO, 0ms); break; } } @@ -247,9 +247,9 @@ public: c->GetMotionMaster()->MovePoint(0, LoralenFollowPos); // Begining of intro is differents between factions as the speech sequence and timers are differents. if (me->GetEntry() == NPC_JAINA_PART1) - events.ScheduleEvent(EVENT_INTRO_A2_1, 10000); + events.ScheduleEvent(EVENT_INTRO_A2_1, 10s); else - events.ScheduleEvent(EVENT_INTRO_H2_2, 10000); + events.ScheduleEvent(EVENT_INTRO_H2_2, 10s); break; case EVENT_SKIP_INTRO: shortver = true; @@ -257,23 +257,23 @@ public: me->GetMotionMaster()->MovePoint(0, MoveThronePos); if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) c->GetMotionMaster()->MovePoint(0, LoralenFollowPos); - events.ScheduleEvent(EVENT_INTRO_LK_1, 0); + events.ScheduleEvent(EVENT_INTRO_LK_1, 0ms); break; // A2 Intro Events case EVENT_INTRO_A2_1: Talk(SAY_JAINA_INTRO_3); - events.ScheduleEvent(EVENT_INTRO_A2_2, 5000); + events.ScheduleEvent(EVENT_INTRO_A2_2, 5s); break; case EVENT_INTRO_A2_2: Talk(SAY_JAINA_INTRO_4); - events.ScheduleEvent(EVENT_INTRO_A2_3, 10000); + events.ScheduleEvent(EVENT_INTRO_A2_3, 10s); break; case EVENT_INTRO_A2_3: pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), true); me->CastSpell(me, SPELL_FROSTMOURNE_SPAWN_SOUND, true); me->CastSpell(me, SPELL_ARCANE_CAST_VISUAL, false); - events.ScheduleEvent(EVENT_INTRO_A2_4, 10000); + events.ScheduleEvent(EVENT_INTRO_A2_4, 10s); break; case EVENT_INTRO_A2_4: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) @@ -283,66 +283,66 @@ public: if (Aura* a = pUther->AddAura(SPELL_SHADOWMOURNE_VISUAL, pUther)) a->SetDuration(8000); } - events.ScheduleEvent(EVENT_INTRO_A2_5, 2000); + events.ScheduleEvent(EVENT_INTRO_A2_5, 2s); break; case EVENT_INTRO_A2_5: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_A2_1); - events.ScheduleEvent(EVENT_INTRO_A2_6, 3000); + events.ScheduleEvent(EVENT_INTRO_A2_6, 3s); break; case EVENT_INTRO_A2_6: Talk(SAY_JAINA_INTRO_5); - events.ScheduleEvent(EVENT_INTRO_A2_7, 6000); + events.ScheduleEvent(EVENT_INTRO_A2_7, 6s); break; case EVENT_INTRO_A2_7: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_A2_2); - events.ScheduleEvent(EVENT_INTRO_A2_8, 6500); + events.ScheduleEvent(EVENT_INTRO_A2_8, 6500ms); break; case EVENT_INTRO_A2_8: Talk(SAY_JAINA_INTRO_6); - events.ScheduleEvent(EVENT_INTRO_A2_9, 2000); + events.ScheduleEvent(EVENT_INTRO_A2_9, 2s); break; case EVENT_INTRO_A2_9: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_A2_3); - events.ScheduleEvent(EVENT_INTRO_A2_10, 9000); + events.ScheduleEvent(EVENT_INTRO_A2_10, 9s); break; case EVENT_INTRO_A2_10: Talk(SAY_JAINA_INTRO_7); - events.ScheduleEvent(EVENT_INTRO_A2_11, 5000); + events.ScheduleEvent(EVENT_INTRO_A2_11, 5s); break; case EVENT_INTRO_A2_11: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_A2_4); - events.ScheduleEvent(EVENT_INTRO_A2_12, 11000); + events.ScheduleEvent(EVENT_INTRO_A2_12, 11s); break; case EVENT_INTRO_A2_12: Talk(SAY_JAINA_INTRO_8); - events.ScheduleEvent(EVENT_INTRO_A2_13, 4000); + events.ScheduleEvent(EVENT_INTRO_A2_13, 4s); break; case EVENT_INTRO_A2_13: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_A2_5); - events.ScheduleEvent(EVENT_INTRO_A2_14, 12500); + events.ScheduleEvent(EVENT_INTRO_A2_14, 12s + 500ms); break; case EVENT_INTRO_A2_14: Talk(SAY_JAINA_INTRO_9); - events.ScheduleEvent(EVENT_INTRO_A2_15, 10000); + events.ScheduleEvent(EVENT_INTRO_A2_15, 10s); break; case EVENT_INTRO_A2_15: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_A2_6); - events.ScheduleEvent(EVENT_INTRO_A2_16, 24000); + events.ScheduleEvent(EVENT_INTRO_A2_16, 24s); break; case EVENT_INTRO_A2_16: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_A2_7); - events.ScheduleEvent(EVENT_INTRO_A2_17, 4000); + events.ScheduleEvent(EVENT_INTRO_A2_17, 4s); break; case EVENT_INTRO_A2_17: Talk(SAY_JAINA_INTRO_10); - events.ScheduleEvent(EVENT_INTRO_A2_18, 2000); + events.ScheduleEvent(EVENT_INTRO_A2_18, 2s); break; case EVENT_INTRO_A2_18: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) @@ -350,24 +350,24 @@ public: pUther->HandleEmoteCommand(EMOTE_ONESHOT_NO); pUther->AI()->Talk(SAY_UTHER_INTRO_A2_8); } - events.ScheduleEvent(EVENT_INTRO_A2_19, 11000); + events.ScheduleEvent(EVENT_INTRO_A2_19, 11s); break; case EVENT_INTRO_A2_19: Talk(SAY_JAINA_INTRO_11); - events.ScheduleEvent(EVENT_INTRO_LK_1, 2000); + events.ScheduleEvent(EVENT_INTRO_LK_1, 2s); break; // H2 Intro Events case EVENT_INTRO_H2_2: Talk(SAY_SYLVANAS_INTRO_2); - events.ScheduleEvent(EVENT_INTRO_H2_3, 6000); + events.ScheduleEvent(EVENT_INTRO_H2_3, 6s); break; case EVENT_INTRO_H2_3: Talk(SAY_SYLVANAS_INTRO_3); pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), true); me->CastSpell(me, SPELL_FROSTMOURNE_SPAWN_SOUND, true); me->CastSpell(me, SPELL_ARCANE_CAST_VISUAL, false); - events.ScheduleEvent(EVENT_INTRO_H2_4, 6000); + events.ScheduleEvent(EVENT_INTRO_H2_4, 6s); break; case EVENT_INTRO_H2_4: if (Creature* pUther = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_UTHER))) @@ -377,43 +377,43 @@ public: if (Aura* a = pUther->AddAura(SPELL_SHADOWMOURNE_VISUAL, pUther)) a->SetDuration(8000); } - events.ScheduleEvent(EVENT_INTRO_H2_5, 2000); + events.ScheduleEvent(EVENT_INTRO_H2_5, 2s); break; case EVENT_INTRO_H2_5: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_H2_1); - events.ScheduleEvent(EVENT_INTRO_H2_6, 11000); + events.ScheduleEvent(EVENT_INTRO_H2_6, 11s); break; case EVENT_INTRO_H2_6: Talk(SAY_SYLVANAS_INTRO_4); - events.ScheduleEvent(EVENT_INTRO_H2_7, 3000); + events.ScheduleEvent(EVENT_INTRO_H2_7, 3s); break; case EVENT_INTRO_H2_7: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_H2_2); - events.ScheduleEvent(EVENT_INTRO_H2_8, 6000); + events.ScheduleEvent(EVENT_INTRO_H2_8, 6s); break; case EVENT_INTRO_H2_8: Talk(SAY_SYLVANAS_INTRO_5); - events.ScheduleEvent(EVENT_INTRO_H2_9, 5000); + events.ScheduleEvent(EVENT_INTRO_H2_9, 5s); break; case EVENT_INTRO_H2_9: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_H2_3); - events.ScheduleEvent(EVENT_INTRO_H2_10, 19000); + events.ScheduleEvent(EVENT_INTRO_H2_10, 19s); break; case EVENT_INTRO_H2_10: Talk(SAY_SYLVANAS_INTRO_6); - events.ScheduleEvent(EVENT_INTRO_H2_11, 1500); + events.ScheduleEvent(EVENT_INTRO_H2_11, 1500ms); break; case EVENT_INTRO_H2_11: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_H2_4); - events.ScheduleEvent(EVENT_INTRO_H2_12, 19500); + events.ScheduleEvent(EVENT_INTRO_H2_12, 19s + 500ms); break; case EVENT_INTRO_H2_12: Talk(SAY_SYLVANAS_INTRO_7); - events.ScheduleEvent(EVENT_INTRO_H2_13, 2000); + events.ScheduleEvent(EVENT_INTRO_H2_13, 2s); break; case EVENT_INTRO_H2_13: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) @@ -421,16 +421,16 @@ public: pUther->HandleEmoteCommand(EMOTE_ONESHOT_NO); pUther->AI()->Talk(SAY_UTHER_INTRO_H2_5); } - events.ScheduleEvent(EVENT_INTRO_H2_14, 12000); + events.ScheduleEvent(EVENT_INTRO_H2_14, 12s); break; case EVENT_INTRO_H2_14: if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->AI()->Talk(SAY_UTHER_INTRO_H2_6); - events.ScheduleEvent(EVENT_INTRO_H2_15, 8000); + events.ScheduleEvent(EVENT_INTRO_H2_15, 8s); break; case EVENT_INTRO_H2_15: Talk(SAY_SYLVANAS_INTRO_8); - events.ScheduleEvent(EVENT_INTRO_LK_1, 2000); + events.ScheduleEvent(EVENT_INTRO_LK_1, 2s); break; // Remaining Intro Events common for both faction @@ -451,9 +451,9 @@ public: pUther->AI()->Talk(SAY_UTHER_INTRO_H2_7); } - events.ScheduleEvent(EVENT_INTRO_LK_1_2, 2000); - events.ScheduleEvent(EVENT_INTRO_LK_1_3, 4000); - events.ScheduleEvent(EVENT_INTRO_LK_2, 11000); + events.ScheduleEvent(EVENT_INTRO_LK_1_2, 2s); + events.ScheduleEvent(EVENT_INTRO_LK_1_3, 4s); + events.ScheduleEvent(EVENT_INTRO_LK_2, 11s); break; case EVENT_INTRO_LK_1_2: @@ -470,20 +470,20 @@ public: if (!shortver) if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) pLichKing->AI()->Talk(SAY_LK_INTRO_1); - events.ScheduleEvent(EVENT_INTRO_LK_3, 2000); + events.ScheduleEvent(EVENT_INTRO_LK_3, 2s); break; case EVENT_INTRO_LK_3: if (!shortver) if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) pUther->SetVisible(false); - events.ScheduleEvent(EVENT_INTRO_LK_4, 4000); + events.ScheduleEvent(EVENT_INTRO_LK_4, 4s); break; case EVENT_INTRO_LK_4: if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) pLichKing->AI()->Talk(SAY_LK_INTRO_2); - events.ScheduleEvent(EVENT_INTRO_LK_4_2, 10000); + events.ScheduleEvent(EVENT_INTRO_LK_4_2, 10s); break; case EVENT_INTRO_LK_4_2: @@ -495,7 +495,7 @@ public: pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), false); events.ScheduleEvent(EVENT_INTRO_LK_4_3, 1750); } - events.ScheduleEvent(EVENT_INTRO_LK_5, 6000); + events.ScheduleEvent(EVENT_INTRO_LK_5, 6s); break; case EVENT_INTRO_LK_4_3: @@ -531,8 +531,8 @@ public: if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) pLichKing->AI()->Talk(SAY_LK_INTRO_3); - events.ScheduleEvent(EVENT_INTRO_LK_5_2, 5000); - events.ScheduleEvent(EVENT_INTRO_LK_6, 8000); + events.ScheduleEvent(EVENT_INTRO_LK_5_2, 5s); + events.ScheduleEvent(EVENT_INTRO_LK_6, 8s); break; case EVENT_INTRO_LK_5_2: @@ -544,14 +544,14 @@ public: if (Creature* pFalric = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_FALRIC))) pFalric->AI()->Talk(SAY_FALRIC_INTRO_1); - events.ScheduleEvent(EVENT_INTRO_LK_7, 2000); + events.ScheduleEvent(EVENT_INTRO_LK_7, 2s); break; case EVENT_INTRO_LK_7: if (Creature* pMarwyn = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_MARWYN))) pMarwyn->AI()->Talk(SAY_MARWYN_INTRO_1); - events.ScheduleEvent(EVENT_INTRO_LK_8, 2000); + events.ScheduleEvent(EVENT_INTRO_LK_8, 2s); break; case EVENT_INTRO_LK_8: @@ -561,7 +561,7 @@ public: pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), true); - events.ScheduleEvent(EVENT_INTRO_LK_9, 5000); + events.ScheduleEvent(EVENT_INTRO_LK_9, 5s); break; case EVENT_INTRO_LK_9: @@ -573,13 +573,13 @@ public: me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false); if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) c->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false); - events.ScheduleEvent(EVENT_INTRO_END, 14000); + events.ScheduleEvent(EVENT_INTRO_END, 14s); break; case EVENT_INTRO_END: pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), false); pInstance->HandleGameObject(pInstance->GetGuidData(GO_FRONT_DOOR), false); - events.ScheduleEvent(EVENT_INTRO_END_SET, 10000); + events.ScheduleEvent(EVENT_INTRO_END_SET, 10s); break; case EVENT_INTRO_END_SET: if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) @@ -698,10 +698,10 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 5000); - events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 8000); - events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); - events.ScheduleEvent(EVENT_DARK_MENDING, 8000); + events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 5s); + events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 8s); + events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10s); + events.ScheduleEvent(EVENT_DARK_MENDING, 8s); } void JustDied(Unit* /*killer*/) override @@ -734,26 +734,26 @@ public: case EVENT_SHADOW_WORD_PAIN: if (Unit* target = SelectTargetFromPlayerList(40.0f, 0, true)) me->CastSpell(target, SPELL_SHADOW_WORD_PAIN, false); - events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 5000); + events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 5s); break; case EVENT_CIRCLE_OF_DESTRUCTION: if (Unit* target = SelectTargetFromPlayerList(10.0f, 0, true)) me->CastSpell(target, SPELL_CIRCLE_OF_DESTRUCTION, false); - events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12000); + events.ScheduleEvent(EVENT_CIRCLE_OF_DESTRUCTION, 12s); break; case EVENT_COWER_IN_FEAR: if (Unit* target = SelectTargetFromPlayerList(20.0f, 0, true)) me->CastSpell(target, SPELL_COWER_IN_FEAR, false); - events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10000); + events.ScheduleEvent(EVENT_COWER_IN_FEAR, 10s); break; case EVENT_DARK_MENDING: if (Unit* target = DoSelectLowestHpFriendly(35.0f, DUNGEON_MODE(20000, 35000))) { me->CastSpell(target, SPELL_DARK_MENDING, false); - events.ScheduleEvent(EVENT_DARK_MENDING, 6000); + events.ScheduleEvent(EVENT_DARK_MENDING, 6s); } else - events.ScheduleEvent(EVENT_DARK_MENDING, 3000); + events.ScheduleEvent(EVENT_DARK_MENDING, 3s); break; } @@ -805,11 +805,11 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_FIREBALL, 3000); - events.ScheduleEvent(EVENT_FLAMESTRIKE, 6000); - events.ScheduleEvent(EVENT_FROSTBOLT, 9000); - events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000); - events.ScheduleEvent(EVENT_HALLUCINATION, 40000); + events.ScheduleEvent(EVENT_FIREBALL, 3s); + events.ScheduleEvent(EVENT_FLAMESTRIKE, 6s); + events.ScheduleEvent(EVENT_FROSTBOLT, 9s); + events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12s); + events.ScheduleEvent(EVENT_HALLUCINATION, 40s); } void JustDied(Unit* /*killer*/) override @@ -841,21 +841,21 @@ public: { case EVENT_FIREBALL: me->CastSpell(me->GetVictim(), SPELL_FIREBALL, false); - events.ScheduleEvent(EVENT_FIREBALL, 6000); + events.ScheduleEvent(EVENT_FIREBALL, 6s); break; case EVENT_FLAMESTRIKE: me->CastSpell(me->GetVictim(), SPELL_FLAMESTRIKE, false); - events.ScheduleEvent(EVENT_FLAMESTRIKE, 15000); + events.ScheduleEvent(EVENT_FLAMESTRIKE, 15s); break; case EVENT_FROSTBOLT: if (Unit* target = SelectTargetFromPlayerList(40.0f, 0, true)) me->CastSpell(target, SPELL_FROSTBOLT, false); - events.ScheduleEvent(EVENT_FROSTBOLT, 9000); + events.ScheduleEvent(EVENT_FROSTBOLT, 9s); break; case EVENT_CHAINS_OF_ICE: if (Unit* target = SelectTargetFromPlayerList(100.0f, 0, true)) me->CastSpell(target, SPELL_CHAINS_OF_ICE, false); - events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12000); + events.ScheduleEvent(EVENT_CHAINS_OF_ICE, 12s); break; case EVENT_HALLUCINATION: //me->CastSpell(me, SPELL_HALLUCINATION, false); @@ -960,10 +960,10 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_SHADOW_STEP, 4000); - events.ScheduleEvent(EVENT_DEADLY_POISON, 6000); - events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); - events.ScheduleEvent(EVENT_KIDNEY_SHOT, 5000); + events.ScheduleEvent(EVENT_SHADOW_STEP, 4s); + events.ScheduleEvent(EVENT_DEADLY_POISON, 6s); + events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10s); + events.ScheduleEvent(EVENT_KIDNEY_SHOT, 5s); } void JustDied(Unit* /*killer*/) override @@ -1001,20 +1001,20 @@ public: AttackStart(target); me->CastSpell(target, SPELL_SHADOW_STEP, false); } - events.ScheduleEvent(EVENT_SHADOW_STEP, 20000); + events.ScheduleEvent(EVENT_SHADOW_STEP, 20s); break; case EVENT_DEADLY_POISON: me->CastSpell(me->GetVictim(), SPELL_DEADLY_POISON, false); - events.ScheduleEvent(EVENT_DEADLY_POISON, 4000); + events.ScheduleEvent(EVENT_DEADLY_POISON, 4s); break; case EVENT_ENVENOMED_DAGGER_THROW: if (Unit* target = SelectTargetFromPlayerList(40.0f, 0, true)) me->CastSpell(target, SPELL_ENVENOMED_DAGGER_THROW, false); - events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10000); + events.ScheduleEvent(EVENT_ENVENOMED_DAGGER_THROW, 10s); break; case EVENT_KIDNEY_SHOT: me->CastSpell(me->GetVictim(), SPELL_KIDNEY_SHOT, false); - events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10000); + events.ScheduleEvent(EVENT_KIDNEY_SHOT, 10s); break; } @@ -1066,9 +1066,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); - events.ScheduleEvent(EVENT_SHIELD_BASH, 6000); - events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); + events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5s); + events.ScheduleEvent(EVENT_SHIELD_BASH, 6s); + events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15s); } void JustDied(Unit* /*killer*/) override @@ -1100,15 +1100,15 @@ public: { case EVENT_SPECTRAL_STRIKE: me->CastSpell(me->GetVictim(), SPELL_SPECTRAL_STRIKE, false); - events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5000); + events.ScheduleEvent(EVENT_SPECTRAL_STRIKE, 5s); break; case EVENT_SHIELD_BASH: me->CastSpell(me->GetVictim(), SPELL_SHIELD_BASH, false); - events.ScheduleEvent(EVENT_SHIELD_BASH, 6000); + events.ScheduleEvent(EVENT_SHIELD_BASH, 6s); break; case EVENT_TORTURED_ENRAGE: me->CastSpell(me, SPELL_TORTURED_ENRAGE, false); - events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15000); + events.ScheduleEvent(EVENT_TORTURED_ENRAGE, 15s); break; } @@ -1160,9 +1160,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_CURSED_ARROW, 10000); - events.ScheduleEvent(EVENT_FROST_TRAP, 15000); - events.ScheduleEvent(EVENT_ICE_SHOT, 15000); + events.ScheduleEvent(EVENT_CURSED_ARROW, 10s); + events.ScheduleEvent(EVENT_FROST_TRAP, 15s); + events.ScheduleEvent(EVENT_ICE_SHOT, 15s); } void JustDied(Unit* /*killer*/) override @@ -1194,16 +1194,16 @@ public: { case EVENT_CURSED_ARROW: me->CastSpell(me->GetVictim(), SPELL_CURSED_ARROW, false); - events.ScheduleEvent(EVENT_CURSED_ARROW, 10000); + events.ScheduleEvent(EVENT_CURSED_ARROW, 10s); break; case EVENT_FROST_TRAP: me->CastSpell((Unit*)nullptr, SPELL_FROST_TRAP, false); - events.ScheduleEvent(EVENT_FROST_TRAP, 30000); + events.ScheduleEvent(EVENT_FROST_TRAP, 30s); break; case EVENT_ICE_SHOT: if (Unit* target = SelectTargetFromPlayerList(40.0f, 0, true)) me->CastSpell(target, SPELL_ICE_SHOT, false); - events.ScheduleEvent(EVENT_ICE_SHOT, 8000); + events.ScheduleEvent(EVENT_ICE_SHOT, 8s); break; } @@ -1245,8 +1245,8 @@ public: void JustEngagedWith(Unit* /*who*/) override { Talk(SAY_FROSTSWORN_GENERAL_AGGRO); - events.ScheduleEvent(EVENT_ACTIVATE_REFLECTIONS, 8000); - events.ScheduleEvent(EVENT_THROW_SHIELD, 6000); + events.ScheduleEvent(EVENT_ACTIVATE_REFLECTIONS, 8s); + events.ScheduleEvent(EVENT_THROW_SHIELD, 6s); pInstance->SetData(ACTION_SPIRITUAL_REFLECTIONS_COPY, 1); } @@ -1276,7 +1276,7 @@ public: case EVENT_THROW_SHIELD: if (Unit* target = SelectTargetFromPlayerList(40.0f, 0, true)) me->CastSpell(target, SPELL_THROW_SHIELD, false); - events.ScheduleEvent(EVENT_THROW_SHIELD, 10000); + events.ScheduleEvent(EVENT_THROW_SHIELD, 10s); break; } @@ -1323,7 +1323,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(4000, 7000)); + events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 4s, 7s); } void UpdateAI(uint32 diff) override @@ -1340,7 +1340,7 @@ public: { case EVENT_BALEFUL_STRIKE: me->CastSpell(me->GetVictim(), SPELL_BALEFUL_STRIKE, false); - events.ScheduleEvent(EVENT_BALEFUL_STRIKE, urand(4000, 7000)); + events.ScheduleEvent(EVENT_BALEFUL_STRIKE, 4s, 7s); break; } @@ -1442,13 +1442,13 @@ public: currentWall = 0; reqKillCount = 0; events.Reset(); - events.RescheduleEvent(EVENT_LK_CHECK_COMBAT, 1000); + events.RescheduleEvent(EVENT_LK_CHECK_COMBAT, 1s); } void DoAction(int32 a) override { if (a == ACTION_START_LK_FIGHT_REAL) - events.ScheduleEvent(EVENT_LK_START_FOLLOWING, 1500); + events.ScheduleEvent(EVENT_LK_START_FOLLOWING, 1500ms); else if ((a == ACTION_INFORM_TRASH_DIED && reqKillCount) || a == ACTION_CHECK_TRASH_DIED) { if ((a == ACTION_CHECK_TRASH_DIED && reqKillCount == 0) || (a == ACTION_INFORM_TRASH_DIED && (--reqKillCount) == 0)) @@ -1458,8 +1458,8 @@ public: pInstance->SetData(ACTION_DELETE_ICE_WALL, 1); if (currentWall <= 3) { - events.ScheduleEvent(EVENT_LK_SUMMON_NEXT_ICE_WALL, 1000); - events.ScheduleEvent(EVENT_LK_SUMMON, currentWall == 3 ? 11000 : 7500); + events.ScheduleEvent(EVENT_LK_SUMMON_NEXT_ICE_WALL, 1s); + events.ScheduleEvent(EVENT_LK_SUMMON, currentWall == 3 ? 11s : 7500ms); } else me->RemoveAura(SPELL_REMORSELESS_WINTER); @@ -1483,7 +1483,7 @@ public: if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_ICE_WALL_TARGET))) { me->CastSpell(c, SPELL_SUMMON_ICE_WALL, false); - events.ScheduleEvent(EVENT_LK_REMORSELESS_WINTER, 4000); + events.ScheduleEvent(EVENT_LK_REMORSELESS_WINTER, 4s); } } else if (currentWall == 4) @@ -1498,7 +1498,7 @@ public: { ++reqKillCount; if (events.GetNextEventTime(EVENT_DECREASE_REQ_COUNT_BY_100)) - events.RescheduleEvent(EVENT_DECREASE_REQ_COUNT_BY_100, 10000); + events.RescheduleEvent(EVENT_DECREASE_REQ_COUNT_BY_100, 10s); summons.Summon(s); s->SetHomePosition(PathWaypoints[WP_STOP[currentWall + 1]]); s->GetMotionMaster()->MovePoint(0, PathWaypoints[WP_STOP[currentWall + 1]]); @@ -1545,8 +1545,8 @@ public: reqKillCount = 255; leader->InterruptNonMeleeSpells(true); me->CastSpell(leader, SPELL_HARVEST_SOUL, false); - events.ScheduleEvent(EVENT_LK_KILL_LEADER, 3000); - events.ScheduleEvent(EVENT_LK_CHECK_COMBAT, 1000); + events.ScheduleEvent(EVENT_LK_KILL_LEADER, 3s); + events.ScheduleEvent(EVENT_LK_CHECK_COMBAT, 1s); break; } if (pInstance->instance->HavePlayers()) @@ -1572,7 +1572,7 @@ public: pInstance->SetData(ACTION_STOP_LK_FIGHT, 1); } } - events.ScheduleEvent(EVENT_LK_CHECK_COMBAT, 1000); + events.ScheduleEvent(EVENT_LK_CHECK_COMBAT, 1s); break; case EVENT_LK_KILL_LEADER: if (Creature* leader = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_SYLVANAS_PART2))) @@ -1604,45 +1604,45 @@ public: path.push_back(G3D::Vector3(PathWaypoints[i].GetPositionX(), PathWaypoints[i].GetPositionY(), PathWaypoints[i].GetPositionZ())); me->GetMotionMaster()->MoveSplinePath(&path); me->GetMotionMaster()->propagateSpeedChange(); - events.ScheduleEvent(EVENT_LK_SUMMON, 1000); + events.ScheduleEvent(EVENT_LK_SUMMON, 1s); } break; case EVENT_LK_SUMMON: switch (currentWall) { case 0: - events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 0); - events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 4000); + events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 0ms); + events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 4s); break; case 1: - events.ScheduleEvent(EVENT_LK_SUMMON_LA, 0); - events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 100); - events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 4000); - events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 5100); + events.ScheduleEvent(EVENT_LK_SUMMON_LA, 0ms); + events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 100ms); + events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 4s); + events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 5100ms); break; case 2: - events.ScheduleEvent(EVENT_LK_SUMMON_LA, 0); - events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 100); - events.ScheduleEvent(EVENT_LK_SUMMON_LA, 4000); - events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 4100); - events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 5200); + events.ScheduleEvent(EVENT_LK_SUMMON_LA, 0ms); + events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 100ms); + events.ScheduleEvent(EVENT_LK_SUMMON_LA, 4s); + events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 4100ms); + events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 5200ms); break; case 3: - events.ScheduleEvent(EVENT_LK_SUMMON_LA, 0); - events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 100); - events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 1200); - events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 5300); - events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 6400); - events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 12500); - events.ScheduleEvent(EVENT_LK_SUMMON_LA, 16500); - events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 16600); - events.ScheduleEvent(EVENT_LK_SUMMON_LA, 17700); + events.ScheduleEvent(EVENT_LK_SUMMON_LA, 0ms); + events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 100ms); + events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 1200ms); + events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 5300ms); + events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 6400ms); + events.ScheduleEvent(EVENT_LK_SUMMON_GHOULS, 12s + 500ms); + events.ScheduleEvent(EVENT_LK_SUMMON_LA, 16s + 500ms); + events.ScheduleEvent(EVENT_LK_SUMMON_RWD, 16s + 600ms); + events.ScheduleEvent(EVENT_LK_SUMMON_LA, 17s + 700ms); break; } if (currentWall <= 3) { reqKillCount = 100; - events.RescheduleEvent(EVENT_DECREASE_REQ_COUNT_BY_100, 10000); + events.RescheduleEvent(EVENT_DECREASE_REQ_COUNT_BY_100, 10s); } break; case EVENT_DECREASE_REQ_COUNT_BY_100: @@ -1720,15 +1720,15 @@ public: switch(actionId) { case ACTION_START_INTRO: - events.ScheduleEvent(EVENT_LK_SAY_AGGRO, 0); + events.ScheduleEvent(EVENT_LK_SAY_AGGRO, 0ms); break; case ACTION_START_LK_FIGHT_REAL: - events.ScheduleEvent(EVENT_START_RUN, 0); + events.ScheduleEvent(EVENT_START_RUN, 0ms); break; case ACTION_INFORM_WALL_DESTROYED: MoveToNextStopPoint(); if (currentStopPoint == 5) - events.ScheduleEvent(EVENT_SAY_OPENING, 3000); + events.ScheduleEvent(EVENT_SAY_OPENING, 3s); break; } } @@ -1753,7 +1753,7 @@ public: void MovementInform(uint32 type, uint32 /*id*/) override { if (type == ESCORT_MOTION_TYPE && me->movespline->Finalized()) - events.ScheduleEvent(EVENT_SAY_LEADER_STOP_TEXT, 1000); + events.ScheduleEvent(EVENT_SAY_LEADER_STOP_TEXT, 1s); } void UpdateAI(uint32 diff) override @@ -1764,7 +1764,7 @@ public: case EVENT_LK_SAY_AGGRO: if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) c->AI()->Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_LK_AGGRO_ALLY : SAY_LK_AGGRO_HORDE); - events.ScheduleEvent(me->GetEntry() == NPC_JAINA_PART2 ? EVENT_JAINA_IMMOBILIZE_LK : EVENT_SYLVANAS_IMMOBILIZE_JUMP, 12000); + events.ScheduleEvent(me->GetEntry() == NPC_JAINA_PART2 ? EVENT_JAINA_IMMOBILIZE_LK : EVENT_SYLVANAS_IMMOBILIZE_JUMP, 12s); break; case EVENT_JAINA_IMMOBILIZE_LK: if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) @@ -1772,7 +1772,7 @@ public: c->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); me->CastSpell(c, SPELL_JAINA_ICE_PRISON, false); - events.ScheduleEvent(EVENT_SAY_LEAVE, 5000); + events.ScheduleEvent(EVENT_SAY_LEAVE, 5s); } break; case EVENT_SYLVANAS_IMMOBILIZE_JUMP: @@ -1781,13 +1781,13 @@ public: c->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); me->KnockbackFrom(c->GetPositionX(), c->GetPositionY(), 10.0f, 3.0f); - events.ScheduleEvent(EVENT_SYLVANAS_DARK_BINDING, 1500); + events.ScheduleEvent(EVENT_SYLVANAS_DARK_BINDING, 1500ms); } break; case EVENT_SYLVANAS_DARK_BINDING: if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) me->CastSpell(c, SPELL_SYLVANAS_DARK_BINDING, false); - events.ScheduleEvent(EVENT_SAY_LEAVE, 3500); + events.ScheduleEvent(EVENT_SAY_LEAVE, 3500ms); break; case EVENT_SAY_LEAVE: { @@ -1798,7 +1798,7 @@ public: Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_AGGRO : SAY_SYLVANA_AGGRO); me->GetMotionMaster()->MovePoint(0, LeaderEscapePos); - events.ScheduleEvent(EVENT_ADD_GOSSIP, 8000); + events.ScheduleEvent(EVENT_ADD_GOSSIP, 8s); } break; case EVENT_ADD_GOSSIP: @@ -1927,9 +1927,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(1, 10000); - events.ScheduleEvent(2, 4500); - events.ScheduleEvent(3, 9000); + events.ScheduleEvent(1, 10s); + events.ScheduleEvent(2, 4500ms); + events.ScheduleEvent(3, 9s); } void UpdateAI(uint32 diff) override @@ -1947,16 +1947,16 @@ public: case 1: if (Unit* target = SelectTargetFromPlayerList(30.0f, 0, true)) me->CastSpell(target, 70144, false); - events.ScheduleEvent(1, 12000); + events.ScheduleEvent(1, 12s); break; case 2: me->CastSpell(me->GetVictim(), 70080, false); - events.ScheduleEvent(2, 4500); + events.ScheduleEvent(2, 4500ms); break; case 3: if (SelectTargetFromPlayerList(30.0f, 0, true)) me->CastSpell(me->GetVictim(), 70145, false); - events.ScheduleEvent(3, 9000); + events.ScheduleEvent(3, 9s); break; } @@ -1996,7 +1996,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(1, 5000); + events.ScheduleEvent(1, 5s); } void UpdateAI(uint32 diff) override @@ -2015,10 +2015,10 @@ public: if (me->IsWithinMeleeRange(me->GetVictim())) { me->CastSpell(me->GetVictim(), 70176, false); - events.ScheduleEvent(1, 18000); + events.ScheduleEvent(1, 18s); } else - events.ScheduleEvent(1, 3000); + events.ScheduleEvent(1, 3s); break; } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 223f5b7f4..3a049872f 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -113,7 +113,7 @@ public: Talk(SAY_AGGRO); DoZoneInCombat(); - events.RescheduleEvent(EVENT_SPELL_THROW_SARONITE, urand(5000, 7500)); + events.RescheduleEvent(EVENT_SPELL_THROW_SARONITE, 5000ms, 7500ms); if (pInstance) pInstance->SetData(DATA_GARFROST, IN_PROGRESS); @@ -127,9 +127,9 @@ public: me->SetReactState(REACT_PASSIVE); me->SetTarget(); me->SendMeleeAttackStop(me->GetVictim()); - events.DelayEvents(8000); + events.DelayEvents(8s); me->CastSpell(me, SPELL_THUNDERING_STOMP, false); - events.RescheduleEvent(EVENT_JUMP, 1250); + events.RescheduleEvent(EVENT_JUMP, 1250ms); return; } @@ -140,9 +140,9 @@ public: me->SetReactState(REACT_PASSIVE); me->SetTarget(); me->SendMeleeAttackStop(me->GetVictim()); - events.DelayEvents(8000); + events.DelayEvents(8s); me->CastSpell(me, SPELL_THUNDERING_STOMP, false); - events.RescheduleEvent(EVENT_JUMP, 1250); + events.RescheduleEvent(EVENT_JUMP, 1250ms); return; } } @@ -192,7 +192,7 @@ public: } else if (spell->Id == uint32(SPELL_FORGE_MACE)) { - events.RescheduleEvent(EVENT_SPELL_DEEP_FREEZE, 10000); + events.RescheduleEvent(EVENT_SPELL_DEEP_FREEZE, 10s); SetEquipmentSlots(false, EQUIP_ID_MACE); me->SetReactState(REACT_AGGRESSIVE); me->SetControlled(false, UNIT_STATE_ROOT); @@ -245,7 +245,7 @@ public: Talk(WHISPER_BOULDER, target); me->CastSpell(target, SPELL_THROW_SARONITE, false); } - events.RepeatEvent(urand(12500, 20000)); + events.Repeat(12s + 500ms, 20s); break; case EVENT_JUMP: me->DisableRotate(true); @@ -257,7 +257,7 @@ public: break; case EVENT_SPELL_CHILLING_WAVE: me->CastSpell(me->GetVictim(), SPELL_CHILLING_WAVE, false); - events.RepeatEvent(35000); + events.Repeat(35s); break; case EVENT_SPELL_DEEP_FREEZE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true)) @@ -265,7 +265,7 @@ public: Talk(EMOTE_DEEP_FREEZE, target); me->CastSpell(target, SPELL_DEEP_FREEZE, false); } - events.RepeatEvent(35000); + events.Repeat(35s); break; } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index 75be8654d..9e9ecd905 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -103,10 +103,10 @@ public: k->AI()->Talk(SAY_AGGRO); DoZoneInCombat(); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_TOXIC_WASTE, urand(3000, 5000)); - events.RescheduleEvent(EVENT_SPELL_MIGHTY_KICK, urand(10000, 20000)); - events.RescheduleEvent(EVENT_SPELL_SHADOW_BOLT, 10000); - events.RescheduleEvent(EVENT_SPECIAL, 25000); + events.RescheduleEvent(EVENT_SPELL_TOXIC_WASTE, 3s, 5s); + events.RescheduleEvent(EVENT_SPELL_MIGHTY_KICK, 10s, 20s); + events.RescheduleEvent(EVENT_SPELL_SHADOW_BOLT, 10s); + events.RescheduleEvent(EVENT_SPECIAL, 25s); if (pInstance) pInstance->SetData(DATA_ICK, IN_PROGRESS); @@ -121,7 +121,7 @@ public: Talk(EMOTE_ICK_CHASE, target); AttackStart(target); me->SetReactState(REACT_PASSIVE); - events.RescheduleEvent(EVENT_SET_REACT_AGGRESSIVE, 12000); + events.RescheduleEvent(EVENT_SET_REACT_AGGRESSIVE, 12s); } } @@ -186,14 +186,14 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) { k->CastSpell(target, SPELL_TOXIC_WASTE); - events.RepeatEvent(urand(7000, 10000)); + events.Repeat(7s, 10s); break; } - events.RepeatEvent(2500); + events.Repeat(2500ms); break; case EVENT_SPELL_MIGHTY_KICK: me->CastSpell(me->GetVictim(), SPELL_MIGHTY_KICK, false); - events.RepeatEvent(urand(20000, 25000)); + events.Repeat(20s, 25s); break; case EVENT_SPELL_SHADOW_BOLT: if (Creature* k = GetKrick()) @@ -201,10 +201,10 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 35.0f, true)) { k->CastSpell(target, SPELL_SHADOW_BOLT); - events.RepeatEvent(14000); + events.Repeat(14s); break; } - events.RepeatEvent(2500); + events.Repeat(2500ms); break; case EVENT_SET_REACT_AGGRESSIVE: me->SetReactState(REACT_AGGRESSIVE); @@ -239,10 +239,10 @@ public: k->CastSpell(k, SPELL_EXPLOSIVE_BARRAGE_KRICK, false); me->CastSpell(me, SPELL_EXPLOSIVE_BARRAGE_ICK, false); } - events.DelayEvents(20000); + events.DelayEvents(20s); break; } - events.RepeatEvent(urand(25000, 30000)); + events.Repeat(25s, 30s); break; } @@ -324,7 +324,7 @@ public: } } - events.RescheduleEvent(1, 3000); + events.RescheduleEvent(1, 3s); break; case 1: Talk(SAY_OUTRO_KRICK_1); @@ -344,7 +344,7 @@ public: c->DespawnOrUnsummon(); } - events.RescheduleEvent(2, 7000); + events.RescheduleEvent(2, 7s); break; case 2: if (pInstance) @@ -359,12 +359,12 @@ public: c->AI()->Talk(c->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_KRICK_1 : SAY_SYLVANAS_KRICK_1); } - events.RescheduleEvent(3, 6500); + events.RescheduleEvent(3, 6500ms); break; case 3: Talk(SAY_OUTRO_KRICK_2); - events.RescheduleEvent(4, 17000); + events.RescheduleEvent(4, 17s); break; case 4: if (pInstance) @@ -375,12 +375,12 @@ public: c->AI()->Talk(c->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_KRICK_2 : SAY_SYLVANAS_KRICK_2); } - events.RescheduleEvent(5, 6500); + events.RescheduleEvent(5, 6500ms); break; case 5: Talk(SAY_OUTRO_KRICK_3); - events.RescheduleEvent(6, 6500); + events.RescheduleEvent(6, 6500ms); break; case 6: if (pInstance) @@ -390,7 +390,7 @@ public: c->AI()->Talk(SAY_TYRANNUS_KRICK_1); } - events.RescheduleEvent(7, 4000); + events.RescheduleEvent(7, 4s); break; case 7: me->CastSpell(me, 69413, true); @@ -400,7 +400,7 @@ public: me->SendMovementFlagUpdate(); me->GetMotionMaster()->MoveTakeoff(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 9.0f, 0.5f * 7.0f); - events.RescheduleEvent(8, 2000); + events.RescheduleEvent(8, 2s); break; case 8: Talk(SAY_OUTRO_KRICK_4); @@ -424,7 +424,7 @@ public: me->RemoveAllAuras(); me->GetMotionMaster()->MoveFall(0, true); - events.RescheduleEvent(10, 5000); + events.RescheduleEvent(10, 5s); break; case 10: if (pInstance) diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 908a75263..b676e06d7 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -121,10 +121,10 @@ public: me->CastSpell(me, 43979, true); Talk(SAY_AGGRO); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_FORCEFUL_SMASH, urand(14000, 16000)); - events.RescheduleEvent(EVENT_SPELL_OVERLORDS_BRAND, urand(4000, 6000)); - events.RescheduleEvent(EVENT_RIMEFANG_SPELL_ICY_BLAST, 5000); - events.RescheduleEvent(EVENT_SPELL_MARK_OF_RIMEFANG, 25000); + events.RescheduleEvent(EVENT_SPELL_FORCEFUL_SMASH, 14s, 16s); + events.RescheduleEvent(EVENT_SPELL_OVERLORDS_BRAND, 4s, 6s); + events.RescheduleEvent(EVENT_RIMEFANG_SPELL_ICY_BLAST, 5s); + events.RescheduleEvent(EVENT_SPELL_MARK_OF_RIMEFANG, 25s); } } @@ -159,7 +159,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_FORCEFUL_SMASH, false); - events.RescheduleEvent(EVENT_SPELL_UNHOLY_POWER, 1000); + events.RescheduleEvent(EVENT_SPELL_UNHOLY_POWER, 1s); break; } events.RepeatEvent(3000); @@ -169,18 +169,18 @@ public: Talk(EMOTE_DARK_MIGHT); me->CastSpell(me, SPELL_UNHOLY_POWER, false); - events.ScheduleEvent(EVENT_SPELL_FORCEFUL_SMASH, urand(40000, 48000)); + events.ScheduleEvent(EVENT_SPELL_FORCEFUL_SMASH, 40s, 48s); break; case EVENT_SPELL_OVERLORDS_BRAND: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 95.0f, true)) me->CastSpell(target, SPELL_OVERLORDS_BRAND, false); - events.RepeatEvent(urand(11000, 12000)); + events.Repeat(11s, 12s); break; case EVENT_RIMEFANG_SPELL_ICY_BLAST: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 190.0f, true)) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_RIMEFANG_GUID))) c->CastSpell(target, RIMEFANG_SPELL_ICY_BLAST, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_MARK_OF_RIMEFANG: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 190.0f, true)) @@ -190,8 +190,8 @@ public: Talk(EMOTE_MARK, target); c->CastSpell(target, RIMEFANG_SPELL_HOARFROST, false); } - events.RepeatEvent(25000); - events.RescheduleEvent(EVENT_RIMEFANG_SPELL_ICY_BLAST, 10000); + events.Repeat(25s); + events.RescheduleEvent(EVENT_RIMEFANG_SPELL_ICY_BLAST, 10s); break; } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index cc6828eac..77c961099 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -64,7 +64,7 @@ public: if (type == DATA_START_INTRO && pInstance->GetData(DATA_INSTANCE_PROGRESS) == INSTANCE_PROGRESS_NONE && counter == 0 && !me->IsVisible()) { me->setActive(true); - events.RescheduleEvent(1, 0); + events.RescheduleEvent(1, 0ms); } } @@ -97,11 +97,11 @@ public: } ++counter; - events.RepeatEvent(150); + events.Repeat(150ms); } else { - events.RescheduleEvent(2, 2500); + events.RescheduleEvent(2, 2500ms); } } break; @@ -113,14 +113,14 @@ public: c->AI()->Talk(SAY_TYRANNUS_INTRO_1); } - events.RescheduleEvent(3, 7000); + events.RescheduleEvent(3, 7s); break; case 3: if (pInstance) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_EVENT_GUID))) c->AI()->Talk(SAY_TYRANNUS_INTRO_2); - events.RescheduleEvent(4, 14000); + events.RescheduleEvent(4, 14s); break; case 4: if (pInstance) @@ -161,19 +161,19 @@ public: } } - events.RescheduleEvent(5, 1); + events.RescheduleEvent(5, 1ms); break; case 5: Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_1 : SAY_SYLVANAS_INTRO_1); - events.RescheduleEvent(6, 1000); + events.RescheduleEvent(6, 1s); break; case 6: if (pInstance) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_EVENT_GUID))) c->AI()->Talk(SAY_TYRANNUS_INTRO_3); - events.RescheduleEvent(7, 5000); + events.RescheduleEvent(7, 5s); break; case 7: /// @todo: (Initial RP, when zoning in the instance) is not complete. if (pInstance) @@ -202,14 +202,14 @@ public: } } - events.RescheduleEvent(8, 7000); + events.RescheduleEvent(8, 7s); break; case 8: if (pInstance) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_EVENT_GUID))) c->CastSpell(c, 69753, false); - events.RescheduleEvent(9, 400); + events.RescheduleEvent(9, 400ms); break; case 9: if (pInstance) @@ -223,12 +223,12 @@ public: c->GetMotionMaster()->MoveFall(0, true); } - events.RescheduleEvent(10, 1000); + events.RescheduleEvent(10, 1s); break; case 10: Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_2 : SAY_SYLVANAS_INTRO_2); - events.RescheduleEvent(11, 1000); + events.RescheduleEvent(11, 1s); break; case 11: if (pInstance) @@ -243,7 +243,7 @@ public: c->CastSpell(c, 69350, true); } - events.RescheduleEvent(12, 2000); + events.RescheduleEvent(12, 2s); break; case 12: if (pInstance) @@ -264,7 +264,7 @@ public: } } - events.RescheduleEvent(13, 3000); + events.RescheduleEvent(13, 3s); break; case 13: if (pInstance) @@ -284,7 +284,7 @@ public: } } - events.RescheduleEvent(14, 2000); + events.RescheduleEvent(14, 2s); break; case 14: if (pInstance) @@ -303,7 +303,7 @@ public: } } - events.RescheduleEvent(15, 2000); + events.RescheduleEvent(15, 2s); break; case 15: if (pInstance) @@ -319,7 +319,7 @@ public: } } - events.RescheduleEvent(16, 3000); + events.RescheduleEvent(16, 3s); break; case 16: Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_4 : SAY_SYLVANAS_INTRO_3); @@ -344,7 +344,7 @@ public: pInstance->SetData(DATA_INSTANCE_PROGRESS, INSTANCE_PROGRESS_FINISHED_INTRO); } - events.RescheduleEvent(17, 5000); + events.RescheduleEvent(17, 5s); break; case 17: me->setActive(false); @@ -438,8 +438,8 @@ public: // if (SPELL_NECROLYTE_CHANNELING) me->RemoveAura(SPELL_NECROLYTE_CHANNELING); events.Reset(); - events.RescheduleEvent(1, 0); - events.RescheduleEvent(2, urand(5000, 9000)); + events.RescheduleEvent(1, 0ms); + events.RescheduleEvent(2, 5s, 9s); if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_LEADER_FIRST_GUID))) c->AI()->SetData(DATA_START_INTRO, 0); @@ -473,12 +473,12 @@ public: break; case 1: // Shadow Bolt me->CastSpell(me->GetVictim(), 69577, false); - events.RepeatEvent(4000); + events.Repeat(4s); break; case 2: // Conversion Beam if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true)) me->CastSpell(target, 69578, false); - events.RepeatEvent(urand(20000, 25000)); + events.Repeat(20s, 25s); break; } @@ -522,7 +522,7 @@ public: switch(id) { case 1: - events.RescheduleEvent(id, 0); + events.RescheduleEvent(id, 0ms); break; } } @@ -552,14 +552,14 @@ public: c->GetMotionMaster()->MovePath(FBSData[i].pathId, false); ++i; } - events.RescheduleEvent(2, 3000); + events.RescheduleEvent(2, 3s); break; } case 2: if (Creature* c = me->SummonCreature(NPC_TYRANNUS_VOICE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() - 10.0f, me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN, 1)) c->AI()->Talk(SAY_TYRANNUS_GARFROST); - events.RescheduleEvent(3, 4000); + events.RescheduleEvent(3, 4s); break; case 3: Talk(SAY_GENERAL_GARFROST); @@ -603,18 +603,18 @@ public: me->setActive(false); break; case 1: - events.ScheduleEvent(1, 0); + events.ScheduleEvent(1, 0ms); break; case 2: - events.ScheduleEvent(2, 0); + events.ScheduleEvent(2, 0ms); break; case 3: - events.ScheduleEvent(4, 0); + events.ScheduleEvent(4, 0ms); break; } } else if (type == EFFECT_MOTION_TYPE && id == 10) - events.ScheduleEvent(6, 0); + events.ScheduleEvent(6, 0ms); } void SetData(uint32 type, uint32 id) override @@ -639,8 +639,8 @@ public: pInstance->SetData(DATA_INSTANCE_PROGRESS, INSTANCE_PROGRESS_AFTER_WARN_1); Talk(SAY_TYRANNUS_AMBUSH_1); killsLeft = 10; - events.ScheduleEvent(30, 0); - events.ScheduleEvent(3, 25000); + events.ScheduleEvent(30, 0ms); + events.ScheduleEvent(3, 25s); break; case 2: if (pInstance->GetData(DATA_INSTANCE_PROGRESS) != INSTANCE_PROGRESS_AFTER_WARN_1) @@ -650,8 +650,8 @@ public: pInstance->SetData(DATA_INSTANCE_PROGRESS, INSTANCE_PROGRESS_AFTER_WARN_2); Talk(SAY_TYRANNUS_AMBUSH_2); killsLeft = (Difficulty(me->GetMap()->GetSpawnMode()) == DUNGEON_DIFFICULTY_HEROIC ? 12 : 6); - events.ScheduleEvent(60, 0); - events.ScheduleEvent(5, 20000); + events.ScheduleEvent(60, 0ms); + events.ScheduleEvent(5, 20s); break; break; case 3: @@ -716,8 +716,8 @@ public: path.push_back(G3D::Vector3(883.15f, 54.6254f, 528.5f)); c->GetMotionMaster()->MoveSplinePath(&path); } - events.ScheduleEvent(31, 500); - events.ScheduleEvent(32, 500); + events.ScheduleEvent(31, 500ms); + events.ScheduleEvent(32, 500ms); } break; case 31: @@ -725,34 +725,34 @@ public: if (c->GetMotionMaster()->GetCurrentMovementGeneratorType() != ESCORT_MOTION_TYPE) { c->CastSpell(c, 69516, false); - events.ScheduleEvent(33, 3000); + events.ScheduleEvent(33, 3s); break; } - events.ScheduleEvent(31, 500); + events.ScheduleEvent(31, 500ms); break; case 32: if (Creature* c = pInstance->instance->GetCreature(deathbringerGUID[1])) if (c->GetMotionMaster()->GetCurrentMovementGeneratorType() != ESCORT_MOTION_TYPE) { c->CastSpell(c, 69516, false); - events.ScheduleEvent(34, 3000); + events.ScheduleEvent(34, 3s); break; } - events.ScheduleEvent(32, 500); + events.ScheduleEvent(32, 500ms); break; case 33: me->SummonCreature(NPC_YMIRJAR_WRATHBRINGER, 919.733f, 89.0972f, 558.959f, 3.85718f); me->SummonCreature(NPC_YMIRJAR_WRATHBRINGER, 911.936f, 63.3542f, 547.698f, 3.735f); me->SummonCreature(NPC_YMIRJAR_FLAMEBEARER, 909.356f, 83.1684f, 551.717f, 3.57792f); me->SummonCreature(NPC_YMIRJAR_FLAMEBEARER, 920.946f, 69.1667f, 557.594f, 3.1765f); - events.ScheduleEvent(35, 3500); + events.ScheduleEvent(35, 3500ms); break; case 34: me->SummonCreature(NPC_YMIRJAR_WRATHBRINGER, 879.464f, 41.1997f, 521.394f, 3.735f); me->SummonCreature(NPC_YMIRJAR_WRATHBRINGER, 885.715f, 65.5156f, 533.631f, 3.85718f); me->SummonCreature(NPC_YMIRJAR_FLAMEBEARER, 876.884f, 61.0139f, 527.715f, 3.57792f); me->SummonCreature(NPC_YMIRJAR_FLAMEBEARER, 889.49f, 45.2865f, 527.233f, 3.97935f); - events.ScheduleEvent(36, 3500); + events.ScheduleEvent(36, 3500ms); break; case 35: if (Creature* c = pInstance->instance->GetCreature(deathbringerGUID[0])) @@ -923,8 +923,8 @@ public: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H); i = 0; events.Reset(); - events.RescheduleEvent(1, 500); - events.RescheduleEvent(2, 15000); + events.RescheduleEvent(1, 500ms); + events.RescheduleEvent(2, 15s); if (pInstance) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_GUID))) @@ -950,7 +950,7 @@ public: { if (type == POINT_MOTION_TYPE && id == 2) { - events.RescheduleEvent(5, 1000); + events.RescheduleEvent(5, 1s); } } @@ -1024,12 +1024,12 @@ public: c->GetMotionMaster()->MovePoint(0, TSData[i].x, TSData[i].y, TSHeight); } ++i; - events.ScheduleEvent(1, 150); + events.ScheduleEvent(1, 150ms); } break; case 2: Talk(me->GetEntry() == NPC_MARTIN_VICTUS_2 ? SAY_GENERAL_ALLIANCE_TRASH : SAY_GENERAL_HORDE_TRASH); - events.RescheduleEvent(3, 8000); + events.RescheduleEvent(3, 8s); break; case 3: if (pInstance) @@ -1046,9 +1046,9 @@ public: c->SetOrientation(5.26f); c->SetHomePosition(*c); } - events.RescheduleEvent(10, 15000); + events.RescheduleEvent(10, 15s); - events.RescheduleEvent(4, 15000); + events.RescheduleEvent(4, 15s); break; case 4: if (pInstance) @@ -1176,8 +1176,8 @@ public: { if (p == 1) { - events.RescheduleEvent(1, me->GetEntry() == NPC_JAINA_PART2 ? 15500 : 18000); - events.RescheduleEvent(2, me->GetEntry() == NPC_JAINA_PART2 ? 16500 : 19000); + events.RescheduleEvent(1, me->GetEntry() == NPC_JAINA_PART2 ? 15s + 500ms : 18s); + events.RescheduleEvent(2, me->GetEntry() == NPC_JAINA_PART2 ? 16s + 500ms : 19s); } } @@ -1238,20 +1238,20 @@ public: if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_MARTIN_OR_GORKUN_GUID))) c->AI()->Talk(SAY_GENERAL_OUTRO_2); - events.RescheduleEvent(3, me->GetEntry() == NPC_JAINA_PART2 ? 7000 : 8000); + events.RescheduleEvent(3, me->GetEntry() == NPC_JAINA_PART2 ? 7s : 8s); break; case 3: Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_OUTRO_1 : SAY_SYLVANAS_OUTRO_1); me->CastSpell(me, me->GetEntry() == NPC_JAINA_PART2 ? SPELL_TELEPORT_JAINA_VISUAL : SPELL_TELEPORT_SYLVANAS_VISUAL, true); - events.RescheduleEvent(4, 2000); + events.RescheduleEvent(4, 2s); break; case 4: me->CastSpell(me, me->GetEntry() == NPC_JAINA_PART2 ? SPELL_TELEPORT_JAINA : SPELL_TELEPORT_SYLVANAS, true); if (GameObject* barrier = me->SummonGameObject(203005, 1055.49f, 115.03f, 628.15f, 2.08f, 0.0f, 0.0f, 0.0f, 0.0f, 86400, false)) barrierGUID = barrier->GetGUID(); - events.RescheduleEvent(5, 1500); + events.RescheduleEvent(5, 1500ms); break; case 5: if (pInstance) @@ -1261,15 +1261,15 @@ public: c->CastSpell(x->GetPositionX(), x->GetPositionY(), x->GetPositionZ(), SPELL_SINDRAGOSA_FROST_BOMB_POS, true); } - events.RescheduleEvent(6, 5000); - events.RescheduleEvent(10, 2000); + events.RescheduleEvent(6, 5s); + events.RescheduleEvent(10, 2s); break; case 6: if (pInstance) if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_SINDRAGOSA_GUID))) c->GetMotionMaster()->MovePoint(0, TSSindragosaPos1); - events.RescheduleEvent(7, 4500); + events.RescheduleEvent(7, 4500ms); break; case 7: if (pInstance) @@ -1279,7 +1279,7 @@ public: barrier->Delete(); barrierGUID.Clear(); - events.RescheduleEvent(8, 2000); + events.RescheduleEvent(8, 2s); break; case 8: me->GetMotionMaster()->MovePath(me->GetEntry() == NPC_JAINA_PART2 ? PATH_BEGIN_VALUE + 16 : PATH_BEGIN_VALUE + 17, false); diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 2ac3101ee..4f75bad64 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -114,7 +114,7 @@ public: { me->SetInCombatWithZone(); summons.DoAction(ACTION_MERGE); - events.ScheduleEvent(EVENT_COLOSSUS_START_FIGHT, 3500); + events.ScheduleEvent(EVENT_COLOSSUS_START_FIGHT, 3500ms); } } @@ -143,9 +143,9 @@ public: void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); - events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10000); - events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1000); - events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_2, 1000); + events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10s); + events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s); + events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_2, 1s); } void JustSummoned(Creature* summon) override @@ -208,7 +208,7 @@ public: break; case EVENT_COLOSSUS_MIGHTY_BLOW: me->CastSpell(me->GetVictim(), SPELL_MIGHTY_BLOW, false); - events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10000); + events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10s); break; case EVENT_COLOSSUS_HEALTH_1: if (me->HealthBelowPct(51)) @@ -219,7 +219,7 @@ public: me->GetMotionMaster()->Clear(); break; } - events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1000); + events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s); break; case EVENT_COLOSSUS_HEALTH_2: if (me->HealthBelowPct(21)) @@ -230,7 +230,7 @@ public: me->GetMotionMaster()->Clear(); break; } - events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_2, 1000); + events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_2, 1s); break; } @@ -253,9 +253,9 @@ public: { boss_drakkari_elementalAI(Creature* pCreature) : ScriptedAI(pCreature) { - events.ScheduleEvent(EVENT_ELEMENTAL_HEALTH, 1000); - events.ScheduleEvent(EVENT_ELEMENTAL_SURGE, 7000); - events.ScheduleEvent(EVENT_ELEMENTAL_VOLLEY, 0); + events.ScheduleEvent(EVENT_ELEMENTAL_HEALTH, 1s); + events.ScheduleEvent(EVENT_ELEMENTAL_SURGE, 7s); + events.ScheduleEvent(EVENT_ELEMENTAL_VOLLEY, 0ms); } EventMap events; @@ -301,13 +301,13 @@ public: events.Reset(); break; } - events.ScheduleEvent(EVENT_ELEMENTAL_HEALTH, 1000); + events.ScheduleEvent(EVENT_ELEMENTAL_HEALTH, 1s); break; case EVENT_ELEMENTAL_SURGE: Talk(SAY_SURGE); me->CastSpell(me, SPELL_SURGE_VISUAL, true); me->CastSpell(me->GetVictim(), SPELL_SURGE, false); - events.ScheduleEvent(EVENT_ELEMENTAL_SURGE, 15000); + events.ScheduleEvent(EVENT_ELEMENTAL_SURGE, 15s); break; case EVENT_ELEMENTAL_VOLLEY: me->CastSpell(me, SPELL_MOJO_VOLLEY, true); @@ -340,8 +340,8 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(EVENT_MOJO_MOJO_PUDDLE, 13000); - events.ScheduleEvent(EVENT_MOJO_MOJO_WAVE, 15000); + events.ScheduleEvent(EVENT_MOJO_MOJO_PUDDLE, 13s); + events.ScheduleEvent(EVENT_MOJO_MOJO_WAVE, 15s); } void MoveInLineOfSight(Unit* who) override @@ -389,13 +389,13 @@ public: case EVENT_MOJO_MOJO_PUDDLE: { me->CastSpell(me, SPELL_MOJO_PUDDLE, false); - events.ScheduleEvent(EVENT_MOJO_MOJO_PUDDLE, 13000); + events.ScheduleEvent(EVENT_MOJO_MOJO_PUDDLE, 13s); break; } case EVENT_MOJO_MOJO_WAVE: { me->CastSpell(me->GetVictim(), SPELL_MOJO_WAVE, false); - events.ScheduleEvent(EVENT_MOJO_MOJO_WAVE, 15000); + events.ScheduleEvent(EVENT_MOJO_MOJO_WAVE, 15s); break; } } diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp index 99e7e4c8a..85ca42519 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp @@ -79,10 +79,10 @@ public: void JustEngagedWith(Unit* who) override { BossAI::JustEngagedWith(who); - events.ScheduleEvent(EVENT_ECK_BERSERK, urand(60000, 90000)); - events.ScheduleEvent(EVENT_ECK_BITE, 5000); - events.ScheduleEvent(EVENT_ECK_SPIT, 10000); - events.ScheduleEvent(EVENT_ECK_SPRING, 8000); + events.ScheduleEvent(EVENT_ECK_BERSERK, 60s, 90s); + events.ScheduleEvent(EVENT_ECK_BITE, 5s); + events.ScheduleEvent(EVENT_ECK_SPIT, 10s); + events.ScheduleEvent(EVENT_ECK_SPRING, 8s); } void JustDied(Unit* killer) override @@ -108,7 +108,7 @@ public: me->CastSpell(me, SPELL_ECK_BERSERK, false); break; } - events.ScheduleEvent(EVENT_ECK_HEALTH, 1000); + events.ScheduleEvent(EVENT_ECK_HEALTH, 1s); break; case EVENT_ECK_BERSERK: me->CastSpell(me, SPELL_ECK_BERSERK, false); @@ -116,11 +116,11 @@ public: break; case EVENT_ECK_BITE: me->CastSpell(me->GetVictim(), SPELL_ECK_BITE, false); - events.ScheduleEvent(EVENT_ECK_BITE, urand(8000, 12000)); + events.ScheduleEvent(EVENT_ECK_BITE, 8s, 12s); break; case EVENT_ECK_SPIT: me->CastSpell(me->GetVictim(), SPELL_ECK_SPIT, false); - events.ScheduleEvent(EVENT_ECK_SPIT, 10000); + events.ScheduleEvent(EVENT_ECK_SPIT, 10s); break; case EVENT_ECK_SPRING: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 30.0f, true)) @@ -130,7 +130,7 @@ public: me->CastSpell(target, SPELL_ECK_SPRING, false); } - events.ScheduleEvent(EVENT_ECK_SPRING, urand(5000, 10000)); + events.ScheduleEvent(EVENT_ECK_SPRING, 5s, 10s); break; } diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index 8693c8436..2a248c177 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -99,15 +99,15 @@ public: events.Reset(); if (troll) { - events.RescheduleEvent(EVENT_STAMPEDE, 10000); - events.RescheduleEvent(EVENT_WHIRLING_SLASH, 21000); + events.RescheduleEvent(EVENT_STAMPEDE, 10s); + events.RescheduleEvent(EVENT_WHIRLING_SLASH, 21s); } else { - events.RescheduleEvent(EVENT_PUNCTURE, 10000); - events.RescheduleEvent(EVENT_ENRAGE, 15000); - events.RescheduleEvent(EVENT_IMPALING_CHARGE, 21000); - events.RescheduleEvent(EVENT_STOMP, 5000); + events.RescheduleEvent(EVENT_PUNCTURE, 10s); + events.RescheduleEvent(EVENT_ENRAGE, 15s); + events.RescheduleEvent(EVENT_IMPALING_CHARGE, 21s); + events.RescheduleEvent(EVENT_STOMP, 5s); } } @@ -149,7 +149,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -167,7 +167,7 @@ public: case EVENT_STAMPEDE: Talk(SAY_SUMMON_RHINO); me->CastSpell(me->GetVictim(), SPELL_STAMPEDE, false); - events.ScheduleEvent(EVENT_STAMPEDE, 15000); + events.ScheduleEvent(EVENT_STAMPEDE, 15s); break; case EVENT_WHIRLING_SLASH: if (++phaseCounter >= 3) @@ -178,21 +178,21 @@ public: phaseCounter = 0; return; } - events.ScheduleEvent(EVENT_WHIRLING_SLASH, 21000); + events.ScheduleEvent(EVENT_WHIRLING_SLASH, 21s); me->CastSpell(me, SPELL_WHIRLING_SLASH, false); break; case EVENT_PUNCTURE: me->CastSpell(me->GetVictim(), SPELL_PUNCTURE, false); - events.ScheduleEvent(EVENT_PUNCTURE, 8000); + events.ScheduleEvent(EVENT_PUNCTURE, 8s); break; case EVENT_ENRAGE: me->CastSpell(me, SPELL_ENRAGE, false); - events.ScheduleEvent(EVENT_ENRAGE, 20000); + events.ScheduleEvent(EVENT_ENRAGE, 20s); break; case EVENT_STOMP: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true)) me->CastSpell(target, SPELL_STOMP, false); - events.ScheduleEvent(EVENT_STOMP, 20000); + events.ScheduleEvent(EVENT_STOMP, 20s); break; case EVENT_IMPALING_CHARGE: if (++phaseCounter >= 3) @@ -203,7 +203,7 @@ public: phaseCounter = 0; return; } - events.ScheduleEvent(EVENT_IMPALING_CHARGE, 21000); + events.ScheduleEvent(EVENT_IMPALING_CHARGE, 21s); if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true)) { me->CastSpell(target, SPELL_IMPALING_CHARGE, false); diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index b07d8e44e..c9a520721 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -78,7 +78,7 @@ public: { BossAI::Reset(); events2.Reset(); - events2.ScheduleEvent(EVENT_PHANTOM, 21000); + events2.ScheduleEvent(EVENT_PHANTOM, 21s); } void JustEngagedWith(Unit* who) override @@ -87,10 +87,10 @@ public: BossAI::JustEngagedWith(who); me->CastSpell(me, SPELL_MOJO_FRENZY, true); - events.ScheduleEvent(EVENT_GROUND_TREMOR, 18000); - events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10000); - events.ScheduleEvent(EVENT_DETERMINED_STAB, 20000); - events.ScheduleEvent(EVENT_TRANSFORMATION, 12000); + events.ScheduleEvent(EVENT_GROUND_TREMOR, 18s); + events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10s); + events.ScheduleEvent(EVENT_DETERMINED_STAB, 20s); + events.ScheduleEvent(EVENT_TRANSFORMATION, 12s); } void SpellHitTarget(Unit* /*caster*/, SpellInfo const* spellInfo) override @@ -115,7 +115,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -127,7 +127,7 @@ public: if (events2.ExecuteEvent() == EVENT_PHANTOM) { me->CastSpell(me, SPELL_SUMMON_PHANTOM, true); - events2.ScheduleEvent(EVENT_PHANTOM, urand(20000, 25000)); + events2.ScheduleEvent(EVENT_PHANTOM, 20s, 25s); } } @@ -144,22 +144,22 @@ public: if (roll_chance_i(50)) Talk(SAY_QUAKE); me->CastSpell(me, me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_QUAKE : SPELL_GROUND_TREMOR, false); - events.ScheduleEvent(EVENT_GROUND_TREMOR, 10000); + events.ScheduleEvent(EVENT_GROUND_TREMOR, 10s); break; case EVENT_NUMBLING_SHOUT: me->CastSpell(me, me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_NUMBING_ROAR : SPELL_NUMBING_SHOUT, false); - events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10000); + events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10s); break; case EVENT_DETERMINED_STAB: me->CastSpell(me->GetVictim(), me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_DETERMINED_GORE : SPELL_DETERMINED_STAB, false); - events.ScheduleEvent(EVENT_DETERMINED_STAB, 8000); + events.ScheduleEvent(EVENT_DETERMINED_STAB, 8s); break; case EVENT_TRANSFORMATION: Talk(EMOTE_TRANSFORM); Talk(SAY_TRANSFORM); me->CastSpell(me, SPELL_TRANSFORMATION, false); me->CastSpell(me, SPELL_SUMMON_PHANTOM_TRANSFORM, true); - events.ScheduleEvent(EVENT_TRANSFORMATION, 10000); + events.ScheduleEvent(EVENT_TRANSFORMATION, 10s); break; } diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index c581c0059..828c97e40 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -107,11 +107,11 @@ public: Talk(SAY_AGGRO); BossAI::JustEngagedWith(who); - events.ScheduleEvent(EVENT_POISON_NOVA, 10000); - events.ScheduleEvent(EVENT_POWERFULL_BITE, 3000); - events.ScheduleEvent(EVENT_VENOM_BOLT, 15000); - events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1000); - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); + events.ScheduleEvent(EVENT_POISON_NOVA, 10s); + events.ScheduleEvent(EVENT_POWERFULL_BITE, 3s); + events.ScheduleEvent(EVENT_VENOM_BOLT, 15s); + events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1s); + events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1s); } void JustDied(Unit* killer) override @@ -126,7 +126,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -151,42 +151,42 @@ public: if (me->HealthBelowPct(70)) { Talk(SAY_SUMMON_SNAKES); - events.ScheduleEvent(EVENT_SUMMON1, 1000); + events.ScheduleEvent(EVENT_SUMMON1, 1s); break; } - events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1000); + events.ScheduleEvent(EVENT_CHECK_HEALTH1, 1s); break; case EVENT_CHECK_HEALTH2: if (me->HealthBelowPct(50)) { Talk(SAY_SUMMON_CONSTRICTORS); - events.ScheduleEvent(EVENT_SUMMON2, 1000); + events.ScheduleEvent(EVENT_SUMMON2, 1s); break; } - events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1000); + events.ScheduleEvent(EVENT_CHECK_HEALTH2, 1s); break; case EVENT_POISON_NOVA: Talk(EMOTE_NOVA); me->CastSpell(me, SPELL_POISON_NOVA, false); - events.ScheduleEvent(EVENT_POISON_NOVA, 15000); + events.ScheduleEvent(EVENT_POISON_NOVA, 15s); break; case EVENT_POWERFULL_BITE: me->CastSpell(me->GetVictim(), SPELL_POWERFULL_BITE, false); - events.ScheduleEvent(EVENT_POWERFULL_BITE, 10000); + events.ScheduleEvent(EVENT_POWERFULL_BITE, 10s); break; case EVENT_VENOM_BOLT: me->CastSpell(me->GetVictim(), SPELL_VENOM_BOLT, false); - events.ScheduleEvent(EVENT_VENOM_BOLT, 10000); + events.ScheduleEvent(EVENT_VENOM_BOLT, 10s); break; case EVENT_SUMMON1: for (uint8 i = MAX_CONSTRICTOR; i < MAX_SUMMONS; ++i) me->SummonCreature(NPC_SLADRAN_VIPER, SpawnLoc[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20 * IN_MILLISECONDS); - events.ScheduleEvent(EVENT_SUMMON1, 8000); + events.ScheduleEvent(EVENT_SUMMON1, 8s); break; case EVENT_SUMMON2: for (uint8 i = 0; i < MAX_CONSTRICTOR; ++i) me->SummonCreature(NPC_SLADRAN_CONSTRICTORS, SpawnLoc[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20 * IN_MILLISECONDS); - events.ScheduleEvent(EVENT_SUMMON2, urand(3000, 5000)); + events.ScheduleEvent(EVENT_SUMMON2, 3s, 5s); break; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index e73d3c1d9..644f07862 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -271,8 +271,8 @@ public: me->resetAttackTimer(BASE_ATTACK); DoAction(ACTION_REMOVE_INVOCATION); events.Reset(); - events.ScheduleEvent(EVENT_BERSERK, 600000); - events.ScheduleEvent(EVENT_SHADOW_RESONANCE, urand(10000, 15000)); + events.ScheduleEvent(EVENT_BERSERK, 10min); + events.ScheduleEvent(EVENT_SHADOW_RESONANCE, 10s, 15s); if (IsHeroic()) me->AddAura(SPELL_SHADOW_PRISON, me); } @@ -412,7 +412,7 @@ public: case EVENT_SHADOW_RESONANCE: Talk(SAY_KELESETH_SPECIAL); me->CastSpell(me, SPELL_SHADOW_RESONANCE, false); - events.ScheduleEvent(EVENT_SHADOW_RESONANCE, urand(10000, 15000)); + events.ScheduleEvent(EVENT_SHADOW_RESONANCE, 10s, 15s); break; } @@ -530,9 +530,9 @@ public: DoAction(ACTION_REMOVE_INVOCATION); events.Reset(); - events.ScheduleEvent(EVENT_BERSERK, 600000); - events.ScheduleEvent(EVENT_GLITTERING_SPARKS, urand(12000, 15000)); - events.ScheduleEvent(EVENT_CONJURE_FLAME, 20000); + events.ScheduleEvent(EVENT_BERSERK, 10min); + events.ScheduleEvent(EVENT_GLITTERING_SPARKS, 12s, 15s); + events.ScheduleEvent(EVENT_CONJURE_FLAME, 20s); if (IsHeroic()) me->AddAura(SPELL_SHADOW_PRISON, me); } @@ -684,18 +684,18 @@ public: break; case EVENT_GLITTERING_SPARKS: me->CastSpell(me->GetVictim(), SPELL_GLITTERING_SPARKS, false); - events.ScheduleEvent(EVENT_GLITTERING_SPARKS, urand(15000, 25000)); + events.ScheduleEvent(EVENT_GLITTERING_SPARKS, 15s, 25s); break; case EVENT_CONJURE_FLAME: if (_isEmpowered) { me->CastSpell(me, SPELL_CONJURE_EMPOWERED_FLAME, false); - events.ScheduleEvent(EVENT_CONJURE_FLAME, 15000); + events.ScheduleEvent(EVENT_CONJURE_FLAME, 15s); } else { me->CastSpell(me, SPELL_CONJURE_FLAME, false); - events.ScheduleEvent(EVENT_CONJURE_FLAME, urand(20000, 25000)); + events.ScheduleEvent(EVENT_CONJURE_FLAME, 20s, 25s); } Talk(SAY_TALDARAM_SPECIAL); break; @@ -821,10 +821,10 @@ public: invocationOrder[1] = RAND(DATA_PRINCE_KELESETH_GUID, DATA_PRINCE_TALDARAM_GUID); invocationOrder[2] = DATA_PRINCE_KELESETH_GUID + DATA_PRINCE_TALDARAM_GUID - invocationOrder[1]; - events.ScheduleEvent(EVENT_BERSERK, 600000); - events.ScheduleEvent(EVENT_KINETIC_BOMB, urand(18000, 24000)); - events.ScheduleEvent(EVENT_SHOCK_VORTEX, urand(15000, 20000)); - events.ScheduleEvent(EVENT_INVOCATION_OF_BLOOD, 45000); + events.ScheduleEvent(EVENT_BERSERK, 10min); + events.ScheduleEvent(EVENT_KINETIC_BOMB, 18s, 24s); + events.ScheduleEvent(EVENT_SHOCK_VORTEX, 15s, 20s); + events.ScheduleEvent(EVENT_INVOCATION_OF_BLOOD, 45s); if (IsHeroic()) { me->AddAura(SPELL_SHADOW_PRISON, me); @@ -1011,7 +1011,7 @@ public: current->CastSpell((Unit*)nullptr, visualSpellId, true); next->AI()->Talk(1); } - events.ScheduleEvent(EVENT_INVOCATION_OF_BLOOD, 46000); + events.ScheduleEvent(EVENT_INVOCATION_OF_BLOOD, 46s); break; case EVENT_BERSERK: me->CastSpell(me, SPELL_BERSERK, true); @@ -1023,20 +1023,20 @@ public: me->CastSpell(target, SPELL_KINETIC_BOMB_TARGET, false); Talk(SAY_VALANAR_SPECIAL); } - events.ScheduleEvent(EVENT_KINETIC_BOMB, me->GetMap()->Is25ManRaid() ? 20500 : 30500); + events.ScheduleEvent(EVENT_KINETIC_BOMB, me->GetMap()->Is25ManRaid() ? 20s + 500ms : 30s + 500ms); break; case EVENT_SHOCK_VORTEX: if (_isEmpowered) { me->CastSpell(me, SPELL_EMPOWERED_SHOCK_VORTEX, false); Talk(EMOTE_VALANAR_SHOCK_VORTEX); - events.ScheduleEvent(EVENT_SHOCK_VORTEX, 30000); + events.ScheduleEvent(EVENT_SHOCK_VORTEX, 30s); } else { if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true)) me->CastSpell(target, SPELL_SHOCK_VORTEX, false); - events.ScheduleEvent(EVENT_SHOCK_VORTEX, urand(18000, 23000)); + events.ScheduleEvent(EVENT_SHOCK_VORTEX, 18s, 23s); } break; } @@ -1109,7 +1109,7 @@ public: _introDone = true; Talk(SAY_INTRO_1); _events.SetPhase(1); - _events.ScheduleEvent(EVENT_INTRO_1, 14000); + _events.ScheduleEvent(EVENT_INTRO_1, 14s); // summon a visual trigger if (Creature* summon = DoSummon(NPC_FLOATING_TRIGGER, triggerPos, 15000, TEMPSUMMON_TIMED_DESPAWN)) { @@ -1383,7 +1383,7 @@ public: void Reset() override { _events.Reset(); - _events.RescheduleEvent(EVENT_BOMB_DESPAWN, 60000); + _events.RescheduleEvent(EVENT_BOMB_DESPAWN, 1min); me->SetWalk(true); exploded = false; @@ -1400,7 +1400,7 @@ public: if (action == SPELL_KINETIC_BOMB_EXPLOSION) { exploded = true; - _events.RescheduleEvent(EVENT_BOMB_DESPAWN, 1000); + _events.RescheduleEvent(EVENT_BOMB_DESPAWN, 1s); } else if (action == ACTION_KINETIC_BOMB_JUMP) { @@ -1410,7 +1410,7 @@ public: me->StopMoving(); me->GetMotionMaster()->MoveCharge(_x, _y, me->GetPositionZ() + 60.0f, me->GetSpeed(MOVE_RUN)); } - _events.RescheduleEvent(EVENT_CONTINUE_FALLING, 3000); + _events.RescheduleEvent(EVENT_CONTINUE_FALLING, 3s); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 9c9d7a2d7..a966f27bc 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -181,14 +181,14 @@ public: me->CastSpell(me, SPELL_SHROUD_OF_SORROW, true); me->CastSpell(me, SPELL_FRENZIED_BLOODTHIRST_VISUAL, true); events.Reset(); - events.ScheduleEvent(EVENT_BERSERK, 330000); - events.ScheduleEvent(EVENT_VAMPIRIC_BITE, 15000); - events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500); - events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, urand(10000, 12000)); - events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 20000); - events.ScheduleEvent(EVENT_SWARMING_SHADOWS, 30000); - events.ScheduleEvent(EVENT_TWILIGHT_BLOODBOLT, urand(15000, 25000)); - events.ScheduleEvent(EVENT_AIR_PHASE, 124000 + uint32(Is25ManRaid() ? 3000 : 0)); + events.ScheduleEvent(EVENT_BERSERK, 330s); + events.ScheduleEvent(EVENT_VAMPIRIC_BITE, 15s); + events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500ms); + events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, 10s, 12s); + events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 20s); + events.ScheduleEvent(EVENT_SWARMING_SHADOWS, 30s); + events.ScheduleEvent(EVENT_TWILIGHT_BLOODBOLT, 15s, 25s); + events.ScheduleEvent(EVENT_AIR_PHASE, Is25ManRaid() ? 127s : 124s); CleanAuras(); me->setActive(true); @@ -282,14 +282,14 @@ public: { case POINT_CENTER: me->CastSpell(me, SPELL_INCITE_TERROR, false); - events.ScheduleEvent(EVENT_AIR_PHASE, 100000 + uint32(Is25ManRaid() ? 0 : 20000)); - events.ScheduleEvent(EVENT_AIR_START_FLYING, 2500); + events.ScheduleEvent(EVENT_AIR_PHASE, Is25ManRaid() ? 100s : 120s); + events.ScheduleEvent(EVENT_AIR_START_FLYING, 2500ms); break; case POINT_AIR: _bloodboltedPlayers.clear(); me->CastSpell(me, SPELL_BLOODBOLT_WHIRL, false); Talk(SAY_AIR_PHASE); - events.ScheduleEvent(EVENT_AIR_FLY_DOWN, 7000); + events.ScheduleEvent(EVENT_AIR_FLY_DOWN, 7s); break; case POINT_GROUND: me->SetCanFly(false); @@ -297,8 +297,8 @@ public: me->SetReactState(REACT_AGGRESSIVE); if (Unit* target = me->SelectVictim()) AttackStart(target); - events.RescheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 5000); - events.RescheduleEvent(EVENT_SWARMING_SHADOWS, 20000); + events.RescheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 5s); + events.RescheduleEvent(EVENT_SWARMING_SHADOWS, 20s); break; case POINT_MINCHAR: me->CastSpell(me, SPELL_ANNIHILATE, true); @@ -384,7 +384,7 @@ public: { _tankGUID.Clear(); _offtankGUID.Clear(); - events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500); + events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500ms); break; } @@ -400,7 +400,7 @@ public: } } } - events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500); + events.ScheduleEvent(EVENT_BLOOD_MIRROR, 2500ms); break; case EVENT_DELIRIOUS_SLASH: if (!me->HasReactState(REACT_PASSIVE)) @@ -415,14 +415,14 @@ public: target = me->GetVictim(); if (!target) { - events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, 5000); + events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, 5s); break; } me->CastSpell(target, SPELL_DELIRIOUS_SLASH, false); - events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, urand(20000, 24000)); + events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, 20s, 24s); break; } - events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, 5000); + events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, 5s); break; case EVENT_PACT_OF_THE_DARKFALLEN: if (!me->HasReactState(REACT_PASSIVE)) @@ -439,13 +439,13 @@ public: Talk(SAY_PACT_OF_THE_DARKFALLEN); for (std::list::iterator itr = myList.begin(); itr != myList.end(); ++itr) me->CastSpell(*itr, SPELL_PACT_OF_THE_DARKFALLEN, false); - events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 30000); + events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 30s); } else - events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 5000); + events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 5s); break; } - events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 5000); + events.ScheduleEvent(EVENT_PACT_OF_THE_DARKFALLEN, 5s); break; case EVENT_SWARMING_SHADOWS: if (!me->HasReactState(REACT_PASSIVE)) @@ -466,10 +466,10 @@ public: me->CastSpell(target, SPELL_SWARMING_SHADOWS, false); } - events.ScheduleEvent(EVENT_SWARMING_SHADOWS, 30000); + events.ScheduleEvent(EVENT_SWARMING_SHADOWS, 30s); break; } - events.ScheduleEvent(EVENT_SWARMING_SHADOWS, 5000); + events.ScheduleEvent(EVENT_SWARMING_SHADOWS, 5s); break; case EVENT_TWILIGHT_BLOODBOLT: if (!me->HasReactState(REACT_PASSIVE)) @@ -485,10 +485,10 @@ public: for (std::list::iterator itr = myList.begin(); itr != myList.end(); ++itr) me->CastSpell(*itr, SPELL_TWILIGHT_BLOODBOLT, false); me->CastSpell(me, SPELL_TWILIGHT_BLOODBOLT_TARGET, false); - events.ScheduleEvent(EVENT_TWILIGHT_BLOODBOLT, urand(10000, 15000)); + events.ScheduleEvent(EVENT_TWILIGHT_BLOODBOLT, 10s, 15s); break; } - events.ScheduleEvent(EVENT_TWILIGHT_BLOODBOLT, 5000); + events.ScheduleEvent(EVENT_TWILIGHT_BLOODBOLT, 5s); break; case EVENT_AIR_PHASE: me->AttackStop(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 740cde76f..d3536b906 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -294,11 +294,11 @@ public: Talk(SAY_AGGRO); events.Reset(); - events.ScheduleEvent(EVENT_SUMMON_BLOOD_BEAST, 30000); - events.ScheduleEvent(EVENT_BERSERK, (IsHeroic() ? 360000 : 480000)); - events.ScheduleEvent(EVENT_BOILING_BLOOD, 15500, 0); - events.ScheduleEvent(EVENT_BLOOD_NOVA, 17000, 0); - events.ScheduleEvent(EVENT_RUNE_OF_BLOOD, 20000, 0); + events.ScheduleEvent(EVENT_SUMMON_BLOOD_BEAST, 30s); + events.ScheduleEvent(EVENT_BERSERK, (IsHeroic() ? 6min : 8min)); + events.ScheduleEvent(EVENT_BOILING_BLOOD, 15s + 500ms, 0); + events.ScheduleEvent(EVENT_BLOOD_NOVA, 17s, 0); + events.ScheduleEvent(EVENT_RUNE_OF_BLOOD, 20s, 0); _fallenChampionCastCount = 0; instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_MARK_OF_THE_FALLEN_CHAMPION); @@ -426,9 +426,9 @@ public: for (uint32 i25 = 0; i25 < 3; ++i25) DoCast(me, SPELL_SUMMON_BLOOD_BEAST_25_MAN + i25); Talk(SAY_BLOOD_BEASTS); - events.ScheduleEvent(EVENT_SUMMON_BLOOD_BEAST, 40000); + events.ScheduleEvent(EVENT_SUMMON_BLOOD_BEAST, 40s); if (IsHeroic()) - events.ScheduleEvent(EVENT_BLOOD_BEAST_SCENT_OF_BLOOD, 10000); + events.ScheduleEvent(EVENT_BLOOD_BEAST_SCENT_OF_BLOOD, 10s); break; case EVENT_BLOOD_BEAST_SCENT_OF_BLOOD: Talk(EMOTE_SCENT_OF_BLOOD); @@ -437,16 +437,16 @@ public: case EVENT_BLOOD_NOVA: { me->CastSpell((Unit*)nullptr, SPELL_BLOOD_NOVA_TRIGGER, false); - events.ScheduleEvent(EVENT_BLOOD_NOVA, urand(20000, 25000)); + events.ScheduleEvent(EVENT_BLOOD_NOVA, 20s, 25s); break; } case EVENT_RUNE_OF_BLOOD: DoCastVictim(SPELL_RUNE_OF_BLOOD); - events.ScheduleEvent(EVENT_RUNE_OF_BLOOD, urand(20000, 25000)); + events.ScheduleEvent(EVENT_RUNE_OF_BLOOD, 20s, 25s); break; case EVENT_BOILING_BLOOD: me->CastSpell((Unit*)nullptr, SPELL_BOILING_BLOOD, false); - events.ScheduleEvent(EVENT_BOILING_BLOOD, urand(15000, 20000)); + events.ScheduleEvent(EVENT_BOILING_BLOOD, 15s, 20s); break; case EVENT_BERSERK: DoCast(me, SPELL_BERSERK); @@ -561,8 +561,8 @@ public: me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); Talk(SAY_INTRO_HORDE_1); _events.SetPhase(PHASE_INTRO_H); - _events.ScheduleEvent(EVENT_INTRO_HORDE_2, 5000, 0, PHASE_INTRO_H); - _events.ScheduleEvent(EVENT_INTRO_HORDE_3, 18500, 0, PHASE_INTRO_H); + _events.ScheduleEvent(EVENT_INTRO_HORDE_2, 5s, 0, PHASE_INTRO_H); + _events.ScheduleEvent(EVENT_INTRO_HORDE_3, 18s + 500ms, 0, PHASE_INTRO_H); _instance->HandleGameObject(_instance->GetGuidData(GO_SAURFANG_S_DOOR), true); if (GameObject* teleporter = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(GO_SCOURGE_TRANSPORTER_SAURFANG))) @@ -633,13 +633,13 @@ public: case POINT_FIRST_STEP: me->SetWalk(false); Talk(SAY_INTRO_HORDE_3); - _events.ScheduleEvent(EVENT_INTRO_HORDE_4, 6500, 0, PHASE_INTRO_H); - _events.ScheduleEvent(EVENT_INTRO_HORDE_5, 15500, 0, PHASE_INTRO_H); - _events.ScheduleEvent(EVENT_INTRO_HORDE_6, 29500, 0, PHASE_INTRO_H); - _events.ScheduleEvent(EVENT_INTRO_HORDE_7, 43800, 0, PHASE_INTRO_H); - _events.ScheduleEvent(EVENT_INTRO_HORDE_8, 47000, 0, PHASE_INTRO_H); - _events.ScheduleEvent(EVENT_INTRO_HORDE_9, 46700 + 1000 + 500, 0, PHASE_INTRO_H); - _events.ScheduleEvent(EVENT_INTRO_FINISH, 46700 + 1000 + 9000, 0, PHASE_INTRO_H); + _events.ScheduleEvent(EVENT_INTRO_HORDE_4, 6500ms, 0, PHASE_INTRO_H); + _events.ScheduleEvent(EVENT_INTRO_HORDE_5, 15s + 500ms, 0, PHASE_INTRO_H); + _events.ScheduleEvent(EVENT_INTRO_HORDE_6, 29s + 500ms, 0, PHASE_INTRO_H); + _events.ScheduleEvent(EVENT_INTRO_HORDE_7, 43s + 800ms, 0, PHASE_INTRO_H); + _events.ScheduleEvent(EVENT_INTRO_HORDE_8, 47s, 0, PHASE_INTRO_H); + _events.ScheduleEvent(EVENT_INTRO_HORDE_9, 48s + 200ms, 0, PHASE_INTRO_H); + _events.ScheduleEvent(EVENT_INTRO_FINISH, 56s + 700ms, 0, PHASE_INTRO_H); break; /*case POINT_CORPSE: if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG))) @@ -822,9 +822,9 @@ public: me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); Talk(SAY_INTRO_ALLIANCE_1); _events.SetPhase(PHASE_INTRO_A); - _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_2, 2500, 0, PHASE_INTRO_A); - _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_3, 20000, 0, PHASE_INTRO_A); - _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_4, 2500 + 17500 + 9500, 0, PHASE_INTRO_A); + _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_2, 2500ms, 0, PHASE_INTRO_A); + _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_3, 20s, 0, PHASE_INTRO_A); + _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_4, 29s + 500ms, 0, PHASE_INTRO_A); _instance->HandleGameObject(_instance->GetGuidData(GO_SAURFANG_S_DOOR), true); if (GameObject* teleporter = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(GO_SCOURGE_TRANSPORTER_SAURFANG))) @@ -892,10 +892,10 @@ public: case POINT_FIRST_STEP: me->SetWalk(false); Talk(SAY_INTRO_ALLIANCE_4); - _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_5, 5000, 0, PHASE_INTRO_A); - _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_6, 6500 + 500, 0, PHASE_INTRO_A); - _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_7, 6500 + 500 + 2000, 0, PHASE_INTRO_A); - _events.ScheduleEvent(EVENT_INTRO_FINISH, 6500 + 500 + 2000 + 5000, 0, PHASE_INTRO_A); + _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_5, 5s, 0, PHASE_INTRO_A); + _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_6, 7s, 0, PHASE_INTRO_A); + _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_7, 9s, 0, PHASE_INTRO_A); + _events.ScheduleEvent(EVENT_INTRO_FINISH, 14s, 0, PHASE_INTRO_A); break; default: break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index c97a496f1..84bd056af 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -117,13 +117,13 @@ public: return; } - events.ScheduleEvent(EVENT_BERSERK, 300000); - events.ScheduleEvent(EVENT_INHALE_BLIGHT, urand(25000, 30000)); - events.ScheduleEvent(EVENT_GAS_SPORE, urand(20000, 25000)); - events.ScheduleEvent(EVENT_VILE_GAS, urand(30000, 40000), 1); - events.ScheduleEvent(EVENT_GASTRIC_BLOAT, urand(12500, 15000)); + events.ScheduleEvent(EVENT_BERSERK, 5min); + events.ScheduleEvent(EVENT_INHALE_BLIGHT, 25s, 30s); + events.ScheduleEvent(EVENT_GAS_SPORE, 20s, 25s); + events.ScheduleEvent(EVENT_VILE_GAS, 30s, 40s, 1); + events.ScheduleEvent(EVENT_GASTRIC_BLOAT, 12s + 500ms, 15s); if (IsHeroic()) - events.ScheduleEvent(EVENT_FESTERGUT_GOO, urand(15000, 20000)); + events.ScheduleEvent(EVENT_FESTERGUT_GOO, 15s, 20s); me->setActive(true); Talk(SAY_AGGRO); @@ -211,7 +211,7 @@ public: Talk(SAY_PUNGENT_BLIGHT); me->CastSpell(me, SPELL_PUNGENT_BLIGHT, false); _inhaleCounter = 0; - events.RescheduleEvent(EVENT_GAS_SPORE, urand(20000, 25000)); + events.RescheduleEvent(EVENT_GAS_SPORE, 20s, 25s); } else { @@ -222,13 +222,13 @@ public: me->CastSpell(me, gaseousBlight[_inhaleCounter], true, nullptr, nullptr, me->GetGUID()); } - events.ScheduleEvent(EVENT_INHALE_BLIGHT, 34000); + events.ScheduleEvent(EVENT_INHALE_BLIGHT, 34s); break; case EVENT_GAS_SPORE: Talk(EMOTE_WARN_GAS_SPORE); Talk(EMOTE_GAS_SPORE); me->CastCustomSpell(SPELL_GAS_SPORE, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 3, 2, 3), me); - events.ScheduleEvent(EVENT_GAS_SPORE, urand(40000, 45000)); + events.ScheduleEvent(EVENT_GAS_SPORE, 40s, 45s); events.DelayEventsToMax(20000, 1); // delay EVENT_VILE_GAS break; case EVENT_VILE_GAS: @@ -242,18 +242,18 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, minDist, true)) me->CastSpell(target, SPELL_VILE_GAS, false); - events.ScheduleEvent(EVENT_VILE_GAS, urand(28000, 35000), 1); + events.ScheduleEvent(EVENT_VILE_GAS, 28s, 35s, 1); break; } case EVENT_GASTRIC_BLOAT: me->CastSpell(me->GetVictim(), SPELL_GASTRIC_BLOAT, false); - events.ScheduleEvent(EVENT_GASTRIC_BLOAT, urand(15000, 17500)); + events.ScheduleEvent(EVENT_GASTRIC_BLOAT, 15s, 17s + 500ms); break; case EVENT_FESTERGUT_GOO: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NonTankTargetSelector(me))) if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE))) professor->CastSpell(target, SPELL_MALLABLE_GOO_H, true); - events.ScheduleEvent(EVENT_FESTERGUT_GOO, urand(15000, 20000)); + events.ScheduleEvent(EVENT_FESTERGUT_GOO, 15s, 20s); default: break; } @@ -439,8 +439,8 @@ public: { me->setActive(true); me->CastSpell(me, SPELL_PLAGUE_STENCH, true); - events.ScheduleEvent(EVENT_DECIMATE, urand(20000, 25000)); - events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(1500, 2500)); + events.ScheduleEvent(EVENT_DECIMATE, 20s, 25s); + events.ScheduleEvent(EVENT_MORTAL_WOUND, 1500ms, 2500ms); } void UpdateAI(uint32 diff) override @@ -459,11 +459,11 @@ public: { case EVENT_DECIMATE: me->CastSpell(me->GetVictim(), SPELL_DECIMATE, false); - events.ScheduleEvent(EVENT_DECIMATE, urand(20000, 25000)); + events.ScheduleEvent(EVENT_DECIMATE, 20s, 25s); break; case EVENT_MORTAL_WOUND: me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false); - events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(1500, 2500)); + events.ScheduleEvent(EVENT_MORTAL_WOUND, 1500ms, 2500ms); break; default: break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 89aa7a093..2863c14e2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -763,11 +763,11 @@ public: me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->GetTransport()->setActive(true); me->GetTransport()->ToMotionTransport()->EnableMovement(true); - _events.ScheduleEvent(EVENT_INTRO_H_1, 5000); - _events.ScheduleEvent(EVENT_INTRO_H_2, 16000); - _events.ScheduleEvent(EVENT_INTRO_SUMMON_SKYBREAKER, 24600); - _events.ScheduleEvent(EVENT_INTRO_H_3, 29600); - _events.ScheduleEvent(EVENT_INTRO_H_4, 39200); + _events.ScheduleEvent(EVENT_INTRO_H_1, 5s); + _events.ScheduleEvent(EVENT_INTRO_H_2, 16s); + _events.ScheduleEvent(EVENT_INTRO_SUMMON_SKYBREAKER, 24s + 600ms); + _events.ScheduleEvent(EVENT_INTRO_H_3, 29s + 600ms); + _events.ScheduleEvent(EVENT_INTRO_H_4, 39s + 200ms); } void JustEngagedWith(Unit* /*target*/) override @@ -777,7 +777,7 @@ public: if (!me->HasAura(SPELL_BATTLE_FURY)) me->CastSpell(me, SPELL_BATTLE_FURY, true); _events.CancelEvent(EVENT_CLEAVE); - _events.ScheduleEvent(EVENT_CLEAVE, urand(3000, 6000)); + _events.ScheduleEvent(EVENT_CLEAVE, 3s, 6s); } void EnterEvadeMode(EvadeReason /*why*/) override @@ -801,9 +801,9 @@ public: muradin->AI()->DoAction(ACTION_SPAWN_ALL_ADDS); Talk(SAY_SAURFANG_INTRO_5); - _events.ScheduleEvent(EVENT_INTRO_H_5, 4000); - _events.ScheduleEvent(EVENT_INTRO_H_6, 11000); - _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 1); + _events.ScheduleEvent(EVENT_INTRO_H_5, 4s); + _events.ScheduleEvent(EVENT_INTRO_H_6, 11s); + _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 1ms); if (Creature* skybreaker = me->FindNearestCreature(NPC_THE_SKYBREAKER, 200.0f)) _instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, skybreaker, 1); @@ -819,13 +819,13 @@ public: if (_firstMageCooldown > now) _events.ScheduleEvent(EVENT_SUMMON_MAGE, (_firstMageCooldown - now) * IN_MILLISECONDS); else - _events.ScheduleEvent(EVENT_SUMMON_MAGE, 1); + _events.ScheduleEvent(EVENT_SUMMON_MAGE, 1ms); } else if (action == ACTION_SPAWN_ALL_ADDS) { - _events.ScheduleEvent(EVENT_ADDS, 12000); - _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 13000); - _events.ScheduleEvent(EVENT_CHECK_MORTAR, 13000); + _events.ScheduleEvent(EVENT_ADDS, 12s); + _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 13s); + _events.ScheduleEvent(EVENT_CHECK_MORTAR, 13s); if (Is25ManRaid()) _controller.SummonCreatures(me, SLOT_MAGE_1, SLOT_MORTAR_4); else @@ -860,7 +860,7 @@ public: { _controller.ClearSlot(PassengerSlots(data)); if (data == SLOT_FREEZE_MAGE) - _events.ScheduleEvent(EVENT_SUMMON_MAGE, urand(30000, 33500)); + _events.ScheduleEvent(EVENT_SUMMON_MAGE, 30s, 33s + 500ms); } } @@ -950,7 +950,7 @@ public: if (Player* p = itr->GetSource()) if (!p->IsGameMaster()) p->SetInCombatState(true); - _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 4000); + _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 4s); } break; @@ -980,8 +980,8 @@ public: me->SummonCreature(NPC_TELEPORT_EXIT, x, y, z, o, TEMPSUMMON_TIMED_DESPAWN, 23000); } - _events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6000); - _events.ScheduleEvent(EVENT_ADDS, 60000); + _events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6s); + _events.ScheduleEvent(EVENT_ADDS, 1min); break; case EVENT_ADDS_BOARD_YELL: if (Creature* muradin = me->FindNearestCreature(NPC_IGB_MURADIN_BRONZEBEARD, 200.0f)) @@ -996,7 +996,7 @@ public: _axethrowersYellCooldown = GameTime::GetGameTime().count() + 5; } } - _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 1500); + _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 1500ms); break; case EVENT_CHECK_MORTAR: if (_controller.SummonCreatures(me, SLOT_MORTAR_1, Is25ManRaid() ? SLOT_MORTAR_4 : SLOT_MORTAR_2)) @@ -1007,12 +1007,12 @@ public: _rocketeersYellCooldown = GameTime::GetGameTime().count() + 5; } } - _events.ScheduleEvent(EVENT_CHECK_MORTAR, 1500); + _events.ScheduleEvent(EVENT_CHECK_MORTAR, 1500ms); break; case EVENT_CLEAVE: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - _events.ScheduleEvent(EVENT_CLEAVE, urand(4000, 8000)); + _events.ScheduleEvent(EVENT_CLEAVE, 4s, 8s); break; default: @@ -1098,12 +1098,12 @@ public: me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->GetTransport()->setActive(true); me->GetTransport()->ToMotionTransport()->EnableMovement(true); - _events.ScheduleEvent(EVENT_INTRO_A_1, 5000); - _events.ScheduleEvent(EVENT_INTRO_A_2, 10000); - _events.ScheduleEvent(EVENT_INTRO_SUMMON_ORGRIMS_HAMMER, 28000); - _events.ScheduleEvent(EVENT_INTRO_A_3, 33000); - _events.ScheduleEvent(EVENT_INTRO_A_4, 39000); - _events.ScheduleEvent(EVENT_INTRO_A_5, 45000); + _events.ScheduleEvent(EVENT_INTRO_A_1, 5s); + _events.ScheduleEvent(EVENT_INTRO_A_2, 10s); + _events.ScheduleEvent(EVENT_INTRO_SUMMON_ORGRIMS_HAMMER, 28s); + _events.ScheduleEvent(EVENT_INTRO_A_3, 33s); + _events.ScheduleEvent(EVENT_INTRO_A_4, 39s); + _events.ScheduleEvent(EVENT_INTRO_A_5, 45s); } void JustEngagedWith(Unit* /*target*/) override @@ -1113,7 +1113,7 @@ public: if (!me->HasAura(SPELL_BATTLE_FURY)) me->CastSpell(me, SPELL_BATTLE_FURY, true); _events.CancelEvent(EVENT_CLEAVE); - _events.ScheduleEvent(EVENT_CLEAVE, urand(3000, 6000)); + _events.ScheduleEvent(EVENT_CLEAVE, 3s, 6s); } void EnterEvadeMode(EvadeReason /*why*/) override @@ -1137,9 +1137,9 @@ public: saurfang->AI()->DoAction(ACTION_SPAWN_ALL_ADDS); Talk(SAY_MURADIN_INTRO_6); - _events.ScheduleEvent(EVENT_INTRO_A_6, 5000); - _events.ScheduleEvent(EVENT_INTRO_A_7, 11000); - _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 1); + _events.ScheduleEvent(EVENT_INTRO_A_6, 5s); + _events.ScheduleEvent(EVENT_INTRO_A_7, 11s); + _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 1ms); if (Creature* orgrimsHammer = me->FindNearestCreature(NPC_ORGRIMS_HAMMER, 200.0f)) _instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, orgrimsHammer, 1); @@ -1155,13 +1155,13 @@ public: if (_firstMageCooldown > now) _events.ScheduleEvent(EVENT_SUMMON_MAGE, (_firstMageCooldown - now) * IN_MILLISECONDS); else - _events.ScheduleEvent(EVENT_SUMMON_MAGE, 1); + _events.ScheduleEvent(EVENT_SUMMON_MAGE, 1ms); } else if (action == ACTION_SPAWN_ALL_ADDS) { - _events.ScheduleEvent(EVENT_ADDS, 12000); - _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 13000); - _events.ScheduleEvent(EVENT_CHECK_MORTAR, 13000); + _events.ScheduleEvent(EVENT_ADDS, 12s); + _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 13s); + _events.ScheduleEvent(EVENT_CHECK_MORTAR, 13s); if (Is25ManRaid()) _controller.SummonCreatures(me, SLOT_MAGE_1, SLOT_MORTAR_4); else @@ -1196,7 +1196,7 @@ public: { _controller.ClearSlot(PassengerSlots(data)); if (data == SLOT_FREEZE_MAGE) - _events.ScheduleEvent(EVENT_SUMMON_MAGE, urand(30000, 33500)); + _events.ScheduleEvent(EVENT_SUMMON_MAGE, 30s, 33s + 500ms); } } @@ -1289,7 +1289,7 @@ public: if (Player* p = itr->GetSource()) if (!p->IsGameMaster()) p->SetInCombatState(true); - _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 4000); + _events.ScheduleEvent(EVENT_KEEP_PLAYER_IN_COMBAT, 4s); } break; @@ -1319,8 +1319,8 @@ public: me->SummonCreature(NPC_TELEPORT_EXIT, x, y, z, o, TEMPSUMMON_TIMED_DESPAWN, 23000); } - _events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6000); - _events.ScheduleEvent(EVENT_ADDS, 60000); + _events.ScheduleEvent(EVENT_ADDS_BOARD_YELL, 6s); + _events.ScheduleEvent(EVENT_ADDS, 1min); break; case EVENT_ADDS_BOARD_YELL: if (Creature* saurfang = me->FindNearestCreature(NPC_IGB_HIGH_OVERLORD_SAURFANG, 200.0f)) @@ -1335,7 +1335,7 @@ public: _riflemanYellCooldown = GameTime::GetGameTime().count() + 5; } } - _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 1500); + _events.ScheduleEvent(EVENT_CHECK_RIFLEMAN, 1500ms); break; case EVENT_CHECK_MORTAR: if (_controller.SummonCreatures(me, SLOT_MORTAR_1, Is25ManRaid() ? SLOT_MORTAR_4 : SLOT_MORTAR_2)) @@ -1346,12 +1346,12 @@ public: _mortarYellCooldown = GameTime::GetGameTime().count() + 5; } } - _events.ScheduleEvent(EVENT_CHECK_MORTAR, 1500); + _events.ScheduleEvent(EVENT_CHECK_MORTAR, 1500ms); break; case EVENT_CLEAVE: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - _events.ScheduleEvent(EVENT_CLEAVE, urand(4000, 8000)); + _events.ScheduleEvent(EVENT_CLEAVE, 4s, 8s); break; default: @@ -1661,8 +1661,8 @@ public: void JustEngagedWith(Unit* /*target*/) override { _events.Reset(); - _events.ScheduleEvent(EVENT_BLADESTORM, urand(13000, 18000)); - _events.ScheduleEvent(EVENT_WOUNDING_STRIKE, urand(5000, 10000)); + _events.ScheduleEvent(EVENT_BLADESTORM, 13s, 18s); + _events.ScheduleEvent(EVENT_WOUNDING_STRIKE, 5s, 10s); } void UpdateAI(uint32 diff) override @@ -1689,11 +1689,11 @@ public: break; case EVENT_BLADESTORM: me->CastSpell(me->GetVictim(), SPELL_BLADESTORM, false); - _events.ScheduleEvent(EVENT_BLADESTORM, urand(25000, 30000)); + _events.ScheduleEvent(EVENT_BLADESTORM, 25s, 30s); break; case EVENT_WOUNDING_STRIKE: me->CastSpell(me->GetVictim(), SPELL_WOUNDING_STRIKE, false); - _events.ScheduleEvent(EVENT_WOUNDING_STRIKE, urand(7000, 13000)); + _events.ScheduleEvent(EVENT_WOUNDING_STRIKE, 7s, 13s); break; default: break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index bb8c999d4..02c097af3 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -279,13 +279,13 @@ public: events.Reset(); events.SetPhase(PHASE_ONE); - events.ScheduleEvent(EVENT_BERSERK, 600000); - events.ScheduleEvent(EVENT_SPELL_DEATH_AND_DECAY, 10000); + events.ScheduleEvent(EVENT_BERSERK, 10min); + events.ScheduleEvent(EVENT_SPELL_DEATH_AND_DECAY, 10s); if (GetDifficulty() != RAID_DIFFICULTY_10MAN_NORMAL) - events.ScheduleEvent(EVENT_SPELL_DOMINATE_MIND_25, 30000); - events.ScheduleEvent(EVENT_SPELL_SHADOW_BOLT, 2000, 0, PHASE_ONE); - events.ScheduleEvent(EVENT_SUMMON_WAVE_P1, 5000, 0, PHASE_ONE); - events.ScheduleEvent(EVENT_EMPOWER_CULTIST, urand(20000, 30000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_SPELL_DOMINATE_MIND_25, 30s); + events.ScheduleEvent(EVENT_SPELL_SHADOW_BOLT, 2s, 0, PHASE_ONE); + events.ScheduleEvent(EVENT_SUMMON_WAVE_P1, 5s, 0, PHASE_ONE); + events.ScheduleEvent(EVENT_EMPOWER_CULTIST, 20s, 30s, 0, PHASE_ONE); Talk(SAY_AGGRO); me->RemoveAurasDueToSpell(SPELL_SHADOW_CHANNELING); @@ -315,15 +315,15 @@ public: me->SetPower(POWER_MANA, 0); me->RemoveAurasDueToSpell(SPELL_MANA_BARRIER); events.SetPhase(PHASE_TWO); - events.ScheduleEvent(EVENT_SPELL_FROSTBOLT, urand(10000, 12000), 0, PHASE_TWO); - events.ScheduleEvent(EVENT_SPELL_FROSTBOLT_VOLLEY, urand(19000, 21000), 0, PHASE_TWO); - events.ScheduleEvent(EVENT_SPELL_TOUCH_OF_INSIGNIFICANCE, urand(6000, 9000), 0, PHASE_TWO); - events.ScheduleEvent(EVENT_SPELL_SUMMON_SHADE, urand(12000, 15000), 0, PHASE_TWO); + events.ScheduleEvent(EVENT_SPELL_FROSTBOLT, 10s, 12s, 0, PHASE_TWO); + events.ScheduleEvent(EVENT_SPELL_FROSTBOLT_VOLLEY, 19s, 21s, 0, PHASE_TWO); + events.ScheduleEvent(EVENT_SPELL_TOUCH_OF_INSIGNIFICANCE, 6s, 9s, 0, PHASE_TWO); + events.ScheduleEvent(EVENT_SPELL_SUMMON_SHADE, 12s, 15s, 0, PHASE_TWO); if (IsHeroic()) { me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); - events.ScheduleEvent(EVENT_SUMMON_WAVE_P2, 45000, 0, PHASE_TWO); + events.ScheduleEvent(EVENT_SUMMON_WAVE_P2, 45s, 0, PHASE_TWO); } } } @@ -367,7 +367,7 @@ public: case EVENT_SPELL_DEATH_AND_DECAY: if (Unit* target = SelectTarget(SelectTargetMethod::Random)) me->CastSpell(target, SPELL_DEATH_AND_DECAY, false); - events.RepeatEvent(urand(22000, 30000)); + events.Repeat(22s, 30s); break; case EVENT_SPELL_DOMINATE_MIND_25: { @@ -404,37 +404,37 @@ public: me->CastSpell(target, SPELL_DOMINATE_MIND_25, true); } - events.RepeatEvent(urand(40000, 45000)); + events.Repeat(40s, 45s); } break; case EVENT_SPELL_SHADOW_BOLT: if (Unit* target = SelectTarget(SelectTargetMethod::Random)) me->CastSpell(target, SPELL_SHADOW_BOLT, false); - events.RepeatEvent(2100); + events.Repeat(2100ms); break; case EVENT_SUMMON_WAVE_P1: SummonWaveP1(); - events.RepeatEvent(IsHeroic() ? 45000 : 60000); + events.Repeat(IsHeroic() ? 45s : 60s); break; case EVENT_EMPOWER_CULTIST: EmpowerCultist(); - events.RepeatEvent(urand(18000, 25000)); + events.Repeat(18s, 25s); break; case EVENT_SPELL_FROSTBOLT: me->CastSpell(me->GetVictim(), SPELL_FROSTBOLT, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_SPELL_FROSTBOLT_VOLLEY: me->CastSpell((Unit*)nullptr, SPELL_FROSTBOLT_VOLLEY, false); - events.RepeatEvent(urand(13000, 15000)); + events.Repeat(13s, 15s); break; case EVENT_SPELL_TOUCH_OF_INSIGNIFICANCE: me->CastSpell(me->GetVictim(), SPELL_TOUCH_OF_INSIGNIFICANCE, false); - events.RepeatEvent(urand(6000, 9000)); + events.Repeat(6s, 9s); break; case EVENT_SUMMON_WAVE_P2: SummonWaveP2(); - events.RepeatEvent(45000); + events.Repeat(45s); break; case EVENT_SPELL_SUMMON_SHADE: { @@ -450,7 +450,7 @@ public: for (std::list::iterator itr = targets.begin(); itr != targets.end(); ++itr) me->CastSpell(*itr, SPELL_SUMMON_SHADE, true); } - events.RepeatEvent(12000); + events.Repeat(12s); break; } @@ -556,12 +556,12 @@ public: _introDone = true; Talk(SAY_INTRO_1); events.SetPhase(PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_2, 11000, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_3, 21000, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_4, 31500, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_5, 39500, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_6, 48500, 0, PHASE_INTRO); - events.ScheduleEvent(EVENT_INTRO_7, 58000, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_2, 11s, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_3, 21s, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_4, 31s + 500ms, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_5, 39s + 500ms, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_6, 48s + 500ms, 0, PHASE_INTRO); + events.ScheduleEvent(EVENT_INTRO_7, 58s, 0, PHASE_INTRO); } } @@ -680,9 +680,9 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(EVENT_SPELL_FANATIC_NECROTIC_STRIKE, urand(10000, 12000)); - events.ScheduleEvent(EVENT_SPELL_FANATIC_SHADOW_CLEAVE, urand(14000, 16000)); - events.ScheduleEvent(EVENT_SPELL_FANATIC_VAMPIRIC_MIGHT, urand(20000, 27000)); + events.ScheduleEvent(EVENT_SPELL_FANATIC_NECROTIC_STRIKE, 10s, 12s); + events.ScheduleEvent(EVENT_SPELL_FANATIC_SHADOW_CLEAVE, 14s, 16s); + events.ScheduleEvent(EVENT_SPELL_FANATIC_VAMPIRIC_MIGHT, 20s, 27s); } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override @@ -711,7 +711,7 @@ public: case SPELL_DARK_MARTYRDOM_FANATIC_25N: case SPELL_DARK_MARTYRDOM_FANATIC_25H: ApplyMechanicImmune(me, false); - events.ScheduleEvent(EVENT_SPELL_CULTIST_DARK_MARTYRDOM, 5); // Visual purposes only. + events.ScheduleEvent(EVENT_SPELL_CULTIST_DARK_MARTYRDOM, 5ms); // Visual purposes only. break; } } @@ -732,15 +732,15 @@ public: { case EVENT_SPELL_FANATIC_NECROTIC_STRIKE: me->CastSpell(me->GetVictim(), SPELL_NECROTIC_STRIKE, false); - events.RepeatEvent(urand(11000, 13000)); + events.Repeat(11s, 13s); break; case EVENT_SPELL_FANATIC_SHADOW_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_SHADOW_CLEAVE, false); - events.RepeatEvent(urand(9500, 11000)); + events.Repeat(9500ms, 11s); break; case EVENT_SPELL_FANATIC_VAMPIRIC_MIGHT: me->CastSpell(me, SPELL_VAMPIRIC_MIGHT, false); - events.RepeatEvent(urand(20000, 27000)); + events.Repeat(20s, 27s); break; case EVENT_CULTIST_DARK_MARTYRDOM_REVIVE: me->RemoveAurasDueToSpell(SPELL_PERMANENT_FEIGN_DEATH); @@ -763,7 +763,7 @@ public: me->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); me->SetUnitFlag(UNIT_FLAG_STUNNED | UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE); Reset(); - events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6000); + events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6s); break; } @@ -792,10 +792,10 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(EVENT_SPELL_ADHERENT_FROST_FEVER, urand(10000, 12000)); - events.ScheduleEvent(EVENT_SPELL_ADHERENT_DEATHCHILL, urand(14000, 16000)); - events.ScheduleEvent(EVENT_SPELL_ADHERENT_CURSE_OF_TORPOR, urand(14000, 16000)); - events.ScheduleEvent(EVENT_SPELL_ADHERENT_SHROUD_OF_THE_OCCULT, urand(32000, 39000)); + events.ScheduleEvent(EVENT_SPELL_ADHERENT_FROST_FEVER, 10s, 12s); + events.ScheduleEvent(EVENT_SPELL_ADHERENT_DEATHCHILL, 14s, 16s); + events.ScheduleEvent(EVENT_SPELL_ADHERENT_CURSE_OF_TORPOR, 14s, 16s); + events.ScheduleEvent(EVENT_SPELL_ADHERENT_SHROUD_OF_THE_OCCULT, 32s, 39s); } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override @@ -824,7 +824,7 @@ public: case SPELL_DARK_MARTYRDOM_ADHERENT_25N: case SPELL_DARK_MARTYRDOM_ADHERENT_25H: ApplyMechanicImmune(me, false); - events.ScheduleEvent(EVENT_SPELL_CULTIST_DARK_MARTYRDOM, 5); // Visual purposes only. + events.ScheduleEvent(EVENT_SPELL_CULTIST_DARK_MARTYRDOM, 5ms); // Visual purposes only. break; } } @@ -845,23 +845,23 @@ public: { case EVENT_SPELL_ADHERENT_FROST_FEVER: me->CastSpell(me->GetVictim(), SPELL_FROST_FEVER, false); - events.RepeatEvent(urand(9000, 13000)); + events.Repeat(9s, 13s); break; case EVENT_SPELL_ADHERENT_DEATHCHILL: if (me->GetEntry() == NPC_EMPOWERED_ADHERENT) me->CastSpell(me->GetVictim(), SPELL_DEATHCHILL_BLAST, false); else me->CastSpell(me->GetVictim(), SPELL_DEATHCHILL_BOLT, false); - events.RepeatEvent(urand(9000, 13000)); + events.Repeat(9s, 13s); break; case EVENT_SPELL_ADHERENT_CURSE_OF_TORPOR: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1)) me->CastSpell(target, SPELL_CURSE_OF_TORPOR, false); - events.RepeatEvent(urand(9000, 13000)); + events.Repeat(9s, 13s); break; case EVENT_SPELL_ADHERENT_SHROUD_OF_THE_OCCULT: me->CastSpell(me, SPELL_SHORUD_OF_THE_OCCULT, false); - events.RepeatEvent(urand(27000, 32000)); + events.Repeat(27s, 32s); break; case EVENT_CULTIST_DARK_MARTYRDOM_REVIVE: me->RemoveAurasDueToSpell(SPELL_PERMANENT_FEIGN_DEATH); @@ -884,7 +884,7 @@ public: me->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); me->SetUnitFlag(UNIT_FLAG_STUNNED | UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE); Reset(); - events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6000); + events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6s); break; default: break; @@ -1008,10 +1008,10 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(EVENT_DARNAVAN_BLADESTORM, 10000); - events.ScheduleEvent(EVENT_DARNAVAN_INTIMIDATING_SHOUT, urand(20000, 25000)); - events.ScheduleEvent(EVENT_DARNAVAN_MORTAL_STRIKE, urand(25000, 30000)); - events.ScheduleEvent(EVENT_DARNAVAN_SUNDER_ARMOR, urand(5000, 8000)); + events.ScheduleEvent(EVENT_DARNAVAN_BLADESTORM, 10s); + events.ScheduleEvent(EVENT_DARNAVAN_INTIMIDATING_SHOUT, 20s, 25s); + events.ScheduleEvent(EVENT_DARNAVAN_MORTAL_STRIKE, 25s, 30s); + events.ScheduleEvent(EVENT_DARNAVAN_SUNDER_ARMOR, 5s, 8s); _canCharge = true; _canShatter = true; } @@ -1061,7 +1061,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_SHATTERING_THROW, false); _canShatter = false; - events.ScheduleEvent(EVENT_DARNAVAN_SHATTERING_THROW, 30000); + events.ScheduleEvent(EVENT_DARNAVAN_SHATTERING_THROW, 30s); return; } @@ -1069,7 +1069,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_CHARGE, false); _canCharge = false; - events.ScheduleEvent(EVENT_DARNAVAN_CHARGE, 20000); + events.ScheduleEvent(EVENT_DARNAVAN_CHARGE, 20s); return; } @@ -1077,25 +1077,25 @@ public: { case EVENT_DARNAVAN_BLADESTORM: me->CastSpell((Unit*)nullptr, SPELL_BLADESTORM, false); - events.RepeatEvent(urand(90000, 100000)); + events.Repeat(90s, 100s); break; case EVENT_DARNAVAN_CHARGE: _canCharge = true; break; case EVENT_DARNAVAN_INTIMIDATING_SHOUT: me->CastSpell((Unit*)nullptr, SPELL_INTIMIDATING_SHOUT, false); - events.RepeatEvent(urand(90000, 120000)); + events.Repeat(90s, 120s); break; case EVENT_DARNAVAN_MORTAL_STRIKE: me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false); - events.RepeatEvent(urand(15000, 30000)); + events.Repeat(15s, 30s); break; case EVENT_DARNAVAN_SHATTERING_THROW: _canShatter = true; break; case EVENT_DARNAVAN_SUNDER_ARMOR: me->CastSpell(me->GetVictim(), SPELL_SUNDER_ARMOR, false); - events.RepeatEvent(urand(3000, 7000)); + events.Repeat(3s, 7s); break; default: break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 57b90967d..fb525b616 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -113,11 +113,11 @@ public: { me->SetReactState(REACT_AGGRESSIVE); _Reset(); - events.ScheduleEvent(EVENT_ENABLE_BONE_SLICE, 10000); - events.ScheduleEvent(EVENT_SPELL_BONE_SPIKE_GRAVEYARD, urand(10000, 15000)); - events.ScheduleEvent(EVENT_SPELL_COLDFLAME, 5000); - events.ScheduleEvent(EVENT_WARN_BONE_STORM, urand(45000, 50000)); - events.ScheduleEvent(EVENT_ENRAGE, 600000); + events.ScheduleEvent(EVENT_ENABLE_BONE_SLICE, 10s); + events.ScheduleEvent(EVENT_SPELL_BONE_SPIKE_GRAVEYARD, 10s, 15s); + events.ScheduleEvent(EVENT_SPELL_COLDFLAME, 5s); + events.ScheduleEvent(EVENT_WARN_BONE_STORM, 45s, 50s); + events.ScheduleEvent(EVENT_ENRAGE, 10min); _boneSlice = false; @@ -176,13 +176,13 @@ public: bool a = me->HasAura(SPELL_BONE_STORM); if (IsHeroic() || !a) me->CastSpell(me, SPELL_BONE_SPIKE_GRAVEYARD, a); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); } break; case EVENT_SPELL_COLDFLAME: if (!me->HasAura(SPELL_BONE_STORM)) me->CastSpell((Unit*)nullptr, SPELL_COLDFLAME_NORMAL, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_SPELL_COLDFLAME_BONE_STORM: me->CastSpell(me, SPELL_COLDFLAME_BONE_STORM, false); @@ -196,15 +196,15 @@ public: me->SetReactState(REACT_PASSIVE); // to prevent chasing another target on UpdateVictim() me->GetMotionMaster()->MoveIdle(); me->GetMotionMaster()->MovementExpired(); - events.RepeatEvent(urand(90000, 95000)); - events.ScheduleEvent(EVENT_BEGIN_BONE_STORM, 3050); + events.Repeat(90s, 95s); + events.ScheduleEvent(EVENT_BEGIN_BONE_STORM, 3050ms); break; case EVENT_BEGIN_BONE_STORM: { uint32 _boneStormDuration = RAID_MODE(20000, 30000, 20000, 30000); if (Aura* pStorm = me->GetAura(SPELL_BONE_STORM)) pStorm->SetDuration(int32(_boneStormDuration)); - events.ScheduleEvent(EVENT_BONE_STORM_MOVE, 0); + events.ScheduleEvent(EVENT_BONE_STORM_MOVE, 0ms); events.ScheduleEvent(EVENT_END_BONE_STORM, _boneStormDuration + 1); } break; @@ -212,10 +212,10 @@ public: { if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE) { - events.RepeatEvent(1); + events.Repeat(1ms); break; } - events.RepeatEvent(5000); + events.Repeat(5s); Unit* unit = SelectTarget(SelectTargetMethod::Random, 0, BoneStormMoveTargetSelector(me)); if (!unit) { @@ -237,9 +237,9 @@ public: me->SetReactState(REACT_AGGRESSIVE); DoStartMovement(me->GetVictim()); events.CancelEvent(EVENT_BONE_STORM_MOVE); - events.ScheduleEvent(EVENT_ENABLE_BONE_SLICE, 10000); + events.ScheduleEvent(EVENT_ENABLE_BONE_SLICE, 10s); if (!IsHeroic()) - events.RescheduleEvent(EVENT_SPELL_BONE_SPIKE_GRAVEYARD, urand(15000, 20000)); + events.RescheduleEvent(EVENT_SPELL_BONE_SPIKE_GRAVEYARD, 15s, 20s); break; case EVENT_ENRAGE: me->CastSpell(me, SPELL_BERSERK, true); @@ -267,7 +267,7 @@ public: if (type != POINT_MOTION_TYPE || id != 1337) return; - events.ScheduleEvent(EVENT_SPELL_COLDFLAME_BONE_STORM, 0); + events.ScheduleEvent(EVENT_SPELL_COLDFLAME_BONE_STORM, 0ms); } void JustDied(Unit* /*killer*/) override @@ -320,8 +320,8 @@ public: void IsSummonedBy(WorldObject* /*summoner*/) override { - events.ScheduleEvent(1, 450); - events.ScheduleEvent(2, 12000); + events.ScheduleEvent(1, 450ms); + events.ScheduleEvent(2, 12s); me->m_positionZ = 42.5f; } @@ -345,7 +345,7 @@ public: break; } me->NearTeleportTo(nx, ny, 42.5f, me->GetOrientation()); - events.RepeatEvent(450); + events.Repeat(450ms); } break; case 2: diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index a6c9358b0..125724510 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -307,11 +307,11 @@ public: bEnteredCombat = true; me->CastSpell(me, SPELL_OOZE_TANK_PROTECTION, true); events.Reset(); - events.ScheduleEvent(EVENT_BERSERK, 600000); - events.ScheduleEvent(EVENT_SLIME_PUDDLE, 10000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_UNSTABLE_EXPERIMENT, urand(30000, 35000), EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_BERSERK, 10min); + events.ScheduleEvent(EVENT_SLIME_PUDDLE, 10s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_UNSTABLE_EXPERIMENT, 30s, 35s, EVENT_GROUP_ABILITIES); if (IsHeroic()) - events.ScheduleEvent(EVENT_UNBOUND_PLAGUE, 20000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_UNBOUND_PLAGUE, 20s, EVENT_GROUP_ABILITIES); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_GAS_VARIABLE); instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_OOZE_VARIABLE); @@ -463,7 +463,7 @@ public: me->SetFacingTo(tablePos.GetOrientation()); me->GetMotionMaster()->Clear(false); me->GetMotionMaster()->MoveIdle(); - events.ScheduleEvent(EVENT_TABLE_DRINK_STUFF, IsHeroic() ? 25000 : 0); + events.ScheduleEvent(EVENT_TABLE_DRINK_STUFF, IsHeroic() ? 25s : 0ms); break; } } @@ -552,13 +552,13 @@ public: if (!targets.empty()) for (std::list::iterator itr = targets.begin(); itr != targets.end(); ++itr) me->CastSpell(*itr, SPELL_SLIME_PUDDLE_TRIGGER, true); - events.ScheduleEvent(EVENT_SLIME_PUDDLE, 35000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SLIME_PUDDLE, 35s, EVENT_GROUP_ABILITIES); } break; case EVENT_UNSTABLE_EXPERIMENT: Talk(EMOTE_UNSTABLE_EXPERIMENT); me->CastSpell(me, SPELL_UNSTABLE_EXPERIMENT, false); - events.ScheduleEvent(EVENT_UNSTABLE_EXPERIMENT, urand(35000, 40000), EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_UNSTABLE_EXPERIMENT, 35s, 40s, EVENT_GROUP_ABILITIES); break; case EVENT_GO_TO_TABLE: me->CastSpell(me, SPELL_TEAR_GAS_PERIODIC_TRIGGER, true); @@ -594,14 +594,14 @@ public: me->SetFacingToObject(face); me->SetStandState(UNIT_STAND_STATE_KNEEL); Talk(SAY_TRANSFORM_1); - events.ScheduleEvent(EVENT_RESUME_ATTACK, 5500); + events.ScheduleEvent(EVENT_RESUME_ATTACK, 5500ms); break; case 3: if (Creature* face = me->FindNearestCreature(NPC_TEAR_GAS_TARGET_STALKER, 50.0f)) me->SetFacingToObject(face); me->SetStandState(UNIT_STAND_STATE_KNEEL); Talk(SAY_TRANSFORM_2); - events.ScheduleEvent(EVENT_RESUME_ATTACK, 8500); + events.ScheduleEvent(EVENT_RESUME_ATTACK, 8500ms); break; default: break; @@ -625,10 +625,10 @@ public: { me->CastSpell(target, SPELL_UNBOUND_PLAGUE, false); me->CastSpell(target, SPELL_UNBOUND_PLAGUE_SEARCHER, false); - events.ScheduleEvent(EVENT_UNBOUND_PLAGUE, 90000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_UNBOUND_PLAGUE, 90s, EVENT_GROUP_ABILITIES); } else - events.ScheduleEvent(EVENT_UNBOUND_PLAGUE, 3500, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_UNBOUND_PLAGUE, 3500ms, EVENT_GROUP_ABILITIES); break; case EVENT_MALLEABLE_GOO: if (Is25ManRaid()) @@ -651,12 +651,12 @@ public: me->CastSpell(target, SPELL_MALLEABLE_GOO, true); } } - events.ScheduleEvent(EVENT_MALLEABLE_GOO, urand(25000, 30000), EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_MALLEABLE_GOO, 25s, 30s, EVENT_GROUP_ABILITIES); break; case EVENT_CHOKING_GAS_BOMB: Talk(EMOTE_CHOKING_GAS_BOMB); me->CastSpell(me, SPELL_CHOKING_GAS_BOMB, false); - events.ScheduleEvent(EVENT_CHOKING_GAS_BOMB, urand(35000, 40000), EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_CHOKING_GAS_BOMB, 35s, 40s, EVENT_GROUP_ABILITIES); break; default: break; @@ -681,7 +681,7 @@ public: if (!IsHeroic()) { me->CastSpell(me, SPELL_TEAR_GAS, false); - events.ScheduleEvent(EVENT_GO_TO_TABLE, 2500); + events.ScheduleEvent(EVENT_GO_TO_TABLE, 2500ms); } else { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index a011f02a6..96d603c4a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -158,12 +158,12 @@ public: // schedule events events.Reset(); - events.ScheduleEvent(EVENT_SLIME_SPRAY, 20000); - events.ScheduleEvent(EVENT_HASTEN_INFECTIONS, 90000); - events.ScheduleEvent(EVENT_MUTATED_INFECTION, 14000); - events.ScheduleEvent(EVENT_ROTFACE_OOZE_FLOOD, 8000); + events.ScheduleEvent(EVENT_SLIME_SPRAY, 20s); + events.ScheduleEvent(EVENT_HASTEN_INFECTIONS, 90s); + events.ScheduleEvent(EVENT_MUTATED_INFECTION, 14s); + events.ScheduleEvent(EVENT_ROTFACE_OOZE_FLOOD, 8s); if (IsHeroic()) - events.ScheduleEvent(EVENT_ROTFACE_VILE_GAS, urand(15000, 20000)); + events.ScheduleEvent(EVENT_ROTFACE_VILE_GAS, 15s, 20s); me->setActive(true); Talk(SAY_AGGRO); @@ -287,14 +287,14 @@ public: } } events.DelayEvents(1); - events.ScheduleEvent(EVENT_SLIME_SPRAY, 20000); - events.ScheduleEvent(EVENT_UNROOT, 0); + events.ScheduleEvent(EVENT_SLIME_SPRAY, 20s); + events.ScheduleEvent(EVENT_UNROOT, 0ms); break; case EVENT_HASTEN_INFECTIONS: if (infectionCooldown >= 8000) { infectionCooldown -= 2000; - events.ScheduleEvent(EVENT_HASTEN_INFECTIONS, 90000); + events.ScheduleEvent(EVENT_HASTEN_INFECTIONS, 90s); } break; case EVENT_MUTATED_INFECTION: @@ -309,7 +309,7 @@ public: if (++_oozeFloodStage == 4) _oozeFloodStage = 0; } - events.ScheduleEvent(EVENT_ROTFACE_OOZE_FLOOD, 25000); + events.ScheduleEvent(EVENT_ROTFACE_OOZE_FLOOD, 25s); break; case EVENT_ROTFACE_VILE_GAS: { @@ -324,7 +324,7 @@ public: if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE))) professor->CastSpell(target, SPELL_VILE_GAS_H, true); // triggered, to skip LoS check } - events.ScheduleEvent(EVENT_ROTFACE_VILE_GAS, urand(15000, 20000)); + events.ScheduleEvent(EVENT_ROTFACE_VILE_GAS, 15s, 20s); break; default: break; @@ -387,7 +387,7 @@ public: me->CastSpell(me, SPELL_LITTLE_OOZE_COMBINE, true); me->CastSpell(me, SPELL_WEAK_RADIATING_OOZE, true); events.Reset(); - events.ScheduleEvent(EVENT_STICKY_OOZE, 5000); + events.ScheduleEvent(EVENT_STICKY_OOZE, 5s); DoResetThreatList(); me->SetInCombatWithZone(); if (TempSummon* ts = me->ToTempSummon()) @@ -406,7 +406,7 @@ public: if (events.ExecuteEvent() == EVENT_STICKY_OOZE) { me->CastSpell(me->GetVictim(), SPELL_STICKY_OOZE, false); - events.ScheduleEvent(EVENT_STICKY_OOZE, 15000); + events.ScheduleEvent(EVENT_STICKY_OOZE, 15s); } DoMeleeAttackIfReady(); @@ -472,7 +472,7 @@ public: me->CastSpell(me, SPELL_UNSTABLE_OOZE, true); me->CastSpell(me, SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC, true); events.Reset(); - events.ScheduleEvent(EVENT_STICKY_OOZE, 5000); + events.ScheduleEvent(EVENT_STICKY_OOZE, 5s); DoResetThreatList(); me->SetInCombatWithZone(); if (Player* p = me->SelectNearestPlayer(100.0f)) @@ -488,7 +488,7 @@ public: { case EVENT_STICKY_OOZE: me->CastSpell(me->GetVictim(), SPELL_STICKY_OOZE, false); - events.ScheduleEvent(EVENT_STICKY_OOZE, 15000); + events.ScheduleEvent(EVENT_STICKY_OOZE, 15s); default: break; } @@ -894,9 +894,9 @@ public: void JustEngagedWith(Unit* /*target*/) override { me->setActive(true); - events.ScheduleEvent(EVENT_DECIMATE, urand(20000, 25000)); - events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(1500, 2500)); - events.ScheduleEvent(EVENT_SUMMON_ZOMBIES, urand(25000, 30000)); + events.ScheduleEvent(EVENT_DECIMATE, 20s, 25s); + events.ScheduleEvent(EVENT_MORTAL_WOUND, 1500ms, 2500ms); + events.ScheduleEvent(EVENT_SUMMON_ZOMBIES, 25s, 30s); } void JustSummoned(Creature* summon) override @@ -936,17 +936,17 @@ public: { case EVENT_DECIMATE: me->CastSpell(me->GetVictim(), SPELL_DECIMATE, false); - events.ScheduleEvent(EVENT_DECIMATE, urand(20000, 25000)); + events.ScheduleEvent(EVENT_DECIMATE, 20s, 25s); break; case EVENT_MORTAL_WOUND: me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false); - events.ScheduleEvent(EVENT_MORTAL_WOUND, urand(1500, 2500)); + events.ScheduleEvent(EVENT_MORTAL_WOUND, 1500ms, 2500ms); break; case EVENT_SUMMON_ZOMBIES: Talk(EMOTE_PRECIOUS_ZOMBIES); for (uint32 i = 0; i < 11; ++i) me->CastSpell(me, SPELL_AWAKEN_PLAGUED_ZOMBIES, true); - events.ScheduleEvent(EVENT_SUMMON_ZOMBIES, urand(20000, 25000)); + events.ScheduleEvent(EVENT_SUMMON_ZOMBIES, 20s, 25s); break; default: break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 2fccedca6..c8374e34f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -337,13 +337,13 @@ public: summons.DespawnAll(); events.Reset(); - events.ScheduleEvent(EVENT_BERSERK, 600000); - events.ScheduleEvent(EVENT_AIR_PHASE, 50000); - events.ScheduleEvent(EVENT_CLEAVE, 10000, EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_TAIL_SMASH, 20000, EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_FROST_BREATH, urand(8000, 12000), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_UNCHAINED_MAGIC, urand(9000, 14000), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_ICY_GRIP, 33500, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_BERSERK, 10min); + events.ScheduleEvent(EVENT_AIR_PHASE, 50s); + events.ScheduleEvent(EVENT_CLEAVE, 10s, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_TAIL_SMASH, 20s, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_FROST_BREATH, 8s, 12s, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_UNCHAINED_MAGIC, 9s, 14s, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_ICY_GRIP, 33s + 500ms, EVENT_GROUP_LAND_PHASE); me->setActive(true); me->SetInCombatWithZone(); @@ -440,20 +440,20 @@ public: me->SetInCombatWithZone(); break; case POINT_TAKEOFF: - events.ScheduleEvent(EVENT_AIR_MOVEMENT, 0); + events.ScheduleEvent(EVENT_AIR_MOVEMENT, 0ms); break; case POINT_AIR_PHASE: me->CastCustomSpell(SPELL_ICE_TOMB_TARGET, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5, 2, 6), nullptr); me->SetFacingTo(float(M_PI)); - events.ScheduleEvent(EVENT_AIR_MOVEMENT_FAR, 0); // won't be processed during cast time anyway, so 0 - events.ScheduleEvent(EVENT_FROST_BOMB, 7000); + events.ScheduleEvent(EVENT_AIR_MOVEMENT_FAR, 0ms); // won't be processed during cast time anyway, so 0 + events.ScheduleEvent(EVENT_FROST_BOMB, 7s); _bombCount = 0; break; case POINT_AIR_PHASE_FAR: me->SetFacingTo(float(M_PI)); break; case POINT_LAND: - events.ScheduleEvent(EVENT_LAND_GROUND, 0); + events.ScheduleEvent(EVENT_LAND_GROUND, 0ms); break; case POINT_LAND_GROUND: { @@ -484,7 +484,7 @@ public: { _isThirdPhase = true; events.CancelEvent(EVENT_AIR_PHASE); - events.ScheduleEvent(EVENT_THIRD_PHASE_CHECK, 1000); + events.ScheduleEvent(EVENT_THIRD_PHASE_CHECK, 1s); } } else if (!_isBelow20Pct) @@ -540,7 +540,7 @@ public: break; case EVENT_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - events.ScheduleEvent(EVENT_CLEAVE, urand(10000, 15000), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_CLEAVE, 10s, 15s, EVENT_GROUP_LAND_PHASE); break; case EVENT_TAIL_SMASH: me->DisableRotate(true); @@ -548,8 +548,8 @@ public: me->SendMovementFlagUpdate(); me->CastSpell(me->GetVictim(), SPELL_TAIL_SMASH, false); events.DelayEventsToMax(1, 0); - events.ScheduleEvent(EVENT_UNROOT, 0); - events.ScheduleEvent(EVENT_TAIL_SMASH, urand(22000, 27000), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_UNROOT, 0ms); + events.ScheduleEvent(EVENT_TAIL_SMASH, 22s, 27s, EVENT_GROUP_LAND_PHASE); break; case EVENT_FROST_BREATH: me->DisableRotate(true); @@ -557,8 +557,8 @@ public: me->SendMovementFlagUpdate(); me->CastSpell(me->GetVictim(), _isThirdPhase ? SPELL_FROST_BREATH_P2 : SPELL_FROST_BREATH_P1, false); events.DelayEventsToMax(1, 0); - events.ScheduleEvent(EVENT_UNROOT, 0); - events.ScheduleEvent(EVENT_FROST_BREATH, urand(20000, 25000), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_UNROOT, 0ms); + events.ScheduleEvent(EVENT_FROST_BREATH, 20s, 25s, EVENT_GROUP_LAND_PHASE); break; case EVENT_UNROOT: me->DisableRotate(false); @@ -567,22 +567,22 @@ public: case EVENT_UNCHAINED_MAGIC: Talk(SAY_UNCHAINED_MAGIC); me->CastSpell((Unit*)nullptr, SPELL_UNCHAINED_MAGIC, false); - events.ScheduleEvent(EVENT_UNCHAINED_MAGIC, urand(30000, 35000), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_UNCHAINED_MAGIC, 30s, 35s, EVENT_GROUP_LAND_PHASE); break; case EVENT_ICY_GRIP: me->CastSpell((Unit*)nullptr, SPELL_ICY_GRIP, false); events.DelayEventsToMax(1001, 0); - events.ScheduleEvent(EVENT_BLISTERING_COLD, 1000, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_BLISTERING_COLD, 1s, EVENT_GROUP_LAND_PHASE); if (uint32 evTime = events.GetNextEventTime(EVENT_ICE_TOMB)) if (events.GetTimer() > evTime || evTime - events.GetTimer() < 7000) - events.RescheduleEvent(EVENT_ICE_TOMB, 7000); + events.RescheduleEvent(EVENT_ICE_TOMB, 7s); break; case EVENT_BLISTERING_COLD: Talk(EMOTE_WARN_BLISTERING_COLD); me->CastSpell(me, SPELL_BLISTERING_COLD, false); - events.ScheduleEvent(EVENT_BLISTERING_COLD_YELL, 5000, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_BLISTERING_COLD_YELL, 5s, EVENT_GROUP_LAND_PHASE); if (_isThirdPhase) - events.RescheduleEvent(EVENT_ICY_GRIP, urand(65000, 70000)); + events.RescheduleEvent(EVENT_ICY_GRIP, 65s, 70s); break; case EVENT_BLISTERING_COLD_YELL: Talk(SAY_BLISTERING_COLD); @@ -610,7 +610,7 @@ public: me->SetDisableGravity(true); me->GetMotionMaster()->MoveTakeoff(POINT_TAKEOFF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 20.0f, 10.0f); events.CancelEventGroup(EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_AIR_PHASE, 110000); + events.ScheduleEvent(EVENT_AIR_PHASE, 110s); break; case EVENT_AIR_MOVEMENT: me->GetMotionMaster()->MovePoint(POINT_AIR_PHASE, SindragosaAirPos); @@ -644,32 +644,32 @@ public: me->CastSpell(destX, destY, destZ, SPELL_FROST_BOMB_TRIGGER, false); if (_bombCount >= 4) - events.ScheduleEvent(EVENT_LAND, 5500); + events.ScheduleEvent(EVENT_LAND, 5500ms); else - events.ScheduleEvent(EVENT_FROST_BOMB, 6000); + events.ScheduleEvent(EVENT_FROST_BOMB, 6s); break; } case EVENT_LAND: me->GetMotionMaster()->MovePoint(POINT_LAND, SindragosaFlyInPos); break; case EVENT_LAND_GROUND: - events.ScheduleEvent(EVENT_CLEAVE, urand(13000, 15000), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_TAIL_SMASH, urand(19000, 23000), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_FROST_BREATH, urand(7000, 10000), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_UNCHAINED_MAGIC, urand(12000, 17000), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_ICY_GRIP, urand(35000, 40000), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_CLEAVE, 13s, 15s, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_TAIL_SMASH, 19s, 23s, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_FROST_BREATH, 7s, 10s, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_UNCHAINED_MAGIC, 12s, 17s, EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_ICY_GRIP, 35s, 40s, EVENT_GROUP_LAND_PHASE); me->GetMotionMaster()->MoveLand(POINT_LAND_GROUND, SindragosaLandPos, 10.0f); break; case EVENT_THIRD_PHASE_CHECK: if (!_isInAirPhase) { Talk(SAY_PHASE_2); - events.ScheduleEvent(EVENT_ICE_TOMB, urand(7000, 10000)); - events.RescheduleEvent(EVENT_ICY_GRIP, urand(35000, 40000), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_ICE_TOMB, 7s, 10s); + events.RescheduleEvent(EVENT_ICY_GRIP, 35s, 40s, EVENT_GROUP_LAND_PHASE); me->CastSpell(me, SPELL_MYSTIC_BUFFET, true); } else - events.ScheduleEvent(EVENT_THIRD_PHASE_CHECK, 5000); + events.ScheduleEvent(EVENT_THIRD_PHASE_CHECK, 5s); break; case EVENT_ICE_TOMB: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, LastPhaseIceTombTargetSelector(me))) @@ -679,9 +679,9 @@ public: me->CastSpell(target, SPELL_FROST_BEACON, true); if (uint32 evTime = events.GetNextEventTime(EVENT_ICY_GRIP)) if (events.GetTimer() > evTime || evTime - events.GetTimer() < 8000) - events.RescheduleEvent(EVENT_ICY_GRIP, 8000, EVENT_GROUP_LAND_PHASE); + events.RescheduleEvent(EVENT_ICY_GRIP, 8s, EVENT_GROUP_LAND_PHASE); } - events.ScheduleEvent(EVENT_ICE_TOMB, urand(18000, 22000)); + events.ScheduleEvent(EVENT_ICE_TOMB, 18s, 22s); break; default: break; @@ -1388,9 +1388,9 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_BELLOWING_ROAR, urand(20000, 25000)); - _events.ScheduleEvent(EVENT_CLEAVE_SPINESTALKER, urand(10000, 15000)); - _events.ScheduleEvent(EVENT_TAIL_SWEEP, urand(8000, 12000)); + _events.ScheduleEvent(EVENT_BELLOWING_ROAR, 20s, 25s); + _events.ScheduleEvent(EVENT_CLEAVE_SPINESTALKER, 10s, 15s); + _events.ScheduleEvent(EVENT_TAIL_SWEEP, 8s, 12s); me->SetReactState(REACT_DEFENSIVE); if (!_summoned) @@ -1467,15 +1467,15 @@ public: { case EVENT_BELLOWING_ROAR: me->CastSpell(me, SPELL_BELLOWING_ROAR, false); - _events.ScheduleEvent(EVENT_BELLOWING_ROAR, urand(25000, 30000)); + _events.ScheduleEvent(EVENT_BELLOWING_ROAR, 25s, 30s); break; case EVENT_CLEAVE_SPINESTALKER: me->CastSpell(me->GetVictim(), SPELL_CLEAVE_SPINESTALKER, false); - _events.ScheduleEvent(EVENT_CLEAVE_SPINESTALKER, urand(10000, 15000)); + _events.ScheduleEvent(EVENT_CLEAVE_SPINESTALKER, 10s, 15s); break; case EVENT_TAIL_SWEEP: me->CastSpell(me->GetVictim(), SPELL_TAIL_SWEEP, false); - _events.ScheduleEvent(EVENT_TAIL_SWEEP, urand(22000, 25000)); + _events.ScheduleEvent(EVENT_TAIL_SWEEP, 22s, 25s); break; default: break; @@ -1519,8 +1519,8 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, urand(12000, 15000)); - _events.ScheduleEvent(EVENT_ICY_BLAST, urand(30000, 35000)); + _events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, 12s, 15s); + _events.ScheduleEvent(EVENT_ICY_BLAST, 30s, 35s); me->SetReactState(REACT_DEFENSIVE); _icyBlastCounter = 0; @@ -1615,10 +1615,10 @@ public: if (!me->IsFlying()) { me->CastSpell(me->GetVictim(), SPELL_FROST_BREATH, false); - _events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, urand(20000, 25000)); + _events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, 20s, 25s); } else - _events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, 5000); + _events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, 5s); break; case EVENT_ICY_BLAST: { @@ -1649,7 +1649,7 @@ public: me->SetFacingToObject(target); me->CastSpell(target, SPELL_ICY_BLAST, false); } - _events.ScheduleEvent(EVENT_ICY_BLAST_CAST, 3000); + _events.ScheduleEvent(EVENT_ICY_BLAST_CAST, 3s); } else { @@ -1778,11 +1778,11 @@ public: _events.Reset(); if (me->GetEntry() == NPC_FROSTWARDEN_HANDLER) { - _events.ScheduleEvent(EVENT_FROSTWARDEN_ORDER_WHELP, 3000); - _events.ScheduleEvent(EVENT_CONCUSSIVE_SHOCK, urand(8000, 10000)); + _events.ScheduleEvent(EVENT_FROSTWARDEN_ORDER_WHELP, 3s); + _events.ScheduleEvent(EVENT_CONCUSSIVE_SHOCK, 8s, 10s); } else - _events.ScheduleEvent(EVENT_WHELP_FROST_BLAST, urand(3000, 6000)); + _events.ScheduleEvent(EVENT_WHELP_FROST_BLAST, 3s, 6s); } void JustEngagedWith(Unit* who) override @@ -1842,15 +1842,15 @@ public: { case EVENT_FROSTWARDEN_ORDER_WHELP: me->CastSpell(me, SPELL_ORDER_WHELP, false); - _events.ScheduleEvent(EVENT_FROSTWARDEN_ORDER_WHELP, 3000); + _events.ScheduleEvent(EVENT_FROSTWARDEN_ORDER_WHELP, 3s); break; case EVENT_CONCUSSIVE_SHOCK: me->CastSpell(me, SPELL_CONCUSSIVE_SHOCK, false); - _events.ScheduleEvent(EVENT_CONCUSSIVE_SHOCK, urand(10000, 13000)); + _events.ScheduleEvent(EVENT_CONCUSSIVE_SHOCK, 10s, 13s); break; case EVENT_WHELP_FROST_BLAST: me->CastSpell(me->GetVictim(), 71361, false); - _events.ScheduleEvent(EVENT_WHELP_FROST_BLAST, urand(5000, 8000)); + _events.ScheduleEvent(EVENT_WHELP_FROST_BLAST, 5s, 8s); default: break; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 6d41f9210..f73a557c6 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -684,13 +684,13 @@ public: me->SetInCombatWithZone(); me->RemoveAurasDueToSpell(SPELL_EMOTE_SIT_NO_SHEATH); // just to be sure - events.ScheduleEvent(EVENT_BERSERK, 900000, EVENT_GROUP_BERSERK); - events.ScheduleEvent(EVENT_SUMMON_SHAMBLING_HORROR, 15000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SUMMON_DRUDGE_GHOUL, 10000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_INFEST, 5000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_NECROTIC_PLAGUE, urand(30000, 31000), EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_BERSERK, 15min, EVENT_GROUP_BERSERK); + events.ScheduleEvent(EVENT_SUMMON_SHAMBLING_HORROR, 15s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_DRUDGE_GHOUL, 10s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_INFEST, 5s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_NECROTIC_PLAGUE, 30s, 31s, EVENT_GROUP_ABILITIES); if (IsHeroic()) - events.ScheduleEvent(EVENT_SHADOW_TRAP, 15500, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SHADOW_TRAP, 15s + 500ms, EVENT_GROUP_ABILITIES); } void JustReachedHome() override @@ -737,7 +737,7 @@ public: me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_FINE, 0.5f); break; case ACTION_START_ATTACK: - events.ScheduleEvent(EVENT_START_ATTACK, 5250); + events.ScheduleEvent(EVENT_START_ATTACK, 5250ms); break; case ACTION_BREAK_FROSTMOURNE: me->CastSpell((Unit*)nullptr, SPELL_SUMMON_BROKEN_FROSTMOURNE, true); @@ -749,7 +749,7 @@ public: case ACTION_TELEPORT_BACK: { if (_phase == PHASE_FROSTMOURNE) - events.RescheduleEvent(EVENT_START_ATTACK, 1000); + events.RescheduleEvent(EVENT_START_ATTACK, 1s); EntryCheckPredicate pred(NPC_STRANGULATE_VEHICLE); summons.DoAction(ACTION_TELEPORT_BACK, pred); if (!IsHeroic() && _phase != PHASE_OUTRO && me->IsInCombat() && _lastTalkTimeBuff + 5 <= GameTime::GetGameTime().count()) @@ -935,10 +935,10 @@ public: me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); me->CastSpell(me, SPELL_REMORSELESS_WINTER_1, false); //events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15mins on movies - events.ScheduleEvent(EVENT_QUAKE, 62500); - events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 3500, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 4000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_QUAKE, 62s + 500ms); + events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 3500ms, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 4s, EVENT_GROUP_ABILITIES); break; case POINT_CENTER_2: me->SetFacingTo(0.0f); @@ -947,10 +947,10 @@ public: me->CastSpell(me, SPELL_REMORSELESS_WINTER_2, false); summons.DespawnEntry(NPC_VALKYR_SHADOWGUARD); //events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15 mins on movies - events.ScheduleEvent(EVENT_QUAKE_2, 62500); - events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 3500, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 4000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_QUAKE_2, 62s + 500ms); + events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 3500ms, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, 4s, EVENT_GROUP_ABILITIES); break; default: break; @@ -999,8 +999,8 @@ public: { _bFrostmournePhase = false; _phase = PHASE_THREE; - events.RescheduleEvent(EVENT_DEFILE, 0, EVENT_GROUP_ABILITIES); - events.RescheduleEvent(EVENT_SOUL_REAPER, urand(7000, 12000), EVENT_GROUP_ABILITIES); + events.RescheduleEvent(EVENT_DEFILE, 0ms, EVENT_GROUP_ABILITIES); + events.RescheduleEvent(EVENT_SOUL_REAPER, 7s, 12s, EVENT_GROUP_ABILITIES); for (SummonList::iterator i = summons.begin(); i != summons.end(); ++i) if (Creature* summon = ObjectAccessor::GetCreature(*me, *i)) @@ -1011,10 +1011,10 @@ public: case EVENT_QUAKE: _phase = PHASE_TWO; events.CancelEventGroup(EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_INFEST, 14000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SUMMON_VALKYR, 20000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SOUL_REAPER, 40000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_DEFILE, 38000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_INFEST, 14s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_VALKYR, 20s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SOUL_REAPER, 40s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_DEFILE, 38s, EVENT_GROUP_ABILITIES); me->InterruptNonMeleeSpells(false); me->ClearUnitState(UNIT_STATE_CASTING); @@ -1026,10 +1026,10 @@ public: case EVENT_QUAKE_2: _phase = PHASE_THREE; events.CancelEventGroup(EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_SOUL_REAPER, 40000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_DEFILE, 38000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_VILE_SPIRITS, 20000, EVENT_GROUP_VILE_SPIRITS); - events.ScheduleEvent(IsHeroic() ? EVENT_HARVEST_SOULS : EVENT_HARVEST_SOUL, 14000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SOUL_REAPER, 40s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_DEFILE, 38s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_VILE_SPIRITS, 20s, EVENT_GROUP_VILE_SPIRITS); + events.ScheduleEvent(IsHeroic() ? EVENT_HARVEST_SOULS : EVENT_HARVEST_SOUL, 14s, EVENT_GROUP_ABILITIES); me->InterruptNonMeleeSpells(false); me->ClearUnitState(UNIT_STATE_CASTING); @@ -1043,30 +1043,30 @@ public: case EVENT_SUMMON_SHAMBLING_HORROR: me->CastSpell(me, SPELL_SUMMON_SHAMBLING_HORROR, false); me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); - events.ScheduleEvent(EVENT_SUMMON_SHAMBLING_HORROR, 60000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_SHAMBLING_HORROR, 60s, EVENT_GROUP_ABILITIES); break; case EVENT_SUMMON_DRUDGE_GHOUL: me->CastSpell(me, SPELL_SUMMON_DRUDGE_GHOULS, false); - events.ScheduleEvent(EVENT_SUMMON_DRUDGE_GHOUL, 30000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_DRUDGE_GHOUL, 30s, EVENT_GROUP_ABILITIES); break; case EVENT_INFEST: me->CastSpell(me, SPELL_INFEST, false); - events.ScheduleEvent(EVENT_INFEST, 22500, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_INFEST, 22s + 500ms, EVENT_GROUP_ABILITIES); break; case EVENT_NECROTIC_PLAGUE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NecroticPlagueTargetCheck(me, NECROTIC_PLAGUE_LK, NECROTIC_PLAGUE_PLR))) { Talk(EMOTE_NECROTIC_PLAGUE_WARNING, target); me->CastSpell(target, SPELL_NECROTIC_PLAGUE, false); - events.ScheduleEvent(EVENT_NECROTIC_PLAGUE, urand(30000, 31000), EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_NECROTIC_PLAGUE, 30s, 31s, EVENT_GROUP_ABILITIES); } else - events.ScheduleEvent(EVENT_NECROTIC_PLAGUE, 5000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_NECROTIC_PLAGUE, 5s, EVENT_GROUP_ABILITIES); break; case EVENT_SHADOW_TRAP: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, ShadowTrapLKTargetSelector(me, true, true, 100.0f))) me->CastSpell(target, SPELL_SHADOW_TRAP, false); - events.ScheduleEvent(EVENT_SHADOW_TRAP, 15500, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SHADOW_TRAP, 15s + 500ms, EVENT_GROUP_ABILITIES); break; case EVENT_PAIN_AND_SUFFERING: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true)) @@ -1079,12 +1079,12 @@ public: break; case EVENT_SUMMON_ICE_SPHERE: me->CastSpell((Unit*)nullptr, SPELL_SUMMON_ICE_SPHERE, false); - events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 7500, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 7500ms, EVENT_GROUP_ABILITIES); break; case EVENT_SUMMON_RAGING_SPIRIT: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) me->CastSpell(target, SPELL_RAGING_SPIRIT, false); - events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, (!HealthAbovePct(40) ? 15000 : 20000), EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_RAGING_SPIRIT, (!HealthAbovePct(40) ? 15s : 20s), EVENT_GROUP_ABILITIES); break; case EVENT_DEFILE: { @@ -1104,7 +1104,7 @@ public: // if valkyr is coming between 1.5 and 3 seconds after defile then we've to // delay valkyr just a bit - events.RescheduleEvent(EVENT_SUMMON_VALKYR, 5000, EVENT_GROUP_ABILITIES); + events.RescheduleEvent(EVENT_SUMMON_VALKYR, 5s, EVENT_GROUP_ABILITIES); } if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, DefileTargetSelector(me))) @@ -1113,12 +1113,12 @@ public: me->CastSpell(target, SPELL_DEFILE, false); // defile has a fixed CD (from dbm) that can be variable only // if no target has been found at the moment (schedule after 1 second) - events.ScheduleEvent(EVENT_DEFILE, 32500, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_DEFILE, 32s + 500ms, EVENT_GROUP_ABILITIES); } else { // be sure it happen trying each seconds if no target - events.ScheduleEvent(EVENT_DEFILE, 1000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_DEFILE, 1s, EVENT_GROUP_ABILITIES); } } break; @@ -1126,17 +1126,17 @@ public: if (me->IsWithinMeleeRange(me->GetVictim())) { me->CastSpell(me->GetVictim(), SPELL_SOUL_REAPER, false); - events.ScheduleEvent(EVENT_SOUL_REAPER, 30500, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SOUL_REAPER, 30s + 500ms, EVENT_GROUP_ABILITIES); } else - events.ScheduleEvent(EVENT_SOUL_REAPER, 1000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SOUL_REAPER, 1s, EVENT_GROUP_ABILITIES); break; case EVENT_SUMMON_VALKYR: { me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); Talk(SAY_LK_SUMMON_VALKYR); me->CastSpell((Unit*)nullptr, SUMMON_VALKYR, false); - events.ScheduleEvent(EVENT_SUMMON_VALKYR, 45000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_SUMMON_VALKYR, 45s, EVENT_GROUP_ABILITIES); // schedule a defile (or reschedule it) if next defile event // doesn't exist ( now > next defile ) or defile is coming too soon @@ -1151,17 +1151,17 @@ public: case EVENT_VILE_SPIRITS: me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); me->CastSpell((Unit*)nullptr, SPELL_VILE_SPIRITS, false); - events.ScheduleEvent(EVENT_VILE_SPIRITS, 30000, EVENT_GROUP_VILE_SPIRITS); + events.ScheduleEvent(EVENT_VILE_SPIRITS, 30s, EVENT_GROUP_VILE_SPIRITS); break; case EVENT_HARVEST_SOUL: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NonTankLKTargetSelector(me, true, true, 55.0f))) { Talk(SAY_LK_HARVEST_SOUL); me->CastSpell(target, SPELL_HARVEST_SOUL, false); - events.ScheduleEvent(EVENT_HARVEST_SOUL, 75000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_HARVEST_SOUL, 75s, EVENT_GROUP_ABILITIES); } else - events.ScheduleEvent(EVENT_HARVEST_SOUL, 10000, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_HARVEST_SOUL, 10s, EVENT_GROUP_ABILITIES); break; case EVENT_HARVEST_SOULS: Talk(SAY_LK_HARVEST_SOUL); @@ -1169,12 +1169,12 @@ public: _phase = PHASE_FROSTMOURNE; me->SetReactState(REACT_PASSIVE); me->AttackStop(); - events.ScheduleEvent(EVENT_START_ATTACK, 55000); + events.ScheduleEvent(EVENT_START_ATTACK, 55s); events.DelayEvents(52500, EVENT_GROUP_VILE_SPIRITS); events.CancelEvent(EVENT_DEFILE); events.CancelEvent(EVENT_SOUL_REAPER); - events.ScheduleEvent(EVENT_FROSTMOURNE_HEROIC, 6000, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_HARVEST_SOULS, urand(100000, 110000), EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_FROSTMOURNE_HEROIC, 6s, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_HARVEST_SOULS, 100s, 110s, EVENT_GROUP_ABILITIES); for (SummonList::iterator i = summons.begin(); i != summons.end(); ++i) if (Creature* summon = ObjectAccessor::GetCreature(*me, *i)) @@ -1307,11 +1307,11 @@ public: theLichKing->RemoveAurasDueToSpell(SPELL_EMOTE_SIT_NO_SHEATH); theLichKing->AI()->Talk(SAY_LK_INTRO_1); me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_FROZEN_THRONE); - _events.ScheduleEvent(EVENT_INTRO_LK_MOVE, 3000); + _events.ScheduleEvent(EVENT_INTRO_LK_MOVE, 3s); } break; case POINT_TIRION_OUTRO: - _events.ScheduleEvent(EVENT_OUTRO_FORDRING_JUMP, 1); + _events.ScheduleEvent(EVENT_OUTRO_FORDRING_JUMP, 1ms); break; } } @@ -1321,18 +1321,18 @@ public: switch (action) { case ACTION_OUTRO: - _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_1, 2600); - _events.ScheduleEvent(EVENT_OUTRO_LK_EMOTE_TALK, 6600); - _events.ScheduleEvent(EVENT_OUTRO_LK_EMOTE_TALK, 17600); - _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_2, 30000); - _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_3, 39000); - _events.ScheduleEvent(EVENT_OUTRO_LK_EMOTE_CAST_SHOUT, 50000); - _events.ScheduleEvent(EVENT_OUTRO_LK_EMOTE_TALK, 54000); - _events.ScheduleEvent(EVENT_OUTRO_LK_MOVE_CENTER, 65000); + _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_1, 2600ms); + _events.ScheduleEvent(EVENT_OUTRO_LK_EMOTE_TALK, 6600ms); + _events.ScheduleEvent(EVENT_OUTRO_LK_EMOTE_TALK, 17s + 600ms); + _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_2, 30s); + _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_3, 39s); + _events.ScheduleEvent(EVENT_OUTRO_LK_EMOTE_CAST_SHOUT, 50s); + _events.ScheduleEvent(EVENT_OUTRO_LK_EMOTE_TALK, 54s); + _events.ScheduleEvent(EVENT_OUTRO_LK_MOVE_CENTER, 65s); break; case ACTION_BREAK_FROSTMOURNE: - _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_6, 2500); - _events.ScheduleEvent(EVENT_OUTRO_SOUL_BARRAGE, 6500); + _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_6, 2500ms); + _events.ScheduleEvent(EVENT_OUTRO_SOUL_BARRAGE, 6500ms); break; } } @@ -1399,7 +1399,7 @@ public: path.push_back(G3D::Vector3(LichKingIntro[i].GetPositionX(), LichKingIntro[i].GetPositionY(), LichKingIntro[i].GetPositionZ())); theLichKing->SetWalk(true); theLichKing->GetMotionMaster()->MoveSplinePath(&path); - _events.ScheduleEvent(EVENT_INTRO_FORDRING_TALK_1, 11000); + _events.ScheduleEvent(EVENT_INTRO_FORDRING_TALK_1, 11s); } break; case EVENT_INTRO_LK_TALK_1: @@ -1407,10 +1407,10 @@ public: { theLichKing->AI()->Talk(SAY_LK_INTRO_2); theLichKing->HandleEmoteCommand(EMOTE_ONESHOT_TALK_NO_SHEATHE); - _events.ScheduleEvent(EVENT_INTRO_LK_EMOTE_CAST_SHOUT, 7000); - _events.ScheduleEvent(EVENT_INTRO_LK_EMOTE_1, 13000); - _events.ScheduleEvent(EVENT_INTRO_LK_EMOTE_CAST_SHOUT, 18000); - _events.ScheduleEvent(EVENT_INTRO_LK_CAST_FREEZE, 31000); + _events.ScheduleEvent(EVENT_INTRO_LK_EMOTE_CAST_SHOUT, 7s); + _events.ScheduleEvent(EVENT_INTRO_LK_EMOTE_1, 13s); + _events.ScheduleEvent(EVENT_INTRO_LK_EMOTE_CAST_SHOUT, 18s); + _events.ScheduleEvent(EVENT_INTRO_LK_CAST_FREEZE, 31s); } break; case EVENT_INTRO_LK_EMOTE_CAST_SHOUT: @@ -1426,21 +1426,21 @@ public: { theLichKing->AI()->Talk(SAY_LK_INTRO_3); theLichKing->CastSpell((Unit*)nullptr, SPELL_ICE_LOCK, false); - _events.ScheduleEvent(EVENT_INTRO_FINISH, 1000); + _events.ScheduleEvent(EVENT_INTRO_FINISH, 1s); } break; case EVENT_INTRO_FORDRING_TALK_1: { Talk(SAY_TIRION_INTRO_1); - _events.ScheduleEvent(EVENT_INTRO_LK_TALK_1, 9000); - _events.ScheduleEvent(EVENT_INTRO_FORDRING_TALK_2, 34000); + _events.ScheduleEvent(EVENT_INTRO_LK_TALK_1, 9s); + _events.ScheduleEvent(EVENT_INTRO_FORDRING_TALK_2, 34s); } break; case EVENT_INTRO_FORDRING_TALK_2: { Talk(SAY_TIRION_INTRO_2); - _events.ScheduleEvent(EVENT_INTRO_FORDRING_EMOTE_1, 2000); - _events.ScheduleEvent(EVENT_INTRO_FORDRING_CHARGE, 5000); + _events.ScheduleEvent(EVENT_INTRO_FORDRING_EMOTE_1, 2s); + _events.ScheduleEvent(EVENT_INTRO_FORDRING_CHARGE, 5s); } break; case EVENT_INTRO_FORDRING_EMOTE_1: @@ -1522,10 +1522,10 @@ public: if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING))) { theLichKing->AI()->Talk(SAY_LK_OUTRO_5); - _events.ScheduleEvent(EVENT_OUTRO_FORDRING_TALK_1, 7000); - _events.ScheduleEvent(EVENT_OUTRO_FORDRING_BLESS, 18000); - _events.ScheduleEvent(EVENT_OUTRO_FORDRING_REMOVE_ICE, 23000); - _events.ScheduleEvent(EVENT_OUTRO_FORDRING_MOVE_1, 25000); + _events.ScheduleEvent(EVENT_OUTRO_FORDRING_TALK_1, 7s); + _events.ScheduleEvent(EVENT_OUTRO_FORDRING_BLESS, 18s); + _events.ScheduleEvent(EVENT_OUTRO_FORDRING_REMOVE_ICE, 23s); + _events.ScheduleEvent(EVENT_OUTRO_FORDRING_MOVE_1, 25s); } break; case EVENT_OUTRO_LK_TALK_6: @@ -1538,8 +1538,8 @@ public: me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SOULSTORM, 10s); me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_BLACKSNOW, 0.5f); - _events.ScheduleEvent(EVENT_OUTRO_AFTER_SUMMON_BROKEN_FROSTMOURNE, 1000); - _events.ScheduleEvent(EVENT_OUTRO_KNOCK_BACK, 3000); + _events.ScheduleEvent(EVENT_OUTRO_AFTER_SUMMON_BROKEN_FROSTMOURNE, 1s); + _events.ScheduleEvent(EVENT_OUTRO_KNOCK_BACK, 3s); break; } break; @@ -1559,12 +1559,12 @@ public: theLichKing->SetDisableGravity(true); theLichKing->GetMotionMaster()->MovePoint(0, OutroFlying); - _events.ScheduleEvent(EVENT_OUTRO_AFTER_SOUL_BARRAGE, 3000); + _events.ScheduleEvent(EVENT_OUTRO_AFTER_SOUL_BARRAGE, 3s); } break; case EVENT_OUTRO_AFTER_SOUL_BARRAGE: Talk(SAY_TIRION_OUTRO_2); - _events.ScheduleEvent(EVENT_OUTRO_SUMMON_TERENAS, 6000); + _events.ScheduleEvent(EVENT_OUTRO_SUMMON_TERENAS, 6s); break; case EVENT_OUTRO_SUMMON_TERENAS: if (Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 50.0f)) @@ -1573,8 +1573,8 @@ public: if (Creature* terenas = me->FindNearestCreature(NPC_TERENAS_MENETHIL_OUTRO, 50.0f)) terenas->SetFacingToObject(frostmourne); } - _events.ScheduleEvent(EVENT_OUTRO_TERENAS_TALK_1, 2000); - _events.ScheduleEvent(EVENT_OUTRO_TERENAS_TALK_2, 14000); + _events.ScheduleEvent(EVENT_OUTRO_TERENAS_TALK_1, 2s); + _events.ScheduleEvent(EVENT_OUTRO_TERENAS_TALK_2, 14s); break; case EVENT_OUTRO_TERENAS_TALK_1: if (Creature* terenas = me->FindNearestCreature(NPC_TERENAS_MENETHIL_OUTRO, 50.0f)) @@ -1594,8 +1594,8 @@ public: me->Attack(lichKing, true); me->GetMotionMaster()->MovePoint(0, 512.16f, -2120.25f, 840.86f); } - _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_7, 7000); - _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_8, 17000); + _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_7, 7s); + _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_8, 17s); } break; case EVENT_OUTRO_LK_TALK_7: @@ -1819,8 +1819,8 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_SHOCKWAVE, urand(20000, 25000)); - _events.ScheduleEvent(EVENT_ENRAGE, urand(11000, 14000)); + _events.ScheduleEvent(EVENT_SHOCKWAVE, 20s, 25s); + _events.ScheduleEvent(EVENT_ENRAGE, 11s, 14s); } void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override @@ -1846,11 +1846,11 @@ public: { case EVENT_SHOCKWAVE: me->CastSpell(me->GetVictim(), SPELL_SHOCKWAVE, false); - _events.ScheduleEvent(EVENT_SHOCKWAVE, urand(20000, 25000)); + _events.ScheduleEvent(EVENT_SHOCKWAVE, 20s, 25s); break; case EVENT_ENRAGE: me->CastSpell(me, SPELL_ENRAGE, false); - _events.ScheduleEvent(EVENT_ENRAGE, urand(20000, 25000)); + _events.ScheduleEvent(EVENT_ENRAGE, 20s, 25s); break; default: break; @@ -2318,8 +2318,8 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_RAGING_SPIRIT_UNROOT, 3000); - _events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000)); + _events.ScheduleEvent(EVENT_RAGING_SPIRIT_UNROOT, 3s); + _events.ScheduleEvent(EVENT_SOUL_SHRIEK, 12s, 15s); bool valid = false; me->CastSpell(me, SPELL_RAGING_SPIRIT_VISUAL, true); @@ -2401,7 +2401,7 @@ public: case EVENT_SOUL_SHRIEK: if (!me->HasReactState(REACT_PASSIVE)) me->CastSpell(me->GetVictim(), SPELL_SOUL_SHRIEK, false); - _events.ScheduleEvent(EVENT_SOUL_SHRIEK, urand(12000, 15000)); + _events.ScheduleEvent(EVENT_SOUL_SHRIEK, 12s, 15s); break; default: break; @@ -2521,7 +2521,7 @@ public: me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true); _events.Reset(); - _events.ScheduleEvent(EVENT_GRAB_PLAYER, 2500); + _events.ScheduleEvent(EVENT_GRAB_PLAYER, 2500ms); me->SetWalk(false); } @@ -2543,7 +2543,7 @@ public: _destPoint.Relocate(CenterPosition.GetPositionX() + dist * cos(angle), CenterPosition.GetPositionY() + dist * std::sin(angle), 855.0f + frand(0.0f, 4.0f), 0.0f); me->SetHomePosition(_destPoint); _events.Reset(); - _events.ScheduleEvent(EVENT_MOVE_TO_SIPHON_POS, 0); + _events.ScheduleEvent(EVENT_MOVE_TO_SIPHON_POS, 0ms); } void OnCharmed(bool /*apply*/) override {} @@ -2599,13 +2599,13 @@ public: me->CastSpell(target, SPELL_VALKYR_CARRY, false); _destPoint.Relocate(triggers.front()); _events.Reset(); - _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 1000); + _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 1s); } } if (!valid) { _events.Reset(); - _events.ScheduleEvent(EVENT_GRAB_PLAYER, 500); + _events.ScheduleEvent(EVENT_GRAB_PLAYER, 500ms); _grabbedPlayer.Clear(); } } @@ -2617,7 +2617,7 @@ public: if (me->GetExactDist(&_destPoint) > 1.5f) // movement was interrupted (probably by a stun, start again) { _events.Reset(); - _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 0); + _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 0ms); break; } dropped = true; @@ -2638,12 +2638,12 @@ public: if (me->GetExactDist(&_destPoint) > 1.5f) // movement was interrupted (probably by a stun, start again) { _events.Reset(); - _events.ScheduleEvent(EVENT_MOVE_TO_SIPHON_POS, 0); + _events.ScheduleEvent(EVENT_MOVE_TO_SIPHON_POS, 0ms); break; } me->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, false); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false); - _events.ScheduleEvent(EVENT_LIFE_SIPHON, 2000); + _events.ScheduleEvent(EVENT_LIFE_SIPHON, 2s); break; } } @@ -2666,7 +2666,7 @@ public: if (!_grabbedPlayer) { me->CastSpell((Unit*)nullptr, SPELL_VALKYR_TARGET_SEARCH, false); - _events.ScheduleEvent(EVENT_GRAB_PLAYER, 2000); + _events.ScheduleEvent(EVENT_GRAB_PLAYER, 2s); } break; case EVENT_MOVE_TO_DROP_POS: @@ -2702,7 +2702,7 @@ public: target = lichKing->AI()->SelectTarget(SelectTargetMethod::Random, 0, NonTankLKTargetSelector(lichKing, true, false, 100.0f)); if (target) me->CastSpell(target, SPELL_LIFE_SIPHON, false); - _events.ScheduleEvent(EVENT_LIFE_SIPHON, 2500); + _events.ScheduleEvent(EVENT_LIFE_SIPHON, 2500ms); } break; default: @@ -3147,9 +3147,9 @@ public: summoner->ToUnit()->SendMovementFlagUpdate(true); summoner->ToUnit()->SetPetGUID(petGUID); _events.Reset(); - _events.ScheduleEvent(EVENT_MOVE_TO_LICH_KING, 1000); - _events.ScheduleEvent(EVENT_TELEPORT, 6250); - _events.ScheduleEvent(EVENT_DESPAWN_SELF, 6000 + 70000); + _events.ScheduleEvent(EVENT_MOVE_TO_LICH_KING, 1s); + _events.ScheduleEvent(EVENT_TELEPORT, 6250ms); + _events.ScheduleEvent(EVENT_DESPAWN_SELF, 76s); // this will let us easily access all creatures of this entry on heroic mode when its time to teleport back lichKing->AI()->JustSummoned(me); @@ -3224,7 +3224,7 @@ public: else { summoner->ExitVehicle(summoner); - _events.RescheduleEvent(EVENT_DESPAWN_SELF, 0); + _events.RescheduleEvent(EVENT_DESPAWN_SELF, 0ms); } } break; @@ -3277,13 +3277,13 @@ public: me->SetControlled(true, UNIT_STATE_ROOT); me->setActive(true); _events.Reset(); - _events.ScheduleEvent(EVENT_FROSTMOURNE_TALK_1, 2000); - _events.ScheduleEvent(EVENT_FROSTMOURNE_TALK_2, 11000); + _events.ScheduleEvent(EVENT_FROSTMOURNE_TALK_1, 2s); + _events.ScheduleEvent(EVENT_FROSTMOURNE_TALK_2, 11s); if (!IsHeroic()) { me->SetHealth(me->GetMaxHealth() / 2); - _events.ScheduleEvent(EVENT_DESTROY_SOUL, 60000); - _events.ScheduleEvent(EVENT_FROSTMOURNE_TALK_3, 25000); + _events.ScheduleEvent(EVENT_DESTROY_SOUL, 1min); + _events.ScheduleEvent(EVENT_FROSTMOURNE_TALK_3, 25s); } break; case ACTION_TELEPORT_BACK: @@ -3307,7 +3307,7 @@ public: if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) { _events.Reset(); - _events.ScheduleEvent(EVENT_TELEPORT_BACK, 1000); + _events.ScheduleEvent(EVENT_TELEPORT_BACK, 1s); if (Creature* warden = me->FindNearestCreature(NPC_SPIRIT_WARDEN, 20.0f)) { warden->CastSpell((Unit*)nullptr, SPELL_DESTROY_SOUL, false); @@ -3352,7 +3352,7 @@ public: me->AttackStop(); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); _events.Reset(); - _events.ScheduleEvent(EVENT_TELEPORT_BACK, 1000); + _events.ScheduleEvent(EVENT_TELEPORT_BACK, 1s); break; case EVENT_TELEPORT_BACK: if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING))) @@ -3491,7 +3491,7 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_SOUL_RIP, urand(12000, 15000)); + _events.ScheduleEvent(EVENT_SOUL_RIP, 12s, 15s); } void JustDied(Unit* /*killer*/) override @@ -3510,7 +3510,7 @@ public: if (_events.ExecuteEvent() == EVENT_SOUL_RIP) { me->CastSpell(me->GetVictim(), SPELL_SOUL_RIP, false); - _events.ScheduleEvent(EVENT_SOUL_RIP, urand(23000, 27000)); + _events.ScheduleEvent(EVENT_SOUL_RIP, 23s, 27s); } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 42ef685cd..3b73e10ba 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -327,10 +327,10 @@ public: _instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me); _events.Reset(); - _events.ScheduleEvent(EVENT_INTRO_TALK, 15000); - _events.ScheduleEvent(EVENT_DREAM_PORTAL, urand(45000, 48000)); + _events.ScheduleEvent(EVENT_INTRO_TALK, 15s); + _events.ScheduleEvent(EVENT_DREAM_PORTAL, 45s, 48s); if (IsHeroic()) - _events.ScheduleEvent(EVENT_BERSERK, 420000); + _events.ScheduleEvent(EVENT_BERSERK, 7min); } void HealReceived(Unit* healer, uint32& heal) override @@ -350,7 +350,7 @@ public: me->CastSpell(me, SPELL_ACHIEVEMENT_CHECK, true); me->CastSpell((Unit*)nullptr, SPELL_DREAMWALKERS_RAGE, false); _events.Reset(); - _events.ScheduleEvent(EVENT_DREAM_SLIP, 3500); + _events.ScheduleEvent(EVENT_DREAM_SLIP, 3500ms); _instance->SetBossState(DATA_VALITHRIA_DREAMWALKER, DONE); if (Creature* trigger = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VALITHRIA_TRIGGER))) @@ -463,7 +463,7 @@ public: Talk(SAY_VALITHRIA_DREAM_PORTAL); for (uint32 i = 0; i < _portalCount; ++i) me->CastSpell(me, SUMMON_PORTAL, false); - _events.ScheduleEvent(EVENT_DREAM_PORTAL, urand(45000, 48000)); + _events.ScheduleEvent(EVENT_DREAM_PORTAL, 45s, 48s); break; case EVENT_DREAM_SLIP: me->CastSpell(me, SPELL_DREAM_SLIP, false); @@ -640,11 +640,11 @@ public: { Talk(SAY_LICH_KING_INTRO); _events.Reset(); - _events.ScheduleEvent(EVENT_GLUTTONOUS_ABOMINATION_SUMMONER, 5000); - _events.ScheduleEvent(EVENT_SUPPRESSER_SUMMONER, 10000); - _events.ScheduleEvent(EVENT_BLISTERING_ZOMBIE_SUMMONER, 15000); - _events.ScheduleEvent(EVENT_RISEN_ARCHMAGE_SUMMONER, 20000); - _events.ScheduleEvent(EVENT_BLAZING_SKELETON_SUMMONER, 30000); + _events.ScheduleEvent(EVENT_GLUTTONOUS_ABOMINATION_SUMMONER, 5s); + _events.ScheduleEvent(EVENT_SUPPRESSER_SUMMONER, 10s); + _events.ScheduleEvent(EVENT_BLISTERING_ZOMBIE_SUMMONER, 15s); + _events.ScheduleEvent(EVENT_RISEN_ARCHMAGE_SUMMONER, 20s); + _events.ScheduleEvent(EVENT_BLAZING_SKELETON_SUMMONER, 30s); } } @@ -723,9 +723,9 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, urand(5000, 15000)); - _events.ScheduleEvent(EVENT_MANA_VOID, urand(15000, 25000)); - _events.ScheduleEvent(EVENT_COLUMN_OF_FROST, urand(10000, 20000)); + _events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, 5s, 15s); + _events.ScheduleEvent(EVENT_MANA_VOID, 15s, 25s); + _events.ScheduleEvent(EVENT_COLUMN_OF_FROST, 10s, 20s); } void JustEngagedWith(Unit* /*target*/) override @@ -772,17 +772,17 @@ public: { case EVENT_FROSTBOLT_VOLLEY: me->CastSpell(me, SPELL_FROSTBOLT_VOLLEY, false); - _events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, urand(8000, 15000)); + _events.ScheduleEvent(EVENT_FROSTBOLT_VOLLEY, 8s, 15s); break; case EVENT_MANA_VOID: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, ManaVoidSelector(me))) me->CastSpell(target, SPELL_MANA_VOID, false); - _events.ScheduleEvent(EVENT_MANA_VOID, urand(20000, 25000)); + _events.ScheduleEvent(EVENT_MANA_VOID, 20s, 25s); break; case EVENT_COLUMN_OF_FROST: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, -10.0f, true)) me->CastSpell(target, SPELL_COLUMN_OF_FROST, false); - _events.ScheduleEvent(EVENT_COLUMN_OF_FROST, urand(15000, 25000)); + _events.ScheduleEvent(EVENT_COLUMN_OF_FROST, 15s, 25s); break; default: break; @@ -851,7 +851,7 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_CHECK_PLAYER, 750); + _events.ScheduleEvent(EVENT_CHECK_PLAYER, 750ms); me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); me->SetCorpseDelay(0); me->LoadCreaturesAddon(true); @@ -872,9 +872,9 @@ public: { case EVENT_CHECK_PLAYER: if (me->SelectNearestPlayer(5.0f)) // also checks phase - _events.ScheduleEvent(EVENT_EXPLODE, 500); + _events.ScheduleEvent(EVENT_EXPLODE, 500ms); else - _events.ScheduleEvent(EVENT_CHECK_PLAYER, 750); + _events.ScheduleEvent(EVENT_CHECK_PLAYER, 750ms); break; case EVENT_EXPLODE: me->StopMoving(); @@ -914,8 +914,8 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_FIREBALL, urand(2000, 4000)); - _events.ScheduleEvent(EVENT_LEY_WASTE, urand(15000, 20000)); + _events.ScheduleEvent(EVENT_FIREBALL, 2s, 4s); + _events.ScheduleEvent(EVENT_LEY_WASTE, 15s, 20s); } void UpdateAI(uint32 diff) override @@ -933,11 +933,11 @@ public: case EVENT_FIREBALL: if (!me->IsWithinMeleeRange(me->GetVictim())) me->CastSpell(me->GetVictim(), SPELL_FIREBALL, false); - _events.ScheduleEvent(EVENT_FIREBALL, urand(2000, 4000)); + _events.ScheduleEvent(EVENT_FIREBALL, 2s, 4s); break; case EVENT_LEY_WASTE: me->CastSpell(me, SPELL_LEY_WASTE, false); - _events.ScheduleEvent(EVENT_LEY_WASTE, urand(15000, 20000)); + _events.ScheduleEvent(EVENT_LEY_WASTE, 15s, 20s); break; default: break; @@ -1086,7 +1086,7 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_GUT_SPRAY, urand(10000, 13000)); + _events.ScheduleEvent(EVENT_GUT_SPRAY, 10s, 13s); } void JustSummoned(Creature* summon) override @@ -1116,7 +1116,7 @@ public: { case EVENT_GUT_SPRAY: me->CastSpell(me, SPELL_GUT_SPRAY, false); - _events.ScheduleEvent(EVENT_GUT_SPRAY, urand(10000, 13000)); + _events.ScheduleEvent(EVENT_GUT_SPRAY, 10s, 13s); break; default: break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 4c3266913..a7b2be240 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -415,36 +415,36 @@ public: return; Talk(SAY_TIRION_INTRO_1); - _events.ScheduleEvent(EVENT_TIRION_INTRO_2, 4000); - _events.ScheduleEvent(EVENT_TIRION_INTRO_3, 14000); - _events.ScheduleEvent(EVENT_TIRION_INTRO_4, 18000); - _events.ScheduleEvent(EVENT_TIRION_INTRO_5, 31000); - _events.ScheduleEvent(EVENT_LK_INTRO_1, 35000); - _events.ScheduleEvent(EVENT_TIRION_INTRO_6, 49000); - _events.ScheduleEvent(EVENT_LK_INTRO_2, 58000); - _events.ScheduleEvent(EVENT_LK_INTRO_3, 74000); - _events.ScheduleEvent(EVENT_LK_INTRO_4, 86000); // sound last 21 seconds (five more) - _events.ScheduleEvent(EVENT_BOLVAR_INTRO_1, 107000); - _events.ScheduleEvent(EVENT_LK_INTRO_5, 113000); + _events.ScheduleEvent(EVENT_TIRION_INTRO_2, 4s); + _events.ScheduleEvent(EVENT_TIRION_INTRO_3, 14s); + _events.ScheduleEvent(EVENT_TIRION_INTRO_4, 18s); + _events.ScheduleEvent(EVENT_TIRION_INTRO_5, 31s); + _events.ScheduleEvent(EVENT_LK_INTRO_1, 35s); + _events.ScheduleEvent(EVENT_TIRION_INTRO_6, 49s); + _events.ScheduleEvent(EVENT_LK_INTRO_2, 58s); + _events.ScheduleEvent(EVENT_LK_INTRO_3, 74s); + _events.ScheduleEvent(EVENT_LK_INTRO_4, 86s); // sound last 21 seconds (five more) + _events.ScheduleEvent(EVENT_BOLVAR_INTRO_1, 107s); + _events.ScheduleEvent(EVENT_LK_INTRO_5, 113s); if (_instance->GetData(DATA_TEAMID_IN_INSTANCE) == TEAM_HORDE) { - _events.ScheduleEvent(EVENT_SAURFANG_INTRO_1, 125000); - _events.ScheduleEvent(EVENT_TIRION_INTRO_H_7, 134000); - _events.ScheduleEvent(EVENT_SAURFANG_INTRO_2, 144000); - _events.ScheduleEvent(EVENT_SAURFANG_INTRO_3, 155000); - _events.ScheduleEvent(EVENT_SAURFANG_INTRO_4, 167000); - _events.ScheduleEvent(EVENT_SAURFANG_RUN, 175000); + _events.ScheduleEvent(EVENT_SAURFANG_INTRO_1, 125s); + _events.ScheduleEvent(EVENT_TIRION_INTRO_H_7, 134s); + _events.ScheduleEvent(EVENT_SAURFANG_INTRO_2, 144s); + _events.ScheduleEvent(EVENT_SAURFANG_INTRO_3, 155s); + _events.ScheduleEvent(EVENT_SAURFANG_INTRO_4, 167s); + _events.ScheduleEvent(EVENT_SAURFANG_RUN, 175s); } else { - _events.ScheduleEvent(EVENT_MURADIN_INTRO_1, 125000); - _events.ScheduleEvent(EVENT_MURADIN_INTRO_2, 129000); - _events.ScheduleEvent(EVENT_MURADIN_INTRO_3, 132000); - _events.ScheduleEvent(EVENT_TIRION_INTRO_A_7, 141000); - _events.ScheduleEvent(EVENT_MURADIN_INTRO_4, 149000); - _events.ScheduleEvent(EVENT_MURADIN_INTRO_5, 156000); - _events.ScheduleEvent(EVENT_MURADIN_RUN, 162000); + _events.ScheduleEvent(EVENT_MURADIN_INTRO_1, 125s); + _events.ScheduleEvent(EVENT_MURADIN_INTRO_2, 129s); + _events.ScheduleEvent(EVENT_MURADIN_INTRO_3, 132s); + _events.ScheduleEvent(EVENT_TIRION_INTRO_A_7, 141s); + _events.ScheduleEvent(EVENT_MURADIN_INTRO_4, 149s); + _events.ScheduleEvent(EVENT_MURADIN_INTRO_5, 156s); + _events.ScheduleEvent(EVENT_MURADIN_RUN, 162s); } } } @@ -600,9 +600,9 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15000); - _events.ScheduleEvent(EVENT_STOMP, urand(5000, 8000)); - _events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(10000, 15000)); + _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15s); + _events.ScheduleEvent(EVENT_STOMP, 5s, 8s); + _events.ScheduleEvent(EVENT_ARCTIC_BREATH, 10s, 15s); } void JustDied(Unit* /*killer*/) override @@ -630,15 +630,15 @@ public: Talk(EMOTE_DEATH_PLAGUE_WARNING, target); DoCast(target, SPELL_DEATH_PLAGUE); } - _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15000); + _events.ScheduleEvent(EVENT_DEATH_PLAGUE, 15s); break; case EVENT_STOMP: DoCastVictim(SPELL_STOMP); - _events.ScheduleEvent(EVENT_STOMP, urand(15000, 18000)); + _events.ScheduleEvent(EVENT_STOMP, 15s, 18s); break; case EVENT_ARCTIC_BREATH: DoCastVictim(SPELL_ARCTIC_BREATH); - _events.ScheduleEvent(EVENT_ARCTIC_BREATH, urand(26000, 33000)); + _events.ScheduleEvent(EVENT_ARCTIC_BREATH, 26s, 33s); break; default: break; @@ -695,7 +695,7 @@ public: if (instance->GetData(DATA_COLDFLAME_JETS) == IN_PROGRESS) { DoCast(me, SPELL_COLDFLAME_JETS); - _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, 22000); + _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, 22s); } } @@ -731,8 +731,8 @@ public: _handledWP4 = false; _events.Reset(); - _events.ScheduleEvent(EVENT_SCOURGE_STRIKE, urand(7500, 12500)); - _events.ScheduleEvent(EVENT_DEATH_STRIKE, urand(25000, 30000)); + _events.ScheduleEvent(EVENT_SCOURGE_STRIKE, 7500ms, 12s + 500ms); + _events.ScheduleEvent(EVENT_DEATH_STRIKE, 25s, 30s); } void DoAction(int32 action) override @@ -754,9 +754,9 @@ public: crusader->AI()->DoAction(ACTION_START_GAUNTLET); Talk(SAY_CROK_INTRO_1); - _events.ScheduleEvent(EVENT_ARNATH_INTRO_2, 7000); - _events.ScheduleEvent(EVENT_CROK_INTRO_3, 14000); - _events.ScheduleEvent(EVENT_START_PATHING, 37000); + _events.ScheduleEvent(EVENT_ARNATH_INTRO_2, 7s); + _events.ScheduleEvent(EVENT_CROK_INTRO_3, 14s); + _events.ScheduleEvent(EVENT_START_PATHING, 37s); } else if (action == ACTION_RESET_EVENT) { @@ -879,7 +879,7 @@ public: damage = 0; me->CastSpell(me, SPELL_ICEBOUND_ARMOR, true); - _events.ScheduleEvent(EVENT_HEALTH_CHECK, 1000); + _events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); } } @@ -937,12 +937,12 @@ public: break; case EVENT_SCOURGE_STRIKE: DoCastVictim(SPELL_SCOURGE_STRIKE); - _events.ScheduleEvent(EVENT_SCOURGE_STRIKE, urand(10000, 14000)); + _events.ScheduleEvent(EVENT_SCOURGE_STRIKE, 10s, 14s); break; case EVENT_DEATH_STRIKE: if (HealthBelowPct(20)) DoCastVictim(SPELL_DEATH_STRIKE); - _events.ScheduleEvent(EVENT_DEATH_STRIKE, urand(5000, 10000)); + _events.ScheduleEvent(EVENT_DEATH_STRIKE, 5s, 10s); break; case EVENT_HEALTH_CHECK: if (HealthAbovePct(25)) @@ -953,7 +953,7 @@ public: else { Unit::DealHeal(me, me, me->CountPctFromMaxHealth(3)); - _events.ScheduleEvent(EVENT_HEALTH_CHECK, 1000); + _events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); } break; default: @@ -1053,8 +1053,8 @@ public: crok->AI()->Talk(SAY_CROK_COMBAT_SVALNA); crok->AI()->AttackStart(me); } - events.ScheduleEvent(EVENT_SVALNA_COMBAT, 9000); - events.ScheduleEvent(EVENT_IMPALING_SPEAR, urand(15000, 20000)); + events.ScheduleEvent(EVENT_SVALNA_COMBAT, 9s); + events.ScheduleEvent(EVENT_IMPALING_SPEAR, 15s, 20s); } void KilledUnit(Unit* victim) override @@ -1092,10 +1092,10 @@ public: break; case ACTION_START_GAUNTLET: me->setActive(true); - events.ScheduleEvent(EVENT_SVALNA_START, 25000); + events.ScheduleEvent(EVENT_SVALNA_START, 25s); break; case ACTION_RESURRECT_CAPTAINS: - events.RescheduleEvent(EVENT_SVALNA_RESURRECT, 7000); + events.RescheduleEvent(EVENT_SVALNA_RESURRECT, 7s); break; case ACTION_CAPTAIN_DIES: Talk(SAY_SVALNA_CAPTAIN_DEATH); @@ -1181,7 +1181,7 @@ public: me->AddAura(70203, me); DoCast(target, SPELL_IMPALING_SPEAR); } - events.ScheduleEvent(EVENT_IMPALING_SPEAR, urand(20000, 25000)); + events.ScheduleEvent(EVENT_IMPALING_SPEAR, 20s, 25s); break; default: break; @@ -1324,11 +1324,11 @@ public: { npc_argent_captainAI::Reset(); Events.Reset(); - Events.ScheduleEvent(EVENT_ARNATH_FLASH_HEAL, urand(4000, 7000)); - Events.ScheduleEvent(EVENT_ARNATH_PW_SHIELD, urand(8000, 14000)); - Events.ScheduleEvent(EVENT_ARNATH_SMITE, urand(3000, 6000)); + Events.ScheduleEvent(EVENT_ARNATH_FLASH_HEAL, 4s, 7s); + Events.ScheduleEvent(EVENT_ARNATH_PW_SHIELD, 8s, 14s); + Events.ScheduleEvent(EVENT_ARNATH_SMITE, 3s, 6s); if (Is25ManRaid() && IsUndead) - Events.ScheduleEvent(EVENT_ARNATH_DOMINATE_MIND, urand(22000, 27000)); + Events.ScheduleEvent(EVENT_ARNATH_DOMINATE_MIND, 22s, 27s); } void UpdateAI(uint32 diff) override @@ -1346,24 +1346,24 @@ public: case EVENT_ARNATH_FLASH_HEAL: if (Creature* target = FindFriendlyCreature()) DoCast(target, SPELL_FLASH_HEAL); - Events.ScheduleEvent(EVENT_ARNATH_FLASH_HEAL, urand(6000, 9000)); + Events.ScheduleEvent(EVENT_ARNATH_FLASH_HEAL, 6s, 9s); break; case EVENT_ARNATH_PW_SHIELD: { std::list targets = DoFindFriendlyMissingBuff(40.0f, SPELL_POWER_WORD_SHIELD); if (!targets.empty()) DoCast(Acore::Containers::SelectRandomContainerElement(targets), SPELL_POWER_WORD_SHIELD); - Events.ScheduleEvent(EVENT_ARNATH_PW_SHIELD, urand(15000, 20000)); + Events.ScheduleEvent(EVENT_ARNATH_PW_SHIELD, 15s, 20s); break; } case EVENT_ARNATH_SMITE: DoCastVictim(SPELL_SMITE); - Events.ScheduleEvent(EVENT_ARNATH_SMITE, urand(4000, 7000)); + Events.ScheduleEvent(EVENT_ARNATH_SMITE, 4s, 7s); break; case EVENT_ARNATH_DOMINATE_MIND: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true, true, -SPELL_DOMINATE_MIND)) DoCast(target, SPELL_DOMINATE_MIND); - Events.ScheduleEvent(EVENT_ARNATH_DOMINATE_MIND, urand(28000, 37000)); + Events.ScheduleEvent(EVENT_ARNATH_DOMINATE_MIND, 28s, 37s); break; default: break; @@ -1404,11 +1404,11 @@ public: { npc_argent_captainAI::Reset(); Events.Reset(); - Events.ScheduleEvent(EVENT_BRANDON_CRUSADER_STRIKE, urand(6000, 10000)); - Events.ScheduleEvent(EVENT_BRANDON_DIVINE_SHIELD, 500); - Events.ScheduleEvent(EVENT_BRANDON_JUDGEMENT_OF_COMMAND, urand(8000, 13000)); + Events.ScheduleEvent(EVENT_BRANDON_CRUSADER_STRIKE, 6s, 10s); + Events.ScheduleEvent(EVENT_BRANDON_DIVINE_SHIELD, 500ms); + Events.ScheduleEvent(EVENT_BRANDON_JUDGEMENT_OF_COMMAND, 8s, 13s); if (IsUndead) - Events.ScheduleEvent(EVENT_BRANDON_HAMMER_OF_BETRAYAL, urand(25000, 30000)); + Events.ScheduleEvent(EVENT_BRANDON_HAMMER_OF_BETRAYAL, 25s, 30s); } void UpdateAI(uint32 diff) override @@ -1427,21 +1427,21 @@ public: { case EVENT_BRANDON_CRUSADER_STRIKE: DoCastVictim(SPELL_CRUSADER_STRIKE); - Events.ScheduleEvent(EVENT_BRANDON_CRUSADER_STRIKE, urand(6000, 12000)); + Events.ScheduleEvent(EVENT_BRANDON_CRUSADER_STRIKE, 6s, 12s); break; case EVENT_BRANDON_DIVINE_SHIELD: if (HealthBelowPct(20)) DoCast(me, SPELL_DIVINE_SHIELD); - Events.ScheduleEvent(EVENT_BRANDON_DIVINE_SHIELD, 500); + Events.ScheduleEvent(EVENT_BRANDON_DIVINE_SHIELD, 500ms); break; case EVENT_BRANDON_JUDGEMENT_OF_COMMAND: DoCastVictim(SPELL_JUDGEMENT_OF_COMMAND); - Events.ScheduleEvent(EVENT_BRANDON_JUDGEMENT_OF_COMMAND, urand(8000, 13000)); + Events.ScheduleEvent(EVENT_BRANDON_JUDGEMENT_OF_COMMAND, 8s, 13s); break; case EVENT_BRANDON_HAMMER_OF_BETRAYAL: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true)) DoCast(target, SPELL_HAMMER_OF_BETRAYAL); - Events.ScheduleEvent(EVENT_BRANDON_HAMMER_OF_BETRAYAL, urand(45000, 60000)); + Events.ScheduleEvent(EVENT_BRANDON_HAMMER_OF_BETRAYAL, 45s, 60s); break; default: break; @@ -1473,11 +1473,11 @@ public: { npc_argent_captainAI::Reset(); Events.Reset(); - Events.ScheduleEvent(EVENT_GRONDEL_CHARGE_CHECK, 500); - Events.ScheduleEvent(EVENT_GRONDEL_MORTAL_STRIKE, urand(8000, 14000)); - Events.ScheduleEvent(EVENT_GRONDEL_SUNDER_ARMOR, urand(3000, 12000)); + Events.ScheduleEvent(EVENT_GRONDEL_CHARGE_CHECK, 500ms); + Events.ScheduleEvent(EVENT_GRONDEL_MORTAL_STRIKE, 8s, 14s); + Events.ScheduleEvent(EVENT_GRONDEL_SUNDER_ARMOR, 3s, 12s); if (IsUndead) - Events.ScheduleEvent(EVENT_GRONDEL_CONFLAGRATION, urand(12000, 17000)); + Events.ScheduleEvent(EVENT_GRONDEL_CONFLAGRATION, 12s, 17s); } void UpdateAI(uint32 diff) override @@ -1496,20 +1496,20 @@ public: { case EVENT_GRONDEL_CHARGE_CHECK: DoCastVictim(SPELL_CHARGE); - Events.ScheduleEvent(EVENT_GRONDEL_CHARGE_CHECK, 500); + Events.ScheduleEvent(EVENT_GRONDEL_CHARGE_CHECK, 500ms); break; case EVENT_GRONDEL_MORTAL_STRIKE: DoCastVictim(SPELL_MORTAL_STRIKE); - Events.ScheduleEvent(EVENT_GRONDEL_MORTAL_STRIKE, urand(10000, 15000)); + Events.ScheduleEvent(EVENT_GRONDEL_MORTAL_STRIKE, 10s, 15s); break; case EVENT_GRONDEL_SUNDER_ARMOR: DoCastVictim(SPELL_SUNDER_ARMOR); - Events.ScheduleEvent(EVENT_GRONDEL_SUNDER_ARMOR, urand(5000, 17000)); + Events.ScheduleEvent(EVENT_GRONDEL_SUNDER_ARMOR, 5s, 17s); break; case EVENT_GRONDEL_CONFLAGRATION: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true)) DoCast(target, SPELL_CONFLAGRATION); - Events.ScheduleEvent(EVENT_GRONDEL_CONFLAGRATION, urand(10000, 15000)); + Events.ScheduleEvent(EVENT_GRONDEL_CONFLAGRATION, 10s, 15s); break; default: break; @@ -1541,9 +1541,9 @@ public: { npc_argent_captainAI::Reset(); Events.Reset(); - Events.ScheduleEvent(EVENT_RUPERT_FEL_IRON_BOMB, urand(15000, 20000)); - Events.ScheduleEvent(EVENT_RUPERT_MACHINE_GUN, urand(25000, 30000)); - Events.ScheduleEvent(EVENT_RUPERT_ROCKET_LAUNCH, urand(10000, 15000)); + Events.ScheduleEvent(EVENT_RUPERT_FEL_IRON_BOMB, 15s, 20s); + Events.ScheduleEvent(EVENT_RUPERT_MACHINE_GUN, 25s, 30s); + Events.ScheduleEvent(EVENT_RUPERT_ROCKET_LAUNCH, 10s, 15s); } void UpdateAI(uint32 diff) override @@ -1563,17 +1563,17 @@ public: case EVENT_RUPERT_FEL_IRON_BOMB: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) DoCast(target, SPELL_FEL_IRON_BOMB); - Events.ScheduleEvent(EVENT_RUPERT_FEL_IRON_BOMB, urand(15000, 20000)); + Events.ScheduleEvent(EVENT_RUPERT_FEL_IRON_BOMB, 15s, 20s); break; case EVENT_RUPERT_MACHINE_GUN: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1)) DoCast(target, SPELL_MACHINE_GUN); - Events.ScheduleEvent(EVENT_RUPERT_MACHINE_GUN, urand(25000, 30000)); + Events.ScheduleEvent(EVENT_RUPERT_MACHINE_GUN, 25s, 30s); break; case EVENT_RUPERT_ROCKET_LAUNCH: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1)) DoCast(target, SPELL_ROCKET_LAUNCH); - Events.ScheduleEvent(EVENT_RUPERT_ROCKET_LAUNCH, urand(10000, 15000)); + Events.ScheduleEvent(EVENT_RUPERT_ROCKET_LAUNCH, 10s, 15s); break; default: break; @@ -1648,30 +1648,30 @@ public: switch (me->GetEntry()) { case NPC_YMIRJAR_HUNTRESS: - events.ScheduleEvent(1, urand(10000, 15000)); // Ice Trap - events.ScheduleEvent(2, urand(8000, 12000)); // Rapid Shot - events.ScheduleEvent(3, urand(6000, 10000)); // Volley + events.ScheduleEvent(1, 10s, 15s); // Ice Trap + events.ScheduleEvent(2, 8s, 12s); // Rapid Shot + events.ScheduleEvent(3, 6s, 10s); // Volley if (me->GetMap()->Is25ManRaid()) - events.ScheduleEvent(4, 5000); // Summon Warhawk + events.ScheduleEvent(4, 5s); // Summon Warhawk break; case NPC_YMIRJAR_WARLORD: - events.ScheduleEvent(11, 6000); // Whirlwind + events.ScheduleEvent(11, 6s); // Whirlwind break; case NPC_YMIRJAR_BATTLE_MAIDEN: - events.ScheduleEvent(21, 3000); // Barbaric Strike - events.ScheduleEvent(22, urand(8000, 12000)); // Adrenaline Rush + events.ScheduleEvent(21, 3s); // Barbaric Strike + events.ScheduleEvent(22, 8s, 12s); // Adrenaline Rush break; case NPC_YMIRJAR_FROSTBINDER: - events.ScheduleEvent(31, 0); // Arctic Chill - events.ScheduleEvent(32, urand(15000, 25000)); // Frozen Orb - events.ScheduleEvent(33, urand(15000, 30000)); // Twisted Winds - events2.ScheduleEvent(100, 0); // Spirit Stream + events.ScheduleEvent(31, 0ms); // Arctic Chill + events.ScheduleEvent(32, 15s, 25s); // Frozen Orb + events.ScheduleEvent(33, 15s, 30s); // Twisted Winds + events2.ScheduleEvent(100, 0ms); // Spirit Stream me->SetHover(false); break; case NPC_YMIRJAR_DEATHBRINGER: - events.ScheduleEvent(41, 2500); // Empowered Shadow Bolt - events.ScheduleEvent(42, 5000); // Summon Undead - events2.ScheduleEvent(100, 0); // Spirit Stream + events.ScheduleEvent(41, 2500ms); // Empowered Shadow Bolt + events.ScheduleEvent(42, 5s); // Summon Undead + events2.ScheduleEvent(100, 0ms); // Spirit Stream break; } } @@ -1686,7 +1686,7 @@ public: case 100: if (Creature* stalker = me->FindNearestCreature(NPC_INVISIBLE_STALKER_3_0, 50.0f)) me->CastSpell(stalker, SPELL_SPIRIT_STREAM, false); - events2.ScheduleEvent(100, 33000); + events2.ScheduleEvent(100, 33s); break; } } @@ -1705,11 +1705,11 @@ public: break; case 1: // Ice Trap me->CastSpell((Unit*)nullptr, 71249, false); - events.RepeatEvent(urand(35000, 40000)); + events.Repeat(35s, 40s); break; case 2: // Rapid Shot me->CastSpell(me->GetVictim(), 71251, false); - events.RepeatEvent(urand(25000, 30000)); + events.Repeat(25s, 30s); break; case 3: // Volley { @@ -1717,10 +1717,10 @@ public: if (target && me->GetDistance(target) > 10.0f) { me->CastSpell(target, 71252, false); - events.RepeatEvent(urand(25000, 35000)); + events.Repeat(25s, 35s); } else - events.RepeatEvent(2500); + events.Repeat(2500ms); } break; case 4: // Summon Warhawk @@ -1728,15 +1728,15 @@ public: break; case 11: // Whirlwind me->CastSpell(me->GetVictim(), 41056, false); - events.RepeatEvent(6000); + events.Repeat(6s); break; case 21: // Barbaric Strike me->CastSpell(me->GetVictim(), 71257, false); - events.RepeatEvent(3000); + events.Repeat(3s); break; case 22: // Adrenaline Rush me->CastSpell(me, 71258, false); - events.RepeatEvent(urand(15000, 25000)); + events.Repeat(15s, 25s); break; case 31: // Arctic Chill me->CastSpell(me, 71270, true); @@ -1744,19 +1744,19 @@ public: case 32: // Frozen Orb if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 30.0f, true)) me->CastSpell(target, 71274, false); - events.RepeatEvent(urand(40000, 50000)); + events.Repeat(40s, 50s); break; case 33: // Twisted Winds me->CastSpell((Unit*)nullptr, 71306, false); - events.RepeatEvent(urand(35000, 50000)); + events.Repeat(35s, 50s); break; case 41: // Empowered Shadow Bolt me->CastSpell(me->GetVictim(), 69528, false); - events.RepeatEvent(2500); + events.Repeat(2500ms); break; case 42: // Summon Undead me->CastSpell(me->GetVictim(), 69516, false); - events.RepeatEvent(45000); + events.Repeat(45s); break; default: break; @@ -1870,7 +1870,7 @@ public: if (_instance->GetBossState(DATA_PROFESSOR_PUTRICIDE) == DONE && _instance->GetBossState(DATA_BLOOD_QUEEN_LANA_THEL) == DONE && _instance->GetBossState(DATA_SINDRAGOSA) == DONE) - _events.ScheduleEvent(EVENT_SOUL_MISSILE, urand(1000, 6000)); + _events.ScheduleEvent(EVENT_SOUL_MISSILE, 1s, 6s); } void UpdateAI(uint32 diff) override @@ -1883,7 +1883,7 @@ public: if (_events.ExecuteEvent() == EVENT_SOUL_MISSILE) { DoCastAOE(SPELL_SOUL_MISSILE); - _events.ScheduleEvent(EVENT_SOUL_MISSILE, urand(5000, 7000)); + _events.ScheduleEvent(EVENT_SOUL_MISSILE, 5s, 7s); } } @@ -2579,10 +2579,10 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(1, urand(5000, 15000)); - events.ScheduleEvent(2, urand(5000, 15000)); - events.ScheduleEvent(3, urand(5000, 15000)); - events.ScheduleEvent(4, urand(1000, 3000)); + events.ScheduleEvent(1, 5s, 15s); + events.ScheduleEvent(2, 5s, 15s); + events.ScheduleEvent(3, 5s, 15s); + events.ScheduleEvent(4, 1s, 3s); } void UpdateAI(uint32 diff) override @@ -2602,21 +2602,21 @@ public: case 1: if (Unit* target = DoSelectLowestHpFriendly(35.0f, 5000)) me->CastSpell(target, 69899, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); break; case 2: if (Unit* target = DoSelectLowestHpFriendly(35.0f, 5000)) me->CastSpell(target, 69882, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); break; case 3: if (Unit* target = DoSelectLowestHpFriendly(35.0f, 5000)) me->CastSpell(target, 69898, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); break; case 4: me->CastSpell(me->GetVictim(), 69968, false); - events.RepeatEvent(urand(2000, 3000)); + events.Repeat(2s, 3s); break; } @@ -2646,8 +2646,8 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(1, urand(5000, 10000)); - events.ScheduleEvent(2, urand(5000, 15000)); + events.ScheduleEvent(1, 5s, 10s); + events.ScheduleEvent(2, 5s, 15s); } void UpdateAI(uint32 diff) override @@ -2666,11 +2666,11 @@ public: break; case 1: me->CastSpell(me->GetVictim(), 69989, false); - events.RepeatEvent(urand(5000, 10000)); + events.Repeat(5s, 10s); break; case 2: me->CastSpell(me->GetVictim(), 69975, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; } @@ -2700,9 +2700,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(1, urand(5000, 15000)); - events.ScheduleEvent(2, urand(5000, 15000)); - events.ScheduleEvent(3, urand(1000, 3000)); + events.ScheduleEvent(1, 5s, 15s); + events.ScheduleEvent(2, 5s, 15s); + events.ScheduleEvent(3, 1s, 3s); } void UpdateAI(uint32 diff) override @@ -2722,16 +2722,16 @@ public: case 1: if (Unit* target = DoSelectLowestHpFriendly(35.0f, 5000)) me->CastSpell(target, 69963, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); break; case 2: if (Unit* target = DoSelectLowestHpFriendly(35.0f, 5000)) me->CastSpell(target, 69910, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); break; case 3: me->CastSpell(me->GetVictim(), 69967, false); - events.RepeatEvent(urand(2000, 3000)); + events.Repeat(2s, 3s); break; } @@ -2761,10 +2761,10 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(1, urand(5000, 15000)); - events.ScheduleEvent(2, urand(5000, 15000)); - events.ScheduleEvent(3, urand(5000, 15000)); - events.ScheduleEvent(4, urand(1000, 3000)); + events.ScheduleEvent(1, 5s, 15s); + events.ScheduleEvent(2, 5s, 15s); + events.ScheduleEvent(3, 5s, 15s); + events.ScheduleEvent(4, 1s, 3s); } void UpdateAI(uint32 diff) override @@ -2784,21 +2784,21 @@ public: case 1: if (Unit* target = DoSelectLowestHpFriendly(35.0f, 5000)) me->CastSpell(target, 69923, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); break; case 2: if (Unit* target = DoSelectLowestHpFriendly(35.0f, 5000)) me->CastSpell(target, 69926, false); - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); break; case 3: if (Unit* target = DoSelectLowestHpFriendly(35.0f, 5000)) me->CastSpell(target, 69958, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); break; case 4: me->CastSpell(me->GetVictim(), 69970, false); - events.RepeatEvent(urand(3000, 4000)); + events.Repeat(3s, 4s); break; } @@ -2830,7 +2830,7 @@ public: events.Reset(); summons.DespawnAll(); me->setActive(true); - events.ScheduleEvent(1, 10000); + events.ScheduleEvent(1, 10s); me->SetInCombatWithZone(); } @@ -2910,7 +2910,7 @@ public: casted = true; me->CastSpell(target, 71906, true); // Severed Essence } - events.RepeatEvent(casted ? 25000 : 5000); + events.Repeat(casted ? 25s : 5s); } break; } @@ -3069,9 +3069,9 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(1, urand(15000, 25000)); // blizzard - events.ScheduleEvent(2, 5000); // cleave - events.ScheduleEvent(3, urand(10000, 15000)); // frost breath + events.ScheduleEvent(1, 15s, 25s); // blizzard + events.ScheduleEvent(2, 5s); // cleave + events.ScheduleEvent(3, 10s, 15s); // frost breath } void DoAction(int32 a) override @@ -3120,15 +3120,15 @@ public: case 1: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) me->CastSpell(target, 70362, false); - events.RepeatEvent(urand(25000, 35000)); + events.Repeat(25s, 35s); break; case 2: me->CastSpell(me->GetVictim(), 70361, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case 3: me->CastSpell(me->GetVictim(), 70116, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; } @@ -3182,7 +3182,7 @@ public: { me->SetWalk(false); events.Reset(); - events.ScheduleEvent(1, urand(3000, 6000)); // leaping face maul + events.ScheduleEvent(1, 3s, 6s); // leaping face maul } void JustReachedHome() override @@ -3270,10 +3270,10 @@ public: if (me->GetVictim() && !me->GetVictim()->HasAura(71163) && me->GetVictim()->GetDistance(me) > 5.0f && me->GetVictim()->GetDistance(me) < 30.0f) { me->CastSpell(me->GetVictim(), 71164, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); } else - events.RepeatEvent(3000); + events.Repeat(3s); break; } @@ -3335,9 +3335,9 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(1, urand(3000, 10000)); // Crypt Scarabs - events.ScheduleEvent(2, urand(15000, 25000)); // Dark Mending - events.ScheduleEvent(3, urand(8000, 15000)); // Web Wrap + events.ScheduleEvent(1, 3s, 10s); // Crypt Scarabs + events.ScheduleEvent(2, 15s, 25s); // Dark Mending + events.ScheduleEvent(3, 8s, 15s); // Web Wrap me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD); } @@ -3405,16 +3405,16 @@ public: break; case 1: me->CastSpell(me->GetVictim(), 70965, false); - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); break; case 2: me->CastSpell(me->GetVictim(), 71020, false); - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); break; case 3: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) me->CastSpell(target, 70980, false); - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); break; } @@ -3513,8 +3513,8 @@ public: me->setActive(true); events.Reset(); events.SetPhase(0); - events.ScheduleEvent(EVENT_CHECK_FIGHT, 1000); - events.ScheduleEvent(EVENT_GAUNTLET_PHASE1, 0); + events.ScheduleEvent(EVENT_CHECK_FIGHT, 1s); + events.ScheduleEvent(EVENT_GAUNTLET_PHASE1, 0ms); instance->SetBossState(DATA_SINDRAGOSA_GAUNTLET, IN_PROGRESS); } } @@ -3558,12 +3558,12 @@ public: if (events.GetPhaseMask() == 0) { events.SetPhase(1); - events.ScheduleEvent(EVENT_GAUNTLET_PHASE2, 0); + events.ScheduleEvent(EVENT_GAUNTLET_PHASE2, 0ms); } else if (events.GetPhaseMask() == 1) { events.SetPhase(2); - events.ScheduleEvent(EVENT_GAUNTLET_PHASE3, 0); + events.ScheduleEvent(EVENT_GAUNTLET_PHASE3, 0ms); } else me->KillSelf(); @@ -3583,7 +3583,7 @@ public: if (me->GetDistance(itr->GetSource()) > 100.0f || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster()) continue; - events.ScheduleEvent(EVENT_CHECK_FIGHT, 1000); + events.ScheduleEvent(EVENT_CHECK_FIGHT, 1s); return; } @@ -3638,13 +3638,13 @@ public: { me->setActive(true); events.Reset(); - events.ScheduleEvent(EVENT_CHECK_FIGHT, 1000); + events.ScheduleEvent(EVENT_CHECK_FIGHT, 1s); instance->SetData(DATA_PUTRICIDE_TRAP_STATE, IN_PROGRESS); me->CastSpell(me, SPELL_GIANT_INSECT_SWARM, true); for (uint8 i = 0; i < 60; ++i) events.ScheduleEvent(EVENT_GAUNTLET_PHASE1, i * 1000); - events.ScheduleEvent(EVENT_GAUNTLET_PHASE2, 60000); + events.ScheduleEvent(EVENT_GAUNTLET_PHASE2, 1min); } } @@ -3685,7 +3685,7 @@ public: if (me->GetDistance(itr->GetSource()) > 100.0f || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster()) continue; - events.ScheduleEvent(EVENT_CHECK_FIGHT, 1000); + events.ScheduleEvent(EVENT_CHECK_FIGHT, 1s); return; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 5415a43b8..673a26936 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -1068,7 +1068,7 @@ public: } } else if (state == FAIL) - Events.ScheduleEvent(EVENT_RESPAWN_GUNSHIP, 30000); + Events.ScheduleEvent(EVENT_RESPAWN_GUNSHIP, 30s); break; case DATA_DEATHBRINGER_SAURFANG: switch (state) @@ -1336,7 +1336,7 @@ public: switch (data) { case IN_PROGRESS: - Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 60000); + Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 1min); BloodQuickeningMinutes = 30; DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1); DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes); @@ -1599,7 +1599,7 @@ public: if (BloodQuickeningState == IN_PROGRESS) { - Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 60000); + Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 1min); DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1); DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes); } @@ -1679,7 +1679,7 @@ public: --BloodQuickeningMinutes; if (BloodQuickeningMinutes) { - Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 60000); + Events.ScheduleEvent(EVENT_UPDATE_EXECUTION_TIME, 1min); DoUpdateWorldState(WORLDSTATE_SHOW_TIMER, 1); DoUpdateWorldState(WORLDSTATE_EXECUTION_TIME, BloodQuickeningMinutes); } @@ -1765,13 +1765,13 @@ public: case EVENT_QUAKE: if (GameObject* warning = instance->GetGameObject(FrozenThroneWarningGUID)) warning->SetGoState(GO_STATE_ACTIVE); - Events.ScheduleEvent(EVENT_QUAKE_SHATTER, 5000); + Events.ScheduleEvent(EVENT_QUAKE_SHATTER, 5s); break; case EVENT_SECOND_REMORSELESS_WINTER: if (GameObject* platform = instance->GetGameObject(ArthasPlatformGUID)) { platform->SetDestructibleState(GO_DESTRUCTIBLE_DESTROYED); - Events.ScheduleEvent(EVENT_REBUILD_PLATFORM, 1500); + Events.ScheduleEvent(EVENT_REBUILD_PLATFORM, 1500ms); } break; case EVENT_TELEPORT_TO_FROSMOURNE: // Harvest Soul (normal mode) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp index c123bd070..8077b64d2 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_anubrekhan.cpp @@ -169,16 +169,16 @@ public: go->SetGoState(GO_STATE_READY); } } - events.ScheduleEvent(EVENT_IMPALE, 15000); - events.ScheduleEvent(EVENT_LOCUST_SWARM, urand(70000, 120000)); - events.ScheduleEvent(EVENT_BERSERK, 600000); + events.ScheduleEvent(EVENT_IMPALE, 15s); + events.ScheduleEvent(EVENT_LOCUST_SWARM, 70s, 120s); + events.ScheduleEvent(EVENT_BERSERK, 10min); if (!summons.HasEntry(NPC_CRYPT_GUARD)) { SummonCryptGuards(); } if (!Is25ManRaid()) { - events.ScheduleEvent(EVENT_SPAWN_GUARD, urand(15000, 20000)); + events.ScheduleEvent(EVENT_SPAWN_GUARD, 15s, 20s); } } @@ -223,13 +223,13 @@ public: { me->CastSpell(target, RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25), false); } - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_LOCUST_SWARM: Talk(EMOTE_LOCUST); me->CastSpell(me, RAID_MODE(SPELL_LOCUST_SWARM_10, SPELL_LOCUST_SWARM_25), false); - events.ScheduleEvent(EVENT_SPAWN_GUARD, 3000); - events.RepeatEvent(90000); + events.ScheduleEvent(EVENT_SPAWN_GUARD, 3s); + events.Repeat(90s); break; case EVENT_SPAWN_GUARD: me->SummonCreature(NPC_CRYPT_GUARD, 3331.217f, -3476.607f, 287.074f, 3.269f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 60000); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp index f6bc7afcf..33702aae4 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_faerlina.cpp @@ -118,9 +118,9 @@ public: me->CallForHelp(VISIBLE_RANGE); summons.DoZoneInCombat(); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_POISON_BOLT, urand(7000, 15000)); - events.ScheduleEvent(EVENT_RAIN_OF_FIRE, urand(8000, 18000)); - events.ScheduleEvent(EVENT_FRENZY, urand(60000, 80000), 1); + events.ScheduleEvent(EVENT_POISON_BOLT, 7s, 15s); + events.ScheduleEvent(EVENT_RAIN_OF_FIRE, 8s, 18s); + events.ScheduleEvent(EVENT_FRENZY, 60s, 80s, 1); events.SetPhase(1); if (pInstance) { @@ -200,14 +200,14 @@ public: { me->CastCustomSpell(RAID_MODE(SPELL_POISON_BOLT_VOLLEY_10, SPELL_POISON_BOLT_VOLLEY_25), SPELLVALUE_MAX_TARGETS, RAID_MODE(3, 10), me, false); } - events.RepeatEvent(urand(7000, 15000)); + events.Repeat(7s, 15s); break; case EVENT_RAIN_OF_FIRE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) { me->CastSpell(target, RAID_MODE(SPELL_RAIN_OF_FIRE_10, SPELL_RAIN_OF_FIRE_25), false); } - events.RepeatEvent(urand(8000, 18000)); + events.Repeat(8s, 18s); break; case EVENT_FRENZY: if (!me->HasAura(RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25))) @@ -215,11 +215,11 @@ public: Talk(SAY_FRENZY); Talk(EMOTE_FRENZY); me->CastSpell(me, RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25), true); - events.RepeatEvent(60000); + events.Repeat(1min); } else { - events.RepeatEvent(30000); + events.Repeat(30s); } break; } @@ -234,7 +234,7 @@ public: if (me->HasAura(RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25))) { me->RemoveAurasDueToSpell(RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25)); - events.RescheduleEvent(EVENT_FRENZY, 60000); + events.RescheduleEvent(EVENT_FRENZY, 1min); } pInstance->SetData(DATA_FRENZY_REMOVED, 0); if (Is25ManRaid()) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp index 77df500c0..c37bad72e 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_four_horsemen.cpp @@ -193,16 +193,16 @@ public: currentWaypoint = 0; me->SetReactState(REACT_AGGRESSIVE); events.Reset(); - events.RescheduleEvent(EVENT_MARK_CAST, 24000); - events.RescheduleEvent(EVENT_BERSERK, 600000); + events.RescheduleEvent(EVENT_MARK_CAST, 24s); + events.RescheduleEvent(EVENT_BERSERK, 10min); if ((me->GetEntry() != NPC_LADY_BLAUMEUX && me->GetEntry() != NPC_SIR_ZELIEK)) { - events.RescheduleEvent(EVENT_PRIMARY_SPELL, 10000 + rand() % 5000); + events.RescheduleEvent(EVENT_PRIMARY_SPELL, 10s, 15s); } else { - events.RescheduleEvent(EVENT_PUNISH, 5000); - events.RescheduleEvent(EVENT_SECONDARY_SPELL, 15000); + events.RescheduleEvent(EVENT_PUNISH, 5s); + events.RescheduleEvent(EVENT_SECONDARY_SPELL, 15s); } if (pInstance) { @@ -337,7 +337,7 @@ public: { case EVENT_MARK_CAST: me->CastSpell(me, TABLE_SPELL_MARK[horsemanId], false); - events.RepeatEvent((me->GetEntry() == NPC_LADY_BLAUMEUX || me->GetEntry() == NPC_SIR_ZELIEK) ? 15000 : 12000); + events.Repeat((me->GetEntry() == NPC_LADY_BLAUMEUX || me->GetEntry() == NPC_SIR_ZELIEK) ? 15s : 12s); return; case EVENT_BERSERK: Talk(SAY_SPECIAL); @@ -346,7 +346,7 @@ public: case EVENT_PRIMARY_SPELL: Talk(SAY_TAUNT); me->CastSpell(me->GetVictim(), RAID_MODE(TABLE_SPELL_PRIMARY_10[horsemanId], TABLE_SPELL_PRIMARY_25[horsemanId]), false); - events.RepeatEvent(15000); + events.Repeat(15s); return; case EVENT_PUNISH: if (!SelectTarget(SelectTargetMethod::MaxDistance, 0, 45.0f, true)) @@ -354,11 +354,11 @@ public: me->CastSpell(me, TABLE_SPELL_PUNISH[horsemanId], false); Talk(EMOTE_RAGECAST); } - events.RepeatEvent(2010); + events.Repeat(2s); return; case EVENT_SECONDARY_SPELL: me->CastSpell(me->GetVictim(), RAID_MODE(TABLE_SPELL_SECONDARY_10[horsemanId], TABLE_SPELL_SECONDARY_25[horsemanId]), false); - events.RepeatEvent(15000); + events.Repeat(15s); return; } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp index 9256656b0..821cf99c9 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp @@ -114,12 +114,12 @@ public: { BossAI::JustEngagedWith(who); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_MORTAL_WOUND, 10000); - events.ScheduleEvent(EVENT_ENRAGE, 22000); + events.ScheduleEvent(EVENT_MORTAL_WOUND, 10s); + events.ScheduleEvent(EVENT_ENRAGE, 22s); events.ScheduleEvent(EVENT_DECIMATE, RAID_MODE(110000, 90000)); - events.ScheduleEvent(EVENT_BERSERK, 360000); - events.ScheduleEvent(EVENT_SUMMON_ZOMBIE, 10000); - events.ScheduleEvent(EVENT_CAN_EAT_ZOMBIE, 1000); + events.ScheduleEvent(EVENT_BERSERK, 6min); + events.ScheduleEvent(EVENT_SUMMON_ZOMBIE, 10s); + events.ScheduleEvent(EVENT_CAN_EAT_ZOMBIE, 1s); } void JustSummoned(Creature* summon) override @@ -189,11 +189,11 @@ public: case EVENT_ENRAGE: Talk(EMOTE_ENRAGE); me->CastSpell(me, RAID_MODE(SPELL_ENRAGE_10, SPELL_ENRAGE_25), true); - events.RepeatEvent(22000); + events.Repeat(22s); break; case EVENT_MORTAL_WOUND: me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_DECIMATE: Talk(EMOTE_DECIMATE); @@ -218,7 +218,7 @@ public: } (rand == 2 ? rand = 0 : rand++); } - events.RepeatEvent(10000); + events.Repeat(10s); break; } case EVENT_CAN_EAT_ZOMBIE: diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 9260b6774..e87725eab 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -254,12 +254,12 @@ public: BossAI::JustEngagedWith(who); me->SetInCombatWithZone(); Talk(SAY_INTRO_1); - events.ScheduleEvent(EVENT_INTRO_2, 4000); - events.ScheduleEvent(EVENT_INTRO_3, 9000); - events.ScheduleEvent(EVENT_INTRO_4, 14000); + events.ScheduleEvent(EVENT_INTRO_2, 4s); + events.ScheduleEvent(EVENT_INTRO_3, 9s); + events.ScheduleEvent(EVENT_INTRO_4, 14s); me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE); - events.ScheduleEvent(EVENT_SUMMON_ADDS, 30000); - events.ScheduleEvent(EVENT_CHECK_PLAYERS, 120000); + events.ScheduleEvent(EVENT_SUMMON_ADDS, 30s); + events.ScheduleEvent(EVENT_CHECK_PLAYERS, 2min); if (pInstance) { if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_GOTHIK_ENTER_GATE))) @@ -437,11 +437,11 @@ public: break; case EVENT_SHADOW_BOLT: me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_SHADOW_BOLT_10, SPELL_SHADOW_BOLT_25), false); - events.RepeatEvent(1010); + events.Repeat(1s); break; case EVENT_HARVEST_SOUL: me->CastSpell(me, SPELL_HARVEST_SOUL, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_TELEPORT: me->AttackStop(); @@ -459,7 +459,7 @@ public: me->GetThreatMgr().AddThreat(pTarget, 100.0f); AttackStart(pTarget); } - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_CHECK_HEALTH: if (me->HealthBelowPct(30) && pInstance) @@ -471,7 +471,7 @@ public: events.CancelEvent(EVENT_TELEPORT); break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; case EVENT_SUMMON_ADDS: if (gothikWaves[waveCount][0]) @@ -490,10 +490,10 @@ public: me->SetImmuneToPC(false); me->RemoveAllAuras(); summons.DoZoneInCombat(); - events.ScheduleEvent(EVENT_SHADOW_BOLT, 1000); - events.ScheduleEvent(EVENT_HARVEST_SOUL, urand(5000, 15000)); - events.ScheduleEvent(EVENT_TELEPORT, 20000); - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); + events.ScheduleEvent(EVENT_SHADOW_BOLT, 1s); + events.ScheduleEvent(EVENT_HARVEST_SOUL, 5s, 15s); + events.ScheduleEvent(EVENT_TELEPORT, 20s); + events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s); } waveCount++; break; @@ -547,26 +547,26 @@ public: switch (me->GetEntry()) { case NPC_LIVING_TRAINEE: - events.ScheduleEvent(EVENT_DEATH_PLAGUE, 3000); + events.ScheduleEvent(EVENT_DEATH_PLAGUE, 3s); break; case NPC_DEAD_TRAINEE: - events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 2500); + events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 2500ms); break; case NPC_LIVING_KNIGHT: - events.ScheduleEvent(EVENT_SHADOW_MARK, 3000); + events.ScheduleEvent(EVENT_SHADOW_MARK, 3s); break; case NPC_DEAD_KNIGHT: - events.ScheduleEvent(EVENT_WHIRLWIND, 2000); + events.ScheduleEvent(EVENT_WHIRLWIND, 2s); break; case NPC_LIVING_RIDER: - events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 3000); + events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 3s); break; case NPC_DEAD_RIDER: - events.ScheduleEvent(EVENT_DRAIN_LIFE, urand(2000, 3500)); - events.ScheduleEvent(EVENT_UNHOLY_FRENZY, urand(5000, 9000)); + events.ScheduleEvent(EVENT_DRAIN_LIFE, 2000ms, 3500ms); + events.ScheduleEvent(EVENT_UNHOLY_FRENZY, 5s, 9s); break; case NPC_DEAD_HORSE: - events.ScheduleEvent(EVENT_STOMP, urand(2000, 5000)); + events.ScheduleEvent(EVENT_STOMP, 2s, 5s); break; } } @@ -619,7 +619,7 @@ public: { case EVENT_DEATH_PLAGUE: me->CastSpell(me->GetVictim(), SPELL_DEATH_PLAGUE, false); - events.RepeatEvent(urand(4000, 7000)); + events.Repeat(4s, 7s); break; case EVENT_ARCANE_EXPLOSION: if (Unit* victim = me->GetVictim()) @@ -629,7 +629,7 @@ public: me->CastSpell(victim, SPELL_ARCANE_EXPLOSION, false); } } - events.RepeatEvent(2500); + events.Repeat(2500ms); break; case EVENT_SHADOW_MARK: if (Unit* victim = me->GetVictim()) @@ -639,7 +639,7 @@ public: me->CastSpell(me->GetVictim(), SPELL_SHADOW_MARK, false); } } - events.RepeatEvent(urand(5000, 7000)); + events.Repeat(5s, 7s); break; case EVENT_WHIRLWIND: if (Unit* victim = me->GetVictim()) @@ -649,11 +649,11 @@ public: me->CastSpell(victim, SPELL_WHIRLWIND, false); } } - events.RepeatEvent(urand(4000, 6000)); + events.Repeat(4s, 6s); break; case EVENT_SHADOW_BOLT_VOLLEY: me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT_VOLLEY, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_DRAIN_LIFE: if (Unit* victim = me->GetVictim()) @@ -663,11 +663,11 @@ public: me->CastSpell(victim, SPELL_DRAIN_LIFE, false); } } - events.RepeatEvent(urand(8000, 12000)); + events.Repeat(8s, 12s); break; case EVENT_UNHOLY_FRENZY: me->AddAura(SPELL_UNHOLY_FRENZY, me); - events.RepeatEvent(urand(15000, 17000)); + events.Repeat(15s, 17s); break; case EVENT_STOMP: if (Unit* victim = me->GetVictim()) @@ -677,7 +677,7 @@ public: me->CastSpell(victim, SPELL_STOMP, false); } } - events.RepeatEvent(urand(4000, 9000)); + events.Repeat(4s, 9s); break; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp index 8ce511a0c..a3843fb69 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp @@ -101,9 +101,9 @@ public: BossAI::JustEngagedWith(who); PullChamberAdds(); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_POISON_CLOUD, 15000); - events.ScheduleEvent(EVENT_MUTATING_INJECTION, 20000); - events.ScheduleEvent(EVENT_SLIME_SPRAY, 10000); + events.ScheduleEvent(EVENT_POISON_CLOUD, 15s); + events.ScheduleEvent(EVENT_MUTATING_INJECTION, 20s); + events.ScheduleEvent(EVENT_SLIME_SPRAY, 10s); events.ScheduleEvent(EVENT_BERSERK, RAID_MODE(720000, 540000)); } @@ -166,7 +166,7 @@ public: { case EVENT_POISON_CLOUD: me->CastSpell(me, SPELL_POISON_CLOUD, true); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_BERSERK: me->CastSpell(me, SPELL_BERSERK, true); @@ -174,7 +174,7 @@ public: case EVENT_SLIME_SPRAY: Talk(EMOTE_SLIME); me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_SLIME_SPRAY_10, SPELL_SLIME_SPRAY_25), false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_MUTATING_INJECTION: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 100.0f, true, true, -SPELL_MUTATING_INJECTION)) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp index b4e3f59da..fc88c167c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp @@ -138,10 +138,10 @@ public: me->CastStop(); me->SetReactState(REACT_AGGRESSIVE); DoZoneInCombat(); - events.ScheduleEvent(EVENT_DISRUPTION, urand(12000, 15000)); - events.ScheduleEvent(EVENT_DECEPIT_FEVER, 17000); - events.ScheduleEvent(EVENT_ERUPT_SECTION, 15000); - events.ScheduleEvent(EVENT_SWITCH_PHASE, 90000); + events.ScheduleEvent(EVENT_DISRUPTION, 12s, 15s); + events.ScheduleEvent(EVENT_DECEPIT_FEVER, 17s); + events.ScheduleEvent(EVENT_ERUPT_SECTION, 15s); + events.ScheduleEvent(EVENT_SWITCH_PHASE, 90s); } else // if (phase == PHASE_FAST_DANCE) { @@ -152,11 +152,11 @@ public: me->SetReactState(REACT_PASSIVE); me->CastSpell(me, SPELL_TELEPORT_SELF, false); me->SetFacingTo(2.40f); - events.ScheduleEvent(EVENT_PLAGUE_CLOUD, 1000); - events.ScheduleEvent(EVENT_ERUPT_SECTION, 7000); - events.ScheduleEvent(EVENT_SWITCH_PHASE, 45000); + events.ScheduleEvent(EVENT_PLAGUE_CLOUD, 1s); + events.ScheduleEvent(EVENT_ERUPT_SECTION, 7s); + events.ScheduleEvent(EVENT_SWITCH_PHASE, 45s); } - events.ScheduleEvent(EVENT_SAFETY_DANCE, 5000); + events.ScheduleEvent(EVENT_SAFETY_DANCE, 5s); } bool IsInRoom(Unit* who) @@ -185,11 +185,11 @@ public: { case EVENT_DISRUPTION: me->CastSpell(me, SPELL_SPELL_DISRUPTION, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_DECEPIT_FEVER: me->CastSpell(me, RAID_MODE(SPELL_DECREPIT_FEVER_10, SPELL_DECREPIT_FEVER_25), false); - events.RepeatEvent(urand(22000, 25000)); + events.Repeat(22s, 25s); break; case EVENT_PLAGUE_CLOUD: me->CastSpell(me, SPELL_PLAGUE_CLOUD, false); @@ -223,7 +223,7 @@ public: { Talk(SAY_TAUNT); } - events.RepeatEvent(currentPhase == PHASE_SLOW_DANCE ? 10000 : 4000); + events.Repeat(currentPhase == PHASE_SLOW_DANCE ? 10s : 4s); break; case EVENT_SAFETY_DANCE: { @@ -237,7 +237,7 @@ public: return; } } - events.RepeatEvent(5000); + events.Repeat(5s); return; } } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index bd16819e2..257124412 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -305,17 +305,17 @@ public: me->SetTarget(); me->SetReactState(REACT_PASSIVE); me->CastSpell(me, SPELL_KELTHUZAD_CHANNEL, false); - events.ScheduleEvent(EVENT_SPAWN_POOL, 5000); - events.ScheduleEvent(EVENT_SUMMON_SOLDIER, 6400); - events.ScheduleEvent(EVENT_SUMMON_UNSTOPPABLE_ABOMINATION, 10000); - events.ScheduleEvent(EVENT_SUMMON_SOUL_WEAVER, 12000); - events.ScheduleEvent(EVENT_PHASE_2, 228000); - events.ScheduleEvent(EVENT_ENRAGE, 900000); + events.ScheduleEvent(EVENT_SPAWN_POOL, 5s); + events.ScheduleEvent(EVENT_SUMMON_SOLDIER, 6400ms); + events.ScheduleEvent(EVENT_SUMMON_UNSTOPPABLE_ABOMINATION, 10s); + events.ScheduleEvent(EVENT_SUMMON_SOUL_WEAVER, 12s); + events.ScheduleEvent(EVENT_PHASE_2, 228s); + events.ScheduleEvent(EVENT_ENRAGE, 15min); if (pInstance) { if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_FLOOR))) { - events.ScheduleEvent(EVENT_FLOOR_CHANGE, 15000); + events.ScheduleEvent(EVENT_FLOOR_CHANGE, 15s); go->SetGoState(GO_STATE_ACTIVE); } } @@ -357,7 +357,7 @@ public: { if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_FLOOR))) { - events.ScheduleEvent(EVENT_FLOOR_CHANGE, 15000); + events.ScheduleEvent(EVENT_FLOOR_CHANGE, 15s); go->SetGoState(GO_STATE_READY); go->SetPhaseMask(2, true); } @@ -368,15 +368,15 @@ public: break; case EVENT_SUMMON_SOLDIER: SummonHelper(NPC_SOLDIER_OF_THE_FROZEN_WASTES, 1); - events.RepeatEvent(3100); + events.Repeat(3100ms); break; case EVENT_SUMMON_UNSTOPPABLE_ABOMINATION: SummonHelper(NPC_UNSTOPPABLE_ABOMINATION, 1); - events.RepeatEvent(18500); + events.Repeat(18s + 500ms); break; case EVENT_SUMMON_SOUL_WEAVER: SummonHelper(NPC_SOUL_WEAVER, 1); - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_PHASE_2: Talk(EMOTE_PHASE_TWO); @@ -387,15 +387,15 @@ public: me->GetMotionMaster()->MoveChase(me->GetVictim()); me->RemoveAura(SPELL_KELTHUZAD_CHANNEL); me->SetReactState(REACT_AGGRESSIVE); - events.ScheduleEvent(EVENT_FROST_BOLT_SINGLE, urand(2000, 10000)); - events.ScheduleEvent(EVENT_FROST_BOLT_MULTI, urand(15000, 30000)); - events.ScheduleEvent(EVENT_DETONATE_MANA, 30000); - events.ScheduleEvent(EVENT_PHASE_3, 1000); - events.ScheduleEvent(EVENT_SHADOW_FISSURE, 25000); - events.ScheduleEvent(EVENT_FROST_BLAST, 45000); + events.ScheduleEvent(EVENT_FROST_BOLT_SINGLE, 2s, 10s); + events.ScheduleEvent(EVENT_FROST_BOLT_MULTI, 15s, 30s); + events.ScheduleEvent(EVENT_DETONATE_MANA, 30s); + events.ScheduleEvent(EVENT_PHASE_3, 1s); + events.ScheduleEvent(EVENT_SHADOW_FISSURE, 25s); + events.ScheduleEvent(EVENT_FROST_BLAST, 45s); if (Is25ManRaid()) { - events.ScheduleEvent(EVENT_CHAINS, 90000); + events.ScheduleEvent(EVENT_CHAINS, 90s); } break; case EVENT_ENRAGE: @@ -403,18 +403,18 @@ public: break; case EVENT_FROST_BOLT_SINGLE: me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_FROST_BOLT_SINGLE_10, SPELL_FROST_BOLT_SINGLE_25), false); - events.RepeatEvent(urand(2000, 10000)); + events.Repeat(2s, 10s); break; case EVENT_FROST_BOLT_MULTI: me->CastSpell(me, RAID_MODE(SPELL_FROST_BOLT_MULTI_10, SPELL_FROST_BOLT_MULTI_25), false); - events.RepeatEvent(urand(15000, 30000)); + events.Repeat(15s, 30s); break; case EVENT_SHADOW_FISSURE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) { me->CastSpell(target, SPELL_SHADOW_FISURE, false); } - events.RepeatEvent(25000); + events.Repeat(25s); break; case EVENT_FROST_BLAST: if (Unit* target = SelectTarget(SelectTargetMethod::Random, RAID_MODE(1, 0), 0, true)) @@ -422,7 +422,7 @@ public: me->CastSpell(target, SPELL_FROST_BLAST, false); } Talk(SAY_FROST_BLAST); - events.RepeatEvent(45000); + events.Repeat(45s); break; case EVENT_CHAINS: for (uint8 i = 0; i < 3; ++i) @@ -433,7 +433,7 @@ public: } } Talk(SAY_CHAIN); - events.RepeatEvent(90000); + events.Repeat(90s); break; case EVENT_DETONATE_MANA: { @@ -455,15 +455,15 @@ public: me->CastSpell(*itr, SPELL_DETONATE_MANA, false); Talk(SAY_SPECIAL); } - events.RepeatEvent(30000); + events.Repeat(30s); break; } case EVENT_PHASE_3: if (me->HealthBelowPct(45)) { Talk(SAY_REQUEST_AID); - events.DelayEvents(5500); - events.ScheduleEvent(EVENT_P3_LICH_KING_SAY, 5000); + events.DelayEvents(5500ms); + events.ScheduleEvent(EVENT_P3_LICH_KING_SAY, 5s); if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_KELTHUZAD_PORTAL_1))) { go->SetGoState(GO_STATE_ACTIVE); @@ -482,7 +482,7 @@ public: } break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; case EVENT_P3_LICH_KING_SAY: if (pInstance) @@ -606,12 +606,12 @@ public: me->SetInCombatWithZone(); if (me->GetEntry() == NPC_UNSTOPPABLE_ABOMINATION) { - events.ScheduleEvent(EVENT_MINION_FRENZY, 1000); - events.ScheduleEvent(EVENT_MINION_MORTAL_WOUND, 5000); + events.ScheduleEvent(EVENT_MINION_FRENZY, 1s); + events.ScheduleEvent(EVENT_MINION_MORTAL_WOUND, 5s); } else if (me->GetEntry() == NPC_GUARDIAN_OF_ICECROWN) { - events.ScheduleEvent(EVENT_MINION_BLOOD_TAP, 15000); + events.ScheduleEvent(EVENT_MINION_BLOOD_TAP, 15s); } } @@ -644,7 +644,7 @@ public: { case EVENT_MINION_MORTAL_WOUND: me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_MINION_FRENZY: if (me->HealthBelowPct(35)) @@ -652,11 +652,11 @@ public: me->CastSpell(me, SPELL_FRENZY, true); break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; case EVENT_MINION_BLOOD_TAP: me->CastSpell(me->GetVictim(), SPELL_BLOOD_TAP, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp index 60a53df49..07087a736 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_loatheb.cpp @@ -113,11 +113,11 @@ public: { BossAI::JustEngagedWith(who); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_NECROTIC_AURA, 10000); - events.ScheduleEvent(EVENT_DEATHBLOOM, 5000); - events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 120000); - events.ScheduleEvent(EVENT_SUMMON_SPORE, 15000); - events.ScheduleEvent(EVENT_BERSERK, 720000); + events.ScheduleEvent(EVENT_NECROTIC_AURA, 10s); + events.ScheduleEvent(EVENT_DEATHBLOOM, 5s); + events.ScheduleEvent(EVENT_INEVITABLE_DOOM, 2min); + events.ScheduleEvent(EVENT_SUMMON_SPORE, 15s); + events.ScheduleEvent(EVENT_BERSERK, 12min); if (pInstance) { pInstance->SetData(BOSS_LOATHEB, IN_PROGRESS); @@ -151,23 +151,23 @@ public: { case EVENT_SUMMON_SPORE: me->CastSpell(me, SPELL_SUMMON_SPORE, true); - events.RepeatEvent(35000); + events.Repeat(35s); break; case EVENT_NECROTIC_AURA: me->CastSpell(me, SPELL_NECROTIC_AURA, true); Talk(SAY_NECROTIC_AURA_APPLIED); - events.ScheduleEvent(EVENT_NECROTIC_AURA_FADING, 14000); - events.ScheduleEvent(EVENT_NECROTIC_AURA_REMOVED, 17000); - events.RepeatEvent(20000); + events.ScheduleEvent(EVENT_NECROTIC_AURA_FADING, 14s); + events.ScheduleEvent(EVENT_NECROTIC_AURA_REMOVED, 17s); + events.Repeat(20s); break; case EVENT_DEATHBLOOM: me->CastSpell(me, RAID_MODE(SPELL_DEATHBLOOM_10, SPELL_DEATHBLOOM_25), false); - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_INEVITABLE_DOOM: me->CastSpell(me, RAID_MODE(SPELL_INEVITABLE_DOOM_10, SPELL_INEVITABLE_DOOM_25), false); doomCounter++; - events.RepeatEvent(doomCounter < 6 ? 30000 : 15000); + events.Repeat(doomCounter < 6 ? 30s : 15s); break; case EVENT_BERSERK: me->CastSpell(me, SPELL_BERSERK, true); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp index d772488c6..375f1f9e7 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_maexxna.cpp @@ -112,12 +112,12 @@ public: { BossAI::JustEngagedWith(who); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_WEB_WRAP, 20000); - events.ScheduleEvent(EVENT_WEB_SPRAY, 40000); - events.ScheduleEvent(EVENT_POISON_SHOCK, 10000); - events.ScheduleEvent(EVENT_NECROTIC_POISON, 5000); - events.ScheduleEvent(EVENT_HEALTH_CHECK, 1000); - events.ScheduleEvent(EVENT_SUMMON_SPIDERLINGS, 30000); + events.ScheduleEvent(EVENT_WEB_WRAP, 20s); + events.ScheduleEvent(EVENT_WEB_SPRAY, 40s); + events.ScheduleEvent(EVENT_POISON_SHOCK, 10s); + events.ScheduleEvent(EVENT_NECROTIC_POISON, 5s); + events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); + events.ScheduleEvent(EVENT_SUMMON_SPIDERLINGS, 30s); if (pInstance) { if (GameObject* go = me->GetMap()->GetGameObject(pInstance->GetGuidData(DATA_MAEXXNA_GATE))) @@ -171,15 +171,15 @@ public: case EVENT_WEB_SPRAY: Talk(EMOTE_WEB_SPRAY); me->CastSpell(me, RAID_MODE(SPELL_WEB_SPRAY_10, SPELL_WEB_SPRAY_25), true); - events.RepeatEvent(40000); + events.Repeat(40s); break; case EVENT_POISON_SHOCK: me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_POISON_SHOCK_10, SPELL_POISON_SHOCK_25), false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_NECROTIC_POISON: me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_NECROTIC_POISON_10, SPELL_NECROTIC_POISON_25), false); - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_SUMMON_SPIDERLINGS: Talk(EMOTE_SPIDERS); @@ -187,7 +187,7 @@ public: { me->SummonCreature(NPC_MAEXXNA_SPIDERLING, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); } - events.RepeatEvent(40000); + events.Repeat(40s); break; case EVENT_HEALTH_CHECK: if (me->GetHealthPct() < 30) @@ -195,7 +195,7 @@ public: me->CastSpell(me, RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25), true); break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; case EVENT_WEB_WRAP: Talk(EMOTE_WEB_WRAP); @@ -212,7 +212,7 @@ public: } } } - events.RepeatEvent(40000); + events.Repeat(40s); break; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index 2c1deebc9..be3a04c27 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -104,12 +104,12 @@ public: me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_DISABLE_MOVE); me->SetControlled(false, UNIT_STATE_ROOT); events.Reset(); - events.ScheduleEvent(EVENT_MOVE_TO_BALCONY, 110000); - events.ScheduleEvent(EVENT_CURSE, 15000); - events.ScheduleEvent(EVENT_SUMMON_PLAGUED_WARRIOR_ANNOUNCE, 10000); + events.ScheduleEvent(EVENT_MOVE_TO_BALCONY, 110s); + events.ScheduleEvent(EVENT_CURSE, 15s); + events.ScheduleEvent(EVENT_SUMMON_PLAGUED_WARRIOR_ANNOUNCE, 10s); if (Is25ManRaid()) { - events.ScheduleEvent(EVENT_BLINK, 26000); + events.ScheduleEvent(EVENT_BLINK, 26s); } } @@ -120,8 +120,8 @@ public: me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_DISABLE_MOVE); me->SetControlled(true, UNIT_STATE_ROOT); events.Reset(); - events.ScheduleEvent(EVENT_BALCONY_SUMMON_ANNOUNCE, 4000); - events.ScheduleEvent(EVENT_MOVE_TO_GROUND, 70000); + events.ScheduleEvent(EVENT_BALCONY_SUMMON_ANNOUNCE, 4s); + events.ScheduleEvent(EVENT_MOVE_TO_GROUND, 70s); } void SummonHelper(uint32 entry, uint32 count) @@ -236,13 +236,13 @@ public: { me->CastCustomSpell(RAID_MODE(SPELL_CURSE_OF_THE_PLAGUEBRINGER_10, SPELL_CURSE_OF_THE_PLAGUEBRINGER_25), SPELLVALUE_MAX_TARGETS, RAID_MODE(3, 10), me, false); } - events.RepeatEvent(25000); + events.Repeat(25s); break; case EVENT_SUMMON_PLAGUED_WARRIOR_ANNOUNCE: Talk(SAY_SUMMON); Talk(EMOTE_SUMMON); - events.RepeatEvent(30000); - events.ScheduleEvent(EVENT_SUMMON_PLAGUED_WARRIOR_REAL, 4000); + events.Repeat(30s); + events.ScheduleEvent(EVENT_SUMMON_PLAGUED_WARRIOR_REAL, 4s); break; case EVENT_SUMMON_PLAGUED_WARRIOR_REAL: me->CastSpell(me, SPELL_SUMMON_PLAGUED_WARRIORS, true); @@ -258,13 +258,13 @@ public: me->CastSpell(me, RAID_MODE(SPELL_CRIPPLE_10, SPELL_CRIPPLE_25), false); me->CastSpell(me, SPELL_BLINK, true); Talk(EMOTE_BLINK); - events.RepeatEvent(30000); + events.Repeat(30s); break; // BALCONY case EVENT_BALCONY_SUMMON_ANNOUNCE: Talk(EMOTE_SUMMON_WAVE); - events.RepeatEvent(30000); - events.ScheduleEvent(EVENT_BALCONY_SUMMON_REAL, 4000); + events.Repeat(30s); + events.ScheduleEvent(EVENT_BALCONY_SUMMON_REAL, 4s); break; case EVENT_BALCONY_SUMMON_REAL: me->CastSpell(me, SPELL_SUMMON_PLAGUED_WARRIORS, true); // visual diff --git a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp index 9d37a4bfc..842623250 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_patchwerk.cpp @@ -102,9 +102,9 @@ public: BossAI::JustEngagedWith(who); Talk(SAY_AGGRO); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_HATEFUL_STRIKE, 1500); - events.ScheduleEvent(EVENT_BERSERK, 360000); - events.ScheduleEvent(EVENT_HEALTH_CHECK, 1000); + events.ScheduleEvent(EVENT_HATEFUL_STRIKE, 1500ms); + events.ScheduleEvent(EVENT_BERSERK, 6min); + events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); if (pInstance) { pInstance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_TIMED_START_EVENT); @@ -167,17 +167,17 @@ public: { me->CastSpell(finalTarget, RAID_MODE(SPELL_HATEFUL_STRIKE_10, SPELL_HATEFUL_STRIKE_25), false); } - events.RepeatEvent(1000); + events.Repeat(1s); break; } case EVENT_BERSERK: Talk(EMOTE_BERSERK); me->CastSpell(me, SPELL_BERSERK, true); - events.ScheduleEvent(EVENT_SLIME_BOLT, 3000); + events.ScheduleEvent(EVENT_SLIME_BOLT, 3s); break; case EVENT_SLIME_BOLT: me->CastSpell(me, SPELL_SLIME_BOLT, false); - events.RepeatEvent(3000); + events.Repeat(3s); break; case EVENT_HEALTH_CHECK: if (me->GetHealthPct() <= 5) @@ -186,7 +186,7 @@ public: me->CastSpell(me, SPELL_FRENZY, true); break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index a7ca5b988..f50d9a8be 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -136,9 +136,9 @@ public: { BossAI::JustEngagedWith(who); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_UNBALANCING_STRIKE, 20000); - events.ScheduleEvent(EVENT_DISRUPTING_SHOUT, 15000); - events.ScheduleEvent(EVENT_JAGGED_KNIFE, 10000); + events.ScheduleEvent(EVENT_UNBALANCING_STRIKE, 20s); + events.ScheduleEvent(EVENT_DISRUPTING_SHOUT, 15s); + events.ScheduleEvent(EVENT_JAGGED_KNIFE, 10s); summons.DoZoneInCombat(); } @@ -155,18 +155,18 @@ public: { case EVENT_UNBALANCING_STRIKE: me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_DISRUPTING_SHOUT: me->CastSpell(me, RAID_MODE(SPELL_DISRUPTING_SHOUT_10, SPELL_DISRUPTING_SHOUT_25), false); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_JAGGED_KNIFE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f)) { me->CastSpell(target, SPELL_JAGGED_KNIFE, false); } - events.RepeatEvent(10000); + events.Repeat(10s); break; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 0114ef772..fb30603e3 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -163,13 +163,13 @@ public: BossAI::JustEngagedWith(who); EnterCombatSelfFunction(); me->CastSpell(me, RAID_MODE(SPELL_FROST_AURA_10, SPELL_FROST_AURA_25), true); - events.ScheduleEvent(EVENT_BERSERK, 900000); - events.ScheduleEvent(EVENT_CLEAVE, 5000); - events.ScheduleEvent(EVENT_TAIL_SWEEP, 10000); - events.ScheduleEvent(EVENT_LIFE_DRAIN, 17000); - events.ScheduleEvent(EVENT_BLIZZARD, 17000); - events.ScheduleEvent(EVENT_FLIGHT_START, 45000); - events.ScheduleEvent(EVENT_HUNDRED_CLUB, 5000); + events.ScheduleEvent(EVENT_BERSERK, 15min); + events.ScheduleEvent(EVENT_CLEAVE, 5s); + events.ScheduleEvent(EVENT_TAIL_SWEEP, 10s); + events.ScheduleEvent(EVENT_LIFE_DRAIN, 17s); + events.ScheduleEvent(EVENT_BLIZZARD, 17s); + events.ScheduleEvent(EVENT_FLIGHT_START, 45s); + events.ScheduleEvent(EVENT_HUNDRED_CLUB, 5s); } void JustDied(Unit* killer) override @@ -190,7 +190,7 @@ public: { if (type == POINT_MOTION_TYPE && id == POINT_CENTER) { - events.ScheduleEvent(EVENT_FLIGHT_LIFTOFF, 500); + events.ScheduleEvent(EVENT_FLIGHT_LIFTOFF, 500ms); } } @@ -259,15 +259,15 @@ public: return; case EVENT_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - events.RepeatEvent(10000); + events.Repeat(10s); return; case EVENT_TAIL_SWEEP: me->CastSpell(me, RAID_MODE(SPELL_TAIL_SWEEP_10, SPELL_TAIL_SWEEP_25), false); - events.RepeatEvent(10000); + events.Repeat(10s); return; case EVENT_LIFE_DRAIN: me->CastCustomSpell(RAID_MODE(SPELL_LIFE_DRAIN_10, SPELL_LIFE_DRAIN_25), SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5), me, false); - events.RepeatEvent(24000); + events.Repeat(24s); return; case EVENT_BLIZZARD: { @@ -292,8 +292,8 @@ public: { return; } - events.RepeatEvent(45000); - events.DelayEvents(35000); + events.Repeat(45s); + events.DelayEvents(35s); me->SetReactState(REACT_PASSIVE); me->AttackStop(); float x, y, z, o; @@ -307,7 +307,7 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); me->SetDisableGravity(true); currentTarget.Clear(); - events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, 3000); + events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, 3s); iceboltCount = RAID_MODE(2, 3); return; case EVENT_FLIGHT_ICEBOLT: @@ -357,7 +357,7 @@ public: } else { - events.ScheduleEvent(EVENT_FLIGHT_BREATH, 1000); + events.ScheduleEvent(EVENT_FLIGHT_BREATH, 1s); } return; } @@ -365,11 +365,11 @@ public: currentTarget.Clear(); Talk(EMOTE_BREATH); me->CastSpell(me, SPELL_FROST_MISSILE, false); - events.ScheduleEvent(EVENT_FLIGHT_SPELL_EXPLOSION, 8500); + events.ScheduleEvent(EVENT_FLIGHT_SPELL_EXPLOSION, 8500ms); return; case EVENT_FLIGHT_SPELL_EXPLOSION: me->CastSpell(me, SPELL_FROST_EXPLOSION, true); - events.ScheduleEvent(EVENT_FLIGHT_START_LAND, 3000); + events.ScheduleEvent(EVENT_FLIGHT_START_LAND, 3s); return; case EVENT_FLIGHT_START_LAND: if (!blockList.empty()) @@ -384,12 +384,12 @@ public: } blockList.clear(); me->RemoveAllGameObjects(); - events.ScheduleEvent(EVENT_LAND, 1000); + events.ScheduleEvent(EVENT_LAND, 1s); return; case EVENT_LAND: me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); me->SetDisableGravity(false); - events.ScheduleEvent(EVENT_GROUND, 1500); + events.ScheduleEvent(EVENT_GROUND, 1500ms); return; case EVENT_GROUND: Talk(EMOTE_GROUND_PHASE); @@ -407,7 +407,7 @@ public: return; } } - events.RepeatEvent(5000); + events.Repeat(5s); return; } } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index 3450cc2fa..b7c09c499 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -277,7 +277,7 @@ public: } } reviveTimer = 0; - events.ScheduleEvent(EVENT_THADDIUS_INIT, 750); + events.ScheduleEvent(EVENT_THADDIUS_INIT, 750ms); } return; } @@ -324,7 +324,7 @@ public: go->SetGoState(GO_STATE_READY); } me->CastSpell(me, SPELL_THADDIUS_VISUAL_LIGHTNING, true); - events.ScheduleEvent(EVENT_THADDIUS_ENTER_COMBAT, 1000); + events.ScheduleEvent(EVENT_THADDIUS_ENTER_COMBAT, 1s); break; } case EVENT_THADDIUS_ENTER_COMBAT: @@ -332,21 +332,21 @@ public: me->SetReactState(REACT_AGGRESSIVE); me->SetControlled(false, UNIT_STATE_STUNNED); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - events.ScheduleEvent(EVENT_THADDIUS_CHAIN_LIGHTNING, 14000); - events.ScheduleEvent(EVENT_THADDIUS_BERSERK, 360000); - events.ScheduleEvent(EVENT_THADDIUS_POLARITY_SHIFT, 30000); - events.ScheduleEvent(EVENT_ALLOW_BALL_LIGHTNING, 5000); + events.ScheduleEvent(EVENT_THADDIUS_CHAIN_LIGHTNING, 14s); + events.ScheduleEvent(EVENT_THADDIUS_BERSERK, 6min); + events.ScheduleEvent(EVENT_THADDIUS_POLARITY_SHIFT, 30s); + events.ScheduleEvent(EVENT_ALLOW_BALL_LIGHTNING, 5s); return; case EVENT_THADDIUS_BERSERK: me->CastSpell(me, SPELL_BERSERK, true); break; case EVENT_THADDIUS_CHAIN_LIGHTNING: me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25), false); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_THADDIUS_POLARITY_SHIFT: me->CastSpell(me, SPELL_POLARITY_SHIFT, false); - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_ALLOW_BALL_LIGHTNING: ballLightningEnabled = true; @@ -423,19 +423,19 @@ public: } if (me->GetEntry() == NPC_STALAGG) { - events.ScheduleEvent(EVENT_MINION_POWER_SURGE, 10000); + events.ScheduleEvent(EVENT_MINION_POWER_SURGE, 10s); Talk(SAY_STAL_AGGRO); } else { - events.ScheduleEvent(EVENT_MINION_STATIC_FIELD, 5000); + events.ScheduleEvent(EVENT_MINION_STATIC_FIELD, 5s); Talk(SAY_FEUG_AGGRO); } - events.ScheduleEvent(EVENT_MINION_CHECK_DISTANCE, 5000); + events.ScheduleEvent(EVENT_MINION_CHECK_DISTANCE, 5s); if (me->GetEntry() == NPC_STALAGG) // This event needs synchronisation, called for stalagg only { - events.ScheduleEvent(EVENT_MINION_MAGNETIC_PULL, 20000); + events.ScheduleEvent(EVENT_MINION_MAGNETIC_PULL, 20s); } if (pInstance) { @@ -538,14 +538,14 @@ public: { case EVENT_MINION_POWER_SURGE: me->CastSpell(me, RAID_MODE(SPELL_POWER_SURGE_10, SPELL_POWER_SURGE_25), false); - events.RepeatEvent(19000); + events.Repeat(19s); break; case EVENT_MINION_STATIC_FIELD: me->CastSpell(me, RAID_MODE(SPELL_STATIC_FIELD_10, SPELL_STATIC_FIELD_25), false); - events.RepeatEvent(3000); + events.Repeat(3s); break; case EVENT_MINION_MAGNETIC_PULL: - events.RepeatEvent(20000); + events.Repeat(20s); if (pInstance) { if (Creature* feugen = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_FEUGEN_BOSS))) @@ -587,7 +587,7 @@ public: cr->CastStop(SPELL_TESLA_SHOCK); cr->CastSpell(target, SPELL_TESLA_SHOCK, true); } - events.RepeatEvent(1500); + events.Repeat(1500ms); break; } else @@ -596,7 +596,7 @@ public: cr->CastSpell(cr, me->GetEntry() == NPC_STALAGG ? SPELL_STALAGG_CHAIN : SPELL_FEUGEN_CHAIN, false); } } - events.RepeatEvent(5000); + events.Repeat(5s); break; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index d134cfeef..0a762318f 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -855,7 +855,7 @@ public: { go->SetGoState(GO_STATE_ACTIVE); } - events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6000); + events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6s); break; case BOSS_ANUB: if (GameObject* go = instance->GetGameObject(_anubGateGUID)) @@ -895,7 +895,7 @@ public: { go->SetGoState(GO_STATE_ACTIVE); } - events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6000); + events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6s); break; case BOSS_GOTHIK: if (GameObject* go = instance->GetGameObject(_gothikEnterGateGUID)) @@ -912,7 +912,7 @@ public: } break; case BOSS_SAPPHIRON: - events.ScheduleEvent(EVENT_FROSTWYRM_WATERFALL_DOOR, 5000); + events.ScheduleEvent(EVENT_FROSTWYRM_WATERFALL_DOOR, 5s); break; case BOSS_THADDIUS: if (GameObject* go = instance->GetGameObject(_thaddiusPortalGUID)) @@ -928,7 +928,7 @@ public: { go->SetGoState(GO_STATE_ACTIVE); } - events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6000); + events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6s); break; case BOSS_HORSEMAN: if (GameObject* go = instance->GetGameObject(_horsemanPortalGUID)) @@ -944,7 +944,7 @@ public: { go->SetGoState(GO_STATE_ACTIVE); } - events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6000); + events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, 6s); break; default: break; diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index e55cb263e..67871841c 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -267,21 +267,21 @@ public: break; case MI_POINT_INTRO_CENTER_AIR: - events.RescheduleEvent(EVENT_INTRO_LAND, 0, 1); + events.RescheduleEvent(EVENT_INTRO_LAND, 0ms, 1); break; case MI_POINT_VORTEX_CENTER: if (Creature* c = me->SummonCreature(NPC_WORLD_TRIGGER_LAOI, CenterPos, TEMPSUMMON_TIMED_DESPAWN, 15000)) c->CastSpell(c, SPELL_VORTEX_VISUAL, true); - events.RescheduleEvent(EVENT_START_VORTEX_REAL, 1000, 1); + events.RescheduleEvent(EVENT_START_VORTEX_REAL, 1s, 1); break; case MI_POINT_CENTER_GROUND_PH_2: - events.RescheduleEvent(EVENT_START_PHASE_2_FLY_UP, 0, 1); + events.RescheduleEvent(EVENT_START_PHASE_2_FLY_UP, 0ms, 1); break; case MI_POINT_CIRCLE_OUTSIDE_PH_2: - events.RescheduleEvent(EVENT_RESUME_FLYING_CIRCLES_PH_2, 0, 1); + events.RescheduleEvent(EVENT_RESUME_FLYING_CIRCLES_PH_2, 0ms, 1); break; case MI_POINT_SURGE_OF_POWER_CENTER: - events.RescheduleEvent(EVENT_SURGE_OF_POWER_WARNING, 0, 1); + events.RescheduleEvent(EVENT_SURGE_OF_POWER_WARNING, 0ms, 1); break; } } @@ -291,20 +291,20 @@ public: { case MI_POINT_INTRO_LAND: me->SetDisableGravity(false); - events.RescheduleEvent(EVENT_START_FIGHT, 0, 1); + events.RescheduleEvent(EVENT_START_FIGHT, 0ms, 1); break; case MI_POINT_VORTEX_TAKEOFF: - events.RescheduleEvent(EVENT_VORTEX_FLY_TO_CENTER, 0, 1); + events.RescheduleEvent(EVENT_VORTEX_FLY_TO_CENTER, 0ms, 1); break; case MI_POINT_VORTEX_LAND: me->SetDisableGravity(false); - events.RescheduleEvent(EVENT_VORTEX_LAND_1, 0, 1); + events.RescheduleEvent(EVENT_VORTEX_LAND_1, 0ms, 1); break; case MI_POINT_CENTER_AIR_PH_2: me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_ARCANE_RUNES, 5s); break; case MI_POINT_PH_3_FIGHT_POSITION: - events.RescheduleEvent(EVENT_START_PHASE_3, 6000, 1); + events.RescheduleEvent(EVENT_START_PHASE_3, 6s, 1); break; } } @@ -330,7 +330,7 @@ public: Talk(SAY_PHASE_1); - events.RescheduleEvent(EVENT_INTRO_MOVE_CENTER, 0, 1); + events.RescheduleEvent(EVENT_INTRO_MOVE_CENTER, 0ms, 1); if (pInstance) pInstance->SetData(DATA_ENCOUNTER_STATUS, IN_PROGRESS); } @@ -365,7 +365,7 @@ public: if (!bLockHealthCheck && me->HealthBelowPctDamaged(50, damage)) { bLockHealthCheck = true; - events.RescheduleEvent(EVENT_START_PHASE_2, 0, 1); + events.RescheduleEvent(EVENT_START_PHASE_2, 0ms, 1); } } @@ -425,20 +425,20 @@ public: } events.SetPhase(PHASE_ONE); - events.RescheduleEvent(EVENT_BERSERK, 600000, 0); - events.RescheduleEvent(EVENT_SPELL_ARCANE_BREATH, urand(9000, 12000), 1); - events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, urand(2000, 5000), 1); - events.RescheduleEvent(EVENT_SUMMON_POWER_SPARK, urand(10000, 15000), 1); - events.RescheduleEvent(EVENT_START_VORTEX_0, 30000, 1); + events.RescheduleEvent(EVENT_BERSERK, 10min, 0); + events.RescheduleEvent(EVENT_SPELL_ARCANE_BREATH, 9s, 12s, 1); + events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, 2s, 5s, 1); + events.RescheduleEvent(EVENT_SUMMON_POWER_SPARK, 10s, 15s, 1); + events.RescheduleEvent(EVENT_START_VORTEX_0, 30s, 1); break; } case EVENT_SPELL_ARCANE_BREATH: me->CastSpell(me->GetVictim(), SPELL_ARCANE_BREATH, false); - events.RepeatEvent(urand(12000, 15000)); + events.Repeat(12s, 15s); break; case EVENT_SPELL_ARCANE_STORM: me->CastCustomSpell(SPELL_ARCANE_STORM, SPELLVALUE_MAX_TARGETS, DUNGEON_MODE(5, 12), me, true); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; case EVENT_SUMMON_POWER_SPARK: { @@ -451,7 +451,7 @@ public: c->AI()->Talk(EMOTE_POWER_SPARK); } - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); } break; case EVENT_START_VORTEX_0: @@ -544,7 +544,7 @@ public: } } - events.RescheduleEvent(EVENT_VORTEX_LAND_0, 11000, 1); + events.RescheduleEvent(EVENT_VORTEX_LAND_0, 11s, 1); break; } case EVENT_VORTEX_LAND_0: @@ -562,7 +562,7 @@ public: AttackStart(target); me->GetMotionMaster()->MoveChase(target); } - events.RescheduleEvent(EVENT_START_VORTEX_0, 60000, 1); + events.RescheduleEvent(EVENT_START_VORTEX_0, 60s, 1); break; } case EVENT_START_PHASE_2: @@ -583,17 +583,17 @@ public: me->DisableSpline(); me->SetDisableGravity(true); me->GetMotionMaster()->MoveTakeoff(MI_POINT_CENTER_AIR_PH_2, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 32.0f, 7.0f); - events.RescheduleEvent(EVENT_START_PHASE_2_MOVE_TO_SIDE, 22500, 1); + events.RescheduleEvent(EVENT_START_PHASE_2_MOVE_TO_SIDE, 22s + 500ms, 1); break; } case EVENT_START_PHASE_2_MOVE_TO_SIDE: Talk(SAY_PHASE_2); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED); me->GetMotionMaster()->MovePoint(MI_POINT_CIRCLE_OUTSIDE_PH_2, Phase2NorthPos); - events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, urand(12000, 15000), 1); - events.RescheduleEvent(EVENT_SPELL_ARCANE_OVERLOAD, 8000, 1); - events.RescheduleEvent(EVENT_MOVE_TO_SURGE_OF_POWER, 55000, 1); - events.RescheduleEvent(EVENT_CHECK_TRASH_DEAD, 3000, 1); + events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, 12s, 15s, 1); + events.RescheduleEvent(EVENT_SPELL_ARCANE_OVERLOAD, 8s, 1); + events.RescheduleEvent(EVENT_MOVE_TO_SURGE_OF_POWER, 55s, 1); + events.RescheduleEvent(EVENT_CHECK_TRASH_DEAD, 3s, 1); for (int i = 0; i < MAX_NEXUS_LORDS; i++) { @@ -629,8 +629,8 @@ public: float posy = CenterPos.GetPositionY() + std::sin(angle) * dist; me->SetFacingTo(me->GetAngle(posx, posy)); me->CastSpell(posx, posy, CenterPos.GetPositionZ() + 1.5f, SPELL_ARCANE_OVERLOAD, true); - events.RepeatEvent(15000); - events.RescheduleEvent(EVENT_RESUME_FLYING_CIRCLES_PH_2, 3000, 1); + events.Repeat(15s); + events.RescheduleEvent(EVENT_RESUME_FLYING_CIRCLES_PH_2, 3s, 1); } break; case EVENT_RESUME_FLYING_CIRCLES_PH_2: @@ -654,18 +654,18 @@ public: break; case EVENT_SURGE_OF_POWER_WARNING: Talk(EMOTE_SURGE_OF_POWER_WARNING_P2); - events.RescheduleEvent(EVENT_SPELL_SURGE_OF_POWER, 1500, 1); + events.RescheduleEvent(EVENT_SPELL_SURGE_OF_POWER, 1500ms, 1); break; case EVENT_SPELL_SURGE_OF_POWER: if (Creature* c = me->SummonCreature(NPC_SURGE_OF_POWER, CenterPos, TEMPSUMMON_TIMED_DESPAWN, 10000)) me->CastSpell(c, SPELL_SURGE_OF_POWER, false); Talk(SAY_SURGE_OF_POWER); - events.RescheduleEvent(EVENT_CLEAR_TARGET, 10000, 1); - events.RescheduleEvent(EVENT_RESUME_FLYING_CIRCLES_PH_2, 10000, 1); - events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, urand(17000, 25000), 1); - events.RescheduleEvent(EVENT_SPELL_ARCANE_OVERLOAD, 16000, 1); - events.RescheduleEvent(EVENT_MOVE_TO_SURGE_OF_POWER, 55000 + 10000, 1); - events.RescheduleEvent(EVENT_CHECK_TRASH_DEAD, 3000, 1); + events.RescheduleEvent(EVENT_CLEAR_TARGET, 10s, 1); + events.RescheduleEvent(EVENT_RESUME_FLYING_CIRCLES_PH_2, 10s, 1); + events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, 17s, 25s, 1); + events.RescheduleEvent(EVENT_SPELL_ARCANE_OVERLOAD, 16s, 1); + events.RescheduleEvent(EVENT_MOVE_TO_SURGE_OF_POWER, 65s, 1); + events.RescheduleEvent(EVENT_CHECK_TRASH_DEAD, 3s, 1); break; case EVENT_CLEAR_TARGET: me->SendMeleeAttackStop(); @@ -687,8 +687,8 @@ public: me->GetMotionMaster()->MoveIdle(); me->StopMoving(); me->GetMotionMaster()->MovePoint(MI_POINT_START_PH_3, CenterPos.GetPositionX(), CenterPos.GetPositionY(), CenterPos.GetPositionZ() + 70.0f); - events.RescheduleEvent(EVENT_LIGHT_DIMENSION_CHANGE, 1000, 1); - events.RescheduleEvent(EVENT_DESTROY_PLATFORM_0, 10000, 1); + events.RescheduleEvent(EVENT_LIGHT_DIMENSION_CHANGE, 1s, 1); + events.RescheduleEvent(EVENT_DESTROY_PLATFORM_0, 10s, 1); } } break; @@ -703,7 +703,7 @@ public: c->CastSpell(c, SPELL_DESTROY_PLATFORM_EFFECT, false); } me->GetMap()->SetZoneOverrideLight(AREA_EYE_OF_ETERNITY, LIGHT_OBSCURE_SPACE, 1s); - events.RescheduleEvent(EVENT_MOVE_TO_PHASE_3_POSITION, 2000, 1); + events.RescheduleEvent(EVENT_MOVE_TO_PHASE_3_POSITION, 2s, 1); break; case EVENT_MOVE_TO_PHASE_3_POSITION: { @@ -733,7 +733,7 @@ public: } } - events.RescheduleEvent(EVENT_SAY_PHASE_3_INTRO, 3000, 1); + events.RescheduleEvent(EVENT_SAY_PHASE_3_INTRO, 3s, 1); } break; case EVENT_SAY_PHASE_3_INTRO: @@ -746,14 +746,14 @@ public: me->SetUnitFlag(UNIT_FLAG_PACIFIED | UNIT_FLAG_DISABLE_MOVE); if (Unit* target = me->GetVictim()) AttackStart(target); - events.RescheduleEvent(EVENT_SPELL_ARCANE_PULSE, 0, 1); - events.RescheduleEvent(EVENT_SPELL_STATIC_FIELD, urand(1000, 4000), 1); - events.RescheduleEvent(EVENT_SPELL_PH3_SURGE_OF_POWER, urand(4000, 7000), 1); - events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, urand(12000, 15000), 1); + events.RescheduleEvent(EVENT_SPELL_ARCANE_PULSE, 0ms, 1); + events.RescheduleEvent(EVENT_SPELL_STATIC_FIELD, 1s, 4s, 1); + events.RescheduleEvent(EVENT_SPELL_PH3_SURGE_OF_POWER, 4s, 7s, 1); + events.RescheduleEvent(EVENT_SPELL_ARCANE_STORM, 12s, 15s, 1); break; case EVENT_SPELL_ARCANE_PULSE: me->CastSpell(me, SPELL_ARCANE_PULSE, true); - events.RepeatEvent(3000); + events.Repeat(3s); break; case EVENT_SPELL_STATIC_FIELD: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 200.0f, false)) @@ -761,11 +761,11 @@ public: me->SetFacingToObject(target); me->CastSpell(target, SPELL_STATIC_FIELD_MAIN, true); } - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_SPELL_PH3_SURGE_OF_POWER: me->CastSpell((Unit*)nullptr, SPELL_PH3_SURGE_OF_POWER, false); - events.RepeatEvent(7000); + events.Repeat(7s); break; } @@ -1080,7 +1080,7 @@ public: pInstance = me->GetInstanceScript(); timer = 0; events.Reset(); - events.RescheduleEvent(EVENT_TELEPORT_VISUAL, 0); + events.RescheduleEvent(EVENT_TELEPORT_VISUAL, 0ms); } InstanceScript* pInstance; @@ -1091,8 +1091,8 @@ public: { DoZoneInCombat(); events.Reset(); - events.RescheduleEvent(EVENT_NEXUS_LORD_ARCANE_SHOCK, urand(3000, 10000)); - events.RescheduleEvent(EVENT_NEXUS_LORD_HASTE, urand(8000, 14000)); + events.RescheduleEvent(EVENT_NEXUS_LORD_ARCANE_SHOCK, 3s, 10s); + events.RescheduleEvent(EVENT_NEXUS_LORD_HASTE, 8s, 14s); } void AttackStart(Unit* victim) override @@ -1136,11 +1136,11 @@ public: case EVENT_NEXUS_LORD_ARCANE_SHOCK: if (Unit* victim = me->GetVictim()) me->CastSpell(victim, SPELL_ARCANE_SHOCK); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; case EVENT_NEXUS_LORD_HASTE: me->CastSpell(me, SPELL_HASTE); - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); break; } @@ -1172,8 +1172,8 @@ public: me->SetReactState(REACT_PASSIVE); pInstance = me->GetInstanceScript(); events.Reset(); - events.RescheduleEvent(EVENT_TELEPORT_VISUAL, 0); - events.RescheduleEvent(EVENT_SCION_OF_ETERNITY_ARCANE_BARRAGE, urand(20000, 25000)); + events.RescheduleEvent(EVENT_TELEPORT_VISUAL, 0ms); + events.RescheduleEvent(EVENT_SCION_OF_ETERNITY_ARCANE_BARRAGE, 20s, 25s); } InstanceScript* pInstance; @@ -1213,7 +1213,7 @@ public: if (Player* plr = ObjectAccessor::GetPlayer(*me, guids.at(urand(0, guids.size() - 1)))) me->CastSpell(plr, SPELL_SCION_ARCANE_BARRAGE); - events.RepeatEvent(urand(5000, 8000)); + events.Repeat(5s, 8s); } break; } @@ -1305,11 +1305,11 @@ public: switch (id) { case MI_POINT_SCION: - events.RescheduleEvent(EVENT_DISK_MOVE_NEXT_POINT, 0); + events.RescheduleEvent(EVENT_DISK_MOVE_NEXT_POINT, 0ms); break; case MI_POINT_NEXUS_LORD: if (me->GetPositionZ() > CenterPos.GetPositionZ() + 2.0f) - events.RescheduleEvent(EVENT_DISK_MOVE_NEXT_POINT, 0); + events.RescheduleEvent(EVENT_DISK_MOVE_NEXT_POINT, 0ms); else if (Vehicle* v = me->GetVehicleKit()) if (Unit* pass = v->GetPassenger(0)) if (Creature* c = pass->ToCreature()) @@ -1390,7 +1390,7 @@ public: npc_alexstraszaAI(Creature* pCreature) : ScriptedAI(pCreature) { events.Reset(); - events.ScheduleEvent(1, 9000); + events.ScheduleEvent(1, 9s); me->SetCanFly(true); me->SetDisableGravity(true); } @@ -1417,15 +1417,15 @@ public: } Talk(SAY_ALEXSTRASZA_ONE); - events.RescheduleEvent(2, 6000); + events.RescheduleEvent(2, 6s); break; case 2: Talk(SAY_ALEXSTRASZA_TWO); - events.RescheduleEvent(3, 5000); + events.RescheduleEvent(3, 5s); break; case 3: Talk(SAY_ALEXSTRASZA_THREE); - events.RescheduleEvent(4, 22000); + events.RescheduleEvent(4, 22s); break; case 4: Talk(SAY_ALEXSTRASZA_FOUR); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index 19e29bfef..e9a3c2d71 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -127,11 +127,11 @@ public: activeRifts = 0; events.SetTimer(45000); - events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5000); - events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1000); - events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000); + events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5s); + events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1s); + events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s); if (IsHeroic()) - events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 8000); + events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 8s); } void JustDied(Unit* killer) override @@ -154,22 +154,22 @@ public: { case EVENT_ANOMALUS_SPARK: me->CastSpell(me->GetVictim(), SPELL_SPARK, false); - events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5000); + events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5s); break; case EVENT_ANOMALUS_HEALTH: if (me->HealthBelowPct(51)) { //First time we reach 51%, the next rift going to be empowered following timings. events.CancelEvent(EVENT_ANOMALUS_SPAWN_RIFT); - events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED, 1000); + events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED, 1s); break; } - events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1000); + events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1s); break; case EVENT_ANOMALUS_ARCANE_ATTRACTION: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) me->CastSpell(target, SPELL_ARCANE_ATTRACTION, false); - events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 15000); + events.ScheduleEvent(EVENT_ANOMALUS_ARCANE_ATTRACTION, 15s); break; case EVENT_ANOMALUS_SPAWN_RIFT: Talk(SAY_RIFT); @@ -185,9 +185,9 @@ public: me->CastSpell(me, SPELL_CREATE_RIFT, false); me->CastSpell(me, SPELL_RIFT_SHIELD, true); me->m_Events.AddEvent(new ChargeRifts(me), me->m_Events.CalculateTime(1000)); - events.DelayEvents(46000); + events.DelayEvents(46s); //As we just spawned an empowered spawn a normal one - events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000); + events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s); break; } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp index 0532fb783..3efb78ed4 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard_kolurg.cpp @@ -69,10 +69,10 @@ public: BossAI::JustEngagedWith(who); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_BATTLE_SHOUT, 0); - events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 10000); - events.ScheduleEvent(EVENT_WHIRLWIND, 15000); - events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 1000); + events.ScheduleEvent(EVENT_BATTLE_SHOUT, 0ms); + events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 10s); + events.ScheduleEvent(EVENT_WHIRLWIND, 15s); + events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 1s); me->RemoveAllAuras(); } @@ -81,7 +81,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -104,20 +104,20 @@ public: { case EVENT_BATTLE_SHOUT: me->CastSpell(me, SPELL_BATTLE_SHOUT, true); - events.ScheduleEvent(EVENT_BATTLE_SHOUT, 120000); + events.ScheduleEvent(EVENT_BATTLE_SHOUT, 2min); break; case EVENT_FRIGHTENING_SHOUT: me->CastSpell(me->GetVictim(), SPELL_FRIGHTENING_SHOUT, false); - events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(15000, 20000)); + events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 15s, 20s); break; case EVENT_WHIRLWIND: me->CastSpell(me, SPELL_WHIRLWIND, false); - events.ScheduleEvent(EVENT_WHIRLWIND, 16000); + events.ScheduleEvent(EVENT_WHIRLWIND, 16s); break; case EVENT_COMMANDER_CHARGE: if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 25.0f)) me->CastSpell(target, SPELL_CHARGE, false); - events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 20000); + events.ScheduleEvent(EVENT_COMMANDER_CHARGE, 20s); break; } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index 222468e47..6c5dfe95e 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -83,11 +83,11 @@ public: BossAI::JustEngagedWith(who); me->CastSpell(me, SPELL_INTENSE_COLD, true); - events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14000); + events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14s); events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20000, 11000)); - events.ScheduleEvent(EVENT_TAIL_SWEEP, 5000); - events.ScheduleEvent(EVENT_HEALTH_CHECK, 1000); - events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 1000); + events.ScheduleEvent(EVENT_TAIL_SWEEP, 5s); + events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); + events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 1s); } void JustDied(Unit* killer) override @@ -101,7 +101,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_SLAY); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -157,7 +157,7 @@ public: me->CastSpell(me, SPELL_ENRAGE, true); break; } - events.ScheduleEvent(EVENT_HEALTH_CHECK, 1000); + events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); break; case EVENT_ACHIEVEMENT_CHECK: { @@ -166,16 +166,16 @@ public: if (Aura* aur = itr->GetSource()->GetAura(SPELL_INTENSE_COLD_TRIGGER)) if (aur->GetStackAmount() > 2) aGuids.insert(itr->GetSource()->GetGUID().GetCounter()); - events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 500); + events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 500ms); break; } case EVENT_CRYSTALFIRE_BREATH: me->CastSpell(me->GetVictim(), SPELL_CRYSTALFIRE_BREATH, false); - events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14000); + events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14s); break; case EVENT_TAIL_SWEEP: me->CastSpell(me, SPELL_TAIL_SWEEP, false); - events.ScheduleEvent(EVENT_TAIL_SWEEP, 5000); + events.ScheduleEvent(EVENT_TAIL_SWEEP, 5s); break; case EVENT_CRYSTAL_CHAINS: Talk(SAY_CRYSTAL_NOVA); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index eb6c82fe6..8a6571759 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -114,12 +114,12 @@ public: BossAI::JustEngagedWith(who); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_MAGUS_ICE_NOVA, 10000); - events.ScheduleEvent(EVENT_MAGUS_FIREBOMB, 0); - events.ScheduleEvent(EVENT_MAGUS_GRAVITY_WELL, 20000); - events.ScheduleEvent(EVENT_MAGUS_HEALTH1, 1000); + events.ScheduleEvent(EVENT_MAGUS_ICE_NOVA, 10s); + events.ScheduleEvent(EVENT_MAGUS_FIREBOMB, 0ms); + events.ScheduleEvent(EVENT_MAGUS_GRAVITY_WELL, 20s); + events.ScheduleEvent(EVENT_MAGUS_HEALTH1, 1s); if (IsHeroic()) - events.ScheduleEvent(EVENT_MAGUS_HEALTH2, 1000); + events.ScheduleEvent(EVENT_MAGUS_HEALTH2, 1s); } void AttackStart(Unit* who) override @@ -139,7 +139,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -153,14 +153,14 @@ public: { if (spellInfo->Id >= SPELL_FIRE_MAGUS_DEATH && spellInfo->Id <= SPELL_ARCANE_MAGUS_DEATH && caster->ToCreature()) { - events.ScheduleEvent(EVENT_MAGUS_FAIL_ACHIEVEMENT, 5000); + events.ScheduleEvent(EVENT_MAGUS_FAIL_ACHIEVEMENT, 5s); caster->ToCreature()->DespawnOrUnsummon(1000); if (++copiesDied >= 3) { copiesDied = 0; events.CancelEvent(EVENT_MAGUS_FAIL_ACHIEVEMENT); - events.ScheduleEvent(EVENT_MAGUS_MERGED, 5000); + events.ScheduleEvent(EVENT_MAGUS_MERGED, 5s); me->CastSpell(me, SPELL_BURNING_WINDS, true); } } @@ -181,34 +181,34 @@ public: if (me->HealthBelowPct(51)) { me->CastSpell(me, SPELL_START_SUMMON_CLONES, false); - events.ScheduleEvent(EVENT_MAGUS_RELOCATE, 3500); + events.ScheduleEvent(EVENT_MAGUS_RELOCATE, 3500ms); Talk(SAY_SPLIT); break; } - events.ScheduleEvent(EVENT_MAGUS_HEALTH1, 1000); + events.ScheduleEvent(EVENT_MAGUS_HEALTH1, 1s); break; case EVENT_MAGUS_HEALTH2: if (me->HealthBelowPct(11)) { me->CastSpell(me, SPELL_START_SUMMON_CLONES, false); - events.ScheduleEvent(EVENT_MAGUS_RELOCATE, 3500); + events.ScheduleEvent(EVENT_MAGUS_RELOCATE, 3500ms); Talk(SAY_SPLIT); break; } - events.ScheduleEvent(EVENT_MAGUS_HEALTH2, 1000); + events.ScheduleEvent(EVENT_MAGUS_HEALTH2, 1s); break; case EVENT_MAGUS_FIREBOMB: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_FIREBOMB, false); - events.ScheduleEvent(EVENT_MAGUS_FIREBOMB, 3000); + events.ScheduleEvent(EVENT_MAGUS_FIREBOMB, 3s); break; case EVENT_MAGUS_ICE_NOVA: me->CastSpell(me, SPELL_ICE_NOVA, false); - events.ScheduleEvent(EVENT_MAGUS_ICE_NOVA, 15000); + events.ScheduleEvent(EVENT_MAGUS_ICE_NOVA, 15s); break; case EVENT_MAGUS_GRAVITY_WELL: me->CastSpell(me, SPELL_GRAVITY_WELL, false); - events.ScheduleEvent(EVENT_MAGUS_GRAVITY_WELL, 15000); + events.ScheduleEvent(EVENT_MAGUS_GRAVITY_WELL, 15s); break; case EVENT_MAGUS_FAIL_ACHIEVEMENT: achievement = false; diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index 8eb88454f..0f883430c 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -88,12 +88,12 @@ public: Talk(SAY_AGGRO); BossAI::JustEngagedWith(who); - events.ScheduleEvent(EVENT_ORMOROK_CRYSTAL_SPIKES, 12000); - events.ScheduleEvent(EVENT_ORMOROK_TRAMPLE, 10000); - events.ScheduleEvent(EVENT_ORMOROK_SPELL_REFLECTION, 30000); - events.ScheduleEvent(EVENT_ORMOROK_HEALTH, 1000); + events.ScheduleEvent(EVENT_ORMOROK_CRYSTAL_SPIKES, 12s); + events.ScheduleEvent(EVENT_ORMOROK_TRAMPLE, 10s); + events.ScheduleEvent(EVENT_ORMOROK_SPELL_REFLECTION, 30s); + events.ScheduleEvent(EVENT_ORMOROK_HEALTH, 1s); if (IsHeroic()) - events.ScheduleEvent(EVENT_ORMOROK_SUMMON, 17000); + events.ScheduleEvent(EVENT_ORMOROK_SUMMON, 17s); } void JustDied(Unit* killer) override @@ -107,7 +107,7 @@ public: if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) { Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); + events.ScheduleEvent(EVENT_KILL_TALK, 6s); } } @@ -134,28 +134,28 @@ public: Talk(EMOTE_FRENZY); break; } - events.ScheduleEvent(EVENT_ORMOROK_HEALTH, 1000); + events.ScheduleEvent(EVENT_ORMOROK_HEALTH, 1s); break; case EVENT_ORMOROK_TRAMPLE: me->CastSpell(me, SPELL_TRAMPLE, false); - events.ScheduleEvent(EVENT_ORMOROK_TRAMPLE, 10000); + events.ScheduleEvent(EVENT_ORMOROK_TRAMPLE, 10s); break; case EVENT_ORMOROK_SPELL_REFLECTION: Talk(SAY_REFLECT); me->CastSpell(me, SPELL_SPELL_REFLECTION, false); - events.ScheduleEvent(EVENT_ORMOROK_SPELL_REFLECTION, 30000); + events.ScheduleEvent(EVENT_ORMOROK_SPELL_REFLECTION, 30s); break; case EVENT_ORMOROK_SUMMON: if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 50.0f, true)) me->CastSpell(target, SPELL_SUMMON_CRYSTALLINE_TANGLER, true); - events.ScheduleEvent(EVENT_ORMOROK_SUMMON, 17000); + events.ScheduleEvent(EVENT_ORMOROK_SUMMON, 17s); break; case EVENT_ORMOROK_CRYSTAL_SPIKES: Talk(SAY_CRYSTAL_SPIKES); me->CastSpell(me, SPELL_CRYSTAL_SPIKES, false); _spikesCount = 0; - events.ScheduleEvent(EVENT_ORMOROK_SUMMON_SPIKES, 300); - events.ScheduleEvent(EVENT_ORMOROK_CRYSTAL_SPIKES, 20000); + events.ScheduleEvent(EVENT_ORMOROK_SUMMON_SPIKES, 300ms); + events.ScheduleEvent(EVENT_ORMOROK_CRYSTAL_SPIKES, 20s); break; case EVENT_ORMOROK_SUMMON_SPIKES: if (++_spikesCount > 9) @@ -170,7 +170,7 @@ public: if (h != INVALID_HEIGHT) me->SummonCreature(NPC_CRYSTAL_SPIKE, x, y, h, 0, TEMPSUMMON_TIMED_DESPAWN, 7000); } - events.ScheduleEvent(EVENT_ORMOROK_SUMMON_SPIKES, 200); + events.ScheduleEvent(EVENT_ORMOROK_SUMMON_SPIKES, 200ms); break; } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp index 1111c6fc4..b39666efd 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_drakos.cpp @@ -92,9 +92,9 @@ public: me->SetInCombatWithZone(); - events.RescheduleEvent(EVENT_MAGIC_PULL, urand(10000, 15000)); - events.RescheduleEvent(EVENT_THUNDERING_STOMP, urand(3000, 6000)); - events.RescheduleEvent(EVENT_SUMMON, 2000); + events.RescheduleEvent(EVENT_MAGIC_PULL, 10s, 15s); + events.RescheduleEvent(EVENT_THUNDERING_STOMP, 3s, 6s); + events.RescheduleEvent(EVENT_SUMMON, 2s); } void JustDied(Unit* /*killer*/) override @@ -145,8 +145,8 @@ public: //me->TextEmote(TEXT_MAGIC_PULL, nullptr, true); me->CastSpell(me, SPELL_MAGIC_PULL, false); - events.RepeatEvent(urand(15000, 25000)); - events.ScheduleEvent(EVENT_SUMMON_x4, 1500); + events.Repeat(15s, 25s); + events.ScheduleEvent(EVENT_SUMMON_x4, 1500ms); } break; case EVENT_THUNDERING_STOMP: @@ -154,7 +154,7 @@ public: Talk(SAY_STOMP); me->CastSpell(me, SPELL_THUNDERING_STOMP, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); } break; case EVENT_SUMMON: @@ -164,7 +164,7 @@ public: float angle = rand_norm() * 2 * M_PI; me->SummonCreature(NPC_UNSTABLE_SPHERE, me->GetPositionX() + 5.0f * cos(angle), me->GetPositionY() + 5.0f * std::sin(angle), me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 18000); } - events.RepeatEvent(2000); + events.Repeat(2s); } break; case EVENT_SUMMON_x4: diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index 1fd69434a..593f2546a 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -129,10 +129,10 @@ public: shiftNumber = 0; - events.RescheduleEvent(EVENT_SPELL_ARCANE_BARRAGE, 0); - events.RescheduleEvent(EVENT_SPELL_ARCANE_VOLLEY, 5000); - events.RescheduleEvent(EVENT_SPELL_ENRAGED_ASSAULT, 35000); - events.RescheduleEvent(EVENT_SUMMON_WHELPS, 40000); + events.RescheduleEvent(EVENT_SPELL_ARCANE_BARRAGE, 0ms); + events.RescheduleEvent(EVENT_SPELL_ARCANE_VOLLEY, 5s); + events.RescheduleEvent(EVENT_SPELL_ENRAGED_ASSAULT, 35s); + events.RescheduleEvent(EVENT_SUMMON_WHELPS, 40s); } void JustDied(Unit* /*killer*/) override @@ -153,7 +153,7 @@ public: if( shiftNumber <= uint32(1) && uint32(me->GetHealth() * 100 / me->GetMaxHealth()) <= uint32(60 - shiftNumber * 40) ) { ++shiftNumber; - events.RescheduleEvent(EVENT_SPELL_PLANAR_SHIFT, 0); + events.RescheduleEvent(EVENT_SPELL_PLANAR_SHIFT, 0ms); } } @@ -194,21 +194,21 @@ public: case EVENT_SPELL_ARCANE_BARRAGE: if( Unit* v = me->GetVictim() ) me->CastSpell(v, SPELL_ARCANE_BARRAGE, false); - events.RepeatEvent(2500); + events.Repeat(2500ms); break; case EVENT_SPELL_ARCANE_VOLLEY: me->CastSpell(me, SPELL_ARCANE_VOLLEY, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; case EVENT_SPELL_ENRAGED_ASSAULT: Talk(SAY_ENRAGE); me->CastSpell(me, SPELL_ENRAGED_ASSAULT, false); - events.RepeatEvent(35000); + events.Repeat(35s); break; case EVENT_SUMMON_WHELPS: for( uint8 i = 0; i < 5; ++i ) events.ScheduleEvent(EVENT_SUMMON_SINGLE_WHELP, urand(0, 8000)); - events.RepeatEvent(40000); + events.Repeat(40s); break; case EVENT_SUMMON_SINGLE_WHELP: { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index b811c96ec..39d9adebb 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -159,9 +159,9 @@ public: if( me->FindCurrentSpellBySpellId(SPELL_EVOCATION) ) me->InterruptNonMeleeSpells(false); - events.RescheduleEvent(EVENT_FROSTBOMB, urand(7000, 11000)); - events.RescheduleEvent(EVENT_TELEPORT_TO_CENTER, urand(30000, 35000)); - events.RescheduleEvent(EVENT_TIME_BOMB, urand(20000, 25000)); + events.RescheduleEvent(EVENT_FROSTBOMB, 7s, 11s); + events.RescheduleEvent(EVENT_TELEPORT_TO_CENTER, 30s, 35s); + events.RescheduleEvent(EVENT_TIME_BOMB, 20s, 25s); } else { @@ -332,20 +332,20 @@ public: case EVENT_FROSTBOMB: if( Unit* v = me->GetVictim() ) me->CastSpell(v, SPELL_FROSTBOMB, false); - events.RepeatEvent(urand(7000, 11000)); + events.Repeat(7s, 11s); break; case EVENT_TIME_BOMB: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true) ) DoCast(target, DUNGEON_MODE(SPELL_TIME_BOMB_N, SPELL_TIME_BOMB_H)); - events.RepeatEvent(urand(20000, 25000)); + events.Repeat(20s, 25s); break; case EVENT_TELEPORT_TO_CENTER: x = me->GetPositionX(); y = me->GetPositionY(); z = me->GetPositionZ(); me->CastSpell(me, SPELL_TELEPORT, false); - events.RepeatEvent(urand(25000, 30000)); - events.DelayEvents(10000); + events.Repeat(25s, 30s); + events.DelayEvents(10s); break; case EVENT_TELE_BACK: me->GetMotionMaster()->MoveIdle(); diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index 66717beb9..deaf65ff1 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -129,9 +129,9 @@ public: me->SetInCombatWithZone(); - events.RescheduleEvent(EVENT_AMPLIFY_MAGIC, urand(5000, 10000)); - events.RescheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_1, 5000); - events.RescheduleEvent(EVENT_ENERGIZE_CORES_THIN, 0); + events.RescheduleEvent(EVENT_AMPLIFY_MAGIC, 5s, 10s); + events.RescheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_1, 5s); + events.RescheduleEvent(EVENT_ENERGIZE_CORES_THIN, 0ms); } void JustDied(Unit* /*killer*/) override @@ -175,7 +175,7 @@ public: { if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true) ) me->CastSpell(target, SPELL_AMPLIFY_MAGIC, false); - events.RepeatEvent(urand(17500, 22500)); + events.Repeat(17s + 500ms, 22s + 500ms); } break; case EVENT_CALL_AZURE_RING_CAPTAIN_1: @@ -189,19 +189,19 @@ public: { case EVENT_CALL_AZURE_RING_CAPTAIN_1: me->CastSpell(me, SPELL_CALL_AZURE_RING_CAPTAIN_1, true); - events.ScheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_2, 16000); + events.ScheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_2, 16s); break; case EVENT_CALL_AZURE_RING_CAPTAIN_2: me->CastSpell(me, SPELL_CALL_AZURE_RING_CAPTAIN_2, true); - events.ScheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_3, 16000); + events.ScheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_3, 16s); break; case EVENT_CALL_AZURE_RING_CAPTAIN_3: me->CastSpell(me, SPELL_CALL_AZURE_RING_CAPTAIN_3, true); - events.ScheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_4, 16000); + events.ScheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_4, 16s); break; case EVENT_CALL_AZURE_RING_CAPTAIN_4: me->CastSpell(me, SPELL_CALL_AZURE_RING_CAPTAIN_4, true); - events.ScheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_1, 16000); + events.ScheduleEvent(EVENT_CALL_AZURE_RING_CAPTAIN_1, 16s); break; } if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true) ) @@ -222,7 +222,7 @@ public: me->DisableRotate(false); me->SetOrientation(ZapAngle); me->CastSpell(me, SPELL_ENERGIZE_CORES_THIN, true); - events.ScheduleEvent(EVENT_ENERGIZE_CORES_DAMAGE, 4500); + events.ScheduleEvent(EVENT_ENERGIZE_CORES_DAMAGE, 4500ms); } break; case EVENT_ENERGIZE_CORES_DAMAGE: @@ -236,7 +236,7 @@ public: ZapAngle += M_PI / 2; if( ZapAngle >= 2 * M_PI ) ZapAngle -= 2 * M_PI; - events.ScheduleEvent(EVENT_ENERGIZE_CORES_THIN, 2000); + events.ScheduleEvent(EVENT_ENERGIZE_CORES_THIN, 2s); } break; } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index 893643883..f3a92aad9 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -171,22 +171,22 @@ public: me->SetInCombatWithZone(); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_BJARNGRIM_CHANGE_STANCE, 20000, 0); + events.ScheduleEvent(EVENT_BJARNGRIM_CHANGE_STANCE, 20s, 0); // DEFENSIVE STANCE - events.ScheduleEvent(EVENT_BJARNGRIM_REFLECTION, 8000, STANCE_DEFENSIVE); - events.ScheduleEvent(EVENT_BJARNGRIM_PUMMEL, 5000, STANCE_DEFENSIVE); - events.ScheduleEvent(EVENT_BJARNGRIM_KNOCK, 16000, STANCE_DEFENSIVE); - events.ScheduleEvent(EVENT_BJARNGRIM_IRONFORM, 12000, STANCE_DEFENSIVE); + events.ScheduleEvent(EVENT_BJARNGRIM_REFLECTION, 8s, STANCE_DEFENSIVE); + events.ScheduleEvent(EVENT_BJARNGRIM_PUMMEL, 5s, STANCE_DEFENSIVE); + events.ScheduleEvent(EVENT_BJARNGRIM_KNOCK, 16s, STANCE_DEFENSIVE); + events.ScheduleEvent(EVENT_BJARNGRIM_IRONFORM, 12s, STANCE_DEFENSIVE); // BERSERKER STANCE - events.ScheduleEvent(EVENT_BJARNGRIM_MORTAL_STRIKE, 20000 + 4000, STANCE_BERSERKER); - events.ScheduleEvent(EVENT_BJARNGRIM_WHIRLWIND, 20000 + 6000, STANCE_BERSERKER); + events.ScheduleEvent(EVENT_BJARNGRIM_MORTAL_STRIKE, 24s, STANCE_BERSERKER); + events.ScheduleEvent(EVENT_BJARNGRIM_WHIRLWIND, 26s, STANCE_BERSERKER); // BATTLE STANCE - events.ScheduleEvent(EVENT_BJARNGRIM_INTERCEPT, 20000 + 3000, STANCE_BATTLE); - events.ScheduleEvent(EVENT_BJARNGRIM_CLEAVE, 20000 + 5000, STANCE_BATTLE); - events.ScheduleEvent(EVENT_BJARNGRIM_SLAM, 20000 + 10000, STANCE_BATTLE); + events.ScheduleEvent(EVENT_BJARNGRIM_INTERCEPT, 23s, STANCE_BATTLE); + events.ScheduleEvent(EVENT_BJARNGRIM_CLEAVE, 25s, STANCE_BATTLE); + events.ScheduleEvent(EVENT_BJARNGRIM_SLAM, 30s, STANCE_BATTLE); if (m_pInstance) { @@ -311,7 +311,7 @@ public: // roll new stance RemoveStanceAura(m_uiStance); RollStance(m_uiStance); - events.RepeatEvent(20000); + events.Repeat(20s); break; /////////////////////////////////////////////////////// @@ -319,19 +319,19 @@ public: /////////////////////////////////////////////////////// case EVENT_BJARNGRIM_REFLECTION: me->CastSpell(me, SPELL_BJARNGRIM_REFLETION, true); - events.RepeatEvent(8000 + rand() % 1000); + events.Repeat(8s, 9s); break; case EVENT_BJARNGRIM_PUMMEL: me->CastSpell(me->GetVictim(), SPELL_PUMMEL, false); - events.RepeatEvent(10000 + rand() % 1000); + events.Repeat(10s, 11s); break; case EVENT_BJARNGRIM_KNOCK: me->CastSpell(me, SPELL_KNOCK_AWAY, false); - events.RepeatEvent(20000 + rand() % 1000); + events.Repeat(20s, 21s); break; case EVENT_BJARNGRIM_IRONFORM: me->CastSpell(me, SPELL_IRONFORM, true); - events.RepeatEvent(18000 + rand() % 5000); + events.Repeat(18s, 23s); break; /////////////////////////////////////////////////////// @@ -339,11 +339,11 @@ public: /////////////////////////////////////////////////////// case EVENT_BJARNGRIM_MORTAL_STRIKE: me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_BJARNGRIM_WHIRLWIND: me->CastSpell(me, SPELL_WHIRLWIND, true); - events.RepeatEvent(25000); + events.Repeat(25s); break; /////////////////////////////////////////////////////// @@ -353,15 +353,15 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random)) me->CastSpell(target, SPELL_INTERCEPT, true); - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_BJARNGRIM_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - events.RepeatEvent(25000); + events.Repeat(25s); break; case EVENT_BJARNGRIM_SLAM: me->CastSpell(me->GetVictim(), SPELL_SLAM, false); - events.RepeatEvent(10000 + rand() % 2000); + events.Repeat(10s, 12s); break; } @@ -397,8 +397,8 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_ARC_WELD, 2000); - events.ScheduleEvent(EVENT_RENEW_STEEL, 10000 + rand() % 1000); + events.ScheduleEvent(EVENT_ARC_WELD, 2s); + events.ScheduleEvent(EVENT_RENEW_STEEL, 10s, 11s); } void UpdateAI(uint32 diff) override @@ -416,14 +416,14 @@ public: { case EVENT_ARC_WELD: me->CastSpell(me->GetVictim(), SPELL_ARC_WELD, true); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_RENEW_STEEL: if (Creature* bjarngrim = ObjectAccessor::GetCreature(*me, BjarngrimGUID)) if (bjarngrim->IsAlive()) me->CastSpell(bjarngrim, me->GetMap()->IsHeroic() ? SPELL_RENEW_STEEL_H : SPELL_RENEW_STEEL_N, true); - events.RepeatEvent(10000 + rand() % 4000); + events.Repeat(10s, 14s); break; } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index 7dcc25eca..4a17a9542 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -106,10 +106,10 @@ public: { events.SetPhase(1); if (!spark) - events.RescheduleEvent(EVENT_CHECK_HEALTH, 1000, 0, 1); + events.RescheduleEvent(EVENT_CHECK_HEALTH, 1s, 0, 1); - events.RescheduleEvent(EVENT_BALL_LIGHTNING, 10000, 0, 1); - events.RescheduleEvent(EVENT_STATIC_OVERLOAD, 5000, 0, 1); + events.RescheduleEvent(EVENT_BALL_LIGHTNING, 10s, 0, 1); + events.RescheduleEvent(EVENT_STATIC_OVERLOAD, 5s, 0, 1); } void JustEngagedWith(Unit*) override @@ -171,7 +171,7 @@ public: me->SetControlled(true, UNIT_STATE_STUNNED); events.SetPhase(2); - events.ScheduleEvent(EVENT_CALL_SPARKS, 15000, 0, 2); + events.ScheduleEvent(EVENT_CALL_SPARKS, 15s, 0, 2); } void UpdateAI(uint32 diff) override @@ -190,25 +190,25 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random)) me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_BALL_LIGHTNING_H : SPELL_BALL_LIGHTNING_N, false); - events.RepeatEvent(10000 + rand() % 1000); + events.Repeat(10s, 11s); break; case EVENT_STATIC_OVERLOAD: if (Unit* target = SelectTarget(SelectTargetMethod::Random)) me->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_STATIC_OVERLOAD_H : SPELL_STATIC_OVERLOAD_N, false); - events.RepeatEvent(5000 + rand() % 1000); + events.Repeat(5s, 6s); break; case EVENT_CHECK_HEALTH: if (HealthBelowPct(HealthCheck)) me->CastSpell(me, SPELL_DISPERSE, false); - events.RepeatEvent(1000); + events.Repeat(1s); return; case EVENT_CALL_SPARKS: { EntryCheckPredicate pred(NPC_SPARK_OF_IONAR); summons.DoAction(ACTION_CALLBACK, pred); - events.ScheduleEvent(EVENT_RESTORE, 2000, 0, 2); + events.ScheduleEvent(EVENT_RESTORE, 2s, 0, 2); return; } case EVENT_RESTORE: diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp index 698487c4a..8cd10eb99 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp @@ -117,9 +117,9 @@ public: me->SetInCombatWithZone(); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_ARC_LIGHTNING, 10000); - events.ScheduleEvent(EVENT_SHOCKWAVE, 3000); - events.ScheduleEvent(EVENT_LIGHTNING_NOVA, 15000); + events.ScheduleEvent(EVENT_ARC_LIGHTNING, 10s); + events.ScheduleEvent(EVENT_SHOCKWAVE, 3s); + events.ScheduleEvent(EVENT_LIGHTNING_NOVA, 15s); if (m_pInstance) { @@ -222,15 +222,15 @@ public: HealthCheck -= 25; } - events.RepeatEvent(1000); + events.Repeat(1s); break; case EVENT_LIGHTNING_NOVA: - events.RepeatEvent(15000); + events.Repeat(15s); me->CastSpell(me, SPELL_LIGHTNING_NOVA_VISUAL, true); me->CastSpell(me, SPELL_LIGHTNING_NOVA_THUNDERS, true); - events.DelayEvents(5001); - events.ScheduleEvent(EVENT_AURA_REMOVE, me->GetMap()->IsHeroic() ? 4000 : 5000); + events.DelayEvents(5s); + events.ScheduleEvent(EVENT_AURA_REMOVE, me->GetMap()->IsHeroic() ? 4s : 5s); me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_LIGHTNING_NOVA_H : SPELL_LIGHTNING_NOVA_N, false); break; @@ -241,7 +241,7 @@ public: if (Unit* target = SelectTargetFromPlayerList(100, SPELL_ARC_LIGHTNING)) me->CastSpell(target, SPELL_ARC_LIGHTNING, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_AURA_REMOVE: me->RemoveAura(SPELL_LIGHTNING_NOVA_THUNDERS); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index 4073879ab..5f4043dde 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -192,10 +192,10 @@ public: void ScheduleEvents(bool anvil) { events.SetPhase(1); - events.RescheduleEvent(EVENT_HEAT, 8000, 0, 1); - events.RescheduleEvent(EVENT_SHATTER, 10000, 0, 1); - events.RescheduleEvent(EVENT_CHECK_HEALTH, anvil ? 1000 : 6000, 0, 1); - events.RescheduleEvent(EVENT_POSITION, 4000, 0, 1); + events.RescheduleEvent(EVENT_HEAT, 8s, 0, 1); + events.RescheduleEvent(EVENT_SHATTER, 10s, 0, 1); + events.RescheduleEvent(EVENT_CHECK_HEALTH, anvil ? 1s : 6s, 0, 1); + events.RescheduleEvent(EVENT_POSITION, 4s, 0, 1); } void JustSummoned(Creature* summon) override @@ -243,7 +243,7 @@ public: me->SetControlled(true, UNIT_STATE_ROOT); } else - events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0, 0, 2); + events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2); } void SpellHitTarget(Unit* /*who*/, SpellInfo const* spellInfo) override @@ -269,7 +269,7 @@ public: if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE) me->GetMotionMaster()->MovementExpired(); - events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0, 0, 2); + events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2); } void UpdateAI(uint32 diff) override @@ -287,17 +287,17 @@ public: { case EVENT_HEAT: me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_HEAT_H : SPELL_HEAT_N, true); - events.RepeatEvent(8000); + events.Repeat(8s); break; case EVENT_CHECK_HEALTH: if (HealthBelowPct(HealthCheck)) GoToAnvil(); - events.RepeatEvent(1000); + events.Repeat(1s); return; case EVENT_SHATTER: { - events.RepeatEvent(10000); + events.Repeat(10s); summons.DoAction(ACTION_SHATTER); break; } @@ -309,7 +309,7 @@ public: if (me->GetDistance(1331.9f, -106, 56) > 95) EnterEvadeMode(); else - events.RepeatEvent(4000); + events.Repeat(4s); return; } @@ -342,8 +342,8 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(EVENT_BLAST, 7000); - events.ScheduleEvent(EVENT_IMMOLATION, 3000); + events.ScheduleEvent(EVENT_BLAST, 7s); + events.ScheduleEvent(EVENT_IMMOLATION, 3s); } void DamageTaken(Unit*, uint32& uiDamage, DamageEffectType, SpellSchoolMask) override @@ -397,11 +397,11 @@ public: { case EVENT_BLAST: me->CastSpell(me, SPELL_BLAST_WAVE, false); - events.RepeatEvent(14000); + events.Repeat(14s); break; case EVENT_IMMOLATION: me->CastSpell(me->GetVictim(), me->GetMap()->IsHeroic() ? SPELL_IMMOLATION_STRIKE_H : SPELL_IMMOLATION_STRIKE_N, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; } @@ -482,7 +482,7 @@ public: _isActive = false; _attackGUID = who->GetGUID(); events.Reset(); - events.RescheduleEvent(EVENT_UNFREEZE, 5000); + events.RescheduleEvent(EVENT_UNFREEZE, 5s); } } } @@ -492,16 +492,16 @@ public: events.Reset(); if (me->GetEntry() == 28961) // NPC_TITANIUM_SIEGEBREAKER { - events.ScheduleEvent(EVENT_PIERCING_HOWL, 10000 + rand() % 15000); - events.ScheduleEvent(EVENT_PENETRATING_STRIKE, 5000 + rand() % 5000); - events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 20000 + rand() % 8000); - events.ScheduleEvent(EVENT_BLADE_TURNING, 12000); + events.ScheduleEvent(EVENT_PIERCING_HOWL, 10s, 25s); + events.ScheduleEvent(EVENT_PENETRATING_STRIKE, 5s, 10s); + events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, 20s, 28s); + events.ScheduleEvent(EVENT_BLADE_TURNING, 12s); } else { - events.ScheduleEvent(EVENT_THROW, 10000 + rand() % 15000); - events.ScheduleEvent(EVENT_DEADLY_THROW, 15000 + rand() % 15000); - events.ScheduleEvent(EVENT_DEFLECTION, 15000); + events.ScheduleEvent(EVENT_THROW, 10s, 25s); + events.ScheduleEvent(EVENT_DEADLY_THROW, 15s, 30s); + events.ScheduleEvent(EVENT_DEFLECTION, 15s); } } @@ -542,31 +542,31 @@ public: { case EVENT_PIERCING_HOWL: me->CastSpell(me->GetVictim(), SPELL_PIERCING_HOWL, false); - events.RepeatEvent(10000 + rand() % 1500); + events.Repeat(10s, 25s); break; case EVENT_PENETRATING_STRIKE: me->CastSpell(me->GetVictim(), SPELL_PENETRATING_STRIKE, false); - events.RepeatEvent(5000 + rand() % 5000); + events.Repeat(5s, 10s); break; case EVENT_FRIGHTENING_SHOUT: me->CastSpell(me->GetVictim(), SPELL_FRIGHTENING_SHOUT, false); - events.RepeatEvent(20000 + rand() % 8000); + events.Repeat(20s, 28s); break; case EVENT_BLADE_TURNING: me->CastSpell(me->GetVictim(), me->GetMap()->IsHeroic() ? SPELL_BLADE_TURNING_H : SPELL_BLADE_TURNING_N, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_THROW: me->CastSpell(SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0), me->GetMap()->IsHeroic() ? SPELL_THROW_H : SPELL_THROW_N, true); - events.RepeatEvent(10000 + rand() % 15000); + events.Repeat(10s, 25s); break; case EVENT_DEADLY_THROW: me->CastSpell(SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0), me->GetMap()->IsHeroic() ? SPELL_DEADLY_THROW_H : SPELL_DEADLY_THROW_N, true); - events.RepeatEvent(15000 + rand() % 15000); + events.Repeat(15s, 30s); break; case EVENT_DEFLECTION: me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_DEFLECTION_H : SPELL_DEFLECTION_N, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp index a2be8dcac..c7305d330 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_krystallus.cpp @@ -84,11 +84,11 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.RescheduleEvent(EVENT_BOULDER, 8000); - events.RescheduleEvent(EVENT_STOMP, 5000); - events.RescheduleEvent(EVENT_GROUND_SLAM, 15000); + events.RescheduleEvent(EVENT_BOULDER, 8s); + events.RescheduleEvent(EVENT_STOMP, 5s); + events.RescheduleEvent(EVENT_GROUND_SLAM, 15s); if (me->GetMap()->IsHeroic()) - events.RescheduleEvent(EVENT_GROUND_SPIKE, 10000); + events.RescheduleEvent(EVENT_GROUND_SPIKE, 10s); if (pInstance) pInstance->SetData(BOSS_KRYSTALLUS, IN_PROGRESS); @@ -125,34 +125,34 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) me->CastSpell(target, DUNGEON_MODE(BOULDER_TOSS, BOULDER_TOSS_H), false); - events.RepeatEvent(5000 + rand() % 2000); + events.Repeat(5s, 7s); break; } case EVENT_GROUND_SPIKE: { me->CastSpell(me->GetVictim(), GROUND_SPIKE_H, false); // current enemy target - events.RepeatEvent(8000 + rand() % 3000); + events.Repeat(8s, 11s); break; } case EVENT_STOMP: { me->CastSpell(me, DUNGEON_MODE(STOMP, STOMP_H), false); - events.RepeatEvent(13000 + rand() % 5000); + events.Repeat(13s, 18s); break; } case EVENT_GROUND_SLAM: { - events.RepeatEvent(10000 + rand() % 3000); + events.Repeat(10s, 13s); me->CastSpell(me->GetVictim(), GROUND_SLAM, true); - events.DelayEvents(10000); - events.RescheduleEvent(EVENT_SHATTER, 8000); + events.DelayEvents(10s); + events.RescheduleEvent(EVENT_SHATTER, 8s); break; } case EVENT_SHATTER: { me->CastSpell((Unit*)nullptr, DUNGEON_MODE(SHATTER, SHATTER_H), false); Talk(SAY_SHATTER); - events.RescheduleEvent(EVENT_REMOVE_STONED, 1500); + events.RescheduleEvent(EVENT_REMOVE_STONED, 1500ms); break; } case EVENT_REMOVE_STONED: diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp index 64c40a090..c2104f0b0 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_maiden_of_grief.cpp @@ -80,10 +80,10 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_STORM, 5000); - events.ScheduleEvent(EVENT_SHOCK, 26000 + rand() % 6000); - events.ScheduleEvent(EVENT_PILLAR, 12000 + rand() % 8000); - events.ScheduleEvent(EVENT_PARTING, 8000); + events.ScheduleEvent(EVENT_STORM, 5s); + events.ScheduleEvent(EVENT_SHOCK, 26s, 32s); + events.ScheduleEvent(EVENT_PILLAR, 12s, 20s); + events.ScheduleEvent(EVENT_PARTING, 8s); Talk(SAY_AGGRO); if (pInstance) @@ -108,7 +108,7 @@ public: case EVENT_STORM: { me->CastSpell(me->GetVictim(), DUNGEON_MODE(STORM_OF_GRIEF, STORM_OF_GRIEF_H), true); - events.RepeatEvent(10000); + events.Repeat(10s); break; } case EVENT_SHOCK: @@ -116,7 +116,7 @@ public: me->CastSpell(me->GetVictim(), DUNGEON_MODE(SHOCK_OF_SORROW, SHOCK_OF_SORROW_H), false); Talk(SAY_STUN); - events.RepeatEvent(16000 + rand() % 6000); + events.Repeat(16s, 22s); break; } case EVENT_PILLAR: @@ -124,7 +124,7 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) me->CastSpell(target, DUNGEON_MODE(PILLAR_OF_WOE, PILLAR_OF_WOE_H), false); - events.RepeatEvent(12000 + rand() % 8000); + events.Repeat(12s, 20s); break; } case EVENT_PARTING: @@ -132,7 +132,7 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) me->CastSpell(target, PARTING_SORROW, false); - events.RepeatEvent(6000 + rand() % 10000); + events.Repeat(6s, 16s); break; } } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp index 14cccb93f..81986bf23 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp @@ -165,14 +165,14 @@ public: { Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - events.ScheduleEvent(EVENT_SHIELD, 14000 + rand() % 5000); - events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 6000 + rand() % 6000); - events.ScheduleEvent(EVENT_STATIC_CHARGE, 24000); - events.ScheduleEvent(EVENT_LIGHTNING_RING, 25000 + rand() % 6000); - events.ScheduleEvent(EVENT_SUMMON, 20000); - events.ScheduleEvent(EVENT_SUMMON, 21500); - events.ScheduleEvent(EVENT_SUMMON_SPEACH, 20000); + events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s); + events.ScheduleEvent(EVENT_SHIELD, 14s, 19s); + events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 6s, 12s); + events.ScheduleEvent(EVENT_STATIC_CHARGE, 24s); + events.ScheduleEvent(EVENT_LIGHTNING_RING, 25s, 31s); + events.ScheduleEvent(EVENT_SUMMON, 20s); + events.ScheduleEvent(EVENT_SUMMON, 21s + 500ms); + events.ScheduleEvent(EVENT_SUMMON_SPEACH, 20s); if (pInstance) { @@ -214,8 +214,8 @@ public: { SummonPhase = PHASE_SUMMON_OOZE; events.CancelEvent(EVENT_SUMMON); - events.ScheduleEvent(EVENT_SUMMON, 0); - events.ScheduleEvent(EVENT_SUMMON, 1500); + events.ScheduleEvent(EVENT_SUMMON, 0ms); + events.ScheduleEvent(EVENT_SUMMON, 1500ms); if (pInstance) if (Creature* brann = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_BRANN))) @@ -236,17 +236,17 @@ public: me->CastSpell(me, SPELL_FRENZY, false); events.CancelEvent(EVENT_SUMMON); - events.ScheduleEvent(EVENT_SUMMON, 0); + events.ScheduleEvent(EVENT_SUMMON, 0ms); break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; } case EVENT_SHIELD: { me->CastSpell(me, DUNGEON_MODE(SPELL_LIGHTNING_SHIELD, SPELL_LIGHTNING_SHIELD_H), false); - events.RepeatEvent(14000 + rand() % 5000); + events.Repeat(14s, 19s); break; } case EVENT_CHAIN_LIGHTNING: @@ -254,7 +254,7 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) me->CastSpell(target, DUNGEON_MODE(SPELL_CHAIN_LIGHTNING, SPELL_CHAIN_LIGHTNING_H), false); - events.RepeatEvent(6000 + rand() % 6000); + events.Repeat(6s, 12s); break; } case EVENT_STATIC_CHARGE: @@ -262,14 +262,14 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0)) me->CastSpell(target, DUNGEON_MODE(SPELL_STATIC_CHARGE, SPELL_STATIC_CHARGE_H), false); - events.RepeatEvent(20000); + events.Repeat(20s); break; } case EVENT_LIGHTNING_RING: { me->CastSpell(me, DUNGEON_MODE(SPELL_LIGHTNING_RING, SPELL_LIGHTNING_RING_H), false); - events.RepeatEvent(25000 + rand() % 6000); - events.DelayEvents(10000); // Channel duration + events.Repeat(25s, 31s); + events.DelayEvents(10s); // Channel duration break; } case EVENT_SUMMON_SPEACH: @@ -289,7 +289,7 @@ public: case PHASE_SUMMON_UNFRIENDLY_DWARFES: { SummonDwarfes(false); - events.RepeatEvent(20000); + events.Repeat(20s); break; } case PHASE_SUMMON_OOZE: @@ -303,7 +303,7 @@ public: summons.Summon(ooze); } } - events.RepeatEvent(10000); + events.Repeat(10s); break; } case PHASE_SUMMON_FRIENDLY_DWARFES: @@ -454,7 +454,7 @@ public: case EVENT_TOXIC_VOLLEY: { me->CastSpell(me, DUNGEON_MODE(SPELL_TOXIC_VOLLEY, SPELL_TOXIC_VOLLEY_H), false); - events.RepeatEvent(5000); + events.Repeat(5s); break; } } @@ -483,7 +483,7 @@ public: void MovementInform(uint32 type, uint32 point) override { if (type == POINT_MOTION_TYPE && point == 0) - events.RescheduleEvent(EVENT_MALFORMED_OOZE_CHECK, 1000); + events.RescheduleEvent(EVENT_MALFORMED_OOZE_CHECK, 1s); } void JustEngagedWith(Unit*) override { } @@ -508,7 +508,7 @@ public: break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; } } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp index 035fead0e..708f58891 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp @@ -424,8 +424,8 @@ public: kaddrak->CastSpell(plr, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, SPELL_GLARE_OF_THE_TRIBUNAL_H), true); } - events.RescheduleEvent(EVENT_KADDRAK_SWITCH_EYE, 1500); - events.RepeatEvent(2000 + urand(0, 2000)); + events.RescheduleEvent(EVENT_KADDRAK_SWITCH_EYE, 1500ms); + events.Repeat(2s, 4s); break; } case EVENT_KADDRAK_SWITCH_EYE: @@ -456,7 +456,7 @@ public: } } } - events.RepeatEvent(20000); + events.Repeat(20s); break; } case EVENT_ABEDNEUM_HEAD: // Third @@ -474,7 +474,7 @@ public: cr->CastSpell(cr, DUNGEON_MODE(SPELL_SEARING_GAZE, SPELL_SEARING_GAZE_H), true); } } - events.RepeatEvent(30000); + events.Repeat(30s); break; } case EVENT_SUMMON_MONSTERS: @@ -519,7 +519,7 @@ public: plr->GroupEventHappens(QUEST_HALLS_OF_STONE, me); } - events.ScheduleEvent(EVENT_GO_TO_SJONNIR, 279000); + events.ScheduleEvent(EVENT_GO_TO_SJONNIR, 279s); break; } case EVENT_GO_TO_SJONNIR: @@ -634,16 +634,16 @@ void brann_bronzebeard::brann_bronzebeardAI::InitializeEvent() TalkEvent = true; events.Reset(); - events.ScheduleEvent(EVENT_SUMMON_MONSTERS, 21000); - events.ScheduleEvent(EVENT_KADDRAK_HEAD, 20000); - events.ScheduleEvent(EVENT_MARNAK_HEAD, 105000); - events.ScheduleEvent(EVENT_ABEDNEUM_HEAD, 205000); - events.ScheduleEvent(EVENT_TRIBUNAL_END, 315000); + events.ScheduleEvent(EVENT_SUMMON_MONSTERS, 21s); + events.ScheduleEvent(EVENT_KADDRAK_HEAD, 20s); + events.ScheduleEvent(EVENT_MARNAK_HEAD, 105s); + events.ScheduleEvent(EVENT_ABEDNEUM_HEAD, 205s); + events.ScheduleEvent(EVENT_TRIBUNAL_END, 315s); // Viusals - events.ScheduleEvent(EVENT_KADDRAK_VISUAL, 20000); - events.ScheduleEvent(EVENT_MARNAK_VISUAL, 105000); - events.ScheduleEvent(EVENT_ABEDNEUM_VISUAL, 205000); + events.ScheduleEvent(EVENT_KADDRAK_VISUAL, 20s); + events.ScheduleEvent(EVENT_MARNAK_VISUAL, 105s); + events.ScheduleEvent(EVENT_ABEDNEUM_VISUAL, 205s); } void brann_bronzebeard::brann_bronzebeardAI::WaypointReached(uint32 id) @@ -717,8 +717,8 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_DRP_CHARGE, 10000); - events.ScheduleEvent(EVENT_DRP_CLEAVE, 7000); + events.ScheduleEvent(EVENT_DRP_CHARGE, 10s); + events.ScheduleEvent(EVENT_DRP_CLEAVE, 7s); } void UpdateAI(uint32 diff) override @@ -737,13 +737,13 @@ public: if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(tgt, SPELL_DRP_CHARGE, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; } case EVENT_DRP_CLEAVE: { me->CastSpell(me->GetVictim(), SPELL_DRP_CLEAVE, false); - events.RepeatEvent(7000); + events.Repeat(7s); break; } } @@ -775,8 +775,8 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_DRS_LIGHTNING_BOLD, 5000); - events.ScheduleEvent(EVENT_DRS_SHADOW_WORD_PAIN, 12000); + events.ScheduleEvent(EVENT_DRS_LIGHTNING_BOLD, 5s); + events.ScheduleEvent(EVENT_DRS_SHADOW_WORD_PAIN, 12s); } void UpdateAI(uint32 diff) override @@ -793,13 +793,13 @@ public: case EVENT_DRS_LIGHTNING_BOLD: { me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_DRS_LIGHTING_BOLT_H : SPELL_DRS_LIGHTING_BOLT, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; } case EVENT_DRS_SHADOW_WORD_PAIN: { me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_DRS_SHADOW_WORD_PAIN_H : SPELL_DRS_SHADOW_WORD_PAIN, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; } } @@ -830,8 +830,8 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_IGC_CRUSH, 6000); - events.ScheduleEvent(EVENT_IGC_GROUND_SMASH, 4000); + events.ScheduleEvent(EVENT_IGC_CRUSH, 6s); + events.ScheduleEvent(EVENT_IGC_GROUND_SMASH, 4s); } void UpdateAI(uint32 diff) override { @@ -847,13 +847,13 @@ public: case EVENT_IGC_CRUSH: { me->CastSpell(me->GetVictim(), SPELL_IGC_CRUSH_ARMOR, false); - events.RepeatEvent(6000); + events.Repeat(6s); break; } case EVENT_IGC_GROUND_SMASH: { me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_IGC_GROUND_SMASH_H : SPELL_IGC_GROUND_SMASH, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index f703c64a5..f187c85a5 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -416,10 +416,10 @@ public: init.Launch(); events.Reset(); events.SetPhase(PHASE_ROLE_PLAY); - events.ScheduleEvent(EVENT_INTRO_1, 5000, 0, PHASE_ROLE_PLAY); - events.ScheduleEvent(EVENT_INTRO_2, 15000, 0, PHASE_ROLE_PLAY); - events.ScheduleEvent(EVENT_INTRO_3, 23000, 0, PHASE_ROLE_PLAY); - events.ScheduleEvent(EVENT_INTRO_FINISH, 36000, 0, PHASE_ROLE_PLAY); + events.ScheduleEvent(EVENT_INTRO_1, 5s, 0, PHASE_ROLE_PLAY); + events.ScheduleEvent(EVENT_INTRO_2, 15s, 0, PHASE_ROLE_PLAY); + events.ScheduleEvent(EVENT_INTRO_3, 23s, 0, PHASE_ROLE_PLAY); + events.ScheduleEvent(EVENT_INTRO_FINISH, 36s, 0, PHASE_ROLE_PLAY); break; } case ACTION_DESPAWN_ALGALON: @@ -427,12 +427,12 @@ public: events.Reset(); summons.DespawnAll(); events.SetPhase(PHASE_ROLE_PLAY); - events.ScheduleEvent(EVENT_DESPAWN_ALGALON_1, 5000); - events.ScheduleEvent(EVENT_DESPAWN_ALGALON_2, 17000); - events.ScheduleEvent(EVENT_DESPAWN_ALGALON_3, 26000); + events.ScheduleEvent(EVENT_DESPAWN_ALGALON_1, 5s); + events.ScheduleEvent(EVENT_DESPAWN_ALGALON_2, 17s); + events.ScheduleEvent(EVENT_DESPAWN_ALGALON_3, 26s); if (me->IsInCombat()) - events.ScheduleEvent(EVENT_DESPAWN_ALGALON_4, 26000); - events.ScheduleEvent(EVENT_DESPAWN_ALGALON_5, 32000); + events.ScheduleEvent(EVENT_DESPAWN_ALGALON_4, 26s); + events.ScheduleEvent(EVENT_DESPAWN_ALGALON_5, 32s); me->DespawnOrUnsummon(39000); me->SetReactState(REACT_PASSIVE); @@ -451,7 +451,7 @@ public: case ACTION_ASCEND: summons.DespawnAll(); events.SetPhase(PHASE_BIG_BANG); - events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 1500); + events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 1500ms); break; case ACTION_FEEDS_ON_TEARS_FAILED: _fedOnTears = false; @@ -484,7 +484,7 @@ public: if (!_firstPull) { - events.ScheduleEvent(EVENT_START_COMBAT, 0); + events.ScheduleEvent(EVENT_START_COMBAT, 0ms); introDelay = 8000; } else @@ -493,7 +493,7 @@ public: _firstPull = false; Talk(SAY_ALGALON_START_TIMER); introDelay = 22000; - events.ScheduleEvent(EVENT_START_COMBAT, 14000); + events.ScheduleEvent(EVENT_START_COMBAT, 14s); m_pInstance->SetData(DATA_DESPAWN_ALGALON, 0); } @@ -507,7 +507,7 @@ public: events.ScheduleEvent(EVENT_BIG_BANG, 90000 + introDelay); events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 360000 + introDelay); - events.ScheduleEvent(EVENT_CHECK_HERALD_ITEMS, 5000); + events.ScheduleEvent(EVENT_CHECK_HERALD_ITEMS, 5s); DoCheckHeraldOfTheTitans(); } @@ -521,15 +521,15 @@ public: else if (pointId == POINT_ALGALON_OUTRO) { me->SetFacingTo(1.605703f); - events.ScheduleEvent(EVENT_OUTRO_3, 1200); - events.ScheduleEvent(EVENT_OUTRO_4, 2400); - events.ScheduleEvent(EVENT_OUTRO_5, 8500); - events.ScheduleEvent(EVENT_OUTRO_6, 15500); - events.ScheduleEvent(EVENT_OUTRO_7, 55500); - events.ScheduleEvent(EVENT_OUTRO_8, 73500); - events.ScheduleEvent(EVENT_OUTRO_9, 85500); - events.ScheduleEvent(EVENT_OUTRO_10, 101500); - events.ScheduleEvent(EVENT_OUTRO_11, 117500); + events.ScheduleEvent(EVENT_OUTRO_3, 1200ms); + events.ScheduleEvent(EVENT_OUTRO_4, 2400ms); + events.ScheduleEvent(EVENT_OUTRO_5, 8500ms); + events.ScheduleEvent(EVENT_OUTRO_6, 15s + 500ms); + events.ScheduleEvent(EVENT_OUTRO_7, 55s + 500ms); + events.ScheduleEvent(EVENT_OUTRO_8, 73s + 500ms); + events.ScheduleEvent(EVENT_OUTRO_9, 85s + 500ms); + events.ScheduleEvent(EVENT_OUTRO_10, 101s + 500ms); + events.ScheduleEvent(EVENT_OUTRO_11, 117s + 500ms); } } @@ -609,9 +609,9 @@ public: summons.DespawnAll(); me->InterruptNonMeleeSpells(false); events.SetPhase(PHASE_ROLE_PLAY); - events.ScheduleEvent(EVENT_OUTRO_START, 1500); - events.ScheduleEvent(EVENT_OUTRO_1, 7200); - events.ScheduleEvent(EVENT_OUTRO_2, 8700); + events.ScheduleEvent(EVENT_OUTRO_START, 1500ms); + events.ScheduleEvent(EVENT_OUTRO_1, 7200ms); + events.ScheduleEvent(EVENT_OUTRO_2, 8700ms); } } @@ -678,34 +678,34 @@ public: break; case EVENT_QUANTUM_STRIKE: me->CastSpell(me->GetVictim(), SPELL_QUANTUM_STRIKE, false); - events.RepeatEvent(urand(3000, 4500)); + events.Repeat(3000ms, 4500ms); break; case EVENT_PHASE_PUNCH: me->CastSpell(me->GetVictim(), SPELL_PHASE_PUNCH, false); - events.RepeatEvent(15500); + events.Repeat(15s + 500ms); break; case EVENT_SUMMON_COLLAPSING_STAR: Talk(SAY_ALGALON_COLLAPSING_STAR); Talk(EMOTE_ALGALON_COLLAPSING_STAR); for (uint8 i = 0; i < COLLAPSING_STAR_COUNT; ++i) me->SummonCreature(NPC_COLLAPSING_STAR, CollapsingStarPos[i], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2000); - events.RepeatEvent(60000); + events.Repeat(1min); break; case EVENT_COSMIC_SMASH: Talk(EMOTE_ALGALON_COSMIC_SMASH); me->CastCustomSpell(SPELL_COSMIC_SMASH, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 3), (Unit*)nullptr); - events.RepeatEvent(25500); + events.Repeat(25s + 500ms); break; case EVENT_ACTIVATE_LIVING_CONSTELLATION: { if (events.GetPhaseMask() & PHASE_MASK_NO_UPDATE) { - events.RepeatEvent(4000); + events.Repeat(4s); break; } CallConstellations(); //me->CastSpell(me, SPELL_TRIGGER_3_ADDS, true); - events.RepeatEvent(50000); + events.Repeat(50s); break; } case EVENT_BIG_BANG: @@ -717,13 +717,13 @@ public: summons.DoAction(ACTION_BIG_BANG, pred); me->CastSpell((Unit*)nullptr, SPELL_BIG_BANG, false); - events.RepeatEvent(90500); + events.Repeat(90s + 500ms); break; } case EVENT_ASCEND_TO_THE_HEAVENS: Talk(SAY_ALGALON_ASCEND); me->CastSpell((Unit*)nullptr, SPELL_ASCEND_TO_THE_HEAVENS, false); - events.ScheduleEvent(EVENT_EVADE, 2500); + events.ScheduleEvent(EVENT_EVADE, 2500ms); break; case EVENT_EVADE: events.Reset(); @@ -806,7 +806,7 @@ public: break; case EVENT_CHECK_HERALD_ITEMS: if (!DoCheckHeraldOfTheTitans()) - events.RepeatEvent(5000); + events.Repeat(5s); break; } @@ -842,16 +842,16 @@ public: me->SetWalk(false); _currentPoint = 0; events.Reset(); - events.ScheduleEvent(EVENT_BRANN_MOVE_INTRO, 1); + events.ScheduleEvent(EVENT_BRANN_MOVE_INTRO, 1ms); break; case ACTION_FINISH_INTRO: Talk(SAY_BRANN_ALGALON_INTRO_2); - events.ScheduleEvent(EVENT_BRANN_MOVE_INTRO, 1); + events.ScheduleEvent(EVENT_BRANN_MOVE_INTRO, 1ms); break; case ACTION_OUTRO: me->GetMotionMaster()->MovePoint(POINT_BRANN_OUTRO, BrannOutroPos[1]); - events.ScheduleEvent(EVENT_BRANN_OUTRO_1, 87500); - events.ScheduleEvent(EVENT_BRANN_OUTRO_2, 116500); + events.ScheduleEvent(EVENT_BRANN_OUTRO_1, 87s + 500ms); + events.ScheduleEvent(EVENT_BRANN_OUTRO_2, 116s + 500ms); break; } } @@ -873,7 +873,7 @@ public: me->SetFacingTo(4.6156f); me->SetWalk(false); Talk(SAY_BRANN_ALGALON_INTRO_1); - events.ScheduleEvent(EVENT_SUMMON_ALGALON, 7500); + events.ScheduleEvent(EVENT_SUMMON_ALGALON, 7500ms); return; case 10: me->DespawnOrUnsummon(1); @@ -972,7 +972,7 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(EVENT_ARCANE_BARRAGE, 2500); + events.ScheduleEvent(EVENT_ARCANE_BARRAGE, 2500ms); _isActive = false; } @@ -1001,7 +1001,7 @@ public: case ACTION_BIG_BANG: events.SetPhase(PHASE_BIG_BANG); events.DelayEvents(9500); - events.ScheduleEvent(EVENT_RESUME_UPDATING, 9500); + events.ScheduleEvent(EVENT_RESUME_UPDATING, 9500ms); break; } } @@ -1031,7 +1031,7 @@ public: { case EVENT_ARCANE_BARRAGE: me->CastCustomSpell(SPELL_ARCANE_BARRAGE, SPELLVALUE_MAX_TARGETS, 1, (Unit*)nullptr, true); - events.RepeatEvent(2500); + events.Repeat(2500ms); break; case EVENT_RESUME_UPDATING: events.SetPhase(0); @@ -1136,7 +1136,7 @@ public: _locked = true; // Start Algalon event me->SetGameObjectFlag(GO_FLAG_IN_USE); - events.ScheduleEvent(EVENT_DESPAWN_CONSOLE, 5000); + events.ScheduleEvent(EVENT_DESPAWN_CONSOLE, 5000ms); if (Creature* brann = me->SummonCreature(NPC_BRANN_BRONZBEARD_ALG, BrannIntroSpawnPos)) brann->AI()->DoAction(ACTION_START_INTRO); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index fc90aca81..27c7fe498 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -237,7 +237,7 @@ public: me->setActive(true); me->SetInCombatWithZone(); me->CastSpell(me, SPELL_HIGH_VOLTAGE, true); - events.ScheduleEvent(EVENT_ENRAGE, 900000); + events.ScheduleEvent(EVENT_ENRAGE, 15min); UpdatePhase(); if (!pInstance) @@ -275,14 +275,14 @@ public: switch (_phase) { case 1: - events.RescheduleEvent(EVENT_FUSION_PUNCH, 15000); + events.RescheduleEvent(EVENT_FUSION_PUNCH, 15s); break; case 2: - events.RescheduleEvent(EVENT_STATIC_DISRUPTION, 20000); + events.RescheduleEvent(EVENT_STATIC_DISRUPTION, 20s); break; case 3: me->ResetLootMode(); - events.RescheduleEvent(EVENT_OVERWHELMING_POWER, 8000); + events.RescheduleEvent(EVENT_OVERWHELMING_POWER, 8s); break; } } @@ -342,13 +342,13 @@ public: { case EVENT_FUSION_PUNCH: me->CastSpell(me->GetVictim(), SPELL_FUSION_PUNCH, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; case EVENT_STATIC_DISRUPTION: if (Unit* pTarget = SelectTarget(SelectTargetMethod::MinDistance, 0, 0, true)) me->CastSpell(pTarget, SPELL_STATIC_DISRUPTION, false); - events.RepeatEvent(urand(20000, 40000)); + events.Repeat(20s, 40s); break; case EVENT_OVERWHELMING_POWER: Talk(SAY_STEELBREAKER_POWER); @@ -430,7 +430,7 @@ public: me->InterruptNonMeleeSpells(false); me->setActive(true); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_ENRAGE, 900000); + events.ScheduleEvent(EVENT_ENRAGE, 15min); UpdatePhase(); if (!pInstance) @@ -452,15 +452,15 @@ public: switch (_phase) { case 1: - events.RescheduleEvent(EVENT_SHIELD_OF_RUNES, 20000); - events.RescheduleEvent(EVENT_RUNE_OF_POWER, 30000); + events.RescheduleEvent(EVENT_SHIELD_OF_RUNES, 20s); + events.RescheduleEvent(EVENT_RUNE_OF_POWER, 30s); break; case 2: - events.RescheduleEvent(EVENT_RUNE_OF_DEATH, 35000); + events.RescheduleEvent(EVENT_RUNE_OF_DEATH, 35s); break; case 3: me->ResetLootMode(); - events.RescheduleEvent(EVENT_RUNE_OF_SUMMONING, urand(20000, 30000)); + events.RescheduleEvent(EVENT_RUNE_OF_SUMMONING, 20s, 30s); break; } } @@ -516,25 +516,25 @@ public: target = me; me->CastSpell(target, SPELL_RUNE_OF_POWER, true); - events.RepeatEvent(60000); + events.Repeat(1min); break; } case EVENT_SHIELD_OF_RUNES: me->CastSpell(me, SPELL_SHIELD_OF_RUNES, false); - events.RescheduleEvent(EVENT_SHIELD_OF_RUNES, urand(27000, 34000)); + events.RescheduleEvent(EVENT_SHIELD_OF_RUNES, 27s, 34s); break; case EVENT_RUNE_OF_DEATH: if (Unit* target = SelectTarget(SelectTargetMethod::Random)) me->CastSpell(target, SPELL_RUNE_OF_DEATH, true); Talk(SAY_MOLGEIM_RUNE_DEATH); - events.RepeatEvent(urand(30000, 40000)); + events.Repeat(30s, 40s); break; case EVENT_RUNE_OF_SUMMONING: Talk(SAY_MOLGEIM_SUMMON); if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_RUNE_OF_SUMMONING); - events.RepeatEvent(urand(30000, 45000)); + events.Repeat(30s, 45s); break; case EVENT_ENRAGE: me->CastSpell(me, SPELL_BERSERK, true); @@ -647,7 +647,7 @@ public: me->InterruptNonMeleeSpells(false); me->setActive(true); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_ENRAGE, 900000); + events.ScheduleEvent(EVENT_ENRAGE, 15min); UpdatePhase(); if (!pInstance) @@ -669,16 +669,16 @@ public: switch (_phase) { case 1: - events.RescheduleEvent(EVENT_CHAIN_LIGHTNING, urand(9000, 17000)); - events.RescheduleEvent(EVENT_OVERLOAD, urand(25000, 40000)); + events.RescheduleEvent(EVENT_CHAIN_LIGHTNING, 9s, 17s); + events.RescheduleEvent(EVENT_OVERLOAD, 25s, 40s); break; case 2: - events.RescheduleEvent(EVENT_LIGHTNING_WHIRL, urand(20000, 40000)); + events.RescheduleEvent(EVENT_LIGHTNING_WHIRL, 20s, 40s); break; case 3: me->ResetLootMode(); me->CastSpell(me, SPELL_STORMSHIELD, true); - events.RescheduleEvent(EVENT_LIGHTNING_TENDRILS, urand(15000, 16000)); + events.RescheduleEvent(EVENT_LIGHTNING_TENDRILS, 15s, 16s); break; } } @@ -763,23 +763,23 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_CHAIN_LIGHTNING, false); - events.RepeatEvent(urand(9000, 17000)); + events.Repeat(9s, 17s); break; case EVENT_OVERLOAD: Talk(EMOTE_BRUNDIR_OVERLOAD); me->CastSpell(me, SPELL_OVERLOAD, true); - events.RescheduleEvent(EVENT_OVERLOAD, urand(25000, 40000)); + events.RescheduleEvent(EVENT_OVERLOAD, 25s, 40s); break; case EVENT_LIGHTNING_WHIRL: Talk(SAY_BRUNDIR_SPECIAL); me->CastSpell(me, SPELL_LIGHTNING_WHIRL, true); - events.RepeatEvent(urand(10000, 25000)); + events.Repeat(10s, 25s); break; case EVENT_LIGHTNING_TENDRILS: { // Reschedule old - events.RepeatEvent(35000); - events.DelayEvents(18000); + events.Repeat(35s); + events.DelayEvents(18s); Talk(SAY_BRUNDIR_FLIGHT); Unit* oldVictim = me->GetVictim(); @@ -796,7 +796,7 @@ public: me->CastSpell(me, SPELL_LIGHTNING_TENDRILS, true); me->CastSpell(me, 61883, true); - events.ScheduleEvent(EVENT_LIGHTNING_LAND, 16000); + events.ScheduleEvent(EVENT_LIGHTNING_LAND, 16s); events.ScheduleEvent(EVENT_LIGHTNING_FLIGHT, 1s); break; } @@ -804,7 +804,7 @@ public: { float speed = me->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()) / (1000.0f * 0.001f); me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), speed); - events.ScheduleEvent(EVENT_LAND_LAND, 1000); + events.ScheduleEvent(EVENT_LAND_LAND, 1s); break; } case EVENT_LAND_LAND: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index 5ce55b6f2..1efdf49d3 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -177,12 +177,12 @@ public: if (m_pInstance) m_pInstance->SetData(TYPE_AURIAYA, IN_PROGRESS); - events.ScheduleEvent(EVENT_TERRIFYING_SCREECH, 35000); - events.ScheduleEvent(EVENT_SONIC_SCREECH, 45000); - events.ScheduleEvent(EVENT_GUARDIAN_SWARM, 70000); - events.ScheduleEvent(EVENT_SUMMON_FERAL_DEFENDER, 60000); - events.ScheduleEvent(EVENT_SENTINEL_BLAST, 36000); - events.ScheduleEvent(EVENT_ENRAGE, 600000); + events.ScheduleEvent(EVENT_TERRIFYING_SCREECH, 35s); + events.ScheduleEvent(EVENT_SONIC_SCREECH, 45s); + events.ScheduleEvent(EVENT_GUARDIAN_SWARM, 70s); + events.ScheduleEvent(EVENT_SUMMON_FERAL_DEFENDER, 60s); + events.ScheduleEvent(EVENT_SENTINEL_BLAST, 36s); + events.ScheduleEvent(EVENT_ENRAGE, 10min); summons.DoZoneInCombat(NPC_SANCTUM_SENTRY); @@ -212,7 +212,7 @@ public: void DoAction(int32 param) override { if (param == ACTION_FERAL_DEATH_WITH_STACK) - events.ScheduleEvent(EVENT_RESPAWN_FERAL_DEFENDER, 25000); + events.ScheduleEvent(EVENT_RESPAWN_FERAL_DEFENDER, 25s); else if (param == ACTION_FERAL_DEATH) _nineLives = true; } @@ -232,7 +232,7 @@ public: Talk(EMOTE_DEFFENDER); me->CastSpell(me, SPELL_ACTIVATE_FERAL_DEFENDER, true); me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, true); - events.ScheduleEvent(EVENT_REMOVE_IMMUNE, 3000); + events.ScheduleEvent(EVENT_REMOVE_IMMUNE, 3s); break; case EVENT_REMOVE_IMMUNE: me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_INTERRUPT_CAST, false); @@ -240,19 +240,19 @@ public: case EVENT_TERRIFYING_SCREECH: Talk(EMOTE_FEAR); me->CastSpell(me, SPELL_TERRIFYING_SCREECH, false); - events.RepeatEvent(35000); + events.Repeat(35s); break; case EVENT_SONIC_SCREECH: me->CastSpell(me, SPELL_SONIC_SCREECH, false); - events.RepeatEvent(50000); + events.Repeat(50s); break; case EVENT_GUARDIAN_SWARM: me->CastSpell(me->GetVictim(), SPELL_GUARDIAN_SWARM, false); - events.RepeatEvent(40000); + events.Repeat(40s); break; case EVENT_SENTINEL_BLAST: me->CastSpell(me, SPELL_SENTINEL_BLAST, false); - events.RepeatEvent(35000); + events.Repeat(35s); events.DelayEvents(5000, 0); break; case EVENT_RESPAWN_FERAL_DEFENDER: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 4def9710b..5aaf06706 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -382,7 +382,7 @@ public: if (!me->GetVictim()) { me->CastSpell(me, SPELL_PURSUED, false); - events.RescheduleEvent(EVENT_PURSUE, 31000); + events.RescheduleEvent(EVENT_PURSUE, 31s); } _speakTimer = 0; } @@ -404,31 +404,31 @@ public: EnterEvadeMode(); return; } - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_PURSUE: Talk(FLAME_LEVIATHAN_SAY_PURSUE); me->CastSpell(me, SPELL_PURSUED, false); - events.RescheduleEvent(EVENT_PURSUE, 31000); + events.RescheduleEvent(EVENT_PURSUE, 31s); return; case EVENT_SPEED: me->CastSpell(me, SPELL_GATHERING_SPEED, false); - events.RepeatEvent(15000); + events.Repeat(15s); return; case EVENT_MISSILE: me->CastSpell(me, SPELL_MISSILE_BARRAGE, true); - events.RepeatEvent(4000); + events.Repeat(4s); return; case EVENT_VENT: me->CastSpell(me, SPELL_FLAME_VENTS, false); - events.RepeatEvent(20000); + events.Repeat(20s); return; case EVENT_SUMMON: if(summons.size() < 20) if (Creature* lift = DoSummonFlyer(NPC_MECHANOLIFT, me, 30.0f, 50.0f, 0)) lift->GetMotionMaster()->MoveRandom(100); - events.RepeatEvent(4000); + events.Repeat(4s); return; case EVENT_SOUND_BEGINNING: if (_towersCount) @@ -445,7 +445,7 @@ public: return; case EVENT_THORIMS_HAMMER: SummonTowerHelpers(TOWER_OF_STORMS); - events.RepeatEvent(60000 + rand() % 60000); + events.Repeat(1min, 2min); Talk(FLAME_LEVIATHAN_EMOTE_STORM); Talk(FLAME_LEVIATHAN_SAY_TOWER_STORM); return; @@ -520,19 +520,19 @@ void boss_flame_leviathan::boss_flame_leviathanAI::ActivateTowers() { case EVENT_TOWER_OF_LIFE_DESTROYED: me->AddAura(SPELL_TOWER_OF_LIFE, me); - events.RescheduleEvent(EVENT_FREYA, 30000); + events.RescheduleEvent(EVENT_FREYA, 30s); break; case EVENT_TOWER_OF_STORM_DESTROYED: me->AddAura(SPELL_TOWER_OF_STORMS, me); - events.RescheduleEvent(EVENT_THORIMS_HAMMER, 60000); + events.RescheduleEvent(EVENT_THORIMS_HAMMER, 1min); break; case EVENT_TOWER_OF_FROST_DESTROYED: me->AddAura(SPELL_TOWER_OF_FROST, me); - events.RescheduleEvent(EVENT_HODIRS_FURY, 20000); + events.RescheduleEvent(EVENT_HODIRS_FURY, 20s); break; case EVENT_TOWER_OF_FLAMES_DESTROYED: me->AddAura(SPELL_TOWER_OF_FLAMES, me); - events.RescheduleEvent(EVENT_MIMIRONS_INFERNO, 42000); + events.RescheduleEvent(EVENT_MIMIRONS_INFERNO, 42s); break; } } @@ -599,14 +599,14 @@ void boss_flame_leviathan::boss_flame_leviathanAI::TurnHealStations(bool _apply) void boss_flame_leviathan::boss_flame_leviathanAI::ScheduleEvents() { - events.RescheduleEvent(EVENT_MISSILE, 5000); - events.RescheduleEvent(EVENT_VENT, 20000); - events.RescheduleEvent(EVENT_SPEED, 15000); - events.RescheduleEvent(EVENT_SUMMON, 10000); - events.RescheduleEvent(EVENT_SOUND_BEGINNING, 10000); - events.RescheduleEvent(EVENT_POSITION_CHECK, 5000); + events.RescheduleEvent(EVENT_MISSILE, 5s); + events.RescheduleEvent(EVENT_VENT, 20s); + events.RescheduleEvent(EVENT_SPEED, 15s); + events.RescheduleEvent(EVENT_SUMMON, 10s); + events.RescheduleEvent(EVENT_SOUND_BEGINNING, 10s); + events.RescheduleEvent(EVENT_POSITION_CHECK, 5s); - events.RescheduleEvent(EVENT_PURSUE, 0); + events.RescheduleEvent(EVENT_PURSUE, 0ms); } void boss_flame_leviathan::boss_flame_leviathanAI::SpellHit(Unit* /*caster*/, SpellInfo const* spellInfo) @@ -619,8 +619,8 @@ void boss_flame_leviathan::boss_flame_leviathanAI::SpellHit(Unit* /*caster*/, S Talk(FLAME_LEVIATHAN_EMOTE_REPAIR); Talk(FLAME_LEVIATHAN_SAY_OVERLOAD); - events.DelayEvents(20 * IN_MILLISECONDS + 1); - events.ScheduleEvent(EVENT_REINSTALL, 20 * IN_MILLISECONDS); + events.DelayEvents(21ms); + events.ScheduleEvent(EVENT_REINSTALL, 20ms); } else if (spellInfo->Id == 62522 /*SPELL_ELECTROSHOCK*/) me->InterruptNonMeleeSpells(false); @@ -647,7 +647,7 @@ void boss_flame_leviathan::boss_flame_leviathanAI::JustDied(Unit*) void boss_flame_leviathan::boss_flame_leviathanAI::KilledUnit(Unit* who) { if (who == me->GetVictim()) - events.RescheduleEvent(EVENT_PURSUE, 0); + events.RescheduleEvent(EVENT_PURSUE, 0ms); if (who->GetTypeId() == TYPEID_PLAYER) Talk(FLAME_LEVIATHAN_SAY_SLAY); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index 89d61de72..b135c2183 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -421,7 +421,7 @@ public: if (!_respawningTrio) { _respawningTrio = true; - events.ScheduleEvent(EVENT_FREYA_RESPAWN_TRIO, 10000); + events.ScheduleEvent(EVENT_FREYA_RESPAWN_TRIO, 10s); } ++_trioKilled; @@ -447,7 +447,7 @@ public: aur->SetStackAmount(aur->GetStackAmount() - param); else // Aura out of stack { - events.ScheduleEvent(EVENT_FREYA_NATURE_BOMB, 5000); + events.ScheduleEvent(EVENT_FREYA_NATURE_BOMB, 5s); events.SetPhase(EVENT_PHASE_FINAL); aur->Remove(); return; @@ -482,10 +482,10 @@ public: if (Aura* aur = me->AddAura(SPELL_ATTUNED_TO_NATURE, me)) aur->SetStackAmount(150); - events.ScheduleEvent(EVENT_FREYA_ADDS_SPAM, 10000, 0, EVENT_PHASE_ADDS); - events.ScheduleEvent(EVENT_FREYA_LIFEBINDER, 30000); - events.ScheduleEvent(EVENT_FREYA_SUNBEAM, 17000); - events.ScheduleEvent(EVENT_FREYA_BERSERK, 600000); + events.ScheduleEvent(EVENT_FREYA_ADDS_SPAM, 10s, 0, EVENT_PHASE_ADDS); + events.ScheduleEvent(EVENT_FREYA_LIFEBINDER, 30s); + events.ScheduleEvent(EVENT_FREYA_SUNBEAM, 17s); + events.ScheduleEvent(EVENT_FREYA_BERSERK, 10min); events.SetPhase(EVENT_PHASE_ADDS); if( !m_pInstance ) @@ -502,7 +502,7 @@ public: elder->CastSpell(elder, SPELL_STONEBARK_ESSENCE, true); elder->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_FREYA_GROUND_TREMOR, 35000); + events.ScheduleEvent(EVENT_FREYA_GROUND_TREMOR, 35s); _elderGUID[0] = elder->GetGUID(); } @@ -513,7 +513,7 @@ public: elder->CastSpell(elder, SPELL_IRONBRANCH_ESSENCE, true); elder->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_FREYA_IRON_ROOT, 20000); + events.ScheduleEvent(EVENT_FREYA_IRON_ROOT, 20s); _elderGUID[1] = elder->GetGUID(); } @@ -524,7 +524,7 @@ public: elder->CastSpell(elder, SPELL_BRIGHTLEAF_ESSENCE, true); elder->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_FREYA_UNSTABLE_SUN_BEAM, 60000); + events.ScheduleEvent(EVENT_FREYA_UNSTABLE_SUN_BEAM, 1min); _elderGUID[2] = elder->GetGUID(); } @@ -561,17 +561,17 @@ public: else if (me->GetAura(SPELL_ATTUNED_TO_NATURE)) { me->RemoveAura(SPELL_ATTUNED_TO_NATURE); - events.ScheduleEvent(EVENT_FREYA_NATURE_BOMB, 5000); + events.ScheduleEvent(EVENT_FREYA_NATURE_BOMB, 5s); events.SetPhase(EVENT_PHASE_FINAL); return; } _spawnedAmount++; - events.RepeatEvent(60000); + events.Repeat(1min); break; case EVENT_FREYA_LIFEBINDER: { Talk(EMOTE_LIFEBINDERS_GIFT); - events.RepeatEvent(45000); + events.Repeat(45s); float x, y, z; for (uint8 i = 0; i < 10; ++i) { @@ -591,7 +591,7 @@ public: case EVENT_FREYA_SUNBEAM: if (Unit* target = SelectTarget(SelectTargetMethod::Random)) me->CastSpell(target, SPELL_SUNBEAM, false); - events.RepeatEvent(15000 + urand(0, 5000)); + events.Repeat(15s, 20s); break; case EVENT_FREYA_RESPAWN_TRIO: _deforestation = 0; @@ -615,7 +615,7 @@ public: if (!(--_minCount)) break; } - events.RepeatEvent(18000); + events.Repeat(18s); break; } case EVENT_FREYA_BERSERK: @@ -625,12 +625,12 @@ public: case EVENT_FREYA_GROUND_TREMOR: Talk(EMOTE_GROUND_TREMOR); me->CastSpell(me, SPELL_GROUND_TREMOR_FREYA, false); - events.RepeatEvent(25000 + urand(0, 10000)); + events.Repeat(25s, 35s); break; case EVENT_FREYA_IRON_ROOT: Talk(EMOTE_IRON_ROOTS); me->CastCustomSpell(SPELL_IRON_ROOTS_FREYA, SPELLVALUE_MAX_TARGETS, 1, me, false); - events.RepeatEvent(45000 + urand(0, 10000)); + events.Repeat(45s, 55s); break; case EVENT_FREYA_UNSTABLE_SUN_BEAM: me->SummonCreature(NPC_FREYA_UNSTABLE_SUN_BEAM, me->GetPositionX() + urand(7, 25), me->GetPositionY() + urand(7, 25), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()), 0, TEMPSUMMON_TIMED_DESPAWN, 10000); @@ -639,7 +639,7 @@ public: me->SummonCreature(NPC_FREYA_UNSTABLE_SUN_BEAM, me->GetPositionX() + urand(7, 25), me->GetPositionY() + urand(7, 25), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()), 0, TEMPSUMMON_TIMED_DESPAWN, 10000); me->SummonCreature(NPC_FREYA_UNSTABLE_SUN_BEAM, me->GetPositionX() + urand(7, 25), me->GetPositionY() + urand(7, 25), me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()), 0, TEMPSUMMON_TIMED_DESPAWN, 10000); } - events.RepeatEvent(38000 + urand(0, 10000)); + events.Repeat(38s, 48s); break; } @@ -700,9 +700,9 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_STONEBARK_FISTS_OF_STONE, 40000); - events.ScheduleEvent(EVENT_STONEBARK_GROUND_TREMOR, 5000); - events.ScheduleEvent(EVENT_STONEBARK_PETRIFIED_BARK, 20000); + events.ScheduleEvent(EVENT_STONEBARK_FISTS_OF_STONE, 40s); + events.ScheduleEvent(EVENT_STONEBARK_GROUND_TREMOR, 5s); + events.ScheduleEvent(EVENT_STONEBARK_PETRIFIED_BARK, 20s); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) // Prevents speech if combat is initiated by hardmode activation Talk(SAY_ELDER_AGGRO); @@ -730,17 +730,17 @@ public: { case EVENT_STONEBARK_FISTS_OF_STONE: me->CastSpell(me, SPELL_FISTS_OF_STONE, false); - events.RepeatEvent(60000); + events.Repeat(1min); break; case EVENT_STONEBARK_GROUND_TREMOR: if (!me->HasAura(SPELL_FISTS_OF_STONE)) me->CastSpell(me, SPELL_GROUND_TREMOR, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_STONEBARK_PETRIFIED_BARK: _chargesCount = RAID_MODE(60, 120); me->CastSpell(me, SPELL_PETRIFIED_BARK, false); - events.RepeatEvent(30000); + events.Repeat(30s); break; } @@ -796,9 +796,9 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_BRIGHTLEAF_FLUX, 10000); - events.ScheduleEvent(EVENT_BRIGHTLEAF_SOLAR_FLARE, 5000); - events.ScheduleEvent(EVENT_BRIGHTLEAF_UNSTABLE_SUN_BEAM, 8000); + events.ScheduleEvent(EVENT_BRIGHTLEAF_FLUX, 10s); + events.ScheduleEvent(EVENT_BRIGHTLEAF_SOLAR_FLARE, 5s); + events.ScheduleEvent(EVENT_BRIGHTLEAF_UNSTABLE_SUN_BEAM, 8s); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) // Prevents speech if combat is initiated by hardmode activation Talk(SAY_ELDER_AGGRO); @@ -818,7 +818,7 @@ public: case EVENT_BRIGHTLEAF_FLUX: if (Aura* aur = me->AddAura(SPELL_BRIGHTLEAF_FLUX, me)) aur->SetStackAmount(urand(1, 10)); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_BRIGHTLEAF_SOLAR_FLARE: if (Aura* aur = me->GetAura(SPELL_BRIGHTLEAF_FLUX)) @@ -826,10 +826,10 @@ public: me->CastCustomSpell(SPELL_SOLAR_FLARE, SPELLVALUE_MAX_TARGETS, aur->GetStackAmount(), me, false); me->RemoveAura(aur); } - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_BRIGHTLEAF_UNSTABLE_SUN_BEAM: - events.ScheduleEvent(EVENT_BRIGHTLEAF_DESPAWN_SUN_BEAM, 15000); + events.ScheduleEvent(EVENT_BRIGHTLEAF_DESPAWN_SUN_BEAM, 15s); if (Creature* beam = me->SummonCreature(NPC_UNSTABLE_SUN_BRIGHTLEAF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ())) { beam->CastSpell(beam, SPELL_UNSTABLE_SUN_BEAM_AURA, true); @@ -842,7 +842,7 @@ public: beam->CastSpell(beam, SPELL_PHOTOSYNTHESIS, true); summons.Summon(beam); } - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_BRIGHTLEAF_DESPAWN_SUN_BEAM: for (SummonList::iterator i = summons.begin(); i != summons.end();) @@ -907,9 +907,9 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_IRONBRANCH_IMPALE, 10000); - events.ScheduleEvent(EVENT_IRONBRANCH_IRON_ROOT, 15000); - events.ScheduleEvent(EVENT_IRONBRANCH_THORN_SWARM, 3000); + events.ScheduleEvent(EVENT_IRONBRANCH_IMPALE, 10s); + events.ScheduleEvent(EVENT_IRONBRANCH_IRON_ROOT, 15s); + events.ScheduleEvent(EVENT_IRONBRANCH_THORN_SWARM, 3s); if (!me->HasAura(SPELL_DRAINED_OF_POWER)) // Prevents speech if combat is initiated by hardmode activation Talk(SAY_ELDER_AGGRO); @@ -928,16 +928,16 @@ public: { case EVENT_IRONBRANCH_IMPALE: me->CastSpell(me->GetVictim(), SPELL_IMPALE, false); - events.RepeatEvent(17000); + events.Repeat(17s); break; case EVENT_IRONBRANCH_IRON_ROOT: me->CastCustomSpell(SPELL_IRON_ROOTS, SPELLVALUE_MAX_TARGETS, 1, me, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_IRONBRANCH_THORN_SWARM: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), SPELL_THORN_SWARM, false); - events.RepeatEvent(14000); + events.Repeat(14s); break; } @@ -1119,24 +1119,24 @@ public: if (me->GetEntry() == NPC_ANCIENT_CONSERVATOR) { me->CastSpell(me, SPELL_HEALTHY_SPORE_SUMMON, true); - events.ScheduleEvent(EVENT_ANCIENT_CONSERVATOR_GRIP, 6000); - events.ScheduleEvent(EVENT_ANCIENT_CONSERVATOR_NATURE_FURY, 14000); + events.ScheduleEvent(EVENT_ANCIENT_CONSERVATOR_GRIP, 6s); + events.ScheduleEvent(EVENT_ANCIENT_CONSERVATOR_NATURE_FURY, 14s); _stackCount = ACTION_REMOVE_25_STACK; } else if (me->GetEntry() == NPC_ANCIENT_WATER_SPIRIT) { - events.ScheduleEvent(EVENT_WATER_SPIRIT_CHARGE, 12000); + events.ScheduleEvent(EVENT_WATER_SPIRIT_CHARGE, 12s); _stackCount = ACTION_REMOVE_10_STACK; } else if (me->GetEntry() == NPC_STORM_LASHER) { - events.ScheduleEvent(EVENT_STORM_LASHER_LIGHTNING_LASH, 10000); - events.ScheduleEvent(EVENT_STORM_LASHER_STORMBOLT, 6000); + events.ScheduleEvent(EVENT_STORM_LASHER_LIGHTNING_LASH, 10s); + events.ScheduleEvent(EVENT_STORM_LASHER_STORMBOLT, 6s); _stackCount = ACTION_REMOVE_10_STACK; } else if (me->GetEntry() == NPC_DETONATING_LASHER) { - events.ScheduleEvent(EVENT_DETONATING_LASHER_FLAME_LASH, 10000); + events.ScheduleEvent(EVENT_DETONATING_LASHER_FLAME_LASH, 10s); _stackCount = ACTION_REMOVE_2_STACK; } else if (me->GetEntry() == NPC_SNAPLASHER) @@ -1159,7 +1159,7 @@ public: { case EVENT_ANCIENT_CONSERVATOR_NATURE_FURY: me->CastSpell(me->GetVictim(), SPELL_NATURE_FURY, false); - events.RepeatEvent(14000); + events.Repeat(14s); break; case EVENT_ANCIENT_CONSERVATOR_GRIP: me->CastSpell(me, SPELL_CONSERVATOR_GRIP, true); @@ -1167,8 +1167,8 @@ public: case EVENT_WATER_SPIRIT_CHARGE: me->CastSpell(me, SPELL_TIDAL_WAVE_AURA, true); me->CastSpell(me->GetVictim(), SPELL_TIDAL_WAVE, false); - events.RepeatEvent(12000); - events.ScheduleEvent(EVENT_WATER_SPIRIT_DAMAGE, 3000); + events.Repeat(12s); + events.ScheduleEvent(EVENT_WATER_SPIRIT_DAMAGE, 3s); break; case EVENT_WATER_SPIRIT_DAMAGE: me->CastSpell(me, SPELL_TIDAL_WAVE_DAMAGE, false); @@ -1176,11 +1176,11 @@ public: case EVENT_STORM_LASHER_LIGHTNING_LASH: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_LIGHTNING_LASH, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_STORM_LASHER_STORMBOLT: me->CastSpell(me->GetVictim(), SPELL_STORMBOLT, false); - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_DETONATING_LASHER_FLAME_LASH: me->CastSpell(me->GetVictim(), SPELL_FLAME_LASH, false); @@ -1189,7 +1189,7 @@ public: AttackStart(target); else me->DespawnOrUnsummon(1); - events.RepeatEvent(10000); + events.Repeat(10s); break; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index be2699ea0..15e20ee8d 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -157,12 +157,12 @@ public: me->SetInCombatWithZone(); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_VEZAX_SHADOW_CRASH, 13000); - events.RescheduleEvent(EVENT_SPELL_SEARING_FLAMES, 10000, 1); - events.RescheduleEvent(EVENT_SPELL_SURGE_OF_DARKNESS, 63000); - events.RescheduleEvent(EVENT_SPELL_MARK_OF_THE_FACELESS, 20000); - events.RescheduleEvent(EVENT_SPELL_SUMMON_SARONITE_VAPORS, 30000); - events.RescheduleEvent(EVENT_BERSERK, 600000); + events.RescheduleEvent(EVENT_SPELL_VEZAX_SHADOW_CRASH, 13s); + events.RescheduleEvent(EVENT_SPELL_SEARING_FLAMES, 10s, 1); + events.RescheduleEvent(EVENT_SPELL_SURGE_OF_DARKNESS, 63s); + events.RescheduleEvent(EVENT_SPELL_MARK_OF_THE_FACELESS, 20s); + events.RescheduleEvent(EVENT_SPELL_SUMMON_SARONITE_VAPORS, 30s); + events.RescheduleEvent(EVENT_BERSERK, 10min); Talk(SAY_AGGRO); @@ -210,7 +210,7 @@ public: return; if( !berserk && (me->GetPositionX() < 1720.0f || me->GetPositionX() > 1940.0f || me->GetPositionY() < 20.0f || me->GetPositionY() > 210.0f) ) - events.RescheduleEvent(EVENT_BERSERK, 1); + events.RescheduleEvent(EVENT_BERSERK, 1ms); events.Update(diff); @@ -228,7 +228,7 @@ public: break; case EVENT_SPELL_VEZAX_SHADOW_CRASH: { - events.RepeatEvent(10000); + events.Repeat(10s); std::vector players; Map::PlayerList const& pl = me->GetMap()->GetPlayers(); @@ -244,7 +244,7 @@ public: Player* target = players.at(urand(0, players.size() - 1)); me->SetGuidValue(UNIT_FIELD_TARGET, target->GetGUID()); me->CastSpell(target, SPELL_VEZAX_SHADOW_CRASH, false); - events.ScheduleEvent(EVENT_RESTORE_TARGET, 750); + events.ScheduleEvent(EVENT_RESTORE_TARGET, 750ms); } } break; @@ -255,13 +255,13 @@ public: case EVENT_SPELL_SEARING_FLAMES: if(!me->HasAura(SPELL_SARONITE_BARRIER)) me->CastSpell(me->GetVictim(), SPELL_SEARING_FLAMES, false); - events.RepeatEvent( me->GetMap()->Is25ManRaid() ? 8000 : 15000 ); + events.Repeat(me->GetMap()->Is25ManRaid() ? 8s : 15s); break; case EVENT_SPELL_SURGE_OF_DARKNESS: Talk(SAY_SURGE_OF_DARKNESS); Talk(SAY_EMOTE_SURGE_OF_DARKNESS); me->CastSpell(me, SPELL_SURGE_OF_DARKNESS, false); - events.RepeatEvent(63000); + events.Repeat(63s); events.DelayEvents(10000, 1); break; case EVENT_SPELL_MARK_OF_THE_FACELESS: @@ -288,7 +288,7 @@ public: if (t) me->CastSpell(t, SPELL_MARK_OF_THE_FACELESS_AURA, false); - events.RepeatEvent(40000); + events.Repeat(40s); } break; case EVENT_SPELL_SUMMON_SARONITE_VAPORS: @@ -297,7 +297,7 @@ public: me->CastSpell(me, SPELL_SUMMON_SARONITE_VAPORS, false); if( vaporsCount < 6 || !hardmodeAvailable ) - events.RepeatEvent(30000); + events.Repeat(30s); else { for (ObjectGuid const& guid : summons) @@ -310,7 +310,7 @@ public: events.DelayEvents(12000, 0); events.DelayEvents(12000, 1); - events.ScheduleEvent(EVENT_SARONITE_VAPORS_SWIRL, 6000); + events.ScheduleEvent(EVENT_SARONITE_VAPORS_SWIRL, 6s); } } break; @@ -321,7 +321,7 @@ public: if( Creature* sv = ObjectAccessor::GetCreature(*me, *(summons.begin())) ) sv->CastSpell(sv, SPELL_SARONITE_ANIMUS_FORMATION_VISUAL, true); - events.ScheduleEvent(EVENT_SPELL_SUMMON_SARONITE_ANIMUS, 2000); + events.ScheduleEvent(EVENT_SPELL_SUMMON_SARONITE_ANIMUS, 2s); break; } break; @@ -334,7 +334,7 @@ public: if( Creature* sv = ObjectAccessor::GetCreature(*me, *(summons.begin())) ) sv->CastSpell(sv, SPELL_SUMMON_SARONITE_ANIMUS, true); - events.ScheduleEvent(EVENT_DESPAWN_SARONITE_VAPORS, 2500); + events.ScheduleEvent(EVENT_DESPAWN_SARONITE_VAPORS, 2500ms); break; } break; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 41280a413..14f788053 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -269,10 +269,10 @@ public: me->CastSpell(me, SPELL_BITING_COLD_BOSS_AURA, true); SmallIcicles(true); events.Reset(); - events.ScheduleEvent(EVENT_FLASH_FREEZE, urand(48000, 49000)); - events.ScheduleEvent(EVENT_FREEZE, urand(17000,20000)); - events.ScheduleEvent(EVENT_BERSERK, 480000); - events.ScheduleEvent(EVENT_HARD_MODE_MISSED, 180000); + events.ScheduleEvent(EVENT_FLASH_FREEZE, 48s, 49s); + events.ScheduleEvent(EVENT_FREEZE, 17s, 20s); + events.ScheduleEvent(EVENT_BERSERK, 8min); + events.ScheduleEvent(EVENT_HARD_MODE_MISSED, 3min); Talk(TEXT_AGGRO); if (pInstance && pInstance->GetData(TYPE_HODIR) != DONE) @@ -298,7 +298,7 @@ public: if (GameObject* go = pInstance->instance->GetGameObject(pInstance->GetGuidData(GO_HODIR_CHEST_HARD))) { go->SetGoState(GO_STATE_ACTIVE); - events.ScheduleEvent(EVENT_DESPAWN_CHEST, 3000); + events.ScheduleEvent(EVENT_DESPAWN_CHEST, 3s); } } break; @@ -461,10 +461,10 @@ public: Talk(TEXT_FLASH_FREEZE); Talk(TEXT_EMOTE_FREEZE); SmallIcicles(false); - events.ScheduleEvent(EVENT_FLASH_FREEZE, urand(48000, 49000)); - events.ScheduleEvent(EVENT_SMALL_ICICLES_ENABLE, Is25ManRaid() ? 12000 : 24000); - events.ScheduleEvent(EVENT_FROZEN_BLOWS, 15000); - events.RescheduleEvent(EVENT_FREEZE, urand(17000, 20000)); + events.ScheduleEvent(EVENT_FLASH_FREEZE, 48s, 49s); + events.ScheduleEvent(EVENT_SMALL_ICICLES_ENABLE, Is25ManRaid() ? 12s : 24s); + events.ScheduleEvent(EVENT_FROZEN_BLOWS, 15s); + events.RescheduleEvent(EVENT_FREEZE, 17s, 20s); } break; case EVENT_SMALL_ICICLES_ENABLE: @@ -488,7 +488,7 @@ public: { me->CastSpell(target, SPELL_FREEZE, false); } - events.RescheduleEvent(EVENT_FREEZE, urand(17000, 20000)); + events.RescheduleEvent(EVENT_FREEZE, 17s, 20s); break; } @@ -781,9 +781,9 @@ public: void ScheduleAbilities() { - events.ScheduleEvent(EVENT_PRIEST_DISPELL_MAGIC, 7000); - events.ScheduleEvent(EVENT_PRIEST_GREAT_HEAL, urand(6000, 7000)); - events.ScheduleEvent(EVENT_PRIEST_SMITE, 2100); + events.ScheduleEvent(EVENT_PRIEST_DISPELL_MAGIC, 7s); + events.ScheduleEvent(EVENT_PRIEST_GREAT_HEAL, 6s, 7s); + events.ScheduleEvent(EVENT_PRIEST_SMITE, 2100ms); } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override @@ -791,7 +791,7 @@ public: if(spell->Id == SPELL_FLASH_FREEZE_TRAPPED_NPC) { events.Reset(); - events.ScheduleEvent(EVENT_TRY_FREE_HELPER, 2000); + events.ScheduleEvent(EVENT_TRY_FREE_HELPER, 2s); } } @@ -817,21 +817,21 @@ public: ScheduleAbilities(); break; } - events.RepeatEvent(2000); + events.Repeat(2s); } break; case EVENT_PRIEST_DISPELL_MAGIC: me->CastCustomSpell(SPELL_PRIEST_DISPELL_MAGIC, SPELLVALUE_MAX_TARGETS, 1, (Unit*)nullptr, false); - events.RepeatEvent(7000); + events.Repeat(7s); break; case EVENT_PRIEST_GREAT_HEAL: me->CastSpell(me, SPELL_PRIEST_GREAT_HEAL, false); - events.RepeatEvent(urand(6000, 7000)); + events.Repeat(6s, 7s); break; case EVENT_PRIEST_SMITE: if (Unit* victim = me->GetVictim()) me->CastSpell(victim, SPELL_PRIEST_SMITE, false); - events.RepeatEvent(2100); + events.Repeat(2100ms); break; } } @@ -879,8 +879,8 @@ public: void ScheduleAbilities() { - events.ScheduleEvent(EVENT_DRUID_WRATH, 1600); - events.ScheduleEvent(EVENT_DRUID_STARLIGHT, 10000); + events.ScheduleEvent(EVENT_DRUID_WRATH, 1600ms); + events.ScheduleEvent(EVENT_DRUID_STARLIGHT, 10s); } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override @@ -888,7 +888,7 @@ public: if(spell->Id == SPELL_FLASH_FREEZE_TRAPPED_NPC) { events.Reset(); - events.ScheduleEvent(EVENT_TRY_FREE_HELPER, 2000); + events.ScheduleEvent(EVENT_TRY_FREE_HELPER, 2s); } } @@ -914,22 +914,22 @@ public: ScheduleAbilities(); break; } - events.RepeatEvent(2000); + events.Repeat(2s); } break; case EVENT_DRUID_WRATH: if (Unit* victim = me->GetVictim()) me->CastSpell(victim, SPELL_DRUID_WRATH, false); - events.RepeatEvent(1600); + events.Repeat(1600ms); break; case EVENT_DRUID_STARLIGHT: if (me->GetPositionZ() < 433.0f) // ensure npc is on the ground { me->CastSpell(me, SPELL_DRUID_STARLIGHT_AREA_AURA, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; } - events.RepeatEvent(3000); + events.Repeat(3s); break; } } @@ -977,8 +977,8 @@ public: void ScheduleAbilities() { - events.ScheduleEvent(EVENT_SHAMAN_LAVA_BURST, 2600); - events.ScheduleEvent(EVENT_SHAMAN_STORM_CLOUD, 10000); + events.ScheduleEvent(EVENT_SHAMAN_LAVA_BURST, 2600ms); + events.ScheduleEvent(EVENT_SHAMAN_STORM_CLOUD, 10s); } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override @@ -986,7 +986,7 @@ public: if(spell->Id == SPELL_FLASH_FREEZE_TRAPPED_NPC) { events.Reset(); - events.ScheduleEvent(EVENT_TRY_FREE_HELPER, 2000); + events.ScheduleEvent(EVENT_TRY_FREE_HELPER, 2s); } } @@ -1019,18 +1019,18 @@ public: ScheduleAbilities(); break; } - events.RepeatEvent(2000); + events.Repeat(2s); } break; case EVENT_SHAMAN_LAVA_BURST: if (Unit* victim = me->GetVictim()) me->CastSpell(victim, SPELL_SHAMAN_LAVA_BURST, false); - events.RepeatEvent(2600); + events.Repeat(2600ms); break; case EVENT_SHAMAN_STORM_CLOUD: if (Player* target = ScriptedAI::SelectTargetFromPlayerList(35.0f, SPELL_SHAMAN_STORM_CLOUD)) me->CastSpell(target, SPELL_SHAMAN_STORM_CLOUD, false); - events.RepeatEvent(30000); + events.Repeat(30s); break; } } @@ -1078,9 +1078,9 @@ public: void ScheduleAbilities() { - events.ScheduleEvent(EVENT_MAGE_FIREBALL, 3100); - events.ScheduleEvent(EVENT_MAGE_TOASTY_FIRE, 6000); - events.ScheduleEvent(EVENT_MAGE_MELT_ICE, 1000); + events.ScheduleEvent(EVENT_MAGE_FIREBALL, 3100ms); + events.ScheduleEvent(EVENT_MAGE_TOASTY_FIRE, 6s); + events.ScheduleEvent(EVENT_MAGE_MELT_ICE, 1s); } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override @@ -1088,7 +1088,7 @@ public: if(spell->Id == SPELL_FLASH_FREEZE_TRAPPED_NPC) { events.Reset(); - events.ScheduleEvent(EVENT_TRY_FREE_HELPER, 2000); + events.ScheduleEvent(EVENT_TRY_FREE_HELPER, 2s); } } @@ -1114,17 +1114,17 @@ public: ScheduleAbilities(); break; } - events.RepeatEvent(2000); + events.Repeat(2s); } break; case EVENT_MAGE_FIREBALL: if (Unit* victim = me->GetVictim()) me->CastSpell(victim, SPELL_MAGE_FIREBALL, false); - events.RepeatEvent(3100); + events.Repeat(3100ms); break; case EVENT_MAGE_TOASTY_FIRE: me->CastSpell(me, SPELL_MAGE_CONJURE_TOASTY_FIRE, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_MAGE_MELT_ICE: { @@ -1141,11 +1141,11 @@ public: if( found ) { - events.DelayEvents(2000); - events.RepeatEvent(1999); + events.DelayEvents(2s); + events.Repeat(2s); break; } - events.RepeatEvent(5000); + events.Repeat(5s); } break; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index 3bf5b917f..90556a415 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -247,9 +247,9 @@ public: lastShatterMSTime = 0; events.Reset(); events.ScheduleEvent(EVENT_ACTIVATE_CONSTRUCT, RAID_MODE(40000, 30000)); - events.ScheduleEvent(EVENT_SPELL_SCORCH, 10000); - events.ScheduleEvent(EVENT_SPELL_FLAME_JETS, 32000); - events.ScheduleEvent(EVENT_GRAB, 25000); + events.ScheduleEvent(EVENT_SPELL_SCORCH, 10s); + events.ScheduleEvent(EVENT_SPELL_FLAME_JETS, 32s); + events.ScheduleEvent(EVENT_GRAB, 25s); Talk(SAY_AGGRO); DoZoneInCombat(); @@ -354,8 +354,8 @@ public: me->DisableRotate(true); me->SendMovementFlagUpdate(); me->CastSpell(me->GetVictim(), S_SCORCH, false); - events.RepeatEvent(20000); - events.RescheduleEvent(EVENT_ENABLE_ROTATE, 3001); + events.Repeat(20s); + events.RescheduleEvent(EVENT_ENABLE_ROTATE, 3s); break; case EVENT_ENABLE_ROTATE: me->SetControlled(false, UNIT_STATE_ROOT); @@ -364,7 +364,7 @@ public: case EVENT_SPELL_FLAME_JETS: Talk(EMOTE_JETS); me->CastSpell(me->GetVictim(), S_FLAME_JETS, false); - events.RepeatEvent(25000); + events.Repeat(25s); break; case EVENT_GRAB: { @@ -406,8 +406,8 @@ public: } } - events.RepeatEvent(24000); // +6000 below - events.DelayEvents(6000); + events.Repeat(24s); + events.DelayEvents(6s); } break; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index 807fe43b3..f6f3020bc 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -349,7 +349,7 @@ public: if (me->IsInCombat()) { Talk(SAY_LEFT_ARM_GONE); - events.ScheduleEvent(EVENT_RESTORE_ARM_LEFT, 50000); + events.ScheduleEvent(EVENT_RESTORE_ARM_LEFT, 50s); } } else @@ -358,13 +358,13 @@ public: if (me->IsInCombat()) { Talk(SAY_RIGHT_ARM_GONE); - events.ScheduleEvent(EVENT_RESTORE_ARM_RIGHT, 50000); + events.ScheduleEvent(EVENT_RESTORE_ARM_RIGHT, 50s); } } me->CastSpell(me, SPELL_ARM_DEAD, true); if (!_right && !_left) - events.ScheduleEvent(EVENT_STONE_SHOUT, 5000); + events.ScheduleEvent(EVENT_STONE_SHOUT, 5s); } } @@ -382,11 +382,11 @@ public: if (m_pInstance) m_pInstance->SetData(TYPE_KOLOGARN, IN_PROGRESS); - events.ScheduleEvent(EVENT_SMASH, 8000); - events.ScheduleEvent(EVENT_SWEEP, 17000); - events.ScheduleEvent(EVENT_GRIP, 15000); - events.ScheduleEvent(EVENT_FOCUSED_EYEBEAM, 10000); - events.ScheduleEvent(EVENT_PREPARE_BREATH, 3000); + events.ScheduleEvent(EVENT_SMASH, 8s); + events.ScheduleEvent(EVENT_SWEEP, 17s); + events.ScheduleEvent(EVENT_GRIP, 15s); + events.ScheduleEvent(EVENT_FOCUSED_EYEBEAM, 10s); + events.ScheduleEvent(EVENT_PREPARE_BREATH, 3s); //events.ScheduleEvent(EVENT_ENRAGE, x); no info Talk(SAY_AGGRO); @@ -426,7 +426,7 @@ public: } me->CastSpell(me->GetVictim(), SPELL_STONE_SHOUT, false); - events.ScheduleEvent(EVENT_STONE_SHOUT, 2000); + events.ScheduleEvent(EVENT_STONE_SHOUT, 2s); break; case EVENT_SMASH: if (_left && _right) @@ -434,8 +434,8 @@ public: else if (_left || _right) me->CastSpell(me->GetVictim(), SPELL_ONEARMED_OVERHEAD_SMASH, false); - events.DelayEvents(1000); - events.ScheduleEvent(EVENT_SMASH, 14000); + events.DelayEvents(1s); + events.ScheduleEvent(EVENT_SMASH, 14s); return; case EVENT_SWEEP: if (_left) @@ -447,11 +447,11 @@ public: Talk(SAY_SHOCKWAVE); } - events.DelayEvents(1000); - events.ScheduleEvent(EVENT_SWEEP, 17000); + events.DelayEvents(1s); + events.ScheduleEvent(EVENT_SWEEP, 17s); return; case EVENT_GRIP: - events.ScheduleEvent(EVENT_GRIP, 25000); + events.ScheduleEvent(EVENT_GRIP, 25s); if (!_right) break; @@ -461,7 +461,7 @@ public: return; case EVENT_FOCUSED_EYEBEAM: { - events.ScheduleEvent(EVENT_FOCUSED_EYEBEAM, 20000); + events.ScheduleEvent(EVENT_FOCUSED_EYEBEAM, 20s); if ((eyebeamTarget = SelectTarget(SelectTargetMethod::MinDistance, 0, 0, true))) { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index cdefcc475..deb302153 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -361,16 +361,16 @@ public: if (!hardmode) { Talk(SAY_MKII_ACTIVATE); - events.ScheduleEvent(EVENT_SIT_LMK2, 6000); - events.ScheduleEvent(EVENT_BERSERK, 900000); + events.ScheduleEvent(EVENT_SIT_LMK2, 6s); + events.ScheduleEvent(EVENT_BERSERK, 15min); } else { - events.ScheduleEvent(EVENT_MIMIRON_SAY_HARDMODE, 7000); - events.ScheduleEvent(EVENT_BERSERK, Is25ManRaid() ? 10 * MINUTE* IN_MILLISECONDS : 8 * MINUTE * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_MIMIRON_SAY_HARDMODE, 7s); + events.ScheduleEvent(EVENT_BERSERK, Is25ManRaid() ? 10min : 8min); - events.ScheduleEvent(EVENT_COMPUTER_SAY_INITIATED, 0); - events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, 3000); + events.ScheduleEvent(EVENT_COMPUTER_SAY_INITIATED, 0ms); + events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, 3s); minutesTalkNum = Is25ManRaid() ? TALK_COMPUTER_TEN : TALK_COMPUTER_EIGHT; for (uint32 i = 0; i < uint32(TALK_COMPUTER_ZERO - minutesTalkNum - 1); ++i) events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, (i + 1)*MINUTE * IN_MILLISECONDS); @@ -426,8 +426,8 @@ public: break; case EVENT_MIMIRON_SAY_HARDMODE: Talk(SAY_HARDMODE_ON); - events.ScheduleEvent(EVENT_SPAWN_FLAMES_INITIAL, 0); - events.ScheduleEvent(EVENT_SIT_LMK2, 4000); + events.ScheduleEvent(EVENT_SPAWN_FLAMES_INITIAL, 0ms); + events.ScheduleEvent(EVENT_SIT_LMK2, 4s); break; case EVENT_SPAWN_FLAMES_INITIAL: { @@ -456,7 +456,7 @@ public: pg.erase(pg.begin() + index); } - events.RepeatEvent(30000); + events.Repeat(30s); } break; case EVENT_BERSERK: @@ -464,7 +464,7 @@ public: Talk(SAY_BERSERK); if( hardmode ) me->SummonCreature(33576, 2744.78f, 2569.47f, 364.32f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 120000); - events.ScheduleEvent(EVENT_BERSERK_2, 0); + events.ScheduleEvent(EVENT_BERSERK_2, 0ms); break; case EVENT_BERSERK_2: { @@ -477,14 +477,14 @@ public: LMK2->CastSpell(LMK2, SPELL_BERSERK, true); if ((ACU = GetACU())) ACU->CastSpell(ACU, SPELL_BERSERK, true); - events.RepeatEvent(30000); + events.Repeat(30s); } break; case EVENT_SIT_LMK2: if(Creature* LMK2 = GetLMK2()) { me->EnterVehicle(LMK2, 6); - events.ScheduleEvent(EVENT_SIT_LMK2_INTERVAL, 2000); + events.ScheduleEvent(EVENT_SIT_LMK2_INTERVAL, 2s); break; } EnterEvadeMode(EVADE_REASON_OTHER); @@ -510,7 +510,7 @@ public: me->EnterVehicle(LMK2, 1); Talk(SAY_MKII_DEATH); LMK2->SetFacingTo(3.58f); - events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_0, 6000); + events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_0, 6s); break; } EnterEvadeMode(EVADE_REASON_OTHER); @@ -522,7 +522,7 @@ public: elevator->UseDoorOrButton(0, false); elevator->EnableCollision(false); } - events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_1, 6000); + events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_1, 6s); break; case EVENT_ELEVATOR_INTERVAL_1: if(me->SummonCreature(NPC_VX001, 2744.65f, 2569.46f, 364.40f, 3.14f, TEMPSUMMON_MANUAL_DESPAWN)) @@ -533,7 +533,7 @@ public: elevator->UseDoorOrButton(0, true); elevator->EnableCollision(false); } - events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_2, 18000); + events.ScheduleEvent(EVENT_ELEVATOR_INTERVAL_2, 18s); break; } EnterEvadeMode(EVADE_REASON_OTHER); @@ -542,20 +542,20 @@ public: if (Creature* VX001 = GetVX001()) { me->EnterVehicle(VX001, 0); - events.ScheduleEvent(EVENT_SITTING_ON_VX001, 4000); + events.ScheduleEvent(EVENT_SITTING_ON_VX001, 4s); break; } EnterEvadeMode(EVADE_REASON_OTHER); break; case EVENT_SITTING_ON_VX001: Talk(SAY_VX001_ACTIVATE); - events.ScheduleEvent(EVENT_ENTER_VX001, 5000); + events.ScheduleEvent(EVENT_ENTER_VX001, 5s); break; case EVENT_ENTER_VX001: if( Creature* VX001 = GetVX001() ) { me->EnterVehicle(VX001, 1); - events.ScheduleEvent(EVENT_EMOTE_VX001, 2000); + events.ScheduleEvent(EVENT_EMOTE_VX001, 2s); break; } EnterEvadeMode(EVADE_REASON_OTHER); @@ -564,7 +564,7 @@ public: if( Creature* VX001 = GetVX001() ) { VX001->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); - events.ScheduleEvent(EVENT_VX001_START_FIGHT, 1750); + events.ScheduleEvent(EVENT_VX001_START_FIGHT, 1750ms); break; } EnterEvadeMode(EVADE_REASON_OTHER); @@ -585,7 +585,7 @@ public: { VX001->HandleEmoteCommand(EMOTE_STATE_DROWNED); VX001->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DROWNED); - events.ScheduleEvent(EVENT_GET_OUT_VX001, 2500); + events.ScheduleEvent(EVENT_GET_OUT_VX001, 2500ms); break; } EnterEvadeMode(EVADE_REASON_OTHER); @@ -598,7 +598,7 @@ public: float speed = ACU->GetDistance(2737.75f, 2574.22f, 381.34f) / 2.0f; ACU->MonsterMoveWithSpeed(2737.75f, 2574.22f, 381.34f, speed); ACU->SetPosition(2737.75f, 2574.22f, 381.34f, M_PI); - events.ScheduleEvent(EVENT_SAY_VX001_DEAD, 2000); + events.ScheduleEvent(EVENT_SAY_VX001_DEAD, 2s); break; } EnterEvadeMode(EVADE_REASON_OTHER); @@ -606,20 +606,20 @@ public: case EVENT_SAY_VX001_DEAD: changeAllowedFlameSpreadTime = true; Talk(SAY_VX001_DEATH); - events.ScheduleEvent(EVENT_ENTER_ACU, 7000); + events.ScheduleEvent(EVENT_ENTER_ACU, 7s); break; case EVENT_ENTER_ACU: if( Creature* ACU = GetACU() ) { me->EnterVehicle(ACU, 0); - events.ScheduleEvent(EVENT_SAY_ACU_ACTIVATE, 6000); + events.ScheduleEvent(EVENT_SAY_ACU_ACTIVATE, 6s); break; } EnterEvadeMode(EVADE_REASON_OTHER); break; case EVENT_SAY_ACU_ACTIVATE: Talk(SAY_AERIAL_ACTIVATE); - events.ScheduleEvent(EVENT_ACU_START_ATTACK, 4000); + events.ScheduleEvent(EVENT_ACU_START_ATTACK, 4s); break; case EVENT_ACU_START_ATTACK: if( Creature* ACU = GetACU() ) @@ -634,13 +634,13 @@ public: break; case EVENT_SAY_ACU_DEAD: Talk(SAY_AERIAL_DEATH); - events.ScheduleEvent(EVENT_LEVIATHAN_COME_CLOSER, 5000); + events.ScheduleEvent(EVENT_LEVIATHAN_COME_CLOSER, 5s); break; case EVENT_LEVIATHAN_COME_CLOSER: if (Creature* LMK2 = GetLMK2()) { LMK2->GetMotionMaster()->MoveCharge(2755.77f, 2574.95f, 364.31f, 21.0f); - events.ScheduleEvent(EVENT_VX001_EMOTE_JUMP, 4000); + events.ScheduleEvent(EVENT_VX001_EMOTE_JUMP, 4s); break; } EnterEvadeMode(EVADE_REASON_OTHER); @@ -658,7 +658,7 @@ public: VX001->SendMeleeAttackStop(); VX001->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_CUSTOM_SPELL_02); VX001->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOM_SPELL_02); - events.ScheduleEvent(EVENT_LEVIATHAN_RIDE_MIDDLE, 4800); + events.ScheduleEvent(EVENT_LEVIATHAN_RIDE_MIDDLE, 4800ms); } break; case EVENT_LEVIATHAN_RIDE_MIDDLE: @@ -675,7 +675,7 @@ public: VX001->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_01); VX001->HandleEmoteCommand(EMOTE_STATE_CUSTOM_SPELL_01); VX001->EnterVehicle(LMK2, 3); - events.ScheduleEvent(EVENT_JOIN_TOGETHER, 3000); + events.ScheduleEvent(EVENT_JOIN_TOGETHER, 3s); } break; case EVENT_JOIN_TOGETHER: @@ -692,7 +692,7 @@ public: ACU->EnterVehicle(VX001, 3); me->EnterVehicle(VX001, 1); Talk(SAY_V07TRON_ACTIVATE); - events.ScheduleEvent(EVENT_START_PHASE4, 10000); + events.ScheduleEvent(EVENT_START_PHASE4, 10s); } break; case EVENT_START_PHASE4: @@ -780,7 +780,7 @@ public: computer->AI()->Talk(TALK_COMPUTER_TERMINATED); events.Reset(); - events.ScheduleEvent(EVENT_SAY_VOLTRON_DEAD, 6000); + events.ScheduleEvent(EVENT_SAY_VOLTRON_DEAD, 6s); } break; case EVENT_SAY_VOLTRON_DEAD: @@ -794,7 +794,7 @@ public: go->SetLootRecipient(me->GetMap()); } } - events.ScheduleEvent(EVENT_DISAPPEAR, 15000); + events.ScheduleEvent(EVENT_DISAPPEAR, 15s); break; case EVENT_DISAPPEAR: if( pInstance ) @@ -903,13 +903,13 @@ public: switch (value) // end of phase 1-3, 4-6 for voltron { case 1: - events.ScheduleEvent(EVENT_LMK2_RETREAT_INTERVAL, 5000); + events.ScheduleEvent(EVENT_LMK2_RETREAT_INTERVAL, 5s); break; case 2: - events.ScheduleEvent(EVENT_VX001_EMOTESTATE_DEATH, 2500); + events.ScheduleEvent(EVENT_VX001_EMOTESTATE_DEATH, 2500ms); break; case 3: - events.ScheduleEvent(EVENT_SAY_ACU_DEAD, 5000); + events.ScheduleEvent(EVENT_SAY_ACU_DEAD, 5s); break; case 4: case 5: @@ -928,7 +928,7 @@ public: Spell* s2 = VX001->GetCurrentSpell(CURRENT_GENERIC_SPELL); Spell* s3 = ACU->GetCurrentSpell(CURRENT_GENERIC_SPELL); if (s1 && s2 && s3 && s1->GetSpellInfo()->Id == SPELL_SELF_REPAIR && s2->GetSpellInfo()->Id == SPELL_SELF_REPAIR && s3->GetSpellInfo()->Id == SPELL_SELF_REPAIR) - events.ScheduleEvent(EVENT_FINISH, 0); + events.ScheduleEvent(EVENT_FINISH, 0ms); } break; case 7: @@ -1023,13 +1023,13 @@ public: AttackStart(target); DoZoneInCombat(); events.Reset(); - events.ScheduleEvent(EVENT_SPELL_NAPALM_SHELL, 3000); - events.ScheduleEvent(EVENT_SPELL_PLASMA_BLAST, 10000); - events.ScheduleEvent(EVENT_SPELL_SHOCK_BLAST, 20000); - events.ScheduleEvent(EVENT_PROXIMITY_MINES_1, 6000); + events.ScheduleEvent(EVENT_SPELL_NAPALM_SHELL, 3s); + events.ScheduleEvent(EVENT_SPELL_PLASMA_BLAST, 10s); + events.ScheduleEvent(EVENT_SPELL_SHOCK_BLAST, 20s); + events.ScheduleEvent(EVENT_PROXIMITY_MINES_1, 6s); if (Creature* c = GetMimiron()) if (c->AI()->GetData(1)) - events.ScheduleEvent(EVENT_FLAME_SUPPRESSION_50000, 60000); + events.ScheduleEvent(EVENT_FLAME_SUPPRESSION_50000, 60s); break; case 4: me->SetReactState(REACT_AGGRESSIVE); @@ -1040,8 +1040,8 @@ public: AttackStart(target); DoZoneInCombat(); events.Reset(); - events.ScheduleEvent(EVENT_SPELL_SHOCK_BLAST, 20000); - events.ScheduleEvent(EVENT_PROXIMITY_MINES_1, 6000); + events.ScheduleEvent(EVENT_SPELL_SHOCK_BLAST, 20s); + events.ScheduleEvent(EVENT_PROXIMITY_MINES_1, 6s); break; } } @@ -1130,7 +1130,7 @@ public: if( pTarget ) cannon->CastSpell(pTarget, SPELL_NAPALM_SHELL, false); - events.RepeatEvent(14000); + events.Repeat(14s); } break; case EVENT_SPELL_PLASMA_BLAST: @@ -1139,12 +1139,12 @@ public: Talk(EMOTE_PLASMA_BLAST); cannon->CastSpell(victim, SPELL_PLASMA_BLAST, false); } - events.RepeatEvent(22000); + events.Repeat(22s); break; case EVENT_SPELL_SHOCK_BLAST: me->CastSpell(me->GetVictim(), SPELL_SHOCK_BLAST, false); - events.RepeatEvent(30000); - events.ScheduleEvent(EVENT_PROXIMITY_MINES_1, 8000); + events.Repeat(30s); + events.ScheduleEvent(EVENT_PROXIMITY_MINES_1, 8s); break; case EVENT_PROXIMITY_MINES_1: for (uint8 i = 0; i < 10; ++i) @@ -1278,16 +1278,16 @@ public: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_SPELL_CAST_OMNI); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); events.Reset(); - events.ScheduleEvent(EVENT_SPELL_HEAT_WAVE, 10000); - events.ScheduleEvent(EVENT_SPELL_ROCKET_STRIKE, 16000); - events.ScheduleEvent(EVENT_SPELL_RAPID_BURST, 0); - events.ScheduleEvent(EVENT_SPELL_SPINNING_UP, 30000); - events.ScheduleEvent(EVENT_REINSTALL_ROCKETS, 3000); + events.ScheduleEvent(EVENT_SPELL_HEAT_WAVE, 10s); + events.ScheduleEvent(EVENT_SPELL_ROCKET_STRIKE, 16s); + events.ScheduleEvent(EVENT_SPELL_RAPID_BURST, 0ms); + events.ScheduleEvent(EVENT_SPELL_SPINNING_UP, 30s); + events.ScheduleEvent(EVENT_REINSTALL_ROCKETS, 3s); if (Creature* c = GetMimiron()) if (c->AI()->GetData(1)) { - events.ScheduleEvent(EVENT_FLAME_SUPPRESSION_10, 7000); - events.ScheduleEvent(EVENT_FROST_BOMB, 1000); + events.ScheduleEvent(EVENT_FLAME_SUPPRESSION_10, 7s); + events.ScheduleEvent(EVENT_FROST_BOMB, 1s); } break; case 4: @@ -1295,13 +1295,13 @@ public: fighting = true; me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); events.Reset(); - events.ScheduleEvent(EVENT_REINSTALL_ROCKETS, 3000); - events.ScheduleEvent(EVENT_SPELL_ROCKET_STRIKE, 16000); - events.ScheduleEvent(EVENT_HAND_PULSE, 1); - events.ScheduleEvent(EVENT_SPELL_SPINNING_UP, 30000); + events.ScheduleEvent(EVENT_REINSTALL_ROCKETS, 3s); + events.ScheduleEvent(EVENT_SPELL_ROCKET_STRIKE, 16s); + events.ScheduleEvent(EVENT_HAND_PULSE, 1ms); + events.ScheduleEvent(EVENT_SPELL_SPINNING_UP, 30s); if (Creature* c = GetMimiron()) if (c->AI()->GetData(1)) - events.ScheduleEvent(EVENT_FROST_BOMB, 1000); + events.ScheduleEvent(EVENT_FROST_BOMB, 1s); break; } } @@ -1395,7 +1395,7 @@ public: break; case EVENT_SPELL_HEAT_WAVE: me->CastSpell(me, SPELL_HEAT_WAVE, true); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_SPELL_ROCKET_STRIKE: if( Vehicle* vk = me->GetVehicleKit() ) @@ -1418,8 +1418,8 @@ public: r->ToCreature()->AI()->SetData(0, 0); } } - events.RepeatEvent(20000); - events.ScheduleEvent(EVENT_REINSTALL_ROCKETS, 10000); + events.Repeat(20s); + events.ScheduleEvent(EVENT_REINSTALL_ROCKETS, 10s); } break; case EVENT_REINSTALL_ROCKETS: @@ -1438,7 +1438,7 @@ public: me->CastSpell(p, SPELL_RAPID_BURST, true); me->SetFacingToObject(p); } - events.RepeatEvent(3200); + events.Repeat(3200ms); break; case EVENT_HAND_PULSE: if (Player* p = SelectTargetFromPlayerList(80.0f)) @@ -1463,10 +1463,10 @@ public: leftarm = !leftarm; } - events.RepeatEvent(1750); + events.Repeat(1750ms); break; case EVENT_SPELL_SPINNING_UP: - events.RepeatEvent(45000); + events.Repeat(45s); if (Player* p = SelectTargetFromPlayerList(80.0f)) { float angle = me->GetAngle(p); @@ -1480,16 +1480,16 @@ public: vehicle->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_01); vehicle->HandleEmoteCommand(EMOTE_STATE_CUSTOM_SPELL_01); } - events.RescheduleEvent((Phase == 2 ? EVENT_SPELL_RAPID_BURST : EVENT_HAND_PULSE), 14500); + events.RescheduleEvent((Phase == 2 ? EVENT_SPELL_RAPID_BURST : EVENT_HAND_PULSE), 14s + 500ms); } break; case EVENT_FLAME_SUPPRESSION_10: me->CastSpell(me, SPELL_FLAME_SUPPRESSANT_10yd, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_FROST_BOMB: me->CastCustomSpell(SPELL_VX001_FROST_BOMB, SPELLVALUE_MAX_TARGETS, 1, (Unit*)nullptr, false); - events.RepeatEvent(45000); + events.Repeat(45s); break; } } @@ -1603,13 +1603,13 @@ public: AttackStart(target); DoZoneInCombat(); events.Reset(); - events.ScheduleEvent(EVENT_SPELL_PLASMA_BALL, 0); - events.ScheduleEvent(EVENT_SUMMON_BOMB_BOT, 15000); - events.ScheduleEvent(EVENT_SUMMON_ASSAULT_BOT, 1000); - events.ScheduleEvent(EVENT_SUMMON_JUNK_BOT, 10000); + events.ScheduleEvent(EVENT_SPELL_PLASMA_BALL, 0ms); + events.ScheduleEvent(EVENT_SUMMON_BOMB_BOT, 15s); + events.ScheduleEvent(EVENT_SUMMON_ASSAULT_BOT, 1s); + events.ScheduleEvent(EVENT_SUMMON_JUNK_BOT, 10s); if (Creature* c = GetMimiron()) if (c->AI()->GetData(1)) - events.ScheduleEvent(EVENT_SUMMON_EMERGENCY_FIRE_BOTS, 0); + events.ScheduleEvent(EVENT_SUMMON_EMERGENCY_FIRE_BOTS, 0ms); break; case 4: me->SetReactState(REACT_AGGRESSIVE); @@ -1620,13 +1620,13 @@ public: AttackStart(target); DoZoneInCombat(); events.Reset(); - events.ScheduleEvent(EVENT_SPELL_PLASMA_BALL, 0); + events.ScheduleEvent(EVENT_SPELL_PLASMA_BALL, 0ms); } } else if (id == 2 && !immobilized && Phase == 3) // magnetic core { immobilized = true; - events.ScheduleEvent(EVENT_MAGNETIC_CORE_PULL_DOWN, 2000); + events.ScheduleEvent(EVENT_MAGNETIC_CORE_PULL_DOWN, 2s); } } @@ -1751,24 +1751,24 @@ public: } } } - events.RepeatEvent(3000); + events.Repeat(3s); break; case EVENT_SUMMON_BOMB_BOT: if( !immobilized ) me->CastSpell(me, SPELL_SUMMON_BOMB_BOT, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_SUMMON_ASSAULT_BOT: if( GameObject* pad = me->FindNearestGameObject(RAND(194742, 194746, 194745), 200.0f) ) if (Creature* trigger = me->SummonCreature(NPC_BOT_SUMMON_TRIGGER, *pad, TEMPSUMMON_TIMED_DESPAWN, 15000)) trigger->AI()->DoAction(2); - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_SUMMON_JUNK_BOT: if( GameObject* pad = me->FindNearestGameObject(RAND(194741, 194744, 194747), 200.0f) ) if (Creature* trigger = me->SummonCreature(NPC_BOT_SUMMON_TRIGGER, *pad, TEMPSUMMON_TIMED_DESPAWN, 15000)) trigger->AI()->DoAction(1); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_SUMMON_EMERGENCY_FIRE_BOTS: { @@ -1777,7 +1777,7 @@ public: if( GameObject* pad = me->FindNearestGameObject(ids[i], 200.0f) ) if (Creature* trigger = me->SummonCreature(NPC_BOT_SUMMON_TRIGGER, *pad, TEMPSUMMON_MANUAL_DESPAWN)) trigger->AI()->DoAction(3); - events.RepeatEvent(45000); + events.Repeat(45s); } break; case EVENT_MAGNETIC_CORE_PULL_DOWN: @@ -1785,13 +1785,13 @@ public: me->CastSpell(me, SPELL_SPINNING, true); me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetExactDist(me->GetPositionX(), me->GetPositionY(), 365.34f)); me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetOrientation(), false); - events.ScheduleEvent(EVENT_MAGNETIC_CORE_FREE, 20000); + events.ScheduleEvent(EVENT_MAGNETIC_CORE_FREE, 20s); break; case EVENT_MAGNETIC_CORE_FREE: me->RemoveAura(SPELL_SPINNING); me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetDistance(me->GetPositionX(), me->GetPositionY(), 381.34f)); me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetOrientation(), false); - events.ScheduleEvent(EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE, 1000); + events.ScheduleEvent(EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE, 1s); break; case EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE: immobilized = false; @@ -2205,7 +2205,7 @@ public: { CreateTime = GameTime::GetGameTime().count(); events.Reset(); - events.ScheduleEvent(EVENT_FLAMES_SPREAD, 5750); + events.ScheduleEvent(EVENT_FLAMES_SPREAD, 5750ms); if( Creature* flame = me->SummonCreature(NPC_FLAMES_SPREAD, me->GetPositionX(), me->GetPositionY(), 364.32f, 0.0f) ) { FlameList.push_back(flame->GetGUID()); @@ -2301,7 +2301,7 @@ public: } } - events.RepeatEvent(5750); + events.Repeat(5750ms); } break; } @@ -2366,7 +2366,7 @@ public: npc_ulduar_emergency_fire_botAI(Creature* pCreature) : ScriptedAI(pCreature) { events.Reset(); - events.ScheduleEvent(EVENT_EMERGENCY_BOT_CHECK, 1000); + events.ScheduleEvent(EVENT_EMERGENCY_BOT_CHECK, 1s); } EventMap events; @@ -2377,7 +2377,7 @@ public: void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == 1) - events.ScheduleEvent(EVENT_EMERGENCY_BOT_ATTACK, 0); + events.ScheduleEvent(EVENT_EMERGENCY_BOT_ATTACK, 0ms); } void UpdateAI(uint32 diff) override @@ -2388,20 +2388,20 @@ public: case 0: break; case EVENT_EMERGENCY_BOT_CHECK: - events.RepeatEvent(15000); // just in case, will be rescheduled + events.Repeat(15s); if (Creature* flame = me->FindNearestCreature(NPC_FLAMES_SPREAD, 150.0f, true)) { me->SetOrientation(me->GetAngle(flame->GetPositionX(), flame->GetPositionY())); float dist = me->GetExactDist2d(flame); if (dist <= 5.0f) - events.ScheduleEvent(EVENT_EMERGENCY_BOT_ATTACK, 0); + events.ScheduleEvent(EVENT_EMERGENCY_BOT_ATTACK, 0ms); else me->GetMotionMaster()->MovePoint(1, me->GetPositionX() + (dist - 5.0f)*cos(me->GetOrientation()), me->GetPositionY() + (dist - 5.0f)*sin(me->GetOrientation()), 364.32f); } break; case EVENT_EMERGENCY_BOT_ATTACK: me->CastSpell((Unit*)nullptr, SPELL_WATER_SPRAY, false); - events.RescheduleEvent(EVENT_EMERGENCY_BOT_CHECK, 5000); + events.RescheduleEvent(EVENT_EMERGENCY_BOT_CHECK, 5s); break; } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index f91f8a9ec..1ab35a6a1 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -209,12 +209,12 @@ public: { me->SetInCombatWithZone(); events.Reset(); - events.ScheduleEvent(EVENT_COMMANDER_SAY_AGGRO, 5000); - events.ScheduleEvent(EVENT_EE_SAY_MOVE_OUT, 10000); - events.ScheduleEvent(EVENT_ENRAGE, 600000); - events.ScheduleEvent(EVENT_SPELL_FIREBALL, 6000); - events.ScheduleEvent(EVENT_SPELL_DEVOURING_FLAME, 13000); - events.ScheduleEvent(EVENT_SUMMON_MOLE_MACHINES, 11000); + events.ScheduleEvent(EVENT_COMMANDER_SAY_AGGRO, 5s); + events.ScheduleEvent(EVENT_EE_SAY_MOVE_OUT, 10s); + events.ScheduleEvent(EVENT_ENRAGE, 10min); + events.ScheduleEvent(EVENT_SPELL_FIREBALL, 6s); + events.ScheduleEvent(EVENT_SPELL_DEVOURING_FLAME, 13s); + events.ScheduleEvent(EVENT_SUMMON_MOLE_MACHINES, 11s); std::list eeList; me->GetCreaturesWithEntryInRange(eeList, 300.0f, NPC_EXPEDITION_ENGINEER); @@ -310,7 +310,7 @@ public: if (me->GetPositionZ() > 440.0f) // protection, razorscale is attackable (so harpoons can hit him, etc.), but should not receive dmg while in air damage = 0; else if (!bGroundPhase && ((me->GetHealth() * 100) / me->GetMaxHealth() < 50) && me->HasAura(62794)) // already below 50%, but still in chains and stunned - events.RescheduleEvent(EVENT_WARN_DEEP_BREATH, 0); + events.RescheduleEvent(EVENT_WARN_DEEP_BREATH, 0ms); } void MovementInform(uint32 type, uint32 id) override @@ -336,13 +336,13 @@ public: me->SetFacingTo(M_PI / 2); me->SetDisableGravity(false); me->CastSpell(me, 62794, true); - events.ScheduleEvent(EVENT_WARN_DEEP_BREATH, 30000); + events.ScheduleEvent(EVENT_WARN_DEEP_BREATH, 30s); } else if (id == 1) // flied up { - events.ScheduleEvent(EVENT_SPELL_FIREBALL, 2000); - events.ScheduleEvent(EVENT_SPELL_DEVOURING_FLAME, 4000); - events.ScheduleEvent(EVENT_SUMMON_MOLE_MACHINES, 5000); + events.ScheduleEvent(EVENT_SPELL_FIREBALL, 2s); + events.ScheduleEvent(EVENT_SPELL_DEVOURING_FLAME, 4s); + events.ScheduleEvent(EVENT_SUMMON_MOLE_MACHINES, 5s); } } @@ -397,12 +397,12 @@ public: case EVENT_SPELL_FIREBALL: if( Unit* pTarget = SelectTarget(SelectTargetMethod::Random, 0, 200.0f, true) ) me->CastSpell(pTarget, SPELL_FIREBALL, false); - events.RepeatEvent(4000); + events.Repeat(4s); break; case EVENT_SPELL_DEVOURING_FLAME: if( Unit* pTarget = SelectTarget(SelectTargetMethod::Random, 0, 200.0f, true) ) me->CastSpell(pTarget, SPELL_DEVOURINGFLAME, false); - events.RepeatEvent(13000); + events.Repeat(13s); break; case EVENT_SUMMON_MOLE_MACHINES: { @@ -423,8 +423,8 @@ public: drill->SetGoAnimProgress(0); } } - events.RepeatEvent(45000); - events.RescheduleEvent(EVENT_SUMMON_ADDS, 4000); + events.Repeat(45s); + events.RescheduleEvent(EVENT_SUMMON_ADDS, 4s); } break; case EVENT_SUMMON_ADDS: @@ -486,11 +486,11 @@ public: case EVENT_WARN_DEEP_BREATH: Talk(EMOTE_BREATH); me->RemoveAura(62794); - events.ScheduleEvent(EVENT_PHASE2_FLAME_BREATH, 2500); + events.ScheduleEvent(EVENT_PHASE2_FLAME_BREATH, 2500ms); break; case EVENT_PHASE2_FLAME_BREATH: me->CastSpell(me, SPELL_FLAMEBREATH, true); - events.ScheduleEvent(EVENT_FLY_UP, 2000); + events.ScheduleEvent(EVENT_FLY_UP, 2s); break; case EVENT_FLY_UP: me->SetInCombatWithZone(); // just in case @@ -532,10 +532,10 @@ public: events.CancelEvent(EVENT_SPELL_DEVOURING_FLAME); events.CancelEvent(EVENT_SUMMON_MOLE_MACHINES); - events.ScheduleEvent(EVENT_SPELL_FLAME_BREATH, 20000); - events.ScheduleEvent(EVENT_SPELL_DEVOURING_FLAME_GROUND, 5000); - events.ScheduleEvent(EVENT_SPELL_FUSE_ARMOR, 10000); - events.ScheduleEvent(EVENT_SPELL_FLAME_BUFFET, 3000); + events.ScheduleEvent(EVENT_SPELL_FLAME_BREATH, 20s); + events.ScheduleEvent(EVENT_SPELL_DEVOURING_FLAME_GROUND, 5s); + events.ScheduleEvent(EVENT_SPELL_FUSE_ARMOR, 10s); + events.ScheduleEvent(EVENT_SPELL_FLAME_BUFFET, 3s); break; } @@ -549,7 +549,7 @@ public: me->StopMoving(); me->SetDisableGravity(true); me->GetMotionMaster()->MoveTakeoff(1, CORDS_AIR, 25.0f); - events.ScheduleEvent(EVENT_RESUME_FIXING, 22000); + events.ScheduleEvent(EVENT_RESUME_FIXING, 22s); } break; @@ -564,11 +564,11 @@ public: break; case EVENT_SPELL_FLAME_BREATH: me->CastSpell(me->GetVictim(), SPELL_FLAMEBREATH, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SPELL_DEVOURING_FLAME_GROUND: me->CastSpell(me->GetVictim(), SPELL_DEVOURINGFLAME, false); - events.RepeatEvent(13000); + events.Repeat(13s); break; case EVENT_SPELL_FUSE_ARMOR: if (Unit* victim = me->GetVictim()) @@ -578,14 +578,14 @@ public: if (Aura* aur = victim->GetAura(SPELL_FUSEARMOR)) if (aur->GetStackAmount() == 5) victim->CastSpell(victim, SPELL_FUSED_ARMOR, true); - events.RepeatEvent(10000); + events.Repeat(10s); break; } - events.RepeatEvent(2000); + events.Repeat(2s); break; case EVENT_SPELL_FLAME_BUFFET: me->CastSpell(me->GetVictim(), SPELL_FLAMEBUFFET, false); - events.RepeatEvent(7000); + events.Repeat(7s); break; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index e7f0f84d7..1803f4dcc 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -494,9 +494,9 @@ public: if (GameObject* go = GetThorimObject(DATA_THORIM_LEVER)) go->RemoveGameObjectFlag((GameObjectFlags)48); - events.ScheduleEvent(EVENT_THORIM_AGGRO, 0); + events.ScheduleEvent(EVENT_THORIM_AGGRO, 0ms); events.SetPhase(EVENT_PHASE_START); - events.ScheduleEvent(EVENT_THORIM_START_PHASE1, 20000); + events.ScheduleEvent(EVENT_THORIM_START_PHASE1, 20s); _trashCounter = 0; } } @@ -530,10 +530,10 @@ public: DisableThorim(false); events.SetPhase(EVENT_PHASE_RING); - events.ScheduleEvent(EVENT_THORIM_UNBALANCING_STRIKE, 8000, 0, EVENT_PHASE_RING); - events.ScheduleEvent(EVENT_THORIM_LIGHTNING_CHARGE, 12500, 0, EVENT_PHASE_RING); - events.ScheduleEvent(EVENT_THORIM_CHAIN_LIGHTNING, 13000, 0, EVENT_PHASE_RING); - events.ScheduleEvent(EVENT_THORIM_BERSERK, 300000, 0, EVENT_PHASE_RING); + events.ScheduleEvent(EVENT_THORIM_UNBALANCING_STRIKE, 8s, 0, EVENT_PHASE_RING); + events.ScheduleEvent(EVENT_THORIM_LIGHTNING_CHARGE, 12s + 500ms, 0, EVENT_PHASE_RING); + events.ScheduleEvent(EVENT_THORIM_CHAIN_LIGHTNING, 13s, 0, EVENT_PHASE_RING); + events.ScheduleEvent(EVENT_THORIM_BERSERK, 5min, 0, EVENT_PHASE_RING); me->GetMotionMaster()->MoveChase(me->GetVictim()); me->GetMotionMaster()->MoveJump(Middle.GetPositionX(), Middle.GetPositionY(), Middle.GetPositionZ(), 20, 20); @@ -574,7 +574,7 @@ public: Talk(SAY_DEATH); events.SetPhase(EVENT_PHASE_OUTRO); - events.ScheduleEvent(EVENT_THORIM_OUTRO1, 2000, 0, EVENT_PHASE_OUTRO); + events.ScheduleEvent(EVENT_THORIM_OUTRO1, 2s, 0, EVENT_PHASE_OUTRO); GameObject* go = nullptr; if ((go = GetThorimObject(DATA_THORIM_FENCE))) @@ -625,7 +625,7 @@ public: me->SetOrientation(me->GetAngle(caster)); me->CastSpell(caster, SPELL_LIGHTNING_CHARGE_DAMAGE, true); me->CastSpell(me, SPELL_LIGHTNING_CHARGE_BUFF, true); - events.RescheduleEvent(EVENT_THORIM_LIGHTNING_CHARGE, 10000, 0, EVENT_PHASE_RING); + events.RescheduleEvent(EVENT_THORIM_LIGHTNING_CHARGE, 10s, 0, EVENT_PHASE_RING); } } @@ -658,7 +658,7 @@ public: { case EVENT_THORIM_AGGRO: Talk(SAY_AGGRO_1); - events.ScheduleEvent(EVENT_THORIM_AGGRO2, 9000); + events.ScheduleEvent(EVENT_THORIM_AGGRO2, 9s); if (GameObject* go = GetThorimObject(DATA_THORIM_FENCE)) go->SetGoState(GO_STATE_READY); @@ -674,11 +674,11 @@ public: } case EVENT_THORIM_START_PHASE1: { - events.ScheduleEvent(EVENT_THORIM_STORMHAMMER, 8000, 0, EVENT_PHASE_START); - events.ScheduleEvent(EVENT_THORIM_CHARGE_ORB, 14000, 0, EVENT_PHASE_START); - events.ScheduleEvent(EVENT_THORIM_FILL_ARENA, 0, 0, EVENT_PHASE_START); - events.ScheduleEvent(EVENT_THORIM_LIGHTNING_ORB, 5000, 0, EVENT_PHASE_START); // checked every 5 secs if there are players on arena - events.ScheduleEvent(EVENT_THORIM_NOT_REACH_IN_TIME, 300000, 0, EVENT_PHASE_START); + events.ScheduleEvent(EVENT_THORIM_STORMHAMMER, 8s, 0, EVENT_PHASE_START); + events.ScheduleEvent(EVENT_THORIM_CHARGE_ORB, 14s, 0, EVENT_PHASE_START); + events.ScheduleEvent(EVENT_THORIM_FILL_ARENA, 0ms, 0, EVENT_PHASE_START); + events.ScheduleEvent(EVENT_THORIM_LIGHTNING_ORB, 5s, 0, EVENT_PHASE_START); // checked every 5 secs if there are players on arena + events.ScheduleEvent(EVENT_THORIM_NOT_REACH_IN_TIME, 5min, 0, EVENT_PHASE_START); EntryCheckPredicate pred(NPC_SIF); summons.DoAction(ACTION_SIF_START_DOMINION, pred); @@ -686,18 +686,18 @@ public: } case EVENT_THORIM_STORMHAMMER: me->CastCustomSpell(SPELL_STORMHAMMER, SPELLVALUE_MAX_TARGETS, 1, me->GetVictim(), false); - events.RepeatEvent(16000); + events.Repeat(16s); break; case EVENT_THORIM_CHARGE_ORB: me->CastCustomSpell(SPELL_CHARGE_ORB, SPELLVALUE_MAX_TARGETS, 1, me, false); - events.RepeatEvent(16000); + events.Repeat(16s); break; case EVENT_THORIM_LIGHTNING_ORB: { if (GetArenaPlayer()) { // Player found, repeat and return - events.RepeatEvent(5000); + events.Repeat(5s); return; } @@ -717,11 +717,11 @@ public: break; case EVENT_THORIM_FILL_ARENA: SpawnArenaNPCs(); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_THORIM_UNBALANCING_STRIKE: me->CastSpell(me->GetVictim(), SPELL_UNBALANCING_STRIKE, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_THORIM_LIGHTNING_CHARGE: me->CastSpell(me, SPELL_LIGHTNING_PILLAR_P2, true); @@ -729,7 +729,7 @@ public: case EVENT_THORIM_CHAIN_LIGHTNING: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_CHAIN_LIGHTNING, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_THORIM_BERSERK: me->CastSpell(me, SPELL_BERSERK, true); @@ -739,26 +739,26 @@ public: if (_hardMode) { Talk(SAY_END_HARD_1); - events.ScheduleEvent(EVENT_THORIM_OUTRO2, 5000, 0, 3); + events.ScheduleEvent(EVENT_THORIM_OUTRO2, 5s, 0, 3); EntryCheckPredicate pred(NPC_SIF); summons.DoAction(ACTION_SIF_TRANSFORM, pred); } else { Talk(SAY_END_NORMAL_1); - events.ScheduleEvent(EVENT_THORIM_OUTRO2, 9000, 0, 3); + events.ScheduleEvent(EVENT_THORIM_OUTRO2, 9s, 0, 3); } break; case EVENT_THORIM_OUTRO2: if (_hardMode) { Talk(SAY_END_HARD_2); - events.ScheduleEvent(EVENT_THORIM_OUTRO3, 12000, 0, 3); + events.ScheduleEvent(EVENT_THORIM_OUTRO3, 12s, 0, 3); } else { Talk(SAY_END_NORMAL_2); - events.ScheduleEvent(EVENT_THORIM_OUTRO3, 10000, 0, 3); + events.ScheduleEvent(EVENT_THORIM_OUTRO3, 10s, 0, 3); } break; case EVENT_THORIM_OUTRO3: @@ -815,19 +815,19 @@ public: void DoAction(int32 param) override { if (param == ACTION_SIF_START_TALK) - events.ScheduleEvent(EVENT_SIF_START_TALK, 9000); + events.ScheduleEvent(EVENT_SIF_START_TALK, 9s); else if (param == ACTION_SIF_START_DOMINION) { if (me->GetInstanceScript()) if (Creature* cr = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(TYPE_THORIM))) me->CastSpell(cr, SPELL_TOUCH_OF_DOMINION, false); - events.ScheduleEvent(EVENT_SIF_FINISH_DOMINION, 150000); + events.ScheduleEvent(EVENT_SIF_FINISH_DOMINION, 150s); } else if (param == ACTION_SIF_JOIN_FIGHT) { me->InterruptNonMeleeSpells(false); - events.ScheduleEvent(EVENT_SIF_JOIN_TALK, 9000); + events.ScheduleEvent(EVENT_SIF_JOIN_TALK, 9s); events.CancelEvent(EVENT_SIF_START_TALK); events.CancelEvent(EVENT_SIF_FINISH_DOMINION); } @@ -857,23 +857,23 @@ public: break; case EVENT_SIF_JOIN_TALK: Talk(SAY_SIF_HM_REACHED); - events.ScheduleEvent(EVENT_SIF_FROST_NOVA_START, 1000); - events.ScheduleEvent(EVENT_SIF_FROSTBOLT_VALLEY, 11000); - events.ScheduleEvent(EVENT_SIF_BLIZZARD, 15000); + events.ScheduleEvent(EVENT_SIF_FROST_NOVA_START, 1s); + events.ScheduleEvent(EVENT_SIF_FROSTBOLT_VALLEY, 11s); + events.ScheduleEvent(EVENT_SIF_BLIZZARD, 15s); break; case EVENT_SIF_FROSTBOLT_VALLEY: me->CastSpell(me, SPELL_FROSTBOLT_VALLEY, false); - events.RepeatEvent(13000); + events.Repeat(13s); return; case EVENT_SIF_BLIZZARD: me->SummonCreature(NPC_SIF_BLIZZARD, 2108.7f, -280.04f, 419.42f, 0, TEMPSUMMON_TIMED_DESPAWN, 30000); - events.RepeatEvent(30000); + events.Repeat(30s); return; case EVENT_SIF_FROST_NOVA_START: me->NearTeleportTo(2108 + urand(0, 42), -238 - irand(0, 46), 420.02f, me->GetAngle(&Middle)); - events.RepeatEvent(20000); - events.DelayEvents(5001); - events.ScheduleEvent(EVENT_SIF_FROST_NOVA_CAST, 2500); + events.Repeat(20s); + events.DelayEvents(5s); + events.ScheduleEvent(EVENT_SIF_FROST_NOVA_CAST, 2500ms); _allowCast = false; return; case EVENT_SIF_FROST_NOVA_CAST: @@ -1133,25 +1133,25 @@ public: { if (me->GetEntry() == NPC_DARK_RUNE_ACOLYTE_I) { - events.ScheduleEvent(EVENT_DR_ACOLYTE_GH, 10000); - events.ScheduleEvent(EVENT_DR_ACOLYTE_HS, 5000); - events.ScheduleEvent(EVENT_DR_ACOLYTE_R, 7000); + events.ScheduleEvent(EVENT_DR_ACOLYTE_GH, 10s); + events.ScheduleEvent(EVENT_DR_ACOLYTE_HS, 5s); + events.ScheduleEvent(EVENT_DR_ACOLYTE_R, 7s); } else if (me->GetEntry() == NPC_CAPTURED_MERCENARY_SOLDIER_ALLY || me->GetEntry() == NPC_CAPTURED_MERCENARY_SOLDIER_HORDE) { - events.ScheduleEvent(EVENT_CM_SOLDIER_BS, 9000); - events.ScheduleEvent(EVENT_CM_SOLDIER_WC, 5000); - events.ScheduleEvent(EVENT_CM_SOLDIER_S, 0); + events.ScheduleEvent(EVENT_CM_SOLDIER_BS, 9s); + events.ScheduleEvent(EVENT_CM_SOLDIER_WC, 5s); + events.ScheduleEvent(EVENT_CM_SOLDIER_S, 0ms); } else if (me->GetEntry() == NPC_CAPTURED_MERCENARY_CAPTAIN_ALLY || me->GetEntry() == NPC_CAPTURED_MERCENARY_CAPTAIN_HORDE) { - events.ScheduleEvent(EVENT_CM_CAPTAIN_D, 9000); - events.ScheduleEvent(EVENT_CM_CAPTAIN_HC, 5000); + events.ScheduleEvent(EVENT_CM_CAPTAIN_D, 9s); + events.ScheduleEvent(EVENT_CM_CAPTAIN_HC, 5s); } else if (me->GetEntry() == NPC_JORMUNGAR_BEHEMOT) { - events.ScheduleEvent(EVENT_JB_ACID_BREATH, 12000); - events.ScheduleEvent(EVENT_JB_SWEEP, 5000); + events.ScheduleEvent(EVENT_JB_ACID_BREATH, 12s); + events.ScheduleEvent(EVENT_JB_SWEEP, 5s); } me->CallForHelp(10); @@ -1173,49 +1173,49 @@ public: me->CastSpell(me, SPELL_GREATER_HEAL, false); else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 20)) me->CastSpell(target, SPELL_GREATER_HEAL, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_DR_ACOLYTE_HS: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_HOLY_SMITE, false); - events.RepeatEvent(1600); + events.Repeat(1600ms); break; case EVENT_DR_ACOLYTE_R: if (HealthBelowPct(75) && !me->HasAura(SPELL_RENEW)) me->CastSpell(me, SPELL_GREATER_HEAL, false); else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 10)) me->CastSpell(target, SPELL_RENEW, false); - events.RepeatEvent(7000); + events.Repeat(7s); break; case EVENT_CM_SOLDIER_BS: me->CastSpell(me->GetVictim(), SPELL_BARBED_SHOT, false); - events.RepeatEvent(9000); + events.Repeat(9s); break; case EVENT_CM_SOLDIER_WC: me->CastSpell(me->GetVictim(), SPELL_WING_CLIP, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_CM_SOLDIER_S: if (me->GetDistance(me->GetVictim()) > 8) me->CastSpell(me->GetVictim(), SPELL_SHOOT, false); - events.RepeatEvent(1500); + events.Repeat(1500ms); break; case EVENT_CM_CAPTAIN_D: me->CastSpell(me->GetVictim(), SPELL_DEVASTATE, false); - events.RepeatEvent(9000); + events.Repeat(9s); break; case EVENT_CM_CAPTAIN_HC: me->CastSpell(me->GetVictim(), SPELL_HEROIC_STRIKE, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_JB_ACID_BREATH: me->CastSpell(me->GetVictim(), SPELL_ACID_BREATH, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_JB_SWEEP: me->CastSpell(me->GetVictim(), SPELL_SWEEP, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; } @@ -1252,20 +1252,20 @@ public: { if (me->GetEntry() == NPC_IRON_RING_GUARD) { - events.ScheduleEvent(EVENT_IR_GUARD_IMPALE, 12000); - events.ScheduleEvent(EVENT_IR_GUARD_WHIRL, 5000); + events.ScheduleEvent(EVENT_IR_GUARD_IMPALE, 12s); + events.ScheduleEvent(EVENT_IR_GUARD_WHIRL, 5s); } else if (me->GetEntry() == NPC_DARK_RUNE_ACOLYTE_I) { - events.ScheduleEvent(EVENT_DR_ACOLYTE_GH, 10000); - events.ScheduleEvent(EVENT_DR_ACOLYTE_HS, 5000); - events.ScheduleEvent(EVENT_DR_ACOLYTE_R, 7000); + events.ScheduleEvent(EVENT_DR_ACOLYTE_GH, 10s); + events.ScheduleEvent(EVENT_DR_ACOLYTE_HS, 5s); + events.ScheduleEvent(EVENT_DR_ACOLYTE_R, 7s); } else if (me->GetEntry() == NPC_IRON_HONOR_GUARD) { - events.ScheduleEvent(EVENT_IH_GUARD_CLEAVE, 6000); - events.ScheduleEvent(EVENT_IH_GUARD_HAMSTRING, 9000); - events.ScheduleEvent(EVENT_IH_GUARD_SHIELD_SMASH, 15000); + events.ScheduleEvent(EVENT_IH_GUARD_CLEAVE, 6s); + events.ScheduleEvent(EVENT_IH_GUARD_HAMSTRING, 9s); + events.ScheduleEvent(EVENT_IH_GUARD_SHIELD_SMASH, 15s); if (Creature* runeGiant = me->FindNearestCreature(NPC_ANCIENT_RUNE_GIANT, 200.0f)) runeGiant->AI()->DoAction(ACTION_IRON_HONOR_DIED); @@ -1287,42 +1287,42 @@ public: { case EVENT_IR_GUARD_IMPALE: me->CastSpell(me->GetVictim(), SPELL_IMPALE, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_IR_GUARD_WHIRL: me->CastSpell(me->GetVictim(), SPELL_WHIRLING_TRIP, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_DR_ACOLYTE_GH: if (HealthBelowPct(60)) me->CastSpell(me, SPELL_GREATER_HEAL, false); else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 20)) me->CastSpell(target, SPELL_GREATER_HEAL, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_DR_ACOLYTE_HS: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_HOLY_SMITE, false); - events.RepeatEvent(1600); + events.Repeat(1600ms); break; case EVENT_DR_ACOLYTE_R: if (HealthBelowPct(75) && !me->HasAura(SPELL_RENEW)) me->CastSpell(me, SPELL_GREATER_HEAL, false); else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 10)) me->CastSpell(target, SPELL_RENEW, false); - events.RepeatEvent(7000); + events.Repeat(7s); break; case EVENT_IH_GUARD_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_IH_GUARD_HAMSTRING: me->CastSpell(me->GetVictim(), SPELL_HAMSTRING, false); - events.RepeatEvent(9000); + events.Repeat(9s); break; case EVENT_IH_GUARD_SHIELD_SMASH: me->CastSpell(me->GetVictim(), SPELL_SHIELD_SMASH, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; } @@ -1358,7 +1358,7 @@ public: _leftHand = false; _checkTarget = false; events.Reset(); - events.ScheduleEvent(EVENT_RC_RUNIC_SMASH, 0); + events.ScheduleEvent(EVENT_RC_RUNIC_SMASH, 0ms); Creature* c; if ((c = me->SummonCreature(33140, 2221, -385, me->GetPositionZ()))) @@ -1387,9 +1387,9 @@ public: void JustEngagedWith(Unit*) override { events.CancelEvent(EVENT_RC_RUNIC_SMASH); - events.ScheduleEvent(EVENT_RC_RUNIC_BARRIER, 10000); - events.ScheduleEvent(EVENT_RC_SMASH, 18000); - events.ScheduleEvent(EVENT_RC_CHARGE, 15000); + events.ScheduleEvent(EVENT_RC_RUNIC_BARRIER, 10s); + events.ScheduleEvent(EVENT_RC_SMASH, 18s); + events.ScheduleEvent(EVENT_RC_CHARGE, 15s); me->InterruptNonMeleeSpells(false); _checkTarget = true; @@ -1400,7 +1400,7 @@ public: if (spellInfo->Id == SPELL_RUNIC_SMASH_LEFT || spellInfo->Id == SPELL_RUNIC_SMASH_RIGHT) { _leftHand = spellInfo->Id == SPELL_RUNIC_SMASH_LEFT; - events.RescheduleEvent(EVENT_RC_RUNIC_SMASH_TRIGGER, 1000); + events.RescheduleEvent(EVENT_RC_RUNIC_SMASH_TRIGGER, 1s); } } @@ -1437,7 +1437,7 @@ public: _nextTriggerPos += 16.0f; if (_nextTriggerPos <= -260.0f) { - events.RescheduleEvent(EVENT_RC_RUNIC_SMASH_TRIGGER, 500); + events.RescheduleEvent(EVENT_RC_RUNIC_SMASH_TRIGGER, 500ms); } RunRunicSmash(true); @@ -1450,21 +1450,21 @@ public: _nextTriggerPos = -385.0f; RunRunicSmash(false); - events.RepeatEvent(11000); + events.Repeat(11s); break; case EVENT_RC_RUNIC_BARRIER: me->CastSpell(me, SPELL_RUNIC_BARRIER, false); Talk(SAY_COLOSSUS_RUNIC_BARRIER); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_RC_SMASH: me->CastSpell(me->GetVictim(), SPELL_SMASH, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_RC_CHARGE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_CHARGE, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; } @@ -1500,8 +1500,8 @@ public: { _isInCombat = true; events.CancelEvent(EVENT_ARG_SPAWN); - events.ScheduleEvent(EVENT_ARG_RD, 12000); - events.ScheduleEvent(EVENT_ARG_STOMP, 8000); + events.ScheduleEvent(EVENT_ARG_RD, 12s); + events.ScheduleEvent(EVENT_ARG_STOMP, 8s); me->CastSpell(me, SPELL_RUNIC_FORTIFICATION, false); Talk(SAY_GIANT_RUNIC_MIGHT); @@ -1522,7 +1522,7 @@ public: void DoAction(int32 param) override { if (param == ACTION_IRON_HONOR_DIED) - events.RescheduleEvent(EVENT_ARG_SPAWN, 20000); + events.RescheduleEvent(EVENT_ARG_SPAWN, 20s); } void UpdateAI(uint32 diff) override @@ -1539,17 +1539,17 @@ public: case EVENT_ARG_RD: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_RUNE_DETONATION, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_ARG_STOMP: me->CastSpell(me->GetVictim(), SPELL_STOMP, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; case EVENT_ARG_SPAWN: if (Creature* cr = me->SummonCreature(NPC_IRON_HONOR_GUARD, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 20000)) if (Unit* target = SelectTargetFromPlayerList(150.0f)) cr->AI()->AttackStart(target); - events.RepeatEvent(10000); + events.Repeat(10s); break; } @@ -1587,24 +1587,24 @@ public: { if (me->GetEntry() == NPC_DARK_RUNE_WARBRINGER) { - events.ScheduleEvent(EVENT_DR_WARBRINGER_RS, 8000); + events.ScheduleEvent(EVENT_DR_WARBRINGER_RS, 8s); } else if (me->GetEntry() == NPC_DARK_RUNE_EVOKER) { - events.ScheduleEvent(EVENT_DR_EVOKER_RL, 2500); - events.ScheduleEvent(EVENT_DR_EVOKER_RM, 4000); - events.ScheduleEvent(EVENT_DR_EVOKER_RS, 10000); + events.ScheduleEvent(EVENT_DR_EVOKER_RL, 2500ms); + events.ScheduleEvent(EVENT_DR_EVOKER_RM, 4s); + events.ScheduleEvent(EVENT_DR_EVOKER_RS, 10s); } else if (me->GetEntry() == NPC_DARK_RUNE_CHAMPION) { - events.ScheduleEvent(EVENT_DR_CHAMPION_WH, 6000); - events.ScheduleEvent(EVENT_DR_CHAMPION_CH, 12000); - events.ScheduleEvent(EVENT_DR_CHAMPION_MS, 8000); + events.ScheduleEvent(EVENT_DR_CHAMPION_WH, 6s); + events.ScheduleEvent(EVENT_DR_CHAMPION_CH, 12s); + events.ScheduleEvent(EVENT_DR_CHAMPION_MS, 8s); } else if (me->GetEntry() == NPC_DARK_RUNE_COMMONER) { - events.ScheduleEvent(EVENT_DR_COMMONER_LB, 5000); - events.ScheduleEvent(EVENT_DR_COMMONER_PM, 6000); + events.ScheduleEvent(EVENT_DR_COMMONER_LB, 5s); + events.ScheduleEvent(EVENT_DR_COMMONER_PM, 6s); } } @@ -1656,45 +1656,45 @@ public: { case EVENT_DR_WARBRINGER_RS: me->CastSpell(me->GetVictim(), SPELL_RUNIC_STRIKE, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; case EVENT_DR_EVOKER_RL: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_RUNIC_LIGHTNING, false); - events.RepeatEvent(2500); + events.Repeat(2500ms); break; case EVENT_DR_EVOKER_RM: if (Unit* target = DoSelectLowestHpFriendly(40.0f, 15)) me->CastSpell(target, SPELL_RUNIC_MENDING, false); else me->CastSpell(me, SPELL_RUNIC_MENDING, false); - events.RepeatEvent(4000); + events.Repeat(4s); break; case EVENT_DR_EVOKER_RS: me->CastSpell(me, SPELL_RUNIC_SHIELD, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_DR_CHAMPION_CH: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_CHARGE, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_DR_CHAMPION_WH: if (!me->HasUnitFlag(UNIT_FLAG_DISARMED)) me->CastSpell(me, SPELL_WHIRLWIND, false); - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_DR_CHAMPION_MS: me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; case EVENT_DR_COMMONER_LB: me->CastSpell(me->GetVictim(), SPELL_LOW_BLOW, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; case EVENT_DR_COMMONER_PM: me->CastSpell(me->GetVictim(), SPELL_PUMMEL, false); - events.RepeatEvent(6000); + events.Repeat(6s); break; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 527369a7f..ac587c0a6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -148,10 +148,10 @@ public: void RescheduleEvents() { - events.RescheduleEvent(EVENT_GRAVITY_BOMB, 1000, 1); - events.RescheduleEvent(EVENT_TYMPANIC_TANTARUM, 60000, 1); + events.RescheduleEvent(EVENT_GRAVITY_BOMB, 1s, 1); + events.RescheduleEvent(EVENT_TYMPANIC_TANTARUM, 1min, 1); if (!_hardMode) - events.RescheduleEvent(EVENT_HEALTH_CHECK, 2000, 1); + events.RescheduleEvent(EVENT_HEALTH_CHECK, 2s, 1); } void Reset() override @@ -201,8 +201,8 @@ public: void JustEngagedWith(Unit*) override { me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - events.ScheduleEvent(EVENT_ENRAGE, 600000, 0, 0); - events.ScheduleEvent(EVENT_CHECK_ROOM, 5000, 0, 0); + events.ScheduleEvent(EVENT_ENRAGE, 10min, 0, 0); + events.ScheduleEvent(EVENT_CHECK_ROOM, 5s, 0, 0); RescheduleEvents(); // Other events are scheduled here me->setActive(true); @@ -272,7 +272,7 @@ public: me->CastSpell(me, SPELL_HEARTBREAK, true); Talk(EMOTE_HEART_CLOSED); - events.ScheduleEvent(EVENT_REMOVE_EMOTE, 4000); + events.ScheduleEvent(EVENT_REMOVE_EMOTE, 4s); return; } @@ -324,13 +324,13 @@ public: Talk(SAY_HEART_OPENED); events.CancelEventGroup(1); - events.ScheduleEvent(EVENT_START_SECOND_PHASE, 5000); + events.ScheduleEvent(EVENT_START_SECOND_PHASE, 5s); return; } - events.RepeatEvent(1000); + events.Repeat(1s); break; case EVENT_CHECK_ROOM: - events.RepeatEvent(5000); + events.Repeat(5s); if (me->GetPositionX() < 722 || me->GetPositionX() > 987 || me->GetPositionY() < -139 || me->GetPositionY() > 124) EnterEvadeMode(); @@ -339,17 +339,17 @@ public: // Abilities events case EVENT_GRAVITY_BOMB: me->CastCustomSpell(SPELL_GRAVITY_BOMB, SPELLVALUE_MAX_TARGETS, 1, me, true); - events.ScheduleEvent(EVENT_SEARING_LIGHT, 10000, 1); + events.ScheduleEvent(EVENT_SEARING_LIGHT, 10s, 1); break; case EVENT_SEARING_LIGHT: me->CastCustomSpell(SPELL_SEARING_LIGHT, SPELLVALUE_MAX_TARGETS, 1, me, true); - events.ScheduleEvent(EVENT_GRAVITY_BOMB, 10000, 1); + events.ScheduleEvent(EVENT_GRAVITY_BOMB, 10s, 1); break; case EVENT_TYMPANIC_TANTARUM: Talk(EMOTE_TYMPANIC_TANTRUM); Talk(SAY_TYMPANIC_TANTRUM); me->CastSpell(me, SPELL_TYMPANIC_TANTARUM, true); - events.RepeatEvent(60000); + events.Repeat(1min); return; case EVENT_ENRAGE: Talk(SAY_BERSERK); @@ -363,7 +363,7 @@ public: if (Unit* heart = me->GetVehicleKit() ? me->GetVehicleKit()->GetPassenger(HEART_VEHICLE_SEAT) : nullptr) heart->GetAI()->DoAction(ACTION_AWAKEN_HEART); - events.ScheduleEvent(EVENT_RESTORE, 30000); + events.ScheduleEvent(EVENT_RESTORE, 30s); return; // Restore from heartbreak case EVENT_RESTORE: @@ -379,7 +379,7 @@ public: if (Unit* heart = me->GetVehicleKit() ? me->GetVehicleKit()->GetPassenger(HEART_VEHICLE_SEAT) : nullptr) heart->GetAI()->DoAction(ACTION_HIDE_HEART); - events.ScheduleEvent(EVENT_REMOVE_EMOTE, 4000); + events.ScheduleEvent(EVENT_REMOVE_EMOTE, 4s); return; case EVENT_REMOVE_EMOTE: me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp index b249aabab..36316f05b 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp @@ -479,9 +479,9 @@ public: SaveKeepers(); - events.ScheduleEvent(EVENT_SARA_P1_DOORS_CLOSE, 15000, 0, EVENT_PHASE_ONE); - events.ScheduleEvent(EVENT_SARA_P1_BERSERK, 900000, 0, 0); - events.ScheduleEvent(EVENT_SARA_P1_SUMMON, 0, 0, EVENT_PHASE_ONE); + events.ScheduleEvent(EVENT_SARA_P1_DOORS_CLOSE, 15s, 0, EVENT_PHASE_ONE); + events.ScheduleEvent(EVENT_SARA_P1_BERSERK, 15min, 0, 0); + events.ScheduleEvent(EVENT_SARA_P1_SUMMON, 0ms, 0, EVENT_PHASE_ONE); events.SetPhase(EVENT_PHASE_ONE); me->Yell("The time to strike at the head of the beast will soon be upon us! Focus your anger and hatred on his minions!", LANG_UNIVERSAL); @@ -766,7 +766,7 @@ public: EntryCheckPredicate pred(NPC_YOGG_SARON); summons.DoAction(ACTION_YOGG_SARON_START_YELL, pred); _p2TalkTimer = 0; - events.ScheduleEvent(EVENT_SARA_P2_START, 500, 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_START, 500ms, 0, EVENT_PHASE_TWO); } return; } @@ -785,7 +785,7 @@ public: if (GameObject* go = ObjectAccessor::GetGameObject(*me, m_pInstance->GetGuidData(GO_YOGG_SARON_DOORS))) go->SetGoState(GO_STATE_READY); - events.ScheduleEvent(EVENT_SARA_P1_SPELLS, 0, 1, EVENT_PHASE_ONE); + events.ScheduleEvent(EVENT_SARA_P1_SPELLS, 0ms, 1, EVENT_PHASE_ONE); break; case EVENT_SARA_P1_SUMMON: events.RepeatEvent(20000 - (std::min(_summonedGuardiansCount, (uint8)5) * 2000)); @@ -812,16 +812,16 @@ public: } case EVENT_SARA_P2_MALADY: me->CastCustomSpell(SPELL_MALADY_OF_THE_MIND, SPELLVALUE_MAX_TARGETS, 1, me, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SARA_P2_PSYCHOSIS: SpellSounds(); me->CastCustomSpell(SPELL_PSYCHOSIS, SPELLVALUE_MAX_TARGETS, 1, me, false); - events.RepeatEvent(3500); + events.Repeat(3500ms); break; case EVENT_SARA_P2_DEATH_RAY: SummonDeathOrbs(); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SARA_P2_SUMMON_T1: // CRUSHER SpawnTentacle(NPC_CRUSHER_TENTACLE); @@ -837,14 +837,14 @@ public: break; case EVENT_SARA_P2_BRAIN_LINK: me->CastCustomSpell(SPELL_BRAIN_LINK, SPELLVALUE_MAX_TARGETS, 1, me, false); - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_SARA_P2_OPEN_PORTALS: { AddPortals(); EntryCheckPredicate pred(NPC_YOGG_SARON); summons.DoAction(ACTION_YOGG_SARON_OPEN_PORTAL_YELL, pred); - events.RepeatEvent(80000); + events.Repeat(80s); break; } case EVENT_SARA_P2_REMOVE_STUN: @@ -865,18 +865,18 @@ public: SpawnTentacle(NPC_CORRUPTOR_TENTACLE); SpawnTentacle(NPC_CORRUPTOR_TENTACLE); - events.ScheduleEvent(EVENT_SARA_P2_MALADY, 7000, 0, EVENT_PHASE_TWO); - events.ScheduleEvent(EVENT_SARA_P2_PSYCHOSIS, 3000, 0, EVENT_PHASE_TWO); - events.ScheduleEvent(EVENT_SARA_P2_DEATH_RAY, 15000, 0, EVENT_PHASE_TWO); - events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T1, 50000 + urand(0, 10000), 0, EVENT_PHASE_TWO); - events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T2, 15000 + urand(0, 5000), 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_MALADY, 7s, 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_PSYCHOSIS, 3s, 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_DEATH_RAY, 15s, 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T1, 50s, 60s, 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T2, 15s, 20s, 0, EVENT_PHASE_TWO); events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T3, 30000 + urand(0, 10000), 0, EVENT_PHASE_TWO); events.ScheduleEvent(EVENT_SARA_P2_BRAIN_LINK, 0, 0, EVENT_PHASE_TWO); events.ScheduleEvent(EVENT_SARA_P2_OPEN_PORTALS, 60000, 0, EVENT_PHASE_TWO); break; case EVENT_SARA_P1_BERSERK: me->CastSpell(me, SPELL_EXTINGUISH_ALL_LIFE, true); - events.RepeatEvent(5000); + events.Repeat(5s); break; } } @@ -1184,22 +1184,22 @@ public: me->Yell("Hoohehehahahaha... AHAHAHAHAHAHA!", LANG_UNIVERSAL); me->PlayDirectSound(YS_P3_LUNATIC_GAZE); me->CastSpell(me, SPELL_LUNATIC_GAZE_YS, true); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_YS_DEAFENING_ROAR: me->TextEmote("Yogg-Saron opens his mouth wide!", nullptr, true); me->Yell("Eternal suffering awaits!", LANG_UNIVERSAL); me->PlayDirectSound(YS_P3_DEAFENING_ROAR); me->CastSpell(me, SPELL_DEAFENING_ROAR, false); - events.RepeatEvent(50000); + events.Repeat(50s); break; case EVENT_YS_SHADOW_BEACON: - events.RepeatEvent(5000); + events.Repeat(5s); me->CastCustomSpell(SPELL_SHADOW_BEACON, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 3), me, false); break; case EVENT_YS_SUMMON_GUARDIAN: SummonImmortalGuardian(); - events.RepeatEvent(10000); + events.Repeat(10s); break; } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 3547fc546..86b63ca88 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -180,7 +180,7 @@ public: if (m_algalonTimer <= 60) { - _events.RescheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 60000); + _events.RescheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 1min); algalon->AI()->DoAction(ACTION_INIT_ALGALON); } else // if (m_algalonTimer = TIMER_ALGALON_TO_SUMMON) @@ -750,7 +750,7 @@ public: DoUpdateWorldState(WORLD_STATE_ALGALON_TIMER_ENABLED, 1); DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, 60); m_algalonTimer = 60; - _events.RescheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 60000); + _events.RescheduleEvent(EVENT_UPDATE_ALGALON_TIMER, 1min); SaveToDB(); return; case DATA_ALGALON_SUMMON_STATE: @@ -1126,7 +1126,7 @@ public: DoUpdateWorldState(WORLD_STATE_ALGALON_DESPAWN_TIMER, --m_algalonTimer); if (m_algalonTimer) { - _events.RepeatEvent(60000); + _events.Repeat(1min); return; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp index 29d13f1a4..8f28db2a4 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp @@ -233,9 +233,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(1, 2000); // checking Separation Anxiety, Charged Sphere - events.ScheduleEvent(2, urand(5000, 8000)); // Forked Lightning - events.ScheduleEvent(3, (me->GetEntry() == 33722 ? 20000 : 50000)); // Summon Charged Sphere + events.ScheduleEvent(1, 2s); // checking Separation Anxiety, Charged Sphere + events.ScheduleEvent(2, 5s, 8s); // Forked Lightning + events.ScheduleEvent(3, (me->GetEntry() == 33722 ? 20s : 50s)); // Summon Charged Sphere if (Creature* c = me->FindNearestCreature((me->GetEntry() == 33722 ? 33699 : 33722), 30.0f, true)) otherGUID = c->GetGUID(); else @@ -276,16 +276,16 @@ public: if (c->IsSummon()) if (c->ToTempSummon()->GetSummonerGUID() != me->GetGUID()) me->CastSpell(me, 63528, true); - events.RepeatEvent(2000); + events.Repeat(2s); break; case 2: me->CastSpell(me->GetVictim(), 63541, false); - events.RepeatEvent(urand(10000, 14000)); + events.Repeat(10s, 14s); break; case 3: if (!me->HasAura(63630)) me->CastSpell(me, 63527, false); - events.RepeatEvent(60000); + events.Repeat(1min); break; } @@ -318,9 +318,9 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(1, urand(5000, 8000)); // Flame Spray - events.ScheduleEvent(2, urand(3000, 6000)); // Machine Gun - events.ScheduleEvent(3, 1000); // Charged Leap + events.ScheduleEvent(1, 5s, 8s); // Flame Spray + events.ScheduleEvent(2, 3s, 6s); // Machine Gun + events.ScheduleEvent(3, 1s); // Charged Leap } void PassengerBoarded(Unit* p, int8 /*seat*/, bool /*apply*/) override @@ -383,11 +383,11 @@ public: break; case 1: me->CastSpell(me->GetVictim(), RAID_MODE(64717, 65241), false); - events.RepeatEvent(urand(15000, 25000)); + events.Repeat(15s, 25s); break; case 2: me->CastSpell(me->GetVictim(), RAID_MODE(64776, 65240), false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; case 3: { @@ -395,10 +395,10 @@ public: if (dist > 10.0f && dist < 40.0f) { me->CastSpell(me->GetVictim(), 64779, false); - events.RepeatEvent(25000); + events.Repeat(25s); } else - events.RepeatEvent(3000); + events.Repeat(3s); } break; } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index 24a5e0b72..bbe4375ec 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -154,8 +154,8 @@ public: me->StopMoving(); FeignDeath(true); events.Reset(); - events.RescheduleEvent(EVENT_START_RESURRECTION, 1000); - events.RescheduleEvent(EVENT_YELL_DEAD_1, 0); + events.RescheduleEvent(EVENT_START_RESURRECTION, 1s); + events.RescheduleEvent(EVENT_YELL_DEAD_1, 0ms); } } @@ -163,10 +163,10 @@ public: { events.Reset(); // schedule Phase 1 abilities - events.RescheduleEvent(EVENT_SPELL_ROAR, 15000); - events.RescheduleEvent(EVENT_SPELL_CLEAVE_OR_WOE_STRIKE, 2000); - events.RescheduleEvent(EVENT_SPELL_SMASH, 5000); - events.RescheduleEvent(EVENT_SPELL_ENRAGE_OR_SHADOW_AXE, 10000); + events.RescheduleEvent(EVENT_SPELL_ROAR, 15s); + events.RescheduleEvent(EVENT_SPELL_CLEAVE_OR_WOE_STRIKE, 2s); + events.RescheduleEvent(EVENT_SPELL_SMASH, 5s); + events.RescheduleEvent(EVENT_SPELL_ENRAGE_OR_SHADOW_AXE, 10s); Talk(YELL_AGGRO_1); me->LowerPlayerDamageReq(me->GetMaxHealth()); @@ -258,9 +258,9 @@ public: break; case EVENT_START_RESURRECTION: me->CastSpell(me, SPELL_SUMMON_VALKYR, true); - events.RescheduleEvent(EVENT_VALKYR_BEAM, 7000); - events.RescheduleEvent(EVENT_VALKYR_MOVE, 1); - events.RescheduleEvent(EVENT_ANNHYLDE_YELL, 3000); + events.RescheduleEvent(EVENT_VALKYR_BEAM, 7s); + events.RescheduleEvent(EVENT_VALKYR_MOVE, 1ms); + events.RescheduleEvent(EVENT_ANNHYLDE_YELL, 3s); break; case EVENT_VALKYR_MOVE: if( Creature* s = ObjectAccessor::GetCreature(*me, ValkyrGUID) ) @@ -274,21 +274,21 @@ public: me->RemoveAura(SPELL_SUMMON_VALKYR); if( Creature* c = ObjectAccessor::GetCreature(*me, ValkyrGUID) ) c->CastSpell(me, SPELL_RESURRECTION_BEAM, false); - events.RescheduleEvent(EVENT_RESURRECTION_BALL, 4000); + events.RescheduleEvent(EVENT_RESURRECTION_BALL, 4s); break; case EVENT_RESURRECTION_BALL: me->CastSpell(me, SPELL_RESURRECTION_BALL, true); - events.RescheduleEvent(EVENT_RESURRECTION_HEAL, 4000); + events.RescheduleEvent(EVENT_RESURRECTION_HEAL, 4s); break; case EVENT_RESURRECTION_HEAL: me->RemoveAura(SPELL_RESURRECTION_BALL); me->CastSpell(me, SPELL_RESURRECTION_HEAL, true); FeignDeath(false); - events.RescheduleEvent(EVENT_MORPH_TO_UNDEAD, 3000); + events.RescheduleEvent(EVENT_MORPH_TO_UNDEAD, 3s); break; case EVENT_MORPH_TO_UNDEAD: me->CastSpell(me, SPELL_INGVAR_TRANSFORM, true); - events.RescheduleEvent(EVENT_START_PHASE_2, 1000); + events.RescheduleEvent(EVENT_START_PHASE_2, 1s); break; case EVENT_START_PHASE_2: if( Creature* c = ObjectAccessor::GetCreature(*me, ValkyrGUID) ) @@ -302,10 +302,10 @@ public: Talk(YELL_AGGRO_2); // schedule Phase 2 abilities - events.RescheduleEvent(EVENT_SPELL_ROAR, 15000); - events.RescheduleEvent(EVENT_SPELL_CLEAVE_OR_WOE_STRIKE, 2000); - events.RescheduleEvent(EVENT_SPELL_SMASH, 5000); - events.RescheduleEvent(EVENT_SPELL_ENRAGE_OR_SHADOW_AXE, 10000); + events.RescheduleEvent(EVENT_SPELL_ROAR, 15s); + events.RescheduleEvent(EVENT_SPELL_CLEAVE_OR_WOE_STRIKE, 2s); + events.RescheduleEvent(EVENT_SPELL_SMASH, 5s); + events.RescheduleEvent(EVENT_SPELL_ENRAGE_OR_SHADOW_AXE, 10s); break; @@ -324,24 +324,24 @@ public: me->CastSpell((Unit*)nullptr, SPELL_STAGGERING_ROAR, false); else me->CastSpell((Unit*)nullptr, SPELL_DREADFUL_ROAR, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; case EVENT_SPELL_CLEAVE_OR_WOE_STRIKE: if( me->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID) == 0 ) { - events.RepeatEvent(3000); + events.Repeat(3s); break; } if (me->GetDisplayId() == DISPLAYID_DEFAULT) me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); else me->CastSpell(me->GetVictim(), SPELL_WOE_STRIKE, false); - events.RepeatEvent(urand(0, 4000) + 3000); + events.Repeat(3s, 7s); break; case EVENT_SPELL_SMASH: if( me->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID) == 0 ) { - events.RepeatEvent(3000); + events.Repeat(3s); break; } me->SetControlled(true, UNIT_STATE_ROOT); @@ -351,27 +351,27 @@ public: me->CastSpell((Unit*)nullptr, SPELL_SMASH, false); else me->CastSpell((Unit*)nullptr, SPELL_DARK_SMASH, false); - events.RepeatEvent(urand(9000, 11000)); - events.RescheduleEvent(EVENT_UNROOT, 3750); + events.Repeat(9s, 11s); + events.RescheduleEvent(EVENT_UNROOT, 3750ms); break; case EVENT_SPELL_ENRAGE_OR_SHADOW_AXE: if (me->GetDisplayId() == DISPLAYID_DEFAULT) { me->CastSpell(me, SPELL_ENRAGE, false); - events.RepeatEvent(10000); + events.Repeat(10s); } else { me->CastSpell((Unit*)nullptr, SPELL_SHADOW_AXE, true); SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_NO_CHANGE, EQUIP_NO_CHANGE); - events.RepeatEvent(35000); - events.RescheduleEvent(EVENT_AXE_RETURN, 10000); + events.Repeat(35s); + events.RescheduleEvent(EVENT_AXE_RETURN, 10s); } break; case EVENT_AXE_RETURN: if (Creature* c = ObjectAccessor::GetCreature(*me, ThrowGUID)) c->GetMotionMaster()->MoveCharge(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); - events.RescheduleEvent(EVENT_AXE_PICKUP, 1500); + events.RescheduleEvent(EVENT_AXE_PICKUP, 1500ms); break; case EVENT_AXE_PICKUP: if (Creature* c = ObjectAccessor::GetCreature(*me, ThrowGUID)) diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index 24a609747..9b78a8e35 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -159,9 +159,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.RescheduleEvent(EVENT_SPELL_SHADOWBOLT, 0); - events.RescheduleEvent(EVENT_FROST_TOMB, 28000); - events.RescheduleEvent(EVENT_SUMMON_SKELETONS, 4000); + events.RescheduleEvent(EVENT_SPELL_SHADOWBOLT, 0ms); + events.RescheduleEvent(EVENT_FROST_TOMB, 28s); + events.RescheduleEvent(EVENT_SUMMON_SKELETONS, 4s); Talk(SAY_START_COMBAT); DoZoneInCombat(); @@ -194,7 +194,7 @@ public: break; case EVENT_SPELL_SHADOWBOLT: me->CastSpell(me->GetVictim(), SPELL_SHADOWBOLT, false); - events.RepeatEvent(urand(4000, 5000)); + events.Repeat(4s, 5s); break; case EVENT_FROST_TOMB: if( Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true) ) @@ -203,10 +203,10 @@ public: Talk(SAY_FROST_TOMB_EMOTE, target); Talk(SAY_FROST_TOMB); me->CastSpell(target, SPELL_FROST_TOMB, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; case EVENT_SUMMON_SKELETONS: Talk(SAY_SUMMON_SKELETONS); @@ -264,9 +264,9 @@ public: void Reset() override { events.Reset(); - events.RescheduleEvent(EVENT_SPELL_DECREPIFY, urand(10000, 20000)); + events.RescheduleEvent(EVENT_SPELL_DECREPIFY, 10s, 20s); if( IsHeroic() ) - events.RescheduleEvent(EVENT_SPELL_BONE_ARMOR, urand(25000, 120000)); + events.RescheduleEvent(EVENT_SPELL_BONE_ARMOR, 25s, 120s); } void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override @@ -285,7 +285,7 @@ public: me->SetUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT); me->SetUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); me->SetDynamicFlag(UNIT_DYNFLAG_DEAD); - events.RescheduleEvent(EVENT_RESURRECT, 12000); + events.RescheduleEvent(EVENT_RESURRECT, 12s); } } @@ -313,21 +313,21 @@ public: case EVENT_SPELL_DECREPIFY: if( !me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE) ) me->CastSpell(me->GetVictim(), SPELL_DECREPIFY, false); - events.RepeatEvent(urand(15000, 25000)); + events.Repeat(15s, 25s); break; case EVENT_SPELL_BONE_ARMOR: if( !me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE) ) me->CastSpell((Unit*)nullptr, SPELL_BONE_ARMOR, false); - events.RepeatEvent(urand(40000, 120000)); + events.Repeat(40s, 120s); break; case EVENT_RESURRECT: - events.DelayEvents(3500); + events.DelayEvents(3500ms); DoCast(me, SPELL_SCOURGE_RESURRECTION, true); me->SetStandState(UNIT_STAND_STATE_STAND); me->RemoveUnitFlag(UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT); me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD); - events.RescheduleEvent(EVENT_RESURRECT_2, 3000); + events.RescheduleEvent(EVENT_RESURRECT_2, 3s); break; case EVENT_RESURRECT_2: me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index 1191bd9d4..9a4b9afa7 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -112,7 +112,7 @@ public: switch (param) { case 1: - events.RescheduleEvent(EVENT_MATE_DIED, 3500); + events.RescheduleEvent(EVENT_MATE_DIED, 3500ms); break; } } @@ -120,14 +120,14 @@ public: void JustEngagedWith(Unit* who) override { events.Reset(); - events.RescheduleEvent(EVENT_SHARVALD_CHARGE, 5000); - events.RescheduleEvent(EVENT_STONE_STRIKE, 10000); + events.RescheduleEvent(EVENT_SHARVALD_CHARGE, 5s); + events.RescheduleEvent(EVENT_STONE_STRIKE, 10s); if (me->GetEntry() == NPC_SKARVALD) { Talk(YELL_SKARVALD_AGGRO); if (IsHeroic()) { - events.ScheduleEvent(EVENT_ENRAGE, 1000); + events.ScheduleEvent(EVENT_ENRAGE, 1s); } } if (pInstance) @@ -202,17 +202,17 @@ public: me->AddThreat(target, 10000.0f); me->CastSpell(target, SPELL_CHARGE, false); } - events.RepeatEvent(urand(5000, 10000)); + events.Repeat(5s, 10s); break; case EVENT_STONE_STRIKE: if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim())) { me->CastSpell(me->GetVictim(), SPELL_STONE_STRIKE, false); - events.RepeatEvent(urand(5000, 10000)); + events.Repeat(5s, 10s); } else { - events.RepeatEvent(3000); + events.Repeat(3s); } break; case EVENT_ENRAGE: @@ -221,7 +221,7 @@ public: me->CastSpell(me, SPELL_ENRAGE, true); break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; } DoMeleeAttackIfReady(); @@ -280,7 +280,7 @@ public: summons.DespawnAll(); break; case 1: - events.RescheduleEvent(EVENT_MATE_DIED, 3500); + events.RescheduleEvent(EVENT_MATE_DIED, 3500ms); break; } } @@ -288,15 +288,15 @@ public: void JustEngagedWith(Unit* who) override { events.Reset(); - events.RescheduleEvent(EVENT_SHADOW_BOLT, 1000); - events.RescheduleEvent(EVENT_DEBILITATE, 5000); + events.RescheduleEvent(EVENT_SHADOW_BOLT, 1s); + events.RescheduleEvent(EVENT_DEBILITATE, 5s); if (IsHeroic()) { - events.RescheduleEvent(EVENT_SUMMON_SKELETONS, 10000); + events.RescheduleEvent(EVENT_SUMMON_SKELETONS, 10s); } if (me->GetEntry() == NPC_DALRONN) { - events.RescheduleEvent(EVENT_YELL_DALRONN_AGGRO, 4999); + events.RescheduleEvent(EVENT_YELL_DALRONN_AGGRO, 5s); } if (pInstance) { @@ -376,22 +376,22 @@ public: { me->CastSpell(target, DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false); } - events.RepeatEvent(2050); + events.Repeat(2s); break; case EVENT_DEBILITATE: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true)) { me->CastSpell(target, SPELL_DEBILITATE, false); - events.RepeatEvent(urand(5000, 10000)); + events.Repeat(5s, 10s); } else { - events.RepeatEvent(3000); + events.Repeat(3s); } break; case EVENT_SUMMON_SKELETONS: me->CastSpell((Unit*)nullptr, SPELL_SUMMON_SKELETONS, false); - events.RepeatEvent(urand(20000, 30000)); + events.Repeat(20s, 30s); break; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index ee66014bd..b9bacea6b 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -124,9 +124,9 @@ public: void Reset() override { _events.Reset(); - _events.ScheduleEvent(EVENT_REND, urand(2000, 3000)); - _events.ScheduleEvent(EVENT_FLAME_BREATH, urand(5500, 7000)); - _events.ScheduleEvent(EVENT_KNOCKAWAY, urand(3500, 6000)); + _events.ScheduleEvent(EVENT_REND, 2s, 3s); + _events.ScheduleEvent(EVENT_FLAME_BREATH, 5500ms, 7000ms); + _events.ScheduleEvent(EVENT_KNOCKAWAY, 3500ms, 6000ms); } void MovementInform(uint32 type, uint32 id) override @@ -173,15 +173,15 @@ public: { case EVENT_REND: DoCast(SPELL_REND); - _events.ScheduleEvent(EVENT_REND, urand(15000, 20000)); + _events.ScheduleEvent(EVENT_REND, 15s, 20s); break; case EVENT_FLAME_BREATH: DoCast(SPELL_FLAME_BREATH); - _events.ScheduleEvent(EVENT_FLAME_BREATH, urand(11000, 12000)); + _events.ScheduleEvent(EVENT_FLAME_BREATH, 11s, 12s); break; case EVENT_KNOCKAWAY: DoCast(SPELL_KNOCK_AWAY); - _events.ScheduleEvent(EVENT_KNOCKAWAY, urand(7000, 8500)); + _events.ScheduleEvent(EVENT_KNOCKAWAY, 7000ms, 8500ms); break; default: break; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp index cd993a802..99f2b744b 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp @@ -197,7 +197,7 @@ public: summons.Summon(cr); cr->SetDisableGravity(true); cr->GetMotionMaster()->MovePoint(0, 275.4f, -453, 110); // ROOM CENTER - events.RescheduleEvent(EVENT_UNFREEZE_MONSTER, 10000); + events.RescheduleEvent(EVENT_UNFREEZE_MONSTER, 10s); me->SetInCombatWithZone(); me->SetControlled(true, UNIT_STATE_STUNNED); } @@ -205,9 +205,9 @@ public: else if (param == ACTION_MINIBOSS_DIED) { if (Counter > (IsHeroic() ? 3 : 1)) - events.RescheduleEvent(EVENT_PALEHOOF_START, 3000); + events.RescheduleEvent(EVENT_PALEHOOF_START, 3s); else - events.RescheduleEvent(EVENT_UNFREEZE_MONSTER, 3000); + events.RescheduleEvent(EVENT_UNFREEZE_MONSTER, 3s); } } void JustEngagedWith(Unit* /*pWho*/) override @@ -246,7 +246,7 @@ public: Counter++; miniBoss->AI()->DoAction(ACTION_UNFREEZE); orb->CastSpell(miniBoss, SPELL_AWAKEN_SUBBOSS, true); - events.ScheduleEvent(EVENT_UNFREEZE_MONSTER2, 6000); + events.ScheduleEvent(EVENT_UNFREEZE_MONSTER2, 6s); } else EnterEvadeMode(); @@ -272,7 +272,7 @@ public: if (Creature* orb = ObjectAccessor::GetCreature(*me, OrbGUID)) { orb->CastSpell(me, SPELL_AWAKEN_SUBBOSS, true); - events.ScheduleEvent(EVENT_PALEHOOF_START2, 6000); + events.ScheduleEvent(EVENT_PALEHOOF_START2, 6s); } break; } @@ -288,15 +288,15 @@ public: // SETINCOMBATWITHZONE // schedule combat events - events.ScheduleEvent(EVENT_PALEHOOF_WITHERING_ROAR, 10000); - events.ScheduleEvent(EVENT_PALEHOOF_IMPALE, 12000); - events.ScheduleEvent(EVENT_PALEHOOF_ARCING_SMASH, 15000); + events.ScheduleEvent(EVENT_PALEHOOF_WITHERING_ROAR, 10s); + events.ScheduleEvent(EVENT_PALEHOOF_IMPALE, 12s); + events.ScheduleEvent(EVENT_PALEHOOF_ARCING_SMASH, 15s); break; } case EVENT_PALEHOOF_WITHERING_ROAR: { me->CastSpell(me, IsHeroic() ? SPELL_WITHERING_ROAR_H : SPELL_WITHERING_ROAR_N, false); - events.RepeatEvent(8000 + rand() % 4000); + events.Repeat(8s, 12s); break; } case EVENT_PALEHOOF_IMPALE: @@ -304,13 +304,13 @@ public: if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(tgt, IsHeroic() ? SPELL_IMPALE_H : SPELL_IMPALE_N, false); - events.RepeatEvent(8000 + rand() % 4000); + events.Repeat(8s, 12s); break; } case EVENT_PALEHOOF_ARCING_SMASH: { me->CastSpell(me->GetVictim(), SPELL_ARCING_SMASH, false); - events.RepeatEvent(13000 + rand() % 4000); + events.Repeat(13s, 17s); break; } } @@ -381,9 +381,9 @@ public: me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_JORMUNGAR_ACID_SPIT, 3000); - events.ScheduleEvent(EVENT_JORMUNGAR_ACID_SPLATTER, 12000); - events.ScheduleEvent(EVENT_JORMUNGAR_POISON_BREATH, 10000); + events.ScheduleEvent(EVENT_JORMUNGAR_ACID_SPIT, 3s); + events.ScheduleEvent(EVENT_JORMUNGAR_ACID_SPLATTER, 12s); + events.ScheduleEvent(EVENT_JORMUNGAR_POISON_BREATH, 10s); } else if (param == ACTION_DESPAWN_ADDS) summons.DespawnAll(); @@ -418,7 +418,7 @@ public: if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(tgt, SPELL_ACID_SPIT, false); - events.RepeatEvent(2000 + rand() % 2000); + events.Repeat(2s, 4s); break; } case EVENT_JORMUNGAR_ACID_SPLATTER: @@ -436,7 +436,7 @@ public: pJormungarWorm->SetInCombatWithZone(); } } - events.RepeatEvent(10000 + rand() % 4000); + events.Repeat(10s, 15s); break; } case EVENT_JORMUNGAR_POISON_BREATH: @@ -444,7 +444,7 @@ public: if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(tgt, IsHeroic() ? SPELL_POISON_BREATH_H : SPELL_POISON_BREATH_N, false); - events.RepeatEvent(8000 + rand() % 4000); + events.Repeat(8s, 12s); break; } } @@ -507,9 +507,9 @@ public: me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_RHINO_STOMP, 3000); - events.ScheduleEvent(EVENT_RHINO_GORE, 12000); - events.ScheduleEvent(EVENT_RHINO_WOUND, 10000); + events.ScheduleEvent(EVENT_RHINO_STOMP, 3s); + events.ScheduleEvent(EVENT_RHINO_GORE, 12s); + events.ScheduleEvent(EVENT_RHINO_WOUND, 10s); } } @@ -540,13 +540,13 @@ public: case EVENT_RHINO_STOMP: { me->CastSpell(me->GetVictim(), SPELL_STOMP, false); - events.RepeatEvent(8000 + rand() % 4000); + events.Repeat(8s, 12s); break; } case EVENT_RHINO_GORE: { me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_GORE_H : SPELL_GORE_N, false); - events.RepeatEvent(13000 + rand() % 4000); + events.Repeat(13s, 17s); break; } case EVENT_RHINO_WOUND: @@ -554,7 +554,7 @@ public: if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(tgt, IsHeroic() ? SPELL_GRIEVOUS_WOUND_H : SPELL_GRIEVOUS_WOUND_N, false); - events.RepeatEvent(18000 + rand() % 4000); + events.Repeat(18s, 22s); break; } } @@ -617,9 +617,9 @@ public: me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_FURBOLG_CHAIN, 3000); - events.ScheduleEvent(EVENT_FURBOLG_CRAZED, 12000); - events.ScheduleEvent(EVENT_FURBOLG_ROAR, 10000); + events.ScheduleEvent(EVENT_FURBOLG_CHAIN, 3s); + events.ScheduleEvent(EVENT_FURBOLG_CRAZED, 12s); + events.ScheduleEvent(EVENT_FURBOLG_ROAR, 10s); } } @@ -650,19 +650,19 @@ public: case EVENT_FURBOLG_CHAIN: { me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CHAIN_LIGHTING_H : SPELL_CHAIN_LIGHTING_N, false); - events.RepeatEvent(4000 + rand() % 3000); + events.Repeat(4s, 7s); break; } case EVENT_FURBOLG_CRAZED: { me->CastSpell(me, SPELL_CRAZED, false); - events.RepeatEvent(8000 + rand() % 4000); + events.Repeat(8s, 12s); break; } case EVENT_FURBOLG_ROAR: { me->CastSpell(me, SPELL_TERRIFYING_ROAR, false); - events.RepeatEvent(10000 + rand() % 5000); + events.Repeat(10s, 15s); break; } } @@ -725,9 +725,9 @@ public: me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetInCombatWithZone(); - events.ScheduleEvent(EVENT_WORGEN_MORTAL, 3000); - events.ScheduleEvent(EVENT_WORGEN_ENRAGE1, 12000); - events.ScheduleEvent(EVENT_WORGEN_ENRAGE2, 10000); + events.ScheduleEvent(EVENT_WORGEN_MORTAL, 3s); + events.ScheduleEvent(EVENT_WORGEN_ENRAGE1, 12s); + events.ScheduleEvent(EVENT_WORGEN_ENRAGE2, 10s); } } @@ -758,19 +758,19 @@ public: case EVENT_WORGEN_MORTAL: { me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_MORTAL_WOUND_H : SPELL_MORTAL_WOUND_N, false); - events.RepeatEvent(4000 + rand() % 3000); + events.Repeat(4s, 7s); break; } case EVENT_WORGEN_ENRAGE1: { me->CastSpell(me, SPELL_ENRAGE_1, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; } case EVENT_WORGEN_ENRAGE2: { me->CastSpell(me, SPELL_ENRAGE_2, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; } } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index 26088671d..09e879eb9 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -175,7 +175,7 @@ public: me->SetControlled(true, UNIT_STATE_ROOT); me->SetInCombatWithZone(); - events.RescheduleEvent(EVENT_SKADI_START, 2000); + events.RescheduleEvent(EVENT_SKADI_START, 2s); } } @@ -184,9 +184,9 @@ public: if (param == ACTION_PHASE2) { SecondPhase = true; - events.ScheduleEvent(EVENT_SKADI_CRUSH, 8000); - events.ScheduleEvent(EVENT_SKADI_SPEAR, 10000); - events.ScheduleEvent(EVENT_SKADI_WHIRLWIND, 15000); + events.ScheduleEvent(EVENT_SKADI_CRUSH, 8s); + events.ScheduleEvent(EVENT_SKADI_SPEAR, 10s); + events.ScheduleEvent(EVENT_SKADI_WHIRLWIND, 15s); if (me->GetVictim()) me->GetMotionMaster()->MoveChase(me->GetVictim()); @@ -222,7 +222,7 @@ public: case EVENT_SKADI_CRUSH: { me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CRUSH_H : SPELL_CRUSH_N, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; } case EVENT_SKADI_SPEAR: @@ -230,14 +230,14 @@ public: if (Unit* tgt = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(tgt, IsHeroic() ? SPELL_POISONED_SPEAR_H : SPELL_POISONED_SPEAR_N, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; } case EVENT_SKADI_WHIRLWIND: { me->CastSpell(me, IsHeroic() ? SPELL_WHIRLWIND_H : SPELL_WHIRLWIND_N, false); - events.RepeatEvent(15000 + rand() % 5000); - events.DelayEvents(10000); + events.Repeat(15s, 20s); + events.DelayEvents(10s); break; } } @@ -303,8 +303,8 @@ public: { if (param == ACTION_START_EVENT) { - events.RescheduleEvent(EVENT_GRAUF_CHECK, 5000); - events.RescheduleEvent(EVENT_GRAUF_START, 2000); + events.RescheduleEvent(EVENT_GRAUF_CHECK, 5s); + events.RescheduleEvent(EVENT_GRAUF_START, 2s); } else if (param == ACTION_REMOVE_SKADI) { @@ -312,7 +312,7 @@ public: if (Creature* skadi = passenger->ToCreature()) skadi->AI()->Talk(SAY_DRAKE_DEATH); me->GetMotionMaster()->MovePoint(10, 480.0f, -513.0f, 108.0f); - events.ScheduleEvent(EVENT_GRAUF_REMOVE_SKADI, 2000); + events.ScheduleEvent(EVENT_GRAUF_REMOVE_SKADI, 2s); } else if (param == ACTION_MYGIRL_ACHIEVEMENT) { @@ -445,7 +445,7 @@ public: case EVENT_GRAUF_CHECK: { CheckPlayers(); - events.RepeatEvent(2000); + events.Repeat(2s); break; } case EVENT_GRAUF_START: @@ -455,8 +455,8 @@ public: SpawnHelpers(0); SpawnHelpers(0); - events.ScheduleEvent(EVENT_GRAUF_MOVE, 15000); - events.ScheduleEvent(EVENT_GRAUF_SUMMON_HELPERS, 20000); + events.ScheduleEvent(EVENT_GRAUF_MOVE, 15s); + events.ScheduleEvent(EVENT_GRAUF_SUMMON_HELPERS, 20s); break; } case EVENT_GRAUF_MOVE: @@ -475,13 +475,13 @@ public: m_pInstance->SetData(SKADI_IN_RANGE, 0); currentPos = targetPoint; - events.RepeatEvent(25000); + events.Repeat(25s); break; } case EVENT_GRAUF_SUMMON_HELPERS: { SpawnHelpers(1); - events.RepeatEvent(15000); + events.Repeat(15s); break; } case EVENT_GRAUF_REMOVE_SKADI: diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index 6f8e67585..b58427058 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -180,9 +180,9 @@ public: me->SetInCombatWithZone(); Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SORROWGRAVE_SS, 3000); - events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES, 11000); - events.ScheduleEvent(EVENT_SORROWGRAVE_RITUAL, 25000); + events.ScheduleEvent(EVENT_SORROWGRAVE_SS, 3s); + events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES, 11s); + events.ScheduleEvent(EVENT_SORROWGRAVE_RITUAL, 25s); if (instance) instance->SetData(DATA_SVALA_SORROWGRAVE, IN_PROGRESS); @@ -215,25 +215,25 @@ public: { case EVENT_SVALA_START: Talk(TALK_INTRO_S1); - events2.ScheduleEvent(EVENT_SVALA_TALK1, 8000); + events2.ScheduleEvent(EVENT_SVALA_TALK1, 8s); break; case EVENT_SVALA_TALK1: if (Creature* Arthas = ObjectAccessor::GetCreature(*me, ArthasGUID)) Arthas->AI()->Talk(TALK_INTRO_A1); - events2.ScheduleEvent(EVENT_SVALA_TALK2, 9000); + events2.ScheduleEvent(EVENT_SVALA_TALK2, 9s); break; case EVENT_SVALA_TALK2: if (Creature* Arthas = ObjectAccessor::GetCreature(*me, ArthasGUID)) Arthas->CastSpell(me, SPELL_ARTHAS_TRANSFORMING_SVALA, false); me->CastSpell(me, SPELL_SVALA_TRANSFORMING2, true); - events2.ScheduleEvent(EVENT_SVALA_TALK3, 3000); + events2.ScheduleEvent(EVENT_SVALA_TALK3, 3s); break; case EVENT_SVALA_TALK3: me->SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 6.0f); me->SetHover(true); me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD); - events2.ScheduleEvent(30, 1000); - events2.ScheduleEvent(EVENT_SVALA_TALK4, 9000); + events2.ScheduleEvent(30, 1s); + events2.ScheduleEvent(EVENT_SVALA_TALK4, 9s); break; case 30: { @@ -253,7 +253,7 @@ public: Arthas->InterruptNonMeleeSpells(false); me->RemoveAllAuras(); me->SetWalk(false); - events2.ScheduleEvent(EVENT_SVALA_TALK5, 2000); + events2.ScheduleEvent(EVENT_SVALA_TALK5, 2s); std::list creatureList; me->GetCreaturesWithEntryInRange(creatureList, 100.0f, NPC_DRAGONFLAYER_SPECTATOR); @@ -264,23 +264,23 @@ public: } case EVENT_SVALA_TALK5: Talk(TALK_INTRO_S2); - events2.ScheduleEvent(EVENT_SVALA_TALK6, 12000); + events2.ScheduleEvent(EVENT_SVALA_TALK6, 12s); break; case EVENT_SVALA_TALK6: if (Creature* Arthas = ObjectAccessor::GetCreature(*me, ArthasGUID)) Arthas->AI()->Talk(TALK_INTRO_A2); - events2.ScheduleEvent(EVENT_SVALA_TALK7, 9000); + events2.ScheduleEvent(EVENT_SVALA_TALK7, 9s); break; case EVENT_SVALA_TALK7: me->SetFacingTo(M_PI / 2.0f); Talk(TALK_INTRO_S3); if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(GO_SVALA_MIRROR))) mirror->SetGoState(GO_STATE_ACTIVE); - events2.ScheduleEvent(EVENT_SVALA_TALK8, 13000); + events2.ScheduleEvent(EVENT_SVALA_TALK8, 13s); break; case EVENT_SVALA_TALK8: me->GetMotionMaster()->MoveFall(0, true); - events2.ScheduleEvent(EVENT_SVALA_TALK9, 2000); + events2.ScheduleEvent(EVENT_SVALA_TALK9, 2s); break; case EVENT_SVALA_TALK9: me->SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 3.0f); @@ -303,14 +303,14 @@ public: { case EVENT_SORROWGRAVE_SS: me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_SINSTER_STRIKE_H : SPELL_SINSTER_STRIKE_N, false); - events.ScheduleEvent(EVENT_SORROWGRAVE_SS, urand(3000, 5000)); + events.ScheduleEvent(EVENT_SORROWGRAVE_SS, 3s, 5s); break; case EVENT_SORROWGRAVE_FLAMES: summons.DespawnAll(); me->CastSpell(me, SPELL_CALL_FLAMES, false); - events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES2, 500); - events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES2, 1000); - events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES, urand(8000, 12000)); + events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES2, 500ms); + events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES2, 1s); + events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES, 8s, 12s); break; case EVENT_SORROWGRAVE_FLAMES2: { @@ -342,8 +342,8 @@ public: } events.DelayEvents(25001); // +1 just to be sure - events.ScheduleEvent(EVENT_SORROWGRAVE_RITUAL_SPELLS, 0); - events.ScheduleEvent(EVENT_SORROWGRAVE_FINISH_RITUAL, 25000); + events.ScheduleEvent(EVENT_SORROWGRAVE_RITUAL_SPELLS, 0ms); + events.ScheduleEvent(EVENT_SORROWGRAVE_FINISH_RITUAL, 25s); return; case EVENT_SORROWGRAVE_RITUAL_SPELLS: //me->CastSpell(me, SPELL_RITUAL_OF_THE_SWORD, false); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index 0b6b14d19..696fde9ff 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -175,10 +175,10 @@ public: me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } - events.RescheduleEvent(EVENT_YMIRON_BANE, 18000); - events.RescheduleEvent(EVENT_YMIRON_FETID_ROT, 8000); - events.RescheduleEvent(EVENT_YMIRON_DARK_SLASH, 28000); - events.RescheduleEvent(EVENT_YMIRON_HEALTH_CHECK, 1000); + events.RescheduleEvent(EVENT_YMIRON_BANE, 18s); + events.RescheduleEvent(EVENT_YMIRON_FETID_ROT, 8s); + events.RescheduleEvent(EVENT_YMIRON_DARK_SLASH, 28s); + events.RescheduleEvent(EVENT_YMIRON_HEALTH_CHECK, 1s); } void MovementInform(uint32 uiType, uint32 point) override @@ -192,7 +192,7 @@ public: if (Creature* cr = me->FindNearestCreature(BoatStructure[BoatOrder[BoatNum - 1]].trigger, 50.0f)) me->CastSpell(cr, SPELL_CHANNEL_YMIRON_TO_SPIRIT, true); - events.ScheduleEvent(EVENT_YMIRON_ACTIVATE_BOAT, 6000); + events.ScheduleEvent(EVENT_YMIRON_ACTIVATE_BOAT, 6s); } } @@ -237,26 +237,26 @@ public: BoatNum++; } - events.RepeatEvent(1000); + events.Repeat(1s); break; } case EVENT_YMIRON_BANE: { me->CastSpell(me, IsHeroic() ? SPELL_BANE_H : SPELL_BANE_N, false); - events.RepeatEvent(20000 + rand() % 5000); + events.Repeat(20s, 25s); break; } case EVENT_YMIRON_FETID_ROT: { me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_FETID_ROT_H : SPELL_FETID_ROT_N, false); - events.RepeatEvent(10000 + rand() % 3000); + events.Repeat(10s, 13s); break; } case EVENT_YMIRON_DARK_SLASH: { int32 dmg = me->GetVictim()->GetHealth() / 2; me->CastCustomSpell(me->GetVictim(), SPELL_DARK_SLASH, &dmg, 0, 0, false); - events.RepeatEvent(30000 + rand() % 5000); + events.Repeat(30s, 35s); break; } case EVENT_YMIRON_ACTIVATE_BOAT: @@ -274,16 +274,16 @@ public: switch(BoatOrder[BoatNum - 1]) { case 0: - events.ScheduleEvent(EVENT_YMIRON_RANULF_ABILITY, 3000, 1); + events.ScheduleEvent(EVENT_YMIRON_RANULF_ABILITY, 3s, 1); break; case 1: - events.ScheduleEvent(EVENT_YMIRON_TORGYN_ABILITY, 3000, 1); + events.ScheduleEvent(EVENT_YMIRON_TORGYN_ABILITY, 3s, 1); break; case 2: - events.ScheduleEvent(EVENT_YMIRON_BJORN_ABILITY, 3000, 1); + events.ScheduleEvent(EVENT_YMIRON_BJORN_ABILITY, 3s, 1); break; case 3: - events.ScheduleEvent(EVENT_YMIRON_HALDOR_ABILITY, 3000, 1); + events.ScheduleEvent(EVENT_YMIRON_HALDOR_ABILITY, 3s, 1); break; } } @@ -305,13 +305,13 @@ public: case EVENT_YMIRON_HALDOR_ABILITY: { me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_SPIRIT_STRIKE_H : SPELL_SPIRIT_STRIKE_N, false); - events.RepeatEvent(5000); + events.Repeat(5s); break; } case EVENT_YMIRON_RANULF_ABILITY: { me->CastSpell(me, IsHeroic() ? SPELL_SPIRIT_BURST_H : SPELL_SPIRIT_BURST_N, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; } case EVENT_YMIRON_TORGYN_ABILITY: @@ -324,7 +324,7 @@ public: as->SetInCombatWithZone(); } } - events.RepeatEvent(15000); + events.Repeat(15s); break; } } diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp index 5565beacb..ff502e23f 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_archavon.cpp @@ -98,10 +98,10 @@ class boss_archavon : public CreatureScript void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_ROCK_SHARDS, 15000); - events.ScheduleEvent(EVENT_CHOKING_CLOUD, 30000); - events.ScheduleEvent(EVENT_STOMP, 45000); - events.ScheduleEvent(EVENT_BERSERK, 300000); + events.ScheduleEvent(EVENT_ROCK_SHARDS, 15s); + events.ScheduleEvent(EVENT_CHOKING_CLOUD, 30s); + events.ScheduleEvent(EVENT_STOMP, 45s); + events.ScheduleEvent(EVENT_BERSERK, 5min); if (pInstance) { @@ -139,7 +139,7 @@ class boss_archavon : public CreatureScript DoCast(target, SPELL_ROCK_SHARDS); } - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_CHOKING_CLOUD: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1)) @@ -147,7 +147,7 @@ class boss_archavon : public CreatureScript DoCast(target, RAID_MODE(SPELL_CRUSHING_LEAP_10, SPELL_CRUSHING_LEAP_25), true); //10y ~ 80y, ignore range } - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_STOMP: { @@ -157,8 +157,8 @@ class boss_archavon : public CreatureScript DoCastVictim(RAID_MODE(SPELL_STOMP_10, SPELL_STOMP_25)); - events.RepeatEvent(45000); - events.ScheduleEvent(EVENT_IMPALE, 3000); + events.Repeat(45s); + events.ScheduleEvent(EVENT_IMPALE, 3s); break; } case EVENT_IMPALE: diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp index 2f6d7f185..4d2558754 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_emalon.cpp @@ -122,7 +122,7 @@ public: void SummonedCreatureDies(Creature* cr, Unit*) override { summons.Despawn(cr); - events.ScheduleEvent(EVENT_SUMMON_NEXT_MINION, 4000); + events.ScheduleEvent(EVENT_SUMMON_NEXT_MINION, 4s); } void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override @@ -140,10 +140,10 @@ public: summons.DoZoneInCombat(); - events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 5000); - events.ScheduleEvent(EVENT_LIGHTNING_NOVA, 40000); - events.ScheduleEvent(EVENT_BERSERK, 360000); - events.ScheduleEvent(EVENT_OVERCHARGE, 47000); + events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 5s); + events.ScheduleEvent(EVENT_LIGHTNING_NOVA, 40s); + events.ScheduleEvent(EVENT_BERSERK, 6min); + events.ScheduleEvent(EVENT_OVERCHARGE, 47s); if (pInstance) pInstance->SetData(EVENT_EMALON, IN_PROGRESS); @@ -171,17 +171,17 @@ public: case EVENT_CHAIN_LIGHTNING: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25), false); - events.RepeatEvent(25000); + events.Repeat(25s); break; case EVENT_LIGHTNING_NOVA: me->CastSpell(me, RAID_MODE(SPELL_LIGHTNING_NOVA_10, SPELL_LIGHTNING_NOVA_25), false); - events.RepeatEvent(40000); + events.Repeat(40s); break; case EVENT_OVERCHARGE: if (!summons.empty()) me->CastCustomSpell(SPELL_OVERCHARGE, SPELLVALUE_MAX_TARGETS, 1, me, true); Talk(EMOTE_OVERCHARGE); - events.RepeatEvent(40000); + events.Repeat(40s); break; case EVENT_BERSERK: me->CastSpell(me, SPELL_BERSERK, true); diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp index 4a005485d..b8583f8c2 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_koralon.cpp @@ -89,9 +89,9 @@ public: { me->CastSpell(me, SPELL_BURNING_FURY, true); - events.ScheduleEvent(EVENT_BURNING_BREATH, 10000); - events.ScheduleEvent(EVENT_METEOR_FISTS, 30000); - events.ScheduleEvent(EVENT_FLAME_CINDER, 20000); + events.ScheduleEvent(EVENT_BURNING_BREATH, 10s); + events.ScheduleEvent(EVENT_METEOR_FISTS, 30s); + events.ScheduleEvent(EVENT_FLAME_CINDER, 20s); if (pInstance) pInstance->SetData(EVENT_KORALON, IN_PROGRESS); @@ -140,15 +140,15 @@ public: case EVENT_BURNING_BREATH: rotateTimer = 1500; me->CastSpell(me, SPELL_BURNING_BREATH, false); - events.RepeatEvent(45000); + events.Repeat(45s); break; case EVENT_METEOR_FISTS: me->CastSpell(me, SPELL_METEOR_FISTS, true); - events.RepeatEvent(45000); + events.Repeat(45s); break; case EVENT_FLAME_CINDER: me->CastSpell(me, SPELL_FLAMING_CINDER, true); - events.RepeatEvent(30000); + events.Repeat(30s); break; default: break; diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp index 7ee6572dd..ac3fb0f7a 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp @@ -96,9 +96,9 @@ public: { me->CastSpell(me, SPELL_FROZEN_MALLET, true); - events.ScheduleEvent(EVENT_FROZEN_ORB_STALKER, 12000); - events.ScheduleEvent(EVENT_FREEZING_GROUND, 7000); - events.ScheduleEvent(EVENT_CAST_WHITEOUT, 25000); // schedule FIRST whiteout event in 25 seconds -1 for compesate updateai 2seconds check delay + events.ScheduleEvent(EVENT_FROZEN_ORB_STALKER, 12s); + events.ScheduleEvent(EVENT_FREEZING_GROUND, 7s); + events.ScheduleEvent(EVENT_CAST_WHITEOUT, 25s); // schedule FIRST whiteout event in 25 seconds -1 for compesate updateai 2seconds check delay if (pInstance) pInstance->SetData(EVENT_TORAVON, IN_PROGRESS); @@ -133,16 +133,16 @@ public: case EVENT_FREEZING_GROUND: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, SPELL_FREEZING_GROUND, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_FROZEN_ORB_STALKER: me->CastCustomSpell(SPELL_FROZEN_ORB, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 3), me, false); - events.RepeatEvent(30000); + events.Repeat(30s); break; case EVENT_CAST_WHITEOUT: me->CastSpell(me, SPELL_WHITEOUT, false); - events.ScheduleEvent(EVENT_CAST_WHITEOUT_GROUND_EFFECT, 1000); // triggers after 1 sec "plus 1 from trigger to cast visual" - events.RepeatEvent(40000); // next whiteout instead first 25 SEC is now 45 SEC + events.ScheduleEvent(EVENT_CAST_WHITEOUT_GROUND_EFFECT, 1s); // triggers after 1 sec "plus 1 from trigger to cast visual" + events.Repeat(40s); // next whiteout instead first 25 SEC is now 45 SEC break; case EVENT_CAST_WHITEOUT_GROUND_EFFECT: // Whiteout Ground effect trigger if (Unit* whiteOutGround = me->SummonCreature(NPC_WHITEOUT_GROUND_EFFECT, -43.3316, -288.708, 92.2511, 1.58825, TEMPSUMMON_TIMED_DESPAWN, 4000)) diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp index 5bb9baa6a..7bc8ff4b8 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp @@ -87,12 +87,12 @@ public: DoZoneInCombat(); Talk(SAY_AGGRO); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_ARCANE_VACUUM, 30000); - events.RescheduleEvent(EVENT_SPELL_BLIZZARD, urand(5000, 10000)); - events.RescheduleEvent(EVENT_SPELL_TAIL_SWEEP, urand(15000, 20000)); - events.RescheduleEvent(EVENT_SPELL_UNCONTROLLABLE_ENERGY, urand(5000, 8000)); + events.RescheduleEvent(EVENT_SPELL_ARCANE_VACUUM, 30s); + events.RescheduleEvent(EVENT_SPELL_BLIZZARD, 5s, 10s); + events.RescheduleEvent(EVENT_SPELL_TAIL_SWEEP, 15s, 20s); + events.RescheduleEvent(EVENT_SPELL_UNCONTROLLABLE_ENERGY, 5s, 8s); if (IsHeroic()) - events.RescheduleEvent(EVENT_SPELL_MANA_DESTRUCTION, 20000); + events.RescheduleEvent(EVENT_SPELL_MANA_DESTRUCTION, 20s); } void SpellHitTarget(Unit* target, SpellInfo const* spell) override @@ -126,8 +126,8 @@ public: DoResetThreatList(); me->SetControlled(true, UNIT_STATE_ROOT); me->setAttackTimer(BASE_ATTACK, 3000); - events.RepeatEvent(30000); - events.ScheduleEvent(EVENT_UNROOT, 3000); + events.Repeat(30s); + events.ScheduleEvent(EVENT_UNROOT, 3s); break; case EVENT_UNROOT: me->SetControlled(false, UNIT_STATE_ROOT); @@ -136,20 +136,20 @@ public: case EVENT_SPELL_BLIZZARD: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 45.0f, true)) me->CastSpell(target, SPELL_BLIZZARD, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_SPELL_MANA_DESTRUCTION: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) me->CastSpell(target, SPELL_MANA_DESTRUCTION, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SPELL_TAIL_SWEEP: me->CastSpell(me->GetVictim(), SPELL_TAIL_SWEEP, false); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; case EVENT_SPELL_UNCONTROLLABLE_ENERGY: me->CastSpell(me->GetVictim(), SPELL_UNCONTROLLABLE_ENERGY, false); - events.RepeatEvent(urand(20000, 25000)); + events.Repeat(20s, 25s); break; } diff --git a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp index d16349987..72cdb60a8 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_erekem.cpp @@ -89,14 +89,14 @@ public: Talk(SAY_AGGRO); DoCast(me, SPELL_EARTH_SHIELD); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_BLOODLUST, 15000); - events.RescheduleEvent(EVENT_SPELL_BREAK_BONDS, urand(9000, 14000)); - events.RescheduleEvent(EVENT_SPELL_CHAIN_HEAL, 0); - events.RescheduleEvent(EVENT_SPELL_EARTH_SHIELD, 20000); - events.RescheduleEvent(EVENT_SPELL_EARTH_SHOCK, urand(2000, 8000)); - events.RescheduleEvent(EVENT_SPELL_LIGHTNING_BOLT, urand(5000, 10000)); + events.RescheduleEvent(EVENT_SPELL_BLOODLUST, 15s); + events.RescheduleEvent(EVENT_SPELL_BREAK_BONDS, 9s, 14s); + events.RescheduleEvent(EVENT_SPELL_CHAIN_HEAL, 0ms); + events.RescheduleEvent(EVENT_SPELL_EARTH_SHIELD, 20s); + events.RescheduleEvent(EVENT_SPELL_EARTH_SHOCK, 2s, 8s); + events.RescheduleEvent(EVENT_SPELL_LIGHTNING_BOLT, 5s, 10s); if (IsHeroic()) - events.RescheduleEvent(EVENT_SPELL_STORMSTRIKE, 3000); + events.RescheduleEvent(EVENT_SPELL_STORMSTRIKE, 3s); if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_1_GUID))) if (!c->IsInCombat()) @@ -122,11 +122,11 @@ public: break; case EVENT_SPELL_BLOODLUST: me->CastSpell((Unit*)nullptr, SPELL_BLOODLUST, false); - events.RepeatEvent(urand(35000, 45000)); + events.Repeat(35s, 45s); break; case EVENT_SPELL_BREAK_BONDS: me->CastSpell((Unit*)nullptr, SPELL_BREAK_BONDS, false); - events.RepeatEvent(urand(16000, 22000)); + events.Repeat(16s, 22s); break; case EVENT_SPELL_CHAIN_HEAL: if (ObjectGuid TargetGUID = GetChainHealTargetGUID()) @@ -139,24 +139,24 @@ public: Creature* pGuard2 = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_2_GUID)); if ((pGuard1 && !pGuard1->IsAlive()) || (pGuard2 && !pGuard2->IsAlive())) { - events.RepeatEvent(urand(3000, 6000)); + events.Repeat(3s, 6s); break; } } - events.RepeatEvent(urand(8000, 11000)); + events.Repeat(8s, 11s); break; case EVENT_SPELL_EARTH_SHIELD: me->CastSpell(me, SPELL_EARTH_SHIELD, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SPELL_EARTH_SHOCK: me->CastSpell(me->GetVictim(), SPELL_EARTH_SHOCK, false); - events.RepeatEvent(urand(8000, 13000)); + events.Repeat(8s, 13s); break; case EVENT_SPELL_LIGHTNING_BOLT: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 35.0f, true)) me->CastSpell(target, SPELL_LIGHTNING_BOLT, false); - events.RepeatEvent(urand(15000, 25000)); + events.Repeat(15s, 25s); break; case EVENT_SPELL_STORMSTRIKE: { @@ -164,7 +164,7 @@ public: Creature* pGuard2 = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUARD_2_GUID)); if (pGuard1 && !pGuard1->IsAlive() && pGuard2 && !pGuard2->IsAlive()) // both dead me->CastSpell(me->GetVictim(), SPELL_STORMSTRIKE, false); - events.RepeatEvent(3000); + events.Repeat(3s); } break; } @@ -261,9 +261,9 @@ public: { DoZoneInCombat(); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_GUSHING_WOUND, urand(1000, 3000)); - events.RescheduleEvent(EVENT_SPELL_HOWLING_SCREECH, urand(8000, 13000)); - events.RescheduleEvent(EVENT_SPELL_STRIKE, urand(4000, 8000)); + events.RescheduleEvent(EVENT_SPELL_GUSHING_WOUND, 1s, 3s); + events.RescheduleEvent(EVENT_SPELL_HOWLING_SCREECH, 8s, 13s); + events.RescheduleEvent(EVENT_SPELL_STRIKE, 4s, 8s); if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_EREKEM_GUID))) if (!c->IsInCombat()) @@ -286,15 +286,15 @@ public: break; case EVENT_SPELL_GUSHING_WOUND: me->CastSpell(me->GetVictim(), SPELL_GUSHING_WOUND, false); - events.RepeatEvent(urand(7000, 12000)); + events.Repeat(7s, 12s); break; case EVENT_SPELL_HOWLING_SCREECH: me->CastSpell(me->GetVictim(), SPELL_HOWLING_SCREECH, false); - events.RepeatEvent(urand(8000, 13000)); + events.Repeat(8s, 13s); break; case EVENT_SPELL_STRIKE: me->CastSpell(me->GetVictim(), SPELL_STRIKE, false); - events.RepeatEvent(urand(4000, 8000)); + events.Repeat(4s, 8s); break; } diff --git a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp index 511e061e1..77ab0fabe 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_lavanthor.cpp @@ -71,11 +71,11 @@ public: { DoZoneInCombat(); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_FIREBOLT, 1000); - events.RescheduleEvent(EVENT_SPELL_FLAME_BREATH, 5000); - events.RescheduleEvent(EVENT_SPELL_LAVA_BURN, 10000); + events.RescheduleEvent(EVENT_SPELL_FIREBOLT, 1s); + events.RescheduleEvent(EVENT_SPELL_FLAME_BREATH, 5s); + events.RescheduleEvent(EVENT_SPELL_LAVA_BURN, 10s); if (IsHeroic()) - events.RescheduleEvent(EVENT_SPELL_CAUTERIZING_FLAMES, 3000); + events.RescheduleEvent(EVENT_SPELL_CAUTERIZING_FLAMES, 3s); } void UpdateAI(uint32 diff) override @@ -94,19 +94,19 @@ public: break; case EVENT_SPELL_FIREBOLT: me->CastSpell(me->GetVictim(), SPELL_FIREBOLT, false); - events.RepeatEvent(urand(5000, 13000)); + events.Repeat(5s, 13s); break; case EVENT_SPELL_FLAME_BREATH: me->CastSpell(me->GetVictim(), SPELL_FLAME_BREATH, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; case EVENT_SPELL_LAVA_BURN: me->CastSpell(me->GetVictim(), SPELL_LAVA_BURN, false); - events.RepeatEvent(urand(14000, 20000)); + events.Repeat(14s, 20s); break; case EVENT_SPELL_CAUTERIZING_FLAMES: me->CastSpell((Unit*)nullptr, SPELL_FLAME_BREATH, false); - events.RepeatEvent(urand(10000, 16000)); + events.Repeat(10s, 16s); break; } diff --git a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp index 4bf33c610..cb91ad314 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_moragg.cpp @@ -76,8 +76,8 @@ public: me->CastSpell(me, SPELL_RAY_OF_SUFFERING, true); me->CastSpell(me, SPELL_RAY_OF_PAIN, true); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_CORROSIVE_SALIVA, urand(4000, 6000)); - events.RescheduleEvent(EVENT_SPELL_OPTIC_LINK, urand(10000, 11000)); + events.RescheduleEvent(EVENT_SPELL_CORROSIVE_SALIVA, 4s, 6s); + events.RescheduleEvent(EVENT_SPELL_OPTIC_LINK, 10s, 11s); } void UpdateAI(uint32 diff) override @@ -96,16 +96,16 @@ public: break; case EVENT_SPELL_CORROSIVE_SALIVA: me->CastSpell(me->GetVictim(), SPELL_CORROSIVE_SALIVA, false); - events.RepeatEvent(urand(8000, 10000)); + events.Repeat(8s, 10s); break; case EVENT_SPELL_OPTIC_LINK: if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0, 40.0f, true)) { me->CastSpell(target, SPELL_OPTIC_LINK, false); - events.RepeatEvent(urand(18000, 21000)); + events.Repeat(18s, 21s); } else - events.RepeatEvent(5000); + events.Repeat(5s); break; } diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index 814509a7d..c61dcfeae 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -90,8 +90,8 @@ public: Talk(SAY_AGGRO); DoZoneInCombat(); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_ARCANE_BARRAGE_VOLLEY, urand(16000, 20000)); - events.RescheduleEvent(EVENT_SUMMON_SPHERES, 10000); + events.RescheduleEvent(EVENT_SPELL_ARCANE_BARRAGE_VOLLEY, 16s, 20s); + events.RescheduleEvent(EVENT_SUMMON_SPHERES, 10s); } void UpdateAI(uint32 diff) override @@ -110,7 +110,7 @@ public: break; case EVENT_SPELL_ARCANE_BARRAGE_VOLLEY: me->CastSpell((Unit*)nullptr, SPELL_ARCANE_BARRAGE_VOLLEY, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SPELL_ARCANE_BUFFET: me->CastSpell(me->GetVictim(), SPELL_ARCANE_BUFFET, false); @@ -129,8 +129,8 @@ public: me->CastSpell((Unit*)nullptr, entry2, true); } events.RepeatEvent(45000); - events.RescheduleEvent(EVENT_SPELL_ARCANE_BUFFET, 5000); - events.RescheduleEvent(EVENT_CHECK_DISTANCE, 6000); + events.RescheduleEvent(EVENT_SPELL_ARCANE_BUFFET, 5s); + events.RescheduleEvent(EVENT_CHECK_DISTANCE, 6s); } break; case EVENT_CHECK_DISTANCE: @@ -148,11 +148,11 @@ public: if (found) { Talk(SAY_CHARGED); - events.RepeatEvent(9000); - events.RescheduleEvent(EVENT_SUMMON_SPHERES, 10000); + events.Repeat(9s); + events.RescheduleEvent(EVENT_SUMMON_SPHERES, 10s); } else - events.RepeatEvent(2000); + events.Repeat(2s); } break; } diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp index 1f538e20d..562f890ce 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp @@ -86,9 +86,9 @@ public: Talk(SAY_AGGRO); DoZoneInCombat(); events.Reset(); - events.RescheduleEvent(EVENT_SPELL_SHROUD_OF_DARKNESS, urand(5000, 7000)); - events.RescheduleEvent(EVENT_SPELL_VOID_SHIFT, urand(23000, 25000)); - events.RescheduleEvent(EVENT_SPELL_SUMMON_VOID_SENTRY, 10000); + events.RescheduleEvent(EVENT_SPELL_SHROUD_OF_DARKNESS, 5s, 7s); + events.RescheduleEvent(EVENT_SPELL_VOID_SHIFT, 23s, 25s); + events.RescheduleEvent(EVENT_SPELL_SUMMON_VOID_SENTRY, 10s); if (pInstance) pInstance->SetData(DATA_ACHIEV, 1); } @@ -110,7 +110,7 @@ public: case EVENT_SPELL_SHROUD_OF_DARKNESS: me->CastSpell(me, SPELL_SHROUD_OF_DARKNESS, false); Talk(SAY_SHIELD); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SPELL_VOID_SHIFT: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true)) @@ -118,11 +118,11 @@ public: me->CastSpell(target, SPELL_VOID_SHIFT, false); me->Whisper("Gaze... into the void.", LANG_UNIVERSAL, target->ToPlayer()); } - events.RepeatEvent(urand(18000, 22000)); + events.Repeat(18s, 22s); break; case EVENT_SPELL_SUMMON_VOID_SENTRY: me->CastSpell((Unit*)nullptr, SPELL_SUMMON_VOID_SENTRY, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; } diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 6df100c1f..e30d3448f 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -20,9 +20,6 @@ #include "ScriptedCreature.h" #include "violet_hold.h" -#define CLEANUP_CHECK_INTERVAL 5000 -#define SPAWN_TIME 20000 - enum vYells { CYANIGOSA_SAY_SPAWN = 3, @@ -218,11 +215,11 @@ public: EncounterStatus = IN_PROGRESS; if (Creature* c = instance->GetCreature(NPC_SinclariGUID)) c->AI()->Talk(SAY_SINCLARI_1); - events.RescheduleEvent(EVENT_GUARDS_FALL_BACK, 4000); + events.RescheduleEvent(EVENT_GUARDS_FALL_BACK, 4s); } break; case DATA_PORTAL_DEFEATED: - events.RescheduleEvent(EVENT_SUMMON_PORTAL, 3000); + events.RescheduleEvent(EVENT_SUMMON_PORTAL, 3s); break; case DATA_PORTAL_LOCATION: PortalLocation = data; @@ -258,7 +255,7 @@ public: } SaveToDB(); if (WaveCount < 18) - events.RescheduleEvent(EVENT_SUMMON_PORTAL, 35000); + events.RescheduleEvent(EVENT_SUMMON_PORTAL, 35s); break; case DATA_FAILED: CLEANED = false; @@ -406,7 +403,7 @@ public: { if( DoNeedCleanup(false) ) InstanceCleanup(); - events.RepeatEvent(CLEANUP_CHECK_INTERVAL); + events.Repeat(5s); } break; case EVENT_GUARDS_FALL_BACK: @@ -419,7 +416,7 @@ public: c->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); c->GetMotionMaster()->MovePoint(0, guardMovePosition); } - events.RescheduleEvent(EVENT_GUARDS_DISAPPEAR, 5000); + events.RescheduleEvent(EVENT_GUARDS_DISAPPEAR, 5s); } break; case EVENT_GUARDS_DISAPPEAR: @@ -427,7 +424,7 @@ public: for (uint8 i = 0; i < 4; ++i) if (Creature* c = instance->GetCreature(NPC_GuardGUID[i])) c->SetVisible(false); - events.RescheduleEvent(EVENT_SINCLARI_FALL_BACK, 2000); + events.RescheduleEvent(EVENT_SINCLARI_FALL_BACK, 2s); } break; case EVENT_SINCLARI_FALL_BACK: @@ -438,7 +435,7 @@ public: c->GetMotionMaster()->MovePoint(0, sinclariOutsidePosition); } SetData(DATA_ACTIVATE_DEFENSE_SYSTEM, 0); - events.RescheduleEvent(EVENT_START_ENCOUNTER, 4000); + events.RescheduleEvent(EVENT_START_ENCOUNTER, 4s); } break; case EVENT_START_ENCOUNTER: @@ -457,7 +454,7 @@ public: HandleGameObject(ObjectGuid::Empty, false, go); // not used yet go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); // make it useable } - events.RescheduleEvent(EVENT_SUMMON_PORTAL, 4000); + events.RescheduleEvent(EVENT_SUMMON_PORTAL, 4s); } break; case EVENT_SUMMON_PORTAL: @@ -487,7 +484,7 @@ public: cyanigosa->AI()->Talk(CYANIGOSA_SAY_SPAWN); cyanigosa->GetMotionMaster()->MoveJump(MiddleRoomLocation.GetPositionX(), MiddleRoomLocation.GetPositionY(), MiddleRoomLocation.GetPositionZ(), 10.0f, 20.0f); } - events.RescheduleEvent(EVENT_CYANIGOSSA_TRANSFORM, 10000); + events.RescheduleEvent(EVENT_CYANIGOSSA_TRANSFORM, 10s); } } break; @@ -496,7 +493,7 @@ public: { c->RemoveAurasDueToSpell(SPELL_CYANIGOSA_BLUE_AURA); c->CastSpell(c, SPELL_CYANIGOSA_TRANSFORM, 0); - events.RescheduleEvent(EVENT_CYANIGOSA_ATTACK, 2500); + events.RescheduleEvent(EVENT_CYANIGOSA_ATTACK, 2500ms); } break; case EVENT_CYANIGOSA_ATTACK: @@ -523,7 +520,7 @@ public: else plr->SendUpdateWorldState(WORLD_STATE_VH_SHOW, 0); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s); } bool DoNeedCleanup(bool enter) @@ -622,7 +619,7 @@ public: if (m_auiEncounter[MAX_ENCOUNTER - 1] == DONE) EncounterStatus = DONE; events.Reset(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s); } bool CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/, uint32 /*miscvalue1*/) override diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 206356a91..582cd5192 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -138,9 +138,9 @@ public: addValue = 1; if (wave % 6 != 0) - events.RescheduleEvent(RAND(EVENT_SUMMON_KEEPER_OR_GUARDIAN, EVENT_SUMMON_ELITES), 10000); + events.RescheduleEvent(RAND(EVENT_SUMMON_KEEPER_OR_GUARDIAN, EVENT_SUMMON_ELITES), 10s); else - events.RescheduleEvent(EVENT_SUMMON_SABOTEOUR, 3000); + events.RescheduleEvent(EVENT_SUMMON_SABOTEOUR, 3s); } } @@ -168,7 +168,7 @@ public: spawned = true; if (Creature* c = DoSummon(RAND(NPC_PORTAL_GUARDIAN, NPC_PORTAL_KEEPER), me, 2.0f, 0, TEMPSUMMON_DEAD_DESPAWN)) me->CastSpell(c, SPELL_PORTAL_CHANNEL, false); - events.RescheduleEvent(EVENT_SUMMON_KEEPER_TRASH, 20000); + events.RescheduleEvent(EVENT_SUMMON_KEEPER_TRASH, 20s); break; case EVENT_SUMMON_KEEPER_TRASH: for (uint8 i = 0; i < 3 + addValue; ++i) @@ -176,7 +176,7 @@ public: uint32 entry = RAND(NPC_AZURE_INVADER_1, NPC_AZURE_INVADER_2, NPC_AZURE_SPELLBREAKER_1, NPC_AZURE_SPELLBREAKER_2, NPC_AZURE_MAGE_SLAYER_1, NPC_AZURE_MAGE_SLAYER_2, NPC_AZURE_BINDER_1, NPC_AZURE_BINDER_2); DoSummon(entry, me, 2.0f, 20000, TEMPSUMMON_DEAD_DESPAWN); } - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SUMMON_ELITES: spawned = true; diff --git a/src/server/scripts/Northrend/isle_of_conquest.cpp b/src/server/scripts/Northrend/isle_of_conquest.cpp index 746351feb..2a401c4c9 100644 --- a/src/server/scripts/Northrend/isle_of_conquest.cpp +++ b/src/server/scripts/Northrend/isle_of_conquest.cpp @@ -62,7 +62,7 @@ public: me->SetFaction(faction); me->CreateVehicleKit(510, NPC_KEEP_CANNON); me->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); - events.ScheduleEvent(EVENT_RESTORE_FLAG, 4000); + events.ScheduleEvent(EVENT_RESTORE_FLAG, 4s); } } @@ -168,7 +168,7 @@ public: if (action == ACTION_GUNSHIP_READY) { DoCast(me, SPELL_SIMPLE_TELEPORT); - _events.ScheduleEvent(EVENT_TALK, 3000); + _events.ScheduleEvent(EVENT_TALK, 3s); } } @@ -180,7 +180,7 @@ public: switch (eventId) { case EVENT_TALK: - _events.ScheduleEvent(EVENT_DESPAWN, 1000); + _events.ScheduleEvent(EVENT_DESPAWN, 1s); Talk(SAY_ONBOARD); DoCast(me, SPELL_TELEPORT_VISUAL_ONLY); break; @@ -260,10 +260,10 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_CHECK_RAGE, 2000); - events.ScheduleEvent(EVENT_BRUTAL_STRIKE, 6000); - events.ScheduleEvent(EVENT_CRUSHING_LEAP, 22000); - events.ScheduleEvent(EVENT_DAGGER_THROW, 10000); + events.ScheduleEvent(EVENT_CHECK_RAGE, 2s); + events.ScheduleEvent(EVENT_BRUTAL_STRIKE, 6s); + events.ScheduleEvent(EVENT_CRUSHING_LEAP, 22s); + events.ScheduleEvent(EVENT_DAGGER_THROW, 10s); } void UpdateAI(uint32 diff) override @@ -279,21 +279,21 @@ public: { case EVENT_CHECK_RAGE: CheckRageBuff(); - events.RepeatEvent(2000); + events.Repeat(2s); break; case EVENT_BRUTAL_STRIKE: me->CastSpell(me->GetVictim(), SPELL_IOCBOSS_BRUTAL_STRIKE, false); - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_CRUSHING_LEAP: me->CastSpell(me, SPELL_IOCBOSS_CRUSHING_LEAP, false); - events.RepeatEvent(22000); + events.Repeat(22s); break; case EVENT_DAGGER_THROW: if (Unit* tgt = SelectTarget(SelectTargetMethod::Random)) me->CastSpell(tgt, SPELL_IOCBOSS_DAGGER_THROW, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; } diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 8eea98850..f4c5ab4bd 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -15,24 +15,6 @@ * with this program. If not, see . */ -/* ScriptData -SDName: Borean_Tundra -SD%Complete: 100 -SDComment: Quest support: 11708. Taxi vendors. -SDCategory: Borean Tundra -EndScriptData */ - -/* ContentData -npc_iruk -npc_corastrasza -npc_sinkhole_kill_credit -npc_khunok_the_behemoth -npc_nerubar_victim -npc_nesingwary_trapper -npc_lurgglbr -npc_nexus_drake_hatchling -EndContentData */ - #include "PassiveAI.h" #include "Player.h" #include "ScriptMgr.h" @@ -559,7 +541,7 @@ struct npc_beryl_sorcererAI : public CreatureAI { _playerGUID = player->GetGUID(); _chainsCast = true; - _events.ScheduleEvent(EVENT_ARCANE_CHAINS, 4000); + _events.ScheduleEvent(EVENT_ARCANE_CHAINS, 4s); } } } @@ -579,7 +561,7 @@ struct npc_beryl_sorcererAI : public CreatureAI { case EVENT_FROSTBOLT: DoCastVictim(SPELL_FROSTBOLT); - _events.ScheduleEvent(EVENT_FROSTBOLT, 3000, 4000); + _events.ScheduleEvent(EVENT_FROSTBOLT, 3s, 4s); break; case EVENT_ARCANE_CHAINS: if (me->HasAura(SPELL_ARCANE_CHAINS)) @@ -631,7 +613,7 @@ public: void Initialize() { me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - _events.ScheduleEvent(EVENT_ADD_ARCANE_CHAINS, 0); + _events.ScheduleEvent(EVENT_ADD_ARCANE_CHAINS, 0ms); } void Reset() override @@ -651,7 +633,7 @@ public: if (Player* summoner = me->ToTempSummon()->GetSummonerUnit()->ToPlayer()) { summoner->CastSpell(summoner, SPELL_ARCANE_CHAINS_CHANNEL_II, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_AURA_INTERRUPT_FLAGS & ~TRIGGERED_IGNORE_CAST_ITEM & ~TRIGGERED_IGNORE_POWER_AND_REAGENT_COST & ~TRIGGERED_IGNORE_GCD)); - _events.ScheduleEvent(EVENT_FOLLOW_PLAYER, 1000); + _events.ScheduleEvent(EVENT_FOLLOW_PLAYER, 1s); } break; case EVENT_FOLLOW_PLAYER: @@ -1215,7 +1197,7 @@ public: { me->SetFacingToObject(player); } - _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_1, 3000); + _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_1, 3s); } void AttackPlayer() @@ -1241,18 +1223,18 @@ public: { case NPC_SALTY_JOHN_THORPE: Talk(SAY_HIDDEN_CULTIST_1); - _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_2, 5000); + _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_2, 5s); break; case NPC_GUARD_MITCHELLS: Talk(SAY_HIDDEN_CULTIST_2); - _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_2, 5000); + _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_2, 5s); break; case NPC_TOM_HEGGER: if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) { Talk(SAY_HIDDEN_CULTIST_3, player); } - _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_2, 5000); + _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_2, 5s); break; } break; @@ -1267,7 +1249,7 @@ public: { me->SetFacingToObject(player); } - _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_3, 3000); + _events.ScheduleEvent(EVENT_CULTIST_SCRIPT_3, 3s); break; case NPC_GUARD_MITCHELLS: case NPC_TOM_HEGGER: @@ -1401,7 +1383,7 @@ public: if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) Talk(SAY_BLOODMAGE_LAURITH, player); _playerGUID.Clear(); - _events.ScheduleEvent(EVENT_RESET_ORIENTATION, 5000); + _events.ScheduleEvent(EVENT_RESET_ORIENTATION, 5s); break; case EVENT_RESET_ORIENTATION: me->SetFacingTo(me->GetHomePosition().GetOrientation()); @@ -1582,12 +1564,12 @@ public: leryssa->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN); leryssa->SetOrientation(4.537856f); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_8, 1000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_8, 1s); break; } case NPC_COUNSELOR_TALBOT: { - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_18, 0); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_18, 0ms); } break; default: @@ -1601,7 +1583,7 @@ public: { me->SetWalk(false); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H); - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_1, 2000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_1, 2s); } } @@ -1627,7 +1609,7 @@ public: _talbotGUID = talbot->GetGUID(); talbot->SetWalk(true); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_2, 1000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_2, 1s); break; case EVENT_THASSARIAN_SCRIPT_2: // Arthas load path @@ -1635,7 +1617,7 @@ public: { arthas->GetMotionMaster()->MovePath(PATH_ARTHAS, false); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_3, 1000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_3, 1s); break; case EVENT_THASSARIAN_SCRIPT_3: // Talbot load path @@ -1643,7 +1625,7 @@ public: { talbot->GetMotionMaster()->MovePath(PATH_TALBOT, false); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_4, 20000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_4, 20s); break; case EVENT_THASSARIAN_SCRIPT_4: // Talbot transform and knell @@ -1657,7 +1639,7 @@ public: talbot->SetReactState(REACT_PASSIVE); talbot->SetStandState(UNIT_STAND_STATE_KNEEL); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_5, 7000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_5, 7s); break; case EVENT_THASSARIAN_SCRIPT_5: // Talbot say text 1 @@ -1665,7 +1647,7 @@ public: { talbot->AI()->Talk(SAY_TALBOT_1); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_6, 9000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_6, 9s); break; case EVENT_THASSARIAN_SCRIPT_6: // Summon General Arlos and Leryssa @@ -1685,7 +1667,7 @@ public: leryssa->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); leryssa->GetMotionMaster()->MovePath(PATH_LERYSSA, false); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_7, 7000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_7, 7s); break; case EVENT_THASSARIAN_SCRIPT_7: // Talbot say text 2 @@ -1699,13 +1681,13 @@ public: Talk(SAY_THASSARIAN_1); me->SetWalk(false); me->GetMotionMaster()->MovePoint(0, 3722.527f, 3567.2583f, 477.44086f); - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_9, 7000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_9, 7s); break; case EVENT_THASSARIAN_SCRIPT_9: // Thassarian say text 2 Talk(SAY_THASSARIAN_2); me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_10, 6000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_10, 6s); break; case EVENT_THASSARIAN_SCRIPT_10: // Arthas turn to Thassarian and Talbot stand @@ -1717,7 +1699,7 @@ public: { talbot->SetStandState(UNIT_STAND_STATE_STAND); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_11, 4000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_11, 4s); break; case EVENT_THASSARIAN_SCRIPT_11: // Arthas say text 2 @@ -1725,12 +1707,12 @@ public: { arthas->AI()->Talk(SAY_LICH_2); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_12, 18000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_12, 18s); break; case EVENT_THASSARIAN_SCRIPT_12: // Thassarian say text 3 Talk(SAY_THASSARIAN_3); - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_13, 10000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_13, 10s); break; case EVENT_THASSARIAN_SCRIPT_13: // Talbot say text 3 @@ -1738,7 +1720,7 @@ public: { talbot->AI()->Talk(SAY_TALBOT_3); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_14, 5000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_14, 5s); break; case EVENT_THASSARIAN_SCRIPT_14: // Arthas turn to Talbot say text 3 @@ -1750,7 +1732,7 @@ public: } arthas->AI()->Talk(SAY_LICH_3); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_15, 5000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_15, 5s); break; case EVENT_THASSARIAN_SCRIPT_15: // Arthas turn to me and emote @@ -1759,7 +1741,7 @@ public: arthas->SetFacingToObject(me); arthas->HandleEmoteCommand(EMOTE_ONESHOT_POINT); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_16, 5000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_16, 5s); break; case EVENT_THASSARIAN_SCRIPT_16: // Arthas despawn @@ -1767,7 +1749,7 @@ public: { arthas->RemoveFromWorld(); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_17, 3000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_17, 3s); break; case EVENT_THASSARIAN_SCRIPT_17: // Talbot say text 4 and attack @@ -1794,7 +1776,7 @@ public: { leryssa->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_19, 3000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_19, 3s); break; case EVENT_THASSARIAN_SCRIPT_19: // Leryssa set facing to me @@ -1806,7 +1788,7 @@ public: leryssa->SetFacingToObject(me); me->SetFacingToObject(leryssa); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_20, 3000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_20, 3s); break; case EVENT_THASSARIAN_SCRIPT_20: // Arlos say text 2 and die. Leryssa say text 1 @@ -1820,13 +1802,13 @@ public: { leryssa->AI()->Talk(SAY_LERYSSA_1); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_21, 5000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_21, 5s); break; case EVENT_THASSARIAN_SCRIPT_21: // Thassarian say text 4 me->SetStandState(UNIT_STAND_STATE_KNEEL); Talk(SAY_THASSARIAN_4); - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_22, 3000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_22, 3s); break; case EVENT_THASSARIAN_SCRIPT_22: // Leryssa run to Thassarian @@ -1835,7 +1817,7 @@ public: leryssa->SetWalk(false); leryssa->MonsterMoveWithSpeed(3726.751f, 3568.1633f, 477.44086f, leryssa->GetSpeed(MOVE_RUN)); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_23, 2000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_23, 2s); break; case EVENT_THASSARIAN_SCRIPT_23: // Leryssa say text 2 @@ -1844,12 +1826,12 @@ public: leryssa->AI()->Talk(SAY_LERYSSA_2); leryssa->SetStandState(UNIT_STAND_STATE_SIT); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_24, 5000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_24, 5s); break; case EVENT_THASSARIAN_SCRIPT_24: // Thassarian say text 5 Talk(SAY_THASSARIAN_5); - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_25, 10000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_25, 10s); break; case EVENT_THASSARIAN_SCRIPT_25: // Leryssa say text 3 @@ -1857,12 +1839,12 @@ public: { leryssa->AI()->Talk(SAY_LERYSSA_3); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_26, 12000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_26, 12s); break; case EVENT_THASSARIAN_SCRIPT_26: // Thassarian say text 6 Talk(SAY_THASSARIAN_6); - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_27, 11000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_27, 11s); break; case EVENT_THASSARIAN_SCRIPT_27: // Leryssa say text 4 @@ -1870,16 +1852,16 @@ public: { leryssa->AI()->Talk(SAY_LERYSSA_4); } - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_28, 12000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_28, 12s); break; case EVENT_THASSARIAN_SCRIPT_28: // Thassarian say text 7 Talk(SAY_THASSARIAN_7); - _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_29, 35000); + _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_29, 35s); break; case EVENT_THASSARIAN_SCRIPT_29: Cleanup(); - me->DespawnOrUnsummon(30000ms, 120s); + me->DespawnOrUnsummon(30s, 120s); break; default: break; @@ -1897,7 +1879,7 @@ public: void JustDied(Unit* /*killer*/) override { Cleanup(); - me->DespawnOrUnsummon(1000ms, 120s); + me->DespawnOrUnsummon(1s, 120s); } void Cleanup() @@ -2013,9 +1995,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { - _events.ScheduleEvent(EVENT_DEFLECTION, 10000, 20000); - _events.ScheduleEvent(EVENT_SOUL_BLAST, 4000, 6000); - _events.ScheduleEvent(EVENT_VAMPIRIC_BOLT, 0); + _events.ScheduleEvent(EVENT_DEFLECTION, 10s, 20s); + _events.ScheduleEvent(EVENT_SOUL_BLAST, 4s, 6s); + _events.ScheduleEvent(EVENT_VAMPIRIC_BOLT, 0ms); } void UpdateAI(uint32 diff) override @@ -2035,15 +2017,15 @@ public: { case EVENT_DEFLECTION: DoCastSelf(SPELL_DEFLECTION); - _events.ScheduleEvent(EVENT_DEFLECTION, 10000, 20000); + _events.ScheduleEvent(EVENT_DEFLECTION, 10s, 20s); break; case EVENT_SOUL_BLAST: DoCastVictim(SPELL_SOUL_BLAST); - _events.ScheduleEvent(EVENT_SOUL_BLAST, 4000, 6000); + _events.ScheduleEvent(EVENT_SOUL_BLAST, 4s, 6s); break; case EVENT_VAMPIRIC_BOLT: DoCastVictim(SPELL_VAMPIRIC_BOLT); - _events.ScheduleEvent(EVENT_VAMPIRIC_BOLT, 3000, 4000); + _events.ScheduleEvent(EVENT_VAMPIRIC_BOLT, 3s, 4s); break; default: break; diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp index 079a7651f..a796714f1 100644 --- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp +++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp @@ -15,14 +15,6 @@ * with this program. If not, see . */ -/* Script Data Start -SDName: CrystalSongForest -SDAuthor: Malcrom -SD%Complete: 99% -SDComment: -SDCategory: CrystalsongForest -Script Data End */ - #include "PassiveAI.h" #include "Player.h" #include "ScriptMgr.h" diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index 4408eaa51..b874144a1 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -15,14 +15,6 @@ * with this program. If not, see . */ -/* Script Data Start -SDName: Dalaran -SDAuthor: WarHead, MaXiMiUS -SD%Complete: 99% -SDComment: For what is 63990+63991? Same function but don't work correct... -SDCategory: Dalaran -Script Data End */ - #include "Player.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" @@ -165,14 +157,14 @@ public: _lSource = 0; _canWash = false; Talk(SAY_SHANDY1); - _events.ScheduleEvent(EVENT_INTRO_DH1, 5000); - _events.ScheduleEvent(EVENT_OUTRO_DH, 10 * MINUTE * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_INTRO_DH1, 5s); + _events.ScheduleEvent(EVENT_OUTRO_DH, 10min); break; default: if(_lSource == type && _canWash) { _canWash = false; - _events.ScheduleEvent(EVENT_INTRO_DH2, type == ACTION_UNMENTIONABLES ? 4000 : 10000); + _events.ScheduleEvent(EVENT_INTRO_DH2, type == ACTION_UNMENTIONABLES ? 4s : 10s); Talk(SAY_SHANDY2); if (Creature* aquanos = ObjectAccessor::GetCreature(*me, _aquanosGUID)) aquanos->CastSpell(aquanos, SPELL_EVOCATION_VISUAL, false); @@ -198,31 +190,31 @@ public: { case EVENT_INTRO_DH1: Talk(SAY_SHANDY3); - _events.ScheduleEvent(EVENT_INTRO_DH2, 15000); + _events.ScheduleEvent(EVENT_INTRO_DH2, 15s); break; case EVENT_INTRO_DH2: if (_lCount++ > 6) - _events.ScheduleEvent(EVENT_INTRO_DH3, 6000); + _events.ScheduleEvent(EVENT_INTRO_DH3, 6s); else RollTask(); break; case EVENT_INTRO_DH3: Talk(SAY_SHANDY4); - _events.ScheduleEvent(EVENT_INTRO_DH4, 20000); + _events.ScheduleEvent(EVENT_INTRO_DH4, 20s); break; case EVENT_INTRO_DH4: Talk(SAY_SHANDY5); - _events.ScheduleEvent(EVENT_INTRO_DH5, 3000); + _events.ScheduleEvent(EVENT_INTRO_DH5, 3s); break; case EVENT_INTRO_DH5: me->SummonGameObject(201384, 5798.74f, 693.19f, 657.94f, 0.91f, 0, 0, 0, 0, 90000000); - _events.ScheduleEvent(EVENT_INTRO_DH6, 1000); + _events.ScheduleEvent(EVENT_INTRO_DH6, 1s); break; case EVENT_INTRO_DH6: me->SetWalk(true); me->GetMotionMaster()->MovePoint(0, 5797.55f, 691.97f, 657.94f); - _events.RescheduleEvent(EVENT_OUTRO_DH, 30000); + _events.RescheduleEvent(EVENT_OUTRO_DH, 30s); break; case EVENT_OUTRO_DH: me->GetMotionMaster()->MoveTargetedHome(); @@ -584,15 +576,15 @@ public: DoCast(player, SPELL_MANABONKED); SendMailToPlayer(player); } - events.ScheduleEvent(EVENT_BLINK, 3 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_BLINK, 3ms); break; case EVENT_BLINK: { DoCast(me, SPELL_IMPROVED_BLINK); Position pos = me->GetRandomNearPosition((urand(15, 40))); me->GetMotionMaster()->MovePoint(0, pos.m_positionX, pos.m_positionY, pos.m_positionZ); - events.ScheduleEvent(EVENT_DESPAWN, 3 * IN_MILLISECONDS); - events.ScheduleEvent(EVENT_DESPAWN_VISUAL, 2.5 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_DESPAWN, 3ms); + events.ScheduleEvent(EVENT_DESPAWN_VISUAL, 3ms); break; } case EVENT_DESPAWN_VISUAL: diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 56905fbbe..e35224093 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -389,7 +389,7 @@ public: phase = 0; events.Reset(); - events.ScheduleEvent(EVENT_START_EVENT, 4000); + events.ScheduleEvent(EVENT_START_EVENT, 4s); } Player* GetPlayer() {return ObjectAccessor::GetPlayer(*me, pGUID);} @@ -420,12 +420,12 @@ public: case EVENT_START_EVENT: if (Creature* cr = GetCopy()) cr->AI()->Talk(SAY_HOURGLASS_START_1, GetPlayer()); - events.ScheduleEvent(EVENT_FIGHT_1, 7000); + events.ScheduleEvent(EVENT_FIGHT_1, 7s); break; case EVENT_FIGHT_1: if (Creature* cr = GetCopy()) cr->AI()->Talk(SAY_HOURGLASS_START_2, GetPlayer()); - events.ScheduleEvent(EVENT_FIGHT_2, 6000); + events.ScheduleEvent(EVENT_FIGHT_2, 6s); break; case EVENT_FIGHT_2: { @@ -456,19 +456,19 @@ public: cr->AI()->AttackStart(me); } - events.ScheduleEvent(EVENT_CHECK_FINISH, 20000); + events.ScheduleEvent(EVENT_CHECK_FINISH, 20s); return; } ++phase; - events.ScheduleEvent(EVENT_FIGHT_2, 35000); + events.ScheduleEvent(EVENT_FIGHT_2, 35s); break; } case EVENT_CHECK_FINISH: { if (me->FindNearestCreature(NPC_INFINITE_TIMERENDER, 50.0f)) { - events.RepeatEvent(5000); + events.Repeat(5s); return; } @@ -481,7 +481,7 @@ public: cr->SetFacingToObject(me->FindNearestCreature(NPC_NOZDORMU, 100.0f, true)); cr->AI()->Talk(SAY_HOURGLASS_END_1, GetPlayer()); } - events.ScheduleEvent(EVENT_FINISH_EVENT, 6000); + events.ScheduleEvent(EVENT_FINISH_EVENT, 6s); break; } case EVENT_FINISH_EVENT: @@ -1095,9 +1095,9 @@ public: void Reset() override { events.Reset(); - events.ScheduleEvent(998, 10000); - events.ScheduleEvent(999, 0); - events.ScheduleEvent(1, 3000); + events.ScheduleEvent(998, 10s); + events.ScheduleEvent(999, 0ms); + events.ScheduleEvent(1, 3s); summons.DespawnAll(); playerGUID.Clear(); @@ -1122,8 +1122,8 @@ public: me->setActive(true); playerGUID = guid; - events.ScheduleEvent(2, 900000); - events.ScheduleEvent(3, 0); + events.ScheduleEvent(2, 15min); + events.ScheduleEvent(3, 0ms); } void SetData(uint32 type, uint32 data) override @@ -1131,7 +1131,7 @@ public: if (!playerGUID || type != data) return; if (data == 1) - events.ScheduleEvent(15, 0); + events.ScheduleEvent(15, 0ms); else if (data == 2) { if (GameObject* go = me->FindNearestGameObject(GO_SAC_LIGHTS_VENGEANCE_2, 150.0f)) @@ -1143,7 +1143,7 @@ public: if (Player* p = ObjectAccessor::GetPlayer(*me, playerGUID)) p->KnockbackFrom(c->GetPositionX(), c->GetPositionY(), 5.0f, 3.0f); } - events.ScheduleEvent(18, 3000); + events.ScheduleEvent(18, 3s); } else if (data == 3) { @@ -1154,7 +1154,7 @@ public: if (GameObject* go = me->FindNearestGameObject(GO_SAC_LIGHTS_VENGEANCE_3, 150.0f)) go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); playerGUID.Clear(); - events.RescheduleEvent(2, 60000); + events.RescheduleEvent(2, 1min); } } } @@ -1190,7 +1190,7 @@ public: return; } } - events.ScheduleEvent(1, 3000); + events.ScheduleEvent(1, 3s); break; case 2: // reset timer Reset(); @@ -1205,24 +1205,24 @@ public: path.push_back(G3D::Vector3(4825.35f, -582.99f, 164.83f)); path.push_back(G3D::Vector3(4813.38f, -580.94f, 162.62f)); me->GetMotionMaster()->MoveSplinePath(&path); - events.ScheduleEvent(4, 10000); + events.ScheduleEvent(4, 10s); } break; case 4: // talk 0 Talk(0); - events.ScheduleEvent(5, 6000); + events.ScheduleEvent(5, 6s); break; case 5: // talk 1 Talk(1); - events.ScheduleEvent(6, 4000); - events.ScheduleEvent(7, 11000); + events.ScheduleEvent(6, 4s); + events.ScheduleEvent(7, 11s); break; case 6: // repel hammer me->CastSpell((Unit*)nullptr, SPELL_SAC_REPEL_HAMMER, false); if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE_VEH_1, 150.0f, true)) c->CastSpell(c, SPELL_SAC_BLUE_EXPLOSION, true); - events.ScheduleEvent(65, 3500); + events.ScheduleEvent(65, 3500ms); break; case 65: // spawn hammer go if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE_BUNNY, 150.0f, true)) @@ -1233,20 +1233,20 @@ public: break; case 7: // talk 2 Talk(2); - events.ScheduleEvent(8, 8000); - events.ScheduleEvent(9, 11500); + events.ScheduleEvent(8, 8s); + events.ScheduleEvent(9, 11s + 500ms); break; case 8: // summon ghouls me->CastSpell((Unit*)nullptr, SPELL_SAC_SUMMON_GHOULS_AURA, false); break; case 9: // talk 3 Talk(3); - events.ScheduleEvent(10, 10000); + events.ScheduleEvent(10, 10s); break; case 10: // summon vegard me->SummonCreature(NPC_SAC_VEGARD_1, 4812.12f, -586.08f, 162.49f, 3.14f, TEMPSUMMON_MANUAL_DESPAWN); - events.ScheduleEvent(11, 4000); - events.ScheduleEvent(12, 5000); + events.ScheduleEvent(11, 4s); + events.ScheduleEvent(12, 5s); break; case 11: // vagard shield if (Creature* c = me->FindNearestCreature(NPC_SAC_VEGARD_1, 50.0f, true)) @@ -1256,8 +1256,8 @@ public: Talk(4); if (Player* p = ObjectAccessor::GetPlayer(*me, playerGUID)) me->CastSpell(p, SPELL_SAC_ZAP_PLAYER, false); - events.ScheduleEvent(13, 3500); - events.ScheduleEvent(14, 6000); + events.ScheduleEvent(13, 3500ms); + events.ScheduleEvent(14, 6s); break; case 13: // despawn me->CastSpell(me, SPELL_SAC_LK_DESPAWN_ANIM, false); @@ -1288,7 +1288,7 @@ public: //l->ClearUnitState(UNIT_STATE_ONVEHICLE); l->CastSpell(l, SPELL_SAC_HOLY_BOMB_VISUAL, false); l->AddAura(SPELL_SAC_HOLY_BOMB_VISUAL, l); - events.ScheduleEvent(16, 5000); + events.ScheduleEvent(16, 5s); } } break; @@ -1297,7 +1297,7 @@ public: c->CastSpell(c, SPELL_SAC_ZAP_GHOULS_AURA, true); if (Creature* c = me->FindNearestCreature(NPC_SAC_VEGARD_1, 50.0f, true)) c->RemoveAurasDueToSpell(SPELL_SAC_VEGARD_SUMMON_GHOULS_AURA); - events.ScheduleEvent(17, 12000); + events.ScheduleEvent(17, 12s); break; case 17: // kill vegard { @@ -1579,12 +1579,12 @@ public: me->SetReactState(REACT_PASSIVE); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); events.Reset(); - events.ScheduleEvent(1, 7000); - events.ScheduleEvent(2, urand(7000, 20000)); - events.ScheduleEvent(3, urand(7000, 20000)); - events.ScheduleEvent(4, urand(7000, 20000)); - events.ScheduleEvent(5, urand(7000, 20000)); - events.ScheduleEvent(6, 1); + events.ScheduleEvent(1, 7s); + events.ScheduleEvent(2, 7s, 20s); + events.ScheduleEvent(3, 7s, 20s); + events.ScheduleEvent(4, 7s, 20s); + events.ScheduleEvent(5, 7s, 20s); + events.ScheduleEvent(6, 1ms); } EventMap events; @@ -1621,22 +1621,22 @@ public: break; case 2: me->CastSpell((Unit*)nullptr, 70866, false); - events.RepeatEvent(urand(30000, 35000)); + events.Repeat(30s, 35s); break; case 3: if (me->GetVictim()) me->CastSpell(me->GetVictim(), 70886, false); - events.RepeatEvent(urand(15000, 30000)); + events.Repeat(15s, 30s); break; case 4: if (me->GetVictim()) me->CastSpell(me->GetVictim(), 71003, false); - events.RepeatEvent(urand(15000, 30000)); + events.Repeat(15s, 30s); break; case 5: if (me->GetVictim()) me->CastSpell(me->GetVictim(), 70864, false); - events.RepeatEvent(urand(8000, 12000)); + events.Repeat(8s, 12s); break; case 6: Talk(0); @@ -1827,8 +1827,8 @@ public: for (uint8 i = 0; i < 5; ++i) imageList[i].Clear(); - _events.ScheduleEvent(EVENT_GET_TARGETS, 5000); - _events.ScheduleEvent(EVENT_START_RANDOM, 20000); + _events.ScheduleEvent(EVENT_GET_TARGETS, 5s); + _events.ScheduleEvent(EVENT_START_RANDOM, 20s); } void MovementInform(uint32 type, uint32 id) override @@ -1848,7 +1848,7 @@ public: { case 0: ChangeImage(NPC_IMAGE_OF_KELTHUZAD, MODEL_IMAGE_OF_KELTHUZAD, SAY_KELTHUZAD_1); - _events.ScheduleEvent(EVENT_KELTHUZAD_2, 8000); + _events.ScheduleEvent(EVENT_KELTHUZAD_2, 8s); break; case 1: ChangeImage(NPC_IMAGE_OF_SAPPHIRON, MODEL_IMAGE_OF_SAPPHIRON, SAY_SAPPHIRON); @@ -1868,7 +1868,7 @@ public: break; case 2: ChangeImage(NPC_IMAGE_OF_THANE, MODEL_IMAGE_OF_THANE, SAY_DEATH_KNIGHTS_1); - _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_2, 10000); + _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_2, 10s); break; } } @@ -1917,7 +1917,7 @@ public: break; case 1: ChangeImage(NPC_IMAGE_OF_HEIGAN, MODEL_IMAGE_OF_HEIGAN, SAY_HEIGAN_1); - _events.ScheduleEvent(EVENT_HEIGAN_2, 8000); + _events.ScheduleEvent(EVENT_HEIGAN_2, 8s); break; case 2: ChangeImage(NPC_IMAGE_OF_LOATHEB, MODEL_IMAGE_OF_LOATHEB, SAY_LOATHEB); @@ -1926,7 +1926,7 @@ public: } break; case 5: // Home - _events.ScheduleEvent(EVENT_START_RANDOM, 30000); + _events.ScheduleEvent(EVENT_START_RANDOM, 30s); break; } } @@ -1971,7 +1971,7 @@ public: creature->SetEntry(entry); creature->SetDisplayId(model); creature->CastSpell(creature, SPELL_HEROIC_IMAGE_CHANNEL); - _events.ScheduleEvent(EVENT_TALK_COMPLETE, 40000); + _events.ScheduleEvent(EVENT_TALK_COMPLETE, 40s); } } @@ -1995,7 +1995,7 @@ public: case EVENT_START_RANDOM: talkWing = urand (0, 4); Talk(talkWing); - _events.ScheduleEvent(EVENT_MOVE_TO_POINT, 8000); + _events.ScheduleEvent(EVENT_MOVE_TO_POINT, 8s); break; case EVENT_MOVE_TO_POINT: me->SetWalk(true); @@ -2005,14 +2005,14 @@ public: case EVENT_TALK_COMPLETE: talkWing = 5; Talk(talkWing); - _events.ScheduleEvent(EVENT_MOVE_TO_POINT, 5000); + _events.ScheduleEvent(EVENT_MOVE_TO_POINT, 5s); break; case EVENT_GET_TARGETS: StoreTargets(); break; case EVENT_KELTHUZAD_2: Talk(SAY_KELTHUZAD_2); - _events.ScheduleEvent(EVENT_KELTHUZAD_3, 8000); + _events.ScheduleEvent(EVENT_KELTHUZAD_3, 8s); break; case EVENT_KELTHUZAD_3: Talk(SAY_KELTHUZAD_3); @@ -2024,7 +2024,7 @@ public: creature->SetEntry(NPC_IMAGE_OF_BLAUMEUX); creature->SetDisplayId(MODEL_IMAGE_OF_BLAUMEUX); } - _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_3, 10000); + _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_3, 10s); break; case EVENT_DEATH_KNIGHTS_3: Talk(SAY_DEATH_KNIGHTS_3); @@ -2033,7 +2033,7 @@ public: creature->SetEntry(NPC_IMAGE_OF_ZELIEK); creature->SetDisplayId(MODEL_IMAGE_OF_ZELIEK); } - _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_4, 10000); + _events.ScheduleEvent(EVENT_DEATH_KNIGHTS_4, 10s); break; case EVENT_DEATH_KNIGHTS_4: Talk(SAY_DEATH_KNIGHTS_4); @@ -2235,11 +2235,11 @@ public: { case EVENT_HEMORRHAGE: DoCastVictim(SPELL_HEMORRHAGE); - _events.ScheduleEvent(EVENT_HEMORRHAGE, urand(12000, 168000)); + _events.ScheduleEvent(EVENT_HEMORRHAGE, 12s, 168s); break; case EVENT_KIDNEY_SHOT: DoCastVictim(SPELL_KIDNEY_SHOT); - _events.ScheduleEvent(EVENT_KIDNEY_SHOT, urand(20000, 26000)); + _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 20s, 26s); break; default: break; diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 20a892c67..b9e9e8501 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -463,7 +463,7 @@ public: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING); } else - _events.ScheduleEvent(EVENT_WOODSMAN_1, 0); + _events.ScheduleEvent(EVENT_WOODSMAN_1, 0ms); } void UpdateAI(uint32 diff) override @@ -476,11 +476,11 @@ public: { case EVENT_WOODSMAN_1: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_LOOT); - _events.ScheduleEvent(EVENT_WOODSMAN_2, 3000); + _events.ScheduleEvent(EVENT_WOODSMAN_2, 3s); break; case EVENT_WOODSMAN_2: me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H); - _events.ScheduleEvent(EVENT_WOODSMAN_1, 4000); + _events.ScheduleEvent(EVENT_WOODSMAN_1, 4s); break; default: break; @@ -550,9 +550,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_CLEAVE, urand(1000, 7000)); - events.ScheduleEvent(EVENT_HAMSTRING, urand(5000, 12000)); - events.ScheduleEvent(EVENT_MORTAL_STRIKE, urand(5000, 10000)); + events.ScheduleEvent(EVENT_CLEAVE, 1s, 7s); + events.ScheduleEvent(EVENT_HAMSTRING, 5s, 12s); + events.ScheduleEvent(EVENT_MORTAL_STRIKE, 5s, 10s); } void SpellHit(Unit* caster, SpellInfo const* spell) override @@ -572,7 +572,7 @@ public: { me->SetStandState(UNIT_STAND_STATE_STAND); me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER); - events.ScheduleEvent(EVENT_WOUNDED_MOVE, 3000); + events.ScheduleEvent(EVENT_WOUNDED_MOVE, 3s); } } } @@ -662,15 +662,15 @@ public: break; case EVENT_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false); - events.RepeatEvent(urand(7000, 15000)); + events.Repeat(7s, 15s); break; case EVENT_HAMSTRING: me->CastSpell(me->GetVictim(), SPELL_HAMSTRING, false); - events.RepeatEvent(urand(9000, 15000)); + events.Repeat(9s, 15s); break; case EVENT_MORTAL_STRIKE: me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false); - events.RepeatEvent(urand(10000, 15000)); + events.Repeat(10s, 15s); break; } @@ -760,16 +760,16 @@ public: if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) DoCast(player, SPELL_VENTURE_STRAGGLER_CREDIT); me->GetMotionMaster()->MovePoint(0, me->GetPositionX() - 7, me->GetPositionY() + 7, me->GetPositionZ()); - _events.ScheduleEvent(EVENT_STRAGGLER_2, 2500); + _events.ScheduleEvent(EVENT_STRAGGLER_2, 2500ms); break; case EVENT_STRAGGLER_2: Talk(SAY_SEO); me->GetMotionMaster()->MovePoint(0, me->GetPositionX() - 7, me->GetPositionY() - 5, me->GetPositionZ()); - _events.ScheduleEvent(EVENT_STRAGGLER_3, 2500); + _events.ScheduleEvent(EVENT_STRAGGLER_3, 2500ms); break; case EVENT_STRAGGLER_3: me->GetMotionMaster()->MovePoint(0, me->GetPositionX() - 5, me->GetPositionY() - 5, me->GetPositionZ()); - _events.ScheduleEvent(EVENT_STRAGGLER_4, 2500); + _events.ScheduleEvent(EVENT_STRAGGLER_4, 2500ms); break; case EVENT_STRAGGLER_4: me->DisappearAndDie(); @@ -777,7 +777,7 @@ public: case EVENT_CHOP: if (UpdateVictim()) DoCastVictim(SPELL_CHOP); - _events.ScheduleEvent(EVENT_CHOP, 10000, 12000); + _events.ScheduleEvent(EVENT_CHOP, 10s, 12s); break; default: break; @@ -799,7 +799,7 @@ public: me->SetReactState(REACT_PASSIVE); me->CombatStop(false); _playerGUID = caster->GetGUID(); - _events.ScheduleEvent(EVENT_STRAGGLER_1, 3500); + _events.ScheduleEvent(EVENT_STRAGGLER_1, 3500ms); } } @@ -879,19 +879,19 @@ public: case EVENT_LAKEFROG_1: DoCast(me, SPELL_MAIDEN_OF_ASHWOOD_LAKE_TRANSFORM); me->SetEntry(NPC_MAIDEN_OF_ASHWOOD_LAKE); - _events.ScheduleEvent(EVENT_LAKEFROG_2, 2000); + _events.ScheduleEvent(EVENT_LAKEFROG_2, 2s); break; case EVENT_LAKEFROG_2: Talk(SAY_MAIDEN_0); - _events.ScheduleEvent(EVENT_LAKEFROG_3, 3000); + _events.ScheduleEvent(EVENT_LAKEFROG_3, 3s); break; case EVENT_LAKEFROG_3: me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); - _events.ScheduleEvent(EVENT_LAKEFROG_4, 25000); + _events.ScheduleEvent(EVENT_LAKEFROG_4, 25s); break; case EVENT_LAKEFROG_4: me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); - _events.ScheduleEvent(EVENT_LAKEFROG_5, 2000); + _events.ScheduleEvent(EVENT_LAKEFROG_5, 2s); break; case EVENT_LAKEFROG_5: Talk(SAY_MAIDEN_1); @@ -927,7 +927,7 @@ public: me->GetMotionMaster()->MoveIdle(); me->SetFacingToObject(player); _runningScript = true; - _events.ScheduleEvent(EVENT_LAKEFROG_1, 2000); + _events.ScheduleEvent(EVENT_LAKEFROG_1, 2s); } } } diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 5409d5ec1..9c24f46ca 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -15,18 +15,6 @@ * with this program. If not, see . */ -/* ScriptData -SDName: Sholazar_Basin -SD%Complete: 100 -SDComment: Quest support: 11253, 11241. -SDCategory: howling_fjord -EndScriptData */ - -/* ContentData -npc_plaguehound_tracker -npc_apothecary_hanes -EndContentData */ - #include "PassiveAI.h" #include "Player.h" #include "ScriptMgr.h" diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index f0fe1c047..901279dd1 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -15,17 +15,6 @@ * with this program. If not, see . */ -/* ScriptData -SDName: Icecrown -SD%Complete: 100 -SDComment: Quest support: 12807 -SDCategory: Icecrown -EndScriptData */ - -/* ContentData -npc_arete -EndContentData */ - #include "CombatAI.h" #include "MoveSplineInit.h" #include "PassiveAI.h" @@ -178,8 +167,8 @@ public: void StartBattle(ObjectGuid guid, uint32 questId) { - events.ScheduleEvent(EVENT_VALHALAS_FIRST, 6000); - events.ScheduleEvent(EVENT_VALHALAS_CHECK_PLAYER, 30000); + events.ScheduleEvent(EVENT_VALHALAS_FIRST, 6s); + events.ScheduleEvent(EVENT_VALHALAS_CHECK_PLAYER, 30s); currentQuest = questId; playerGUID = guid; } @@ -223,7 +212,7 @@ public: playerGUID2 = playerGUID; EnterEvadeMode(); if (quest == QUEST_BFV_FINAL) - events.ScheduleEvent(EVENT_VALHALAS_THIRD, 7000); + events.ScheduleEvent(EVENT_VALHALAS_THIRD, 7s); } else { @@ -249,11 +238,11 @@ public: switch (currentQuest) { case QUEST_BFV_FALLEN_HEROES: - events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8000); + events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8s); me->Yell("$N and comrades in arms have chosen to accept honorable combat within the sacred confines of Valhalas.", LANG_UNIVERSAL, ObjectAccessor::GetPlayer(*me, playerGUID)); break; case QUEST_BFV_DARK_MASTER: - events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8000); + events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8s); me->Yell("$N has accepted the challenge of Khit'rix the Dark Master. May the gods show mercy upon him for Khit'rix surely will not.", LANG_UNIVERSAL, ObjectAccessor::GetPlayer(*me, playerGUID)); break; case QUEST_BFV_SIGRID: @@ -261,15 +250,15 @@ public: me->TextEmote("Circling Valhalas, Sigrid Iceborn approaches to seek her revenge!", nullptr, true); break; case QUEST_BFV_CARNAGE: - events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8000); + events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8s); me->Yell("From the bowels of the Underhalls comes Carnage. Brave and foolish $N has accepted the challenge. $N and his group stand ready to face the monstrosity.", LANG_UNIVERSAL, ObjectAccessor::GetPlayer(*me, playerGUID)); break; case QUEST_BFV_THANE: - events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8000); + events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8s); me->Yell("Thane Banahogg returns to Valhalas for the first time in ages to prove that the vrykul are the only beings worthy to fight within its sacred ring. Will $N prove him wrong?", LANG_UNIVERSAL, ObjectAccessor::GetPlayer(*me, playerGUID)); break; case QUEST_BFV_FINAL: - events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8000); + events.ScheduleEvent(EVENT_VALHALAS_SECOND, 8s); me->Yell("From the depths of Icecrown Citadel, one of the Lich King's chosen comes to put an end to the existence of $N and his friends.", LANG_UNIVERSAL, ObjectAccessor::GetPlayer(*me, playerGUID)); break; } @@ -307,7 +296,7 @@ public: case EVENT_VALHALAS_THIRD: { me->Yell("In defeating him, he and his fighting companions have proven themselves worthy of battle in this most sacred place of vrykul honor.", LANG_UNIVERSAL, ObjectAccessor::GetPlayer(*me, playerGUID)); - events.ScheduleEvent(EVENT_VALHALAS_THIRD + 2, 7000); + events.ScheduleEvent(EVENT_VALHALAS_THIRD + 2, 7s); break; } case EVENT_VALHALAS_THIRD+2: @@ -328,7 +317,7 @@ public: if (fail) EnterEvadeMode(); - events.RepeatEvent(5000); + events.Repeat(5s); break; } } @@ -486,7 +475,7 @@ public: _landgrenSoulGUID.Clear(); events.Reset(); - events.RescheduleEvent(EVENT_START, 1000); + events.RescheduleEvent(EVENT_START, 1s); me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_NONE); me->SetWalk(true); me->SetImmuneToAll(true); @@ -508,7 +497,7 @@ public: float o = cr->GetAngle(me); me->GetMotionMaster()->MovePoint(1, cr->GetPositionX() + cos(o) * 3, cr->GetPositionY() + std::sin(o) * 3, cr->GetPositionZ()); - events.RescheduleEvent(EVENT_SOUL_COAX, 5000); + events.RescheduleEvent(EVENT_SOUL_COAX, 5s); } else me->DespawnOrUnsummon(1); @@ -516,7 +505,7 @@ public: case EVENT_SOUL_COAX: Talk(SAY_ARETE_1); me->CastSpell(me, SPELL_SOUL_COAX, false); - events.ScheduleEvent(EVENT_SUMMON_SOUL, 8000); + events.ScheduleEvent(EVENT_SUMMON_SOUL, 8s); break; case EVENT_SUMMON_SOUL: if (Creature* cr = ObjectAccessor::GetCreature(*me, _landgrenGUID)) @@ -526,7 +515,7 @@ public: _landgrenSoulGUID = soul->GetGUID(); soul->SetVisible(false); } - events.ScheduleEvent(EVENT_SOUL_FLY, 3000); + events.ScheduleEvent(EVENT_SOUL_FLY, 3s); break; case EVENT_SOUL_FLY: if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID)) @@ -539,7 +528,7 @@ public: init.Launch(); soul->CastSpell(soul, 64462, true); // Drown } - events.ScheduleEvent(EVENT_SCENE_1, 6000); + events.ScheduleEvent(EVENT_SCENE_1, 6s); break; case EVENT_SCENE_1: if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID)) @@ -548,43 +537,43 @@ public: soul->CastSpell(soul, 64462, true); // Drown soul->AI()->Talk(SAY_SOUL_0); } - events.ScheduleEvent(EVENT_SCENE_2, 5000); + events.ScheduleEvent(EVENT_SCENE_2, 5s); break; case EVENT_SCENE_2: Talk(SAY_ARETE_2); - events.ScheduleEvent(EVENT_SCENE_3, 5000); + events.ScheduleEvent(EVENT_SCENE_3, 5s); break; case EVENT_SCENE_3: if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID)) soul->AI()->Talk(SAY_SOUL_1); - events.ScheduleEvent(EVENT_SCENE_4, 3000); + events.ScheduleEvent(EVENT_SCENE_4, 3s); break; case EVENT_SCENE_4: if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID)) me->CastSpell(soul, SPELL_SOUL_WRACK, false); Talk(SAY_ARETE_3); - events.ScheduleEvent(EVENT_SCENE_5, 6000); + events.ScheduleEvent(EVENT_SCENE_5, 6s); break; case EVENT_SCENE_5: if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID)) soul->AI()->Talk(SAY_SOUL_2); me->InterruptNonMeleeSpells(false); - events.ScheduleEvent(EVENT_SCENE_6, 4000); + events.ScheduleEvent(EVENT_SCENE_6, 4s); break; case EVENT_SCENE_6: Talk(SAY_ARETE_4); - events.ScheduleEvent(EVENT_SCENE_7, 4000); + events.ScheduleEvent(EVENT_SCENE_7, 4s); break; case EVENT_SCENE_7: if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID)) soul->AI()->Talk(SAY_SOUL_3); - events.ScheduleEvent(EVENT_SCENE_8, 8000); + events.ScheduleEvent(EVENT_SCENE_8, 8s); break; case EVENT_SCENE_8: if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID)) me->CastSpell(soul, SPELL_SOUL_WRACK, false); Talk(SAY_ARETE_5); - events.ScheduleEvent(EVENT_SCENE_9, 6000); + events.ScheduleEvent(EVENT_SCENE_9, 6s); break; case EVENT_SCENE_9: if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID)) @@ -592,7 +581,7 @@ public: soul->AI()->Talk(SAY_SOUL_4); soul->DespawnOrUnsummon(2000); } - events.ScheduleEvent(EVENT_SCENE_10, 3000); + events.ScheduleEvent(EVENT_SCENE_10, 3s); break; case EVENT_SCENE_10: me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_QUESTGIVER); @@ -716,7 +705,7 @@ public: void SetData(uint32 type, uint32 data) override { if (type == 1 && data == 1) - events.ScheduleEvent(EVENT_SCENE_0 + 30, 10000); + events.ScheduleEvent(EVENT_SCENE_0 + 30, 10s); } void DoAction(int32 param) override @@ -782,11 +771,11 @@ public: } case 17: SetEscortPaused(true); - events.ScheduleEvent(EVENT_START_SCENE, 7000); + events.ScheduleEvent(EVENT_START_SCENE, 7s); break; case 19: SetEscortPaused(true); - events.ScheduleEvent(EVENT_SCENE_0 + 8, 5000); + events.ScheduleEvent(EVENT_SCENE_0 + 8, 5s); break; } } @@ -835,78 +824,78 @@ public: me->SummonCreature(NPC_CHOSEN_ZEALOT, 6161.26f, 2700.05f, 573.92f, 2.04f, TEMPSUMMON_TIMED_DESPAWN, 5 * MINUTE * IN_MILLISECONDS); DoSummonAction(NPC_CHOSEN_ZEALOT, ACTION_SUMMON_MOVE_STRAIGHT, 27); - events.ScheduleEvent(EVENT_SCENE_0, 30000); + events.ScheduleEvent(EVENT_SCENE_0, 30s); break; case EVENT_SCENE_0: DoSummonAction(NPC_CHOSEN_ZEALOT, ACTION_SUMMON_STAND_STATE, UNIT_STAND_STATE_KNEEL); me->SummonGameObject(GO_FROZEN_HEART, 6132.38f, 2760.76f, 574.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 180); - events.ScheduleEvent(EVENT_SCENE_0 + 1, 10000); + events.ScheduleEvent(EVENT_SCENE_0 + 1, 10s); break; case EVENT_SCENE_0+1: DoSummonAction(NPC_CHOSEN_ZEALOT, ACTION_SUMMON_STAND_STATE, UNIT_STAND_STATE_STAND); - events.ScheduleEvent(EVENT_SCENE_0 + 2, 2000); + events.ScheduleEvent(EVENT_SCENE_0 + 2, 2s); break; case EVENT_SCENE_0+2: DoSummonAction(NPC_CHOSEN_ZEALOT, ACTION_SUMMON_MOVE_STRAIGHT, -27); DoSummonAction(NPC_CHOSEN_ZEALOT, ACTION_SUMMON_DESPAWN, 20000); - events.ScheduleEvent(EVENT_SCENE_0 + 3, 2000); + events.ScheduleEvent(EVENT_SCENE_0 + 3, 2s); break; case EVENT_SCENE_0+3: Talk(3); if (Creature* cr = me->SummonCreature(NPC_TIRION_LICH_KING, 6161.26f, 2700.05f, 573.92f, 2.04f, TEMPSUMMON_TIMED_DESPAWN, 5 * MINUTE * IN_MILLISECONDS)) cr->GetMotionMaster()->MovePoint(2, 6131.93f, 2756.84f, 573.92f); - events.ScheduleEvent(EVENT_SCENE_0 + 4, 4000); + events.ScheduleEvent(EVENT_SCENE_0 + 4, 4s); break; case EVENT_SCENE_0+4: Talk(4); me->SetFacingTo(4.42f); - events.ScheduleEvent(EVENT_SCENE_0 + 5, 25000); + events.ScheduleEvent(EVENT_SCENE_0 + 5, 25s); break; case EVENT_SCENE_0+5: DoSummonAction(NPC_TIRION_LICH_KING, ACTION_SUMMON_ORIENTATION, 11); - events.ScheduleEvent(EVENT_SCENE_0 + 6, 4000); + events.ScheduleEvent(EVENT_SCENE_0 + 6, 4s); break; case EVENT_SCENE_0+6: DoSummonAction(NPC_TIRION_LICH_KING, ACTION_SUMMON_TALK, 0); me->LoadEquipment(2, true); SetEscortPaused(false); - events.ScheduleEvent(EVENT_SCENE_0 + 7, 6000); + events.ScheduleEvent(EVENT_SCENE_0 + 7, 6s); break; case EVENT_SCENE_0+7: DoSummonAction(NPC_TIRION_LICH_KING, ACTION_SUMMON_TALK, 1); break; case EVENT_SCENE_0+8: Talk(5); - events.ScheduleEvent(EVENT_SCENE_0 + 9, 5000); + events.ScheduleEvent(EVENT_SCENE_0 + 9, 5s); break; case EVENT_SCENE_0+9: DoSummonAction(NPC_TIRION_LICH_KING, ACTION_SUMMON_TALK, 2); - events.ScheduleEvent(EVENT_SCENE_0 + 10, 11000); + events.ScheduleEvent(EVENT_SCENE_0 + 10, 11s); break; case EVENT_SCENE_0+10: Talk(6); - events.ScheduleEvent(EVENT_SCENE_0 + 11, 6000); + events.ScheduleEvent(EVENT_SCENE_0 + 11, 6s); break; case EVENT_SCENE_0+11: DoSummonAction(NPC_TIRION_LICH_KING, ACTION_SUMMON_TALK, 3); - events.ScheduleEvent(EVENT_SCENE_0 + 12, 7000); + events.ScheduleEvent(EVENT_SCENE_0 + 12, 7s); break; case EVENT_SCENE_0+12: DoSummonAction(NPC_TIRION_LICH_KING, ACTION_SUMMON_TALK, 4); - events.ScheduleEvent(EVENT_SCENE_0 + 13, 5000); + events.ScheduleEvent(EVENT_SCENE_0 + 13, 5s); break; case EVENT_SCENE_0+13: Talk(7); - events.ScheduleEvent(EVENT_SCENE_0 + 14, 14000); + events.ScheduleEvent(EVENT_SCENE_0 + 14, 14s); break; case EVENT_SCENE_0+14: Talk(8); - events.ScheduleEvent(EVENT_SCENE_0 + 15, 3000); + events.ScheduleEvent(EVENT_SCENE_0 + 15, 3s); break; case EVENT_SCENE_0+15: { me->CastSpell(me, SPELL_TIRION_SMASH_HEART, true); - events.ScheduleEvent(EVENT_SCENE_0 + 16, 1200); + events.ScheduleEvent(EVENT_SCENE_0 + 16, 1200ms); uint8 i = 0; for (SummonList::iterator itr = summons.begin(); itr != summons.end(); ++itr, ++i) if (Creature* summon = ObjectAccessor::GetCreature(*me, *itr)) @@ -924,18 +913,18 @@ public: DoSummonAction(NPC_TIRION_LICH_KING, ACTION_SUMMON_TALK, 5); if (GameObject* go = me->FindNearestGameObject(GO_FROZEN_HEART, 20.0f)) go->Delete(); - events.ScheduleEvent(EVENT_SCENE_0 + 17, 2000); + events.ScheduleEvent(EVENT_SCENE_0 + 17, 2s); break; case EVENT_SCENE_0+17: DoSummonAction(NPC_TIRION_LICH_KING, ACTION_SUMMON_STAND_STATE, UNIT_STAND_STATE_KNEEL); - events.ScheduleEvent(EVENT_SCENE_0 + 170, 3000); + events.ScheduleEvent(EVENT_SCENE_0 + 170, 3s); break; case EVENT_SCENE_0+170: DoSummonAction(NPC_DISGUISED_CRUSADER, ACTION_SUMMON_ORIENTATION, 500); DoSummonAction(NPC_DISGUISED_CRUSADER, ACTION_SUMMON_EMOTE, EMOTE_STATE_READY2H); if (Creature* cr = me->FindNearestCreature(NPC_DISGUISED_CRUSADER, 10.0f)) cr->AI()->Talk(0); - events.ScheduleEvent(EVENT_SCENE_0 + 18, 1000); + events.ScheduleEvent(EVENT_SCENE_0 + 18, 1s); break; case EVENT_SCENE_0+18: { @@ -962,12 +951,12 @@ public: } } - events.ScheduleEvent(EVENT_SCENE_0 + 19, 3000); + events.ScheduleEvent(EVENT_SCENE_0 + 19, 3s); break; } case EVENT_SCENE_0+19: me->SummonCreatureGroup(1); - events.ScheduleEvent(EVENT_SCENE_0 + 20, 3700); + events.ScheduleEvent(EVENT_SCENE_0 + 20, 3700ms); break; case EVENT_SCENE_0+20: { @@ -1008,23 +997,23 @@ public: summon->GetMotionMaster()->MovePoint(6, 6138.36f + frand(-2.0f, 2.0f), 2749.25f + frand(-2.0f, 2.0f), 573.92f); } - events.ScheduleEvent(EVENT_SCENE_0 + 310, 4000); + events.ScheduleEvent(EVENT_SCENE_0 + 310, 4s); break; case EVENT_SCENE_0+310: DoSummonAction(NPC_TIRION_MOGRAINE, ACTION_SUMMON_TALK, 0); DoSummonAction(NPC_TIRION_LICH_KING, ACTION_SUMMON_STAND_STATE, UNIT_STAND_STATE_STAND); me->SummonGameObject(GO_ESCAPE_PORTAL, 6133.83f, 2757.24f, 573.914f, 1.97f, 0.0f, 0.0f, 0.0f, 0.0f, 60); me->CastSpell(me, SPELL_TIRIONS_GAMBIT_CREDIT, true); - events.ScheduleEvent(EVENT_SCENE_0 + 31, 6000); + events.ScheduleEvent(EVENT_SCENE_0 + 31, 6s); DoSummonAction(NPC_DISGUISED_CRUSADER, ACTION_SUMMON_EMOTE, EMOTE_ONESHOT_NONE); break; case EVENT_SCENE_0+31: DoSummonAction(NPC_TIRION_THASSARIAN, ACTION_SUMMON_TALK, 1); - events.ScheduleEvent(EVENT_SCENE_0 + 32, 7000); + events.ScheduleEvent(EVENT_SCENE_0 + 32, 7s); break; case EVENT_SCENE_0+32: DoSummonAction(NPC_TIRION_MOGRAINE, ACTION_SUMMON_TALK, 1); - events.ScheduleEvent(EVENT_SCENE_0 + 33, 7000); + events.ScheduleEvent(EVENT_SCENE_0 + 33, 7s); break; case EVENT_SCENE_0+33: for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) @@ -1380,8 +1369,8 @@ public: } me->GetMotionMaster()->MoveSplinePath(&pathPoints); - events.ScheduleEvent(EVENT_CHECK_PATH_REGEN_HEALTH_BURN_DAMAGE, 60000); - events.ScheduleEvent(EVENT_SYNCHRONIZE_SHIELDS, 5000); + events.ScheduleEvent(EVENT_CHECK_PATH_REGEN_HEALTH_BURN_DAMAGE, 1min); + events.ScheduleEvent(EVENT_SYNCHRONIZE_SHIELDS, 5s); break; } case EVENT_CHECK_PATH_REGEN_HEALTH_BURN_DAMAGE: @@ -1406,7 +1395,7 @@ public: else // Heal me->ModifyHealth(2000); - events.ScheduleEvent(EVENT_CHECK_PATH_REGEN_HEALTH_BURN_DAMAGE, 4000); + events.ScheduleEvent(EVENT_CHECK_PATH_REGEN_HEALTH_BURN_DAMAGE, 4s); break; } case EVENT_SYNCHRONIZE_SHIELDS: @@ -1430,7 +1419,7 @@ public: if (!playerPresent) me->DespawnOrUnsummon(1); } - events.ScheduleEvent(EVENT_SYNCHRONIZE_SHIELDS, 1000); + events.ScheduleEvent(EVENT_SYNCHRONIZE_SHIELDS, 1s); break; case EVENT_SPREAD_FIRE: break; @@ -1630,7 +1619,7 @@ public: } events.Reset(); - events.ScheduleEvent(EVENT_DUMMY_RECAST_DEFEND, 5000); + events.ScheduleEvent(EVENT_DUMMY_RECAST_DEFEND, 5s); } void EnterEvadeMode(EvadeReason why) override @@ -1644,7 +1633,7 @@ public: void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override { damage = 0; - events.RescheduleEvent(EVENT_DUMMY_RESET, 10000); + events.RescheduleEvent(EVENT_DUMMY_RESET, 10s); } void SpellHit(Unit* caster, SpellInfo const* spell) override @@ -1701,13 +1690,13 @@ public: } } isVulnerable = false; - events.ScheduleEvent(EVENT_DUMMY_RECAST_DEFEND, 5000); + events.ScheduleEvent(EVENT_DUMMY_RECAST_DEFEND, 5s); break; case EVENT_DUMMY_RESET: if (UpdateVictim()) { EnterEvadeMode(EVADE_REASON_OTHER); - events.ScheduleEvent(EVENT_DUMMY_RESET, 10000); + events.ScheduleEvent(EVENT_DUMMY_RESET, 10s); } break; } @@ -1847,7 +1836,7 @@ public: me->SetRegeneratingHealth(false); DoCast(SPELL_THREAT_PULSE); Talk(BANNER_SAY); - events.ScheduleEvent(EVENT_SPAWN, 3000); + events.ScheduleEvent(EVENT_SPAWN, 3s); } void JustEngagedWith(Unit* /*who*/) override { } @@ -1908,14 +1897,14 @@ public: guidMason[2] = Mason3->GetGUID(); Mason3->GetMotionMaster()->MovePoint(0, Mason3Pos[1]); } - events.ScheduleEvent(EVENT_INTRO_1, 15000); + events.ScheduleEvent(EVENT_INTRO_1, 15s); } break; case EVENT_INTRO_1: { if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors)) Dalfors->AI()->Talk(DALFORS_SAY_PRE_1); - events.ScheduleEvent(EVENT_INTRO_2, 5000); + events.ScheduleEvent(EVENT_INTRO_2, 5s); } break; case EVENT_INTRO_2: @@ -1925,7 +1914,7 @@ public: Dalfors->SetFacingTo(6.215f); Dalfors->AI()->Talk(DALFORS_SAY_PRE_2); } - events.ScheduleEvent(EVENT_INTRO_3, 5000); + events.ScheduleEvent(EVENT_INTRO_3, 5s); } break; case EVENT_INTRO_3: @@ -1965,8 +1954,8 @@ public: Mason3->GetMotionMaster()->MovePoint(0, Mason3Pos[2]); Mason3->SetHomePosition(Mason3Pos[2]); } - events.ScheduleEvent(EVENT_START_FIGHT, 5000); - events.ScheduleEvent(EVENT_MASON_ACTION, 15000); + events.ScheduleEvent(EVENT_START_FIGHT, 5s); + events.ScheduleEvent(EVENT_MASON_ACTION, 15s); } break; case EVENT_MASON_ACTION: @@ -1994,7 +1983,7 @@ public: LK->AI()->Talk(LK_TALK_1); if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors)) Dalfors->AI()->Talk(DALFORS_SAY_START); - events.ScheduleEvent(EVENT_WAVE_SPAWN, 1000); + events.ScheduleEvent(EVENT_WAVE_SPAWN, 1s); } break; case EVENT_WAVE_SPAWN: @@ -2044,9 +2033,9 @@ public: PhaseCount++; if (PhaseCount < 8) - events.ScheduleEvent(EVENT_WAVE_SPAWN, urand(10000, 20000)); + events.ScheduleEvent(EVENT_WAVE_SPAWN, 10s, 20s); else - events.ScheduleEvent(EVENT_HALOF, urand(10000, 20000)); + events.ScheduleEvent(EVENT_HALOF, 10s, 20s); } break; case EVENT_HALOF: @@ -2091,7 +2080,7 @@ public: Summons.DespawnEntry(NPC_HALOF_THE_DEATHBRINGER); if (Creature* Dalfors = ObjectAccessor::GetCreature(*me, guidDalfors)) Dalfors->AI()->Talk(DALFORS_YELL_FINISHED); - events.ScheduleEvent(EVENT_ENDED, 10000); + events.ScheduleEvent(EVENT_ENDED, 10s); } } }; @@ -2179,7 +2168,7 @@ public: break; case SPELL_RIDE: DoCastAOE(SPELL_PING_BUNNY); - events.ScheduleEvent(EVENT_FLY_AWAY, 100); + events.ScheduleEvent(EVENT_FLY_AWAY, 100ms); break; } } diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index d34470526..d2a4ebf39 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -156,12 +156,12 @@ public: { Talk(SAY_ARTRUIS_AGGRO); me->CastSpell(me, SPELL_ARTRUIS_ICY_VEINS, true); - events.RescheduleEvent(EVENT_CAST_FROST_BOLT, 4000); - events.RescheduleEvent(EVENT_CAST_FROST_NOVA, 15000); - events.RescheduleEvent(EVENT_CAST_ICE_LANCE, 8500); - events.RescheduleEvent(EVENT_CAST_ICY_VEINS, 30000); - events.RescheduleEvent(EVENT_ARTRUIS_HP_CHECK, 1000); - events.RescheduleEvent(EVENT_ARTRUIS_TALK1, 6000); + events.RescheduleEvent(EVENT_CAST_FROST_BOLT, 4s); + events.RescheduleEvent(EVENT_CAST_FROST_NOVA, 15s); + events.RescheduleEvent(EVENT_CAST_ICE_LANCE, 8500ms); + events.RescheduleEvent(EVENT_CAST_ICY_VEINS, 30s); + events.RescheduleEvent(EVENT_ARTRUIS_HP_CHECK, 1s); + events.RescheduleEvent(EVENT_ARTRUIS_TALK1, 6s); } void JustDied(Unit* /*killer*/) override @@ -204,7 +204,7 @@ public: minion->AddThreat(me, 100000.0f); minion->AI()->AttackStart(me); minion->DespawnOrUnsummon(900000); - events.RescheduleEvent(EVENT_ARTRUIS_TALK3, 5000); + events.RescheduleEvent(EVENT_ARTRUIS_TALK3, 5s); } } } @@ -231,11 +231,11 @@ public: SummonsAction(ACTION_BIND_MINIONS); break; } - events.RepeatEvent(1000); + events.Repeat(1s); break; case EVENT_ARTRUIS_TALK1: Talk(SAY_ARTRUIS_TALK_1); - events.RescheduleEvent(EVENT_ARTRUIS_TALK2, 10000); + events.RescheduleEvent(EVENT_ARTRUIS_TALK2, 10s); break; case EVENT_ARTRUIS_TALK2: Talk(SAY_ARTRUIS_TALK_2); @@ -245,19 +245,19 @@ public: break; case EVENT_CAST_FROST_BOLT: me->CastSpell(me->GetVictim(), SPELL_ARTRUIS_FROSTBOLT, false); - events.RepeatEvent(4000); + events.Repeat(4s); break; case EVENT_CAST_ICE_LANCE: me->CastSpell(me->GetVictim(), SPELL_ARTRUIS_ICE_LANCE, false); - events.RepeatEvent(8500); + events.Repeat(8500ms); break; case EVENT_CAST_FROST_NOVA: me->CastSpell(me, SPELL_ARTRUIS_FROST_NOVA, false); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_CAST_ICY_VEINS: me->CastSpell(me, SPELL_ARTRUIS_ICY_VEINS, false); - events.RepeatEvent(30000); + events.Repeat(30s); break; } } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 95de09ef4..9c735d4a3 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -256,13 +256,13 @@ public: events.Reset(); if (me->GetEntry() == NPC_TIME_LOST_PROTO_DRAKE) { - events.ScheduleEvent(SPELL_TIME_SHIFT, 10000); - events.ScheduleEvent(SPELL_TIME_LAPSE, 5000); + events.ScheduleEvent(SPELL_TIME_SHIFT, 10s); + events.ScheduleEvent(SPELL_TIME_LAPSE, 5s); } else { - events.ScheduleEvent(SPELL_FROST_BREATH, 8000); - events.ScheduleEvent(SPELL_FROST_CLEAVE, 5000); + events.ScheduleEvent(SPELL_FROST_BREATH, 8s); + events.ScheduleEvent(SPELL_FROST_CLEAVE, 5s); } } @@ -290,19 +290,19 @@ public: { case SPELL_TIME_SHIFT: me->CastSpell(me, SPELL_TIME_SHIFT, false); - events.RepeatEvent(18000); + events.Repeat(18s); break; case SPELL_TIME_LAPSE: me->CastSpell(me->GetVictim(), SPELL_TIME_LAPSE, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case SPELL_FROST_BREATH: me->CastSpell(me->GetVictim(), SPELL_FROST_BREATH, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case SPELL_FROST_CLEAVE: me->CastSpell(me->GetVictim(), SPELL_FROST_CLEAVE, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; } @@ -843,14 +843,14 @@ public: void Reset() override { - events.ScheduleEvent(EVENT_CHECK_AREA, 5000); + events.ScheduleEvent(EVENT_CHECK_AREA, 5s); me->SetSpeed(MOVE_RUN, 2.0f); } void MovementInform(uint32 type, uint32 /*id*/) override { if (type == ESCORT_MOTION_TYPE && me->movespline->Finalized()) - events.ScheduleEvent(EVENT_REACHED_HOME, 2000); + events.ScheduleEvent(EVENT_REACHED_HOME, 2s); } void UpdateAI(uint32 diff) override @@ -881,7 +881,7 @@ public: } } else - events.ScheduleEvent(EVENT_CHECK_AREA, 5000); + events.ScheduleEvent(EVENT_CHECK_AREA, 5s); break; case EVENT_REACHED_HOME: if (Vehicle* vehicle = me->GetVehicleKit()) diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index 3f2b00b74..dde665692 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -339,11 +339,11 @@ public: npc_wg_queueAI(Creature* creature) : ScriptedAI(creature) { if (creature->GetEntry() == NPC_ARCANIST_BRAEDIN) - events.ScheduleEvent(EVENT_ARCANIST_BRAEDIN_YELL, 0); + events.ScheduleEvent(EVENT_ARCANIST_BRAEDIN_YELL, 0ms); else if (creature->GetEntry() == NPC_MAGISTER_SURDIEL) - events.ScheduleEvent(EVENT_MAGISTER_SURDIEL_YELL, 0); + events.ScheduleEvent(EVENT_MAGISTER_SURDIEL_YELL, 0ms); - events.ScheduleEvent(EVENT_SPELL_FROST_ARMOR, 0); + events.ScheduleEvent(EVENT_SPELL_FROST_ARMOR, 0ms); } EventMap events; @@ -364,11 +364,11 @@ public: if (wintergrasp->IsWarTime()) { Talk(SAY_ARCANIST_BRAEDIN); - events.ScheduleEvent(EVENT_ARCANIST_BRAEDIN_YELL, 240000); + events.ScheduleEvent(EVENT_ARCANIST_BRAEDIN_YELL, 4min); break; } } - events.ScheduleEvent(EVENT_ARCANIST_BRAEDIN_YELL, 5000); + events.ScheduleEvent(EVENT_ARCANIST_BRAEDIN_YELL, 5s); break; case EVENT_MAGISTER_SURDIEL_YELL: if (Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG)) @@ -377,15 +377,15 @@ public: if (!wintergrasp->IsWarTime() && timer < 5 * MINUTE && timer > 4 * MINUTE) { Talk(SAY_MAGISTER_SURDIEL); - events.ScheduleEvent(EVENT_MAGISTER_SURDIEL_YELL, 300000); + events.ScheduleEvent(EVENT_MAGISTER_SURDIEL_YELL, 5min); break; } } - events.ScheduleEvent(EVENT_MAGISTER_SURDIEL_YELL, 5000); + events.ScheduleEvent(EVENT_MAGISTER_SURDIEL_YELL, 5s); break; case EVENT_SPELL_FROST_ARMOR: me->CastSpell(me, SPELL_FROST_ARMOR, true); - events.ScheduleEvent(EVENT_SPELL_FROST_ARMOR, 900000); + events.ScheduleEvent(EVENT_SPELL_FROST_ARMOR, 15min); break; } } diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index aa38b591b..41473712e 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -434,7 +434,7 @@ public: { me->SetVisible(true); playerGUID = who->GetGUID(); - events.ScheduleEvent(EVENT_BETRAYAL_1, 5000); + events.ScheduleEvent(EVENT_BETRAYAL_1, 5s); } } else @@ -458,9 +458,9 @@ public: void JustEngagedWith(Unit*) override { Talk(SAY_DRAKURU_3); - events.ScheduleEvent(EVENT_BETRAYAL_SHADOW_BOLT, 2000); - events.ScheduleEvent(EVENT_BETRAYAL_CRYSTAL, 5000); - events.ScheduleEvent(EVENT_BETRAYAL_COMBAT_TALK, 20000); + events.ScheduleEvent(EVENT_BETRAYAL_SHADOW_BOLT, 2s); + events.ScheduleEvent(EVENT_BETRAYAL_CRYSTAL, 5s); + events.ScheduleEvent(EVENT_BETRAYAL_COMBAT_TALK, 20s); } void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override @@ -473,7 +473,7 @@ public: me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetFaction(FACTION_FRIENDLY); events.Reset(); - events.ScheduleEvent(EVENT_BETRAYAL_4, 1000); + events.ScheduleEvent(EVENT_BETRAYAL_4, 1s); } } @@ -500,14 +500,14 @@ public: { case EVENT_BETRAYAL_1: Talk(SAY_DRAKURU_0); - events.ScheduleEvent(EVENT_BETRAYAL_2, 5000); + events.ScheduleEvent(EVENT_BETRAYAL_2, 5s); break; case EVENT_BETRAYAL_2: me->SummonCreature(NPC_BLIGHTBLOOD_TROLL, 6184.1f, -1969.9f, 586.76f, 4.5f); me->SummonCreature(NPC_BLIGHTBLOOD_TROLL, 6222.9f, -2026.5f, 586.76f, 2.9f); me->SummonCreature(NPC_BLIGHTBLOOD_TROLL, 6166.2f, -2065.4f, 586.76f, 1.4f); me->SummonCreature(NPC_BLIGHTBLOOD_TROLL, 6127.5f, -2008.7f, 586.76f, 0.0f); - events.ScheduleEvent(EVENT_BETRAYAL_3, 5000); + events.ScheduleEvent(EVENT_BETRAYAL_3, 5s); break; case EVENT_BETRAYAL_3: Talk(SAY_DRAKURU_1); @@ -519,25 +519,25 @@ public: break; case EVENT_BETRAYAL_4: Talk(SAY_DRAKURU_5); - events.ScheduleEvent(EVENT_BETRAYAL_5, 6000); + events.ScheduleEvent(EVENT_BETRAYAL_5, 6s); break; case EVENT_BETRAYAL_5: Talk(SAY_DRAKURU_6); me->CastSpell(me, SPELL_THROW_PORTAL_CRYSTAL, true); - events.ScheduleEvent(EVENT_BETRAYAL_6, 8000); + events.ScheduleEvent(EVENT_BETRAYAL_6, 8s); break; case EVENT_BETRAYAL_6: me->SummonCreature(NPC_LICH_KING, 6142.9f, -2011.6f, 590.86f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 41000); - events.ScheduleEvent(EVENT_BETRAYAL_7, 8000); + events.ScheduleEvent(EVENT_BETRAYAL_7, 8s); break; case EVENT_BETRAYAL_7: Talk(SAY_DRAKURU_7); - events.ScheduleEvent(EVENT_BETRAYAL_8, 5000); + events.ScheduleEvent(EVENT_BETRAYAL_8, 5s); break; case EVENT_BETRAYAL_8: if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID)) lich->AI()->Talk(SAY_LICH_7); - events.ScheduleEvent(EVENT_BETRAYAL_9, 6000); + events.ScheduleEvent(EVENT_BETRAYAL_9, 6s); break; case EVENT_BETRAYAL_9: if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID)) @@ -545,23 +545,23 @@ public: lich->AI()->Talk(SAY_LICH_8); lich->CastSpell(me, SPELL_TOUCH_OF_DEATH, false); } - events.ScheduleEvent(EVENT_BETRAYAL_10, 4000); + events.ScheduleEvent(EVENT_BETRAYAL_10, 4s); break; case EVENT_BETRAYAL_10: me->SetVisible(false); if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID)) lich->AI()->Talk(SAY_LICH_9); - events.ScheduleEvent(EVENT_BETRAYAL_11, 4000); + events.ScheduleEvent(EVENT_BETRAYAL_11, 4s); break; case EVENT_BETRAYAL_11: if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID)) lich->AI()->Talk(SAY_LICH_10); - events.ScheduleEvent(EVENT_BETRAYAL_12, 6000); + events.ScheduleEvent(EVENT_BETRAYAL_12, 6s); break; case EVENT_BETRAYAL_12: if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID)) lich->AI()->Talk(SAY_LICH_11); - events.ScheduleEvent(EVENT_BETRAYAL_13, 3000); + events.ScheduleEvent(EVENT_BETRAYAL_13, 3s); break; case EVENT_BETRAYAL_13: if (Creature* lich = ObjectAccessor::GetCreature(*me, lichGUID)) @@ -569,7 +569,7 @@ public: lich->AI()->Talk(SAY_LICH_12); lich->GetMotionMaster()->MovePoint(0, 6143.8f, -2011.5f, 590.9f); } - events.ScheduleEvent(EVENT_BETRAYAL_14, 7000); + events.ScheduleEvent(EVENT_BETRAYAL_14, 7s); break; case EVENT_BETRAYAL_14: playerGUID.Clear(); @@ -588,16 +588,16 @@ public: case EVENT_BETRAYAL_SHADOW_BOLT: if (!me->IsWithinMeleeRange(me->GetVictim())) me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false); - events.RepeatEvent(2000); + events.Repeat(2s); break; case EVENT_BETRAYAL_CRYSTAL: if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) me->CastSpell(player, SPELL_THROW_BRIGHT_CRYSTAL, true); - events.RepeatEvent(urand(6000, 15000)); + events.Repeat(6s, 15s); break; case EVENT_BETRAYAL_COMBAT_TALK: Talk(SAY_DRAKURU_4); - events.RepeatEvent(20000); + events.Repeat(20s); break; } @@ -830,7 +830,7 @@ public: me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); Talk(SAY_RECRUIT); - _events.ScheduleEvent(EVENT_RECRUIT_2, 3000); + _events.ScheduleEvent(EVENT_RECRUIT_2, 3s); break; case EVENT_RECRUIT_2: me->SetWalk(true); @@ -848,7 +848,7 @@ public: void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override { - _events.ScheduleEvent(EVENT_RECRUIT_1, 100); + _events.ScheduleEvent(EVENT_RECRUIT_1, 100ms); CloseGossipMenuFor(player); me->CastSpell(player, SPELL_QUEST_CREDIT, true); me->SetFacingToObject(player); From 3c37ea1ae144f06d25ec75176753fe1967c7d63c Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:41:32 +0200 Subject: [PATCH 067/159] fix(DB/SAI): Serpentbloom Snakes movement. (#15151) --- .../sql/updates/pending_db_world/rev_1676986377096927800.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676986377096927800.sql diff --git a/data/sql/updates/pending_db_world/rev_1676986377096927800.sql b/data/sql/updates/pending_db_world/rev_1676986377096927800.sql new file mode 100644 index 000000000..b55dab02b --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676986377096927800.sql @@ -0,0 +1,5 @@ +-- Wailing Caverns - Serpentbloom Snake +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 3680; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 3680; +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 +(3680, 0, 0, 0, 54, 0, 100, 1, 0, 0, 0, 0, 0, 89, 10, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Serpentbloom Snake - On Just Summoned - Start Random Movement (No Repeat)'); From a08c793cea1fea2160c72f15a38f069e8c5551f4 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:41:41 +0200 Subject: [PATCH 068/159] fix(DB/Conditions): Sha'ni Proudtusk infinite spawning. (#15094) --- .../sql/updates/pending_db_world/rev_1676673725150035900.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1676673725150035900.sql diff --git a/data/sql/updates/pending_db_world/rev_1676673725150035900.sql b/data/sql/updates/pending_db_world/rev_1676673725150035900.sql new file mode 100644 index 000000000..1ef4e44df --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676673725150035900.sql @@ -0,0 +1,5 @@ +-- Sha'ni Proudtusk's Remains GO SmartAI - Add condition for QUEST_STATE (Complete and rewarded) AND no Sha'ni Proudtusk within 10 yards. +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=160445; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 160445, 1, 0, 47, 0, 3821, 66, 0, 0, 0, 0, '', '(AND) Execute SmartAI for gameobject 160445 only if player has COMPLETE and REWARDED quest 3821'), +(22, 1, 160445, 1, 0, 29, 0, 9136, 10, 0, 1, 0, 0, '', '(AND) Execute SmartAI for gameobject 160445 only if no Sha\'ni Proudtusk is within 10y.'); From a0cdf85e4b85d8ca3eec3057f81f764461b9b5bd Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:41:53 +0200 Subject: [PATCH 069/159] fix(DB/Creature): Avatar of Sathal missing text. (#15298) --- .../pending_db_world/rev_1678173710393604400.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678173710393604400.sql diff --git a/data/sql/updates/pending_db_world/rev_1678173710393604400.sql b/data/sql/updates/pending_db_world/rev_1678173710393604400.sql new file mode 100644 index 000000000..3f180bbef --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678173710393604400.sql @@ -0,0 +1,11 @@ +-- Avatar of Sathal +DELETE FROM `creature_text` WHERE `CreatureID`=21925; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(21925, 0, 0, 'Feel my wrath, $r scum! You will not get away with this!', 14, 0, 100, 0, 0, 0, 19598, 0, 'Avatar of Sathal SAY_AGGRO'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21925); +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 +(21925, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Avatar of Sathal - On Just Summoned - Start Attacking'), +(21925, 0, 1, 0, 61, 0, 100, 257, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Avatar of Sathal - On Just Summoned - Say Line 0 (No Repeat/Reset)'), +(21925, 0, 2, 0, 0, 0, 100, 0, 2300, 3000, 8700, 9000, 0, 11, 12471, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Avatar of Sathal - In Combat - Cast \'Shadow Bolt\''), +(21925, 0, 3, 0, 0, 0, 100, 0, 6000, 12000, 12000, 17000, 0, 11, 34017, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Avatar of Sathal - In Combat - Cast \'Rain of Chaos\''); From e7bb9ee262136517f88d76ab22bcba91d54e40c6 Mon Sep 17 00:00:00 2001 From: ZhengPeiRu21 <98835050+ZhengPeiRu21@users.noreply.github.com> Date: Tue, 7 Mar 2023 10:42:06 -0700 Subject: [PATCH 070/159] fix(DB/Quest): Against the Legion requirements (#15242) --- .../pending_db_world/rev_1677781820338823400.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677781820338823400.sql diff --git a/data/sql/updates/pending_db_world/rev_1677781820338823400.sql b/data/sql/updates/pending_db_world/rev_1677781820338823400.sql new file mode 100644 index 000000000..308da696c --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677781820338823400.sql @@ -0,0 +1,12 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 19 AND `SourceEntry` IN (10641, 10668, 10669); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(19, 0, 10641, 0, 1, 47, 0, 10640, 64, 0, 0, 0, 0, '', 'Against the Legion - Require Quest 10640 OR 10689'), +(19, 0, 10669, 0, 1, 47, 0, 10640, 64, 0, 0, 0, 0, '', 'Against All Odds - Require Quest 10640 OR 10689'), +(19, 0, 10668, 0, 1, 47, 0, 10640, 64, 0, 0, 0, 0, '', 'Against the Illidari - Require Quest 10640 OR 10689'), +(19, 0, 10641, 0, 2, 47, 0, 10689, 64, 0, 0, 0, 0, '', 'Against the Legion - Require Quest 10640 OR 10689'), +(19, 0, 10668, 0, 2, 47, 0, 10689, 64, 0, 0, 0, 0, '', 'Against the Illidari - Require Quest 10640 OR 10689'), +(19, 0, 10669, 0, 2, 47, 0, 10689, 64, 0, 0, 0, 0, '', 'Against All Odds - Require Quest 10640 OR 10689'); + +UPDATE `quest_template_addon` SET `PrevQuestID` = 0 WHERE `ID` IN (10641, 10668, 10669); +UPDATE `quest_template_addon` SET `NextQuestID` = 0 WHERE `NextQuestID` IN (10641, 10668, 10669); From 2874c4b93fc1c09bcf592937825d7da881b18bc6 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:42:37 +0200 Subject: [PATCH 071/159] fix(DB/Creature): Lord Azrethoc pathing without a melee weapon. (#15260) --- data/sql/updates/pending_db_world/rev_1677929630251654400.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677929630251654400.sql diff --git a/data/sql/updates/pending_db_world/rev_1677929630251654400.sql b/data/sql/updates/pending_db_world/rev_1677929630251654400.sql new file mode 100644 index 000000000..5173a5dff --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677929630251654400.sql @@ -0,0 +1,2 @@ +-- Lord Azrethoc - path with equiped melee weapon. +UPDATE `creature_addon` SET `bytes2` = 1 WHERE `guid` = 29062 AND `path_id` = 290620; From 4d9f336a5099caddbbc825cec974862d786e6218 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:43:10 +0200 Subject: [PATCH 072/159] fix(DB/Creature): Wild turkey spawns having gossip flags. (#15297) --- data/sql/updates/pending_db_world/rev_1678171987448093500.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678171987448093500.sql diff --git a/data/sql/updates/pending_db_world/rev_1678171987448093500.sql b/data/sql/updates/pending_db_world/rev_1678171987448093500.sql new file mode 100644 index 000000000..c95a435c4 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678171987448093500.sql @@ -0,0 +1,2 @@ +-- Event: Pilgrim's Bounty - Few Wild Turkeys having npc gossip flag. +UPDATE `creature` SET `npcflag` = `npcflag`&~(1) WHERE `id1` = 32820 AND `guid` IN (241384,241659,241674,241862,241865,241944,241948,241961,242367,242369,242416,242952,243003,243102,243735,243736,243774,243775); From ae57e0c6d9d6fd7d7efa4a83f64db83ceebeb9b2 Mon Sep 17 00:00:00 2001 From: neifion-00000000 <91289495+neifion-00000000@users.noreply.github.com> Date: Tue, 7 Mar 2023 11:43:29 -0600 Subject: [PATCH 073/159] fix(DB/Creature): Remove creature 138 (#15291) --- data/sql/updates/pending_db_world/rev_1678062827982837200.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678062827982837200.sql diff --git a/data/sql/updates/pending_db_world/rev_1678062827982837200.sql b/data/sql/updates/pending_db_world/rev_1678062827982837200.sql new file mode 100644 index 000000000..60f02ae2e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678062827982837200.sql @@ -0,0 +1,3 @@ +-- +-- This entry should not exist and appears to serve no purpose +DELETE FROM `creature_template` WHERE `entry`=138; From 4141ec1e2167d59f935d1f337939f71a05c251c3 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:43:39 +0200 Subject: [PATCH 074/159] fix(DB/SAI): Chimaerok casting on aggro. (#15286) --- .../updates/pending_db_world/rev_1678044264637638600.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678044264637638600.sql diff --git a/data/sql/updates/pending_db_world/rev_1678044264637638600.sql b/data/sql/updates/pending_db_world/rev_1678044264637638600.sql new file mode 100644 index 000000000..3a9202be4 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678044264637638600.sql @@ -0,0 +1,6 @@ +-- Chimaerok +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 12800); +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 +(12800, 0, 0, 0, 0, 0, 100, 512, 12000, 15000, 12000, 15000, 0, 11, 20629, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Chimaerok - In Combat - Cast \'Corrosive Venom Spit\''), +(12800, 0, 1, 0, 0, 0, 100, 512, 2000, 4000, 3000, 4000, 0, 11, 20627, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Chimaerok - In Combat - Cast \'Lightning Breath\''), +(12800, 0, 2, 0, 0, 0, 100, 512, 10000, 15000, 10000, 15000, 0, 11, 18144, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Chimaerok - In Combat - Cast \'Swoop\''); From 3ebf42887bb0fdbcb541ec418626d55e827be794 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:44:12 +0200 Subject: [PATCH 075/159] fix(DB/Event): Shadowfang Keep's Valentine decoration. (#15283) --- .../rev_1678037523099913900.sql | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678037523099913900.sql diff --git a/data/sql/updates/pending_db_world/rev_1678037523099913900.sql b/data/sql/updates/pending_db_world/rev_1678037523099913900.sql new file mode 100644 index 000000000..6f05ea4ca --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678037523099913900.sql @@ -0,0 +1,29 @@ +-- SFK Valentine +DELETE FROM `game_event_gameobject` WHERE `eventEntry` = 8 AND `guid` IN (9755,9764,9776,9814,9815,9816,9817,9818,9819,9827,9831,9832,9835,9836,9821,9823,9834,9837,9775,9788,9820,9822,9824,9825,9826,9829); +INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES +(8, 9755), -- Wall ornaments +(8, 9764), +(8, 9776), +(8, 9814), +(8, 9815), +(8, 9816), +(8, 9817), +(8, 9818), +(8, 9819), +(8, 9827), +(8, 9831), +(8, 9832), +(8, 9835), +(8, 9836), +(8, 9775), -- Candles +(8, 9788), +(8, 9820), +(8, 9822), +(8, 9824), +(8, 9825), +(8, 9826), +(8, 9829), +(8, 9821), -- Flower vase +(8, 9823), +(8, 9834), +(8, 9837); From 4958c379432f8c26e307b2bf090f08977ad550e5 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Tue, 7 Mar 2023 19:44:37 +0200 Subject: [PATCH 076/159] fix(DB/Movement): Unpopulated rows from previous PRs. (#15292) --- .../updates/pending_db_world/rev_1678084806976383500.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678084806976383500.sql diff --git a/data/sql/updates/pending_db_world/rev_1678084806976383500.sql b/data/sql/updates/pending_db_world/rev_1678084806976383500.sql new file mode 100644 index 000000000..35ae991ec --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678084806976383500.sql @@ -0,0 +1,9 @@ +-- Sindragosa (NullCreature) +DELETE FROM `creature_template_movement` WHERE `CreatureId` = 37755; +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(37755, 0, 0, 2, 0, 0, 0, 0); + +-- Column Ornament +DELETE FROM `creature_template_movement` WHERE `CreatureId` = 29754; +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(29754, 0, 0, 1, 0, 0, 0, 0); From 585679a18d9c205ee54a426498f113ae23e4187b Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Tue, 7 Mar 2023 17:47:21 +0000 Subject: [PATCH 077/159] chore(DB): import pending files Referenced commit(s): 4958c379432f8c26e307b2bf090f08977ad550e5 --- .../rev_1676673725150035900.sql => db_world/2023_03_07_00.sql} | 1 + .../rev_1676986377096927800.sql => db_world/2023_03_07_01.sql} | 1 + .../rev_1677781820338823400.sql => db_world/2023_03_07_02.sql} | 1 + .../rev_1677929630251654400.sql => db_world/2023_03_07_03.sql} | 1 + .../rev_1678037523099913900.sql => db_world/2023_03_07_04.sql} | 1 + .../rev_1678044264637638600.sql => db_world/2023_03_07_05.sql} | 1 + .../rev_1678062827982837200.sql => db_world/2023_03_07_06.sql} | 1 + .../rev_1678084806976383500.sql => db_world/2023_03_07_07.sql} | 1 + .../rev_1678171987448093500.sql => db_world/2023_03_07_08.sql} | 1 + .../rev_1678173710393604400.sql => db_world/2023_03_07_09.sql} | 1 + 10 files changed, 10 insertions(+) rename data/sql/updates/{pending_db_world/rev_1676673725150035900.sql => db_world/2023_03_07_00.sql} (95%) rename data/sql/updates/{pending_db_world/rev_1676986377096927800.sql => db_world/2023_03_07_01.sql} (94%) rename data/sql/updates/{pending_db_world/rev_1677781820338823400.sql => db_world/2023_03_07_02.sql} (96%) rename data/sql/updates/{pending_db_world/rev_1677929630251654400.sql => db_world/2023_03_07_03.sql} (75%) rename data/sql/updates/{pending_db_world/rev_1678037523099913900.sql => db_world/2023_03_07_04.sql} (93%) rename data/sql/updates/{pending_db_world/rev_1678044264637638600.sql => db_world/2023_03_07_05.sql} (96%) rename data/sql/updates/{pending_db_world/rev_1678062827982837200.sql => db_world/2023_03_07_06.sql} (72%) rename data/sql/updates/{pending_db_world/rev_1678084806976383500.sql => db_world/2023_03_07_07.sql} (92%) rename data/sql/updates/{pending_db_world/rev_1678171987448093500.sql => db_world/2023_03_07_08.sql} (86%) rename data/sql/updates/{pending_db_world/rev_1678173710393604400.sql => db_world/2023_03_07_09.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1676673725150035900.sql b/data/sql/updates/db_world/2023_03_07_00.sql similarity index 95% rename from data/sql/updates/pending_db_world/rev_1676673725150035900.sql rename to data/sql/updates/db_world/2023_03_07_00.sql index 1ef4e44df..b4f67b8c5 100644 --- a/data/sql/updates/pending_db_world/rev_1676673725150035900.sql +++ b/data/sql/updates/db_world/2023_03_07_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_06_00 -> 2023_03_07_00 -- Sha'ni Proudtusk's Remains GO SmartAI - Add condition for QUEST_STATE (Complete and rewarded) AND no Sha'ni Proudtusk within 10 yards. DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceGroup`=1 AND `SourceEntry`=160445; INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1676986377096927800.sql b/data/sql/updates/db_world/2023_03_07_01.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1676986377096927800.sql rename to data/sql/updates/db_world/2023_03_07_01.sql index b55dab02b..2225f092a 100644 --- a/data/sql/updates/pending_db_world/rev_1676986377096927800.sql +++ b/data/sql/updates/db_world/2023_03_07_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_07_00 -> 2023_03_07_01 -- Wailing Caverns - Serpentbloom Snake UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 3680; DELETE FROM `smart_scripts` WHERE `entryorguid` = 3680; diff --git a/data/sql/updates/pending_db_world/rev_1677781820338823400.sql b/data/sql/updates/db_world/2023_03_07_02.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1677781820338823400.sql rename to data/sql/updates/db_world/2023_03_07_02.sql index 308da696c..3365c3c9b 100644 --- a/data/sql/updates/pending_db_world/rev_1677781820338823400.sql +++ b/data/sql/updates/db_world/2023_03_07_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_07_01 -> 2023_03_07_02 -- DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 19 AND `SourceEntry` IN (10641, 10668, 10669); INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1677929630251654400.sql b/data/sql/updates/db_world/2023_03_07_03.sql similarity index 75% rename from data/sql/updates/pending_db_world/rev_1677929630251654400.sql rename to data/sql/updates/db_world/2023_03_07_03.sql index 5173a5dff..22c038657 100644 --- a/data/sql/updates/pending_db_world/rev_1677929630251654400.sql +++ b/data/sql/updates/db_world/2023_03_07_03.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_07_02 -> 2023_03_07_03 -- Lord Azrethoc - path with equiped melee weapon. UPDATE `creature_addon` SET `bytes2` = 1 WHERE `guid` = 29062 AND `path_id` = 290620; diff --git a/data/sql/updates/pending_db_world/rev_1678037523099913900.sql b/data/sql/updates/db_world/2023_03_07_04.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1678037523099913900.sql rename to data/sql/updates/db_world/2023_03_07_04.sql index 6f05ea4ca..ccbd58423 100644 --- a/data/sql/updates/pending_db_world/rev_1678037523099913900.sql +++ b/data/sql/updates/db_world/2023_03_07_04.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_07_03 -> 2023_03_07_04 -- SFK Valentine DELETE FROM `game_event_gameobject` WHERE `eventEntry` = 8 AND `guid` IN (9755,9764,9776,9814,9815,9816,9817,9818,9819,9827,9831,9832,9835,9836,9821,9823,9834,9837,9775,9788,9820,9822,9824,9825,9826,9829); INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1678044264637638600.sql b/data/sql/updates/db_world/2023_03_07_05.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1678044264637638600.sql rename to data/sql/updates/db_world/2023_03_07_05.sql index 3a9202be4..5f6642fae 100644 --- a/data/sql/updates/pending_db_world/rev_1678044264637638600.sql +++ b/data/sql/updates/db_world/2023_03_07_05.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_07_04 -> 2023_03_07_05 -- Chimaerok DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 12800); 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_1678062827982837200.sql b/data/sql/updates/db_world/2023_03_07_06.sql similarity index 72% rename from data/sql/updates/pending_db_world/rev_1678062827982837200.sql rename to data/sql/updates/db_world/2023_03_07_06.sql index 60f02ae2e..9c555065e 100644 --- a/data/sql/updates/pending_db_world/rev_1678062827982837200.sql +++ b/data/sql/updates/db_world/2023_03_07_06.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_07_05 -> 2023_03_07_06 -- -- This entry should not exist and appears to serve no purpose DELETE FROM `creature_template` WHERE `entry`=138; diff --git a/data/sql/updates/pending_db_world/rev_1678084806976383500.sql b/data/sql/updates/db_world/2023_03_07_07.sql similarity index 92% rename from data/sql/updates/pending_db_world/rev_1678084806976383500.sql rename to data/sql/updates/db_world/2023_03_07_07.sql index 35ae991ec..6554ae950 100644 --- a/data/sql/updates/pending_db_world/rev_1678084806976383500.sql +++ b/data/sql/updates/db_world/2023_03_07_07.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_07_06 -> 2023_03_07_07 -- Sindragosa (NullCreature) DELETE FROM `creature_template_movement` WHERE `CreatureId` = 37755; INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES diff --git a/data/sql/updates/pending_db_world/rev_1678171987448093500.sql b/data/sql/updates/db_world/2023_03_07_08.sql similarity index 86% rename from data/sql/updates/pending_db_world/rev_1678171987448093500.sql rename to data/sql/updates/db_world/2023_03_07_08.sql index c95a435c4..408dd70b8 100644 --- a/data/sql/updates/pending_db_world/rev_1678171987448093500.sql +++ b/data/sql/updates/db_world/2023_03_07_08.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_07_07 -> 2023_03_07_08 -- Event: Pilgrim's Bounty - Few Wild Turkeys having npc gossip flag. UPDATE `creature` SET `npcflag` = `npcflag`&~(1) WHERE `id1` = 32820 AND `guid` IN (241384,241659,241674,241862,241865,241944,241948,241961,242367,242369,242416,242952,243003,243102,243735,243736,243774,243775); diff --git a/data/sql/updates/pending_db_world/rev_1678173710393604400.sql b/data/sql/updates/db_world/2023_03_07_09.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1678173710393604400.sql rename to data/sql/updates/db_world/2023_03_07_09.sql index 3f180bbef..7d75e2c6a 100644 --- a/data/sql/updates/pending_db_world/rev_1678173710393604400.sql +++ b/data/sql/updates/db_world/2023_03_07_09.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_07_08 -> 2023_03_07_09 -- Avatar of Sathal DELETE FROM `creature_text` WHERE `CreatureID`=21925; INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES From 74137279204bfef05e2e0044210e61b030b12b76 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Tue, 7 Mar 2023 20:51:08 -0300 Subject: [PATCH 078/159] chore(DB): Rerrunnable SQLs (#15305) --- data/sql/updates/db_world/2023_03_04_06.sql | 51 ++++++++++++--------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/data/sql/updates/db_world/2023_03_04_06.sql b/data/sql/updates/db_world/2023_03_04_06.sql index 3275348e0..8b9d41d09 100644 --- a/data/sql/updates/db_world/2023_03_04_06.sql +++ b/data/sql/updates/db_world/2023_03_04_06.sql @@ -1,19 +1,26 @@ -- DB update 2023_03_04_05 -> 2023_03_04_06 -- -DELETE FROM `creature_text` WHERE `CreatureID`=17876 AND `groupid` IN (21,22,23); -INSERT INTO `creature_text` VALUES -(17876,21,0,'Thrall startles the horse with a fierce yell!',16,0,100,0,0,0,0,0,'Thrall Horse Emote'), -(17876,22,0,'Thrall tries to calm the horse down.',16,0,100,0,0,0,0,0,'Thrall Horse Emote 2'), -(17876,23,0,'Taretha isn\'t here. Let\'s head into town.',12,0,100,0,0,0,0,0,'Thrall Say Lead'); +DELETE FROM `creature_text` WHERE `CreatureID`=17876 AND `GroupID` IN (21,22,23); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17876, 21, 0, 'Thrall startles the horse with a fierce yell!', 16, 0, 100, 0, 0, 0, 16499, 0, 'Thrall Horse Emote'), +(17876, 22, 0, 'Thrall tries to calm the horse down.', 16, 0, 100, 0, 0, 0, 15970, 0, 'Thrall Horse Emote 2'), +(17876, 23, 0, 'Taretha isn\'t here. Let\'s head into town.', 12, 0, 100, 0, 0, 0, 15974, 0, 'Thrall Say Lead'); -UPDATE `creature_text` SET `groupid`=8 WHERE `CreatureID`=18096 AND `GroupId`=6; -UPDATE `creature_text` SET `groupid`=7 WHERE `CreatureID`=18096 AND `GroupId`=5; -UPDATE `creature_text` SET `groupid`=6 WHERE `CreatureID`=18096 AND `GroupId`=4; -UPDATE `creature_text` SET `groupid`=5 WHERE `CreatureID`=18096 AND `GroupId`=3; -UPDATE `creature_text` SET `groupid`=4 WHERE `CreatureID`=18096 AND `GroupId`=2; -UPDATE `creature_text` SET `groupid`=3 WHERE `CreatureID`=18096 AND `GroupId`=1; -UPDATE `creature_text` SET `groupid`=2 WHERE `CreatureID`=18096 AND `GroupId`=0 AND `id`=2; -UPDATE `creature_text` SET `groupid`=1 WHERE `CreatureID`=18096 AND `GroupId`=0 AND `id`=1; +DELETE FROM `creature_text` WHERE `CreatureID`=18096; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(18096, 0, 0, 'Thrall! Come outside and face your fate!', 14, 0, 100, 0, 0, 10418, 16016, 0, 'epoch hunter SAY_ENTER1'), +(18096, 1, 0, 'Taretha\'s life hangs in the balance. Surely you care for her. Surely you wish to save her... ', 14, 0, 100, 0, 0, 10419, 16019, 0, 'epoch hunter SAY_ENTER2'), +(18096, 2, 0, 'Ah, there you are. I had hoped to accomplish this with a bit of subtlety, but I suppose direct confrontation was inevitable. Your future, Thrall, must not come to pass and so... you and your troublesome friends must die!', 14, 0, 100, 0, 0, 10420, 16021, 0, 'epoch hunter SAY_ENTER3'), +(18096, 3, 0, 'Enough, I will erase your very existence!', 14, 0, 100, 0, 0, 10421, 16023, 0, 'epoch hunter SAY_AGGRO1'), +(18096, 3, 1, 'You cannot fight fate!', 14, 0, 100, 0, 0, 10422, 16693, 0, 'epoch hunter SAY_AGGRO2'), +(18096, 4, 0, 'You are... irrelevant.', 14, 0, 100, 0, 0, 10425, 16694, 0, 'epoch hunter SAY_SLAY1'), +(18096, 4, 1, 'Thrall will remain a slave. Taretha will die. You have failed.', 14, 0, 100, 0, 0, 10426, 16695, 0, 'epoch hunter SAY_SLAY2'), +(18096, 5, 0, 'Not so fast!', 14, 0, 100, 0, 0, 10423, 16691, 0, 'epoch hunter SAY_BREATH1'), +(18096, 5, 1, 'Struggle as much as you like...', 14, 0, 100, 0, 0, 10424, 16692, 0, 'epoch hunter SAY_BREATH2'), +(18096, 6, 0, 'Thrall will remain a slave. Taretha will die. You have failed.', 14, 0, 100, 0, 0, 10426, 16695, 0, 'epoch hunter SAY_SLAY2'), +(18096, 7, 0, 'Not so fast!', 14, 0, 100, 0, 0, 10423, 16691, 0, 'epoch hunter SAY_BREATH1'), +(18096, 7, 1, 'Struggle as much as you like...', 14, 0, 100, 0, 0, 10424, 16692, 0, 'epoch hunter SAY_BREATH2'), +(18096, 8, 0, 'No! The master will... not be... pleased.', 14, 0, 100, 0, 0, 10427, 16696, 0, 'epoch hunter SAY_DEATH'); UPDATE `script_waypoint` SET `waitTime`=13000 WHERE `entry`=17876 AND `pointid`=10; UPDATE `script_waypoint` SET `waitTime`=20000 WHERE `entry`=17876 AND `pointid`=67; @@ -50,24 +57,24 @@ INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `positi (180940,2,2491.4536,694.1376,55.70895), (180940,3,2490.363,703.972,55.764732); -UPDATE `smart_scripts` SET `link`=4 WHERE `entryorguid`=18092 AND `source_type`=0 AND `id`=3; -DELETE FROM `smart_scripts` WHERE `entryorguid`=18092 AND `source_type`=0 AND `id` IN (4,5,6); -INSERT INTO `smart_scripts` VALUES -(18092,0,4,0,61,0,100,0,0,0,0,0,0,53,0,180920,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Guardsman - Do Action - Start WP'), -(18092,0,5,6,72,0,100,0,2,0,0,0,0,19,768,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Tarren Mill Guardsman - Do Action - Remove Unit Flag'), -(18092,0,6,0,61,0,100,0,0,0,0,0,0,53,0,180921,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Guardsman - Do Action - Start WP'); +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18092 AND `id` IN (3, 4, 5, 6)); +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 +(18092, 0, 3, 4, 72, 0, 100, 512, 2, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tarren Mill Guardsman - Do Action - Remove Unit Flag'), +(18092, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 180920, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tarren Mill Guardsman - Do Action - Start WP'), +(18092, 0, 5, 6, 72, 0, 100, 0, 2, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tarren Mill Guardsman - Do Action - Remove Unit Flag'), +(18092, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 180921, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tarren Mill Guardsman - Do Action - Start WP'); DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=18092 AND `SourceId` IN (4,6); -INSERT INTO `conditions` VALUES +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES (22,0,18092,4,0,1,1,22805,0,0,0,0,0,'','Exeucte SAI if aura present'), (22,0,18092,6,0,1,1,22805,0,0,1,0,0,'','Exeucte SAI if aura not present'); UPDATE `smart_scripts` SET `link`=8 WHERE `entryorguid`=18093 AND `source_type`=0 AND `id`=7; DELETE FROM `smart_scripts` WHERE `entryorguid`=18093 AND `source_type`=0 AND `id`=8; -INSERT INTO `smart_scripts` VALUES +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 (18093,0,8,0,61,0,100,0,0,0,0,0,0,53,0,180930,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Protector - Do Action - Start WP'); UPDATE `smart_scripts` SET `link`=6 WHERE `entryorguid`=18094 AND `source_type`=0 AND `id`=5; DELETE FROM `smart_scripts` WHERE `entryorguid`=18094 AND `source_type`=0 AND `id`=6; -INSERT INTO `smart_scripts` VALUES +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 (18094,0,6,0,61,0,100,0,0,0,0,0,0,53,0,180940,0,0,0,2,1,0,0,0,0,0,0,0,0,'Tarren Mill Lookout - Do Action - Start WP'); From 069eba0bc0100ffac039f7d1ea5fee3d0ca8e06e Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Thu, 9 Mar 2023 06:01:23 -0300 Subject: [PATCH 079/159] fix(DB/Creature): Remove reputation gains from Seedlings in The Botanica (#15317) --- data/sql/updates/pending_db_world/rev_1678332563821621300.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678332563821621300.sql diff --git a/data/sql/updates/pending_db_world/rev_1678332563821621300.sql b/data/sql/updates/pending_db_world/rev_1678332563821621300.sql new file mode 100644 index 000000000..bf27bb45e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678332563821621300.sql @@ -0,0 +1,2 @@ +-- +DELETE FROM `creature_onkill_reputation` WHERE (`creature_id` IN (19958, 19962, 19964, 19969)); From 4dca18652d207934b31509c3c1eb39c3a79ca8a5 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Thu, 9 Mar 2023 09:03:58 +0000 Subject: [PATCH 080/159] chore(DB): import pending files Referenced commit(s): 069eba0bc0100ffac039f7d1ea5fee3d0ca8e06e --- .../rev_1678332563821621300.sql => db_world/2023_03_09_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1678332563821621300.sql => db_world/2023_03_09_00.sql} (69%) diff --git a/data/sql/updates/pending_db_world/rev_1678332563821621300.sql b/data/sql/updates/db_world/2023_03_09_00.sql similarity index 69% rename from data/sql/updates/pending_db_world/rev_1678332563821621300.sql rename to data/sql/updates/db_world/2023_03_09_00.sql index bf27bb45e..2bd6bf17b 100644 --- a/data/sql/updates/pending_db_world/rev_1678332563821621300.sql +++ b/data/sql/updates/db_world/2023_03_09_00.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_07_09 -> 2023_03_09_00 -- DELETE FROM `creature_onkill_reputation` WHERE (`creature_id` IN (19958, 19962, 19964, 19969)); From 67bbeb7d6fa1d97e62887ae58c2e82796a286e40 Mon Sep 17 00:00:00 2001 From: AnchyDev <35346484+AnchyDev@users.noreply.github.com> Date: Fri, 10 Mar 2023 01:31:13 +1100 Subject: [PATCH 081/159] fix(Core/Warden): Fix buffer not being handled during interrupt. (#15258) --- src/server/game/Warden/Warden.cpp | 5 + src/server/game/Warden/Warden.h | 1 + src/server/game/Warden/WardenWin.cpp | 294 ++++++++++++++------------- 3 files changed, 157 insertions(+), 143 deletions(-) diff --git a/src/server/game/Warden/Warden.cpp b/src/server/game/Warden/Warden.cpp index 1faae7f1e..7da4a4060 100644 --- a/src/server/game/Warden/Warden.cpp +++ b/src/server/game/Warden/Warden.cpp @@ -154,6 +154,11 @@ bool Warden::IsValidCheckSum(uint32 checksum, const uint8* data, const uint16 le } } +bool Warden::IsInitialized() +{ + return _initialized; +} + union keyData { std::array bytes; diff --git a/src/server/game/Warden/Warden.h b/src/server/game/Warden/Warden.h index 0c2d04a00..ba53a54ca 100644 --- a/src/server/game/Warden/Warden.h +++ b/src/server/game/Warden/Warden.h @@ -115,6 +115,7 @@ public: virtual void RequestHash() = 0; virtual void HandleHashResult(ByteBuffer &buff) = 0; virtual bool IsCheckInProgress() = 0; + virtual bool IsInitialized(); virtual void ForceChecks() = 0; virtual void RequestChecks() = 0; virtual void HandleData(ByteBuffer &buff) = 0; diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp index 36175755d..e7536b268 100644 --- a/src/server/game/Warden/WardenWin.cpp +++ b/src/server/game/Warden/WardenWin.cpp @@ -561,189 +561,197 @@ void WardenWin::RequestChecks() void WardenWin::HandleData(ByteBuffer& buff) { - if (!_interrupted) + LOG_DEBUG("warden", "Handle data"); + + _dataSent = false; + _clientResponseTimer = 0; + + uint16 Length; + buff >> Length; + uint32 Checksum; + buff >> Checksum; + + if (Length != (buff.size() - buff.rpos())) { - LOG_DEBUG("warden", "Handle data"); + buff.rfinish(); - _dataSent = false; - _clientResponseTimer = 0; - - uint16 Length; - buff >> Length; - uint32 Checksum; - buff >> Checksum; - - if (Length != (buff.size() - buff.rpos())) + if (!_interrupted) { - buff.rfinish(); ApplyPenalty(0, "Failed size checks in HandleData"); - return; } - if (!IsValidCheckSum(Checksum, buff.contents() + buff.rpos(), Length)) + return; + } + + if (!IsValidCheckSum(Checksum, buff.contents() + buff.rpos(), Length)) + { + buff.rpos(buff.wpos()); + LOG_DEBUG("warden", "CHECKSUM FAIL"); + + if (!_interrupted) { - buff.rpos(buff.wpos()); - LOG_DEBUG("warden", "CHECKSUM FAIL"); ApplyPenalty(0, "Failed checksum in HandleData"); + } + + return; + } + + // TIMING_CHECK + { + uint8 result; + buff >> result; + /// @todo: test it. + if (result == 0x00) + { + LOG_DEBUG("warden", "TIMING CHECK FAIL result 0x00"); + // ApplyPenalty(0, "TIMING CHECK FAIL result"); Commented out because of too many false postives. Mostly caused by client stutter. return; } - // TIMING_CHECK + uint32 newClientTicks; + buff >> newClientTicks; + + uint32 ticksNow = GameTime::GetGameTimeMS().count(); + uint32 ourTicks = newClientTicks + (ticksNow - _serverTicks); + + LOG_DEBUG("warden", "ServerTicks {}", ticksNow); // Now + LOG_DEBUG("warden", "RequestTicks {}", _serverTicks); // At request + LOG_DEBUG("warden", "Ticks {}", newClientTicks); // At response + LOG_DEBUG("warden", "Ticks diff {}", ourTicks - newClientTicks); + } + + uint16 checkFailed = 0; + + for (uint16 const checkId : _CurrentChecks) + { + WardenCheck const* rd = sWardenCheckMgr->GetWardenDataById(checkId); + + // Custom payload should be loaded in if equal to over offset. + if (!rd && checkId >= WardenPayloadMgr::WardenPayloadOffsetMin) { - uint8 result; - buff >> result; - /// @todo: test it. - if (result == 0x00) - { - LOG_DEBUG("warden", "TIMING CHECK FAIL result 0x00"); - // ApplyPenalty(0, "TIMING CHECK FAIL result"); Commented out because of too many false postives. Mostly caused by client stutter. - return; - } - - uint32 newClientTicks; - buff >> newClientTicks; - - uint32 ticksNow = GameTime::GetGameTimeMS().count(); - uint32 ourTicks = newClientTicks + (ticksNow - _serverTicks); - - LOG_DEBUG("warden", "ServerTicks {}", ticksNow); // Now - LOG_DEBUG("warden", "RequestTicks {}", _serverTicks); // At request - LOG_DEBUG("warden", "Ticks {}", newClientTicks); // At response - LOG_DEBUG("warden", "Ticks diff {}", ourTicks - newClientTicks); + rd = &_payloadMgr.CachedChecks.at(checkId); } - uint16 checkFailed = 0; - - for (uint16 const checkId : _CurrentChecks) + uint8 const type = rd->Type; + switch (type) { - WardenCheck const* rd = sWardenCheckMgr->GetWardenDataById(checkId); + case MEM_CHECK: + { + uint8 Mem_Result; + buff >> Mem_Result; - // Custom payload should be loaded in if equal to over offset. - if (!rd && checkId >= WardenPayloadMgr::WardenPayloadOffsetMin) + if (Mem_Result != 0) { - rd = &_payloadMgr.CachedChecks.at(checkId); + LOG_DEBUG("warden", "RESULT MEM_CHECK not 0x00, CheckId {} account Id {}", checkId, _session->GetAccountId()); + checkFailed = checkId; + continue; } - uint8 const type = rd->Type; - switch (type) + WardenCheckResult const* rs = sWardenCheckMgr->GetWardenResultById(checkId); + + std::vector result = rs->Result.ToByteVector(0, false); + if (memcmp(buff.contents() + buff.rpos(), result.data(), rd->Length) != 0) { - case MEM_CHECK: - { - uint8 Mem_Result; - buff >> Mem_Result; - - if (Mem_Result != 0) - { - LOG_DEBUG("warden", "RESULT MEM_CHECK not 0x00, CheckId {} account Id {}", checkId, _session->GetAccountId()); - checkFailed = checkId; - continue; - } - - WardenCheckResult const* rs = sWardenCheckMgr->GetWardenResultById(checkId); - - std::vector result = rs->Result.ToByteVector(0, false); - if (memcmp(buff.contents() + buff.rpos(), result.data(), rd->Length) != 0) - { - LOG_DEBUG("warden", "RESULT MEM_CHECK fail CheckId {} account Id {}", checkId, _session->GetAccountId()); - checkFailed = checkId; - buff.rpos(buff.rpos() + rd->Length); - continue; - } - + LOG_DEBUG("warden", "RESULT MEM_CHECK fail CheckId {} account Id {}", checkId, _session->GetAccountId()); + checkFailed = checkId; buff.rpos(buff.rpos() + rd->Length); - LOG_DEBUG("warden", "RESULT MEM_CHECK passed CheckId {} account Id {}", checkId, _session->GetAccountId()); - break; + continue; } - case PAGE_CHECK_A: - case PAGE_CHECK_B: - case DRIVER_CHECK: - case MODULE_CHECK: + + buff.rpos(buff.rpos() + rd->Length); + LOG_DEBUG("warden", "RESULT MEM_CHECK passed CheckId {} account Id {}", checkId, _session->GetAccountId()); + break; + } + case PAGE_CHECK_A: + case PAGE_CHECK_B: + case DRIVER_CHECK: + case MODULE_CHECK: + { + uint8 const byte = 0xE9; + if (memcmp(buff.contents() + buff.rpos(), &byte, sizeof(uint8)) != 0) { - uint8 const byte = 0xE9; - if (memcmp(buff.contents() + buff.rpos(), &byte, sizeof(uint8)) != 0) - { - if (type == PAGE_CHECK_A || type == PAGE_CHECK_B) - { - LOG_DEBUG("warden", "RESULT PAGE_CHECK fail, CheckId {} account Id {}", checkId, _session->GetAccountId()); - } - - if (type == MODULE_CHECK) - { - LOG_DEBUG("warden", "RESULT MODULE_CHECK fail, CheckId {} account Id {}", checkId, _session->GetAccountId()); - } - - if (type == DRIVER_CHECK) - { - LOG_DEBUG("warden", "RESULT DRIVER_CHECK fail, CheckId {} account Id {}", checkId, _session->GetAccountId()); - } - - checkFailed = checkId; - buff.rpos(buff.rpos() + 1); - continue; - } - - buff.rpos(buff.rpos() + 1); - if (type == PAGE_CHECK_A || type == PAGE_CHECK_B) { - LOG_DEBUG("warden", "RESULT PAGE_CHECK passed CheckId {} account Id {}", checkId, _session->GetAccountId()); + LOG_DEBUG("warden", "RESULT PAGE_CHECK fail, CheckId {} account Id {}", checkId, _session->GetAccountId()); } - else if (type == MODULE_CHECK) + + if (type == MODULE_CHECK) { - LOG_DEBUG("warden", "RESULT MODULE_CHECK passed CheckId {} account Id {}", checkId, _session->GetAccountId()); + LOG_DEBUG("warden", "RESULT MODULE_CHECK fail, CheckId {} account Id {}", checkId, _session->GetAccountId()); } - else if (type == DRIVER_CHECK) + + if (type == DRIVER_CHECK) { - LOG_DEBUG("warden", "RESULT DRIVER_CHECK passed CheckId {} account Id {}", checkId, _session->GetAccountId()); + LOG_DEBUG("warden", "RESULT DRIVER_CHECK fail, CheckId {} account Id {}", checkId, _session->GetAccountId()); } - break; + + checkFailed = checkId; + buff.rpos(buff.rpos() + 1); + continue; } - case LUA_EVAL_CHECK: + + buff.rpos(buff.rpos() + 1); + + if (type == PAGE_CHECK_A || type == PAGE_CHECK_B) { - uint8 const result = buff.read(); - - if (result == 0) - { - buff.read_skip(buff.read()); // discard attached string - } - - LOG_DEBUG("warden", "LUA_EVAL_CHECK CheckId {} account Id {} got in-warden dummy response", checkId, _session->GetAccountId()/* , result */); - break; + LOG_DEBUG("warden", "RESULT PAGE_CHECK passed CheckId {} account Id {}", checkId, _session->GetAccountId()); } - case MPQ_CHECK: + else if (type == MODULE_CHECK) { - uint8 Mpq_Result; - buff >> Mpq_Result; - - if (Mpq_Result != 0) - { - LOG_DEBUG("warden", "RESULT MPQ_CHECK not 0x00 account id {}", _session->GetAccountId()); - checkFailed = checkId; - continue; - } - - WardenCheckResult const* rs = sWardenCheckMgr->GetWardenResultById(checkId); - if (memcmp(buff.contents() + buff.rpos(), rs->Result.ToByteArray<20>(false).data(), Acore::Crypto::Constants::SHA1_DIGEST_LENGTH_BYTES) != 0) // SHA1 - { - LOG_DEBUG("warden", "RESULT MPQ_CHECK fail, CheckId {} account Id {}", checkId, _session->GetAccountId()); - checkFailed = checkId; - buff.rpos(buff.rpos() + Acore::Crypto::Constants::SHA1_DIGEST_LENGTH_BYTES); // 20 bytes SHA1 - continue; - } - - buff.rpos(buff.rpos() + Acore::Crypto::Constants::SHA1_DIGEST_LENGTH_BYTES); // 20 bytes SHA1 - LOG_DEBUG("warden", "RESULT MPQ_CHECK passed, CheckId {} account Id {}", checkId, _session->GetAccountId()); - break; + LOG_DEBUG("warden", "RESULT MODULE_CHECK passed CheckId {} account Id {}", checkId, _session->GetAccountId()); } + else if (type == DRIVER_CHECK) + { + LOG_DEBUG("warden", "RESULT DRIVER_CHECK passed CheckId {} account Id {}", checkId, _session->GetAccountId()); } + break; } - - if (checkFailed > 0) + case LUA_EVAL_CHECK: { - ApplyPenalty(checkFailed, ""); + uint8 const result = buff.read(); + + if (result == 0) + { + buff.read_skip(buff.read()); // discard attached string + } + + LOG_DEBUG("warden", "LUA_EVAL_CHECK CheckId {} account Id {} got in-warden dummy response", checkId, _session->GetAccountId()/* , result */); + break; + } + case MPQ_CHECK: + { + uint8 Mpq_Result; + buff >> Mpq_Result; + + if (Mpq_Result != 0) + { + LOG_DEBUG("warden", "RESULT MPQ_CHECK not 0x00 account id {}", _session->GetAccountId()); + checkFailed = checkId; + continue; + } + + WardenCheckResult const* rs = sWardenCheckMgr->GetWardenResultById(checkId); + if (memcmp(buff.contents() + buff.rpos(), rs->Result.ToByteArray<20>(false).data(), Acore::Crypto::Constants::SHA1_DIGEST_LENGTH_BYTES) != 0) // SHA1 + { + LOG_DEBUG("warden", "RESULT MPQ_CHECK fail, CheckId {} account Id {}", checkId, _session->GetAccountId()); + checkFailed = checkId; + buff.rpos(buff.rpos() + Acore::Crypto::Constants::SHA1_DIGEST_LENGTH_BYTES); // 20 bytes SHA1 + continue; + } + + buff.rpos(buff.rpos() + Acore::Crypto::Constants::SHA1_DIGEST_LENGTH_BYTES); // 20 bytes SHA1 + LOG_DEBUG("warden", "RESULT MPQ_CHECK passed, CheckId {} account Id {}", checkId, _session->GetAccountId()); + break; + } } } - else + + if (checkFailed > 0 && !_interrupted) + { + ApplyPenalty(checkFailed, ""); + } + + if (_interrupted) { LOG_DEBUG("warden", "Warden was interrupted by ForceChecks, ignoring results."); From 5f1bb8d5504abf1f382bd3c2b0d00774e053bb90 Mon Sep 17 00:00:00 2001 From: ICXCNIKA <84076297+ohkasdasf@users.noreply.github.com> Date: Thu, 9 Mar 2023 17:26:44 +0100 Subject: [PATCH 082/159] fix(DB/Locale): deDE fixes for request items 1/3 (#15306) --- data/sql/updates/pending_db_world/qril01.sql | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 data/sql/updates/pending_db_world/qril01.sql diff --git a/data/sql/updates/pending_db_world/qril01.sql b/data/sql/updates/pending_db_world/qril01.sql new file mode 100644 index 000000000..b991504d1 --- /dev/null +++ b/data/sql/updates/pending_db_world/qril01.sql @@ -0,0 +1,27 @@ +DELETE FROM `quest_request_items_locale` WHERE `ID` IN (12, 17, 33, 57, 67, 99, 104, 109, 111, 113, 163, 188, 190, 193, 203, 257, 258, 267, 269, 275, 276, 286, 294, 295, 296) AND `locale` = 'deDE'; +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(12, 'deDE', 'Vielleicht habe ich mich nicht klar genug ausgedrückt, $GKandidat:Kandidatin;. Um Euren Wert als $GDiener:Dienerin; der Volksmiliz und $GDiener:Dienerin; des Lichtes zu beweisen, müsst Ihr 15 Fallensteller der Defias und 15 Schmuggler der Defias erschlagen und zu mir zurückkehren, sobald Ihr dies getan habt.', 0), +(17, 'deDE', 'Habt Ihr die Magentafunguskappen bekommen, die ich für meine alchimistische Arbeit benötige? Keine Kappen - keine Belohnung!', 0), +(33, 'deDE', 'He, $N, ich kriege langsam Hunger. Habt Ihr das zähe Wolfsfleisch bekommen?', 0), +(57, 'deDE', 'Kehrt zu mir zurück sobald Ihr 15 Skelettscheusale und 15 Skelettschrecken getötet habt, $N.', 0), +(67, 'deDE', NULL, 0), +(99, 'deDE', 'Habt Ihr die Lohenscheitfesseln schon sichergestellt, $N?', 0), +(104, 'deDE', 'Habt Ihr der Bedrohung namens Trübauge dem Alten schon den Garaus gemacht? Er ist gesehen worden, wie er an der Küste von Westfall umherstreifte.$B$BKehrt zu mir zurück, sobald das garstige Ungeheuer tot ist.', 0), +(109, 'deDE', NULL, 0), +(111, 'deDE', NULL, 0), +(113, 'deDE', 'Na, Unterfeldmesser $N, hat der alte Stößelbruch diesen Bericht schon fertig?', 0), +(163, 'deDE', NULL, 0), +(188, 'deDE', 'Wie läuft die Jagd auf Sin\'Dall?', 0), +(190, 'deDE', 'Ein echter Pantherjäger wäre jetzt da draußen und würde seiner Beute nachstellen. Zeigt etwas Engagement, $C, und macht, dass Ihr wieder ins Feld kommt.', 0), +(193, 'deDE', 'Bhag\'thera ist oft so gut wie unauffindbar. Wie läuft die Jagd?', 0), +(203, 'deDE', 'Ich hoffe, Ihr wart erfolgreich, $N. Ohne Eure Hilfe können wir gegen Kurzen nicht lange durchhalten.', 0), +(257, 'deDE', 'Kein Glück gehabt? Macht Euch nix draus, $Ner…$B$BNicht jeder kann so gut sein wie ich.', 0), +(258, 'deDE', 'Es ist ganz normal, dass man sich selbst bemitleidet, wenn man sich vor jemandem blamiert, der so viel jünger ist als man selbst. Macht Euch nichts draus, $Nah…$B$BWie? Hab ich mir Euren Namen falsch gemerkt?', 0), +(267, 'deDE', 'Könnt Ihr mir 8 Troggsteinzähne zeigen? Wenn nicht, dann habt Ihr immer noch etwas zu erledigen, $N.', 0), +(269, 'deDE', 'Ruht Euch erst einmal aus, $GBruder:Schwester;. Ich sehe Euch an, dass Ihr weit gereist seid und eine schwere Bürde tragt. Könnt Ihr mir erzählen, was diesen dunklen Schatten über Euch wirft?', 0), +(275, 'deDE', 'Das Sumpfland weint noch, und die Moorkrabbler wüten noch. Kommt zurück, wenn Eure Aufgabe erledigt ist.', 0), +(276, 'deDE', 'Eure Aufgabe steht noch an, $Gjunger:junge; $C.', 0), +(286, 'deDE', 'Habt Ihr die Statuette?', 0), +(294, 'deDE', 'Tötet 10 Scheckige Raptoren und 10 Scheckige Kreischer, $N. Meine Mitarbeiter haben das Schicksal nicht verdient, das ihnen zuteil wurde. Es ist Zeit die Rechnung zu begleichen.', 0), +(295, 'deDE', 'Ich will, dass diese Scheckigen Sensenklauen und Scheckigen Scharfzähne für ihre Taten bezahlen. Habt Ihr schon 10 von beiden getötet?', 0), +(296, 'deDE', 'Ist Sarlatan tot? Seid Ihr dem Andenken der Gefallenen gerecht geworden?', 0); From 643c032f4e93bbdcc243e40c44402972068602cb Mon Sep 17 00:00:00 2001 From: ICXCNIKA <84076297+ohkasdasf@users.noreply.github.com> Date: Thu, 9 Mar 2023 17:27:19 +0100 Subject: [PATCH 083/159] fix(DB/Locale): deDE fixes for request items 2/3 (#15307) --- data/sql/updates/pending_db_world/qril02.sql | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 data/sql/updates/pending_db_world/qril02.sql diff --git a/data/sql/updates/pending_db_world/qril02.sql b/data/sql/updates/pending_db_world/qril02.sql new file mode 100644 index 000000000..7a715b347 --- /dev/null +++ b/data/sql/updates/pending_db_world/qril02.sql @@ -0,0 +1,28 @@ +DELETE FROM `quest_request_items_locale` WHERE `ID` IN (306, 310, 312, 313, 319, 332, 335, 347, 353, 370, 371, 372, 374, 378, 379, 380, 384, 385, 404, 409, 410, 412, 421, 427, 429, 433) AND `locale` = 'deDE'; +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(306, 'deDE', 'Habt Ihr Merrin gefunden? Hat sie eine Nachricht geschickt?', 0), +(310, 'deDE', 'Die Datumsangabe auf diesem Fass legt nahe, dass es demnächst angestochen werden wird.', 0), +(312, 'deDE', 'Habt Ihr es geschafft, an den Inhalt meiner Fleischtruhe ranzukommen, $N?', 0), +(313, 'deDE', 'He, $N. Wart Ihr schon im Graufelsbau? Diese Wendigos können ziemlich heftig sein.', 0), +(319, 'deDE', 'Habt Ihr Euch um die wilden Tiere gekümmert?', 0), +(332, 'deDE', 'Seid gegrüßt und fühlt Euch willkommen, $Gedler Herr:edle Dame;. Habt Ihr schon einmal einen unserer ausgezeichneten Weine versucht?', 0), +(335, 'deDE', 'Wischock wird bald genug Unterstützung haben, um uns jede Menge Ärger zu machen. Habt Ihr es endlich geschafft, Euch die Tilloaträne oder die Bisamwurzel anzueignen?', 0), +(347, 'deDE', 'Habt Ihr das Rethbanerz?', 0), +(353, 'deDE', 'Ihr seid den ganzen weiten Weg von Sturmwind gekommen? Ich habe gehört, es wird da unten in den Menschenlanden dank herumlaufender Briganten und Orcs etwas brenzlig. An einem solchen Ort kann $Gein:eine; $C sich perfekt beweisen!', 0), +(370, 'deDE', '$GJunger:Junge; $C, Ihr solltet Eure Zeit nicht hier in Brill vergeuden, wenn Euer Volk Euch im Kampf für ihre Sache braucht. Nun, nehmt die Waffen in die Hand und reist nach Südwesten, zum verfallenen Turm, und tötet Hauptmann Perrine zusammen mit 3 Scharlachroten Zeloten und 3 Scharlachroten Missionaren. Wir werden den Scharlachroten Kreuzzug wie Vieh zum Schlachter treiben.', 0), +(371, 'deDE', 'Wie ich sehe, seid Ihr zurückgekehrt, aber Eure Aufgabe ist noch nicht erfüllt. Vielleicht ist es Euch ja recht, dass die Menschen den Plan der Dunklen Fürstin durchkreuzen? Oder aber Ihr folgt dem Ruf der Pflicht und tötet Hauptmann Vachon und seine Bande von Scharlachroten Ordensmitgliedern!', 0), +(372, 'deDE', 'Ihr habt Eure Pflicht noch nicht erfüllt, $C. Wir können nicht erwarten, dass wir den Plan der Dunklen Fürstin ausführen, wenn der Scharlachrote Kreuzzug unsere Soldaten bedrängt. Bringt ihren Tod herbei und erfüllt Eure Pflicht gegenüber Sylvanas!', 0), +(374, 'deDE', 'Habt Ihr bereits 10 Scharlachrote Insignienringe gesammelt, $C?', 0), +(378, 'deDE', 'Ich werde nicht zulassen, dass närrische Menschen-Bürokratie zwergischen Angelegenheiten in die Quere kommt, $N. Kam Tiefenzorn ist erwiesenermaßen einer der Verschwörer des Angriffs auf den Thandolübergang. König Magnis gute Gefolgsleute ließen dank Tiefenzorns Verrat ihr Leben. Den Menschen mag es genug sein, Tiefenzorn im Verlies verrotten zu lassen, aber ich werde nicht mehr ruhig schlafen, bis Tiefenzorn erschlagen ist.', 0), +(379, 'deDE', 'Na, haben die Nomaden Euch die Wasserbeutel "freiwillig" gegeben?', 0), +(380, 'deDE', 'Nehmt Euch vor dem Gift der Spinnen in Acht, $N. Wenn Ihr ein starkes Brennen spürt, solltet Ihr es untersuchen lassen.', 0), +(384, 'deDE', 'Ich werde sechs Klippeneberrippchen und einen Krug Rhapsodiemalz benötigen, $N.', 0), +(385, 'deDE', 'Hab ich Euch eigentlich erzählt, wie ich damals beinahe meine Hand an einen der Kroks verloren hätte? Ein übles Viech war das, mit Zähnen wie Messer. Aber ich hatte Glück... Hab dem Monster mit meinem Messer das Maul gestopft. Ich habe das Messer sogar noch irgendwo herumliegen...', 0), +(404, 'deDE', 'Habt Ihr die Aufgabe erledigt, die ich Euch auftrug? Habt Ihr die Eitrigen Klauen?', 0), +(409, 'deDE', 'Ich erwarte Euren Treuebeweis, $C.', 0), +(410, 'deDE', 'Dies ist ein alter, abgewetzter, blutiger Tisch.', 0), +(412, 'deDE', 'Der Rekombobulator wird laufen wie geschmiert, sobald wir ausreichend Restabilisationszahnräder und Gyromechanische Getriebeteile haben.', 0), +(421, 'deDE', 'Wenn Ihr Euch mir gegenüber beweisen wollt, müsst Ihr 5 Weißskalpe des Mondzorns töten. Erfüllt diese Aufgabe und ich werde dafür sorgen, dass Eure Fähigkeiten für würdigere Aufgaben eingesetzt werden.', 0), +(427, 'deDE', 'Wenn Ihr der Dunklen Fürstin Euren Wert beweisen wollt, müsst Ihr 10 Scharlachrote Krieger töten, $C.', 0), +(429, 'deDE', 'Meine Zeit ist knapp, $C, denn die Dunkle Fürstin hat mich mit einer wichtigen Aufgabe betraut.', 0), +(433, 'deDE', 'Wenn wir die Troggs vom Steinbruch von Gol\'Bolar entfernen können, wäre das der Erste von vielen Schritten, die wir unternehmen müssen, um uns von dieser Bedrohung zu befreien.', 0); From 2d02e196482bdfd30c2f0d58958fe1b46b1cf6a4 Mon Sep 17 00:00:00 2001 From: ICXCNIKA <84076297+ohkasdasf@users.noreply.github.com> Date: Thu, 9 Mar 2023 17:27:49 +0100 Subject: [PATCH 084/159] fix(DB/Locale): deDE fixes for request items 3/3 (#15308) --- data/sql/updates/pending_db_world/qril03.sql | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 data/sql/updates/pending_db_world/qril03.sql diff --git a/data/sql/updates/pending_db_world/qril03.sql b/data/sql/updates/pending_db_world/qril03.sql new file mode 100644 index 000000000..406cb0a4d --- /dev/null +++ b/data/sql/updates/pending_db_world/qril03.sql @@ -0,0 +1,28 @@ +DELETE FROM `quest_request_items_locale` WHERE `ID` IN (455, 457, 470, 471, 487, 488, 498, 501, 509, 513, 516, 518, 526, 527, 528, 531, 541, 545, 549, 567, 569, 574, 575, 579, 593, 598) AND `locale` = 'deDE'; +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(455, 'deDE', 'Ihr kommt vom Loch Modan? Wie sieht es mit den Orcs beim Algaztor aus?', 0), +(457, 'deDE', 'Eure Aufgabe ist noch nicht erfüllt, $N. Kehrt zu mir zurück, wenn 5 Räudige Nachtsäbler und 5 Disteleber getötet wurden.', 0), +(470, 'deDE', 'Habt Ihr meine Tasche gefunden?', 0), +(471, 'deDE', 'Mein Lehrling ist wie ein Sohn für mich. Wird hart für ihn sein, sein Leben mit nur einem Bein zu fristen.$B$BAh, $N, wie läuft\'s? Habt Ihr meine Häute?', 0), +(487, 'deDE', 'Die Straße ist noch immer nicht sicher, $C. Kehrt um und erschlagt 6 Wegelagerer der Knarzklauen und kommt zu mir zurück.', 0), +(488, 'deDE', 'Ihr wart also ein fleißiges Bienchen, $N? Ich habe darauf gewartet, dass Ihr mir das bringt, was ich benötige.', 0), +(498, 'deDE', 'Ihr müsst Euch beeilen, $C. Mich schaudert es bei dem Gedanken, was die Menschen Drull und Tog\'thar antun könnten.', 0), +(501, 'deDE', 'Ich erinnere mich an Euch, $N. Ihr wolltet mir dabei helfen mein neuestes Elixier zu brauen. Das Blut brauche ich, um den Einwohnern des Hügellands mein höchsteigenes, hausgemachtes Spezial-Elend zu präsentieren.', 0), +(509, 'deDE', 'Hattet Ihr Erfolg in der Nethandersiedlung?', 0), +(513, 'deDE', 'Könnt Ihr nicht sehen, $C, dass ich beschäftigt bin? Die Dunkle Fürstin besteht auf einer neuen Pest, bevor die Vorhut der Geißel aus Nordend uns überwältigt. Und dann noch die menschliche Bedrohung aus dem Süden. Meine Zeit ist im Augenblick sehr wertvoll. Es ist hoffentlich von Bedeutung!', 0), +(516, 'deDE', 'Habt Ihr ihr Lager bereits entdeckt? Die Zeit drängt!', 0), +(518, 'deDE', 'Ich stelle fest, dass Eure Aufgabe unvollendet ist, $N. Soll ich Sharlindra über Eure Unfähigkeit informieren?', 0), +(526, 'deDE', 'Habt Ihr das Lichtgeschmiedete Eisen gefunden, das Ihr braucht?', 0), +(527, 'deDE', 'Als Hochexekutorin von Tarrens Mühle, die unter dem direkten Befehl von Varimathras und der Dunklen Fürstin steht, müsst Ihr meinem Befehl folgen.$B$BVielleicht nehmt Ihr diesen Krieg mit der Allianz auf die leichte Schulter? Wenn das der Fall ist, sollte ich Euch hier und jetzt enthaupten. Andernfalls reist nach Westen zu den Feldern des Hügellands und führt den Kampf gegen die Menschen, wie befohlen.$B$BWegtreten.', 0), +(528, 'deDE', 'Ihr habt Eure Befehle, $C. Hört auf, hier in Tarrens Mühle zu trödeln, wenn es anderswo Arbeit zu erledigen gibt.', 0), +(531, 'deDE', 'Sehr gute Arbeit, $N! Wir habens ihm wirklich gezeigt! Hier, gebt mir den Kopf, ich werde mich darum kümmern.', 0), +(541, 'deDE', 'Dun Garok erweist sich als ein zu großes Hindernis für Euch, $C? Und ich dachte, Ihr hättet Euch im Hügelland tapfer behauptet.$B$BWenn Ihr der Euch zugewiesenen Aufgabe nicht gewachsen seid, werde ich jemand anderes finden, der bessere Ergebnisse erzielen kann. Was Euch betrifft, so bin ich mir sicher, dass die Dunkle Fürstin in Tirisfal immer mehr Totengräber gebrauchen kann.', 0), +(545, 'deDE', 'Habt Ihr die Patrouillen von Dalaran an den Ruinen bereits ausgedünnt?', 0), +(549, 'deDE', 'Habt Ihr nichts Besseres zu tun, als hier vor mir zu stehen, $C? Als Hochexekutorin habe ich Dringenderes zu tun, als Eure verrottende Visage anzustarren.', 0), +(567, 'deDE', 'Ja?', 0), +(569, 'deDE', 'Habt Ihr schon Fortschritte bei den Ogern in den Ruinen von Mizjah gemacht, $C?', 0), +(574, 'deDE', 'Unteroffizier Yohwa sagte mir, dass Ihr geschickt und mutig seid, $C. Habt Ihr etwas zu berichten?', 0), +(575, 'deDE', 'Meine Ausrüstung ist startklar, $N, ich warte nur noch auf die Häute. Wir wollen Quizvox ja nicht warten lassen.$B$BEs ist für niemanden gut, wenn der Cheferfinder des Tüftlerverbands unzufrieden ist.', 18019), +(579, 'deDE', 'König Varian betrachtet Lernen als sehr wichtig und hat daher Geld zur Verfügung gestellt, damit verschiedene Folianten und Schriften kopiert und für die Öffentlichkeit zugänglich gemacht werden können. Es ist ganz einfach, Ihr bringt mir einen Bibliotheksschein, und ich gebe Euch ein Exemplar eines der verfügbaren Bücher.', 0), +(593, 'deDE', 'Yenniku steht betäubt vor Euch, sein Geist an einem anderen Ort...', 0), +(598, 'deDE', 'Die Schädelspalter werden den Tag verdammen, an dem sie uns den Krieg erklärten! Ist Eure Aufgabe erfüllt?', 0); From 159ec2bdd0e465303dfccac8c88e74f05773457e Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Thu, 9 Mar 2023 13:28:21 -0300 Subject: [PATCH 085/159] fix(DB/Creature): Pool Ethereum Jailor (#15289) --- .../rev_1678050182254364700.sql | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678050182254364700.sql diff --git a/data/sql/updates/pending_db_world/rev_1678050182254364700.sql b/data/sql/updates/pending_db_world/rev_1678050182254364700.sql new file mode 100644 index 000000000..bc56f8e7f --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678050182254364700.sql @@ -0,0 +1,30 @@ +-- +UPDATE `creature` SET `spawntimesecs`=900, `wander_distance`=10, `MovementType`=1 WHERE `id1`=23008; + +DELETE FROM `pool_template` WHERE `entry`=109 AND `description`='Ethereum Jailor (23008)'; +INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES +(109, 2, 'Ethereum Jailor (23008)'); + +DELETE FROM `pool_creature` WHERE `pool_entry`=109 AND `description`='Ethereum Jailor (23008)'; +INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALUES +(1975937, 109, 0, 'Ethereum Jailor (23008)'), +(1975938, 109, 0, 'Ethereum Jailor (23008)'), +(1975939, 109, 0, 'Ethereum Jailor (23008)'), +(1975940, 109, 0, 'Ethereum Jailor (23008)'), +(1975941, 109, 0, 'Ethereum Jailor (23008)'), +(1975942, 109, 0, 'Ethereum Jailor (23008)'), +(1975943, 109, 0, 'Ethereum Jailor (23008)'), +(1975944, 109, 0, 'Ethereum Jailor (23008)'), +(1975945, 109, 0, 'Ethereum Jailor (23008)'), +(1975946, 109, 0, 'Ethereum Jailor (23008)'), +(1975947, 109, 0, 'Ethereum Jailor (23008)'), +(1975948, 109, 0, 'Ethereum Jailor (23008)'), +(1975949, 109, 0, 'Ethereum Jailor (23008)'), +(1975950, 109, 0, 'Ethereum Jailor (23008)'), +(1975951, 109, 0, 'Ethereum Jailor (23008)'), +(1975952, 109, 0, 'Ethereum Jailor (23008)'), +(1975953, 109, 0, 'Ethereum Jailor (23008)'), +(1975954, 109, 0, 'Ethereum Jailor (23008)'), +(1975955, 109, 0, 'Ethereum Jailor (23008)'), +(1975956, 109, 0, 'Ethereum Jailor (23008)'), +(1975957, 109, 0, 'Ethereum Jailor (23008)'); From bda4394cee23c27d4f7ffd49afd6db69c96339c9 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Thu, 9 Mar 2023 16:30:49 +0000 Subject: [PATCH 086/159] chore(DB): import pending files Referenced commit(s): 159ec2bdd0e465303dfccac8c88e74f05773457e --- .../{pending_db_world/qril01.sql => db_world/2023_03_09_01.sql} | 1 + .../{pending_db_world/qril02.sql => db_world/2023_03_09_02.sql} | 1 + .../{pending_db_world/qril03.sql => db_world/2023_03_09_03.sql} | 1 + .../rev_1678050182254364700.sql => db_world/2023_03_09_04.sql} | 1 + 4 files changed, 4 insertions(+) rename data/sql/updates/{pending_db_world/qril01.sql => db_world/2023_03_09_01.sql} (98%) rename data/sql/updates/{pending_db_world/qril02.sql => db_world/2023_03_09_02.sql} (99%) rename data/sql/updates/{pending_db_world/qril03.sql => db_world/2023_03_09_03.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1678050182254364700.sql => db_world/2023_03_09_04.sql} (97%) diff --git a/data/sql/updates/pending_db_world/qril01.sql b/data/sql/updates/db_world/2023_03_09_01.sql similarity index 98% rename from data/sql/updates/pending_db_world/qril01.sql rename to data/sql/updates/db_world/2023_03_09_01.sql index b991504d1..960c12eda 100644 --- a/data/sql/updates/pending_db_world/qril01.sql +++ b/data/sql/updates/db_world/2023_03_09_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_09_00 -> 2023_03_09_01 DELETE FROM `quest_request_items_locale` WHERE `ID` IN (12, 17, 33, 57, 67, 99, 104, 109, 111, 113, 163, 188, 190, 193, 203, 257, 258, 267, 269, 275, 276, 286, 294, 295, 296) AND `locale` = 'deDE'; INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES (12, 'deDE', 'Vielleicht habe ich mich nicht klar genug ausgedrückt, $GKandidat:Kandidatin;. Um Euren Wert als $GDiener:Dienerin; der Volksmiliz und $GDiener:Dienerin; des Lichtes zu beweisen, müsst Ihr 15 Fallensteller der Defias und 15 Schmuggler der Defias erschlagen und zu mir zurückkehren, sobald Ihr dies getan habt.', 0), diff --git a/data/sql/updates/pending_db_world/qril02.sql b/data/sql/updates/db_world/2023_03_09_02.sql similarity index 99% rename from data/sql/updates/pending_db_world/qril02.sql rename to data/sql/updates/db_world/2023_03_09_02.sql index 7a715b347..1a244d4e2 100644 --- a/data/sql/updates/pending_db_world/qril02.sql +++ b/data/sql/updates/db_world/2023_03_09_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_09_01 -> 2023_03_09_02 DELETE FROM `quest_request_items_locale` WHERE `ID` IN (306, 310, 312, 313, 319, 332, 335, 347, 353, 370, 371, 372, 374, 378, 379, 380, 384, 385, 404, 409, 410, 412, 421, 427, 429, 433) AND `locale` = 'deDE'; INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES (306, 'deDE', 'Habt Ihr Merrin gefunden? Hat sie eine Nachricht geschickt?', 0), diff --git a/data/sql/updates/pending_db_world/qril03.sql b/data/sql/updates/db_world/2023_03_09_03.sql similarity index 99% rename from data/sql/updates/pending_db_world/qril03.sql rename to data/sql/updates/db_world/2023_03_09_03.sql index 406cb0a4d..6d8cb7b13 100644 --- a/data/sql/updates/pending_db_world/qril03.sql +++ b/data/sql/updates/db_world/2023_03_09_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_09_02 -> 2023_03_09_03 DELETE FROM `quest_request_items_locale` WHERE `ID` IN (455, 457, 470, 471, 487, 488, 498, 501, 509, 513, 516, 518, 526, 527, 528, 531, 541, 545, 549, 567, 569, 574, 575, 579, 593, 598) AND `locale` = 'deDE'; INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES (455, 'deDE', 'Ihr kommt vom Loch Modan? Wie sieht es mit den Orcs beim Algaztor aus?', 0), diff --git a/data/sql/updates/pending_db_world/rev_1678050182254364700.sql b/data/sql/updates/db_world/2023_03_09_04.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1678050182254364700.sql rename to data/sql/updates/db_world/2023_03_09_04.sql index bc56f8e7f..9dd77c3dc 100644 --- a/data/sql/updates/pending_db_world/rev_1678050182254364700.sql +++ b/data/sql/updates/db_world/2023_03_09_04.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_09_03 -> 2023_03_09_04 -- UPDATE `creature` SET `spawntimesecs`=900, `wander_distance`=10, `MovementType`=1 WHERE `id1`=23008; From 67d02d4f1e89196dc44612ff24cd6a492b84e173 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Fri, 10 Mar 2023 14:32:18 -0300 Subject: [PATCH 087/159] =?UTF-8?q?refactor(Scripts/BlackMorass):=20Move?= =?UTF-8?q?=20the=20Rift=20handling=20to=20the=20creature=E2=80=A6=20(#153?= =?UTF-8?q?16)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TheBlackMorass/boss_aeonus.cpp | 2 + .../instance_the_black_morass.cpp | 53 +-------------- .../TheBlackMorass/the_black_morass.cpp | 66 ++++++++++++++----- .../TheBlackMorass/the_black_morass.h | 2 +- 4 files changed, 52 insertions(+), 71 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp index 410b32ca1..e8c9a2ce9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp @@ -55,6 +55,8 @@ struct boss_aeonus : public BossAI { Talk(SAY_ENTER); + me->SetReactState(REACT_DEFENSIVE); + if (Creature* medivh = instance->GetCreature(DATA_MEDIVH)) { me->SetHomePosition(medivh->GetPositionX() + 14.0f * cos(medivh->GetAngle(me)), medivh->GetPositionY() + 14.0f * std::sin(medivh->GetAngle(me)), medivh->GetPositionZ(), me->GetAngle(medivh)); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index 762df4d07..62ecd0c15 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -171,13 +171,7 @@ public: DoUpdateWorldState(WORLD_STATE_BM_RIFT, ++_currentRift); - if (Creature* rift = instance->SummonCreature(NPC_TIME_RIFT, spawnPos)) - { - _scheduler.Schedule(6s, [this, rift](TaskContext) - { - SummonPortalKeeper(rift); - }); - } + instance->SummonCreature(NPC_TIME_RIFT, spawnPos); // Here we check if we have available rift spots. if (_currentRift < 18) @@ -400,51 +394,6 @@ public: return 0; } - void SummonPortalKeeper(Creature* rift) - { - if (!rift) - { - return; - } - - int32 entry = 0; - switch (_currentRift) - { - case 6: - entry = GetBossState(DATA_CHRONO_LORD_DEJA) == DONE ? (instance->IsHeroic() ? NPC_INFINITE_CHRONO_LORD : -NPC_CHRONO_LORD_DEJA) : NPC_CHRONO_LORD_DEJA; - break; - case 12: - entry = GetBossState(DATA_TEMPORUS) == DONE ? (instance->IsHeroic() ? NPC_INFINITE_TIMEREAVER : -NPC_TEMPORUS) : NPC_TEMPORUS; - break; - case 18: - entry = NPC_AEONUS; - break; - default: - entry = RAND(NPC_RIFT_KEEPER_WARLOCK, NPC_RIFT_KEEPER_MAGE, NPC_RIFT_LORD, NPC_RIFT_LORD_2); - break; - } - - Position pos = rift->GetNearPosition(10.0f, 2 * M_PI * rand_norm()); - - if (Creature* summon = rift->SummonCreature(std::abs(entry), pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3 * MINUTE * IN_MILLISECONDS)) - { - if (entry < 0) - { - summon->SetLootMode(0); - } - - if (summon->GetEntry() != NPC_AEONUS) - { - rift->CastSpell(summon, SPELL_RIFT_CHANNEL, false); - } - else - { - summon->SetReactState(REACT_DEFENSIVE); - _scheduler.CancelGroup(CONTEXT_GROUP_RIFTS); - } - } - } - void Update(uint32 diff) override { _scheduler.Update(diff); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index cab4a86c8..02ed5e273 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -245,7 +245,8 @@ private: enum timeRift { EVENT_SUMMON_AT_RIFT = 1, - EVENT_CHECK_DEATH = 2 + EVENT_CHECK_DEATH = 2, + EVENT_SUMMON_BOSS = 3 }; struct npc_time_rift : public NullCreatureAI @@ -257,14 +258,14 @@ struct npc_time_rift : public NullCreatureAI void Reset() override { - if (_instance->GetData(DATA_RIFT_NUMBER) >= 18) + if (_instance->GetData(DATA_RIFT_NUMBER) > 18) { me->DespawnOrUnsummon(30000); return; } - events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 16000); - events.ScheduleEvent(EVENT_CHECK_DEATH, 8000); + events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 16s); + events.ScheduleEvent(EVENT_SUMMON_BOSS, 6s); } void JustSummoned(Creature* creature) override @@ -306,31 +307,60 @@ struct npc_time_rift : public NullCreatureAI } } + void SummonedCreatureDies(Creature* creature, Unit* /*killer*/) override + { + if (creature->GetGUID() == _riftKeeperGUID) + { + me->DespawnOrUnsummon(0); + } + } + void UpdateAI(uint32 diff) override { events.Update(diff); switch (events.ExecuteEvent()) { case EVENT_SUMMON_AT_RIFT: - DoSelectSummon(); - events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 15000); - break; - case EVENT_CHECK_DEATH: - if (!me->HasUnitState(UNIT_STATE_CASTING)) + if (_riftKeeperGUID.GetEntry() != NPC_AEONUS) { - Creature* riftKeeper = ObjectAccessor::GetCreature(*me, _riftKeeperGUID); - if (!riftKeeper || !riftKeeper->IsAlive()) - { - me->DespawnOrUnsummon(0); + DoSelectSummon(); + events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 15000); + } + break; + case EVENT_SUMMON_BOSS: + { + int32 entry = 0; + switch (_instance->GetData(DATA_RIFT_NUMBER)) + { + case 6: + entry = _instance->GetBossState(DATA_CHRONO_LORD_DEJA) == DONE ? (me->GetMap()->IsHeroic() ? NPC_INFINITE_CHRONO_LORD : -NPC_CHRONO_LORD_DEJA) : NPC_CHRONO_LORD_DEJA; break; - } - else + case 12: + entry = _instance->GetBossState(DATA_TEMPORUS) == DONE ? (me->GetMap()->IsHeroic() ? NPC_INFINITE_TIMEREAVER : -NPC_TEMPORUS) : NPC_TEMPORUS; + break; + case 18: + entry = NPC_AEONUS; + break; + default: + entry = RAND(NPC_RIFT_KEEPER_WARLOCK, NPC_RIFT_KEEPER_MAGE, NPC_RIFT_LORD, NPC_RIFT_LORD_2); + break; + } + + Position pos = me->GetNearPosition(10.0f, 2 * M_PI * rand_norm()); + + if (Creature* summon = me->SummonCreature(std::abs(entry), pos, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 3 * MINUTE * IN_MILLISECONDS)) + { + if (entry < 0) { - me->CastSpell(riftKeeper, SPELL_RIFT_CHANNEL, false); + summon->SetLootMode(0); + } + + if (summon->GetEntry() != NPC_AEONUS) + { + me->CastSpell(summon, SPELL_RIFT_CHANNEL, false); } } - events.ScheduleEvent(EVENT_CHECK_DEATH, 500); - break; + } } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h index 5fd011238..f621c1488 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h @@ -42,7 +42,7 @@ enum DataTypes DATA_RIFT_NUMBER = 14, DATA_SUMMONED_NPC = 20, - DATA_DELETED_NPC = 21, + DATA_DELETED_NPC = 21 }; enum WorldStateIds From e1d9dbf3fc0ab55da65f60dacbf11d95f8e450d0 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Fri, 10 Mar 2023 21:36:48 -0300 Subject: [PATCH 088/159] fix(DB/SAI): Rework Naturalist Bite in SAI (#15323) --- .../rev_1678456197533430300.sql | 71 +++++++++++++++ .../scripts/Outland/zone_zangarmarsh.cpp | 89 +------------------ 2 files changed, 72 insertions(+), 88 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1678456197533430300.sql diff --git a/data/sql/updates/pending_db_world/rev_1678456197533430300.sql b/data/sql/updates/pending_db_world/rev_1678456197533430300.sql new file mode 100644 index 000000000..9b1b8b4a4 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678456197533430300.sql @@ -0,0 +1,71 @@ +-- +UPDATE `creature_template` SET `AIName` = 'SmartAI', `flags_extra` = 0, `unit_flags` = 32768, `ScriptName` = '' WHERE (`entry` = 17893); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17893); +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 +(17893, 0, 0, 0, 10, 0, 100, 257, 1, 15, 15000, 90000, 1, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Within 1-15 Range Out of Combat LoS - Say Line 0'), +(17893, 0, 1, 0, 4, 0, 100, 257, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - On Aggro - Say Line 2'), +(17893, 0, 2, 0, 62, 0, 100, 0, 7520, 0, 0, 0, 0, 80, 1789300, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - On Gossip Option 0 Selected - Run Script'), +(17893, 0, 3, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 18, 33536, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - On Respawn - Set Flags Immune To Players & Immune To NPC\'s'), +(17893, 0, 4, 5, 62, 0, 100, 0, 7520, 1, 0, 0, 0, 11, 34906, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - On Gossip Option 1 Selected - Cast \'Mark of Bite\''), +(17893, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - On Gossip Option 1 Selected - Close Gossip'), +(17893, 0, 6, 0, 64, 0, 100, 0, 0, 0, 0, 0, 0, 33, 17893, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - On Gossip Hello - Quest Credit \'null\''), +(17893, 0, 7, 0, 40, 0, 100, 0, 1, 1789300, 0, 0, 0, 80, 1789301, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - On Waypoint 1 Reached - Run Script'), +(17893, 0, 8, 0, 58, 0, 100, 0, 2, 1789300, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - On Waypoint 2 Reached - Add Npc Flags Gossip'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1789300, 1789301)); +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 +(1789300, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Store Targetlist'), +(1789300, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 2, 113, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Set Faction 113'), +(1789300, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 19, 768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Remove Flags Immune To Players & Immune To NPC\'s'), +(1789300, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Remove Npc Flags Gossip'), +(1789300, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 15, 182094, 10, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Activate Gameobject'), +(1789300, 9, 5, 0, 0, 0, 100, 0, 200, 200, 0, 0, 0, 107, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Summon Creature Group 0'), +(1789300, 9, 6, 0, 0, 0, 100, 0, 800, 800, 0, 0, 0, 53, 0, 1789300, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Start Waypoint'), +(1789301, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 54, 3440, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Pause Waypoint'), +(1789301, 9, 1, 0, 0, 0, 100, 0, 240, 240, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Set Orientation Stored Player'), +(1789301, 9, 2, 0, 0, 0, 100, 0, 200, 200, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Naturalist Bite - Actionlist - Say Line 1'); + +DELETE FROM `waypoints` WHERE `entry`=1789300 AND `point_comment`='Naturalist Bite'; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `point_comment`) VALUES +(1789300, 1, -190.92549, -796.38947, 43.799316, NULL, 0, 'Naturalist Bite'), +(1789300, 2, -183.40784, -780.19904, 43.799313, NULL, 0, 'Naturalist Bite'); + +DELETE FROM `creature_text` WHERE `CreatureID`=17893 AND `GroupID`=2 AND `ID`=0; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17893, 2, 0, 'I... HAVE HAD ENOUGH... OF... YOU!', 12, 0, 100, 0, 0, 0, 14584, 0, 'Naturalist Bite'); + +DELETE FROM `creature_summon_groups` WHERE `summonerId`=17893 AND `summonerType`=0; +INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`, `comment`) VALUES +(17893, 0, 0, 17957, -101.13928, -745.353, 35.483814, 3.476041078567504882, 4, 30000, 'Naturalist Bite Event'), +(17893, 0, 0, 17960, -98.6582, -742.3795, 35.319103, 3.332194089889526367, 4, 30000, 'Naturalist Bite Event'), +(17893, 0, 0, 17961, -97.35107, -745.45483, 35.69915, 3.675448894500732421, 4, 30000, 'Naturalist Bite Event'); + +DELETE FROM `gossip_menu` WHERE (`MenuID` = 7520); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES +(7520, 9119), +(7520, 9144); + +DELETE FROM `gossip_menu_option` WHERE (`MenuID` = 7520); +INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES +(7520, 0, 0, 'Alright, Bite, I\'ll let you out.', 14574, 1, 1, 0, 0, 0, 0, '', 0, 0), +(7520, 1, 0, 'Naturalist, please grant me your boon.', 14670, 1, 1, 0, 0, 0, 0, '', 0, 0); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` IN (14, 15)) AND (`SourceGroup` = 7520) AND (`ConditionValue1` = 182094); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(14, 7520, 9119, 0, 0, 30, 1, 182094, 5, 0, 0, 0, 0, '', 'Only show if Naturalist Bite is imprisoned'), +(15, 7520, 0, 0, 0, 30, 1, 182094, 5, 0, 0, 0, 0, '', 'Only show if Naturalist Bite is imprisoned'), +(14, 7520, 9144, 0, 0, 30, 1, 182094, 5, 0, 1, 0, 0, '', 'Only show if Naturalist Bite is freed'), +(15, 7520, 1, 0, 0, 30, 1, 182094, 5, 0, 1, 0, 0, '', 'Only show if Naturalist Bite is freed'); + +DELETE FROM `creature_text` WHERE `CreatureID`=17957 AND `comment` LIKE 'Coilfang Champion%'; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17957, 1, 0, 'Intrudersss with the prisssoner! Kill them!!!', 14, 0, 100, 0, 0, 0, 15896, 0, 'Coilfang Champion - Naturalist Bite Event'), +(17957, 0, 0, 'Die, warmblood!', 12, 0, 100, 0, 0, 0, 16710, 0, 'Coilfang Champion'), +(17957, 0, 1, 'For the Master!', 12, 0, 100, 0, 0, 0, 16708, 0, 'Coilfang Champion'), +(17957, 0, 2, 'Illidan reigns!', 12, 0, 100, 0, 0, 0, 16709, 0, 'Coilfang Champion'), +(17957, 0, 3, 'My blood is like venom!', 12, 0, 100, 0, 0, 0, 16712, 0, 'Coilfang Champion'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17957) AND (`source_type` = 0) AND (`id` = 4); +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 +(17957, 0, 4, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Champion - On Just Summoned - Say Line 1'); diff --git a/src/server/scripts/Outland/zone_zangarmarsh.cpp b/src/server/scripts/Outland/zone_zangarmarsh.cpp index 266d67fc5..8a5710cbe 100644 --- a/src/server/scripts/Outland/zone_zangarmarsh.cpp +++ b/src/server/scripts/Outland/zone_zangarmarsh.cpp @@ -37,90 +37,6 @@ EndContentData */ #include "ScriptedEscortAI.h" #include "ScriptedGossip.h" -// Ours -enum eNaturalist -{ - SPELL_MARK_OF_BITE = 34906, - GO_CAGE_ENTRY = 182094, -}; - -class npc_natrualist_bite : public CreatureScript -{ -public: - npc_natrualist_bite() : CreatureScript("npc_natrualist_bite") { } - - bool OnGossipHello(Player* player, Creature* creature) override - { - uint32 menuId = creature->AI()->GetData(1) ? 7540 : 7520; - player->PrepareGossipMenu(creature, menuId, false); - player->SendPreparedGossip(creature); - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) override - { - ClearGossipMenuFor(player); - CloseGossipMenuFor(player); - if (creature->AI()->GetData(1)) - { - creature->CastSpell(player, SPELL_MARK_OF_BITE, true); - player->KilledMonsterCredit(creature->GetEntry()); - } - else - { - creature->SetImmuneToAll(false); - Creature* cr; - if ((cr = creature->SummonCreature(17957, -186, -790, 43.8f, 4.2f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))) - cr->AI()->AttackStart(creature); - if ((cr = creature->SummonCreature(17960, -188, -783, 43.8f, 4.2f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))) - cr->AI()->AttackStart(player); - if ((cr = creature->SummonCreature(17957, -196, -783, 43.8f, 4.4f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))) - cr->AI()->AttackStart(player); - GameObject* cage = creature->FindNearestGameObject(GO_CAGE_ENTRY, 20.0f); - if (cage) - cage->SetGoState(GO_STATE_ACTIVE); - creature->SetHomePosition(-195.39f, -795.91f, 43.8f, 1.0f); - creature->AI()->Talk(1); - } - return true; - } - - struct npc_natrualist_biteAI : public ScriptedAI - { - npc_natrualist_biteAI(Creature* creature) : ScriptedAI(creature) - { - _spoken = 0; - } - - uint8 _spoken; - - void MoveInLineOfSight(Unit* who) override - { - if (!_spoken && !me->IsHostileTo(who)) - { - _spoken = 1; - Talk(0); - } - ScriptedAI::MoveInLineOfSight(who); - } - - void JustEngagedWith(Unit*) override - { - _spoken = 2; - } - - uint32 GetData(uint32) const override - { - return _spoken == 2; - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_natrualist_biteAI (creature); - } -}; - // Theirs /*###### ## npcs_ashyen_and_keleth @@ -534,10 +450,7 @@ public: void AddSC_zangarmarsh() { - // Ours - new npc_natrualist_bite(); - - // Theris + // Theirs new npcs_ashyen_and_keleth(); new npc_cooshcoosh(); new npc_elder_kuruti(); From 9e64a479bbafd5787a765beff58e3acfdce91e54 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 11 Mar 2023 02:37:43 +0200 Subject: [PATCH 089/159] fix(DB/SAI): Daggerfen Assassin missing stealth. (#15311) --- .../sql/updates/pending_db_world/rev_1678297474580870500.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678297474580870500.sql diff --git a/data/sql/updates/pending_db_world/rev_1678297474580870500.sql b/data/sql/updates/pending_db_world/rev_1678297474580870500.sql new file mode 100644 index 000000000..178fd09a3 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678297474580870500.sql @@ -0,0 +1,5 @@ +-- Daggerfen Assassin +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18116); +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 +(18116, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 11, 22766, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Daggerfen Assassin - On Reset - Cast \'Sneak\''), +(18116, 0, 1, 0, 0, 0, 100, 0, 4000, 4000, 10000, 10000, 0, 11, 35204, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Daggerfen Assassin - In Combat - Cast \'Toxic Fumes\''); From 01ea82e6994f3bbc7c2f2404e98b138f280b9609 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 11 Mar 2023 00:40:10 +0000 Subject: [PATCH 090/159] chore(DB): import pending files Referenced commit(s): 9e64a479bbafd5787a765beff58e3acfdce91e54 --- .../rev_1678297474580870500.sql => db_world/2023_03_11_00.sql} | 1 + .../rev_1678456197533430300.sql => db_world/2023_03_11_01.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1678297474580870500.sql => db_world/2023_03_11_00.sql} (95%) rename data/sql/updates/{pending_db_world/rev_1678456197533430300.sql => db_world/2023_03_11_01.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1678297474580870500.sql b/data/sql/updates/db_world/2023_03_11_00.sql similarity index 95% rename from data/sql/updates/pending_db_world/rev_1678297474580870500.sql rename to data/sql/updates/db_world/2023_03_11_00.sql index 178fd09a3..a2a2df75e 100644 --- a/data/sql/updates/pending_db_world/rev_1678297474580870500.sql +++ b/data/sql/updates/db_world/2023_03_11_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_09_04 -> 2023_03_11_00 -- Daggerfen Assassin DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18116); 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_1678456197533430300.sql b/data/sql/updates/db_world/2023_03_11_01.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1678456197533430300.sql rename to data/sql/updates/db_world/2023_03_11_01.sql index 9b1b8b4a4..26ac061d3 100644 --- a/data/sql/updates/pending_db_world/rev_1678456197533430300.sql +++ b/data/sql/updates/db_world/2023_03_11_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_11_00 -> 2023_03_11_01 -- UPDATE `creature_template` SET `AIName` = 'SmartAI', `flags_extra` = 0, `unit_flags` = 32768, `ScriptName` = '' WHERE (`entry` = 17893); From 58a502e139aebcc94b8af9bf978fd27c8473ff6c Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Fri, 10 Mar 2023 21:41:01 -0300 Subject: [PATCH 091/159] chore(DB/Text): Fix missing apostrophes in Coilfang Slavemaster and Slavehandler texts and add Broadcast IDs (#15280) --- .../rev_1678025316144101700.sql | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678025316144101700.sql diff --git a/data/sql/updates/pending_db_world/rev_1678025316144101700.sql b/data/sql/updates/pending_db_world/rev_1678025316144101700.sql new file mode 100644 index 000000000..cce2f0b1d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678025316144101700.sql @@ -0,0 +1,24 @@ +-- +DELETE FROM `creature_text` WHERE `CreatureID` IN (17805,17959); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17805,0,0,'Hurry up with it already! The longer you take, the more of a hurtin\' I\'m putting on you!',14,0,100,0,0,0,14412,0,'Coilfang Slavemaster'), +(17805,0,1,'This is terrible..... my arms grow tired from beating on you lazy peons!',14,0,100,0,0,0,14414,0,'Coilfang Slavemaster'), +(17805,0,2,'Too soon! You are slacking off too soon!',14,0,100,0,0,0,14415,0,'Coilfang Slavemaster'), +(17805,0,3,'Wake up! Now get up and back to work!',14,0,100,0,0,0,14405,0,'Coilfang Slavemaster'), +(17805,0,4,'What is this?! Didn\'t mommy and daddy teach you anything?!',14,0,100,0,0,0,14413,0,'Coilfang Slavemaster'), +(17805,1,0,'By Nazjatar\'s Depths! ',12,0,100,0,0,0,16711,0,'Coilfang Slavemaster'), +(17805,1,1,'Die, warmblood!',12,0,100,0,0,0,16710,0,'Coilfang Slavemaster'), +(17805,1,2,'For the Master!',12,0,100,0,0,0,16708,0,'Coilfang Slavemaster'), +(17805,1,3,'Illidan reigns!',12,0,100,0,0,0,16709,0,'Coilfang Slavemaster'), +(17805,1,4,'My blood is like venom!',12,0,100,0,0,0,16712,0,'Coilfang Slavemaster'), + +(17959,0,0,'Hurry up with it already! The longer you take, the more of a hurtin\' I\'m putting on you!',14,0,100,0,0,0,14412,0,'Coilfang Slavehandler'), +(17959,0,1,'This is terrible..... my arms grow tired from beating on you lazy peons!',14,0,100,0,0,0,14414,0,'Coilfang Slavehandler'), +(17959,0,2,'Too soon! You are slacking off too soon!',14,0,100,0,0,0,14415,0,'Coilfang Slavehandler'), +(17959,0,3,'Wake up! Now get up and back to work!',14,0,100,0,0,0,14405,0,'Coilfang Slavehandler'), +(17959,0,4,'What is this?! Didn\'t mommy and daddy teach you anything?!',14,0,100,0,0,0,14413,0,'Coilfang Slavehandler'), +(17959,1,0,'By Nazjatar\'s Depths! ',12,0,100,0,0,0,16711,0,'Coilfang Slavehandler'), +(17959,1,1,'Die, warmblood!',12,0,100,0,0,0,16710,0,'Coilfang Slavehandler'), +(17959,1,2,'For the Master!',12,0,100,0,0,0,16708,0,'Coilfang Slavehandler'), +(17959,1,3,'Illidan reigns!',12,0,100,0,0,0,16709,0,'Coilfang Slavehandler'), +(17959,1,4,'My blood is like venom!',12,0,100,0,0,0,16712,0,'Coilfang Slavehandler'); From 03d47897ece3e0a615aac05222d9fbd98b33717d Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 11 Mar 2023 00:43:31 +0000 Subject: [PATCH 092/159] chore(DB): import pending files Referenced commit(s): 58a502e139aebcc94b8af9bf978fd27c8473ff6c --- .../rev_1678025316144101700.sql => db_world/2023_03_11_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1678025316144101700.sql => db_world/2023_03_11_02.sql} (98%) diff --git a/data/sql/updates/pending_db_world/rev_1678025316144101700.sql b/data/sql/updates/db_world/2023_03_11_02.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1678025316144101700.sql rename to data/sql/updates/db_world/2023_03_11_02.sql index cce2f0b1d..d8d818e42 100644 --- a/data/sql/updates/pending_db_world/rev_1678025316144101700.sql +++ b/data/sql/updates/db_world/2023_03_11_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_11_01 -> 2023_03_11_02 -- DELETE FROM `creature_text` WHERE `CreatureID` IN (17805,17959); INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES From 2274924d77f5714c657bc4d3e1a5972c92180bc5 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 11 Mar 2023 02:53:24 -0300 Subject: [PATCH 093/159] fix(DB/Quest): Add missing rewards to Ally of the Netherwing (#15314) --- data/sql/updates/pending_db_world/rev_1678331213655095700.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678331213655095700.sql diff --git a/data/sql/updates/pending_db_world/rev_1678331213655095700.sql b/data/sql/updates/pending_db_world/rev_1678331213655095700.sql new file mode 100644 index 000000000..e7bc8a40e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678331213655095700.sql @@ -0,0 +1,2 @@ +-- +UPDATE `quest_template` SET `RewardChoiceItemID1` = 31492, `RewardChoiceItemQuantity1` = 1, `RewardChoiceItemID2` = 31491, `RewardChoiceItemQuantity2` = 1, `RewardChoiceItemID3` = 31490, `RewardChoiceItemQuantity3` = 1, `RewardChoiceItemID4` = 31494, `RewardChoiceItemQuantity4` = 1, `RewardChoiceItemID5` = 31493, `RewardChoiceItemQuantity5` = 1 WHERE (`ID` = 10870); From bc7dc136604a61a4e48919b2ab4b8ff8f8be3038 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Sat, 11 Mar 2023 02:55:47 -0300 Subject: [PATCH 094/159] fix(DB/Conditions) Correct Class conditions for Satchel of Helpful Goods (65-70) (#15281) --- data/sql/updates/pending_db_world/rev_1678027027215535800.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678027027215535800.sql diff --git a/data/sql/updates/pending_db_world/rev_1678027027215535800.sql b/data/sql/updates/pending_db_world/rev_1678027027215535800.sql new file mode 100644 index 000000000..1b95831cc --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678027027215535800.sql @@ -0,0 +1,3 @@ +-- These were switched around +UPDATE `conditions` SET `ConditionValue1`=1032, `Comment`='SOHG: Turbulent Signet only for leatherusers' WHERE `SourceTypeOrReferenceId`=10 AND `SourceGroup`=10058 AND `SourceEntry`=51991; +UPDATE `conditions` SET `ConditionValue1`=400, `Comment`='SOHG: Turbulent Signet only for clothusers' WHERE `SourceTypeOrReferenceId`=10 AND `SourceGroup`=10059 AND `SourceEntry`=51991; From 5f2752a40f55250844f4f17b87e0f911b540a721 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 11 Mar 2023 05:58:08 +0000 Subject: [PATCH 095/159] chore(DB): import pending files Referenced commit(s): bc7dc136604a61a4e48919b2ab4b8ff8f8be3038 --- .../rev_1678027027215535800.sql => db_world/2023_03_11_03.sql} | 1 + .../rev_1678331213655095700.sql => db_world/2023_03_11_04.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1678027027215535800.sql => db_world/2023_03_11_03.sql} (90%) rename data/sql/updates/{pending_db_world/rev_1678331213655095700.sql => db_world/2023_03_11_04.sql} (89%) diff --git a/data/sql/updates/pending_db_world/rev_1678027027215535800.sql b/data/sql/updates/db_world/2023_03_11_03.sql similarity index 90% rename from data/sql/updates/pending_db_world/rev_1678027027215535800.sql rename to data/sql/updates/db_world/2023_03_11_03.sql index 1b95831cc..e53d50ae9 100644 --- a/data/sql/updates/pending_db_world/rev_1678027027215535800.sql +++ b/data/sql/updates/db_world/2023_03_11_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_11_02 -> 2023_03_11_03 -- These were switched around UPDATE `conditions` SET `ConditionValue1`=1032, `Comment`='SOHG: Turbulent Signet only for leatherusers' WHERE `SourceTypeOrReferenceId`=10 AND `SourceGroup`=10058 AND `SourceEntry`=51991; UPDATE `conditions` SET `ConditionValue1`=400, `Comment`='SOHG: Turbulent Signet only for clothusers' WHERE `SourceTypeOrReferenceId`=10 AND `SourceGroup`=10059 AND `SourceEntry`=51991; diff --git a/data/sql/updates/pending_db_world/rev_1678331213655095700.sql b/data/sql/updates/db_world/2023_03_11_04.sql similarity index 89% rename from data/sql/updates/pending_db_world/rev_1678331213655095700.sql rename to data/sql/updates/db_world/2023_03_11_04.sql index e7bc8a40e..ac9b7d81e 100644 --- a/data/sql/updates/pending_db_world/rev_1678331213655095700.sql +++ b/data/sql/updates/db_world/2023_03_11_04.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_11_03 -> 2023_03_11_04 -- UPDATE `quest_template` SET `RewardChoiceItemID1` = 31492, `RewardChoiceItemQuantity1` = 1, `RewardChoiceItemID2` = 31491, `RewardChoiceItemQuantity2` = 1, `RewardChoiceItemID3` = 31490, `RewardChoiceItemQuantity3` = 1, `RewardChoiceItemID4` = 31494, `RewardChoiceItemQuantity4` = 1, `RewardChoiceItemID5` = 31493, `RewardChoiceItemQuantity5` = 1 WHERE (`ID` = 10870); From c1c877060c9bb8a4ab741723674415139a6ebd32 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 11 Mar 2023 11:46:22 +0100 Subject: [PATCH 096/159] fix(Scripts/BlackMorass): Fixed mob waves sequence. (#14863) --- .../rev_1675618471961745900.sql | 123 ++++++++++++++++++ .../instance_the_black_morass.cpp | 12 +- .../TheBlackMorass/the_black_morass.cpp | 51 +++++++- .../TheBlackMorass/the_black_morass.h | 7 +- 4 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1675618471961745900.sql diff --git a/data/sql/updates/pending_db_world/rev_1675618471961745900.sql b/data/sql/updates/pending_db_world/rev_1675618471961745900.sql new file mode 100644 index 000000000..9d514e1fc --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1675618471961745900.sql @@ -0,0 +1,123 @@ +-- Infinite Assasin +UPDATE `creature_template` SET `difficulty_entry_1`=20740 WHERE `entry`=17835; +UPDATE `creature_template` SET `faction`=1720, `MovementType`=1 WHERE `entry`=20740; + +UPDATE `creature_template` SET `difficulty_entry_1`=22164, `AiName`='SmartAI' WHERE `entry`=21137; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=17835 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`, `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 +(17835,0,0,0,6,0,50,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Assassin - On Death - Talk'), +(17835,0,1,0,0,0,100,2,8000,12000,15000,17000,0,11,30832,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - In Combat - Cast Kidney Shot'), +(17835,0,2,0,0,0,100,4,8000,12000,15000,17000,0,11,30832,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - In Combat - Cast Kidney Shot'), +(17835,0,3,0,67,0,100,2,5000,5000,0,0,0,11,7159,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - Behind Target - Cast Backstab'), +(17835,0,4,0,67,0,100,4,5000,5000,0,0,0,11,15657,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - Behind Target - Cast Backstab'), +(17835,0,5,0,0,0,100,4,5000,8000,8000,12000,0,11,38520,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - In Combat - Cast Deadly Poison'), +(17835,0,6,0,25,0,100,0,0,0,0,0,0,11,31326,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Assassin - On Reset - Cast Corrupt Medivh'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=21137 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`, `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 +(21137,0,0,0,6,0,50,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Assassin - On Death - Talk'), +(21137,0,1,0,0,0,100,2,8000,12000,15000,17000,0,11,14874,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - In Combat - Cast Rupture'), +(21137,0,2,0,0,0,100,4,8000,12000,15000,17000,0,11,14874,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - In Combat - Cast Rupture'), +(21137,0,3,0,0,0,100,2,5000,8000,8000,12000,0,11,14873,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - In Combat - Cast Spell Sinister Strike'), +(21137,0,4,0,0,0,100,4,5000,8000,8000,12000,0,11,14873,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - In Combat - Cast Spell Sinister Strike'), +(21137,0,5,0,0,0,100,4,5000,8000,8000,12000,0,11,30981,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Assassin - In Combat - Cast Crippling Poison'), +(21137,0,6,0,25,0,100,0,0,0,0,0,0,11,31326,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Assassin - On Reset - Cast Spell Corrupt Medivh'); + +DELETE FROM `creature_text` WHERE `CreatureID`=21137; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(21137,0,0,'More will take my place.',12,0,100,0,0,0,15167,0,'Infinite Assassin'), +(21137,0,1,'Our time has come!',12,0,100,0,0,0,15163,0,'Infinite Assassin'), +(21137,0,2,'The wizard will fall!',12,0,100,0,0,0,15164,0,'Infinite Assassin'); + +UPDATE `creature_onkill_reputation` SET `creature_id`=17835, `RewOnKillRepValue1`=2 WHERE `creature_id`=21137; +UPDATE `creature_onkill_reputation` SET `creature_id`=20740, `RewOnKillRepValue1`=3 WHERE `creature_id`=22164; + +-- Infinite Chronomancer +UPDATE `creature_template` SET `AiName`='SmartAI' WHERE `entry`=21136; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=21136 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`, `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 +(21136,0,0,0,6,0,50,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Chronomancer - On Death - Talk'), +(21136,0,1,0,0,0,100,2,0,0,1500,1500,0,11,15497,64,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Chronomancer - In Combat - Cast Frostbolt'), +(21136,0,2,0,0,0,100,4,0,0,1500,1500,0,11,12675,64,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Chronomancer - In Combat - Cast Frostbolt'), +(21136,0,3,0,9,0,100,2,0,10,10000,10000,0,11,15063,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Chronomancer - Within Range 0-10yd - Cast Frost Nova'), +(21136,0,4,0,9,0,100,4,0,10,10000,10000,0,11,15531,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Chronomancer - Within Range 0-10yd - Cast Frost Nova'), +(21136,0,5,0,25,0,100,0,0,0,0,0,0,11,31326,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Chronomancer - On Reset - Cast Corrupt Medivh'); + +DELETE FROM `creature_text` WHERE `CreatureID`=21136; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(21136,0,0,'We are not finished!',12,0,100,0,0,0,15174,0,'Infinite Chronomancer'), +(21136,0,1,'Death to the Last Guardian!',12,0,100,0,0,0,15171,0,'Infinite Chronomancer'), +(21136,0,2,'We will not fail!',12,0,100,0,0,0,23332,0,'Infinite Chronomancer'); + +DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (21136,22165); + +-- Infinite Executioner +UPDATE `creature_template` SET `difficulty_entry_1`=20742 WHERE `entry`=18994; +UPDATE `creature_template` SET `faction`=1720, `MovementType`=1 WHERE `entry`=20742; + +UPDATE `creature_template` SET `difficulty_entry_1`=22166, `AiName`='SmartAI' WHERE `entry`=21138; +UPDATE `creature_template` SET `damagemodifier`=7.5 WHERE `entry`=22166; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=18994 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`, `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 +(18994,0,0,0,6,0,50,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Executioner - On Death - Talk'), +(18994,0,1,0,0,0,100,2,0,0,8000,12000,0,11,15580,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Executioner - In Combat - Cast Strike'), +(18994,0,2,0,0,0,100,4,0,0,8000,12000,0,11,34920,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Executioner - In Combat - Cast Strike'), +(18994,0,3,0,0,0,100,2,1000,1000,3000,3000,0,11,17198,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Executioner - In Combat - Cast Overpower'), +(18994,0,4,0,0,0,100,4,1000,1000,3000,3000,0,11,37321,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Executioner - In Combat - Cast Overpower'), +(18994,0,5,0,25,0,100,0,0,0,0,0,0,11,31326,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Executioner - On Reset - Cast Corrupt Medivh'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=21138 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`, `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 +(21138,0,0,0,6,0,50,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Executioner - On Death - Talk'), +(21138,0,1,0,0,0,100,2,0,0,8000,12000,0,11,15496,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Executioner - In Combat - Cast Cleave'), +(21138,0,2,0,0,0,100,4,0,0,8000,12000,0,11,15496,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Executioner - In Combat - Cast Cleave'), +(21138,0,3,0,0,0,100,2,5000,8000,12000,18000,0,11,9080,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Executioner - In Combat - Cast Hamstring'), +(21138,0,4,0,0,0,100,4,5000,8000,12000,18000,0,11,9080,0,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Executioner - In Combat - Cast Hamstring'), +(21138,0,5,0,25,0,100,0,0,0,0,0,0,11,31326,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Executioner - On Reset - Cast Corrupt Medivh'); + +DELETE FROM `creature_text` WHERE `CreatureID`=21138; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(21138,0,0,'More will take my place.',12,0,100,0,0,0,15167,0,'Infinite Executioner'), +(21138,0,1,'We will not be stopped!',12,0,100,0,0,0,15166,0,'Infinite Executioner'), +(21138,0,2,'Your efforts... are in vain.',12,0,100,0,0,0,15168,0,'Infinite Executioner'); + +DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (21138,22166); + +-- Infinite Vanquisher +UPDATE `creature_template` SET `difficulty_entry_1`=20743 WHERE `entry`=18995; +UPDATE `creature_template` SET `faction`=1720, `MovementType`=1 WHERE `entry`=20743; + +UPDATE `creature_template` SET `difficulty_entry_1`=22168, `AiName`='SmartAI' WHERE `entry`=21139; +UPDATE `creature_template` SET `BaseAttackTime`=2000 WHERE `entry`=22168; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=21139 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`, `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 +(21139,0,0,0,6,0,50,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Vanquisher - On Death - Talk'), +(21139,0,1,0,0,0,100,2,0,0,2000,2000,0,11,12739,64,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Vanquisher - In Combat - Cast Shadow Bolt'), +(21139,0,2,0,0,0,100,4,0,0,2000,2000,0,11,15472,64,0,0,0,0,2,0,0,0,0,0,0,0,0,'Infinite Vanquisher - In Combat - Cast Shadow Bolt'), +(21139,0,3,0,9,0,100,2,6000,7000,12000,18000,0,11,32063,0,0,0,0,0,5,30,0,0,0,0,0,0,0,'Infinite Vanquisher - In Combat - Cast Corruption'), +(21139,0,4,0,9,0,100,4,6000,7000,12000,18000,0,11,32197,0,0,0,0,0,5,30,0,0,0,0,0,0,0,'Infinite Vanquisher - In Combat - Cast Corruption'), +(21139,0,5,0,25,0,100,0,0,0,0,0,0,11,31326,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Infinite Vanquisher - On Reset - Cast Corrupt Medivh'); + +DELETE FROM `creature_text` WHERE `CreatureID`=21139; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(21139,0,0,'We are not finished!',12,0,100,0,0,0,15174,0,'Infinite Vanquisher'), +(21139,0,1,'Death to the Last Guardian!',12,0,100,0,0,0,15171,0,'Infinite Vanquisher'), +(21139,0,2,'We will not fail!',12,0,100,0,0,0,23332,0,'Infinite Vanquisher'); + +DELETE FROM `creature_onkill_reputation` WHERE `creature_id` IN (21139,22168); + +-- Conditions +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry` IN (17835,17892,18994,18995,21136,21137,21138,21139); +INSERT INTO`conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22,7,17835,0,0,29,1,15608,20,0,0,0,0,'','SAI "Corrupt Medivh" requires Medivh in 20yd'), +(22,6,17892,0,0,29,1,15608,20,0,0,0,0,'','SAI "Corrupt Medivh" requires Medivh in 20yd'), +(22,6,18994,0,0,29,1,15608,20,0,0,0,0,'','SAI "Corrupt Medivh" requires Medivh in 20yd'), +(22,6,18995,0,0,29,1,15608,20,0,0,0,0,'','SAI "Corrupt Medivh" requires Medivh in 20yd'), +(22,6,21136,0,0,29,1,15608,20,0,0,0,0,'','SAI "Corrupt Medivh" requires Medivh in 20yd'), +(22,7,21137,0,0,29,1,15608,20,0,0,0,0,'','SAI "Corrupt Medivh" requires Medivh in 20yd'), +(22,6,21138,0,0,29,1,15608,20,0,0,0,0,'','SAI "Corrupt Medivh" requires Medivh in 20yd'), +(22,6,21139,0,0,29,1,15608,20,0,0,0,0,'','SAI "Corrupt Medivh" requires Medivh in 20yd'); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index 62ecd0c15..a9c920290 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -207,10 +207,14 @@ public: case NPC_RIFT_LORD: case NPC_RIFT_LORD_2: case NPC_INFINITE_ASSASIN: + case NPC_INFINITE_ASSASIN_2: case NPC_INFINITE_WHELP: - case NPC_INFINITE_CRONOMANCER: + case NPC_INFINITE_CHRONOMANCER: + case NPC_INFINITE_CHRONOMANCER_2: case NPC_INFINITE_EXECUTIONER: + case NPC_INFINITE_EXECUTIONER_2: case NPC_INFINITE_VANQUISHER: + case NPC_INFINITE_VANQUISHER_2: case NPC_DP_BEAM_STALKER: _encounterNPCs.insert(creature->GetGUID()); break; @@ -248,10 +252,14 @@ public: case NPC_RIFT_LORD: case NPC_RIFT_LORD_2: case NPC_INFINITE_ASSASIN: + case NPC_INFINITE_ASSASIN_2: case NPC_INFINITE_WHELP: - case NPC_INFINITE_CRONOMANCER: + case NPC_INFINITE_CHRONOMANCER: + case NPC_INFINITE_CHRONOMANCER_2: case NPC_INFINITE_EXECUTIONER: + case NPC_INFINITE_EXECUTIONER_2: case NPC_INFINITE_VANQUISHER: + case NPC_INFINITE_VANQUISHER_2: _encounterNPCs.erase(creature->GetGUID()); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index 02ed5e273..f744fb3ee 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -43,6 +43,10 @@ enum medivhMisc EVENT_OUTRO_8 = 17 }; +static std::vector firstWave = { NPC_INFINITE_ASSASIN, NPC_INFINITE_WHELP, NPC_INFINITE_CHRONOMANCER }; +static std::vector secondWave = { NPC_INFINITE_EXECUTIONER, NPC_INFINITE_CHRONOMANCER, NPC_INFINITE_WHELP, NPC_INFINITE_ASSASIN }; +static std::vector thirdWave = { NPC_INFINITE_EXECUTIONER, NPC_INFINITE_VANQUISHER, NPC_INFINITE_CHRONOMANCER, NPC_INFINITE_ASSASIN }; + class NpcRunToHome : public BasicEvent { public: @@ -258,12 +262,27 @@ struct npc_time_rift : public NullCreatureAI void Reset() override { - if (_instance->GetData(DATA_RIFT_NUMBER) > 18) + uint32 riftNumer = _instance->GetData(DATA_RIFT_NUMBER); + if (riftNumer >= 18) { me->DespawnOrUnsummon(30000); return; } + if (riftNumer < 6) + { + waveMobs = firstWave; + } + else if (riftNumer < 12) + { + waveMobs = secondWave; + } + else + { + waveMobs = thirdWave; + } + + waveMobIndex = 0; events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 16s); events.ScheduleEvent(EVENT_SUMMON_BOSS, 6s); } @@ -294,7 +313,7 @@ struct npc_time_rift : public NullCreatureAI void DoSelectSummon() { - uint32 entry = RAND(NPC_INFINITE_ASSASIN, NPC_INFINITE_WHELP, NPC_INFINITE_CRONOMANCER, NPC_INFINITE_EXECUTIONER, NPC_INFINITE_VANQUISHER); + uint32 entry = waveMobs[waveMobIndex]; if (entry == NPC_INFINITE_WHELP) { DoSummonAtRift(entry); @@ -303,8 +322,34 @@ struct npc_time_rift : public NullCreatureAI } else { + if (urand(0, 1)) + { + switch (entry) + { + case NPC_INFINITE_ASSASIN: + entry = NPC_INFINITE_ASSASIN_2; + break; + case NPC_INFINITE_CHRONOMANCER: + entry = NPC_INFINITE_CHRONOMANCER_2; + break; + case NPC_INFINITE_EXECUTIONER: + entry = NPC_INFINITE_EXECUTIONER_2; + break; + case NPC_INFINITE_VANQUISHER: + entry = NPC_INFINITE_VANQUISHER_2; + break; + default: + break; + } + } + DoSummonAtRift(entry); } + + if (++waveMobIndex >= waveMobs.size()) + { + waveMobIndex = 0; + } } void SummonedCreatureDies(Creature* creature, Unit* /*killer*/) override @@ -368,6 +413,8 @@ private: EventMap _events; InstanceScript* _instance; ObjectGuid _riftKeeperGUID; + std::vector waveMobs; + uint8 waveMobIndex; }; struct npc_black_morass_summoned_add : public SmartAI diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h index f621c1488..6b560a505 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.h @@ -77,10 +77,15 @@ enum CreatureIds NPC_INFINITE_ASSASIN = 17835, NPC_INFINITE_WHELP = 21818, - NPC_INFINITE_CRONOMANCER = 17892, + NPC_INFINITE_CHRONOMANCER = 17892, NPC_INFINITE_EXECUTIONER = 18994, NPC_INFINITE_VANQUISHER = 18995, + NPC_INFINITE_ASSASIN_2 = 21137, + NPC_INFINITE_CHRONOMANCER_2 = 21136, + NPC_INFINITE_EXECUTIONER_2 = 21138, + NPC_INFINITE_VANQUISHER_2 = 21139, + NPC_DP_EMITTER_STALKER = 18582, NPC_DP_CRYSTAL_STALKER = 18553, NPC_DP_BEAM_STALKER = 18555 From a0f146896dc5e56a884e864eab4355e61974b8a1 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 11 Mar 2023 10:48:45 +0000 Subject: [PATCH 097/159] chore(DB): import pending files Referenced commit(s): c1c877060c9bb8a4ab741723674415139a6ebd32 --- .../rev_1675618471961745900.sql => db_world/2023_03_11_05.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1675618471961745900.sql => db_world/2023_03_11_05.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1675618471961745900.sql b/data/sql/updates/db_world/2023_03_11_05.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1675618471961745900.sql rename to data/sql/updates/db_world/2023_03_11_05.sql index 9d514e1fc..de0e9223a 100644 --- a/data/sql/updates/pending_db_world/rev_1675618471961745900.sql +++ b/data/sql/updates/db_world/2023_03_11_05.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_11_04 -> 2023_03_11_05 -- Infinite Assasin UPDATE `creature_template` SET `difficulty_entry_1`=20740 WHERE `entry`=17835; UPDATE `creature_template` SET `faction`=1720, `MovementType`=1 WHERE `entry`=20740; From 6e612f5a072815e776906c30f3e3e4292d2a5e37 Mon Sep 17 00:00:00 2001 From: neifion-00000000 <91289495+neifion-00000000@users.noreply.github.com> Date: Sat, 11 Mar 2023 05:08:56 -0600 Subject: [PATCH 098/159] fix(DB/Loot): Fix Aeonus Normal Loot Drops (#15333) --- .../rev_1678529764517694100.sql | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678529764517694100.sql diff --git a/data/sql/updates/pending_db_world/rev_1678529764517694100.sql b/data/sql/updates/pending_db_world/rev_1678529764517694100.sql new file mode 100644 index 000000000..40c9cbbf4 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678529764517694100.sql @@ -0,0 +1,20 @@ +-- +-- Revamp Aeonus Tables +DELETE FROM `reference_loot_template` WHERE Entry IN (35004); +INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(35004, 27509, 0, 0, 0, 1, 2, 1, 1, 'Handgrips of Assassination'), +(35004, 27839, 0, 0, 0, 1, 2, 1, 1, 'Legplates of the Righteous'), +(35004, 27873, 0, 0, 0, 1, 2, 1, 1, 'Moonglade Pants'), +(35004, 27977, 0, 0, 0, 1, 2, 1, 1, 'Legplates of the Bold'), +(35004, 28194, 0, 0, 0, 1, 2, 1, 1, 'Primal Surge Bracers'), +(35004, 28207, 0, 0, 0, 1, 2, 1, 1, 'Pauldrons of the Crimson Flight'), +(35004, 28188, 0, 0, 0, 1, 3, 1, 1, 'Bloodfire Greatstaff'), +(35004, 28189, 0, 0, 0, 1, 3, 1, 1, 'Latro\'s Shifting Sword'), +(35004, 28190, 0, 0, 0, 1, 3, 1, 1, 'Scarab of the Infinite Cycle'), +(35004, 28192, 0, 0, 0, 1, 3, 1, 1, 'Helm of Desolation'), +(35004, 28193, 0, 0, 0, 1, 3, 1, 1, 'Mana-Etched Crown'), +(35004, 28206, 0, 0, 0, 1, 3, 1, 1, 'Cowl of the Guiltless'); +-- Insert 2nd loot drop +DELETE FROM `creature_loot_template` WHERE `Entry`=17881 AND `Item`=35007 AND `GroupId`=3; +INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(17881, 35004, 35004, 100, 0, 1, 3, 1, 1, 'Aeonus High Value Table - (ReferenceTable)'); From 154f0b469be18b3f3198c7ff070d46b6a4e90e43 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 11 Mar 2023 11:11:28 +0000 Subject: [PATCH 099/159] chore(DB): import pending files Referenced commit(s): 6e612f5a072815e776906c30f3e3e4292d2a5e37 --- .../rev_1678529764517694100.sql => db_world/2023_03_11_06.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1678529764517694100.sql => db_world/2023_03_11_06.sql} (96%) diff --git a/data/sql/updates/pending_db_world/rev_1678529764517694100.sql b/data/sql/updates/db_world/2023_03_11_06.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1678529764517694100.sql rename to data/sql/updates/db_world/2023_03_11_06.sql index 40c9cbbf4..09703dfac 100644 --- a/data/sql/updates/pending_db_world/rev_1678529764517694100.sql +++ b/data/sql/updates/db_world/2023_03_11_06.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_11_05 -> 2023_03_11_06 -- -- Revamp Aeonus Tables DELETE FROM `reference_loot_template` WHERE Entry IN (35004); From 145a5a64bbd11cfac14fb351530f962b92c8e09e Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 11 Mar 2023 13:16:50 +0200 Subject: [PATCH 100/159] fix(Scripts/Creature): Fel Guard Hound not despawning. (#15300) --- .../scripts/Outland/zone_hellfire_peninsula.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index b6cd91367..b3cd980ac 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -329,7 +329,8 @@ public: enum FelGuard { SPELL_SUMMON_POO = 37688, - NPC_DERANGED_HELBOAR = 16863 + NPC_DERANGED_HELBOAR = 16863, + QUEST_SHIZZ_WORK = 10629, }; class npc_fel_guard_hound : public CreatureScript @@ -358,7 +359,7 @@ public: DoCast(SPELL_SUMMON_POO); if (Player* owner = me->GetCharmerOrOwnerPlayerOrPlayerItself()) - me->GetMotionMaster()->MoveFollow(owner, 0.0f, 0.0f); + me->GetMotionMaster()->MoveFollow(owner, 1.0f, 90.0f); } } @@ -374,6 +375,13 @@ public: me->GetMotionMaster()->MovePoint(1, helboar->GetPositionX(), helboar->GetPositionY(), helboar->GetPositionZ()); } } + if (Player* owner = me->GetCharmerOrOwnerPlayerOrPlayerItself()) + { + if (!owner->HasQuest(QUEST_SHIZZ_WORK)) + { + me->DespawnOrUnsummon(); + } + } checkTimer = 5000; } else checkTimer -= diff; From d336d1c9bf48f2d258da7cc380770521189739c7 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 11 Mar 2023 17:59:50 +0200 Subject: [PATCH 101/159] fix(DB/SAI): Steam Pump Overseer toughen not stacking. (#15319) --- .../pending_db_world/rev_1678389681963091600.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678389681963091600.sql diff --git a/data/sql/updates/pending_db_world/rev_1678389681963091600.sql b/data/sql/updates/pending_db_world/rev_1678389681963091600.sql new file mode 100644 index 000000000..2fa534aff --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678389681963091600.sql @@ -0,0 +1,16 @@ +-- Steam Pump Overseer +UPDATE `creature_template_addon` SET `auras` = '6961' WHERE `entry` = 18340; +UPDATE `creature_template` SET `flags_extra` = `flags_extra`|64 WHERE `entry` = 18340; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18340); +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 +(18340, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - On Just Summoned - Say Line 0'), +(18340, 0, 1, 0, 2, 0, 100, 512, 0, 90, 0, 0, 0, 11, 33962, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - Between 0-90% Health - Cast \'Toughen\' I'), +(18340, 0, 2, 0, 2, 0, 100, 512, 0, 80, 0, 0, 0, 11, 33962, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - Between 0-80% Health - Cast \'Toughen\' II'), +(18340, 0, 3, 0, 2, 0, 100, 512, 0, 70, 0, 0, 0, 11, 33962, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - Between 0-70% Health - Cast \'Toughen\' III'), +(18340, 0, 4, 0, 2, 0, 100, 512, 0, 60, 0, 0, 0, 11, 33962, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - Between 0-60% Health - Cast \'Toughen\' IV'), +(18340, 0, 5, 0, 2, 0, 100, 512, 0, 50, 0, 0, 0, 11, 33962, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - Between 0-50% Health - Cast \'Toughen\' V'), +(18340, 0, 6, 0, 2, 0, 100, 512, 0, 40, 0, 0, 0, 11, 33962, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - Between 0-40% Health - Cast \'Toughen\' VI'), +(18340, 0, 7, 0, 2, 0, 100, 512, 0, 30, 0, 0, 0, 11, 33962, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - Between 0-30% Health - Cast \'Toughen\' VII'), +(18340, 0, 8, 0, 2, 0, 100, 512, 0, 20, 0, 0, 0, 11, 33962, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - Between 0-20% Health - Cast \'Toughen\' VIII'), +(18340, 0, 9, 0, 2, 0, 100, 512, 0, 10, 0, 0, 0, 11, 33962, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Steam Pump Overseer - Between 0-10% Health - Cast \'Toughen\' IX'); From cd59b7ebc9d04b40e89f0d58b4743c9d5ba2448d Mon Sep 17 00:00:00 2001 From: neifion-00000000 <91289495+neifion-00000000@users.noreply.github.com> Date: Sat, 11 Mar 2023 10:00:18 -0600 Subject: [PATCH 102/159] fix(DB/Creature): Set Temporus Level 72 (#15335) --- data/sql/updates/pending_db_world/rev_1678542211338425200.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678542211338425200.sql diff --git a/data/sql/updates/pending_db_world/rev_1678542211338425200.sql b/data/sql/updates/pending_db_world/rev_1678542211338425200.sql new file mode 100644 index 000000000..1a3411f00 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678542211338425200.sql @@ -0,0 +1,3 @@ +-- +-- Temporus Level fix +UPDATE `creature_template` SET `minlevel`=72, `maxlevel`=72 WHERE `entry`=17880; From 5a628fe4fcf3885045a89ddc54aedfbadeb10c26 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Sat, 11 Mar 2023 18:00:29 +0200 Subject: [PATCH 103/159] fix(DB/Creature): Starving Helboar aggro radius. (#15321) Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- data/sql/updates/pending_db_world/rev_1678432036156760800.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678432036156760800.sql diff --git a/data/sql/updates/pending_db_world/rev_1678432036156760800.sql b/data/sql/updates/pending_db_world/rev_1678432036156760800.sql new file mode 100644 index 000000000..fd65db768 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678432036156760800.sql @@ -0,0 +1,4 @@ +-- Starving Helboar +UPDATE `creature_template_addon` SET `auras` = '33908' WHERE `entry` = 16879; +UPDATE `creature_template` SET `AIName` = '', `detection_range` = 30 WHERE `entry` = 16879; +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` = 16879; From bb2de6b6d3fb5fef5b472b749504bbd0eaeb3dd6 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sat, 11 Mar 2023 16:02:56 +0000 Subject: [PATCH 104/159] chore(DB): import pending files Referenced commit(s): 5a628fe4fcf3885045a89ddc54aedfbadeb10c26 --- .../rev_1678389681963091600.sql => db_world/2023_03_11_07.sql} | 1 + .../rev_1678432036156760800.sql => db_world/2023_03_11_08.sql} | 1 + .../rev_1678542211338425200.sql => db_world/2023_03_11_09.sql} | 1 + 3 files changed, 3 insertions(+) rename data/sql/updates/{pending_db_world/rev_1678389681963091600.sql => db_world/2023_03_11_07.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1678432036156760800.sql => db_world/2023_03_11_08.sql} (85%) rename data/sql/updates/{pending_db_world/rev_1678542211338425200.sql => db_world/2023_03_11_09.sql} (70%) diff --git a/data/sql/updates/pending_db_world/rev_1678389681963091600.sql b/data/sql/updates/db_world/2023_03_11_07.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1678389681963091600.sql rename to data/sql/updates/db_world/2023_03_11_07.sql index 2fa534aff..30481a581 100644 --- a/data/sql/updates/pending_db_world/rev_1678389681963091600.sql +++ b/data/sql/updates/db_world/2023_03_11_07.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_11_06 -> 2023_03_11_07 -- Steam Pump Overseer UPDATE `creature_template_addon` SET `auras` = '6961' WHERE `entry` = 18340; UPDATE `creature_template` SET `flags_extra` = `flags_extra`|64 WHERE `entry` = 18340; diff --git a/data/sql/updates/pending_db_world/rev_1678432036156760800.sql b/data/sql/updates/db_world/2023_03_11_08.sql similarity index 85% rename from data/sql/updates/pending_db_world/rev_1678432036156760800.sql rename to data/sql/updates/db_world/2023_03_11_08.sql index fd65db768..a1fa5f605 100644 --- a/data/sql/updates/pending_db_world/rev_1678432036156760800.sql +++ b/data/sql/updates/db_world/2023_03_11_08.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_11_07 -> 2023_03_11_08 -- Starving Helboar UPDATE `creature_template_addon` SET `auras` = '33908' WHERE `entry` = 16879; UPDATE `creature_template` SET `AIName` = '', `detection_range` = 30 WHERE `entry` = 16879; diff --git a/data/sql/updates/pending_db_world/rev_1678542211338425200.sql b/data/sql/updates/db_world/2023_03_11_09.sql similarity index 70% rename from data/sql/updates/pending_db_world/rev_1678542211338425200.sql rename to data/sql/updates/db_world/2023_03_11_09.sql index 1a3411f00..0fe8cdc81 100644 --- a/data/sql/updates/pending_db_world/rev_1678542211338425200.sql +++ b/data/sql/updates/db_world/2023_03_11_09.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_11_08 -> 2023_03_11_09 -- -- Temporus Level fix UPDATE `creature_template` SET `minlevel`=72, `maxlevel`=72 WHERE `entry`=17880; From 73652d4e655be4a630e147c53bbc1f03b62fc1fe Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 11 Mar 2023 17:20:31 +0100 Subject: [PATCH 105/159] fix(Core): Crashfix. (#15338) --- src/server/game/Entities/Unit/Unit.cpp | 42 +++++++++++++++++--------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f01645f3c..f0905f83c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -19956,17 +19956,27 @@ void Unit::_ExitVehicle(Position const* exitPosition) pos = *exitPosition; // HACK - if (vehicle->GetVehicleInfo()->m_ID == 380) // Kologarn right arm - pos.Relocate(1776.0f, -24.0f, 448.75f, 0.0f); - else if (vehicle->GetVehicleInfo()->m_ID == 91) // Helsman's Ship - pos.Relocate(2802.18f, 7054.91f, -0.6f, 4.67f); - else if (vehicle->GetVehicleInfo()->m_ID == 349) // AT Mounts, dismount to the right + VehicleEntry const* vehicleInfo = vehicle->GetVehicleInfo(); + if (vehicleInfo) { - float x = pos.GetPositionX() + 2.0f * cos(pos.GetOrientation() - M_PI / 2.0f); - float y = pos.GetPositionY() + 2.0f * std::sin(pos.GetOrientation() - M_PI / 2.0f); - float z = GetMapHeight(x, y, pos.GetPositionZ()); - if (z > INVALID_HEIGHT) - pos.Relocate(x, y, z); + if (vehicleInfo->m_ID == 380) // Kologarn right arm + { + pos.Relocate(1776.0f, -24.0f, 448.75f, 0.0f); + } + else if (vehicleInfo->m_ID == 91) // Helsman's Ship + { + pos.Relocate(2802.18f, 7054.91f, -0.6f, 4.67f); + } + else if (vehicleInfo->m_ID == 349) // AT Mounts, dismount to the right + { + float x = pos.GetPositionX() + 2.0f * cos(pos.GetOrientation() - M_PI / 2.0f); + float y = pos.GetPositionY() + 2.0f * std::sin(pos.GetOrientation() - M_PI / 2.0f); + float z = GetMapHeight(x, y, pos.GetPositionZ()); + if (z > INVALID_HEIGHT) + { + pos.Relocate(x, y, z); + } + } } AddUnitState(UNIT_STATE_MOVE); @@ -19986,7 +19996,7 @@ void Unit::_ExitVehicle(Position const* exitPosition) } // xinef: hack for flameleviathan seat vehicle - if (vehicle->GetVehicleInfo()->m_ID != 341) + if (!vehicleInfo || vehicleInfo->m_ID != 341) { Movement::MoveSplineInit init(this); init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()); @@ -20008,16 +20018,18 @@ void Unit::_ExitVehicle(Position const* exitPosition) } // xinef: move fall, should we support all creatures that exited vehicle in air? Currently Quest Drag and Drop only, Air Assault quest - if (GetTypeId() == TYPEID_UNIT && !CanFly() && - (vehicle->GetVehicleInfo()->m_ID == 113 || vehicle->GetVehicleInfo()->m_ID == 8 || vehicle->GetVehicleInfo()->m_ID == 290 || vehicle->GetVehicleInfo()->m_ID == 298)) + if (GetTypeId() == TYPEID_UNIT && !CanFly() && vehicleInfo && (vehicleInfo->m_ID == 113 || vehicleInfo->m_ID == 8 || vehicleInfo->m_ID == 290 || vehicleInfo->m_ID == 298)) + { GetMotionMaster()->MoveFall(); - //GetMotionMaster()->MoveFall(); // Enable this once passenger positions are calculater properly (see above) + } if ((!player || !(player->GetDelayedOperations() & DELAYED_VEHICLE_TELEPORT)) && vehicle->GetBase()->HasUnitTypeMask(UNIT_MASK_MINION)) if (((Minion*)vehicleBase)->GetOwner() == this) { - if (vehicle->GetVehicleInfo()->m_ID != 349) + if (!vehicleInfo || vehicleInfo->m_ID != 349) + { vehicle->Dismiss(); + } else if (vehicleBase->GetTypeId() == TYPEID_UNIT) { vehicle->Uninstall(); From 479c965c4ee8b727bf8056786fa766f115cc53ea Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sat, 11 Mar 2023 20:58:44 +0100 Subject: [PATCH 106/159] fix(Scripts/Spells): Fixed Rogue T10 4P bonus. (#15336) --- src/server/scripts/Spells/spell_generic.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index ed54071bd..b3ecbd981 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -764,9 +764,27 @@ class spell_gen_proc_not_self : public AuraScript return eventInfo.GetActor() != eventInfo.GetActionTarget(); } + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + if (Unit* caster = GetCaster()) + if (Unit* target = eventInfo.GetActionTarget()) + { + uint32 spellID = aurEff->GetSpellInfo()->Effects[aurEff->GetEffIndex()].TriggerSpell; + caster->m_Events.AddEventAtOffset([caster, target, spellID]() + { + if (target) + { + caster->CastSpell(target, spellID, true); + } + }, 100ms); + } + } + void Register() override { DoCheckProc += AuraCheckProcFn(spell_gen_proc_not_self::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_gen_proc_not_self::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; From 88d31a1a718815ff8fe9abc7356d73aeffcea5bb Mon Sep 17 00:00:00 2001 From: Tereneckla <50233983+Tereneckla@users.noreply.github.com> Date: Sat, 11 Mar 2023 22:28:12 +0000 Subject: [PATCH 107/159] fix (Core/Spells) Correct Life Tap mana gain and cleanup (#15278) --- src/server/scripts/Spells/spell_warlock.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index d98d56552..822d7bf64 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -753,7 +753,6 @@ class spell_warl_siphon_life : public AuraScript }; // -1454 - Life Tap -#define LIFE_TAP_COEFFICIENT 0.9F class spell_warl_life_tap : public SpellScript { PrepareSpellScript(spell_warl_life_tap); @@ -773,12 +772,11 @@ class spell_warl_life_tap : public SpellScript Player* caster = GetCaster()->ToPlayer(); if (Unit* target = GetHitUnit()) { - int32 damage = GetEffectValue() + LIFE_TAP_COEFFICIENT; - int32 damage2Mana = GetEffectValue(); - int32 mana = int32(damage2Mana + (caster->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + static_cast(SPELL_SCHOOL_SHADOW)) * 0.5f)); + int32 spellEffect = GetEffectValue(); + int32 mana = int32(spellEffect + (caster->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SHADOW) * 0.5f)); // Shouldn't Appear in Combat Log - target->ModifyHealth(-damage); + target->ModifyHealth(-spellEffect); // Improved Life Tap mod if (AuraEffect const* aurEff = caster->GetDummyAuraEffect(SPELLFAMILY_WARLOCK, WARLOCK_ICON_ID_IMPROVED_LIFE_TAP, 0)) @@ -801,7 +799,7 @@ class spell_warl_life_tap : public SpellScript SpellCastResult CheckCast() { - if ((int32(GetCaster()->GetHealth()) > int32(GetSpellInfo()->Effects[EFFECT_0].CalcValue() + (3.1 * GetSpellInfo()->BaseLevel) + LIFE_TAP_COEFFICIENT ))) + if ((int32(GetCaster()->GetHealth()) > int32(GetSpellInfo()->Effects[EFFECT_0].CalcValue()))) return SPELL_CAST_OK; return SPELL_FAILED_FIZZLE; } From 1155c4061f0c68b1456a359e405ad4ed832abb4d Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 12 Mar 2023 00:16:11 -0300 Subject: [PATCH 108/159] =?UTF-8?q?fix(Scripts/BlackMorass):=20Fix=20Aeonu?= =?UTF-8?q?s=20not=20spawning,=20mobs=20spawning=20duri=E2=80=A6=20(#15346?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../instance_the_black_morass.cpp | 43 +++++++++++++++---- .../TheBlackMorass/the_black_morass.cpp | 7 +-- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index a9c920290..4831df6a3 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -56,6 +56,7 @@ public: _currentRift = 0; _shieldPercent = 100; _encounterNPCs.clear(); + _canSpawnPortal = true; // Delay after bosses } void CleanupInstance() @@ -108,12 +109,6 @@ public: player->AreaExploredOrEventHappens(QUEST_MASTER_TOUCH); } }); - break; - } - case DATA_CHRONO_LORD_DEJA: - case DATA_TEMPORUS: - { - _scheduler.RescheduleGroup(CONTEXT_GROUP_RIFTS, 2min + 30s); for (ObjectGuid const& guid : _encounterNPCs) { @@ -126,13 +121,36 @@ public: case NPC_RIFT_LORD: case NPC_RIFT_LORD_2: case NPC_TIME_RIFT: + case NPC_INFINITE_ASSASIN: + case NPC_INFINITE_ASSASIN_2: + case NPC_INFINITE_WHELP: + case NPC_INFINITE_CHRONOMANCER: + case NPC_INFINITE_CHRONOMANCER_2: + case NPC_INFINITE_EXECUTIONER: + case NPC_INFINITE_EXECUTIONER_2: + case NPC_INFINITE_VANQUISHER: + case NPC_INFINITE_VANQUISHER_2: creature->DespawnOrUnsummon(); - break; - default: - break; + break; + default: + break; } } } + + break; + } + case DATA_CHRONO_LORD_DEJA: + case DATA_TEMPORUS: + { + _canSpawnPortal = false; + + _scheduler.Schedule(2min + 30s, [this](TaskContext) + { + _canSpawnPortal = true; + }); + + ScheduleNextPortal(2min + 30s); break; } default: @@ -163,6 +181,12 @@ public: { if (GetCreature(DATA_MEDIVH)) { + // Spawning prevented - there's a 150s delay after a boss dies. + if (!_canSpawnPortal) + { + return; + } + Position spawnPos; if (!_availableRiftPositions.empty()) { @@ -412,6 +436,7 @@ public: GuidSet _encounterNPCs; uint8 _currentRift; int8 _shieldPercent; + bool _canSpawnPortal; TaskScheduler _scheduler; }; }; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index f744fb3ee..99f4c96b2 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -263,11 +263,6 @@ struct npc_time_rift : public NullCreatureAI void Reset() override { uint32 riftNumer = _instance->GetData(DATA_RIFT_NUMBER); - if (riftNumer >= 18) - { - me->DespawnOrUnsummon(30000); - return; - } if (riftNumer < 6) { @@ -366,7 +361,7 @@ struct npc_time_rift : public NullCreatureAI switch (events.ExecuteEvent()) { case EVENT_SUMMON_AT_RIFT: - if (_riftKeeperGUID.GetEntry() != NPC_AEONUS) + if (!_instance->GetCreature(DATA_AEONUS)) { DoSelectSummon(); events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 15000); From 761c8dffad76c77c90c0e3cfa269f6c4715c8c6b Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 12 Mar 2023 04:21:51 +0100 Subject: [PATCH 109/159] fix(Scripts/BlackMorass): Fixed rift mobs texts on summon. (#15339) --- .../CavernsOfTime/TheBlackMorass/boss_aeonus.cpp | 3 --- .../TheBlackMorass/boss_chrono_lord_deja.cpp | 7 ------- .../CavernsOfTime/TheBlackMorass/boss_temporus.cpp | 7 ------- .../CavernsOfTime/TheBlackMorass/the_black_morass.cpp | 9 ++++++++- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp index e8c9a2ce9..da71faa29 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_aeonus.cpp @@ -21,7 +21,6 @@ enum Enums { - SAY_ENTER = 0, SAY_AGGRO = 1, SAY_BANISH = 2, SAY_SLAY = 3, @@ -53,8 +52,6 @@ struct boss_aeonus : public BossAI void IsSummonedBy(WorldObject* /*summoner*/) override { - Talk(SAY_ENTER); - me->SetReactState(REACT_DEFENSIVE); if (Creature* medivh = instance->GetCreature(DATA_MEDIVH)) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp index 617fb5b38..ee0bf883a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_chrono_lord_deja.cpp @@ -21,7 +21,6 @@ enum Enums { - SAY_ENTER = 0, SAY_AGGRO = 1, SAY_BANISH = 2, SAY_SLAY = 3, @@ -47,12 +46,6 @@ enum Enums } } - void InitializeAI() override - { - OwnTalk(SAY_ENTER); - ScriptedAI::InitializeAI(); - } - void JustEngagedWith(Unit* /*who*/) override { OwnTalk(SAY_AGGRO); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp index 85577952a..e784ce409 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/boss_temporus.cpp @@ -21,7 +21,6 @@ enum Enums { - SAY_ENTER = 0, SAY_AGGRO = 1, SAY_BANISH = 2, SAY_SLAY = 3, @@ -44,12 +43,6 @@ struct boss_temporus : public BossAI Talk(id); } - void InitializeAI() override - { - OwnTalk(SAY_ENTER); - ScriptedAI::InitializeAI(); - } - void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index 99f4c96b2..9df152bd1 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -250,7 +250,9 @@ enum timeRift { EVENT_SUMMON_AT_RIFT = 1, EVENT_CHECK_DEATH = 2, - EVENT_SUMMON_BOSS = 3 + EVENT_SUMMON_BOSS = 3, + + SAY_RIFT_MOB_SUMMONED = 0 }; struct npc_time_rift : public NullCreatureAI @@ -399,6 +401,11 @@ struct npc_time_rift : public NullCreatureAI { me->CastSpell(summon, SPELL_RIFT_CHANNEL, false); } + + if (summon->IsAIEnabled) + { + summon->AI()->Talk(SAY_RIFT_MOB_SUMMONED); + } } } } From b5a655c8b71ba2c04f191cd69d21bae11e755db6 Mon Sep 17 00:00:00 2001 From: Christopher Galbraith <39371221+ChrisCGalbraith@users.noreply.github.com> Date: Sun, 12 Mar 2023 03:23:32 +0000 Subject: [PATCH 110/159] fix(Scripts/Creature): Add 5 second timer for Raliq the Drunk to animate drinking (#15203) Co-authored-by: ChrisCGalbraith --- .../scripts/Outland/zone_shattrath_city.cpp | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index 477d6b999..cc2475587 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -35,6 +35,7 @@ EndContentData */ #include "ScriptedCreature.h" #include "ScriptedEscortAI.h" #include "ScriptedGossip.h" +#include "TaskScheduler.h" /*###### ## npc_raliq_the_drunk @@ -45,7 +46,8 @@ EndContentData */ enum Raliq { SPELL_UPPERCUT = 10966, - QUEST_CRACK_SKULLS = 10009 + QUEST_CRACK_SKULLS = 10009, + EMOTE_DRINK = 7, }; class npc_raliq_the_drunk : public CreatureScript @@ -87,28 +89,40 @@ public: } uint32 m_uiNormFaction; - uint32 Uppercut_Timer; void Reset() override { - Uppercut_Timer = 5000; me->RestoreFaction(); + _scheduler.CancelAll(); + _scheduler.Schedule(5s, [this](TaskContext context) + { + me->HandleEmoteCommand(EMOTE_DRINK); + context.Repeat(5s); + }); } + void JustEngagedWith(Unit* /*who*/) override + { + _scheduler + .Schedule(5s, [this](TaskContext context) + { + DoCastVictim(SPELL_UPPERCUT); + context.Repeat(15s); + }); + }; + void UpdateAI(uint32 diff) override { + + _scheduler.Update(diff); + if (!UpdateVictim()) return; - if (Uppercut_Timer <= diff) - { - DoCastVictim(SPELL_UPPERCUT); - Uppercut_Timer = 15000; - } - else Uppercut_Timer -= diff; - DoMeleeAttackIfReady(); } + private: + TaskScheduler _scheduler; }; }; From cbaa63eb64afaaf1ee979b2e87786a5ffab7e672 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 12 Mar 2023 13:25:54 -0300 Subject: [PATCH 111/159] =?UTF-8?q?fix(Core/Session):=20Inform=20the=20cli?= =?UTF-8?q?ent=20when=20we=20can=20no=20longer=20fly=20(flyin=E2=80=A6=20(?= =?UTF-8?q?#15363)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Server/WorldSession.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 3aa618656..2764c39fd 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1084,6 +1084,13 @@ void WorldSession::ReadMovementInfo(WorldPacket& data, MovementInfo* mi) REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY) && GetSecurity() == SEC_PLAYER && !GetPlayer()->m_mover->HasAuraType(SPELL_AURA_FLY) && !GetPlayer()->m_mover->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED), MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY); + if (mi->HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY) && GetSecurity() == SEC_PLAYER && !GetPlayer()->m_mover->HasAuraType(SPELL_AURA_FLY) && !GetPlayer()->m_mover->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED)) + { + // Inform the client we can no longer fly, which is required if data mismatches for some reason + // Like flight auras being removed but the client still sends flight movement packets. + GetPlayer()->SetCanFly(false); + } + //! Cannot fly and fall at the same time REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY) && mi->HasMovementFlag(MOVEMENTFLAG_FALLING), MOVEMENTFLAG_FALLING); From e2eb9fb82b3050d292a5b2f1ca0b7cec548bf666 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 12 Mar 2023 13:27:39 -0300 Subject: [PATCH 112/159] fix(Scripts/BlackMorass): Don't pick the same rift spot in succession (#15359) --- .../instance_the_black_morass.cpp | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index 4831df6a3..57fa05fde 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -150,7 +150,7 @@ public: _canSpawnPortal = true; }); - ScheduleNextPortal(2min + 30s); + ScheduleNextPortal(2min + 30s, Position(0.0f, 0.0f, 0.0f, 0.0f)); break; } default: @@ -173,11 +173,11 @@ public: player->SendUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); } - void ScheduleNextPortal(Milliseconds time) + void ScheduleNextPortal(Milliseconds time, Position lastPosition) { _scheduler.CancelGroup(CONTEXT_GROUP_RIFTS); - _scheduler.Schedule(time, [this](TaskContext context) + _scheduler.Schedule(time, [this, lastPosition](TaskContext context) { if (GetCreature(DATA_MEDIVH)) { @@ -190,7 +190,18 @@ public: Position spawnPos; if (!_availableRiftPositions.empty()) { - spawnPos = Acore::Containers::SelectRandomContainerElement(_availableRiftPositions); + if (_availableRiftPositions.size() > 1) + { + spawnPos = Acore::Containers::SelectRandomContainerElementIf(_availableRiftPositions, [&](Position pos) -> bool + { + return pos != lastPosition; + }); + } + else + { + spawnPos = Acore::Containers::SelectRandomContainerElement(_availableRiftPositions); + } + _availableRiftPositions.remove(spawnPos); DoUpdateWorldState(WORLD_STATE_BM_RIFT, ++_currentRift); @@ -254,13 +265,13 @@ public: case NPC_TIME_RIFT: if (_currentRift < 18) { - if (!_availableRiftPositions.empty() && _availableRiftPositions.size() < 3) + if (_availableRiftPositions.size() < 3) { - ScheduleNextPortal((_currentRift >= 13 ? 2min : 90s)); + ScheduleNextPortal((_currentRift >= 13 ? 2min : 90s), creature->GetHomePosition()); } else { - ScheduleNextPortal(4s); + ScheduleNextPortal(1s, creature->GetHomePosition()); } } @@ -301,7 +312,7 @@ public: DoUpdateWorldState(WORLD_STATE_BM_SHIELD, _shieldPercent); DoUpdateWorldState(WORLD_STATE_BM_RIFT, _currentRift); - ScheduleNextPortal(3s); + ScheduleNextPortal(3s, Position(0.0f, 0.0f, 0.0f, 0.0f)); for (ObjectGuid const& guid : _encounterNPCs) { From a9f945b436c7bf37020b680f59f5cb2f208c6470 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 12 Mar 2023 15:35:54 -0300 Subject: [PATCH 113/159] feat(Core/Player): Implement helper to send system messages to players (#15364) --- src/server/game/Entities/Player/Player.cpp | 5 +++++ src/server/game/Entities/Player/Player.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 0a87fed7f..ac26e58a8 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16220,3 +16220,8 @@ std::string Player::GetDebugInfo() const sstr << Unit::GetDebugInfo(); return sstr.str(); } + +void Player::SendSystemMessage(std::string_view msg, bool escapeCharacters) +{ + ChatHandler(GetSession()).SendSysMessage(msg, escapeCharacters); +} diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 2951bb669..4b5ecd818 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2575,6 +2575,8 @@ public: [[nodiscard]] PlayerSetting GetPlayerSetting(std::string source, uint8 index); void UpdatePlayerSetting(std::string source, uint8 index, uint32 value); + void SendSystemMessage(std::string_view msg, bool escapeCharacters = false); + std::string GetDebugInfo() const override; protected: From 3f25a70934f6729578923a6201983b8ad5f22e8b Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 12 Mar 2023 19:56:23 +0100 Subject: [PATCH 114/159] =?UTF-8?q?fix(Scripts/Achievement):=20Fixed=20Fli?= =?UTF-8?q?rt=20With=20Disaster=20achievement.=20Sourc=E2=80=A6=20(#15352)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rev_1678624060512397500.sql | 21 ++++++++++++++++ .../scripts/World/achievement_scripts.cpp | 25 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678624060512397500.sql diff --git a/data/sql/updates/pending_db_world/rev_1678624060512397500.sql b/data/sql/updates/pending_db_world/rev_1678624060512397500.sql new file mode 100644 index 000000000..6612661f9 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678624060512397500.sql @@ -0,0 +1,21 @@ +-- +DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (3931,12859,4227,3929); +INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) VALUES +-- aliance +-- Kissed Sraaz +(3931,1,9099,0,''), +(3931,11,0,0,'achievement_flirt_with_disaster_perf_check'), +(3931,15,3,0,''), +-- Handful of Rose Petals on Sraaz +(12859,1,9099,0,''), +(12859,11,0,0,'achievement_flirt_with_disaster_perf_check'), +(12859,15,3,0,''), +-- horde +-- Kissed Jeremiah Payson +(3929,1,8403,0,''), +(3929,11,0,0,'achievement_flirt_with_disaster_perf_check'), +(3929,15,3,0,''), +-- Handful of Rose Petals on Jeremiah Payson +(4227,1,8403,0,''), +(4227,11,0,0,'achievement_flirt_with_disaster_perf_check'), +(4227,15,3,0,''); diff --git a/src/server/scripts/World/achievement_scripts.cpp b/src/server/scripts/World/achievement_scripts.cpp index ff5cf3cdf..30ccb2223 100644 --- a/src/server/scripts/World/achievement_scripts.cpp +++ b/src/server/scripts/World/achievement_scripts.cpp @@ -251,6 +251,30 @@ public: } }; +enum FlirtWithDisaster +{ + AURA_PERFUME_FOREVER = 70235, + AURA_PERFUME_ENCHANTRESS = 70234, + AURA_PERFUME_VICTORY = 70233, +}; + +class achievement_flirt_with_disaster_perf_check : public AchievementCriteriaScript +{ + public: + achievement_flirt_with_disaster_perf_check() : AchievementCriteriaScript("achievement_flirt_with_disaster_perf_check") { } + + bool OnCheck(Player* player, Unit* /*target*/, uint32 /*criteria_id*/) override + { + if (!player) + return false; + + if (player->HasAura(AURA_PERFUME_FOREVER) || player->HasAura(AURA_PERFUME_ENCHANTRESS) || player->HasAura(AURA_PERFUME_VICTORY)) + return true; + + return false; + } +}; + void AddSC_achievement_scripts() { new achievement_resilient_victory(); @@ -270,4 +294,5 @@ void AddSC_achievement_scripts() new achievement_tilted(); new achievement_not_even_a_scratch(); new achievement_killed_exp_or_honor_target(); + new achievement_flirt_with_disaster_perf_check(); } From ec448cb6c1995ae56328d292a7b68d7fe2e717db Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Sun, 12 Mar 2023 18:58:49 +0000 Subject: [PATCH 115/159] chore(DB): import pending files Referenced commit(s): 3f25a70934f6729578923a6201983b8ad5f22e8b --- .../rev_1678624060512397500.sql => db_world/2023_03_12_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1678624060512397500.sql => db_world/2023_03_12_00.sql} (94%) diff --git a/data/sql/updates/pending_db_world/rev_1678624060512397500.sql b/data/sql/updates/db_world/2023_03_12_00.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1678624060512397500.sql rename to data/sql/updates/db_world/2023_03_12_00.sql index 6612661f9..2d2d105fc 100644 --- a/data/sql/updates/pending_db_world/rev_1678624060512397500.sql +++ b/data/sql/updates/db_world/2023_03_12_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_11_09 -> 2023_03_12_00 -- DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (3931,12859,4227,3929); INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) VALUES From 591511c875685aa4466e986f95a74b72958659bf Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 12 Mar 2023 17:39:08 -0300 Subject: [PATCH 116/159] =?UTF-8?q?fix(Core/Session):=20Let=20movement=20f?= =?UTF-8?q?lags=20update=20on=20their=20own=20when=20disabl=E2=80=A6=20(#1?= =?UTF-8?q?5366)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Server/WorldSession.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 2764c39fd..e8a7a3a37 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -1081,9 +1081,6 @@ void WorldSession::ReadMovementInfo(WorldPacket& data, MovementInfo* mi) e.g. aerial combat. */ - REMOVE_VIOLATING_FLAGS(mi->HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY) && GetSecurity() == SEC_PLAYER && !GetPlayer()->m_mover->HasAuraType(SPELL_AURA_FLY) && !GetPlayer()->m_mover->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED), - MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY); - if (mi->HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_CAN_FLY) && GetSecurity() == SEC_PLAYER && !GetPlayer()->m_mover->HasAuraType(SPELL_AURA_FLY) && !GetPlayer()->m_mover->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED)) { // Inform the client we can no longer fly, which is required if data mismatches for some reason From 3fa4117195fb3d145ff4d10109982aaf75123dc9 Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 12 Mar 2023 21:26:52 -0300 Subject: [PATCH 117/159] feat(Core/BasicEvents): Add the possibility to group BasicEvents (#15369) --- src/common/Utilities/EventProcessor.cpp | 26 +++++++++++++++++++++++-- src/common/Utilities/EventProcessor.h | 14 ++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/common/Utilities/EventProcessor.cpp b/src/common/Utilities/EventProcessor.cpp index 9b34a8d6c..3488d0ff3 100644 --- a/src/common/Utilities/EventProcessor.cpp +++ b/src/common/Utilities/EventProcessor.cpp @@ -75,7 +75,7 @@ void EventProcessor::Update(uint32 p_time) // Reschedule non deletable events to be checked at // the next update tick - AddEvent(event, CalculateTime(1), false); + AddEvent(event, CalculateTime(1), false, 0); } } @@ -111,11 +111,33 @@ void EventProcessor::KillAllEvents(bool force) m_events.clear(); } -void EventProcessor::AddEvent(BasicEvent* Event, uint64 e_time, bool set_addtime) +void EventProcessor::CancelEventGroup(uint8 group) +{ + for (auto itr = m_events.begin(); itr != m_events.end();) + { + if (itr->second->m_eventGroup != group) + { + continue; + } + + // Abort events which weren't aborted already + if (!itr->second->IsAborted()) + { + itr->second->SetAborted(); + itr->second->Abort(m_time); + } + + delete itr->second; + itr = m_events.erase(itr); + } +} + +void EventProcessor::AddEvent(BasicEvent* Event, uint64 e_time, bool set_addtime, uint8 eventGroup) { if (set_addtime) Event->m_addTime = m_time; Event->m_execTime = e_time; + Event->m_eventGroup = eventGroup; m_events.insert(std::pair(e_time, Event)); } diff --git a/src/common/Utilities/EventProcessor.h b/src/common/Utilities/EventProcessor.h index aaf6481a7..40ff62a49 100644 --- a/src/common/Utilities/EventProcessor.h +++ b/src/common/Utilities/EventProcessor.h @@ -69,6 +69,7 @@ class BasicEvent // these can be used for time offset control uint64 m_addTime{0}; // time when the event was added to queue, filled by event handler uint64 m_execTime{0}; // planned time of next execution, filled by event handler + uint8 m_eventGroup{0}; }; template @@ -101,11 +102,16 @@ class EventProcessor void Update(uint32 p_time); void KillAllEvents(bool force); - void AddEvent(BasicEvent* Event, uint64 e_time, bool set_addtime = true); + void AddEvent(BasicEvent* Event, uint64 e_time, bool set_addtime = true) { AddEvent(Event, e_time, set_addtime, 0); }; + void AddEvent(BasicEvent* Event, uint64 e_time, bool set_addtime, uint8 eventGroup); template is_lambda_event AddEvent(T&& event, Milliseconds e_time, bool set_addtime = true) { AddEvent(new LambdaBasicEvent(std::move(event)), e_time, set_addtime); } - void AddEventAtOffset(BasicEvent* event, Milliseconds offset) { AddEvent(event, CalculateTime(offset.count())); } - void AddEventAtOffset(BasicEvent* event, Milliseconds offset, Milliseconds offset2) { AddEvent(event, CalculateTime(randtime(offset, offset2).count())); } + void AddEventAtOffset(BasicEvent* event, Milliseconds offset) { AddEvent(event, CalculateTime(offset.count()), true, 0); } + void AddEventAtOffset(BasicEvent* event, Milliseconds offset, Milliseconds offset2) { AddEvent(event, CalculateTime(randtime(offset, offset2).count()), true, false); } + template + is_lambda_event AddEventAtOffset(T&& event, Milliseconds offset, uint8 eventGroup) { AddEvent(new LambdaBasicEvent(std::move(event)), CalculateTime(offset.count()), true, eventGroup); }; + template + is_lambda_event AddEventAtOffset(T&& event, Milliseconds offset, Milliseconds offset2, uint8 eventGroup) { AddEvent(new LambdaBasicEvent(std::move(event)), CalculateTime(randtime(offset, offset2).count()), true, eventGroup); }; template is_lambda_event AddEventAtOffset(T&& event, Milliseconds offset) { AddEventAtOffset(new LambdaBasicEvent(std::move(event)), offset); } template @@ -116,6 +122,8 @@ class EventProcessor //calculates next queue tick time [[nodiscard]] uint64 CalculateQueueTime(uint64 delay) const; + void CancelEventGroup(uint8 group); + protected: uint64 m_time{0}; EventList m_events; From 3d5ec682c0a0e720d66c01e23529e2f905b99f7f Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Mon, 13 Mar 2023 12:14:40 +0100 Subject: [PATCH 118/159] fix(Core/Movement): Updated creature pet's follow movement. (#15360) --- .../MovementGenerators/TargetedMovementGenerator.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index cd7ab7252..fba9d7bf5 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -296,7 +296,13 @@ static Optional GetVelocity(Unit* owner, Unit* target, G3D::Vector3 const if (!owner->IsInCombat() && !owner->IsVehicle() && !owner->HasUnitFlag(UNIT_FLAG_POSSESSED) && (owner->IsPet() || owner->IsGuardian() || owner->GetGUID() == target->GetCritterGUID() || owner->GetCharmerOrOwnerGUID() == target->GetGUID())) { - UnitMoveType moveType = Movement::SelectSpeedType(target->GetUnitMovementFlags()); + uint32 moveFlags = target->GetUnitMovementFlags(); + if (target->movespline->isWalking()) + { + moveFlags |= MOVEMENTFLAG_WALKING; + } + + UnitMoveType moveType = Movement::SelectSpeedType(moveFlags); speed = std::max(target->GetSpeed(moveType), owner->GetSpeed(moveType)); if (playerPet) @@ -503,8 +509,8 @@ bool FollowMovementGenerator::DoUpdate(T* owner, uint32 time_diff) Movement::MoveSplineInit init(owner); init.MovebyPath(i_path->GetPath()); - init.SetWalk(target->IsWalking()); - if (Optional velocity = GetVelocity(owner, target, i_path->GetActualEndPosition(), owner->IsGuardian() && target->GetTypeId() == TYPEID_PLAYER)) + init.SetWalk(target->IsWalking() || target->movespline->isWalking()); + if (Optional velocity = GetVelocity(owner, target, i_path->GetActualEndPosition(), owner->IsGuardian())) init.SetVelocity(*velocity); init.Launch(); } From 2641459304ee936f58211c34bf86a39e15aaaeec Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Mon, 13 Mar 2023 12:15:10 +0100 Subject: [PATCH 119/159] fix(Core/Players): Charmed players should not attack critters. (#15358) --- src/server/game/Grids/Notifiers/GridNotifiers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index 46871dfbb..e06b9091f 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -860,7 +860,7 @@ namespace Acore AnyUnfriendlyUnitInObjectRangeCheck(WorldObject const* obj, Unit const* funit, float range) : i_obj(obj), i_funit(funit), i_range(range) {} bool operator()(Unit* u) { - if (u->IsAlive() && i_obj->IsWithinDistInMap(u, i_range) && !i_funit->IsFriendlyTo(u) && + if (u->IsAlive() && !u->IsCritter() && i_obj->IsWithinDistInMap(u, i_range) && !i_funit->IsFriendlyTo(u) && (i_funit->GetTypeId() != TYPEID_UNIT || !i_funit->ToCreature()->IsAvoidingAOE())) // pussywizard return true; else From a375e713f9a1ce6119a8890d0c7fcd4251b0ffaa Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Mon, 13 Mar 2023 12:18:00 +0100 Subject: [PATCH 120/159] fix(Core/Spells): Casting Basaic Campfire should give cooking skill. (#15194) --- src/server/scripts/Spells/spell_generic.cpp | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index b3ecbd981..29591d858 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -4595,6 +4595,26 @@ private: uint32 _aura; }; +inline int32 SkillGainChance(uint32 SkillValue, uint32 GrayLevel, uint32 GreenLevel, uint32 YellowLevel) +{ + if (SkillValue >= GrayLevel) + { + return sWorld->getIntConfig(CONFIG_SKILL_CHANCE_GREY) * 10; + } + + if (SkillValue >= GreenLevel) + { + return sWorld->getIntConfig(CONFIG_SKILL_CHANCE_GREEN) * 10; + } + + if (SkillValue >= YellowLevel) + { + return sWorld->getIntConfig(CONFIG_SKILL_CHANCE_YELLOW) * 10; + } + + return sWorld->getIntConfig(CONFIG_SKILL_CHANCE_ORANGE) * 10; +} + // 818 Basic Campfire class spell_gen_basic_campfire : public SpellScript { @@ -4612,9 +4632,20 @@ class spell_gen_basic_campfire : public SpellScript } } + void ModifyCookingSkill(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + { + uint32 SkillValue = player->GetPureSkillValue(SKILL_COOKING); + int32 chance = SkillGainChance(SkillValue, 75, 50, 25); + player->UpdateSkillPro(SKILL_COOKING, chance, 1); + } + } + void Register() override { OnDestinationTargetSelect += SpellDestinationTargetSelectFn(spell_gen_basic_campfire::ModDest, EFFECT_0, TARGET_DEST_CASTER_SUMMON); + OnEffectHit += SpellEffectFn(spell_gen_basic_campfire::ModifyCookingSkill, EFFECT_0, SPELL_EFFECT_TRANS_DOOR); } }; From 6a66b36a5d5cba8bab9fb62e0e0680cd5c94c4ab Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Mon, 13 Mar 2023 12:18:44 +0100 Subject: [PATCH 121/159] fix(Scripts/Creatures): Fixed some profession trainers. (#15349) --- src/server/scripts/World/npc_professions.cpp | 53 ++++++++++---------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/server/scripts/World/npc_professions.cpp b/src/server/scripts/World/npc_professions.cpp index 5dadc63de..07c7acba3 100644 --- a/src/server/scripts/World/npc_professions.cpp +++ b/src/server/scripts/World/npc_professions.cpp @@ -648,6 +648,11 @@ public: if (creature->IsVendor()) AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); + if (creature->IsTrainer()) + { + AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + } + uint32 creatureId = creature->GetEntry(); //WEAPONSMITH & ARMORSMITH if (player->GetBaseSkillValue(SKILL_BLACKSMITHING) >= 225) @@ -666,18 +671,12 @@ public: case N_TRAINER_WEAPON1: //Ironus Coldsteel case N_TRAINER_WEAPON2: //Borgosh Corebender if (player->HasSpell(S_WEAPON)) - { AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_WEAPON_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3); - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - } break; case N_TRAINER_ARMOR1: //Grumnus Steelshaper case N_TRAINER_ARMOR2: //Okothos Ironrager if (player->HasSpell(S_ARMOR)) - { AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ARMOR_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - } break; } } @@ -691,28 +690,19 @@ public: if (!HasWeaponSub(player)) AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 5); if (player->HasSpell(S_HAMMER)) - { AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8); - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - } break; case N_TRAINER_AXE: //Kilram if (!HasWeaponSub(player)) AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 6); if (player->HasSpell(S_AXE)) - { AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9); - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - } break; case N_TRAINER_SWORD: //Seril Scourgebane if (!HasWeaponSub(player)) AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 7); if (player->HasSpell(S_SWORD)) - { AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 10); - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - } break; } } @@ -992,6 +982,22 @@ public: player->PrepareQuestMenu(creature->GetGUID()); } + switch (creature->GetEntry()) + { + case N_TRAINER_DRAGON1: //Peter Galen + case N_TRAINER_DRAGON2: //Thorkaf Dragoneye + AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_DRAGON1 ? GOSSIP_MENU_PETER_GALEN : GOSSIP_MENU_THORKAF_DRAGONEYE, GOSSIP_MENU_OPTION_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + break; + case N_TRAINER_ELEMENTAL1: //Sarah Tanner + case N_TRAINER_ELEMENTAL2: //Brumn Winterhoof + AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_ELEMENTAL1 ? GOSSIP_MENU_SARAH_TANNER : GOSSIP_MENU_BRUMN_WINTERHOOF, GOSSIP_MENU_OPTION_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + break; + case N_TRAINER_TRIBAL1: //Caryssia Moonhunter + case N_TRAINER_TRIBAL2: //Se'Jib + AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_TRIBAL1 ? GOSSIP_MENU_CARYSSIA_MOONHUNTER : GOSSIP_MENU_SEJIB, GOSSIP_MENU_OPTION_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + break; + } + if (player->HasSkill(SKILL_LEATHERWORKING) && player->GetBaseSkillValue(SKILL_LEATHERWORKING) >= 225 && player->GetLevel() > 40) { switch (creature->GetEntry()) @@ -999,26 +1005,17 @@ public: case N_TRAINER_DRAGON1: //Peter Galen case N_TRAINER_DRAGON2: //Thorkaf Dragoneye if (player->HasSpell(S_DRAGON)) - { - AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_DRAGON1 ? GOSSIP_MENU_PETER_GALEN : GOSSIP_MENU_THORKAF_DRAGONEYE, GOSSIP_MENU_OPTION_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_DRAGON1 ? GOSSIP_MENU_PETER_GALEN : GOSSIP_MENU_THORKAF_DRAGONEYE, GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_DRAGONSCALE, GOSSIP_SENDER_MAIN, GOSSIP_MENU_UNLEARN_CONFIRM_DRAGONSCALE); - } break; case N_TRAINER_ELEMENTAL1: //Sarah Tanner case N_TRAINER_ELEMENTAL2: //Brumn Winterhoof if (player->HasSpell(S_ELEMENTAL)) - { - AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_ELEMENTAL1 ? GOSSIP_MENU_SARAH_TANNER : GOSSIP_MENU_BRUMN_WINTERHOOF, GOSSIP_MENU_OPTION_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_ELEMENTAL1 ? GOSSIP_MENU_SARAH_TANNER : GOSSIP_MENU_BRUMN_WINTERHOOF, GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_ELEMENTAL, GOSSIP_SENDER_MAIN, GOSSIP_MENU_UNLEARN_CONFIRM_ELEMENTAL); - } break; case N_TRAINER_TRIBAL1: //Caryssia Moonhunter case N_TRAINER_TRIBAL2: //Se'Jib if (player->HasSpell(S_TRIBAL)) - { - AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_TRIBAL1 ? GOSSIP_MENU_CARYSSIA_MOONHUNTER : GOSSIP_MENU_SEJIB, GOSSIP_MENU_OPTION_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); AddGossipItemFor(player, creature->GetEntry() == N_TRAINER_TRIBAL1 ? GOSSIP_MENU_CARYSSIA_MOONHUNTER : GOSSIP_MENU_SEJIB, GOSSIP_MENU_OPTION_CONFIRM_UNLEARN_TRIBAL, GOSSIP_SENDER_MAIN, GOSSIP_MENU_UNLEARN_CONFIRM_TRIBAL); - } break; } } @@ -1084,6 +1081,11 @@ public: if (creature->IsVendor()) AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); + if (creature->IsTrainer()) + { + AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + } + //TAILORING SPEC if (player->HasSkill(SKILL_TAILORING) && player->GetBaseSkillValue(SKILL_TAILORING) >= 350 && player->GetLevel() > 59) { @@ -1097,7 +1099,6 @@ public: if (player->HasSpell(S_SPELLFIRE)) { AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); } break; case N_TRAINER_MOONCLOTH: //Nasmara Moonsong @@ -1106,7 +1107,6 @@ public: if (player->HasSpell(S_MOONCLOTH)) { AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5); - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); } break; case N_TRAINER_SHADOWEAVE: //Andrion Darkspinner @@ -1115,7 +1115,6 @@ public: if (player->HasSpell(S_SHADOWEAVE)) { AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6); - AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); } break; } From 6270c6ab64cb40b0eabf3edd8c220ebda0a35d30 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Mon, 13 Mar 2023 15:19:08 +0200 Subject: [PATCH 122/159] fix(Scripts/Ulduar): Yogg-Saron hardcode & some adustments. (#15146) --- .../rev_1676907518456211300.sql | 23 ++ .../game/Spells/SpellInfoCorrections.cpp | 6 + .../Ulduar/Ulduar/boss_yoggsaron.cpp | 383 ++++++++---------- 3 files changed, 193 insertions(+), 219 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1676907518456211300.sql diff --git a/data/sql/updates/pending_db_world/rev_1676907518456211300.sql b/data/sql/updates/pending_db_world/rev_1676907518456211300.sql new file mode 100644 index 000000000..fd4c2aea5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1676907518456211300.sql @@ -0,0 +1,23 @@ +-- Yogg Saron Vision -- Add missing text +DELETE FROM `creature_text` WHERE `CreatureID`=33552; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(33552, 0, 0, 'A thousand deaths....', 12, 0, 100, 0, 0, 15762, 33616, 0, 'Yogg-Saron'), +(33552, 1, 0, 'Or one murder.', 12, 0, 100, 0, 0, 15763, 33617, 0, 'Yogg-Saron'), +(33552, 2, 0, 'Your petty quarrels only make me stronger.', 12, 0, 100, 0, 0, 15764, 34188, 0, 'Yogg-Saron'), +(33552, 3, 0, 'Yrr n\'lyeth... shuul anagg!', 12, 0, 100, 0, 0, 15766, 33628, 0, 'Yogg-Saron'), +(33552, 4, 0, 'He will learn... no king rules forever; only death is eternal!', 12, 0, 100, 0, 0, 15767, 33629, 0, 'Yogg-Saron'), +(33552, 5, 0, 'His brood learned their lesson before too long. You will soon learn yours!', 12, 0, 100, 0, 0, 15765, 33663, 0, 'Yogg-Saron'); + +DELETE FROM `creature_text_locale` WHERE `CreatureID`=33552 AND `Locale`='zhCN'; +INSERT INTO `creature_text_locale` (`CreatureID`, `GroupID`, `ID`, `Locale`, `Text`) VALUES +(33552, 0, 0, 'zhCN', '被无情地杀戮……'), +(33552, 1, 0, 'znCN', '或者杀戮别人。'), +(33552, 2, 0, 'zhCN', '你们微不足道的抵抗只能让我变得更加强大。'), +(33552, 3, 0, 'zhCN', 'Yrr n\'lyeth... shuul anagg!'), +(33552, 4, 0, 'zhCN', '他会明白……没有谁可以永远坐在王位上,只有死亡才是永恒的!'), +(33552, 5, 0, 'zhCN', '他的族群没用多久就得到了教训。你们也快了!'); + +-- Death Orb (Death Ray) +DELETE FROM `creature_template_movement` WHERE `CreatureId` = 33882; +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(33882, 1, 0, 0, 0, 0, 0, 0); diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 6c648f3f9..e0c4d4b59 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -4471,6 +4471,12 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT; }); + // Death Ray Warning Visual, Death Ray Damage Visual + ApplySpellFix({ 63882, 63886 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx5 |= SPELL_ATTR5_ALLOW_ACTION_DURING_CHANNEL; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp index 36316f05b..99f2c7d6c 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp @@ -183,6 +183,7 @@ enum NPCsGOs NPC_SANITY_WELL = 33991, NPC_YOGG_SARON = 33288, NPC_VOICE_OF_YOGG_SARON = 33280, + NPC_YOGG_SARON_VISION = 33552, NPC_CRUSHER_TENTACLE = 33966, // 50 secs ? NPC_CONSTRICTOR_TENTACLE = 33983, // 15-20 secs ? @@ -226,57 +227,6 @@ enum NPCsGOs SARA_TRANSFORM_MODEL = 29182, }; -enum YoggSaronSounds -{ - // SARA - SARA_AGGRO = 15775, - SARA_P1_CAST1 = 15773, - SARA_P1_CAST2 = 15774, - SARA_P1_KILL1 = 15778, - SARA_P1_KILL2 = 15779, - - SARA_P2_START = 15754, - SARA_P2_CAST1 = 15776, - SARA_P2_CAST2 = 15777, - - // YOGG-SARON - YS_OPEN_PORTALS = 15756, - YS_P3_START = 15755, - YS_P3_DEAFENING_ROAR = 15758, - YS_P3_DEATH = 15761, - YS_P3_LUNATIC_GAZE = 15757, - - VOYS_P1_WIPE = 15780, - VOYS_INSANE1 = 15759, - VOYS_INSANE2 = 15760, - - // VISIONS - // STORMWIND - YS_V1_1 = 15762, - YS_V1_2 = 15763, - YS_V1_3 = 15764, - GAR_1 = 15538, - GAR_2 = 15539, - GAR_3 = 15540, - GAR_4 = 15541, - LL_1 = 15585, - - // CHAMBER - NEL_1 = 15631, - NEL_2 = 15632, - YSE_1 = 15784, - MAL_1 = 15610, - YS_V2_1 = 15765, - - // ICECROWN - LK_1 = 15598, - LK_2 = 15599, - YS_V3_1 = 15766, - YS_V3_2 = 15767, - IC_1 = 15470, - IC_2 = 15471, -}; - enum Misc { ACTION_UNSUMMON_CLOUDS = -16, @@ -305,6 +255,9 @@ enum Misc CRITERIA_NOT_GETTING_OLDER = 21001, + // YOGG-SARON (laugh) + YS_P3_LUNATIC_GAZE = 15757, + DATA_GET_KEEPERS_COUNT = 1, DATA_GET_CURRENT_ILLUSION = 2, DATA_GET_SARA_PHASE = 3, @@ -330,6 +283,68 @@ static LocationsXY yoggPortalLoc[] = {1961.37f, -19.54f, 325.5f} }; +enum Texts +{ + // Sara + SAY_SARA_ULDUAR_SCREAM_0 = 0, // Unused + SAY_SARA_ULDUAR_SCREAM_1 = 1, // Unused + SAY_SARA_AGGRO = 2, + SAY_SARA_FERVOR_HIT = 3, + SAY_SARA_ANGER = 4, // Comment in DB is for BLESSING_HIT, but it's wrong. + SAY_SARA_KILL = 5, + SAY_SARA_TRANSFORM_1 = 6, // "I am the lucid dream." + SAY_SARA_TRANSFORM_2 = 7, // "The monster in your nightmares." + SAY_SARA_TRANSFORM_3 = 8, // "The fiend of a thousand faces." + SAY_SARA_TRANSFORM_4 = 9, // "Cower before my true form." + SAY_SARA_DEATH_RAY = 10, + SAY_SARA_PSYCHOSIS_HIT = 11, + + // Voice of Yogg-Saron + WHISPER_VOICE_PHASE_1_WIPE = 0, + WHISPER_VOICE_INSANE = 1, + + // Brain of Yogg-Saron + EMOTE_YOGG_SARON_BRAIN_SHATTERED = 0, + + // Yogg-Saron + SAY_YOGG_SARON_SPAWN = 0, + SAY_YOGG_SARON_MADNESS = 1, // Open Portals + EMOTE_YOGG_SARON_MADNESS = 2, + SAY_YOGG_SARON_PHASE_3 = 3, + SAY_YOGG_SARON_DEAFENING_ROAR = 4, + EMOTE_YOGG_SARON_DEAFENING_ROAR = 5, + SAY_YOGG_SARON_DEATH = 6, + EMOTE_YOGG_SARON_EMPOWERING_SHADOWS = 7, // Shadow Beacon + EMOTE_YOGG_SARON_BERSERK = 8, + + // Visions - Text is in order of Roleplay + // The Assassination of King Llane vision + SAY_GARONA_1 = 0, + SAY_GARONA_2 = 1, + SAY_GARONA_3 = 2, + SAY_YOGG_1 = 0, + SAY_YOGG_2 = 1, + SAY_LLANE_1 = 0, + SAY_GARONA_4 = 3, + SAY_YOGG_3 = 2, + + // The Forging of the Demon Soul vision + SAY_NEL_1 = 0, + SAY_YAS_1 = 0, + SAY_NEL_2 = 1, + SAY_MAL_1 = 0, + SAY_YOGG_4 = 5, + + // The Tortured Champion vision + SAY_LK_1 = 0, + SAY_IC_1 = 0, + SAY_IC_2 = 1, + SAY_LK_2 = 1, + SAY_YOGG_5 = 3, + SAY_YOGG_6 = 4, + +}; + const Position Middle = {1980.28f, -25.5868f, 329.397f, M_PI * 1.5f}; class boss_yoggsaron_sara : public CreatureScript @@ -429,6 +444,17 @@ public: void Reset() override { + if (!_secondPhase) // Phase 1 wipe + { + me->GetMap()->DoForAllPlayers([&](Player* player) + { + if (Creature* voice = me->FindNearestCreature(NPC_VOICE_OF_YOGG_SARON, 10.0f)) + { + voice->AI()->Talk(WHISPER_VOICE_PHASE_1_WIPE, player); + } + }); + } + summons.DoAction(ACTION_DESPAWN_ADDS); events.Reset(); summons.DespawnAll(); @@ -484,8 +510,7 @@ public: events.ScheduleEvent(EVENT_SARA_P1_SUMMON, 0ms, 0, EVENT_PHASE_ONE); events.SetPhase(EVENT_PHASE_ONE); - me->Yell("The time to strike at the head of the beast will soon be upon us! Focus your anger and hatred on his minions!", LANG_UNIVERSAL); - me->PlayDirectSound(SARA_AGGRO); + Talk(SAY_SARA_AGGRO); me->setActive(true); } @@ -577,37 +602,11 @@ public: _currentIllusion = _currentIllusion == 1 ? 3 : (_currentIllusion - 1); } - void SpellSounds() - { - if (urand(0, 9)) - return; - - if (urand(0, 1)) - { - me->Yell(_secondPhase ? "Tremble, mortals, before the coming of the end!" : "Yes! YES! Show them no mercy! Give no pause to your attacks!", LANG_UNIVERSAL); - me->PlayDirectSound(_secondPhase ? SARA_P2_CAST2 : SARA_P1_CAST1); - } - else - { - me->Yell(_secondPhase ? "Suffocate upon your own hate!" : "Let hatred and rage guide your blows!", LANG_UNIVERSAL); - me->PlayDirectSound(_secondPhase ? SARA_P2_CAST1 : SARA_P1_CAST2); - } - } - void KilledUnit(Unit* who) override { - if (who->GetTypeId() != TYPEID_PLAYER) - return; - - if (urand(0, 1)) + if (who->IsPlayer()) { - me->Yell("Could they have been saved?", LANG_UNIVERSAL); - me->PlayDirectSound(SARA_P1_KILL2); - } - else - { - me->Yell("Powerless to act...", LANG_UNIVERSAL); - me->PlayDirectSound(SARA_P1_KILL1); + Talk(SAY_SARA_KILL); } } @@ -675,9 +674,10 @@ public: return; // Illusion shatters (param - stun time) - WorldPacket data; - ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID_BOSS_EMOTE, LANG_UNIVERSAL, me, nullptr, "Illusion shatters and a path to the central chamber opens!"); - me->SendMessageToSetInRange(&data, 500, false); + if (Creature* yoggb = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(NPC_BRAIN_OF_YOGG_SARON))) + { + yoggb->AI()->Talk(EMOTE_YOGG_SARON_BRAIN_SHATTERED); + } uint32 timer = events.GetNextEventTime(EVENT_SARA_P2_OPEN_PORTALS); uint32 portalTime = (timer > events.GetTimer() ? timer - events.GetTimer() : 0); @@ -706,8 +706,7 @@ public: cr->SetVisible(false); _p2TalkTimer++; - me->Yell("I am the lucid dream.", LANG_UNIVERSAL); - me->PlayDirectSound(SARA_P2_START); + Talk(SAY_SARA_TRANSFORM_1); } return; } @@ -747,18 +746,18 @@ public: { EntryCheckPredicate pred(NPC_OMINOUS_CLOUD); summons.DoAction(ACTION_UNSUMMON_CLOUDS, pred); - me->Yell("The monster in your nightmares.", LANG_UNIVERSAL); + Talk(SAY_SARA_TRANSFORM_2); _p2TalkTimer = 20000; } else if (_p2TalkTimer >= 25000 && _p2TalkTimer < 40000) { summons.DespawnEntry(NPC_OMINOUS_CLOUD); - me->Yell("The fiend of a thousand faces.", LANG_UNIVERSAL); + Talk(SAY_SARA_TRANSFORM_3); _p2TalkTimer = 40000; } else if (_p2TalkTimer >= 44500 && _p2TalkTimer < 60000) { - me->Yell("Cower before my true form.", LANG_UNIVERSAL); + Talk(SAY_SARA_TRANSFORM_4); _p2TalkTimer = 60000; } else if (_p2TalkTimer >= 64000) @@ -795,8 +794,19 @@ public: case EVENT_SARA_P1_SPELLS: { uint32 spell = RAND(SPELL_SARAS_ANGER_TARGET_SELECTOR, SPELL_SARAS_BLESSING_TARGET_SELECTOR, SPELL_SARAS_FAVOR_TARGET_SELECTOR); + if (urand(0, 2)) + { + if (spell == SPELL_SARAS_ANGER_TARGET_SELECTOR) + { + Talk(SAY_SARA_ANGER); + } + else if (spell == SPELL_SARAS_FAVOR_TARGET_SELECTOR) + { + Talk(SAY_SARA_FERVOR_HIT); + } + } + me->CastCustomSpell(spell, SPELLVALUE_MAX_TARGETS, 1, nullptr, false); - SpellSounds(); events.RepeatEvent(me->GetMap()->Is25ManRaid() ? urand(0, 3000) : 4000 + urand(0, 2000)); break; } @@ -815,11 +825,15 @@ public: events.Repeat(20s); break; case EVENT_SARA_P2_PSYCHOSIS: - SpellSounds(); + if ((urand(0, 9)) == 0) // Rarely said (as it's casted every 3.5s) + { + Talk(SAY_SARA_PSYCHOSIS_HIT); + } me->CastCustomSpell(SPELL_PSYCHOSIS, SPELLVALUE_MAX_TARGETS, 1, me, false); events.Repeat(3500ms); break; case EVENT_SARA_P2_DEATH_RAY: + Talk(SAY_SARA_DEATH_RAY); SummonDeathOrbs(); events.Repeat(20s); break; @@ -857,7 +871,7 @@ public: me->SetOrientation(M_PI); me->SetDisplayId(SARA_TRANSFORM_MODEL); - me->SendMonsterMove(me->GetPositionX(), me->GetPositionY(), 355, 2000, SPLINEFLAG_FLYING); + me->NearTeleportTo(me->GetPositionX(), me->GetPositionY(), 355, me->GetOrientation()); me->SetPosition(me->GetPositionX(), me->GetPositionY(), 355, me->GetOrientation()); SpawnTentacle(NPC_CRUSHER_TENTACLE); @@ -875,6 +889,13 @@ public: events.ScheduleEvent(EVENT_SARA_P2_OPEN_PORTALS, 60000, 0, EVENT_PHASE_TWO); break; case EVENT_SARA_P1_BERSERK: + if (me->GetInstanceScript()) + { + if (Creature* yogg = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(TYPE_YOGGSARON))) + { + yogg->AI()->Talk(EMOTE_YOGG_SARON_BERSERK); + } + } me->CastSpell(me, SPELL_EXTINGUISH_ALL_LIFE, true); events.Repeat(5s); break; @@ -966,7 +987,7 @@ public: if (_checkTimer >= 500 && !_isSummoning) { Unit* who = me->SelectNearbyTarget(nullptr, 6.0f); - if (who && who->GetTypeId() == TYPEID_PLAYER && !me->HasAura(SPELL_SUMMON_GUARDIAN_OF_YS) && !who->HasAura(SPELL_HODIR_FLASH_FREEZE)) + if (who && who->IsPlayer() && !me->HasAura(SPELL_SUMMON_GUARDIAN_OF_YS) && !who->HasAura(SPELL_HODIR_FLASH_FREEZE)) { _isSummoning = true; Talk(0, who); @@ -1079,8 +1100,7 @@ public: summons.DespawnAll(); events.Reset(); - me->Yell("Your fate is sealed. The end of days is finally upon you and ALL who inhabit this miserable little seedling. Uulwi ifis halahs gag erh'ongg w'ssh.", LANG_UNIVERSAL); - me->PlayDirectSound(YS_P3_DEATH); + Talk(SAY_YOGG_SARON_DEATH); if (m_pInstance) { @@ -1116,12 +1136,12 @@ public: } else if (param == ACTION_YOGG_SARON_START_YELL) { - me->Yell("BOW DOWN BEFORE THE GOD OF DEATH!", LANG_UNIVERSAL); + Talk(SAY_YOGG_SARON_SPAWN); } else if (param == ACTION_YOGG_SARON_OPEN_PORTAL_YELL) { - me->Yell("MADNESS WILL CONSUME YOU!", LANG_UNIVERSAL); - me->PlayDirectSound(YS_OPEN_PORTALS); + Talk(SAY_YOGG_SARON_MADNESS); + Talk(EMOTE_YOGG_SARON_MADNESS); } else if (param == ACTION_YOGG_SARON_START_P3) { @@ -1135,8 +1155,7 @@ public: events.ScheduleEvent(EVENT_YS_SUMMON_GUARDIAN, 0); _thirdPhase = true; - me->Yell("Look upon the true face of death and know that your end comes soon!", LANG_UNIVERSAL); - me->PlayDirectSound(YS_P3_START); + Talk(SAY_YOGG_SARON_PHASE_3); } else if (param == ACTION_YOGG_SARON_HARD_MODE) { @@ -1181,20 +1200,19 @@ public: switch (events.ExecuteEvent()) { case EVENT_YS_LUNATIC_GAZE: - me->Yell("Hoohehehahahaha... AHAHAHAHAHAHA!", LANG_UNIVERSAL); me->PlayDirectSound(YS_P3_LUNATIC_GAZE); me->CastSpell(me, SPELL_LUNATIC_GAZE_YS, true); events.Repeat(12s); break; case EVENT_YS_DEAFENING_ROAR: - me->TextEmote("Yogg-Saron opens his mouth wide!", nullptr, true); - me->Yell("Eternal suffering awaits!", LANG_UNIVERSAL); - me->PlayDirectSound(YS_P3_DEAFENING_ROAR); + Talk(SAY_YOGG_SARON_DEAFENING_ROAR); + Talk(EMOTE_YOGG_SARON_DEAFENING_ROAR); me->CastSpell(me, SPELL_DEAFENING_ROAR, false); events.Repeat(50s); break; case EVENT_YS_SHADOW_BEACON: events.Repeat(5s); + Talk(EMOTE_YOGG_SARON_EMPOWERING_SHADOWS); me->CastCustomSpell(SPELL_SHADOW_BEACON, SPELLVALUE_MAX_TARGETS, RAID_MODE(1, 3), me, false); break; case EVENT_YS_SUMMON_GUARDIAN: @@ -1286,6 +1304,9 @@ public: me->SummonCreature(NPC_YSERA, 2116, -25.8f, 242.647f, 3.14f); me->SummonCreature(NPC_NELTHARION, 2103.6f, -35.8f, 242.64f, 1.5f); me->SummonCreature(NPC_MALYGOS, 2103.6f, -15.8f, 242.64f, 4.7f); + + // Yogg Vision + me->SummonCreature(NPC_YOGG_SARON_VISION, 2109.695f, -25.09549f, 222.3250f, 0); } void PrepareIceCrownIllusion() @@ -1317,6 +1338,9 @@ public: // Others me->SummonCreature(NPC_LICH_KING, 1906.98f, -153, 240, 4.2f); me->SummonCreature(NPC_IMMOLATED_CHAMPION, 1902.03f, -161.7f, 240, 1.07f); + + // Yogg Vision + me->SummonCreature(NPC_YOGG_SARON_VISION, 1906.226f, -155.8941f, 223.4727, 0); } void PrepareStormwindIllusion() @@ -1345,6 +1369,9 @@ public: // Others me->SummonCreature(NPC_GARONA, 1928.58f, 65.64f, 242.37f, 2.1f); me->SummonCreature(NPC_KING_LLANE, 1925.14f, 71.74f, 242.37f, 5.17f); + + // Yogg Vision + me->SummonCreature(NPC_YOGG_SARON_VISION, 1929.160f, 67.75694f, 221.7322f, 0); } void DoAction(int32 param) override @@ -1909,17 +1936,12 @@ public: bool _running; int32 _checkTimer; uint8 _step; - ObjectGuid _championGUID; - ObjectGuid _yoggGUID; void Reset() override { _running = true; _checkTimer = 0; _step = 0; - _championGUID.Clear(); - if (me->GetInstanceScript()) - _yoggGUID = me->GetInstanceScript()->GetGuidData(TYPE_YOGGSARON); } void NextStep(const uint32 time) @@ -1928,34 +1950,14 @@ public: _checkTimer = time; } - void Say(std::string text, ObjectGuid guid, bool yell, uint32 soundId) + void Say(uint8 text, uint32 id) { - Creature* creature = guid ? ObjectAccessor::GetCreature(*me, guid) : me; + Creature* creature = me->FindNearestCreature(id, 50); if (!creature) return; - WorldPacket data; - if (creature->GetGUID() != _yoggGUID) - { - ChatHandler::BuildChatPacket(data, yell ? CHAT_MSG_MONSTER_YELL : CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, creature, nullptr, text); - creature->SendMessageToSetInRange(&data, 90, true); - } - else if (Creature* cr = me->SummonTrigger(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() - 5, 0, 5000)) - { - ChatHandler::BuildChatPacket(data, yell ? CHAT_MSG_MONSTER_YELL : CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, creature, nullptr, text); - cr->SendMessageToSetInRange(&data, 90, true); - } - else + creature->AI()->Talk(text); return; - - Playsound(soundId); - } - - void Playsound(uint32 soundId) - { - WorldPacket data(SMSG_PLAY_SOUND, 4); - data << uint32(soundId); - me->SendMessageToSetInRange(&data, 90, false); } void UpdateAI(uint32 diff) override @@ -1976,29 +1978,27 @@ public: NextStep(5000); break; case 1: - if (Creature* cr = me->FindNearestCreature(NPC_IMMOLATED_CHAMPION, 50)) - _championGUID = cr->GetGUID(); - Say("Your resilience is admirable.", ObjectGuid::Empty, false, LK_1); + Say(SAY_LK_1, NPC_LICH_KING); NextStep(7000); break; case 2: - Say("Arrrrrrgh!", _championGUID, true, IC_1); + Say(SAY_IC_1, NPC_IMMOLATED_CHAMPION); NextStep(6000); break; case 3: - Say("I'm not afraid of you!", _championGUID, false, IC_2); + Say(SAY_IC_2, NPC_IMMOLATED_CHAMPION); NextStep(6500); break; case 4: - Say("I will break you as I broke him.", ObjectGuid::Empty, false, LK_2); + Say(SAY_LK_2, NPC_LICH_KING); NextStep(7500); break; case 5: - Say("Yrr n'lyeth... shuul anagg!", _yoggGUID, false, YS_V3_1); + Say(SAY_YOGG_5, NPC_YOGG_SARON_VISION); NextStep(5000); break; case 6: - Say("He will learn... no king rules forever; only death is eternal!", _yoggGUID, false, YS_V3_2); + Say(SAY_YOGG_6, NPC_YOGG_SARON_VISION); _running = false; break; } @@ -2023,17 +2023,12 @@ public: bool _running; int32 _checkTimer; uint8 _step; - ObjectGuid _garonaGUID; - ObjectGuid _yoggGUID; void Reset() override { _running = true; _checkTimer = 0; _step = 0; - _garonaGUID.Clear(); - if (me->GetInstanceScript()) - _yoggGUID = me->GetInstanceScript()->GetGuidData(TYPE_YOGGSARON); } void NextStep(const uint32 time) @@ -2042,34 +2037,14 @@ public: _checkTimer = time; } - void Say(std::string text, ObjectGuid guid, bool yell, uint32 soundId) + void Say(uint8 text, uint32 id) { - Creature* creature = guid ? ObjectAccessor::GetCreature(*me, guid) : me; + Creature* creature = me->FindNearestCreature(id, 50); if (!creature) return; - WorldPacket data; - if (creature->GetGUID() != _yoggGUID) - { - ChatHandler::BuildChatPacket(data, yell ? CHAT_MSG_MONSTER_YELL : CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, creature, nullptr, text); - creature->SendMessageToSetInRange(&data, 90, true); - } - else if (Creature* cr = me->SummonTrigger(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() - 5, 0, 5000)) - { - ChatHandler::BuildChatPacket(data, yell ? CHAT_MSG_MONSTER_YELL : CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, creature, nullptr, text); - cr->SendMessageToSetInRange(&data, 90, true); - } - else + creature->AI()->Talk(text); return; - - Playsound(soundId); - } - - void Playsound(uint32 soundId) - { - WorldPacket data(SMSG_PLAY_SOUND, 4); - data << uint32(soundId); - me->SendMessageToSetInRange(&data, 90, false); } void UpdateAI(uint32 diff) override @@ -2090,37 +2065,35 @@ public: NextStep(5000); break; case 1: - if (Creature* cr = me->FindNearestCreature(NPC_GARONA, 50)) - _garonaGUID = cr->GetGUID(); - Say("Bad news sire. The clans are united under Blackhand in this assault. They will stand together until Stormwind has fallen.", _garonaGUID, false, GAR_1); + Say(SAY_GARONA_1, NPC_GARONA); NextStep(2000); break; case 2: - Playsound(GAR_2); + Say(SAY_GARONA_2, NPC_GARONA); NextStep(6500); break; case 3: - Say("Gul'dan is bringing up his warlocks by nightfall. Until then, the Blackrock clan will be trying to take the Eastern Wall.", _garonaGUID, false, GAR_3); + Say(SAY_GARONA_3, NPC_GARONA); NextStep(11000); break; case 4: - Say("A thousand deaths... or one murder.", _yoggGUID, false, YS_V1_1); + Say(SAY_YOGG_1, NPC_YOGG_SARON_VISION); NextStep(2500); break; case 5: - Playsound(YS_V1_2); + Say(SAY_YOGG_2, NPC_YOGG_SARON_VISION); NextStep(2500); break; case 6: - Say("We will hold until the reinforcements come. As long as men with stout hearts are manning the walls and throne Stormwind will hold.", ObjectGuid::Empty, false, LL_1); + Say(SAY_LLANE_1, NPC_KING_LLANE); NextStep(10000); break; case 7: - Say("The orc leaders agree with your assessment.", _garonaGUID, false, GAR_4); + Say(SAY_GARONA_4, NPC_GARONA); NextStep(5000); break; case 8: - Say("Your petty quarrels only make me stronger!", _yoggGUID, false, YS_V1_3); + Say(SAY_YOGG_3, NPC_YOGG_SARON_VISION); _running = false; break; } @@ -2145,15 +2118,12 @@ public: bool _running; int32 _checkTimer; uint8 _step; - ObjectGuid _yoggGUID; void Reset() override { _running = true; _checkTimer = 0; _step = 0; - if (me->GetInstanceScript()) - _yoggGUID = me->GetInstanceScript()->GetGuidData(TYPE_YOGGSARON); } void NextStep(const uint32 time) @@ -2162,34 +2132,14 @@ public: _checkTimer = time; } - void Say(std::string text, ObjectGuid guid, bool yell, uint32 soundId) + void Say(uint8 text, uint32 id) { - Creature* creature = !guid ? ObjectAccessor::GetCreature(*me, guid) : me; + Creature* creature = me->FindNearestCreature(id, 50); if (!creature) return; - WorldPacket data; - if (creature->GetGUID() != _yoggGUID) - { - ChatHandler::BuildChatPacket(data, yell ? CHAT_MSG_MONSTER_YELL : CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, creature, nullptr, text); - creature->SendMessageToSetInRange(&data, 90, true); - } - else if (Creature* cr = me->SummonTrigger(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() - 5, 0, 5000)) - { - ChatHandler::BuildChatPacket(data, yell ? CHAT_MSG_MONSTER_YELL : CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, creature, nullptr, text); - cr->SendMessageToSetInRange(&data, 90, true); - } - else + creature->AI()->Talk(text); return; - - Playsound(soundId); - } - - void Playsound(uint32 soundId) - { - WorldPacket data(SMSG_PLAY_SOUND, 4); - data << uint32(soundId); - me->SendMessageToSetInRange(&data, 90, false); } void UpdateAI(uint32 diff) override @@ -2210,25 +2160,23 @@ public: NextStep(5000); break; case 1: - Say("It is done... All have been given that which must be given. I now seal the Dragon Soul forever...", ObjectGuid::Empty, false, NEL_1); + Say(SAY_NEL_1, NPC_NELTHARION); NextStep(10000); break; case 2: - if (Creature* cr = me->FindNearestCreature(NPC_YSERA, 50)) - Say("That terrible glow... should that be?", cr->GetGUID(), false, YSE_1); + Say(SAY_YAS_1, NPC_YSERA); NextStep(4000); break; case 3: - Say("For it to be as it must, yes.", ObjectGuid::Empty, false, NEL_2); + Say(SAY_NEL_2, NPC_NELTHARION); NextStep(4000); break; case 4: - if (Creature* cr = me->FindNearestCreature(NPC_MALYGOS, 50)) - Say("It is a weapon like no other. It must be like no other.", cr->GetGUID(), false, MAL_1); + Say(SAY_MAL_1, NPC_MALYGOS); NextStep(8000); break; case 5: - Say("His brood learned their lesson before too long, you shall soon learn yours!", _yoggGUID, false, YS_V2_1); + Say(SAY_YOGG_4, NPC_YOGG_SARON_VISION); _running = false; break; } @@ -2272,7 +2220,7 @@ public: if (Creature* yogg = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(TYPE_YOGGSARON))) yogg->AI()->DoAction(ACTION_FAILED_DRIVE_ME_CRAZY); - events.ScheduleEvent(40, 8000); + events.ScheduleEvent(40, 2s); _targets.push_back(target->GetGUID()); } } @@ -2289,8 +2237,7 @@ public: if (Player* player = ObjectAccessor::GetPlayer(*me, _guid)) { - me->PlayDirectSound(15760, player); - me->Whisper("Destroy them minion, your master commands it!", LANG_UNIVERSAL, player); + Talk(WHISPER_VOICE_INSANE, player); } break; } @@ -2695,8 +2642,6 @@ public: return; Unit* caster = GetCaster(); - caster->PlayDirectSound(VOYS_INSANE1, target); - caster->Whisper("Your will is no longer you own...", LANG_UNIVERSAL, target); caster->CastSpell(target, SPELL_INSANE1, true); target->CastSpell(target, SPELL_INSANE2, true); } @@ -2705,7 +2650,7 @@ public: { std::list tmplist; for (std::list::iterator itr = targets.begin(); itr != targets.end(); ++itr) - if ((*itr)->GetTypeId() == TYPEID_PLAYER && !(*itr)->ToPlayer()->HasAuraType(SPELL_AURA_AOE_CHARM) && !(*itr)->ToPlayer()->HasAura(SPELL_SANITY)) + if ((*itr)->IsPlayer() && !(*itr)->ToPlayer()->HasAuraType(SPELL_AURA_AOE_CHARM) && !(*itr)->ToPlayer()->HasAura(SPELL_SANITY)) tmplist.push_back(*itr); targets.clear(); @@ -2772,7 +2717,7 @@ public: void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) { Unit* target = GetTarget(); - if (!target || target->GetTypeId() != TYPEID_PLAYER) + if (!target || !target->IsPlayer()) return; if (Aura* aur = target->GetAura(SPELL_SANITY)) @@ -2911,7 +2856,7 @@ public: SpellCastResult CheckCast() { - if (GetCaster()->GetTypeId() != TYPEID_PLAYER) + if (!GetCaster()->IsPlayer()) return SPELL_FAILED_BAD_TARGETS; Unit* target = GetCaster()->ToPlayer()->GetSelectedUnit(); From a1c644fd3971085d25d16700384110feda6bfdab Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 13 Mar 2023 13:21:43 +0000 Subject: [PATCH 123/159] chore(DB): import pending files Referenced commit(s): 6270c6ab64cb40b0eabf3edd8c220ebda0a35d30 --- .../rev_1676907518456211300.sql => db_world/2023_03_13_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1676907518456211300.sql => db_world/2023_03_13_00.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1676907518456211300.sql b/data/sql/updates/db_world/2023_03_13_00.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1676907518456211300.sql rename to data/sql/updates/db_world/2023_03_13_00.sql index fd4c2aea5..8a74e46f1 100644 --- a/data/sql/updates/pending_db_world/rev_1676907518456211300.sql +++ b/data/sql/updates/db_world/2023_03_13_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_12_00 -> 2023_03_13_00 -- Yogg Saron Vision -- Add missing text DELETE FROM `creature_text` WHERE `CreatureID`=33552; INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES From e0345ee7547c6aa7d96ab5fe264115287c69c398 Mon Sep 17 00:00:00 2001 From: ICXCNIKA <84076297+ohkasdasf@users.noreply.github.com> Date: Mon, 13 Mar 2023 18:04:30 +0100 Subject: [PATCH 124/159] fix(DB/Locale): deDE fixes for request items 4 (#15344) --- data/sql/updates/pending_db_world/qril04.sql | 45 ++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 data/sql/updates/pending_db_world/qril04.sql diff --git a/data/sql/updates/pending_db_world/qril04.sql b/data/sql/updates/pending_db_world/qril04.sql new file mode 100644 index 000000000..70d72c3dd --- /dev/null +++ b/data/sql/updates/pending_db_world/qril04.sql @@ -0,0 +1,45 @@ +DELETE FROM `quest_request_items_locale` WHERE `ID` IN (606, 618, 619, 629, 631, 632, 633, 660, 664, 676, 677, 678, 679, 683, 704, 724, 728, 731, 739, 745, 754, 758, 764, 782, 829, 835, 848, 861, 863, 865, 872, 887, 891, 903, 909, 938, 942, 943, 953, 957, 974, 984, 985) AND `locale` = 'deDE'; +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(606, 'deDE', 'He! Den Blick, den Ihr mir da zuwerft, mag ich gar nicht, $Sire:Madame;.', 0), +(618, 'deDE', 'Habt Ihr meinen Entersäbel bekommen, $N?', 0), +(619, 'deDE', 'Dies ist ein verlassenes Rettungsboot. An seiner Seite stehen in zerkratzten, verblassten Buchstaben die Worte:$B$BSMOTTS RACHE', 0), +(629, 'deDE', 'Ich warte auf den Schrifttafelsplitter, $N.', 0), +(631, 'deDE', NULL, 0), +(632, 'deDE', 'Gibt es Spuren vom alten Rostlocke, $N?', 0), +(633, 'deDE', 'Der Behälter mit Sprengstoff muss zerstört werden!', 0), +(660, 'deDE', 'Die Zeit für Gespräche ist vorbei. Wenn Euch die Bewohner des Hügellands auch nur das Geringste bedeuten, dann beschützt Ihr Kinelory.', 0), +(664, 'deDE', 'Bah, vielleicht sollte ich diesen Naga-Abschaum selbst töten. Es ist offensichtlich, dass Ihr es nicht fertig bringt.$B$BVielleicht kann ich ein paar Stricknadeln für Euch auftreiben, damit Ihr eine Beschäftigung habt.', 0), +(676, 'deDE', 'Ich habe keine Zeit meine Axt zu schärfen, geschweige denn den Außenposten zu verlassen um die Bestien zu erschlagen, die versuchen meine Sippe zu töten.$B$BIhr scheint nicht die Erfahrung eines Grunzers zu haben, noch seid Ihr $Gein:eine; ganz $Gausgebildeter:ausgebildete; $C, was wollt Ihr also, $N?', 0), +(677, 'deDE', 'Wenn Ihr meine Aufgabe noch nicht erfüllt habt, dann seid ihr vielleicht ein Feigling im Herzen und ein Neuling im Krieg.', 0), +(678, 'deDE', 'Ihr zögert. Warum? Ihr habt bis jetzt große Stärke bewiesen, $N. Enttäuscht mich jetzt nicht.', 0), +(679, 'deDE', 'Ich sehe, dass Euer Mut schwindet. Es scheint, als hätte mein Instinkt mich nicht getäuscht: Eure Stärke ist nichts im Vergleich zu Eurer Angeberei.$B$BKehrt zu mir zurück, sobald der Kopf der Bestie abgetrennt ist oder kehrt nie wieder zurück.', 0), +(683, 'deDE', 'Ihr seid also $N, $Gder:die; $C? Neuigkeiten über Eure Hilfe gegenüber der Allianz sind weit gereist, wisst Ihr?$B$BIn welcher Angelegenheit tretet Ihr heute vor mich?', 0), +(704, 'deDE', 'Habt Ihr die Urnen gefunden, $N? Wir müssen herausfinden, welche Verbindung zwischen ihnen und den Troggs besteht!', 0), +(724, 'deDE', 'Ah, ja. Wieder $Gein Reisender:eine Reisende;, $Gder:die; nach etwas von den Zwergen sucht.$B$B$GSire:Madame;, es tut mir wirklich Leid, aber ich habe jetzt keine Zeit, sinnlose Fragen zu beantworten.', 0), +(728, 'deDE', 'Ah, Ihr seid $Gein:eine; besonders $Geifriger:eifrige; $C, wie ich sehe. Seid Ihr hier, um aus meiner Sammlung zu lernen? Gut!$B$BAber seid gewarnt: Genau wie Wissen den Starken Macht verleiht... treibt es die Schwachen in den Wahnsinn.', 0), +(731, 'deDE', 'Ist der Ausgrabungsleiter am Leben?', 0), +(739, 'deDE', 'Wisst Ihr Neues über Agmonds Schicksal? Habt Ihr ihn gefunden?', 0), +(745, 'deDE', 'Wenn die Bleichmähnen das Land und ihre Bewohner mehr respektiert hätten, wäre es zu diesem Konflikt nicht gekommen.', 0), +(754, 'deDE', 'Schiebt es nicht auf, $N. Die Besudelung des Wasserbrunnens der Winterhufe muss beseitigt werden!', 0), +(758, 'deDE', 'Der Wasserbrunnen der Donnerhörner ist immer noch besudelt, $N. Bitte, Ihr müsst das Ritual durchführen!', 0), +(764, 'deDE', 'Der Venture Company wurden die Bergbaurechte hier in Mulgore verweigert, aber es scheint so, als würde sie ein Nein als Antwort nicht akzeptieren. Wir Tauren neigen jedoch nicht zu Haarspaltereien und wir haben andere Wege, unsere Nachricht klar rüberzubringen.', 0), +(782, 'deDE', 'Tho\'gruns Verrat... wen wundert es da noch, dass die Oger nicht mehr der Horde angehören? Ich bin froh, dass er tot und das Zeichen der Erde wieder da ist.$B$BFalls Ihr ihn noch nicht erledigt habt, dann verschwendet keine Zeit und geht zum Camp Boff. Es befindet sich südöstlich von Kargath.', 0), +(829, 'deDE', 'Meine ergebensten Grüße, $C. Womit kann ich $Gmeinem Bruder:meiner Schwester; heute behilflich sein?', 0), +(835, 'deDE', 'Bei einem Typen wie meinem Chef Gazlowe würde man das nicht vermuten, aber er schien immer zu wissen, was Sache ist. "Habt keine Angst, den großen Schritt zu wagen", sagte er.$B$BDie Harpyien werden nicht aufhören, uns zu belästigen und die Karawanen werden weiter angegriffen werden, wenn wir nicht etwas dagegen unternehmen, hm?', 0), +(848, 'deDE', 'Habt Ihr die Sporen, $N? Ich muss meinem Kollegen in Donnerfels ein Gebräu schicken, für das diese Sporen benötigt werden...', 0), +(861, 'deDE', 'Seid gegrüßt. Ihr habt etwas an Euch, das mir viel über Euch verrät. Wollt Ihr etwas von mir?', 0), +(863, 'deDE', 'Kann ich Euch behilflich sein?', 0), +(865, 'deDE', 'Habt Ihr die Hörner, $N? Diese Dinger werden mir ein Vermögen einbringen!', 0), +(872, 'deDE', 'Schneidet dem Anführer den Kopf ab, dann bricht das Chaos aus, $N. Lernt diese Lektion sorgfältig. Sie wird Euch in der Zukunft helfen.$B$BDie Eber werden ziellos davonstieben und wir können das Brachland zurückerobern.', 0), +(887, 'deDE', 'Ich wage gar nicht daran zu denken, welcher Profit mir durch die Überfälle der Piraten entgeht, und jetzt haben sie auch noch ein Lager direkt vor meiner Haustür aufgeschlagen? Das artet langsam aus, Lorenhall muss etwas dagegen unternehmen.', 0), +(891, 'deDE', 'Meine Flotte ist in Gefahr, solange Hauptmann Hellstieg und ihre verdammten Kanoniere von der Feste Nordwacht aus feuern. Ich möchte, dass auch ihre Soldaten dafür bezahlen. Füllt meine Hände mit Medaillen ihrer Toten, damit ich weiß, dass meine gefallenen Freibeuter gerächt sind.', 0), +(903, 'deDE', 'Wie läuft Eure Jagd, $N? Habt Ihr die Streuner gefunden?', 0), +(909, 'deDE', 'Ah, willkommen zurück $N. Ich habe gerade die Wellen des Meeres beobachtet, so wie immer. Was führt euch zum Außenposten?', 0), +(938, 'deDE', 'Nebel... Es war meine Schuld! Die Hexen haben mich überrumpelt... Ich hätte nicht zulassen dürfen, dass sie dich mitnehmen...', 0), +(942, 'deDE', 'Was habt Ihr da, $GFreund:Freundin?', 0), +(943, 'deDE', 'Mit dem Stein von Relu kann ich nicht nur die verborgenen Geheimnisse meines Fossils, sondern auch die von Wirrbarts Fossil aus Dunkelküste enthüllen, $N.', 0), +(953, 'deDE', 'Wenn Ihr die Schrifttafeln studiert und etwas über Ameth\'Arans Untergang erfahren habt, leite ich dieses Wissen nach Auberdine weiter und informiere den Kreis der Urtume.', 0), +(957, 'deDE', 'In Wahrheit, $N, habe ich Angst... Angst, dass Euer Kommen - all dies - nur ein Hirngespinst eines gestörten Geistes ist. Könnt Ihr Euch vorstellen, was das für eine Qual ist? Ich... Bitte, Ihr müsst gehen, schnell!', 0), +(974, 'deDE', 'Ich würde ja selbst gehen, aber... Ich habe ein wenig Angst vor den Feuerelementaren dort!', 0), +(984, 'deDE', 'Wie geht Eure Suche voran, $N?', 0), +(985, 'deDE', 'Haltet Eure Hand nicht von dem ab, was getan werden muss, mein Kind. Ich weiß wie abstoßend der Gedanke ist, die Kreaturen des Waldes zu töten aber in diesem Fall ist es notwendig.$B$BEs gibt noch kein Heilmittel für die Verderbnis, die den Wald befallen hat. Wir müssen tun, was wir können, um das Fortschreiten der Krankheit aufzuhalten bis ein Heilmittel gefunden wird.', 0); From 2fe63877ed441d026693b987d2829dd74357d7cd Mon Sep 17 00:00:00 2001 From: ICXCNIKA <84076297+ohkasdasf@users.noreply.github.com> Date: Mon, 13 Mar 2023 18:06:09 +0100 Subject: [PATCH 125/159] fix(DB/Locale): deDE fixes for request items 5 (#15345) --- data/sql/updates/pending_db_world/qril05.sql | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 data/sql/updates/pending_db_world/qril05.sql diff --git a/data/sql/updates/pending_db_world/qril05.sql b/data/sql/updates/pending_db_world/qril05.sql new file mode 100644 index 000000000..50a04d896 --- /dev/null +++ b/data/sql/updates/pending_db_world/qril05.sql @@ -0,0 +1,32 @@ +DELETE FROM `quest_request_items_locale` WHERE `ID` IN (1002, 1012, 1017, 1022, 1043, 1045, 1048, 1057, 1071, 1073, 1074, 1076, 1077, 1079, 1080, 1086, 1096, 1109, 1125, 1127, 1139, 1140, 1147, 1168, 1172, 1173, 1175, 1179, 1188, 1192) AND `locale` = 'deDE'; +INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES +(1002, 'deDE', 'Obwohl Ihr die sechs Mondpirscherfangzähne noch nicht eingebaut habt, meint Ihr doch, statische Geräusche und wirres Gnomgebrabbel aus der Maschine dringen zu hören. Ob wohl ein anderer die Maschine bereits repariert hat?', 0), +(1012, 'deDE', 'Die Qualen der Druiden von Dor\'danil verfolgen mich noch immer in meinen Träumen, $N. Ihr musst ihre Anführer vernichten!', 0), +(1017, 'deDE', 'Ist es vollbracht? Ist Sarilus Faulmut tot?', 0), +(1022, 'deDE', 'Der Foliant des Schreins ist ein rätselhafter Gegenstand. Es ist kein Buch im eigentlichen Sinne. Mel\'Thandris selbst hat die Seiten des Folianten gesegnet und darauf wichtige Ereignisse festgehalten.$B$BEs ist nur schwer zu erklären. Wenn Ihr zum Schrein geht, werdet Ihr es verstehen.', 0), +(1043, 'deDE', 'Der Wald ist gefährlich für Unvorbereitete. Habt Eure Waffe immer nah bei Euch und Euren Verstand noch näher, oder Eure nächste Reise in den verwunschenen Wald könnte Eure letzte sein.', 0), +(1045, 'deDE', 'Habt Ihr Ran schon erschlagen, $GFreund:Freundin;?$B$BNicht einmal die Nachtelfen verdienen solchen Zorn. Sein Hass brennt noch heißer als der meine, aber er ist nicht mehr Herr seines Verstandes. Er ist eine Bedrohung für alle natürlichen Lebewesen dieses Waldes.', 0), +(1048, 'deDE', 'Vielleicht habe ich mich mit meinen Befehlen nicht klar ausgedrückt, $c. Ich will, dass Hochinquisitorin Weißsträhne ein für alle Mal getötet wird. Und wenn Ihr schon dabei seid, schaltet auch ihre oberste Führung aus.$B$BTötet diesen Eiferer, den Scharlachroten Kommandant Mograine. Legt Herod, den Scharlachroten Helden um. Und schlachtet auch Hundemeister Loksey und seine dreckigen Köter ab.$B$BNun verschwindet!', 0), +(1057, 'deDE', 'Es gibt noch viel zu tun, bevor das verbrannte Tal wieder zu dem üppigen Wald werden kann, der es einst war.$B$BSäubert das Gebiet von diesen üblen Bedrohungen, $N! Erst dann können wir beginnen, das zurückzufordern, was der Natur gehört.', 0), +(1071, 'deDE', 'Wie geht der Kampf voran, $N?', 0), +(1073, 'deDE', 'Ohne die Tränke kann ich kein Nitromirglyceronium herstellen... sie sind für die Herstellung unbedingt erforderlich.', 0), +(1074, 'deDE', 'Ah, prima, prima, Ihr seid zurück.', 0), +(1076, 'deDE', 'Hallo, $N. Habt Ihr die Komponente gefunden, die ich benötige?', 0), +(1077, 'deDE', 'Haha! Ihr seid zurück! Habt Ihr ihn? Habt Ihr den Zauber?', 0), +(1079, 'deDE', 'Habt Ihr die Pläne, $N?', 0), +(1080, 'deDE', 'Wie ist es gelaufen, $N?', 0), +(1086, 'deDE', 'Ihr müsst den Flughafen der Venture Company finden, falls er existiert, $N.', 0), +(1096, 'deDE', 'Stotterspritter wird einen Beweis für Gerenzos Tod haben wollen. Ich glaube, dieser mechanische Arm wird reichen.', 0), +(1109, 'deDE', 'Ah, wie ich sehe, seid Ihr zurückgekehrt. Konntet Ihr etwas Kralguano beschaffen?', 0), +(1125, 'deDE', 'Allianz oder Horde, das spielt keine Rolle - kein Wesen verdient es, als gequälter Geist auf dieser Welt gefangen zu sein. Die Befreiung dieser Seelen wird die Dinge wieder richtig stellen, $N.', 0), +(1127, 'deDE', 'Habt Ihr mehr von Zanzils Mixtur, $N?', 0), +(1139, 'deDE', 'Hammerzehs Auftrag muss aktualisiert werden, $N. Das schulde ich ihm.$B$BNicht nur deswegen ist es zwingend, dass Ihr nach Uldaman zurückkehrt, sondern auch für die Sicherheit aller Zwerge. Wenn die Tafel den Dunkeleisenzwergen in die Hände fällt, kann niemand sagen, wie mächtig ihre Golemarmee werden könnte.', 0), +(1140, 'deDE', 'Ich habe Gerüchte gehört, dass die Geschichte der Satyrn in irgendeiner Weise mit der der Nachtelfen zusammenhängt, aber ich habe festgestellt, dass sich meine geschätzten Gastgeber zurückhalten, über dieses Thema zu sprechen.', 0), +(1147, 'deDE', 'Bei der Menge an Reisenden, die sich für diese Rennen in der Ebene aufmachen, bin ich mir sicher, dass wir genügend Abenteurer überzeugen können, um die Insekten zurückzudrängen. Meine Gruppe und ich werden nicht abreisen können, bevor wir damit fertig sind.', 0), +(1168, 'deDE', 'Mok\'Morokk sagen Ogern sie bleiben und Ort schützen. Mok\'Morokk denken Oger müssen schwarze Drachen töten und altes Zuhause zurückbekommen.$B$BIhr helfen Ogern mit Zuhause, Ihr geben uns Rache.', 0), +(1172, 'deDE', 'Ihr müsst zum Drachendüster eilen, $N. Da Onyxias Eier überall im Drachensumpf verstreut sind, droht uns eine Übermacht, wenn wir nicht schnell etwas unternehmen.$B$BZerstört ihre Eier! Lasst nicht zu, dass sich die schwarze Drachenplage über unser Heimatland ausbreitet!', 0), +(1173, 'deDE', 'Ich dachte, Ihr wolltet versuchen Mok\'Morokk aus dem Dorf zu vertreiben. Stattdessen kommt Ihr zu mir, um mit mir zu plaudern?', 0), +(1175, 'deDE', 'Es ist schon schlimm genug, die Wracks der Rennwagen aufzuräumen, ohne dass man sie dabei aus verbrannten Tierteilen heraussuchen muss.', 0), +(1179, 'deDE', 'Passt auf, wo Ihr hintretet! Aufpassen, aufpassen, aufpassen!!! Das hier sind empfindliche Teile, und wenn wir gewinnen wollen, muss alles perfekt funktionieren!', 0), +(1188, 'deDE', 'Wie Ihr sicher wisst, können im Gizmorium all Eure Tüftlerwünsche erfüllt werden! Wie kann ich Euch helfen?', 0), +(1192, 'deDE', 'Ich würde gern in verschiedene Teile unserer Rennwagen Indurium integrieren, brauche aber große Mengen Rohindurium, um diese Teile herzustellen.$B$BIhr findet Indurium in der Ausgrabungsstätte Uldaman im Ödland in Khaz Modan, jenseits des Meeres.$B$BDie Gnome bekommen ihre eigenen Vorräte, wir müssen daher unbedingt selbst welches haben, um mit ihnen Schritt zu halten.', 0); From f24a5bb0d9e34f36631df17d842bcc7266e92bbb Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 13 Mar 2023 17:08:48 +0000 Subject: [PATCH 126/159] chore(DB): import pending files Referenced commit(s): 2fe63877ed441d026693b987d2829dd74357d7cd --- .../{pending_db_world/qril04.sql => db_world/2023_03_13_01.sql} | 1 + .../{pending_db_world/qril05.sql => db_world/2023_03_13_02.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/qril04.sql => db_world/2023_03_13_01.sql} (99%) rename data/sql/updates/{pending_db_world/qril05.sql => db_world/2023_03_13_02.sql} (99%) diff --git a/data/sql/updates/pending_db_world/qril04.sql b/data/sql/updates/db_world/2023_03_13_01.sql similarity index 99% rename from data/sql/updates/pending_db_world/qril04.sql rename to data/sql/updates/db_world/2023_03_13_01.sql index 70d72c3dd..9998dc510 100644 --- a/data/sql/updates/pending_db_world/qril04.sql +++ b/data/sql/updates/db_world/2023_03_13_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_13_00 -> 2023_03_13_01 DELETE FROM `quest_request_items_locale` WHERE `ID` IN (606, 618, 619, 629, 631, 632, 633, 660, 664, 676, 677, 678, 679, 683, 704, 724, 728, 731, 739, 745, 754, 758, 764, 782, 829, 835, 848, 861, 863, 865, 872, 887, 891, 903, 909, 938, 942, 943, 953, 957, 974, 984, 985) AND `locale` = 'deDE'; INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES (606, 'deDE', 'He! Den Blick, den Ihr mir da zuwerft, mag ich gar nicht, $Sire:Madame;.', 0), diff --git a/data/sql/updates/pending_db_world/qril05.sql b/data/sql/updates/db_world/2023_03_13_02.sql similarity index 99% rename from data/sql/updates/pending_db_world/qril05.sql rename to data/sql/updates/db_world/2023_03_13_02.sql index 50a04d896..0be0b817f 100644 --- a/data/sql/updates/pending_db_world/qril05.sql +++ b/data/sql/updates/db_world/2023_03_13_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_13_01 -> 2023_03_13_02 DELETE FROM `quest_request_items_locale` WHERE `ID` IN (1002, 1012, 1017, 1022, 1043, 1045, 1048, 1057, 1071, 1073, 1074, 1076, 1077, 1079, 1080, 1086, 1096, 1109, 1125, 1127, 1139, 1140, 1147, 1168, 1172, 1173, 1175, 1179, 1188, 1192) AND `locale` = 'deDE'; INSERT INTO `quest_request_items_locale` (`ID`, `locale`, `CompletionText`, `VerifiedBuild`) VALUES (1002, 'deDE', 'Obwohl Ihr die sechs Mondpirscherfangzähne noch nicht eingebaut habt, meint Ihr doch, statische Geräusche und wirres Gnomgebrabbel aus der Maschine dringen zu hören. Ob wohl ein anderer die Maschine bereits repariert hat?', 0), From e407ee135dc511424d12a8d6f935bcc4add1a189 Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Mon, 13 Mar 2023 15:22:13 -0300 Subject: [PATCH 127/159] fix(Core/Logs): Fix warden fmt logs (#15327) --- src/server/game/Warden/Warden.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/game/Warden/Warden.cpp b/src/server/game/Warden/Warden.cpp index 7da4a4060..af37fab2b 100644 --- a/src/server/game/Warden/Warden.cpp +++ b/src/server/game/Warden/Warden.cpp @@ -246,14 +246,14 @@ void Warden::ApplyPenalty(uint16 checkId, std::string const& reason) if (Player const* plr = _session->GetPlayer()) { std::string const reportFormat = "Player {} (guid {}, account id: {}) failed warden {} check ({}). Action: {}"; - reportMsg = Acore::StringFormat(reportFormat, plr->GetName().c_str(), plr->GetGUID().GetCounter(), _session->GetAccountId(), - checkId, ((checkData && !checkData->Comment.empty()) ? checkData->Comment.c_str() : ""), - GetWardenActionStr(action).c_str()); + reportMsg = Acore::StringFormatFmt(reportFormat, plr->GetName(), plr->GetGUID().GetCounter(), _session->GetAccountId(), + checkId, ((checkData && !checkData->Comment.empty()) ? checkData->Comment : ""), + GetWardenActionStr(action)); } else { std::string const reportFormat = "Account id: {} failed warden {} check. Action: {}"; - reportMsg = Acore::StringFormat(reportFormat, _session->GetAccountId(), checkId, GetWardenActionStr(action).c_str()); + reportMsg = Acore::StringFormatFmt(reportFormat, _session->GetAccountId(), checkId, GetWardenActionStr(action)); } } else @@ -261,12 +261,12 @@ void Warden::ApplyPenalty(uint16 checkId, std::string const& reason) if (Player const* plr = _session->GetPlayer()) { std::string const reportFormat = "Player {} (guid {}, account id: {}) triggered warden penalty by reason: {}. Action: {}"; - reportMsg = Acore::StringFormat(reportFormat, plr->GetName().c_str(), plr->GetGUID().GetCounter(), _session->GetAccountId(), causeMsg.c_str(), GetWardenActionStr(action).c_str()); + reportMsg = Acore::StringFormatFmt(reportFormat, plr->GetName(), plr->GetGUID().GetCounter(), _session->GetAccountId(), causeMsg, GetWardenActionStr(action)); } else { std::string const reportFormat = "Account id: {} failed warden {} check. Action: {}"; - reportMsg = Acore::StringFormat(reportFormat, _session->GetAccountId(), causeMsg.c_str(), GetWardenActionStr(action).c_str()); + reportMsg = Acore::StringFormatFmt(reportFormat, _session->GetAccountId(), causeMsg, GetWardenActionStr(action)); } } From 0f031530cb95fc291badad949d3999e5d38966de Mon Sep 17 00:00:00 2001 From: Mike Delago <32778141+michaeldelago@users.noreply.github.com> Date: Mon, 13 Mar 2023 14:23:40 -0400 Subject: [PATCH 128/159] chore(Data): Add `/data/sql/custom` to gitignore (#14735) --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 11d0e4fe4..65220e72b 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,9 @@ /.env* /apps/joiner /deps/deno +/data/sql/custom/* +/src/server/scripts/Custom/* +!/src/server/scripts/Custom/README.md /docker-compose.override.yml From 5890f8f7bb9e24f9d808f9865e27337bba5ed5c2 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Mon, 13 Mar 2023 16:15:12 -0300 Subject: [PATCH 129/159] fix(DB/Mechanar): Re-Construct The Mechanar spawns and remove custom scripts (#15372) --- .../rev_1678656260407918300.sql | 486 ++++++++++++++++++ .../boss_pathaleon_the_calculator.cpp | 11 - .../Mechanar/instance_mechanar.cpp | 132 ----- .../Outland/TempestKeep/Mechanar/mechanar.h | 12 +- 4 files changed, 487 insertions(+), 154 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1678656260407918300.sql diff --git a/data/sql/updates/pending_db_world/rev_1678656260407918300.sql b/data/sql/updates/pending_db_world/rev_1678656260407918300.sql new file mode 100644 index 000000000..faccc6e20 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678656260407918300.sql @@ -0,0 +1,486 @@ +-- DELETE all old stuff +DELETE FROM `creature` WHERE `map`=554 AND `id1` IN (19166,19167,19168,19218,19219,19220,19221,19231,19510,19710,19712,19713,19716,19735,20059,20988,20990) AND `guid` IN (67872,75951,83160,83161,83162,83163,83164,83165,83166,83167,83168,83169,83170,83171,83172,83173,83174,83175,83176,83177,83178,83179,83180,83182,83183,83185,83186,83187,83188,83189,83190,83191,83192,83193,83194,83195,83196,83197,83198,83199,83200,83201,83202,83203,83204,83205,83207,83208,83209,83210,83211,83212,83213,83214,83215,83216,83217,83218,83219,83220,83221,83222,83223,83224,83225,83226,83227,83228,83229,83230,83231,83232,83233,83234,83235,83236,83239,83240,83241,83245,87087,88276); +DELETE FROM `creature_addon` WHERE `guid` IN (83160,83162,83163,83166,83167,83168,83170,83171,83173,83177,83180,83182,83183,83189,83195,83197,83200,83201,83202,83203,83208,83210,83211,83212,83213,83219,83220,83221,83222,83223,83224,83229,83233,83234,83239,83240); +DELETE FROM `waypoint_data` WHERE `id` IN (831600,831680,831730,831770,831800,831890,831950,831970,832080,832130,832210,832240,832290,832330,832340,832390,832400); +DELETE FROM `linked_respawn` WHERE `linkedGuid` IN (83160, 83230, 83241) AND `guid` IN (67872,75951,83160,83161,83162,83163,83164,83165,83166,83167,83168,83169,83170,83171,83172,83173,83174,83175,83176,83177,83178,83179,83180,83182,83183,83185,83186,83187,83188,83189,83190,83191,83192,83193,83194,83195,83196,83197,83198,83199,83200,83201,83202,83203,83204,83205,83207,83208,83209,83210,83211,83212,83213,83214,83215,83216,83217,83218,83219,83220,83221,83222,83223,83224,83225,83226,83227,83228,83229,83230,83231,83232,83233,83234,83235,83236,83239,83240,83241,83245,87087,88276); +DELETE FROM `waypoint_scripts` WHERE `id` IN (8319501, 8319502, 8319701, 8319702) AND `guid` IN (817, 818, 819, 820); + +DELETE FROM `gameobject` WHERE `map`=554 AND `id` IN (185015,185018,184449,184632,184322,184465) AND `guid` IN (6032,6033,6034,20463,20464,20467,20473,44743); + +-- INSERTS +SET @CGUID := 138800; +SET @OGUID := 9879; + +DELETE FROM `creature` WHERE `map`=554 AND `id1` IN (19166,19167,19168,19218,19219,19220,19221,19231,19510,19710,19712,19713,19716,19735,20059,20988,20990) AND `guid` BETWEEN @CGUID AND @CGUID+93; +INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `VerifiedBuild`) VALUES +(@CGUID+0 , 19166, 0, 0, 554, 3849, 3849, 3, 1, 0, 39.9918, 28.693, 0.0795518, 3.41476, 86400, 5, 1, 46924), +(@CGUID+1 , 19166, 0, 0, 554, 3849, 3849, 3, 1, 0, 86.0605, 59.588, 14.9247, 3.13951, 86400, 5, 1, 46924), +(@CGUID+2 , 19166, 0, 0, 554, 3849, 3849, 3, 1, 0, 43.5209, -25.3947, 0.0803467, 2.93692, 86400, 5, 1, 46924), +(@CGUID+3 , 19166, 0, 0, 554, 3849, 3849, 3, 1, 0, 82.6466, -56.3472, 14.9439, 3.1402, 86400, 5, 1, 46924), +(@CGUID+4 , 19166, 0, 0, 554, 3849, 3849, 3, 1, 0, 30.2197, 2.91536, 0.0823943, 3.29867, 86400, 0, 0, 46924), +(@CGUID+5 , 19166, 0, 0, 554, 3849, 3849, 3, 1, 0, 123.694, 77.4065, 14.2275, 0.146938, 86400, 0, 0, 46924), +(@CGUID+6 , 19167, 0, 0, 554, 3849, 3849, 3, 1, 1, 77.9033, -51.9803, 15.008, 3.31613, 86400, 0, 0, 46924), +(@CGUID+7 , 19167, 0, 0, 554, 3849, 3849, 3, 1, 1, 37.398, 64.646, 0.246395, 4.13643, 86400, 0, 0, 46924), +(@CGUID+8 , 19167, 0, 0, 554, 3849, 3849, 3, 1, 1, 37.175, -51.869, 0.246396, 4.11898, 86400, 0, 0, 46924), +(@CGUID+9 , 19167, 0, 0, 554, 3849, 3849, 3, 1, 1, 30.7244, -48.3542, 0.24584, 2.20191, 86400, 0, 0, 46924), +(@CGUID+10, 19167, 0, 0, 554, 3849, 3849, 3, 1, 1, 77.8174, 64.1236, 15.008, 3.26377, 86400, 0, 0, 46924), +(@CGUID+11, 19167, 0, 0, 554, 3849, 3849, 3, 1, 1, 119.345, 85.9118, 15.0163, 3.45575, 86400, 0, 0, 46924), +(@CGUID+12, 19167, 0, 0, 554, 3849, 3849, 3, 1, 1, 120.598, -65.5737, 15.008, 3.24631, 86400, 0, 0, 46924), +(@CGUID+13, 19168, 0, 0, 554, 3849, 3849, 3, 1, 0, 226.571, 60.2797, 0.0791843, 3.08923, 86400, 0, 0, 46924), +(@CGUID+14, 19168, 0, 0, 554, 3849, 3849, 3, 1, 0, 226.595, 45.0895, 0.0768293, 3.1765, 86400, 0, 0, 46924), +(@CGUID+15, 19168, 0, 0, 554, 3849, 3849, 3, 1, 0, 309.388, 5.29271, 25.5154, 3.29867, 86400, 0, 0, 46924), +(@CGUID+16, 19168, 0, 0, 554, 3849, 3849, 3, 1, 0, 309.331, 15.1339, 25.4695, 3.07178, 86400, 0, 0, 46924), +(@CGUID+17, 19168, 0, 0, 554, 3849, 3849, 3, 1, 0, 240.799, -25.2161, 26.4117, 0.244346, 86400, 0, 0, 46924), +(@CGUID+18, 19168, 0, 0, 554, 3849, 3849, 3, 1, 0, 237.38, -21.1149, 26.4117, 0, 86400, 0, 0, 46924), +(@CGUID+19, 19168, 0, 0, 554, 3849, 3849, 3, 1, 0, 137.99, 37.2705, 24.9578, 5.53269, 86400, 0, 0, 46924), +(@CGUID+20, 19168, 0, 0, 554, 3849, 3849, 3, 1, 0, 135.331, 99.9644, 26.4566, 4.78385, 86400, 0, 0, 46924), +(@CGUID+21, 19218, 0, 0, 554, 3849, 3849, 3, 1, 0, 85.5276, 20.2005, 15.0044, 0.663225, 86400, 0, 0, 46924), +(@CGUID+22, 19219, 0, 0, 554, 3849, 3849, 3, 1, 0, 208.226, -13.0494, -2.11654, 3.36498, 86400, 0, 0, 46924), +(@CGUID+23, 19220, 0, 0, 554, 3849, 3849, 3, 1, 1, 139.542, 149.319, 25.659, 4.59022, 86400, 0, 0, 46924), +(@CGUID+24, 19221, 0, 0, 554, 3849, 3849, 3, 1, 1, 326.517, 13.1959, 27.9199, 3.22886, 86400, 0, 0, 46924), +(@CGUID+25, 19231, 0, 0, 554, 3849, 3849, 3, 1, 0, 107.9, -80.6756, 15.0131, 2.02913, 86400, 0, 0, 46924), +(@CGUID+26, 19510, 0, 0, 554, 3849, 3849, 3, 1, 1, 165.844, -73.6567, 1.72647, 3.24631, 86400, 0, 0, 46924), +(@CGUID+27, 19510, 0, 0, 554, 3849, 3849, 3, 1, 1, 30.6969, 49.5821, 0.244368, 3.7001, 86400, 0, 0, 46924), +(@CGUID+28, 19510, 0, 0, 554, 3849, 3849, 3, 1, 1, 165.7, 85.5581, 1.76883, 3.21141, 86400, 0, 0, 46924), +(@CGUID+29, 19510, 0, 0, 554, 3849, 3849, 3, 1, 1, 309.243, 10.2549, 25.4695, 3.1765, 86400, 0, 0, 46924), +(@CGUID+30, 19510, 0, 0, 554, 3849, 3849, 3, 1, 1, 309.518, 20.2797, 25.4735, 2.70526, 86400, 0, 0, 46924), +(@CGUID+31, 19510, 0, 0, 554, 3849, 3849, 3, 1, 0, 233.939, -18.6746, 26.4117, 5.96903, 86400, 0, 0, 46924), +(@CGUID+32, 19710, 0, 0, 554, 3849, 3849, 3, 1, 0, 198.356, -67.8971, 0.0848416, 3.48411, 86400, 0, 0, 46924), +(@CGUID+33, 19712, 0, 0, 554, 3849, 3849, 3, 1, 0, 223.733, -62.9849, 0.0856803, 5.044, 86400, 0, 0, 46924), +(@CGUID+34, 19712, 0, 0, 554, 3849, 3849, 3, 1, 0, 214.792, -83.1537, 0.0890533, 5.51524, 86400, 0, 0, 46924), +(@CGUID+35, 19712, 0, 0, 554, 3849, 3849, 3, 1, 0, 109.621, -55.2714, 15.0071, 0.680678, 86400, 0, 0, 46924), +(@CGUID+36, 19712, 0, 0, 554, 3849, 3849, 3, 1, 0, 108.424, -42.7796, 15.008, 5.16617, 86400, 0, 0, 46924), +(@CGUID+37, 19712, 0, 0, 554, 3849, 3849, 3, 1, 0, 144.53, 44.9373, 0.0829073, 4.79966, 86400, 0, 0, 46924), +(@CGUID+38, 19712, 0, 0, 554, 3849, 3849, 3, 1, 0, 216.179, -95.2042, 0.0891693, 0.20944, 86400, 0, 0, 46924), +(@CGUID+39, 19713, 0, 0, 554, 3849, 3849, 3, 1, 0, 165.639, -19.8589, 0.0833333, 5.88176, 86400, 0, 0, 46924), +(@CGUID+40, 19713, 0, 0, 554, 3849, 3849, 3, 1, 0, 109.46, 58.5753, 15.008, 5.28835, 86400, 0, 0, 46924), +(@CGUID+41, 19713, 0, 0, 554, 3849, 3849, 3, 1, 0, 174.125, -17.4886, 0.0833343, 3.9619, 86400, 0, 0, 46924), +(@CGUID+42, 19713, 0, 0, 554, 3849, 3849, 3, 1, 0, 227.934, -52.085, 0.0838403, 0.0523599, 86400, 0, 0, 46924), +(@CGUID+43, 19713, 0, 0, 554, 3849, 3849, 3, 1, 0, 112.692, 45.9758, 15.008, 1.01229, 86400, 0, 0, 46924), +(@CGUID+44, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 192.838, 35.695, 0.0776353, 4.85202, 86400, 0, 0, 46924), +(@CGUID+45, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 92.3548, -79.2986, 15.008, 5.18363, 86400, 0, 0, 46924), +(@CGUID+46, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 185.819, 35.824, 0.0775393, 4.76475, 86400, 0, 0, 46924), +(@CGUID+47, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 152.633, 53.3561, 0.0794043, 2.68781, 86400, 0, 0, 46924), +(@CGUID+48, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 160.69, -16.6626, 0.0833323, 2.0944, 86400, 5, 1, 46924), +(@CGUID+49, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 139.926, -38.9455, 0.0833333, 0.401426, 86400, 5, 1, 46924), +(@CGUID+50, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 140.177, 50.3653, 0.0811923, 0.907571, 86400, 0, 0, 46924), +(@CGUID+51, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 207.592, -91.1401, 0.0897743, 1.25222, 86400, 5, 1, 46924), +(@CGUID+52, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 180.165, 34.5334, 0.0769383, 4.45059, 86400, 0, 0, 46924), +(@CGUID+53, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 99.9308, -77.9516, 15.0108, 3.92699, 86400, 0, 0, 46924), +(@CGUID+54, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 168.528, -11.8862, 0.0833323, 0.488692, 86400, 5, 1, 46924), +(@CGUID+55, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 210.235, -85.4583, 0.066388, 4.78067, 86400, 0, 0, 46924), +(@CGUID+56, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 134.556, 45.1142, 0.0833333, 1.32645, 86400, 0, 0, 46924), +(@CGUID+57, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 133.419, -40.7442, 0.0833333, 5.67232, 86400, 5, 1, 46924), +(@CGUID+58, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 194.141, 40.2341, 0.0177968, 2.08684, 86400, 0, 0, 46924), +(@CGUID+59, 19716, 0, 0, 554, 3849, 3849, 3, 1, 0, 106.416, 51.6837, 14.938, 2.98083, 86400, 4, 1, 46924), +(@CGUID+60, 19735, 0, 0, 554, 3849, 3849, 3, 1, 0, 230.693, 52.4542, 0.0696908, 3.11984, 86400, 0, 0, 46924), +(@CGUID+61, 19735, 0, 0, 554, 3849, 3849, 3, 1, 0, 290.619, 29.1206, 25.4695, 1.69297, 86400, 0, 0, 46924), +(@CGUID+62, 19735, 0, 0, 554, 3849, 3849, 3, 1, 0, 293.918, -14.8507, 25.3827, 5.15386, 86400, 6, 1, 46924), +(@CGUID+63, 19735, 0, 0, 554, 3849, 3849, 3, 1, 0, 199.945, -22.8589, 24.9578, 0.122173, 86400, 0, 0, 46924), +(@CGUID+64, 19735, 0, 0, 554, 3849, 3849, 3, 1, 0, 137.827, 53.1813, 24.9578, 4.76475, 86400, 0, 0, 46924), +(@CGUID+65, 20059, 0, 0, 554, 3849, 3849, 3, 1, 1, 169.258, -68.094, 0.665288, 3.26377, 86400, 0, 0, 46924), +(@CGUID+66, 20059, 0, 0, 554, 3849, 3849, 3, 1, 1, 31.8311, 47.3686, 0.17648, 4.48464, 86400, 0, 2, 46924), +(@CGUID+67, 20059, 0, 0, 554, 3849, 3849, 3, 1, 1, 31.6824, -47.6501, 0.226791, 1.71503, 86400, 0, 2, 46924), +(@CGUID+68, 20059, 0, 0, 554, 3849, 3849, 3, 1, 1, 169.373, 92.1162, 0.659512, 3.35103, 86400, 0, 0, 46924), +(@CGUID+69, 20059, 0, 0, 554, 3849, 3849, 3, 1, 1, 141.398, 102.786, 26.4566, 4.69415, 86400, 0, 0, 46924), +(@CGUID+70, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 219.266, -55.7564, 0.0853493, 0.112572, 86400, 0, 0, 46924), +(@CGUID+71, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 131.681, 40.4787, 0.0833343, 1.95375, 86400, 6, 1, 46924), +(@CGUID+72, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 138.933, -32.3032, 0.0833333, 4.71239, 86400, 5, 1, 46924), +(@CGUID+73, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 101.908, -49.5597, 14.9791, 1.46291, 86400, 0, 0, 46924), +(@CGUID+74, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 131.22, -37.1084, 0.0833343, 3.9968, 86400, 6, 1, 46924), +(@CGUID+75, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 101.384, 48.1969, 14.9245, 1.4887, 86400, 0, 0, 46924), +(@CGUID+76, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 178.821, -17.3697, 24.9578, 6.18119, 86400, 0, 0, 46924), +(@CGUID+77, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 176.685, -26.0102, 24.9578, 0.0526762, 86400, 0, 0, 46924), +(@CGUID+78, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 142.533, 40.6933, 24.9578, 5.23599, 86400, 0, 0, 46924), +(@CGUID+79, 20988, 0, 0, 554, 3849, 3849, 3, 1, 0, 140.828, 112.036, 26.4566, 4.70349, 86400, 0, 0, 46924), +(@CGUID+80, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 77.5823, 55.4032, 15.008, 3.19395, 86400, 0, 0, 46924), +(@CGUID+81, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 77.945, -60.8388, 15.008, 3.47321, 86400, 0, 0, 46924), +(@CGUID+82, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 168.96, -87.2767, 0.789825, 3.19395, 86400, 0, 0, 46924), +(@CGUID+83, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 37.4107, 54.8215, 0.246395, 2.3911, 86400, 0, 0, 46924), +(@CGUID+84, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 37.4608, -60.7909, 0.246396, 2.6529, 86400, 0, 0, 46924), +(@CGUID+85, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 30.8606, -46.8067, 0.236338, 0.676204, 86400, 0, 0, 46924), +(@CGUID+86, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 33.7581, 49.8961, 0.242408, 5.72468, 86400, 0, 0, 46924), +(@CGUID+87, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 120.378, -82.3034, 15.0098, 3.21141, 86400, 0, 0, 46924), +(@CGUID+88, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 165.423, 77.9691, 1.84254, 3.29867, 86400, 0, 0, 46924), +(@CGUID+89, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 119.44, 69.174, 15.008, 3.29867, 86400, 0, 0, 46924), +(@CGUID+90, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 235.291, -26.6432, 26.4117, 0, 86400, 0, 0, 46924), +(@CGUID+91, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 180.225, -22.4886, 24.9578, 6.27367, 86400, 0, 0, 46924), +(@CGUID+92, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 134.706, 41.1687, 24.9578, 5.58505, 86400, 0, 0, 46924), +(@CGUID+93, 20990, 0, 0, 554, 3849, 3849, 3, 1, 1, 134.306, 109.151, 26.4566, 4.78864, 86400, 0, 0, 46924); + +DELETE FROM `gameobject` WHERE `map`=554 AND `id` IN (185015, 185018, 184632, 184322, 184449, 184465) AND `guid` BETWEEN @OGUID+0 AND @OGUID+11; +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES +(@OGUID+0 , 185015, 554, 3849, 3849, 3, 1, 145.197906494140625, -44.5185165405273437, 1.009188055992126464, 2.740161895751953125, 0, 0, 0.979924201965332031, 0.199370384216308593, 7200, 255, 1, 46924), +(@OGUID+1 , 185015, 554, 3849, 3849, 3, 1, 148.266387939453125, -35.2500495910644531, 1.009233951568603515, 2.478367090225219726, 0, 0, 0.94551849365234375, 0.325568377971649169, 7200, 255, 1, 46924), +(@OGUID+2 , 185015, 554, 3849, 3849, 3, 1, 163.6997833251953125, -27.3792018890380859, 1.00893402099609375, 4.729844093322753906, 0, 0, -0.70090866088867187, 0.713251054286956787, 7200, 255, 1, 46924), +(@OGUID+3 , 185015, 554, 3849, 3849, 3, 1, 155.4228057861328125, -29.7321643829345703, 1.008820056915283203, 2.007128477096557617, 0, 0, 0.84339141845703125, 0.537299633026123046, 7200, 255, 1, 46924), +(@OGUID+4 , 185018, 554, 3849, 3849, 3, 1, 148.266387939453125, -35.2500495910644531, 1.009233951568603515, 2.478367090225219726, 0, 0, 0.94551849365234375, 0.325568377971649169, 7200, 255, 1, 46924), +(@OGUID+5 , 185018, 554, 3849, 3849, 3, 1, 145.197906494140625, -44.5185165405273437, 1.009188055992126464, 2.740161895751953125, 0, 0, 0.979924201965332031, 0.199370384216308593, 7200, 255, 1, 46924), +(@OGUID+6 , 185018, 554, 3849, 3849, 3, 1, 163.6997833251953125, -27.3792018890380859, 1.00893402099609375, 4.729844093322753906, 0, 0, -0.70090866088867187, 0.713251054286956787, 7200, 255, 1, 46924), +(@OGUID+7 , 185018, 554, 3849, 3849, 3, 1, 155.4228057861328125, -29.7321643829345703, 1.008820056915283203, 2.007128477096557617, 0, 0, 0.84339141845703125, 0.537299633026123046, 7200, 255, 1, 46924), +(@OGUID+8 , 184632, 554, 3849, 3849, 3, 1, 236.459716796875, 52.363555908203125, 1.653543949127197265, 3.141592741012573242, 0, 0, -1, 0, 7200, 255, 0, 46924), +(@OGUID+9 , 184322, 554, 3849, 3849, 3, 1, 242.873992919921875, 52.31481170654296875, 1.596333980560302734, 3.141592741012573242, 0, 0, -1, 0, 7200, 255, 0, 46924), +(@OGUID+10, 184449, 554, 3849, 3849, 3, 1, 267.928070068359375, 52.31480789184570312, 27.04253578186035156, 3.141592741012573242, 0, 0, -1, 0, 7200, 255, 0, 46924), +(@OGUID+11, 184465, 554, 3849, 3849, 3, 1, 222.5428009033203125, 70.61063385009765625, -0.00479338550940155, 4.677483558654785156, 0, 0, -0.71933937072753906, 0.694658815860748291, 7200, 255, 1, 46924); + +SET @NPC := @CGUID+0; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=41.327057,`position_y`=29.448656,`position_z`=0.0061041107, `orientation`=3.263765573501586914 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,32.220608,26.515696,0.0071369237,NULL,0,0,0,100,0), +(@PATH,2,27.243652,18.831352,-0.0004997472,NULL,0,0,0,100,0), +(@PATH,3,24.297773,7.9234123,-0.00028621498,2.967059612274169921,9000,0,0,100,0), +(@PATH,4,28.086344,21.93921,-0.00050851365,NULL,0,0,0,100,0), +(@PATH,5,41.327057,29.448656,0.0061041107,3.263765573501586914,9000,0,0,100,0); + +SET @NPC := @CGUID+2; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=43.611073,`position_y`=-26.751925,`position_z`=0.006033899, `orientation`=3.03687286376953125 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,35.5806,-23.746408,-0.0007913007,NULL,0,0,0,100,0), +(@PATH,2,28.923302,-18.143108,-0.0005735572,NULL,0,0,0,100,0), +(@PATH,3,26.356697,-5.9867935,-0.000380761,3.333578824996948242,9000,0,0,100,0), +(@PATH,4,29.69342,-15.448353,-0.00058285974,NULL,0,0,0,100,0), +(@PATH,5,35.844803,-23.9074,-0.0004889075,NULL,0,0,0,100,0), +(@PATH,6,43.611073,-26.751925,0.006033899,3.03687286376953125,9000,0,0,100,0); + +SET @NPC := @CGUID+5; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=117.62223,`position_y`=78.36094,`position_z`=14.92448 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,117.62223,78.36094,14.92448,NULL,0,0,0,100,0), +(@PATH,2,149.63039,81.24523,6.4690247,NULL,0,0,0,100,0), +(@PATH,3,169.93733,81.2677,0.36944586,NULL,0,0,0,100,0), +(@PATH,4,188.18597,64.12248,-0.005838667,NULL,0,0,0,100,0), +(@PATH,5,186.61266,47.3467,-0.006220245,NULL,0,0,0,100,0), +(@PATH,6,164.64165,49.954487,-0.001837478,NULL,0,0,0,100,0), +(@PATH,7,186.61266,47.3467,-0.006220245,NULL,0,0,0,100,0), +(@PATH,8,188.18597,64.12248,-0.005838667,NULL,0,0,0,100,0), +(@PATH,9,169.93733,81.2677,0.36944586,NULL,0,0,0,100,0), +(@PATH,10,149.63039,81.24523,6.4690247,NULL,0,0,0,100,0); + +-- Pathing for Mechanar Crusher Entry: 19231 +SET @NPC := @CGUID+25; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=107.66785,`position_y`=-81.308876,`position_z`=14.931074 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,107.66785,-81.308876,14.931074,NULL,0,0,0,100,0), +(@PATH,2,105.08907,-74.979095,14.9298115,NULL,0,0,0,100,0), +(@PATH,3,96.893936,-71.07658,14.92652,NULL,0,0,0,100,0), +(@PATH,4,90.85117,-74.31637,14.926526,NULL,0,0,0,100,0), +(@PATH,5,96.893936,-71.07658,14.92652,NULL,0,0,0,100,0), +(@PATH,6,105.08907,-74.979095,14.9298115,NULL,0,0,0,100,0); + +-- Pathing for Gatewatcher Iron-Hand Entry: 19710 +SET @NPC := @CGUID+32; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=181.85164,`position_y`=-77.11685,`position_z`=0.0077276435 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,181.85164,-77.11685,0.0077276435,NULL,0,0,0,100,0), +(@PATH,2,167.87256,-78.7667,1.007633,NULL,0,0,0,100,0), +(@PATH,3,120.14774,-74.052536,14.927823,NULL,0,0,0,100,0), +(@PATH,4,167.87256,-78.7667,1.007633,NULL,0,0,0,100,0); + +-- Pathing for Mechanar Driller Entry: 19712 +SET @NPC := @CGUID+37; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=132.1031,`position_y`=37.008965,`position_z`=0.003121846 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,132.1031,37.008965,0.003121846,NULL,0,0,0,100,0), +(@PATH,2,142.23601,40.296707,0.005726555,NULL,0,0,0,100,0), +(@PATH,3,144.87463,45.93079,0.008017367,NULL,0,0,0,100,0), +(@PATH,4,158.54794,47.99082,0.0038790724,NULL,0,0,0,100,0), +(@PATH,5,161.00502,53.83562,0.003132181,NULL,0,0,0,100,0), +(@PATH,6,158.54794,47.99082,0.0038790724,NULL,0,0,0,100,0), +(@PATH,7,144.87463,45.93079,0.008017367,NULL,0,0,0,100,0), +(@PATH,8,142.23601,40.296707,0.005726555,NULL,0,0,0,100,0); + +-- Pathing for Mechanar Tinkerer Entry: 19716 +SET @NPC := @CGUID+58; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=197.70654,`position_y`=37.415173,`position_z`=-0.005917786 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,197.70654,37.415173,-0.005917786,NULL,0,0,0,100,0), +(@PATH,2,193.55858,41.26056,-0.0060337405,NULL,0,0,0,100,0), +(@PATH,3,185.691,41.82604,-0.006107603,NULL,0,0,0,100,0), +(@PATH,4,179.0216,40.52939,-0.006131659,NULL,0,0,0,100,0), +(@PATH,5,174.11919,37.801308,1.010456,NULL,0,0,0,100,0), +(@PATH,6,179.0216,40.52939,-0.006131659,NULL,0,0,0,100,0), +(@PATH,7,185.691,41.82604,-0.006107603,NULL,0,0,0,100,0), +(@PATH,8,193.55858,41.26056,-0.0060337405,NULL,0,0,0,100,0); + +-- Pathing for Mechanar Tinkerer Entry: 19716 +SET @NPC := @CGUID+55; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=213.2274,`position_y`=-75.13932,`position_z`=0.004827803 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,213.2274,-75.13932,0.004827803,NULL,0,1,0,100,0), +(@PATH,2,200.5827,-87.171326,0.005753752,NULL,0,1,0,100,0), +(@PATH,3,201.05713,-94.47349,0.0055515133,NULL,0,1,0,100,0), +(@PATH,4,211.34688,-101.7175,9.806146E-05,NULL,0,1,0,100,0), +(@PATH,5,221.76944,-105.02244,0.0001423994,NULL,0,1,0,100,0), +(@PATH,6,201.05713,-94.47349,0.0055515133,NULL,0,1,0,100,0), +(@PATH,7,200.5827,-87.171326,0.005753752,NULL,0,1,0,100,0), +(@PATH,8,208.24849,-83.39652,0.0051163677,NULL,0,1,0,100,0); + +-- Pathing for Tempest-Forge Destroyer Entry: 19735 +SET @NPC := @CGUID+60; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=233.31285,`position_y`=52.318443,`position_z`=0.021424541 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,233.31285,52.318443,0.021424541,NULL,0,0,0,100,0), +(@PATH,2,203.69647,53.04169,-0.004259702,NULL,0,0,0,100,0); + +-- Pathing for Sunseeker Engineer Entry: 20988 +SET @NPC := @CGUID+75; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=112.06979,`position_y`=40.35622,`position_z`=14.924257 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,112.06979,40.35622,14.924257,NULL,0,0,0,100,0), +(@PATH,2,101.23074,46.33547,14.9244,NULL,0,0,0,100,0), +(@PATH,3,102.23087,58.490253,14.934289,NULL,0,0,0,100,0), +(@PATH,4,110.57969,69.03175,14.918284,NULL,0,0,0,100,0), +(@PATH,5,102.23087,58.490253,14.934289,NULL,0,0,0,100,0), +(@PATH,6,101.23074,46.33547,14.9244,NULL,0,0,0,100,0); + +-- Pathing for Sunseeker Engineer Entry: 20988 +SET @NPC := @CGUID+73; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=101.51141,`position_y`=-74.898766,`position_z`=14.93021 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,101.51141,-74.898766,14.93021,NULL,0,0,0,100,0), +(@PATH,2,104.0157,-60.55514,14.924665,NULL,0,0,0,100,0), +(@PATH,3,100.0206,-48.74694,14.92466,NULL,0,0,0,100,0), +(@PATH,4,103.1169,-38.395683,14.924649,NULL,0,0,0,100,0), +(@PATH,5,115.30892,-32.14138,14.919365,NULL,0,0,0,100,0), +(@PATH,6,103.1169,-38.395683,14.924649,NULL,0,0,0,100,0), +(@PATH,7,100.0206,-48.74694,14.92466,NULL,0,0,0,100,0), +(@PATH,8,104.0157,-60.55514,14.924665,NULL,0,0,0,100,0); + +-- Pathing for Sunseeker Engineer Entry: 20988 +SET @NPC := @CGUID+70; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=229.27179,`position_y`=-57.646294,`position_z`=0.009516931 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,229.27179,-57.646294,0.009516931,NULL,0,0,0,100,0), +(@PATH,2,221.93794,-55.454258,0.008690897,NULL,0,0,0,100,0), +(@PATH,3,215.63664,-57.850872,0.0075872466,NULL,0,0,0,100,0), +(@PATH,4,212.29579,-63.3326,0.0074739046,NULL,0,0,0,100,0), +(@PATH,5,215.63664,-57.850872,0.0075872466,NULL,0,0,0,100,0), +(@PATH,6,221.93794,-55.454258,0.008690897,NULL,0,0,0,100,0); + +-- Work EmoteState (173) +DELETE FROM `creature_addon` WHERE `emote`=173 AND `guid` IN (@CGUID+33,@CGUID+34,@CGUID+35,@CGUID+36,@CGUID+38,@CGUID+39,@CGUID+40,@CGUID+41,@CGUID+42,@CGUID+43,@CGUID+44,@CGUID+45,@CGUID+46,@CGUID+47,@CGUID+50,@CGUID+52,@CGUID+53); +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES +(@CGUID+33,0,0,0,1,173,0,''), +(@CGUID+34,0,0,0,1,173,0,''), +(@CGUID+35,0,0,0,1,173,0,''), +(@CGUID+36,0,0,0,1,173,0,''), +(@CGUID+38,0,0,0,1,173,0,''), +(@CGUID+39,0,0,0,1,173,0,''), +(@CGUID+40,0,0,0,1,173,0,''), +(@CGUID+41,0,0,0,1,173,0,''), +(@CGUID+42,0,0,0,1,173,0,''), +(@CGUID+43,0,0,0,1,173,0,''), +(@CGUID+44,0,0,0,1,173,0,''), +(@CGUID+45,0,0,0,1,173,0,''), +(@CGUID+46,0,0,0,1,173,0,''), +(@CGUID+47,0,0,0,1,173,0,''), +(@CGUID+50,0,0,0,1,173,0,''), +(@CGUID+52,0,0,0,1,173,0,''), +(@CGUID+53,0,0,0,1,173,0,''); + +-- Pathaleon EmoteState +UPDATE `creature_template_addon` SET `bytes2` = 1, `emote` = 333 WHERE (`entry` = 19220); + +-- Correct Auras +UPDATE `creature_template_addon` SET `bytes2` = 1, `auras` = '35191' WHERE (`entry` = 19167); +UPDATE `creature_template_addon` SET `bytes2` = 1, `auras` = '35188' WHERE (`entry` = 19510); + +-- Static groups +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@CGUID+06,@CGUID+07,@CGUID+08,@CGUID+10,@CGUID+11,@CGUID+12,@CGUID+13,@CGUID+15,@CGUID+17,@CGUID+19,@CGUID+20,@CGUID+25,@CGUID+26,@CGUID+28,@CGUID+33,@CGUID+34,@CGUID+35,@CGUID+37,@CGUID+39,@CGUID+40,@CGUID+44,@CGUID+49,@CGUID+91) AND `memberGUID` IN (@CGUID+06,@CGUID+07,@CGUID+08,@CGUID+10,@CGUID+11,@CGUID+12,@CGUID+13,@CGUID+14,@CGUID+15,@CGUID+16,@CGUID+17,@CGUID+18,@CGUID+19,@CGUID+20,@CGUID+25,@CGUID+26,@CGUID+28,@CGUID+29,@CGUID+30,@CGUID+31,@CGUID+33,@CGUID+34,@CGUID+35,@CGUID+36,@CGUID+37,@CGUID+38,@CGUID+39,@CGUID+40,@CGUID+41,@CGUID+42,@CGUID+43,@CGUID+44,@CGUID+45,@CGUID+46,@CGUID+47,@CGUID+48,@CGUID+49,@CGUID+50,@CGUID+51,@CGUID+52,@CGUID+53,@CGUID+54,@CGUID+55,@CGUID+56,@CGUID+57,@CGUID+58,@CGUID+59,@CGUID+65,@CGUID+68,@CGUID+69,@CGUID+70,@CGUID+71,@CGUID+72,@CGUID+73,@CGUID+74,@CGUID+75,@CGUID+76,@CGUID+77,@CGUID+78,@CGUID+79,@CGUID+80,@CGUID+81,@CGUID+82,@CGUID+83,@CGUID+84,@CGUID+87,@CGUID+88,@CGUID+89,@CGUID+90,@CGUID+91,@CGUID+92,@CGUID+93); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(@CGUID+08, @CGUID+08, 0, 0, 3), +(@CGUID+08, @CGUID+84, 0, 0, 3), +(@CGUID+06, @CGUID+06, 0, 0, 3), +(@CGUID+06, @CGUID+81, 0, 0, 3), +(@CGUID+35, @CGUID+35, 0, 0, 3), +(@CGUID+35, @CGUID+36, 0, 0, 3), +(@CGUID+35, @CGUID+73, 0, 0, 3), +(@CGUID+25, @CGUID+25, 0, 0, 3), +(@CGUID+25, @CGUID+53, 0, 0, 3), +(@CGUID+25, @CGUID+45, 0, 0, 3), +(@CGUID+12, @CGUID+12, 0, 0, 3), +(@CGUID+12, @CGUID+87, 0, 0, 3), +(@CGUID+26, @CGUID+26, 0, 0, 3), +(@CGUID+26, @CGUID+65, 0, 0, 3), +(@CGUID+26, @CGUID+82, 0, 0, 3), +(@CGUID+34, @CGUID+34, 0, 0, 3), +(@CGUID+34, @CGUID+51, 0, 0, 3), +(@CGUID+34, @CGUID+38, 0, 0, 3), +(@CGUID+34, @CGUID+55, 0, 0, 3), +(@CGUID+33, @CGUID+33, 0, 0, 3), +(@CGUID+33, @CGUID+70, 0, 0, 3), +(@CGUID+33, @CGUID+42, 0, 0, 3), +(@CGUID+39, @CGUID+39, 0, 0, 3), +(@CGUID+39, @CGUID+41, 0, 0, 3), +(@CGUID+39, @CGUID+54, 0, 0, 3), +(@CGUID+39, @CGUID+48, 0, 0, 3), +(@CGUID+49, @CGUID+49, 0, 0, 3), +(@CGUID+49, @CGUID+72, 0, 0, 3), +(@CGUID+49, @CGUID+57, 0, 0, 3), +(@CGUID+49, @CGUID+74, 0, 0, 3), +(@CGUID+37, @CGUID+37, 0, 0, 3), +(@CGUID+37, @CGUID+71, 0, 0, 3), +(@CGUID+37, @CGUID+56, 0, 0, 3), +(@CGUID+37, @CGUID+50, 0, 0, 3), +(@CGUID+37, @CGUID+47, 0, 0, 3), +(@CGUID+44, @CGUID+44, 0, 0, 3), +(@CGUID+44, @CGUID+46, 0, 0, 3), +(@CGUID+44, @CGUID+52, 0, 0, 3), +(@CGUID+44, @CGUID+58, 0, 0, 3), +(@CGUID+13, @CGUID+13, 0, 0, 3), +(@CGUID+13, @CGUID+14, 0, 0, 3), +(@CGUID+28, @CGUID+28, 0, 0, 3), +(@CGUID+28, @CGUID+88, 0, 0, 3), +(@CGUID+28, @CGUID+68, 0, 0, 3), +(@CGUID+11, @CGUID+11, 0, 0, 3), +(@CGUID+11, @CGUID+89, 0, 0, 3), +(@CGUID+40, @CGUID+40, 0, 0, 3), +(@CGUID+40, @CGUID+43, 0, 0, 3), +(@CGUID+40, @CGUID+59, 0, 0, 3), +(@CGUID+40, @CGUID+75, 0, 0, 3), +(@CGUID+10, @CGUID+10, 0, 0, 3), +(@CGUID+10, @CGUID+80, 0, 0, 3), +(@CGUID+07, @CGUID+07, 0, 0, 3), +(@CGUID+07, @CGUID+83, 0, 0, 3), +(@CGUID+15, @CGUID+15, 0, 0, 3), +(@CGUID+15, @CGUID+30, 0, 0, 3), +(@CGUID+15, @CGUID+16, 0, 0, 3), +(@CGUID+15, @CGUID+29, 0, 0, 3), +(@CGUID+17, @CGUID+17, 0, 0, 3), +(@CGUID+17, @CGUID+90, 0, 0, 3), +(@CGUID+17, @CGUID+18, 0, 0, 3), +(@CGUID+17, @CGUID+31, 0, 0, 3), +(@CGUID+91, @CGUID+91, 0, 0, 3), +(@CGUID+91, @CGUID+77, 0, 0, 3), +(@CGUID+91, @CGUID+76, 0, 0, 3), +(@CGUID+19, @CGUID+19, 0, 0, 3), +(@CGUID+19, @CGUID+92, 0, 0, 3), +(@CGUID+19, @CGUID+78, 0, 0, 3), +(@CGUID+20, @CGUID+20, 0, 0, 3), +(@CGUID+20, @CGUID+93, 0, 0, 3), +(@CGUID+20, @CGUID+69, 0, 0, 3), +(@CGUID+20, @CGUID+79, 0, 0, 3); + +/* + These 2 Tempest-Forge Patrollers stop patrol and emote Emote ID: 3 (OneShotWave) + Pauses for 6000ms + Repeats around 30-60s + Can pause between points +*/ +UPDATE `creature` SET `wander_distance`=0,`MovementType`=0,`position_x`=76.8514,`position_y`=59.621902,`position_z`=14.924665 WHERE `guid`=@CGUID+1; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=0,`position_x`=73.91813,`position_y`=-56.71242,`position_z`=14.924665 WHERE `guid`=@CGUID+3; + +DELETE FROM `waypoints` WHERE `point_comment`='Tempest-Forge Patroller' AND `entry` BETWEEN 1916600 AND 1916601; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `point_comment`) VALUES +-- @CGUID+1 +(1916600,1,76.8514,59.621902,14.924665,NULL,'Tempest-Forge Patroller'), +(1916600,2,38.19203,59.687855,0.1630622,NULL,'Tempest-Forge Patroller'), +(1916600,3,30.011766,55.230145,0.1630622,NULL,'Tempest-Forge Patroller'), +(1916600,4,32.04149,39.386734,0.014305516,NULL,'Tempest-Forge Patroller'), +(1916600,5,30.011766,55.230145,0.1630622,NULL,'Tempest-Forge Patroller'), +(1916600,6,38.19203,59.687855,0.1630622,NULL,'Tempest-Forge Patroller'), +-- @CGUID+3 +(1916601,1,73.91813,-56.71242,14.924665,NULL,'Tempest-Forge Patroller'), +(1916601,2,38.843502,-56.28604,0.22432718,NULL,'Tempest-Forge Patroller'), +(1916601,3,30.624844,-54.907387,0.26585943,NULL,'Tempest-Forge Patroller'), +(1916601,4,31.930918,-34.87634,0.010954779,NULL,'Tempest-Forge Patroller'), +(1916601,5,30.624844,-54.907387,0.26585943,NULL,'Tempest-Forge Patroller'), +(1916601,6,38.843502,-56.28604,0.22432718,NULL,'Tempest-Forge Patroller'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (-(@CGUID+1), -(@CGUID+3))); +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 +(-(@CGUID+1), 0, 0, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - On Aggro - Say Line 0'), +(-(@CGUID+1), 0, 1, 0, 0, 0, 100, 2, 2000, 2000, 7000, 9000, 0, 11, 35012, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - In Combat - Cast \'Charged Arcane Missile\' (Normal Dungeon)'), +(-(@CGUID+1), 0, 2, 0, 0, 0, 100, 4, 2000, 2000, 7000, 9000, 0, 11, 38941, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - In Combat - Cast \'Charged Arcane Missile\' (Heroic Dungeon)'), +(-(@CGUID+1), 0, 3, 0, 0, 0, 100, 4, 6000, 6000, 14000, 16000, 0, 11, 35011, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - In Combat - Cast \'Knockdown\' (Heroic Dungeon)'), +(-(@CGUID+1), 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 1916600, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - On Respawn - Start Waypoint'), +(-(@CGUID+1), 0, 1002, 1003, 1, 0, 100, 0, 30000, 60000, 30000, 60000, 0, 54, 6000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - Out of Combat - Pause Waypoint'), +(-(@CGUID+1), 0, 1003, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - Out of Combat - Play Emote 3'), +(-(@CGUID+3), 0, 0, 0, 4, 0, 20, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - On Aggro - Say Line 0'), +(-(@CGUID+3), 0, 1, 0, 0, 0, 100, 2, 2000, 2000, 7000, 9000, 0, 11, 35012, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - In Combat - Cast \'Charged Arcane Missile\' (Normal Dungeon)'), +(-(@CGUID+3), 0, 2, 0, 0, 0, 100, 4, 2000, 2000, 7000, 9000, 0, 11, 38941, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - In Combat - Cast \'Charged Arcane Missile\' (Heroic Dungeon)'), +(-(@CGUID+3), 0, 3, 0, 0, 0, 100, 4, 6000, 6000, 14000, 16000, 0, 11, 35011, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - In Combat - Cast \'Knockdown\' (Heroic Dungeon)'), +(-(@CGUID+3), 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 1916601, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - On Respawn - Start Waypoint'), +(-(@CGUID+3), 0, 1002, 1003, 1, 0, 100, 0, 30000, 60000, 30000, 60000, 0, 54, 6000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - Out of Combat - Pause Waypoint'), +(-(@CGUID+3), 0, 1003, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 5, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Patroller - Out of Combat - Play Emote 3'); + +/* + These 2 groups move together at the entrance and stop, not moving anymore + This is a hack as waypoint_data does not allow for this behaviour, and it's over-scripted in SAI as waypoints does not work with formations +*/ +SET @NPC := @CGUID+66; +SET @PATH := @NPC * 10; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,28.006437,30.866398,0.0030425692,NULL,0,0,0,100,0), -- Point +(@PATH,2,22.140232,20.44575,-0.00017946598,NULL,0,0,0,100,0), +(@PATH,3,22.140232,20.44575,-0.00017946598,3.176499128341674804,2147483647,0,0,100,0); -- Point + +SET @NPC := @CGUID+67; +SET @PATH := @NPC * 10; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,29.015987,-29.292263,0.0004399572,NULL,0,0,0,100,0), -- Point +(@PATH,2,23.20878,-18.283445,-0.00011080259,NULL,0,0,0,100,0), +(@PATH,3,23.20878,-18.283445,-0.00011080259,3.089232683181762695,2147483647,0,0,100,0); -- Point + +DELETE FROM `creature_formations` WHERE `leaderGUID` IN (@CGUID+66, @CGUID+67) AND `memberGUID` IN (@CGUID+66, @CGUID+67, @CGUID+27, @CGUID+86, @CGUID+9, @CGUID+85); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(@CGUID+66, @CGUID+66, 0, 0, 3), +(@CGUID+66, @CGUID+27, 3, 90, 515), +(@CGUID+66, @CGUID+86, 3, 270, 515), +(@CGUID+67, @CGUID+67, 0, 0, 3), +(@CGUID+67, @CGUID+9, 3, 90, 515), +(@CGUID+67, @CGUID+85, 3, 270, 515); diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp index c18d6c3b6..11d7d777b 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp @@ -65,17 +65,6 @@ public: void InitializeAI() override { BossAI::InitializeAI(); - me->SetVisible(false); - me->SetReactState(REACT_PASSIVE); - } - - void DoAction(int32 /*param*/) override - { - me->SetVisible(true); - me->CastSpell(me, SPELL_TELEPORT_VISUAL, true); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY1H); - me->SetReactState(REACT_AGGRESSIVE); - Talk(SAY_APPEAR); } void JustEngagedWith(Unit* /*who*/) override diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp index acb7b1e45..9ef1d005c 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/instance_mechanar.cpp @@ -41,9 +41,6 @@ public: SetPersistentDataCount(MAX_DATA_INDEXES); LoadDoorData(doorData); - _passageEncounter = 0; - _passageTimer = 0; - _passageGUIDs.clear(); } void OnGameObjectCreate(GameObject* gameObject) override @@ -80,137 +77,8 @@ public: _pathaleonGUID = creature->GetGUID(); } - void OnUnitDeath(Unit* unit) override - { - if (unit->GetTypeId() == TYPEID_UNIT) - if (_passageEncounter > ENCOUNTER_PASSAGE_NOT_STARTED && _passageEncounter < ENCOUNTER_PASSAGE_DONE) - if (_passageGUIDs.find(unit->GetGUID()) != _passageGUIDs.end()) - _passageGUIDs.erase(unit->GetGUID()); - } - - Player* GetPassagePlayer(float x) - { - Map::PlayerList const& pl = instance->GetPlayers(); - for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr) - if (Player* player = itr->GetSource()) - if (player->GetPositionX() < x && player->GetPositionZ() > 24.0f && player->GetPositionY() > -30.0f) - return player; - return nullptr; - } - - void DoSummonAction(Creature* summon, Player* player) - { - summon->CastSpell(summon, SPELL_TELEPORT_VISUAL, true); - summon->AI()->AttackStart(player); - _passageGUIDs.insert(summon->GetGUID()); - } - - void Update(uint32 diff) override - { - if (_passageEncounter == ENCOUNTER_PASSAGE_DONE) - return; - - _passageTimer += diff; - if (_passageTimer >= 1000) - { - _passageTimer = 0; - if (_passageEncounter == ENCOUNTER_PASSAGE_NOT_STARTED) - { - if (Player* player = GetPassagePlayer(250.0f)) - { - _passageEncounter++; - for (uint8 i = 0; i < 4; ++i) - { - Position pos = {238.0f, -27.0f + 3.0f * i, 26.328f, 0.0f}; - if (Creature* creature = instance->SummonCreature(i == 1 || i == 2 ? NPC_SUNSEEKER_ASTROMAGE : NPC_BLOODWARDER_CENTURION, pos)) - DoSummonAction(creature, player); - } - } - } - - if (!_passageGUIDs.empty()) - return; - - if (_passageEncounter < ENCOUNTER_PASSAGE_PHASE3) - { - if (Player* player = GetPassagePlayer(250.0f)) - { - if (_passageEncounter == ENCOUNTER_PASSAGE_PHASE1) - { - Position pos = {214.37f, -23.5f, 24.88f, 0.0f}; - if (Creature* creature = instance->SummonCreature(NPC_TEMPEST_KEEPER_DESTROYER, pos)) - DoSummonAction(creature, player); - } - else if (_passageEncounter == ENCOUNTER_PASSAGE_PHASE2) - { - for (uint8 i = 0; i < 3; ++i) - { - Position pos = {199.76f, -26.0f + 2.5f * i, 24.88f, 0.0f}; - if (Creature* creature = instance->SummonCreature(i == 1 ? NPC_SUNSEEKER_ENGINEER : NPC_BLOODWARDER_PHYSICIAN, pos)) - DoSummonAction(creature, player); - } - } - - StorePersistentData(DATA_INDEX_PASSAGE_ENCOUNTER, _passageEncounter++); - SaveToDB(); - } - } - else - { - if (Player* player = GetPassagePlayer(148.0f)) - { - if (_passageEncounter == ENCOUNTER_PASSAGE_PHASE3) - { - for (uint8 i = 0; i < 3; ++i) - { - Position pos = {135.0f + 2.5f * i, 36.76f, 24.88f, M_PI * 1.5f}; - if (Creature* creature = instance->SummonCreature(i == 1 ? NPC_SUNSEEKER_ASTROMAGE : NPC_BLOODWARDER_PHYSICIAN, pos)) - DoSummonAction(creature, player); - } - } - else if (_passageEncounter == ENCOUNTER_PASSAGE_PHASE4) - { - Position pos = {137.62f, 62.23f, 24.88f, M_PI * 1.5f}; - if (Creature* creature = instance->SummonCreature(NPC_TEMPEST_KEEPER_DESTROYER, pos)) - DoSummonAction(creature, player); - } - else if (_passageEncounter == ENCOUNTER_PASSAGE_PHASE5) - { - for (uint8 i = 0; i < 4; ++i) - { - Position pos = {133.0f + 3.5f * i, 92.88f, 26.38f, M_PI * 1.5f}; - if (Creature* creature = instance->SummonCreature(i == 1 || i == 2 ? NPC_SUNSEEKER_ASTROMAGE : NPC_SUNSEEKER_ENGINEER, pos)) - DoSummonAction(creature, player); - } - } - else if (_passageEncounter == ENCOUNTER_PASSAGE_PHASE6) - { - if (Creature* creature = instance->GetCreature(_pathaleonGUID)) - creature->AI()->DoAction(1); - } - - StorePersistentData(DATA_INDEX_PASSAGE_ENCOUNTER, _passageEncounter++); - SaveToDB(); - } - } - } - } - - void ReadSaveDataMore(std::istringstream& /*data*/) override - { - _passageEncounter = GetPersistentData(DATA_INDEX_PASSAGE_ENCOUNTER); - - if (_passageEncounter == ENCOUNTER_PASSAGE_DONE) - { - _passageEncounter = ENCOUNTER_PASSAGE_PHASE6; - } - } - private: ObjectGuid _pathaleonGUID; - uint32 _passageTimer; - uint32 _passageEncounter; - GuidSet _passageGUIDs; }; InstanceScript* GetInstanceScript(InstanceMap* map) const override diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h index 7eac01cc2..c746be005 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/mechanar.h @@ -36,15 +36,6 @@ enum DataTypes DATA_NETHERMANCER_SEPRETHREA = 3, DATA_PATHALEON_THE_CALCULATOR = 4, MAX_ENCOUNTER = 5, - - ENCOUNTER_PASSAGE_NOT_STARTED = 0, - ENCOUNTER_PASSAGE_PHASE1 = 1, - ENCOUNTER_PASSAGE_PHASE2 = 2, - ENCOUNTER_PASSAGE_PHASE3 = 3, - ENCOUNTER_PASSAGE_PHASE4 = 4, - ENCOUNTER_PASSAGE_PHASE5 = 5, - ENCOUNTER_PASSAGE_PHASE6 = 6, - ENCOUNTER_PASSAGE_DONE = 7, }; enum NpcIds @@ -67,12 +58,11 @@ enum GameobjectIds enum SpellIds { - SPELL_TELEPORT_VISUAL = 35517 + SPELL_TELEPORT_VISUAL = 34427 }; enum DataIndex { - DATA_INDEX_PASSAGE_ENCOUNTER = 0, MAX_DATA_INDEXES }; From 784c5e941605b5e2b8ece02183bf9253bca51012 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Mon, 13 Mar 2023 20:16:04 +0100 Subject: [PATCH 130/159] fix(Core): Crashfix. (#15337) --- src/server/game/Handlers/LootHandler.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index d28613080..b5d36cc65 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -409,7 +409,10 @@ void WorldSession::DoLootRelease(ObjectGuid lguid) } //Player is not looking at loot list, he doesn't need to see updates on the loot list - loot->RemoveLooter(player->GetGUID()); + if (!lguid.IsItem()) + { + loot->RemoveLooter(player->GetGUID()); + } } void WorldSession::HandleLootMasterGiveOpcode(WorldPacket& recvData) From 218c62ce5498df80dbe4b78fd38866212db46de2 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Mon, 13 Mar 2023 19:18:30 +0000 Subject: [PATCH 131/159] chore(DB): import pending files Referenced commit(s): 784c5e941605b5e2b8ece02183bf9253bca51012 --- .../rev_1678656260407918300.sql => db_world/2023_03_13_03.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1678656260407918300.sql => db_world/2023_03_13_03.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1678656260407918300.sql b/data/sql/updates/db_world/2023_03_13_03.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1678656260407918300.sql rename to data/sql/updates/db_world/2023_03_13_03.sql index faccc6e20..d65b5e793 100644 --- a/data/sql/updates/pending_db_world/rev_1678656260407918300.sql +++ b/data/sql/updates/db_world/2023_03_13_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_13_02 -> 2023_03_13_03 -- DELETE all old stuff DELETE FROM `creature` WHERE `map`=554 AND `id1` IN (19166,19167,19168,19218,19219,19220,19221,19231,19510,19710,19712,19713,19716,19735,20059,20988,20990) AND `guid` IN (67872,75951,83160,83161,83162,83163,83164,83165,83166,83167,83168,83169,83170,83171,83172,83173,83174,83175,83176,83177,83178,83179,83180,83182,83183,83185,83186,83187,83188,83189,83190,83191,83192,83193,83194,83195,83196,83197,83198,83199,83200,83201,83202,83203,83204,83205,83207,83208,83209,83210,83211,83212,83213,83214,83215,83216,83217,83218,83219,83220,83221,83222,83223,83224,83225,83226,83227,83228,83229,83230,83231,83232,83233,83234,83235,83236,83239,83240,83241,83245,87087,88276); DELETE FROM `creature_addon` WHERE `guid` IN (83160,83162,83163,83166,83167,83168,83170,83171,83173,83177,83180,83182,83183,83189,83195,83197,83200,83201,83202,83203,83208,83210,83211,83212,83213,83219,83220,83221,83222,83223,83224,83229,83233,83234,83239,83240); From 1f82bcf1f172100eb43332bd30d824293ab3bb5d Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Tue, 14 Mar 2023 00:17:50 -0300 Subject: [PATCH 132/159] fix(DB/Creature): Correct movement speeds for Black Morass Heroic (#15368) --- data/sql/updates/pending_db_world/rev_1678658890895019400.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678658890895019400.sql diff --git a/data/sql/updates/pending_db_world/rev_1678658890895019400.sql b/data/sql/updates/pending_db_world/rev_1678658890895019400.sql new file mode 100644 index 000000000..8f4c66533 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678658890895019400.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `speed_walk`=2, `speed_run`=1.42857 WHERE `entry` IN (17835,21137,17892,21136,18994,21138,18995,21139,21818,20740,20741,20742,20743,22165,22164,22166,22168,22169); From 20561fbf1429a0a0467cb608f81e958557c3687e Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Tue, 14 Mar 2023 04:18:22 +0100 Subject: [PATCH 133/159] fix(DB/Spells): Treat Chocolate Sample as a positive spell. (#15351) --- data/sql/updates/pending_db_world/rev_1678617293053295700.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678617293053295700.sql diff --git a/data/sql/updates/pending_db_world/rev_1678617293053295700.sql b/data/sql/updates/pending_db_world/rev_1678617293053295700.sql new file mode 100644 index 000000000..d2361c270 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678617293053295700.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `spell_custom_attr` WHERE `spell_id`=69489; +INSERT INTO `spell_custom_attr` VALUES +(69489,0x02000000); From 1e0b4fb76258f429d7b6d772e8827355ed79e6cb Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Tue, 14 Mar 2023 03:20:50 +0000 Subject: [PATCH 134/159] chore(DB): import pending files Referenced commit(s): 20561fbf1429a0a0467cb608f81e958557c3687e --- .../rev_1678617293053295700.sql => db_world/2023_03_14_00.sql} | 1 + .../rev_1678658890895019400.sql => db_world/2023_03_14_01.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1678617293053295700.sql => db_world/2023_03_14_00.sql} (72%) rename data/sql/updates/{pending_db_world/rev_1678658890895019400.sql => db_world/2023_03_14_01.sql} (81%) diff --git a/data/sql/updates/pending_db_world/rev_1678617293053295700.sql b/data/sql/updates/db_world/2023_03_14_00.sql similarity index 72% rename from data/sql/updates/pending_db_world/rev_1678617293053295700.sql rename to data/sql/updates/db_world/2023_03_14_00.sql index d2361c270..f65a80fa3 100644 --- a/data/sql/updates/pending_db_world/rev_1678617293053295700.sql +++ b/data/sql/updates/db_world/2023_03_14_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_13_03 -> 2023_03_14_00 -- DELETE FROM `spell_custom_attr` WHERE `spell_id`=69489; INSERT INTO `spell_custom_attr` VALUES diff --git a/data/sql/updates/pending_db_world/rev_1678658890895019400.sql b/data/sql/updates/db_world/2023_03_14_01.sql similarity index 81% rename from data/sql/updates/pending_db_world/rev_1678658890895019400.sql rename to data/sql/updates/db_world/2023_03_14_01.sql index 8f4c66533..4960d81f2 100644 --- a/data/sql/updates/pending_db_world/rev_1678658890895019400.sql +++ b/data/sql/updates/db_world/2023_03_14_01.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_14_00 -> 2023_03_14_01 -- UPDATE `creature_template` SET `speed_walk`=2, `speed_run`=1.42857 WHERE `entry` IN (17835,21137,17892,21136,18994,21138,18995,21139,21818,20740,20741,20742,20743,22165,22164,22166,22168,22169); From 3b6020bcb0a375c8b6103a52080a8c60c42c8767 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Tue, 14 Mar 2023 07:32:48 +0100 Subject: [PATCH 135/159] fix(DB/Gameobjects): Fixed one spawn position of Stranglekelp. (#15356) Co-authored-by: Gultask <100873791+Gultask@users.noreply.github.com> --- data/sql/updates/pending_db_world/rev_1678626418501365600.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678626418501365600.sql diff --git a/data/sql/updates/pending_db_world/rev_1678626418501365600.sql b/data/sql/updates/pending_db_world/rev_1678626418501365600.sql new file mode 100644 index 000000000..49f3f2cdb --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678626418501365600.sql @@ -0,0 +1,2 @@ +-- +UPDATE `gameobject` SET `position_z`=-4.33 WHERE `guid`=11646 AND `id`=2045; From 4134c2dada78b3b36bd19cca4e8095b9d185538a Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Tue, 14 Mar 2023 06:35:16 +0000 Subject: [PATCH 136/159] chore(DB): import pending files Referenced commit(s): 3b6020bcb0a375c8b6103a52080a8c60c42c8767 --- .../rev_1678626418501365600.sql => db_world/2023_03_14_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1678626418501365600.sql => db_world/2023_03_14_02.sql} (64%) diff --git a/data/sql/updates/pending_db_world/rev_1678626418501365600.sql b/data/sql/updates/db_world/2023_03_14_02.sql similarity index 64% rename from data/sql/updates/pending_db_world/rev_1678626418501365600.sql rename to data/sql/updates/db_world/2023_03_14_02.sql index 49f3f2cdb..878f5b082 100644 --- a/data/sql/updates/pending_db_world/rev_1678626418501365600.sql +++ b/data/sql/updates/db_world/2023_03_14_02.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_14_01 -> 2023_03_14_02 -- UPDATE `gameobject` SET `position_z`=-4.33 WHERE `guid`=11646 AND `id`=2045; From d0a63ed0f9b7cb9833b2f0b456b5cb0285f2458a Mon Sep 17 00:00:00 2001 From: ICXCNIKA <84076297+ohkasdasf@users.noreply.github.com> Date: Tue, 14 Mar 2023 18:41:29 +0100 Subject: [PATCH 137/159] fix(DB/Quest): Improvements for request texts #2 (#15343) --- data/sql/updates/pending_db_world/qri02.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 data/sql/updates/pending_db_world/qri02.sql diff --git a/data/sql/updates/pending_db_world/qri02.sql b/data/sql/updates/pending_db_world/qri02.sql new file mode 100644 index 000000000..ff53bf2e0 --- /dev/null +++ b/data/sql/updates/pending_db_world/qri02.sql @@ -0,0 +1,11 @@ +DELETE FROM `quest_request_items` WHERE `ID` IN (660, 714, 722, 747, 754, 758, 789, 829, 934); +INSERT INTO `quest_request_items` (`ID`, `EmoteOnComplete`, `EmoteOnIncomplete`, `CompletionText`, `VerifiedBuild`) VALUES +(660, 1, 0, 'The time for talk is done. Protect Kinelory if you care about the people of Hillsbrad at all.', 0), +(714, 0, 0, 'Yes, yes, yes. Just a moment.$B$B', 0), +(722, 1, 1, 'The Shadowforge clan... is dangerous. Be careful. You must find the amulet.', 0), +(747, 1, 1, 'Providing meat and feathers for the tribe is the first step in proving yourself as a hunter before the Chief.', 0), +(754, 1, 0, 'Do not delay, $n. The Winterhoof Well\'s taint must be removed!', 0), +(758, 1, 0, 'The Thunderhorn Water Well is still tainted, $n. Please, you must perform the ritual!', 0), +(789, 1, 0, 'The carapace of a scorpid isn\'t so thick that the strength of a determined warrior will be deterred. Strike strongly and without doubt, and the scorpids should prove easy prey.', 0), +(829, 2, 2, 'My most humble greetings, $C. How might I help my $R $Gbrother:sister; today?', 0), +(934, 1, 0, 'Along with the druids, the Oracle Tree and the Arch Druid have been carefully monitoring the growth of Teldrassil. But though we have a new home, our immortal lives have not been restored.', 0); From 7a5b82b7922fb799844d8f2bffb79fa0bb804214 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Tue, 14 Mar 2023 17:44:10 +0000 Subject: [PATCH 138/159] chore(DB): import pending files Referenced commit(s): d0a63ed0f9b7cb9833b2f0b456b5cb0285f2458a --- .../{pending_db_world/qri02.sql => db_world/2023_03_14_03.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/qri02.sql => db_world/2023_03_14_03.sql} (96%) diff --git a/data/sql/updates/pending_db_world/qri02.sql b/data/sql/updates/db_world/2023_03_14_03.sql similarity index 96% rename from data/sql/updates/pending_db_world/qri02.sql rename to data/sql/updates/db_world/2023_03_14_03.sql index ff53bf2e0..9756c236b 100644 --- a/data/sql/updates/pending_db_world/qri02.sql +++ b/data/sql/updates/db_world/2023_03_14_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_14_02 -> 2023_03_14_03 DELETE FROM `quest_request_items` WHERE `ID` IN (660, 714, 722, 747, 754, 758, 789, 829, 934); INSERT INTO `quest_request_items` (`ID`, `EmoteOnComplete`, `EmoteOnIncomplete`, `CompletionText`, `VerifiedBuild`) VALUES (660, 1, 0, 'The time for talk is done. Protect Kinelory if you care about the people of Hillsbrad at all.', 0), From 8143dc2ee080d69e115bdb3f7e0f859d86f61634 Mon Sep 17 00:00:00 2001 From: ICXCNIKA <84076297+ohkasdasf@users.noreply.github.com> Date: Tue, 14 Mar 2023 18:50:07 +0100 Subject: [PATCH 139/159] fix(DB/Quest): Improvements for request texts (#15309) --- data/sql/updates/pending_db_world/qri01.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 data/sql/updates/pending_db_world/qri01.sql diff --git a/data/sql/updates/pending_db_world/qri01.sql b/data/sql/updates/pending_db_world/qri01.sql new file mode 100644 index 000000000..de4b339a0 --- /dev/null +++ b/data/sql/updates/pending_db_world/qri01.sql @@ -0,0 +1,10 @@ +DELETE FROM `quest_request_items` WHERE `ID` IN (124, 191, 192, 257, 258, 289, 457, 511); +INSERT INTO `quest_request_items` (`ID`, `EmoteOnComplete`, `EmoteOnIncomplete`, `CompletionText`, `VerifiedBuild`) VALUES +(124, 1, 0, 'My horses still seem skittish, and I still hear that cursed wolf cry at night. Please, $N, do something about those Gnolls!', 0), +(191, 1, 0, 'Go kill 10 panthers! Show us what you\'ve got!', 0), +(192, 1, 0, 'What are you doing here, $n! You should be crawling through the brush, trying to kill 10 Shadowmaw Panthers. I thought you fancied yourself a big game $c?', 0), +(257, 1, 1, 'No luck? Don\'t feel too bad, $ner...$B$BNot everyone can be me.', 0), +(258, 1, 1, 'It\'s only natural to feel sorry for yourself when shown up by someone so new to this world. You shouldn\'t feel bad, $nah.$B$BHm? Did I get your name wrong?', 0), +(289, 1, 0, 'In my dreams, I can sometimes hear the doomed moans of my brethren! Please, good $gsir:lady;, free them from the bonds and quiet their cries.', 0), +(457, 25, 25, 'Your task is not yet complete, $N. Return to me once 5 mangy nightsabers and 5 thistle boars have been killed.', 0), +(511, 6, 0, 'Yes, $Gsir:ma\'am;? Do you have some business with me?', 0); From b6d7cf3656a353d4f669ec427cfb2614fcda09a0 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Tue, 14 Mar 2023 18:51:29 +0100 Subject: [PATCH 140/159] fix(DB/Quest): Fixed rep requirements for some Darkmoon quests. (#15196) --- data/sql/updates/pending_db_world/rev_1677339050428804700.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677339050428804700.sql diff --git a/data/sql/updates/pending_db_world/rev_1677339050428804700.sql b/data/sql/updates/pending_db_world/rev_1677339050428804700.sql new file mode 100644 index 000000000..31316fde5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677339050428804700.sql @@ -0,0 +1,3 @@ +-- +UPDATE `quest_template_addon` SET `RequiredMaxRepValue`=5000 WHERE `ID` IN (7893,8222,7903,7898,7885); +UPDATE `quest_template_addon` SET `RequiredMinRepValue`=5000 WHERE `ID` IN (7939,8223,7943,7942,7941); From 6cf0f57616bb9417b02429a958387b6d16040acd Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Tue, 14 Mar 2023 17:54:03 +0000 Subject: [PATCH 141/159] chore(DB): import pending files Referenced commit(s): b6d7cf3656a353d4f669ec427cfb2614fcda09a0 --- .../{pending_db_world/qri01.sql => db_world/2023_03_14_04.sql} | 1 + .../rev_1677339050428804700.sql => db_world/2023_03_14_05.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/qri01.sql => db_world/2023_03_14_04.sql} (96%) rename data/sql/updates/{pending_db_world/rev_1677339050428804700.sql => db_world/2023_03_14_05.sql} (82%) diff --git a/data/sql/updates/pending_db_world/qri01.sql b/data/sql/updates/db_world/2023_03_14_04.sql similarity index 96% rename from data/sql/updates/pending_db_world/qri01.sql rename to data/sql/updates/db_world/2023_03_14_04.sql index de4b339a0..630e2ee22 100644 --- a/data/sql/updates/pending_db_world/qri01.sql +++ b/data/sql/updates/db_world/2023_03_14_04.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_14_03 -> 2023_03_14_04 DELETE FROM `quest_request_items` WHERE `ID` IN (124, 191, 192, 257, 258, 289, 457, 511); INSERT INTO `quest_request_items` (`ID`, `EmoteOnComplete`, `EmoteOnIncomplete`, `CompletionText`, `VerifiedBuild`) VALUES (124, 1, 0, 'My horses still seem skittish, and I still hear that cursed wolf cry at night. Please, $N, do something about those Gnolls!', 0), diff --git a/data/sql/updates/pending_db_world/rev_1677339050428804700.sql b/data/sql/updates/db_world/2023_03_14_05.sql similarity index 82% rename from data/sql/updates/pending_db_world/rev_1677339050428804700.sql rename to data/sql/updates/db_world/2023_03_14_05.sql index 31316fde5..9136dcc5e 100644 --- a/data/sql/updates/pending_db_world/rev_1677339050428804700.sql +++ b/data/sql/updates/db_world/2023_03_14_05.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_14_04 -> 2023_03_14_05 -- UPDATE `quest_template_addon` SET `RequiredMaxRepValue`=5000 WHERE `ID` IN (7893,8222,7903,7898,7885); UPDATE `quest_template_addon` SET `RequiredMinRepValue`=5000 WHERE `ID` IN (7939,8223,7943,7942,7941); From b21f98d6390c41240dc4efcb7244982bc89c6536 Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Wed, 15 Mar 2023 04:07:49 +0100 Subject: [PATCH 142/159] fix(Scripts/Karazhan): Chess Event. (#14736) --- .../rev_1674333933272138700.sql | 238 ++ src/server/game/Entities/Player/Player.cpp | 27 +- src/server/game/Entities/Player/Player.h | 4 +- src/server/game/Entities/Unit/Unit.cpp | 15 +- src/server/game/Entities/Unit/Unit.h | 2 + src/server/game/Handlers/NPCHandler.cpp | 4 - .../game/Spells/SpellInfoCorrections.cpp | 8 +- .../Karazhan/boss_chess_event.cpp | 2092 +++++++++++++++++ .../Karazhan/instance_karazhan.cpp | 127 +- .../EasternKingdoms/Karazhan/karazhan.h | 108 +- .../eastern_kingdoms_script_loader.cpp | 2 + 11 files changed, 2570 insertions(+), 57 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1674333933272138700.sql create mode 100644 src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp diff --git a/data/sql/updates/pending_db_world/rev_1674333933272138700.sql b/data/sql/updates/pending_db_world/rev_1674333933272138700.sql new file mode 100644 index 000000000..72f2d5f52 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1674333933272138700.sql @@ -0,0 +1,238 @@ +-- +UPDATE `creature_template` SET `ScriptName` = "npc_chesspiece", `flags_extra`=`flags_extra`|0x01000000 WHERE `entry` IN (17469,17211,21748,21664,21750,21683,21747,21682,21726,21160,21752,21684); +UPDATE `creature_template` SET `ScriptName` = "npc_echo_of_medivh" WHERE `entry`=16816; +UPDATE `creature_template` SET `ScriptName` = "npc_chess_move_trigger", `flags_extra`=130 WHERE `entry`=22519; + +DELETE FROM `creature` WHERE `id1`=22519; + +DELETE FROM `creature_template_addon` WHERE `entry`=22521; +INSERT INTO `creature_template_addon` (`entry`,`bytes2`,`auras`) VALUES +(22521,1,'39383'); + +UPDATE `creature_template` SET `flags_extra` = 130 WHERE `entry` = 22521; + +DELETE FROM `creature_template_spell` WHERE `CreatureID` IN (21684,21683,21682,21664,21160,17211,21752,21750,21747,21748,21726,17469); +INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES +(21684, 0, 37146, 12340), -- King Llane +(21684, 1, 30284, 12340), +(21684, 2, 37471, 12340), +(21684, 3, 37474, 12340), +(21683, 0, 37148, 12340), -- Human Conjurer +(21683, 1, 30284, 12340), +(21683, 2, 37462, 12340), +(21683, 3, 37465, 12340), +(21682, 0, 37146, 12340), -- Human Cleric +(21682, 1, 30284, 12340), +(21682, 2, 37455, 12340), +(21682, 3, 37459, 12340), +(21664, 0, 37144, 12340), -- Human Charger +(21664, 1, 30284, 12340), +(21664, 2, 37453, 12340), +(21664, 3, 37498, 12340), +(21160, 0, 37146, 12340), -- Conjured Water Elemental +(21160, 1, 30284, 12340), +(21160, 2, 37427, 12340), +(21160, 3, 37432, 12340), +(17211, 0, 37146, 12340), -- Human Footman +(17211, 1, 30284, 12340), +(17211, 2, 37406, 12340), +(17211, 3, 37414, 12340), +(21752, 0, 37146, 12340), -- Warchief Blackhand +(21752, 1, 30284, 12340), +(21752, 2, 37472, 12340), +(21752, 3, 37476, 12340), +(21750, 0, 37148, 12340), -- Orc Warlock +(21750, 1, 30284, 12340), +(21750, 2, 37463, 12340), +(21750, 3, 37461, 12340), +(21747, 0, 37146, 12340), -- Orc Necrolyte +(21747, 1, 30284, 12340), +(21747, 2, 37456, 12340), +(21747, 3, 37461, 12340), +(21748, 0, 37144, 12340), -- Orc Wolf +(21748, 1, 30284, 12340), +(21748, 2, 37454, 12340), +(21748, 3, 37502, 12340), +(21726, 0, 37146, 12340), -- Summoned Daemon +(21726, 1, 30284, 12340), +(21726, 2, 37428, 12340), +(21726, 3, 37434, 12340), +(17469, 0, 37146, 12340), -- Orc Grunt +(17469, 1, 30284, 12340), +(17469, 2, 37413, 12340), +(17469, 3, 37416, 12340); + +UPDATE `creature_template` SET `RegenHealth`=0, `BaseAttackTime`=3000 WHERE `entry` IN (21726,21748,21747,21750,21752,17469,21160,21664,21682,21684,21683,17211); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 13 AND `SourceEntry` IN (37465,37476,30012,37144,37148,37151,37152,37153,37472,37461,37454,37502,37428,37413,37471,37474,37459,37453,37498,37427,37406,39384,37462,37455,37463,37456,37144,37146,37148,30284,37469); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ScriptName`,`Comment`) VALUES +(13,1,37146,0,31,3,22519,0,'',"Move - Target Chess Piece: Karazhan Invisible Stalker"), +(13,1,30012,0,31,3,22519,0,'',"Move - Target Chess Piece: Karazhan Invisible Stalker"), +(13,1,37144,0,31,3,22519,0,'',"Move - Target Chess Piece: Karazhan Invisible Stalker"), +(13,1,37148,0,31,3,22519,0,'',"Move - Target Chess Piece: Karazhan Invisible Stalker"), +(13,1,37151,0,31,3,22519,0,'',"Move - Target Chess Piece: Karazhan Invisible Stalker"), +(13,1,37152,0,31,3,22519,0,'',"Move - Target Chess Piece: Karazhan Invisible Stalker"), +(13,1,37153,0,31,3,22519,0,'',"Move - Target Chess Piece: Karazhan Invisible Stalker"), + +(13,3,30284,0,31,3,22519,0,'',"Change Facing - Target Chess Piece: Karazhan Invisible Stalker"), + +(13,1,39384,0,31,3,21752,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,1,39384,1,31,3,21750,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,1,39384,2,31,3,21747,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,1,39384,3,31,3,21748,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,1,39384,4,31,3,21726,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,1,39384,5,31,3,17469,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,2,39384,0,31,3,21683,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,2,39384,1,31,3,21684,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,2,39384,2,31,3,21682,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,2,39384,3,31,3,21664,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,2,39384,4,31,3,21160,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), +(13,2,39384,5,31,3,17211,0,'',"Alliance and Horde Chess Spell - Burning Flames - Target Alliance and Horde Pieces"), + +(13,1,37471,0,31,3,21683,0,'',"Alliance Chess Spell - Heroism - Target Alliance Pieces"), +(13,1,37471,1,31,3,21684,0,'',"Alliance Chess Spell - Heroism - Target Alliance Pieces"), +(13,1,37471,2,31,3,21682,0,'',"Alliance Chess Spell - Heroism - Target Alliance Pieces"), +(13,1,37471,3,31,3,21664,0,'',"Alliance Chess Spell - Heroism - Target Alliance Pieces"), +(13,1,37471,4,31,3,21160,0,'',"Alliance Chess Spell - Heroism - Target Alliance Pieces"), +(13,1,37471,5,31,3,17211,0,'',"Alliance Chess Spell - Heroism - Target Alliance Pieces"), + +(13,1,37459,0,31,3,21752,0,'',"Alliance Chess Spell - Holy Lance - Target Horde Pieces"), +(13,1,37459,1,31,3,21750,0,'',"Alliance Chess Spell - Holy Lance - Target Horde Pieces"), +(13,1,37459,2,31,3,21747,0,'',"Alliance Chess Spell - Holy Lance - Target Horde Pieces"), +(13,1,37459,3,31,3,21748,0,'',"Alliance Chess Spell - Holy Lance - Target Horde Pieces"), +(13,1,37459,4,31,3,21726,0,'',"Alliance Chess Spell - Holy Lance - Target Horde Pieces"), +(13,1,37459,5,31,3,17469,0,'',"Alliance Chess Spell - Holy Lance - Target Horde Pieces"), + +(13,1,37453,0,31,3,21752,0,'',"Alliance Chess Spell - Smash - Target Horde Pieces"), +(13,1,37453,1,31,3,21750,0,'',"Alliance Chess Spell - Smash - Target Horde Pieces"), +(13,1,37453,2,31,3,21747,0,'',"Alliance Chess Spell - Smash - Target Horde Pieces"), +(13,1,37453,3,31,3,21748,0,'',"Alliance Chess Spell - Smash - Target Horde Pieces"), +(13,1,37453,4,31,3,21726,0,'',"Alliance Chess Spell - Smash - Target Horde Pieces"), +(13,1,37453,5,31,3,17469,0,'',"Alliance Chess Spell - Smash - Target Horde Pieces"), + +(13,1,37427,0,31,3,21752,0,'',"Alliance Chess Spell - Geyser - Target Horde Pieces"), +(13,1,37427,1,31,3,21750,0,'',"Alliance Chess Spell - Geyser - Target Horde Pieces"), +(13,1,37427,2,31,3,21747,0,'',"Alliance Chess Spell - Geyser - Target Horde Pieces"), +(13,1,37427,3,31,3,21748,0,'',"Alliance Chess Spell - Geyser - Target Horde Pieces"), +(13,1,37427,4,31,3,21726,0,'',"Alliance Chess Spell - Geyser - Target Horde Pieces"), +(13,1,37427,5,31,3,17469,0,'',"Alliance Chess Spell - Geyser - Target Horde Pieces"), + +(13,1,37474,0,31,3,21752,0,'',"Alliance Chess Spell - Sweep - Target Horde Pieces"), +(13,1,37474,1,31,3,21750,0,'',"Alliance Chess Spell - Sweep - Target Horde Pieces"), +(13,1,37474,2,31,3,21747,0,'',"Alliance Chess Spell - Sweep - Target Horde Pieces"), +(13,1,37474,3,31,3,21748,0,'',"Alliance Chess Spell - Sweep - Target Horde Pieces"), +(13,1,37474,4,31,3,21726,0,'',"Alliance Chess Spell - Sweep - Target Horde Pieces"), +(13,1,37474,5,31,3,17469,0,'',"Alliance Chess Spell - Sweep - Target Horde Pieces"), + +(13,1,37465,0,31,3,21752,0,'',"Alliance Chess Spell - Rain of Fire - Target Horde Pieces"), +(13,1,37465,1,31,3,21750,0,'',"Alliance Chess Spell - Rain of Fire - Target Horde Pieces"), +(13,1,37465,2,31,3,21747,0,'',"Alliance Chess Spell - Rain of Fire - Target Horde Pieces"), +(13,1,37465,3,31,3,21748,0,'',"Alliance Chess Spell - Rain of Fire - Target Horde Pieces"), +(13,1,37465,4,31,3,21726,0,'',"Alliance Chess Spell - Rain of Fire - Target Horde Pieces"), +(13,1,37465,5,31,3,17469,0,'',"Alliance Chess Spell - Rain of Fire - Target Horde Pieces"), + +(13,1,37498,0,31,3,21752,0,'',"Alliance Chess Spell - Stomp - Target Horde Pieces"), +(13,1,37498,1,31,3,21750,0,'',"Alliance Chess Spell - Stomp - Target Horde Pieces"), +(13,1,37498,2,31,3,21747,0,'',"Alliance Chess Spell - Stomp - Target Horde Pieces"), +(13,1,37498,3,31,3,21748,0,'',"Alliance Chess Spell - Stomp - Target Horde Pieces"), +(13,1,37498,4,31,3,21726,0,'',"Alliance Chess Spell - Stomp - Target Horde Pieces"), +(13,1,37498,5,31,3,17469,0,'',"Alliance Chess Spell - Stomp - Target Horde Pieces"), + +(13,1,37406,0,31,3,21752,0,'',"Alliance Chess Spell - Heroic Blow - Target Horde Pieces"), +(13,1,37406,1,31,3,21750,0,'',"Alliance Chess Spell - Heroic Blow - Target Horde Pieces"), +(13,1,37406,2,31,3,21747,0,'',"Alliance Chess Spell - Heroic Blow - Target Horde Pieces"), +(13,1,37406,3,31,3,21748,0,'',"Alliance Chess Spell - Heroic Blow - Target Horde Pieces"), +(13,1,37406,4,31,3,21726,0,'',"Alliance Chess Spell - Heroic Blow - Target Horde Pieces"), +(13,1,37406,5,31,3,17469,0,'',"Alliance Chess Spell - Heroic Blow - Target Horde Pieces"), + +(13,1,37472,0,31,3,21752,0,'',"Horde Chess Spell - Bloodlust - Target Horde Pieces"), +(13,1,37472,1,31,3,21750,0,'',"Horde Chess Spell - Bloodlust - Target Horde Pieces"), +(13,1,37472,2,31,3,21747,0,'',"Horde Chess Spell - Bloodlust - Target Horde Pieces"), +(13,1,37472,3,31,3,21748,0,'',"Horde Chess Spell - Bloodlust - Target Horde Pieces"), +(13,1,37472,4,31,3,21726,0,'',"Horde Chess Spell - Bloodlust - Target Horde Pieces"), +(13,1,37472,5,31,3,17469,0,'',"Horde Chess Spell - Bloodlust - Target Horde Pieces"), + +(13,1,37461,0,31,3,21683,0,'',"Horde Chess Spell - Shadow Spear - Target Alliance Pieces"), +(13,1,37461,1,31,3,21684,0,'',"Horde Chess Spell - Shadow Spear - Target Alliance Pieces"), +(13,1,37461,2,31,3,21682,0,'',"Horde Chess Spell - Shadow Spear - Target Alliance Pieces"), +(13,1,37461,3,31,3,21664,0,'',"Horde Chess Spell - Shadow Spear - Target Alliance Pieces"), +(13,1,37461,4,31,3,21160,0,'',"Horde Chess Spell - Shadow Spear - Target Alliance Pieces"), +(13,1,37461,5,31,3,17211,0,'',"Horde Chess Spell - Shadow Spear - Target Alliance Pieces"), + +(13,1,37502,0,31,3,21683,0,'',"Horde Chess Spell - Howl - Target Alliance Pieces"), +(13,1,37502,1,31,3,21684,0,'',"Horde Chess Spell - Howl - Target Alliance Pieces"), +(13,1,37502,2,31,3,21682,0,'',"Horde Chess Spell - Howl - Target Alliance Pieces"), +(13,1,37502,3,31,3,21664,0,'',"Horde Chess Spell - Howl - Target Alliance Pieces"), +(13,1,37502,4,31,3,21160,0,'',"Horde Chess Spell - Howl - Target Alliance Pieces"), +(13,1,37502,5,31,3,17211,0,'',"Horde Chess Spell - Howl - Target Alliance Pieces"), + +(13,1,37428,0,31,3,21683,0,'',"Horde Chess Spell - Hellfire - Target Alliance Pieces"), +(13,1,37428,1,31,3,21684,0,'',"Horde Chess Spell - Hellfire - Target Alliance Pieces"), +(13,1,37428,2,31,3,21682,0,'',"Horde Chess Spell - Hellfire - Target Alliance Pieces"), +(13,1,37428,3,31,3,21664,0,'',"Horde Chess Spell - Hellfire - Target Alliance Pieces"), +(13,1,37428,4,31,3,21160,0,'',"Horde Chess Spell - Hellfire - Target Alliance Pieces"), +(13,1,37428,5,31,3,17211,0,'',"Horde Chess Spell - Hellfire - Target Alliance Pieces"), + +(13,1,37476,0,31,3,21683,0,'',"Horde Chess Spell - Cleave - Target Alliance Pieces"), +(13,1,37476,1,31,3,21684,0,'',"Horde Chess Spell - Cleave - Target Alliance Pieces"), +(13,1,37476,2,31,3,21682,0,'',"Horde Chess Spell - Cleave - Target Alliance Pieces"), +(13,1,37476,3,31,3,21664,0,'',"Horde Chess Spell - Cleave - Target Alliance Pieces"), +(13,1,37476,4,31,3,21160,0,'',"Horde Chess Spell - Cleave - Target Alliance Pieces"), +(13,1,37476,5,31,3,17211,0,'',"Horde Chess Spell - Cleave - Target Alliance Pieces"), + +(13,1,37469,0,31,3,21683,0,'',"Horde Chess Spell - Poison Cloud - Target Alliance Pieces"), +(13,1,37469,1,31,3,21684,0,'',"Horde Chess Spell - Poison Cloud - Target Alliance Pieces"), +(13,1,37469,2,31,3,21682,0,'',"Horde Chess Spell - Poison Cloud - Target Alliance Pieces"), +(13,1,37469,3,31,3,21664,0,'',"Horde Chess Spell - Poison Cloud - Target Alliance Pieces"), +(13,1,37469,4,31,3,21160,0,'',"Horde Chess Spell - Poison Cloud - Target Alliance Pieces"), +(13,1,37469,5,31,3,17211,0,'',"Horde Chess Spell - Poison Cloud - Target Alliance Pieces"), + +(13,1,37454,0,31,3,21683,0,'',"Horde Chess Spell - Bite - Target Alliance Pieces"), +(13,1,37454,1,31,3,21684,0,'',"Horde Chess Spell - Bite - Target Alliance Pieces"), +(13,1,37454,2,31,3,21682,0,'',"Horde Chess Spell - Bite - Target Alliance Pieces"), +(13,1,37454,3,31,3,21664,0,'',"Horde Chess Spell - Bite - Target Alliance Pieces"), +(13,1,37454,4,31,3,21160,0,'',"Horde Chess Spell - Bite - Target Alliance Pieces"), +(13,1,37454,5,31,3,17211,0,'',"Horde Chess Spell - Bite - Target Alliance Pieces"), + +(13,1,37413,0,31,3,21683,0,'',"Horde Chess Spell - Vicious Strike - Target Alliance Pieces"), +(13,1,37413,1,31,3,21684,0,'',"Horde Chess Spell - Vicious Strike - Target Alliance Pieces"), +(13,1,37413,2,31,3,21682,0,'',"Horde Chess Spell - Vicious Strike - Target Alliance Pieces"), +(13,1,37413,3,31,3,21664,0,'',"Horde Chess Spell - Vicious Strike - Target Alliance Pieces"), +(13,1,37413,4,31,3,21160,0,'',"Horde Chess Spell - Vicious Strike - Target Alliance Pieces"), +(13,1,37413,5,31,3,17211,0,'',"Horde Chess Spell - Vicious Strike - Target Alliance Pieces"); + +DELETE FROM `creature_text` WHERE `CreatureID`=16816; +INSERT INTO `creature_text` VALUES +(16816,0,0,'Very well. Let the game begin.',14,0,100,0,0,10338,0,0,'Echo of Medivh - EventBegin'), +(16816,1,0,'Perhaps a change is in order.',14,0,100,0,0,10357,0,0,'Echo of Medivh - Cheat 1'), +(16816,1,1,'Time for an alternative scenario.',14,0,100,0,0,10358,0,0,'Echo of Medivh - Cheat 2'), +(16816,1,2,'One must not become too complacent.',14,0,100,0,0,10359,0,0,'Echo of Medivh - Cheat 3'), +(16816,2,0,'%s cheats',16,0,100,0,0,0,21910,0,'Echo of Medivh - CheatEmote'), +(16816,3,0,'Let us see.',14,0,100,0,0,10340,0,0,'Echo of Medivh - Player Loose Pawn 1'), +(16816,3,1,'A transparent stratagem.',14,0,100,0,0,10339,0,0,'Echo of Medivh - Player Loose Pawn 2'), +(16816,3,2,'Ah, the wheels have begun to turn.',14,0,100,0,0,10341,0,0,'Echo of Medivh - Player Loose Pawn 3'), +(16816,4,0,'Foolish! Very foolish!',14,0,100,0,0,10345,0,0,'Echo of Medivh - Player Loose Rook'), +(16816,5,0,'Yes... all according to plan.',14,0,100,0,0,10349,0,0,'Echo of Medivh - Player Loose Knight'), +(16816,6,0,'The slightest loss of concentration is all it takes.',14,0,100,0,0,10347,0,0,'Echo of Medivh - Player Loose Bishop'), +(16816,7,0,'Now it gets interesting.',14,0,100,0,0,10351,0,0,'Echo of Medivh - Player Loose Queen'), +(16816,8,0,'As it should be.',14,0,100,0,0,10354,0,0,'Echo of Medivh - Player Loose King'), +(16816,9,0,'Hmm.',14,0,100,0,0,10342,0,0,'Echo of Medivh - Medivh Loose Pawn 1'), +(16816,9,1,'No matter.',14,0,100,0,0,10344,0,0,'Echo of Medivh - Medivh Loose Pawn 2'), +(16816,9,2,'Interesting.',14,0,100,0,0,10343,0,0,'Echo of Medivh - Medivh Loose Pawn 3'), +(16816,10,0,'A minor concern.',14,0,100,0,0,10346,0,0,'Echo of Medivh - Medivh Loose Rook'), +(16816,11,0,'Yes...of course.',14,0,100,0,0,10350,0,0,'Echo of Medivh - Medivh Loose Knight'), +(16816,12,0,'A necessary sacrifice.',14,0,100,0,0,10348,0,0,'Echo of Medivh - Medivh Loose Bishop'), +(16816,13,0,'Ahh, I should have known.',14,0,100,0,0,10352,0,0,'Echo of Medivh - Medivh Loose Queen'), +(16816,14,0,'And so, the end draws near',14,0,100,0,0,10353,0,0,'Echo of Medivh - Medivh Loose King'), +(16816,15,0,'Nothing less than perfection will do.',14,0,100,0,0,10356,0,0,'Echo of Medivh - Checkmate 1'), +(16816,15,1,'And so it ends.',14,0,100,0,0,10355,0,0,'Echo of Medivh - Checkmate 2'), +(16816,16,0,'The halls of Karazhan shake, as the curse binding the doors of the Gamesman\'s Hall is lifted.',16,0,100,0,0,0,20430,0,'Echo of Medivh - Event Ended'); + +DELETE FROM `gossip_menu_option` WHERE `menuid` IN (8404,7413,8354,8345,8346,8347,8348,8349,8355,8362,8366,8367,8368); +UPDATE `creature_template` SET `npcflag`=0 WHERE `entry` IN (17469,17211,21748,21664,21750,21683,21747,21682,21726,21160,21752,21684); + +UPDATE `creature_template` SET `flags_extra`=130 WHERE `entry` IN (17208,17305,17317,17316); + +DELETE FROM `spell_script_names` WHERE `spell_id`=30019; +INSERT INTO `spell_script_names` VALUES +(30019,'spell_control_piece'); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ac26e58a8..ec753508f 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9183,32 +9183,47 @@ Pet* Player::CreatePet(uint32 creatureEntry, uint32 spellID /*= 0*/) return pet; } -void Player::StopCastingCharm() +void Player::StopCastingCharm(Aura* except /*= nullptr*/) { Unit* charm = GetCharm(); if (!charm) + { return; + } if (charm->GetTypeId() == TYPEID_UNIT) { if (charm->ToCreature()->HasUnitTypeMask(UNIT_MASK_PUPPET)) + { ((Puppet*)charm)->UnSummon(); + } else if (charm->IsVehicle()) + { ExitVehicle(); + } } + if (GetCharmGUID()) - charm->RemoveCharmAuras(); + { + charm->RemoveAurasByType(SPELL_AURA_MOD_CHARM, ObjectGuid::Empty, except); + charm->RemoveAurasByType(SPELL_AURA_MOD_POSSESS_PET, ObjectGuid::Empty, except); + charm->RemoveAurasByType(SPELL_AURA_MOD_POSSESS, ObjectGuid::Empty, except); + charm->RemoveAurasByType(SPELL_AURA_AOE_CHARM, ObjectGuid::Empty, except); + } if (GetCharmGUID()) { LOG_FATAL("entities.player", "Player {} ({} is not able to uncharm unit ({})", GetName(), GetGUID().ToString(), GetCharmGUID().ToString()); + if (charm->GetCharmerGUID()) { LOG_FATAL("entities.player", "Charmed unit has charmer {}", charm->GetCharmerGUID().ToString()); ABORT(); } else + { SetCharm(charm, false); + } } } @@ -13031,15 +13046,15 @@ bool ItemPosCount::isContainedIn(ItemPosCountVec const& vec) const return false; } -void Player::StopCastingBindSight() +void Player::StopCastingBindSight(Aura* except /*= nullptr*/) { if (WorldObject* target = GetViewpoint()) { if (target->isType(TYPEMASK_UNIT)) { - ((Unit*)target)->RemoveAurasByType(SPELL_AURA_BIND_SIGHT, GetGUID()); - ((Unit*)target)->RemoveAurasByType(SPELL_AURA_MOD_POSSESS, GetGUID()); - ((Unit*)target)->RemoveAurasByType(SPELL_AURA_MOD_POSSESS_PET, GetGUID()); + ((Unit*)target)->RemoveAurasByType(SPELL_AURA_BIND_SIGHT, GetGUID(), except); + ((Unit*)target)->RemoveAurasByType(SPELL_AURA_MOD_POSSESS, GetGUID(), except); + ((Unit*)target)->RemoveAurasByType(SPELL_AURA_MOD_POSSESS_PET, GetGUID(), except); } } } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 4b5ecd818..52dec4b03 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2298,8 +2298,8 @@ public: void SetSeer(WorldObject* target) { m_seer = target; } void SetViewpoint(WorldObject* target, bool apply); [[nodiscard]] WorldObject* GetViewpoint() const; - void StopCastingCharm(); - void StopCastingBindSight(); + void StopCastingCharm(Aura* except = nullptr); + void StopCastingBindSight(Aura* except = nullptr); [[nodiscard]] uint32 GetSaveTimer() const { return m_nextSave; } void SetSaveTimer(uint32 timer) { m_nextSave = timer; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f0905f83c..a98efc706 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -18575,15 +18575,15 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au // Charmer stop charming if (playerCharmer) { - playerCharmer->StopCastingCharm(); - playerCharmer->StopCastingBindSight(); + playerCharmer->StopCastingCharm(aurApp ? aurApp->GetBase() : nullptr); + playerCharmer->StopCastingBindSight(aurApp ? aurApp->GetBase() : nullptr); } // Charmed stop charming if (GetTypeId() == TYPEID_PLAYER) { - ToPlayer()->StopCastingCharm(); - ToPlayer()->StopCastingBindSight(); + ToPlayer()->StopCastingCharm(aurApp ? aurApp->GetBase() : nullptr); + ToPlayer()->StopCastingBindSight(aurApp ? aurApp->GetBase() : nullptr); } // StopCastingCharm may remove a possessed pet? @@ -18695,8 +18695,11 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(GameTime::GetGameTime().count())); // cast can't be helped } } - GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, GetFollowAngle()); - playerCharmer->CharmSpellInitialize(); + if (playerCharmer->m_seer != this) + { + GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, GetFollowAngle()); + playerCharmer->CharmSpellInitialize(); + } break; default: break; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 536d18dce..6d3eac9ee 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2461,6 +2461,8 @@ public: std::string GetDebugInfo() const override; + [[nodiscard]] uint32 GetOldFactionId() const { return _oldFactionId; } + protected: explicit Unit (bool isWorldObject); diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 61d1feaa1..9794ca8d9 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -289,10 +289,6 @@ void WorldSession::HandleGossipHelloOpcode(WorldPacket& recvData) if (unit->GetNpcFlags() == UNIT_NPC_FLAG_NONE) return; - // xinef: do not allow to open gossip when npc is in combat - if (unit->GetNpcFlags() == UNIT_NPC_FLAG_GOSSIP && unit->IsInCombat()) // should work on all flags? - return; - // set faction visible if needed if (FactionTemplateEntry const* factionTemplateEntry = sFactionTemplateStore.LookupEntry(unit->GetFaction())) _player->GetReputationMgr().SetVisible(factionTemplateEntry); diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index e0c4d4b59..be47d6793 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -4470,7 +4470,13 @@ void SpellMgr::LoadSpellInfoCorrections() { spellInfo->AttributesEx2 |= SPELL_ATTR2_IGNORE_LINE_OF_SIGHT; }); - + // Game In Session + ApplySpellFix({ 39331 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_APPLY_AURA; + spellInfo->Attributes |= SPELL_ATTR0_NO_AURA_CANCEL; + spellInfo->AuraInterruptFlags |= AURA_INTERRUPT_FLAG_CHANGE_MAP; + }); // Death Ray Warning Visual, Death Ray Damage Visual ApplySpellFix({ 63882, 63886 }, [](SpellInfo* spellInfo) { diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp new file mode 100644 index 000000000..5f40a5155 --- /dev/null +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_chess_event.cpp @@ -0,0 +1,2092 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "karazhan.h" +#include "ObjectMgr.h" +#include "Player.h" +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "ScriptedEscortAI.h" +#include "ScriptedFollowerAI.h" +#include "ScriptedGossip.h" +#include "SpellInfo.h" +#include "SpellAuras.h" +#include "SpellScript.h" +#include "Unit.h" +#include "World.h" + +#include + +enum EchoOfMedivhGossipOptions +{ + MEDIVH_GOSSIP_START_PVE = 1, + MEDIVH_GOSSIP_RESTART, + MEDIVH_GOSSIP_START_PVP +}; + +enum KarazhanChessSpells +{ + SPELL_MOVE_1 = 37146, // 8y + SPELL_MOVE_2 = 37144, // 15y + SPELL_MOVE_3 = 37148, // 20y + SPELL_MOVE_4 = 37151, // 8y + SPELL_MOVE_5 = 37152, // 8y + SPELL_MOVE_6 = 37153, // 8y + + SPELL_MOVE_GENERIC = 30012, // Unlimited + + SPELL_CHANGE_FACING = 30284, + SPELL_MOVE_MARKER = 32261, + SPELL_MOVE_COOLDOWN = 30543, + SPELL_CONTROL_PIECE = 30019, + SPELL_RECENTLY_INGAME = 30529, + + SPELL_FURY_OF_MEDIVH_FIRE = 39345, + SPELL_MELEE_ATTACK_TIMER = 32226, + SPELL_MELEE_ATTACK_TIMER_TRIGGER = 32225, + SPELL_MELEE_DAMAGE = 32247 +}; + +enum KarazhanChessNPCs +{ + NPC_CHESS_MOVE_TRIGGER = 22519 +}; + +enum KarazhanChessTeam +{ + DEAD_ALLIANCE = 0, + DEAD_HORDE = 1, +}; + +enum KarazhanChessOrientationType : uint8 +{ + ORI_SE = 0, // Horde start + ORI_S = 1, + ORI_SW = 2, + ORI_W = 3, + ORI_NW = 4, // Alliance start + ORI_N = 5, + ORI_NE = 6, + ORI_E = 7, + + MAX_ORI +}; + +enum KarazhanChessPiecesSpells +{ + //ability 1 + SPELL_KING_H_1 = 37472, //Bloodlust + SPELL_KING_A_1 = 37471, //Heroism + SPELL_QUEEN_H_1 = 37463, //Fireball + SPELL_QUEEN_A_1 = 37462, //Elemental Blast + SPELL_BISHOP_H_1 = 37461, //Shadow Spear + SPELL_BISHOP_A_1 = 37459, //Holy Lance + SPELL_KNIGHT_H_1 = 37502, //Howl + SPELL_KNIGHT_A_1 = 37453, //Smash + SPELL_ROOK_H_1 = 37428, //Hellfire + SPELL_ROOK_A_1 = 37427, //Geyser + SPELL_PAWN_H_1 = 37416, //Weapon Deflection + SPELL_PAWN_A_1 = 37414, //Shield Block + + //ability 2 + SPELL_KING_H_2 = 37476, //Cleave + SPELL_KING_A_2 = 37474, //Sweep + SPELL_QUEEN_H_2 = 37469, //Poison Cloud + SPELL_QUEEN_A_2 = 37465, //Rain of Fire + SPELL_BISHOP_H_2 = 37456, //Shadow Mend + SPELL_BISHOP_A_2 = 37455, //Healing + SPELL_KNIGHT_H_2 = 37454, //Bite + SPELL_KNIGHT_A_2 = 37498, //Stomp + SPELL_ROOK_H_2 = 37434, //Fire Shield + SPELL_ROOK_A_2 = 37432, //Water Shield + SPELL_PAWN_H_2 = 37413, //Vicious Strike + SPELL_PAWN_A_2 = 37406 //Heroic Blow +}; + +enum ChessEventTalks +{ + TALK_EVENT_BEGIN = 0, + + TALK_MEDIHV_CHEAT = 1, + TALK_MEDIHV_CHEAT_EMOTE = 2, + + TALK_PLAYER_LOOSE_PAWN = 3, + TALK_PLAYER_LOOSE_ROOK = 4, + TALK_PLAYER_LOOSE_KNIGHT = 5, + TALK_PLAYER_LOOSE_BISHOP = 6, + TALK_PLAYER_LOOSE_QUEEN = 7, + TALK_PLAYER_LOOSE_KING = 8, + + TALK_MEDIVH_LOOSE_PAWN = 9, + TALK_MEDIVH_LOOSE_ROOK = 10, + TALK_MEDIVH_LOOSE_KNIGHT = 11, + TALK_MEDIVH_LOOSE_BISHOP = 12, + TALK_MEDIVH_LOOSE_QUEEN = 13, + TALK_MEDIVH_LOOSE_KING = 14, + + TALK_CHECKMATE = 15, + TALK_EVENT_ENDED = 16 +}; + +static constexpr uint8 MAX_ROW = 8; +static constexpr uint8 MAX_COL = 8; + +struct BoardCell +{ + BoardCell() : pieceEntry(0), row(0), col(0) { } + + ObjectGuid triggerGUID; + ObjectGuid pieceGUID; + uint32 pieceEntry; + uint8 row; + uint8 col; + + void SetData(ObjectGuid _triggerGUID, uint8 _row, uint8 _col) + { + triggerGUID = _triggerGUID; + row = _row; + col = _col; + } + + void Reset() + { + pieceGUID.Clear(); + pieceEntry = 0; + } + + void SetPiece(Creature* piece) + { + pieceGUID = piece->GetGUID(); + pieceEntry = piece->GetEntry(); + } +}; + +// ORI_SE ORI_S ORI_SW ORI_W ORI_NW ORI_N ORI_NE ORI_E +static std::array orientations = { 3.809080f, 3.022091f, 2.235102f, 1.448113f, 0.661124f, 6.1724616f, 5.385472f, 4.598483f }; + +static bool IsFriendly(Creature* piece, Creature* target) +{ + return piece->GetFaction() == target->GetFaction(); +} + +enum ChessPieceSearchType +{ + CHESS_PIECE_SEARCH_TYPE_CLOSEST = 1, + CHESS_PIECE_SEARCH_TYPE_RANDOM = 2 +}; + +struct npc_echo_of_medivh : public ScriptedAI +{ + npc_echo_of_medivh(Creature* creature) : ScriptedAI(creature), _summons(me) + { + _instance = creature->GetInstanceScript(); + } + + void Reset() override + { + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + _boards[row][col].Reset(); + } + } + + _summons.DespawnAll(); + + _cheatTimer = urand(45 * IN_MILLISECONDS, 100 * IN_MILLISECONDS); + } + + void JustSummoned(Creature* summon) override + { + _summons.Summon(summon); + } + + void SummonedCreatureDespawn(Creature* summon) override + { + _summons.Despawn(summon); + } + + void RemoveCheats() + { + // Buffs + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + if (ObjectGuid guid = _boards[row][col].pieceGUID) + { + if (Creature* piece = ObjectAccessor::GetCreature(*me, guid)) + { + piece->RemoveAurasDueToSpell(SPELL_HAND_OF_MEDIVH); + } + } + } + } + } + + void SetupBoard() + { + _instance->SetData(DATA_CHESS_REINIT_PIECES, 0); + + _summons.DespawnAll(); + + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + BoardCell& cell = _boards[row][col]; + + if (Creature* trigger = me->SummonCreature(NPC_CHESS_MOVE_TRIGGER, (-11108.099609f + (3.49f * col) + (4.4f * row)), (-1872.910034f - (4.4f * col) + (3.45f * row)), 220.667f, 0, TEMPSUMMON_MANUAL_DESPAWN, 0)) + { + cell.SetData(trigger->GetGUID(), row, col); + HandleCellInitialData(row, col, trigger, cell); + } + } + } + + _deadCount.fill(0); + } + + void HandleCellInitialData(uint8 row, uint8 col, Creature* trigger, BoardCell& cell) + { + switch (row) + { + case 0: // Alliance first row + { + switch (col) + { + case 0: + case 7: // Rook + if (Creature* rook = trigger->FindNearestCreature(NPC_ROOK_A, 4.0f, true)) + { + cell.SetPiece(rook); + } + break; + case 1: + case 6: // Knight + if (Creature* knight = trigger->FindNearestCreature(NPC_KNIGHT_A, 4.0f, true)) + { + cell.SetPiece(knight); + } + break; + case 2: + case 5: // Bishop + if (Creature* bishop = trigger->FindNearestCreature(NPC_BISHOP_A, 4.0f, true)) + { + cell.SetPiece(bishop); + } + break; + case 3: // Queen + if (Creature* queen = trigger->FindNearestCreature(NPC_QUEEN_A, 4.0f, true)) + { + cell.SetPiece(queen); + } + break; + case 4: // King + if (Creature* king = trigger->FindNearestCreature(NPC_KING_A, 4.0f, true)) + { + cell.SetPiece(king); + } + break; + } + break; + } + case 1: // Alliance second row + // All pawns + if (Creature* pawn = trigger->FindNearestCreature(NPC_PAWN_A, 4.0f, true)) + { + cell.SetPiece(pawn); + } + break; + case 6: // Horde second row + // All pawns + if (Creature* pawn = trigger->FindNearestCreature(NPC_PAWN_H, 4.0f, true)) + { + cell.SetPiece(pawn); + } + break; + case 7: // Horde first row + { + switch (col) + { + case 0: + case 7: // Rook + if (Creature* rook = trigger->FindNearestCreature(NPC_ROOK_H, 4.0f, true)) + { + cell.SetPiece(rook); + } + break; + case 1: + case 6: // Knight + if (Creature* knight = trigger->FindNearestCreature(NPC_KNIGHT_H, 4.0f, true)) + { + cell.SetPiece(knight); + } + break; + case 2: + case 5: // Bishop + if (Creature* bishop = trigger->FindNearestCreature(NPC_BISHOP_H, 4.0f, true)) + { + cell.SetPiece(bishop); + } + break; + case 3: // Queen + if (Creature* queen = trigger->FindNearestCreature(NPC_QUEEN_H, 4.0f, true)) + { + cell.SetPiece(queen); + } + break; + case 4: // King + if (Creature* king = trigger->FindNearestCreature(NPC_KING_H, 4.0f, true)) + { + cell.SetPiece(king); + } + break; + default: + break; + } + break; + } + default: + cell.Reset(); + break; + } + } + + bool IsMedivhPiece(uint32 entry) const + { + switch (entry) + { + case NPC_PAWN_H: + case NPC_KNIGHT_H: + case NPC_QUEEN_H: + case NPC_BISHOP_H: + case NPC_ROOK_H: + case NPC_KING_H: + return _instance->GetData(CHESS_EVENT_TEAM) == TEAM_ALLIANCE; + case NPC_PAWN_A: + case NPC_KNIGHT_A: + case NPC_QUEEN_A: + case NPC_BISHOP_A: + case NPC_ROOK_A: + case NPC_KING_A: + return _instance->GetData(CHESS_EVENT_TEAM) == TEAM_HORDE; + } + + return false; + } + + Creature* GetHostileTargetForChangeFacing(Creature* piece, KarazhanChessOrientationType orientation) + { + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + BoardCell const& cell = _boards[row][col]; + if (cell.pieceGUID == piece->GetGUID()) + { + std::vector orientations; + switch (orientation) + { + case ORI_SE: + orientations = { ORI_NE, ORI_E, ORI_S, ORI_SW }; + break; + case ORI_S: + orientations = { ORI_E, ORI_SE, ORI_SW, ORI_W }; + break; + case ORI_SW: + orientations = { ORI_SE, ORI_S, ORI_W, ORI_NW }; + break; + case ORI_W: + orientations = { ORI_NE, ORI_SW, ORI_NW, ORI_N }; + break; + case ORI_NW: + orientations = { ORI_SW, ORI_W, ORI_N, ORI_NE }; + break; + case ORI_N: + orientations = { ORI_W, ORI_NW, ORI_NE, ORI_E }; + break; + case ORI_NE: + orientations = { ORI_NW, ORI_N, ORI_E, ORI_SE }; + break; + case ORI_E: + orientations = { ORI_N, ORI_NE, ORI_SE, ORI_S }; + break; + default: + break; + } + + for (KarazhanChessOrientationType orient : orientations) + { + uint8 newRow = row; + uint8 newCol = col; + switch (orient) + { + case ORI_SE: + newRow -= 1; + break; + case ORI_S: + newRow -= 1; + newCol -= 1; + break; + case ORI_SW: + newCol -= 1; + break; + case ORI_W: + newRow += 1; + newCol -= 1; + break; + case ORI_NW: + newRow += 1; + break; + case ORI_N: + newRow += 1; + newCol += 1; + break; + case ORI_NE: + newCol += 1; + break; + case ORI_E: + newRow -= 1; + newCol += 1; + break; + default: + break; + } + + if (Creature* targetPiece = ObjectAccessor::GetCreature(*me, _boards[newRow][newCol].pieceGUID)) + { + if (!IsFriendly(piece, targetPiece)) + { + return targetPiece; + } + } + } + + return nullptr; + } + } + } + + return nullptr; + } + + void HandlePieceJustDied(Creature* piece) + { + switch (piece->GetFaction()) + { + case CHESS_FACTION_ALLIANCE: + { + float baseX = -11078.116211f; + float baseY = -1908.443115f; + float deltaX = 2.148438f; + float deltaY = 1.723755f; + float extraX = 2.416992f; + float extraY = -2.889649f; + float offset = 1.3f * (_deadCount[DEAD_ALLIANCE] % MAX_ROW); + float finalX = baseX + offset * deltaX + (_deadCount[DEAD_ALLIANCE] >= MAX_ROW ? 1 : 0) * extraX; + float finalY = baseY + offset * deltaY + (_deadCount[DEAD_ALLIANCE] >= MAX_ROW ? 1 : 0) * extraY; + piece->NearTeleportTo(finalX, finalY, 221.0f, orientations[ORI_SW]); + ++_deadCount[DEAD_ALLIANCE]; + + piece->CombatStop(); + piece->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + piece->setDeathState(JUST_RESPAWNED); + piece->SetHealth(piece->GetMaxHealth()); + break; + } + case CHESS_FACTION_HORDE: + { + float baseX = -11081.393555f; + float baseY = -1844.194092f; + float deltaX = -2.148438f; + float deltaY = -1.723755f; + float extraX = -2.416992f; + float extraY = 2.889649f; + + float offset = 1.3f * (_deadCount[DEAD_HORDE] % MAX_ROW); + + float finalX = baseX + offset * deltaX + (_deadCount[DEAD_HORDE] >= MAX_ROW ? 1 : 0) * extraX; + float finalY = baseY + offset * deltaY + (_deadCount[DEAD_HORDE] >= MAX_ROW ? 1 : 0) * extraY; + piece->NearTeleportTo(finalX, finalY, 221.0f, orientations[ORI_NE]); + ++_deadCount[DEAD_HORDE]; + + piece->CombatStop(); + piece->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + piece->setDeathState(JUST_RESPAWNED); + piece->SetHealth(piece->GetMaxHealth()); + break; + } + } + + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + if (_boards[row][col].pieceGUID == piece->GetGUID()) + { + _boards[row][col].Reset(); + } + } + } + + if (_instance->GetData(CHESS_EVENT_TEAM) == TEAM_HORDE) + { + bool ended = false; + switch (piece->GetEntry()) + { + case NPC_KING_H: + _instance->SetData(DATA_CHESS_EVENT, NOT_STARTED); + _instance->SetData(DATA_CHESS_REINIT_PIECES, 0); + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_NOT_STARTED); + break; + case NPC_KING_A: + if (_instance->GetData(DATA_CHESS_EVENT) == IN_PROGRESS) + { + _instance->SetData(DATA_CHESS_EVENT, DONE); + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_PVE_FINISHED); + _instance->SetData(DATA_CHESS_REINIT_PIECES, 0); + _instance->DoRespawnGameObject(_instance->GetGuidData(DATA_DUST_COVERED_CHEST), DAY); + Talk(TALK_EVENT_ENDED); + ended = true; + _instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_GAME_IN_SESSION); + } + else if (_instance->GetData(DATA_CHESS_EVENT) == SPECIAL) + { + _instance->SetData(DATA_CHESS_EVENT, DONE); + _instance->SetData(DATA_CHESS_REINIT_PIECES, 0); + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_PVE_FINISHED); + ended = true; + _instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_GAME_IN_SESSION); + } + break; + default: + break; + } + + if (!ended) + { + uint8 talkIndex = TALK_PLAYER_LOOSE_PAWN; + if (piece->GetFaction() == CHESS_FACTION_ALLIANCE) + { + talkIndex = TALK_MEDIVH_LOOSE_PAWN; + } + + switch (piece->GetEntry()) + { + case NPC_ROOK_A: + case NPC_ROOK_H: + talkIndex += 1; + break; + case NPC_KNIGHT_A: + case NPC_KNIGHT_H: + talkIndex += 2; + break; + case NPC_BISHOP_A: + case NPC_BISHOP_H: + talkIndex += 3; + break; + case NPC_QUEEN_A: + case NPC_QUEEN_H: + talkIndex += 4; + break; + case NPC_KING_H: + case NPC_KING_A: + talkIndex += 5; + break; + } + + Talk(talkIndex); + } + } + else if (_instance->GetData(CHESS_EVENT_TEAM) == TEAM_ALLIANCE) + { + bool ended = false; + switch (piece->GetEntry()) + { + case NPC_KING_A: + _instance->SetData(DATA_CHESS_EVENT, NOT_STARTED); + _instance->SetData(DATA_CHESS_REINIT_PIECES, 0); + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_NOT_STARTED); + break; + case NPC_KING_H: + if (_instance->GetData(DATA_CHESS_EVENT) == IN_PROGRESS) + { + _instance->SetData(DATA_CHESS_EVENT, DONE); + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_PVE_FINISHED); + _instance->SetData(DATA_CHESS_REINIT_PIECES, 0); + Talk(TALK_EVENT_ENDED); + _instance->DoRespawnGameObject(_instance->GetGuidData(DATA_DUST_COVERED_CHEST), DAY); + ended = true; + _instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_GAME_IN_SESSION); + } + else if (_instance->GetData(DATA_CHESS_EVENT) == SPECIAL) + { + _instance->SetData(DATA_CHESS_EVENT, DONE); + _instance->SetData(DATA_CHESS_REINIT_PIECES, 0); + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_PVE_FINISHED); + _instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_GAME_IN_SESSION); + ended = true; + } + break; + default: + break; + } + + if (!ended) + { + uint8 talkIndex = TALK_PLAYER_LOOSE_PAWN; + if (piece->GetFaction() == CHESS_FACTION_HORDE) + { + talkIndex = TALK_MEDIVH_LOOSE_PAWN; + } + + switch (piece->GetEntry()) + { + case NPC_ROOK_A: + case NPC_ROOK_H: + talkIndex += 1; + break; + case NPC_KNIGHT_A: + case NPC_KNIGHT_H: + talkIndex += 2; + break; + case NPC_BISHOP_A: + case NPC_BISHOP_H: + talkIndex += 3; + break; + case NPC_QUEEN_A: + case NPC_QUEEN_H: + talkIndex += 4; + break; + case NPC_KING_H: + case NPC_KING_A: + talkIndex += 5; + break; + } + + Talk(talkIndex); + } + } + else + { + switch (piece->GetEntry()) + { + case NPC_KING_H: + case NPC_KING_A: + _instance->SetData(DATA_CHESS_EVENT, DONE); + _instance->SetData(DATA_CHESS_REINIT_PIECES, 0); + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_PVE_FINISHED); + _instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_GAME_IN_SESSION); + break; + } + + uint8 talkIndex = TALK_PLAYER_LOOSE_PAWN; + if (piece->GetFaction() == CHESS_FACTION_HORDE) + { + talkIndex = TALK_MEDIVH_LOOSE_PAWN; + } + + switch (piece->GetEntry()) + { + case NPC_ROOK_A: + case NPC_ROOK_H: + talkIndex += 1; + break; + case NPC_KNIGHT_A: + case NPC_KNIGHT_H: + talkIndex += 2; + break; + case NPC_BISHOP_A: + case NPC_BISHOP_H: + talkIndex += 3; + break; + case NPC_QUEEN_A: + case NPC_QUEEN_H: + talkIndex += 4; + break; + case NPC_KING_H: + case NPC_KING_A: + talkIndex += 5; + break; + } + + Talk(talkIndex); + } + } + + int8 HandlePieceRotate(Creature* piece, ObjectGuid const& triggerGUID) + { + bool foundOld = false; + bool foundNew = false; + int8 pieceRow = MAX_ROW; + int8 pieceCol = MAX_COL; + int8 targetRow = -1; + int8 targetCol = -1; + + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + BoardCell const& cell = _boards[row][col]; + if (!foundNew && cell.triggerGUID == triggerGUID) + { + targetRow = row; + targetCol = col; + foundNew = true; + } + + if (!foundOld && cell.pieceGUID == piece->GetGUID()) + { + pieceRow = row; + pieceCol = col; + foundOld = true; + } + + if (foundNew && foundOld) + { + break; + } + } + + if (foundNew && foundOld) + { + break; + } + } + + if (targetRow == -1 || targetCol == -1) + { + return -1; + } + + int8 deltaRow = targetRow - pieceRow; + int8 deltaCol = targetCol - pieceCol; + + if (!deltaRow && !deltaCol) + { + return -1; + } + + switch (deltaRow) + { + case -3: + case -2: + case -1: + { + switch (deltaCol) + { + case -3: + case -2: + case -1: + return ORI_S; + case 0: + return ORI_SE; + case 1: + case 2: + case 3: + return ORI_E; + default: + break; + } + break; + } + case 0: + { + switch (deltaCol) + { + case -3: + case -2: + case -1: + return ORI_SW; + case 1: + case 2: + case 3: + return ORI_NE; + default: + break; + } + break; + } + case 1: + case 2: + case 3: + { + switch (deltaCol) + { + case -3: + case -2: + case -1: + return ORI_W; + case 0: + return ORI_NW; + case 1: + case 2: + case 3: + return ORI_N; + default: + break; + } + break; + } + default: + break; + } + + return -1; + } + + int8 HandlePieceMove(Creature* piece, ObjectGuid const& triggerGUID, bool moveByAI) + { + bool foundProperCell = false; + bool foundOld = false; + bool foundNew = false; + int8 oldRow = MAX_ROW; + int8 oldCol = MAX_COL; + int8 newRow = -1; + int8 newCol = -1; + + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + BoardCell const& cell = _boards[row][col]; + if (!foundNew) + { + if (cell.triggerGUID == triggerGUID) + { + //is there already a piece on this cell ? + if (cell.pieceGUID) + { + return -1; + } + + newCol = col; + newRow = row; + foundProperCell = true; + foundNew = true; + } + } + + if (!foundOld) + { + if (cell.pieceGUID == piece->GetGUID()) + { + oldCol = col; + oldRow = row; + foundOld = true; + } + } + + if (foundNew && foundOld) + { + break; + } + } + + if (foundNew && foundOld) + { + break; + } + } + + if (newCol == -1 || newRow == -1) + { + return -1; + } + + if (!moveByAI && foundProperCell) + { + uint8 deltaRow = abs(oldRow - newRow); + uint8 deltaCol = abs(oldCol - newCol); + + switch (piece->GetEntry()) + { + case NPC_PAWN_H: + case NPC_PAWN_A: + case NPC_BISHOP_H: + case NPC_BISHOP_A: + case NPC_ROOK_H: + case NPC_ROOK_A: + case NPC_KING_H: + case NPC_KING_A: + if (deltaRow > 1 || deltaCol > 1) + { + foundProperCell = false; + } + break; + case NPC_QUEEN_H: + case NPC_QUEEN_A: + if (deltaRow > 3 || deltaCol > 3) + { + foundProperCell = false; + } + break; + case NPC_KNIGHT_H: + case NPC_KNIGHT_A: + if (deltaRow > 2 || deltaCol > 2) + { + foundProperCell = false; + } + break; + default: + break; + } + } + + if (foundProperCell || moveByAI) + { + int8 orientation = HandlePieceRotate(piece, triggerGUID); + if (orientation != -1) + { + _boards[newRow][newCol].triggerGUID = triggerGUID; + _boards[newRow][newCol].SetPiece(piece); + + if (oldRow != MAX_ROW && oldCol != MAX_COL) + { + _boards[oldRow][oldCol].Reset(); + } + } + + return orientation; + } + + return -1; + } + + void CastChangeFacing(Creature* piece, Creature* trigger) + { + piece->CastSpell(trigger, SPELL_CHANGE_FACING, true); + } + + bool HandlePieceMoveByAI(Creature* piece, KarazhanChessOrientationType orientation) + { + uint8 pieceRow = 0; + uint8 pieceCol = 0; + bool found = false; + + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + if (_boards[row][col].pieceGUID == piece->GetGUID()) + { + pieceRow = row; + pieceCol = col; + found = true; + break; + } + } + + if (found) + { + break; + } + } + + //! Change orientation at edges + if (orientation == ORI_SE && pieceRow == 0) + { + if (Creature* trigger = ObjectAccessor::GetCreature(*me, _boards[pieceRow + 1][pieceCol].triggerGUID)) + { + CastChangeFacing(piece, trigger); + } + + return true; + } + else if (orientation == ORI_NW && pieceRow == 7) + { + if (Creature* trigger = ObjectAccessor::GetCreature(*me, _boards[pieceRow - 1][pieceCol].triggerGUID)) + { + CastChangeFacing(piece, trigger); + } + + return true; + } + else if (orientation == ORI_SW && pieceCol == 0) + { + if (Creature* trigger = ObjectAccessor::GetCreature(*me, _boards[pieceRow][pieceCol + 1].triggerGUID)) + { + CastChangeFacing(piece, trigger); + } + + return true; + } + else if (orientation == ORI_NE && pieceCol == 7) + { + if (Creature* trigger = ObjectAccessor::GetCreature(*me, _boards[pieceRow][pieceCol - 1].triggerGUID)) + { + CastChangeFacing(piece, trigger); + } + + return true; + } + else if (urand(0, 1)) // 50% chance to check for nearby enemies + { + if (Creature* target = GetHostileTargetForChangeFacing(piece, orientation)) + { + CastChangeFacing(me, target); + return true; + } + } + + switch (orientation) + { + case ORI_W: + case ORI_N: + orientation = ORI_NW; + break; + case ORI_S: + case ORI_E: + orientation = ORI_SE; + break; + default: + break; + } + + switch (orientation) //! Here we shouldn't be facing the edges of the board, check in the 4 first if statements + { + case ORI_SE: + case ORI_NW: + { + int32 randomRow = (orientation == ORI_SE) ? pieceRow - 1 : pieceRow + 1; + int32 randomCol = pieceCol; + switch (urand(0, 2)) + { + case 0: + if ((me->GetEntry() == NPC_QUEEN_A || me->GetEntry() == NPC_QUEEN_H)) + { + randomCol -= irand(1, 2); + } + else + { + randomCol -= 1; + } + break; + case 1: + if ((me->GetEntry() == NPC_QUEEN_A || me->GetEntry() == NPC_QUEEN_H)) + { + randomCol += irand(1, 2); + } + else + { + randomCol += 1; + } + break; + case 2: + if ((me->GetEntry() == NPC_QUEEN_A || me->GetEntry() == NPC_QUEEN_H)) + { + randomRow += (orientation == ORI_SE) ? irand(-2, 0) : irand(0, 2); + } + else if ((me->GetEntry() == NPC_KNIGHT_A || me->GetEntry() == NPC_KNIGHT_H) && urand(0, 1)) + { + randomRow += (orientation == ORI_SE) ? -1 : 1; + } + break; + } + + randomRow = RoundToInterval(randomRow, 0, 7); + randomCol = RoundToInterval(randomCol, 0, 7); + + BoardCell const& cell = _boards[randomRow][randomCol]; + if (Creature* trigger = ObjectAccessor::GetCreature(*me, cell.triggerGUID)) + { + if (!cell.pieceGUID) + { + piece->CastSpell(trigger, SPELL_MOVE_GENERIC, false); + return true; + } + } + break; + } + case ORI_SW: + case ORI_NE: + { + int32 randomRow = pieceRow; + int32 randomCol = orientation == ORI_SW ? pieceCol - 1 : pieceCol + 1; + switch (urand(0, 2)) + { + case 0: + if ((me->GetEntry() == NPC_QUEEN_A || me->GetEntry() == NPC_QUEEN_H)) + { + randomRow -= irand(1, 2); + } + else + { + randomRow -= 1; + } + break; + case 1: + if ((me->GetEntry() == NPC_QUEEN_A || me->GetEntry() == NPC_QUEEN_H)) + { + randomRow += irand(1, 2); + } + else + { + randomRow += 1; + } + break; + case 2: + if ((me->GetEntry() == NPC_QUEEN_A || me->GetEntry() == NPC_QUEEN_H)) + { + randomCol += (orientation == ORI_SW) ? irand(-2, 0) : irand(0, 2); + } + else if ((me->GetEntry() == NPC_KNIGHT_A || me->GetEntry() == NPC_KNIGHT_H) && urand(0, 1)) + { + randomCol += (orientation == ORI_SW) ? -1 : 1; + } + break; + } + + randomRow = RoundToInterval(randomRow, 0, 7); + randomCol = RoundToInterval(randomCol, 0, 7); + + BoardCell const& cell = _boards[randomRow][randomCol]; + if (Creature* trigger = ObjectAccessor::GetCreature(*me, cell.triggerGUID)) + { + if (!cell.pieceGUID) + { + piece->CastSpell(trigger, SPELL_MOVE_GENERIC, false); + return true; + } + } + break; + } + default: + break; + } + + return false; + } + + void HandleCheat() + { + Talk(TALK_MEDIHV_CHEAT); + + switch (urand(0, 2)) + { + case 0: // Heal king + { + if (_instance->GetData(CHESS_EVENT_TEAM) == TEAM_ALLIANCE) + { + if (Creature* king = me->FindNearestCreature(NPC_KING_H, 80.0f, true)) + { + king->SetHealth(king->GetMaxHealth()); + } + } + else if (_instance->GetData(CHESS_EVENT_TEAM) == TEAM_HORDE) + { + if (Creature* king = me->FindNearestCreature(NPC_KING_A, 80.0f, true)) + { + king->SetHealth(king->GetMaxHealth()); + } + } + + break; + } + case 1: // Fire + { + std::list targetList; + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + BoardCell const& cell = _boards[row][col]; + if (!cell.pieceGUID || IsMedivhPiece(cell.pieceEntry)) + { + continue; + } + + if (Creature* trigger = ObjectAccessor::GetCreature(*me, cell.triggerGUID)) + { + targetList.push_back(trigger); + } + } + } + + if (targetList.size() > 3) + { + Acore::Containers::RandomResize(targetList, 3); + } + + for (Creature* target : targetList) + { + DoCast(target, SPELL_FURY_OF_MEDIVH_FIRE, true); + } + + break; + } + case 2: // Buff + { + std::list targetList; + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + BoardCell const& cell = _boards[row][col]; + if (!cell.pieceGUID || !IsMedivhPiece(cell.pieceEntry)) + { + continue; + } + + if (Creature* piece = ObjectAccessor::GetCreature(*me, cell.pieceGUID)) + { + targetList.push_back(piece); + } + } + } + + uint8 resizeMax = urand(1, 4); + if (targetList.size() > resizeMax) + { + Acore::Containers::RandomResize(targetList, resizeMax); + } + + for (Creature* target : targetList) + { + DoCast(target, SPELL_HAND_OF_MEDIVH, true); + } + + break; + } + } + + Talk(TALK_MEDIHV_CHEAT_EMOTE); + } + + Creature* GetPiece(Creature* sourcePiece, uint8 searchType, float distance, bool hostile, uint32 minHPDiff, bool checkFront) + { + if (!sourcePiece) + { + return nullptr; + } + + Creature* target = nullptr; + std::vector targets; + + for (uint8 row = 0; row < MAX_ROW; ++row) + { + for (uint8 col = 0; col < MAX_COL; ++col) + { + if (Creature* piece = ObjectAccessor::GetCreature(*me, _boards[row][col].pieceGUID)) + { + if (IsFriendly(piece, sourcePiece) == hostile) + { + continue; + } + + if (checkFront && !sourcePiece->HasInArc(float(M_PI) / 3.0f, piece)) + { + continue; + } + + if (minHPDiff) + { + if (piece->GetMaxHealth() - piece->GetHealth() <= minHPDiff) + { + continue; + } + + minHPDiff = piece->GetMaxHealth() - piece->GetHealth(); + } + + float dist = sourcePiece->GetExactDist2d(piece); + if (dist < distance) + { + if (searchType == CHESS_PIECE_SEARCH_TYPE_CLOSEST) + { + distance = dist; + target = piece; + } + else + { + targets.push_back(piece); + } + } + } + } + } + + if (!targets.empty()) + { + target = Acore::Containers::SelectRandomContainerElement(targets); + } + + return target; + } + + void UpdateAI(uint32 diff) override + { + uint32 chessPhase = _instance->GetData(DATA_CHESS_GAME_PHASE); + if (chessPhase != CHESS_PHASE_INPROGRESS_PVE && chessPhase != CHESS_PHASE_INPROGRESS_PVP) + return; + + if (chessPhase == CHESS_PHASE_INPROGRESS_PVE) + { + if (_cheatTimer <= diff) + { + HandleCheat(); + _cheatTimer = urand(45000, 100000); + } + else + { + _cheatTimer -= diff; + } + } + } + + void sGossipHello(Player* player) override + { + uint32 chessPhase = _instance->GetData(DATA_CHESS_GAME_PHASE); + switch (chessPhase) + { + case CHESS_PHASE_NOT_STARTED: + AddGossipItemFor(player, GOSSIP_ICON_CHAT, "We want to play a game against you!", GOSSIP_SENDER_MAIN, MEDIVH_GOSSIP_START_PVE); + break; + case CHESS_PHASE_INPROGRESS_PVE: + case CHESS_PHASE_INPROGRESS_PVP: + AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Restart", GOSSIP_SENDER_MAIN, MEDIVH_GOSSIP_RESTART); // We want to player another game against you + break; + case CHESS_PHASE_PVE_FINISHED: + AddGossipItemFor(player, GOSSIP_ICON_CHAT, "PvP", GOSSIP_SENDER_MAIN, MEDIVH_GOSSIP_START_PVP); // We'd like to fight each other + break; + } + + SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID()); + } + + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 gossipListId) override + { + uint32 chessPhase = _instance->GetData(DATA_CHESS_GAME_PHASE); + _instance->SetData(CHESS_EVENT_TEAM, chessPhase < CHESS_PHASE_PVE_FINISHED ? player->GetTeamId() : TEAM_NEUTRAL); + + CloseGossipMenuFor(player); + + uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId); + switch (action) + { + case MEDIVH_GOSSIP_START_PVE: + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_PVE_WARMUP); + SetupBoard(); + _instance->SetData(DATA_CHESS_EVENT, IN_PROGRESS); + Talk(TALK_EVENT_BEGIN); + break; + case MEDIVH_GOSSIP_RESTART: + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_FAILED); + _instance->SetData(DATA_CHESS_REINIT_PIECES, 0); + _deadCount.fill(0); + if (_instance->GetData(DATA_CHESS_EVENT) == IN_PROGRESS) + { + _instance->SetData(DATA_CHESS_EVENT, NOT_STARTED); + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_NOT_STARTED); + } + else if (_instance->GetData(DATA_CHESS_EVENT) == SPECIAL) + { + _instance->SetData(DATA_CHESS_EVENT, DONE); + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_PVE_FINISHED); + } + _instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_GAME_IN_SESSION); + break; + case MEDIVH_GOSSIP_START_PVP: + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_PVP_WARMUP); + SetupBoard(); + _instance->SetData(DATA_CHESS_EVENT, SPECIAL); + Talk(TALK_EVENT_BEGIN); + break; + default: + break; + } + } + +private: + InstanceScript* _instance; + SummonList _summons; + std::array, MAX_ROW> _boards; + std::array _deadCount; + uint32 _cheatTimer; +}; + +struct npc_chesspiece : public ScriptedAI +{ + npc_chesspiece(Creature* creature) : ScriptedAI(creature) + { + _instance = creature->GetInstanceScript(); + + _currentOrientation = GetDefaultOrientationForTeam(); + + _nextMoveTimer = urand(8 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); + + InitializeCombatSpellsByEntry(); + + switch (_instance->GetData(CHESS_EVENT_TEAM)) + { + case TEAM_ALLIANCE: + _teamControlledByRaid = me->GetFaction() == CHESS_FACTION_ALLIANCE; + break; + case TEAM_HORDE: + _teamControlledByRaid = me->GetFaction() == CHESS_FACTION_HORDE; + break; + case TEAM_NEUTRAL: + _teamControlledByRaid = true; + break; + } + } + + void Reset() override + { + me->ApplySpellImmune(0, IMMUNITY_ID, SPELL_GAME_IN_SESSION, true); + + me->SetSheath(SHEATH_STATE_MELEE); + me->SetReactState(REACT_PASSIVE); + me->SetWalk(true); + + DoCastSelf(SPELL_MELEE_ATTACK_TIMER, true); + + for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i) + { + me->SetResistance(SpellSchools(i), 0); + } + } + + void EnterEvadeMode(EvadeReason /*why*/) override + { + } + + void MovementInform(uint32 movementType, uint32 /*pointId*/) override + { + if (movementType != POINT_MOTION_TYPE) + { + return; + } + + if (!me->IsCharmed()) + { + me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); + + if (!_nextMoveTimer) + { + _nextMoveTimer = urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); + } + + if (Creature* medivh = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ECHO_OF_MEDIVH))) + { + if (Creature* target = CAST_AI(npc_echo_of_medivh, medivh->AI())->GetHostileTargetForChangeFacing(me, _currentOrientation)) + { + CastChangeFacing(me, target); + } + } + } + } + + void AttackStart(Unit* /*victim*/) override + { + } + + KarazhanChessOrientationType GetDefaultOrientationForTeam() + { + switch (me->GetFaction()) + { + case CHESS_FACTION_ALLIANCE: + return ORI_NW; + case CHESS_FACTION_HORDE: + return ORI_SE; + } + + return ORI_SE; + } + + void CastChangeFacing(Creature* piece, Creature* trigger) + { + piece->CastSpell(trigger, SPELL_CHANGE_FACING, true); + } + + void OnCharmed(bool apply) override + { + Unit* charmer = me->GetCharmer(); + if (apply) + { + ASSERT(charmer); + _charmerGUID = charmer->GetGUID(); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); + me->SetWalk(true); + charmer->RemoveAurasDueToSpell(SPELL_GAME_IN_SESSION); + + // Build new action bar + if (Player* playerCharmer = charmer->ToPlayer()) + { + WorldPacket data(SMSG_PET_SPELLS, 1 + 8 + 2 + 4 + 1 + 1 + 2 + MAX_SPELL_CONTROL_BAR * 4 + 1 + 1); + data << me->GetGUID(); + data << uint16(0); + data << uint32(0); + data << uint8(me->GetReactState()); + data << uint8(0); + data << uint16(0); + + for (uint32 i = 0; i < MAX_CREATURE_SPELLS; ++i) + { + uint32 spellId = me->m_spells[i]; + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); + if (!spellInfo) + { + data << uint16(0) << uint8(0) << uint8(i + 8); + continue; + } + + data << uint32(MAKE_UNIT_ACTION_BUTTON(spellId, ACT_ENABLED)); + } + + for (uint32 i = MAX_CREATURE_SPELLS; i < MAX_SPELL_CONTROL_BAR; ++i) + data << uint32(0); + + data << uint8(0); + data << uint8(0); + + playerCharmer->SendDirectMessage(&data); + } + } + else + { + me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); + + if (Unit* charmer = ObjectAccessor::GetUnit(*me, _charmerGUID)) + { + charmer->RemoveAurasDueToSpell(SPELL_CONTROL_PIECE); + charmer->CastSpell(charmer, SPELL_GAME_IN_SESSION, true); + charmer->CastSpell(charmer, SPELL_RECENTLY_INGAME, true); + charmer->NearTeleportTo(-11106.92f, -1843.32f, 229.626f, 4.2331f); + } + + _charmerGUID.Clear(); + } + + if (apply) + { + if (_instance->GetData(CHESS_EVENT_TEAM) == TEAM_ALLIANCE) + { + me->SetFaction(CHESS_FACTION_ALLIANCE); + } + else if (_instance->GetData(CHESS_EVENT_TEAM) == TEAM_HORDE) + { + me->SetFaction(CHESS_FACTION_HORDE); + } + else if (uint32 oldFaction = me->GetOldFactionId()) + { + me->SetFaction(oldFaction); + } + else if (FactionTemplateEntry const* factionTemplateEntry = me->GetFactionTemplateEntry()) + { + me->SetFaction(factionTemplateEntry->faction); + } + else + { + me->SetFaction(CHESS_FACTION_BOTH); + } + } + else + { + switch (me->GetEntry()) + { + case NPC_PAWN_A: + case NPC_KING_A: + case NPC_KNIGHT_A: + case NPC_QUEEN_A: + case NPC_BISHOP_A: + case NPC_ROOK_A: + me->SetFaction(CHESS_FACTION_ALLIANCE); + break; + case NPC_KING_H: + case NPC_ROOK_H: + case NPC_BISHOP_H: + case NPC_QUEEN_H: + case NPC_KNIGHT_H: + case NPC_PAWN_H: + me->SetFaction(CHESS_FACTION_HORDE); + break; + default: + break; + } + } + } + + void DoAction(int32 param) override + { + switch (param) + { + case ACTION_CHESS_PIECE_RESET_ORIENTATION: + _currentOrientation = GetDefaultOrientationForTeam(); + _nextMoveTimer = urand(8 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); + break; + default: + break; + } + } + + void JustDied(Unit* /*killer*/) override + { + if (Creature* medivh = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ECHO_OF_MEDIVH))) + { + CAST_AI(npc_echo_of_medivh, medivh->AI())->HandlePieceJustDied(me); + } + + me->RemoveCharmedBy(me->GetCharmer()); + } + + Creature* GetEnemyPiece(float maxDistance, uint8 searchType = CHESS_PIECE_SEARCH_TYPE_CLOSEST, bool checkFront = true) + { + if (Creature* medivh = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ECHO_OF_MEDIVH))) + { + return CAST_AI(npc_echo_of_medivh, medivh->AI())->GetPiece(me, searchType, maxDistance, true, 0, checkFront); + } + + return nullptr; + } + + Creature* GetLowestHpFriendlyPiece(float maxDistance, uint32 minHPDiff) + { + if (Creature* medivh = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ECHO_OF_MEDIVH))) + { + return CAST_AI(npc_echo_of_medivh, medivh->AI())->GetPiece(me, CHESS_PIECE_SEARCH_TYPE_RANDOM, maxDistance, false, minHPDiff, false); + } + + return nullptr; + } + + void UpdateAI(uint32 diff) override + { + if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE) || me->IsNonMeleeSpellCast(false)) + { + return; + } + + uint32 chessPhase = _instance->GetData(DATA_CHESS_GAME_PHASE); + if (chessPhase != CHESS_PHASE_INPROGRESS_PVE && chessPhase != CHESS_PHASE_INPROGRESS_PVP) + { + return; + } + + if (!me->IsCharmed()) + { + switch (_instance->GetData(CHESS_EVENT_TEAM)) + { + case TEAM_ALLIANCE: + _teamControlledByRaid = me->GetFaction() == CHESS_FACTION_ALLIANCE; + break; + case TEAM_HORDE: + _teamControlledByRaid = me->GetFaction() == CHESS_FACTION_HORDE; + break; + case TEAM_NEUTRAL: + _teamControlledByRaid = false; + break; + } + + if (!_teamControlledByRaid) + { + if (_nextMoveTimer) + { + if (_nextMoveTimer <= diff) + { + if (Creature* medivh = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ECHO_OF_MEDIVH))) + { + if (CAST_AI(npc_echo_of_medivh, medivh->AI())->HandlePieceMoveByAI(me, _currentOrientation)) + { + _nextMoveTimer = 0; + } + else + { + _nextMoveTimer = 1 * IN_MILLISECONDS; //! Re-check after a second + } + } + } + else + { + _nextMoveTimer -= diff; + } + } + } + + if (_combatSpellTimer) + { + if (_combatSpellTimer <= diff) + { + _combatSpellTimer = _combatSpellTimerBase + (_teamControlledByRaid ? urand(6 * IN_MILLISECONDS, 12 * IN_MILLISECONDS) : urand(3 * IN_MILLISECONDS, 6 * IN_MILLISECONDS)); + + switch (me->GetEntry()) + { + case NPC_PAWN_A: + DoCastSelf(SPELL_PAWN_A_1); //! Shield Block + break; + case NPC_KING_A: + DoCastSelf(SPELL_KING_A_1); //! Heroism + break; + case NPC_KNIGHT_A: + DoCastAOE(SPELL_KNIGHT_A_1); //! Smash + break; + case NPC_QUEEN_A: + if (Creature* victim = GetEnemyPiece(20.0f)) + { + DoCast(victim, SPELL_QUEEN_A_1); //! Elemental Blast + } + break; + case NPC_BISHOP_A: + DoCastAOE(SPELL_BISHOP_A_1); //! Holy Lance + break; + case NPC_ROOK_A: + DoCastAOE(SPELL_ROOK_A_1); //! Geyser + break; + case NPC_KING_H: + DoCastAOE(SPELL_KING_H_1); //! Bloodlust + break; + case NPC_ROOK_H: + DoCastAOE(SPELL_ROOK_H_1); //! Hellfire + break; + case NPC_BISHOP_H: + DoCastAOE(SPELL_BISHOP_H_1); //! Shadow Spear + break; + case NPC_QUEEN_H: + if (Creature* victim = GetEnemyPiece(20.0f)) + { + DoCast(victim, SPELL_QUEEN_H_1); //! Fireball + } + break; + case NPC_KNIGHT_H: + DoCastAOE(SPELL_KNIGHT_H_1); //! Howl + break; + case NPC_PAWN_H: + DoCastSelf(SPELL_PAWN_H_1); //! Weapon Deflection + break; + default: + break; + } + } + else + { + _combatSpellTimer -= diff; + } + } + + if (_combatSpellTimer2) + { + if (_combatSpellTimer2 <= diff) + { + _combatSpellTimer2 = _combatSpellTimerBase2 + (_teamControlledByRaid ? urand(6 * IN_MILLISECONDS, 12 * IN_MILLISECONDS) : urand(3 * IN_MILLISECONDS, 6 * IN_MILLISECONDS)); + + switch (me->GetEntry()) + { + case NPC_PAWN_A: + DoCastAOE(SPELL_PAWN_A_2); //! Heroic Blow + break; + case NPC_KING_A: + DoCastAOE(SPELL_KING_A_2); //! Sweep + break; + case NPC_KNIGHT_A: + DoCastAOE(SPELL_KNIGHT_A_2); //! Stomp + break; + case NPC_QUEEN_A: + if (Creature* victim = GetEnemyPiece(25.0f, CHESS_PIECE_SEARCH_TYPE_RANDOM, false)) + { + DoCast(victim, SPELL_QUEEN_A_2); //! Rain of Fire + } + break; + case NPC_BISHOP_A: + if (Creature* target = GetLowestHpFriendlyPiece(25.0f, 5000)) + { + DoCast(target, SPELL_BISHOP_A_2); + } + break; + case NPC_ROOK_A: + DoCast(SPELL_ROOK_A_2); //! Water Shield + break; + case NPC_KING_H: + DoCastAOE(SPELL_KING_H_2); //! Cleave + break; + case NPC_ROOK_H: + DoCast(SPELL_ROOK_H_2); //! Fire Shield + break; + case NPC_QUEEN_H: + if (Creature* victim = GetEnemyPiece(25.0f, CHESS_PIECE_SEARCH_TYPE_RANDOM, false)) + { + DoCast(victim, SPELL_QUEEN_H_2); //! Poison Cloud + } + break; + case NPC_BISHOP_H: + if (Unit* target = GetLowestHpFriendlyPiece(25.0f, 5000)) + { + DoCast(target, SPELL_BISHOP_H_2); + } + break; + case NPC_KNIGHT_H: + DoCastAOE(SPELL_KNIGHT_H_2); //! Bite + break; + case NPC_PAWN_H: + DoCastAOE(SPELL_PAWN_H_2); //! Vicious Strike + break; + default: + break; + } + } + else + { + _combatSpellTimer2 -= diff; + } + } + } + } + + void InitializeCombatSpellsByEntry() + { + switch (me->GetEntry()) + { + case NPC_PAWN_A: + case NPC_PAWN_H: + _combatSpellTimer = urand(7 * IN_MILLISECONDS, 27 * IN_MILLISECONDS); + _combatSpellTimer2 = urand(3 * IN_MILLISECONDS, 5 * IN_MILLISECONDS); + break; + case NPC_KING_A: + case NPC_KING_H: + _combatSpellTimer = urand(13 * IN_MILLISECONDS, 15 * IN_MILLISECONDS); + _combatSpellTimer2 = urand(3 * IN_MILLISECONDS, 5 * IN_MILLISECONDS); + break; + case NPC_BISHOP_A: + case NPC_BISHOP_H: + _combatSpellTimer = urand(7 * IN_MILLISECONDS, 15 * IN_MILLISECONDS); + _combatSpellTimer2 = urand(15 * IN_MILLISECONDS, 90 * IN_MILLISECONDS); + break; + case NPC_ROOK_A: + case NPC_ROOK_H: + case NPC_KNIGHT_A: + case NPC_KNIGHT_H: + case NPC_QUEEN_A: + case NPC_QUEEN_H: + _combatSpellTimer = urand(7 * IN_MILLISECONDS, 15 * IN_MILLISECONDS); + _combatSpellTimer2 = urand(7 * IN_MILLISECONDS, 27 * IN_MILLISECONDS); + break; + + default: + return; + } + + _combatSpellTimerBase = _combatSpellTimer; + _combatSpellTimerBase2 = _combatSpellTimer2; + } + + void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override + { + if (spellInfo->Id == SPELL_MELEE_ATTACK_TIMER_TRIGGER) + { + if (Creature* victim = GetEnemyPiece(10.0f)) + { + DoCast(victim, SPELL_MELEE_DAMAGE, true); + } + + return; + } + + if (target->GetEntry() != NPC_CHESS_MOVE_TRIGGER || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + { + return; + } + + switch (spellInfo->Id) + { + case SPELL_MOVE_1: + case SPELL_MOVE_2: + case SPELL_MOVE_3: + case SPELL_MOVE_4: + case SPELL_MOVE_5: + case SPELL_MOVE_6: + case SPELL_MOVE_GENERIC: + if (Creature* medivh = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ECHO_OF_MEDIVH))) + { + int8 result = CAST_AI(npc_echo_of_medivh, medivh->AI())->HandlePieceMove(me, target->GetGUID(), spellInfo->Id == SPELL_MOVE_GENERIC); + if (result != -1) + { + DoCast(SPELL_MOVE_COOLDOWN); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); + me->GetMotionMaster()->MovePoint(0, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ()); + target->CastSpell(target, SPELL_MOVE_MARKER, false); + _currentOrientation = KarazhanChessOrientationType(result); + } + } + break; + case SPELL_CHANGE_FACING: + if (Creature* medivh = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ECHO_OF_MEDIVH))) + { + int8 result = CAST_AI(npc_echo_of_medivh, medivh->AI())->HandlePieceRotate(me, target->GetGUID()); + if (result != -1) + { + DoCast(SPELL_MOVE_COOLDOWN); + _currentOrientation = KarazhanChessOrientationType(result); + me->SetFacingTo(orientations[_currentOrientation]); + if (!_nextMoveTimer) + { + _nextMoveTimer = urand(10 * IN_MILLISECONDS, 20 * IN_MILLISECONDS); + } + } + } + break; + default: + break; + } + } + + void sGossipHello(Player* player) override + { + uint32 chessPhase = _instance->GetData(DATA_CHESS_GAME_PHASE); + if (player->GetTeamId() == TEAM_ALLIANCE && me->GetFaction() != CHESS_FACTION_ALLIANCE && chessPhase < CHESS_PHASE_PVE_FINISHED) + { + SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID()); + return; + } + + if (player->GetTeamId() == TEAM_HORDE && me->GetFaction() != CHESS_FACTION_HORDE && chessPhase < CHESS_PHASE_PVE_FINISHED) + { + SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID()); + return; + } + + bool ok = true; + switch (me->GetEntry()) + { + case NPC_PAWN_H: + case NPC_PAWN_A: + case NPC_KNIGHT_H: + case NPC_KNIGHT_A: + case NPC_QUEEN_H: + case NPC_QUEEN_A: + case NPC_BISHOP_H: + case NPC_BISHOP_A: + case NPC_ROOK_H: + case NPC_ROOK_A: + if (chessPhase != CHESS_PHASE_INPROGRESS_PVE && chessPhase != CHESS_PHASE_INPROGRESS_PVP) + { + ok = false; + } + break; + case NPC_KING_H: + case NPC_KING_A: + if (chessPhase != CHESS_PHASE_INPROGRESS_PVE && chessPhase != CHESS_PHASE_INPROGRESS_PVP && chessPhase != CHESS_PHASE_PVE_WARMUP && chessPhase != CHESS_PHASE_PVP_WARMUP) + { + ok = false; + } + break; + default: + ok = false; + break; + } + + if (ok && !player->HasAura(SPELL_RECENTLY_INGAME)) + { + AddGossipItemFor(player, GOSSIP_ICON_CHAT, "Control " + me->GetName(), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + } + + SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID()); + } + + void sGossipSelect(Player* player, uint32 /*sender*/, uint32 gossipListId) override + { + if (me->IsCharmed() && me->GetCharmerGUID() == player->GetGUID()) + { + me->RemoveCharmedBy(me->GetCharmer()); + player->StopCastingCharm(); + } + + uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId); + if (action == GOSSIP_ACTION_INFO_DEF + 1) + { + player->CastSpell(me, SPELL_CONTROL_PIECE, false); + + switch (me->GetEntry()) + { + case NPC_KING_H: + case NPC_KING_A: + { + uint32 chessPhase = _instance->GetData(DATA_CHESS_GAME_PHASE); + if (chessPhase == CHESS_PHASE_PVE_WARMUP) + { + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_INPROGRESS_PVE); + } + else if (chessPhase == CHESS_PHASE_PVP_WARMUP) + { + _instance->SetData(DATA_CHESS_GAME_PHASE, CHESS_PHASE_INPROGRESS_PVP); + } + break; + } + default: + break; + } + } + + CloseGossipMenuFor(player); + } + +private: + InstanceScript* _instance; + + ObjectGuid _charmerGUID; + + uint32 _nextMoveTimer; + uint32 _combatSpellTimer; + uint32 _combatSpellTimerBase; + uint32 _combatSpellTimer2; + uint32 _combatSpellTimerBase2; + + KarazhanChessOrientationType _currentOrientation; + + bool _teamControlledByRaid; +}; + +struct npc_chess_move_trigger : public ScriptedAI +{ + npc_chess_move_trigger(Creature* creature) : ScriptedAI(creature) + { + me->SetReactState(REACT_PASSIVE); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + } + + void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override + { + damage = 0; + } +}; + +class spell_control_piece : public AuraScript +{ + PrepareAuraScript(spell_control_piece) + + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (Player* player = GetTarget()->ToPlayer()) + { + player->StopCastingBindSight(); + } + } + + void Register() override + { + OnEffectRemove += AuraEffectRemoveFn(spell_control_piece::HandleEffectRemove, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); + } +}; + +void AddSC_boss_chess_event() +{ + RegisterKarazhanCreatureAI(npc_echo_of_medivh); + RegisterKarazhanCreatureAI(npc_chesspiece); + RegisterKarazhanCreatureAI(npc_chess_move_trigger); + + RegisterSpellScript(spell_control_piece); +} diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index ddcb44139..f5aa16bf1 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -60,6 +60,10 @@ public: OperaEvent = urand(EVENT_OZ, EVENT_RAJ); OzDeathCount = 0; OptionalBossCount = 0; + + _chessTeam = TEAM_NEUTRAL; + _chessGamePhase = CHESS_PHASE_NOT_STARTED; + _chessEvent = NOT_STARTED; } void OnCreatureCreate(Creature* creature) override @@ -88,6 +92,27 @@ public: creature->Respawn(true); } break; + case NPC_PAWN_H: + case NPC_KNIGHT_H: + case NPC_QUEEN_H: + case NPC_BISHOP_H: + case NPC_ROOK_H: + case NPC_KING_H: + case NPC_PAWN_A: + case NPC_KNIGHT_A: + case NPC_QUEEN_A: + case NPC_BISHOP_A: + case NPC_ROOK_A: + case NPC_KING_A: + _chessPiecesGUID.insert(creature->GetGUID()); + creature->SetHealth(creature->GetMaxHealth()); + break; + case NPC_CHESS_EVENT_MEDIVH_CHEAT_FIRES: + _medivhCheatFiresGUID.insert(creature->GetGUID()); + break; + case NPC_ECHO_OF_MEDIVH: + _echoOfMedivhGUID = creature->GetGUID(); + break; default: break; } @@ -160,6 +185,82 @@ public: break; } + case DATA_CHESS_EVENT: + { + _chessEvent = data; + + switch (data) + { + case IN_PROGRESS: + case SPECIAL: + { + DoCastSpellOnPlayers(SPELL_GAME_IN_SESSION); + for (ObjectGuid const& chessPieceGUID : _chessPiecesGUID) + { + if (Creature* piece = instance->GetCreature(chessPieceGUID)) + { + if (_chessTeam == TEAM_ALLIANCE) + { + if (piece->GetFaction() == CHESS_FACTION_ALLIANCE) + { + piece->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); + } + } + else if (_chessTeam == TEAM_HORDE) + { + if (piece->GetFaction() == CHESS_FACTION_HORDE) + { + piece->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); + } + } + else + { + piece->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); + } + } + } + break; + } + default: + DoRemoveAurasDueToSpellOnPlayers(SPELL_GAME_IN_SESSION); + break; + } + break; + } + case CHESS_EVENT_TEAM: + _chessTeam = data; + break; + case DATA_CHESS_REINIT_PIECES: + for (ObjectGuid const& chessPieceGUID : _chessPiecesGUID) + { + if (Creature* piece = instance->GetCreature(chessPieceGUID)) + { + piece->RemoveAllAuras(); + piece->setDeathState(JUST_RESPAWNED); + piece->SetHealth(piece->GetMaxHealth()); + float x, y, z, o; + piece->GetHomePosition(x, y, z, o); + piece->NearTeleportTo(x, y, z, o); + piece->AI()->DoAction(ACTION_CHESS_PIECE_RESET_ORIENTATION); + piece->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + piece->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); + piece->AI()->Reset(); + } + } + + for (ObjectGuid const& medivhCheatFireGUID : _medivhCheatFiresGUID) + { + if (Creature* fire = instance->GetCreature(medivhCheatFireGUID)) + { + fire->DespawnOrUnsummon(); + } + } + + _medivhCheatFiresGUID.clear(); + break; + case DATA_CHESS_GAME_PHASE: + _chessGamePhase = data; + break; default: break; } @@ -189,10 +290,6 @@ public: DoRespawnCreature(_barnesGUID, true); } break; - case DATA_CHESS: - if (state == DONE) - DoRespawnGameObject(DustCoveredChest, DAY); - break; default: break; } @@ -291,6 +388,12 @@ public: return OperaEvent; case DATA_OPERA_OZ_DEATHCOUNT: return OzDeathCount; + case CHESS_EVENT_TEAM: + return _chessTeam; + case DATA_CHESS_GAME_PHASE: + return _chessGamePhase; + case DATA_CHESS_EVENT: + return _chessEvent; } return 0; @@ -332,6 +435,10 @@ public: return ImageGUID; case DATA_NIGHTBANE: return m_uiNightBaneGUID; + case DATA_ECHO_OF_MEDIVH: + return _echoOfMedivhGUID; + case DATA_DUST_COVERED_CHEST: + return DustCoveredChest; } return ObjectGuid::Empty; @@ -341,8 +448,10 @@ public: uint32 OperaEvent; uint32 OzDeathCount; uint32 OptionalBossCount; - //uint32 m_auiEncounter[MAX_ENCOUNTERS]; - //uint32 m_uiTeam; + uint32 _chessTeam; + uint32 _chessGamePhase; + uint32 _chessEvent; + ObjectGuid m_uiCurtainGUID; ObjectGuid m_uiStageDoorLeftGUID; ObjectGuid m_uiStageDoorRightGUID; @@ -350,20 +459,22 @@ public: ObjectGuid m_uiTerestianGUID; ObjectGuid m_uiMoroesGUID; ObjectGuid m_uiNightBaneGUID; - //ObjectGuid EchoOfMedivhGUID; ObjectGuid m_uiLibraryDoor; // Door at Shade of Aran ObjectGuid m_uiMassiveDoor; // Door at Netherspite ObjectGuid m_uiSideEntranceDoor; // Side Entrance ObjectGuid m_uiGamesmansDoor; // Door before Chess ObjectGuid m_uiGamesmansExitDoor; // Door after Chess ObjectGuid m_uiNetherspaceDoor; // Door at Malchezaar - //ObjectGuid m_uiServantsAccessDoor; // Door to Brocken Stair ObjectGuid MastersTerraceDoor[2]; ObjectGuid ImageGUID; ObjectGuid DustCoveredChest; ObjectGuid m_uiRelayGUID; ObjectGuid _barnesGUID; + ObjectGuid _echoOfMedivhGUID; + GuidVector _operaDecorations[EVENT_RAJ]; + GuidSet _chessPiecesGUID; + GuidSet _medivhCheatFiresGUID; }; }; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h index 3da5b5775..dd71b2b8b 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.h @@ -36,7 +36,7 @@ enum KZDataTypes DATA_ARAN = 6, DATA_TERESTIAN = 7, DATA_NETHERSPITE = 8, - DATA_CHESS = 9, + DATA_CHESS_EVENT = 9, DATA_MALCHEZZAR = 10, DATA_NIGHTBANE = 11, DATA_SERVANT_QUARTERS = 12, @@ -60,40 +60,63 @@ enum KZDataTypes DATA_GO_SIDE_ENTRANCE_DOOR = 29, DATA_PRINCE = 30, DATA_SPAWN_OPERA_DECORATIONS = 31, - DATA_MIDNIGHT = 32 + DATA_MIDNIGHT = 32, + + // Chess Event + CHESS_EVENT_TEAM = 33, + DATA_CHESS_REINIT_PIECES = 34, + DATA_CHESS_GAME_PHASE = 35, + DATA_ECHO_OF_MEDIVH = 36, + DATA_DUST_COVERED_CHEST = 37 }; enum KZOperaEvents { - EVENT_OZ = 1, - EVENT_HOOD = 2, - EVENT_RAJ = 3 + EVENT_OZ = 1, + EVENT_HOOD = 2, + EVENT_RAJ = 3 }; -enum KZMiscCreatures +enum KZCreatures { - NPC_HYAKISS_THE_LURKER = 16179, - NPC_ROKAD_THE_RAVAGER = 16181, - NPC_SHADIKITH_THE_GLIDER = 16180, - NPC_TERESTIAN_ILLHOOF = 15688, - NPC_MOROES = 15687, - NPC_ATTUMEN_THE_HUNTSMAN = 15550, - NPC_ATTUMEN_THE_HUNTSMAN_MOUNTED = 16152, - NPC_MIDNIGHT = 16151, - NPC_NIGHTBANE = 17225, + NPC_HYAKISS_THE_LURKER = 16179, + NPC_ROKAD_THE_RAVAGER = 16181, + NPC_SHADIKITH_THE_GLIDER = 16180, + NPC_TERESTIAN_ILLHOOF = 15688, + NPC_MOROES = 15687, + NPC_ATTUMEN_THE_HUNTSMAN = 15550, + NPC_ATTUMEN_THE_HUNTSMAN_MOUNTED = 16152, + NPC_MIDNIGHT = 16151, + NPC_NIGHTBANE = 17225, // Trash - NPC_COLDMIST_WIDOW = 16171, - NPC_COLDMIST_STALKER = 16170, - NPC_SHADOWBAT = 16173, - NPC_VAMPIRIC_SHADOWBAT = 16175, - NPC_GREATER_SHADOWBAT = 16174, - NPC_PHASE_HOUND = 16178, - NPC_DREADBEAST = 16177, - NPC_SHADOWBEAST = 16176, - NPC_KILREK = 17229, - NPC_RELAY = 17645, - NPC_BARNES = 16812 + NPC_COLDMIST_WIDOW = 16171, + NPC_COLDMIST_STALKER = 16170, + NPC_SHADOWBAT = 16173, + NPC_VAMPIRIC_SHADOWBAT = 16175, + NPC_GREATER_SHADOWBAT = 16174, + NPC_PHASE_HOUND = 16178, + NPC_DREADBEAST = 16177, + NPC_SHADOWBEAST = 16176, + NPC_KILREK = 17229, + NPC_RELAY = 17645, + NPC_BARNES = 16812, + + // Chess Event + NPC_ECHO_OF_MEDIVH = 16816, + NPC_PAWN_H = 17469, + NPC_PAWN_A = 17211, + NPC_KNIGHT_H = 21748, + NPC_KNIGHT_A = 21664, + NPC_QUEEN_H = 21750, + NPC_QUEEN_A = 21683, + NPC_BISHOP_H = 21747, + NPC_BISHOP_A = 21682, + NPC_ROOK_H = 21726, + NPC_ROOK_A = 21160, + NPC_KING_H = 21752, + NPC_KING_A = 21684, + NPC_CHESS_EVENT_MEDIVH_CHEAT_FIRES = 22521 }; enum KZGameObjectIds @@ -124,14 +147,39 @@ enum KZGameObjectIds enum KZMisc { - OPTIONAL_BOSS_REQUIRED_DEATH_COUNT = 50 + OPTIONAL_BOSS_REQUIRED_DEATH_COUNT = 50, + + ACTION_CHESS_PIECE_RESET_ORIENTATION = 1 }; enum KarazhanSpells { - SPELL_RATTLED = 32437, - SPELL_OVERLOAD = 29766, - SPELL_BLINK = 29884 + SPELL_RATTLED = 32437, + SPELL_OVERLOAD = 29766, + SPELL_BLINK = 29884, + + // Chess Event + SPELL_GAME_IN_SESSION = 39331, + SPELL_HAND_OF_MEDIVH = 39339, // 1st cheat: AOE spell burn cell under enemy chesspieces. + SPELL_FURY_OF_MEDIVH = 39383 // 2nd cheat: Berserk own chesspieces. +}; + +enum KarazhanChessGamePhase +{ + CHESS_PHASE_NOT_STARTED = 0, + CHESS_PHASE_PVE_WARMUP = 1, // Medivh has been spoken too but king isn't controlled yet + CHESS_PHASE_INPROGRESS_PVE = 2, + CHESS_PHASE_FAILED = 3, + CHESS_PHASE_PVE_FINISHED = 4, + CHESS_PHASE_PVP_WARMUP = 5, + CHESS_PHASE_INPROGRESS_PVP = 6 // Get back to PVE_FINISHED after that +}; + +enum KarazhanChessGameFactions +{ + CHESS_FACTION_HORDE = 1689, + CHESS_FACTION_ALLIANCE = 1690, + CHESS_FACTION_BOTH = 536 }; template diff --git a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp index 8bd3f42b9..f844d0061 100644 --- a/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp +++ b/src/server/scripts/EasternKingdoms/eastern_kingdoms_script_loader.cpp @@ -68,6 +68,7 @@ void AddSC_instance_karazhan(); //Karazhan void AddSC_boss_servant_quarters(); void AddSC_boss_attumen(); void AddSC_boss_curator(); +void AddSC_boss_chess_event(); void AddSC_boss_maiden_of_virtue(); void AddSC_boss_shade_of_aran(); void AddSC_boss_malchezaar(); @@ -220,6 +221,7 @@ void AddEasternKingdomsScripts() AddSC_boss_servant_quarters(); AddSC_boss_attumen(); AddSC_boss_curator(); + AddSC_boss_chess_event(); AddSC_boss_maiden_of_virtue(); AddSC_boss_shade_of_aran(); AddSC_boss_malchezaar(); From 725609d06f4c1c0bc162d0831d72e7075011cdf6 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Wed, 15 Mar 2023 03:10:22 +0000 Subject: [PATCH 143/159] chore(DB): import pending files Referenced commit(s): b21f98d6390c41240dc4efcb7244982bc89c6536 --- .../rev_1674333933272138700.sql => db_world/2023_03_15_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1674333933272138700.sql => db_world/2023_03_15_00.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1674333933272138700.sql b/data/sql/updates/db_world/2023_03_15_00.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1674333933272138700.sql rename to data/sql/updates/db_world/2023_03_15_00.sql index 72f2d5f52..d7623601a 100644 --- a/data/sql/updates/pending_db_world/rev_1674333933272138700.sql +++ b/data/sql/updates/db_world/2023_03_15_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_14_05 -> 2023_03_15_00 -- UPDATE `creature_template` SET `ScriptName` = "npc_chesspiece", `flags_extra`=`flags_extra`|0x01000000 WHERE `entry` IN (17469,17211,21748,21664,21750,21683,21747,21682,21726,21160,21752,21684); UPDATE `creature_template` SET `ScriptName` = "npc_echo_of_medivh" WHERE `entry`=16816; From f123f455b72802e5824b56662e9a1ad5f9c9b959 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 15 Mar 2023 10:25:55 -0300 Subject: [PATCH 144/159] fix(DB/SAI): Implement You, Robot failure event and properly award quest credit on success (#15324) --- .../rev_1677808197727073900.sql | 206 ++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1677808197727073900.sql diff --git a/data/sql/updates/pending_db_world/rev_1677808197727073900.sql b/data/sql/updates/pending_db_world/rev_1677808197727073900.sql new file mode 100644 index 000000000..ed91f38a2 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1677808197727073900.sql @@ -0,0 +1,206 @@ +-- +UPDATE `creature_template_addon` SET `bytes2` = 1, `visibilityDistanceType` = 5 WHERE (`entry` = 19851); +UPDATE `creature_template` SET `unit_flags` = 32768, `flags_extra` = `flags_extra`|2097152 WHERE (`entry` = 19851); + +DELETE FROM `creature` WHERE `id1`=19851; -- Delete extra Negatron +UPDATE `creature` SET `spawntimesecs`=120 WHERE `id1` IN (19737, 19849); + +DELETE FROM `creature_summon_groups` WHERE `summonerId`=19851 AND `entry`=19541; +INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`, `Comment`) VALUES +(19851, 0, 0, 19541, 3035.4849, 3630.7654, 144.4357, 1.488142371177673339, 4, 60000, 'Netherstorm Agent - You, Robot - Negatron Failure Event'), +(19851, 0, 0, 19541, 3029.642, 3638.9456, 143.87413, 1.169370532035827636, 4, 60000, 'Netherstorm Agent - You, Robot - Negatron Failure Event'); + +DELETE FROM `waypoints` WHERE `entry` IN (1985100, 1985101, 1973700, 1973701, 1973702, 1973703) AND `point_comment` IN ('Negatron', 'Engineering Crewmember'); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `point_comment`) VALUES +(1985100,1,3137.2078,3268.273,110.69139,NULL,'Negatron'), +(1985100,2,3128.09,3294.4512,107.87908,NULL,'Negatron'), +(1985100,3,3121.0325,3314.7815,110.84304,NULL,'Negatron'), -- Doctor Vomisa face Negatron +(1985100,4,3113.2158,3336.4111,107.649345,NULL,'Negatron'), +(1985100,5,3104.8281,3361.3098,104.649345,NULL,'Negatron'), +(1985100,6,3097.5208,3381.5989,105.865395,NULL,'Negatron'), +(1985101,1,3053.5566,3421.556,111.00708,NULL,'Negatron'), +(1985101,2,3051.7932,3455.1265,118.63066,NULL,'Negatron'), +(1985101,3,3034.655,3492.1448,134.73538,NULL,'Negatron'), +(1985101,4,3024.468,3515.7493,143.77145,NULL,'Negatron'), +(1985101,5,3028.9001,3538.7004,144.36063,NULL,'Negatron'), +(1985101,6,3036.7417,3573.2764,143.18323,NULL,'Negatron'), +(1985101,7,3049.1687,3585.138,143.41333,NULL,'Negatron'), +(1973700,1,3031.1257,3688.058,143.15771,NULL,'Engineering Crewmember'), -- 70613 +(1973700,2,3011.8333,3689.197,143.637,NULL,'Engineering Crewmember'), +(1973701,1,3071.3098,3668.194,142.37271,NULL,'Engineering Crewmember'), -- 70612 +(1973701,2,3089.5693,3678.5586,142.48721,NULL,'Engineering Crewmember'), +(1973701,3,3108.9783,3684.0244,142.99113,NULL,'Engineering Crewmember'), +(1973701,4,3121.0576,3690.8025,143.11064,NULL,'Engineering Crewmember'), +(1973702,1,3071.934,3660.8694,142.9512,NULL,'Engineering Crewmember'), -- 70614 +(1973702,2,3084.3215,3655.3108,142.87344,NULL,'Engineering Crewmember'), +(1973702,3,3090.7234,3645.0745,143.13007,NULL,'Engineering Crewmember'), +(1973702,4,3090.0159,3629.1611,143.10968,NULL,'Engineering Crewmember'), +(1973702,5,3081.2068,3620.2065,143.60968,NULL,'Engineering Crewmember'), +(1973703,1,3026.3057,3644.5496,143.46822,NULL,'Engineering Crewmember'), -- 70615 +(1973703,2,3009.577,3644.3416,143.75604,NULL,'Engineering Crewmember'); + +UPDATE `creature_text` SET `Emote`=25, `BroadcastTextId`=17456 WHERE `CreatureID`=19832 AND `GroupID`=0 AND `ID`=0; + +DELETE FROM `creature_text` WHERE `CreatureID` IN (19570, 19849, 19851); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(19570, 0, 0, 'Oh no! The X-52 Nether-Rocket is being attacked! Guards! Guards!', 14, 0, 100, 5, 0, 0, 17474, 0, 'Rocket-Chief Fuselage'), +(19849, 0, 0, 'The %s, having fought the good fight, falls to pieces.', 16, 0, 100, 0, 0, 0, 18587, 0, 'Scrap Reaver X6000'), +(19851, 0, 0, 'I AM DEATH! PREPARE YOUR TOWN FOR ANNIHILATION!', 14, 0, 100, 0, 0, 0, 17455, 0, 'Negatron'), +(19851, 1, 0, 'YOUR SAD ATTEMPT AT CREATING A FEL REAVER TO STOP ME HAS FAILED! NOW, ON TO AREA 52!', 14, 0, 100, 0, 0, 0, 17468, 0, 'Negatron'); + +-- After reaching Area 52, Negatron causes Engineering Crewmembers to flee (WPs) and Rocket-Chief to perform a short event +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 19737; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (-70612, -70613, -70614, -70615)); +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 +(-70613, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 53, 1, 1973700, 0, 0, 500, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Engineering Crewmember - On Data Set 1 1 - Start Waypoint (Negatron Failure Event)'), +(-70612, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 53, 1, 1973701, 0, 0, 500, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Engineering Crewmember - On Data Set 1 1 - Start Waypoint (Negatron Failure Event)'), +(-70614, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 53, 1, 1973702, 0, 0, 500, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Engineering Crewmember - On Data Set 1 1 - Start Waypoint (Negatron Failure Event)'), +(-70614, 0, 1, 0, 38, 0, 100, 0, 2, 2, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 10, 70731, 19776, 0, 0, 0, 0, 0, 0, 'Engineering Crewmember - On Data Set 2 2 - Set Orientation Closest Creature \'Experimental Pilot\''), +(-70614, 0, 2, 0, 38, 0, 100, 0, 3, 3, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2.19912, 'Engineering Crewmember - On Data Set 3 3 - Set Orientation 2,199120'), +(-70615, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 53, 1, 1973703, 0, 0, 500, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Engineering Crewmember - On Data Set 1 1 - Start Waypoint (Negatron Failure Event)'); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 19570; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19570); +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 +(19570, 0, 0, 1, 38, 0, 100, 0, 1, 1, 0, 0, 0, 59, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rocket-Chief Fuselage - On Data Set 1 1 - Set Run On'), +(19570, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 3062.3855, 3661.3877, 143.09126, 0, 'Rocket-Chief Fuselage - On Data Set 1 1 - Move To Position'), +(19570, 0, 2, 3, 34, 0, 100, 0, 0, 1, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 19, 19851, 100, 0, 0, 0, 0, 0, 0, 'Rocket-Chief Fuselage - On Reached Point 1 - Set Orientation Closest Creature \'Negatron\''), +(19570, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rocket-Chief Fuselage - On Reached Point 1 - Set Run Off'), +(19570, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 67, 1, 60000, 60000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rocket-Chief Fuselage - On Reached Point 1 - Create Timed Event'), +(19570, 0, 5, 0, 59, 0, 100, 0, 1, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rocket-Chief Fuselage - On Timed Event 1 Triggered - Evade'); + +-- Doctor Vomisa +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19832); +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 +(19832, 0, 0, 0, 38, 0, 100, 0, 1, 1, 0, 0, 0, 12, 19851, 4, 300000, 0, 0, 0, 8, 0, 0, 0, 0, 3148.74, 3233.88, 97.6867, 1.90637, 'Doctor Vomisa, Ph.T. - On Data Set 1 1 - Summon Creature \'Negatron\''), +(19832, 0, 1, 2, 38, 0, 100, 512, 2, 2, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 5.072320938110352, 'Doctor Vomisa, Ph.T. - On Data Set 2 2 - Set Orientation 5.072320938110352'), +(19832, 0, 2, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Doctor Vomisa, Ph.T. - On Data Set 2 2 - Say Line 0'); + +-- Scrap Reaver X6000 +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 19849; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19849); +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 +(19849, 0, 0, 1, 8, 0, 100, 513, 34630, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 70967, 19832, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - On Spellhit \'Scrap Reaver X6000\' - Set Data 1 1 on Doctor Vomisa, Ph.T. - Summon Negatron'), +(19849, 0, 1, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - On Spellhit \'Scrap Reaver X6000\' - Store Targetlist Invoker Party'), +(19849, 0, 2, 0, 38, 0, 100, 512, 1, 1, 0, 0, 0, 80, 1984900, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - On Data Set 1 1 - Run Success Script'), +(19849, 0, 3, 0, 11, 0, 100, 512, 0, 0, 0, 0, 0, 80, 1984901, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - On Respawn - Run Respawn Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1984900, 1984901)); +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 +(1984900, 9, 0, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 33, 19851, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - Actionlist - Quest Credit \'You, Robot\''), +(1984900, 9, 1, 0, 0, 0, 100, 512, 10000, 10000, 0, 0, 0, 18, 33556488, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - Actionlist - Set Flags PvP Attackable & Pet In Combat & Not Selectable'), +(1984900, 9, 2, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - Actionlist - Set Rooted On'), +(1984900, 9, 3, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 90, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - Actionlist - Set Flag Standstate Dead'), +(1984900, 9, 4, 0, 0, 0, 100, 512, 200, 200, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - Actionlist - Say Line 0'), +(1984900, 9, 5, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 41, 6000, 120, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - Actionlist - Despawn In 6000 ms'), +(1984901, 9, 0, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 91, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - Actionlist - Remove FlagStandstate Dead'), +(1984901, 9, 1, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 19, 33556488, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - Actionlist - Remove Flags PvP Attackable & Pet In Combat & Not Selectable'), +(1984901, 9, 2, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scrap Reaver X6000 - Actionlist - Set Rooted Off'); + +-- Negatron +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19851); +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 +(19851, 0, 0 , 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 80, 1985100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - On Just Summoned - Run Script'), +(19851, 0, 1 , 0, 40, 0, 100, 0, 3, 1985100, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, 70967, 19832, 0, 0, 0, 0, 0, 0, 'Negatron - On Waypoint 3 Reached - Set Data 2 2 on Doctor Vomisa, Ph.T.'), +(19851, 0, 2 , 0, 58, 0, 100, 0, 6, 1985100, 0, 0, 0, 80, 1985101, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - On Waypoint Finished - Run Script'), +(19851, 0, 3 , 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - On Reset - Set Event Phase 1 (Allow Failure Event Timer to Start)'), +(19851, 0, 4 , 0, 1, 1, 100, 1, 15000, 15000, 0, 0, 0, 80, 1985102, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Out of Combat - Run Failure Event Script (Phase 1)'), +(19851, 0, 5 , 0, 58, 0, 100, 0, 7, 1985101, 0, 0, 0, 80, 1985103, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - On Waypoint Finished - Run Script'), +(19851, 0, 6 , 0, 34, 0, 100, 0, 8, 1, 0, 0, 0, 80, 1985104, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - On MovementInform 1 - Run Script'), +(19851, 0, 7 , 8, 6, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 19849, 100, 0, 0, 0, 0, 0, 0, 'Negatron - On Just Died - Set Data 1 1 on Scrap Reaver X6000 - Start Success Event'), +(19851, 0, 8 , 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 15000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - On Just Died - Despawn In 15000 ms'), +(19851, 0, 9 , 0, 9, 0, 100, 0, 8, 25, 15000, 21000, 1, 11, 35570, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Within 8-25 Range - Cast \'Charge\''), +(19851, 0, 10, 0, 9, 0, 100, 0, 0, 5, 8000, 12000, 0, 11, 34625, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Within 0-5 Range - Cast \'Demolish\''), +(19851, 0, 11, 0, 0, 0, 100, 0, 15000, 19000, 21000, 25000, 0, 11, 35565, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - In Combat - Cast \'Earthquake\''), +(19851, 0, 12, 0, 2, 0, 100, 0, 0, 50, 16000, 22000, 0, 11, 34624, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Between 0-50% Health - Cast \'Frenzy\''); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1985100, 1985101, 1985102, 1985103, 1985104)); +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 +(1985100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Set Active On'), +(1985100, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 18, 33536, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Set Flags Immune To Players'), +(1985100, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1985100, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Start Waypoint'), +(1985100, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 15742, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Cast \'Ashcrombe`s Teleport\''), +(1985100, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Set Event Phase 2 (Do Not Start Timer for Failure Event)'), + +(1985101, 9, 0, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 10, 70967, 19832, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Set Orientation Creature \'Doctor Vomisa, Ph.T.\''), +(1985101, 9, 1, 0, 0, 0, 100, 0, 150, 150, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Say Line 0'), +(1985101, 9, 2, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 0, 18, 32768, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Remove Immunity Flags'), +(1985101, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 10, 70975, 19849, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Start Attacking Scrap Reaver X6000'), + +(1985102, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1985101, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Start Waypoint'), +(1985102, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 18, 33536, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Set Flags Immune To Players & Immune To NPC\'s'), +(1985102, 9, 2, 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, 'Negatron - Actionlist - Say Line 1'), + +(1985103, 9, 0, 0, 0, 0, 100, 0, 300, 300, 0, 0, 0, 11, 34427, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Cast \'Ethereal Teleport\''), +(1985103, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 62, 530, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3044.2, 3622.36, 143.269, 0, 'Negatron - Actionlist - Teleport'), +(1985103, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Set Run On'), +(1985103, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 3037.824, 3659.001, 143.53865, 0, 'Negatron - Actionlist - Move To Position'), +(1985103, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 9, 19737, 0, 200, 1, 0, 0, 0, 0, 'Negatron - Actionlist - Set Data 1 1 on Engineering Crewmembers'), +(1985103, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 70009, 19570, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Set Data 1 1 on Rocket-Chief Fuselage'), + +(1985104, 9, 0, 0, 0, 0, 100, 0, 150, 150, 0, 0, 0, 5, 54, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Play Emote 54'), +(1985104, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 50, 183987, 180000, 0, 0, 0, 0, 8, 0, 0, 0, 0, 3030.1443, 3656.7964, 159.49426, 0.15707901, 'Negatron - Actionlist - Summon Gameobject \'Rocket Fire\''), +(1985104, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 50, 183987, 180000, 0, 0, 0, 0, 8, 0, 0, 0, 0, 3047.6445, 3668.2544, 158.13696, 0.017452462, 'Negatron - Actionlist - Summon Gameobject \'Rocket Fire\''), +(1985104, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 50, 183987, 180000, 0, 0, 0, 0, 8, 0, 0, 0, 0, 3029.779, 3677.4927, 158.64986, 1.3439013, 'Negatron - Actionlist - Summon Gameobject \'Rocket Fire\''), +(1985104, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 50, 183987, 180000, 0, 0, 0, 0, 8, 0, 0, 0, 0, 3038.2305, 3670.395, 197.78914, 6.073746, 'Negatron - Actionlist - Summon Gameobject \'Rocket Fire\''), +(1985104, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 50, 183987, 180000, 0, 0, 0, 0, 8, 0, 0, 0, 0, 3042.363, 3667.0383, 180.62209, 4.747296, 'Negatron - Actionlist - Summon Gameobject \'Rocket Fire\''), +(1985104, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 50, 183987, 180000, 0, 0, 0, 0, 8, 0, 0, 0, 0, 3031.6763, 3671.5273, 180.86804, 0.69813144, 'Negatron - Actionlist - Summon Gameobject \'Rocket Fire\''), +(1985104, 9, 7, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10, 70009, 19570, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Say Line 0 (Rocket-Chief Fuselage)'), +(1985104, 9, 8, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 19, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Remove Flag Immune To NPC'), +(1985104, 9, 9, 0, 0, 0, 100, 0, 800, 800, 0, 0, 0, 107, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Summon Creature Group 0'), +(1985104, 9, 10, 0, 0, 0, 100, 0, 400, 400, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 19, 19541, 100, 0, 0, 0, 0, 0, 0, 'Negatron - Actionlist - Start Attacking'); + +-- Experimental Pilot Refactor +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19776); +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 +(19776, 0, 0, 0, 25, 0, 100, 512, 0, 0, 0, 0, 0, 53, 0, 19776, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - On Reset - Start Waypoint'), +(19776, 0, 1, 0, 40, 0, 100, 512, 8, 19776, 0, 0, 0, 80, 1977600, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - On Waypoint 8 Reached - Run Script'), +(19776, 0, 2, 3, 40, 0, 100, 512, 15, 19776, 0, 0, 0, 54, 300000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - On Waypoint 15 Reached - Pause Waypoint'), +(19776, 0, 3, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 5.0689, 'Experimental Pilot - On Waypoint 15 Reached - Set Orientation 5,0689'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 1977600); +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 +(1977600, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 54, 140000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Pause Waypoint'), +(1977600, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2.11134, 'Experimental Pilot - Actionlist - Set Orientation 2.11134'), +(1977600, 9, 2, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, 70614, 19737, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Set Data 2 2'), +(1977600, 9, 3, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 1, 0, 15000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 0'), +(1977600, 9, 4, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 0, 1, 0, 20000, 0, 0, 0, 0, 10, 70614, 19737, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 0'), +(1977600, 9, 5, 0, 0, 0, 100, 0, 20000, 20000, 0, 0, 0, 1, 1, 20000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 1'), +(1977600, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Play Emote 6'), +(1977600, 9, 7, 0, 0, 0, 100, 0, 20000, 20000, 0, 0, 0, 1, 1, 15000, 0, 0, 0, 0, 10, 70614, 19737, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 1'), +(1977600, 9, 8, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Play Emote 6'), +(1977600, 9, 9, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 2, 15000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 2'), +(1977600, 9, 10, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 0, 1, 2, 10000, 0, 0, 0, 0, 10, 70614, 19737, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 2'), +(1977600, 9, 11, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 0, 1, 3, 15000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 3'), +(1977600, 9, 12, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Play Emote 6'), +(1977600, 9, 13, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 0, 1, 3, 10000, 0, 0, 0, 0, 10, 70614, 19737, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 3'), +(1977600, 9, 14, 0, 0, 0, 100, 0, 10000, 10000, 0, 0, 0, 1, 4, 15000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 4'), +(1977600, 9, 15, 0, 0, 0, 100, 0, 15000, 15000, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 10, 70614, 19737, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Say Line 4'), +(1977600, 9, 16, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 45, 3, 3, 0, 0, 0, 0, 10, 70614, 19737, 0, 0, 0, 0, 0, 0, 'Experimental Pilot - Actionlist - Set Data 3 3'); + +-- Don't play Experimental Pilot Script if there are no Crewmembers nearby +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceGroup` = 2) AND (`SourceEntry` = 19776); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 2, 19776, 0, 0, 29, 1, 19737, 10, 0, 0, 0, 0, '', 'Only Run Script if creature Engineering Crewmember (19737) is nearby'); + +-- Netherstorm Agent +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19541); +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 +(19541, 0, 0, 0, 1, 0, 80, 0, 60000, 60000, 200000, 230000, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Netherstorm Agent - Out of Combat - Say Line 0'), +(19541, 0, 1, 0, 9, 0, 100, 0, 5, 30, 3600, 3600, 0, 11, 36246, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Netherstorm Agent - Within 5-30 Range - Cast \'Shoot Tech Gun\''), +(19541, 0, 2, 0, 54, 0, 100, 512, 0, 0, 0, 0, 0, 80, 1954100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Netherstorm Agent - On Just Summoned - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 1954100); +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 +(1954100, 9, 0, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 2, 1770, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Netherstorm Agent - Actionlist - Set Faction 1770'), +(1954100, 9, 1, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Netherstorm Agent - Actionlist - Set Invincibility Hp 1'), +(1954100, 9, 2, 0, 0, 0, 100, 512, 1200, 1200, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 19, 19851, 100, 0, 0, 0, 0, 0, 0, 'Netherstorm Agent - Actionlist - Start Attacking'); + +-- Conditions for controlling Scrap Reaver X6000 +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceEntry` = 34630) AND (`ConditionTypeOrReference` IN (28, 29)) AND (`ConditionValue1` IN (19851, 10248)); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(17, 0, 34630, 0, 0, 29, 0, 19851, 200, 0, 1, 0, 0, '', 'Only cast Scrap Reaver X6000 if Negatron is not spawned'), +(17, 0, 34630, 0, 0, 28, 0, 10248, 0, 0, 1, 0, 0, '', 'Only cast Scrap Reaver X6000 if quest You, Robot is not completed'); + +-- Quest not being completable +UPDATE `quest_template_addon` SET `SpecialFlags`=`SpecialFlags`&~2 WHERE (`ID` = 10248); From ae159fe6221eba1fd4a07adbef4188a9c292945a Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Wed, 15 Mar 2023 13:28:41 +0000 Subject: [PATCH 145/159] chore(DB): import pending files Referenced commit(s): f123f455b72802e5824b56662e9a1ad5f9c9b959 --- .../rev_1677808197727073900.sql => db_world/2023_03_15_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1677808197727073900.sql => db_world/2023_03_15_01.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1677808197727073900.sql b/data/sql/updates/db_world/2023_03_15_01.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1677808197727073900.sql rename to data/sql/updates/db_world/2023_03_15_01.sql index ed91f38a2..1054f9edc 100644 --- a/data/sql/updates/pending_db_world/rev_1677808197727073900.sql +++ b/data/sql/updates/db_world/2023_03_15_01.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_00 -> 2023_03_15_01 -- UPDATE `creature_template_addon` SET `bytes2` = 1, `visibilityDistanceType` = 5 WHERE (`entry` = 19851); UPDATE `creature_template` SET `unit_flags` = 32768, `flags_extra` = `flags_extra`|2097152 WHERE (`entry` = 19851); From f0be1aa9010145736c10dae2191046194946378d Mon Sep 17 00:00:00 2001 From: neifion-00000000 <91289495+neifion-00000000@users.noreply.github.com> Date: Wed, 15 Mar 2023 16:23:15 -0500 Subject: [PATCH 146/159] fix(DB/Loot): Fix Warp splinter Normal Loot Drops (#15348) --- .../updates/pending_db_world/rev_1678614761475144800.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678614761475144800.sql diff --git a/data/sql/updates/pending_db_world/rev_1678614761475144800.sql b/data/sql/updates/pending_db_world/rev_1678614761475144800.sql new file mode 100644 index 000000000..92951ae16 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678614761475144800.sql @@ -0,0 +1,6 @@ +-- +-- Repair Warp Splinter Loot Table +UPDATE `reference_loot_template` SET `GroupId`=3 WHERE `Entry`=35006 AND `Item` IN (28370, 28367, 28371, 28348, 28350, 28349); +UPDATE `creature_loot_template` SET `MaxCount`=1 WHERE `Entry`=17977 AND `Item`=35006 AND `Reference`=35006 AND `GroupId`=2; +DELETE FROM `creature_loot_template` WHERE `Entry`=17977 AND `Item`=35006 AND `Reference`=35006 AND `GroupId`=3; +INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES (17977, 35006, 35006, 100, 0, 1, 3, 1, 1, 'Warp Splinter High Value Table - (ReferenceTable)'); From 7827b08999b4152ea30ee828d63c01b5d3ef7922 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Wed, 15 Mar 2023 23:23:33 +0200 Subject: [PATCH 147/159] fix(DB/Creature): Port Ridgespine mobs from Mangos. (#15374) --- .../pending_db_world/rev_1678704026507325400.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678704026507325400.sql diff --git a/data/sql/updates/pending_db_world/rev_1678704026507325400.sql b/data/sql/updates/pending_db_world/rev_1678704026507325400.sql new file mode 100644 index 000000000..1e13cd271 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678704026507325400.sql @@ -0,0 +1,14 @@ +-- Ridgespine Horror +UPDATE `creature_template_addon` SET `auras` = '7939 22766' WHERE `entry` = 20998; +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 20998; + +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` = 20998; +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 +(20998, 0, 0, 0, 0, 0, 100, 0, 3000, 7000, 8000, 12000, 0, 11, 745, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ridgespine Horror - In Combat - Cast \'Web\''), +(20998, 0, 1, 0, 0, 0, 100, 0, 0, 0, 5000, 12000, 0, 11, 7951, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ridgespine Horror - In Combat - Cast \'Toxic Spit\''); + +-- Ridgespine Stalker +UPDATE `creature_template_addon` SET `auras` = '7939 22766' WHERE `entry` = 20714; +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` = 20714; +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 +(20714, 0, 0, 0, 0, 0, 100, 0, 8000, 12000, 8000, 12000, 0, 11, 744, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ridgespine Stalker - In Combat - Cast \'Poison\''); From 005dcdbf10f2139474c0fd0335496e4ec3a211c8 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Wed, 15 Mar 2023 23:23:45 +0200 Subject: [PATCH 148/159] fix(DB/SAI): Karaaz incorrect text target. (#15384) Co-authored-by: offl --- .../rev_1678816322284905000.sql | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678816322284905000.sql diff --git a/data/sql/updates/pending_db_world/rev_1678816322284905000.sql b/data/sql/updates/pending_db_world/rev_1678816322284905000.sql new file mode 100644 index 000000000..c49871b37 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678816322284905000.sql @@ -0,0 +1,21 @@ +-- Karaaz +DELETE FROM `creature_text` WHERE `CreatureID`=20242; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(20242, 0, 0, 'Of course none of my goods are stolen. But if someone asks, you didn\'t get them from me!', 12, 0, 100, 1, 0, 0, 17914, 0, 'Karaaz'), +(20242, 0, 1, 'The latest blueprints, patterns and schematics are available right here. These instructions are so simple to follow they practically craft themselves!', 12, 0, 100, 1, 0, 0, 17915, 0, 'Karaaz'), +(20242, 0, 2, 'The best selection of smuggled goods is available right here, $n. Great for the whole family! Avoid goblin taxation and naaru prohibition - the Consortium is here to fill your every shopping need!', 12, 0, 100, 1, 0, 0, 17916, 0, 'Karaaz'), +(20242, 0, 3, 'Pssst! I have something that might interest you, $n. It fell off a pack mule in Nagrand!', 12, 0, 100, 1, 0, 0, 17917, 0, 'Karaaz'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 20242 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`, `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 +(20242, 0, 0, 0, 38, 0, 100, 0, 0, 1, 120000, 120000, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Karaaz - On Data Set 0 1 - Say Line 0 (Areatrigger 4495 Invoker)'); + +-- Areatrigger +DELETE FROM `areatrigger_scripts` WHERE `entry`=4495; +INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES (4495, 'SmartTrigger'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=4495 AND `source_type`=2; +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 +(4495, 2, 0, 1, 46, 0, 100, 0, 4495, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Areatrigger (The Stormspire) - On Trigger - Store Targetlist'), +(4495, 2, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 20242, 0, 0, 0, 0, 0, 0, 0, 'Areatrigger (The Stormspire) - On Link - Send Target 1 (Karaaz)'), +(4495, 2, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 20242, 0, 0, 0, 0, 0, 0, 0, 'Areatrigger (The Stormspire) - On Link - Set Data 0 1 (Karaaz)'); From d4a74c0ad4bea7e796a6ea4edbc01df6cf6ac04f Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Wed, 15 Mar 2023 23:24:01 +0200 Subject: [PATCH 149/159] fix(DB/SAI): Brother Sarno not greeting players. (#15385) Co-authored-by: offl offl@users.noreply.github.com --- .../rev_1678817080047611900.sql | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678817080047611900.sql diff --git a/data/sql/updates/pending_db_world/rev_1678817080047611900.sql b/data/sql/updates/pending_db_world/rev_1678817080047611900.sql new file mode 100644 index 000000000..e76e3378a --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678817080047611900.sql @@ -0,0 +1,26 @@ +-- Brother Sarno +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 7917; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=7917 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`, `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 (7917, 0, 0, 0, 38, 0, 100, 0, 0, 1, 60000, 60000, 0, 80, 791700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Brother Sarno - On Data Set 0 1 - Run Script (Areatrigger 1125 Invoker)'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=791700 AND `source_type`=9; +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 +(791700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Brother Sarno - On Script - Set Orientation Stored Target'), +(791700, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Brother Sarno - On Script - Say Line 0'), +(791700, 9, 2, 0, 0, 0, 100, 0, 3000, 3000, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Brother Sarno - On Script - Set Orientation Home Position'); + +-- Areatrigger +DELETE FROM `areatrigger_scripts` WHERE `entry` = 1125; +INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES (1125, 'SmartTrigger'); + +DELETE FROM `smart_scripts` WHERE `entryorguid`=1125 AND `source_type`=2; +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 +(1125, 2, 0, 1, 46, 0, 100, 0, 1125, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Areatrigger (Cathedral of Light) - On Trigger - Store Targetlist'), +(1125, 2, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 7917, 0, 0, 0, 0, 0, 0, 0, 'Areatrigger (Cathedral of Light) - On Link - Send Target 1 (Brother Sarno)'), +(1125, 2, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 19, 7917, 0, 0, 0, 0, 0, 0, 0, 'Areatrigger (Cathedral of Light) - On Link - Set Data 0 1 (Brother Sarno)'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceEntry`=1125; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, 1125, 2, 0, 15, 0, 32, 0, 0, 1, 0, 0, '', 'Execute Areatrigger 1125 SAI if player is not a Death Knight'); From ecfaa5f750b52d9b70db82e22cd9f1a7ccea5808 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:26:07 -0300 Subject: [PATCH 150/159] fix(DB/Quest): Fix Earthmender Wilda not properly resetting (#15394) --- .../rev_1678855110111127300.sql | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678855110111127300.sql diff --git a/data/sql/updates/pending_db_world/rev_1678855110111127300.sql b/data/sql/updates/pending_db_world/rev_1678855110111127300.sql new file mode 100644 index 000000000..8a4380808 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678855110111127300.sql @@ -0,0 +1,24 @@ +-- Improve Respawn Script +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2102700); +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 +(2102700, 9, 0, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 60, 0, 30, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Disable Gravity'), +(2102700, 9, 1, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 2, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Faction 35'), +(2102700, 9, 2, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 83, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Remove Npc Flags Questgiver'), +(2102700, 9, 3, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Reactstate Passive'), +(2102700, 9, 4, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 11, 35921, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Cast \'Water Bubble\''), +(2102700, 9, 5, 0, 0, 0, 100, 512, 1200, 1200, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 9, 21041, 0, 40, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Set Data 1 1'); + +UPDATE `smart_scripts` SET `event_flags`=512, `action_param2`=2, `action_param3`=1 WHERE (`entryorguid` = 21027) AND (`source_type` = 0) AND (`id` IN (0)); + +-- Increase Visibility Range of Triggers +DELETE FROM `creature_template_addon` WHERE (`entry` = 21041); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(21041, 0, 0, 0, 0, 0, 3, ''); + +-- Handle Quest Credit and Despawn on Actionlist +UPDATE `smart_scripts` SET `action_param4`=0, `action_param5`=0 WHERE (`entryorguid` = 2102704) AND (`source_type` = 9) AND (`id` IN (1)); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 2102705) AND (`source_type` = 9) AND (`id` IN (3, 4)); +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 +(2102705, 9, 3, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 26, 10451, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Quest Credit \'Escape from Coilskar Cistern\''), +(2102705, 9, 4, 0, 0, 0, 100, 0, 3600, 3600, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Earthmender Wilda - Actionlist - Despawn Instant'); From 0834b9c2739396075640611f61638550a6ed0a89 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:26:33 -0300 Subject: [PATCH 151/159] fix(DB/Pools): Temporary fix for Arakkoa Eggs until Core is fixed (#15392) --- data/sql/updates/pending_db_world/rev_1678835550178060800.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678835550178060800.sql diff --git a/data/sql/updates/pending_db_world/rev_1678835550178060800.sql b/data/sql/updates/pending_db_world/rev_1678835550178060800.sql new file mode 100644 index 000000000..2dcac0f8b --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678835550178060800.sql @@ -0,0 +1,2 @@ +-- +UPDATE `pool_gameobject` SET `Chance`=0 WHERE `description`='Rotten Arakkoa Egg (184795)'; From 04ad054c74edde68c3656f81e0e53813d6e7cb14 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:26:50 -0300 Subject: [PATCH 152/159] fix(DB/Quest): Fix Stasis Chamber Alpha not respawning (#15391) --- .../sql/updates/pending_db_world/rev_1678822685335162700.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678822685335162700.sql diff --git a/data/sql/updates/pending_db_world/rev_1678822685335162700.sql b/data/sql/updates/pending_db_world/rev_1678822685335162700.sql new file mode 100644 index 000000000..856894c17 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678822685335162700.sql @@ -0,0 +1,5 @@ +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18551200) AND (`source_type` = 9) AND (`id` IN (0, 1)); +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 +(18551200, 9, 0, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 12, 22920, 1, 300000, 0, 1, 0, 8, 0, 0, 0, 0, 3989.02, 6071.37, 266.41, 3.72, 'Stasis Chamber Alpha - On Script - Summon Creature \'Thuk the Defiant\''), +(18551200, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Stasis Chamber Alpha - On Script - Despawn Self'); From 6131a804a7695338c3dea2182e1b4e8af3f95434 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Wed, 15 Mar 2023 23:27:34 +0200 Subject: [PATCH 153/159] fix(DB/SAI): Griftah not greeting players. (#15387) Co-authored-by: offl Co-authored-by: Gultask --- .../rev_1678820124142570600.sql | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678820124142570600.sql diff --git a/data/sql/updates/pending_db_world/rev_1678820124142570600.sql b/data/sql/updates/pending_db_world/rev_1678820124142570600.sql new file mode 100644 index 000000000..257dbe7af --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678820124142570600.sql @@ -0,0 +1,30 @@ +-- Griftah +DELETE FROM `smart_scripts` WHERE `entryorguid` = 19227 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`,`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 +(19227, 0, 0, 0, 38, 0, 100, 0, 0, 1, 60000, 60000, 0, 80, 1922700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Griftah - On Data Set 0 1 - Run Script (Areatrigger 4389 Invoker)'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 1922700); +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 +(1922700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Griftah - Actionlist - Say Line 0'), +(1922700, 9, 1, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Griftah - Actionlist - Play Emote 1'), +(1922700, 9, 2, 0, 0, 0, 100, 0, 2400, 2400, 0, 0, 0, 5, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Griftah - Actionlist - Play Emote 5'); + +DELETE FROM `creature_text` WHERE `CreatureID` = 19227; +INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES +(19227,0,0,"Hey! Hey, $r! I be havin' just the thing for ya. Ya ever see a tikbalang? Frightenin' creatures. Prone to stealin' ya away. What ya need is one of my tikbalang wards. Guaranteed to ward away all tikbalangs!",12,0,100,5,0,0,16318,0,"Griftah"), +(19227,0,1,"Look over here, $c! I got somethin' for ya. Just what ya need. It's soap, right... and it's on a rope! No offense, $G man:honey;, but yer a little ripe, know what I'm sayin'?",12,0,100,5,0,0,16319,0,"Griftah"), +(19227,0,2,"Ya look lovesick. Special someone be gettin' ya down, eh? No worries, no worries. Ya get this medallion from me, ya wear it when ya see 'em, and they be all over ya, $G man:sweetheart;!",12,0,100,5,0,0,16320,0,"Griftah"), +(19227,0,3,"Dangerous out there, innit? Know what ya need? Protection. I can help ya defy death itself! Ya wear this madstone 'round yer neck, see, and then ya be able to come back if ya find yerself in the spirit world! Just a quick jaunt to yer corpse and up ya come, fresh and new!",12,0,100,5,0,0,16321,0,"Griftah"), +(19227,0,4,"Amazing amulets! Incredible curios! The newfangled jewelcrafters be havin' nothin' on the tried and true mystical methods of ol' Griftah! Improve yerself through these magical talismans for a bargain price!",12,0,100,5,0,0,16322,0,"Griftah"), +(19227,0,5,"C'mere, $r. Ya don't want to be riskin' yerself in a dungeon, do ya? Filthy work, and for what? Some worthless trinket? Nah, what ya need be one of my amulets. Guaranteed to work!",12,0,100,5,0,0,16323,0,"Griftah"), +(19227,0,6,"Ya look tired, $c. I be havin' somethin' for ya. These amulets, they can help ya leap obstacles and swim through the rivers like ya be born to it. They energize the food ya be eatin', makin' yer wounds close before yer eyes!",12,0,100,5,0,0,16324,0,"Griftah"); + +-- Areatrigger +DELETE FROM `areatrigger_scripts` WHERE `entry` = 4389; +INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES (4389, 'SmartTrigger'); + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 4389 AND `source_type` = 2; +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 +(4389,2,0,1,46,0,100,0,4389,0,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0,0,"Areatrigger (Lower City) - On Trigger - Store Targetlist"), +(4389,2,1,2,61,0,100,0,0,0,0,0,0,100,1,0,0,0,0,0,10,68758,19227,0,0,0,0,0,0,"Areatrigger (Lower City) - On Link - Send Target 1 (Griftah)"), +(4389,2,2,0,61,0,100,0,0,0,0,0,0,45,0,1,0,0,0,0,10,68758,19227,0,0,0,0,0,0,"Areatrigger (Lower City) - On Link - Set Data 0 1 (Griftah)"); From b2e823c6d1839c41a25f65a9630ad4270dc24c42 Mon Sep 17 00:00:00 2001 From: Gultask <100873791+Gultask@users.noreply.github.com> Date: Wed, 15 Mar 2023 18:27:53 -0300 Subject: [PATCH 154/159] fix(DB/Quest): Fix Manaforge Questline not being completable while in party (#15393) --- .../rev_1678842792599909200.sql | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678842792599909200.sql diff --git a/data/sql/updates/pending_db_world/rev_1678842792599909200.sql b/data/sql/updates/pending_db_world/rev_1678842792599909200.sql new file mode 100644 index 000000000..a0ed5f71e --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678842792599909200.sql @@ -0,0 +1,66 @@ +-- Store Targetlist of group (id 1) +DELETE FROM `smart_scripts` WHERE (`source_type` = 1 AND `entryorguid` IN (183770, 183956, 184311, 184312)); +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 +(183770, 1, 0 , 1 , 62, 0, 100, 0, 8036, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'B\'naar Control Console - On Gossip Option Select - Store Target List'), +(183770, 1, 1 , 2 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'B\'naar Control Console - Linked with previous event - Store Target List Party'), +(183770, 1, 2 , 3 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 12, 20209, 1, 120000, 0, 0, 0, 8, 0, 0, 0, 0, 2918.95, 4189.98, 161.88, 0.34, 'B\'naar Control Console - Linked with previous event - Summon B\'naar Control Console'), +(183770, 1, 3 , 4 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 20209, 0, 0, 0, 0, 0, 0, 0, 'B\'naar Control Console - Linked with previous event - Send Targetlist to B\'naar Control Console'), +(183770, 1, 4 , 5 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 2, 0, 0, 0, 0, 0, 19, 20209, 0, 0, 0, 0, 0, 0, 0, 'B\'naar Control Console - Linked with previous event - Send Targetlist to B\'naar Control Console'), +(183770, 1, 5 , 6 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'B\'naar Control Console - Linked with previous event - Close Gossip'), +(183770, 1, 6 , 0 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 18377000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'B\'naar Control Console - Linked with previous event - Run Script'), +(183770, 1, 7 , 8 , 38, 0, 100, 0, 1, 1, 2000, 2000, 0, 104, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'B\'naar Control Console - On Data Set - Fail Quest'), +(183770, 1, 8 , 9 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 19, 20209, 0, 0, 0, 0, 0, 0, 0, 'B\'naar Control Console - On Data Set - Say'), +(183770, 1, 9 , 10, 61, 0, 100, 0, 0, 0, 0, 0, 0, 45, 7, 7, 0, 0, 0, 0, 19, 20209, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - On Data Set - Set Data'), +(183770, 1, 10, 0 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'B\'naar Control Console - On Data Set - Reset Scripts'), + +(183956, 1, 0 , 1 , 62, 0, 100, 0, 8113, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - On Gossip Option Select - Store Target List'), +(183956, 1, 1 , 2 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - Linked with previous event - Store Target List Party'), +(183956, 1, 2 , 3 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 12, 20417, 1, 120000, 0, 0, 0, 8, 0, 0, 0, 0, 2426.77, 2750.38, 133.24, 2.14, 'Coruu Control Console - Linked with previous event - Summon Coruu Control Console'), +(183956, 1, 3 , 4 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 20417, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - Linked with previous event - Send Targetlist to Coruu Control Console'), +(183956, 1, 4 , 5 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 2, 0, 0, 0, 0, 0, 19, 20417, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - Linked with previous event - Send Targetlist to Coruu Control Console'), +(183956, 1, 5 , 6 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - Linked with previous event - Close Gossip'), +(183956, 1, 6 , 0 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 18395600, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - Linked with previous event - Run Script'), +(183956, 1, 7 , 8 , 38, 0, 100, 0, 1, 1, 2000, 2000, 0, 104, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - On Data Set - Fail Quest'), +(183956, 1, 8 , 9 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 19, 20417, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - On Data Set - Say'), +(183956, 1, 9 , 10, 61, 0, 100, 0, 0, 0, 0, 0, 0, 45, 7, 7, 0, 0, 0, 0, 19, 20417, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - On Data Set - Set Data'), +(183956, 1, 10, 0 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coruu Control Console - On Data Set - Reset Scripts'), + +(184311, 1, 0 , 1 , 62, 0, 100, 0, 8115, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - On Gossip Option Select - Store Target List'), +(184311, 1, 1 , 2 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - Linked with previous event - Store Target List Party'), +(184311, 1, 2 , 3 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 12, 20418, 1, 120000, 0, 0, 0, 8, 0, 0, 0, 0, 2976.48, 2183.29, 163.2, 1.85, 'Duru Control Console - Linked with previous event - Summon Duru Control Console'), +(184311, 1, 3 , 4 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 20418, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - Linked with previous event - Send Targetlist to Duru Control Console'), +(184311, 1, 4 , 5 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 2, 0, 0, 0, 0, 0, 19, 20418, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - Linked with previous event - Send Targetlist to Duru Control Console'), +(184311, 1, 5 , 6 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - Linked with previous event - Close Gossip'), +(184311, 1, 6 , 0 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 18431100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - Linked with previous event - Run Script'), +(184311, 1, 7 , 8 , 38, 0, 100, 0, 1, 1, 2000, 2000, 0, 104, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - On Data Set - Fail Quest'), +(184311, 1, 8 , 9 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 19, 20418, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - On Data Set - Say'), +(184311, 1, 9 , 10, 61, 0, 100, 0, 0, 0, 0, 0, 0, 45, 7, 7, 0, 0, 0, 0, 19, 20418, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - On Data Set - Set Data'), +(184311, 1, 10, 0 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Duru Control Console - On Data Set - Reset Scripts'), + +(184312, 1, 0 , 1 , 62, 0, 100, 0, 8116, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - On Gossip Option Select - Store Target List'), +(184312, 1, 1 , 2 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 64, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - Linked with previous event - Store Target List Party'), +(184312, 1, 2 , 3 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 12, 20440, 1, 120000, 0, 0, 0, 8, 0, 0, 0, 0, 4013.71, 4028.76, 192.1, 1.25, 'Ara Control Console - Linked with previous event - Summon Ara Control Console'), +(184312, 1, 3 , 4 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 20440, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - Linked with previous event - Send Targetlist to Ara Control Console'), +(184312, 1, 4 , 5 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 100, 2, 0, 0, 0, 0, 0, 19, 20440, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - Linked with previous event - Send Targetlist to Ara Control Console'), +(184312, 1, 5 , 6 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - Linked with previous event - Close Gossip'), +(184312, 1, 6 , 0 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 18431200, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - Linked with previous event - Run Script'), +(184312, 1, 7 , 8 , 38, 0, 100, 0, 1, 1, 2000, 2000, 0, 104, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - On Data Set - Fail Quest'), +(184312, 1, 8 , 9 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 19, 20440, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - On Data Set - Say'), +(184312, 1, 9 , 10, 61, 0, 100, 0, 0, 0, 0, 0, 0, 45, 7, 7, 0, 0, 0, 0, 19, 20440, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - On Data Set - Set Data'), +(184312, 1, 10, 0 , 61, 0, 100, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ara Control Console - On Data Set - Reset Scripts'); + +-- Update to new Stored ID +UPDATE `smart_scripts` SET `target_param1`=2 WHERE (`entryorguid` = 20209) AND (`source_type` = 0) AND (`id` IN (11, 12, 13)); +UPDATE `smart_scripts` SET `target_param1`=2 WHERE (`entryorguid` = 20417) AND (`source_type` = 0) AND (`id` IN (13, 14, 15)); +UPDATE `smart_scripts` SET `target_param1`=2 WHERE (`entryorguid` = 20418) AND (`source_type` = 0) AND (`id` IN (15, 16, 17)); +UPDATE `smart_scripts` SET `target_param1`=2 WHERE (`entryorguid` = 20440) AND (`source_type` = 0) AND (`id` IN (14, 15, 16)); + +-- Fix Flags +UPDATE `creature_template` SET `unit_flags`=`unit_flags`|33554432|256 WHERE (`entry` IN (20209, 20417, 20418, 20440)); + +-- Delete wrong spawns of Technicians causing trouble with Duro +DELETE FROM `creature` WHERE `id1` = 20218; + +-- Fix Wrong WPs being assigned +UPDATE `smart_scripts` SET `action_param1`=2021802, `action_param2`=2021803 WHERE (`id`=12 AND `source_type` = 0 AND `entryorguid` = 20218); +UPDATE `smart_scripts` SET `action_param1`=2021804, `action_param2`=2021805 WHERE (`id`=14 AND `source_type` = 0 AND `entryorguid` = 20218); From a1dd4e162591b6f84d5cc8a06c9f650523a64306 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Wed, 15 Mar 2023 21:30:49 +0000 Subject: [PATCH 155/159] chore(DB): import pending files Referenced commit(s): b2e823c6d1839c41a25f65a9630ad4270dc24c42 --- .../rev_1678614761475144800.sql => db_world/2023_03_15_02.sql} | 1 + .../rev_1678704026507325400.sql => db_world/2023_03_15_03.sql} | 1 + .../rev_1678816322284905000.sql => db_world/2023_03_15_04.sql} | 1 + .../rev_1678817080047611900.sql => db_world/2023_03_15_05.sql} | 1 + .../rev_1678820124142570600.sql => db_world/2023_03_15_06.sql} | 1 + .../rev_1678822685335162700.sql => db_world/2023_03_15_07.sql} | 1 + .../rev_1678835550178060800.sql => db_world/2023_03_15_08.sql} | 1 + .../rev_1678842792599909200.sql => db_world/2023_03_15_09.sql} | 1 + .../rev_1678855110111127300.sql => db_world/2023_03_15_10.sql} | 1 + 9 files changed, 9 insertions(+) rename data/sql/updates/{pending_db_world/rev_1678614761475144800.sql => db_world/2023_03_15_02.sql} (93%) rename data/sql/updates/{pending_db_world/rev_1678704026507325400.sql => db_world/2023_03_15_03.sql} (97%) rename data/sql/updates/{pending_db_world/rev_1678816322284905000.sql => db_world/2023_03_15_04.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1678817080047611900.sql => db_world/2023_03_15_05.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1678820124142570600.sql => db_world/2023_03_15_06.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1678822685335162700.sql => db_world/2023_03_15_07.sql} (95%) rename data/sql/updates/{pending_db_world/rev_1678835550178060800.sql => db_world/2023_03_15_08.sql} (68%) rename data/sql/updates/{pending_db_world/rev_1678842792599909200.sql => db_world/2023_03_15_09.sql} (99%) rename data/sql/updates/{pending_db_world/rev_1678855110111127300.sql => db_world/2023_03_15_10.sql} (98%) diff --git a/data/sql/updates/pending_db_world/rev_1678614761475144800.sql b/data/sql/updates/db_world/2023_03_15_02.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1678614761475144800.sql rename to data/sql/updates/db_world/2023_03_15_02.sql index 92951ae16..ae9018409 100644 --- a/data/sql/updates/pending_db_world/rev_1678614761475144800.sql +++ b/data/sql/updates/db_world/2023_03_15_02.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_01 -> 2023_03_15_02 -- -- Repair Warp Splinter Loot Table UPDATE `reference_loot_template` SET `GroupId`=3 WHERE `Entry`=35006 AND `Item` IN (28370, 28367, 28371, 28348, 28350, 28349); diff --git a/data/sql/updates/pending_db_world/rev_1678704026507325400.sql b/data/sql/updates/db_world/2023_03_15_03.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1678704026507325400.sql rename to data/sql/updates/db_world/2023_03_15_03.sql index 1e13cd271..8f90d1fe7 100644 --- a/data/sql/updates/pending_db_world/rev_1678704026507325400.sql +++ b/data/sql/updates/db_world/2023_03_15_03.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_02 -> 2023_03_15_03 -- Ridgespine Horror UPDATE `creature_template_addon` SET `auras` = '7939 22766' WHERE `entry` = 20998; UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 20998; diff --git a/data/sql/updates/pending_db_world/rev_1678816322284905000.sql b/data/sql/updates/db_world/2023_03_15_04.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1678816322284905000.sql rename to data/sql/updates/db_world/2023_03_15_04.sql index c49871b37..5dae9456d 100644 --- a/data/sql/updates/pending_db_world/rev_1678816322284905000.sql +++ b/data/sql/updates/db_world/2023_03_15_04.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_03 -> 2023_03_15_04 -- Karaaz DELETE FROM `creature_text` WHERE `CreatureID`=20242; 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_1678817080047611900.sql b/data/sql/updates/db_world/2023_03_15_05.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1678817080047611900.sql rename to data/sql/updates/db_world/2023_03_15_05.sql index e76e3378a..360c89d45 100644 --- a/data/sql/updates/pending_db_world/rev_1678817080047611900.sql +++ b/data/sql/updates/db_world/2023_03_15_05.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_04 -> 2023_03_15_05 -- Brother Sarno UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 7917; diff --git a/data/sql/updates/pending_db_world/rev_1678820124142570600.sql b/data/sql/updates/db_world/2023_03_15_06.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1678820124142570600.sql rename to data/sql/updates/db_world/2023_03_15_06.sql index 257dbe7af..f818f6ebe 100644 --- a/data/sql/updates/pending_db_world/rev_1678820124142570600.sql +++ b/data/sql/updates/db_world/2023_03_15_06.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_05 -> 2023_03_15_06 -- Griftah DELETE FROM `smart_scripts` WHERE `entryorguid` = 19227 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`,`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_1678822685335162700.sql b/data/sql/updates/db_world/2023_03_15_07.sql similarity index 95% rename from data/sql/updates/pending_db_world/rev_1678822685335162700.sql rename to data/sql/updates/db_world/2023_03_15_07.sql index 856894c17..e65169919 100644 --- a/data/sql/updates/pending_db_world/rev_1678822685335162700.sql +++ b/data/sql/updates/db_world/2023_03_15_07.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_06 -> 2023_03_15_07 -- DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18551200) AND (`source_type` = 9) AND (`id` IN (0, 1)); 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_1678835550178060800.sql b/data/sql/updates/db_world/2023_03_15_08.sql similarity index 68% rename from data/sql/updates/pending_db_world/rev_1678835550178060800.sql rename to data/sql/updates/db_world/2023_03_15_08.sql index 2dcac0f8b..d62e47d19 100644 --- a/data/sql/updates/pending_db_world/rev_1678835550178060800.sql +++ b/data/sql/updates/db_world/2023_03_15_08.sql @@ -1,2 +1,3 @@ +-- DB update 2023_03_15_07 -> 2023_03_15_08 -- UPDATE `pool_gameobject` SET `Chance`=0 WHERE `description`='Rotten Arakkoa Egg (184795)'; diff --git a/data/sql/updates/pending_db_world/rev_1678842792599909200.sql b/data/sql/updates/db_world/2023_03_15_09.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1678842792599909200.sql rename to data/sql/updates/db_world/2023_03_15_09.sql index a0ed5f71e..2e1990267 100644 --- a/data/sql/updates/pending_db_world/rev_1678842792599909200.sql +++ b/data/sql/updates/db_world/2023_03_15_09.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_08 -> 2023_03_15_09 -- Store Targetlist of group (id 1) DELETE FROM `smart_scripts` WHERE (`source_type` = 1 AND `entryorguid` IN (183770, 183956, 184311, 184312)); 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_1678855110111127300.sql b/data/sql/updates/db_world/2023_03_15_10.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1678855110111127300.sql rename to data/sql/updates/db_world/2023_03_15_10.sql index 8a4380808..7b0f2f375 100644 --- a/data/sql/updates/pending_db_world/rev_1678855110111127300.sql +++ b/data/sql/updates/db_world/2023_03_15_10.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_09 -> 2023_03_15_10 -- Improve Respawn Script DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2102700); 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 From 23340216a7cd5036f8f850d993bdd45f07debdf2 Mon Sep 17 00:00:00 2001 From: avarishd <46330494+avarishd@users.noreply.github.com> Date: Thu, 16 Mar 2023 03:56:13 +0200 Subject: [PATCH 156/159] fix(DB/Spell): Mr Pinchy's Blessing stacking with similar effects. (#15381) --- data/sql/updates/pending_db_world/rev_1678797639960580300.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1678797639960580300.sql diff --git a/data/sql/updates/pending_db_world/rev_1678797639960580300.sql b/data/sql/updates/pending_db_world/rev_1678797639960580300.sql new file mode 100644 index 000000000..e961bb831 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1678797639960580300.sql @@ -0,0 +1,3 @@ +-- Mr Pinchy's Blessing (1300 health) +DELETE FROM `spell_group` WHERE `id`=1 AND `spell_id`=33053; +INSERT INTO `spell_group` (`id`, `spell_id`, `special_flag`) VALUES (1, 33053, 3); From 7dfe23392cee87e68d726eeb1b30be472b0cbf38 Mon Sep 17 00:00:00 2001 From: AzerothCoreBot Date: Thu, 16 Mar 2023 01:59:45 +0000 Subject: [PATCH 157/159] chore(DB): import pending files Referenced commit(s): 23340216a7cd5036f8f850d993bdd45f07debdf2 --- .../rev_1678797639960580300.sql => db_world/2023_03_16_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1678797639960580300.sql => db_world/2023_03_16_00.sql} (80%) diff --git a/data/sql/updates/pending_db_world/rev_1678797639960580300.sql b/data/sql/updates/db_world/2023_03_16_00.sql similarity index 80% rename from data/sql/updates/pending_db_world/rev_1678797639960580300.sql rename to data/sql/updates/db_world/2023_03_16_00.sql index e961bb831..f366d1a3e 100644 --- a/data/sql/updates/pending_db_world/rev_1678797639960580300.sql +++ b/data/sql/updates/db_world/2023_03_16_00.sql @@ -1,3 +1,4 @@ +-- DB update 2023_03_15_10 -> 2023_03_16_00 -- Mr Pinchy's Blessing (1300 health) DELETE FROM `spell_group` WHERE `id`=1 AND `spell_id`=33053; INSERT INTO `spell_group` (`id`, `spell_id`, `special_flag`) VALUES (1, 33053, 3); From 40ff0c607ecec81e9793d521cc1adfe3883e20ab Mon Sep 17 00:00:00 2001 From: Skjalf <47818697+Nyeriah@users.noreply.github.com> Date: Thu, 16 Mar 2023 05:20:25 -0300 Subject: [PATCH 158/159] =?UTF-8?q?fix(Scripts/IcecrownCitadel):=20Fix=20I?= =?UTF-8?q?CC=20buff=20not=20being=20reapplied=20after=20=E2=80=A6=20(#154?= =?UTF-8?q?07)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/Instances/InstanceScript.cpp | 29 +++++++ src/server/game/Instances/InstanceScript.h | 3 + .../instance_icecrown_citadel.cpp | 83 +++++++++++-------- 3 files changed, 80 insertions(+), 35 deletions(-) diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index c97a6a59f..03c307bea 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -612,6 +612,35 @@ void InstanceScript::DoCastSpellOnPlayers(uint32 spell) player->CastSpell(player, spell, true); } +void InstanceScript::DoCastSpellOnPlayer(Player* player, uint32 spell, bool includePets /*= false*/, bool includeControlled /*= false*/) +{ + if (!player) + return; + + player->CastSpell(player, spell, true); + + if (!includePets) + return; + + for (uint8 itr2 = 0; itr2 < MAX_SUMMON_SLOT; ++itr2) + { + ObjectGuid summonGUID = player->m_SummonSlot[itr2]; + if (!summonGUID.IsEmpty()) + if (Creature* summon = instance->GetCreature(summonGUID)) + summon->CastSpell(player, spell, true); + } + + if (!includeControlled) + return; + + for (auto itr2 = player->m_Controlled.begin(); itr2 != player->m_Controlled.end(); ++itr2) + { + if (Unit* controlled = *itr2) + if (controlled->IsInWorld() && controlled->GetTypeId() == TYPEID_UNIT) + controlled->CastSpell(player, spell, true); + } +} + bool InstanceScript::CheckAchievementCriteriaMeet(uint32 criteria_id, Player const* /*source*/, Unit const* /*target*/ /*= nullptr*/, uint32 /*miscvalue1*/ /*= 0*/) { LOG_ERROR("scripts.ai", "Achievement system call InstanceScript::CheckAchievementCriteriaMeet but instance script for map {} not have implementation for achievement criteria {}", diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 158ccced2..f5b255ebf 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -220,6 +220,9 @@ public: // Cast spell on all players in instance void DoCastSpellOnPlayers(uint32 spell); + // Cast spell on player + void DoCastSpellOnPlayer(Player* player, uint32 spell, bool includePets /*= false*/, bool includeControlled /*= false*/); + // Return wether server allow two side groups or not bool ServerAllowsTwoSideGroups() { return sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 673a26936..09f4d47f8 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -252,6 +252,22 @@ public: if (GetBossState(DATA_LADY_DEATHWHISPER) == DONE && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != DONE) SpawnGunship(); + + if (IsBuffAvailable) + { + SpellAreaForAreaMapBounds saBounds = sSpellMgr->GetSpellAreaForAreaMapBounds(4812); + for (SpellAreaForAreaMap::const_iterator itr = saBounds.first; itr != saBounds.second; ++itr) + if ((itr->second->raceMask & player->getRaceMask()) && !player->HasAura(itr->second->spellId)) + { + if (SpellInfo const* si = sSpellMgr->GetSpellInfo(itr->second->spellId)) + { + if (si->HasAura(SPELL_AURA_MOD_INCREASE_HEALTH_PERCENT)) + { + DoCastSpellOnPlayer(player, itr->second->spellId, false, false); + } + } + } + } } void OnCreatureCreate(Creature* creature) override @@ -1210,40 +1226,39 @@ public: IsBuffAvailable = !!data; if (!IsBuffAvailable) { - Map::PlayerList const& plrList = instance->GetPlayers(); - for (Map::PlayerList::const_iterator itr = plrList.begin(); itr != plrList.end(); ++itr) - if (Player* plr = itr->GetSource()) + instance->DoForAllPlayers([&](Player* player) + { + player->UpdateAreaDependentAuras(player->GetAreaId()); + for (Unit::ControlSet::const_iterator itr = player->m_Controlled.begin(); itr != player->m_Controlled.end(); ++itr) { - plr->UpdateAreaDependentAuras(plr->GetAreaId()); - for (Unit::ControlSet::const_iterator itr = plr->m_Controlled.begin(); itr != plr->m_Controlled.end(); ++itr) - { - Unit::AuraMap& am = (*itr)->GetOwnedAuras(); - for (Unit::AuraMap::iterator itra = am.begin(); itra != am.end();) - switch (itra->second->GetId()) - { - // Hellscream's Warsong - case 73816: - case 73818: - case 73819: - case 73820: - case 73821: - case 73822: + Unit::AuraMap& am = (*itr)->GetOwnedAuras(); + for (Unit::AuraMap::iterator itra = am.begin(); itra != am.end();) + switch (itra->second->GetId()) + { + // Hellscream's Warsong + case 73816: + case 73818: + case 73819: + case 73820: + case 73821: + case 73822: // Strength of Wrynn - case 73762: - case 73824: - case 73825: - case 73826: - case 73827: - case 73828: - (*itr)->RemoveOwnedAura(itra); - break; - default: - ++itra; - break; - } - } + case 73762: + case 73824: + case 73825: + case 73826: + case 73827: + case 73828: + (*itr)->RemoveOwnedAura(itra); + break; + default: + ++itra; + break; + } } + }); } + SaveToDB(); break; case DATA_WEEKLY_QUEST_ID: for (uint8 i = 0; i < WeeklyNPCs; ++i) @@ -1593,7 +1608,6 @@ public: ColdflameJetsState = temp ? DONE : NOT_STARTED; } - data >> temp; data >> BloodQuickeningState; data >> BloodQuickeningMinutes; @@ -1607,11 +1621,10 @@ public: data >> WeeklyQuestId10; data >> PutricideEventProgress; PutricideEventProgress &= ~PUTRICIDE_EVENT_FLAG_TRAP_INPROGRESS; - data >> temp; - LichKingHeroicAvailable = !!temp; + data >> LichKingHeroicAvailable; data >> BloodPrinceTrashCount; - data >> temp; - SetData(DATA_BUFF_AVAILABLE, !!temp); + data >> IsBuffAvailable; + SetData(DATA_BUFF_AVAILABLE, IsBuffAvailable); } void WriteSaveDataMore(std::ostringstream& data) override From 6415b2ae1fc95f557cb6a893fa23f3e78553b390 Mon Sep 17 00:00:00 2001 From: Angelo Venturini Date: Thu, 16 Mar 2023 10:13:51 -0300 Subject: [PATCH 159/159] fix(DB): fix query (#15411) --- data/sql/updates/db_world/2023_03_11_06.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/sql/updates/db_world/2023_03_11_06.sql b/data/sql/updates/db_world/2023_03_11_06.sql index 09703dfac..b2b4b4099 100644 --- a/data/sql/updates/db_world/2023_03_11_06.sql +++ b/data/sql/updates/db_world/2023_03_11_06.sql @@ -16,6 +16,6 @@ INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, ` (35004, 28193, 0, 0, 0, 1, 3, 1, 1, 'Mana-Etched Crown'), (35004, 28206, 0, 0, 0, 1, 3, 1, 1, 'Cowl of the Guiltless'); -- Insert 2nd loot drop -DELETE FROM `creature_loot_template` WHERE `Entry`=17881 AND `Item`=35007 AND `GroupId`=3; +DELETE FROM `creature_loot_template` WHERE `Entry`=17881 AND `Item`=35004 AND `GroupId`=3; INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES (17881, 35004, 35004, 100, 0, 1, 3, 1, 1, 'Aeonus High Value Table - (ReferenceTable)');