Merge branch 'master' into ovv/systemd-socket-activation

This commit is contained in:
Quentin Dawans 2025-06-16 13:11:27 +02:00 committed by GitHub
commit 8d13542d6a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
189 changed files with 4668 additions and 1810 deletions

View File

@ -0,0 +1,3 @@
-- DB update 2025_05_23_03 -> 2025_05_23_04
--
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=24707;

View File

@ -0,0 +1,3 @@
-- DB update 2025_05_23_04 -> 2025_05_23_05
-- Captured Totem - NON_ATTACKABLE
UPDATE `creature_template` SET `unit_flags` = `unit_flags`|2 WHERE (`entry` = 23811);

View File

@ -0,0 +1,13 @@
-- DB update 2025_05_23_05 -> 2025_05_23_06
-- Warp Storm (21322)
DELETE FROM `creature_template_addon` WHERE (`entry` = 21322);
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES
(21322, 0, 0, 0, 0, 0, 0, '36581');
UPDATE `creature_template` SET `AIName` = '', `unit_flags` = `unit_flags`&~(128|256) WHERE `entry` = 21322;
DELETE FROM `smart_scripts` WHERE `entryorguid` IN (20516,21322) AND `source_type` = 0;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 18865 AND `id` = 4);
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
(18865, 0, 4, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 21322, 0, 0, 0, 0, 0, 0, 0, 'Warp Aberration - On Just Died - Despawn \'Warp Storm\' In 1000 ms'),
(20516, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 36577, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Warp Monstrosity - On Aggro - Cast \'Warp Storm\''),
(20516, 0, 1, 0, 0, 0, 100, 0, 1700, 2300, 6800, 8100, 0, 0, 11, 13901, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Warp Monstrosity - In Combat - Cast \'Arcane Bolt\''),
(20516, 0, 2, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 204, 21322, 0, 0, 0, 0, 0, 0, 0, 'Warp Monstrosity - On Just Died - Despawn \'Warp Storm\' In 1000 ms');

View File

@ -0,0 +1,4 @@
-- DB update 2025_05_23_06 -> 2025_05_24_00
--
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=45848 AND `spell_effect`=47314;
INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES (45848, 47314, 0, 'Shield of the Blue 95% output damage reduction');

View File

