latest github pull

This commit is contained in:
mikx 2025-03-24 23:55:55 -04:00
parent e87efbaf6e
commit 6c74f37aee
72 changed files with 2934 additions and 382 deletions

1
.gitignore vendored
View File

@ -4,6 +4,7 @@
/conf/*
!/conf/dist
/modules/*
!/modules/*.md
!/modules/*.sh
!/modules/CMakeLists.txt

View File

@ -7,8 +7,7 @@ git clone --depth=1 --branch=master https://github.com/azerothcore/mod-1v1-arena
git clone --depth=1 --branch=master https://github.com/azerothcore/mod-account-mounts modules/mod-account-mounts
git clone --depth=1 --branch=master https://github.com/azerothcore/mod-ah-bot modules/mod-ah-bot
git clone --depth=1 --branch=master https://github.com/azerothcore/mod-anticheat modules/mod-anticheat
# NOTE: disabled because it does not compile right now with latest AC
# git clone --depth=1 --branch=master https://github.com/azerothcore/mod-antifarming modules/mod-antifarming
git clone --depth=1 --branch=master https://github.com/azerothcore/mod-antifarming modules/mod-antifarming
git clone --depth=1 --branch=master https://github.com/azerothcore/mod-arena-3v3-solo-queue modules/mod-arena-3v3-solo-queue
git clone --depth=1 --branch=main https://github.com/azerothcore/mod-arena-replay modules/mod-arena-replay
git clone --depth=1 --branch=master https://github.com/azerothcore/mod-auto-revive modules/mod-auto-revive

View File

@ -0,0 +1,66 @@
-- DB update 2025_02_16_00 -> 2025_03_09_00
--
DROP TABLE IF EXISTS `mail_server_template_items`;
CREATE TABLE `mail_server_template_items` (
`id` INT UNSIGNED AUTO_INCREMENT,
`templateID` INT UNSIGNED NOT NULL,
`faction` ENUM('Alliance', 'Horde') NOT NULL,
`item` INT UNSIGNED NOT NULL,
`itemCount` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_mail_template`
FOREIGN KEY (`templateID`) REFERENCES `mail_server_template`(`id`)
ON DELETE CASCADE
) ENGINE=InnoDB COLLATE='utf8mb4_unicode_ci';
DELETE FROM `mail_server_template_items` WHERE `faction` = 'Alliance';
INSERT INTO `mail_server_template_items` (`templateID`, `faction`, `item`, `itemCount`)
SELECT `id`, 'Alliance', `itemA`, `itemCountA` FROM `mail_server_template` WHERE `itemA` > 0;
DELETE FROM `mail_server_template_items` WHERE `faction` = 'Horde';
INSERT INTO `mail_server_template_items` (`templateID`, `faction`, `item`, `itemCount`)
SELECT `id`, 'Horde', `itemH`, `itemCountH` FROM `mail_server_template` WHERE `itemH` > 0;
ALTER TABLE `mail_server_template`
DROP COLUMN `itemA`,
DROP COLUMN `itemCountA`,
DROP COLUMN `itemH`,
DROP COLUMN `itemCountH`;
-- mail_server_template_conditions
DROP TABLE IF EXISTS `mail_server_template_conditions`;
CREATE TABLE `mail_server_template_conditions` (
`id` INT UNSIGNED AUTO_INCREMENT,
`templateID` INT UNSIGNED NOT NULL,
`conditionType` ENUM('Level', 'PlayTime', 'Quest', 'Achievement', 'Reputation', 'Faction', 'Race', 'Class') NOT NULL,
`conditionValue` INT UNSIGNED NOT NULL,
`conditionState` INT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
CONSTRAINT `fk_mail_template_conditions`
FOREIGN KEY (`templateID`) REFERENCES `mail_server_template`(`id`)
ON DELETE CASCADE
) ENGINE=InnoDB COLLATE='utf8mb4_unicode_ci';
DELETE FROM `mail_server_template_conditions` WHERE `conditionType` = 'Level';
INSERT INTO `mail_server_template_conditions` (`templateID`, `conditionType`, `conditionValue`)
SELECT `id`, 'Level', `reqLevel` FROM `mail_server_template` WHERE `reqLevel` > 0;
DELETE FROM `mail_server_template_conditions` WHERE `conditionType` = 'PlayTime';
INSERT INTO `mail_server_template_conditions` (`templateID`, `conditionType`, `conditionValue`)
SELECT `id`, 'PlayTime', `reqPlayTime` FROM `mail_server_template` WHERE `reqPlayTime` > 0;
ALTER TABLE `mail_server_template`
DROP COLUMN `reqLevel`,
DROP COLUMN `reqPlayTime`;
-- mail_server_character
-- Make sure we dont have invalid instances in mail_server_character.mailId before we add the foregin key to avoid SQL errors
DELETE FROM `mail_server_character` WHERE `mailId` NOT IN (SELECT `id` FROM `mail_server_template`);
-- Add foreign key for mail_server_character.mailId
ALTER TABLE `mail_server_character`
DROP PRIMARY KEY,
ADD PRIMARY KEY (`guid`, `mailId`),
ADD CONSTRAINT `fk_mail_server_character`
FOREIGN KEY (`mailId`) REFERENCES `mail_server_template`(`id`)
ON DELETE CASCADE;

View File

@ -0,0 +1,4 @@
-- DB update 2025_03_03_01 -> 2025_03_05_00
--
DELETE FROM `spell_script_names` WHERE `spell_id`=63342;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (63342, 'spell_kologarn_focused_eyebeam');

View File

@ -0,0 +1,207 @@
-- DB update 2025_03_05_00 -> 2025_03_06_00
-- Update gameobject 'Isle Daily Gobs' with sniffed values
-- updated spawns
DELETE FROM `gameobject` WHERE (`id` IN (187333))
AND (`guid` IN (27803));
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`, `Comment`) VALUES
(27803, 187333, 530, 0, 0, 1, 1, 12910.3193359375, -6567.92822265625, 10.82435512542724609, 0, 0, 0, 0, 1, 120, 255, 1, "", 48120, NULL);
-- new spawns
DELETE FROM `gameobject` WHERE (`id` IN (187073, 187264, 187333))
AND (`guid` BETWEEN 19843 AND 20034);
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`, `Comment`) VALUES
(19843, 187073, 530, 0, 0, 1, 1, -1162.2789306640625, 4630.9892578125, 193.081756591796875, 0.453785061836242675, 0, 0, 0.224950790405273437, 0.974370121955871582, 120, 255, 1, "", 45942, NULL),
(19844, 187073, 530, 0, 0, 1, 1, -1172.236083984375, 4579.08056640625, 200.7605743408203125, 2.914689540863037109, 0, 0, 0.993571281433105468, 0.113208353519439697, 120, 255, 1, "", 45942, NULL),
(19845, 187073, 530, 0, 0, 1, 1, -1172.7252197265625, 4556.072265625, 200.3797760009765625, 2.111847877502441406, 0, 0, 0.870355606079101562, 0.492423713207244873, 120, 255, 1, "", 45942, NULL),
(19846, 187073, 530, 0, 0, 1, 1, -1176.251708984375, 4648.34521484375, 192.1477813720703125, 1.884953022003173828, 0, 0, 0.809016227722167968, 0.587786316871643066, 120, 255, 1, "", 45942, NULL),
(19847, 187073, 530, 0, 0, 1, 1, -1194.086181640625, 4627.57275390625, 195.74859619140625, 0.383971005678176879, 0, 0, 0.190808296203613281, 0.981627285480499267, 120, 255, 1, "", 45942, NULL),
(19848, 187073, 530, 0, 0, 1, 1, -1198.1180419921875, 4527.88232421875, 201.535552978515625, 4.625123500823974609, 0, 0, -0.73727703094482421, 0.67559051513671875, 120, 255, 1, "", 45942, NULL),
(19849, 187073, 530, 0, 0, 1, 1, -1227.56884765625, 4489.33447265625, 212.647125244140625, 4.939284324645996093, 0, 0, -0.6225137710571289, 0.78260880708694458, 120, 255, 1, "", 45942, NULL),
(19850, 187073, 530, 0, 0, 1, 1, -1227.685546875, 4503.8671875, 212.6672210693359375, 5.724681377410888671, 0, 0, -0.27563667297363281, 0.961261868476867675, 120, 255, 1, "", 45942, NULL),
(19851, 187073, 530, 0, 0, 1, 1, -1230.0347900390625, 4556.8310546875, 204.0975494384765625, 0.418878614902496337, 0, 0, 0.207911491394042968, 0.978147625923156738, 120, 255, 1, "", 45942, NULL),
(19852, 187073, 530, 0, 0, 1, 1, -1238.1119384765625, 4525.22314453125, 204.7035675048828125, 1.518436193466186523, 0, 0, 0.6883544921875, 0.725374460220336914, 120, 255, 1, "", 45942, NULL),
(19853, 187073, 530, 0, 0, 1, 1, -1246.969970703125, 4468.53173828125, 208.637542724609375, 5.532694816589355468, 0, 0, -0.3665008544921875, 0.93041771650314331, 120, 255, 1, "", 45942, NULL),
(19854, 187073, 530, 0, 0, 1, 1, -1248.16796875, 4568.56982421875, 202.965972900390625, 6.213373661041259765, 0, 0, -0.03489875793457031, 0.999390840530395507, 120, 255, 1, "", 45942, NULL),
(19855, 187073, 530, 0, 0, 1, 1, -1280.2791748046875, 4441.75048828125, 218.9994049072265625, 1.727874636650085449, 0, 0, 0.760405540466308593, 0.649448513984680175, 120, 255, 1, "", 45942, NULL),
(19856, 187073, 530, 0, 0, 1, 1, -1287.0699462890625, 4493.39599609375, 215.1161651611328125, 3.089183330535888671, 0, 0, 0.99965667724609375, 0.026201646775007247, 120, 255, 1, "", 45942, NULL),
(19857, 187073, 530, 0, 0, 1, 1, -1305.69775390625, 4473.02587890625, 214.4437408447265625, 1.029743075370788574, 0, 0, 0.492423057556152343, 0.870355963706970214, 120, 255, 1, "", 45942, NULL),
(19858, 187073, 530, 0, 0, 1, 1, -1314.765380859375, 4450.0751953125, 217.0588531494140625, 5.619962215423583984, 0, 0, -0.32556724548339843, 0.945518851280212402, 120, 255, 1, "", 48632, NULL),
(19859, 187073, 530, 0, 0, 1, 1, -1316.218994140625, 4418.5146484375, 222.8825225830078125, 4.206246376037597656, 0, 0, -0.86162853240966796, 0.50753939151763916, 120, 255, 1, "", 49345, NULL),
(19860, 187073, 530, 0, 0, 1, 1, -1350.197998046875, 3802.38671875, 219.3433837890625, 1.675513744354248046, 0, 0, 0.743144035339355468, 0.669131457805633544, 120, 255, 1, "", 50250, NULL),
(19861, 187073, 530, 0, 0, 1, 1, -1355.8775634765625, 3785.59765625, 219.3433837890625, 1.099556446075439453, 0, 0, 0.522498130798339843, 0.852640450000762939, 120, 255, 1, "", 50250, NULL),
(19862, 187073, 530, 0, 0, 1, 1, -1377.953125, 3850.828125, 216.5886383056640625, 3.543023586273193359, 0, 0, -0.97992420196533203, 0.199370384216308593, 120, 255, 1, "", 50250, NULL),
(19863, 187073, 530, 0, 0, 1, 1, -1400.7232666015625, 3800.54345703125, 213.5907135009765625, 6.195919513702392578, 0, 0, -0.04361915588378906, 0.999048233032226562, 120, 255, 1, "", 50250, NULL),
(19864, 187073, 530, 0, 0, 1, 1, -1400.88671875, 3881.09375, 215.58966064453125, 1.431168079376220703, 0, 0, 0.656058311462402343, 0.754710197448730468, 120, 255, 1, "", 50250, NULL),
(19865, 187073, 530, 0, 0, 1, 1, -1434.384033203125, 3858.221435546875, 211.0352935791015625, 6.021387100219726562, 0, 0, -0.13052558898925781, 0.991444945335388183, 120, 255, 1, "", 50250, NULL),
(19866, 187073, 530, 0, 0, 1, 1, -1438.3541259765625, 3925.29638671875, 221.0071258544921875, 1.343901276588439941, 0, 0, 0.622513771057128906, 0.78260880708694458, 120, 255, 1, "", 50250, NULL),
(19867, 187073, 530, 0, 0, 1, 1, -1440.23876953125, 3844.983642578125, 213.5771331787109375, 0.471238493919372558, 0, 0, 0.233445167541503906, 0.972369968891143798, 120, 255, 1, "", 50250, NULL),
(19868, 187073, 530, 0, 0, 1, 1, -1455.056640625, 3902.403564453125, 216.5697784423828125, 0.27925160527229309, 0, 0, 0.139172554016113281, 0.990268170833587646, 120, 255, 1, "", 50250, NULL),
(19869, 187073, 530, 0, 0, 1, 1, -1457.5518798828125, 3916.373779296875, 217.1208038330078125, 6.056293010711669921, 0, 0, -0.11320304870605468, 0.993571877479553222, 120, 255, 1, "", 50250, NULL),
(19870, 187073, 530, 0, 0, 1, 1, -1458.5206298828125, 3955.365966796875, 223.0264434814453125, 1.937312245368957519, 0, 0, 0.824125289916992187, 0.566407561302185058, 120, 255, 1, "", 50250, NULL),
(19871, 187073, 530, 0, 0, 1, 1, -1497.175537109375, 3906.186767578125, 215.4847564697265625, 1.117009282112121582, 0, 0, 0.529918670654296875, 0.84804844856262207, 120, 255, 1, "", 50250, NULL),
(19872, 187073, 530, 0, 0, 1, 1, -1498.5416259765625, 3972.46484375, 218.3680877685546875, 3.071766138076782226, 0, 0, 0.999390602111816406, 0.034906134009361267, 120, 255, 1, "", 50250, NULL),
(19873, 187073, 530, 0, 0, 1, 1, -1506.206298828125, 3958.87158203125, 219.790008544921875, 0.331610709428787231, 0, 0, 0.16504669189453125, 0.986285746097564697, 120, 255, 1, "", 50250, NULL),
(19874, 187073, 530, 0, 0, 1, 1, -1506.893310546875, 3993.807373046875, 223.19989013671875, 5.986480236053466796, 0, 0, -0.14780902862548828, 0.989015936851501464, 120, 255, 1, "", 50250, NULL),
(19875, 187264, 530, 0, 0, 1, 1, 11831.521484375, -7315.23291015625, 0.207552000880241394, 0.977383077144622802, 0, 0, 0.469470977783203125, 0.882947921752929687, 120, 255, 1, "", 47966, NULL),
(19876, 187264, 530, 0, 0, 1, 1, 11849.3291015625, -7281.478515625, 3.958786964416503906, 2.932138919830322265, 0, 0, 0.994521141052246093, 0.104535527527332305, 120, 255, 1, "", 45942, NULL),
(19877, 187264, 530, 0, 0, 1, 1, 11852.5, -7316.80908203125, 0.580702006816864013, 4.677483558654785156, 0, 0, -0.71933937072753906, 0.694658815860748291, 120, 255, 1, "", 47966, NULL),
(19878, 187264, 530, 0, 0, 1, 1, 11866.791015625, -7313.2724609375, 0.304100006818771362, 5.515241622924804687, 0, 0, -0.37460613250732421, 0.927184045314788818, 120, 255, 1, "", 47966, NULL),
(19879, 187264, 530, 0, 0, 1, 1, 11904.6015625, -7264.283203125, 0.023365000262856483, 4.782202720642089843, 0, 0, -0.68199825286865234, 0.731353819370269775, 120, 255, 1, "", 45942, NULL),
(19880, 187264, 530, 0, 0, 1, 1, 11904.7548828125, -7335.20654296875, -0.01398300006985664, 0.104719325900077819, 0, 0, 0.052335739135742187, 0.998629570007324218, 120, 255, 1, "", 45942, NULL),
(19881, 187264, 530, 0, 0, 1, 1, 11915.228515625, -7346.06103515625, 0.23637700080871582, 1.343901276588439941, 0, 0, 0.622513771057128906, 0.78260880708694458, 120, 255, 1, "", 47966, NULL),
(19882, 187264, 530, 0, 0, 1, 1, 11920.66796875, -7332.67041015625, 0.676415979862213134, 2.059488296508789062, 0, 0, 0.857167243957519531, 0.515038192272186279, 120, 255, 1, "", 45942, NULL),
(19883, 187264, 530, 0, 0, 1, 1, 11921.0068359375, -7293.0380859375, 0.213817998766899108, 5.183629035949707031, 0, 0, -0.52249813079833984, 0.852640450000762939, 120, 255, 1, "", 47966, NULL),
(19884, 187264, 530, 0, 0, 1, 1, 11944.8740234375, -7317.9375, 1.74111795425415039, 4.241150379180908203, 0, 0, -0.85264015197753906, 0.522498607635498046, 120, 255, 1, "", 47966, NULL),
(19885, 187264, 530, 0, 0, 1, 1, 11953.0390625, -7291.9912109375, 2.158297061920166015, 5.794494152069091796, 0, 0, -0.24192142486572265, 0.970295846462249755, 120, 255, 1, "", 45942, NULL),
(19886, 187264, 530, 0, 0, 1, 1, 11978.603515625, -7303.76904296875, 0.81891798973083496, 2.792518377304077148, 0, 0, 0.984807014465332031, 0.173652306199073791, 120, 255, 1, "", 47966, NULL),
(19887, 187264, 530, 0, 0, 1, 1, 11989.3037109375, -7304.5234375, 0.491512000560760498, 3.403396368026733398, 0, 0, -0.99144458770751953, 0.130528271198272705, 120, 255, 1, "", 47966, NULL),
(19888, 187264, 530, 0, 0, 1, 1, 12024.861328125, -7294.61962890625, 9.276144981384277343, 1.151916384696960449, 0, 0, 0.544638633728027343, 0.838670849800109863, 120, 255, 1, "", 47966, NULL),
(19889, 187264, 530, 0, 0, 1, 1, 12042.2978515625, -7359.61962890625, -0.5090150237083435, 1.047197580337524414, 0, 0, 0.5, 0.866025388240814208, 120, 255, 1, "", 45942, NULL),
(19890, 187264, 530, 0, 0, 1, 1, 12043.5537109375, -7306.7880859375, 8.215129852294921875, 3.839725255966186523, 0, 0, -0.93969249725341796, 0.34202045202255249, 120, 255, 1, "", 45942, NULL),
(19891, 187264, 530, 0, 0, 1, 1, 12053.6337890625, -7365.5693359375, 0.029620999470353126, 0.872663915157318115, 0, 0, 0.422617912292480468, 0.906307935714721679, 120, 255, 1, "", 45942, NULL),
(19892, 187264, 530, 0, 0, 1, 1, 12060.4267578125, -7375.3291015625, -0.04732900112867355, 6.09120035171508789, 0, 0, -0.09584522247314453, 0.995396256446838378, 120, 255, 1, "", 45942, NULL),
(19893, 187264, 530, 0, 0, 1, 1, 12090.6181640625, -7395.4599609375, -0.35763901472091674, 5.550147056579589843, 0, 0, -0.358367919921875, 0.933580458164215087, 120, 255, 1, "", 47966, NULL),
(19894, 187264, 530, 0, 0, 1, 1, 12093.3193359375, -7390.52099609375, 0.411101013422012329, 1.553341388702392578, 0, 0, 0.700908660888671875, 0.713251054286956787, 120, 255, 1, "", 45942, NULL),
(19895, 187264, 530, 0, 0, 1, 1, 12101.89453125, -7361.0693359375, 1.678326010704040527, 4.764749526977539062, 0, 0, -0.6883544921875, 0.725374460220336914, 120, 255, 1, "", 47966, NULL),
(19896, 187264, 530, 0, 0, 1, 1, 12109.0888671875, -7396.033203125, -0.3078320026397705, 5.427974700927734375, 0, 0, -0.41469287872314453, 0.909961462020874023, 120, 255, 1, "", 47966, NULL),
(19897, 187264, 530, 0, 0, 1, 1, 12128.7646484375, -7371.31494140625, 2.971609115600585937, 4.084071159362792968, 0, 0, -0.8910064697265625, 0.453990638256072998, 120, 255, 1, "", 45942, NULL),
(19898, 187264, 530, 0, 0, 1, 1, 12135.796875, -7374.6318359375, 1.618087053298950195, 0.331610709428787231, 0, 0, 0.16504669189453125, 0.986285746097564697, 120, 255, 1, "", 45942, NULL),
(19899, 187264, 530, 0, 0, 1, 1, 12149.5283203125, -7386.49853515625, 0.0132020004093647, 5.637413978576660156, 0, 0, -0.31730461120605468, 0.948323667049407958, 120, 255, 1, "", 47966, NULL),
(19900, 187264, 530, 0, 0, 1, 1, 12151.1689453125, -7378.79150390625, -0.0854249969124794, 0.261798173189163208, 0, 0, 0.130525588989257812, 0.991444945335388183, 120, 255, 1, "", 48632, NULL),
(19901, 187264, 530, 0, 0, 1, 1, 12263.146484375, -7340.63525390625, -0.30628201365470886, 5.427974700927734375, 0, 0, -0.41469287872314453, 0.909961462020874023, 120, 255, 1, "", 45942, NULL),
(19902, 187264, 530, 0, 0, 1, 1, 12270.1767578125, -7343.04150390625, -0.01527999993413686, 1.012289404869079589, 0, 0, 0.484808921813964843, 0.87462007999420166, 120, 255, 1, "", 45942, NULL),
(19903, 187264, 530, 0, 0, 1, 1, 12280.3662109375, -7355.24462890625, 0.264656990766525268, 0.366517573595046997, 0, 0, 0.182234764099121093, 0.98325502872467041, 120, 255, 1, "", 45942, NULL),
(19904, 187264, 530, 0, 0, 1, 1, 12294.154296875, -7306.10400390625, 12.02455615997314453, 1.48352813720703125, 0, 0, 0.675589561462402343, 0.737277925014495849, 120, 255, 1, "", 45942, NULL),
(19905, 187264, 530, 0, 0, 1, 1, 12295.78125, -7379.87353515625, -0.09475400298833847, 0.925023794174194335, 0, 0, 0.446197509765625, 0.894934535026550292, 120, 255, 1, "", 45942, NULL),
(19906, 187264, 530, 0, 0, 1, 1, 12304.263671875, -7391.31005859375, -0.06340199708938598, 4.59021615982055664, 0, 0, -0.74895572662353515, 0.662620067596435546, 120, 255, 1, "", 45942, NULL),
(19907, 187264, 530, 0, 0, 1, 1, 12306.6923828125, -7377.4599609375, 0.447028011083602905, 3.752462387084960937, 0, 0, -0.95371627807617187, 0.300707906484603881, 120, 255, 1, "", 45942, NULL),
(19908, 187264, 530, 0, 0, 1, 1, 12308.05078125, -7286.0400390625, 15.37523746490478515, 3.403396368026733398, 0, 0, -0.99144458770751953, 0.130528271198272705, 120, 255, 1, "", 48120, NULL),
(19909, 187264, 530, 0, 0, 1, 1, 12325.9814453125, -7360.189453125, 2.168091058731079101, 0.226892471313476562, 0, 0, 0.113203048706054687, 0.993571877479553222, 120, 255, 1, "", 49936, NULL),
(19910, 187264, 530, 0, 0, 1, 1, 12338.0751953125, -7294.48291015625, 8.799306869506835937, 1.029743075370788574, 0, 0, 0.492423057556152343, 0.870355963706970214, 120, 255, 1, "", 45942, NULL),
(19911, 187264, 530, 0, 0, 1, 1, 12347.05078125, -7311.22900390625, 6.929789066314697265, 4.712389945983886718, 0, 0, -0.70710659027099609, 0.707106947898864746, 120, 255, 1, "", 47966, NULL),
(19912, 187264, 530, 0, 0, 1, 1, 12351.7890625, -7403.84228515625, 0.061324000358581542, 3.752462387084960937, 0, 0, -0.95371627807617187, 0.300707906484603881, 120, 255, 1, "", 47966, NULL),
(19913, 187264, 530, 0, 0, 1, 1, 12365.166015625, -7406.859375, -0.05430499836802482, 1.797688722610473632, 0, 0, 0.7826080322265625, 0.622514784336090087, 120, 255, 1, "", 47966, NULL),
(19914, 187264, 530, 0, 0, 1, 1, 12365.818359375, -7369.6318359375, 2.771722078323364257, 2.076939344406127929, 0, 0, 0.861628532409667968, 0.50753939151763916, 120, 255, 1, "", 47966, NULL),
(19915, 187264, 530, 0, 0, 1, 1, 12374.0751953125, -7344.51220703125, -0.1662050038576126, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 47966, NULL),
(19916, 187264, 530, 0, 0, 1, 1, 12377.0068359375, -7333.83349609375, -0.85966700315475463, 0.314158439636230468, 0, 0, 0.156434059143066406, 0.987688362598419189, 120, 255, 1, "", 45942, NULL),
(19917, 187264, 530, 0, 0, 1, 1, 12415.1904296875, -7392.36474609375, -0.23126000165939331, 4.97418975830078125, 0, 0, -0.60876083374023437, 0.793353796005249023, 120, 255, 1, "", 45942, NULL),
(19918, 187264, 530, 0, 0, 1, 1, 12420.947265625, -7384.5380859375, -0.19772100448608398, 2.809975385665893554, 0, 0, 0.986285209655761718, 0.165049895644187927, 120, 255, 1, "", 45942, NULL),
(19919, 187264, 530, 0, 0, 1, 1, 12422.2197265625, -7323.29150390625, -0.21889099478721618, 0, 0, 0, 0, 1, 120, 255, 1, "", 48120, NULL),
(19920, 187264, 530, 0, 0, 1, 1, 12424.4072265625, -7392.83056640625, 1.12558901309967041, 2.216565132141113281, 0, 0, 0.894933700561523437, 0.44619917869567871, 120, 255, 1, "", 45942, NULL),
(19921, 187264, 530, 0, 0, 1, 1, 12429.478515625, -7294.74658203125, 2.394900083541870117, 4.625123500823974609, 0, 0, -0.73727703094482421, 0.67559051513671875, 120, 255, 1, "", 47966, NULL),
(19922, 187264, 530, 0, 0, 1, 1, 12430.1796875, -7331.30322265625, -0.24108199775218963, 1.221729278564453125, 0, 0, 0.573575973510742187, 0.819152355194091796, 120, 255, 1, "", 48120, NULL),
(19923, 187264, 530, 0, 0, 1, 1, 12438.2099609375, -7453.41064453125, 0.302439987659454345, 0.837757468223571777, 0, 0, 0.406736373901367187, 0.913545548915863037, 120, 255, 1, "", 45942, NULL),
(19924, 187264, 530, 0, 0, 1, 1, 12441.0361328125, -7406.01904296875, 2.699589014053344726, 5.84685373306274414, 0, 0, -0.21643924713134765, 0.976296067237854003, 120, 255, 1, "", 47966, NULL),
(19925, 187264, 530, 0, 0, 1, 1, 12442.529296875, -7462.0625, 0.20074300467967987, 0.471238493919372558, 0, 0, 0.233445167541503906, 0.972369968891143798, 120, 255, 1, "", 49936, NULL),
(19926, 187264, 530, 0, 0, 1, 1, 12450.0048828125, -7467.65283203125, -0.21127499639987945, 0.785396754741668701, 0, 0, 0.38268280029296875, 0.923879802227020263, 120, 255, 1, "", 53622, NULL),
(19927, 187264, 530, 0, 0, 1, 1, 12453.3642578125, -7409.58154296875, 2.725332975387573242, 4.782202720642089843, 0, 0, -0.68199825286865234, 0.731353819370269775, 120, 255, 1, "", 47966, NULL),
(19928, 187264, 530, 0, 0, 1, 1, 12477.466796875, -7468.63037109375, -0.22335200011730194, 1.867502212524414062, 0, 0, 0.803856849670410156, 0.594822824001312255, 120, 255, 1, "", 49936, NULL),
(19929, 187264, 530, 0, 0, 1, 1, 12479.8671875, -7352.4462890625, 3.445054054260253906, 1.85004889965057373, 0, 0, 0.798635482788085937, 0.60181504487991333, 120, 255, 1, "", 47966, NULL),
(19930, 187264, 530, 0, 0, 1, 1, 12489.201171875, -7470.455078125, -0.5245479941368103, 3.316144466400146484, 0, 0, -0.99619388580322265, 0.087165042757987976, 120, 255, 1, "", 45942, NULL),
(19931, 187264, 530, 0, 0, 1, 1, 12506.0283203125, -7402.1416015625, 2.76627206802368164, 3.874631166458129882, 0, 0, -0.93358039855957031, 0.358368009328842163, 120, 255, 1, "", 45942, NULL),
(19932, 187264, 530, 0, 0, 1, 1, 12506.708984375, -7412.1494140625, 2.82039499282836914, 6.248279094696044921, 0, 0, -0.01745223999023437, 0.999847710132598876, 120, 255, 1, "", 45942, NULL),
(19933, 187264, 530, 0, 0, 1, 1, 12523.041015625, -7457.47412109375, -0.95862001180648803, 0.890116631984710693, 0, 0, 0.430510520935058593, 0.902585566043853759, 120, 255, 1, "", 45942, NULL),
(19934, 187264, 530, 0, 0, 1, 1, 12525.509765625, -7450.57666015625, -0.37332299351692199, 2.565631866455078125, 0, 0, 0.958819389343261718, 0.284016460180282592, 120, 255, 1, "", 49936, NULL),
(19935, 187264, 530, 0, 0, 1, 1, 12531.7021484375, -7443.265625, -0.60727202892303466, 5.864306926727294921, 0, 0, -0.20791149139404296, 0.978147625923156738, 120, 255, 1, "", 50063, NULL),
(19936, 187264, 530, 0, 0, 1, 1, 12531.998046875, -7412.44091796875, 0.861249983310699462, 0.017452461645007133, 0, 0, 0.008726119995117187, 0.999961912631988525, 120, 255, 1, "", 45942, NULL),
(19937, 187264, 530, 0, 0, 1, 1, 12534.693359375, -7402.533203125, 0.891602993011474609, 2.234017848968505859, 0, 0, 0.898793220520019531, 0.438372820615768432, 120, 255, 1, "", 48120, NULL),
(19938, 187264, 530, 0, 0, 1, 1, 12537.7490234375, -7409.859375, 0.466390013694763183, 3.45575571060180664, 0, 0, -0.98768806457519531, 0.156436234712600708, 120, 255, 1, "", 45942, NULL),
(19939, 187264, 530, 0, 0, 1, 1, 12539.1435546875, -7345.92041015625, -0.22582100331783294, 1.815141916275024414, 0, 0, 0.788010597229003906, 0.615661680698394775, 120, 255, 1, "", 45942, NULL),
(19940, 187264, 530, 0, 0, 1, 1, 12547.4580078125, -7349.06591796875, -0.62331002950668334, 0.104719325900077819, 0, 0, 0.052335739135742187, 0.998629570007324218, 120, 255, 1, "", 45942, NULL),
(19941, 187333, 530, 0, 0, 1, 1, 12325.9580078125, -7353.21875, 2.795351982116699218, 4.729844093322753906, 0, 0, -0.70090866088867187, 0.713251054286956787, 120, 255, 1, "", 45942, NULL),
(19942, 187333, 530, 0, 0, 1, 1, 12359.1962890625, -7377.42431640625, 2.060728073120117187, 0.802850961685180664, 0, 0, 0.390730857849121093, 0.920504987239837646, 120, 255, 1, "", 45942, NULL),
(19943, 187333, 530, 0, 0, 1, 1, 12439.9326171875, -7418.4443359375, 2.124051094055175781, 1.204277276992797851, 0, 0, 0.56640625, 0.824126183986663818, 120, 255, 1, "", 45942, NULL),
(19944, 187333, 530, 0, 0, 1, 1, 12455.0400390625, -6416.4638671875, 5.709568977355957031, 5.480334281921386718, 0, 0, -0.39073085784912109, 0.920504987239837646, 120, 255, 1, "", 47966, NULL),
(19945, 187333, 530, 0, 0, 1, 1, 12469.1279296875, -7272.19970703125, 4.573592185974121093, 2.932138919830322265, 0, 0, 0.994521141052246093, 0.104535527527332305, 120, 255, 1, "", 47966, NULL),
(19946, 187333, 530, 0, 0, 1, 1, 12476.1748046875, -6504.1826171875, 7.686891078948974609, 1.972219824790954589, 0, 0, 0.83388519287109375, 0.55193793773651123, 120, 255, 1, "", 47966, NULL),
(19947, 187333, 530, 0, 0, 1, 1, 12480.1015625, -6462.0654296875, 7.983904838562011718, 3.368495941162109375, 0, 0, -0.99357128143310546, 0.113208353519439697, 120, 255, 1, "", 47966, NULL),
(19948, 187333, 530, 0, 0, 1, 1, 12506.7861328125, -7413.869140625, 2.751204967498779296, 5.724681377410888671, 0, 0, -0.27563667297363281, 0.961261868476867675, 120, 255, 1, "", 47966, NULL),
(19949, 187333, 530, 0, 0, 1, 1, 12508.578125, -6572.111328125, 12.61927223205566406, 0.087265998125076293, 0, 0, 0.043619155883789062, 0.999048233032226562, 120, 255, 1, "", 45942, NULL),
(19950, 187333, 530, 0, 0, 1, 1, 12514.97265625, -6563.34814453125, 11.45058727264404296, 1.815141916275024414, 0, 0, 0.788010597229003906, 0.615661680698394775, 120, 255, 1, "", 47966, NULL),
(19951, 187333, 530, 0, 0, 1, 1, 12523.4150390625, -6451.169921875, 7.608002185821533203, 4.572763919830322265, 0, 0, -0.75470924377441406, 0.656059443950653076, 120, 255, 1, "", 47966, NULL),
(19952, 187333, 530, 0, 0, 1, 1, 12524.84765625, -6383.6123046875, 4.620121002197265625, 5.044002056121826171, 0, 0, -0.58070278167724609, 0.814115643501281738, 120, 255, 1, "", 45942, NULL),
(19953, 187333, 530, 0, 0, 1, 1, 12537.603515625, -6908.400390625, 15.85624504089355468, 3.665196180343627929, 0, 0, -0.96592521667480468, 0.258821308612823486, 120, 255, 1, "", 49936, NULL),
(19954, 187333, 530, 0, 0, 1, 1, 12547.5751953125, -6517.0400390625, 7.228730201721191406, 2.164205789566040039, 0, 0, 0.882946968078613281, 0.469472706317901611, 120, 255, 1, "", 47966, NULL),
(19955, 187333, 530, 0, 0, 1, 1, 12555.603515625, -6396.58935546875, 6.787727832794189453, 2.844882726669311523, 0, 0, 0.989015579223632812, 0.147811368107795715, 120, 255, 1, "", 45942, NULL),
(19956, 187333, 530, 0, 0, 1, 1, 12578.36328125, -6607.82275390625, 13.67845630645751953, 0.24434557557106018, 0, 0, 0.121869087219238281, 0.9925462007522583, 120, 255, 1, "", 45942, NULL),
(19957, 187333, 530, 0, 0, 1, 1, 12583.5634765625, -6580.23046875, 15.79282855987548828, 5.93412017822265625, 0, 0, -0.17364788055419921, 0.984807789325714111, 120, 255, 1, "", 52237, NULL),
(19958, 187333, 530, 0, 0, 1, 1, 12587.5537109375, -6438.83837890625, 8.821886062622070312, 5.35816192626953125, 0, 0, -0.446197509765625, 0.894934535026550292, 120, 255, 1, "", 45942, NULL),
(19959, 187333, 530, 0, 0, 1, 1, 12589.091796875, -6622.71875, 12.1877288818359375, 0.942476630210876464, 0, 0, 0.453989982604980468, 0.891006767749786376, 120, 255, 1, "", 45942, NULL),
(19960, 187333, 530, 0, 0, 1, 1, 12592.626953125, -6530.52978515625, 3.432568073272705078, 2.897245407104492187, 0, 0, 0.99254608154296875, 0.121869951486587524, 120, 255, 1, "", 45942, NULL),
(19961, 187333, 530, 0, 0, 1, 1, 12598.6650390625, -6870.7275390625, 5.394229888916015625, 2.321286916732788085, 0, 0, 0.917059898376464843, 0.398749500513076782, 120, 255, 1, "", 49936, NULL),
(19962, 187333, 530, 0, 0, 1, 1, 12601.2734375, -6928.7333984375, 4.94329690933227539, 2.652894020080566406, 0, 0, 0.970294952392578125, 0.241925001144409179, 120, 255, 1, "", 45942, NULL),
(19963, 187333, 530, 0, 0, 1, 1, 12606.5693359375, -6755.89501953125, 14.26062488555908203, 2.67034769058227539, 0, 0, 0.972369194030761718, 0.233448356389999389, 120, 255, 1, "", 45942, NULL),
(19964, 187333, 530, 0, 0, 1, 1, 12613.236328125, -6506.03857421875, 5.029913902282714843, 2.495818138122558593, 0, 0, 0.948323249816894531, 0.317305892705917358, 120, 255, 1, "", 47966, NULL),
(19965, 187333, 530, 0, 0, 1, 1, 12614.31640625, -6614.62158203125, 9.228414535522460937, 2.268925428390502929, 0, 0, 0.906307220458984375, 0.422619491815567016, 120, 255, 1, "", 45942, NULL),
(19966, 187333, 530, 0, 0, 1, 1, 12625.251953125, -6841.67724609375, 5.437436103820800781, 2.234017848968505859, 0, 0, 0.898793220520019531, 0.438372820615768432, 120, 255, 1, "", 45942, NULL),
(19967, 187333, 530, 0, 0, 1, 1, 12627.5419921875, -6681.33740234375, 5.223727226257324218, 2.391098499298095703, 0, 0, 0.930417060852050781, 0.366502493619918823, 120, 255, 1, "", 49936, NULL),
(19968, 187333, 530, 0, 0, 1, 1, 12628.8701171875, -6941.376953125, 4.674639225006103515, 2.932138919830322265, 0, 0, 0.994521141052246093, 0.104535527527332305, 120, 255, 1, "", 49936, NULL),
(19969, 187333, 530, 0, 0, 1, 1, 12630.298828125, -6710.65966796875, 5.3027191162109375, 2.111847877502441406, 0, 0, 0.870355606079101562, 0.492423713207244873, 120, 255, 1, "", 45942, NULL),
(19970, 187333, 530, 0, 0, 1, 1, 12632.060546875, -6900.89208984375, 4.919833183288574218, 5.567600727081298828, 0, 0, -0.35020732879638671, 0.936672210693359375, 120, 255, 1, "", 49936, NULL),
(19971, 187333, 530, 0, 0, 1, 1, 12635.599609375, -6674.95263671875, 5.085459232330322265, 1.675513744354248046, 0, 0, 0.743144035339355468, 0.669131457805633544, 120, 255, 1, "", 49936, NULL),
(19972, 187333, 530, 0, 0, 1, 1, 12651.5419921875, -6553.02783203125, 7.128612041473388671, 1.85004889965057373, 0, 0, 0.798635482788085937, 0.60181504487991333, 120, 255, 1, "", 47966, NULL),
(19973, 187333, 530, 0, 0, 1, 1, 12654.7509765625, -6438.53955078125, 7.942272186279296875, 5.305802345275878906, 0, 0, -0.46947097778320312, 0.882947921752929687, 120, 255, 1, "", 47966, NULL),
(19974, 187333, 530, 0, 0, 1, 1, 12657.6337890625, -6780.0234375, 5.088406085968017578, 6.161012649536132812, 0, 0, -0.06104850769042968, 0.998134791851043701, 120, 255, 1, "", 49936, NULL),
(19975, 187333, 530, 0, 0, 1, 1, 12662.59375, -6776.83056640625, 4.959928035736083984, 0.872663915157318115, 0, 0, 0.422617912292480468, 0.906307935714721679, 120, 255, 1, "", 45942, NULL),
(19976, 187333, 530, 0, 0, 1, 1, 12671.888671875, -6446.47998046875, 6.899810791015625, 1.082102894783020019, 0, 0, 0.51503753662109375, 0.857167601585388183, 120, 255, 1, "", 45942, NULL),
(19977, 187333, 530, 0, 0, 1, 1, 12674.40625, -6662.30322265625, 4.442163944244384765, 4.380776405334472656, 0, 0, -0.81411552429199218, 0.580702960491180419, 120, 255, 1, "", 49936, NULL),
(19978, 187333, 530, 0, 0, 1, 1, 12674.470703125, -6899.05029296875, 5.065041065216064453, 6.003933906555175781, 0, 0, -0.13917255401611328, 0.990268170833587646, 120, 255, 1, "", 45942, NULL),
(19979, 187333, 530, 0, 0, 1, 1, 12677.751953125, -6746.79150390625, 4.605678081512451171, 4.136432647705078125, 0, 0, -0.87881660461425781, 0.477159708738327026, 120, 255, 1, "", 45942, NULL),
(19980, 187333, 530, 0, 0, 1, 1, 12686.9501953125, -6656.0009765625, 4.311914920806884765, 1.204277276992797851, 0, 0, 0.56640625, 0.824126183986663818, 120, 255, 1, "", 49936, NULL),
(19981, 187333, 530, 0, 0, 1, 1, 12688.38671875, -6591.3212890625, 5.407643795013427734, 4.607671737670898437, 0, 0, -0.74314403533935546, 0.669131457805633544, 120, 255, 1, "", 49936, NULL),
(19982, 187333, 530, 0, 0, 1, 1, 12692.5166015625, -6801.72509765625, 4.961493968963623046, 1.378809213638305664, 0, 0, 0.636077880859375, 0.771624863147735595, 120, 255, 1, "", 45942, NULL),
(19983, 187333, 530, 0, 0, 1, 1, 12705.578125, -6446.79443359375, 10.7567605972290039, 2.617989301681518554, 0, 0, 0.965925216674804687, 0.258821308612823486, 120, 255, 1, "", 45942, NULL),
(19984, 187333, 530, 0, 0, 1, 1, 12718.5537109375, -6523.53271484375, 4.900949001312255859, 3.385940074920654296, 0, 0, -0.99254608154296875, 0.121869951486587524, 120, 255, 1, "", 45942, NULL),
(19985, 187333, 530, 0, 0, 1, 1, 12718.70703125, -6809.38232421875, 5.669734001159667968, 3.351046562194824218, 0, 0, -0.99452114105224609, 0.104535527527332305, 120, 255, 1, "", 49936, NULL),
(19986, 187333, 530, 0, 0, 1, 1, 12723.685546875, -6747.62158203125, 0.705013990402221679, 1.762782454490661621, 0, 0, 0.771624565124511718, 0.636078238487243652, 120, 255, 1, "", 49936, NULL),
(19987, 187333, 530, 0, 0, 1, 1, 12727.5615234375, -6791.189453125, 5.478837013244628906, 0.453785061836242675, 0, 0, 0.224950790405273437, 0.974370121955871582, 120, 255, 1, "", 50664, NULL),
(19988, 187333, 530, 0, 0, 1, 1, 12733.5107421875, -6685.64208984375, 0.057486999779939651, 2.809975385665893554, 0, 0, 0.986285209655761718, 0.165049895644187927, 120, 255, 1, "", 45942, NULL),
(19989, 187333, 530, 0, 0, 1, 1, 12744.419921875, -6677.0595703125, -0.19807800650596618, 3.22885894775390625, 0, 0, -0.99904823303222656, 0.043619260191917419, 120, 255, 1, "", 45942, NULL),
(19990, 187333, 530, 0, 0, 1, 1, 12747.9765625, -6560.93212890625, 9.5110321044921875, 2.513273954391479492, 0, 0, 0.951056480407714843, 0.309017121791839599, 120, 255, 1, "", 45942, NULL),
(19991, 187333, 530, 0, 0, 1, 1, 12748.0048828125, -6668.1337890625, -0.15076899528503417, 5.35816192626953125, 0, 0, -0.446197509765625, 0.894934535026550292, 120, 255, 1, "", 45942, NULL),
(19992, 187333, 530, 0, 0, 1, 1, 12752.0166015625, -6434.7705078125, 9.771394729614257812, 2.129300594329833984, 0, 0, 0.874619483947753906, 0.484810054302215576, 120, 255, 1, "", 47966, NULL),
(19993, 187333, 530, 0, 0, 1, 1, 12759.0673828125, -6608.892578125, 4.845475196838378906, 2.687806606292724609, 0, 0, 0.974370002746582031, 0.224951311945915222, 120, 255, 1, "", 49936, NULL),
(19994, 187333, 530, 0, 0, 1, 1, 12766.1611328125, -6739.8525390625, 0.743037998676300048, 5.515241622924804687, 0, 0, -0.37460613250732421, 0.927184045314788818, 120, 255, 1, "", 49936, NULL),
(19995, 187333, 530, 0, 0, 1, 1, 12769.9814453125, -6633.06689453125, -0.42986801266670227, 5.078907966613769531, 0, 0, -0.56640625, 0.824126183986663818, 120, 255, 1, "", 45942, NULL),
(19996, 187333, 530, 0, 0, 1, 1, 12778.673828125, -6796.90478515625, 5.775872230529785156, 0.558503925800323486, 0, 0, 0.275636672973632812, 0.961261868476867675, 120, 255, 1, "", 50063, NULL),
(19997, 187333, 530, 0, 0, 1, 1, 12787.2939453125, -6642.3056640625, 0.542501986026763916, 5.654868602752685546, 0, 0, -0.30901622772216796, 0.95105677843093872, 120, 255, 1, "", 49936, NULL),
(19998, 187333, 530, 0, 0, 1, 1, 12787.9912109375, -6515.66796875, 5.9494171142578125, 1.989672422409057617, 0, 0, 0.838669776916503906, 0.544640243053436279, 120, 255, 1, "", 47966, NULL),
(19999, 187333, 530, 0, 0, 1, 1, 12791.8720703125, -6754.71533203125, 0.359697014093399047, 4.363324165344238281, 0, 0, -0.81915187835693359, 0.573576688766479492, 120, 255, 1, "", 50063, NULL),
(20000, 187333, 530, 0, 0, 1, 1, 12809.6162109375, -6460.40869140625, 5.745922088623046875, 3.22885894775390625, 0, 0, -0.99904823303222656, 0.043619260191917419, 120, 255, 1, "", 47966, NULL),
(20001, 187333, 530, 0, 0, 1, 1, 12810.892578125, -6732.892578125, 1.93929600715637207, 4.398232460021972656, 0, 0, -0.80901622772216796, 0.587786316871643066, 120, 255, 1, "", 49936, NULL),
(20002, 187333, 530, 0, 0, 1, 1, 12834.021484375, -6563.1748046875, 9.148848533630371093, 5.166176319122314453, 0, 0, -0.52991867065429687, 0.84804844856262207, 120, 255, 1, "", 50063, NULL),
(20003, 187333, 530, 0, 0, 1, 1, 12843.6337890625, -6706.05810546875, 0.714500010013580322, 4.084071159362792968, 0, 0, -0.8910064697265625, 0.453990638256072998, 120, 255, 1, "", 50063, NULL),
(20004, 187333, 530, 0, 0, 1, 1, 12848.4033203125, -6632.3369140625, 6.183325767517089843, 1.256635904312133789, 0, 0, 0.587784767150878906, 0.809017360210418701, 120, 255, 1, "", 47966, NULL),
(20005, 187333, 530, 0, 0, 1, 1, 12864.9736328125, -6770.1318359375, 9.607085227966308593, 1.431168079376220703, 0, 0, 0.656058311462402343, 0.754710197448730468, 120, 255, 1, "", 45942, NULL),
(20006, 187333, 530, 0, 0, 1, 1, 12865.146484375, -6521.419921875, 8.930165290832519531, 0.034906249493360519, 0, 0, 0.017452239990234375, 0.999847710132598876, 120, 255, 1, "", 47966, NULL),
(20007, 187333, 530, 0, 0, 1, 1, 12866.5693359375, -7307.02783203125, 67.27674102783203125, 1.064649581909179687, 0, 0, 0.507537841796875, 0.861629426479339599, 120, 255, 1, "", 48632, NULL),
(20008, 187333, 530, 0, 0, 1, 1, 12869.9169921875, -6754.87158203125, 11.88420295715332031, 2.844882726669311523, 0, 0, 0.989015579223632812, 0.147811368107795715, 120, 255, 1, "", 45942, NULL),
(20009, 187333, 530, 0, 0, 1, 1, 12875.087890625, -6730.3447265625, 12.29255962371826171, 3.752462387084960937, 0, 0, -0.95371627807617187, 0.300707906484603881, 120, 255, 1, "", 51666, NULL),
(20010, 187333, 530, 0, 0, 1, 1, 12879.7861328125, -7225.83251953125, 8.256816864013671875, 2.827429771423339843, 0, 0, 0.987688064575195312, 0.156436234712600708, 120, 255, 1, "", 48632, NULL),
(20011, 187333, 530, 0, 0, 1, 1, 12883.5693359375, -6749.81103515625, 11.94212245941162109, 5.724681377410888671, 0, 0, -0.27563667297363281, 0.961261868476867675, 120, 255, 1, "", 45942, NULL),
(20012, 187333, 530, 0, 0, 1, 1, 12889.4765625, -6765.69384765625, 9.938538551330566406, 4.310965538024902343, 0, 0, -0.83388519287109375, 0.55193793773651123, 120, 255, 1, "", 45942, NULL),
(20013, 187333, 530, 0, 0, 1, 1, 12893.0244140625, -7228.85400390625, 7.591716766357421875, 3.106652259826660156, 0, 0, 0.999847412109375, 0.017469281330704689, 120, 255, 1, "", 45942, NULL),
(20014, 187333, 530, 0, 0, 1, 1, 12898.2314453125, -6571.5556640625, 11.70065593719482421, 1.413715124130249023, 0, 0, 0.649447441101074218, 0.760406434535980224, 120, 255, 1, "", 47966, NULL),
(20015, 187333, 530, 0, 0, 1, 1, 12916.09765625, -6685.921875, 11.23569297790527343, 1.588248729705810546, 0, 0, 0.713250160217285156, 0.700909554958343505, 120, 255, 1, "", 49936, NULL),
(20016, 187333, 530, 0, 0, 1, 1, 12926.64453125, -6658.8603515625, 12.31297016143798828, 0.017452461645007133, 0, 0, 0.008726119995117187, 0.999961912631988525, 120, 255, 1, "", 47966, NULL),
(20017, 187333, 530, 0, 0, 1, 1, 12930.8359375, -6765.88623046875, 10.04607677459716796, 0.314158439636230468, 0, 0, 0.156434059143066406, 0.987688362598419189, 120, 255, 1, "", 45942, NULL),
(20018, 187333, 530, 0, 0, 1, 1, 12936.3564453125, -6555.5087890625, 7.0752410888671875, 2.408554315567016601, 0, 0, 0.933580398559570312, 0.358368009328842163, 120, 255, 1, "", 45942, NULL),
(20019, 187333, 530, 0, 0, 1, 1, 12945.65234375, -6613.01171875, 11.6352548599243164, 5.201082706451416015, 0, 0, -0.51503753662109375, 0.857167601585388183, 120, 255, 1, "", 45942, NULL),
(20020, 187333, 530, 0, 0, 1, 1, 12971.0908203125, -6653.9619140625, 12.79381084442138671, 5.131268978118896484, 0, 0, -0.54463863372802734, 0.838670849800109863, 120, 255, 1, "", 47966, NULL),
(20021, 187333, 530, 0, 0, 1, 1, 12977.6376953125, -6796.4052734375, 7.886459827423095703, 1.745326757431030273, 0, 0, 0.766043663024902343, 0.642788589000701904, 120, 255, 1, "", 45942, NULL),
(20022, 187333, 530, 0, 0, 1, 1, 12986.79296875, -6763.470703125, 10.34218406677246093, 5.567600727081298828, 0, 0, -0.35020732879638671, 0.936672210693359375, 120, 255, 1, "", 45942, NULL),
(20023, 187333, 530, 0, 0, 1, 1, 12988.5126953125, -6610.85791015625, 5.838080883026123046, 3.90954136848449707, 0, 0, -0.92718315124511718, 0.37460830807685852, 120, 255, 1, "", 45942, NULL),
(20024, 187333, 530, 0, 0, 1, 1, 12991.2275390625, -6564.7802734375, 3.37157607078552246, 0.715584874153137207, 0, 0, 0.350207328796386718, 0.936672210693359375, 120, 255, 1, "", 47966, NULL),
(20025, 187333, 530, 0, 0, 1, 1, 12991.681640625, -6720.18896484375, 7.2272491455078125, 3.298687219619750976, 0, 0, -0.99691677093505859, 0.078466430306434631, 120, 255, 1, "", 45942, NULL),
(20026, 187333, 530, 0, 0, 1, 1, 12992.79296875, -6538.458984375, 2.152473926544189453, 6.021387100219726562, 0, 0, -0.13052558898925781, 0.991444945335388183, 120, 255, 1, "", 45942, NULL),
(20027, 187333, 530, 0, 0, 1, 1, 12995.4501953125, -6833.7353515625, 8.10172271728515625, 1.640606880187988281, 0, 0, 0.731352806091308593, 0.6819993257522583, 120, 255, 1, "", 45942, NULL),
(20028, 187333, 530, 0, 0, 1, 1, 12996.8603515625, -6574.34228515625, 3.484158039093017578, 3.630291461944580078, 0, 0, -0.97029495239257812, 0.241925001144409179, 120, 255, 1, "", 47966, NULL),
(20029, 187333, 530, 0, 0, 1, 1, 12998.4345703125, -6866.95166015625, 4.983794212341308593, 2.199114561080932617, 0, 0, 0.8910064697265625, 0.453990638256072998, 120, 255, 1, "", 45942, NULL),
(20030, 187333, 530, 0, 0, 1, 1, 13017.669921875, -6679.029296875, 7.795247077941894531, 2.967041015625, 0, 0, 0.996193885803222656, 0.087165042757987976, 120, 255, 1, "", 47966, NULL),
(20031, 187333, 530, 0, 0, 1, 1, 13018.771484375, -6592.14404296875, 2.443955898284912109, 3.141592741012573242, 0, 0, -1, 0, 120, 255, 1, "", 48120, NULL),
(20032, 187333, 530, 0, 0, 1, 1, 13021.21875, -6802.01416015625, 8.437165260314941406, 0.314158439636230468, 0, 0, 0.156434059143066406, 0.987688362598419189, 120, 255, 1, "", 47966, NULL),
(20033, 187333, 530, 0, 0, 1, 1, 13054.6884765625, -6814.13134765625, 1.337131977081298828, 0.907570242881774902, 0, 0, 0.438370704650878906, 0.898794233798980712, 120, 255, 1, "", 45942, NULL),
(20034, 187333, 530, 0, 0, 1, 1, 13058.568359375, -6834.19677734375, 2.062446117401123046, 5.672322273254394531, 0, 0, -0.3007049560546875, 0.953717231750488281, 120, 255, 1, "", 45942, NULL);
-- remaining spawns (no sniffed values available)
-- (`guid` IN (47577, 47576, 47575, 47574, 47573, 47572, 47571, 47570, 27757, 27762, 27763, 27764, 27765, 27766, 27767, 27768, 27769, 27770, 27771, 27772, 27773, 27778, 27779, 27780, 27781, 27782, 27783, 27784, 27785, 27786, 27787, 27788, 27789, 27790, 27791, 27792, 27793, 27794, 27795, 27796, 27797, 27808, 27805, 27807, 27804, 27803, 27806, 27802))

View File

@ -0,0 +1,158 @@
-- DB update 2025_03_06_00 -> 2025_03_06_01
-- Add Waypoints
DELETE FROM `waypoint_data` WHERE `id` IN (4423900);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(4423900, 1, 1635.8063, 575.30365, 85.0778, NULL, 0, 0, 0, 100, 0),
(4423900, 2, 1639.5123, 564.78186, 85.198586, NULL, 0, 0, 0, 100, 0),
(4423900, 3, 1650.0547, 555.85724, 85.20367, NULL, 0, 0, 0, 100, 0),
(4423900, 4, 1657.5857, 554.2899, 85.18, NULL, 0, 0, 0, 100, 0),
(4423900, 5, 1662.7603, 559.59985, 85.11729, NULL, 0, 0, 0, 100, 0),
(4423900, 6, 1664.86, 566.5109, 85.05131, NULL, 0, 0, 0, 100, 0),
(4423900, 7, 1655.7408, 569.426, 85.08148, NULL, 0, 0, 0, 100, 0),
(4423900, 8, 1646.7535, 573.262, 85.10842, NULL, 0, 0, 0, 100, 0),
(4423900, 9, 1639.7854, 581.71625, 85.07026, NULL, 0, 0, 0, 100, 0),
(4423900, 10, 1635.8188, 591.16565, 84.986694, NULL, 0, 0, 0, 100, 0),
(4423900, 11, 1623.7385, 598.2011, 84.98328, NULL, 0, 0, 0, 100, 0),
(4423900, 12, 1622.1783, 582.6476, 84.93455, NULL, 0, 0, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (4417500);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(4417500, 1, 1598.2391, 607.8877, 85.17859, NULL, 0, 0, 0, 100, 0),
(4417500, 2, 1606.8851, 597.20966, 85.035416, NULL, 0, 0, 0, 100, 0),
(4417500, 3, 1626.3141, 598.7418, 84.977554, NULL, 0, 0, 0, 100, 0),
(4417500, 4, 1626.666, 609.6, 85.03905, NULL, 0, 0, 0, 100, 0),
(4417500, 5, 1619.9382, 614.392, 85.08983, NULL, 0, 0, 0, 100, 0),
(4417500, 6, 1616.4453, 624.93243, 85.0162, NULL, 0, 0, 0, 100, 0),
(4417500, 7, 1607.1102, 624.23157, 85.0806, NULL, 0, 0, 0, 100, 0),
(4417500, 8, 1600.872, 617.4745, 85.17309, NULL, 0, 0, 0, 100, 0);
DELETE FROM `waypoint_data` WHERE `id` IN (4437300);
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
(4437300, 1, 1574.3845, 568.83575, 50.581684, NULL, 0, 0, 0, 100, 0),
(4437300, 2, 1581.9055, 556.647, 50.56439, NULL, 0, 0, 0, 100, 0),
(4437300, 3, 1594.0778, 542.8933, 50.56443, NULL, 0, 0, 0, 100, 0),
(4437300, 4, 1606.6469, 532.18286, 50.562378, NULL, 0, 0, 0, 100, 0),
(4437300, 5, 1619.2439, 522.1746, 50.562378, NULL, 0, 0, 0, 100, 0),
(4437300, 6, 1628.4052, 510.94202, 50.56238, NULL, 0, 0, 0, 100, 0),
(4437300, 7, 1637.5718, 504.4476, 50.562378, NULL, 0, 0, 0, 100, 0),
(4437300, 8, 1645.4747, 505.8146, 50.56238, NULL, 0, 0, 0, 100, 0),
(4437300, 9, 1639.2903, 514.03033, 50.56238, NULL, 0, 0, 0, 100, 0),
(4437300, 10, 1623.4856, 525.23193, 50.562378, NULL, 0, 0, 0, 100, 0),
(4437300, 11, 1614.4045, 529.077, 50.562378, NULL, 0, 0, 0, 100, 0),
(4437300, 12, 1600.4586, 541.8103, 50.562866, NULL, 0, 0, 0, 100, 0),
(4437300, 13, 1591.9607, 552.0348, 50.564407, NULL, 0, 0, 0, 100, 0),
(4437300, 14, 1595.747, 562.1494, 50.561386, NULL, 0, 0, 0, 100, 0),
(4437300, 15, 1601.4442, 576.96, 50.58388, NULL, 0, 0, 0, 100, 0),
(4437300, 16, 1599.3601, 587.71423, 50.86386, NULL, 0, 0, 0, 100, 0),
(4437300, 17, 1598.5406, 593.38184, 50.63166, NULL, 0, 0, 0, 100, 0),
(4437300, 18, 1597.1101, 600.21423, 50.86386, NULL, 0, 0, 0, 100, 0),
(4437300, 19, 1596.6749, 601.2044, 50.645096, NULL, 0, 0, 0, 100, 0),
(4437300, 20, 1581.5574, 593.8716, 50.650696, NULL, 0, 0, 0, 100, 0),
(4437300, 21, 1572.9338, 582.4934, 50.615257, NULL, 0, 0, 0, 100, 0);
-- Remove Comment (Guid SmartAI must be removed)
UPDATE `creature` SET `Comment` = NULL WHERE (`guid` = 44268) AND (`id1` = 25484);
-- Remove SmartAI from Guid
DELETE FROM `smart_scripts` WHERE (`entryorguid` = -44268) AND (`source_type` = 0);
-- Remove Timed Action List
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 2548400) AND (`source_type` = 9);
-- Remove Wrong Assassins
DELETE FROM `creature` WHERE (`id1` = 25484) AND (`guid` IN (44059, 44079, 44358, 44050, 44148, 44279));
-- Remove aura from Assassins
UPDATE `creature_template_addon` SET `auras` = '' WHERE (`entry` = 25484);
-- Delete assassin from Linked Respawn
DELETE FROM `linked_respawn` WHERE (`guid` IN (44050, 44148, 44279));
-- Shadowsword Vanquisher
DELETE FROM `creature` WHERE (`id1` = 25486) AND (`guid` IN (44059, 44079));
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
(44059, 25486, 0, 0, 580, 0, 0, 1, 1, 1, 1793.9098, 593.62085, 50.79819, 5.51524, 604800, 0, 0, 227630, 0, 0, 0, 0, 0, '', 0),
(44079, 25486, 0, 0, 580, 0, 0, 1, 1, 1, 1812.6184, 586.0417, 50.798874, 5.51524, 604800, 0, 0, 227630, 0, 0, 0, 0, 0, '', 0);
-- Shadowsword Manafiend
DELETE FROM `creature` WHERE (`id1` = 25483) AND (`guid` IN (44358));
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
(44358, 25483, 0, 0, 580, 0, 0, 1, 1, 1, 1817.5476, 593.4289, 50.8023, 4.04916, 604800, 0, 0, 227630, 30694, 0, 0, 0, 0, '', 0);
-- Shadowsword Assassins
UPDATE `creature` SET `position_x` = 1797.8773, `position_y` = 599.92163, `position_z` = 50.797134, `orientation` = 4.93928, `wander_distance` = 0, `MovementType` = 0 WHERE (`id1` = 25484) AND (`guid` IN (44268));
UPDATE `creature` SET `position_x` = 1767.5134, `position_y` = 567.4114, `position_z` = 85.28456, `orientation` = 2.53072, `wander_distance` = 0, `MovementType` = 0 WHERE (`id1` = 25484) AND (`guid` IN (44061));
UPDATE `creature` SET `position_x` = 1622.1783, `position_y` = 582.6476, `position_z` = 84.93455, `orientation` = 6.07799, `wander_distance` = 0, `MovementType` = 2 WHERE (`id1` = 25484) AND (`guid` IN (44239));
UPDATE `creature` SET `position_x` = 1600.872, `position_y` = 617.4745, `position_z` = 85.17309, `orientation` = 4.85612, `wander_distance` = 0, `MovementType` = 2 WHERE (`id1` = 25484) AND (`guid` IN (44175));
UPDATE `creature` SET `position_x` = 1572.9338, `position_y` = 582.4934, `position_z` = 50.615257, `orientation` = 4.9974, `wander_distance` = 0, `MovementType` = 2 WHERE (`id1` = 25484) AND (`guid` IN (44373));
DELETE FROM `creature_addon` WHERE (`guid` IN (44061, 44239, 44175, 44373));
INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
(44061, 0, 0, 1, 0, 0, 0, NULL),
(44239, 4423900, 0, 0, 0, 0, 0, NULL),
(44175, 4417500, 0, 0, 0, 0, 0, NULL),
(44373, 4437300, 0, 0, 0, 0, 0, NULL);
-- Shadowsword Vanquisher (Comments)
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 25486;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 25486);
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
(25486, 0, 0, 0, 0, 0, 100, 0, 2000, 5000, 7000, 18000, 0, 0, 11, 46468, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Vanquisher - In Combat - Cast \'Cleave\''),
(25486, 0, 1, 0, 0, 0, 100, 0, 8000, 10000, 17000, 28000, 0, 0, 11, 46469, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Vanquisher - In Combat - Cast \'Melt Armor\'');
-- Shadowsword Manafiend (Comments)
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 25483;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 25483);
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
(25483, 0, 0, 0, 0, 0, 100, 0, 2000, 5000, 14000, 18000, 0, 0, 11, 46453, 256, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Manafiend - In Combat - Cast \'Drain Mana\''),
(25483, 0, 1, 0, 0, 0, 100, 0, 6000, 10000, 17000, 28000, 0, 0, 11, 46457, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Manafiend - In Combat - Cast \'Arcane Explosion\'');
-- Shadowsword Assassin (Update + Comments)
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 25484;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 25484);
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
(25484, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 16380, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Assassin - On Reset - Cast \'Greater Invisibility\''),
(25484, 0, 1, 0, 1, 0, 100, 0, 2000, 2000, 2000, 2000, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 15, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Assassin - Out of Combat - Start Attacking'),
(25484, 0, 2, 3, 0, 0, 100, 0, 12000, 15000, 24000, 28000, 0, 0, 11, 46463, 0, 0, 0, 0, 0, 5, 30, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Assassin - In Combat - Cast \'Shadowstep\''),
(25484, 0, 3, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 14, 0, 100, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Assassin - In Combat - Set All Threat 0-100'),
(25484, 0, 4, 0, 9, 0, 100, 0, 0, 0, 5000, 5000, 10, 35, 11, 46460, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Assassin - Within 10-35 Range - Cast \'Aimed Shot\''),
(25484, 0, 5, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 46459, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Assassin - On Aggro - Cast \'Assassin`s Mark\'');
-- Setup Comment for a Vanquisher
UPDATE `creature` SET `Comment` = "has guid specific SAI" WHERE (`guid` = 44059) AND (`id1` = 25486);
UPDATE `creature` SET `Comment` = "has guid specific SAI" WHERE (`guid` = 44079) AND (`id1` = 25486);
UPDATE `creature` SET `Comment` = "has guid specific SAI" WHERE (`guid` = 44358) AND (`id1` = 25483);
UPDATE `creature` SET `Comment` = "has guid specific SAI" WHERE (`guid` = 44268) AND (`id1` = 25484);
-- Add Extra Flag for Vanquisters/Manafiend/Assassin (Don't Override SmartAI)
UPDATE `creature_template` SET `flags_extra` = `flags_extra` |134283264 WHERE (`entry` = 25486);
UPDATE `creature_template` SET `flags_extra` = `flags_extra` |134283264 WHERE (`entry` = 25484);
UPDATE `creature_template` SET `flags_extra` = `flags_extra` |134283264 WHERE (`entry` = 25483);
-- Add Specific SmartAI for two Vanquishers
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -44059);
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
(-44059, 0, 2, 3, 101, 0, 100, 257, 1, 60, 1000, 1000, 1000, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowsword Vanquisher - On 1 or More Players in Range - Say Line 0 (No Repeat)'),
(-44059, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1782.49, 565.23, 56.4824, 0, 'Shadowsword Vanquisher - On 1 or More Players in Range - Move To Self (No Repeat)'),
(-44059, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 10, 44079, 25486, 0, 0, 1795.16, 559.262, 55.452, 0, 'Shadowsword Vanquisher - On 1 or More Players in Range - Move to pos target 0 (No Repeat)'),
(-44059, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 10, 44358, 25483, 0, 0, 1796.5, 565.146, 53.8325, 0, 'Shadowsword Vanquisher - On 1 or More Players in Range - Move to pos target 0 (No Repeat)'),
(-44059, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, 10, 44268, 25484, 0, 0, 1792.09, 568.5, 53.796, 0, 'Shadowsword Vanquisher - On 1 or More Players in Range - Move to pos target 0 (No Repeat)'),
(-44059, 0, 7, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1782.49, 565.23, 56.4824, -2.29478, 'Shadowsword Vanquisher - On Evade - Set Home Position');
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -44079);
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
(-44079, 0, 2, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1795.16, 559.262, 55.452, -1.89717, 'Shadowsword Vanquisher - On Evade - Set Home Position');
-- Add Specific SmartAI for a Manafiend
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -44358);
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
(-44358, 0, 2, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1796.5, 565.146, 53.8325, -1.9621, 'Shadowsword Manafiend - On Evade - Set Home Position');
-- Add Specific SmartAI for an Assassin
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -44268);
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
(-44268, 0, 6, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1792.09, 568.5, 53.796, -1.9703, 'Shadowsword Assassin - On Evade - Set Home Position');

View File

@ -0,0 +1,4 @@
-- DB update 2025_03_06_01 -> 2025_03_08_00
-- Add Disable Gravity
UPDATE `creature_template_movement` SET `Flight` = 1 WHERE (`CreatureId` = 25502);

View File

@ -0,0 +1,4 @@
-- DB update 2025_03_08_00 -> 2025_03_08_01
--
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_sunblade_scout' WHERE (`entry` = 25372);
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 25372);

View File

@ -0,0 +1,70 @@
-- DB update 2025_03_08_01 -> 2025_03_09_00
-- add creature
SET @CGUID := 502;
DELETE FROM `creature` WHERE `id1` = 26280 AND `guid` = @CGUID;
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
(@CGUID, 26280, 0, 0, 571, 65, 4157, 1, 1, 1, 3373.642822265625, 2584.31494140625, 42.15882492065429687, 1.623156189918518066, 120, 0, 0, 9291, 3231, 0, 0, 0, 0, '', 58629, 0, 'has guid specific SAI');
-- This creature is not a fighting stance
DELETE FROM `creature_addon` WHERE (`guid` IN (@CGUID));
INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
(@CGUID, 0, 0, 0, 1, 0, 0, '');
-- Dragonblight Mage Hunter with guid 502 smart ai
SET @ENTRY := -1 * @CGUID;
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 26280;
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
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_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 21, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, 200124, 26496, 0, 0, 0, 0, 0, 'On home reached - Creature (26496) with guid 200124 (fetching): Set creature data #0 to 1'),
(@ENTRY, 0, 1, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, 200124, 26496, 0, 0, 0, 0, 0, 'On respawn - Creature(26496) with guid 200124 (fetching): Set creature data #0 to 1'),
(@ENTRY, 0, 2, 0, 38, 0, 100, 0, 0, 1, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Dragonblight Mage Hunter - On Data Set 0 1 - Respawn Self');
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = @ENTRY AND `SourceId` = 0;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES
(22, 3, @ENTRY, 0, 0, 36, 1, 0, 0, 0, 1, 'Dragonblight Mage Hunter must be dead to execute SAI (respawn)');
-- 134217728 - CREATURE_FLAG_EXTRA_DONT_OVERRIDE_SAI_ENTRY
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|134217728 WHERE (`entry` = 26280);
-- Wind Trader Mu'fah smart ai
SET @ENTRY := 26496;
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `source_type` = 9 AND `entryOrGuid` IN (@ENTRY * 100);
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_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 9, 0, 100, 0, 0, 0, 11000, 15000, 0, 20, 11, 51817, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 'Wind Trader Mu\'fah - Within 0-20 Range - Cast \'Typhoon\''),
(@ENTRY, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'On aggro - Self: Talk 1 to Attacked unit'),
(@ENTRY, 0, 2, 3, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, @CGUID, 26280, 0, 0, 0, 0, 0, 'On respawn - Creature (26280) with guid 502 (fetching): Set creature data #0 to 1'),
(@ENTRY, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 12980, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Wind Trader Mu\'fah - On Respawn - Cast \'Simple Teleport\''),
(@ENTRY, 0, 4, 0, 1, 0, 100, 0, 1000, 1000, 45000, 60000, 0, 0, 80, @ENTRY * 100, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Wind Trader Mu\'fah - Out of Combat - Run Script'),
(@ENTRY * 100, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Wind Trader Mu\'fah Talk 0 to invoker'),
(@ENTRY * 100, 9, 1, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10, @CGUID, 26280, 0, 0, 0, 0, 0, 'Creature with guid 502 (fetching): Talk 0 to invoker'),
(@ENTRY, 0, 5, 0, 21, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 0, 1, 0, 0, 0, 0, 10, @CGUID, 26280, 0, 0, 0, 0, 0, 'On home reached - Creature (26280) with guid 502 (fetching): Set creature data #0 to 1'),
(@ENTRY, 0, 6, 0, 38, 0, 100, 0, 0, 1, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On data[0] set to 1 - Self: Set respawn timer to 0 ms');
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = @ENTRY AND `SourceId` = 0;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `Comment`) VALUES
(22, 7, @ENTRY, 0, 0, 36, 1, 0, 0, 0, 1, 'Wind Trader Mu\'fah must be dead to execute SAI (respawn)');
DELETE FROM `creature_text` WHERE `CreatureID` = 26496;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(26496, 0, 0, 'You will tell your commander that I will not wait a moment longer! Does he want this alliance or not?!', 12, 0, 100, 396, 0, 0, 25707, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 1, 'I have been waiting here for an eternity since our last meeting! When will Goramosh be done with his ritual?', 12, 0, 100, 396, 0, 0, 25708, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 2, 'This is insufferable! I represent a nexus-prince, I am not to be made to wait! Goramosh should be waiting on me!', 12, 0, 100, 15, 0, 0, 25710, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 3, 'I was personally assured by Malygos that your commander would make the details of this accord his top priority. Now let me pass!', 12, 0, 100, 15, 0, 0, 25711, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 4, 'If I have to wait much longer, I will be forced to reconsider the proposed accord between the Ethereum and the Blue Dragonflight!', 12, 0, 100, 15, 0, 0, 25712, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 5, 'You are nothing but an underling! I will not wait a moment longer! Escort me to Goramosh immediately!', 12, 0, 100, 396, 0, 0, 25713, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 6, 'Yes, yes, I am given to understand that the ley line has already been diverted. I will wait no longer... summon Goramosh this instant!', 12, 0, 100, 15, 0, 0, 25735, 0, 'Wind Trader Mu\'fah'),
(26496, 0, 7, 'Your surge needle appears to have worked perfectly. Surely Goramosh now has time to speak further of the proposed accord?', 12, 0, 100, 396, 0, 0, 25736, 0, 'Wind Trader Mu\'fah'),
(26496, 1, 0, 'What\'s this, more delays?!', 12, 0, 100, 0, 0, 0, 25715, 0, 'Wind Trader Mu\'fah');
DELETE FROM `creature_text` WHERE `CreatureID` = 26280;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(26280, 0, 0, 'I cannot.', 12, 0, 100, 396, 0, 0, 25912, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 1, 'No.', 12, 0, 100, 396, 0, 0, 25913, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 2, 'You\'ll have to be patient.', 12, 0, 100, 396, 0, 0, 25914, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 3, 'Goramosh is busy with a ritual right now.', 12, 0, 100, 396, 0, 0, 25915, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 4, 'My orders are that you must wait here.', 12, 0, 100, 396, 0, 0, 25916, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 5, 'The master will be with you momentarily.', 12, 0, 100, 396, 0, 0, 25917, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 6, 'It won\'t be long now.', 12, 0, 100, 396, 0, 0, 25918, 0, 'Dragonblight Mage Hunter'),
(26280, 0, 7, 'My apologies, ambassador. My orders were quite clear.', 12, 0, 100, 396, 0, 0, 25919, 0, 'Dragonblight Mage Hunter');

View File

@ -0,0 +1,3 @@
-- DB update 2025_03_09_00 -> 2025_03_09_01
-- Increase Fists of fury proc chance to approx. 5%
UPDATE `spell_proc_event` SET `ppmRate` = 1.5 WHERE (`entry` = 41989);

View File

@ -0,0 +1,3 @@
-- DB update 2025_03_09_01 -> 2025_03_09_02
-- XOR PrevQuestID that was 499 Elixir of Suffering
UPDATE `quest_template_addon` SET `PrevQuestID` = 0 WHERE `ID` = 501;

View File

@ -0,0 +1,737 @@
-- DB update 2025_03_09_02 -> 2025_03_09_03
--
-- `reference_loot_template` that are currently NULL
UPDATE `reference_loot_template` SET `comment` = "Finkle's Lava Dredger" WHERE (`entry` = 12000 AND `item` = 18803);
UPDATE `reference_loot_template` SET `comment` = "Core Hound Tooth" WHERE (`entry` = 12000 AND `item` = 18805);
UPDATE `reference_loot_template` SET `comment` = "Core Forged Greaves" WHERE (`entry` = 12000 AND `item` = 18806);
UPDATE `reference_loot_template` SET `comment` = "Gloves of the Hypnotic Flame" WHERE (`entry` = 12000 AND `item` = 18808);
UPDATE `reference_loot_template` SET `comment` = "Sash of Whispered Secrets" WHERE (`entry` = 12000 AND `item` = 18809);
UPDATE `reference_loot_template` SET `comment` = "Wild Growth Spaulders" WHERE (`entry` = 12000 AND `item` = 18810);
UPDATE `reference_loot_template` SET `comment` = "Fireproof Cloak" WHERE (`entry` = 12000 AND `item` = 18811);
UPDATE `reference_loot_template` SET `comment` = "Wristguards of True Flight" WHERE (`entry` = 12000 AND `item` = 18812);
UPDATE `reference_loot_template` SET `comment` = "Fireguard Shoulders" WHERE (`entry` = 12000 AND `item` = 19139);
UPDATE `reference_loot_template` SET `comment` = "Cauterizing Band" WHERE (`entry` = 12000 AND `item` = 19140);
UPDATE `reference_loot_template` SET `comment` = "Pattern: Core Armor Kit" WHERE (`entry` = 30001 AND `item` = 18252);
UPDATE `reference_loot_template` SET `comment` = "Recipe: Major Rejuvenation Potion" WHERE (`entry` = 30001 AND `item` = 18257);
UPDATE `reference_loot_template` SET `comment` = "Formula: Enchant Weapon - Spellpower" WHERE (`entry` = 30001 AND `item` = 18259);
UPDATE `reference_loot_template` SET `comment` = "Formula: Enchant Weapon - Healing Power" WHERE (`entry` = 30001 AND `item` = 18260);
UPDATE `reference_loot_template` SET `comment` = "Plans: Elemental Sharpening Stone" WHERE (`entry` = 30001 AND `item` = 18264);
UPDATE `reference_loot_template` SET `comment` = "Pattern: Flarecore Wraps" WHERE (`entry` = 30001 AND `item` = 18265);
UPDATE `reference_loot_template` SET `comment` = "Schematic: Biznicks 247x128 Accurascope" WHERE (`entry` = 30001 AND `item` = 18290);
UPDATE `reference_loot_template` SET `comment` = "Schematic: Force Reactive Disk" WHERE (`entry` = 30001 AND `item` = 18291);
UPDATE `reference_loot_template` SET `comment` = "Schematic: Core Marksman Rifle" WHERE (`entry` = 30001 AND `item` = 18292);
UPDATE `reference_loot_template` SET `comment` = "Pattern: Core Felcloth Bag" WHERE (`entry` = 30001 AND `item` = 21371);
UPDATE `reference_loot_template` SET `comment` = "Elven Spirit Claws" WHERE (`entry` = 30044 AND `item` = 2564);
UPDATE `reference_loot_template` SET `comment` = "Six Demon Bag" WHERE (`entry` = 30044 AND `item` = 7734);
UPDATE `reference_loot_template` SET `comment` = "Cow King's Hide" WHERE (`entry` = 30044 AND `item` = 13009);
UPDATE `reference_loot_template` SET `comment` = "Basilisk Bone" WHERE (`entry` = 30044 AND `item` = 13030);
UPDATE `reference_loot_template` SET `comment` = "Blanchard's Stout" WHERE (`entry` = 30044 AND `item` = 13046);
UPDATE `reference_loot_template` SET `comment` = "Wand of Allistarj" WHERE (`entry` = 30044 AND `item` = 13065);
UPDATE `reference_loot_template` SET `comment` = "Wyrmslayer Spaulders" WHERE (`entry` = 30044 AND `item` = 13066);
UPDATE `reference_loot_template` SET `comment` = "Horizon Choker" WHERE (`entry` = 30044 AND `item` = 13085);
UPDATE `reference_loot_template` SET `comment` = "Elven Chain Boots" WHERE (`entry` = 30044 AND `item` = 13125);
UPDATE `reference_loot_template` SET `comment` = "Guttbuster" WHERE (`entry` = 30044 AND `item` = 13139);
UPDATE `reference_loot_template` SET `comment` = "High Councillor's Tunic" WHERE (`entry` = 30089 AND `item` = 10135);
UPDATE `reference_loot_template` SET `comment` = "High Councillor's Robe" WHERE (`entry` = 30089 AND `item` = 10143);
UPDATE `reference_loot_template` SET `comment` = "Mighty Tunic" WHERE (`entry` = 30089 AND `item` = 10151);
UPDATE `reference_loot_template` SET `comment` = "Mercurial Breastplate" WHERE (`entry` = 30089 AND `item` = 10157);
UPDATE `reference_loot_template` SET `comment` = "Mercurial Guard" WHERE (`entry` = 30089 AND `item` = 10158);
UPDATE `reference_loot_template` SET `comment` = "Master's Vest" WHERE (`entry` = 30089 AND `item` = 10246);
UPDATE `reference_loot_template` SET `comment` = "Master's Leggings" WHERE (`entry` = 30089 AND `item` = 10252);
UPDATE `reference_loot_template` SET `comment` = "Master's Robe" WHERE (`entry` = 30089 AND `item` = 10254);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Legguards" WHERE (`entry` = 30089 AND `item` = 10262);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Tunic" WHERE (`entry` = 30089 AND `item` = 10264);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Breastplate" WHERE (`entry` = 30089 AND `item` = 10266);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Shield" WHERE (`entry` = 30089 AND `item` = 10271);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Legplates" WHERE (`entry` = 30089 AND `item` = 10273);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Shield" WHERE (`entry` = 30089 AND `item` = 10367);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Armor" WHERE (`entry` = 30089 AND `item` = 10384);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Legplates" WHERE (`entry` = 30089 AND `item` = 10389);
UPDATE `reference_loot_template` SET `comment` = "Opal Ring" WHERE (`entry` = 30089 AND `item` = 11980);
UPDATE `reference_loot_template` SET `comment` = "Prismatic Band" WHERE (`entry` = 30089 AND `item` = 12017);
UPDATE `reference_loot_template` SET `comment` = "Prismatic Pendant" WHERE (`entry` = 30089 AND `item` = 12048);
UPDATE `reference_loot_template` SET `comment` = "Demonic Bone Ring" WHERE (`entry` = 30089 AND `item` = 12058);
UPDATE `reference_loot_template` SET `comment` = "Eternal Chestguard" WHERE (`entry` = 30089 AND `item` = 14328);
UPDATE `reference_loot_template` SET `comment` = "Eternal Crown" WHERE (`entry` = 30089 AND `item` = 14332);
UPDATE `reference_loot_template` SET `comment` = "Eternal Wraps" WHERE (`entry` = 30089 AND `item` = 14336);
UPDATE `reference_loot_template` SET `comment` = "Elunarian Vest" WHERE (`entry` = 30089 AND `item` = 14456);
UPDATE `reference_loot_template` SET `comment` = "Elunarian Silk Robes" WHERE (`entry` = 30089 AND `item` = 14464);
UPDATE `reference_loot_template` SET `comment` = "Indomitable Vest" WHERE (`entry` = 30089 AND `item` = 14680);
UPDATE `reference_loot_template` SET `comment` = "Warstrike Chestguard" WHERE (`entry` = 30089 AND `item` = 14811);
UPDATE `reference_loot_template` SET `comment` = "Warstrike Buckler" WHERE (`entry` = 30089 AND `item` = 14812);
UPDATE `reference_loot_template` SET `comment` = "Exalted Harness" WHERE (`entry` = 30089 AND `item` = 14975);
UPDATE `reference_loot_template` SET `comment` = "Exalted Helmet" WHERE (`entry` = 30089 AND `item` = 14979);
UPDATE `reference_loot_template` SET `comment` = "Exalted Shield" WHERE (`entry` = 30089 AND `item` = 14982);
UPDATE `reference_loot_template` SET `comment` = "Holy War Sword" WHERE (`entry` = 30089 AND `item` = 15221);
UPDATE `reference_loot_template` SET `comment` = "Demon's Claw" WHERE (`entry` = 30089 AND `item` = 15240);
UPDATE `reference_loot_template` SET `comment` = "Bloodstrike Dagger" WHERE (`entry` = 30089 AND `item` = 15247);
UPDATE `reference_loot_template` SET `comment` = "Divine Warblade" WHERE (`entry` = 30089 AND `item` = 15258);
UPDATE `reference_loot_template` SET `comment` = "Lunar Wand" WHERE (`entry` = 30089 AND `item` = 15283);
UPDATE `reference_loot_template` SET `comment` = "Archstrike Bow" WHERE (`entry` = 30089 AND `item` = 15289);
UPDATE `reference_loot_template` SET `comment` = "Supreme Crown" WHERE (`entry` = 30089 AND `item` = 15439);
UPDATE `reference_loot_template` SET `comment` = "Supreme Breastplate" WHERE (`entry` = 30089 AND `item` = 15442);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Chestpiece" WHERE (`entry` = 30089 AND `item` = 15680);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Skullcap" WHERE (`entry` = 30089 AND `item` = 15684);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Shield" WHERE (`entry` = 30089 AND `item` = 15687);
UPDATE `reference_loot_template` SET `comment` = "High Councillor's Scepter" WHERE (`entry` = 30089 AND `item` = 15941);
UPDATE `reference_loot_template` SET `comment` = "Master's Rod" WHERE (`entry` = 30089 AND `item` = 15942);
UPDATE `reference_loot_template` SET `comment` = "Elunarian Sphere" WHERE (`entry` = 30089 AND `item` = 15968);
UPDATE `reference_loot_template` SET `comment` = "Eternal Rod" WHERE (`entry` = 30089 AND `item` = 15989);
UPDATE `reference_loot_template` SET `comment` = "Monsoon Belt" WHERE (`entry` = 30105 AND `item` = 30044);
UPDATE `reference_loot_template` SET `comment` = "Aegis of Stormwind" WHERE (`entry` = 30171 AND `item` = 1203);
UPDATE `reference_loot_template` SET `comment` = "Orb of Deception" WHERE (`entry` = 30171 AND `item` = 1973);
UPDATE `reference_loot_template` SET `comment` = "Elven Spirit Claws" WHERE (`entry` = 30171 AND `item` = 2564);
UPDATE `reference_loot_template` SET `comment` = "Lapidis Tankard of Tidesippe" WHERE (`entry` = 30171 AND `item` = 4696);
UPDATE `reference_loot_template` SET `comment` = "Eye of Adaegus" WHERE (`entry` = 30171 AND `item` = 5266);
UPDATE `reference_loot_template` SET `comment` = "Scarlet Kris" WHERE (`entry` = 30171 AND `item` = 5267);
UPDATE `reference_loot_template` SET `comment` = "Sword of Zeal" WHERE (`entry` = 30171 AND `item` = 6622);
UPDATE `reference_loot_template` SET `comment` = "Six Demon Bag" WHERE (`entry` = 30171 AND `item` = 7734);
UPDATE `reference_loot_template` SET `comment` = "Plans: Mithril Shield Spike" WHERE (`entry` = 30171 AND `item` = 7976);
UPDATE `reference_loot_template` SET `comment` = "Plans: Mithril Scale Shoulders" WHERE (`entry` = 30171 AND `item` = 7991);
UPDATE `reference_loot_template` SET `comment` = "Plans: Runed Mithril Hammer" WHERE (`entry` = 30171 AND `item` = 8028);
UPDATE `reference_loot_template` SET `comment` = "Earthborn Kilt" WHERE (`entry` = 30171 AND `item` = 9402);
UPDATE `reference_loot_template` SET `comment` = "Schematic: Spellpower Goggles Xtreme" WHERE (`entry` = 30171 AND `item` = 10605);
UPDATE `reference_loot_template` SET `comment` = "Schematic: Sniper Scope" WHERE (`entry` = 30171 AND `item` = 10608);
UPDATE `reference_loot_template` SET `comment` = "Uther's Strength" WHERE (`entry` = 30171 AND `item` = 11302);
UPDATE `reference_loot_template` SET `comment` = "Plans: Dawnbringer Shoulders" WHERE (`entry` = 30171 AND `item` = 12698);
UPDATE `reference_loot_template` SET `comment` = "Plans: Whitesoul Helm" WHERE (`entry` = 30171 AND `item` = 12711);
UPDATE `reference_loot_template` SET `comment` = "Plans: Lionheart Helm" WHERE (`entry` = 30171 AND `item` = 12717);
UPDATE `reference_loot_template` SET `comment` = "Plans: Stronghold Gauntlets" WHERE (`entry` = 30171 AND `item` = 12720);
UPDATE `reference_loot_template` SET `comment` = "Plans: Invulnerable Mail" WHERE (`entry` = 30171 AND `item` = 12728);
UPDATE `reference_loot_template` SET `comment` = "Staff of Hale Magefire" WHERE (`entry` = 30171 AND `item` = 13000);
UPDATE `reference_loot_template` SET `comment` = "Maiden's Circle" WHERE (`entry` = 30171 AND `item` = 13001);
UPDATE `reference_loot_template` SET `comment` = "Lady Alizabeth's Pendant" WHERE (`entry` = 30171 AND `item` = 13002);
UPDATE `reference_loot_template` SET `comment` = "Lord Alexander's Battle Axe" WHERE (`entry` = 30171 AND `item` = 13003);
UPDATE `reference_loot_template` SET `comment` = "Torch of Austen" WHERE (`entry` = 30171 AND `item` = 13004);
UPDATE `reference_loot_template` SET `comment` = "Mass of McGowan" WHERE (`entry` = 30171 AND `item` = 13006);
UPDATE `reference_loot_template` SET `comment` = "Mageflame Cloak" WHERE (`entry` = 30171 AND `item` = 13007);
UPDATE `reference_loot_template` SET `comment` = "Dalewind Trousers" WHERE (`entry` = 30171 AND `item` = 13008);
UPDATE `reference_loot_template` SET `comment` = "Cow King's Hide" WHERE (`entry` = 30171 AND `item` = 13009);
UPDATE `reference_loot_template` SET `comment` = "Elder Wizard's Mantle" WHERE (`entry` = 30171 AND `item` = 13013);
UPDATE `reference_loot_template` SET `comment` = "Serathil" WHERE (`entry` = 30171 AND `item` = 13015);
UPDATE `reference_loot_template` SET `comment` = "Basilisk Bone" WHERE (`entry` = 30171 AND `item` = 13030);
UPDATE `reference_loot_template` SET `comment` = "Assassination Blade" WHERE (`entry` = 30171 AND `item` = 13036);
UPDATE `reference_loot_template` SET `comment` = "Heartseeking Crossbow" WHERE (`entry` = 30171 AND `item` = 13040);
UPDATE `reference_loot_template` SET `comment` = "Twig of the World Tree" WHERE (`entry` = 30171 AND `item` = 13047);
UPDATE `reference_loot_template` SET `comment` = "Doombringer" WHERE (`entry` = 30171 AND `item` = 13053);
UPDATE `reference_loot_template` SET `comment` = "The Needler" WHERE (`entry` = 30171 AND `item` = 13060);
UPDATE `reference_loot_template` SET `comment` = "Wyrmslayer Spaulders" WHERE (`entry` = 30171 AND `item` = 13066);
UPDATE `reference_loot_template` SET `comment` = "Hydralick Armor" WHERE (`entry` = 30171 AND `item` = 13067);
UPDATE `reference_loot_template` SET `comment` = "Sapphiron's Scale Boots" WHERE (`entry` = 30171 AND `item` = 13070);
UPDATE `reference_loot_template` SET `comment` = "Stonegrip Gauntlets" WHERE (`entry` = 30171 AND `item` = 13072);
UPDATE `reference_loot_template` SET `comment` = "Mugthol's Helm" WHERE (`entry` = 30171 AND `item` = 13073);
UPDATE `reference_loot_template` SET `comment` = "Direwing Legguards" WHERE (`entry` = 30171 AND `item` = 13075);
UPDATE `reference_loot_template` SET `comment` = "Girdle of Uther" WHERE (`entry` = 30171 AND `item` = 13077);
UPDATE `reference_loot_template` SET `comment` = "Garrett Family Crest" WHERE (`entry` = 30171 AND `item` = 13083);
UPDATE `reference_loot_template` SET `comment` = "Horizon Choker" WHERE (`entry` = 30171 AND `item` = 13085);
UPDATE `reference_loot_template` SET `comment` = "Medallion of Grand Marshal Morris" WHERE (`entry` = 30171 AND `item` = 13091);
UPDATE `reference_loot_template` SET `comment` = "Band of the Hierophant" WHERE (`entry` = 30171 AND `item` = 13096);
UPDATE `reference_loot_template` SET `comment` = "Magiskull Cuffs" WHERE (`entry` = 30171 AND `item` = 13107);
UPDATE `reference_loot_template` SET `comment` = "Sandals of the Insurgent" WHERE (`entry` = 30171 AND `item` = 13111);
UPDATE `reference_loot_template` SET `comment` = "Feathermoon Headdress" WHERE (`entry` = 30171 AND `item` = 13113);
UPDATE `reference_loot_template` SET `comment` = "Spaulders of the Unseen" WHERE (`entry` = 30171 AND `item` = 13116);
UPDATE `reference_loot_template` SET `comment` = "Serpentine Sash" WHERE (`entry` = 30171 AND `item` = 13118);
UPDATE `reference_loot_template` SET `comment` = "Deepfury Bracers" WHERE (`entry` = 30171 AND `item` = 13120);
UPDATE `reference_loot_template` SET `comment` = "Dreamwalker Armor" WHERE (`entry` = 30171 AND `item` = 13123);
UPDATE `reference_loot_template` SET `comment` = "Elven Chain Boots" WHERE (`entry` = 30171 AND `item` = 13125);
UPDATE `reference_loot_template` SET `comment` = "Battlecaller Gauntlets" WHERE (`entry` = 30171 AND `item` = 13126);
UPDATE `reference_loot_template` SET `comment` = "Windrunner Legguards" WHERE (`entry` = 30171 AND `item` = 13130);
UPDATE `reference_loot_template` SET `comment` = "Drakesfire Epaulets" WHERE (`entry` = 30171 AND `item` = 13133);
UPDATE `reference_loot_template` SET `comment` = "Lordly Armguards" WHERE (`entry` = 30171 AND `item` = 13135);
UPDATE `reference_loot_template` SET `comment` = "Serenity Belt" WHERE (`entry` = 30171 AND `item` = 13144);
UPDATE `reference_loot_template` SET `comment` = "Shell Launcher Shotgun" WHERE (`entry` = 30171 AND `item` = 13146);
UPDATE `reference_loot_template` SET `comment` = "Pattern: Mooncloth Vest" WHERE (`entry` = 30171 AND `item` = 14501);
UPDATE `reference_loot_template` SET `comment` = "Pattern: Mooncloth Circlet" WHERE (`entry` = 30171 AND `item` = 14509);
UPDATE `reference_loot_template` SET `comment` = "Pattern: Gloves of Spell Mastery" WHERE (`entry` = 30171 AND `item` = 14511);
UPDATE `reference_loot_template` SET `comment` = "Codex: Prayer of Fortitude" WHERE (`entry` = 30171 AND `item` = 17413);
UPDATE `reference_loot_template` SET `comment` = "Codex: Prayer of Fortitude II" WHERE (`entry` = 30171 AND `item` = 17414);
UPDATE `reference_loot_template` SET `comment` = "Book: Gift of the Wild" WHERE (`entry` = 30171 AND `item` = 17682);
UPDATE `reference_loot_template` SET `comment` = "Book: Gift of the Wild II" WHERE (`entry` = 30171 AND `item` = 17683);
UPDATE `reference_loot_template` SET `comment` = "Tome of Arcane Brilliance" WHERE (`entry` = 30171 AND `item` = 18600);
UPDATE `reference_loot_template` SET `comment` = "Plans: Titanic Leggings" WHERE (`entry` = 30171 AND `item` = 22388);
UPDATE `reference_loot_template` SET `comment` = "Plans: Sageblade" WHERE (`entry` = 30171 AND `item` = 22389);
UPDATE `reference_loot_template` SET `comment` = "Plans: Persuader" WHERE (`entry` = 30171 AND `item` = 22390);
UPDATE `reference_loot_template` SET `comment` = "Codex: Prayer of Shadow Protection" WHERE (`entry` = 30171 AND `item` = 22393);
UPDATE `reference_loot_template` SET `comment` = "Tome of Frost Ward V" WHERE (`entry` = 30171 AND `item` = 22890);
UPDATE `reference_loot_template` SET `comment` = "Grimoire of Shadow Ward IV" WHERE (`entry` = 30171 AND `item` = 22891);
UPDATE `reference_loot_template` SET `comment` = "Recipe: Elixir of Dream Vision" WHERE (`entry` = 30172 AND `item` = 9297);
UPDATE `reference_loot_template` SET `comment` = "Master's Vest" WHERE (`entry` = 30172 AND `item` = 10246);
UPDATE `reference_loot_template` SET `comment` = "Master's Boots" WHERE (`entry` = 30172 AND `item` = 10247);
UPDATE `reference_loot_template` SET `comment` = "Master's Bracers" WHERE (`entry` = 30172 AND `item` = 10248);
UPDATE `reference_loot_template` SET `comment` = "Master's Cloak" WHERE (`entry` = 30172 AND `item` = 10249);
UPDATE `reference_loot_template` SET `comment` = "Master's Hat" WHERE (`entry` = 30172 AND `item` = 10250);
UPDATE `reference_loot_template` SET `comment` = "Master's Gloves" WHERE (`entry` = 30172 AND `item` = 10251);
UPDATE `reference_loot_template` SET `comment` = "Master's Leggings" WHERE (`entry` = 30172 AND `item` = 10252);
UPDATE `reference_loot_template` SET `comment` = "Master's Mantle" WHERE (`entry` = 30172 AND `item` = 10253);
UPDATE `reference_loot_template` SET `comment` = "Master's Robe" WHERE (`entry` = 30172 AND `item` = 10254);
UPDATE `reference_loot_template` SET `comment` = "Master's Belt" WHERE (`entry` = 30172 AND `item` = 10255);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Bracers" WHERE (`entry` = 30172 AND `item` = 10256);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Boots" WHERE (`entry` = 30172 AND `item` = 10257);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Cape" WHERE (`entry` = 30172 AND `item` = 10258);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Belt" WHERE (`entry` = 30172 AND `item` = 10259);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Gloves" WHERE (`entry` = 30172 AND `item` = 10260);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Bandana" WHERE (`entry` = 30172 AND `item` = 10261);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Legguards" WHERE (`entry` = 30172 AND `item` = 10262);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Shoulders" WHERE (`entry` = 30172 AND `item` = 10263);
UPDATE `reference_loot_template` SET `comment` = "Adventurer's Tunic" WHERE (`entry` = 30172 AND `item` = 10264);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Bracers" WHERE (`entry` = 30172 AND `item` = 10265);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Breastplate" WHERE (`entry` = 30172 AND `item` = 10266);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Cape" WHERE (`entry` = 30172 AND `item` = 10267);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Gauntlets" WHERE (`entry` = 30172 AND `item` = 10268);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Girdle" WHERE (`entry` = 30172 AND `item` = 10269);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Boots" WHERE (`entry` = 30172 AND `item` = 10270);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Circlet" WHERE (`entry` = 30172 AND `item` = 10272);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Legplates" WHERE (`entry` = 30172 AND `item` = 10273);
UPDATE `reference_loot_template` SET `comment` = "Masterwork Pauldrons" WHERE (`entry` = 30172 AND `item` = 10274);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Shield" WHERE (`entry` = 30172 AND `item` = 10367);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Armor" WHERE (`entry` = 30172 AND `item` = 10384);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Greaves" WHERE (`entry` = 30172 AND `item` = 10385);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Gauntlets" WHERE (`entry` = 30172 AND `item` = 10386);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Girdle" WHERE (`entry` = 30172 AND `item` = 10387);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Helm" WHERE (`entry` = 30172 AND `item` = 10388);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Legplates" WHERE (`entry` = 30172 AND `item` = 10389);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Pauldrons" WHERE (`entry` = 30172 AND `item` = 10390);
UPDATE `reference_loot_template` SET `comment` = "Hyperion Vambraces" WHERE (`entry` = 30172 AND `item` = 10391);
UPDATE `reference_loot_template` SET `comment` = "Formula: Enchant Shield - Frost Resistance" WHERE (`entry` = 30172 AND `item` = 11224);
UPDATE `reference_loot_template` SET `comment` = "Formula: Enchant Gloves - Riding Skill" WHERE (`entry` = 30172 AND `item` = 11226);
UPDATE `reference_loot_template` SET `comment` = "Prismatic Band" WHERE (`entry` = 30172 AND `item` = 12017);
UPDATE `reference_loot_template` SET `comment` = "Prismatic Pendant" WHERE (`entry` = 30172 AND `item` = 12048);
UPDATE `reference_loot_template` SET `comment` = "Plans: Thorium Armor" WHERE (`entry` = 30172 AND `item` = 12682);
UPDATE `reference_loot_template` SET `comment` = "Plans: Thorium Belt" WHERE (`entry` = 30172 AND `item` = 12683);
UPDATE `reference_loot_template` SET `comment` = "Plans: Thorium Bracers" WHERE (`entry` = 30172 AND `item` = 12684);
UPDATE `reference_loot_template` SET `comment` = "Plans: Radiant Belt" WHERE (`entry` = 30172 AND `item` = 12685);
UPDATE `reference_loot_template` SET `comment` = "Plans: Radiant Breastplate" WHERE (`entry` = 30172 AND `item` = 12689);
UPDATE `reference_loot_template` SET `comment` = "Plans: Radiant Circlet" WHERE (`entry` = 30172 AND `item` = 12702);
UPDATE `reference_loot_template` SET `comment` = "Recipe: Transmute Undeath to Water" WHERE (`entry` = 30172 AND `item` = 13486);
UPDATE `reference_loot_template` SET `comment` = "Recipe: Transmute Water to Undeath" WHERE (`entry` = 30172 AND `item` = 13487);
UPDATE `reference_loot_template` SET `comment` = "Recipe: Transmute Life to Earth" WHERE (`entry` = 30172 AND `item` = 13488);
UPDATE `reference_loot_template` SET `comment` = "Recipe: Transmute Earth to Life" WHERE (`entry` = 30172 AND `item` = 13489);
UPDATE `reference_loot_template` SET `comment` = "Eternal Chestguard" WHERE (`entry` = 30172 AND `item` = 14328);
UPDATE `reference_loot_template` SET `comment` = "Eternal Boots" WHERE (`entry` = 30172 AND `item` = 14329);
UPDATE `reference_loot_template` SET `comment` = "Eternal Bindings" WHERE (`entry` = 30172 AND `item` = 14330);
UPDATE `reference_loot_template` SET `comment` = "Eternal Cloak" WHERE (`entry` = 30172 AND `item` = 14331);
UPDATE `reference_loot_template` SET `comment` = "Eternal Crown" WHERE (`entry` = 30172 AND `item` = 14332);
UPDATE `reference_loot_template` SET `comment` = "Eternal Gloves" WHERE (`entry` = 30172 AND `item` = 14333);
UPDATE `reference_loot_template` SET `comment` = "Eternal Sarong" WHERE (`entry` = 30172 AND `item` = 14334);
UPDATE `reference_loot_template` SET `comment` = "Eternal Spaulders" WHERE (`entry` = 30172 AND `item` = 14335);
UPDATE `reference_loot_template` SET `comment` = "Eternal Wraps" WHERE (`entry` = 30172 AND `item` = 14336);
UPDATE `reference_loot_template` SET `comment` = "Eternal Cord" WHERE (`entry` = 30172 AND `item` = 14337);
UPDATE `reference_loot_template` SET `comment` = "Exalted Harness" WHERE (`entry` = 30172 AND `item` = 14975);
UPDATE `reference_loot_template` SET `comment` = "Exalted Gauntlets" WHERE (`entry` = 30172 AND `item` = 14976);
UPDATE `reference_loot_template` SET `comment` = "Exalted Girdle" WHERE (`entry` = 30172 AND `item` = 14977);
UPDATE `reference_loot_template` SET `comment` = "Exalted Sabatons" WHERE (`entry` = 30172 AND `item` = 14978);
UPDATE `reference_loot_template` SET `comment` = "Exalted Helmet" WHERE (`entry` = 30172 AND `item` = 14979);
UPDATE `reference_loot_template` SET `comment` = "Exalted Legplates" WHERE (`entry` = 30172 AND `item` = 14980);
UPDATE `reference_loot_template` SET `comment` = "Exalted Epaulets" WHERE (`entry` = 30172 AND `item` = 14981);
UPDATE `reference_loot_template` SET `comment` = "Exalted Shield" WHERE (`entry` = 30172 AND `item` = 14982);
UPDATE `reference_loot_template` SET `comment` = "Exalted Armsplints" WHERE (`entry` = 30172 AND `item` = 14983);
UPDATE `reference_loot_template` SET `comment` = "Holy War Sword" WHERE (`entry` = 30172 AND `item` = 15221);
UPDATE `reference_loot_template` SET `comment` = "Blesswind Hammer" WHERE (`entry` = 30172 AND `item` = 15229);
UPDATE `reference_loot_template` SET `comment` = "Demon's Claw" WHERE (`entry` = 30172 AND `item` = 15240);
UPDATE `reference_loot_template` SET `comment` = "Bloodstrike Dagger" WHERE (`entry` = 30172 AND `item` = 15247);
UPDATE `reference_loot_template` SET `comment` = "Divine Warblade" WHERE (`entry` = 30172 AND `item` = 15258);
UPDATE `reference_loot_template` SET `comment` = "Brutehammer" WHERE (`entry` = 30172 AND `item` = 15267);
UPDATE `reference_loot_template` SET `comment` = "Death Striker" WHERE (`entry` = 30172 AND `item` = 15273);
UPDATE `reference_loot_template` SET `comment` = "Solstice Staff" WHERE (`entry` = 30172 AND `item` = 15278);
UPDATE `reference_loot_template` SET `comment` = "Lunar Wand" WHERE (`entry` = 30172 AND `item` = 15283);
UPDATE `reference_loot_template` SET `comment` = "Archstrike Bow" WHERE (`entry` = 30172 AND `item` = 15289);
UPDATE `reference_loot_template` SET `comment` = "Sharpshooter Harquebus" WHERE (`entry` = 30172 AND `item` = 15325);
UPDATE `reference_loot_template` SET `comment` = "Supreme Sash" WHERE (`entry` = 30172 AND `item` = 15434);
UPDATE `reference_loot_template` SET `comment` = "Supreme Shoes" WHERE (`entry` = 30172 AND `item` = 15435);
UPDATE `reference_loot_template` SET `comment` = "Supreme Bracers" WHERE (`entry` = 30172 AND `item` = 15436);
UPDATE `reference_loot_template` SET `comment` = "Supreme Cape" WHERE (`entry` = 30172 AND `item` = 15437);
UPDATE `reference_loot_template` SET `comment` = "Supreme Gloves" WHERE (`entry` = 30172 AND `item` = 15438);
UPDATE `reference_loot_template` SET `comment` = "Supreme Crown" WHERE (`entry` = 30172 AND `item` = 15439);
UPDATE `reference_loot_template` SET `comment` = "Supreme Leggings" WHERE (`entry` = 30172 AND `item` = 15440);
UPDATE `reference_loot_template` SET `comment` = "Supreme Shoulders" WHERE (`entry` = 30172 AND `item` = 15441);
UPDATE `reference_loot_template` SET `comment` = "Supreme Breastplate" WHERE (`entry` = 30172 AND `item` = 15442);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Sabatons" WHERE (`entry` = 30172 AND `item` = 15678);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Bracers" WHERE (`entry` = 30172 AND `item` = 15679);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Chestpiece" WHERE (`entry` = 30172 AND `item` = 15680);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Cloak" WHERE (`entry` = 30172 AND `item` = 15681);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Gauntlets" WHERE (`entry` = 30172 AND `item` = 15682);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Girdle" WHERE (`entry` = 30172 AND `item` = 15683);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Skullcap" WHERE (`entry` = 30172 AND `item` = 15684);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Legplates" WHERE (`entry` = 30172 AND `item` = 15685);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Shoulder Pads" WHERE (`entry` = 30172 AND `item` = 15686);
UPDATE `reference_loot_template` SET `comment` = "Triumphant Shield" WHERE (`entry` = 30172 AND `item` = 15687);
UPDATE `reference_loot_template` SET `comment` = "Master's Rod" WHERE (`entry` = 30172 AND `item` = 15942);
UPDATE `reference_loot_template` SET `comment` = "Schematic: Lifelike Mechanical Toad" WHERE (`entry` = 30172 AND `item` = 16044);
UPDATE `reference_loot_template` SET `comment` = "Schematic: Arcane Bomb" WHERE (`entry` = 30172 AND `item` = 16055);
UPDATE `reference_loot_template` SET `comment` = "Formula: Enchant Chest - Greater Stats" WHERE (`entry` = 30172 AND `item` = 16253);
UPDATE `reference_loot_template` SET `comment` = "Blue Sack of Gems" WHERE (`entry` = 30173 AND `item` = 17962);
UPDATE `reference_loot_template` SET `comment` = "Green Sack of Gems" WHERE (`entry` = 30173 AND `item` = 17963);
UPDATE `reference_loot_template` SET `comment` = "Gray Sack of Gems" WHERE (`entry` = 30173 AND `item` = 17964);
UPDATE `reference_loot_template` SET `comment` = "Yellow Sack of Gems" WHERE (`entry` = 30173 AND `item` = 17965);
UPDATE `reference_loot_template` SET `comment` = "Red Sack of Gems" WHERE (`entry` = 30173 AND `item` = 17969);
UPDATE `reference_loot_template` SET `comment` = "Cataclysm Headpiece" WHERE (`entry` = 30330 AND `item` = 30171);
UPDATE `reference_loot_template` SET `comment` = "Herald of Woe" WHERE (`entry` = 30337 AND `item` = 19357);
UPDATE `reference_loot_template` SET `comment` = "Dragon's Touch" WHERE (`entry` = 30337 AND `item` = 19367);
UPDATE `reference_loot_template` SET `comment` = "Shroud of Pure Thought" WHERE (`entry` = 30337 AND `item` = 19430);
UPDATE `reference_loot_template` SET `comment` = "Styleen's Impeding Scarab" WHERE (`entry` = 30337 AND `item` = 19431);
UPDATE `reference_loot_template` SET `comment` = "Circle of Applied Force" WHERE (`entry` = 30337 AND `item` = 19432);
UPDATE `reference_loot_template` SET `comment` = "Emberweave Leggings" WHERE (`entry` = 30337 AND `item` = 19433);
UPDATE `reference_loot_template` SET `comment` = "Arcanist Leggings" WHERE (`entry` = 30338 AND `item` = 16796);
UPDATE `reference_loot_template` SET `comment` = "Felheart Pants" WHERE (`entry` = 30338 AND `item` = 16810);
UPDATE `reference_loot_template` SET `comment` = "Pants of Prophecy" WHERE (`entry` = 30338 AND `item` = 16814);
UPDATE `reference_loot_template` SET `comment` = "Nightslayer Pants" WHERE (`entry` = 30338 AND `item` = 16822);
UPDATE `reference_loot_template` SET `comment` = "Striker's Mark" WHERE (`entry` = 30338 AND `item` = 17069);
UPDATE `reference_loot_template` SET `comment` = "Cenarion Leggings" WHERE (`entry` = 30339 AND `item` = 16835);
UPDATE `reference_loot_template` SET `comment` = "Earthfury Legguards" WHERE (`entry` = 30339 AND `item` = 16843);
UPDATE `reference_loot_template` SET `comment` = "Giantstalker's Leggings" WHERE (`entry` = 30339 AND `item` = 16847);
UPDATE `reference_loot_template` SET `comment` = "Lawbringer Legplates" WHERE (`entry` = 30339 AND `item` = 16855);
UPDATE `reference_loot_template` SET `comment` = "Legplates of Might" WHERE (`entry` = 30339 AND `item` = 16867);
UPDATE `reference_loot_template` SET `comment` = "Medallion of Steadfast Might" WHERE (`entry` = 30339 AND `item` = 17065);
UPDATE `reference_loot_template` SET `comment` = "Earthshaker" WHERE (`entry` = 30340 AND `item` = 17073);
UPDATE `reference_loot_template` SET `comment` = "Eskhandar's Right Claw" WHERE (`entry` = 30340 AND `item` = 18203);
UPDATE `reference_loot_template` SET `comment` = "Talisman of Ephemeral Power" WHERE (`entry` = 30340 AND `item` = 18820);
UPDATE `reference_loot_template` SET `comment` = "Quick Strike Ring" WHERE (`entry` = 30340 AND `item` = 18821);
UPDATE `reference_loot_template` SET `comment` = "Obsidian Edged Blade" WHERE (`entry` = 30340 AND `item` = 18822);
UPDATE `reference_loot_template` SET `comment` = "Aged Core Leather Gloves" WHERE (`entry` = 30340 AND `item` = 18823);
UPDATE `reference_loot_template` SET `comment` = "Magma Tempered Boots" WHERE (`entry` = 30340 AND `item` = 18824);
UPDATE `reference_loot_template` SET `comment` = "Deep Earth Spaulders" WHERE (`entry` = 30340 AND `item` = 18829);
UPDATE `reference_loot_template` SET `comment` = "Flamewaker Legplates" WHERE (`entry` = 30340 AND `item` = 18861);
UPDATE `reference_loot_template` SET `comment` = "Mana Igniting Cord" WHERE (`entry` = 30340 AND `item` = 19136);
UPDATE `reference_loot_template` SET `comment` = "Fire Runed Grimoire" WHERE (`entry` = 30340 AND `item` = 19142);
UPDATE `reference_loot_template` SET `comment` = "Flameguard Gauntlets" WHERE (`entry` = 30340 AND `item` = 19143);
UPDATE `reference_loot_template` SET `comment` = "Sabatons of the Flamewalker" WHERE (`entry` = 30340 AND `item` = 19144);
UPDATE `reference_loot_template` SET `comment` = "Scrolls of Blinding Light" WHERE (`entry` = 30341 AND `item` = 19343);
UPDATE `reference_loot_template` SET `comment` = "Natural Alignment Crystal" WHERE (`entry` = 30341 AND `item` = 19344);
UPDATE `reference_loot_template` SET `comment` = "Claw of the Black Drake" WHERE (`entry` = 30341 AND `item` = 19365);
UPDATE `reference_loot_template` SET `comment` = "Cloak of Firemaw" WHERE (`entry` = 30341 AND `item` = 19398);
UPDATE `reference_loot_template` SET `comment` = "Black Ash Robe" WHERE (`entry` = 30341 AND `item` = 19399);
UPDATE `reference_loot_template` SET `comment` = "Firemaw's Clutch" WHERE (`entry` = 30341 AND `item` = 19400);
UPDATE `reference_loot_template` SET `comment` = "Primalist's Linked Legguards" WHERE (`entry` = 30341 AND `item` = 19401);
UPDATE `reference_loot_template` SET `comment` = "Legguards of the Fallen Crusader" WHERE (`entry` = 30341 AND `item` = 19402);
UPDATE `reference_loot_template` SET `comment` = "Stormrage Handguards" WHERE (`entry` = 30342 AND `item` = 16899);
UPDATE `reference_loot_template` SET `comment` = "Bloodfang Gloves" WHERE (`entry` = 30342 AND `item` = 16907);
UPDATE `reference_loot_template` SET `comment` = "Netherwind Gloves" WHERE (`entry` = 30342 AND `item` = 16913);
UPDATE `reference_loot_template` SET `comment` = "Handguards of Transcendence" WHERE (`entry` = 30342 AND `item` = 16920);
UPDATE `reference_loot_template` SET `comment` = "Nemesis Gloves" WHERE (`entry` = 30342 AND `item` = 16928);
UPDATE `reference_loot_template` SET `comment` = "Dragonstalker's Gauntlets" WHERE (`entry` = 30342 AND `item` = 16940);
UPDATE `reference_loot_template` SET `comment` = "Gauntlets of Ten Storms" WHERE (`entry` = 30342 AND `item` = 16948);
UPDATE `reference_loot_template` SET `comment` = "Judgement Gauntlets" WHERE (`entry` = 30342 AND `item` = 16956);
UPDATE `reference_loot_template` SET `comment` = "Gauntlets of Wrath" WHERE (`entry` = 30342 AND `item` = 16964);
UPDATE `reference_loot_template` SET `comment` = "Drake Talon Cleaver" WHERE (`entry` = 30342 AND `item` = 19353);
UPDATE `reference_loot_template` SET `comment` = "Shadow Wing Focus Staff" WHERE (`entry` = 30342 AND `item` = 19355);
UPDATE `reference_loot_template` SET `comment` = "Drake Talon Pauldrons" WHERE (`entry` = 30342 AND `item` = 19394);
UPDATE `reference_loot_template` SET `comment` = "Rejuvenating Gem" WHERE (`entry` = 30342 AND `item` = 19395);
UPDATE `reference_loot_template` SET `comment` = "Taut Dragonhide Belt" WHERE (`entry` = 30342 AND `item` = 19396);
UPDATE `reference_loot_template` SET `comment` = "Ring of Blackrock" WHERE (`entry` = 30342 AND `item` = 19397);
UPDATE `reference_loot_template` SET `comment` = "Arcanist Robes" WHERE (`entry` = 30343 AND `item` = 16798);
UPDATE `reference_loot_template` SET `comment` = "Felheart Robes" WHERE (`entry` = 30343 AND `item` = 16809);
UPDATE `reference_loot_template` SET `comment` = "Robes of Prophecy" WHERE (`entry` = 30343 AND `item` = 16815);
UPDATE `reference_loot_template` SET `comment` = "Nightslayer Chestpiece" WHERE (`entry` = 30343 AND `item` = 16820);
UPDATE `reference_loot_template` SET `comment` = "Cenarion Vestments" WHERE (`entry` = 30344 AND `item` = 16833);
UPDATE `reference_loot_template` SET `comment` = "Earthfury Vestments" WHERE (`entry` = 30344 AND `item` = 16841);
UPDATE `reference_loot_template` SET `comment` = "Giantstalker's Breastplate" WHERE (`entry` = 30344 AND `item` = 16845);
UPDATE `reference_loot_template` SET `comment` = "Lawbringer Chestguard" WHERE (`entry` = 30344 AND `item` = 16853);
UPDATE `reference_loot_template` SET `comment` = "Breastplate of Might" WHERE (`entry` = 30344 AND `item` = 16865);
UPDATE `reference_loot_template` SET `comment` = "Blastershot Launcher" WHERE (`entry` = 30345 AND `item` = 17072);
UPDATE `reference_loot_template` SET `comment` = "Azuresong Mageblade" WHERE (`entry` = 30345 AND `item` = 17103);
UPDATE `reference_loot_template` SET `comment` = "Talisman of Ephemeral Power" WHERE (`entry` = 30345 AND `item` = 18820);
UPDATE `reference_loot_template` SET `comment` = "Quick Strike Ring" WHERE (`entry` = 30345 AND `item` = 18821);
UPDATE `reference_loot_template` SET `comment` = "Obsidian Edged Blade" WHERE (`entry` = 30345 AND `item` = 18822);
UPDATE `reference_loot_template` SET `comment` = "Aged Core Leather Gloves" WHERE (`entry` = 30345 AND `item` = 18823);
UPDATE `reference_loot_template` SET `comment` = "Magma Tempered Boots" WHERE (`entry` = 30345 AND `item` = 18824);
UPDATE `reference_loot_template` SET `comment` = "Deep Earth Spaulders" WHERE (`entry` = 30345 AND `item` = 18829);
UPDATE `reference_loot_template` SET `comment` = "Staff of Dominance" WHERE (`entry` = 30345 AND `item` = 18842);
UPDATE `reference_loot_template` SET `comment` = "Flamewaker Legplates" WHERE (`entry` = 30345 AND `item` = 18861);
UPDATE `reference_loot_template` SET `comment` = "Mana Igniting Cord" WHERE (`entry` = 30345 AND `item` = 19136);
UPDATE `reference_loot_template` SET `comment` = "Fire Runed Grimoire" WHERE (`entry` = 30345 AND `item` = 19142);
UPDATE `reference_loot_template` SET `comment` = "Flameguard Gauntlets" WHERE (`entry` = 30345 AND `item` = 19143);
UPDATE `reference_loot_template` SET `comment` = "Sabatons of the Flamewalker" WHERE (`entry` = 30345 AND `item` = 19144);
UPDATE `reference_loot_template` SET `comment` = "Stormrage Boots" WHERE (`entry` = 30346 AND `item` = 16898);
UPDATE `reference_loot_template` SET `comment` = "Bloodfang Boots" WHERE (`entry` = 30346 AND `item` = 16906);
UPDATE `reference_loot_template` SET `comment` = "Netherwind Boots" WHERE (`entry` = 30346 AND `item` = 16912);
UPDATE `reference_loot_template` SET `comment` = "Boots of Transcendence" WHERE (`entry` = 30346 AND `item` = 16919);
UPDATE `reference_loot_template` SET `comment` = "Nemesis Boots" WHERE (`entry` = 30346 AND `item` = 16927);
UPDATE `reference_loot_template` SET `comment` = "Dragonstalker's Greaves" WHERE (`entry` = 30346 AND `item` = 16941);
UPDATE `reference_loot_template` SET `comment` = "Greaves of Ten Storms" WHERE (`entry` = 30346 AND `item` = 16949);
UPDATE `reference_loot_template` SET `comment` = "Judgement Sabatons" WHERE (`entry` = 30346 AND `item` = 16957);
UPDATE `reference_loot_template` SET `comment` = "Sabatons of Wrath" WHERE (`entry` = 30346 AND `item` = 16965);
UPDATE `reference_loot_template` SET `comment` = "Lifegiving Gem" WHERE (`entry` = 30348 AND `item` = 19341);
UPDATE `reference_loot_template` SET `comment` = "Venomous Totem" WHERE (`entry` = 30348 AND `item` = 19342);
UPDATE `reference_loot_template` SET `comment` = "Heartstriker" WHERE (`entry` = 30348 AND `item` = 19350);
UPDATE `reference_loot_template` SET `comment` = "Maladath, Runed Blade of the Black Flight" WHERE (`entry` = 30348 AND `item` = 19351);
UPDATE `reference_loot_template` SET `comment` = "Black Brood Pauldrons" WHERE (`entry` = 30348 AND `item` = 19373);
UPDATE `reference_loot_template` SET `comment` = "Bracers of Arcane Accuracy" WHERE (`entry` = 30348 AND `item` = 19374);
UPDATE `reference_loot_template` SET `comment` = "Cenarion Spaulders" WHERE (`entry` = 30349 AND `item` = 16836);
UPDATE `reference_loot_template` SET `comment` = "Earthfury Epaulets" WHERE (`entry` = 30349 AND `item` = 16844);
UPDATE `reference_loot_template` SET `comment` = "Lawbringer Spaulders" WHERE (`entry` = 30349 AND `item` = 16856);
UPDATE `reference_loot_template` SET `comment` = "Talisman of Ephemeral Power" WHERE (`entry` = 30349 AND `item` = 18820);
UPDATE `reference_loot_template` SET `comment` = "Quick Strike Ring" WHERE (`entry` = 30349 AND `item` = 18821);
UPDATE `reference_loot_template` SET `comment` = "Obsidian Edged Blade" WHERE (`entry` = 30349 AND `item` = 18822);
UPDATE `reference_loot_template` SET `comment` = "Aged Core Leather Gloves" WHERE (`entry` = 30349 AND `item` = 18823);
UPDATE `reference_loot_template` SET `comment` = "Deep Earth Spaulders" WHERE (`entry` = 30349 AND `item` = 18829);
UPDATE `reference_loot_template` SET `comment` = "Flamewaker Legplates" WHERE (`entry` = 30349 AND `item` = 18861);
UPDATE `reference_loot_template` SET `comment` = "Mana Igniting Cord" WHERE (`entry` = 30349 AND `item` = 19136);
UPDATE `reference_loot_template` SET `comment` = "Fire Runed Grimoire" WHERE (`entry` = 30349 AND `item` = 19142);
UPDATE `reference_loot_template` SET `comment` = "Flameguard Gauntlets" WHERE (`entry` = 30349 AND `item` = 19143);
UPDATE `reference_loot_template` SET `comment` = "Sabatons of the Flamewalker" WHERE (`entry` = 30349 AND `item` = 19144);
UPDATE `reference_loot_template` SET `comment` = "Arcanist Mantle" WHERE (`entry` = 30350 AND `item` = 16797);
UPDATE `reference_loot_template` SET `comment` = "Felheart Shoulder Pads" WHERE (`entry` = 30350 AND `item` = 16807);
UPDATE `reference_loot_template` SET `comment` = "Seal of the Archmagus" WHERE (`entry` = 30350 AND `item` = 17110);
UPDATE `reference_loot_template` SET `comment` = "Cenarion Helm" WHERE (`entry` = 30352 AND `item` = 16834);
UPDATE `reference_loot_template` SET `comment` = "Earthfury Helmet" WHERE (`entry` = 30352 AND `item` = 16842);
UPDATE `reference_loot_template` SET `comment` = "Giantstalker's Helmet" WHERE (`entry` = 30352 AND `item` = 16846);
UPDATE `reference_loot_template` SET `comment` = "Lawbringer Helm" WHERE (`entry` = 30352 AND `item` = 16854);
UPDATE `reference_loot_template` SET `comment` = "Helm of Might" WHERE (`entry` = 30352 AND `item` = 16866);
UPDATE `reference_loot_template` SET `comment` = "Drillborer Disk" WHERE (`entry` = 30352 AND `item` = 17066);
UPDATE `reference_loot_template` SET `comment` = "Arcanist Crown" WHERE (`entry` = 30353 AND `item` = 16795);
UPDATE `reference_loot_template` SET `comment` = "Felheart Horns" WHERE (`entry` = 30353 AND `item` = 16808);
UPDATE `reference_loot_template` SET `comment` = "Circlet of Prophecy" WHERE (`entry` = 30353 AND `item` = 16813);
UPDATE `reference_loot_template` SET `comment` = "Nightslayer Cover" WHERE (`entry` = 30353 AND `item` = 16821);
UPDATE `reference_loot_template` SET `comment` = "Gutgore Ripper" WHERE (`entry` = 30353 AND `item` = 17071);
UPDATE `reference_loot_template` SET `comment` = "Aurastone Hammer" WHERE (`entry` = 30354 AND `item` = 17105);
UPDATE `reference_loot_template` SET `comment` = "Talisman of Ephemeral Power" WHERE (`entry` = 30354 AND `item` = 18820);
UPDATE `reference_loot_template` SET `comment` = "Quick Strike Ring" WHERE (`entry` = 30354 AND `item` = 18821);
UPDATE `reference_loot_template` SET `comment` = "Obsidian Edged Blade" WHERE (`entry` = 30354 AND `item` = 18822);
UPDATE `reference_loot_template` SET `comment` = "Aged Core Leather Gloves" WHERE (`entry` = 30354 AND `item` = 18823);
UPDATE `reference_loot_template` SET `comment` = "Magma Tempered Boots" WHERE (`entry` = 30354 AND `item` = 18824);
UPDATE `reference_loot_template` SET `comment` = "Deep Earth Spaulders" WHERE (`entry` = 30354 AND `item` = 18829);
UPDATE `reference_loot_template` SET `comment` = "Brutality Blade" WHERE (`entry` = 30354 AND `item` = 18832);
UPDATE `reference_loot_template` SET `comment` = "Flamewaker Legplates" WHERE (`entry` = 30354 AND `item` = 18861);
UPDATE `reference_loot_template` SET `comment` = "Mana Igniting Cord" WHERE (`entry` = 30354 AND `item` = 19136);
UPDATE `reference_loot_template` SET `comment` = "Fire Runed Grimoire" WHERE (`entry` = 30354 AND `item` = 19142);
UPDATE `reference_loot_template` SET `comment` = "Flameguard Gauntlets" WHERE (`entry` = 30354 AND `item` = 19143);
UPDATE `reference_loot_template` SET `comment` = "Sabatons of the Flamewalker" WHERE (`entry` = 30354 AND `item` = 19144);
UPDATE `reference_loot_template` SET `comment` = "Nightslayer Shoulder Pads" WHERE (`entry` = 30355 AND `item` = 16823);
UPDATE `reference_loot_template` SET `comment` = "Pauldrons of Might" WHERE (`entry` = 30355 AND `item` = 16868);
UPDATE `reference_loot_template` SET `comment` = "Crimson Shocker" WHERE (`entry` = 30355 AND `item` = 17077);
UPDATE `reference_loot_template` SET `comment` = "Flamewaker Legplates" WHERE (`entry` = 30355 AND `item` = 18861);
UPDATE `reference_loot_template` SET `comment` = "Helm of the Lifegiver" WHERE (`entry` = 30355 AND `item` = 18870);
UPDATE `reference_loot_template` SET `comment` = "Manastorm Leggings" WHERE (`entry` = 30355 AND `item` = 18872);
UPDATE `reference_loot_template` SET `comment` = "Salamander Scale Pants" WHERE (`entry` = 30355 AND `item` = 18875);
UPDATE `reference_loot_template` SET `comment` = "Sorcerous Dagger" WHERE (`entry` = 30355 AND `item` = 18878);
UPDATE `reference_loot_template` SET `comment` = "Heavy Dark Iron Ring" WHERE (`entry` = 30355 AND `item` = 18879);
UPDATE `reference_loot_template` SET `comment` = "Robe of Volatile Power" WHERE (`entry` = 30355 AND `item` = 19145);
UPDATE `reference_loot_template` SET `comment` = "Wristguards of Stability" WHERE (`entry` = 30355 AND `item` = 19146);
UPDATE `reference_loot_template` SET `comment` = "Ring of Spell Power" WHERE (`entry` = 30355 AND `item` = 19147);
UPDATE `reference_loot_template` SET `comment` = "Mantle of Prophecy" WHERE (`entry` = 30356 AND `item` = 16816);
UPDATE `reference_loot_template` SET `comment` = "Giantstalker's Epaulets" WHERE (`entry` = 30356 AND `item` = 16848);
UPDATE `reference_loot_template` SET `comment` = "Shadowstrike" WHERE (`entry` = 30356 AND `item` = 17074);
UPDATE `reference_loot_template` SET `comment` = "Felheart Gloves" WHERE (`entry` = 30357 AND `item` = 16805);
UPDATE `reference_loot_template` SET `comment` = "Gauntlets of Might" WHERE (`entry` = 30357 AND `item` = 16863);
UPDATE `reference_loot_template` SET `comment` = "Crimson Shocker" WHERE (`entry` = 30357 AND `item` = 17077);
UPDATE `reference_loot_template` SET `comment` = "Flamewaker Legplates" WHERE (`entry` = 30357 AND `item` = 18861);
UPDATE `reference_loot_template` SET `comment` = "Helm of the Lifegiver" WHERE (`entry` = 30357 AND `item` = 18870);
UPDATE `reference_loot_template` SET `comment` = "Manastorm Leggings" WHERE (`entry` = 30357 AND `item` = 18872);
UPDATE `reference_loot_template` SET `comment` = "Salamander Scale Pants" WHERE (`entry` = 30357 AND `item` = 18875);
UPDATE `reference_loot_template` SET `comment` = "Sorcerous Dagger" WHERE (`entry` = 30357 AND `item` = 18878);
UPDATE `reference_loot_template` SET `comment` = "Heavy Dark Iron Ring" WHERE (`entry` = 30357 AND `item` = 18879);
UPDATE `reference_loot_template` SET `comment` = "Robe of Volatile Power" WHERE (`entry` = 30357 AND `item` = 19145);
UPDATE `reference_loot_template` SET `comment` = "Wristguards of Stability" WHERE (`entry` = 30357 AND `item` = 19146);
UPDATE `reference_loot_template` SET `comment` = "Ring of Spell Power" WHERE (`entry` = 30357 AND `item` = 19147);
UPDATE `reference_loot_template` SET `comment` = "Giantstalker's Boots" WHERE (`entry` = 30365 AND `item` = 16849);
UPDATE `reference_loot_template` SET `comment` = "Sabatons of Might" WHERE (`entry` = 30365 AND `item` = 16862);
UPDATE `reference_loot_template` SET `comment` = "Crimson Shocker" WHERE (`entry` = 30365 AND `item` = 17077);
UPDATE `reference_loot_template` SET `comment` = "Flamewaker Legplates" WHERE (`entry` = 30365 AND `item` = 18861);
UPDATE `reference_loot_template` SET `comment` = "Helm of the Lifegiver" WHERE (`entry` = 30365 AND `item` = 18870);
UPDATE `reference_loot_template` SET `comment` = "Manastorm Leggings" WHERE (`entry` = 30365 AND `item` = 18872);
UPDATE `reference_loot_template` SET `comment` = "Salamander Scale Pants" WHERE (`entry` = 30365 AND `item` = 18875);
UPDATE `reference_loot_template` SET `comment` = "Sorcerous Dagger" WHERE (`entry` = 30365 AND `item` = 18878);
UPDATE `reference_loot_template` SET `comment` = "Heavy Dark Iron Ring" WHERE (`entry` = 30365 AND `item` = 18879);
UPDATE `reference_loot_template` SET `comment` = "Robe of Volatile Power" WHERE (`entry` = 30365 AND `item` = 19145);
UPDATE `reference_loot_template` SET `comment` = "Wristguards of Stability" WHERE (`entry` = 30365 AND `item` = 19146);
UPDATE `reference_loot_template` SET `comment` = "Ring of Spell Power" WHERE (`entry` = 30365 AND `item` = 19147);
UPDATE `reference_loot_template` SET `comment` = "Gloves of Prophecy" WHERE (`entry` = 30366 AND `item` = 16812);
UPDATE `reference_loot_template` SET `comment` = "Nightslayer Gloves" WHERE (`entry` = 30366 AND `item` = 16826);
UPDATE `reference_loot_template` SET `comment` = "Earthfury Gauntlets" WHERE (`entry` = 30366 AND `item` = 16839);
UPDATE `reference_loot_template` SET `comment` = "Lawbringer Gauntlets" WHERE (`entry` = 30366 AND `item` = 16860);
UPDATE `reference_loot_template` SET `comment` = "Felheart Slippers" WHERE (`entry` = 30367 AND `item` = 16803);
UPDATE `reference_loot_template` SET `comment` = "Boots of Prophecy" WHERE (`entry` = 30367 AND `item` = 16811);
UPDATE `reference_loot_template` SET `comment` = "Nightslayer Boots" WHERE (`entry` = 30367 AND `item` = 16824);
UPDATE `reference_loot_template` SET `comment` = "Crimson Shocker" WHERE (`entry` = 30367 AND `item` = 17077);
UPDATE `reference_loot_template` SET `comment` = "Flamewaker Legplates" WHERE (`entry` = 30367 AND `item` = 18861);
UPDATE `reference_loot_template` SET `comment` = "Helm of the Lifegiver" WHERE (`entry` = 30367 AND `item` = 18870);
UPDATE `reference_loot_template` SET `comment` = "Manastorm Leggings" WHERE (`entry` = 30367 AND `item` = 18872);
UPDATE `reference_loot_template` SET `comment` = "Salamander Scale Pants" WHERE (`entry` = 30367 AND `item` = 18875);
UPDATE `reference_loot_template` SET `comment` = "Sorcerous Dagger" WHERE (`entry` = 30367 AND `item` = 18878);
UPDATE `reference_loot_template` SET `comment` = "Heavy Dark Iron Ring" WHERE (`entry` = 30367 AND `item` = 18879);
UPDATE `reference_loot_template` SET `comment` = "Robe of Volatile Power" WHERE (`entry` = 30367 AND `item` = 19145);
UPDATE `reference_loot_template` SET `comment` = "Wristguards of Stability" WHERE (`entry` = 30367 AND `item` = 19146);
UPDATE `reference_loot_template` SET `comment` = "Ring of Spell Power" WHERE (`entry` = 30367 AND `item` = 19147);
UPDATE `reference_loot_template` SET `comment` = "Arcanist Gloves" WHERE (`entry` = 30368 AND `item` = 16801);
UPDATE `reference_loot_template` SET `comment` = "Cenarion Gloves" WHERE (`entry` = 30368 AND `item` = 16831);
UPDATE `reference_loot_template` SET `comment` = "Giantstalker's Gloves" WHERE (`entry` = 30368 AND `item` = 16852);
UPDATE `reference_loot_template` SET `comment` = "Stormrage Bracers" WHERE (`entry` = 30369 AND `item` = 16904);
UPDATE `reference_loot_template` SET `comment` = "Bloodfang Bracers" WHERE (`entry` = 30369 AND `item` = 16911);
UPDATE `reference_loot_template` SET `comment` = "Netherwind Bindings" WHERE (`entry` = 30369 AND `item` = 16918);
UPDATE `reference_loot_template` SET `comment` = "Bindings of Transcendence" WHERE (`entry` = 30369 AND `item` = 16926);
UPDATE `reference_loot_template` SET `comment` = "Nemesis Bracers" WHERE (`entry` = 30369 AND `item` = 16934);
UPDATE `reference_loot_template` SET `comment` = "Dragonstalker's Bracers" WHERE (`entry` = 30369 AND `item` = 16935);
UPDATE `reference_loot_template` SET `comment` = "Bracers of Ten Storms" WHERE (`entry` = 30369 AND `item` = 16943);
UPDATE `reference_loot_template` SET `comment` = "Judgement Bindings" WHERE (`entry` = 30369 AND `item` = 16951);
UPDATE `reference_loot_template` SET `comment` = "Bracelets of Wrath" WHERE (`entry` = 30369 AND `item` = 16959);
UPDATE `reference_loot_template` SET `comment` = "The Untamed Blade" WHERE (`entry` = 30371 AND `item` = 19334);
UPDATE `reference_loot_template` SET `comment` = "Spineshatter" WHERE (`entry` = 30371 AND `item` = 19335);
UPDATE `reference_loot_template` SET `comment` = "Arcane Infused Gem" WHERE (`entry` = 30371 AND `item` = 19336);
UPDATE `reference_loot_template` SET `comment` = "The Black Book" WHERE (`entry` = 30371 AND `item` = 19337);
UPDATE `reference_loot_template` SET `comment` = "Gloves of Rapid Evolution" WHERE (`entry` = 30371 AND `item` = 19369);
UPDATE `reference_loot_template` SET `comment` = "Mantle of the Blackwing Cabal" WHERE (`entry` = 30371 AND `item` = 19370);
UPDATE `reference_loot_template` SET `comment` = "Netherwind Belt" WHERE (`entry` = 30372 AND `item` = 16818);
UPDATE `reference_loot_template` SET `comment` = "Stormrage Belt" WHERE (`entry` = 30372 AND `item` = 16903);
UPDATE `reference_loot_template` SET `comment` = "Bloodfang Belt" WHERE (`entry` = 30372 AND `item` = 16910);
UPDATE `reference_loot_template` SET `comment` = "Belt of Transcendence" WHERE (`entry` = 30372 AND `item` = 16925);
UPDATE `reference_loot_template` SET `comment` = "Nemesis Belt" WHERE (`entry` = 30372 AND `item` = 16933);
UPDATE `reference_loot_template` SET `comment` = "Dragonstalker's Belt" WHERE (`entry` = 30372 AND `item` = 16936);
UPDATE `reference_loot_template` SET `comment` = "Belt of Ten Storms" WHERE (`entry` = 30372 AND `item` = 16944);
UPDATE `reference_loot_template` SET `comment` = "Judgement Belt" WHERE (`entry` = 30372 AND `item` = 16952);
UPDATE `reference_loot_template` SET `comment` = "Waistband of Wrath" WHERE (`entry` = 30372 AND `item` = 16960);
UPDATE `reference_loot_template` SET `comment` = "Mind Quickening Gem" WHERE (`entry` = 30374 AND `item` = 19339);
UPDATE `reference_loot_template` SET `comment` = "Rune of Metamorphosis" WHERE (`entry` = 30374 AND `item` = 19340);
UPDATE `reference_loot_template` SET `comment` = "Dragonfang Blade" WHERE (`entry` = 30374 AND `item` = 19346);
UPDATE `reference_loot_template` SET `comment` = "Red Dragonscale Protector" WHERE (`entry` = 30374 AND `item` = 19348);
UPDATE `reference_loot_template` SET `comment` = "Pendant of the Fallen Dragon" WHERE (`entry` = 30374 AND `item` = 19371);
UPDATE `reference_loot_template` SET `comment` = "Helm of Endless Rage" WHERE (`entry` = 30374 AND `item` = 19372);
UPDATE `reference_loot_template` SET `comment` = "Bloodfang Spaulders" WHERE (`entry` = 30379 AND `item` = 16832);
UPDATE `reference_loot_template` SET `comment` = "Stormrage Pauldrons" WHERE (`entry` = 30379 AND `item` = 16902);
UPDATE `reference_loot_template` SET `comment` = "Netherwind Mantle" WHERE (`entry` = 30379 AND `item` = 16917);
UPDATE `reference_loot_template` SET `comment` = "Pauldrons of Transcendence" WHERE (`entry` = 30379 AND `item` = 16924);
UPDATE `reference_loot_template` SET `comment` = "Nemesis Spaulders" WHERE (`entry` = 30379 AND `item` = 16932);
UPDATE `reference_loot_template` SET `comment` = "Dragonstalker's Spaulders" WHERE (`entry` = 30379 AND `item` = 16937);
UPDATE `reference_loot_template` SET `comment` = "Epaulets of Ten Storms" WHERE (`entry` = 30379 AND `item` = 16945);
UPDATE `reference_loot_template` SET `comment` = "Judgement Spaulders" WHERE (`entry` = 30379 AND `item` = 16953);
UPDATE `reference_loot_template` SET `comment` = "Pauldrons of Wrath" WHERE (`entry` = 30379 AND `item` = 16961);
UPDATE `reference_loot_template` SET `comment` = "Elementium Reinforced Bulwark" WHERE (`entry` = 30380 AND `item` = 19349);
UPDATE `reference_loot_template` SET `comment` = "Chromatically Tempered Sword" WHERE (`entry` = 30380 AND `item` = 19352);
UPDATE `reference_loot_template` SET `comment` = "Empowered Leggings" WHERE (`entry` = 30380 AND `item` = 19385);
UPDATE `reference_loot_template` SET `comment` = "Chromatic Boots" WHERE (`entry` = 30380 AND `item` = 19387);
UPDATE `reference_loot_template` SET `comment` = "Angelista's Grasp" WHERE (`entry` = 30380 AND `item` = 19388);
UPDATE `reference_loot_template` SET `comment` = "Taut Dragonhide Shoulderpads" WHERE (`entry` = 30380 AND `item` = 19389);
UPDATE `reference_loot_template` SET `comment` = "Claw of Chromaggus" WHERE (`entry` = 30382 AND `item` = 19347);
UPDATE `reference_loot_template` SET `comment` = "Ashjre'thul, Crossbow of Smiting" WHERE (`entry` = 30382 AND `item` = 19361);
UPDATE `reference_loot_template` SET `comment` = "Elementium Threaded Cloak" WHERE (`entry` = 30382 AND `item` = 19386);
UPDATE `reference_loot_template` SET `comment` = "Taut Dragonhide Gloves" WHERE (`entry` = 30382 AND `item` = 19390);
UPDATE `reference_loot_template` SET `comment` = "Shimmering Geta" WHERE (`entry` = 30382 AND `item` = 19391);
UPDATE `reference_loot_template` SET `comment` = "Girdle of the Fallen Crusader" WHERE (`entry` = 30382 AND `item` = 19392);
UPDATE `reference_loot_template` SET `comment` = "Primalist's Linked Waistguard" WHERE (`entry` = 30382 AND `item` = 19393);
UPDATE `reference_loot_template` SET `comment` = "Aegis of Preservation" WHERE (`entry` = 30395 AND `item` = 19345);
UPDATE `reference_loot_template` SET `comment` = "Dragonbreath Hand Cannon" WHERE (`entry` = 30395 AND `item` = 19368);
UPDATE `reference_loot_template` SET `comment` = "Band of Forced Concentration" WHERE (`entry` = 30395 AND `item` = 19403);
UPDATE `reference_loot_template` SET `comment` = "Malfurion's Blessed Bulwark" WHERE (`entry` = 30395 AND `item` = 19405);
UPDATE `reference_loot_template` SET `comment` = "Drake Fang Talisman" WHERE (`entry` = 30395 AND `item` = 19406);
UPDATE `reference_loot_template` SET `comment` = "Ebony Flame Gloves" WHERE (`entry` = 30395 AND `item` = 19407);
UPDATE `reference_loot_template` SET `comment` = "Stormrage Legguards" WHERE (`entry` = 30484 AND `item` = 16901);
UPDATE `reference_loot_template` SET `comment` = "Bloodfang Pants" WHERE (`entry` = 30484 AND `item` = 16909);
UPDATE `reference_loot_template` SET `comment` = "Netherwind Pants" WHERE (`entry` = 30484 AND `item` = 16915);
UPDATE `reference_loot_template` SET `comment` = "Leggings of Transcendence" WHERE (`entry` = 30484 AND `item` = 16922);
UPDATE `reference_loot_template` SET `comment` = "Nemesis Leggings" WHERE (`entry` = 30484 AND `item` = 16930);
UPDATE `reference_loot_template` SET `comment` = "Dragonstalker's Legguards" WHERE (`entry` = 30484 AND `item` = 16938);
UPDATE `reference_loot_template` SET `comment` = "Judgement Legplates" WHERE (`entry` = 30484 AND `item` = 16954);
UPDATE `reference_loot_template` SET `comment` = "Legplates of Wrath" WHERE (`entry` = 30484 AND `item` = 16962);
UPDATE `reference_loot_template` SET `comment` = "Choker of the Fire Lord" WHERE (`entry` = 30485 AND `item` = 18814);
UPDATE `reference_loot_template` SET `comment` = "Essence of the Pure Flame" WHERE (`entry` = 30485 AND `item` = 18815);
UPDATE `reference_loot_template` SET `comment` = "Perdition's Blade" WHERE (`entry` = 30485 AND `item` = 18816);
UPDATE `reference_loot_template` SET `comment` = "Crown of Destruction" WHERE (`entry` = 30485 AND `item` = 18817);
UPDATE `reference_loot_template` SET `comment` = "Band of Sulfuras" WHERE (`entry` = 30485 AND `item` = 19138);
UPDATE `reference_loot_template` SET `comment` = "Stormrage Chestguard" WHERE (`entry` = 30486 AND `item` = 16897);
UPDATE `reference_loot_template` SET `comment` = "Bloodfang Chestpiece" WHERE (`entry` = 30486 AND `item` = 16905);
UPDATE `reference_loot_template` SET `comment` = "Netherwind Robes" WHERE (`entry` = 30486 AND `item` = 16916);
UPDATE `reference_loot_template` SET `comment` = "Robes of Transcendence" WHERE (`entry` = 30486 AND `item` = 16923);
UPDATE `reference_loot_template` SET `comment` = "Nemesis Robes" WHERE (`entry` = 30486 AND `item` = 16931);
UPDATE `reference_loot_template` SET `comment` = "Dragonstalker's Breastplate" WHERE (`entry` = 30486 AND `item` = 16942);
UPDATE `reference_loot_template` SET `comment` = "Breastplate of Ten Storms" WHERE (`entry` = 30486 AND `item` = 16950);
UPDATE `reference_loot_template` SET `comment` = "Judgement Breastplate" WHERE (`entry` = 30486 AND `item` = 16958);
UPDATE `reference_loot_template` SET `comment` = "Breastplate of Wrath" WHERE (`entry` = 30486 AND `item` = 16966);
UPDATE `reference_loot_template` SET `comment` = "Lok'amir il Romathis" WHERE (`entry` = 30487 AND `item` = 19360);
UPDATE `reference_loot_template` SET `comment` = "Crul'shorukh, Edge of Chaos" WHERE (`entry` = 30487 AND `item` = 19363);
UPDATE `reference_loot_template` SET `comment` = "Mish'undare, Circlet of the Mind Flayer" WHERE (`entry` = 30487 AND `item` = 19375);
UPDATE `reference_loot_template` SET `comment` = "Archimtiros' Ring of Reckoning" WHERE (`entry` = 30487 AND `item` = 19376);
UPDATE `reference_loot_template` SET `comment` = "Prestor's Talisman of Connivery" WHERE (`entry` = 30487 AND `item` = 19377);
UPDATE `reference_loot_template` SET `comment` = "Cloak of the Brood Lord" WHERE (`entry` = 30487 AND `item` = 19378);
UPDATE `reference_loot_template` SET `comment` = "Arcanist Boots" WHERE (`entry` = 30488 AND `item` = 16800);
UPDATE `reference_loot_template` SET `comment` = "Cenarion Boots" WHERE (`entry` = 30488 AND `item` = 16829);
UPDATE `reference_loot_template` SET `comment` = "Earthfury Boots" WHERE (`entry` = 30488 AND `item` = 16837);
UPDATE `reference_loot_template` SET `comment` = "Lawbringer Boots" WHERE (`entry` = 30488 AND `item` = 16859);
UPDATE `reference_loot_template` SET `comment` = "Choker of Enlightenment" WHERE (`entry` = 30488 AND `item` = 17109);
UPDATE `reference_loot_template` SET `comment` = "Stormrage Legguards" WHERE (`entry` = 30547 AND `item` = 16901);
UPDATE `reference_loot_template` SET `comment` = "Bloodfang Pants" WHERE (`entry` = 30547 AND `item` = 16909);
UPDATE `reference_loot_template` SET `comment` = "Netherwind Pants" WHERE (`entry` = 30547 AND `item` = 16915);
UPDATE `reference_loot_template` SET `comment` = "Leggings of Transcendence" WHERE (`entry` = 30547 AND `item` = 16922);
UPDATE `reference_loot_template` SET `comment` = "Nemesis Leggings" WHERE (`entry` = 30547 AND `item` = 16930);
UPDATE `reference_loot_template` SET `comment` = "Dragonstalker's Legguards" WHERE (`entry` = 30547 AND `item` = 16938);
UPDATE `reference_loot_template` SET `comment` = "Legplates of Ten Storms" WHERE (`entry` = 30547 AND `item` = 16946);
UPDATE `reference_loot_template` SET `comment` = "Legplates of Wrath" WHERE (`entry` = 30547 AND `item` = 16962);
UPDATE `reference_loot_template` SET `comment` = "Band of Accuria" WHERE (`entry` = 30549 AND `item` = 17063);
UPDATE `reference_loot_template` SET `comment` = "Cloak of the Shrouded Mists" WHERE (`entry` = 30549 AND `item` = 17102);
UPDATE `reference_loot_template` SET `comment` = "Malistar's Defender" WHERE (`entry` = 30549 AND `item` = 17106);
UPDATE `reference_loot_template` SET `comment` = "Dragon's Blood Cape" WHERE (`entry` = 30549 AND `item` = 17107);
UPDATE `reference_loot_template` SET `comment` = "Onslaught Girdle" WHERE (`entry` = 30549 AND `item` = 19137);
UPDATE `reference_loot_template` SET `comment` = "Bonereaver's Edge" WHERE (`entry` = 30550 AND `item` = 17076);
UPDATE `reference_loot_template` SET `comment` = "Shard of the Flame" WHERE (`entry` = 30550 AND `item` = 17082);
UPDATE `reference_loot_template` SET `comment` = "Spinal Reaper" WHERE (`entry` = 30550 AND `item` = 17104);
UPDATE `reference_loot_template` SET `comment` = "Staff of the Shadow Flame" WHERE (`entry` = 30551 AND `item` = 19356);
UPDATE `reference_loot_template` SET `comment` = "Ashkandi, Greatsword of the Brotherhood" WHERE (`entry` = 30551 AND `item` = 19364);
UPDATE `reference_loot_template` SET `comment` = "Neltharion's Tear" WHERE (`entry` = 30551 AND `item` = 19379);
UPDATE `reference_loot_template` SET `comment` = "Therazane's Link" WHERE (`entry` = 30551 AND `item` = 19380);
UPDATE `reference_loot_template` SET `comment` = "Boots of the Shadow Flame" WHERE (`entry` = 30551 AND `item` = 19381);
UPDATE `reference_loot_template` SET `comment` = "Pure Elementium Band" WHERE (`entry` = 30551 AND `item` = 19382);
UPDATE `reference_loot_template` SET `comment` = "Stormrage Cover" WHERE (`entry` = 34009 AND `item` = 16900);
UPDATE `reference_loot_template` SET `comment` = "Bloodfang Hood" WHERE (`entry` = 34009 AND `item` = 16908);
UPDATE `reference_loot_template` SET `comment` = "Netherwind Crown" WHERE (`entry` = 34009 AND `item` = 16914);
UPDATE `reference_loot_template` SET `comment` = "Halo of Transcendence" WHERE (`entry` = 34009 AND `item` = 16921);
UPDATE `reference_loot_template` SET `comment` = "Nemesis Skullcap" WHERE (`entry` = 34009 AND `item` = 16929);
UPDATE `reference_loot_template` SET `comment` = "Dragonstalker's Helm" WHERE (`entry` = 34009 AND `item` = 16939);
UPDATE `reference_loot_template` SET `comment` = "Helmet of Ten Storms" WHERE (`entry` = 34009 AND `item` = 16947);
UPDATE `reference_loot_template` SET `comment` = "Judgement Crown" WHERE (`entry` = 34009 AND `item` = 16955);
UPDATE `reference_loot_template` SET `comment` = "Helm of Wrath" WHERE (`entry` = 34009 AND `item` = 16963);
-- `reference_loot_template` that are currently empty
UPDATE `reference_loot_template` SET `comment` = "Winter Squid" WHERE (`entry` = 11009 AND `item` = 13755);
UPDATE `reference_loot_template` SET `comment` = "Winter Squid" WHERE (`entry` = 11105 AND `item` = 13755);
UPDATE `reference_loot_template` SET `comment` = "Ancient Hakkari Manslayer" WHERE (`entry` = 30398 AND `item` = 19852);
UPDATE `reference_loot_template` SET `comment` = "Gurubashi Dwarf Destroyer" WHERE (`entry` = 30398 AND `item` = 19853);
UPDATE `reference_loot_template` SET `comment` = "The Eye of Hakkar" WHERE (`entry` = 30398 AND `item` = 19856);
UPDATE `reference_loot_template` SET `comment` = "Cloak of Consumption" WHERE (`entry` = 30398 AND `item` = 19857);
UPDATE `reference_loot_template` SET `comment` = "Bloodcaller" WHERE (`entry` = 30398 AND `item` = 19864);
UPDATE `reference_loot_template` SET `comment` = "Seafury Gauntlets" WHERE (`entry` = 30398 AND `item` = 20257);
UPDATE `reference_loot_template` SET `comment` = "Peacekeeper Gauntlets" WHERE (`entry` = 30398 AND `item` = 20264);
UPDATE `reference_loot_template` SET `comment` = "Cloak of the Hakkari Worshippers" WHERE (`entry` = 30546 AND `item` = 22711);
UPDATE `reference_loot_template` SET `comment` = "Might of the Tribe" WHERE (`entry` = 30546 AND `item` = 22712);
UPDATE `reference_loot_template` SET `comment` = "Zulian Scepter of Rites" WHERE (`entry` = 30546 AND `item` = 22713);
UPDATE `reference_loot_template` SET `comment` = "Sacrificial Gauntlets" WHERE (`entry` = 30546 AND `item` = 22714);
UPDATE `reference_loot_template` SET `comment` = "Gloves of the Tormented" WHERE (`entry` = 30546 AND `item` = 22715);
UPDATE `reference_loot_template` SET `comment` = "Belt of Untapped Power" WHERE (`entry` = 30546 AND `item` = 22716);
UPDATE `reference_loot_template` SET `comment` = "Blooddrenched Mask" WHERE (`entry` = 30546 AND `item` = 22718);
UPDATE `reference_loot_template` SET `comment` = "Zulian Headdress" WHERE (`entry` = 30546 AND `item` = 22720);
UPDATE `reference_loot_template` SET `comment` = "Band of Servitude" WHERE (`entry` = 30546 AND `item` = 22721);
UPDATE `reference_loot_template` SET `comment` = "Seal of the Gurubashi Berserker" WHERE (`entry` = 30546 AND `item` = 22722);
-- `creature_loot_template` (reference) that are currently NULL
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - (ReferenceTable)" WHERE (`entry` = 11502 AND `item` = 30171);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - (ReferenceTable)" WHERE (`entry` = 11502 AND `item` = 30484);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - (ReferenceTable)" WHERE (`entry` = 11502 AND `item` = 30485);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - (ReferenceTable)" WHERE (`entry` = 11502 AND `item` = 30547);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - (ReferenceTable)" WHERE (`entry` = 11502 AND `item` = 30549);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - (ReferenceTable)" WHERE (`entry` = 11502 AND `item` = 30550);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30044);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30089);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30105);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30171);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30172);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30173);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30330);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30486);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30487);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 30551);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - (ReferenceTable)" WHERE (`entry` = 11583 AND `item` = 34009);
UPDATE `creature_loot_template` SET `comment` = "Flamegor - (ReferenceTable)" WHERE (`entry` = 11981 AND `item` = 30337);
UPDATE `creature_loot_template` SET `comment` = "Flamegor - (ReferenceTable)" WHERE (`entry` = 11981 AND `item` = 30342);
UPDATE `creature_loot_template` SET `comment` = "Magmadar - (ReferenceTable)" WHERE (`entry` = 11982 AND `item` = 30001);
UPDATE `creature_loot_template` SET `comment` = "Magmadar - (ReferenceTable)" WHERE (`entry` = 11982 AND `item` = 30338);
UPDATE `creature_loot_template` SET `comment` = "Magmadar - (ReferenceTable)" WHERE (`entry` = 11982 AND `item` = 30339);
UPDATE `creature_loot_template` SET `comment` = "Magmadar - (ReferenceTable)" WHERE (`entry` = 11982 AND `item` = 30340);
UPDATE `creature_loot_template` SET `comment` = "Firemaw - (ReferenceTable)" WHERE (`entry` = 11983 AND `item` = 30341);
UPDATE `creature_loot_template` SET `comment` = "Firemaw - (ReferenceTable)" WHERE (`entry` = 11983 AND `item` = 30342);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - (ReferenceTable)" WHERE (`entry` = 11988 AND `item` = 30001);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - (ReferenceTable)" WHERE (`entry` = 11988 AND `item` = 30343);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - (ReferenceTable)" WHERE (`entry` = 11988 AND `item` = 30344);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - (ReferenceTable)" WHERE (`entry` = 11988 AND `item` = 30345);
UPDATE `creature_loot_template` SET `comment` = "Broodlord Lashlayer - (ReferenceTable)" WHERE (`entry` = 12017 AND `item` = 30346);
UPDATE `creature_loot_template` SET `comment` = "Broodlord Lashlayer - (ReferenceTable)" WHERE (`entry` = 12017 AND `item` = 30348);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - (ReferenceTable)" WHERE (`entry` = 12056 AND `item` = 30001);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - (ReferenceTable)" WHERE (`entry` = 12056 AND `item` = 30349);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - (ReferenceTable)" WHERE (`entry` = 12056 AND `item` = 30350);
UPDATE `creature_loot_template` SET `comment` = "Garr - (ReferenceTable)" WHERE (`entry` = 12057 AND `item` = 30001);
UPDATE `creature_loot_template` SET `comment` = "Garr - (ReferenceTable)" WHERE (`entry` = 12057 AND `item` = 30352);
UPDATE `creature_loot_template` SET `comment` = "Garr - (ReferenceTable)" WHERE (`entry` = 12057 AND `item` = 30353);
UPDATE `creature_loot_template` SET `comment` = "Garr - (ReferenceTable)" WHERE (`entry` = 12057 AND `item` = 30354);
UPDATE `creature_loot_template` SET `comment` = "Sulfuron Harbinger - (ReferenceTable)" WHERE (`entry` = 12098 AND `item` = 30355);
UPDATE `creature_loot_template` SET `comment` = "Sulfuron Harbinger - (ReferenceTable)" WHERE (`entry` = 12098 AND `item` = 30356);
UPDATE `creature_loot_template` SET `comment` = "Lucifron - (ReferenceTable)" WHERE (`entry` = 12118 AND `item` = 30001);
UPDATE `creature_loot_template` SET `comment` = "Lucifron - (ReferenceTable)" WHERE (`entry` = 12118 AND `item` = 30357);
UPDATE `creature_loot_template` SET `comment` = "Lucifron - (ReferenceTable)" WHERE (`entry` = 12118 AND `item` = 30488);
UPDATE `creature_loot_template` SET `comment` = "Gehennas - (ReferenceTable)" WHERE (`entry` = 12259 AND `item` = 30001);
UPDATE `creature_loot_template` SET `comment` = "Gehennas - (ReferenceTable)" WHERE (`entry` = 12259 AND `item` = 30365);
UPDATE `creature_loot_template` SET `comment` = "Gehennas - (ReferenceTable)" WHERE (`entry` = 12259 AND `item` = 30366);
UPDATE `creature_loot_template` SET `comment` = "Shazzrah - (ReferenceTable)" WHERE (`entry` = 12264 AND `item` = 30001);
UPDATE `creature_loot_template` SET `comment` = "Shazzrah - (ReferenceTable)" WHERE (`entry` = 12264 AND `item` = 30367);
UPDATE `creature_loot_template` SET `comment` = "Shazzrah - (ReferenceTable)" WHERE (`entry` = 12264 AND `item` = 30368);
UPDATE `creature_loot_template` SET `comment` = "Razorgore the Untamed - (ReferenceTable)" WHERE (`entry` = 12435 AND `item` = 30369);
UPDATE `creature_loot_template` SET `comment` = "Razorgore the Untamed - (ReferenceTable)" WHERE (`entry` = 12435 AND `item` = 30371);
UPDATE `creature_loot_template` SET `comment` = "Vaelastrasz the Corrupt - (ReferenceTable)" WHERE (`entry` = 13020 AND `item` = 30372);
UPDATE `creature_loot_template` SET `comment` = "Vaelastrasz the Corrupt - (ReferenceTable)" WHERE (`entry` = 13020 AND `item` = 30374);
UPDATE `creature_loot_template` SET `comment` = "Chromaggus - (ReferenceTable)" WHERE (`entry` = 14020 AND `item` = 30379);
UPDATE `creature_loot_template` SET `comment` = "Chromaggus - (ReferenceTable)" WHERE (`entry` = 14020 AND `item` = 30380);
UPDATE `creature_loot_template` SET `comment` = "Chromaggus - (ReferenceTable)" WHERE (`entry` = 14020 AND `item` = 30382);
UPDATE `creature_loot_template` SET `comment` = "Ebonroc - (ReferenceTable)" WHERE (`entry` = 14601 AND `item` = 30342);
UPDATE `creature_loot_template` SET `comment` = "Ebonroc - (ReferenceTable)" WHERE (`entry` = 14601 AND `item` = 30395);
-- `creature_loot_template` that are currently NULL
UPDATE `creature_loot_template` SET `comment` = "Black Ravager - Darkwood Fishing Pole" WHERE (`entry` = 628 AND `item` = 6366 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Young Black Ravager - Darkwood Fishing Pole" WHERE (`entry` = 923 AND `item` = 6366 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Vampiric Duskbat - Duskbat Pelt" WHERE (`entry` = 1554 AND `item` = 2876 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Vampiric Duskbat - Ruined Pelt" WHERE (`entry` = 1554 AND `item` = 4865 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Vampiric Duskbat - Dried Bat Blood" WHERE (`entry` = 1554 AND `item` = 6293 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Vampiric Duskbat - Patch of Bat Hair" WHERE (`entry` = 1554 AND `item` = 6296 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Vampiric Duskbat - Broken Fang" WHERE (`entry` = 1554 AND `item` = 7073 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Vampiric Duskbat - Chipped Claw" WHERE (`entry` = 1554 AND `item` = 7074 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Vampiric Duskbat - Meaty Bat Wing" WHERE (`entry` = 1554 AND `item` = 12223 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Worg - Darkwood Fishing Pole" WHERE (`entry` = 1765 AND `item` = 6366 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Mottled Worg - Darkwood Fishing Pole" WHERE (`entry` = 1766 AND `item` = 6366 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Bloodsnout Worg - Darkwood Fishing Pole" WHERE (`entry` = 1923 AND `item` = 6366 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - Essence of Fire" WHERE (`entry` = 11502 AND `item` = 7078 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - Eye of Sulfuras" WHERE (`entry` = 11502 AND `item` = 17204 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - Essence of the Firelord" WHERE (`entry` = 11502 AND `item` = 19017 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - Narain's Scrying Goggles" WHERE (`entry` = 11502 AND `item` = 20951 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Ragnaros - Draconic for Dummies" WHERE (`entry` = 11502 AND `item` = 21110 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - Head of Nefarian" WHERE (`entry` = 11583 AND `item` = 19002 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - Head of Nefarian" WHERE (`entry` = 11583 AND `item` = 19003 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - Red Scepter Shard" WHERE (`entry` = 11583 AND `item` = 21138 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Nefarian - From the Desk of Lord Victor Nefarius" WHERE (`entry` = 11583 AND `item` = 21142 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Magmadar - Narain's Scrying Goggles" WHERE (`entry` = 11982 AND `item` = 20951 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - Core of Earth" WHERE (`entry` = 11988 AND `item` = 7075 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - Essence of Earth" WHERE (`entry` = 11988 AND `item` = 7076 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - Heart of Fire" WHERE (`entry` = 11988 AND `item` = 7077 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - Essence of Fire" WHERE (`entry` = 11988 AND `item` = 7078 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - Lava Core" WHERE (`entry` = 11988 AND `item` = 17011 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - Sulfuron Ingot" WHERE (`entry` = 11988 AND `item` = 17203 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Golemagg the Incinerator - Narain's Scrying Goggles" WHERE (`entry` = 11988 AND `item` = 20951 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Broodlord Lashlayer - Head of the Broodlord Lashlayer" WHERE (`entry` = 12017 AND `item` = 20383 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - Burning Pitch" WHERE (`entry` = 12056 AND `item` = 4787 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - Elemental Fire" WHERE (`entry` = 12056 AND `item` = 7068 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - Heart of Fire" WHERE (`entry` = 12056 AND `item` = 7077 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - Essence of Fire" WHERE (`entry` = 12056 AND `item` = 7078 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - Fiery Core" WHERE (`entry` = 12056 AND `item` = 17010 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - Bindings of the Windseeker" WHERE (`entry` = 12056 AND `item` = 18563 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Baron Geddon - Narain's Scrying Goggles" WHERE (`entry` = 12056 AND `item` = 20951 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Garr - Core of Earth" WHERE (`entry` = 12057 AND `item` = 7075 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Garr - Essence of Earth" WHERE (`entry` = 12057 AND `item` = 7076 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Garr - Deeprock Salt" WHERE (`entry` = 12057 AND `item` = 8150 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Garr - Lava Core" WHERE (`entry` = 12057 AND `item` = 17011 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Garr - Bindings of the Windseeker" WHERE (`entry` = 12057 AND `item` = 18564 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Garr - Narain's Scrying Goggles" WHERE (`entry` = 12057 AND `item` = 20951 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Sulfuron Harbinger - Elemental Fire" WHERE (`entry` = 12098 AND `item` = 7068 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Sulfuron Harbinger - Heart of Fire" WHERE (`entry` = 12098 AND `item` = 7077 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Sulfuron Harbinger - Essence of Fire" WHERE (`entry` = 12098 AND `item` = 7078 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Sulfuron Harbinger - Hand of Sulfuron" WHERE (`entry` = 12098 AND `item` = 17330 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Sulfuron Harbinger - Narain's Scrying Goggles" WHERE (`entry` = 12098 AND `item` = 20951 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Lucifron - Elemental Fire" WHERE (`entry` = 12118 AND `item` = 7068 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Lucifron - Heart of Fire" WHERE (`entry` = 12118 AND `item` = 7077 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Lucifron - Essence of Fire" WHERE (`entry` = 12118 AND `item` = 7078 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Lucifron - Hand of Lucifron" WHERE (`entry` = 12118 AND `item` = 17329 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Lucifron - Narain's Scrying Goggles" WHERE (`entry` = 12118 AND `item` = 20951 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Gehennas - Elemental Fire" WHERE (`entry` = 12259 AND `item` = 7068 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Gehennas - Heart of Fire" WHERE (`entry` = 12259 AND `item` = 7077 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Gehennas - Essence of Fire" WHERE (`entry` = 12259 AND `item` = 7078 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Gehennas - Hand of Gehennas" WHERE (`entry` = 12259 AND `item` = 17331 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Gehennas - Narain's Scrying Goggles" WHERE (`entry` = 12259 AND `item` = 20951 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Shazzrah - Elemental Fire" WHERE (`entry` = 12264 AND `item` = 7068 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Shazzrah - Heart of Fire" WHERE (`entry` = 12264 AND `item` = 7077 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Shazzrah - Essence of Fire" WHERE (`entry` = 12264 AND `item` = 7078 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Shazzrah - Hand of Shazzrah" WHERE (`entry` = 12264 AND `item` = 17332 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Shazzrah - Narain's Scrying Goggles" WHERE (`entry` = 12264 AND `item` = 20951 AND `reference` = 0);
-- `creature_loot_template` (reference) that are currently empty
UPDATE `creature_loot_template` SET `comment` = "High Priest Venoxis - (ReferenceTable)" WHERE (`entry` = 14507 AND `item` = 30546);
UPDATE `creature_loot_template` SET `comment` = "High Priest Thekal - (ReferenceTable)" WHERE (`entry` = 14509 AND `item` = 30546);
UPDATE `creature_loot_template` SET `comment` = "High Priestess Mar'li - (ReferenceTable)" WHERE (`entry` = 14510 AND `item` = 30546);
UPDATE `creature_loot_template` SET `comment` = "High Priestess Arlokk - (ReferenceTable)" WHERE (`entry` = 14515 AND `item` = 30546);
UPDATE `creature_loot_template` SET `comment` = "High Priestess Jeklik - (ReferenceTable)" WHERE (`entry` = 14517 AND `item` = 30546);
UPDATE `creature_loot_template` SET `comment` = "Hakkar - (ReferenceTable)" WHERE (`entry` = 14834 AND `item` = 30398);
-- `creature_loot_template` that are currently empty
UPDATE `creature_loot_template` SET `comment` = "Green Recluse - Green Carapace Shield" WHERE (`entry` = 569 AND `item` = 2021 AND `reference` = 0);
UPDATE `creature_loot_template` SET `comment` = "Brain Eater - Black Metal War Axe" WHERE (`entry` = 570 AND `item` = 2015 AND `reference` = 0);

View File

@ -0,0 +1,5 @@
-- DB update 2025_03_09_03 -> 2025_03_10_00
--
DELETE FROM `spell_linked_spell` WHERE `spell_trigger` = -44873 AND `spell_effect` = 44874;
INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
(-44873, 44874, 0, 'on Flame Ring removal cast Flame Ring explosion (Brutallus - Madrigosa)');

View File

@ -0,0 +1,31 @@
-- DB update 2025_03_10_00 -> 2025_03_11_00
--
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` IN (5357, 5358, 5359, 5360, 5361);
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 5359) AND (`source_type` = 0) AND (`id` = 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`, `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
(5359, 0, 1, 0, 8, 0, 100, 0, 23359, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Shore Strider - On Spellhit \'Transmogrify!\' - Starts an attack');
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 5360) AND (`source_type` = 0) AND (`id` = 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`, `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
(5360, 0, 1, 0, 8, 0, 100, 0, 23359, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Deep Strider - On Spellhit \'Transmogrify!\' - Starts an attack');
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 5357) AND (`source_type` = 0) AND (`id` = 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`, `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
(5357, 0, 1, 0, 8, 0, 100, 0, 23359, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Land Walker - On Spellhit \'Transmogrify!\' - Starts an attack');
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 5361) AND (`source_type` = 0) AND (`id` = 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`, `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
(5361, 0, 1, 0, 8, 0, 100, 0, 23359, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Wave Strider - On Spellhit \'Transmogrify!\' - Starts an attack');
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 5358) AND (`source_type` = 0) AND (`id` = 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`, `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
(5358, 0, 1, 0, 8, 0, 100, 0, 23359, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Cliff Giant - On Spellhit \'Transmogrify!\' - Starts an attack');
-- add conditions for spell 'Transmogrify!' targetting
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 17) AND (`SourceGroup` = 0) AND (`SourceEntry` = 23359) AND (`ConditionTypeOrReference` = 31) AND (`ConditionTarget` = 1);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(17, 0, 23359, 0, 0, 31, 1, 3, 5359, 0, 0, 0, 0, '', 'Spell 23359 targets Shore Strider'),
(17, 0, 23359, 0, 1, 31, 1, 3, 5360, 0, 0, 0, 0, '', 'Spell 23359 targets Deep Strider'),
(17, 0, 23359, 0, 2, 31, 1, 3, 5357, 0, 0, 0, 0, '', 'Spell 23359 targets Land Walker'),
(17, 0, 23359, 0, 3, 31, 1, 3, 5361, 0, 0, 0, 0, '', 'Spell 23359 targets Wave Strider'),
(17, 0, 23359, 0, 4, 31, 1, 3, 5358, 0, 0, 0, 0, '', 'Spell 23359 targets Cliff Giant');

View File

@ -0,0 +1,31 @@
-- DB update 2025_03_11_00 -> 2025_03_11_01
-- Add RLT for Pendants
DELETE FROM `reference_loot_template` WHERE (`Entry`= 34081) AND (`Item` IN (35292, 35291, 35290));
INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
('34081', '35292', '0', '0', '0', '1', '1', '1', '1', 'Sin\'dorei Pendant of Triumph'),
('34081', '35291', '0', '0', '0', '1', '1', '1', '1', 'Sin\'dorei Pendant of Salvation'),
('34081', '35290', '0', '0', '0', '1', '1', '1', '1', 'Sin\'dorei Pendant of Conquest');
-- Add Sunglow Vest into Entropius RLT
DELETE FROM `reference_loot_template` WHERE (`Entry` = 34095) AND (`Item` IN (34212));
INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
('34095', '34212', '0', '0', '0', '1', '1', '1', '1', 'Sunglow Vest');
-- Add two items into Sacrolash/Alythes RLT.
DELETE FROM `reference_loot_template` WHERE (`Entry` = 34085) AND (`Item` IN (34209, 34212));
INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
('34085', '34209', '0', '0', '0', '1', '1', '1', '1', 'Spaulders of Reclamation'),
('34085', '34212', '0', '0', '0', '1', '1', '1', '1', 'Sunglow Vest');
-- Set loot (Alythess)
DELETE FROM `creature_loot_template` WHERE (`Entry` = 25166) AND (`Item` IN (34081));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(25166, 34081, 34081, 100, 0, 1, 1, 1, 1, 'Grand Warlock Alythess - (ReferenceTable 2)');
-- Set loot (Sacrolash)
DELETE FROM `creature_loot_template` WHERE (`Entry` = 25165) AND (`Item` IN (34085, 34664, 34081));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(25165, 34085, 34085, 100, 0, 1, 1, 4, 4, 'Lady Sacrolash - (ReferenceTable)'),
(25165, 34664, 0, 100, 0, 1, 0, 4, 4, 'Lady Sacrolash - Sunmote'),
(25165, 34081, 34081, 100, 0, 1, 1, 1, 1, 'Lady Sacrolash - (ReferenceTable 2)');

View File

@ -0,0 +1,9 @@
-- DB update 2025_03_11_01 -> 2025_03_11_02
-- Update gameobject 'Orb of the Blue Flight' with sniffed values
-- new spawns
DELETE FROM `gameobject` WHERE (`id` IN (188415)) AND (`guid` IN (257, 258, 259, 260));
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`, `Comment`) VALUES
(257, 188415, 585, 0, 0, 3, 1, -19.2306861877441406, -551.10784912109375, -63.7666511535644531, 4.607671737670898437, 0, 0, -0.74314403533935546, 0.669131457805633544, 7200, 255, 1, "", 50664, NULL),
(258, 188415, 585, 0, 0, 3, 1, -32.2288398742675781, -646.16180419921875, -63.6902046203613281, 1.48352813720703125, 0, 0, 0.675589561462402343, 0.737277925014495849, 7200, 255, 1, "", 50664, NULL),
(259, 188415, 585, 0, 0, 3, 1, -73.1546249389648437, -601.76910400390625, -63.7666511535644531, 0.069811686873435974, 0, 0, 0.034898757934570312, 0.999390840530395507, 7200, 255, 1, "", 50664, NULL),
(260, 188415, 585, 0, 0, 3, 1, 20.02517318725585937, -593.69659423828125, -63.6475372314453125, 3.211419343948364257, 0, 0, -0.9993906021118164, 0.034906134009361267, 7200, 255, 1, "", 50664, NULL);

View File

@ -0,0 +1,10 @@
-- DB update 2025_03_11_02 -> 2025_03_13_00
DELETE FROM `reference_loot_template` WHERE (`Entry`= 34091) AND (`Item` IN (35202));
INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
('34091', '35202', '0', '0', '0', '1', '1', '1', '1', 'Design: Amulet of Flowing Life');
DELETE FROM `reference_loot_template` WHERE (`Entry`= 34092) AND (`Item` IN (35215, 35209));
INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
('34092', '35215', '0', '0', '0', '1', '1', '1', '1', 'Pattern: Sun-Drenched Scale Gloves'),
('34092', '35209', '0', '0', '0', '1', '1', '1', '1', 'Plans: Hard Khorium Battlefists');

View File

@ -0,0 +1,5 @@
-- DB update 2025_03_13_00 -> 2025_03_15_00
--
-- SPELL_ATTR0_CU_ONLY_ONE_AREA_AURA 45402 Demonic Vapor
DELETE FROM `spell_custom_attr` WHERE `spell_id` = 45402;
INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES(45402, 536870912);

View File

@ -0,0 +1,4 @@
-- DB update 2025_03_15_00 -> 2025_03_16_00
-- Fixes Zangarmarsh Quest "A Job Undone" invalid prerequisite quest
-- closes https://github.com/azerothcore/azerothcore-wotlk/issues/21708
UPDATE `quest_template_addon` SET `PrevQuestID` = 9773 WHERE (`ID` = 9899);

View File

@ -0,0 +1,14 @@
-- DB update 2025_03_16_00 -> 2025_03_16_01
-- Add Relic of Ulduar to loot tables
DELETE FROM `creature_loot_template` WHERE `Entry` IN (27960, 27961, 27962, 27963, 27964, 27965, 27969, 27970, 27971, 27972) AND `Item` = 42780;
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(27960, 42780, 0, 35, 0, 1, 0, 1, 3, 'Dark Rune Warrior - Relic of Ulduar'),
(27961, 42780, 0, 36, 0, 1, 0, 1, 3, 'Dark Rune Worker - Relic of Ulduar'),
(27962, 42780, 0, 36, 0, 1, 0, 1, 3, 'Dark Rune Elementalist - Relic of Ulduar'),
(27963, 42780, 0, 36, 0, 1, 0, 1, 3, 'Dark Rune Theurgist - Relic of Ulduar'),
(27964, 42780, 0, 36, 0, 1, 0, 1, 3, 'Dark Rune Scholar - Relic of Ulduar'),
(27965, 42780, 0, 38, 0, 1, 0, 1, 3, 'Dark Rune Shaper - Relic of Ulduar'),
(27969, 42780, 0, 30, 0, 1, 0, 1, 3, 'Dark Rune Giant - Relic of Ulduar'),
(27970, 42780, 0, 18, 0, 1, 0, 1, 3, 'Raging Construct - Relic of Ulduar'),
(27971, 42780, 0, 22, 0, 1, 0, 1, 3, 'Unrelenting Construct - Relic of Ulduar'),
(27972, 42780, 0, 19, 0, 1, 0, 1, 3, 'Lightning Construct - Relic of Ulduar');

View File

@ -0,0 +1,20 @@
-- DB update 2025_03_16_01 -> 2025_03_16_02
-- Add Relic of Ulduar to loot tables Halls of Lightning
DELETE FROM `creature_loot_template` WHERE `Entry` IN (28547, 28578, 28579, 28580, 28581, 28582, 28583, 28584, 28826, 28835, 28836, 28837, 28838, 28920, 28961, 28965) AND `Item` = 42780;
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(28547, 42780, 0, 23, 0, 1, 0, 1, 3, 'Storming Vortex - Relic of Ulduar'),
(28578, 42780, 0, 29, 0, 1, 0, 1, 3, 'Hardened Steel Reaver - Relic of Ulduar'),
(28579, 42780, 0, 28, 0, 1, 0, 1, 3, 'Hardened Steel Berserker - Relic of Ulduar'),
(28580, 42780, 0, 27, 0, 1, 0, 1, 3, 'Hardened Steel Skycaller - Relic of Ulduar'),
(28581, 42780, 0, 30, 0, 1, 0, 1, 3, 'Stormforged Tactician - Relic of Ulduar'),
(28582, 42780, 0, 30, 0, 1, 0, 1, 3, 'Stormforged Mender - Relic of Ulduar'),
(28583, 42780, 0, 23, 0, 1, 0, 1, 3, 'Blistering Steamrager - Relic of Ulduar'),
(28584, 42780, 0, 20, 0, 1, 0, 1, 3, 'Unbound Firestorm - Relic of Ulduar'),
(28826, 42780, 0, 21, 0, 1, 0, 1, 3, 'Stormfury Revenant - Relic of Ulduar'),
(28835, 42780, 0, 20, 0, 1, 0, 1, 3, 'Stormforged Construct - Relic of Ulduar'),
(28836, 42780, 0, 34, 0, 1, 0, 1, 3, 'Stormforged Runeshaper - Relic of Ulduar'),
(28837, 42780, 0, 31, 0, 1, 0, 1, 3, 'Stormforged Sentinel - Relic of Ulduar'),
(28838, 42780, 0, 34, 0, 1, 0, 1, 3, 'Titanium Vanguard - Relic of Ulduar'),
(28920, 42780, 0, 33, 0, 1, 0, 1, 3, 'Stormforged Giant - Relic of Ulduar'),
(28961, 42780, 0, 34, 0, 1, 0, 1, 3, 'Titanium Siegebreaker - Relic of Ulduar'),
(28965, 42780, 0, 31, 0, 1, 0, 1, 3, 'Titanium Thunderer - Relic of Ulduar');

View File

@ -0,0 +1,12 @@
-- DB update 2025_03_16_02 -> 2025_03_16_03
-- Remove SmartAI sql for NPC Jenny (25969)
DELETE FROM `smart_scripts`
WHERE `entryorguid` = 25969;
UPDATE `creature_template` SET `AIName` = '', `ScriptName` = 'npc_jenny' WHERE (`entry` = 25969);
-- spell 46340 Crates Carried
-- add custom attribute SPELL_ATTR0_CU_IGNORE_EVADE
DELETE FROM `spell_custom_attr` WHERE `spell_id` = 46340;
INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES
(46340, 2048);

View File

@ -0,0 +1,4 @@
-- DB update 2025_03_16_03 -> 2025_03_16_04
-- fixes quest "Pushed Too Far" not having a prerequisite
-- https://github.com/azerothcore/azerothcore-wotlk/issues/21553
UPDATE `quest_template_addon` SET `PrevQuestID` = 12867 WHERE (`ID` = 12869);

View File

@ -0,0 +1,8 @@
-- DB update 2025_03_16_04 -> 2025_03_17_00
--
DELETE FROM `spell_script_names` WHERE `spell_id` IN (29707, 30324, 47449, 47450) AND `ScriptName` = 'spell_warr_heroic_strike';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(29707, 'spell_warr_heroic_strike'),
(30324, 'spell_warr_heroic_strike'),
(47449, 'spell_warr_heroic_strike'),
(47450, 'spell_warr_heroic_strike');

View File

@ -0,0 +1,35 @@
-- DB update 2025_03_17_00 -> 2025_03_17_01
-- Declare variables for item IDs
SET @item_severed_arm = 45323;
SET @item_bloated_slippery_eel = 45328;
SET @quest_disarmed = 13836;
-- Delete Severed Arm from fish loot
DELETE FROM `fishing_loot_template`
WHERE `entry` = 4567 AND `item` = @item_severed_arm;
-- Delete Bloated Slippery Eel from fish loot (water outside of Dalaran, where Quest Item was before patch 3.3.3)
DELETE FROM `fishing_loot_template`
WHERE `entry` = 3979 AND `item` = @item_bloated_slippery_eel;
-- Delete Bloated Slippery Eel from gameobject loot (fishing holes outside of Dalaran, where Quest Item was before patch 3.3.3)
DELETE FROM `gameobject_loot_template`
WHERE `entry` = 25671 AND `item` = @item_bloated_slippery_eel;
-- Update Bloated Slippery Eel entry in reference loot (the quest fish already exists in loot table but is in "wrong" water; move it to outside of the prison)
UPDATE `reference_loot_template`
SET `entry` = 11024
WHERE `entry` = 11026 AND `item` = @item_bloated_slippery_eel;
-- Update conditions according to the changed entry in `reference_loot_template`
UPDATE `conditions`
SET `sourceGroup` = 11024
WHERE `sourceGroup` = 11026 AND `sourceEntry` = @item_bloated_slippery_eel AND `conditionValue1` = @quest_disarmed;
-- Delete outdated condition
DELETE FROM `conditions`
WHERE `sourceGroup` = 25671 AND `sourceEntry` = @item_bloated_slippery_eel AND `conditionValue1` = @quest_disarmed;
-- Delete duplicated Corroded Jewelry from fish loot
DELETE FROM `fishing_loot_template`
WHERE `entry` = 4560 AND `item` = 45903;

View File

@ -0,0 +1,68 @@
-- DB update 2025_03_17_01 -> 2025_03_17_02
-- Fix double cast of Scourge Disguise
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 28669);
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
(28669, 0, 0, 1, 54, 0, 100, 512, 0, 0, 0, 0, 0, 0, 28, 51966, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Flying Fiend - On Just Summoned - Remove \'Scourge Disguise[51966]\''),
(28669, 0, 1, 2, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 52191, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Flying Fiend - On Just Summoned - Cast \'Scourge Disguise[52191]\''),
(28669, 0, 2, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 80, 2866900, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Flying Fiend - On Just Summoned - Run Script'),
(28669, 0, 3, 0, 40, 0, 100, 512, 62, 28669, 0, 0, 0, 0, 11, 52220, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Flying Fiend - On Waypoint 62 Reached - Cast \'Kill Credit\''),
(28669, 0, 4, 5, 40, 0, 100, 512, 63, 28669, 0, 0, 0, 0, 28, 52191, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Flying Fiend - On Waypoint 63 Reached - Remove \'Scourge Disguise[52191]\''),
(28669, 0, 5, 6, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 75, 52192, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Flying Fiend - On Waypoint 63 Reached - Cast \'Scourge Disguise[52192]\''),
(28669, 0, 6, 7, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 75, 51971, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Flying Fiend - On Waypoint 63 Reached - Cast \'Scourge Disguise Instability[51971]\''),
(28669, 0, 7, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 50630, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Flying Fiend - On Waypoint 63 Reached - Cast \'Eject All Passengers\'');
-- Add or Remove linked to Scourge Disguise spells
DELETE FROM `spell_linked_spell` WHERE (`spell_trigger` IN ( -52010, -52192, -51966, 51966, 52192));
INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
(-52010, -52192, 0, 'Remove Scourge Disguise [52192]'),
(-52010, -51966, 0, 'Remove Scourge Disguise [51966]'),
(-51966, -51971, 0, 'Remove Scourge Disguise Instability [51971]'),
(-52192, -51971, 0, 'Remove Scourge Disguise Instability [51971]'),
(51966, -52192, 0, 'Remove Scourge Disguise [52192]'),
(52192, -51966, 0, 'Remove Scourge Disguise [51966]'),
(51966, 51971, 0, 'Add Scourge Disguise Instability [51971]'),
(52192, 51971, 0, 'Add Scourge Disguise Instability [51971]');
-- Attach script to Scourge Disguise Instability
DELETE FROM `spell_script_names` WHERE `spell_id` = 51971;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(51971, 'spell_scourge_disguise_instability');
-- Update Blightguard AI
UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=28603;
-- Update Blightguard scripts: cast invisibility, remove aura from target, cast Shadowstrike
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 28603);
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
(28603, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 75, 52060, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blightguard - On Reset - Cast \'Invisibility\''),
(28603, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 0, 28, 52060, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Blightguard - On Aggro - Remove Aura \'Invisibility\''),
(28603, 0, 2, 0, 0, 0, 100, 0, 6000, 6000, 10000, 10000, 0, 0, 11, 33914, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Blightguard - In Combat - Cast \'Shadowstrike\''),
(28603, 0, 3, 0, 24, 0, 100, 0, 51966, 0, 100, 100, 0, 0, 28, 51966, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Blightguard - On Target Has \'Scourge Disguise\' Aura - Remove \'Scourge Disguise\'[51966]'),
(28603, 0, 4, 0, 24, 0, 100, 0, 52192, 0, 100, 100, 0, 0, 28, 52192, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Blightguard - On Target Has \'Scourge Disguise\' Aura - Remove \'Scourge Disguise\'[52192]');
-- Original commit: https://github.com/TrinityCore/TrinityCore/commit/d96482b2d49c61fe26533def461276a8038db4ab
-- Update Blightguard spawn location (thanks to @Killyana)
DELETE FROM `creature` WHERE (`id1` = 28603 AND `guid` IN (113672, 52812, 52813, 52814, 52815, 52816, 52817, 52818, 52819, 52820, 52821, 52822, 52823, 52824, 52825, 52826, 52827, 52828, 52829, 52830, 52831, 52832, 52833) );
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
(52812, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6022.67, -2049.14, 238.189, 1.46482, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52813, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6042.88, -2119.83, 239.522, 5.55282, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52814, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6101.08, -2157.18, 239.578, 5.52926, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52815, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6176.72, -2208.48, 241.65, 0.110007, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52816, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6227.74, -2193.69, 236.211, 0.66371, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52817, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6270.34, -2053.92, 238.548, 1.23705, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52818, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6069.51, -1913.87, 236.212, 2.78429, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52819, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6017.94, -1903.71, 239.384, 3.56183, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52820, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 5981.49, -1963.15, 237.669, 4.15088, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52821, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6017.39, -2106.46, 243.382, 5.40752, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52822, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 5275.12, -1678.04, 236.349, 1.1703, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52823, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 5224.69, -1751.98, 235.717, 3.17306, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52824, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 5154.48, -1745.88, 238.291, 3.26731, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52825, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 5082.87, -1725.64, 235.624, 3.55791, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52826, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 5034.49, -1655.17, 240.16, 1.8693, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52827, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 5069.11, -1540.09, 240.561, 6.1183, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52828, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 5099.29, -1559.64, 238.941, 0.624444, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52829, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6183.62, -2102.73, 235.653, 3.42675, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52830, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6113.59, -2105.41, 234.909, 0.441447, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52831, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6091.98, -2019.44, 235.639, 1.6706, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52832, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6199.66, -1957.45, 234.049, 1.20721, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL),
(52833, 28603, 0, 0, 571, 0, 0, 1, 1, 0, 6242.41, -2003.27, 234.282, 4.15089, 600, 10, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, NULL);

View File

@ -0,0 +1,3 @@
-- DB update 2025_03_17_02 -> 2025_03_17_03
UPDATE `quest_poi` SET `WorldMapAreaId` = 1421, `VerifiedBuild` = 51831 WHERE (`QuestID` = 8948) AND (`id` = 0);
UPDATE `quest_poi_points` SET `VerifiedBuild` = 51831 WHERE (`QuestID` = 8948) AND (`Idx1` = 0) AND (`Idx2` = 0);

View File

@ -0,0 +1,10 @@
-- DB update 2025_03_17_03 -> 2025_03_19_00
--
DELETE FROM `spell_script_names` WHERE `spell_id` = 45034;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES(45034, 'spell_kalecgos_curse_of_boundless_agony_aura');
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` IN (45032, 45034)) AND (`SourceId` = 0) AND (`ConditionValue1` IN (45032, 45034));
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(13, 1, 45032, 0, 0, 1, 0, 45032, 0, 0, 1, 0, 0, '', 'Player does not have Curse of Boundless Agony'),
(13, 1, 45032, 0, 0, 1, 0, 45034, 0, 0, 1, 0, 0, '', 'Player does not have Curse of Boundless Agony'),
(13, 1, 45034, 0, 0, 1, 0, 45032, 0, 0, 1, 0, 0, '', 'Player does not have Curse of Boundless Agony'),
(13, 1, 45034, 0, 0, 1, 0, 45034, 0, 0, 1, 0, 0, '', 'Player does not have Curse of Boundless Agony');

View File

@ -0,0 +1,11 @@
-- DB update 2025_03_19_00 -> 2025_03_19_01
-- Add creature formation for the last pack before Kalecgos
DELETE FROM `creature_formations` WHERE `leaderGUID` = 54834;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(54834, 54834, 0, 0, 3, 0, 0),
(54834, 43654, 0, 0, 3, 0, 0),
(54834, 42573, 0, 0, 3, 0, 0),
(54834, 42574, 0, 0, 3, 0, 0),
(54834, 54817, 0, 0, 3, 0, 0),
(54834, 42656, 0, 0, 3, 0, 0);

View File

@ -0,0 +1,76 @@
-- DB update 2025_03_19_01 -> 2025_03_21_00
-- Update gameobject 'SWP / MGT' with sniffed values
-- updated spawns
DELETE FROM `gameobject` WHERE (`id` IN (188116, 188115, 188114, 187869, 188523, 188075, 188081, 188165, 188166, 188173, 187979, 187990, 187764, 187765, 187766, 187770, 188064, 188065, 187578, 188118, 187896)) AND (`guid` IN (268109, 268110, 268111, 268112, 50437, 50442, 50452, 99798, 99799, 99800, 99802, 99803, 99804, 99805, 99806, 99807, 99808, 99809, 99810, 99811, 99812, 99813));
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`, `Comment`) VALUES
-- Orb of the Blue Flight
-- was 187869 before
(268109, 188116, 580, 0, 0, 1, 1, 1696.15478515625, 674.96759033203125, 28.05020904541015625, 4.817109584808349609, 0, 0, -0.66913032531738281, 0.74314504861831665, 7200, 255, 1, "", 50664, NULL),
-- was 188114 before
(268110, 188115, 580, 0, 0, 1, 1, 1651.9205322265625, 635.35009765625, 28.12865447998046875, 6.195919513702392578, 0, 0, -0.04361915588378906, 0.999048233032226562, 7200, 255, 1, "", 50664, NULL),
-- was 188115 before
(268111, 188114, 580, 0, 0, 1, 1, 1704.3033447265625, 582.68109130859375, 28.16482734680175781, 1.605701684951782226, 0, 0, 0.719339370727539062, 0.694658815860748291, 7200, 255, 1, "", 50664, NULL),
-- was 188116 before
(268112, 187869, 580, 0, 0, 1, 1, 1746.5653076171875, 621.91339111328125, 28.05021095275878906, 2.984498262405395507, 0, 0, 0.996916770935058593, 0.078466430306434631, 7200, 255, 1, "", 50664, NULL),
-- Doodad_Sunwell_BossCollision01
(50437, 188523, 580, 0, 0, 1, 1, 1704.8704833984375, 927.79095458984375, 40.58108901977539062, 1.553341388702392578, 0, 0, 0.700908660888671875, 0.713251054286956787, 7200, 255, 0, "", 50664, NULL),
-- Doodad_Sunwell_Fire_Barrier_ext01
(50442, 188075, 580, 0, 0, 1, 1, 1499.90625, 558.431884765625, 39.33041763305664062, 4.084071159362792968, 0, 0, -0.8910064697265625, 0.453990638256072998, 7200, 255, 1, "", 50664, NULL),
-- Sanctum Planetarium
(50452, 188081, 530, 0, 0, 1, 1, 12780.5546875, -6887.462890625, 19.20861244201660156, 1.239183306694030761, 0, 0, 0.580702781677246093, 0.814115643501281738, 120, 255, 0, "", 45942, NULL),
-- Doodad_Kael_Explode_FX_Left01
(99798, 188165, 585, 0, 0, 3, 1, 138.3532257080078125, 190.1392364501953125, -16.8305530548095703, 4.27606058120727539, 0, 0, -0.84339046478271484, 0.537301182746887207, 7200, 255, 1, "", 49345, NULL),
-- Doodad_Kael_Explode_FX_Right01
(99799, 188166, 585, 0, 0, 3, 1, 158.750701904296875, 190.509857177734375, -16.8794155120849609, 4.97418975830078125, 0, 0, -0.60876083374023437, 0.793353796005249023, 7200, 255, 1, "", 49345, NULL),
-- Escape to the Isle of Quel'Danas
(99800, 188173, 585, 0, 0, 3, 1, 148.4007110595703125, 203.44293212890625, -11.957921028137207, 1.012289404869079589, 0, 0, 0.484808921813964843, 0.87462007999420166, 7200, 255, 1, "", 49345, NULL),
-- Doodad_SunwellRaid_Gate_02
(99802, 187979, 585, 0, 0, 3, 1, 254.4499053955078125, -29.3622722625732421, 5.577684879302978515, 4.712389945983886718, 0, 0, -0.70710659027099609, 0.707106947898864746, 7200, 255, 1, "", 50664, NULL),
-- Doodad_SunwellRaid_Gate_07
(99803, 187990, 585, 0, 0, 3, 1, 3.43621826171875, -448.19219970703125, -5.711883544921875, 4.00553131103515625, 0, 0, -0.9081430435180664, 0.418660014867782592, 7200, 255, 0, "", 49345, NULL),
-- Rohendor, The Second Gate
(99804, 187764, 585, 0, 0, 3, 1, -15.906280517578125, -421.996246337890625, -47.174774169921875, 3.045581579208374023, 0, 0, 0.99884796142578125, 0.047987140715122222, 7200, 255, 1, "", 49345, NULL),
-- Archonisus, The Third Gate
(99805, 187765, 585, 0, 0, 3, 1, -108.729034423828125, -598.2764892578125, -6.37282562255859375, 1.387535810470581054, 0, 0, 0.639438629150390625, 0.768842101097106933, 7200, 255, 1, "", 49345, NULL),
-- Agamath, The First Gate
(99806, 187766, 585, 0, 0, 3, 1, 72.422332763671875, -587.3228759765625, 1.59500885009765625, 2.696528911590576171, 0, 0, 0.975341796875, 0.220699742436408996, 7200, 255, 1, "", 49345, NULL),
-- Doodad_SunwellRaid_Gate_04
(99807, 187770, 585, 0, 0, 3, 1, 127.100799560546875, 61.36127090454101562, -15.1793174743652343, 4.712389945983886718, 0, 0, -0.70710659027099609, 0.707106947898864746, 7200, 255, 1, "", 49345, NULL),
-- Asylum Door
(99808, 188064, 585, 0, 0, 3, 1, 149.9267120361328125, 125.6940383911132812, -7.26305294036865234, 1.570795774459838867, 0, 0, 0.707106590270996093, 0.707106947898864746, 7200, 255, 0, "", 49345, NULL),
-- Assembly Chamber Door
(99809, 188065, 585, 0, 0, 3, 1, 215.1305694580078125, 0.396176815032958984, 9.411577224731445312, 0, 0, 0, 0, 1, 7200, 255, 0, "", 49345, NULL),
-- Sanctum Planetarium
(99810, 188081, 585, 0, 0, 3, 1, -214.19488525390625, -251.215927124023437, -72.2626113891601562, 2.635444164276123046, 0, 0, 0.96814727783203125, 0.250381410121917724, 7200, 255, 0, "", 50664, NULL),
-- Scrying Orb
(99811, 187578, 585, 0, 0, 3, 1, 231.2144927978515625, -274.873016357421875, -7.39517498016357421, 1.658061861991882324, 0, 0, 0.737277030944824218, 0.67559051513671875, 7200, 255, 1, "", 49345, NULL),
-- Doodad_SunwellRaid_Gate_08
(99812, 188118, 585, 0, 0, 3, 1, -71.202423095703125, -523.017578125, 0.144580841064453125, 3.132858037948608398, 0, 0, 0.999990463256835937, 0.004367320332676172, 7200, 255, 0, "", 50664, NULL),
-- Doodad_SunwellRaid_Gate_05
(99813, 187896, 585, 0, 0, 3, 1, 231.232269287109375, -236.829681396484375, 0.579834997653961181, 4.712389945983886718, 0, 0, -0.70710659027099609, 0.707106947898864746, 7200, 255, 1, "", 49345, NULL);
-- new spawns
DELETE FROM `gameobject` WHERE (`id` IN (188075, 188119, 188421, 188523, 188524)) AND (`guid` IN (468, 469, 470, 471, 472));
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`, `Comment`) VALUES
-- Doodad_Sunwell_Fire_Barrier_ext01
(468, 188075, 585, 0, 0, 3, 1, 45.91571044921875, -797.59228515625, -52.4864501953125, 5.663594245910644531, 0, 0, -0.30486392974853515, 0.952395915985107421, 7200, 255, 1, "", 49345, NULL),
-- Doodad_Sunwell_Ice_Barrier01
(469, 188119, 585, 0, 0, 3, 1, -384.951171875, -659.806640625, -51.23577880859375, 3.132858037948608398, 0, 0, 0.999990463256835937, 0.004367320332676172, 7200, 255, 0, "", 49345, NULL),
-- Doodad_Sunwell_BossForceField01
(470, 188421, 585, 0, 0, 3, 1, -324.042999267578125, -595.18365478515625, -59.2552947998046875, 3.132858037948608398, 0, 0, 0.999990463256835937, 0.004367320332676172, 7200, 255, 0, "", 49345, NULL),
-- Doodad_Sunwell_BossCollision01
(471, 188523, 585, 0, 0, 3, 1, -325.217803955078125, -595.8587646484375, -51.23577880859375, 3.132858037948608398, 0, 0, 0.999990463256835937, 0.004367320332676172, 7200, 255, 0, "", 50664, NULL),
-- Doodad_Sunwell_BossCollision02
(472, 188524, 585, 0, 0, 3, 1, -326.933685302734375, -595.60992431640625, -51.23577880859375, 3.132858037948608398, 0, 0, 0.999990463256835937, 0.004367320332676172, 7200, 255, 0, "", 49345, NULL);
-- remaining spawns (no sniffed values available)
-- (all in map 580)
-- 50439 - 187764 -- Rohendor, The Second Gate
-- 50440 - 187765 -- Archonisus, The Third Gate
-- 50441 - 187766 -- Agamath, The First Gate
-- 50110 - 187990 -- Doodad_SunwellRaid_Gate_07
-- 50443 - 188081 -- Sanctum Planetarium
-- 50444 - 188118 -- Doodad_SunwellRaid_Gate_08
-- 50445 - 188119 -- Doodad_Sunwell_Ice_Barrier01
-- 50447 - 188421 -- Doodad_Sunwell_BossForceField01
-- 50438 - 188524 -- Doodad_Sunwell_BossCollision02

5
deps/zlib/inflate.c vendored
View File

@ -763,9 +763,10 @@ int flush;
copy = state->length;
if (copy > have) copy = have;
if (copy) {
len = state->head->extra_len - state->length;
if (state->head != Z_NULL &&
state->head->extra != Z_NULL) {
len = state->head->extra_len - state->length;
state->head->extra != Z_NULL &&
len < state->head->extra_max) {
zmemcpy(state->head->extra + len, next,
len + copy > state->head->extra_max ?
state->head->extra_max - len : copy);

View File

@ -22,20 +22,20 @@
void Acore::Banner::Show(std::string_view applicationName, void(*log)(std::string_view text), void(*logExtraInfo)())
{
log(Acore::StringFormat("{} ({})", GitRevision::GetFullVersion(), applicationName));
log("<Ctrl-C> to stop.");
log(" _____ _____ ");
log("( ___ )---------------------------------------------( ___ )");
log(" | | __ __ __ ______ | | ");
log(R"( | | | \/ |_ _\ \ / / ___|___ _ __ ___ | | )");
log(R"( | | | |\/| \ \/ /\ \ /\ / / | / _ \| '__/ _ \ | | )");
log(R"( | | | | | |> < \ V V /| |__| (_) | | | __/ | | )");
log(R"( | | |_| |_/_/\_\ \_/\_/ \____\___/|_| \___| | | )");
log(" |___| WITH PLAYERBOTS! |___| ");
log("(_____)---------------------------------------------(_____)");
log(" MxWCore 3.3.5 (PlayerBots Core) ");
log(" Dev.: mikx (http://discord.mxg.ovh) ");
log(" Source: https://mxgit.ovh/mikx/mxwcore-wotlk-playerbots");
log(" Based on AzerothCore (azerothcore.org) ");
log("<Ctrl-C> to stop.\n");
log(" █████╗ ███████╗███████╗██████╗ ██████╗ ████████╗██╗ ██╗");
log(" ██╔══██╗╚══███╔╝██╔════╝██╔══██╗██╔═══██╗╚══██╔══╝██║ ██║");
log(" ███████║ ███╔╝ █████╗ ██████╔╝██║ ██║ ██║ ███████║");
log(" ██╔══██║ ███╔╝ ██╔══╝ ██╔══██╗██║ ██║ ██║ ██╔══██║");
log(" ██║ ██║███████╗███████╗██║ ██║╚██████╔╝ ██║ ██║ ██║");
log(" ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝");
log(" ██████╗ ██████╗ ██████╗ ███████╗");
log(" ██╔════╝██╔═══██╗██╔══██╗██╔════╝");
log(" ██║ ██║ ██║██████╔╝█████╗");
log(" ██║ ██║ ██║██╔══██╗██╔══╝");
log(" ╚██████╗╚██████╔╝██║ ██║███████╗");
log(" ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝\n");
log(" AzerothCore 3.3.5a - www.azerothcore.org\n");
if (logExtraInfo)
{

View File

@ -264,7 +264,7 @@ void FollowerAI::MovementInform(uint32 motionType, uint32 pointId)
}
}
void FollowerAI::StartFollow(Player* player, uint32 factionForFollower, const Quest* quest)
void FollowerAI::StartFollow(Player* player, uint32 factionForFollower, const Quest* quest, bool inheritWalkState, bool inheritSpeed)
{
if (me->GetVictim())
{
@ -297,7 +297,7 @@ void FollowerAI::StartFollow(Player* player, uint32 factionForFollower, const Qu
AddFollowState(STATE_FOLLOW_INPROGRESS);
me->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
me->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE, inheritWalkState, inheritSpeed);
LOG_DEBUG("scripts.ai", "FollowerAI start follow {} ({})", player->GetName(), m_uiLeaderGUID.ToString());
}

View File

@ -55,7 +55,7 @@ public:
void UpdateAI(uint32) override; //the "internal" update, calls UpdateFollowerAI()
virtual void UpdateFollowerAI(uint32); //used when it's needed to add code in update (abilities, scripted events, etc)
void StartFollow(Player* player, uint32 factionForFollower = 0, const Quest* quest = nullptr);
void StartFollow(Player* player, uint32 factionForFollower = 0, const Quest* quest = nullptr, bool inheritWalkState = true, bool inheritSpeed = true);
void SetFollowPaused(bool bPaused); //if special event require follow mode to hold/resume during the follow
void SetFollowComplete(bool bWithEndEvent = false);

View File

@ -154,25 +154,26 @@ void CalendarMgr::AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite
}
}
void CalendarMgr::RemoveEvent(uint64 eventId, ObjectGuid remover)
CalendarEventStore::iterator CalendarMgr::RemoveEvent(uint64 eventId, ObjectGuid remover)
{
CalendarEvent* calendarEvent = GetEvent(eventId);
CalendarEventStore::iterator current;
CalendarEvent* calendarEvent = GetEvent(eventId, &current);
if (!calendarEvent)
{
SendCalendarCommandResult(remover, CALENDAR_ERROR_EVENT_INVALID);
return;
return _events.end();
}
RemoveEvent(calendarEvent, remover);
CalendarEventStore::const_iterator constItr(current);
return RemoveEvent(calendarEvent, remover, &constItr);
}
void CalendarMgr::RemoveEvent(CalendarEvent* calendarEvent, ObjectGuid remover)
{
CalendarEventStore::iterator CalendarMgr::RemoveEvent(CalendarEvent* calendarEvent, ObjectGuid remover, CalendarEventStore::const_iterator* currIt) {
if (!calendarEvent)
{
SendCalendarCommandResult(remover, CALENDAR_ERROR_EVENT_INVALID);
return;
return _events.end();
}
SendCalendarEventRemovedAlert(*calendarEvent);
@ -204,9 +205,20 @@ void CalendarMgr::RemoveEvent(CalendarEvent* calendarEvent, ObjectGuid remover)
trans->Append(stmt);
CharacterDatabase.CommitTransaction(trans);
_events.erase(calendarEvent);
if (currIt)
{
delete calendarEvent;
return _events.erase(*currIt);
}
if (auto it = _events.find(calendarEvent); it != _events.end())
{
delete calendarEvent;
return _events.erase(it);
}
delete calendarEvent;
return;
return _events.end();
}
void CalendarMgr::RemoveInvite(uint64 inviteId, uint64 eventId, ObjectGuid /*remover*/)
@ -277,13 +289,12 @@ void CalendarMgr::RemoveAllPlayerEventsAndInvites(ObjectGuid guid)
{
for (CalendarEventStore::const_iterator itr = _events.begin(); itr != _events.end();)
{
CalendarEvent* event = *itr;
++itr;
if (event->GetCreatorGUID() == guid)
if (CalendarEvent* event = *itr; event->GetCreatorGUID() == guid)
{
RemoveEvent(event, ObjectGuid::Empty);
itr = RemoveEvent(event, ObjectGuid::Empty, &itr);
continue;
}
++itr;
}
CalendarInviteStore playerInvites = GetPlayerInvites(guid);
@ -293,22 +304,33 @@ void CalendarMgr::RemoveAllPlayerEventsAndInvites(ObjectGuid guid)
void CalendarMgr::RemovePlayerGuildEventsAndSignups(ObjectGuid guid, uint32 guildId)
{
for (CalendarEventStore::const_iterator itr = _events.begin(); itr != _events.end(); ++itr)
for (CalendarEventStore::const_iterator itr = _events.begin(); itr != _events.end();)
{
if ((*itr)->GetCreatorGUID() == guid && ((*itr)->IsGuildEvent() || (*itr)->IsGuildAnnouncement()))
RemoveEvent((*itr)->GetEventId(), guid);
{
itr = RemoveEvent((*itr)->GetEventId(), guid);
continue;
}
++itr;
}
CalendarInviteStore playerInvites = GetPlayerInvites(guid);
for (CalendarInviteStore::const_iterator itr = playerInvites.begin(); itr != playerInvites.end(); ++itr)
if (CalendarEvent* calendarEvent = GetEvent((*itr)->GetEventId()))
if (CalendarEvent* calendarEvent = GetEvent((*itr)->GetEventId(), nullptr))
if (calendarEvent->IsGuildEvent() && calendarEvent->GetGuildId() == guildId)
RemoveInvite((*itr)->GetInviteId(), (*itr)->GetEventId(), guid);
}
CalendarEvent* CalendarMgr::GetEvent(uint64 eventId)
CalendarEvent* CalendarMgr::GetEvent(uint64 eventId, CalendarEventStore::iterator* it)
{
for (CalendarEventStore::iterator itr = _events.begin(); itr != _events.end(); ++itr)
if ((*itr)->GetEventId() == eventId)
{
if (it)
*it = itr;
return *itr;
}
return nullptr;
}
@ -366,10 +388,12 @@ void CalendarMgr::DeleteOldEvents()
for (CalendarEventStore::const_iterator itr = _events.begin(); itr != _events.end();)
{
CalendarEvent* event = *itr;
if (CalendarEvent* event = *itr; event->GetEventTime() < oldEventsTime)
{
itr = RemoveEvent(event, ObjectGuid::Empty, &itr);
continue;
}
++itr;
if (event->GetEventTime() < oldEventsTime)
RemoveEvent(event, ObjectGuid::Empty);
}
}

