mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-31 01:23:47 +00:00
Merge branch 'master' into Playerbot
This commit is contained in:
2
data/sql/updates/db_world/2024_01_31_00.sql
Normal file
2
data/sql/updates/db_world/2024_01_31_00.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
-- DB update 2024_01_29_00 -> 2024_01_31_00
|
||||
ALTER TABLE `quest_template` DROP COLUMN `RewardBonusMoney`;
|
||||
5
data/sql/updates/db_world/2024_02_01_00.sql
Normal file
5
data/sql/updates/db_world/2024_02_01_00.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
-- DB update 2024_01_31_00 -> 2024_02_01_00
|
||||
-- Midsummer - add spell script for 29235 Fire Festival Fortitude
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id` = 29235;
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(29235, 'spell_fire_festival_fortitude');
|
||||
3
data/sql/updates/db_world/2024_02_01_01.sql
Normal file
3
data/sql/updates/db_world/2024_02_01_01.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
-- DB update 2024_02_01_00 -> 2024_02_01_01
|
||||
-- Add Repair npcflag to 28344 Blazzle
|
||||
UPDATE `creature_template` SET `npcflag` = (`npcflag` | 4096) WHERE `entry` = 28344;
|
||||
17
data/sql/updates/db_world/2024_02_03_00.sql
Normal file
17
data/sql/updates/db_world/2024_02_03_00.sql
Normal file
@@ -0,0 +1,17 @@
|
||||
-- DB update 2024_02_01_01 -> 2024_02_03_00
|
||||
-- Update creature 26123 'Midsummer Supplier' with sniffed values
|
||||
-- updated spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 26123) AND (`guid` IN (202770, 202864, 86163));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(202770, 26123, 530, 1, 1, 0, -3792.682373046875, -11515.6591796875, -134.693161010742187, 6.248278617858886718, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(202864, 26123, 0, 1, 1, 0, -4707.91015625, -1226.0858154296875, 501.74273681640625, 2.146754980087280273, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(86163, 26123, 1, 1, 1, 0, 8701.7451171875, 962.31097412109375, 12.8077402114868164, 3.193952560424804687, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL);
|
||||
|
||||
-- new spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 26123) AND (`guid` IN (118));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(118, 26123, 0, 1, 1, 0, -8829.3544921875, 871.2298583984375, 98.76789093017578125, 4.537856101989746093, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL);
|
||||
|
||||
-- enable all spawns for eventEntry 1
|
||||
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 26123));
|
||||
INSERT INTO `game_event_creature` (SELECT 1, `guid` FROM `creature` WHERE `id1` = 26123);
|
||||
19
data/sql/updates/db_world/2024_02_03_01.sql
Normal file
19
data/sql/updates/db_world/2024_02_03_01.sql
Normal file
@@ -0,0 +1,19 @@
|
||||
-- DB update 2024_02_03_00 -> 2024_02_03_01
|
||||
-- Update creature 26124 'Midsummer Merchant' with sniffed values
|
||||
-- updated spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 26124) AND (`guid` IN (86179, 86224));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(86179, 26124, 0, 1, 1, 0, 1806.268798828125, 220.1627044677734375, 60.39253616333007812, 1.431169986724853515, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(86224, 26124, 1, 1, 1, 0, -1017.98272705078125, 307.571197509765625, 135.8292694091796875, 2.181661605834960937, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL);
|
||||
|
||||
-- new spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 26124) AND (`guid` IN (120));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(120, 26124, 530, 1, 1, 0, 9796.3671875, -7253.505859375, 26.25297164916992187, 5.113814830780029296, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL);
|
||||
|
||||
-- remaining spawns (no sniffed values available)
|
||||
-- (`guid` IN (86227))
|
||||
|
||||
-- enable all spawns for eventEntry 1
|
||||
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 26124));
|
||||
INSERT INTO `game_event_creature` (SELECT 1, `guid` FROM `creature` WHERE `id1` = 26124);
|
||||
11
data/sql/updates/db_world/2024_02_03_02.sql
Normal file
11
data/sql/updates/db_world/2024_02_03_02.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
-- DB update 2024_02_03_01 -> 2024_02_03_02
|
||||
-- Update creature 25980 'Heretic Bodyguard' with sniffed values
|
||||
-- updated spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 25980) AND (`guid` IN (90920, 91009));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(90920, 25980, 1, 1, 1, 0, 4198.93310546875, 1181.44873046875, 5.203701496124267578, 4.310963153839111328, 120, 0, 0, 0, 0, 0, "", 50172, 1, NULL),
|
||||
(91009, 25980, 1, 1, 1, 0, 4205.69384765625, 1174.2926025390625, 5.943501472473144531, 3.438298702239990234, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL);
|
||||
|
||||
-- enable all spawns for eventEntry 1
|
||||
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 25980));
|
||||
INSERT INTO `game_event_creature` (SELECT 1, `guid` FROM `creature` WHERE `id1` = 25980);
|
||||
10
data/sql/updates/db_world/2024_02_03_03.sql
Normal file
10
data/sql/updates/db_world/2024_02_03_03.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- DB update 2024_02_03_02 -> 2024_02_03_03
|
||||
-- Update creature 25951 'Heretic Emissary' with sniffed values
|
||||
-- updated spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 25951) AND (`guid` IN (86643));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(86643, 25951, 1, 1, 1, 0, 4199.23779296875, 1175.6844482421875, 6.156942367553710937, 3.787364482879638671, 120, 0, 0, 0, 0, 0, "", 50172, 1, NULL);
|
||||
|
||||
-- enable all spawns for eventEntry 1
|
||||
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 25951));
|
||||
INSERT INTO `game_event_creature` (SELECT 1, `guid` FROM `creature` WHERE `id1` = 25951);
|
||||
10
data/sql/updates/db_world/2024_02_03_04.sql
Normal file
10
data/sql/updates/db_world/2024_02_03_04.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- DB update 2024_02_03_03 -> 2024_02_03_04
|
||||
-- Update creature 25949 'Ice Caller Briatha' with sniffed values
|
||||
-- updated spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 25949) AND (`guid` IN (245627));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(245627, 25949, 1, 1, 1, 0, 4194.7880859375, 1171.5792236328125, 6.983758449554443359, 0.698131680488586425, 120, 0, 0, 0, 0, 0, "", 50172, 1, NULL);
|
||||
|
||||
-- enable all spawns for eventEntry 1
|
||||
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 25949));
|
||||
INSERT INTO `game_event_creature` (SELECT 1, `guid` FROM `creature` WHERE `id1` = 25949);
|
||||
22
data/sql/updates/db_world/2024_02_03_05.sql
Normal file
22
data/sql/updates/db_world/2024_02_03_05.sql
Normal file
@@ -0,0 +1,22 @@
|
||||
-- DB update 2024_02_03_04 -> 2024_02_03_05
|
||||
-- Update creature 26221 'Earthen Ring Elder' with sniffed values
|
||||
-- updated spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 26221) AND (`guid` IN (90494, 90495, 90496, 90498, 90499, 90508));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(90494, 26221, 1, 1, 1, 0, 8703.544921875, 958.0125732421875, 13.31546592712402343, 4.031710624694824218, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(90495, 26221, 0, 1, 1, 0, 1791.362060546875, 231.328125, 60.19393539428710937, 0.907571196556091308, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(90496, 26221, 1, 1, 1, 0, -1017.338623046875, 295.305572509765625, 135.8292694091796875, 3.96189737319946289, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(90498, 26221, 530, 1, 1, 0, -1740.58837890625, 5342.6611328125, -12.3448038101196289, 2.007128715515136718, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(90499, 26221, 0, 1, 1, 0, -4715.455078125, -1228.57177734375, 501.74273681640625, 1.588249564170837402, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(90508, 26221, 1, 1, 1, 0, 1911.9930419921875, -4331.91796875, 21.57311058044433593, 0.506145477294921875, 120, 0, 0, 0, 0, 0, "", 50172, 1, NULL);
|
||||
|
||||
-- new spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 26221) AND (`guid` IN (12458, 12459, 12460));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(12458, 26221, 0, 1, 1, 0, -8833.2255859375, 866.12738037109375, 98.8430023193359375, 5.532693862915039062, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(12459, 26221, 530, 1, 1, 0, -3794.848876953125, -11523.697265625, -134.993515014648437, 0.069813169538974761, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL),
|
||||
(12460, 26221, 530, 1, 1, 0, 9807.3046875, -7232.67626953125, 26.09997367858886718, 0.069813169538974761, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL);
|
||||
|
||||
-- enable all spawns for eventEntry 1
|
||||
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 26221));
|
||||
INSERT INTO `game_event_creature` (SELECT 1, `guid` FROM `creature` WHERE `id1` = 26221);
|
||||
3
data/sql/updates/db_world/2024_02_03_06.sql
Normal file
3
data/sql/updates/db_world/2024_02_03_06.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
-- DB update 2024_02_03_05 -> 2024_02_03_06
|
||||
-- Midsummer - disable unrelated debris spawns in front of the Exodar
|
||||
DELETE FROM `game_event_gameobject` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` from `gameobject` WHERE `id` IN (180698, 180699, 180700)));
|
||||
10
data/sql/updates/db_world/2024_02_03_07.sql
Normal file
10
data/sql/updates/db_world/2024_02_03_07.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- DB update 2024_02_03_06 -> 2024_02_03_07
|
||||
-- Fix Dalaran Toy Store Plane behaviour
|
||||
|
||||
-- Update creature 29802 'Cosmetic Toy Plane' with sniffed values
|
||||
DELETE FROM `creature` WHERE (`id1` = 29802) AND (`guid` IN (105492));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(105492, 29802, 571, 1, 1, 0, 5809.88818359375, 683.577880859375, 653.68585205078125, 5.602106094360351562, 120, 0, 0, 0, 0, 0, "", 52237, 1, NULL);
|
||||
|
||||
-- ScriptedAI
|
||||
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_cosmetic_toy_plane' WHERE (`entry` = 29802);
|
||||
8
data/sql/updates/db_world/2024_02_04_00.sql
Normal file
8
data/sql/updates/db_world/2024_02_04_00.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
-- DB update 2024_02_03_07 -> 2024_02_04_00
|
||||
--
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 22022;
|
||||
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` = 22022 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`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(22022, 0, 0, 1, 0, 0, 100, 1, 0, 0, 0, 0, 0, 0, 11, 34517, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Arcane Burst - IC - Cast \'Arcane Explosion\' (No repeat)'),
|
||||
(22022, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Arcane Burst - IC - Despawn');
|
||||
8
data/sql/updates/db_world/2024_02_04_01.sql
Normal file
8
data/sql/updates/db_world/2024_02_04_01.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
-- DB update 2024_02_04_00 -> 2024_02_04_01
|
||||
--
|
||||
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` IN (20060, 20062, 20063, 20064);
|
||||
|
||||
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_lord_sanguinar' WHERE `entry` = 20060;
|
||||
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_capernian' WHERE `entry` = 20062;
|
||||
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_telonicus' WHERE `entry` = 20063;
|
||||
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_thaladred' WHERE `entry` = 20064;
|
||||
4
data/sql/updates/db_world/2024_02_05_00.sql
Normal file
4
data/sql/updates/db_world/2024_02_05_00.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
-- DB update 2024_02_04_01 -> 2024_02_05_00
|
||||
-- reassign equipment_id to creatures 25949, 26221
|
||||
-- after spawns have been updated with sniffed values
|
||||
UPDATE `creature` SET `equipment_id` = 1 WHERE (`id1` IN (25949, 26221)) AND (`guid` IN (245627, 90494, 90495, 90496, 90498, 90499, 90508, 12458, 12459, 12460));
|
||||
10
data/sql/updates/db_world/2024_02_05_01.sql
Normal file
10
data/sql/updates/db_world/2024_02_05_01.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- DB update 2024_02_05_00 -> 2024_02_05_01
|
||||
-- Update creature 25924 'Twilight Speaker Viktor' with sniffed values
|
||||
-- updated spawns
|
||||
DELETE FROM `creature` WHERE (`id1` = 25924) AND (`guid` IN (245626));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
(245626, 25924, 1, 1, 1, 1, 3922.167236328125, 789.5479736328125, 9.14093780517578125, 0.78539818525314331, 120, 0, 0, 0, 0, 0, "", 50063, 1, NULL);
|
||||
|
||||
-- enable all spawns for eventEntry 1
|
||||
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 25924));
|
||||
INSERT INTO `game_event_creature` (SELECT 1, `guid` FROM `creature` WHERE `id1` = 25924);
|
||||
440
data/sql/updates/db_world/2024_02_05_02.sql
Normal file
440
data/sql/updates/db_world/2024_02_05_02.sql
Normal file
File diff suppressed because one or more lines are too long
14
data/sql/updates/db_world/2024_02_05_03.sql
Normal file
14
data/sql/updates/db_world/2024_02_05_03.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
-- DB update 2024_02_05_02 -> 2024_02_05_03
|
||||
-- Update 'Shaman Bonfire Bunny' spawns with sniffed values
|
||||
DELETE FROM `creature` WHERE (`id1` IN (25971, 25972, 25973)) AND (`guid` IN (245810, 245811, 245812));
|
||||
INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
|
||||
-- 'Shaman Bonfire Bunny 000'
|
||||
(245810, 25971, 547, 3, 1, 0, -143.17193603515625, -147.680130004882812, -3.16113066673278808, 4.852015495300292968, 7200, 0, 0, 0, 0, 0, "", 50172, 1, NULL),
|
||||
-- 'Shaman Bonfire Bunny 001'
|
||||
(245811, 25972, 547, 3, 1, 0, -134.30364990234375, -145.780303955078125, -1.70331764221191406, 4.677482128143310546, 7200, 0, 0, 0, 0, 0, "", 50172, 1, NULL),
|
||||
-- 'Shaman Bonfire Bunny 002'
|
||||
(245812, 25973, 547, 3, 1, 0, -125.035713195800781, -144.20654296875, -1.91659557819366455, 4.991641521453857421, 7200, 0, 0, 0, 0, 0, "", 50172, 1, NULL);
|
||||
|
||||
-- enable all spawns for eventEntry 1
|
||||
DELETE FROM `game_event_creature` WHERE (`eventEntry` = 1) AND (`guid` IN (SELECT `guid` FROM `creature` WHERE `id1` IN (25971, 25972, 25973)));
|
||||
INSERT INTO `game_event_creature` (SELECT 1, `guid` FROM `creature` WHERE `id1` IN (25971, 25972, 25973));
|
||||
9
data/sql/updates/db_world/2024_02_05_04.sql
Normal file
9
data/sql/updates/db_world/2024_02_05_04.sql
Normal file
@@ -0,0 +1,9 @@
|
||||
-- DB update 2024_02_05_03 -> 2024_02_05_04
|
||||
--
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` = 16530 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`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(16530, 0, 0, 0, 25, 0, 100, 512, 0, 0, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mana Warp - On Reset - Set HP Invincibility'),
|
||||
(16530, 0, 1, 0, 2, 0, 100, 513, 0, 10, 0, 0, 0, 0, 11, 37079, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mana Warp - Between Health 0-10% - Cast Warp Breach'),
|
||||
(16530, 0, 2, 0, 2, 0, 100, 513, 0, 10, 0, 0, 0, 0, 11, 29919, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mana Warp - Between Health 0-10% - Cast Warp Breach'),
|
||||
(16530, 0, 3, 0, 2, 0, 100, 513, 0, 10, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mana Warp - Between Health 0-10% - Set Event Phase'),
|
||||
(16530, 0, 4, 0, 0, 1, 100, 512, 2500, 2500, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mana Warp - In Combat - Die');
|
||||
@@ -9,7 +9,7 @@ version: '3'
|
||||
services:
|
||||
ac-database:
|
||||
container_name: ac-database
|
||||
image: mysql:8.0
|
||||
image: mysql:8.3
|
||||
networks:
|
||||
- ac-network
|
||||
ports:
|
||||
|
||||
@@ -2740,10 +2740,17 @@ Quests.IgnoreAutoAccept = 0
|
||||
|
||||
Quests.IgnoreAutoComplete = 0
|
||||
|
||||
#
|
||||
# Rate.RewardQuestMoney
|
||||
# Description: Allows to tweak the amount of money rewarded by quests (does not affect RewardBonusMoney).
|
||||
# Default: 1
|
||||
|
||||
Rate.RewardQuestMoney = 1
|
||||
|
||||
#
|
||||
# Rate.RewardBonusMoney
|
||||
# Description: Allows to further tweak the amount of extra money rewarded by quests when the player
|
||||
# is at MaxPlayerLevel (this amount is specified in quest_template.RewardBonusMoney).
|
||||
# is at MaxPlayerLevel.
|
||||
# Default: 1
|
||||
|
||||
Rate.RewardBonusMoney = 1
|
||||
|
||||
@@ -771,6 +771,14 @@ struct ItemPosCount
|
||||
};
|
||||
typedef std::vector<ItemPosCount> ItemPosCountVec;
|
||||
|
||||
struct SavedItem
|
||||
{
|
||||
Item* item;
|
||||
uint16 dstpos;
|
||||
|
||||
SavedItem(Item* _item, uint16 dstpos) : item(_item), dstpos(dstpos) {}
|
||||
};
|
||||
|
||||
enum TransferAbortReason
|
||||
{
|
||||
TRANSFER_ABORT_NONE = 0x00,
|
||||
|
||||
@@ -4413,27 +4413,27 @@ void ObjectMgr::LoadQuests()
|
||||
"ID, QuestType, QuestLevel, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, TimeAllowed, AllowableRaces,"
|
||||
// 9 10 11 12
|
||||
"RequiredFactionId1, RequiredFactionId2, RequiredFactionValue1, RequiredFactionValue2, "
|
||||
// 13 14 15 16 17 18 19 20 21
|
||||
"RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardMoneyDifficulty, RewardBonusMoney, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, "
|
||||
// 22 23 24 25 26 27
|
||||
// 13 14 15 16 17 18 19 20
|
||||
"RewardNextQuest, RewardXPDifficulty, RewardMoney, RewardMoneyDifficulty, RewardDisplaySpell, RewardSpell, RewardHonor, RewardKillHonor, "
|
||||
// 21 22 23 24 25 26
|
||||
"StartItem, Flags, RewardTitle, RequiredPlayerKills, RewardTalents, RewardArenaPoints, "
|
||||
// 28 29 30 31 32 33 34 35
|
||||
// 27 28 29 30 31 32 33 34
|
||||
"RewardItem1, RewardAmount1, RewardItem2, RewardAmount2, RewardItem3, RewardAmount3, RewardItem4, RewardAmount4, "
|
||||
// 36 37 38 39 40 41 42 43 44 45 46 47
|
||||
// 35 36 37 38 39 40 41 42 43 44 45 46
|
||||
"RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemID6, RewardChoiceItemQuantity6, "
|
||||
// 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
||||
// 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
||||
"RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionID5, RewardFactionValue5, RewardFactionOverride5,"
|
||||
// 62 64 65 66
|
||||
// 61 63 64 65
|
||||
"POIContinent, POIx, POIy, POIPriority, "
|
||||
// 67 68 69 70 71
|
||||
// 66 67 68 69 70
|
||||
"LogTitle, LogDescription, QuestDescription, AreaDescription, QuestCompletionLog, "
|
||||
// 72 73 74 75 76 77 78 79
|
||||
// 71 72 73 74 75 76 77 78
|
||||
"RequiredNpcOrGo1, RequiredNpcOrGo2, RequiredNpcOrGo3, RequiredNpcOrGo4, RequiredNpcOrGoCount1, RequiredNpcOrGoCount2, RequiredNpcOrGoCount3, RequiredNpcOrGoCount4, "
|
||||
// 80 81 82 83 84 85 86 87
|
||||
// 79 80 81 82 83 84 85 86
|
||||
"ItemDrop1, ItemDrop2, ItemDrop3, ItemDrop4, ItemDropQuantity1, ItemDropQuantity2, ItemDropQuantity3, ItemDropQuantity4, "
|
||||
// 88 89 90 91 92 93 94 95 96 97 98 99
|
||||
// 87 88 89 90 91 92 93 94 95 96 97 98
|
||||
"RequiredItemId1, RequiredItemId2, RequiredItemId3, RequiredItemId4, RequiredItemId5, RequiredItemId6, RequiredItemCount1, RequiredItemCount2, RequiredItemCount3, RequiredItemCount4, RequiredItemCount5, RequiredItemCount6, "
|
||||
// 100 101 102 103 104
|
||||
// 99 100 101 102 103
|
||||
"Unknown0, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4"
|
||||
" FROM quest_template");
|
||||
if (!result)
|
||||
|
||||
@@ -1799,6 +1799,8 @@ void WorldSession::HandleEquipmentSetUse(WorldPacket& recvData)
|
||||
{
|
||||
LOG_DEBUG("network", "CMSG_EQUIPMENT_SET_USE");
|
||||
|
||||
std::vector<std::unique_ptr<SavedItem>> savedItems;
|
||||
uint8 errorId = 0;
|
||||
for (uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i)
|
||||
{
|
||||
ObjectGuid itemGuid;
|
||||
@@ -1824,7 +1826,6 @@ void WorldSession::HandleEquipmentSetUse(WorldPacket& recvData)
|
||||
uint16 dstpos = i | (INVENTORY_SLOT_BAG_0 << 8);
|
||||
|
||||
InventoryResult msg;
|
||||
|
||||
Item* uItem = _player->GetItemByPos(INVENTORY_SLOT_BAG_0, i);
|
||||
if (uItem)
|
||||
{
|
||||
@@ -1844,11 +1845,19 @@ void WorldSession::HandleEquipmentSetUse(WorldPacket& recvData)
|
||||
msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, sDest, uItem, false);
|
||||
if (msg == EQUIP_ERR_OK)
|
||||
{
|
||||
savedItems.emplace_back(std::make_unique<SavedItem>(uItem, dstpos));
|
||||
_player->RemoveItem(INVENTORY_SLOT_BAG_0, i, true);
|
||||
_player->StoreItem(sDest, uItem, true);
|
||||
}
|
||||
else
|
||||
_player->SendEquipError(msg, uItem, nullptr);
|
||||
{
|
||||
errorId = 4;
|
||||
for (uint8_t j = 0; j < savedItems.size(); ++j)
|
||||
{
|
||||
_player->SwapItem(savedItems[j].get()->item->GetPos(), savedItems[j].get()->dstpos);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
@@ -1875,7 +1884,7 @@ void WorldSession::HandleEquipmentSetUse(WorldPacket& recvData)
|
||||
}
|
||||
|
||||
WorldPacket data(SMSG_EQUIPMENT_SET_USE_RESULT, 1);
|
||||
data << uint8(0); // 4 - equipment swap failed - inventory is full
|
||||
data << uint8(errorId); // 4 - equipment swap failed - inventory is full
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
|
||||
@@ -47,22 +47,21 @@ Quest::Quest(Field* questRecord)
|
||||
RewardXPDifficulty = questRecord[14].Get<uint8>();
|
||||
RewardMoney = questRecord[15].Get<int32>();
|
||||
RewardMoneyDifficulty = questRecord[16].Get<uint32>();
|
||||
RewardBonusMoney = questRecord[17].Get<uint32>();
|
||||
RewardDisplaySpell = questRecord[18].Get<uint32>();
|
||||
RewardSpell = questRecord[19].Get<int32>();
|
||||
RewardHonor = questRecord[20].Get<uint32>();
|
||||
RewardKillHonor = questRecord[21].Get<float>();
|
||||
StartItem = questRecord[22].Get<uint32>();
|
||||
Flags = questRecord[23].Get<uint32>();
|
||||
RewardTitleId = questRecord[24].Get<uint8>();
|
||||
RequiredPlayerKills = questRecord[25].Get<uint8>();
|
||||
RewardTalents = questRecord[26].Get<uint8>();
|
||||
RewardArenaPoints = questRecord[27].Get<uint16>();
|
||||
RewardDisplaySpell = questRecord[17].Get<uint32>();
|
||||
RewardSpell = questRecord[18].Get<int32>();
|
||||
RewardHonor = questRecord[19].Get<uint32>();
|
||||
RewardKillHonor = questRecord[20].Get<float>();
|
||||
StartItem = questRecord[21].Get<uint32>();
|
||||
Flags = questRecord[22].Get<uint32>();
|
||||
RewardTitleId = questRecord[23].Get<uint8>();
|
||||
RequiredPlayerKills = questRecord[24].Get<uint8>();
|
||||
RewardTalents = questRecord[25].Get<uint8>();
|
||||
RewardArenaPoints = questRecord[26].Get<uint16>();
|
||||
|
||||
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||
{
|
||||
RewardItemId[i] = questRecord[28 + i * 2].Get<uint32>();
|
||||
RewardItemIdCount[i] = questRecord[29 + i * 2].Get<uint16>();
|
||||
RewardItemId[i] = questRecord[27 + i * 2].Get<uint32>();
|
||||
RewardItemIdCount[i] = questRecord[28 + i * 2].Get<uint16>();
|
||||
|
||||
if (RewardItemId[i])
|
||||
++_rewItemsCount;
|
||||
@@ -70,8 +69,8 @@ Quest::Quest(Field* questRecord)
|
||||
|
||||
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||
{
|
||||
RewardChoiceItemId[i] = questRecord[36 + i * 2].Get<uint32>();
|
||||
RewardChoiceItemCount[i] = questRecord[37 + i * 2].Get<uint16>();
|
||||
RewardChoiceItemId[i] = questRecord[35 + i * 2].Get<uint32>();
|
||||
RewardChoiceItemCount[i] = questRecord[36 + i * 2].Get<uint16>();
|
||||
|
||||
if (RewardChoiceItemId[i])
|
||||
++_rewChoiceItemsCount;
|
||||
@@ -79,26 +78,26 @@ Quest::Quest(Field* questRecord)
|
||||
|
||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||
{
|
||||
RewardFactionId[i] = questRecord[48 + i * 3].Get<uint16>();
|
||||
RewardFactionValueId[i] = questRecord[49 + i * 3].Get<int32>();
|
||||
RewardFactionValueIdOverride[i] = questRecord[50 + i * 3].Get<int32>();
|
||||
RewardFactionId[i] = questRecord[47 + i * 3].Get<uint16>();
|
||||
RewardFactionValueId[i] = questRecord[48 + i * 3].Get<int32>();
|
||||
RewardFactionValueIdOverride[i] = questRecord[49 + i * 3].Get<int32>();
|
||||
}
|
||||
|
||||
POIContinent = questRecord[63].Get<uint16>();
|
||||
POIx = questRecord[64].Get<float>();
|
||||
POIy = questRecord[65].Get<float>();
|
||||
POIPriority = questRecord[66].Get<uint32>();
|
||||
Title = questRecord[67].Get<std::string>();
|
||||
Objectives = questRecord[68].Get<std::string>();
|
||||
Details = questRecord[69].Get<std::string>();
|
||||
AreaDescription = questRecord[70].Get<std::string>();
|
||||
CompletedText = questRecord[71].Get<std::string>();
|
||||
POIContinent = questRecord[62].Get<uint16>();
|
||||
POIx = questRecord[63].Get<float>();
|
||||
POIy = questRecord[64].Get<float>();
|
||||
POIPriority = questRecord[65].Get<uint32>();
|
||||
Title = questRecord[66].Get<std::string>();
|
||||
Objectives = questRecord[67].Get<std::string>();
|
||||
Details = questRecord[68].Get<std::string>();
|
||||
AreaDescription = questRecord[69].Get<std::string>();
|
||||
CompletedText = questRecord[70].Get<std::string>();
|
||||
|
||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||
{
|
||||
RequiredNpcOrGo[i] = questRecord[72 + i].Get<int32>();
|
||||
RequiredNpcOrGoCount[i] = questRecord[76 + i].Get<uint16>();
|
||||
ObjectiveText[i] = questRecord[101 + i].Get<std::string>();
|
||||
RequiredNpcOrGo[i] = questRecord[71 + i].Get<int32>();
|
||||
RequiredNpcOrGoCount[i] = questRecord[75 + i].Get<uint16>();
|
||||
ObjectiveText[i] = questRecord[100 + i].Get<std::string>();
|
||||
|
||||
if (RequiredNpcOrGo[i])
|
||||
++_reqCreatureOrGOcount;
|
||||
@@ -106,14 +105,14 @@ Quest::Quest(Field* questRecord)
|
||||
|
||||
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
||||
{
|
||||
ItemDrop[i] = questRecord[80 + i].Get<uint32>();
|
||||
ItemDropQuantity[i] = questRecord[84 + i].Get<uint16>();
|
||||
ItemDrop[i] = questRecord[79 + i].Get<uint32>();
|
||||
ItemDropQuantity[i] = questRecord[83 + i].Get<uint16>();
|
||||
}
|
||||
|
||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||
{
|
||||
RequiredItemId[i] = questRecord[88 + i].Get<uint32>();
|
||||
RequiredItemCount[i] = questRecord[94 + i].Get<uint16>();
|
||||
RequiredItemId[i] = questRecord[87 + i].Get<uint32>();
|
||||
RequiredItemCount[i] = questRecord[93 + i].Get<uint16>();
|
||||
|
||||
if (RequiredItemId[i])
|
||||
++_reqItemsCount;
|
||||
@@ -252,15 +251,19 @@ int32 Quest::GetRewOrReqMoney(uint8 playerLevel) const
|
||||
}
|
||||
}
|
||||
|
||||
return static_cast<int32>(rewardedMoney * sWorld->getRate(RATE_REWARD_BONUS_MONEY));
|
||||
return static_cast<int32>(rewardedMoney * sWorld->getRate(RATE_REWARD_QUEST_MONEY));
|
||||
}
|
||||
|
||||
uint32 Quest::GetRewMoneyMaxLevel() const
|
||||
{
|
||||
if (HasFlag(QUEST_FLAGS_NO_MONEY_FROM_XP))
|
||||
return 0;
|
||||
uint32 rewMoney = 0;
|
||||
|
||||
return static_cast<int32>(RewardBonusMoney * sWorld->getRate(RATE_REWARD_BONUS_MONEY));
|
||||
if (HasFlag(QUEST_FLAGS_NO_MONEY_FROM_XP))
|
||||
return rewMoney;
|
||||
|
||||
rewMoney = (XPValue(sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) * (6 * COPPER));
|
||||
// https://wowpedia.fandom.com/wiki/Quest?oldid=1035002 Formula is XP gained * 6c
|
||||
return static_cast<int32>(rewMoney * sWorld->getRate(RATE_REWARD_BONUS_MONEY));
|
||||
}
|
||||
|
||||
bool Quest::IsAutoAccept() const
|
||||
|
||||
@@ -371,7 +371,6 @@ protected:
|
||||
float RewardKillHonor;
|
||||
int32 RewardMoney;
|
||||
uint32 RewardMoneyDifficulty;
|
||||
uint32 RewardBonusMoney;
|
||||
uint32 RewardDisplaySpell;
|
||||
int32 RewardSpell;
|
||||
uint32 POIContinent;
|
||||
|
||||
@@ -4699,7 +4699,7 @@ void Spell::SendSpellStart()
|
||||
|
||||
uint32 castFlags = CAST_FLAG_HAS_TRAJECTORY;
|
||||
|
||||
if (((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell) && !m_cast_count && !m_spellInfo->IsChanneled())
|
||||
if (((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell) && !m_cast_count && !(m_spellInfo->IsChanneled() || m_spellInfo->CastTimeEntry->CastTime > 0))
|
||||
castFlags |= CAST_FLAG_PENDING;
|
||||
|
||||
if (m_spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT) || m_spellInfo->HasAttribute(SPELL_ATTR0_CU_NEEDS_AMMO_DATA))
|
||||
@@ -4781,7 +4781,7 @@ void Spell::SendSpellGo()
|
||||
uint32 castFlags = CAST_FLAG_UNKNOWN_9;
|
||||
|
||||
// triggered spells with spell visual != 0
|
||||
if (((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell) && !m_cast_count && !m_spellInfo->IsChanneled())
|
||||
if (((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell) && !m_cast_count && !(m_spellInfo->IsChanneled() || m_spellInfo->CastTimeEntry->CastTime > 0))
|
||||
castFlags |= CAST_FLAG_PENDING;
|
||||
|
||||
if (m_spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT) || m_spellInfo->HasAttribute(SPELL_ATTR0_CU_NEEDS_AMMO_DATA))
|
||||
|
||||
@@ -460,6 +460,7 @@ enum Rates
|
||||
RATE_BUYVALUE_ITEM_ARTIFACT,
|
||||
RATE_BUYVALUE_ITEM_HEIRLOOM,
|
||||
RATE_DROP_MONEY,
|
||||
RATE_REWARD_QUEST_MONEY,
|
||||
RATE_REWARD_BONUS_MONEY,
|
||||
RATE_XP_KILL,
|
||||
RATE_XP_BG_KILL_AV,
|
||||
|
||||
@@ -495,6 +495,7 @@ void World::LoadConfigSettings(bool reload)
|
||||
_rate_values[RATE_DROP_ITEM_GROUP_AMOUNT] = sConfigMgr->GetOption<float>("Rate.Drop.Item.GroupAmount", 1.0f);
|
||||
_rate_values[RATE_DROP_MONEY] = sConfigMgr->GetOption<float>("Rate.Drop.Money", 1.0f);
|
||||
|
||||
_rate_values[RATE_REWARD_QUEST_MONEY] = sConfigMgr->GetOption<float>("Rate.RewardQuestMoney", 1.0f);
|
||||
_rate_values[RATE_REWARD_BONUS_MONEY] = sConfigMgr->GetOption<float>("Rate.RewardBonusMoney", 1.0f);
|
||||
_rate_values[RATE_XP_KILL] = sConfigMgr->GetOption<float>("Rate.XP.Kill", 1.0f);
|
||||
_rate_values[RATE_XP_BG_KILL_AV] = sConfigMgr->GetOption<float>("Rate.XP.BattlegroundKillAV", 1.0f);
|
||||
|
||||
@@ -485,6 +485,27 @@ struct npc_midsummer_torch_target : public ScriptedAI
|
||||
// SPELLS
|
||||
///////////////////////////////
|
||||
|
||||
class spell_fire_festival_fortitude : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_fire_festival_fortitude)
|
||||
|
||||
void SelectTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.clear();
|
||||
|
||||
GetCaster()->GetMap()->DoForAllPlayers([&](Player* p)
|
||||
{
|
||||
if (p->GetZoneId() == GetCaster()->GetZoneId())
|
||||
targets.push_back(p);
|
||||
});
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_fire_festival_fortitude::SelectTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_bonfires_blessing : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_bonfires_blessing)
|
||||
@@ -1249,6 +1270,7 @@ void AddSC_event_midsummer_scripts()
|
||||
RegisterCreatureAI(npc_midsummer_ribbon_pole_target);
|
||||
|
||||
// Spells
|
||||
RegisterSpellScript(spell_fire_festival_fortitude);
|
||||
RegisterSpellScript(spell_bonfires_blessing);
|
||||
RegisterSpellScript(spell_gen_crab_disguise);
|
||||
RegisterSpellScript(spell_midsummer_ribbon_pole_firework);
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
#include "CreatureScript.h"
|
||||
#include "Player.h"
|
||||
#include "MoveSplineInit.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptedGossip.h"
|
||||
#include "World.h"
|
||||
@@ -795,6 +796,61 @@ public:
|
||||
};
|
||||
};
|
||||
|
||||
enum ToyPlane
|
||||
{
|
||||
NPC_DND_DALARAN_TOY_STORE_PLANE_STRING_HOOK = 29807,
|
||||
|
||||
SPELL_TOY_PLANE_CABLE = 55281,
|
||||
};
|
||||
|
||||
struct npc_cosmetic_toy_plane : public ScriptedAI
|
||||
{
|
||||
npc_cosmetic_toy_plane(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
Movement::MoveSplineInit init(me);
|
||||
init.MovebyPath(_movementArray);
|
||||
init.SetFly();
|
||||
init.SetCyclic();
|
||||
// one full loop is 10.76 seconds (sniffed value)
|
||||
// loop diameter is approx. 9.225f (calculated from waypoints below)
|
||||
// with a circumference of approx. 28.98f
|
||||
// this results in flying speed of approx. 2.7f
|
||||
init.SetVelocity(2.7f);
|
||||
init.Launch();
|
||||
|
||||
scheduler.Schedule(420ms, [this](TaskContext context)
|
||||
{
|
||||
if (Creature* cr = me->FindNearestCreature(NPC_DND_DALARAN_TOY_STORE_PLANE_STRING_HOOK, 42.0f))
|
||||
DoCast(cr, SPELL_TOY_PLANE_CABLE, true);
|
||||
else
|
||||
context.Repeat();
|
||||
});
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
scheduler.Update(diff);
|
||||
}
|
||||
|
||||
private:
|
||||
Movement::PointsArray const _movementArray = {
|
||||
// cyclic movementspine unfortunately includes spawn into loop
|
||||
// which results in an imperfect loop right now
|
||||
// CO1 SPAWN(5809.888, 683.5779, 653.6859)
|
||||
G3D::Vector3(5813.709, 682.51855, 653.6033),
|
||||
G3D::Vector3(5816.815, 684.8459, 653.5755),
|
||||
G3D::Vector3(5817.1997, 688.83527, 653.631),
|
||||
G3D::Vector3(5814.235, 691.6307, 653.6587),
|
||||
G3D::Vector3(5809.9287, 690.98224, 653.7697),
|
||||
G3D::Vector3(5808.225, 687.1498, 653.6322),
|
||||
G3D::Vector3(5809.8423, 683.6158, 653.6862),
|
||||
};
|
||||
};
|
||||
|
||||
void AddSC_dalaran()
|
||||
{
|
||||
// our
|
||||
@@ -804,6 +860,7 @@ void AddSC_dalaran()
|
||||
new npc_archmage_landalock();
|
||||
new npc_dalaran_mage();
|
||||
new npc_dalaran_warrior();
|
||||
RegisterCreatureAI(npc_cosmetic_toy_plane);
|
||||
|
||||
// theirs
|
||||
new npc_mageguard_dalaran();
|
||||
|
||||
@@ -86,6 +86,7 @@ struct boss_lady_vashj : public BossAI
|
||||
_count = 0;
|
||||
_recentlySpoken = false;
|
||||
_batTimer = 20s;
|
||||
_playerAngle = 0.0f;
|
||||
BossAI::Reset();
|
||||
|
||||
ScheduleHealthCheckEvent(70, [&]{
|
||||
@@ -180,7 +181,12 @@ struct boss_lady_vashj : public BossAI
|
||||
scheduler.CancelAll();
|
||||
scheduler.Schedule(2400ms, [this](TaskContext context)
|
||||
{
|
||||
DoCastRandomTarget(SPELL_FORKED_LIGHTNING);
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
{
|
||||
_playerAngle = me->GetAngle(target);
|
||||
me->SetOrientation(_playerAngle);
|
||||
DoCast(target, SPELL_FORKED_LIGHTNING);
|
||||
}
|
||||
context.Repeat(2400ms, 12450ms);
|
||||
}).Schedule(0s, [this](TaskContext context)
|
||||
{
|
||||
@@ -258,6 +264,7 @@ struct boss_lady_vashj : public BossAI
|
||||
}
|
||||
|
||||
private:
|
||||
float _playerAngle;
|
||||
bool _recentlySpoken;
|
||||
bool _intro;
|
||||
int32 _count;
|
||||
|
||||
@@ -45,7 +45,12 @@ enum Yells
|
||||
SAY_THALADRED_AGGRO = 0,
|
||||
SAY_SANGUINAR_AGGRO = 0,
|
||||
SAY_CAPERNIAN_AGGRO = 0,
|
||||
SAY_TELONICUS_AGGRO = 0
|
||||
SAY_TELONICUS_AGGRO = 0,
|
||||
SAY_THALADRED_DEATH = 1,
|
||||
SAY_SANGUINAR_DEATH = 1,
|
||||
SAY_CAPERNIAN_DEATH = 1,
|
||||
SAY_TELONICUS_DEATH = 1,
|
||||
EMOTE_THALADRED_FIXATE = 2
|
||||
};
|
||||
|
||||
enum Spells
|
||||
@@ -103,7 +108,28 @@ enum Spells
|
||||
SPELL_NETHER_BEAM = 35869,
|
||||
SPELL_NETHER_BEAM_DAMAGE = 35873,
|
||||
|
||||
SPELL_REMOTE_TOY_STUN = 37029
|
||||
SPELL_REMOTE_TOY_STUN = 37029,
|
||||
|
||||
// Advisors
|
||||
// Universal
|
||||
SPELL_KAEL_PHASE_TWO = 36709,
|
||||
|
||||
// Sanguinar
|
||||
SPELL_BELLOWING_ROAR = 44863,
|
||||
|
||||
// Capernian
|
||||
SPELL_CAPERNIAN_FIREBALL = 36971,
|
||||
SPELL_CONFLAGRATION = 37018,
|
||||
SPELL_ARCANE_BURST = 36970,
|
||||
|
||||
// Telonicus
|
||||
SPELL_BOMB = 37036,
|
||||
SPELL_REMOTE_TOY = 37027,
|
||||
|
||||
// Thaladred
|
||||
SPELL_PSYCHIC_BLOW = 36966,
|
||||
SPELL_REND = 36965,
|
||||
SPELL_SILENCE = 30225
|
||||
};
|
||||
|
||||
enum Misc
|
||||
@@ -721,6 +747,204 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
struct npc_lord_sanguinar : public ScriptedAI
|
||||
{
|
||||
npc_lord_sanguinar(Creature* creature) : ScriptedAI(creature) {
|
||||
scheduler.SetValidator([this]
|
||||
{
|
||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||
});
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
scheduler.CancelAll();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
ScheduleTimedEvent(0s, [&]{
|
||||
DoCastSelf(SPELL_BELLOWING_ROAR);
|
||||
}, 15s);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_SANGUINAR_DEATH);
|
||||
DoCastSelf(SPELL_KAEL_PHASE_TWO, true);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
struct npc_capernian : public ScriptedAI
|
||||
{
|
||||
npc_capernian(Creature* creature) : ScriptedAI(creature) {
|
||||
scheduler.SetValidator([this]
|
||||
{
|
||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||
});
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
scheduler.CancelAll();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
ScheduleTimedEvent(0ms, [&]{
|
||||
DoCastVictim(SPELL_CAPERNIAN_FIREBALL);
|
||||
}, 2500ms);
|
||||
ScheduleTimedEvent(7000ms, 10000ms, [&]{
|
||||
DoCastRandomTarget(SPELL_CONFLAGRATION, 0, 30.0f);
|
||||
}, 18500ms, 20500ms);
|
||||
ScheduleTimedEvent(3s, [&]{
|
||||
DoCastRandomTarget(SPELL_ARCANE_BURST, 0, 8.0f);
|
||||
}, 6s);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_CAPERNIAN_DEATH);
|
||||
DoCastSelf(SPELL_KAEL_PHASE_TWO, true);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
struct npc_telonicus : public ScriptedAI
|
||||
{
|
||||
npc_telonicus(Creature* creature) : ScriptedAI(creature) {
|
||||
scheduler.SetValidator([this]
|
||||
{
|
||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||
});
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
scheduler.CancelAll();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
ScheduleTimedEvent(0ms, [&]{
|
||||
DoCastVictim(SPELL_BOMB);
|
||||
}, 3600ms, 7100ms);
|
||||
ScheduleTimedEvent(13250ms, [&]{
|
||||
DoCastRandomTarget(SPELL_CONFLAGRATION, 0, 100.0f);
|
||||
}, 15750ms);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_TELONICUS_DEATH);
|
||||
DoCastSelf(SPELL_KAEL_PHASE_TWO, true);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
struct npc_thaladred : public ScriptedAI
|
||||
{
|
||||
npc_thaladred(Creature* creature) : ScriptedAI(creature) {
|
||||
scheduler.SetValidator([this]
|
||||
{
|
||||
return !me->HasUnitState(UNIT_STATE_CASTING);
|
||||
});
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
scheduler.CancelAll();
|
||||
me->SetWalk(true);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
ScheduleTimedEvent(100ms, [&]
|
||||
{
|
||||
DoResetThreatList();
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
{
|
||||
me->AddThreat(target, 10000000.0f);
|
||||
Talk(EMOTE_THALADRED_FIXATE, target);
|
||||
}
|
||||
}, 10000ms);
|
||||
ScheduleTimedEvent(4000ms, 19350ms, [&]
|
||||
{
|
||||
DoCastVictim(SPELL_PSYCHIC_BLOW);
|
||||
}, 15700ms, 48900ms);
|
||||
ScheduleTimedEvent(3000ms, 6050ms, [&]
|
||||
{
|
||||
DoCastVictim(SPELL_REND);
|
||||
}, 15700ms, 48900ms);
|
||||
ScheduleTimedEvent(3000ms,6050ms, [&]
|
||||
{
|
||||
if (Unit* victim = me->GetVictim())
|
||||
{
|
||||
if (victim->IsNonMeleeSpellCast(false, false, true))
|
||||
{
|
||||
DoCastVictim(SPELL_SILENCE);
|
||||
}
|
||||
}
|
||||
}, 3600ms, 15200ms);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
Talk(SAY_THALADRED_DEATH);
|
||||
DoCastSelf(SPELL_KAEL_PHASE_TWO, true);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
scheduler.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_kaelthas_kael_phase_two : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -1052,6 +1276,10 @@ public:
|
||||
void AddSC_boss_kaelthas()
|
||||
{
|
||||
new boss_kaelthas();
|
||||
RegisterTheEyeAI(npc_lord_sanguinar);
|
||||
RegisterTheEyeAI(npc_capernian);
|
||||
RegisterTheEyeAI(npc_telonicus);
|
||||
RegisterTheEyeAI(npc_thaladred);
|
||||
new spell_kaelthas_kael_phase_two();
|
||||
new spell_kaelthas_remote_toy();
|
||||
new spell_kaelthas_summon_weapons();
|
||||
|
||||
Reference in New Issue
Block a user