@ -0,0 +1,15 @@
-- DB update 2025_05_24_00 -> 2025_05_24_01
--
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (29102,29103));
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
(29102, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hearthglen Crusader - On Reset - Set Event Phase 1'),
(29102, 0, 1, 0, 24, 1, 100, 0, 52196, 1, 1000, 2000, 0, 0, 11, 53348, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hearthglen Crusader - On Target Buffed With \'Frostbrood Vanquisher\' - Cast \'Arrow Assault\' (Phase 1)'),
(29102, 0, 2, 0, 9, 1, 100, 0, 2000, 4000, 4000, 6000, 40, 150, 11, 53345, 64, 0, 1, 0, 0, 9, 0, 40, 150, 0, 0, 0, 0, 0, 'Hearthglen Crusader - Within 40-150 Range - Cast \'Arrow Assault\' (Phase 1)'),
(29102, 0, 3, 0, 8, 0, 100, 0, 53110, 1, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hearthglen Crusader - On Spellhit \'Devour Humanoid\' - Set Event Phase 2'),
(29103, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tirisfal Crusader - On Reset - Set Event Phase 1'),
(29103, 0, 1, 0, 24, 1, 100, 0, 52196, 1, 1000, 2000, 0, 0, 11, 53348, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tirisfal Crusader - On Target Buffed With \'Frostbrood Vanquisher\' - Cast \'Arrow Assault\' (Phase 1)'),
(29103, 0, 2, 0, 9, 1, 100, 0, 2000, 4000, 4000, 6000, 40, 150, 11, 53345, 64, 0, 1, 0, 0, 9, 0, 40, 150, 0, 0, 0, 0, 0, 'Tirisfal Crusader - Within 40-150 Range - Cast \'Arrow Assault\' (Phase 1)'),
(29103, 0, 3, 0, 8, 0, 100, 0, 53110, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tirisfal Crusader - On Spellhit \'Devour Humanoid\' - Set Event Phase 2');
DELETE FROM `spell_script_names` WHERE `spell_id`=53111 AND `ScriptName`='spell_q12779_an_end_to_all_things_devour_aura';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (53111, 'spell_q12779_an_end_to_all_things_devour_aura');

View File

@ -0,0 +1,14 @@
-- DB update 2025_05_24_01 -> 2025_05_24_02
--
DELETE FROM `spell_proc_event` WHERE `entry` IN (45396,45398);
INSERT INTO `spell_proc_event` (`entry`, `SchoolMask`, `SpellFamilyName`, `SpellFamilyMask0`, `SpellFamilyMask1`, `SpellFamilyMask2`, `procFlags`, `procEx`, `procPhase`, `ppmRate`, `CustomChance`, `Cooldown`) VALUES
(45396, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 45000),
(45398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45000);
DELETE FROM `spell_script_names` WHERE `spell_id` IN (45396,45398) AND `ScriptName`='spell_gen_weapon_coating_enchant';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(45396, 'spell_gen_weapon_coating_enchant'),
(45398, 'spell_gen_weapon_coating_enchant');
UPDATE `spell_dbc` SET `ProcTypeMask` = 81920,`ProcChance` = 100,`Effect_1` = 6,`EffectBasePoints_1` = 99,`EffectDieSides_1` = 1,`EffectTriggerSpell_1` = 45403,`EffectAura_1` = 42,`ImplicitTargetA_1` = 1 WHERE `ID` = 45396;
UPDATE `spell_dbc` SET `ProcTypeMask` = 68,`ProcChance` = 100,`Effect_1` = 6,`EffectBasePoints_1` = 99,`EffectDieSides_1` = 1,`EffectTriggerSpell_1` = 45401,`EffectAura_1` = 42,`ImplicitTargetA_1` = 1 WHERE `ID` = 45398;

View File

@ -0,0 +1,11 @@
-- DB update 2025_05_24_02 -> 2025_05_26_00
-- Eye of Acherus
DELETE FROM `creature_template_spell` WHERE (`CreatureID` = 28511);
INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES
(28511, 0, 51859, 0),
(28511, 1, 51904, 0),
(28511, 2, 52006, 0),
(28511, 4, 52694, 0);
DELETE FROM `spell_script_names` WHERE `spell_id`=52694 AND `ScriptName`='spell_q12641_death_comes_from_on_high_recall_eye';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (52694, 'spell_q12641_death_comes_from_on_high_recall_eye');

View File

@ -0,0 +1,12 @@
-- DB update 2025_05_26_00 -> 2025_05_27_00
-- 30695 (Portal Keeper)
DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (58529,58532);
INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES
(58529, 58529, 61592, 0, 0),
(58532, 58532, 61594, 0, 0);
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 30695);
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
(30695, 0, 0, 0, 0, 0, 100, 0, 3000, 6000, 6000, 8000, 0, 0, 11, 58529, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Portal Keeper - In Combat - Cast \'Arcane Missiles\''),
(30695, 0, 1, 0, 0, 0, 100, 0, 13000, 19000, 13000, 19000, 0, 0, 11, 58532, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Portal Keeper - In Combat - Cast \'Frostbolt Volley\''),
(30695, 0, 2, 0, 0, 0, 100, 0, 6000, 9000, 9000, 14000, 0, 0, 11, 58534, 64, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Portal Keeper - In Combat - Cast \'Deep Freeze\'');

View File

@ -0,0 +1,174 @@
-- DB update 2025_05_27_00 -> 2025_05_27_01
DROP TABLE IF EXISTS `player_shapeshift_model`;
DROP TABLE IF EXISTS `player_totem_model`;
CREATE TABLE IF NOT EXISTS `player_shapeshift_model` (
`ShapeshiftID` TINYINT unsigned NOT NULL,
`RaceID` TINYINT unsigned NOT NULL,
`CustomizationID` TINYINT unsigned NOT NULL,
`GenderID` TINYINT unsigned NOT NULL,
`ModelID` INT unsigned NOT NULL,
PRIMARY KEY (`ShapeshiftID`, `RaceID`, `CustomizationID`, `GenderID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 PACK_KEYS=0;
CREATE TABLE IF NOT EXISTS `player_totem_model` (
`TotemID` TINYINT unsigned NOT NULL,
`RaceID` TINYINT unsigned NOT NULL,
`ModelID` INT unsigned NOT NULL,
PRIMARY KEY (`TotemID`, `RaceID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 PACK_KEYS=0;
DELETE FROM `player_shapeshift_model`;
INSERT INTO `player_shapeshift_model` (`ShapeshiftID`, `RaceID`, `CustomizationID`, `GenderID`, `ModelID`) VALUES
-- Cat Form
-- Night Elf
(1, 4, 0, 2, 29407), -- Green
(1, 4, 1, 2, 29407), -- Light Green
(1, 4, 2, 2, 29407), -- Dark Green
(1, 4, 3, 2, 29406), -- Light Blue
(1, 4, 4, 2, 29408), -- White
(1, 4, 7, 2, 29405), -- Violet
(1, 4, 8, 2, 29405), -- Violet
(1, 4, 255, 2, 892), -- Dark Blue
-- Tauren
-- Male
(1, 6, 12, 0, 29409), -- White
(1, 6, 13, 0, 29409), -- White
(1, 6, 14, 0, 29409), -- White
(1, 6, 18, 0, 29409), -- Completely White
(1, 6, 9, 0, 29410), -- Light Brown
(1, 6, 10, 0, 29410), -- Light Brown
(1, 6, 11, 0, 29410), -- Light Brown
(1, 6, 6, 0, 29411), -- Brown
(1, 6, 7, 0, 29411), -- Brown
(1, 6, 8, 0, 29411), -- Brown
(1, 6, 0, 0, 29412), -- Dark
(1, 6, 1, 0, 29412), -- Dark
(1, 6, 2, 0, 29412), -- Dark
(1, 6, 3, 0, 29412), -- Dark Grey
(1, 6, 4, 0, 29412), -- Dark Grey
(1, 6, 5, 0, 29412), -- Dark Grey
(1, 6, 255, 0, 8571), -- Grey
-- Female
(1, 6, 10, 1, 29409), -- White
(1, 6, 6, 1, 29410), -- Light Brown
(1, 6, 7, 1, 29410), -- Light Brown
(1, 6, 4, 1, 29411), -- Brown
(1, 6, 5, 1, 29411), -- Brown
(1, 6, 0, 1, 29412), -- Dark
(1, 6, 1, 1, 29412), -- Dark
(1, 6, 2, 1, 29412), -- Dark
(1, 6, 3, 1, 29412), -- Dark
(1, 6, 255, 1, 8571), -- Grey
-- Bear Form
-- Night Elf
(5, 4, 0, 2, 29413), -- Green (29415?)
(5, 4, 1, 2, 29413), -- Light Green (29415?)
(5, 4, 2, 2, 29413), -- Dark Green (29415?)
(5, 4, 6, 2, 29414), -- Dark Blue
(5, 4, 4, 2, 29416), -- White
(5, 4, 3, 2, 29417), -- Light Blue
(5, 4, 255, 2, 2281), -- Violet
-- Dire Bear Form
(8, 4, 0, 2, 29413), -- Green (29415?)
(8, 4, 1, 2, 29413), -- Light Green (29415?)
(8, 4, 2, 2, 29413), -- Dark Green (29415?)
(8, 4, 6, 2, 29414), -- Dark Blue
(8, 4, 4, 2, 29416), -- White
(8, 4, 3, 2, 29417), -- Light Blue
(8, 4, 255, 2, 2281), -- Violet
-- Bear Form
-- Tauren
-- Male
(5, 6, 0, 0, 29418), -- Dark (Black)
(5, 6, 1, 0, 29418), -- Dark (Black)
(5, 6, 2, 0, 29418), -- Dark (Black)
(5, 6, 3, 0, 29419), -- White
(5, 6, 4, 0, 29419), -- White
(5, 6, 5, 0, 29419), -- White
(5, 6, 12, 0, 29419), -- White
(5, 6, 13, 0, 29419), -- White
(5, 6, 14, 0, 29419), -- White
(5, 6, 9, 0, 29420), -- Light Brown/Grey
(5, 6, 10, 0, 29420), -- Light Brown/Grey
(5, 6, 11, 0, 29420), -- Light Brown/Grey
(5, 6, 15, 0, 29420), -- Light Brown/Grey
(5, 6, 16, 0, 29420), -- Light Brown/Grey
(5, 6, 17, 0, 29420), -- Light Brown/Grey
(5, 6, 18, 0, 29421), -- Completely White
(5, 6, 255, 0, 2289), -- Brown
-- Dire Bear Form
(8, 6, 0, 0, 29418), -- Dark (Black)
(8, 6, 1, 0, 29418), -- Dark (Black)
(8, 6, 2, 0, 29418), -- Dark (Black)
(8, 6, 3, 0, 29419), -- White
(8, 6, 4, 0, 29419), -- White
(8, 6, 5, 0, 29419), -- White
(8, 6, 12, 0, 29419), -- White
(8, 6, 13, 0, 29419), -- White
(8, 6, 14, 0, 29419), -- White
(8, 6, 9, 0, 29420), -- Light Brown/Grey
(8, 6, 10, 0, 29420), -- Light Brown/Grey
(8, 6, 11, 0, 29420), -- Light Brown/Grey
(8, 6, 15, 0, 29420), -- Light Brown/Grey
(8, 6, 16, 0, 29420), -- Light Brown/Grey
(8, 6, 17, 0, 29420), -- Light Brown/Grey
(8, 6, 18, 0, 29421), -- Completely White
(8, 6, 255, 0, 2289), -- Brown
-- Bear Form
-- Female
(5, 6, 0, 1, 29418), -- Dark (Black)
(5, 6, 1, 1, 29418), -- Dark (Black)
(5, 6, 2, 1, 29419), -- White
(5, 6, 3, 1, 29419), -- White
(5, 6, 6, 1, 29420), -- Light Brown/Grey
(5, 6, 7, 1, 29420), -- Light Brown/Grey
(5, 6, 8, 1, 29420), -- Light Brown/Grey
(5, 6, 9, 1, 29420), -- Light Brown/Grey
(5, 6, 10, 1, 29421), -- Completely White
(5, 6, 255, 1, 2289), -- Brown
-- Dire Bear Form
(8, 6, 0, 1, 29418), -- Dark (Black)
(8, 6, 1, 1, 29418), -- Dark (Black)
(8, 6, 2, 1, 29419), -- White
(8, 6, 3, 1, 29419), -- White
(8, 6, 6, 1, 29420), -- Light Brown/Grey
(8, 6, 7, 1, 29420), -- Light Brown/Grey
(8, 6, 8, 1, 29420), -- Light Brown/Grey
(8, 6, 9, 1, 29420), -- Light Brown/Grey
(8, 6, 10, 1, 29421), -- Completely White
(8, 6, 255, 1, 2289), -- Brown
-- Epic Flight Form
(27, 4, 255, 2, 21243),
(27, 6, 255, 2, 21244),
-- Flight Form
(29, 4, 255, 2, 20857),
(29, 6, 255, 2, 20872);
DELETE FROM `player_totem_model`;
INSERT INTO `player_totem_model` (`TotemID`, `RaceID`, `ModelID`) VALUES
-- Orc
(1, 2, 30758), -- Fire
(2, 2, 30757), -- Earth
(3, 2, 30759), -- Water
(4, 2, 30756), -- Air
-- Dwarf
(1, 3, 30754),
(2, 3, 30753),
(3, 3, 30755),
(4, 3, 30736),
-- Troll
(1, 8, 30762),
(2, 8, 30761),
(3, 8, 30763),
(4, 8, 30760),
-- Tauren
(1, 6, 4589),
(2, 6, 4588),
(3, 6, 4587),
(4, 6, 4590),
-- Draenei
(1, 11, 19074),
(2, 11, 19073),
(3, 11, 19075),
(4, 11, 19071);

View File

@ -0,0 +1,3 @@
-- DB update 2025_05_27_01 -> 2025_05_27_02
-- From: Syntax: .guild rank [$CharacterName] #Rank Set for player $CharacterName (or selected) rank #Rank in a guild.
UPDATE `command` SET `help` = "Syntax: .guild rank [$CharacterName] #RankNumber\r\n\r\nSet for player $CharacterName (or selected) rank #Rank in a guild. Ranks value are numeric, 0 = Guild Master, 1 = Officer, etc..." WHERE `name` LIKE "guild rank";

View File

@ -0,0 +1,11 @@
-- DB update 2025_05_27_02 -> 2025_05_29_00
-- Adds SAI to the missing NPCs and SAI Event to execute the Timed Actionlist
UPDATE `creature_template` SET `AIName` = "SmartAI" WHERE `entry` IN (23853, 23852, 23854, 23855, 23845);
DELETE FROM `smart_scripts` WHERE `entryorguid` IN (23853, 23852, 23854, 23855, 23845) AND `source_type` = 0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(23845, 0, 0, 0, 11, 0, 100, 512, 0, 0, 0, 0, 0, 0, 80, 2384500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '[DNT] L70ETC Bergrisst Controller - On Respawn - Run Script'),
(23855, 0, 0, 0, 11, 0, 100, 512, 0, 0, 0, 0, 0, 0, 80, 2385500, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '[DNT] L70ETC Chief Thunder-Skins Controller - On Respawn - Run Script'),
(23854, 0, 0, 0, 11, 0, 100, 512, 0, 0, 0, 0, 0, 0, 80, 2385400, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '[DNT] L70ETC Sig Controller - On Respawn - Run Script'),
(23852, 0, 0, 0, 11, 0, 100, 512, 0, 0, 0, 0, 0, 0, 80, 2385200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '[DNT] L70ETC Mai\'Kyl Controller - On Respawn - Run Script'),
(23853, 0, 0, 0, 11, 0, 100, 512, 0, 0, 0, 0, 0, 0, 80, 2385300, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '[DNT] L70ETC Samuro Controller - On Respawn - Run Script');

View File

@ -0,0 +1,3 @@
-- DB update 2025_05_29_00 -> 2025_05_29_01
--
UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`&~(4), `flags_extra` = `flags_extra`|2147483648 WHERE (`entry` IN (29310,31465));

View File

@ -0,0 +1,31 @@
-- DB update 2025_05_29_01 -> 2025_05_30_00
-- Death Knight Champions
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 29106) AND (`source_type` = 0) AND (`id` IN (4));
-- Rampaging Abominations
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 29115) AND (`source_type` = 0) AND (`id` IN (2));
-- Volatile Ghouls
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 29136) AND (`source_type` = 0) AND (`id` IN (1));
-- Scarlet Crusaders
UPDATE `creature_template` SET `flags_extra` = `flags_extra` &~134217728 WHERE (`entry` = 28529);
DELETE FROM `smart_scripts` WHERE (`source_type` = 0) AND (`entryorguid` IN (-128705, -128706, -128707, -128708, -128709, -128710, -128711, -128712, -128713));
-- Havenshire Colts
DELETE FROM `smart_scripts` WHERE (`source_type` = 0) AND (`entryorguid` IN (-129243, -129245, -129246, -129248, -129249, -129251));
-- Havenshire Mares
DELETE FROM `smart_scripts` WHERE (`source_type` = 0) AND (`entryorguid` IN (-129230, -129234, -129235, -129236));
-- Havenshire Stallions
DELETE FROM `smart_scripts` WHERE (`entryorguid` = -129210) AND (`source_type` = 0) AND (`id` IN (5));
DELETE FROM `smart_scripts` WHERE (`entryorguid` IN (-129208, -129214)) AND (`source_type` = 0) AND (`id` IN (3));
-- Set Active on Kitrik
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 28683;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 28683) AND (`source_type` = 0) AND (`id` IN (0));
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
(28683, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Stable Master Kitrik - On Reset - Set Active On');

View File

@ -0,0 +1,7 @@
-- DB update 2025_05_30_00 -> 2025_05_30_01
--
DELETE FROM `spell_script_names` WHERE `spell_id`=30610 AND `ScriptName`='spell_karazhan_wrath_titans_stacker';
DELETE FROM `spell_script_names` WHERE `spell_id`=30554 AND `ScriptName`='spell_karazhan_wrath_titans_aura';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(30610, 'spell_karazhan_wrath_titans_stacker'),
(30554, 'spell_karazhan_wrath_titans_aura');

View File

@ -0,0 +1,5 @@
-- DB update 2025_05_30_01 -> 2025_05_30_02
--
DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` = 58152) AND (`SourceId` = 0) AND (`ElseGroup` = 18) AND (`ConditionTypeOrReference` = 31);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(13, 1, 58152, 0, 18, 31, 0, 3, 29321, 0, 0, 0, 0, '', 'Defense System - Arcane Lightning - Ichor Globule');

View File

@ -0,0 +1,5 @@
-- DB update 2025_05_30_02 -> 2025_05_30_03
--
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=-61874 AND `spell_effect`=24870;
DELETE FROM `spell_script_names` WHERE `spell_id`=61874 AND `ScriptName`='spell_item_noblegarden_chocolate';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (61874, 'spell_item_noblegarden_chocolate');

View File

@ -0,0 +1,3 @@
-- DB update 2025_05_30_03 -> 2025_05_30_04
--
UPDATE `smart_scripts` SET `action_param2` = 64 WHERE `entryorguid` = 30278 AND `source_type` = 0 AND `id` IN (2,3);

View File

@ -0,0 +1,5 @@
-- DB update 2025_05_30_04 -> 2025_05_30_05
--
DELETE FROM `command` WHERE `name`IN('debug boundary');
INSERT INTO `command` (`name`, `security`, `help`) VALUES
('debug boundary', 3, 'Syntax: .debug boundary [duration] [fill] [z]\nOptional arguments:\n- duration: Duration in ms (default: 5000, max: 180000).\n- fill: Fills the boundary with markers.\n- z: Includes z-axis in visualization.');

View File

@ -0,0 +1,5 @@
-- DB update 2025_05_30_05 -> 2025_05_30_06
-- Azure Ring Captain (28236)
DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 28236);
INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES
(28236, 0, 0, 1, 0, 0, 0, 0);

View File

@ -0,0 +1,5 @@
-- DB update 2025_05_30_06 -> 2025_05_30_07
--
DELETE FROM `command` WHERE `name` = 'group revive';
INSERT INTO `command` (`name`, `security`, `help`) VALUES
('group revive', 2, 'Syntax: .group revive\r\n\r\nRevives all players in your group.');

View File

@ -0,0 +1,51 @@
-- DB update 2025_05_30_07 -> 2025_05_30_08
-- Edit Spell Timers
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 25708;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 25708);
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
(25708, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Just Summoned - Set Reactstate Passive'),
(25708, 0, 1, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 134, 45785, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Just Summoned - Invoker Cast \'Sinister Reflection Clone\''),
(25708, 0, 2, 3, 60, 0, 100, 1, 3000, 3000, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Update - Set Reactstate Aggressive (No Repeat)'),
(25708, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 50, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Update - Start Attacking (No Repeat)'),
(25708, 0, 4, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Just Died - Despawn In 2000 ms'),
(25708, 0, 5, 0, 38, 0, 100, 512, 1, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 1 - Set Event Phase 1'),
(25708, 0, 6, 0, 38, 0, 100, 512, 1, 2, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 2 - Set Event Phase 2'),
(25708, 0, 7, 0, 38, 0, 100, 512, 1, 3, 0, 0, 0, 0, 22, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 3 - Set Event Phase 3'),
(25708, 0, 8, 0, 38, 0, 100, 512, 1, 4, 0, 0, 0, 0, 22, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 4 - Set Event Phase 4'),
(25708, 0, 9, 0, 38, 0, 100, 512, 1, 5, 0, 0, 0, 0, 22, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 5 - Set Event Phase 5'),
(25708, 0, 10, 0, 38, 0, 100, 512, 1, 6, 0, 0, 0, 0, 22, 6, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 6 - Set Event Phase 6'),
(25708, 0, 11, 0, 38, 0, 100, 512, 1, 7, 0, 0, 0, 0, 22, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 7 - Set Event Phase 7'),
(25708, 0, 12, 0, 38, 0, 100, 512, 1, 8, 0, 0, 0, 0, 22, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 8 - Set Event Phase 8'),
(25708, 0, 13, 0, 38, 0, 100, 512, 1, 9, 0, 0, 0, 0, 22, 9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 9 - Set Event Phase 9'),
(25708, 0, 14, 0, 38, 0, 100, 512, 1, 11, 0, 0, 0, 0, 22, 11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - On Data Set 1 11 - Set Event Phase 11'),
(25708, 0, 15, 0, 0, 1, 100, 1, 0, 0, 0, 0, 0, 0, 11, 42459, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Dual Wield\' (Phase 1) (No Repeat)'),
(25708, 0, 16, 0, 0, 1, 100, 0, 4000, 8000, 9000, 13000, 0, 0, 11, 17207, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Whirlwind\' (Phase 1)'),
(25708, 0, 17, 0, 0, 2, 100, 0, 4000, 8000, 5000, 8000, 0, 0, 11, 38921, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Holy Shock\' (Phase 2)'),
(25708, 0, 18, 0, 0, 2, 100, 0, 6000, 13000, 15000, 25000, 0, 0, 11, 37369, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Hammer of Justice\' (Phase 2)'),
(25708, 0, 19, 0, 9, 4, 100, 0, 3000, 3000, 2000, 2000, 5, 30, 11, 16496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 5-30 Range - Cast \'Shoot\' (Phase 3)'),
(25708, 0, 20, 0, 9, 4, 100, 0, 3000, 3000, 10000, 15000, 5, 30, 11, 48098, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 5-30 Range - Cast \'Multi-Shot\' (Phase 3)'),
(25708, 0, 21, 0, 9, 4, 100, 0, 3000, 3000, 15000, 25000, 0, 5, 11, 40652, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-5 Range - Cast \'Wing Clip\' (Phase 3)'),
(25708, 0, 22, 0, 9, 4, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 3)'),
(25708, 0, 23, 0, 9, 4, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 3)'),
(25708, 0, 24, 0, 0, 8, 100, 1, 0, 0, 0, 0, 0, 0, 11, 42459, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Dual Wield\' (Phase 4) (No Repeat)'),
(25708, 0, 25, 0, 0, 8, 100, 0, 4000, 6000, 4000, 6000, 0, 0, 11, 45897, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Hemorrhage\' (Phase 4)'),
(25708, 0, 26, 0, 0, 16, 100, 0, 4000, 7000, 4000, 5000, 0, 0, 11, 47077, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Holy Smite\' (Phase 5)'),
(25708, 0, 27, 0, 14, 16, 100, 0, 10000, 40, 10000, 15000, 0, 0, 11, 47079, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Friendly At 10000 Health - Cast \'Renew\' (Phase 5)'),
(25708, 0, 28, 0, 9, 16, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 5)'),
(25708, 0, 29, 0, 9, 16, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 5)'),
(25708, 0, 30, 0, 0, 32, 100, 1, 0, 0, 0, 0, 0, 0, 11, 42459, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Dual Wield\' (Phase 6) (No Repeat)'),
(25708, 0, 31, 0, 0, 32, 100, 0, 4000, 8000, 4000, 6000, 0, 0, 11, 58843, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Plague Strike\' (Phase 6)'),
(25708, 0, 32, 0, 0, 64, 100, 1, 0, 0, 0, 0, 0, 0, 11, 42459, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Dual Wield\' (Phase 7) (No Repeat)'),
(25708, 0, 33, 0, 0, 64, 100, 0, 4000, 8000, 6000, 10000, 0, 0, 11, 47071, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Earth Shock\' (Phase 7)'),
(25708, 0, 34, 0, 0, 128, 100, 0, 4000, 5000, 2000, 3000, 0, 0, 11, 47074, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Fireball\' (Phase 8)'),
(25708, 0, 35, 0, 9, 128, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 8)'),
(25708, 0, 36, 0, 9, 128, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 8)'),
(25708, 0, 37, 0, 0, 256, 100, 0, 4000, 4500, 1500, 2500, 0, 0, 11, 47076, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Shadow Bolt\' (Phase 9)'),
(25708, 0, 38, 0, 0, 256, 100, 0, 7000, 8000, 10000, 12000, 0, 0, 11, 46190, 0, 0, 0, 0, 0, 5, 30, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Curse of Agony\' (Phase 9)'),
(25708, 0, 39, 0, 9, 256, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 9)'),
(25708, 0, 40, 0, 9, 256, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 9)'),
(25708, 0, 41, 0, 0, 1024, 100, 0, 4000, 5000, 2000, 3000, 0, 0, 11, 47072, 0, 0, 0, 0, 0, 5, 30, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - In Combat - Cast \'Moonfire\' (Phase 11)'),
(25708, 0, 42, 0, 9, 1024, 100, 512, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 0-20 Range - Disable Combat Movement (Phase 11)'),
(25708, 0, 43, 0, 9, 1024, 100, 512, 0, 0, 0, 0, 25, 100, 21, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sinister Reflection - Within 25-100 Range - Enable Combat Movement (Phase 11)');

View File

@ -0,0 +1,3 @@
-- DB update 2025_05_30_08 -> 2025_05_31_00
--
UPDATE `gameobject_template` SET `ScriptName` = 'go_eredar_twins_blaze' WHERE (`entry` = 187366);

View File

@ -0,0 +1,35 @@
-- DB update 2025_05_31_00 -> 2025_05_31_01
-- Remove Flight flag
UPDATE `creature_template_movement` SET `Flight` = 0 WHERE (`CreatureId` = 28511);
-- Add Waypoint
DELETE FROM `waypoint_data` WHERE `id` IN ("2851100");
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES
("2851100", 1, 2341.5713, -5672.797, 538.3942, NULL, 0, 0, 0, 100, 0),
("2851100", 2, 1957.3962, -5844.1055, 273.86673, NULL, 0, 0, 0, 100, 0),
("2851100", 3, 1758.007, -5876.7847, 166.86671, NULL, 0, 0, 0, 100, 0);
-- Set Action List
DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2851100);
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
(2851100, 9, 0, 0, 0, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 51892, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Cast \'Eye of Acherus Visual\''),
(2851100, 9, 1, 0, 0, 0, 100, 512, 6000, 6000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Say Line 0'),
(2851100, 9, 2, 0, 0, 0, 100, 512, 1000, 1000, 0, 0, 0, 0, 11, 51923, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Cast \'Eye of Acherus Flight (Boost)\''),
(2851100, 9, 3, 0, 0, 0, 100, 512, 1000, 1000, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Set Rooted Off'),
(2851100, 9, 4, 0, 0, 0, 100, 512, 100, 100, 0, 0, 0, 0, 232, 2851100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Start Path 2851100'),
(2851100, 9, 5, 0, 0, 0, 100, 512, 19200, 19200, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Set Rooted On'),
(2851100, 9, 6, 0, 0, 0, 100, 512, 500, 500, 0, 0, 0, 0, 11, 51890, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Cast \'Eye of Acherus Flight\''),
(2851100, 9, 7, 0, 0, 0, 100, 512, 500, 500, 0, 0, 0, 0, 28, 51923, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Remove Aura \'Eye of Acherus Flight (Boost)\''),
(2851100, 9, 8, 0, 0, 0, 100, 0, 500, 500, 0, 0, 0, 0, 28, 51860, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Remove Aura \'Serverside - Root Self\''),
(2851100, 9, 9, 0, 0, 0, 100, 512, 500, 500, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Say Line 1'),
(2851100, 9, 10, 0, 0, 0, 100, 512, 500, 500, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - Actionlist - Set Rooted Off');
-- Set General SmartAI and remove script name
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 28511;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 28511);
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
(28511, 0, 0, 1, 54, 0, 100, 512, 0, 0, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - On Just Summoned - Set Rooted On'),
(28511, 0, 1, 2, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 11, 51860, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - On Just Summoned - Cast \'Serverside - Root Self\''),
(28511, 0, 2, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 0, 80, 2851100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Acherus - On Just Summoned - Run Script');

View File

@ -0,0 +1,3 @@
-- DB update 2025_05_31_01 -> 2025_06_05_00
--
UPDATE `creature_template` SET `ScriptName` = 'npc_king_varian_wrynn' WHERE (`entry` = 29611);

View File

@ -0,0 +1,7 @@
-- DB update 2025_06_05_00 -> 2025_06_05_01
-- Remove Wrong Auras
UPDATE `creature_addon` SET `auras` = '' WHERE (`guid` IN (129492, 129496, 129497, 129498, 129499));
-- Remove Wrong Unit Flags (Immune to npc and pc "Sniffs")
UPDATE `creature_template` SET `unit_flags` = `unit_flags` &~(256|512) WHERE (`entry` = 28406);

View File

@ -0,0 +1,11 @@
-- DB update 2025_06_05_01 -> 2025_06_05_02
-- Link pre-spawned Ethereal Beacons to Nexus-Prince Shaffar so they respawn on reset
SET @SHAFFAR_GUID := 91162;
SET @AI_FLAGS := 1 | 2 | 8 | 16;
DELETE FROM `creature_formations` WHERE `leaderGUID` = @SHAFFAR_GUID;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(@SHAFFAR_GUID, @SHAFFAR_GUID, 0, 0, @AI_FLAGS, 0, 0),
(@SHAFFAR_GUID, 91131, 0, 0, @AI_FLAGS, 0, 0),
(@SHAFFAR_GUID, 91132, 0, 0, @AI_FLAGS, 0, 0),
(@SHAFFAR_GUID, 91133, 0, 0, @AI_FLAGS, 0, 0);

View File

@ -0,0 +1,80 @@
-- DB update 2025_06_05_02 -> 2025_06_05_03
-- Gundrak formations
DELETE FROM `creature_formations` WHERE `leaderGUID` IN (127026,127009,127021,127059,127113);
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(127026, 127026, 0, 0, 3, 0, 0), -- Cobras
(127026, 127027, 0, 0, 3, 0, 0),
(127026, 127016, 0, 0, 3, 0, 0),
(127009, 127009, 0, 0, 3, 0, 0),
(127009, 127010, 0, 0, 3, 0, 0),
(127009, 127018, 0, 0, 3, 0, 0),
(127021, 127021, 0, 0, 3, 0, 0),
(127021, 127022, 0, 0, 3, 0, 0),
(127021, 127012, 0, 0, 3, 0, 0),
(127059, 127059, 0, 0, 3, 0, 0), -- lancer/weaver/medicine before Moorabi
(127059, 127065, 0, 0, 3, 0, 0),
(127059, 127047, 0, 0, 3, 0, 0),
(127113, 127113, 0, 0, 3, 0, 0), -- inciter + 2 earthshakers
(127113, 127068, 0, 0, 3, 0, 0),
(127113, 127067, 0, 0, 3, 0, 0);
-- Lancer/Fire Weaver
UPDATE `creature_formations` SET `groupAI`=515 WHERE `memberGUID`=127045 AND `leaderGUID`=127045;
UPDATE `creature_formations` SET `groupAI`=515 WHERE `memberGUID`=127058 AND `leaderGUID`=127045;
-- God hunter/Medicine MANAGE
UPDATE `creature_formations` SET `groupAI`=515 WHERE `memberGUID`=127054 AND `leaderGUID`=127054;
UPDATE `creature_formations` SET `groupAI`=515 WHERE `memberGUID`=127064 AND `leaderGUID`=127054;
-- Note: Packs of 4 hunter/lancer/fire weaver/lancer seem to always social aggro, source looks similar
-- Spelldifficulty
DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN(55700,55703,55602,55603,55659,55613,55622,55635,55636,16172,35946,55624,55599,55597,55530,55663,55348,55521);
INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`, `DifficultySpellID_3`, `DifficultySpellID_4`) VALUES
(55700, 55700, 59019, 0, 0),
(55703, 55703, 59020, 0, 0),
(55602, 55602, 59021, 0, 0),
(55603, 55603, 59022, 0, 0),
(55659, 55659, 58972, 0, 0),
(55613, 55613, 58971, 0, 0),
(55622, 55622, 58978, 0, 0),
(55635, 55635, 58975, 0, 0),
(55636, 55636, 58977, 0, 0),
(16172, 16172, 58969, 0, 0),
(35946, 35946, 59146, 0, 0),
(55624, 55624, 58973, 0, 0),
(55599, 55599, 58981, 0, 0),
(55597, 55597, 58980, 0, 0),
(55530, 55530, 58991, 0, 0),
(55663, 55663, 58992, 0, 0),
(55348, 55348, 58966, 0, 0),
(55521, 55521, 58967, 0, 0);
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (29774,29768,29822,29819,29832,29820,29829,29826,29838,29836));
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
(29774, 0, 0, 0, 0, 0, 100, 0, 1000, 5000, 7000, 11000, 0, 0, 11, 55700, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Spitting Cobra - In Combat - Cast \'Venom Spit\''),
(29774, 0, 1, 0, 0, 0, 100, 0, 2900, 6600, 10000, 12000, 0, 0, 11, 55703, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Spitting Cobra - In Combat - Cast \'Cobra Strike\''),
(29768, 0, 0, 0, 0, 0, 100, 0, 1000, 5000, 7000, 11000, 0, 0, 11, 55602, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Unyielding Constrictor - In Combat - Cast \'Vicious Bite\''),
(29768, 0, 1, 0, 0, 0, 100, 1, 1000, 1000, 0, 0, 0, 0, 11, 55603, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unyielding Constrictor - In Combat - Cast \'Puncturing Strike\' (No Repeat)'),
(29822, 0, 0, 0, 0, 0, 100, 0, 4000, 8000, 11000, 17000, 0, 0, 11, 55659, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Fire Weaver - In Combat - Cast \'Lava Burst\''),
(29822, 0, 1, 0, 0, 0, 100, 0, 1000, 6000, 7000, 10000, 0, 0, 11, 55613, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Fire Weaver - In Combat - Cast \'Flame Shock\''),
(29822, 0, 2, 0, 106, 0, 100, 0, 1000, 15000, 17000, 30000, 0, 10, 11, 61362, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Fire Weaver - On Hostile in Range - Cast \'Blast Wave\''),
(29819, 0, 0, 0, 0, 0, 100, 0, 1000, 6000, 12000, 18000, 0, 0, 11, 6713, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Lancer - In Combat - Cast \'Disarm\''),
(29819, 0, 1, 0, 0, 0, 100, 0, 1000, 12000, 17000, 20000, 0, 0, 11, 40546, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Lancer - In Combat - Cast \'Retaliation\''),
(29819, 0, 2, 0, 0, 0, 100, 0, 1000, 12000, 17000, 20000, 0, 0, 11, 55622, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Lancer - In Combat - Cast \'Impale\''),
(29832, 0, 0, 0, 0, 0, 100, 0, 4000, 8000, 11000, 17000, 0, 0, 11, 55635, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Golem - In Combat - Cast Thunderclap'),
(29832, 0, 1, 0, 0, 0, 100, 0, 1000, 9000, 17000, 20000, 0, 0, 11, 55636, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Golem - In Combat - Cast Shockwave'),
(29832, 0, 2, 0, 0, 0, 100, 0, 1000, 15000, 17000, 30000, 0, 0, 11, 55633, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Golem - In Combat - Cast Body of Stone'),
(29820, 0, 0, 0, 0, 0, 100, 0, 0, 0, 2000, 2000, 0, 0, 11, 35946, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari God Hunter - In Combat - Cast \'Shoot\''),
(29820, 0, 1, 0, 0, 0, 100, 0, 4000, 6000, 8000, 12000, 0, 0, 11, 55624, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari God Hunter - In Combat - Cast \'Arcane Shot\''),
(29820, 0, 2, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 0, 11, 55798, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari God Hunter - On Aggro - Cast \'Flare\''),
(29820, 0, 3, 0, 0, 0, 100, 0, 1000, 11000, 20000, 32000, 0, 0, 11, 31567, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari God Hunter - In Combat - Cast \'Deterrence\''),
(29829, 0, 0, 0, 0, 0, 100, 0, 4000, 8000, 11000, 17000, 0, 0, 11, 16172, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Earthshaker - In Combat - Cast \'Head Crack\''),
(29829, 0, 1, 0, 0, 0, 100, 0, 1000, 9000, 7000, 11000, 0, 0, 11, 55567, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Earthshaker - In Combat - Cast \'Powerful Blow\''),
(29829, 0, 2, 0, 0, 0, 100, 0, 1000, 8000, 10000, 12000, 0, 0, 11, 55563, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Earthshaker - In Combat - Cast \'Slam Ground\''),
(29826, 0, 0, 0, 16, 0, 100, 0, 55599, 30, 6000, 6000, 0, 0, 11, 55599, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Medicine Man - On Friendly Unit Missing Buff \'Earth Shield\' - Cast \'Earth Shield\''),
(29826, 0, 1, 0, 14, 0, 100, 0, 15000, 30, 7250, 10000, 0, 0, 11, 55597, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Medicine Man - Friendly At 15000 Health - Cast \'Healing Wave\''),
(29826, 0, 2, 0, 15, 0, 100, 0, 30, 10000, 10000, 0, 0, 0, 11, 55598, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Medicine Man - On Friendly Crowd Controlled - Cast \'Cleanse Magic\''),
(29838, 0, 0, 0, 9, 0, 100, 512, 0, 0, 8000, 8000, 5, 40, 11, 55530, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - Within 5-40 Range - Cast \'Charge\''),
(29838, 0, 1, 0, 0, 0, 100, 512, 0, 10000, 8000, 22000, 0, 0, 11, 55663, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - In Combat - Cast \'Deafening Roar\''),
(29836, 0, 0, 0, 0, 0, 100, 0, 0, 1000, 2000, 2000, 0, 0, 11, 55348, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Battle Rider - In Combat - Cast \'Throw\''),
(29836, 0, 1, 0, 0, 0, 100, 0, 0, 10000, 8000, 22000, 0, 0, 11, 55521, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Battle Rider - In Combat - Cast \'Poisoned Spear\'');

View File

@ -0,0 +1,3 @@
-- DB update 2025_06_05_03 -> 2025_06_06_00
-- Removes: Watcher leesa'oh (9697) as pre-requesite from Observing the Sporelings (9701)
UPDATE `quest_template_addon` SET `PrevQuestID` = 0 WHERE (`ID` = 9701);

View File

@ -0,0 +1,3 @@
-- DB update 2025_06_06_00 -> 2025_06_06_01
-- Sets SpecialFlags from 0 to 1, allowing Fine Gold Thread to be repeatable.
UPDATE `quest_template_addon` SET `SpecialFlags` = `SpecialFlags` | 1 WHERE (`ID` = 4785);

View File

@ -0,0 +1,8 @@
-- DB update 2025_06_06_01 -> 2025_06_07_00
--
UPDATE `command` SET `help`='Syntax: .wchange #weathertype #grade
Set current weather to #weathertype with an intensity of #grade.
#weathertype can be 0 for fine, 1 for rain, 2 for snow, 3 for storm, 86 for thunders, 90 for blackrain.
#grade is a float value from 0.0 (disabled) to 1.0 (maximum intensity).'
WHERE `name`='wchange';

View File

@ -0,0 +1,6 @@
-- DB update 2025_06_07_00 -> 2025_06_08_00
-- Rune-Smith Durar - Durar\'s Power Cell
UPDATE `creature_loot_template` SET `Chance`=100 WHERE `Entry`=26409 AND `Item`=36857;
-- Rune-Smith Kathorn - Kathorn\'s Power Cell
UPDATE `creature_loot_template` SET `Chance`=100 WHERE `Entry`=26410 AND `Item`=36858;

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
-- DB update 2025_06_08_01 -> 2025_06_08_02
UPDATE `antidos_opcode_policies` SET `MaxAllowedCount` = 1000 WHERE `Opcode` IN (564, 565);

View File

@ -0,0 +1,19 @@
-- DB update 2025_06_08_02 -> 2025_06_08_03
-- Remove tokens from original ref table
DELETE FROM `reference_loot_template` WHERE (`Entry` = 34068) AND (`Item` IN (31095, 31096, 31097));
-- Create new reference table with just tokens tokens
DELETE FROM `reference_loot_template` WHERE (`Entry` = 1276884);
INSERT INTO `reference_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(1276884, 31095, 0, 33.33, 0, 1, 1, 1, 1, 'Helm of the Forgotten Protector'),
(1276884, 31096, 0, 33.33, 0, 1, 1, 1, 1, 'Helm of the Forgotten Vanquisher'),
(1276884, 31097, 0, 33.33, 0, 1, 1, 1, 1, 'Helm of the Forgotten Conqueror');
-- Set chance of 100 with seperate groups (2/3)
-- Chance for regular items 2/2
-- ~~Chance for tokens is 2/3~~ must only be 2/2? <- Maybe this needs to be changed in core?
-- PLEASE READ I set Item to 34069 for ref table 1276884 because from my understanding Item just needs to be unique
DELETE FROM `creature_loot_template` WHERE (`Entry` = 17968) AND (`Item` IN (34068, 34069));
INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(17968, 34068, 34068, 100, 0, 1, 2, 2, 2, 'Archimonde - (ReferenceTable Regular)'),
(17968, 34069, 1276884, 100, 0, 1, 3, 2, 2, 'Archimonde - (ReferenceTable Tokens)');

View File

@ -0,0 +1,47 @@
-- DB update 2025_06_08_03 -> 2025_06_08_04
-- Blackrock Mountain - Searing Gorge Instance?
UPDATE `areatrigger_teleport` SET `Name` = "Blackrock Depths Entrance", `target_position_x` = 456.929, `target_position_y` = 34.0923, `target_position_z` = -68.0896, `target_orientation` = 4.712389 WHERE `ID` = 1466;
-- The Molten Bridge | The Molten Core Window Entrance | The Molten Core Window(Lava) Entrance
UPDATE `areatrigger_teleport` SET `target_position_x` = 1091.89, `target_position_y` = -466.985, `target_position_z` = -105.084, `target_orientation` = 3.1415927 WHERE `ID` IN (2886, 3528, 3529);
-- Molten Core Entrance, Inside
UPDATE `areatrigger_teleport` SET `Name` = "The Molten Core, Exit (from inside of the Instance)", `target_position_x` = -7508.32, `target_position_y` = -1039.74, `target_position_z` = 180.912, `target_orientation` = 3.8397243 WHERE `ID` = 2890;
-- Blackrock Spire, Unknown
UPDATE `areatrigger_teleport` SET `Name` = "Blackrock Spire, Exit (from inside of Blackwing Lair Instance)" WHERE `ID` = 3728;
-- Blackrock Spire - Searing Gorge Instance
UPDATE `areatrigger_teleport` SET `Name` = "Blackrock Spire Entrance", `target_position_x` = -7524.65, `target_position_y` = -1229.13, `target_position_z` = 285.731, `target_orientation` = 2.0943952 WHERE `ID` = 1470;
-- Maraudon
UPDATE `areatrigger_teleport` SET `Name` = "Maraudon, The Wicked Grotto [Purple Wing] (Exit)" WHERE `ID` = 3126;
UPDATE `areatrigger_teleport` SET `Name` = "Maraudon, Foulspore Cavern [Orange Wing] (Exit)" WHERE `ID` = 3131;
UPDATE `areatrigger_teleport` SET `Name` = "Maraudon, The Wicked Grotto [Purple Wing] (Entrance)" WHERE `ID` = 3134;
UPDATE `areatrigger_teleport` SET `Name` = "Maraudon, Foulspore Cavern [Orange Wing] (Entrance)" WHERE `ID` = 3133;
-- Dire Maul
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, West Wing [South] (Exit)" WHERE `ID` = 3190;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, West Wing [North](Exit)" WHERE `ID` = 3191;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, North Wing (Exit)" WHERE `ID` = 3193;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, East Wing [West] (Exit)" WHERE `ID` = 3194;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, East Wing [South] (Exit)" WHERE `ID` = 3195;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, East Wing [East] (Exit)" WHERE `ID` = 3196;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, Alzzin the Wildshaper's broken wall [1-Way] (Exit)" WHERE `ID` = 3197;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, East Wing [West] (Entrance)" WHERE `ID` = 3183;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, East Wing [South] (Entrance)" WHERE `ID` = 3184;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, East Wing [East] (Entrance)" WHERE `ID` = 3185;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, West Wing [South] (Entrance)" WHERE `ID` = 3186;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, West Wing [North] (Entrance)" WHERE `ID` = 3187;
UPDATE `areatrigger_teleport` SET `Name` = "Dire Maul, North Wing (Entrance)" WHERE `ID` = 3189;
-- Naxxramas
UPDATE `areatrigger_teleport` SET `Name` = "Naxxramas, East (Entrance)" WHERE `ID` = 5191;
UPDATE `areatrigger_teleport` SET `Name` = "Naxxramas, North (Entrance)" WHERE `ID` = 5192;
UPDATE `areatrigger_teleport` SET `Name` = "Naxxramas, West (Entrance)" WHERE `ID` = 5193;
UPDATE `areatrigger_teleport` SET `Name` = "Naxxramas, South (Entrance)" WHERE `ID` = 5194;
UPDATE `areatrigger_teleport` SET `Name` = "Naxxramas, North-East (Exit)" WHERE `ID` = 5196;
UPDATE `areatrigger_teleport` SET `Name` = "Naxxramas, North-West (Exit)" WHERE `ID` = 5197;
UPDATE `areatrigger_teleport` SET `Name` = "Naxxramas, South-East (Exit)" WHERE `ID` = 5198;
UPDATE `areatrigger_teleport` SET `Name` = "Naxxramas, South-West (Exit)" WHERE `ID` = 5199;

View File

@ -0,0 +1,22 @@
-- DB update 2025_06_08_04 -> 2025_06_08_05
--
-- Alliance, Horde Captains and Shattered Hand Executioner NPCs
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 17290;
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 17296;
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 17301;
-- Causes quest to fail on Alliance Captain death
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17290) AND (`source_type` = 0) AND (`id` IN (0, 1));
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
(17290, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 6, 9524, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Fail quest on captain death.');
-- Causes quest to fail on Horde Captain death
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17296) AND (`source_type` = 0) AND (`id` IN (0, 1));
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
(17296, 0, 0, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 6, 9525, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Fail quest on captain death.');
-- Grants kill token for quest completion on Shattered Hand Executioner death
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17301) AND (`source_type` = 0) AND (`id` IN (1, 2));
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
(17301, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 33, 17290, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Executioner - On Death - Quest Credit for Alliance'),
(17301, 0, 2, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 33, 17296, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Executioner - On Death - Quest Credit for Horde');

View File

@ -0,0 +1,2 @@
-- DB update 2025_06_08_05 -> 2025_06_08_06
UPDATE `areatrigger_teleport` SET `target_position_x` = -7524.7017, `target_position_y` = -1228.4098, `target_position_z` = 287.20447, `target_orientation` = 1.7453293 WHERE `ID` = 1470;

View File

@ -0,0 +1,13 @@
-- DB update 2025_06_08_06 -> 2025_06_09_00
-- Leaping Hatchling
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 35387;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 35387);
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
(35387, 0, 0, 0, 1, 0, 100, 0, 23000, 28000, 23000, 28000, 0, 0, 80, 3538700, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Leaping Hatchling - Out of Combat - Run Script');
DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 3538700);
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
(3538700, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Leaping Hatchling - Actionlist - Stop Follow'),
(3538700, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 89, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Leaping Hatchling - Actionlist - Start Random Movement'),
(3538700, 9, 2, 0, 0, 0, 100, 0, 3000, 4500, 0, 0, 0, 0, 11, 67427, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Leaping Hatchling - Actionlist - Cast \'Leaping Hatchling Jump\''),
(3538700, 9, 3, 0, 0, 0, 100, 0, 1500, 1500, 0, 0, 0, 0, 29, 1, 90, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 'Leaping Hatchling - Actionlist - Start Follow Owner Or Summoner');

View File

@ -0,0 +1,5 @@
-- DB update 2025_06_09_00 -> 2025_06_12_00
--
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 30329) AND (`source_type` = 0) AND (`id` IN (3));
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
(30329, 0, 3, 0, 0, 0, 100, 6, 30000, 35000, 30000, 35000, 0, 0, 11, 48193, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Savage Cave Beast - In Combat - Cast \'Enrage\' (Dungeon)');

View File

@ -0,0 +1,3 @@
-- DB update 2025_06_12_00 -> 2025_06_12_01
--
UPDATE `creature_template` SET `flags_extra` = `flags_extra`|2147483648 WHERE `entry` IN (29311, 31464);

View File

@ -0,0 +1,5 @@
-- DB update 2025_06_12_01 -> 2025_06_12_02
--
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 30284) AND (`source_type` = 0) AND (`id` IN (3));
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
(30284, 0, 3, 0, 0, 0, 100, 6, 20000, 23000, 24000, 27000, 0, 0, 11, 19134, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bonegrinder - In Combat - Cast \'Frightening Shout\' (Dungeon)');

View File

@ -0,0 +1,6 @@
-- DB update 2025_06_12_02 -> 2025_06_12_03
--
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 30285) AND (`source_type` = 0) AND (`id` IN (5, 6));
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `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
(30285, 0, 5, 0, 6, 0, 100, 515, 0, 0, 0, 0, 0, 0, 11, 56733, 7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Taldaram - Just Died - Cast \'Shadowfury\' (No Repeat) (Normal Dungeon)'),
(30285, 0, 6, 0, 6, 0, 100, 517, 0, 0, 0, 0, 0, 0, 11, 61463, 7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Eye of Taldaram - Just Died - Cast \'Shadowfury\' (No Repeat) (Heroic Dungeon)');

View File

@ -0,0 +1,111 @@
-- DB update 2025_06_12_03 -> 2025_06_12_04
SET @ARTRUIS := 28659;
SET @ARTRUISGUID := 202971;
SET @JALOOT := 28667;
SET @JALOOTGUID := 202969;
SET @ZEPIK := 28668;
SET @ZEPIKGUID := 202970;
DELETE FROM `creature` WHERE (`id1` = @JALOOT) AND (`guid` IN (@JALOOTGUID));
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
(@JALOOTGUID, @JALOOT, 0, 0, 571, 0, 0, 1, 1, 0, 5616.92, 3772.68, -94.258, 1.78024, 120, 0, 0, 1, 0, 0, 0, 0, 0, '', 0);
DELETE FROM `creature` WHERE (`id1` = @ZEPIK) AND (`guid` IN (@ZEPIKGUID));
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
(@ZEPIKGUID, @ZEPIK, 0, 0, 571, 0, 0, 1, 1, 0, 5631.63, 3794.36, -92.236, 3.45575, 120, 0, 0, 1, 0, 0, 0, 0, 0, '', 0);
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE (`entry` = @ARTRUIS);
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = @ARTRUIS);
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
(@ARTRUIS, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 10, @JALOOTGUID, @JALOOT, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Respawn - Respawn Closest Creature \'Jaloot\''),
(@ARTRUIS, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 10, @ZEPIKGUID, @ZEPIK, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Respawn - Respawn Closest Creature \'Zepik the Gorloc Hunter\''),
(@ARTRUIS, 0, 2, 0, 0, 0, 100, 0, 7000, 11000, 11000, 15000, 0, 0, 11, 54261, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - In Combat - Cast \'Ice Lance\''),
(@ARTRUIS, 0, 3, 0, 0, 0, 100, 0, 3000, 5000, 3000, 5000, 0, 0, 11, 15530, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - In Combat - Cast \'Frostbolt\''),
(@ARTRUIS, 0, 4, 0, 0, 0, 100, 0, 9000, 13000, 25000, 35000, 0, 0, 11, 54792, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - In Combat - Cast \'Icy Veins\''),
(@ARTRUIS, 0, 5, 0, 9, 0, 100, 0, 7000, 9000, 14000, 18000, 0, 10, 11, 11831, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - Within 0-10 Range - Cast \'Frost Nova\''),
(@ARTRUIS, 0, 6, 7, 2, 0, 100, 0, 0, 30, 0, 0, 0, 0, 11, 52185, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - Between 0-30% Health - Cast \'Bindings of Submission\''),
(@ARTRUIS, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, @JALOOTGUID, @JALOOT, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - Between 0-30% Health - Set Data 1 1 for Jaloot'),
(@ARTRUIS, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, @ZEPIKGUID, @ZEPIK, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - Between 0-30% Health - Set Data 1 1 for Zepik the Gorloc Hunter'),
(@ARTRUIS, 0, 9, 10, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 3, 10000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - Between 0-30% Health - Say Line 3'),
(@ARTRUIS, 0, 10, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 4, 10000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - Between 0-30% Health - Say Line 4'),
(@ARTRUIS, 0, 11, 12, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 2, 0, 0, 0, 0, 10, @JALOOTGUID, @JALOOT, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Reset - Set Data 1 2 for Jaloot'),
(@ARTRUIS, 0, 12, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 2, 0, 0, 0, 0, 10, @ZEPIKGUID, @ZEPIK, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Reset - Set Data 1 2 for Zepik the Gorloc Hunter'),
(@ARTRUIS, 0, 13, 0, 2, 0, 100, 0, 0, 75, 0, 0, 0, 0, 1, 1, 10000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - Between 0-75% Health - Say Line 1'),
(@ARTRUIS, 0, 14, 0, 2, 0, 100, 0, 0, 50, 0, 0, 0, 0, 1, 2, 10000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - Between 0-50% Health - Say Line 2'),
(@ARTRUIS, 0, 15, 16, 4, 0, 100, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 10, @JALOOTGUID, @JALOOT, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Aggro - Respawn Closest Creature \'Jaloot\''),
(@ARTRUIS, 0, 16, 17, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 10, @ZEPIKGUID, @ZEPIK, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Aggro - Respawn Closest Creature \'Zepik the Gorloc Hunter\''),
(@ARTRUIS, 0, 17, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Aggro - Say Line 0'),
(@ARTRUIS, 0, 18, 19, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52518, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Just Died - Cast \'Summon Artruis Quest Complete\''),
(@ARTRUIS, 0, 19, 20, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 3, 0, 0, 0, 0, 10, @JALOOTGUID, @JALOOT, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Just Died - Set Data 1 3 for Jaloot'),
(@ARTRUIS, 0, 20, 21, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 3, 0, 0, 0, 0, 10, @ZEPIKGUID, @ZEPIK, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Just Died - Set Data 1 3 for Zepik the Gorloc Hunter'),
(@ARTRUIS, 0, 21, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 5, 10000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Just Died - Say Line 5'),
(@ARTRUIS, 0, 22, 23, 38, 0, 100, 0, 1, 1, 0, 0, 0, 0, 45, 1, 4, 0, 0, 0, 0, 10, @ZEPIKGUID, @ZEPIK, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Data Set 1 1 - Set Data 1 4 for Zepik the Gorloc Hunter'),
(@ARTRUIS, 0, 23, 24, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 28, 52185, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Data Set 1 1 - Remove Aura \'Bindings of Submission\''),
(@ARTRUIS, 0, 24, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Data Set 1 1 - Set Data 1 0 for self'),
(@ARTRUIS, 0, 25, 26, 38, 0, 100, 0, 1, 2, 0, 0, 0, 0, 45, 1, 4, 0, 0, 0, 0, 10, @JALOOTGUID, @JALOOT, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Data Set 1 2 - Set Data 1 4 for Jaloot'),
(@ARTRUIS, 0, 26, 27, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 28, 52185, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Data Set 1 2 - Remove Aura \'Bindings of Submission\''),
(@ARTRUIS, 0, 27, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - On Data Set 1 2 - Set Data 1 0'),
(@ARTRUIS, 0, 28, 0, 0, 0, 100, 0, 1000, 1000, 1000, 1000, 0, 0, 11, 53163, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Artruis the Heartless - In Combat - Cast \'Dessawn Retainer\'');
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = @JALOOT;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = @JALOOT);
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
(@JALOOT, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Respawn - Set Npc Flag '),
(@JALOOT, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Respawn - Set Flags Immune To NPC\'s'),
(@JALOOT, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52182, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Respawn - Cast \'Tomb of the Heartless\''),
(@JALOOT, 0, 3, 0, 9, 0, 100, 0, 7500, 10000, 15000, 20000, 0, 5, 11, 52943, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - Within 0-5 Range - Cast \'Lightning Whirl\''),
(@JALOOT, 0, 4, 0, 9, 0, 100, 0, 7500, 9000, 15000, 18000, 0, 40, 11, 52944, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - Within 0-40 Range - Cast \'Lightning Strike\''),
(@JALOOT, 0, 5, 0, 9, 0, 100, 0, 10000, 12500, 20000, 25000, 0, 5, 11, 52964, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - Within 0-5 Range - Cast \'Spark Frenzy\''),
(@JALOOT, 0, 6, 0, 2, 0, 100, 0, 0, 30, 9000, 12000, 0, 0, 11, 52969, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - Between 0-30% Health - Cast \'Energy Siphon\''),
(@JALOOT, 0, 7, 8, 38, 0, 100, 0, 1, 1, 0, 0, 0, 0, 2, 14, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 1 - Set Faction 14'),
(@JALOOT, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 28, 52182, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 1 - Remove Aura \'Tomb of the Heartless\''),
(@JALOOT, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 18, 40, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 1 - Start Attacking'),
(@JALOOT, 0, 10, 11, 38, 0, 100, 0, 1, 2, 0, 0, 0, 0, 2, 250, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 2 - Set Faction 250 - Friendly'),
(@JALOOT, 0, 11, 12, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 2 - Set Flags Immune To NPC\'s'),
(@JALOOT, 0, 12, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52182, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 2 - Cast \'Tomb of the Heartless\''),
(@JALOOT, 0, 13, 14, 38, 0, 100, 0, 1, 3, 0, 0, 0, 0, 2, 250, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 3 - Set Faction 250 - Friendly'),
(@JALOOT, 0, 14, 15, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 3 - Set Flags Immune To NPC\'s'),
(@JALOOT, 0, 15, 16, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 3 - Set Npc Flags Questgiver'),
(@JALOOT, 0, 16, 17, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 90000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 3 - Despawn In 90000 ms'),
(@JALOOT, 0, 17, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 3 - Evade'),
(@JALOOT, 0, 18, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, @ARTRUISGUID, @ARTRUIS, 0, 0, 0, 0, 0, 0, 'Jaloot - On Just Died - Set Data 1 1 for Artruis the Heartless'),
(@JALOOT, 0, 19, 20, 38, 0, 100, 0, 1, 4, 0, 0, 0, 0, 2, 250, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 4 - Set Faction 250 - Friendly'),
(@JALOOT, 0, 20, 21, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 28, 52185, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 4 - Remove Aura \'Bindings of Submission\''),
(@JALOOT, 0, 21, 22, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 19, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 4 - Remove Flags Immune To NPC\'s'),
(@JALOOT, 0, 22, 23, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10000, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 4 - Say Line 0'),
(@JALOOT, 0, 23, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 10, @ARTRUISGUID, @ARTRUIS, 0, 0, 0, 0, 0, 0, 'Jaloot - On Data Set 1 4 - Start Attacking Artruis the Heartless');
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = @ZEPIK;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = @ZEPIK);
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
(@ZEPIK, 0, 0, 1, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Respawn - Set Npc Flag '),
(@ZEPIK, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Respawn - Set Flags Immune To NPC\'s'),
(@ZEPIK, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52182, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Respawn - Cast \'Tomb of the Heartless\''),
(@ZEPIK, 0, 3, 0, 9, 0, 100, 0, 7500, 9000, 15000, 18000, 0, 20, 11, 52761, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - Within 0-20 Range - Cast \'Barbed Net\''),
(@ZEPIK, 0, 4, 0, 9, 0, 100, 0, 6000, 7500, 12000, 15000, 5, 30, 11, 52889, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - Within 5-30 Range - Cast \'Envenomed Shot\''),
(@ZEPIK, 0, 5, 0, 9, 0, 100, 0, 3000, 7000, 3000, 7000, 0, 5, 11, 52873, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - Within 0-5 Range - Cast \'Open Wound\''),
(@ZEPIK, 0, 6, 0, 9, 0, 100, 0, 15000, 20000, 30000, 40000, 0, 5, 11, 52886, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - Within 0-5 Range - Cast \'Spike Trap\''),
(@ZEPIK, 0, 7, 0, 2, 0, 100, 0, 0, 30, 30000, 30000, 0, 0, 11, 52895, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - Between 0-30% Health - Cast \'Bandage\''),
(@ZEPIK, 0, 8, 9, 38, 0, 100, 0, 1, 1, 0, 0, 0, 0, 2, 14, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 1 - Set Faction 14'),
(@ZEPIK, 0, 9, 10, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 28, 52182, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 1 - Remove Aura \'Tomb of the Heartless\''),
(@ZEPIK, 0, 10, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 18, 40, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 1 - Start Attacking'),
(@ZEPIK, 0, 11, 12, 38, 0, 100, 0, 1, 2, 0, 0, 0, 0, 2, 250, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 2 - Set Faction 250 - Friendly'),
(@ZEPIK, 0, 12, 13, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 2 - Set Flags Immune To NPC\'s'),
(@ZEPIK, 0, 13, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 52182, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 2 - Cast \'Tomb of the Heartless\''),
(@ZEPIK, 0, 14, 15, 38, 0, 100, 0, 1, 3, 0, 0, 0, 0, 2, 250, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 3 - Set Faction 250 - Friendly'),
(@ZEPIK, 0, 15, 16, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 3 - Evade'),
(@ZEPIK, 0, 16, 17, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 18, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 3 - Set Flags Immune To NPC\'s'),
(@ZEPIK, 0, 17, 18, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 81, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 3 - Set Npc Flags Questgiver'),
(@ZEPIK, 0, 18, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 90000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 3 - Despawn In 90000 ms'),
(@ZEPIK, 0, 19, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 45, 1, 2, 0, 0, 0, 0, 10, @ARTRUISGUID, @ARTRUIS, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Just Died - Set Data 1 2 for Artruis the Heartless'),
(@ZEPIK, 0, 20, 21, 38, 0, 100, 0, 1, 4, 0, 0, 0, 0, 2, 250, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 4 - Set Faction 250 - Friendly'),
(@ZEPIK, 0, 21, 22, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 28, 52185, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 4 - Remove Aura \'Bindings of Submission\''),
(@ZEPIK, 0, 22, 23, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 19, 512, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 4 - Remove Flags Immune To NPC\'s'),
(@ZEPIK, 0, 23, 24, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 4 - Say Line 0'),
(@ZEPIK, 0, 24, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 10, @ARTRUISGUID, @ARTRUIS, 0, 0, 0, 0, 0, 0, 'Zepik the Gorloc Hunter - On Data Set 1 4 - Start Attacking Artruis the Heartless');
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1 AND `SourceEntry`=52185;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
(13,1,52185,0,0,31,0,3,@ZEPIK,0,0,0,'','Bindings of Submission for Zepik'),
(13,1,52185,0,1,31,0,3,@JALOOT,0,0,0,'','Bindings of Submission for Jaloot'),
(13,1,52185,0,2,31,0,3,@ARTRUIS,0,0,0,'','Bindings of Submission for Artruis the Heartless');

View File

@ -0,0 +1,5 @@
-- DB update 2025_06_12_04 -> 2025_06_15_00
--
UPDATE `reference_loot_template` SET `Chance` = 0, `GroupId` = 3 WHERE `Entry` = 1276884;
UPDATE `creature_loot_template` SET `MinCount` = 3, `MaxCount` = 3 WHERE `Entry`= 17968 AND`Item` = 34069 AND `Reference` = 1276884;

View File

@ -0,0 +1,5 @@
-- DB update 2025_06_15_00 -> 2025_06_15_01
UPDATE `spell_script_names` SET `ScriptName` = 'spell_gen_area_aura_select_players_and_caster' WHERE `spell_id` = 53642;
DELETE FROM `spell_custom_attr` WHERE `spell_id` = 53642;
INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES (53642, 2048);

View File

@ -0,0 +1,2 @@
-- DB update 2025_06_15_01 -> 2025_06_15_02
UPDATE `gameobject_template_addon` SET `faction` = 35 WHERE `entry` = 184085;

View File

@ -656,7 +656,7 @@ Allow.IP.Based.Action.Logging = 0
Appender.Console=1,4,0,"1 9 3 6 5 8"
Appender.Server=2,5,0,Server.log,w
# Appender.GM=2,5,15,gm_%s.log
Appender.Errors=2,5,0,Errors.log
Appender.Errors=2,5,0,Errors.log,w
# Appender.DB=3,5,0
# Logger config values: Given a logger "name"

View File

@ -31,7 +31,7 @@
int32 PetAI::Permissible(Creature const* creature)
{
if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLLABLE_GUARDIAN))
{
if (reinterpret_cast<Guardian const*>(creature)->GetOwner()->IsPlayer())
return PERMIT_BASE_PROACTIVE;

View File

@ -26,8 +26,10 @@
#include "MapReference.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
#include "Vehicle.h"
#include "ZoneScript.h"
#include <functional>
//Disable CreatureAI when charmed
void CreatureAI::OnCharmed(bool /*apply*/)
@ -383,6 +385,115 @@ void CreatureAI::MoveBackwardsChecks()
me->GetMotionMaster()->MoveBackwards(victim, moveDist);
}
int32 CreatureAI::VisualizeBoundary(uint32 duration, Unit* owner, bool fill, bool checkZ) const
{
static constexpr float BOUNDARY_STEP = 5.0f;
static constexpr uint32 BOUNDARY_VISUALIZE_CREATURE = 21659; // Floaty Flavor Eye
static constexpr float BOUNDARY_VISUALIZE_CREATURE_SCALE = 0.25f;
static constexpr uint32 BOUNDARY_MAX_SPAWNS = 8000;
static constexpr float BOUNDARY_MAX_DISTANCE = MAX_SEARCHER_DISTANCE;
float boundaryStep = fill && checkZ ? BOUNDARY_STEP * 2 : BOUNDARY_STEP;
Position const boundaryDirections[6] = {
{boundaryStep, 0, 0 },
{-boundaryStep, 0, 0 },
{0, boundaryStep, 0 },
{0, -boundaryStep, 0 },
{0, 0, boundaryStep },
{0, 0, -boundaryStep}
};
if (!owner)
return -1;
if (!_boundary || _boundary->empty())
return LANG_CREATURE_MOVEMENT_NOT_BOUNDED;
Position startPosition = owner->GetPosition();
if (!IsInBoundary(&startPosition)) // fall back to creature position
{
startPosition = me->GetPosition();
if (!IsInBoundary(&startPosition)) // fall back to creature home position
{
startPosition = me->GetHomePosition();
if (!IsInBoundary(&startPosition))
return LANG_CREATURE_NO_INTERIOR_POINT_FOUND;
}
}
// Helper to spawn visualization creature
auto spawnVisualizationCreature = [owner, duration, checkZ](Position const& pos)
{
if (TempSummon* summon =
owner->SummonCreature(BOUNDARY_VISUALIZE_CREATURE, pos, TEMPSUMMON_TIMED_DESPAWN, duration))
{
summon->SetObjectScale(BOUNDARY_VISUALIZE_CREATURE_SCALE);
summon->SetUnitFlag(UNIT_FLAG_STUNNED);
summon->SetImmuneToAll(true);
summon->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE_2);
if (!checkZ)
summon->SetDisableGravity(false);
}
};
struct PositionHash
{
std::size_t operator()(Position const& pos) const
{
// Convert to fixed precision coordinates.
// We lose precision here, but we don't care about the exact position
int32 x = int32(pos.m_positionX);
int32 y = int32(pos.m_positionY);
int32 z = int32(pos.m_positionZ);
return std::hash<int32_t>()(x) ^ std::hash<int32_t>()(y) ^ std::hash<int32_t>()(z);
}
};
std::unordered_set<Position, PositionHash> visited;
std::queue<Position> queue;
queue.push(startPosition);
visited.insert(startPosition);
uint8 maxDirections = checkZ ? 6 : 4;
uint32 spawns = 0;
while (!queue.empty())
{
Position currentPosition = queue.front();
queue.pop();
for (uint8 i = 0; i < maxDirections; ++i)
{
Position const& direction = boundaryDirections[i];
Position nextPosition = currentPosition;
nextPosition.RelocateOffset(direction);
if (startPosition.GetExactDist(&nextPosition) > BOUNDARY_MAX_DISTANCE)
break;
if (visited.find(nextPosition) != visited.end())
continue; // already visited
visited.insert(nextPosition);
bool isInBoundary = IsInBoundary(&nextPosition);
if ((isInBoundary && fill) || !isInBoundary)
{
spawnVisualizationCreature(currentPosition);
++spawns;
if (spawns > BOUNDARY_MAX_SPAWNS)
return LANG_CREATURE_MOVEMENT_MAYBE_UNBOUNDED;
}
if (isInBoundary)
queue.push(nextPosition); // continue visiting
}
}
return 0;
}
bool CreatureAI::IsInBoundary(Position const* who) const
{
if (!_boundary)

View File

@ -209,6 +209,9 @@ public:
virtual void PetStopAttack() { }
// intended for encounter design/debugging. do not use for other purposes. expensive.
int32 VisualizeBoundary(uint32 duration, Unit* owner = nullptr, bool fill = false, bool checkZ = false) const;
// boundary system methods
virtual bool CheckInRoom();
CreatureBoundary const* GetBoundary() const { return _boundary; }

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
SDName: Npc_EscortAI
SD%Complete: 100
SDComment:
SDCategory: Npc
EndScriptData */
#include "ScriptedEscortAI.h"
#include "Group.h"
#include "Player.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
SDName: FollowerAI
SD%Complete: 50
SDComment: This AI is under development
SDCategory: Npc
EndScriptData */
#include "ScriptedFollowerAI.h"
#include "Group.h"
#include "Player.h"

View File

@ -742,13 +742,16 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (e.action.cast.castFlags & SMARTCAST_COMBAT_MOVE)
{
// If cast flag SMARTCAST_COMBAT_MOVE is set combat movement will not be allowed unless target is outside spell range, out of mana, or LOS.
if (result == SPELL_FAILED_OUT_OF_RANGE)
// if we are just out of range, we only chase until we are back in spell range.
CAST_AI(SmartAI, me->AI())->SetCombatMove(true, std::max(spellMaxRange - NOMINAL_MELEE_RANGE, 0.0f));
else
// if spell fail for any other reason, we chase to melee range, or stay where we are if spellcast was successful.
CAST_AI(SmartAI, me->AI())->SetCombatMove(spellCastFailed);
if (!me->isMoving()) // Don't try to reposition while we are moving
{
// If cast flag SMARTCAST_COMBAT_MOVE is set combat movement will not be allowed unless target is outside spell range, out of mana, or LOS.
if (result == SPELL_FAILED_OUT_OF_RANGE)
// if we are just out of range, we only chase until we are back in spell range.
CAST_AI(SmartAI, me->AI())->SetCombatMove(true, std::max(spellMaxRange - NOMINAL_MELEE_RANGE, 0.0f));
else
// if spell fail for any other reason, we chase to melee range, or stay where we are if spellcast was successful.
CAST_AI(SmartAI, me->AI())->SetCombatMove(spellCastFailed);
}
}
if (spellCastFailed)

View File

@ -96,7 +96,7 @@ void BattlegroundRV::PostUpdateImpl(uint32 diff)
if (player->GetPositionZ() < 27.0f)
TeleportUnitToNewZ(player, 28.28f, true);
for (uint8 i = SUMMON_SLOT_TOTEM; i < MAX_TOTEM_SLOT; ++i)
for (uint8 i = SUMMON_SLOT_TOTEM_FIRE; i < MAX_TOTEM_SLOT; ++i)
if (player->m_SummonSlot[i])
if (Creature* totem = GetBgMap()->GetCreature(player->m_SummonSlot[i]))
if (totem->GetPositionZ() < 28.0f)

View File

@ -1230,8 +1230,8 @@ void Channel::ToggleModeration(Player* player)
return;
}
const uint32 level = sWorld->getIntConfig(CONFIG_GM_LEVEL_CHANNEL_MODERATION);
const bool gm = (level && player->GetSession()->GetSecurity() >= level);
const AccountTypes level = static_cast<AccountTypes>(sWorld->getIntConfig(CONFIG_GM_LEVEL_CHANNEL_MODERATION));
const bool gm = (player->GetSession()->GetSecurity() >= level);
if (!playersStore[guid].IsModerator() && !gm)
{

View File

@ -422,6 +422,8 @@ namespace lfg
lockData = LFG_LOCKSTATUS_TOO_HIGH_LEVEL;
else if (dungeon->seasonal && !IsSeasonActive(dungeon->id))
lockData = LFG_LOCKSTATUS_NOT_IN_SEASON;
else if (player->IsClass(CLASS_DEATH_KNIGHT) && !player->IsGameMaster() &&!(player->IsQuestRewarded(13188) || player->IsQuestRewarded(13189)))
lockData = LFG_LOCKSTATUS_QUEST_NOT_COMPLETED;
else if (ar)
{
// Check required items

View File

@ -2590,7 +2590,7 @@ bool Creature::_IsTargetAcceptable(Unit const* target) const
void Creature::UpdateMoveInLineOfSightState()
{
// xinef: pets, guardians and units with scripts / smartAI should be skipped
if (IsPet() || HasUnitTypeMask(UNIT_MASK_MINION | UNIT_MASK_SUMMON | UNIT_MASK_GUARDIAN | UNIT_MASK_CONTROLABLE_GUARDIAN) ||
if (IsPet() || HasUnitTypeMask(UNIT_MASK_MINION | UNIT_MASK_SUMMON | UNIT_MASK_GUARDIAN | UNIT_MASK_CONTROLLABLE_GUARDIAN) ||
GetScriptId() || GetAIName() == "SmartAI")
{
m_moveInLineOfSightStrictlyDisabled = false;
@ -2690,9 +2690,11 @@ bool Creature::CanCreatureAttack(Unit const* victim, bool skipDistCheck) const
return true;
float x, y, z;
GetMotionMaster()->GetMotionSlot(MOTION_SLOT_IDLE)->GetResetPosition(x, y, z);
return IsInDist2d(x, y, dist);
x = y = z = 0.0f;
if (GetMotionMaster()->GetMotionSlot(MOTION_SLOT_IDLE)->GetResetPosition(x, y, z))
return IsInDist2d(x, y, dist);
else
return IsInDist2d(&m_homePosition, dist);
}
CreatureAddon const* Creature::GetCreatureAddon() const
@ -3732,7 +3734,7 @@ uint8 Creature::GetLeashTimer() const
{ // Based on testing on Classic, seems to range from ~11s for low level mobs (1-5) to ~16s for high level mobs (70+)
uint8 timerOffset = 11;
uint8 timerModifier = uint8(GetLevel() / 10) - 2;
uint8 timerModifier = uint8(GetCreatureTemplate()->minlevel / 10) - 2;
// Formula is likely not quite correct, but better than flat timer
return std::max<uint8>(timerOffset, timerOffset + timerModifier);

View File

@ -422,7 +422,7 @@ Guardian::Guardian(SummonPropertiesEntry const* properties, ObjectGuid owner, bo
m_unitTypeMask |= UNIT_MASK_GUARDIAN;
if (properties && (properties->Type == SUMMON_TYPE_PET || properties->Category == SUMMON_CATEGORY_PET))
{
m_unitTypeMask |= UNIT_MASK_CONTROLABLE_GUARDIAN;
m_unitTypeMask |= UNIT_MASK_CONTROLLABLE_GUARDIAN;
InitCharmInfo();
}
}
@ -435,7 +435,7 @@ void Guardian::InitStats(uint32 duration)
{
InitStatsForLevel(m_owner->GetLevel());
if (m_owner->IsPlayer() && HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
if (m_owner->IsPlayer() && HasUnitTypeMask(UNIT_MASK_CONTROLLABLE_GUARDIAN))
m_charmInfo->InitCharmCreateSpells();
}

View File

@ -60,9 +60,9 @@ Pet::Pet(Player* owner, PetType type) : Guardian(nullptr, owner ? owner->GetGUID
if (type == HUNTER_PET)
m_unitTypeMask |= UNIT_MASK_HUNTER_PET;
if (!(m_unitTypeMask & UNIT_MASK_CONTROLABLE_GUARDIAN))
if (!(m_unitTypeMask & UNIT_MASK_CONTROLLABLE_GUARDIAN))
{
m_unitTypeMask |= UNIT_MASK_CONTROLABLE_GUARDIAN;
m_unitTypeMask |= UNIT_MASK_CONTROLLABLE_GUARDIAN;
InitCharmInfo();
}

View File

@ -393,7 +393,6 @@ Player::Player(WorldSession* session): Unit(true), m_mover(this)
m_achievementMgr = new AchievementMgr(this);
m_reputationMgr = new ReputationMgr(this);
// Ours
m_NeedToSaveGlyphs = false;
m_MountBlockId = 0;
m_realDodge = 0.0f;
@ -7177,8 +7176,7 @@ void Player::ApplyEquipSpell(SpellInfo const* spellInfo, Item* item, bool apply,
LOG_DEBUG("entities.player", "WORLD: cast {} Equip spellId - {}", (item ? "item" : "itemset"), spellInfo->Id);
//Ignore spellInfo->DurationEntry, cast with -1 duration
CastCustomSpell(spellInfo->Id, SPELLVALUE_AURA_DURATION, -1, this, true, item);
CastSpell(this, spellInfo, true, item);
}
else
{

View File

@ -2579,7 +2579,6 @@ public:
[[nodiscard]] bool CanFly() const override { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); }
[[nodiscard]] bool CanEnterWater() const override { return true; }
// OURS
// saving
void AdditionalSavingAddMask(uint8 mask) { m_additionalSaveTimer = 2000; m_additionalSaveMask |= mask; }
// arena spectator

View File

@ -51,17 +51,17 @@ void Totem::InitStats(uint32 duration)
if (Unit* owner = ObjectAccessor::GetUnit(*this, m_owner))
{
uint32 slot = m_Properties->Slot;
if (owner->IsPlayer() && slot >= SUMMON_SLOT_TOTEM && slot < MAX_TOTEM_SLOT)
if (owner->IsPlayer() && slot >= SUMMON_SLOT_TOTEM_FIRE && slot < MAX_TOTEM_SLOT)
{
WorldPackets::Totem::TotemCreated data;
data.Totem = GetGUID();
data.Slot = slot - SUMMON_SLOT_TOTEM;
data.Slot = slot - SUMMON_SLOT_TOTEM_FIRE;
data.Duration = duration;
data.SpellID = GetUInt32Value(UNIT_CREATED_BY_SPELL);
owner->ToPlayer()->SendDirectMessage(data.Write());
// set display id depending on caster's race
SetDisplayId(owner->GetModelForTotem(PlayerTotemType(m_Properties->Id)));
SetDisplayId(sObjectMgr->GetModelForTotem(SummonSlot(slot), Races(owner->getRace())));
}
SetLevel(owner->GetLevel());
@ -133,7 +133,7 @@ void Totem::UnSummon(uint32 msTime)
if (Unit* owner = GetOwner())
{
// clear owner's totem slot
for (uint8 i = SUMMON_SLOT_TOTEM; i < MAX_TOTEM_SLOT; ++i)
for (uint8 i = SUMMON_SLOT_TOTEM_FIRE; i < MAX_TOTEM_SLOT; ++i)
{
if (owner->m_SummonSlot[i] == GetGUID())
{

View File

@ -424,7 +424,7 @@ void Unit::Update(uint32 p_time)
SendThreatListUpdate();
// update combat timer only for players and pets (only pets with PetAI)
if (IsInCombat() && (IsPlayer() || ((IsPet() || HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN)) && IsControlledByPlayer())))
if (IsInCombat() && (IsPlayer() || ((IsPet() || HasUnitTypeMask(UNIT_MASK_CONTROLLABLE_GUARDIAN)) && IsControlledByPlayer())))
{
// Check UNIT_STATE_MELEE_ATTACKING or UNIT_STATE_CHASE (without UNIT_STATE_FOLLOW in this case) so pets can reach far away
// targets without stopping half way there and running off.
@ -10776,7 +10776,7 @@ void Unit::SetMinion(Minion* minion, bool apply)
}
}
if (minion->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
if (minion->HasUnitTypeMask(UNIT_MASK_CONTROLLABLE_GUARDIAN))
{
AddGuidValue(UNIT_FIELD_SUMMON, minion->GetGUID());
}
@ -10871,7 +10871,7 @@ void Unit::SetMinion(Minion* minion, bool apply)
}
ASSERT((*itr)->IsCreature());
if (!(*itr)->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
if (!(*itr)->HasUnitTypeMask(UNIT_MASK_CONTROLLABLE_GUARDIAN))
continue;
if (AddGuidValue(UNIT_FIELD_SUMMON, (*itr)->GetGUID()))
@ -11686,7 +11686,7 @@ uint32 Unit::SpellDamageBonusDone(Unit* victim, SpellInfo const* spellProto, uin
int32 DoneTotal = 0;
float DoneTotalMod = TotalMod ? TotalMod : SpellPctDamageModsDone(victim, spellProto, damagetype);
// Config : RATE_CREATURE_X_SPELLDAMAGE & Do Not Modify Pet/Guardian/Mind Controled Damage
// Config : RATE_CREATURE_X_SPELLDAMAGE & Do Not Modify Pet/Guardian/Mind Controlled Damage
if (IsCreature() && (!ToCreature()->IsPet() || !ToCreature()->IsGuardian() || !ToCreature()->IsControlledByPlayer()))
DoneTotalMod *= ToCreature()->GetSpellDamageMod(ToCreature()->GetCreatureTemplate()->rank);
@ -13503,7 +13503,7 @@ float Unit::GetPPMProcChance(uint32 WeaponSpeed, float PPM, SpellInfo const* spe
if (Player* modOwner = GetSpellModOwner())
modOwner->ApplySpellMod(spellProto->Id, SPELLMOD_PROC_PER_MINUTE, PPM);
return std::floor((WeaponSpeed * PPM) / 600.0f); // result is chance in percents (probability = Speed_in_sec * (PPM / 60))
return (WeaponSpeed * PPM) / 600.0f; // result is chance in percents (probability = Speed_in_sec * (PPM / 60))
}
void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
@ -14681,7 +14681,7 @@ bool Unit::CanHaveThreatList(bool skipAliveCheck) const
return false;
// summons can not have a threat list, unless they are controlled by a creature
if (HasUnitTypeMask(UNIT_MASK_MINION | UNIT_MASK_GUARDIAN | UNIT_MASK_CONTROLABLE_GUARDIAN) && ((Pet*)this)->GetOwnerGUID().IsPlayer())
if (HasUnitTypeMask(UNIT_MASK_MINION | UNIT_MASK_GUARDIAN | UNIT_MASK_CONTROLLABLE_GUARDIAN) && ((Pet*)this)->GetOwnerGUID().IsPlayer())
return false;
return true;
@ -14837,7 +14837,7 @@ Unit* Creature::SelectVictim()
// it in combat but attacker not make any damage and not enter to aggro radius to have record in threat list
// Note: creature does not have targeted movement generator but has attacker in this case
for (AttackerSet::const_iterator itr = m_attackers.begin(); itr != m_attackers.end(); ++itr)
if ((*itr) && CanCreatureAttack(*itr) && !(*itr)->IsPlayer() && !(*itr)->ToCreature()->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
if ((*itr) && CanCreatureAttack(*itr) && !(*itr)->IsPlayer() && !(*itr)->ToCreature()->HasUnitTypeMask(UNIT_MASK_CONTROLLABLE_GUARDIAN))
return nullptr;
if (GetVehicle())
@ -17555,16 +17555,30 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, WeaponAttackTyp
// If PPM exist calculate chance from PPM
if (spellProcEvent && spellProcEvent->ppmRate != 0)
{
uint32 attackSpeed = 0;
Unit* attacker = nullptr;
if (!isVictim)
{
uint32 WeaponSpeed = GetAttackTime(attType);
chance = GetPPMProcChance(WeaponSpeed, spellProcEvent->ppmRate, spellProto);
}
attacker = this;
else if (victim)
attacker = victim;
if (attacker)
{
uint32 WeaponSpeed = victim->GetAttackTime(attType);
chance = victim->GetPPMProcChance(WeaponSpeed, spellProcEvent->ppmRate, spellProto);
if (!procSpell || procSpell->DmgClass == SPELL_DAMAGE_CLASS_MELEE || procSpell->IsRangedWeaponSpell())
{
attackSpeed = attacker->GetAttackTime(attType);
}
else //spells user their casttime for ppm calculations
{
if (procSpell->CastTimeEntry)
attackSpeed = procSpell->CastTimeEntry->CastTime;
//instants and fast spells use 1.5s castspeed
if (attackSpeed < 1500)
attackSpeed = 1500;
}
}
chance = GetPPMProcChance(attackSpeed, spellProcEvent->ppmRate, spellProto);
}
// Custom chances
@ -19230,7 +19244,7 @@ uint32 Unit::GetCombatRatingDamageReduction(CombatRating cr, float rate, float c
return CalculatePct(damage, percent);
}
uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const
uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId)
{
// Hardcoded cases
switch (spellId)
@ -19245,177 +19259,8 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const
if (IsPlayer())
{
switch (form)
{
case FORM_CAT:
// Based on Hair color
if (getRace() == RACE_NIGHTELF)
{
uint8 hairColor = GetByteValue(PLAYER_BYTES, 3);
switch (hairColor)
{
case 7: // Violet
case 8:
return 29405;
case 3: // Light Blue
return 29406;
case 0: // Green
case 1: // Light Green
case 2: // Dark Green
return 29407;
case 4: // White
return 29408;
default: // original - Dark Blue
return 892;
}
}
// Based on Skin color
else if (getRace() == RACE_TAUREN)
{
uint8 skinColor = GetByteValue(PLAYER_BYTES, 0);
// Male
if (getGender() == GENDER_MALE)
{
switch (skinColor)
{
case 12: // White
case 13:
case 14:
case 18: // Completly White
return 29409;
case 9: // Light Brown
case 10:
case 11:
return 29410;
case 6: // Brown
case 7:
case 8:
return 29411;
case 0: // Dark
case 1:
case 2:
case 3: // Dark Grey
case 4:
case 5:
return 29412;
default: // original - Grey
return 8571;
}
}
// Female
else switch (skinColor)
{
case 10: // White
return 29409;
case 6: // Light Brown
case 7:
return 29410;
case 4: // Brown
case 5:
return 29411;
case 0: // Dark
case 1:
case 2:
case 3:
return 29412;
default: // original - Grey
return 8571;
}
}
else if (Player::TeamIdForRace(getRace()) == TEAM_ALLIANCE)
return 892;
else
return 8571;
case FORM_DIREBEAR:
case FORM_BEAR:
// Based on Hair color
if (getRace() == RACE_NIGHTELF)
{
uint8 hairColor = GetByteValue(PLAYER_BYTES, 3);
switch (hairColor)
{
case 0: // Green
case 1: // Light Green
case 2: // Dark Green
return 29413; // 29415?
case 6: // Dark Blue
return 29414;
case 4: // White
return 29416;
case 3: // Light Blue
return 29417;
default: // original - Violet
return 2281;
}
}
// Based on Skin color
else if (getRace() == RACE_TAUREN)
{
uint8 skinColor = GetByteValue(PLAYER_BYTES, 0);
// Male
if (getGender() == GENDER_MALE)
{
switch (skinColor)
{
case 0: // Dark (Black)
case 1:
case 2:
return 29418;
case 3: // White
case 4:
case 5:
case 12:
case 13:
case 14:
return 29419;
case 9: // Light Brown/Grey
case 10:
case 11:
case 15:
case 16:
case 17:
return 29420;
case 18: // Completly White
return 29421;
default: // original - Brown
return 2289;
}
}
// Female
else switch (skinColor)
{
case 0: // Dark (Black)
case 1:
return 29418;
case 2: // White
case 3:
return 29419;
case 6: // Light Brown/Grey
case 7:
case 8:
case 9:
return 29420;
case 10: // Completly White
return 29421;
default: // original - Brown
return 2289;
}
}
else if (Player::TeamIdForRace(getRace()) == TEAM_ALLIANCE)
return 2281;
else
return 2289;
case FORM_FLIGHT:
if (Player::TeamIdForRace(getRace()) == TEAM_ALLIANCE)
return 20857;
return 20872;
case FORM_FLIGHT_EPIC:
if (Player::TeamIdForRace(getRace()) == TEAM_ALLIANCE)
return 21243;
return 21244;
default:
break;
}
if (uint32 ModelId = sObjectMgr->GetModelForShapeshift(form, ToPlayer()))
return ModelId;
}
uint32 modelid = 0;
@ -19441,104 +19286,6 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const
return modelid;
}
uint32 Unit::GetModelForTotem(PlayerTotemType totemType)
{
switch (getRace())
{
case RACE_ORC:
{
switch (totemType)
{
case SUMMON_TYPE_TOTEM_FIRE: // fire
return 30758;
case SUMMON_TYPE_TOTEM_EARTH: // earth
return 30757;
case SUMMON_TYPE_TOTEM_WATER: // water
return 30759;
case SUMMON_TYPE_TOTEM_AIR: // air
return 30756;
}
break;
}
case RACE_DWARF:
{
switch (totemType)
{
case SUMMON_TYPE_TOTEM_FIRE: // fire
return 30754;
case SUMMON_TYPE_TOTEM_EARTH: // earth
return 30753;
case SUMMON_TYPE_TOTEM_WATER: // water
return 30755;
case SUMMON_TYPE_TOTEM_AIR: // air
return 30736;
}
break;
}
case RACE_TROLL:
{
switch (totemType)
{
case SUMMON_TYPE_TOTEM_FIRE: // fire
return 30762;
case SUMMON_TYPE_TOTEM_EARTH: // earth
return 30761;
case SUMMON_TYPE_TOTEM_WATER: // water
return 30763;
case SUMMON_TYPE_TOTEM_AIR: // air
return 30760;
}
break;
}
case RACE_TAUREN:
{
switch (totemType)
{
case SUMMON_TYPE_TOTEM_FIRE: // fire
return 4589;
case SUMMON_TYPE_TOTEM_EARTH: // earth
return 4588;
case SUMMON_TYPE_TOTEM_WATER: // water
return 4587;
case SUMMON_TYPE_TOTEM_AIR: // air
return 4590;
}
break;
}
case RACE_DRAENEI:
{
switch (totemType)
{
case SUMMON_TYPE_TOTEM_FIRE: // fire
return 19074;
case SUMMON_TYPE_TOTEM_EARTH: // earth
return 19073;
case SUMMON_TYPE_TOTEM_WATER: // water
return 19075;
case SUMMON_TYPE_TOTEM_AIR: // air
return 19071;
}
break;
}
default: // One standard for other races.
{
switch (totemType)
{
case SUMMON_TYPE_TOTEM_FIRE: // fire
return 4589;
case SUMMON_TYPE_TOTEM_EARTH: // earth
return 4588;
case SUMMON_TYPE_TOTEM_WATER: // water
return 4587;
case SUMMON_TYPE_TOTEM_AIR: // air
return 4590;
}
break;
}
}
return 0;
}
Unit* Unit::GetRedirectThreatTarget() const
{
return _redirectThreatInfo.GetTargetGUID() ? ObjectAccessor::GetUnit(*this, _redirectThreatInfo.GetTargetGUID()) : nullptr;
@ -20247,11 +19994,11 @@ void Unit::StopAttackingInvalidTarget()
attacker->ToPlayer()->SendAttackSwingCancelAttack();
}
for (Unit* controled : attacker->m_Controlled)
for (Unit* controlled : attacker->m_Controlled)
{
if (controled->GetVictim() == this && !controled->IsValidAttackTarget(this))
if (controlled->GetVictim() == this && !controlled->IsValidAttackTarget(this))
{
controled->AttackStop();
controlled->AttackStop();
}
}

View File

@ -26,6 +26,7 @@
#include "ItemTemplate.h"
#include "MotionMaster.h"
#include "Object.h"
#include "SharedDefines.h"
#include "SpellAuraDefines.h"
#include "SpellDefines.h"
#include "ThreatMgr.h"
@ -599,23 +600,6 @@ enum ReactiveType
MAX_REACTIVE
};
#define SUMMON_SLOT_PET 0
#define SUMMON_SLOT_TOTEM 1
#define MAX_TOTEM_SLOT 5
#define SUMMON_SLOT_MINIPET 5
#define SUMMON_SLOT_QUEST 6
#define MAX_SUMMON_SLOT 7
#define MAX_GAMEOBJECT_SLOT 4
enum PlayerTotemType
{
SUMMON_TYPE_TOTEM_FIRE = 63,
SUMMON_TYPE_TOTEM_EARTH = 81,
SUMMON_TYPE_TOTEM_WATER = 82,
SUMMON_TYPE_TOTEM_AIR = 83,
};
/// Spell cooldown flags sent in SMSG_SPELL_COOLDOWN
enum SpellCooldownFlags
{
@ -759,7 +743,7 @@ public:
// Unit type methods
[[nodiscard]] bool IsSummon() const { return m_unitTypeMask & UNIT_MASK_SUMMON; }
[[nodiscard]] bool IsGuardian() const { return m_unitTypeMask & UNIT_MASK_GUARDIAN; }
[[nodiscard]] bool IsControllableGuardian() const { return m_unitTypeMask & UNIT_MASK_CONTROLABLE_GUARDIAN; }
[[nodiscard]] bool IsControllableGuardian() const { return m_unitTypeMask & UNIT_MASK_CONTROLLABLE_GUARDIAN; }
[[nodiscard]] bool IsPet() const { return m_unitTypeMask & UNIT_MASK_PET; }
[[nodiscard]] bool IsHunterPet() const { return m_unitTypeMask & UNIT_MASK_HUNTER_PET; }
[[nodiscard]] bool IsTotem() const { return m_unitTypeMask & UNIT_MASK_TOTEM; }
@ -1897,8 +1881,7 @@ public:
void RestoreDisplayId();
void SetNativeDisplayId(uint32 displayId) { SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, displayId); }
[[nodiscard]] uint32 GetModelForForm(ShapeshiftForm form, uint32 spellId) const;
uint32 GetModelForTotem(PlayerTotemType totemType);
[[nodiscard]] uint32 GetModelForForm(ShapeshiftForm form, uint32 spellId);
// Unit positons
[[nodiscard]] virtual bool IsInWater() const;

View File

@ -161,7 +161,7 @@ enum UnitTypeMask
UNIT_MASK_VEHICLE = 0x00000020,
UNIT_MASK_PUPPET = 0x00000040,
UNIT_MASK_HUNTER_PET = 0x00000080,
UNIT_MASK_CONTROLABLE_GUARDIAN = 0x00000100,
UNIT_MASK_CONTROLLABLE_GUARDIAN = 0x00000100,
UNIT_MASK_ACCESSORY = 0x00000200
};

View File

@ -1785,6 +1785,139 @@ void ObjectMgr::LoadCreatureModelInfo()
LOG_INFO("server.loading", " ");
}
void ObjectMgr::LoadPlayerTotemModels()
{
uint32 oldMSTime = getMSTime();
QueryResult result = WorldDatabase.Query("SELECT TotemID, RaceID, ModelID from player_totem_model");
if (!result)
{
LOG_INFO("server.loading", ">> Loaded 0 player totem model records. DB table `player_totem_model` is empty.");
return;
}
uint32 count = 0;
do
{
Field* fields = result->Fetch();
SummonSlot totemSlot = SummonSlot(fields[0].Get<uint8>());
uint8 race = fields[1].Get<uint8>();
uint32 displayId = fields[2].Get<uint32>();
if (totemSlot < SUMMON_SLOT_TOTEM_FIRE || totemSlot >= MAX_TOTEM_SLOT)
{
LOG_ERROR("sql.sql", "Wrong TotemSlot {} in `player_totem_model` table, skipped.", totemSlot);
continue;
}
ChrRacesEntry const* raceEntry = sChrRacesStore.LookupEntry(race);
if (!raceEntry)
{
LOG_ERROR("sql.sql", "Race {} defined in `player_totem_model` does not exists, skipped.", uint32(race));
continue;
}
CreatureDisplayInfoEntry const* displayEntry = sCreatureDisplayInfoStore.LookupEntry(displayId);
if (!displayEntry)
{
LOG_ERROR("sql.sql", "TotemSlot: {} defined in `player_totem_model` has non-existing model ({}), skipped.", totemSlot, displayId);
continue;
}
_playerTotemModel[std::make_pair(totemSlot, Races(race))] = displayId;
++count;
} while (result->NextRow());
LOG_INFO("server.loading", ">> Loaded {} player totem model records in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
uint32 ObjectMgr::GetModelForTotem(SummonSlot totemSlot, Races race) const
{
auto itr = _playerTotemModel.find(std::make_pair(totemSlot, race));
if (itr != _playerTotemModel.end())
return itr->second;
LOG_ERROR("misc", "TotemSlot {} with RaceID ({}) have no totem model data defined, set to default model.", totemSlot, race);
return 0;
}
void ObjectMgr::LoadPlayerShapeshiftModels()
{
uint32 oldMSTime = getMSTime();
QueryResult result = WorldDatabase.Query("SELECT ShapeshiftID, RaceID, CustomizationID, GenderID, ModelID from player_shapeshift_model");
if (!result)
{
LOG_INFO("server.loading", ">> Loaded 0 player shapeshift model records. DB table `player_shapeshift_model` is empty.");
return;
}
uint32 count = 0;
do
{
Field* fields = result->Fetch();
ShapeshiftForm shapeshiftForm = ShapeshiftForm(fields[0].Get<uint8>());
uint8 race = fields[1].Get<uint8>();
uint8 customizationID = fields[2].Get<uint8>();
uint8 genderID = Gender(fields[3].Get<uint8>());
uint32 modelId = fields[4].Get<uint32>();
ChrRacesEntry const* raceEntry = sChrRacesStore.LookupEntry(race);
if (!raceEntry)
{
LOG_ERROR("sql.sql", "Race {} defined in `player_shapeshift_model` does not exists, skipped.", uint32(race));
continue;
}
CreatureDisplayInfoEntry const* displayEntry = sCreatureDisplayInfoStore.LookupEntry(modelId);
if (!displayEntry)
{
LOG_ERROR("sql.sql", "ShapeshiftForm: {}, Race: {} defined in `player_shapeshift_model` has non-existing model ({}), skipped.", shapeshiftForm, race, modelId);
continue;
}
_playerShapeshiftModel[std::make_tuple(shapeshiftForm, race, customizationID, genderID)] = modelId;
++count;
} while (result->NextRow());
LOG_INFO("server.loading", ">> Loaded {} player totem model records in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
LOG_INFO("server.loading", " ");
}
uint32 ObjectMgr::GetModelForShapeshift(ShapeshiftForm form, Player* player) const
{
uint8 customizationID;
if (player->GetTeamId() == TEAM_ALLIANCE)
customizationID = player->GetByteValue(PLAYER_BYTES, 3); // Use Hair Color
else
customizationID = player->GetByteValue(PLAYER_BYTES, 0); // Use Skin Color
auto itr = _playerShapeshiftModel.find(std::make_tuple(form, player->getRace(), customizationID, player->getGender()));
if (itr != _playerShapeshiftModel.end())
return itr->second; // Explicit combination
itr = _playerShapeshiftModel.find(std::make_tuple(form, player->getRace(), customizationID, GENDER_NONE));
if (itr != _playerShapeshiftModel.end())
return itr->second; // Combination applied to both genders
itr = _playerShapeshiftModel.find(std::make_tuple(form, player->getRace(), 255, player->getGender()));
if (itr != _playerShapeshiftModel.end())
return itr->second; // Default gender-dependent model
itr = _playerShapeshiftModel.find(std::make_tuple(form, player->getRace(), 255, GENDER_NONE));
if (itr != _playerShapeshiftModel.end())
return itr->second; // Last resort
LOG_DEBUG("entities.player", "ShapeshiftForm {} with RaceID ({}) have no shapeshift model data defined, using fallback data.", form, player->getRace());
return 0;
}
void ObjectMgr::LoadLinkedRespawn()
{
uint32 oldMSTime = getMSTime();

View File

@ -711,6 +711,10 @@ struct DungeonEncounter
typedef std::list<DungeonEncounter const*> DungeonEncounterList;
typedef std::unordered_map<uint32, DungeonEncounterList> DungeonEncounterContainer;
typedef std::map<std::pair<SummonSlot /*TotemSlot*/, Races /*RaceId*/>, uint32 /*DisplayId*/> PlayerTotemModelMap;
typedef std::map<std::tuple<ShapeshiftForm /*ShapeshiftID*/, uint8 /*RaceID*/, uint8 /*CustomizationID*/, uint8 /*GenderID*/>, uint32 /*ModelID*/> PlayerShapeshiftModelMap;
static constexpr uint32 MAX_QUEST_MONEY_REWARDS = 10;
typedef std::array<uint32, MAX_QUEST_MONEY_REWARDS> QuestMoneyRewardArray;
typedef std::unordered_map<uint32, QuestMoneyRewardArray> QuestMoneyRewardStore;
@ -777,6 +781,10 @@ public:
[[nodiscard]] ItemTemplateContainer const* GetItemTemplateStore() const { return &_itemTemplateStore; }
[[nodiscard]] std::vector<ItemTemplate*> const* GetItemTemplateStoreFast() const { return &_itemTemplateStoreFast; }
uint32 GetModelForTotem(SummonSlot totemSlot, Races race) const;
uint32 GetModelForShapeshift(ShapeshiftForm form, Player* player) const;
ItemSetNameEntry const* GetItemSetNameEntry(uint32 itemId)
{
ItemSetNameContainer::iterator itr = _itemSetNameStore.find(itemId);
@ -1035,6 +1043,8 @@ public:
void LoadCreatureAddons();
void LoadGameObjectAddons();
void LoadCreatureModelInfo();
void LoadPlayerTotemModels();
void LoadPlayerShapeshiftModels();
void LoadEquipmentTemplates();
void LoadCreatureMovementOverrides();
void LoadGameObjectLocales();
@ -1622,6 +1632,10 @@ private:
std::set<uint32> _transportMaps; // Helper container storing map ids that are for transports only, loaded from gameobject_template
PlayerTotemModelMap _playerTotemModel;
PlayerShapeshiftModelMap _playerShapeshiftModel;
QuestMoneyRewardStore _questMoneyRewards;
struct GameobjectInstanceSavedState

View File

@ -1444,7 +1444,7 @@ void Guild::HandleInviteMember(WorldSession* session, std::string const& name)
if (pInvitee->GetSocial()->HasIgnore(player->GetGUID()))
return;
uint32 memberLimit = sConfigMgr->GetOption<uint32>("Guild.MemberLimit", 0);
uint32 memberLimit = sWorld->getIntConfig(CONFIG_GUILD_MEMBER_LIMIT);
if (memberLimit > 0 && player->GetGuild()->GetMemberCount() >= memberLimit)
{
ChatHandler(player->GetSession()).PSendSysMessage("Your guild has reached the maximum amount of members ({}). You cannot send another invite until the guild member count is lower.", memberLimit);

View File

@ -699,7 +699,7 @@ public:
void HandleSetEmblem(WorldSession* session, const EmblemInfo& emblemInfo);
void HandleSetLeader(WorldSession* session, std::string_view name);
void HandleSetBankTabInfo(WorldSession* session, uint8 tabId, std::string_view name, std::string_view icon);
void HandleSetMemberNote(WorldSession* session, std::string_view name, std::string_view note, bool officer);
void HandleSetMemberNote(WorldSession* session, std::string_view name, std::string_view note, bool isPublic);
void HandleSetRankInfo(WorldSession* session, uint8 rankId, std::string_view name, uint32 rights, uint32 moneyPerDay, std::array<GuildBankRightsAndSlots, GUILD_BANK_MAX_TABS> const& rightsAndSlots);
void HandleBuyBankTab(WorldSession* session, uint8 tabId);
void HandleInviteMember(WorldSession* session, std::string const& name);

View File

@ -300,7 +300,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe
//dismissing a summoned pet is like killing them (this prevents returning a soulshard...)
pet->setDeathState(DeathState::Corpse);
}
else if (pet->HasUnitTypeMask(UNIT_MASK_MINION | UNIT_MASK_SUMMON | UNIT_MASK_GUARDIAN | UNIT_MASK_CONTROLABLE_GUARDIAN))
else if (pet->HasUnitTypeMask(UNIT_MASK_MINION | UNIT_MASK_SUMMON | UNIT_MASK_GUARDIAN | UNIT_MASK_CONTROLLABLE_GUARDIAN))
{
pet->ToTempSummon()->UnSummon();
}

View File

@ -686,7 +686,7 @@ void WorldSession::HandleTotemDestroyed(WorldPackets::Totem::TotemDestroyed& tot
return;
uint8 slotId = totemDestroyed.Slot;
slotId += SUMMON_SLOT_TOTEM;
slotId += SUMMON_SLOT_TOTEM_FIRE;
if (slotId >= MAX_TOTEM_SLOT)
return;

View File

@ -58,11 +58,7 @@ uint32 ScriptMgr::DealDamage(Unit* AttackerUnit, Unit* pVictim, uint32 damage, D
for (auto const& [scriptID, script] : ScriptRegistry<UnitScript>::ScriptPointerList)
{
auto const& dmg = script->DealDamage(AttackerUnit, pVictim, damage, damagetype);
if (dmg != damage)
{
return damage;
}
damage = script->DealDamage(AttackerUnit, pVictim, damage, damagetype);
}
return damage;

View File

@ -3679,13 +3679,6 @@ void AuraEffect::HandleAuraControlVehicle(AuraApplication const* aurApp, uint8 m
}
else
{
if (GetId() == 53111) // Devour Humanoid
{
Unit::Kill(target, caster);
if (caster->IsCreature())
caster->ToCreature()->RemoveCorpse();
}
caster->_ExitVehicle();
// some SPELL_AURA_CONTROL_VEHICLE auras have a dummy effect on the player - remove them
caster->RemoveAurasDueToSpell(GetId());
@ -6859,8 +6852,10 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c
heal = uint32(caster->SpellHealingBonusTaken(caster, GetSpellInfo(), heal, DOT, GetBase()->GetStackAmount()));
HealInfo healInfo(caster, caster, heal, GetSpellInfo(), GetSpellInfo()->GetSchoolMask());
int32 gain = caster->HealBySpell(healInfo);
caster->getHostileRefMgr().threatAssist(caster, gain * 0.5f, GetSpellInfo());
float threat = float(caster->HealBySpell(healInfo)) * 0.5f;
if (caster->IsClass(CLASS_PALADIN))
threat *= 0.5f;
caster->getHostileRefMgr().threatAssist(caster, threat, GetSpellInfo());
}
void AuraEffect::HandlePeriodicHealthFunnelAuraTick(Unit* target, Unit* caster) const
@ -7007,7 +7002,13 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const
target->SendPeriodicAuraLog(&pInfo);
if (caster)
target->getHostileRefMgr().threatAssist(caster, float(gain) * 0.5f, GetSpellInfo());
{
float threat = float(gain) * 0.5f;
if (caster->IsClass(CLASS_PALADIN))
threat *= 0.5f;
target->getHostileRefMgr().threatAssist(caster, threat, GetSpellInfo());
}
bool haveCastItem = GetBase()->GetCastItemGUID();

View File

@ -2808,7 +2808,11 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
}
int32 gain = caster->HealBySpell(healInfo, crit);
unitTarget->getHostileRefMgr().threatAssist(caster, float(gain) * 0.5f, m_spellInfo);
float threat = float(gain) * 0.5f;
if (caster->IsClass(CLASS_PALADIN))
threat *= 0.5f;
unitTarget->getHostileRefMgr().threatAssist(caster, threat, m_spellInfo);
m_healing = gain;
// Xinef: if heal acutally healed something, add no overheal flag
@ -3451,7 +3455,7 @@ bool Spell::UpdateChanneledTargetList()
continue;
}
// Xinef: Update Orientation server side (non players wont sent appropriate packets)
else if (m_spellInfo->HasAttribute(SPELL_ATTR1_TRACK_TARGET_IN_CHANNEL))
else if (!m_caster->IsPlayer() && m_spellInfo->HasAttribute(SPELL_ATTR1_TRACK_TARGET_IN_CHANNEL))
m_caster->UpdateOrientation(m_caster->GetAngle(unit));
}
}

View File

@ -3428,11 +3428,6 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex)
spell_bonus += int32(0.08f * m_caster->GetTotalAttackPowerValue(BASE_ATTACK));
spell_bonus += int32(0.13f * m_caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()));
break;
case 42463: // Seals of the Pure for Seal of Vengeance/Corruption
case 53739:
if (AuraEffect const* sealsOfPure = m_caster->GetAuraEffect(SPELL_AURA_ADD_PCT_MODIFIER, SPELLFAMILY_PALADIN, 25, 0))
AddPct(totalDamagePercentMod, sealsOfPure->GetAmount());
break;
case 53385: // Divine Storm deals normalized damage
normalized = true;
break;
@ -3532,9 +3527,7 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex)
// Blood-Caked Strike - Blood-Caked Blade
if (m_spellInfo->SpellIconID == 1736)
{
int32 weaponDamage = m_caster->CalculateDamage(m_attackType, false, true);
ApplyPct(weaponDamage, std::min(uint32(3), unitTarget->GetDiseasesByCaster(m_caster->GetGUID())) * 12.5f);
spell_bonus = weaponDamage;
AddPct(totalDamagePercentMod, unitTarget->GetDiseasesByCaster(m_caster->GetGUID()) * 50.0f);
break;
}
// Heart Strike
@ -3581,30 +3574,26 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex)
}
}
// apply to non-weapon bonus weapon total pct effect, weapon total flat effect included in weapon damage
if (fixed_bonus || spell_bonus)
bool const isPhysical = (m_spellSchoolMask & SPELL_SCHOOL_MASK_NORMAL);
if (isPhysical && (fixed_bonus || spell_bonus))
{
UnitMods unitMod;
switch (m_attackType)
{
default:
case BASE_ATTACK:
unitMod = UNIT_MOD_DAMAGE_MAINHAND;
break;
case OFF_ATTACK:
unitMod = UNIT_MOD_DAMAGE_OFFHAND;
break;
case RANGED_ATTACK:
unitMod = UNIT_MOD_DAMAGE_RANGED;
break;
}
if (m_spellSchoolMask & SPELL_SCHOOL_MASK_NORMAL)
{
float weapon_total_pct = m_caster->GetModifierValue(unitMod, TOTAL_PCT);
fixed_bonus = int32(fixed_bonus * weapon_total_pct);
spell_bonus = int32(spell_bonus * weapon_total_pct);
default:
case BASE_ATTACK:
unitMod = UNIT_MOD_DAMAGE_MAINHAND;
break;
case OFF_ATTACK:
unitMod = UNIT_MOD_DAMAGE_OFFHAND;
break;
case RANGED_ATTACK:
unitMod = UNIT_MOD_DAMAGE_RANGED;
break;
}
float weapon_total_pct = m_caster->GetModifierValue(unitMod, TOTAL_PCT);
fixed_bonus = int32(fixed_bonus * weapon_total_pct);
spell_bonus = int32(spell_bonus * weapon_total_pct);
}
int32 weaponDamage = 0;
@ -3612,15 +3601,11 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex)
if (m_caster->GetEntry() == 27893)
{
if (Unit* owner = m_caster->GetOwner())
weaponDamage = owner->CalculateDamage(m_attackType, normalized, true);
}
else if (m_spellInfo->Id == 5019) // Wands
{
weaponDamage = m_caster->CalculateDamage(m_attackType, true, false);
weaponDamage = owner->CalculateDamage(m_attackType, normalized, isPhysical);
}
else
{
weaponDamage = m_caster->CalculateDamage(m_attackType, normalized, true);
weaponDamage = m_caster->CalculateDamage(m_attackType, normalized, isPhysical);
}
// Sequence is important
@ -3952,7 +3937,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
{
int32 basepoints0 = damage;
// Cast Absorb on totems
for (uint8 slot = SUMMON_SLOT_TOTEM; slot < MAX_TOTEM_SLOT; ++slot)
for (uint8 slot = SUMMON_SLOT_TOTEM_FIRE; slot < MAX_TOTEM_SLOT; ++slot)
{
if (!unitTarget->m_SummonSlot[slot])
continue;
@ -5260,7 +5245,7 @@ void Spell::EffectDestroyAllTotems(SpellEffIndex /*effIndex*/)
return;
int32 mana = 0;
for (uint8 slot = SUMMON_SLOT_TOTEM; slot < MAX_TOTEM_SLOT; ++slot)
for (uint8 slot = SUMMON_SLOT_TOTEM_FIRE; slot < MAX_TOTEM_SLOT; ++slot)
{
if (!m_caster->m_SummonSlot[slot])
continue;

View File

@ -2126,6 +2126,7 @@ AuraStateType SpellInfo::LoadAuraState() const
case 20656:
case 25602:
case 32129:
case 49163: // Perpetual Instability (Element 115)
return AURA_STATE_FAERIE_FIRE;
default:
break;
@ -2644,14 +2645,6 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
switch (Effects[effIndex].Effect)
{
case SPELL_EFFECT_DUMMY:
// some explicitly required dummy effect sets
switch (Id)
{
default:
break;
}
break;
// always positive effects (check before target checks that provided non-positive result in some case for positive effects)
case SPELL_EFFECT_HEAL:
case SPELL_EFFECT_LEARN_SPELL:
@ -2661,10 +2654,8 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
return true;
case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY:
return false;
case SPELL_EFFECT_GAMEOBJECT_DAMAGE:
return false;
case SPELL_EFFECT_SCHOOL_DAMAGE:
{
bool only = true;
@ -2688,7 +2679,6 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
return false;
break;
}
// non-positive aura use
case SPELL_EFFECT_APPLY_AURA:
case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND:

View File

@ -230,15 +230,6 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->MaxAffectedTargets = 4;
});
ApplySpellFix({
20424, // Seal of Command
42463, // Seal of Vengeance
53739 // Seal of Corruption
}, [](SpellInfo* spellInfo)
{
spellInfo->AttributesEx3 |= SPELL_ATTR3_IGNORE_CASTER_MODIFIERS;
});
// Spitfire Totem
ApplySpellFix({ 38296 }, [](SpellInfo* spellInfo)
{
@ -3580,7 +3571,7 @@ void SpellMgr::LoadSpellInfoCorrections()
// That's Abominable
ApplySpellFix({ 59565 }, [](SpellInfo* spellInfo)
{
spellInfo->Effects[EFFECT_0].MiscValueB = 1721; // controlable guardian
spellInfo->Effects[EFFECT_0].MiscValueB = 1721; // controllable guardian
});
// Investigate the Blue Recluse (1920)
@ -5105,6 +5096,13 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->AttributesEx6 |= SPELL_ATTR6_ALLOW_WHILE_RIDING_VEHICLE;
});
// Eye of Acherus Flight (Boost)
ApplySpellFix({ 51923 }, [](SpellInfo* spellInfo)
{
spellInfo->Effects[EFFECT_0].ApplyAuraName = SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED;
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_CASTER);
});
// Shattering Throw
ApplySpellFix({ 64382 }, [](SpellInfo* spellInfo)
{
@ -5116,13 +5114,29 @@ void SpellMgr::LoadSpellInfoCorrections()
43444, // Explosive Trap (Hex Lord Malacrass)
43447, // Freezing Trap (Hex Lord Malacrass)
43449, // Snake Trap (Hex Lord Malacrass)
45236, // Blaze
50745 // Blaze
}, [](SpellInfo* spellInfo)
{
spellInfo->Effects[EFFECT_0].Effect = SPELL_EFFECT_SUMMON_OBJECT_SLOT1;
});
// Arcane Missiles
ApplySpellFix({ 58529, 61592 }, [](SpellInfo* spellInfo)
{
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
});
// Siphon Bloodgem
ApplySpellFix({ 34367 }, [](SpellInfo* spellInfo)
{
spellInfo->ChannelInterruptFlags &= ~AURA_INTERRUPT_FLAG_TURNING;
});
// The Green Tower
ApplySpellFix({ 18097 }, [](SpellInfo* spellInfo)
{
spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(21); // -1
});
for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i)
{
SpellInfo* spellInfo = mSpellInfoMap[i];

View File

@ -411,6 +411,7 @@ enum WorldIntConfigs
CONFIG_GUILD_BANK_TAB_COST_3,
CONFIG_GUILD_BANK_TAB_COST_4,
CONFIG_GUILD_BANK_TAB_COST_5,
CONFIG_GUILD_MEMBER_LIMIT,
CONFIG_GM_LEVEL_CHANNEL_MODERATION,
CONFIG_TOGGLE_XP_COST,
CONFIG_NPC_EVADE_IF_NOT_REACHABLE,

View File

@ -844,6 +844,8 @@ void World::LoadConfigSettings(bool reload)
_int_configs[CONFIG_GUILD_BANK_TAB_COST_4] = sConfigMgr->GetOption<int32>("Guild.BankTabCost4", 25000000);
_int_configs[CONFIG_GUILD_BANK_TAB_COST_5] = sConfigMgr->GetOption<int32>("Guild.BankTabCost5", 50000000);
_int_configs[CONFIG_GUILD_MEMBER_LIMIT] = sConfigMgr->GetOption<uint32>("Guild.MemberLimit", 0);
_bool_configs[CONFIG_DETECT_POS_COLLISION] = sConfigMgr->GetOption<bool>("DetectPosCollision", true);
_bool_configs[CONFIG_RESTRICTED_LFG_CHANNEL] = sConfigMgr->GetOption<bool>("Channel.RestrictedLfg", true);
@ -1402,6 +1404,12 @@ void World::SetInitialWorldSettings()
LOG_INFO("server.loading", "Loading SpellInfo Custom Attributes...");
sSpellMgr->LoadSpellInfoCustomAttributes();
LOG_INFO("server.loading", "Loading Player Totem models...");
sObjectMgr->LoadPlayerTotemModels();
LOG_INFO("server.loading", "Loading Player Shapeshift models...");
sObjectMgr->LoadPlayerShapeshiftModels();
LOG_INFO("server.loading", "Loading GameObject Models...");
LoadGameObjectModelList(_dataPath);

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: account_commandscript
%Complete: 100
Comment: All account related commands
Category: commandscripts
EndScriptData */
#include "AES.h"
#include "AccountMgr.h"
#include "Base32.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: achievement_commandscript
%Complete: 100
Comment: All achievement related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "Player.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: arena_commandscript
%Complete: 100
Comment: All arena team related commands
Category: commandscripts
EndScriptData */
#include "ArenaTeamMgr.h"
#include "ArenaSeasonMgr.h"
#include "ArenaTeamFilter.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: ban_commandscript
%Complete: 100
Comment: All ban related commands
Category: commandscripts
EndScriptData */
#include "AccountMgr.h"
#include "BanMgr.h"
#include "CharacterCache.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: bf_commandscript
%Complete: 100
Comment: All bf related commands
Category: commandscripts
EndScriptData */
#include "BattlefieldMgr.h"
#include "Chat.h"
#include "CommandScript.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: cast_commandscript
%Complete: 100
Comment: All cast related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "Creature.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: character_commandscript
%Complete: 100
Comment: All character related commands
Category: commandscripts
EndScriptData */
#include "AccountMgr.h"
#include "AchievementMgr.h"
#include "Chat.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: debug_commandscript
%Complete: 100
Comment: All debug related commands
Category: commandscripts
EndScriptData */
#include "Bag.h"
#include "BattlegroundMgr.h"
#include "CellImpl.h"
@ -105,7 +98,8 @@ public:
{ "unitstate", HandleDebugUnitStateCommand, SEC_ADMINISTRATOR, Console::No },
{ "objectcount", HandleDebugObjectCountCommand, SEC_ADMINISTRATOR, Console::Yes},
{ "dummy", HandleDebugDummyCommand, SEC_ADMINISTRATOR, Console::No },
{ "mapdata", HandleDebugMapDataCommand, SEC_ADMINISTRATOR, Console::No }
{ "mapdata", HandleDebugMapDataCommand, SEC_ADMINISTRATOR, Console::No },
{ "boundary", HandleDebugBoundaryCommand, SEC_ADMINISTRATOR, Console::No }
};
static ChatCommandTable commandTable =
{
@ -1388,6 +1382,27 @@ public:
handler->PSendSysMessage("Created Cells In Map: {} / {}", map->GetCreatedCellsInMapCount(), TOTAL_NUMBER_OF_CELLS_PER_MAP * TOTAL_NUMBER_OF_CELLS_PER_MAP);
return true;
}
static bool HandleDebugBoundaryCommand(ChatHandler* handler, Optional<uint32> durationArg, Optional<EXACT_SEQUENCE("fill")> fill, Optional<EXACT_SEQUENCE("z")> checkZ)
{
Player* player = handler->GetPlayer();
if (!player)
return false;
Creature* target = handler->getSelectedCreature();
if (!target || !target->IsAIEnabled)
return false;
uint32 duration = durationArg.value_or(5 * IN_MILLISECONDS);
if (duration > 180 * IN_MILLISECONDS) // arbitrary upper limit
duration = 180 * IN_MILLISECONDS;
int32 errMsg = target->AI()->VisualizeBoundary(duration, player, fill.has_value(), checkZ.has_value());
if (errMsg > 0)
handler->PSendSysMessage(errMsg);
return true;
}
};
void AddSC_debug_commandscript()

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: disable_commandscript
%Complete: 100
Comment: All disable related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "DisableMgr.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: event_commandscript
%Complete: 100
Comment: All event related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "GameEventMgr.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: gm_commandscript
%Complete: 100
Comment: All gm related commands
Category: commandscripts
EndScriptData */
#include "AccountMgr.h"
#include "Chat.h"
#include "CommandScript.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: go_commandscript
%Complete: 100
Comment: All go related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "GameGraveyard.h"

View File

@ -36,6 +36,7 @@ public:
{ "join", HandleGroupJoinCommand, SEC_GAMEMASTER, Console::No },
{ "remove", HandleGroupRemoveCommand, SEC_GAMEMASTER, Console::No },
{ "disband", HandleGroupDisbandCommand, SEC_GAMEMASTER, Console::No },
{ "revive", HandleGroupReviveCommand, SEC_GAMEMASTER, Console::No },
{ "leader", HandleGroupLeaderCommand, SEC_GAMEMASTER, Console::No }
};
@ -257,6 +258,39 @@ public:
return true;
}
static bool HandleGroupReviveCommand(ChatHandler* handler, Optional<PlayerIdentifier> target)
{
if (!target)
target = PlayerIdentifier::FromTargetOrSelf(handler);
if (!target)
return false;
Player* targetPlayer = target->GetConnectedPlayer();
Group* group = targetPlayer->GetGroup();
std::string nameLink = handler->playerLink(target->GetName());
if (!group)
{
handler->SendErrorMessage(LANG_NOT_IN_GROUP, nameLink);
return false;
}
for (GroupReference* it = group->GetFirstMember(); it != nullptr; it = it->next())
{
Player* target = it->GetSource();
if (target)
{
target->RemoveAurasDueToSpell(27827); // Spirit of Redemption
target->ResurrectPlayer(!AccountMgr::IsPlayerAccount(target->GetSession()->GetSecurity()) ? 1.0f : 0.5f);
target->SpawnCorpseBones();
target->SaveToDB(false, false);
}
}
return true;
}
};
void AddSC_group_commandscript()

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: guild_commandscript
%Complete: 100
Comment: All guild related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "Guild.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: honor_commandscript
%Complete: 100
Comment: All honor related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "Language.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: instance_commandscript
%Complete: 100
Comment: All instance related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "GameTime.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: item_commandscript
%Complete: 0
Comment: All item related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "DBCStores.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: learn_commandscript
%Complete: 100
Comment: All learn related commands
Category: commandscripts
EndScriptData */
#include "CommandScript.h"
#include "Language.h"
#include "ObjectMgr.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: list_commandscript
%Complete: 100
Comment: All list related commands
Category: commandscripts
EndScriptData */
#include "Chat.h"
#include "CommandScript.h"
#include "Creature.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: lookup_commandscript
%Complete: 100
Comment: All lookup related commands
Category: commandscripts
EndScriptData */
#include "CharacterCache.h"
#include "Chat.h"
#include "CommandScript.h"

View File

@ -15,13 +15,6 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* ScriptData
Name: message_commandscript
%Complete: 100
Comment: All message related commands
Category: commandscripts
EndScriptData */
#include "Channel.h"
#include "Chat.h"
#include "CommandScript.h"

Some files were not shown because too many files have changed in this diff Show More