View File

@ -293,7 +293,7 @@ public:
void LoadFromDB();
CalendarEvent* GetEvent(uint64 eventId);
CalendarEvent* GetEvent(uint64 eventId, CalendarEventStore::iterator* it = nullptr);
CalendarEventStore const& GetEvents() const { return _events; }
CalendarEventStore GetEventsCreatedBy(ObjectGuid guid, bool includeGuildEvents = false);
CalendarEventStore GetPlayerEvents(ObjectGuid guid);
@ -314,8 +314,8 @@ public:
uint32 GetPlayerNumPending(ObjectGuid guid);
void AddEvent(CalendarEvent* calendarEvent, CalendarSendEventType sendType);
void RemoveEvent(uint64 eventId, ObjectGuid remover);
void RemoveEvent(CalendarEvent* calendarEvent, ObjectGuid remover);
CalendarEventStore::iterator RemoveEvent(uint64 eventId, ObjectGuid remover);
CalendarEventStore::iterator RemoveEvent(CalendarEvent* calendarEvent, ObjectGuid remover, CalendarEventStore::const_iterator* currIt = nullptr);
void UpdateEvent(CalendarEvent* calendarEvent);
void AddInvite(CalendarEvent* calendarEvent, CalendarInvite* invite, CharacterDatabaseTransaction trans = nullptr);

View File

@ -2476,6 +2476,9 @@ void Player::GiveLevel(uint8 level)
if (level == oldLevel)
return;
if (!sScriptMgr->OnPlayerCanGiveLevel(this, level))
return;
if (Guild* guild = GetGuild())
guild->UpdateMemberData(this, GUILD_MEMBER_DATA_LEVEL, level);

View File

@ -3928,7 +3928,7 @@ void Unit::_UpdateAutoRepeatSpell()
static uint32 const HUNTER_AUTOSHOOT = 75;
// Check "realtime" interrupts
if ((IsPlayer() && ToPlayer()->isMoving()) || IsNonMeleeSpellCast(false, false, true, spellProto->Id == HUNTER_AUTOSHOOT))
if ((IsPlayer() && ToPlayer()->isMoving() && spellProto->Id != HUNTER_AUTOSHOOT) || IsNonMeleeSpellCast(false, false, true, spellProto->Id == HUNTER_AUTOSHOOT))
{
// cancel wand shoot
if (spellProto->Id != HUNTER_AUTOSHOOT)
@ -3937,7 +3937,8 @@ void Unit::_UpdateAutoRepeatSpell()
return;
}
if (m_AutoRepeatFirstCast && getAttackTimer(RANGED_ATTACK) < 500)
// Apply delay (Hunter's autoshoot not affected)
if (m_AutoRepeatFirstCast && getAttackTimer(RANGED_ATTACK) < 500 && spellProto->Id != HUNTER_AUTOSHOOT)
{
setAttackTimer(RANGED_ATTACK, 500);
}
@ -8412,7 +8413,15 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
if (!procSpell || !IsPlayer() || !victim)
return false;
uint32 spell = procSpell->SpellFamilyFlags[0] & 0x2 ? 45297 : 45284;
uint32 spell = 45284;
// chain lightning only procs 1/3 of the time
if (procSpell->SpellFamilyFlags[0] & 0x2)
{
if (!roll_chance_i(33))
return false;
spell = 45297;
}
if (procEx & PROC_EX_CRITICAL_HIT)
damage /= 2;

View File

@ -10297,116 +10297,3 @@ uint32 ObjectMgr::GetQuestMoneyReward(uint8 level, uint32 questMoneyDifficulty)
return 0;
}
void ObjectMgr::SendServerMail(Player* player, uint32 id, uint32 reqLevel, uint32 reqPlayTime, uint32 rewardMoneyA, uint32 rewardMoneyH, uint32 rewardItemA, uint32 rewardItemCountA, uint32 rewardItemH, uint32 rewardItemCountH, std::string subject, std::string body, uint8 active) const
{
if (active)
{
if (player->GetLevel() < reqLevel)
return;
if (player->GetTotalPlayedTime() < reqPlayTime)
return;
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
MailSender sender(MAIL_NORMAL, player->GetGUID().GetCounter(), MAIL_STATIONERY_GM);
MailDraft draft(subject, body);
draft.AddMoney(player->GetTeamId() == TEAM_ALLIANCE ? rewardMoneyA : rewardMoneyH);
if (Item* mailItem = Item::CreateItem(player->GetTeamId() == TEAM_ALLIANCE ? rewardItemA : rewardItemH, player->GetTeamId() == TEAM_ALLIANCE ? rewardItemCountA : rewardItemCountH))
{
mailItem->SaveToDB(trans);
draft.AddItem(mailItem);
}
draft.SendMailTo(trans, MailReceiver(player), sender);
CharacterDatabase.CommitTransaction(trans);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_MAIL_SERVER_CHARACTER);
stmt->SetData(0, player->GetGUID().GetCounter());
stmt->SetData(1, id);
CharacterDatabase.Execute(stmt);
LOG_DEBUG("entities.player", "ObjectMgr::SendServerMail() Sent mail id {} to {}", id, player->GetGUID().ToString());
}
}
void ObjectMgr::LoadMailServerTemplates()
{
uint32 oldMSTime = getMSTime();
_serverMailStore.clear(); // for reload case
// 0 1 2 3 4 5 6 7 8 9 10 11
QueryResult result = CharacterDatabase.Query("SELECT `id`, `reqLevel`, `reqPlayTime`, `moneyA`, `moneyH`, `itemA`, `itemCountA`, `itemH`,`itemCountH`, `subject`, `body`, `active` FROM `mail_server_template`");
if (!result)
{
LOG_INFO("sql.sql", ">> Loaded 0 server mail rewards. DB table `mail_server_template` is empty.");
LOG_INFO("server.loading", " ");
return;
}
_serverMailStore.rehash(result->GetRowCount());
do
{
Field* fields = result->Fetch();
uint32 id = fields[0].Get<uint32>();
ServerMail& servMail = _serverMailStore[id];
servMail.id = id;
servMail.reqLevel = fields[1].Get<uint8>();
servMail.reqPlayTime = fields[2].Get<uint32>();
servMail.moneyA = fields[3].Get<uint32>();
servMail.moneyH = fields[4].Get<uint32>();
servMail.itemA = fields[5].Get<uint32>();
servMail.itemCountA = fields[6].Get<uint32>();
servMail.itemH = fields[7].Get<uint32>();
servMail.itemCountH = fields[8].Get<uint32>();
servMail.subject = fields[9].Get<std::string>();
servMail.body = fields[10].Get<std::string>();
servMail.active = fields[11].Get<uint8>();
if (servMail.reqLevel > sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has reqLevel {} but max level is {} for id {}, skipped.", servMail.reqLevel, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL), servMail.id);
return;
}
if (servMail.moneyA > MAX_MONEY_AMOUNT || servMail.moneyH > MAX_MONEY_AMOUNT)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has moneyA {} or moneyH {} larger than MAX_MONEY_AMOUNT {} for id {}, skipped.", servMail.moneyA, servMail.moneyH, MAX_MONEY_AMOUNT, servMail.id);
return;
}
ItemTemplate const* itemTemplateA = sObjectMgr->GetItemTemplate(servMail.itemA);
if (!itemTemplateA && servMail.itemA)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has invalid item in itemA {} for id {}, skipped.", servMail.itemA, servMail.id);
return;
}
ItemTemplate const* itemTemplateH = sObjectMgr->GetItemTemplate(servMail.itemH);
if (!itemTemplateH && servMail.itemH)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has invalid item in itemH {} for id {}, skipped.", servMail.itemH, servMail.id);
return;
}
if (!servMail.itemA && servMail.itemCountA)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has itemCountA {} with no ItemA, set to 0", servMail.itemCountA);
servMail.itemCountA = 0;
}
if (!servMail.itemH && servMail.itemCountH)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has itemCountH {} with no ItemH, set to 0", servMail.itemCountH);
servMail.itemCountH = 0;
}
} while (result->NextRow());
LOG_INFO("server.loading", ">> Loaded {} Mail Server Template in {} ms", _serverMailStore.size(), GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}

View File

@ -665,7 +665,6 @@ typedef std::map<std::pair<uint32, uint8>, QuestGreeting> QuestGreetingContainer
typedef std::unordered_map<uint32, VendorItemData> CacheVendorItemContainer;
typedef std::unordered_map<uint32, TrainerSpellData> CacheTrainerSpellContainer;
typedef std::unordered_map<uint32, ServerMail> ServerMailContainer;
typedef std::vector<uint32> CreatureCustomIDsContainer;
@ -1056,7 +1055,6 @@ public:
void LoadInstanceTemplate();
void LoadInstanceEncounters();
void LoadMailLevelRewards();
void LoadMailServerTemplates();
void LoadVehicleTemplateAccessories();
void LoadVehicleAccessories();
void LoadVehicleSeatAddon();
@ -1189,8 +1187,6 @@ public:
return nullptr;
}
[[nodiscard]] ServerMailContainer const& GetAllServerMailStore() const { return _serverMailStore; }
[[nodiscard]] BroadcastText const* GetBroadcastText(uint32 id) const
{
BroadcastTextContainer::const_iterator itr = _broadcastTextStore.find(id);
@ -1450,7 +1446,6 @@ public:
}
[[nodiscard]] uint32 GetQuestMoneyReward(uint8 level, uint32 questMoneyDifficulty) const;
void SendServerMail(Player* player, uint32 id, uint32 reqLevel, uint32 reqPlayTime, uint32 rewardMoneyA, uint32 rewardMoneyH, uint32 rewardItemA, uint32 rewardItemCountA, uint32 rewardItemH, uint32 rewardItemCountH, std::string subject, std::string body, uint8 active) const;
private:
// first free id for selected id type
uint32 _auctionId; // pussywizard: accessed by a single thread
@ -1615,8 +1610,6 @@ private:
CacheVendorItemContainer _cacheVendorItemStore;
CacheTrainerSpellContainer _cacheTrainerSpellStore;
ServerMailContainer _serverMailStore;
std::set<uint32> _difficultyEntries[MAX_DIFFICULTY - 1]; // already loaded difficulty 1 value in creatures, used in CheckCreatureTemplate
std::set<uint32> _hasDifficultyEntries[MAX_DIFFICULTY - 1]; // already loaded creatures with difficulty 1 values, used in CheckCreatureTemplate

View File

@ -1116,6 +1116,8 @@ void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject)
if (member->IsAtLootRewardDistance(pLootedObject))
{
r->totalPlayersRolling++;
RollVote vote = NOT_EMITED_YET;
if (!CanRollOnItem(*i, member, loot))
{

View File

@ -1036,6 +1036,8 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid, uint32 vendorEntry)
{
LOG_DEBUG("network", "WORLD: Sent SMSG_LIST_INVENTORY");
sScriptMgr->OnPlayerSendListInventory(GetPlayer(), vendorGuid, vendorEntry);
Creature* vendor = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR);
if (!vendor)
{

View File

@ -210,21 +210,4 @@ struct Mail
[[nodiscard]] bool IsReturnedMail() const { return checked & MAIL_CHECK_MASK_RETURNED; }
};
struct ServerMail
{
ServerMail() = default;
uint32 id{ 0 };
uint8 reqLevel{ 0 };
uint32 reqPlayTime{ 0 };
uint32 moneyA{ 0 };
uint32 moneyH{ 0 };
uint32 itemA{ 0 };
uint32 itemCountA{ 0 };
uint32 itemH{ 0 };
uint32 itemCountH{ 0 };
std::string subject;
std::string body;
uint8 active{ 0 };
};
#endif

View File

@ -0,0 +1,351 @@
/*
* 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 <http://www.gnu.org/licenses/>.
*/
#include "ServerMailMgr.h"
#include "AchievementMgr.h"
#include "DatabaseEnv.h"
#include "Item.h"
#include "Log.h"
#include "ObjectMgr.h"
#include "Player.h"
#include "QuestDef.h"
#include "SharedDefines.h"
#include "Timer.h"
ServerMailMgr* ServerMailMgr::instance()
{
static ServerMailMgr instance;
return &instance;
}
void ServerMailMgr::LoadMailServerTemplates()
{
uint32 oldMSTime = getMSTime();
_serverMailStore.clear(); // for reload case
// 0 1 2 3 4 5
QueryResult result = CharacterDatabase.Query("SELECT `id`, `moneyA`, `moneyH`, `subject`, `body`, `active` FROM `mail_server_template`");
if (!result)
{
LOG_INFO("server.loading", ">> Loaded 0 server mail rewards. DB table `mail_server_template` is empty.");
LOG_INFO("server.loading", " ");
return;
}
_serverMailStore.reserve(result->GetRowCount());
do
{
Field* fields = result->Fetch();
uint32 id = fields[0].Get<uint32>();
ServerMail& servMail = _serverMailStore[id];
servMail.id = id;
servMail.moneyA = fields[1].Get<uint32>();
servMail.moneyH = fields[2].Get<uint32>();
servMail.subject = fields[3].Get<std::string>();
servMail.body = fields[4].Get<std::string>();
servMail.active = fields[5].Get<uint8>();
// Skip non-activated entries
if (!servMail.active)
continue;
if (servMail.moneyA > MAX_MONEY_AMOUNT || servMail.moneyH > MAX_MONEY_AMOUNT)
{
LOG_ERROR("sql.sql", "Table `mail_server_template` has moneyA {} or moneyH {} larger than MAX_MONEY_AMOUNT {} for id {}, skipped.", servMail.moneyA, servMail.moneyH, MAX_MONEY_AMOUNT, servMail.id);
continue;
}
} while (result->NextRow());
LoadMailServerTemplatesItems();
LoadMailServerTemplatesConditions();
LOG_INFO("server.loading", ">> Loaded {} Mail Server definitions in {} ms", _serverMailStore.size(), GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
void ServerMailMgr::LoadMailServerTemplatesItems()
{
// 0 1 2 3
QueryResult result = CharacterDatabase.Query("SELECT `templateID`, `faction`, `item`, `itemCount` FROM `mail_server_template_items`");
if (!result)
{
LOG_WARN("server.loading", ">> Loaded 0 server mail items. DB table `mail_server_template_items` is empty.");
return;
}
do
{
Field* fields = result->Fetch();
uint32 templateID = fields[0].Get<uint32>();
std::string_view faction = fields[1].Get<std::string_view>();
uint32 item = fields[2].Get<uint32>();
uint32 itemCount = fields[3].Get<uint32>();
if (_serverMailStore.find(templateID) == _serverMailStore.end())
{
LOG_ERROR("sql.sql", "Table `mail_server_template_items` has an invalid templateID {}, skipped.", templateID);
continue;
}
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(item);
if (!itemTemplate)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_items` has an invalid item {} for templateID {}, skipped.", item, templateID);
continue;
}
if (!itemCount)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_items` has itemCount 0 for item {}, skipped.", item);
continue;
}
uint32 stackable = itemTemplate->Stackable;
if (itemCount > stackable)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_items` has itemCount {} exceeding item_template.Stackable {} for item {}, skipped.", itemCount, stackable, item);
continue;
}
uint32 maxCount = itemTemplate->MaxCount;
if (maxCount && itemCount > maxCount)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_items` has itemCount {} exceeding item_template.MaxCount {} for item {}, skipped", itemCount, maxCount, item);
continue;
}
ServerMailItems mailItem;
mailItem.item = item;
mailItem.itemCount = itemCount;
if (faction == "Alliance")
_serverMailStore[templateID].itemsA.push_back(mailItem);
else if (faction == "Horde")
_serverMailStore[templateID].itemsH.push_back(mailItem);
else [[unlikely]]
{
LOG_ERROR("sql.sql", "Table `mail_server_template_items` has invalid faction value '{}' for templateID {}, skipped.", faction, templateID);
continue;
}
} while (result->NextRow());
}
void ServerMailMgr::LoadMailServerTemplatesConditions()
{
// 0 1 2 3
QueryResult result = CharacterDatabase.Query("SELECT `templateID`, `conditionType`, `conditionValue`, `conditionState` FROM `mail_server_template_conditions`");
if (!result)
{
LOG_WARN("server.loading", ">> Loaded 0 server mail conditions. DB table `mail_server_template_conditions` is empty.");
return;
}
do
{
Field* fields = result->Fetch();
uint32 templateID = fields[0].Get<uint32>();
std::string_view conditionTypeStr = fields[1].Get<std::string_view>();
uint32 conditionValue = fields[2].Get<uint32>();
uint32 conditionState = fields[3].Get<uint32>();
if (_serverMailStore.find(templateID) == _serverMailStore.end())
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has an invalid templateID {}, skipped.", templateID);
continue;
}
// Get conditiontype from ServerMailConditionTypePairs
ServerMailConditionType conditionType;
conditionType = GetServerMailConditionType(conditionTypeStr);
if (conditionType == ServerMailConditionType::Invalid) [[unlikely]]
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has unknown conditionType '{}', skipped.", conditionTypeStr);
continue;
}
if (conditionState && !ConditionTypeUsesConditionState(conditionType))
LOG_WARN("sql.sql", "Table `mail_server_template_conditions` has conditionState value ({}) for conditionType ({}) which does not use conditionState.", conditionState, conditionTypeStr);
switch (conditionType)
{
case ServerMailConditionType::Level:
if (conditionValue > sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has conditionType 'Level' with invalid conditionValue ({}), max level is ({}) for templateID {}, skipped.", conditionValue, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL), templateID);
continue;
}
break;
case ServerMailConditionType::Quest:
{
Quest const* qInfo = sObjectMgr->GetQuestTemplate(conditionValue);
if (!qInfo)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has conditionType 'Quest' with invalid quest in conditionValue ({}) for templateID {}, skipped.", conditionValue, templateID);
continue;
}
if (conditionState < QUEST_STATUS_NONE || conditionState >= MAX_QUEST_STATUS ||
/*2 and 4 not defined and should not be used*/ conditionState == 2 || conditionState == 4)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has conditionType 'Quest' with invalid conditionState ({}) for templateID {}, skipped.", conditionState, templateID);
continue;
}
break;
}
case ServerMailConditionType::Achievement:
{
AchievementEntry const* achievement = sAchievementStore.LookupEntry(conditionValue);
if (!achievement)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has conditionType 'Achievement' with invalid achievement in conditionValue ({}) for templateID {}, skipped.", conditionValue, templateID);
continue;
}
break;
}
case ServerMailConditionType::Reputation:
{
FactionEntry const* faction = sFactionStore.LookupEntry(conditionValue);
if (!faction)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has conditionType 'Reputation' with invalid faction in conditionValue ({}) for templateID {}, skipped.", conditionValue, templateID);
continue;
}
if (conditionState < REP_HATED || conditionState > REP_EXALTED)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has conditionType 'Reputation' with invalid conditionState ({}) for templateID {}, skipped.", conditionState, templateID);
continue;
}
break;
}
case ServerMailConditionType::Faction:
if (conditionValue < TEAM_ALLIANCE || conditionValue > TEAM_HORDE)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has conditionType 'Faction' with invalid conditionValue ({}) for templateID {}, skipped.", conditionState, templateID);
continue;
}
break;
case ServerMailConditionType::Race:
if (conditionValue & ~RACEMASK_ALL_PLAYABLE)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has conditionType 'Race' with invalid conditionValue ({}) for templateID {}, skipped.", conditionState, templateID);
continue;
}
break;
case ServerMailConditionType::Class:
if (conditionValue & ~CLASSMASK_ALL_PLAYABLE)
{
LOG_ERROR("sql.sql", "Table `mail_server_template_conditions` has conditionType 'Class' with invalid conditionValue ({}) for templateID {}, skipped.", conditionState, templateID);
continue;
}
break;
default:
break;
}
ServerMailCondition condition;
condition.type = conditionType;
condition.value = conditionValue;
condition.state = conditionState;
_serverMailStore[templateID].conditions.push_back(condition);
} while (result->NextRow());
}
void ServerMailMgr::SendServerMail(Player* player, uint32 id, uint32 money,
std::vector<ServerMailItems> const& items,
std::vector<ServerMailCondition> const& conditions,
std::string const& subject, std::string const& body) const
{
for (ServerMailCondition const& condition : conditions)
if (!condition.CheckCondition(player))
return;
CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
MailSender sender(MAIL_NORMAL, player->GetGUID().GetCounter(), MAIL_STATIONERY_GM);
MailDraft draft(subject, body);
draft.AddMoney(money);
// Loop through all items and attach them to the mail
for (auto const& mailItem : items)
if (Item* newItem = Item::CreateItem(mailItem.item, mailItem.itemCount))
{
newItem->SaveToDB(trans);
draft.AddItem(newItem);
}
draft.SendMailTo(trans, MailReceiver(player), sender);
CharacterDatabase.CommitTransaction(trans);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_MAIL_SERVER_CHARACTER);
stmt->SetData(0, player->GetGUID().GetCounter());
stmt->SetData(1, id);
CharacterDatabase.Execute(stmt);
}
ServerMailConditionType ServerMailMgr::GetServerMailConditionType(std::string_view conditionTypeStr) const
{
for (auto const& pair : ServerMailConditionTypePairs)
if (pair.first == conditionTypeStr)
return pair.second;
return ServerMailConditionType::Invalid;
}
bool ServerMailMgr::ConditionTypeUsesConditionState(ServerMailConditionType type) const
{
switch (type)
{
case ServerMailConditionType::Quest:
case ServerMailConditionType::Reputation:
return true;
default:
return false;
}
}
bool ServerMailCondition::CheckCondition(Player* player) const
{
switch (type)
{
case ServerMailConditionType::Level:
return player->GetLevel() >= value;
case ServerMailConditionType::PlayTime:
return player->GetTotalPlayedTime() >= value;
case ServerMailConditionType::Quest:
return player->GetQuestStatus(value) == state;
case ServerMailConditionType::Achievement:
return player->HasAchieved(value);
case ServerMailConditionType::Reputation:
return player->GetReputationRank(value) >= state;
case ServerMailConditionType::Faction:
return player->GetTeamId() == value;
case ServerMailConditionType::Race:
return (player->getRaceMask() & value) != 0;
case ServerMailConditionType::Class:
return (player->getClassMask() & value) != 0;
default:
[[unlikely]] LOG_ERROR("server.mail", "Unknown server mail condition type '{}'", static_cast<uint32>(type));
return false;
}
}

View File

@ -0,0 +1,231 @@
/*
* 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 <http://www.gnu.org/licenses/>.
*/
/**
* @file ServerMailMgr.h
* @brief Manages the ServerMail operations, including template loading, condition checking, and mail delivery.
*
* This class handles the loading of server mail templates, associated items, and conditions from the database.
* It also provides functionality to check player eligibility for receiving server mails based on configured conditions.
*
* Key features:
* - Supports multi-item mails via `mail_server_template_items`
* - Supports flexible mail conditions (level, playtime, quest, achievement) via `mail_server_template_conditions`
* - Ensures all related data is loaded and validated on startup
*/
#ifndef _SERVERMAILMGR_H
#define _SERVERMAILMGR_H
#include "Define.h"
#include <string>
#include <unordered_map>
#include <vector>
class Player;
/**
* @enum ServerMailConditionType
* @brief Represents the type of conditions that can be applied to server mail.
*/
enum class ServerMailConditionType : uint8
{
Invalid = 0, ///< Internal use, not used in DB.
Level = 1, ///< Requires the player to be at least a specific level.
PlayTime = 2, ///< Requires the player to have played for a minimum amount of time (in milliseconds).
Quest = 3, ///< Requires the player to have completed a specific quest.
Achievement = 4, ///< Requires the player to have earned a specific achievement.
Reputation = 5, ///< Requires the player to have earned reputation with a specific faction.
Faction = 6, ///< Requires the player to be a part of a specific faction. Horde/Alliance.
Race = 7, ///< Requires the player to be a specific race.
Class = 8, ///< Requires the player to be a specific class.
};
/**
* @brief Assign string condition to corresponding @ref ServerMailConditionType enum value
*/
constexpr std::pair<std::string_view, ServerMailConditionType> ServerMailConditionTypePairs[] =
{
{ "Level", ServerMailConditionType::Level },
{ "PlayTime", ServerMailConditionType::PlayTime },
{ "Quest", ServerMailConditionType::Quest },
{ "Achievement", ServerMailConditionType::Achievement },
{ "Reputation", ServerMailConditionType::Reputation },
{ "Faction", ServerMailConditionType::Faction },
{ "Race", ServerMailConditionType::Race },
{ "Class", ServerMailConditionType::Class }
};
/**
* @struct ServerMailCondition
* @brief Represents a condition that must be met for a player to receive a server mail.
*
* Each condition has a type (see @ref ServerMailConditionType) and a value associated with the type.
* For example, for a level condition, the value represents the required player level.
*
* Some condition also have a state associated with the value.
* For example, for a reputation condition, the state represents the current reputation state, like Exalted.
*
* Conditions are attached to server mail templates and are evaluated when players log in.
*/
struct ServerMailCondition
{
ServerMailCondition() = default;
ServerMailConditionType type = ServerMailConditionType::Invalid;
uint32 value{ 0 };
uint32 state{ 0 };
/**
* @brief Checks if a player meets this condition.
*
* Evaluates the condition type and compares the player's attributes to the required value.
*
* @param player The player to check.
* @return True if the player meets the condition, otherwise false.
*/
bool CheckCondition(Player* player) const;
};
/**
* @struct ServerMailItems
* @brief Represents an item reward associated with a server mail template.
*
* Server mail templates can have multiple item rewards, stored separately for each faction.
* This struct tracks the item ID and item count.
*/
struct ServerMailItems
{
ServerMailItems() = default;
uint32 item{ 0 };
uint32 itemCount{ 0 };
};
/**
* @struct ServerMail
* @brief Represents a server mail template, including rewards, conditions, and metadata.
*
* This structure defines a mail template that can be sent to players upon login,
* provided they meet the associated conditions.
*/
struct ServerMail
{
ServerMail() = default;
uint32 id{ 0 };
uint32 moneyA{ 0 };
uint32 moneyH{ 0 };
std::string subject;
std::string body;
uint8 active{ 0 };
// Conditions from mail_server_template_conditions
std::vector<ServerMailCondition> conditions;
// Items from mail_server_template_items
std::vector<ServerMailItems> itemsA;
std::vector<ServerMailItems> itemsH;
};
typedef std::unordered_map<uint32, ServerMail> ServerMailContainer;
class ServerMailMgr
{
private:
ServerMailMgr() = default;
~ServerMailMgr() = default;
public:
static ServerMailMgr* instance();
/**
* @brief Loads all server mail templates from the database into memory.
*
* Queries the `mail_server_template` table and loads all rows into memory.
* This method is intended to be called during server startup.
*/
void LoadMailServerTemplates();
/**
* @brief Loads all items associated with server mail templates.
*
* Queries the `mail_server_template_items` table and loads all items into memory,
* linking them to their corresponding templates by template ID.
* This method is intended to be called during server startup.
*/
void LoadMailServerTemplatesItems();
/**
* @brief Loads all conditions associated with server mail templates.
*
* Queries the `mail_server_template_conditions` table and loads all conditions into memory,
* linking them to their corresponding templates by template ID.
* This method is intended to be called during server startup.
*/
void LoadMailServerTemplatesConditions();
/**
* @brief Convert DB value of conditionType to ServerMailConditionType.
*
* Lookup the corresponding SeverMailConditionType enum for the provided
* string by DB. If the string is not found we return internal default value
* ServerMailConditionType::Invalid
*
* @param conditionTypeStr string value from DB of conditionType
* @return ServerMailConditionType The corresponding value (see @ref ServerMailConditionType) or default to ServerMailConditionType::Invalid
*/
ServerMailConditionType GetServerMailConditionType(std::string_view conditionTypeStr) const;
/**
* @brief Check if ConditionType should use ConditionState
*
* @return True if the ConditionType is allowed to use ConditionState, otherwise False.
*/
bool ConditionTypeUsesConditionState(ServerMailConditionType type) const;
/**
* @brief Sends a server mail to a player if the template is active and the player is eligible.
*
* This method handles the creation of the mail, adding money and items, and saving the mail to the database.
* It also records that the player received the mail to prevent duplicate delivery.
*
* @param player The recipient player.
* @param id The template ID.
* @param money Money reward.
* @param items List of items to include in the mail.
* @param conditions List of the conditions for the mail.
* @param subject Mail subject.
* @param body Mail body.
* @param active Whether the mail template is active.
*/
void SendServerMail(Player* player, uint32 id, uint32 money, std::vector<ServerMailItems> const& items, std::vector<ServerMailCondition> const& conditions, std::string const& subject, std::string const& body) const;
/**
* @brief Retrieves the entire server mail store.
*
* This function returns a constant reference to the internal
* `_serverMailStore` container, which holds all server mail data.
*
* @return A constant reference to the `ServerMailContainer` containing all stored server mail.
*/
[[nodiscard]] ServerMailContainer const& GetAllServerMailStore() const { return _serverMailStore; }
private:
ServerMailContainer _serverMailStore;
};
#define sServerMailMgr ServerMailMgr::instance()
#endif // _SERVERMAILMGR_H

View File

@ -277,7 +277,7 @@ void MotionMaster::MoveTargetedHome(bool walk /*= false*/)
if (target)
{
LOG_DEBUG("movement.motionmaster", "Following {} ({})", target->IsPlayer() ? "player" : "creature", target->GetGUID().ToString());
Mutate(new FollowMovementGenerator<Creature>(target, PET_FOLLOW_DIST, _owner->GetFollowAngle(),true), MOTION_SLOT_ACTIVE);
Mutate(new FollowMovementGenerator<Creature>(target, PET_FOLLOW_DIST, _owner->GetFollowAngle(), true, true), MOTION_SLOT_ACTIVE);
}
}
else
@ -406,7 +406,7 @@ void MotionMaster::MoveCircleTarget(Unit* target)
/**
* @brief The unit will follow this target. Doesn't work with UNIT_FLAG_DISABLE_MOVE
*/
void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlot slot, bool inheritWalkState)
void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlot slot, bool inheritWalkState, bool inheritSpeed)
{
// ignore movement request if target not exist
if (!target || target == _owner || _owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
@ -419,13 +419,13 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo
{
LOG_DEBUG("movement.motionmaster", "Player ({}) follow to {} ({})",
_owner->GetGUID().ToString(), target->IsPlayer() ? "player" : "creature", target->GetGUID().ToString());
Mutate(new FollowMovementGenerator<Player>(target, dist, angle, inheritWalkState), slot);
Mutate(new FollowMovementGenerator<Player>(target, dist, angle, inheritWalkState, inheritSpeed), slot);
}
else
{
LOG_DEBUG("movement.motionmaster", "Creature ({}) follow to {} ({})",
_owner->GetGUID().ToString(), target->IsPlayer() ? "player" : "creature", target->GetGUID().ToString());
Mutate(new FollowMovementGenerator<Creature>(target, dist, angle, inheritWalkState), slot);
Mutate(new FollowMovementGenerator<Creature>(target, dist, angle, inheritWalkState, inheritSpeed), slot);
}
}

View File

@ -201,7 +201,7 @@ public:
void MoveIdle();
void MoveTargetedHome(bool walk = false);
void MoveRandom(float wanderDistance = 0.0f);
void MoveFollow(Unit* target, float dist, float angle, MovementSlot slot = MOTION_SLOT_ACTIVE, bool inheritWalkState = true);
void MoveFollow(Unit* target, float dist, float angle, MovementSlot slot = MOTION_SLOT_ACTIVE, bool inheritWalkState = true, bool inheritSpeed = true);
void MoveChase(Unit* target, std::optional<ChaseRange> dist = {}, std::optional<ChaseAngle> angle = {});
void MoveChase(Unit* target, float dist, float angle) { MoveChase(target, ChaseRange(dist), ChaseAngle(angle)); }
void MoveChase(Unit* target, float dist) { MoveChase(target, ChaseRange(dist)); }

View File

@ -539,8 +539,9 @@ bool FollowMovementGenerator<T>::DoUpdate(T* owner, uint32 time_diff)
if (_inheritWalkState)
init.SetWalk(target->IsWalking() || target->movespline->isWalking());
if (Optional<float> velocity = GetVelocity(owner, target, i_path->GetActualEndPosition(), owner->IsGuardian()))
init.SetVelocity(*velocity);
if (_inheritSpeed)
if (Optional<float> velocity = GetVelocity(owner, target, i_path->GetActualEndPosition(), owner->IsGuardian()))
init.SetVelocity(*velocity);
init.Launch();
}

View File

@ -75,8 +75,8 @@ template<class T>
class FollowMovementGenerator : public MovementGeneratorMedium<T, FollowMovementGenerator<T>>, public TargetedMovementGeneratorBase
{
public:
FollowMovementGenerator(Unit* target, float range, ChaseAngle angle, bool inheritWalkState)
: TargetedMovementGeneratorBase(target), i_path(nullptr), i_recheckPredictedDistanceTimer(0), i_recheckPredictedDistance(false), _range(range), _angle(angle),_inheritWalkState(inheritWalkState) {}
FollowMovementGenerator(Unit* target, float range, ChaseAngle angle, bool inheritWalkState, bool inheritSpeed)
: TargetedMovementGeneratorBase(target), i_path(nullptr), i_recheckPredictedDistanceTimer(0), i_recheckPredictedDistance(false), _range(range), _angle(angle),_inheritWalkState(inheritWalkState), _inheritSpeed(inheritSpeed) {}
~FollowMovementGenerator() { }
MovementGeneratorType GetMovementGeneratorType() { return FOLLOW_MOTION_TYPE; }
@ -108,6 +108,7 @@ private:
float _range;
ChaseAngle _angle;
bool _inheritWalkState;
bool _inheritSpeed;
};
#endif

View File

@ -921,6 +921,16 @@ bool ScriptMgr::OnPlayerCanResurrect(Player* player)
CALL_ENABLED_BOOLEAN_HOOKS(PlayerScript, PLAYERHOOK_CAN_RESURRECT, !script->OnPlayerCanResurrect(player));
}
bool ScriptMgr::OnPlayerCanGiveLevel(Player* player, uint8 newLevel)
{
CALL_ENABLED_BOOLEAN_HOOKS(PlayerScript, PLAYERHOOK_ON_CAN_GIVE_LEVEL, !script->OnPlayerCanGiveLevel(player, newLevel));
}
void ScriptMgr::OnPlayerSendListInventory(Player* player, ObjectGuid vendorGuid, uint32& vendorEntry)
{
CALL_ENABLED_HOOKS(PlayerScript, PLAYERHOOK_ON_SEND_LIST_INVENTORY, script->OnPlayerSendListInventory(player, vendorGuid, vendorEntry));
}
PlayerScript::PlayerScript(const char* name, std::vector<uint16> enabledHooks)
: ScriptObject(name, PLAYERHOOK_END)
{

View File

@ -209,6 +209,8 @@ enum PlayerHook
PLAYERHOOK_ON_BEFORE_UPDATE_SKILL,
PLAYERHOOK_ON_UPDATE_SKILL,
PLAYERHOOK_CAN_RESURRECT,
PLAYERHOOK_ON_CAN_GIVE_LEVEL,
PLAYERHOOK_ON_SEND_LIST_INVENTORY,
PLAYERHOOK_END
};
@ -784,6 +786,25 @@ public:
* @return true if player is authorized to resurect
*/
virtual bool OnPlayerCanResurrect(Player* /*player*/) { return true; }
/**
* @brief This hook is called, to cancel the normal level up flow
*
* @param player Contains information about the Player
* @param newLevel The new level the player is about to be given
*
* @return true if player is allowed to gain the new level
*/
virtual bool OnPlayerCanGiveLevel(Player* /*player*/, uint8 /*newLevel*/) { return true; }
/**
* @brief This hook is called whenever a player interacts with a vendor, and is then shown the vendor list
*
* @param player Contains information about the Player
* @param vendorGuid Guid of the vendor player is interacting with
* @param vendorEntry Entry of the vendor player is interacting with
*/
virtual void OnPlayerSendListInventory(Player* /*player*/, ObjectGuid /*vendorGuid*/, uint32& /*vendorEntry*/) {}
};
#endif

View File

@ -484,6 +484,8 @@ public: /* PlayerScript */
void OnPlayerBeforeUpdateSkill(Player* player, uint32 skill_id, uint32& value, uint32 max, uint32 step);
void OnPlayerUpdateSkill(Player* player, uint32 skillId, uint32 value, uint32 max, uint32 step, uint32 newValue);
bool OnPlayerCanResurrect(Player* player);
bool OnPlayerCanGiveLevel(Player* player, uint8 newLevel);
void OnPlayerSendListInventory(Player* player, ObjectGuid vendorGuid, uint32& vendorEntry);
// Anti cheat
void AnticheatSetCanFlybyServer(Player* player, bool apply);

View File

@ -1431,7 +1431,16 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici
float destx = pos.GetPositionX() + distance * cos(pos.GetOrientation());
float desty = pos.GetPositionY() + distance * sin(pos.GetOrientation());
float ground = map->GetHeight(phasemask, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ());
// Added GROUND_HEIGHT_TOLERANCE to account for cases where, during a jump,
// the Z position may be slightly below the vmap ground level.
// Without this tolerance, a ray trace might incorrectly attempt to find ground
// beneath the actual surface.
//
// Example:
// actual vmap ground: -56.342392
// Z position: -56.347195
float searchGroundZPos = pos.GetPositionZ()+GROUND_HEIGHT_TOLERANCE;
float ground = map->GetHeight(phasemask, pos.GetPositionX(), pos.GetPositionY(), searchGroundZPos);
bool isCasterInWater = m_caster->IsInWater();
if (!m_caster->HasUnitMovementFlag(MOVEMENTFLAG_FALLING) || (pos.GetPositionZ() - ground < distance))

View File

@ -3678,12 +3678,6 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AttributesEx5 |= SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT;
});
//Crushing the Crown
ApplySpellFix({ 71024 }, [](SpellInfo* spellInfo)
{
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_DEST_DYNOBJ_NONE);
});
// Battle for the Undercity
ApplySpellFix({
59892 // Cyclone fall
@ -3984,13 +3978,6 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->Effects[EFFECT_0].BasePoints = -25;
});
// Focused Eyebeam Summon Trigger
ApplySpellFix({ 63342 }, [](SpellInfo* spellInfo)
{
spellInfo->MaxAffectedTargets = 1;
spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
});
// Eye of Kilrogg Passive (DND)
ApplySpellFix({ 2585 }, [](SpellInfo* spellInfo)
{

View File

@ -74,6 +74,7 @@
#include "PoolMgr.h"
#include "Realm.h"
#include "ScriptMgr.h"
#include "ServerMailMgr.h"
#include "SkillDiscovery.h"
#include "SkillExtraItems.h"
#include "SmartAI.h"
@ -1668,8 +1669,8 @@ void World::SetInitialWorldSettings()
LOG_INFO("server.loading", "Loading Player Level Dependent Mail Rewards...");
sObjectMgr->LoadMailLevelRewards();
LOG_INFO("server.loading", "Load Mail Server Template...");
sObjectMgr->LoadMailServerTemplates();
LOG_INFO("server.loading", "Load Mail Server definitions...");
sServerMailMgr->LoadMailServerTemplates();
// Loot tables
LoadLootTables();

View File

@ -38,6 +38,7 @@ EndScriptData */
#include "MotdMgr.h"
#include "ObjectMgr.h"
#include "ScriptMgr.h"
#include "ServerMailMgr.h"
#include "SkillDiscovery.h"
#include "SkillExtraItems.h"
#include "SmartAI.h"
@ -1196,7 +1197,7 @@ public:
static bool HandleReloadMailServerTemplateCommand(ChatHandler* handler)
{
LOG_INFO("server.loading", "Reloading `server_mail_template` table");
sObjectMgr->LoadMailServerTemplates();
sServerMailMgr->LoadMailServerTemplates();
handler->SendGlobalGMSysMessage("DB table `server_mail_template` reloaded.");
return true;
}

View File

@ -199,7 +199,7 @@ public:
return true;
}
static bool HandleGMTicketCompleteCommand(ChatHandler* handler, uint32 ticketId)
static bool HandleGMTicketCompleteCommand(ChatHandler* handler, uint32 ticketId, std::optional<std::string> response)
{
GmTicket* ticket = sTicketMgr->GetTicket(ticketId);
if (!ticket || ticket->IsClosed() || ticket->IsCompleted())
@ -217,9 +217,8 @@ public:
return true;
}
char* response = strtok(nullptr, "\n");
if (response)
ticket->AppendResponse(response);
ticket->AppendResponse(response.value());
if (Player* player2 = ticket->GetPlayer())
{

View File

@ -84,7 +84,7 @@ struct boss_brutallus : public BossAI
ScheduleTimedEvent(11s, [&] {
DoCastVictim(SPELL_METEOR_SLASH);
}, 10s);
}, 12s);
ScheduleTimedEvent(30s, [&] {
DoCastVictim(SPELL_STOMP);
@ -137,6 +137,7 @@ enum eMadrigosa
EVENT_MAD_6 = 6,
EVENT_MAD_7 = 7,
EVENT_MAD_8 = 8,
EVENT_MAD_8_1 = 800,
EVENT_MAD_9 = 9,
EVENT_MAD_10 = 10,
EVENT_MAD_11 = 11,
@ -166,7 +167,7 @@ enum eMadrigosa
SPELL_BRUTALLUS_CHARGE = 44884,
SPELL_BRUTALLUS_FEL_FIREBALL = 44844,
SPELL_BRUTALLUS_FLAME_RING = 44874,
SPELL_BRUTALLUS_FLAME_RING = 44873,
SPELL_BRUTALLUS_BREAK_ICE = 46637,
};
@ -261,6 +262,7 @@ struct npc_madrigosa : public NullCreatureAI
me->CastSpell(me, SPELL_MADRIGOSA_FROST_BLAST, false);
events.ScheduleEvent(EVENT_MAD_8, 3000);
events.ScheduleEvent(EVENT_MAD_8, 5000);
events.ScheduleEvent(EVENT_MAD_8_1, 6000);
events.ScheduleEvent(EVENT_MAD_8, 6500);
events.ScheduleEvent(EVENT_MAD_8, 7500);
events.ScheduleEvent(EVENT_MAD_8, 8500);
@ -273,10 +275,13 @@ struct npc_madrigosa : public NullCreatureAI
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
me->CastSpell(brutallus, SPELL_MADRIGOSA_FROSTBOLT, false);
break;
case EVENT_MAD_8_1:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
brutallus->CastSpell(brutallus, SPELL_BRUTALLUS_FLAME_RING, false);
break;
case EVENT_MAD_9:
if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS))
{
brutallus->CastSpell(brutallus, SPELL_BRUTALLUS_FLAME_RING, true);
brutallus->RemoveAllAuras();
brutallus->CastSpell(brutallus, SPELL_BRUTALLUS_FEL_FIREBALL, false);
brutallus->AI()->Talk(YELL_INTRO_BREAK_ICE);

View File

@ -106,20 +106,29 @@ const Position LandingPos = { 1476.77f, 665.094f, 20.6423f };
class CorruptTriggers : public BasicEvent
{
public:
CorruptTriggers(Unit* caster) : _caster(caster) { }
CorruptTriggers(Unit* caster, uint8 currentLane) : _caster(caster), _currentLane(currentLane) { }
bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
{
std::list<Creature*> creatureList;
_caster->GetCreaturesWithEntryInRange(creatureList, 70.0f, NPC_FOG_TRIGGER);
for (auto const& creature : creatureList)
{
if (_caster->GetExactDist2d(creature) <= 11.0f)
{
creature->CastSpell(creature, SPELL_FOG_OF_CORRUPTION, true);
continue;
}
if (!_currentLane && creature->GetPositionX() > 1510.0f)
creature->CastSpell(creature, SPELL_FOG_OF_CORRUPTION, true);
}
return true;
}
private:
Unit* _caster;
uint8 _currentLane;
};
struct boss_felmyst : public BossAI
@ -283,20 +292,20 @@ struct boss_felmyst : public BossAI
me->GetMotionMaster()->MovePoint(POINT_LANE, RightSideLanes[_currentLane], false);
else
me->GetMotionMaster()->MovePoint(POINT_LANE, LeftSideLanes[_currentLane], false);
}, 2s);
}, 5s);
break;
case POINT_LANE:
Talk(EMOTE_BREATH);
me->m_Events.AddEventAtOffset([&] {
me->m_Events.AddEvent(new CorruptTriggers(me), me->m_Events.CalculateTime(0));
me->m_Events.AddEvent(new CorruptTriggers(me), me->m_Events.CalculateTime(500));
me->m_Events.AddEvent(new CorruptTriggers(me), me->m_Events.CalculateTime(1000));
me->m_Events.AddEvent(new CorruptTriggers(me), me->m_Events.CalculateTime(1500));
me->m_Events.AddEvent(new CorruptTriggers(me), me->m_Events.CalculateTime(2000));
me->m_Events.AddEvent(new CorruptTriggers(me), me->m_Events.CalculateTime(2500));
me->m_Events.AddEvent(new CorruptTriggers(me), me->m_Events.CalculateTime(3000));
me->m_Events.AddEvent(new CorruptTriggers(me), me->m_Events.CalculateTime(3500));
me->m_Events.AddEvent(new CorruptTriggers(me), me->m_Events.CalculateTime(4000));
me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(0));
me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(500));
me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(1000));
me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(1500));
me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(2000));
me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(2500));
me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(3000));
me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(3500));
me->m_Events.AddEvent(new CorruptTriggers(me, _currentLane), me->m_Events.CalculateTime(4000));
}, 5s);
me->m_Events.AddEventAtOffset([&] {
@ -360,56 +369,63 @@ struct boss_felmyst : public BossAI
struct npc_demonic_vapor : public NullCreatureAI
{
npc_demonic_vapor(Creature* creature) : NullCreatureAI(creature) { }
npc_demonic_vapor(Creature* creature) : NullCreatureAI(creature), _timer{1} { }
void Reset() override
{
me->CastSpell(me, SPELL_DEMONIC_VAPOR_SPAWN_TRIGGER, true);
me->CastSpell(me, SPELL_DEMONIC_VAPOR_PERIODIC, true);
}
void UpdateAI(uint32 /*diff*/) override
void IsSummonedBy(WorldObject* summoner) override
{
if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_CONTROLLED) == NULL_MOTION_TYPE)
{
Map::PlayerList const& players = me->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (me->GetDistance2d(itr->GetSource()) < 20.0f && itr->GetSource()->IsAlive())
{
me->GetMotionMaster()->MoveFollow(itr->GetSource(), 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
break;
}
}
}
};
if (!summoner || !summoner->ToUnit())
return;
struct npc_demonic_vapor_trail : public NullCreatureAI
{
npc_demonic_vapor_trail(Creature* creature) : NullCreatureAI(creature)
{
timer = 1;
}
uint32 timer;
void Reset() override
{
me->CastSpell(me, SPELL_DEMONIC_VAPOR_TRAIL_PERIODIC, true);
}
void SpellHitTarget(Unit*, SpellInfo const* spellInfo) override
{
if (spellInfo->Id == SPELL_DEMONIC_VAPOR)
me->CastSpell(me, SPELL_SUMMON_BLAZING_DEAD, true);
me->m_Events.AddEventAtOffset([this, summoner] {
me->GetMotionMaster()->MoveFollow(summoner->ToUnit(), 0.0f, 0.0f, MOTION_SLOT_CONTROLLED);
}, 2s);
}
void UpdateAI(uint32 diff) override
{
if (timer)
if (_timer)
{
timer += diff;
if (timer >= 6000)
_timer += diff;
if (_timer >= 2000)
{
timer = 0;
me->CastSpell(me, SPELL_DEMONIC_VAPOR_PERIODIC, true);
_timer = 0;
}
}
}
private:
uint32 _timer;
};
struct npc_demonic_vapor_trail : public NullCreatureAI
{
npc_demonic_vapor_trail(Creature* creature) : NullCreatureAI(creature), _timer{1} { }
void Reset() override
{
me->CastSpell(me, SPELL_DEMONIC_VAPOR_TRAIL_PERIODIC, true);
me->DespawnOrUnsummon(20000);
}
void SpellHitTarget(Unit* /*unit*/, SpellInfo const* spellInfo) override
{
if (spellInfo->Id == SPELL_DEMONIC_VAPOR && !_timer)
_timer = 1;
}
void UpdateAI(uint32 diff) override
{
if (_timer)
{
_timer += diff;
if (_timer >= 5000)
{
_timer = 0;
me->CastSpell(me, SPELL_SUMMON_BLAZING_DEAD, true);
}
}
@ -420,6 +436,8 @@ struct npc_demonic_vapor_trail : public NullCreatureAI
summon->SetInCombatWithZone();
summon->AI()->AttackStart(summon->AI()->SelectTarget(SelectTargetMethod::Random, 0, 100.0f));
}
private:
uint32 _timer;
};
class spell_felmyst_fog_of_corruption : public SpellScript

View File

@ -47,32 +47,36 @@ enum Yells
enum Spells
{
SPELL_SPECTRAL_EXHAUSTION = 44867,
SPELL_SPECTRAL_BLAST = 44869,
SPELL_SPECTRAL_BLAST_PORTAL = 44866,
SPELL_SPECTRAL_BLAST_AA = 46648,
SPELL_TELEPORT_SPECTRAL = 46019,
SPELL_SPECTRAL_EXHAUSTION = 44867,
SPELL_SPECTRAL_BLAST = 44869,
SPELL_SPECTRAL_BLAST_PORTAL = 44866,
SPELL_SPECTRAL_BLAST_AA = 46648,
SPELL_TELEPORT_SPECTRAL = 46019,
SPELL_TELEPORT_NORMAL_REALM = 46020,
SPELL_SPECTRAL_REALM = 46021,
SPELL_SPECTRAL_INVISIBILITY = 44801,
SPELL_DEMONIC_VISUAL = 44800,
SPELL_TELEPORT_NORMAL_REALM = 46020,
SPELL_SPECTRAL_REALM = 46021,
SPELL_SPECTRAL_INVISIBILITY = 44801,
SPELL_DEMONIC_VISUAL = 44800,
SPELL_ARCANE_BUFFET = 45018,
SPELL_FROST_BREATH = 44799,
SPELL_TAIL_LASH = 45122,
SPELL_ARCANE_BUFFET = 45018,
SPELL_FROST_BREATH = 44799,
SPELL_TAIL_LASH = 45122,
SPELL_BANISH = 44836,
SPELL_TRANSFORM_KALEC = 44670,
SPELL_CRAZED_RAGE = 44807,
SPELL_BANISH = 44836,
SPELL_TRANSFORM_KALEC = 44670,
SPELL_CRAZED_RAGE = 44807,
SPELL_CORRUPTION_STRIKE = 45029,
SPELL_CURSE_OF_BOUNDLESS_AGONY = 45032,
SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR = 45034,
SPELL_SHADOW_BOLT = 45031,
SPELL_CORRUPTION_STRIKE = 45029,
SPELL_CURSE_OF_BOUNDLESS_AGONY = 45032,
SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR = 45034,
SPELL_CURSE_OF_BOUNDLESS_AGONY_REMOVE = 45050,
SPELL_CURSE_OF_BOUNDLESS_AGONY_DUMMY_1 = 45083,
SPELL_CURSE_OF_BOUNDLESS_AGONY_DUMMY_2 = 45085,
SPELL_CURSE_OF_BOUNDLESS_AGONY_DUMMY_3 = 45084,
SPELL_SHADOW_BOLT = 45031,
SPELL_HEROIC_STRIKE = 45026,
SPELL_REVITALIZE = 45027
SPELL_HEROIC_STRIKE = 45026,
SPELL_REVITALIZE = 45027
};
enum SWPActions
@ -224,7 +228,7 @@ struct boss_kalecgos : public BossAI
{
BossAI::JustEngagedWith(who);
ScheduleTimedEvent(6s, [&] {
ScheduleTimedEvent(8s, [&] {
DoCastAOE(SPELL_ARCANE_BUFFET);
}, 8s);
@ -232,19 +236,19 @@ struct boss_kalecgos : public BossAI
DoCastVictim(SPELL_FROST_BREATH);
}, 15s);
ScheduleTimedEvent(10s, [&] {
ScheduleTimedEvent(6s, [&] {
me->CastCustomSpell(RAND(44978, 45001, 45002, 45004, 45006, 45010), SPELLVALUE_MAX_TARGETS, 1, me, false);
}, 20s);
}, 6s, 7s);
ScheduleTimedEvent(25s, [&] {
DoCastVictim(SPELL_TAIL_LASH);
}, 15s);
ScheduleTimedEvent(20s, [&] {
ScheduleTimedEvent(13s, [&] {
DoCastAOE(SPELL_SPECTRAL_BLAST);
}, 15s, 25s);
}, 20s, 30s);
scheduler.Schedule(16s, [this](TaskContext)
scheduler.Schedule(9s, [this](TaskContext)
{
if (Creature* kalec = me->SummonCreature(NPC_KALEC, 1702.21f, 931.7f, -74.56f, 5.07f, TEMPSUMMON_MANUAL_DESPAWN))
kalec->CastSpell(kalec, SPELL_SPECTRAL_INVISIBILITY, true);
@ -345,9 +349,9 @@ struct boss_sathrovarr : public ScriptedAI
DoCastVictim(SPELL_SHADOW_BOLT);
}, 9s);
ScheduleTimedEvent(20s, [&] {
ScheduleTimedEvent(40s, [&] {
me->CastCustomSpell(SPELL_CURSE_OF_BOUNDLESS_AGONY, SPELLVALUE_MAX_TARGETS, 1, me, false);
}, 30s);
}, 40s);
ScheduleTimedEvent(20s, [&] {
if (roll_chance_i(20))
@ -388,6 +392,7 @@ struct boss_sathrovarr : public ScriptedAI
void JustDied(Unit* /*killer*/) override
{
DoCastSelf(SPELL_CURSE_OF_BOUNDLESS_AGONY_REMOVE, true);
Talk(SAY_SATH_DEATH);
}
@ -464,10 +469,10 @@ class spell_kalecgos_curse_of_boundless_agony_aura : public AuraScript
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR });
return ValidateSpellInfo({ SPELL_CURSE_OF_BOUNDLESS_AGONY_PLR, SPELL_CURSE_OF_BOUNDLESS_AGONY_DUMMY_1, SPELL_CURSE_OF_BOUNDLESS_AGONY_DUMMY_2, SPELL_CURSE_OF_BOUNDLESS_AGONY_DUMMY_3 });
}
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (InstanceScript* instance = GetUnitOwner()->GetInstanceScript())
if (instance->IsEncounterInProgress())
@ -476,8 +481,18 @@ class spell_kalecgos_curse_of_boundless_agony_aura : public AuraScript
void OnPeriodic(AuraEffect const* aurEff)
{
if (aurEff->GetTickNumber() > 1 && aurEff->GetTickNumber() % 5 == 1)
uint32 tickNumber = aurEff->GetTickNumber();
if (tickNumber > 1 && tickNumber % 5 == 1)
GetAura()->GetEffect(aurEff->GetEffIndex())->SetAmount(aurEff->GetAmount() * 2);
uint32 spellId = 0;
if (tickNumber <= 10)
spellId = SPELL_CURSE_OF_BOUNDLESS_AGONY_DUMMY_1;
else if (tickNumber <= 20)
spellId = SPELL_CURSE_OF_BOUNDLESS_AGONY_DUMMY_2;
else
spellId = SPELL_CURSE_OF_BOUNDLESS_AGONY_DUMMY_3;
GetTarget()->CastSpell(GetTarget(), spellId, true);
}
void Register() override

View File

@ -15,9 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CreatureScript.h"
#include "InstanceMapScript.h"
#include "InstanceScript.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "sunwell_plateau.h"
@ -148,8 +150,109 @@ class spell_cataclysm_breath : public SpellScript
}
};
enum SunbladeScout
{
NPC_SUNBLADE_PROTECTOR = 25507,
SAY_AGGRO = 0, // Enemies spotted! Attack while I try to activate a Protector!
SPELL_ACTIVATE_SUNBLADE_PROTECTOR = 46475,
SPELL_COSMETIC_STUN_IMMUNE_PERMANENT = 59123,
SPELL_FELBLOOD_CHANNEL = 46319,
SPELL_SINISTER_STRIKE = 46558,
};
struct npc_sunblade_scout : public ScriptedAI
{
npc_sunblade_scout(Creature* creature) : ScriptedAI(creature) { }
void Reset() override
{
scheduler.CancelAll();
ScheduleOOC();
me->SetCombatMovement(false);
me->SetReactState(REACT_AGGRESSIVE);
_protectorGUID.Clear();
}
void JustEngagedWith(Unit* /*who*/) override
{
scheduler.CancelAll();
me->CallForHelp(30.0f);
Talk(SAY_AGGRO);
std::list<Creature*> protectors;
GetCreatureListWithEntryInGrid(protectors, me, NPC_SUNBLADE_PROTECTOR, 100.0f); // range unknown
// Skip already activated protectors
protectors.remove_if([](Creature* trigger) {return !trigger->HasAura(SPELL_COSMETIC_STUN_IMMUNE_PERMANENT);});
protectors.sort(Acore::ObjectDistanceOrderPred(me));
if (protectors.empty())
{
ScheduleCombat();
return;
}
Creature* closestProtector = protectors.front();
me->GetMotionMaster()->MoveFollow(closestProtector, 0.0f, 0.0f);
_protectorGUID = closestProtector->GetGUID();
me->ClearTarget();
me->SetReactState(REACT_PASSIVE);
scheduler.Schedule(1s, [this](TaskContext context)
{
if (_protectorGUID)
if (Creature* protector = ObjectAccessor::GetCreature(*me, _protectorGUID))
{
if (me->IsWithinRange(protector, 25.0f))
{
me->SetFacingToObject(protector);
DoCastSelf(SPELL_ACTIVATE_SUNBLADE_PROTECTOR);
scheduler.Schedule(5s, [this](TaskContext /*context*/)
{
ScheduleCombat();
});
return;
}
context.Repeat(1s);
return;
}
ScheduleCombat();
});
}
void ScheduleCombat()
{
me->SetReactState(REACT_AGGRESSIVE);
me->SetCombatMovement(true);
if (Unit* victim = me->GetVictim())
me->GetMotionMaster()->MoveChase(victim);
scheduler.Schedule(2s, 5s, [this](TaskContext context)
{
DoCastVictim(SPELL_SINISTER_STRIKE);
context.Repeat(7s, 8s);
});
}
void ScheduleOOC()
{
scheduler.Schedule(45s, [this](TaskContext context)
{
DoCastAOE(SPELL_FELBLOOD_CHANNEL);
context.Repeat();
});
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!me->IsCombatMovementAllowed() || !UpdateVictim())
return;
DoMeleeAttackIfReady();
}
private:
ObjectGuid _protectorGUID;
};
void AddSC_instance_sunwell_plateau()
{
new instance_sunwell_plateau();
RegisterSpellScript(spell_cataclysm_breath);
RegisterSunwellPlateauCreatureAI(npc_sunblade_scout);
}

View File

@ -44,16 +44,12 @@ enum DataTypes
DATA_SATHROVARR = 10,
DATA_KJ_CONTROLLER = 11,
DATA_ANVEENA = 12,
DATA_KALECGOS_KJ = 13
};
enum DataTypesObjects
{
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_1 = 0,
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_2 = 1,
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_3 = 2,
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_4 = 3,
DATA_ICEBARRIER = 4,
DATA_KALECGOS_KJ = 13,
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_1 = 14,
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_2 = 15,
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_3 = 16,
DATA_ORB_OF_THE_BLUE_DRAGONFLIGHT_4 = 17,
DATA_ICEBARRIER = 18,
};
enum CreatureIds

View File

@ -86,6 +86,12 @@ struct npc_forest_frog : public ScriptedAI
if (eventTimer)
{
Player* player = ObjectAccessor::GetPlayer(me->GetMap(), PlayerGUID);
if (!player)
{
events.CancelEvent(eventTimer);
eventTimer = 0;
return;
}
switch (events.ExecuteEvent())
{
case 1:
@ -141,7 +147,7 @@ struct npc_forest_frog : public ScriptedAI
if (me->GetEntry() == NPC_ADARRAH)
Talk(SAY_CHEST_TALK + 1, player);
else
Talk(SAY_CHEST_TALK);
Talk(SAY_CHEST_TALK, player);
eventTimer = 4;
if (me->GetEntry() == NPC_GUNTER || me->GetEntry() == NPC_KYREN)
@ -155,7 +161,7 @@ struct npc_forest_frog : public ScriptedAI
if (me->GetEntry() == NPC_ADARRAH)
Talk(SAY_GOODBYE + 1, player);
else
Talk(SAY_GOODBYE);
Talk(SAY_GOODBYE, player);
eventTimer = 5;
events.ScheduleEvent(eventTimer, 2000);
@ -201,6 +207,9 @@ struct npc_forest_frog : public ScriptedAI
events.ScheduleEvent(eventTimer, 3000);
me->UpdateEntry(cEntry);
if (Player* player = ObjectAccessor::GetPlayer(me->GetMap(), PlayerGUID))
me->SetFacingToObject(player);
}
void SpellHit(Unit* caster, SpellInfo const* spell) override
@ -208,7 +217,6 @@ struct npc_forest_frog : public ScriptedAI
if (spell->Id == SPELL_REMOVE_AMANI_CURSE && caster->IsPlayer() && me->GetEntry() == NPC_FOREST_FROG)
{
me->GetMotionMaster()->MoveIdle();
me->SetFacingToObject(caster);
PlayerGUID = caster->GetGUID();
if (roll_chance_i(2))
@ -223,7 +231,6 @@ struct npc_forest_frog : public ScriptedAI
private:
InstanceScript* instance;
EventMap events;
uint8 eventTimer;
ObjectGuid PlayerGUID;
};
@ -750,7 +757,10 @@ struct npc_amanishi_scout : public ScriptedAI
triggers.remove_if([](Creature* trigger) {return !IsDrum(trigger);});
triggers.sort(Acore::ObjectDistanceOrderPred(me));
if (triggers.empty())
{
ScheduleCombat();
return;
}
Creature* closestDrum = triggers.front();
me->GetMotionMaster()->MoveFollow(closestDrum, 0.0f, 0.0f);
_drumGUID = closestDrum->GetGUID();

View File

@ -92,8 +92,9 @@ public:
{
_bossWave = TO_BE_DECIDED;
_retreat = 0;
trash = 0;
_trash = 0;
_currentWave = 0;
_initialWaves = false;
_encounterNPCs.clear();
_summonedNPCs.clear();
_baseAlliance.clear();
@ -190,9 +191,9 @@ public:
if (creature->IsSummon() && _bossWave != TO_BE_DECIDED)
{
if (_currentWave == 0)
if (_currentWave == 0 && _initialWaves)
creature->SetReputationRewardDisabled(true);
DoUpdateWorldState(WORLD_STATE_ENEMYCOUNT, ++trash); // Update the instance wave count on new trash spawn
DoUpdateWorldState(WORLD_STATE_ENEMYCOUNT, ++_trash); // Update the instance wave count on new trash spawn
_encounterNPCs.insert(creature->GetGUID()); // Used for despawning on wipe
}
break;
@ -230,10 +231,10 @@ public:
{
if (_bossWave != TO_BE_DECIDED)
{
DoUpdateWorldState(WORLD_STATE_ENEMYCOUNT, --trash); // Update the instance wave count on new trash death
DoUpdateWorldState(WORLD_STATE_ENEMYCOUNT, --_trash); // Update the instance wave count on new trash death
_encounterNPCs.erase(creature->GetGUID()); // Used for despawning on wipe
if (trash == 0) // It can reach negatives if trash spawned after a retreat are killed, it shouldn't affect anything. Also happens on retail
if (_trash == 0) // It can reach negatives if trash spawned after a retreat are killed, it shouldn't affect anything. Also happens on retail
SetData(DATA_SPAWN_WAVES, 1);
}
}
@ -245,14 +246,12 @@ public:
_summonedNPCs.erase(creature->GetGUID());
break;
case NPC_WINTERCHILL:
_initialWaves = false;
[[fallthrough]];
case NPC_ANETHERON:
case NPC_KAZROGAL:
case NPC_AZGALOR:
if (Creature* jaina = GetCreature(DATA_JAINA))
jaina->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
if (Creature* thrall = GetCreature(DATA_THRALL))
thrall->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetData(DATA_RESET_WAVES, 1);
ResetWaves();
break;
}
}
@ -364,6 +363,7 @@ public:
_retreat = 0;
if (GetBossState(DATA_WINTERCHILL) != DONE)
{
_initialWaves = true;
if (_bossWave == TO_BE_DECIDED)
for (ObjectGuid const& guid : _baseAlliance)
if (Creature* creature = instance->GetCreature(guid))
@ -481,16 +481,19 @@ public:
SetData(DATA_RESET_WAVES, 0);
break;
case DATA_RESET_WAVES:
if (GetBossState(DATA_WINTERCHILL) != DONE)
_initialWaves = true;
scheduler.CancelGroup(CONTEXT_GROUP_WAVES);
_encounterNPCs.clear();
_summonedNPCs.clear();
_currentWave = 0;
trash = 0;
_trash = 0;
_bossWave = TO_BE_DECIDED;
_retreat = 0;
DoUpdateWorldState(WORLD_STATE_WAVES, _currentWave);
DoUpdateWorldState(WORLD_STATE_ENEMY, trash);
DoUpdateWorldState(WORLD_STATE_ENEMYCOUNT, trash);
DoUpdateWorldState(WORLD_STATE_ENEMY, _trash);
DoUpdateWorldState(WORLD_STATE_ENEMYCOUNT, _trash);
break;
}
@ -517,7 +520,7 @@ public:
{
// No overlapping!
scheduler.CancelGroup(CONTEXT_GROUP_WAVES);
trash = 0; // Reset counter here to avoid resetting the counter from scheduled waves. Required because creatures killed for RP events counts towards the kill counter as well, confirmed in Retail.
_trash = 0; // Reset counter here to avoid resetting the counter from scheduled waves. Required because creatures killed for RP events counts towards the kill counter as well, confirmed in Retail.
scheduler.Schedule(1ms, [this, startWaves, maxWaves, timerptr](TaskContext context)
{
@ -566,8 +569,8 @@ public:
}
}
protected:
int32 trash;
private:
int32 _trash;
uint8 _currentWave;
uint8 _bossWave;
uint8 _retreat;
@ -581,6 +584,16 @@ public:
GuidSet _ancientGemHorde;
GuidSet _roaringFlameAlliance;
GuidSet _roaringFlameHorde;
bool _initialWaves;
void ResetWaves()
{
if (Creature* jaina = GetCreature(DATA_JAINA))
jaina->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
if (Creature* thrall = GetCreature(DATA_THRALL))
thrall->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
SetData(DATA_RESET_WAVES, 1);
}
};
};

View File

@ -33,7 +33,6 @@ enum Spells
// INSANITY
SPELL_INSANITY = 57496, //Dummy
INSANITY_VISUAL = 57561,
SPELL_INSANITY_TARGET = 57508,
SPELL_CLONE_PLAYER = 57507, //casted on player during insanity
SPELL_INSANITY_PHASING_1 = 57508,
SPELL_INSANITY_PHASING_2 = 57509,
@ -362,15 +361,13 @@ class spell_herald_volzaj_insanity : public SpellScript
{
targets.remove_if([this](WorldObject* targetObj) -> bool
{
return !targetObj || !targetObj->IsPlayer() || !targetObj->ToPlayer()->IsInCombatWith(GetCaster()) ||
return !targetObj || !targetObj->IsPlayer() || !GetCaster()->IsInCombatWith(targetObj->ToPlayer()) ||
targetObj->GetDistance(GetCaster()) >= (MAX_VISIBILITY_DISTANCE * 2);
});
}
if (targets.empty())
{
return;
}
// Start channel visual and set self as unnattackable
caster->ToCreature()->AI()->Talk(SAY_INSANITY);
@ -387,16 +384,12 @@ class spell_herald_volzaj_insanity : public SpellScript
{
WorldObject* targetObj = *itr;
if (!targetObj)
{
continue;
}
Player* plrTarget = targetObj->ToPlayer();
// This should never happen, spell has attribute SPELL_ATTR3_ONLY_TARGET_PLAYERS
if (!plrTarget)
{
continue;
}
// phase mask
plrTarget->CastSpell(plrTarget, InsanitySpells.at(insanityCounter), true);
@ -405,19 +398,17 @@ class spell_herald_volzaj_insanity : public SpellScript
for (std::list<WorldObject*>::const_iterator itr2 = targets.begin(); itr2 != targets.end(); ++itr2)
{
// Should not make clone of current player target
Player const* plrClone = *itr2 ? (*itr2)->ToPlayer() : nullptr;
if (!plrClone || plrClone == plrTarget)
{
Player* plrClone = *itr2 ? (*itr2)->ToPlayer() : nullptr;
if (!plrClone || plrClone == plrTarget || !plrClone->IsAlive())
continue;
}
if (Unit* summon = caster->SummonCreature(NPC_TWISTED_VISAGE, plrClone->GetPosition(), TEMPSUMMON_CORPSE_DESPAWN, 0))
{
plrClone->CastSpell(summon, SPELL_CLONE_PLAYER, true);
summon->AddThreat(plrTarget, 0.0f);
summon->SetInCombatWith(plrTarget);
plrTarget->SetInCombatWith(summon);
plrTarget->CastSpell(summon, SPELL_CLONE_PLAYER, true);
summon->SetPhaseMask(1 | (1 << (4 + insanityCounter)), true);
summon->SetUInt32Value(UNIT_FIELD_MINDAMAGE, plrClone->GetUInt32Value(UNIT_FIELD_MINDAMAGE));
summon->SetUInt32Value(UNIT_FIELD_MAXDAMAGE, plrClone->GetUInt32Value(UNIT_FIELD_MAXDAMAGE));

View File

@ -94,6 +94,8 @@ struct boss_magus_telestra : public BossAI
if (IsHeroic() && sGameEventMgr->IsActiveEvent(GAME_EVENT_WINTER_VEIL) && !me->HasAura(SPELL_WEAR_CHRISTMAS_HAT))
me->AddAura(SPELL_WEAR_CHRISTMAS_HAT, me);
SetInvincibility(false);
}
uint32 GetData(uint32 data) const override
@ -184,6 +186,7 @@ struct boss_magus_telestra : public BossAI
case EVENT_MAGUS_HEALTH2:
if (me->HealthBelowPct(11))
{
SetInvincibility(true);
me->CastSpell(me, SPELL_START_SUMMON_CLONES, false);
events.ScheduleEvent(EVENT_MAGUS_RELOCATE, 3500ms);
Talk(SAY_SPLIT);
@ -214,6 +217,7 @@ struct boss_magus_telestra : public BossAI
me->CastSpell(me, SPELL_TELESTRA_BACK, true);
me->RemoveAllAuras();
Talk(SAY_MERGE);
SetInvincibility(false);
break;
}

View File

@ -155,7 +155,6 @@ public:
boss_kologarnAI(Creature* pCreature) : ScriptedAI(pCreature), vehicle(me->GetVehicleKit()), summons(me), breathReady(false)
{
m_pInstance = me->GetInstanceScript();
eyebeamTarget = nullptr;
assert(vehicle);
me->SetStandState(UNIT_STAND_STATE_SUBMERGED);
}
@ -167,8 +166,6 @@ public:
EventMap events;
SummonList summons;
Unit* eyebeamTarget;
bool _looksAchievement, breathReady;
uint8 _rubbleAchievement;
@ -236,6 +233,7 @@ public:
_rubbleAchievement = 0;
_looksAchievement = true;
me->GetMotionMaster()->MoveTargetedHome();
me->SetDisableGravity(true);
me->DisableRotate(true);
@ -295,6 +293,24 @@ public:
summons.Summon(cr);
}
void SummonedCreatureDespawn(Creature* cr) override
{
if (m_pInstance->GetData(TYPE_KOLOGARN) > NOT_STARTED)
return;
if (cr->GetEntry() == NPC_LEFT_ARM)
{
_left.Clear();
AttachLeftArm();
}
if (cr->GetEntry() == NPC_RIGHT_ARM)
{
_right.Clear();
AttachRightArm();
}
}
void JustDied(Unit*) override
{
summons.DespawnAll();
@ -340,7 +356,7 @@ public:
void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
if (!me->IsAlive())
if (!me->IsAlive() || m_pInstance->GetData(TYPE_KOLOGARN) != IN_PROGRESS)
return;
if (!apply)
@ -408,10 +424,7 @@ public:
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
{
EnterEvadeMode(EVADE_REASON_OTHER);
return;
}
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
@ -465,12 +478,7 @@ public:
case EVENT_FOCUSED_EYEBEAM:
{
events.ScheduleEvent(EVENT_FOCUSED_EYEBEAM, 20s);
if ((eyebeamTarget = SelectTarget(SelectTargetMethod::MinDistance, 0, 0, true)))
{
me->CastSpell(eyebeamTarget, SPELL_FOCUSED_EYEBEAM_SUMMON, false);
}
me->CastSpell(me, SPELL_FOCUSED_EYEBEAM_SUMMON, false);
Talk(EMOTE_EYES);
return;
}
@ -621,14 +629,14 @@ public:
}
struct boss_kologarn_eyebeamAI : public ScriptedAI
{
boss_kologarn_eyebeamAI(Creature* c) : ScriptedAI(c), _timer(1), _damaged(false), justSpawned(true)
boss_kologarn_eyebeamAI(Creature* c) : ScriptedAI(c), _timer(1), _damaged(false)
{
m_pInstance = (InstanceScript*)c->GetInstanceScript();
}
InstanceScript* m_pInstance;
uint32 _timer;
bool _damaged, justSpawned;
bool _damaged;
void DamageDealt(Unit* /*victim*/, uint32& damage, DamageEffectType /*damageType*/, SpellSchoolMask /*damageSchoolMask*/) override
{
@ -640,24 +648,34 @@ public:
}
}
void UpdateAI(uint32 diff) override
void IsSummonedBy(WorldObject* summoner) override
{
if (justSpawned)
if (!summoner)
{
me->DespawnOrUnsummon(10000);
return;
}
// Should only work on playable characters
if (Player* player = summoner->ToPlayer())
{
me->Attack(player, false);
me->GetMotionMaster()->MoveChase(player);
if (Creature* cr = ObjectAccessor::GetCreature(*me, m_pInstance->GetGuidData(TYPE_KOLOGARN)))
{
me->CastSpell(cr, me->GetEntry() == NPC_EYE_LEFT ? SPELL_FOCUSED_EYEBEAM_LEFT : SPELL_FOCUSED_EYEBEAM_RIGHT, true);
}
me->CastSpell(me, SPELL_FOCUSED_EYEBEAM, true);
justSpawned = false;
}
}
void UpdateAI(uint32 diff) override
{
if (_timer)
{
_timer += diff;
if (_timer >= 2000)
{
me->CastSpell(me, (me->GetMap()->Is25ManRaid() ? SPELL_FOCUSED_EYEBEAM_25 : SPELL_FOCUSED_EYEBEAM_10), true);
me->CastSpell(me, SPELL_FOCUSED_EYEBEAM, true);
_timer = 0;
}
}
@ -665,6 +683,52 @@ public:
};
};
class spell_kologarn_focused_eyebeam : public SpellScript
{
PrepareSpellScript(spell_kologarn_focused_eyebeam);
bool Load() override
{
return GetCaster()->IsCreature();
}
void FilterTargetsInitial(std::list<WorldObject*>& targets)
{
std::list<Unit*> newTargets;
Creature* creature = GetCaster()->ToCreature();
// Select 3 most distant targets
GetCaster()->GetAI()->SelectTargetList(newTargets, 3, SelectTargetMethod::MaxDistance, 0, NonTankTargetSelector(creature, true));
// If no distant targets available, get 1 target from original list
if (newTargets.empty())
{
if (!targets.empty())
{
while (1 < targets.size())
{
std::list<WorldObject*>::iterator itr = targets.begin();
advance(itr, urand(0, targets.size() - 1));
targets.erase(itr);
}
}
return;
}
// Clear original targets
targets.clear();
// Select a random target
std::list<Unit*>::iterator head = newTargets.begin();
advance(head, urand(0, newTargets.size() - 1));
targets.push_back(*head);
}
void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kologarn_focused_eyebeam::FilterTargetsInitial, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY);
}
};
struct boss_kologarn_pit_kill_bunny : public NullCreatureAI
{
boss_kologarn_pit_kill_bunny(Creature* creature) : NullCreatureAI(creature) { }
@ -724,18 +788,16 @@ class spell_ulduar_stone_grip_cast_target : public SpellScript
bool Load() override
{
if (!GetCaster()->IsCreature())
return false;
return true;
return GetCaster()->IsCreature();
}
void FilterTargetsInitial(std::list<WorldObject*>& targets)
{
// Remove "main tank" and non-player targets
targets.remove_if (StoneGripTargetSelector(GetCaster()->ToCreature(), GetCaster()->GetVictim()));
targets.remove_if(StoneGripTargetSelector(GetCaster()->ToCreature(), GetCaster()->GetVictim()));
// Maximum affected targets per difficulty mode
uint32 maxTargets = 1;
if (GetSpellInfo()->Id == 63981)
if (GetSpellInfo()->Id == SPELL_STONE_GRIP_25)
maxTargets = 3;
// Return a random amount of targets based on maxTargets
@ -882,6 +944,7 @@ void AddSC_boss_kologarn()
RegisterSpellScript(spell_ulduar_stone_grip_cast_target);
RegisterSpellScript(spell_ulduar_stone_grip_aura);
RegisterSpellScript(spell_ulduar_squeezed_lifeless);
RegisterSpellScript(spell_kologarn_focused_eyebeam);
RegisterSpellAndAuraScriptPair(spell_kologarn_stone_shout, spell_kologarn_stone_shout_aura);
// Achievements

View File

@ -474,6 +474,92 @@ public:
}
};
/*######
## Quest 11881: Load'er Up
######*/
// NPC 25969: Jenny
enum Jenny
{
EVENT_JENNY_START_FOLLOW = 1,
EVENT_JENNY_MOVE_TO_FEZZIX = 2,
EVENT_JENNY_DESPAWN = 3,
SPELL_CRATES_CARRIED = 46340,
SPELL_DROP_CRATE = 46342,
SPELL_GIVE_JENNY_CREDIT = 46358,
NPC_FEZZIX_GEARTWIST = 25849
};
struct npc_jenny : public FollowerAI
{
npc_jenny(Creature* creature) : FollowerAI(creature)
{
Initialize();
}
void Initialize()
{
me->SetReactState(REACT_PASSIVE);
me->CastSpell(me, SPELL_CRATES_CARRIED);
// can't update follow here, call later
_events.ScheduleEvent(EVENT_JENNY_START_FOLLOW, 1s);
}
void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override
{
if (me->HasAura(SPELL_CRATES_CARRIED))
me->CastSpell(me, SPELL_DROP_CRATE);
else
me->DespawnOrUnsummon();
}
void UpdateFollowerAI(uint32 diff) override
{
_events.Update(diff);
if (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_JENNY_START_FOLLOW:
// This NPC only moves at its fixed speed_run rate in the db
// and does not inherit the speed of the target
if (TempSummon* summon = me->ToTempSummon())
if (Unit* summonerUnit = summon->GetSummonerUnit())
if (Player* summoner = summonerUnit->ToPlayer())
StartFollow(summoner, 0, nullptr, true, false);
break;
case EVENT_JENNY_MOVE_TO_FEZZIX:
me->SetWalk(true);
me->GetMotionMaster()->MovePoint(0, _fezzix);
_events.ScheduleEvent(EVENT_JENNY_DESPAWN, 7s);
break;
case EVENT_JENNY_DESPAWN:
me->DespawnOrUnsummon();
break;
}
}
}
void MoveInLineOfSight(Unit* who) override
{
if (who->GetEntry() == NPC_FEZZIX_GEARTWIST && me->IsWithinDistInMap(who, 15.0f))
{
if (TempSummon* s = me->ToTempSummon())
if (Unit* u = s->GetSummonerUnit())
if (Player* p = u->ToPlayer())
me->CastSpell(p, SPELL_GIVE_JENNY_CREDIT);
SetFollowComplete(true);
_fezzix = who->GetPosition();
_events.ScheduleEvent(EVENT_JENNY_MOVE_TO_FEZZIX, 1s);
}
}
private:
EventMap _events;
Position _fezzix;
};
/*######
## Quest 11590: Abduction
######*/
@ -2059,4 +2145,5 @@ void AddSC_borean_tundra()
new npc_hidden_cultist();
RegisterSpellScript(spell_q11719_bloodspore_ruination_45997);
new npc_bloodmage_laurith();
RegisterCreatureAI(npc_jenny);
}

View File

@ -23,6 +23,8 @@
#include "ScriptedGossip.h"
#include "SpellAuras.h"
#include "SpellInfo.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "Vehicle.h"
// Ours
@ -240,6 +242,7 @@ enum overlordDrakuru
SPELL_THROW_BRIGHT_CRYSTAL = 54087,
SPELL_TELEPORT_EFFECT = 52096,
SPELL_SCOURGE_DISGUISE = 51966,
SPELL_SCOURGE_DISGUISE_INSTANT_CAST = 52192,
SPELL_BLIGHT_FOG = 54104,
SPELL_THROW_PORTAL_CRYSTAL = 54209,
SPELL_ARTHAS_PORTAL = 51807,
@ -866,6 +869,51 @@ public:
}
};
enum ScourgeDisguiseInstability
{
SCOURGE_DISGUISE_FAILING_MESSAGE_1 = 28552, // Scourge Disguise Failing! Find a safe place!
SCOURGE_DISGUISE_FAILING_MESSAGE_2 = 28758, // Scourge Disguise Failing! Run for cover!
SCOURGE_DISGUISE_FAILING_MESSAGE_3 = 28759, // Scourge Disguise Failing! Hide quickly!
};
std::vector<uint32> const scourgeDisguiseTextIDs = { SCOURGE_DISGUISE_FAILING_MESSAGE_1, SCOURGE_DISGUISE_FAILING_MESSAGE_2, SCOURGE_DISGUISE_FAILING_MESSAGE_3 };
class spell_scourge_disguise_instability : public AuraScript
{
PrepareAuraScript(spell_scourge_disguise_instability);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_SCOURGE_DISGUISE_EXPIRING });
}
void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
SetDuration(urand(3 * MINUTE * IN_MILLISECONDS, 5 * MINUTE * IN_MILLISECONDS));
}
void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Unit* caster = GetCaster())
{
if (Player* player = caster->ToPlayer())
{
if (player->HasAnyAuras(SPELL_SCOURGE_DISGUISE, SPELL_SCOURGE_DISGUISE_INSTANT_CAST))
{
uint32 textId = Acore::Containers::SelectRandomContainerElement(scourgeDisguiseTextIDs);
player->Unit::Whisper(textId, player, true);
player->CastSpell(player, SPELL_SCOURGE_DISGUISE_EXPIRING, true);
}
}
}
}
void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_scourge_disguise_instability::HandleApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_scourge_disguise_instability::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
void AddSC_zuldrak()
{
// Ours
@ -880,4 +928,6 @@ void AddSC_zuldrak()
new npc_crusade_recruit();
new go_scourge_enclosure();
new npc_storm_cloud();
RegisterSpellScript(spell_scourge_disguise_instability);
}

View File

@ -338,8 +338,7 @@ void OPvPCapturePointZM_Graveyard::SetBeaconState(TeamId controlling_factionId)
bool OPvPCapturePointZM_Graveyard::CanTalkTo(Player* player, Creature* c, GossipMenuItems const& /*gso*/)
{
ObjectGuid guid = c->GetGUID();
auto itr = _creatureTypes.find(guid.GetCounter());
auto itr = _creatureTypes.find(c->GetSpawnId());
if (itr != _creatureTypes.end())
{
if (itr->second == ZM_ALLIANCE_FIELD_SCOUT && player->GetTeamId() == TEAM_ALLIANCE && m_BothControllingFactionId == TEAM_ALLIANCE && !m_FlagCarrierGUID && m_GraveyardState != ZM_GRAVEYARD_A)

View File

@ -899,6 +899,74 @@ class spell_warr_retaliation : public AuraScript
}
};
// 29707 - Heroic Strike (Rank 10)
// 30324 - Heroic Strike (Rank 11)
// 47449 - Heroic Strike (Rank 12)
// 47450 - Heroic Strike (Rank 13)
enum DazeSpells
{
ICON_GENERIC_DAZE = 15,
SPELL_GENERIC_AFTERMATH = 18118,
};
class spell_warr_heroic_strike : public SpellScript
{
PrepareSpellScript(spell_warr_heroic_strike);
void HandleOnHit()
{
Unit* target = GetHitUnit();
if (!target)
return;
std::list<AuraEffect*> AuraEffectList = target->GetAuraEffectsByType(SPELL_AURA_MOD_DECREASE_SPEED);
bool bonusDamage = false;
for (AuraEffect* eff : AuraEffectList)
{
const SpellInfo* spellInfo = eff->GetSpellInfo();
if (!spellInfo)
continue;
// Warrior Spells: Piercing Howl or Dazed (29703)
if (spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR && (spellInfo->SpellFamilyFlags[1] & (0x20 | 0x200000)))
{
bonusDamage = true;
break;
}
// Generic Daze: icon 15 with mechanic daze or snare
if ((spellInfo->SpellIconID == ICON_GENERIC_DAZE)
&& ((spellInfo->Mechanic == MECHANIC_DAZE || spellInfo->HasEffectMechanic(MECHANIC_DAZE))
|| (spellInfo->Mechanic == MECHANIC_SNARE || spellInfo->HasEffectMechanic(MECHANIC_SNARE))
)
)
{
bonusDamage = true;
break;
}
if ((spellInfo->Id == SPELL_GENERIC_AFTERMATH)
|| (spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && (spellInfo->SpellFamilyFlags[1] & 0x40)) // Blast Wave
|| (spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && (spellInfo->SpellFamilyFlags[2] & 0x4000)) // Avenger's Shield
)
{
bonusDamage = true;
break;
}
}
if (bonusDamage)
{
int32 damage = GetHitDamage();
AddPct(damage, 35); // "Causes ${0.35*$m1} additional damage against Dazed targets."
SetHitDamage(damage);
}
}
void Register() override
{
OnHit += SpellHitFn(spell_warr_heroic_strike::HandleOnHit);
}
};
void AddSC_warrior_spell_scripts()
{
RegisterSpellScript(spell_warr_mocking_blow);
@ -925,4 +993,5 @@ void AddSC_warrior_spell_scripts()
RegisterSpellScript(spell_warr_vigilance);
RegisterSpellScript(spell_warr_vigilance_trigger);
RegisterSpellScript(spell_warr_t3_prot_8p_bonus);
RegisterSpellScript(spell_warr_heroic_strike);
}

View File

@ -16,10 +16,10 @@
*/
#include "CreatureScript.h"
#include "ObjectMgr.h"
#include "Player.h"
#include "PlayerScript.h"
#include "QueryResult.h"
#include "ServerMailMgr.h"
class ServerMailReward : public PlayerScript
{
@ -30,13 +30,14 @@ public:
void OnPlayerLogin(Player* player) override
{
// Retrieve all server mail records and session only once
auto const& serverMailStore = sObjectMgr->GetAllServerMailStore();
auto const& serverMailStore = sServerMailMgr->GetAllServerMailStore();
WorldSession* session = player->GetSession();
// We should always have a session, just incase
if (!session)
return;
uint32 playerGUID = player->GetGUID().GetCounter();
bool isAlliance = player->GetTeamId() == TEAM_ALLIANCE;
for (auto const& [mailId, servMail] : serverMailStore)
{
@ -45,26 +46,24 @@ public:
stmt->SetData(1, mailId);
// Capture servMail by value
auto callback = [session, servMailWrapper = std::reference_wrapper<ServerMail const>(servMail)](PreparedQueryResult result)
auto callback = [session, servMailWrapper = std::reference_wrapper<ServerMail const>(servMail), isAlliance](PreparedQueryResult result)
{
ServerMail const& servMail = servMailWrapper.get(); // Dereference the wrapper to get the original object
ServerMail const& servMail = servMailWrapper.get(); // Dereference the wrapper to get the original object
if (!result)
{
sObjectMgr->SendServerMail(
uint32 money = isAlliance ? servMail.moneyA : servMail.moneyH;
std::vector<ServerMailItems> const& items = isAlliance ? servMail.itemsA : servMail.itemsH;
std::vector<ServerMailCondition> const& conditions = servMail.conditions;
sServerMailMgr->SendServerMail(
session->GetPlayer(),
servMail.id,
servMail.reqLevel,
servMail.reqPlayTime,
servMail.moneyA,
servMail.moneyH,
servMail.itemA,
servMail.itemCountA,
servMail.itemH,
servMail.itemCountH,
money,
items,
conditions,
servMail.subject,
servMail.body,
servMail.active
servMail.body
);
}
};