diff --git a/apps/startup-scripts/run-engine b/apps/startup-scripts/run-engine index 86391f02a..bc1c04a02 100644 --- a/apps/startup-scripts/run-engine +++ b/apps/startup-scripts/run-engine @@ -61,9 +61,9 @@ function run() { echo "> Starting with screen ( screen $OPTIONS )" - screen $OPTIONS $1 "$RUN_ENGINE_PATH/starter" $2 $3 "$4" "$5" "$6" $7 + screen $OPTIONS $1 "$RUN_ENGINE_PATH/starter" $2 $3 "$4" "$5" "$6" $7 "$BINPATH/crashes" else - $RUN_ENGINE_PATH/starter $2 $3 "$4" "$5" "$6" $7 + $RUN_ENGINE_PATH/starter $2 $3 "$4" "$5" "$6" $7 "$BINPATH/crashes" fi } @@ -71,6 +71,7 @@ function starter() { cd $BINPATH mkdir -p "$LOGS_PATH" + mkdir -p "$BINPATH"/crashes configureFiles @@ -82,6 +83,7 @@ function restarter() { cd $BINPATH mkdir -p "$LOGS_PATH" + mkdir -p "$BINPATH"/crashes configureFiles diff --git a/apps/startup-scripts/starter b/apps/startup-scripts/starter index c29af3e1a..d1768667e 100644 --- a/apps/startup-scripts/starter +++ b/apps/startup-scripts/starter @@ -5,9 +5,11 @@ CONFIG="$3" SYSLOG="$4" SYSERR="$5" GDB_ENABLED="$6" +CRASHES_PATH="$7" if [ $GDB_ENABLED -eq 1 ]; then - echo "set logging on" > "$GDB_FILE" + echo "set logging file "$CRASHES_PATH"/gdb-$(date +%Y-%m-%d-%H-%M-%S).txt" > "$GDB_FILE" + echo "set logging on" >> "$GDB_FILE" echo "set debug timestamp" >> "$GDB_FILE" echo "run -c $3" >> "$GDB_FILE" echo "bt" >> "$GDB_FILE" diff --git a/data/sql/base/db_characters/characters.sql b/data/sql/base/db_characters/characters.sql index ce8bb12f6..02bcc41d3 100644 --- a/data/sql/base/db_characters/characters.sql +++ b/data/sql/base/db_characters/characters.sql @@ -19,7 +19,7 @@ DROP TABLE IF EXISTS `characters`; CREATE TABLE IF NOT EXISTS `characters` ( `guid` int unsigned NOT NULL DEFAULT '0' COMMENT 'Global Unique Identifier', `account` int unsigned NOT NULL DEFAULT '0' COMMENT 'Account Identifier', - `name` varchar(12) COLLATE utf8mb4_unicode_ci NOT NULL, + `name` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `race` tinyint unsigned NOT NULL DEFAULT '0', `class` tinyint unsigned NOT NULL DEFAULT '0', `gender` tinyint unsigned NOT NULL DEFAULT '0', diff --git a/data/sql/updates/db_characters/2023_05_23_00.sql b/data/sql/updates/db_characters/2023_05_23_00.sql new file mode 100644 index 000000000..579d5d880 --- /dev/null +++ b/data/sql/updates/db_characters/2023_05_23_00.sql @@ -0,0 +1,3 @@ +-- DB update 2023_04_24_00 -> 2023_05_23_00 +-- +ALTER TABLE `characters` MODIFY `name` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL AFTER `account`; diff --git a/data/sql/updates/db_world/2023_05_03_00.sql b/data/sql/updates/db_world/2023_05_03_00.sql new file mode 100644 index 000000000..cd895ea6d --- /dev/null +++ b/data/sql/updates/db_world/2023_05_03_00.sql @@ -0,0 +1,96 @@ +-- DB update 2023_05_01_00 -> 2023_05_03_00 +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (34798, 34797, 34644, 34359, 34358, 27637, 34254, 34642, 34641); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES +(34798, 34798, 39121), +(34797, 34797, 39120), +(34644, 34644, 39122), +(34359, 34359, 39128), +(34358, 34358, 39127), +(27637, 27637, 39125), +(34254, 34254, 39126), +(34642, 34642, 39347), +(34641, 34641, 39129); + +-- Small Updates +UPDATE `smart_scripts` SET `event_param1` = 7300, `event_param2` = 15350, `event_param3` = 18200, `event_param4` = 25700 WHERE (`entryorguid` = 19505) AND (`source_type` = 0) AND (`id` IN (1)); -- Sunseeker Channeler + +-- Complete Rewrites +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (18419, 17993, 18405, 19633, 18404, 19608, 19486, 18422, 19507, 18421, 19557, 19508, 19509, 19512, 19598, 20078, 20083, 19958, 19843, 25354)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18419, 0, 0, 0, 0, 0, 100, 0, 8550, 20050, 13200, 20050, 0, 11, 34800, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Greenkeeper - In Combat - Cast \'Impending Coma\''), +(18419, 0, 1, 0, 0, 0, 100, 0, 1200, 2400, 2400, 3600, 0, 11, 34798, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Greenkeeper - In Combat - Cast \'Greenkeeper`s Fury\''), +(18419, 0, 2, 0, 0, 0, 100, 0, 8550, 15200, 7250, 17000, 0, 11, 34797, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Greenkeeper - In Combat - Cast \'Nature Shock\''), +(17993, 0, 0, 0, 74, 0, 100, 1, 0, 50, 0, 0, 25, 11, 34784, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - On Friendly Between 0-50% Health - Cast \'Intervene\' (No Repeat)'), +(17993, 0, 1, 0, 0, 0, 100, 0, 5250, 17800, 1200, 21200, 0, 11, 29765, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - In Combat - Cast \'Crystal Strike\''), +(17993, 0, 2, 0, 2, 0, 100, 1, 0, 20, 0, 0, 0, 11, 35399, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Protector - Between 0-20% Health - Cast \'Spell Reflection\' (No Repeat)'), +(18405, 0, 0, 0, 0, 0, 100, 0, 7600, 16400, 15700, 25300, 0, 11, 34793, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Peacekeeper - In Combat - Cast \'Arcane Blast\''), +(18405, 0, 1, 0, 0, 0, 100, 0, 9700, 16200, 7300, 19400, 0, 11, 34791, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Peacekeeper - In Combat - Cast \'Arcane Explosion\''), +(18405, 0, 2, 0, 0, 0, 100, 0, 6050, 15000, 18250, 26700, 0, 11, 34785, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Tempest-Forge Peacekeeper - In Combat - Cast \'Arcane Volley\''), +(19633, 0, 0, 0, 0, 0, 100, 2, 7350, 13950, 12150, 15750, 0, 11, 17194, 0, 0, 0, 0, 0, 5, 25, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Mender - In Combat - Cast \'Mind Blast\' (Normal Dungeon)'), +(19633, 0, 1, 0, 0, 0, 100, 4, 0, 0, 2000, 3000, 0, 11, 17287, 64, 0, 0, 0, 0, 5, 25, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Mender - In Combat - Cast \'Mind Blast\' (Heroic Dungeon)'), +(19633, 0, 2, 0, 74, 0, 100, 0, 0, 75, 10000, 10000, 40, 11, 35096, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Mender - On Friendly Between 0-75% Health - Cast \'Greater Heal\''), +(19633, 0, 3, 0, 23, 0, 100, 0, 34809, 0, 3600, 3600, 0, 11, 34809, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Mender - On Aura \'Holy Fury\' Missing - Cast \'Holy Fury\''), +(19633, 0, 4, 0, 16, 0, 100, 0, 34809, 30, 12150, 15750, 1, 11, 34809, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Mender - On Friendly Unit Missing Buff \'Holy Fury\' - Cast \'Holy Fury\''), +(18404, 0, 0, 0, 0, 0, 100, 0, 14350, 23050, 17000, 29150, 0, 11, 34821, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Steward - In Combat - Cast \'Arcane Flurry\''), +(19608, 0, 0, 0, 0, 0, 100, 0, 3850, 11250, 1050, 14350, 0, 11, 34644, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Frayer Wildling - In Combat - Cast \'Lash\''), +(19486, 0, 0, 0, 0, 0, 100, 0, 12150, 28750, 12150, 28750, 0, 11, 34359, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Chemist - In Combat - Cast \'Fire Breath Potion\''), +(19486, 0, 1, 0, 0, 0, 100, 0, 6900, 15800, 18250, 29650, 0, 11, 34358, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Chemist - In Combat - Cast \'Vial of Poison\''), +(18422, 0, 0, 0, 74, 0, 100, 0, 0, 60, 13300, 35100, 40, 11, 34361, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Botanist - On Friendly Between 0-60% Health - Cast \'Regrowth\''), +(18422, 0, 1, 0, 0, 0, 100, 0, 8500, 20600, 15800, 20600, 0, 11, 34350, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Botanist - In Combat - Cast \'Nature`s Rage\''), +(19507, 0, 0, 0, 0, 0, 100, 0, 8500, 13350, 19350, 27650, 0, 11, 34642, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Gene-Splicer - In Combat - Cast \'Death & Decay\''), +(19507, 0, 1, 0, 0, 0, 100, 0, 21850, 25500, 35000, 35000, 0, 11, 34247, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Gene-Splicer - In Combat - Cast \'Summon Lasher Beast\''), +(18421, 0, 0, 0, 0, 0, 100, 0, 14200, 27900, 120300, 125150, 0, 11, 34355, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Researcher - In Combat - Cast \'Poison Shield\''), +(18421, 0, 1, 0, 0, 0, 100, 0, 6050, 15750, 6050, 15750, 0, 87, 1842101, 1842102, 1842103, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Researcher - In Combat - Cast Random Spell'), +(19557, 0, 0, 0, 0, 0, 100, 0, 3950, 12050, 1200, 13600, 0, 11, 34644, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Greater Frayer - In Combat - Cast \'Lash\''), +(19508, 0, 0, 0, 0, 0, 50, 0, 0, 0, 2200, 3800, 0, 11, 34641, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Herbalist - In Combat - Cast \'Spade Toss\''), +(19508, 0, 1, 0, 0, 0, 100, 0, 8350, 12150, 13350, 26750, 0, 11, 22127, 0, 0, 0, 0, 0, 6, 30, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Herbalist - In Combat - Cast \'Entangling Roots\''), +(19509, 0, 0, 0, 0, 0, 100, 0, 6050, 19500, 7300, 23100, 0, 11, 34640, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Harvester - In Combat - Cast \'Wilting Touch\''), +(19509, 0, 1, 0, 0, 0, 100, 0, 6100, 14450, 16950, 46200, 0, 11, 34639, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Harvester - In Combat - Cast \'Polymorph\''), +(19512, 0, 0, 0, 0, 0, 100, 0, 6100, 13350, 1200, 22300, 0, 11, 15284, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nethervine Reaper - In Combat - Cast \'Cleave\''), +(19512, 0, 1, 0, 0, 0, 100, 4, 17200, 22600, 21200, 26400, 0, 11, 34626, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nethervine Reaper - In Combat - Cast \'Pale Death\' (Heroic Dungeon)'), +(19512, 0, 2, 0, 8, 0, 100, 0, 34222, 0, 1200, 1200, 0, 11, 34173, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Nethervine Reaper - On Spellhit \'Sunseeker Blessing\' - Cast \'Sunseeker Blessing\''), +(19512, 0, 3, 0, 8, 0, 100, 0, 34200, 0, 1200, 1200, 0, 11, 34173, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Nethervine Reaper - On Spellhit \'Crystal Channel\' - Cast \'Sunseeker Blessing\''), +(19598, 0, 0, 0, 0, 0, 100, 0, 4850, 13350, 1100, 17900, 0, 11, 34351, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Mutate Fleshlasher - In Combat - Cast \'Vicious Bite\''), +(20078, 0, 0, 0, 0, 0, 100, 0, 10100, 14900, 1200, 23100, 0, 11, 34820, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Summoned Bloodwarder Reservist - In Combat - Cast \'Arcane Strike\''), +(20083, 0, 0, 0, 23, 0, 100, 0, 34809, 0, 3600, 3600, 0, 11, 34809, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Summoned Bloodwarder Mender - On Aura \'Holy Fury\' Missing - Cast \'Holy Fury\''), +(20083, 0, 1, 0, 0, 0, 100, 2, 12100, 16200, 15750, 18450, 0, 11, 17194, 0, 0, 0, 0, 0, 5, 25, 0, 0, 0, 0, 0, 0, 0, 'Summoned Bloodwarder Mender - In Combat - Cast \'Mind Blast\' (Normal Dungeon)'), +(20083, 0, 2, 0, 0, 0, 100, 4, 12100, 16200, 2000, 3000, 0, 11, 17287, 0, 0, 0, 0, 0, 5, 25, 0, 0, 0, 0, 0, 0, 0, 'Summoned Bloodwarder Mender - In Combat - Cast \'Mind Blast\' (Heroic Dungeon)'), +(20083, 0, 3, 0, 74, 0, 100, 0, 0, 75, 10000, 10000, 40, 11, 35096, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Summoned Bloodwarder Mender - On Friendly Between 0-75% Health - Cast \'Greater Heal\''), +(20083, 0, 4, 0, 16, 0, 100, 0, 34809, 30, 13300, 18200, 1, 11, 34809, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Summoned Bloodwarder Mender - On Friendly Unit Missing Buff \'Holy Fury\' - Cast \'Holy Fury\''), +(19958, 0, 0, 0, 0, 0, 100, 0, 5750, 7000, 4550, 13150, 0, 11, 34752, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'White Seedling - In Combat - Cast \'Freezing Touch\''), +(19958, 0, 1, 0, 37, 0, 100, 0, 0, 0, 0, 0, 0, 11, 34770, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'White Seedling - On Initialize - Cast \'Plant Spawn Effect\''), +(19843, 0, 0, 0, 67, 0, 100, 0, 1150, 13350, 0, 0, 0, 11, 34614, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nethervine Trickster - On Behind Target - Cast \'Backstab\''), +(25354, 0, 0, 0, 0, 0, 100, 0, 4700, 13100, 1150, 17250, 0, 11, 34351, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Mutate Fleshlasher - In Combat - Cast \'Vicious Bite\''); + +-- Partial Rewrites +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17994) AND (`source_type` = 0) AND (`id` IN (2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17994, 0, 2, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Falconer - In Combat - Say Line 1'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17994) AND (`source_type` = 0) AND (`id` IN (0, 2, 5)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17994, 0, 0, 1, 0, 0, 100, 512, 12150, 12150, 6050, 15750, 0, 64, 1, 0, 0, 0, 0, 0, 5, 40, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Falconer - In Combat - Store Targetlist'), +(17994, 0, 2, 0, 61, 0, 100, 512, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Falconer - In Combat - Say Line 1'), +(17994, 0, 5, 0, 0, 0, 100, 0, 8500, 10900, 14150, 21850, 0, 11, 32908, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bloodwarder Falconer - In Combat - Cast \'Wing Clip\''); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1842101, 1842102, 1842103)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(1842101, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 34352, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Researcher - Actionlist Random Cast - Cast \'Mind Shock\''), +(1842102, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 34353, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Researcher - Actionlist Random Cast - Cast \'Frost Shock\''), +(1842103, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 11, 34354, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunseeker Researcher - Actionlist Random Cast - Cast \'Flame Shock\''); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 19511) AND (`source_type` = 0) AND (`id` IN (0, 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`, `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 +(19511, 0, 0, 0, 0, 0, 100, 0, 6100, 19900, 20000, 24000, 0, 11, 34616, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nethervine Inciter - In Combat - Cast \'Deadly Poison\''), +(19511, 0, 1, 0, 0, 0, 100, 0, 4300, 9700, 21700, 38600, 0, 11, 34615, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nethervine Inciter - In Combat - Cast \'Mind-numbing Poison\''), +(19511, 0, 2, 0, 0, 0, 100, 0, 13400, 20600, 20600, 29000, 0, 11, 30621, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nethervine Inciter - In Combat - Cast \'Kidney Shot\''); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 19513; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 19513); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(19513, 0, 0, 0, 0, 0, 100, 0, 8000, 24000, 28000, 36000, 0, 11, 30584, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Mutate Fear-Shrieker - In Combat - Cast \'Fear\''); + +DELETE FROM `creature_template_addon` WHERE (`entry` IN (19843, 21565)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(19843, 0, 0, 0, 1, 0, 0, '30991'), +(21565, 0, 0, 0, 1, 0, 0, '30991'); diff --git a/data/sql/updates/db_world/2023_05_03_01.sql b/data/sql/updates/db_world/2023_05_03_01.sql new file mode 100644 index 000000000..060413509 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_03_01.sql @@ -0,0 +1,190 @@ +-- DB update 2023_05_03_00 -> 2023_05_03_01 +-- +DELETE FROM `creature_addon` WHERE `guid` IN (SELECT `guid` FROM `creature` WHERE `id1` = 16733); + +DELETE FROM `creature_template_addon` WHERE (`entry` = 16733); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(16733, 0, 0, 0, 1, 0, 0, NULL); + +DELETE FROM `creature_addon` WHERE `guid` IN (57721,57722,57731,57732,57733,57735); +INSERT INTO `creature_addon` (`guid`, `path_id`, `bytes2`) VALUES +(57721, 577210, 1), +(57722, 577220, 1), +(57731, 577310, 1), +(57732, 577320, 1), +(57733, 577330, 1), +(57735, 577350, 1); + +UPDATE `creature` SET `position_x` = -3964.55, `position_y` = -11530.3, `position_z` = -136.986, `MovementType` = 2, `wander_distance` = 0 WHERE `id1` = 16733 AND `guid` = 57721; +UPDATE `creature` SET `position_x` = -4000.26, `position_y` = -11597.4, `position_z` = -134.749, `MovementType` = 2, `wander_distance` = 0 WHERE `id1` = 16733 AND `guid` = 57722; +UPDATE `creature` SET `position_x` = -4123.97, `position_y` = -11734.4, `position_z` = -136.587, `MovementType` = 2, `wander_distance` = 0 WHERE `id1` = 16733 AND `guid` = 57731; +UPDATE `creature` SET `position_x` = -4160.04, `position_y` = -11635.9, `position_z` = -98.2858, `MovementType` = 2, `wander_distance` = 0 WHERE `id1` = 16733 AND `guid` = 57732; +UPDATE `creature` SET `position_x` = -4168.59, `position_y` = -11726.2, `position_z` = -137.085, `MovementType` = 2, `wander_distance` = 0 WHERE `id1` = 16733 AND `guid` = 57733; +UPDATE `creature` SET `position_x` = -4278.27, `position_y` = -11825 , `position_z` = -100.07 , `MovementType` = 2, `wander_distance` = 0 WHERE `id1` = 16733 AND `guid` = 57735; + +DELETE FROM `waypoint_data` WHERE `id` IN (577210,577220,577310,577320,577330,577350); +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(577210,1,-3964.55,-11530.3,-136.986,NULL,0,0,0,100,0), +(577210,2,-3985.86,-11501.2,-137.15,NULL,0,0,0,100,0), +(577210,3,-4005.68,-11475.4,-137.284,NULL,0,0,0,100,0), +(577210,4,-4001.85,-11468.3,-137.213,NULL,0,0,0,100,0), +(577210,5,-3973.46,-11441.5,-136.78,NULL,0,0,0,100,0), +(577210,6,-3966.69,-11439.8,-136.706,NULL,20000,0,0,100,0), +(577210,7,-3971.33,-11437.9,-136.746,NULL,0,0,0,100,0), +(577210,8,-3991.26,-11453.1,-137.029,NULL,0,0,0,100,0), +(577210,9,-4005.16,-11471,-137.261,NULL,0,0,0,100,0), +(577210,10,-4006.18,-11477.8,-137.298,NULL,0,0,0,100,0), +(577210,11,-3989.38,-11505.2,-137.206,NULL,0,0,0,100,0), +(577210,12,-3966.39,-11531.2,-136.995,NULL,0,0,0,100,0), +(577210,13,-3961.64,-11544.2,-134.231,NULL,0,0,0,100,0), +(577210,14,-3952.14,-11563.7,-134.043,NULL,0,0,0,100,0), +(577210,15,-3952.28,-11567.8,-134.007,NULL,20000,0,0,100,0), +(577210,16,-3951.26,-11564.1,-134.015,NULL,0,0,0,100,0), +(577210,17,-3957.38,-11547.9,-134.2,NULL,0,0,0,100,0), +(577220,1,-4000.26,-11597.4,-134.749,NULL,0,0,0,100,0), +(577220,2,-4005.16,-11594.7,-134.805,NULL,0,0,0,100,0), +(577220,3,-4013.7,-11585.9,-138.178,NULL,0,0,0,100,0), +(577220,4,-4024.65,-11567.3,-138.212,NULL,0,0,0,100,0), +(577220,5,-4037.64,-11538.8,-138.257,NULL,0,0,0,100,0), +(577220,6,-4041.97,-11534.4,-138.292,NULL,0,0,0,100,0), +(577220,7,-4063.44,-11530.5,-138.529,NULL,0,0,0,100,0), +(577220,8,-4069.51,-11525.9,-135.289,NULL,0,0,0,100,0), +(577220,9,-4076.41,-11518.8,-135.343,NULL,0,0,0,100,0), +(577220,10,-4074.87,-11507.5,-135.282,NULL,18000,0,0,100,0), +(577220,11,-4083.81,-11512.3,-135.406,NULL,0,0,0,100,0), +(577220,12,-4121.6,-11506.2,-135.827,NULL,0,0,0,100,0), +(577220,13,-4133.15,-11500.3,-130.172,NULL,0,0,0,100,0), +(577220,14,-4138.62,-11491.4,-130.857,NULL,0,0,0,100,0), +(577220,15,-4141.32,-11477.4,-130.622,NULL,0,0,0,100,0), +(577220,16,-4141.89,-11460.9,-130.799,NULL,0,0,0,100,0), +(577220,17,-4138.4,-11435.6,-130.672,NULL,0,0,0,100,0), +(577220,18,-4133.74,-11427,-125.835,NULL,0,0,0,100,0), +(577220,19,-4119.66,-11414.2,-115.783,NULL,0,0,0,100,0), +(577220,20,-4105.34,-11407.9,-107.238,NULL,0,0,0,100,0), +(577220,21,-4091.21,-11404.7,-99.2669,NULL,0,0,0,100,0), +(577220,22,-4074.7,-11406,-90.345,NULL,0,0,0,100,0), +(577220,23,-4056.44,-11414.2,-79.7705,NULL,0,0,0,100,0), +(577220,24,-4043.48,-11426,-70.746,NULL,0,0,0,100,0), +(577220,25,-4036.4,-11436.7,-64.2262,NULL,0,0,0,100,0), +(577220,26,-4030.01,-11458.3,-52.8119,NULL,18000,0,0,100,0), +(577220,27,-4033.16,-11456.2,-53.8434,NULL,0,0,0,100,0), +(577220,28,-4038.72,-11441.7,-62.5133,NULL,0,0,0,100,0), +(577220,29,-4049.57,-11427.6,-72.6746,NULL,0,0,0,100,0), +(577220,30,-4062.21,-11417,-82.2978,NULL,0,0,0,100,0), +(577220,31,-4079.56,-11411.4,-93.0459,NULL,0,0,0,100,0), +(577220,32,-4097.99,-11411.9,-104.024,NULL,0,0,0,100,0), +(577220,33,-4115.84,-11418.2,-115.242,NULL,0,0,0,100,0), +(577220,34,-4129.49,-11429.9,-125.645,NULL,0,0,0,100,0), +(577220,35,-4134,-11437.2,-130.575,NULL,0,0,0,100,0), +(577220,36,-4137.21,-11473.6,-130.49,NULL,0,0,0,100,0), +(577220,37,-4129.6,-11494.8,-130.07,NULL,0,0,0,100,0), +(577220,38,-4122.3,-11506.6,-135.837,NULL,0,0,0,100,0), +(577220,39,-4116.53,-11541.2,-135.902,NULL,18000,0,0,100,0), +(577220,40,-4113.37,-11535.9,-135.844,NULL,0,0,0,100,0), +(577220,41,-4101.57,-11531.9,-135.691,NULL,0,0,0,100,0), +(577220,42,-4073.59,-11529.4,-135.353,NULL,0,0,0,100,0), +(577220,43,-4062.81,-11529.1,-138.373,NULL,0,0,0,100,0), +(577220,44,-4043.52,-11530.3,-138.297,NULL,0,0,0,100,0), +(577220,45,-4036.65,-11533.7,-138.232,NULL,0,0,0,100,0), +(577220,46,-4030.36,-11544.8,-138.198,NULL,0,0,0,100,0), +(577220,47,-4021.4,-11564.1,-138.165,NULL,0,0,0,100,0), +(577220,48,-4010.53,-11582.4,-138.128,NULL,0,0,0,100,0), +(577220,49,-4002.86,-11592,-134.79,NULL,0,0,0,100,0), +(577220,50,-3997.03,-11595.9,-134.729,NULL,18000,0,0,100,0), +(577310,1,-4123.97,-11734.4,-136.587,NULL,0,0,0,100,0), +(577310,2,-4118.29,-11732.3,-136.517,NULL,0,0,0,100,0), +(577310,3,-4111.5,-11729.9,-139.731,NULL,0,0,0,100,0), +(577310,4,-4096.03,-11722.5,-139.604,NULL,0,0,0,100,0), +(577310,5,-4079.79,-11728.4,-138.844,NULL,0,0,0,100,0), +(577310,6,-4041.34,-11714.8,-138.861,NULL,0,0,0,100,0), +(577310,7,-4079.35,-11728.5,-138.846,NULL,0,0,0,100,0), +(577310,8,-4095.51,-11722.4,-139.599,NULL,0,0,0,100,0), +(577310,9,-4110.96,-11729.7,-139.726,NULL,0,0,0,100,0), +(577310,10,-4118.13,-11732.1,-136.515,NULL,0,0,0,100,0), +(577310,11,-4123.49,-11734.5,-136.58,NULL,0,0,0,100,0), +(577310,12,-4145.98,-11718.9,-136.639,NULL,0,0,0,100,0), +(577320,1,-4160.04,-11635.9,-98.2858,NULL,0,0,0,100,0), +(577320,2,-4160.11,-11642,-98.3087,NULL,0,0,0,100,0), +(577320,3,-4166.08,-11649.5,-98.4071,NULL,10000,0,0,100,0), +(577320,4,-4160.61,-11642.6,-98.3158,NULL,0,0,0,100,0), +(577320,5,-4159.96,-11636,-98.2838,NULL,0,0,0,100,0), +(577320,6,-4168.66,-11621.9,-110.935,NULL,0,0,0,100,0), +(577320,7,-4175.58,-11610.6,-119.556,NULL,0,0,0,100,0), +(577320,8,-4185.24,-11597.1,-124.755,NULL,0,0,0,100,0), +(577320,9,-4205.55,-11587.2,-125.821,NULL,0,0,0,100,0), +(577320,10,-4216.28,-11590.4,-126.035,NULL,0,0,0,100,0), +(577320,11,-4217.73,-11604.7,-125.98,NULL,10000,0,0,100,0), +(577320,12,-4216.95,-11621.4,-132.225,NULL,0,0,0,100,0), +(577320,13,-4215.58,-11645.5,-143.779,NULL,10000,0,0,100,0), +(577320,14,-4217.59,-11627.7,-135.046,NULL,0,0,0,100,0), +(577320,15,-4217.79,-11604.8,-125.983,NULL,10000,0,0,100,0), +(577320,16,-4210.91,-11589.2,-125.943,NULL,0,0,0,100,0), +(577320,17,-4196.69,-11587.8,-125.459,NULL,0,0,0,100,0), +(577320,18,-4185.23,-11597.1,-124.754,NULL,0,0,0,100,0), +(577320,19,-4175.89,-11610.2,-119.694,NULL,0,0,0,100,0), +(577320,20,-4170.21,-11619.4,-112.954,NULL,0,0,0,100,0), +(577320,21,-4162.16,-11632.4,-101.657,NULL,0,0,0,100,0), +(577330,1,-4168.59,-11726.2,-137.085,NULL,0,0,0,100,0), +(577330,2,-4166.14,-11755.3,-137.167,NULL,0,0,0,100,0), +(577330,3,-4179.52,-11763.3,-132.268,NULL,0,0,0,100,0), +(577330,4,-4202.16,-11771.8,-132.429,NULL,0,0,0,100,0), +(577330,5,-4240.82,-11769.1,-131.957,NULL,0,0,0,100,0), +(577330,6,-4264.25,-11738.5,-133.145,NULL,0,0,0,100,0), +(577330,7,-4241.2,-11769,-131.969,NULL,0,0,0,100,0), +(577330,8,-4202.75,-11772.1,-132.402,NULL,0,0,0,100,0), +(577330,9,-4179.05,-11763,-132.259,NULL,0,0,0,100,0), +(577330,10,-4166.3,-11755.7,-137.17,NULL,0,0,0,100,0), +(577330,11,-4166.3,-11736.9,-137.093,NULL,0,0,0,100,0), +(577350,1,-4278.27,-11825,-100.07,NULL,0,0,0,100,0), +(577350,2,-4281.03,-11820.5,-99.9662,NULL,0,0,0,100,0), +(577350,3,-4249.65,-11808.6,-99.4714,NULL,0,0,0,100,0), +(577350,4,-4242,-11807.3,-95.9034,NULL,0,0,0,100,0), +(577350,5,-4233.29,-11805.7,-95.7966,NULL,0,0,0,100,0), +(577350,6,-4230.58,-11803.7,-95.7576,NULL,0,0,0,100,0), +(577350,7,-4232.84,-11797.8,-95.7615,NULL,0,0,0,100,0), +(577350,8,-4237.37,-11793.6,-95.7966,NULL,0,0,0,100,0), +(577350,9,-4241.7,-11794.3,-95.8514,NULL,0,0,0,100,0), +(577350,10,-4246.89,-11798.7,-95.929,NULL,0,0,0,100,0), +(577350,11,-4252.53,-11802.4,-99.481,NULL,0,0,0,100,0), +(577350,12,-4268.98,-11813,-99.7224,NULL,0,0,0,100,0), +(577350,13,-4280.46,-11819.9,-99.9448,NULL,0,0,0,100,0), +(577350,14,-4283.71,-11815.7,-100.099,NULL,0,0,0,100,0), +(577350,15,-4292,-11802,-94.2238,NULL,0,0,0,100,0), +(577350,16,-4296.17,-11795.3,-94.2179,NULL,0,0,0,100,0), +(577350,17,-4277.99,-11792.6,-93.9812,NULL,0,0,0,100,0), +(577350,18,-4257.68,-11777.5,-93.6819,NULL,0,0,0,100,0), +(577350,19,-4251.47,-11767.4,-93.8869,NULL,2000,0,0,100,0), +(577350,20,-4257.47,-11777.3,-93.6774,NULL,0,0,0,100,0), +(577350,21,-4277.78,-11792.4,-93.975,NULL,0,0,0,100,0), +(577350,22,-4295.47,-11795,-94.2096,NULL,0,0,0,100,0), +(577350,23,-4292.53,-11801.4,-94.1985,NULL,0,0,0,100,0), +(577350,24,-4283.88,-11815.7,-100.1,NULL,0,0,0,100,0), +(577350,25,-4281.04,-11819.4,-99.9637,NULL,0,0,0,100,0), +(577350,26,-4252.5,-11802.4,-99.4826,NULL,0,0,0,100,0), +(577350,27,-4246.9,-11798.8,-95.9295,NULL,0,0,0,100,0), +(577350,28,-4242.35,-11794.7,-95.8622,NULL,0,0,0,100,0), +(577350,29,-4237.81,-11793.6,-95.8048,NULL,0,0,0,100,0), +(577350,30,-4233.05,-11797.6,-95.7627,NULL,0,0,0,100,0), +(577350,31,-4230.78,-11803,-95.7548,NULL,0,0,0,100,0), +(577350,32,-4233.12,-11805.6,-95.7916,NULL,0,0,0,100,0), +(577350,33,-4241.47,-11807.3,-95.8974,NULL,0,0,0,100,0), +(577350,34,-4249.19,-11808.5,-99.464,NULL,0,0,0,100,0), +(577350,35,-4269.34,-11813.2,-99.7266,NULL,0,0,0,100,0), +(577350,36,-4280.23,-11819.6,-99.9359,NULL,0,0,0,100,0), +(577350,37,-4278.39,-11825.1,-100.071,NULL,0,0,0,100,0), +(577350,38,-4267.25,-11843,-112.684,NULL,0,0,0,100,0), +(577350,39,-4263.5,-11847.6,-112.621,NULL,0,0,0,100,0), +(577350,40,-4255.47,-11844.2,-112.458,NULL,0,0,0,100,0), +(577350,41,-4249.01,-11840,-116.194,NULL,0,0,0,100,0), +(577350,42,-4222.99,-11823.7,-115.987,NULL,0,0,0,100,0), +(577350,43,-4211.1,-11814.9,-122.457,NULL,0,0,0,100,0), +(577350,44,-4203.26,-11806.5,-127.263,NULL,0,0,0,100,0), +(577350,45,-4196.55,-11794.9,-133.039,NULL,2000,0,0,100,0), +(577350,46,-4202.9,-11805.7,-127.673,NULL,0,0,0,100,0), +(577350,47,-4210.56,-11814.3,-122.803,NULL,0,0,0,100,0), +(577350,48,-4222.96,-11823.5,-116.05,NULL,0,0,0,100,0), +(577350,49,-4248.52,-11839.5,-116.186,NULL,0,0,0,100,0), +(577350,50,-4255.33,-11844.1,-112.454,NULL,0,0,0,100,0), +(577350,51,-4262.23,-11847.2,-112.591,NULL,0,0,0,100,0), +(577350,52,-4266.7,-11843.8,-112.679,NULL,0,0,0,100,0), +(577350,53,-4272.93,-11833.5,-106.236,NULL,0,0,0,100,0); diff --git a/data/sql/updates/db_world/2023_05_03_02.sql b/data/sql/updates/db_world/2023_05_03_02.sql new file mode 100644 index 000000000..1e8de1835 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_03_02.sql @@ -0,0 +1,7 @@ +-- DB update 2023_05_03_01 -> 2023_05_03_02 +-- +DELETE FROM `creature` WHERE `guid`=87022 AND `id1` = 2683; +INSERT INTO `creature` (`guid`, `id1`, `map`, `spawnMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`) VALUES +(87022, 2683, 0, 1, 1, -4923.1, 725.529, 253.1, 6.21499, 300); + +UPDATE `creature_template` SET `npcflag` = `npcflag`&~2 WHERE (`entry` = 2683); diff --git a/data/sql/updates/db_world/2023_05_03_03.sql b/data/sql/updates/db_world/2023_05_03_03.sql new file mode 100644 index 000000000..cc98f964f --- /dev/null +++ b/data/sql/updates/db_world/2023_05_03_03.sql @@ -0,0 +1,21 @@ +-- DB update 2023_05_03_02 -> 2023_05_03_03 +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceGroup` = 8568; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 8568, 1, 0, 0, 2, 0, 31880, 1, 0, 1, 0, 0, '', 'Must not have item 31880'), +(15, 8568, 1, 0, 0, 8, 0, 10942, 0, 0, 0, 0, 0, '', 'Quest 10942 must be rewarded'), +(15, 8568, 1, 0, 0, 12, 0, 10, 0, 0, 0, 0, 0, '', 'Children\'s Week must be active'), +(15, 8568, 2, 0, 0, 2, 0, 31881, 1, 0, 1, 0, 0, '', 'Must not have item 31881'), +(15, 8568, 2, 0, 0, 8, 0, 10943, 0, 0, 0, 0, 0, '', 'Quest 10943 must be rewarded'), +(15, 8568, 2, 0, 0, 12, 0, 10, 0, 0, 0, 0, 0, '', 'Children\'s Week must be active'); + +DELETE FROM `gossip_menu_option` WHERE (`MenuID` = 8568); +INSERT INTO `gossip_menu_option` (`MenuID`, `OptionID`, `OptionIcon`, `OptionText`, `OptionBroadcastTextID`, `OptionType`, `OptionNpcFlag`, `ActionMenuID`, `ActionPoiID`, `BoxCoded`, `BoxMoney`, `BoxText`, `BoxBroadcastTextID`, `VerifiedBuild`) VALUES +(8568, 1, 0, 'I need a new Blood Elf Orphan Whistle.', 20452, 1, 1, 0, 0, 0, 0, NULL, 0, 0), +(8568, 2, 0, 'I need a new Draenei Orphan Whistle.', 20453, 1, 1, 0, 0, 0, 0, NULL, 0, 0); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 22819); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(22819, 0, 1, 3, 62, 0, 100, 0, 8568, 1, 0, 0, 0, 11, 39512, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Orphan Matron Mercy - On Gossip Option 1 Selected - Cast \'OCW Create Blood Elf Orphan Whistle\''), +(22819, 0, 2, 3, 62, 0, 100, 0, 8568, 2, 0, 0, 0, 11, 39513, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Orphan Matron Mercy - On Gossip Option 2 Selected - Cast \'OCW Create Draenei Orphan Whistle\''), +(22819, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Orphan Matron Mercy - Linked - Close Gossip'); diff --git a/data/sql/updates/db_world/2023_05_09_00.sql b/data/sql/updates/db_world/2023_05_09_00.sql new file mode 100644 index 000000000..308c71f1a --- /dev/null +++ b/data/sql/updates/db_world/2023_05_09_00.sql @@ -0,0 +1,75 @@ +-- DB update 2023_05_03_03 -> 2023_05_09_00 +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (32191, 32193, 15234, 34944, 17139, 34945); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES +(32191, 32191, 37666), +(32193, 32193, 37665), +(15234, 15234, 37664), +(34944, 34944, 37669), +(17139, 17139, 36052), +(34945, 34945, 39378); + +-- Small Updates +UPDATE `smart_scripts` SET `event_param1` = 3600, `event_param2` = 9750, `event_param3` = 6050, `event_param4` = 9750 WHERE (`entryorguid` = 17964) AND (`source_type` = 0) AND (`id` IN (0, 1)); -- Wastewalker Worker +UPDATE `smart_scripts` SET `event_param1` = 6150, `event_param2` = 15800, `event_param3` = 19400, `event_param4` = 25500 WHERE (`entryorguid` = 17959) AND (`source_type` = 0) AND (`id` IN (1)); -- Coilfang Slavehandler +UPDATE `smart_scripts` SET `event_param1` = 12150, `event_param2` = 24250, `event_param3` = 24250, `event_param4` = 27900 WHERE (`entryorguid` = 17959) AND (`source_type` = 0) AND (`id` IN (2)); -- Coilfang Slavehandler + +-- Complete Rewrites +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (17816, 17940, 17817, 17960, 17938, 17958, 17962, 21128, 17961, 21126, 21127)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17816, 0, 0, 0, 0, 0, 100, 0, 6100, 18100, 1200, 24250, 0, 11, 31551, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Bogstrok - In Combat - Cast \'Piercing Jab\''), +(17940, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Technician - On Aggro - Say Line 0'), +(17940, 0, 1, 0, 0, 0, 100, 2, 10750, 26500, 10750, 26500, 0, 87, 1794000, 1794001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Technician - In Combat - Cast Random Spell (Normal Dungeon)'), +(17940, 0, 2, 0, 0, 0, 100, 4, 10750, 26500, 10750, 26500, 0, 87, 1794002, 1794003, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Technician - In Combat - Cast Random Spell (Heroic Dungeon)'), +(17817, 0, 0, 0, 0, 0, 100, 0, 6150, 15750, 10950, 21750, 0, 11, 35760, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Greater Bogstrok - In Combat - Cast \'Decayed Strength\''), +(17960, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Soothsayer - On Aggro - Say Line 0'), +(17960, 0, 1, 0, 0, 0, 100, 0, 9950, 12150, 23100, 24300, 0, 11, 15790, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Soothsayer - In Combat - Cast \'Arcane Missiles\''), +(17960, 0, 2, 0, 0, 0, 100, 0, 19400, 27600, 26500, 42300, 0, 11, 31555, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Soothsayer - In Combat - Cast \'Decayed Intellect\''), +(17960, 0, 3, 0, 0, 0, 100, 0, 20650, 25500, 23100, 24300, 0, 11, 30923, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Soothsayer - In Combat - Cast \'Domination\''), +(17938, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Observer - On Aggro - Say Line 0'), +(17938, 0, 1, 0, 0, 0, 100, 2, 11750, 16350, 7300, 12150, 0, 11, 32191, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Observer - In Combat - Cast \'Heavy Dynamite\' (Normal Dungeon)'), +(17938, 0, 2, 0, 0, 0, 100, 2, 11250, 15400, 25500, 26750, 0, 11, 17883, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Observer - In Combat - Cast \'Immolate\' (Normal Dungeon)'), +(17938, 0, 3, 0, 0, 0, 100, 4, 11250, 15400, 25500, 26750, 0, 11, 37668, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Observer - In Combat - Cast \'Immolate\' (Heroic Dungeon)'), +(17958, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Defender - On Aggro - Say Line 0'), +(17958, 0, 1, 0, 0, 0, 100, 0, 7300, 13350, 10900, 21850, 0, 11, 15655, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Defender - In Combat - Cast \'Shield Slam\''), +(17958, 0, 2, 0, 0, 0, 100, 0, 13000, 17000, 18200, 29100, 0, 11, 31554, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Defender - In Combat - Cast \'Spell Reflection\''), +(17962, 0, 0, 0, 0, 0, 100, 0, 12100, 19350, 13350, 19700, 0, 11, 33787, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Collaborator - In Combat - Cast \'Cripple\''), +(17962, 0, 1, 0, 0, 0, 100, 0, 20100, 26200, 20000, 26000, 0, 11, 19130, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Collaborator - In Combat - Cast \'Revenge\''), +(17962, 0, 2, 3, 2, 0, 100, 1, 0, 30, 0, 0, 0, 11, 8269, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Collaborator - Between 0-30% Health - Cast \'Frenzy\''), +(17962, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Collaborator - Linked - Say Line 0'), +(21128, 0, 0, 0, 0, 0, 100, 0, 4900, 11750, 12150, 25750, 0, 11, 34984, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Ray - In Combat - Cast \'Psychic Horror\''), +(17961, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Enchantress - On Aggro - Say Line 0'), +(17961, 0, 1, 0, 0, 0, 100, 0, 13350, 19700, 19450, 27900, 0, 11, 32173, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Enchantress - In Combat - Cast \'Entangling Roots\''), +(17961, 0, 2, 0, 0, 0, 100, 0, 7300, 12150, 21450, 31600, 0, 11, 15234, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Enchantress - In Combat - Cast \'Lightning Bolt\''), +(17961, 0, 4, 0, 0, 0, 100, 0, 14850, 21200, 19450, 27900, 0, 11, 32193, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Enchantress - In Combat - Cast \'Lightning Cloud\''), +(21126, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Scale-Healer - On Aggro - Say Line 0'), +(21126, 0, 1, 0, 74, 0, 100, 0, 0, 65, 12000, 16000, 40, 11, 34945, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Scale-Healer - On Friendly Between 0-65% Health - Cast \'Heal\''), +(21126, 0, 2, 0, 0, 0, 100, 0, 4250, 8850, 13400, 21900, 0, 11, 34944, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Scale-Healer - In Combat - Cast \'Holy Nova\''), +(21126, 0, 3, 0, 16, 0, 100, 0, 17139, 40, 7200, 13300, 1, 11, 17139, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Scale-Healer - On Friendly Unit Missing Buff \'Power Word: Shield\' - Cast \'Power Word: Shield\''), +(21127, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Tempest - On Aggro - Say Line 0'), +(21127, 0, 1, 0, 0, 0, 100, 0, 10550, 22950, 8500, 17400, 0, 11, 15667, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Tempest - In Combat - Cast \'Sinister Strike\''), +(21127, 0, 2, 0, 0, 0, 100, 0, 10800, 22900, 26900, 44600, 0, 11, 36872, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Tempest - In Combat - Cast \'Deadly Poison\''); + +-- Partial Rewrites +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17963) AND (`source_type` = 0) AND (`id` IN (1, 2, 3, 4)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17963, 0, 1, 0, 9, 0, 100, 2, 0, 10, 6000, 7700, 1, 11, 32192, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wastewalker Slave - In Combat - Cast Frost Nova'), +(17963, 0, 2, 0, 9, 0, 100, 4, 0, 10, 6000, 7700, 1, 11, 15531, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wastewalker Slave - In Combat - Cast Frost Nova'), +(17963, 0, 3, 0, 0, 0, 100, 2, 400, 4950, 3300, 4950, 0, 11, 15497, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wastewalker Slave - In Combat - Cast Frostbolt'), +(17963, 0, 4, 0, 0, 0, 100, 4, 400, 4950, 3300, 4950, 0, 11, 12675, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wastewalker Slave - In Combat - Cast Frostbolt'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17957) AND (`source_type` = 0) AND (`id` IN (1, 2, 3)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17957, 0, 1, 0, 0, 0, 100, 0, 15700, 29100, 21900, 30200, 0, 11, 19134, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Champion - In Combat - Cast \'Frightening Shout\''), +(17957, 0, 2, 0, 0, 0, 100, 0, 7400, 15750, 1200, 28600, 0, 11, 15284, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Champion - In Combat - Cast \'Cleave\''), +(17957, 0, 3, 0, 0, 0, 100, 0, 10950, 26050, 10950, 26050, 0, 11, 16145, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Champion - In Combat - Cast \'Sunder Armor\''); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1794000, 1794001, 1794002, 1794003)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(1794000, 9, 0, 0, 0, 0, 100, 2, 0, 0, 0, 0, 0, 11, 16005, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Technician - Actionlist for Random Cast - Cast \'Rain of Fire\' (Normal Dungeon)'), +(1794001, 9, 0, 0, 0, 0, 100, 2, 0, 0, 0, 0, 0, 11, 21096, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Technician - Actionlist for Random Cast - Cast \'Blizzard\' (Normal Dungeon)'), +(1794002, 9, 0, 0, 0, 0, 100, 4, 0, 0, 0, 0, 0, 11, 39376, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Technician - Actionlist for Random Cast - Cast \'Rain of Fire\' (Heroic Dungeon)'), +(1794003, 9, 0, 0, 0, 0, 100, 4, 0, 0, 0, 0, 0, 11, 37671, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Coilfang Technician - Actionlist for Random Cast - Cast \'Blizzard\' (Heroic Dungeon)'); + +DELETE FROM `creature_text` WHERE `CreatureID` = 17962; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17962, 0, 0, '%s goes into a frenzy!', 16, 0, 100, 0, 0, 0, 38630, 0, 'Coilfang Collaborator'); diff --git a/data/sql/updates/db_world/2023_05_09_01.sql b/data/sql/updates/db_world/2023_05_09_01.sql new file mode 100644 index 000000000..43d815284 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_09_01.sql @@ -0,0 +1,89 @@ +-- DB update 2023_05_09_00 -> 2023_05_09_01 +-- +UPDATE `creature_template` SET `flags_extra` = `flags_extra`|67108864 WHERE (`entry` = 18829); + +DELETE FROM `creature_addon` WHERE (`guid` IN (90985, 90986, 90987, 90988, 90989, 90990, 90991, 90992, 90993, 91247, 91248, 91249)); +DELETE FROM `waypoint_data` WHERE `id` IN (909910, 909920, 909930); +UPDATE `creature_template_addon` SET `bytes2` = 1 WHERE (`entry` = 18829); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 18829) AND (`source_type` = 0) AND (`id` IN (7, 8)); +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (-91247,-91248,-91249,-90985,-90986,-90987)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-91247, 0, 1000, 0, 1, 0, 100, 1, 3600, 3600, 0, 0, 0, 11, 33346, 0, 0, 0, 0, 0, 10, 90984, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Warder - On Reset - Cast Green Beam'), +(-91248, 0, 1000, 0, 1, 0, 100, 1, 3600, 3600, 0, 0, 0, 11, 33346, 0, 0, 0, 0, 0, 10, 90984, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Warder - On Reset - Cast Green Beam'), +(-91249, 0, 1000, 0, 1, 0, 100, 1, 3600, 3600, 0, 0, 0, 11, 33346, 0, 0, 0, 0, 0, 10, 90984, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Warder - On Reset - Cast Green Beam'), +(-90985, 0, 1000, 0, 1, 0, 100, 1, 3600, 3600, 0, 0, 0, 11, 33827, 0, 0, 0, 0, 0, 10, 91250, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Warder - On Reset - Cast Hellfire Warder Channel Visual'), +(-90986, 0, 1000, 0, 1, 0, 100, 1, 3600, 3600, 0, 0, 0, 11, 33827, 0, 0, 0, 0, 0, 10, 91250, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Warder - On Reset - Cast Hellfire Warder Channel Visual'), +(-90987, 0, 1000, 0, 1, 0, 100, 1, 3600, 3600, 0, 0, 0, 11, 33827, 0, 0, 0, 0, 0, 10, 91250, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Warder - On Reset - Cast Hellfire Warder Channel Visual'); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceEntry` = 18829); + +SET @NPC := 90991; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-73.72693,`position_y`=47.355293,`position_z`=-0.38537598 WHERE `guid`=@NPC; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=0,`position_x`=-73.72693,`position_y`=47.355293,`position_z`=-0.38537598 WHERE `guid` IN (90992, 90993) AND `id1` = 18829; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`orientation`,`delay`,`move_type`,`action`,`action_chance`,`wpguid`) VALUES +(@PATH,1,-73.72693,47.355293,-0.38537598,NULL,0,0,0,100,0), +(@PATH,2,-53.951275,58.999866,3.1846943,NULL,0,0,0,100,0), +(@PATH,3,-28.083755,65.604164,15.94728,NULL,0,0,0,100,0), +(@PATH,4,-3.498642,66.86735,22.654028,NULL,0,0,0,100,0), +(@PATH,5,14.21773,57.512276,22.968313,NULL,0,0,0,100,0), +(@PATH,6,29.301313,40.577045,33.289814,NULL,0,0,0,100,0), +(@PATH,7,44.670013,16.09524,45.009865,NULL,0,0,0,100,0), +(@PATH,8,44.010056,-11.347733,45.010532,NULL,0,0,0,100,0), +(@PATH,9,33.572083,-28.368456,37.985077,NULL,0,0,0,100,0), +(@PATH,10,14.805847,-53.501915,22.991356,NULL,0,0,0,100,0), +(@PATH,11,-11.261587,-62.130146,22.562366,NULL,0,0,0,100,0), +(@PATH,12,-37.538406,-59.60784,11.227191,NULL,0,0,0,100,0), +(@PATH,13,-70.55042,-44.39177,-0.3772414,NULL,0,0,0,100,0), +(@PATH,14,-37.538406,-59.60784,11.227191,NULL,0,0,0,100,0), +(@PATH,15,-11.261587,-62.130146,22.562366,NULL,0,0,0,100,0), +(@PATH,16,14.805847,-53.501915,22.991356,NULL,0,0,0,100,0), +(@PATH,17,33.572083,-28.368456,37.985077,NULL,0,0,0,100,0), +(@PATH,18,44.010056,-11.347733,45.010532,NULL,0,0,0,100,0), +(@PATH,19,44.670013,16.09524,45.009865,NULL,0,0,0,100,0), +(@PATH,20,29.301313,40.577045,33.289814,NULL,0,0,0,100,0), +(@PATH,21,14.21773,57.512276,22.968313,NULL,0,0,0,100,0), +(@PATH,22,-3.498642,66.86735,22.654028,NULL,0,0,0,100,0), +(@PATH,23,-28.083755,65.604164,15.94728,NULL,0,0,0,100,0), +(@PATH,24,-53.951275,58.999866,3.1846943,NULL,0,0,0,100,0); + +DELETE FROM `creature_formations` WHERE `memberGUID` IN (90991, 90992, 90993); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(90991, 90991, 0, 0, 515), +(90991, 90992, 4, 90, 515), +(90991, 90993, 4, 270, 515); + +DELETE FROM `creature_formations` WHERE `memberGUID` IN (91247,91248,91249,90985,90986,90987,90988,90989,90990); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `groupAI`) VALUES +(91247, 91247, 3), +(91247, 91248, 3), +(91247, 91249, 3), +(90985, 90985, 3), +(90985, 90986, 3), +(90985, 90987, 3), +(90988, 90988, 3), +(90988, 90989, 3), +(90988, 90990, 3); + +UPDATE `creature` SET `id1` = 15384 WHERE `guid` = 91250 AND `id1` = 19871; + +SET @CGUID := 99126; + +DELETE FROM `creature` WHERE `id1` = 17474 AND `map` = 544; +INSERT INTO `creature` (`guid`, `id1`, `map`, `zoneId`, `areaId`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `MovementType`, `VerifiedBuild`) VALUES +(@CGUID+0 , 17474, 544, 3836, 3836, 12.277288, 1.4221332, -0.41251224, 0, 7200, 17.5, 1, 49444), +(@CGUID+1 , 17474, 544, 3836, 3836, 12.209613, -1.6456745, -0.4125001, 0, 7200, 15, 1, 49444), +(@CGUID+2 , 17474, 544, 3836, 3836, -41.256805, -18.75815, -0.41244552, 0, 7200, 15.5, 1, 49444), +(@CGUID+3 , 17474, 544, 3836, 3836, -36.77449, -18.470839, -0.41244859, 0, 7200, 14.5, 1, 49444), +(@CGUID+4 , 17474, 544, 3836, 3836, -39.86548, 23.40396, -0.41246653, 0, 7200, 15, 1, 49444), +(@CGUID+5 , 17474, 544, 3836, 3836, -39.30522, 22.472437, -0.41246665, 0, 7200, 18, 1, 49444), +(@CGUID+6 , 17474, 544, 3836, 3836, -10.57025, -36.72588, -0.412454, 0, 7200, 14, 1, 49444), +(@CGUID+7 , 17474, 544, 3836, 3836, -23.366783, -28.944124, -0.41246164, 0, 7200, 14.5, 1, 49444), +(@CGUID+8 , 17474, 544, 3836, 3836, -5.876664, 30.14057, -0.412483, 0, 7200, 16, 1, 49444), +(@CGUID+9 , 17474, 544, 3836, 3836, -12.428505, 38.717083, -0.1680651, 0, 7200, 16.5, 1, 49444), +(@CGUID+10, 17474, 544, 3836, 3836, -15.282015, -1.4561253, -0.4121307, 0, 7200, 10.8, 1, 49444), +(@CGUID+11, 17474, 544, 3836, 3836, -15.024544, 0.8793583, -0.41213986, 0, 7200, 11.5, 1, 49444); diff --git a/data/sql/updates/db_world/2023_05_09_02.sql b/data/sql/updates/db_world/2023_05_09_02.sql new file mode 100644 index 000000000..cadb82de8 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_09_02.sql @@ -0,0 +1,500 @@ +-- DB update 2023_05_09_01 -> 2023_05_09_02 +-- Antonio Perelli +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=844; +DELETE FROM `smart_scripts` WHERE `entryorguid`=844 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (84400,84401,84402,84403,84404,84405,84406,84407,84408,84409,84410,84411,84412,84413,84414,84415,84416) AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(844,0,0 ,0,58,0,100,0,0,84400,0,0,0,80,84400,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,1 ,0,58,0,100,0,0,84401,0,0,0,80,84401,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,2 ,0,58,0,100,0,0,84402,0,0,0,80,84402,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,3 ,0,58,0,100,0,0,84403,0,0,0,80,84403,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,4 ,0,58,0,100,0,0,84404,0,0,0,80,84404,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,5 ,0,58,0,100,0,0,84405,0,0,0,80,84405,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,6 ,0,58,0,100,0,0,84406,0,0,0,80,84406,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,7 ,0,58,0,100,0,0,84407,0,0,0,80,84407,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,8 ,0,58,0,100,0,0,84408,0,0,0,80,84408,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,9 ,0,58,0,100,0,0,84409,0,0,0,80,84409,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,10,0,58,0,100,0,0,84410,0,0,0,80,84410,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,11,0,58,0,100,0,0,84411,0,0,0,80,84411,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,12,0,58,0,100,0,0,84412,0,0,0,80,84412,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,13,0,58,0,100,0,0,84413,0,0,0,80,84413,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,14,0,34,0,100,0,11,84414,0,0,0,80,84414,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Reached Point - Run Script'), +(844,0,15,0,58,0,100,0,0,84414,0,0,0,80,84415,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Finished All Scripts - Set Active and Start Movement'), +(844,0,16,0,11,0,100,0,0,0,0,0,0,80,84415,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - On Respawn - Set Active and Start Movement'), +(84400,9,0,0,0,0,100,0,0,0,0,0,0,1,13,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 13'), +(84400,9,1,0,0,0,100,0,6000,6000,0,0,0,1,0,0,0,0,0,0,19,1423,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 0 (Stormwind Guard)'), +(84400,9,2,0,0,0,100,0,5000,5000,0,0,0,1,14,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 14'), +(84400,9,3,0,0,0,100,0,4000,4000,0,0,0,1,1,0,0,0,0,0,19,1423,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 1 (Stormwind Guard)'), +(84400,9,4,0,0,0,100,0,2000,2000,0,0,0,1,15,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 15'), +(84400,9,5,0,0,0,100,0,15000,15000,0,0,0,53,0,84401,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84401,9,0,0,0,0,100,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 0'), +(84401,9,1,0,0,0,100,0,30000,30000,0,0,0,53,0,84402,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84402,9,0,0,0,0,100,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 1'), +(84402,9,1,0,0,0,100,0,30000,30000,0,0,0,53,0,84403,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84403,9,0,0,0,0,100,0,0,0,0,0,0,1,16,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 16'), +(84403,9,1,0,0,0,100,0,5000,5000,0,0,0,53,0,84404,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84404,9,0,0,0,0,100,0,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 2'), +(84404,9,1,0,0,0,100,0,30000,30000,0,0,0,53,0,84405,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84405,9,0,0,0,0,100,0,0,0,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 3'), +(84405,9,1,0,0,0,100,0,30000,30000,0,0,0,53,0,84406,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84406,9,0,0,0,0,100,0,0,0,0,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 4'), +(84406,9,1,0,0,0,100,0,5000,5000,0,0,0,53,0,84407,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84406,9,2,0,0,0,100,0,0,0,0,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 5'), +(84407,9,0,0,0,0,100,0,0,0,0,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 6'), +(84407,9,1,0,0,0,100,0,5000,5000,0,0,0,53,0,84408,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84408,9,0,0,0,0,100,0,0,0,0,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 7'), +(84408,9,1,0,0,0,100,0,30000,30000,0,0,0,53,0,84409,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84409,9,0,0,0,0,100,0,0,0,0,0,0,1,16,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 16'), +(84409,9,1,0,0,0,100,0,30000,30000,0,0,0,53,0,84410,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84410,9,0,0,0,0,100,0,0,0,0,0,0,1,8,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 8'), +(84410,9,1,0,0,0,100,0,5000,5000,0,0,0,53,0,84411,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84411,9,0,0,0,0,100,0,0,0,0,0,0,1,9,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 9'), +(84411,9,1,0,0,0,100,0,5000,5000,0,0,0,53,0,84412,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84412,9,0,0,0,0,100,0,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Set Orientation'), +(84412,9,1,0,0,0,100,0,500,500,0,0,0,1,10,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 10'), +(84412,9,2,0,0,0,100,0,5000,5000,0,0,0,1,0,0,0,0,0,0,19,777,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 0 (Amy Davenport)'), +(84412,9,3,0,0,0,100,0,5000,5000,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,0,3.10625,'Antonio Perelli - Actionlist - Set Orientation'), +(84412,9,4,0,0,0,100,0,500,500,0,0,0,1,11,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 11'), +(84412,9,5,0,0,0,100,0,5000,5000,0,0,0,53,0,84413,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84413,9,0,0,0,0,100,0,0,0,0,0,0,1,16,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 16'), +(84413,9,1,0,0,0,100,0,30000,30000,0,0,0,53,0,84414,0,0,0,2,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'), +(84414,9,0,0,0,0,100,0,0,0,0,0,0,1,12,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 12'), +(84414,9,1,0,0,0,100,0,4000,4000,0,0,0,1,1,0,0,0,0,0,19,777,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Say Line 1 (Amy Davenport)'), +(84415,9,0,0,0,0,100,0,0,0,0,0,0,48,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Set Active On'), +(84415,9,1,0,0,0,100,0,0,0,0,0,0,53,0,84400,0,0,0,2,0,0,0,0,0,0,0,0,0,'Antonio Perelli - Actionlist - Start Waypoint'); + +DELETE FROM `creature_text` WHERE `CreatureID` IN (844,777,1423); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(844,0 ,0,'Wares for sale! Wares for sale! Come browse Antonio\'s wares before I must take my leave, citizens of Goldshire.',12,7,100,22,0,0,721,0,'Antonio Perelli'), +(844,0 ,1,'Come one, come all! Antonio\'s wares are for sale. I may not return for a great deal of time, so come one, come all.',12,7,100,22,0,0,722,0,'Antonio Perelli'), +(844,0 ,2,'Good people of Goldshire, come take advantage of my incredible prices on rare goods. I shall not return for some time!',12,7,100,22,0,0,723,0,'Antonio Perelli'), +(844,1 ,0,'Good bye, Goldshire. I\'ll be back soon enough-- perhaps a week\'s time.',12,7,100,3,0,0,724,0,'Antonio Perelli'), +(844,2 ,0,'Known throughout the lands, Antonio Perelli\'s goods now for sale near Sentinel Hill! I must move on soon, so make haste.',12,7,100,22,0,0,726,0,'Antonio Perelli'), +(844,2 ,1,'Long-lasting, well-crafted items for sale near the Hill! Come one, come all! Time is short, so make haste.',12,7,100,22,0,0,727,0,'Antonio Perelli'), +(844,2 ,2,'The time has come for me to once again make my wares available to all who travel near Sentinel Hill! Come one, come all!',12,7,100,22,0,0,728,0,'Antonio Perelli'), +(844,3 ,0,'Thank you, all. I shall return again in about a week.',12,7,100,3,0,0,729,0,'Antonio Perelli'), +(844,4 ,0,'Off to Darkshire then, I suppose.',12,7,100,0,0,0,730,0,'Antonio Perelli'), +(844,5 ,0,'%s lets out a deep sigh.',16,0,100,0,0,0,683,0,'Antonio Perelli'), +(844,6 ,0,'I hate this part of my job. Oh Duskwood, be gentle with poor Antonio.',12,7,100,0,0,0,684,0,'Antonio Perelli'), +(844,7 ,0,'Travelers and adventurers make haste to the town circle and take advantage of Antonio\'s wonderful prices! Come one, come all!',12,7,100,22,0,0,688,0,'Antonio Perelli'), +(844,7 ,1,'Well met, travelers of Duskwood! My incredible wares are on sale for a short time in Darkshire. Make haste!',12,7,100,22,0,0,689,0,'Antonio Perelli'), +(844,7 ,2,'Leave your battles or errands, and browse my incredible wares! Only in Darkshire for a short time... praise the Light for that.',12,7,100,22,0,0,690,0,'Antonio Perelli'), +(844,8 ,0,'Farewell, citizens of Darkshire. Until next time...',12,7,100,3,0,0,691,0,'Antonio Perelli'), +(844,9 ,0,'Finally, Redridge. A pleasant change from the dark, cold fog of Duskwood.',12,7,100,0,0,0,692,0,'Antonio Perelli'), +(844,10,0,'Hello, hello, Amy. It\'s good to be back in Lakeshire and to see you, milady.',12,7,100,3,0,0,702,0,'Antonio Perelli'), +(844,11,0,'I\'ve finally reached Lakeshire-- come one, come all, and take advantage of Antonio Perelli\'s wonderful deals.',12,7,100,22,0,0,712,0,'Antonio Perelli'), +(844,11,1,'Items powerful enough to help make the journey through Duskwood, Antonio Perelli\'s goods are now for sale here in Lakeshire.',12,7,100,22,0,0,713,0,'Antonio Perelli'), +(844,11,2,'Hear ye, hear ye! I\'ll pause to sell my wares for only a short time here in Lakeshire. Come to the town hall with haste!',12,7,100,22,0,0,704,0,'Antonio Perelli'), +(844,12,0,'Good to see you again, Amy. Be safe, luv. I\'m off to Goldshire now.',12,7,100,0,0,0,714,0,'Antonio Perelli'), +(844,13,0,'Hello, my friends. It is good to see you again. Still keeping our borders free I see. Antonio appreciates your hard work.',12,7,100,3,0,0,716,0,'Antonio Perelli'), +(844,14,0,'You\'re very welcome! I must be on my way... be safe, all of you.',12,7,100,1,0,0,717,0,'Antonio Perelli'), +(844,15,0,'Oh, I will, my friend. I will indeed. You, too, be safe.',12,7,100,0,0,0,720,0,'Antonio Perelli'), +(844,16,0,'Items of antiquity, weapons of war, armor or rarity. Who knows what Antonio will be carrying this week if you do not come look.',12,7,100,22,0,0,685,0,'Antonio Perelli'), +(844,16,1,'This week it could be eye of newt, or perhaps a treasure map. You\'ll never know unless you look. What could Antonio have?',12,7,100,22,0,0,686,0,'Antonio Perelli'), +(844,16,2,'Adventurers from all over sell things to Antonio-- come look for yourselves what little treasures he has for you this week.',12,7,100,22,0,0,687,0,'Antonio Perelli'), +(777,0,0,'Hello, Antonio. It\'s good to see you safely made it here again. Let me know if you need anything.',12,7,100,1,0,0,703,0,'Amy Davenport'), +(777,1,0,'Take care of yourself, Antonio. I\'ll see you in another week.',12,7,100,3,0,0,715,0,'Amy Davenport'), +(1423,0,0,'Hello again, Antonio. Thank you again for the hat for my wife. She adored it.',12,7,100,0,0,0,718,0,'Stormwind Guard'), +(1423,1,0,'Be safe, Antonio.',12,7,100,0,0,0,719,0,'Stormwind Guard'); + +DELETE FROM `creature_addon` WHERE (`guid` IN (81181)); +DELETE FROM `waypoint_data` WHERE `id` = 811810; + +DELETE FROM `creature` WHERE `id1`=844 AND `guid`=81181; +INSERT INTO `creature` (`guid`, `id1`, `map`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`) VALUES +(81181, 844, 0, 1, -9628.33, -1176.14, 39.9827, 0.992539, 300); + +DELETE FROM `creature_addon` WHERE `guid`=81181; +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(81181, 811810, 0, 0, 1, 0, 0, NULL); + +DELETE FROM `waypoints` WHERE `entry` BETWEEN 84400 AND 84414; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(84400,1 ,-9628.33,-1176.14,39.9827,'AntonioPerelli'), +(84400,2 ,-9622.15,-1162.8,41.844,'AntonioPerelli'), +(84400,3 ,-9615.5,-1130.42,42.5478,'AntonioPerelli'), +(84400,4 ,-9613.92,-1085.01,39.9107,'AntonioPerelli'), +(84400,5 ,-9616.21,-1059.83,39.8157,'AntonioPerelli'), +(84400,6 ,-9616.79,-1054.03,40.3707,'AntonioPerelli'), +(84400,7 ,-9617.74,-1044.5,39.6632,'AntonioPerelli'), +(84401,1 ,-9619.11,-1030.77,39.7045,'AntonioPerelli'), +(84401,2 ,-9621.47,-1005.62,42.0004,'AntonioPerelli'), +(84401,3 ,-9620.81,-985.471,43.2713,'AntonioPerelli'), +(84401,4 ,-9613.09,-966.993,43.8261,'AntonioPerelli'), +(84401,5 ,-9585.3,-926.916,43.2905,'AntonioPerelli'), +(84401,6 ,-9580.38,-890.055,43.568,'AntonioPerelli'), +(84401,7 ,-9589.39,-864.283,43.7264,'AntonioPerelli'), +(84401,8 ,-9624.39,-825.177,43.7025,'AntonioPerelli'), +(84401,9 ,-9647.81,-795.14,43.6049,'AntonioPerelli'), +(84401,10,-9650.68,-783.491,44.2108,'AntonioPerelli'), +(84401,11,-9654.59,-741.551,44.5521,'AntonioPerelli'), +(84401,12,-9653.75,-724.91,44.3631,'AntonioPerelli'), +(84401,13,-9643.18,-675.147,48.7801,'AntonioPerelli'), +(84401,14,-9637.25,-656.76,49.563,'AntonioPerelli'), +(84401,15,-9628.46,-641.716,50.8846,'AntonioPerelli'), +(84401,16,-9622.21,-623.616,51.8867,'AntonioPerelli'), +(84401,17,-9620.62,-585.027,53.9861,'AntonioPerelli'), +(84401,18,-9615.58,-547.328,54.3829,'AntonioPerelli'), +(84401,19,-9599.33,-514.005,57.2836,'AntonioPerelli'), +(84401,20,-9589.68,-491.036,57.6179,'AntonioPerelli'), +(84401,21,-9590.01,-471.08,57.7791,'AntonioPerelli'), +(84401,22,-9610.27,-429.397,57.4384,'AntonioPerelli'), +(84401,23,-9617.12,-403.695,57.4755,'AntonioPerelli'), +(84401,24,-9620.8,-350.287,57.0423,'AntonioPerelli'), +(84401,25,-9619.14,-304.976,57.3787,'AntonioPerelli'), +(84401,26,-9616.08,-289.846,57.3036,'AntonioPerelli'), +(84401,27,-9611.01,-267.445,57.2309,'AntonioPerelli'), +(84401,28,-9600.99,-233.906,57.4913,'AntonioPerelli'), +(84401,29,-9593.56,-210.251,57.474,'AntonioPerelli'), +(84401,30,-9572.9,-162.912,57.7034,'AntonioPerelli'), +(84401,31,-9556.06,-140.039,57.3349,'AntonioPerelli'), +(84401,32,-9550.49,-119.764,57.5015,'AntonioPerelli'), +(84401,33,-9547.76,-72.0136,57.4263,'AntonioPerelli'), +(84401,34,-9539.41,-36.6336,56.4481,'AntonioPerelli'), +(84401,35,-9516.71,7.89289,56.0952,'AntonioPerelli'), +(84401,36,-9500.4,44.1439,55.9721,'AntonioPerelli'), +(84401,37,-9490.19,57.6428,56.0117,'AntonioPerelli'), +(84401,38,-9478.19,63.1176,56.1707,'AntonioPerelli'), +(84401,39,-9463.42,61.0766,55.9612,'AntonioPerelli'), +(84402,1 ,-9458.63,53.1014,56.2968,'AntonioPerelli'), +(84402,2 ,-9460.45,36.4152,56.9501,'AntonioPerelli'), +(84402,3 ,-9467.21,36.6259,56.9649,'AntonioPerelli'), +(84402,4 ,-9467.52,30.389,56.9649,'AntonioPerelli'), +(84402,5 ,-9467.76,25.4583,56.3399,'AntonioPerelli'), +(84402,6 ,-9468.54,19.2089,56.9634,'AntonioPerelli'), +(84402,7 ,-9466.51,15.5142,56.9634,'AntonioPerelli'), +(84403,1 ,-9468.78,18.7939,56.9634,'AntonioPerelli'), +(84403,2 ,-9467.97,23.838,56.3397,'AntonioPerelli'), +(84403,3 ,-9467.33,30.1063,56.9664,'AntonioPerelli'), +(84403,4 ,-9468.05,36.1106,56.9664,'AntonioPerelli'), +(84403,5 ,-9460.5,36.2366,56.9516,'AntonioPerelli'), +(84403,6 ,-9458.51,50.9179,56.5144,'AntonioPerelli'), +(84403,7 ,-9461.25,60.427,55.9169,'AntonioPerelli'), +(84403,8 ,-9484.57,68.9656,56.3056,'AntonioPerelli'), +(84403,9 ,-9487.32,79.8572,56.0447,'AntonioPerelli'), +(84403,10,-9481.79,116.391,56.5505,'AntonioPerelli'), +(84403,11,-9481.69,158.113,56.0987,'AntonioPerelli'), +(84403,12,-9484.71,182.812,55.2594,'AntonioPerelli'), +(84403,13,-9502.95,212.588,53.3357,'AntonioPerelli'), +(84403,14,-9523.8,235.689,51.3777,'AntonioPerelli'), +(84403,15,-9542.6,247.273,50.4008,'AntonioPerelli'), +(84403,16,-9600.25,250.499,47.5452,'AntonioPerelli'), +(84403,17,-9650.26,256.059,46.5437,'AntonioPerelli'), +(84403,18,-9674.3,270.692,46.438,'AntonioPerelli'), +(84403,19,-9694.47,290.452,46.2332,'AntonioPerelli'), +(84403,20,-9716.93,321.307,44.5799,'AntonioPerelli'), +(84403,21,-9736.52,357.126,42.2989,'AntonioPerelli'), +(84403,22,-9752.82,403.584,38.9407,'AntonioPerelli'), +(84403,23,-9756.66,441.174,36.1087,'AntonioPerelli'), +(84403,24,-9749.32,484.488,33.1644,'AntonioPerelli'), +(84403,25,-9745.53,514.2,35.3443,'AntonioPerelli'), +(84403,26,-9743.16,539.005,36.2891,'AntonioPerelli'), +(84403,27,-9741.47,554.714,35.3796,'AntonioPerelli'), +(84404,1 ,-9739.33,603.519,30.7252,'AntonioPerelli'), +(84404,2 ,-9756.05,661.766,27.8879,'AntonioPerelli'), +(84404,3 ,-9759.65,679.766,26.9697,'AntonioPerelli'), +(84404,4 ,-9757.05,708.034,25.3081,'AntonioPerelli'), +(84404,5 ,-9752.14,727.79,25.022,'AntonioPerelli'), +(84404,6 ,-9753.91,755.734,25.0339,'AntonioPerelli'), +(84404,7 ,-9768.33,792.769,24.9121,'AntonioPerelli'), +(84404,8 ,-9784.38,813.988,25.8176,'AntonioPerelli'), +(84404,9 ,-9803.34,835.94,29.1361,'AntonioPerelli'), +(84404,10,-9825.83,862.56,25.7335,'AntonioPerelli'), +(84404,11,-9839.8,887.068,27.6202,'AntonioPerelli'), +(84404,12,-9849.03,905.659,29.7641,'AntonioPerelli'), +(84404,13,-9870.31,929.747,30.2423,'AntonioPerelli'), +(84404,14,-9872.99,944.904,31.0865,'AntonioPerelli'), +(84404,15,-9873.91,963.221,31.0943,'AntonioPerelli'), +(84404,16,-9890.21,983.668,31.2368,'AntonioPerelli'), +(84404,17,-9902.32,986.682,31.0078,'AntonioPerelli'), +(84404,18,-9915.92,987.012,31.3307,'AntonioPerelli'), +(84404,19,-9942.53,997.533,31.5275,'AntonioPerelli'), +(84404,20,-9950.35,1002.6,31.493,'AntonioPerelli'), +(84404,21,-9966.25,1004.62,31.4426,'AntonioPerelli'), +(84404,22,-9984.12,999.33,31.4995,'AntonioPerelli'), +(84404,23,-10012.4,986.375,32.1868,'AntonioPerelli'), +(84404,24,-10032,981.591,32.7979,'AntonioPerelli'), +(84404,25,-10048.4,991.613,33,'AntonioPerelli'), +(84404,26,-10065.8,1004.01,32.9621,'AntonioPerelli'), +(84404,27,-10077.8,1008.09,33.6352,'AntonioPerelli'), +(84404,28,-10091.5,1004.08,35.0322,'AntonioPerelli'), +(84404,29,-10102.5,997.143,37.8542,'AntonioPerelli'), +(84404,30,-10115,990.143,38.1126,'AntonioPerelli'), +(84404,31,-10138.8,989.662,35.4399,'AntonioPerelli'), +(84404,32,-10173.1,986.229,34.3853,'AntonioPerelli'), +(84404,33,-10193.3,986.28,33.3909,'AntonioPerelli'), +(84404,34,-10218.7,993.943,32.4148,'AntonioPerelli'), +(84404,35,-10249.6,993.797,31.1323,'AntonioPerelli'), +(84404,36,-10261.1,988.929,31.2717,'AntonioPerelli'), +(84404,37,-10274.5,972.885,31.1455,'AntonioPerelli'), +(84404,38,-10286.7,964.385,31.1283,'AntonioPerelli'), +(84404,39,-10308.6,967.897,31.1276,'AntonioPerelli'), +(84404,40,-10331.8,978.769,31.1307,'AntonioPerelli'), +(84404,41,-10376.4,981.008,31.127,'AntonioPerelli'), +(84404,42,-10402,993.461,31.6223,'AntonioPerelli'), +(84404,43,-10414.9,992.967,32.4952,'AntonioPerelli'), +(84404,44,-10431.7,983.544,34.3848,'AntonioPerelli'), +(84404,45,-10472.1,953.672,36.1688,'AntonioPerelli'), +(84404,46,-10509.5,954.609,40.461,'AntonioPerelli'), +(84404,47,-10549.2,968.808,41.3401,'AntonioPerelli'), +(84404,48,-10572.3,980.064,39.3883,'AntonioPerelli'), +(84404,49,-10622,1002.8,32.7905,'AntonioPerelli'), +(84404,50,-10637.5,1006.52,32.1902,'AntonioPerelli'), +(84404,51,-10651.9,1000.25,32.8541,'AntonioPerelli'), +(84405,1 ,-10656.5,1000.94,32.8737,'AntonioPerelli'), +(84405,2 ,-10659.1,1010.24,32.7264,'AntonioPerelli'), +(84405,3 ,-10661,1026.66,32.4494,'AntonioPerelli'), +(84405,4 ,-10653.9,1038.76,33.4565,'AntonioPerelli'), +(84405,5 ,-10634.4,1065.4,33.7203,'AntonioPerelli'), +(84405,6 ,-10631.8,1091.59,33.7009,'AntonioPerelli'), +(84405,7 ,-10623.4,1102.74,33.8455,'AntonioPerelli'), +(84405,8 ,-10633.6,1144.49,33.7048,'AntonioPerelli'), +(84405,9 ,-10641.8,1158.94,33.267,'AntonioPerelli'), +(84405,10,-10645.1,1161.78,34.3724,'AntonioPerelli'), +(84405,11,-10649.1,1165.21,34.4199,'AntonioPerelli'), +(84406,1 ,-10645,1161.65,34.3691,'AntonioPerelli'), +(84406,2 ,-10643,1159.89,33.2028,'AntonioPerelli'), +(84406,3 ,-10633.6,1143.93,33.7027,'AntonioPerelli'), +(84406,4 ,-10623.7,1104.62,33.8957,'AntonioPerelli'), +(84406,5 ,-10632.2,1090.97,33.6979,'AntonioPerelli'), +(84406,6 ,-10634.9,1066.3,33.7195,'AntonioPerelli'), +(84406,7 ,-10660.9,1030.7,32.7179,'AntonioPerelli'), +(84406,8 ,-10708,1035.17,33.1656,'AntonioPerelli'), +(84406,9 ,-10737.1,1024.19,33.3604,'AntonioPerelli'), +(84406,10,-10752.4,1017.56,32.9291,'AntonioPerelli'), +(84406,11,-10807.3,1017.29,32.3752,'AntonioPerelli'), +(84406,12,-10830.3,1008.83,32.8154,'AntonioPerelli'), +(84406,13,-10863.8,1006.08,31.5577,'AntonioPerelli'), +(84406,14,-10885.7,1004.49,33.5879,'AntonioPerelli'), +(84406,15,-10903,998.288,35.9247,'AntonioPerelli'), +(84406,16,-10919,993.385,35.4282,'AntonioPerelli'), +(84406,17,-10939.6,970.662,32.9806,'AntonioPerelli'), +(84406,18,-10948.4,948.316,31.5386,'AntonioPerelli'), +(84406,19,-10948.7,936.686,31.5056,'AntonioPerelli'), +(84406,20,-10937.6,924.241,31.5289,'AntonioPerelli'), +(84406,21,-10916.5,906.374,32.0018,'AntonioPerelli'), +(84406,22,-10912.9,888.234,31.6858,'AntonioPerelli'), +(84406,23,-10917.6,866.612,32.7737,'AntonioPerelli'), +(84406,24,-10926.5,850.413,32.6872,'AntonioPerelli'), +(84406,25,-10928.5,830.748,32.2528,'AntonioPerelli'), +(84406,26,-10925.4,814.334,31.1569,'AntonioPerelli'), +(84406,27,-10914.5,793.723,30.8363,'AntonioPerelli'), +(84406,28,-10892.5,767.105,30.8183,'AntonioPerelli'), +(84406,29,-10878.6,746.377,30.9966,'AntonioPerelli'), +(84406,30,-10866.5,668.83,30.9623,'AntonioPerelli'), +(84406,31,-10865.2,628.683,31.3461,'AntonioPerelli'), +(84406,32,-10864.3,591.272,31.2185,'AntonioPerelli'), +(84407,1 ,-10856.1,551.661,30.4888,'AntonioPerelli'), +(84407,2 ,-10840.7,500.676,30.1222,'AntonioPerelli'), +(84407,3 ,-10826.9,461.017,29.5704,'AntonioPerelli'), +(84407,4 ,-10819.2,410.919,29.3886,'AntonioPerelli'), +(84407,5 ,-10815.2,359.497,29.8396,'AntonioPerelli'), +(84407,6 ,-10812.8,319.354,30.5916,'AntonioPerelli'), +(84407,7 ,-10806.3,293.866,30.9536,'AntonioPerelli'), +(84407,8 ,-10801.2,258.47,30.4944,'AntonioPerelli'), +(84407,9 ,-10790.2,209.737,30.6327,'AntonioPerelli'), +(84407,10,-10783,190.387,30.4605,'AntonioPerelli'), +(84407,11,-10771.8,166.37,29.5841,'AntonioPerelli'), +(84407,12,-10756.5,137.889,29.068,'AntonioPerelli'), +(84407,13,-10753.5,122.478,28.8978,'AntonioPerelli'), +(84407,14,-10753.6,89.1802,28.6112,'AntonioPerelli'), +(84407,15,-10755.3,74.5614,28.8126,'AntonioPerelli'), +(84407,16,-10766.1,42.4699,28.6458,'AntonioPerelli'), +(84407,17,-10782.7,2.99363,29.7558,'AntonioPerelli'), +(84407,18,-10792.1,-29.9934,29.5786,'AntonioPerelli'), +(84407,19,-10803.5,-68.2885,29.3413,'AntonioPerelli'), +(84407,20,-10821.4,-116.01,29.8458,'AntonioPerelli'), +(84407,21,-10826.2,-131.192,31.6586,'AntonioPerelli'), +(84407,22,-10832.4,-150.146,31.8923,'AntonioPerelli'), +(84407,23,-10836.1,-162.59,33.7404,'AntonioPerelli'), +(84407,24,-10841.6,-182.408,34.0842,'AntonioPerelli'), +(84407,25,-10849.9,-215.655,37.76,'AntonioPerelli'), +(84407,26,-10856.5,-250.779,38.2612,'AntonioPerelli'), +(84407,27,-10863.9,-280.892,38.1165,'AntonioPerelli'), +(84407,28,-10874.5,-308.623,38.1986,'AntonioPerelli'), +(84407,29,-10884,-331.111,37.805,'AntonioPerelli'), +(84407,30,-10888.1,-341.543,39.0654,'AntonioPerelli'), +(84407,31,-10903,-370.581,39.76,'AntonioPerelli'), +(84408,1 ,-10904.4,-405.245,41.2241,'AntonioPerelli'), +(84408,2 ,-10905.1,-432.23,42.7922,'AntonioPerelli'), +(84408,3 ,-10909.6,-459.797,46.3385,'AntonioPerelli'), +(84408,4 ,-10911.1,-502.158,51.4105,'AntonioPerelli'), +(84408,5 ,-10914,-522.442,53.6616,'AntonioPerelli'), +(84408,6 ,-10920.2,-547.238,53.9669,'AntonioPerelli'), +(84408,7 ,-10931.7,-571.487,54.0921,'AntonioPerelli'), +(84408,8 ,-10950.1,-595.917,55.1088,'AntonioPerelli'), +(84408,9 ,-10959.2,-624.837,55.1194,'AntonioPerelli'), +(84408,10,-10957,-647.869,55.2668,'AntonioPerelli'), +(84408,11,-10936,-679.029,55.6427,'AntonioPerelli'), +(84408,12,-10916,-714.118,55.4351,'AntonioPerelli'), +(84408,13,-10898.5,-740.506,55.3497,'AntonioPerelli'), +(84408,14,-10854.3,-785.637,56.3527,'AntonioPerelli'), +(84408,15,-10835.1,-815.404,56.3257,'AntonioPerelli'), +(84408,16,-10822.1,-842.365,55.9302,'AntonioPerelli'), +(84408,17,-10809.8,-872.74,56.0415,'AntonioPerelli'), +(84408,18,-10798,-913.796,55.8565,'AntonioPerelli'), +(84408,19,-10798.2,-938.984,56.4856,'AntonioPerelli'), +(84408,20,-10807.4,-967.996,56.3382,'AntonioPerelli'), +(84408,21,-10807.7,-993.592,53.6461,'AntonioPerelli'), +(84408,22,-10806.2,-1029.44,47.2018,'AntonioPerelli'), +(84408,23,-10799.9,-1051.36,43.2364,'AntonioPerelli'), +(84408,24,-10789,-1072.29,38.2623,'AntonioPerelli'), +(84408,25,-10780.4,-1115.51,29.916,'AntonioPerelli'), +(84408,26,-10764.5,-1139.13,27.0996,'AntonioPerelli'), +(84408,27,-10732,-1164.75,26.7837,'AntonioPerelli'), +(84408,28,-10695.2,-1185.92,27.1067,'AntonioPerelli'), +(84408,29,-10670.9,-1193.4,27.689,'AntonioPerelli'), +(84408,30,-10650.7,-1192.44,28.6031,'AntonioPerelli'), +(84408,31,-10603,-1180.95,27.9157,'AntonioPerelli'), +(84408,32,-10584.2,-1177.57,28.4772,'AntonioPerelli'), +(84408,33,-10574.1,-1168.87,28.1413,'AntonioPerelli'), +(84408,34,-10562.8,-1159.1,27.7368,'AntonioPerelli'), +(84408,35,-10546.8,-1160.06,27.9203,'AntonioPerelli'), +(84408,36,-10536.7,-1159.85,28.0874,'AntonioPerelli'), +(84408,37,-10534.9,-1167.4,28.1015,'AntonioPerelli'), +(84408,38,-10529.1,-1165.16,28.1015,'AntonioPerelli'), +(84408,39,-10524.3,-1164.95,27.4773,'AntonioPerelli'), +(84408,40,-10517.7,-1164.14,28.0999,'AntonioPerelli'), +(84409,1,-10522,-1164.37,27.4774,'AntonioPerelli'), +(84409,2,-10529,-1165.1,28.1041,'AntonioPerelli'), +(84409,3,-10535.1,-1167.3,28.1041,'AntonioPerelli'), +(84409,4,-10536.2,-1159.53,28.087,'AntonioPerelli'), +(84409,5,-10548.2,-1160.22,27.895,'AntonioPerelli'), +(84409,6,-10557.5,-1177.22,27.886,'AntonioPerelli'), +(84410,1 ,-10552.4,-1188.08,27.9772,'AntonioPerelli'), +(84410,2 ,-10518.6,-1186.6,28.0283,'AntonioPerelli'), +(84410,3 ,-10467.6,-1181.5,27.6555,'AntonioPerelli'), +(84410,4 ,-10437.5,-1168.98,27.7682,'AntonioPerelli'), +(84410,5 ,-10427.1,-1157.17,27.0882,'AntonioPerelli'), +(84410,6 ,-10415,-1133.61,23.9848,'AntonioPerelli'), +(84410,7 ,-10402.6,-1122.88,22.7764,'AntonioPerelli'), +(84410,8 ,-10388.1,-1116.72,22.1176,'AntonioPerelli'), +(84410,9 ,-10354.2,-1116.12,21.3784,'AntonioPerelli'), +(84410,10,-10327.7,-1124.59,21.8065,'AntonioPerelli'), +(84410,11,-10301.1,-1145.42,22.9181,'AntonioPerelli'), +(84410,12,-10278.5,-1153.88,22.7547,'AntonioPerelli'), +(84410,13,-10241.4,-1155.13,21.4632,'AntonioPerelli'), +(84410,14,-10224.4,-1153.29,22.4328,'AntonioPerelli'), +(84410,15,-10197.7,-1146.48,23.5344,'AntonioPerelli'), +(84410,16,-10167.9,-1148.3,25.0296,'AntonioPerelli'), +(84410,17,-10145.2,-1158.71,24.5414,'AntonioPerelli'), +(84410,18,-10129.1,-1175.12,25.6453,'AntonioPerelli'), +(84410,19,-10124.2,-1191.5,26.0067,'AntonioPerelli'), +(84410,20,-10109.8,-1215.03,26.2236,'AntonioPerelli'), +(84410,21,-10088.6,-1266.55,30.8014,'AntonioPerelli'), +(84410,22,-10085,-1288.02,31.8366,'AntonioPerelli'), +(84410,23,-10082.7,-1316.64,31.8256,'AntonioPerelli'), +(84410,24,-10076.5,-1370.3,30.644,'AntonioPerelli'), +(84411,1 ,-10082.9,-1391.74,29.7196,'AntonioPerelli'), +(84411,2 ,-10084,-1418.02,28.7734,'AntonioPerelli'), +(84411,3 ,-10082.2,-1470.18,28.2155,'AntonioPerelli'), +(84411,4 ,-10074.2,-1487.92,29.2079,'AntonioPerelli'), +(84411,5 ,-10065.7,-1506.51,28.6594,'AntonioPerelli'), +(84411,6 ,-10041.6,-1532.86,28.5861,'AntonioPerelli'), +(84411,7 ,-10022.5,-1548.55,28.1352,'AntonioPerelli'), +(84411,8 ,-10005,-1581.7,26.4701,'AntonioPerelli'), +(84411,9 ,-9984.98,-1619.1,27.4708,'AntonioPerelli'), +(84411,10,-9951.41,-1667.43,25.4245,'AntonioPerelli'), +(84411,11,-9925.78,-1696.36,22.9439,'AntonioPerelli'), +(84411,12,-9897.08,-1710.83,26.0868,'AntonioPerelli'), +(84411,13,-9869.15,-1725.69,23.2218,'AntonioPerelli'), +(84411,14,-9852.03,-1752.42,22.4103,'AntonioPerelli'), +(84411,15,-9826.76,-1782.1,23.1369,'AntonioPerelli'), +(84411,16,-9790.31,-1802.4,27.6857,'AntonioPerelli'), +(84411,17,-9755.52,-1831.02,38.4034,'AntonioPerelli'), +(84411,18,-9734.99,-1860.02,45.889,'AntonioPerelli'), +(84411,19,-9719.51,-1879.1,49.2752,'AntonioPerelli'), +(84411,20,-9696.05,-1891.74,51.9546,'AntonioPerelli'), +(84411,21,-9660.99,-1899.52,55.5988,'AntonioPerelli'), +(84411,22,-9623.98,-1907.1,59.5171,'AntonioPerelli'), +(84412,1 ,-9596.44,-1932.23,63.2302,'AntonioPerelli'), +(84412,2 ,-9577.14,-1957.51,67.1923,'AntonioPerelli'), +(84412,3 ,-9579.4,-1981.08,66.6988,'AntonioPerelli'), +(84412,4 ,-9590.23,-2008.11,65.5707,'AntonioPerelli'), +(84412,5 ,-9587.03,-2057.37,65.0636,'AntonioPerelli'), +(84412,6 ,-9593.27,-2065.16,64.0651,'AntonioPerelli'), +(84412,7 ,-9619.08,-2072.71,61.2767,'AntonioPerelli'), +(84412,8 ,-9629.9,-2085.51,61.2144,'AntonioPerelli'), +(84412,9 ,-9623.13,-2102.23,61.8005,'AntonioPerelli'), +(84412,10,-9585.37,-2139.41,70.6677,'AntonioPerelli'), +(84412,11,-9572.79,-2161.46,78.4667,'AntonioPerelli'), +(84412,12,-9559.86,-2193.73,91.9311,'AntonioPerelli'), +(84412,13,-9553.54,-2204.55,93.4205,'AntonioPerelli'), +(84412,14,-9545.26,-2216.21,90.1241,'AntonioPerelli'), +(84412,15,-9515.68,-2246.76,78.2549,'AntonioPerelli'), +(84412,16,-9495.2,-2259.02,75.7786,'AntonioPerelli'), +(84412,17,-9436.89,-2273.81,70.5468,'AntonioPerelli'), +(84412,18,-9404.95,-2275.21,67.5449,'AntonioPerelli'), +(84412,19,-9367.3,-2278.23,71.3703,'AntonioPerelli'), +(84412,20,-9323.04,-2280.83,71.2278,'AntonioPerelli'), +(84412,21,-9290.92,-2282.85,67.5443,'AntonioPerelli'), +(84412,22,-9275.53,-2278.49,67.6409,'AntonioPerelli'), +(84412,23,-9271.57,-2253.45,64.5705,'AntonioPerelli'), +(84412,24,-9271.4,-2243.12,64.0434,'AntonioPerelli'), +(84412,25,-9270.34,-2208.37,64.058,'AntonioPerelli'), +(84412,26,-9264.62,-2202.9,64.058,'AntonioPerelli'), +(84413,1,-9264.48,-2191.18,64.0898,'AntonioPerelli'), +(84413,2,-9255.26,-2174.39,64.0583,'AntonioPerelli'), +(84413,3,-9255.02,-2153.34,64.0497,'AntonioPerelli'), +(84413,4,-9247.16,-2148.63,64.056,'AntonioPerelli'), +(84413,5,-9238.09,-2148.74,64.3415,'AntonioPerelli'), +(84413,6,-9237.44,-2156.86,64.3561,'AntonioPerelli'), +(84413,7,-9231.55,-2155.36,64.3575,'AntonioPerelli'), +(84413,8,-9226.45,-2155.2,63.7312,'AntonioPerelli'), +(84414,1 ,-9220.1,-2155,64.354,'AntonioPerelli'), +(84414,2 ,-9216.06,-2153.68,64.354,'AntonioPerelli'), +(84414,3 ,-9219.77,-2155.01,64.354,'AntonioPerelli'), +(84414,4 ,-9225.41,-2155.13,63.7311,'AntonioPerelli'), +(84414,5 ,-9231.15,-2155.25,64.3584,'AntonioPerelli'), +(84414,6 ,-9237.31,-2156.77,64.3584,'AntonioPerelli'), +(84414,7 ,-9238.18,-2148.76,64.3411,'AntonioPerelli'), +(84414,8 ,-9249.15,-2148.55,63.9338,'AntonioPerelli'), +(84414,9 ,-9257.67,-2157.13,64.0348,'AntonioPerelli'), +(84414,10,-9258.62,-2177.93,64.0579,'AntonioPerelli'), +(84414,11,-9264.72,-2191.18,64.0894,'AntonioPerelli'), +(84414,12,-9271.9,-2241.98,63.9644,'AntonioPerelli'), +(84414,13,-9272.98,-2264.72,66.2602,'AntonioPerelli'), +(84414,14,-9274.58,-2277.91,67.6425,'AntonioPerelli'), +(84414,15,-9290.22,-2283.7,67.545,'AntonioPerelli'), +(84414,16,-9322.94,-2280.98,71.2242,'AntonioPerelli'), +(84414,17,-9363.92,-2277.63,71.4815,'AntonioPerelli'), +(84414,18,-9403.79,-2274.33,67.5443,'AntonioPerelli'), +(84414,19,-9436.23,-2270.65,70.3375,'AntonioPerelli'), +(84414,20,-9475.93,-2262.14,74.7237,'AntonioPerelli'), +(84414,21,-9511.57,-2246.59,77.7952,'AntonioPerelli'), +(84414,22,-9545.38,-2211.74,91.4116,'AntonioPerelli'), +(84414,23,-9549.87,-2205.41,93.3445,'AntonioPerelli'), +(84414,24,-9555.7,-2195.05,92.6847,'AntonioPerelli'), +(84414,25,-9575.72,-2149.26,74.493,'AntonioPerelli'), +(84414,26,-9591.27,-2129.96,68.2226,'AntonioPerelli'), +(84414,27,-9624.54,-2096.38,61.4732,'AntonioPerelli'), +(84414,28,-9625.97,-2086,61.2153,'AntonioPerelli'), +(84414,29,-9620.49,-2078.53,61.2296,'AntonioPerelli'), +(84414,30,-9592.6,-2066.87,64.0926,'AntonioPerelli'), +(84414,31,-9584.56,-2056.78,65.3276,'AntonioPerelli'), +(84414,32,-9587.18,-2008.69,65.6429,'AntonioPerelli'), +(84414,33,-9575.86,-1973.91,66.8863,'AntonioPerelli'), +(84414,34,-9575.3,-1954.08,67.2295,'AntonioPerelli'), +(84414,35,-9583.7,-1911.68,62.5275,'AntonioPerelli'), +(84414,36,-9603.92,-1856.1,55.9317,'AntonioPerelli'), +(84414,37,-9614.42,-1830.99,52.7644,'AntonioPerelli'), +(84414,38,-9616.79,-1795.19,51.7746,'AntonioPerelli'), +(84414,39,-9612.04,-1757.8,54.948,'AntonioPerelli'), +(84414,40,-9611.03,-1741.91,56.7328,'AntonioPerelli'), +(84414,41,-9609.26,-1710.11,56.0571,'AntonioPerelli'), +(84414,42,-9621.76,-1660.48,56.1158,'AntonioPerelli'), +(84414,43,-9640.89,-1631.56,55.4084,'AntonioPerelli'), +(84414,44,-9646,-1615.21,55.9785,'AntonioPerelli'), +(84414,45,-9645.07,-1576.13,54.7603,'AntonioPerelli'), +(84414,46,-9646.25,-1548.95,53.9303,'AntonioPerelli'), +(84414,47,-9650.61,-1504.22,57.7693,'AntonioPerelli'), +(84414,48,-9653.71,-1479.23,55.5134,'AntonioPerelli'), +(84414,49,-9649.77,-1440.24,54.0637,'AntonioPerelli'), +(84414,50,-9659.08,-1402.37,53.0432,'AntonioPerelli'), +(84414,51,-9662.95,-1367.72,49.5712,'AntonioPerelli'), +(84414,52,-9658.17,-1333,48.4348,'AntonioPerelli'), +(84414,53,-9649.57,-1298.14,46.0543,'AntonioPerelli'), +(84414,54,-9648.9,-1267.82,42.7859,'AntonioPerelli'), +(84414,55,-9651.33,-1232.16,36.8859,'AntonioPerelli'), +(84414,56,-9649.54,-1211.18,36.187,'AntonioPerelli'), +(84414,57,-9642.71,-1195.66,37.1652,'AntonioPerelli'); diff --git a/data/sql/updates/db_world/2023_05_10_00.sql b/data/sql/updates/db_world/2023_05_10_00.sql new file mode 100644 index 000000000..fd5b4dd58 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_00.sql @@ -0,0 +1,83 @@ +-- DB update 2023_05_09_02 -> 2023_05_10_00 +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (32329, 34163, 34171, 31410, 31407, 22887); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES +(32329, 32329, 37965), +(34163, 34163, 37967), +(34171, 34171, 37956), +(31410, 31410, 37973), +(31407, 31407, 39413), +(22887, 22887, 40317); + +-- Complete Rewrites +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (17871, 17723, 17724, 17731, 17732, 20465, 19632, 17726, 17728, 17771, 17735, 17727, 17729, 17734)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17871, 0, 0, 0, 0, 0, 100, 0, 5600, 6100, 13350, 17000, 0, 11, 32329, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Shambler - In Combat - Cast \'Itchy Spores\''), +(17871, 0, 1, 0, 2, 0, 100, 0, 0, 75, 25000, 30000, 0, 11, 34163, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Shambler - Between 0-75% Health - Cast \'Fungal Regrowth\''), +(17871, 0, 2, 0, 0, 0, 100, 0, 1200, 8700, 16000, 22000, 0, 11, 31427, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Shambler - In Combat - Cast \'Allergies\''), +(17723, 0, 0, 0, 0, 0, 100, 0, 7100, 9700, 21850, 29250, 0, 11, 32065, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bog Giant - In Combat - Cast \'Fungal Decay\''), +(17723, 0, 1, 0, 0, 0, 100, 4, 10000, 10000, 10000, 10000, 0, 11, 40318, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bog Giant - In Combat - Cast \'Growth\' (Heroic Dungeon)'), +(17723, 0, 2, 0, 0, 0, 100, 0, 4500, 9600, 18200, 27100, 0, 11, 15550, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bog Giant - In Combat - Cast \'Trample\''), +(17723, 0, 3, 4, 2, 0, 100, 3, 0, 30, 0, 0, 0, 11, 8599, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bog Giant - Between 0-30% Health - Cast \'Enrage\' (Normal Dungeon)'), +(17723, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Bog Giant - Between 0-30% Health - Say Line 0 (Normal Dungeon)'), +(17724, 0, 0, 0, 67, 0, 100, 0, 1200, 12500, 0, 0, 0, 11, 34171, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbat - On Behind Target - Cast \'Tentacle Lash\''), +(17731, 0, 0, 0, 0, 0, 100, 0, 5800, 11850, 16300, 21500, 0, 11, 34984, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Fen Ray - In Combat - Cast \'Psychic Horror\''), +(17732, 0, 0, 0, 0, 0, 100, 0, 1600, 3200, 2850, 4900, 0, 11, 32330, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Lykul Wasp - In Combat - Cast \'Poison Spit\''), +(17732, 0, 1, 2, 2, 0, 100, 1, 0, 30, 0, 0, 0, 11, 8599, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Lykul Wasp - Between 0-30% Health - Cast \'Enrage\''), +(17732, 0, 2, 0, 61, 0, 100, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Lykul Wasp - Linked - Say Line 0'), +(17732, 0, 3, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 3, 0, 18722, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hack: Lykul Wasp - On Respawn - Morph To Model 18722'), +(20465, 0, 0, 0, 0, 0, 100, 0, 1200, 9600, 15350, 17000, 0, 11, 12097, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Frenzy - In Combat - Cast \'Pierce Armor\''), +(20465, 0, 1, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Frenzy - On Reset - Set Run On'), +(19632, 0, 0, 1, 2, 0, 100, 0, 0, 50, 14000, 18000, 0, 11, 34392, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Lykul Stinger - Between 0-50% Health - Cast \'Stinger Rage\''), +(19632, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Lykul Stinger - Between 0-50% Health - Say Line 0'), +(19632, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 3, 0, 19367, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hack: Lykul Stinger - On Reset - Morph To Model 19367'), +(17726, 0, 0, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Myrmidon - On Aggro - Say Line 0'), +(17726, 0, 1, 0, 0, 0, 100, 0, 4050, 16450, 10900, 21300, 0, 11, 31410, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Myrmidon - In Combat - Cast \'Coral Cut\''), +(17728, 0, 0, 0, 0, 0, 100, 0, 3650, 8700, 1200, 18250, 0, 11, 12057, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Tribesman - In Combat - Cast \'Strike\''), +(17728, 0, 1, 0, 2, 0, 100, 1, 0, 30, 0, 0, 0, 11, 8599, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Tribesman - Between 0-30% Health - Cast \'Enrage\' (No Repeat)'), +(17771, 0, 0, 0, 1, 0, 100, 0, 1000, 1000, 900000, 900000, 0, 11, 34880, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - Out of Combat - Cast \'Elemental Armor\''), +(17771, 0, 1, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 31, 1, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat - Set Random Phase (1-3) (No Repeat)'), +(17771, 0, 2, 0, 0, 1, 100, 2, 0, 0, 3200, 4800, 0, 11, 15497, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat CMC - Cast \'Frostbolt\' (Phase 1) (Normal Dungeon)'), +(17771, 0, 3, 0, 0, 1, 100, 4, 0, 0, 3200, 4800, 0, 11, 12675, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat CMC - Cast \'Frostbolt\' (Phase 1) (Heroic Dungeon)'), +(17771, 0, 4, 0, 0, 1, 100, 2, 8700, 8700, 19000, 19000, 0, 11, 32192, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat - Cast \'Frost Nova\' (Phase 1) (Normal Dungeon)'), +(17771, 0, 5, 0, 0, 1, 100, 4, 8700, 8700, 19000, 19000, 0, 11, 15531, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat - Cast \'Frost Nova\' (Phase 1) (Heroic Dungeon)'), +(17771, 0, 6, 0, 0, 2, 100, 2, 0, 0, 2400, 3800, 0, 11, 14034, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat CMC - Cast \'Fireball\' (Phase 2) (Normal Dungeon)'), +(17771, 0, 7, 0, 0, 2, 100, 4, 0, 0, 2400, 3800, 0, 11, 15228, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat CMC - Cast \'Fireball\' (Phase 2) (Heroic Dungeon)'), +(17771, 0, 8, 0, 0, 2, 100, 2, 3600, 3600, 12000, 15000, 0, 11, 15241, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat - Cast \'Scorch\' (Phase 2) (Normal Dungeon)'), +(17771, 0, 9, 0, 0, 2, 100, 4, 3600, 3600, 9000, 12000, 0, 11, 36807, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat - Cast \'Scorch\' (Phase 2) (Heroic Dungeon)'), +(17771, 0, 10, 0, 0, 4, 100, 2, 0, 0, 3100, 4700, 0, 11, 12471, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat CMC - Cast \'Shadow Bolt\' (Phase 3) (Normal Dungeon)'), +(17771, 0, 11, 0, 0, 4, 100, 4, 0, 0, 3100, 4700, 0, 11, 15232, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat CMC - Cast \'Shadow Bolt\' (Phase 3) (Heroic Dungeon)'), +(17771, 0, 12, 0, 0, 4, 100, 2, 7600, 7600, 3600, 10100, 0, 11, 31405, 32, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat - Cast \'Corruption\' (Phase 3) (Normal Dungeon)'), +(17771, 0, 13, 0, 0, 4, 100, 4, 7600, 7600, 6700, 6700, 0, 11, 37113, 32, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat - Cast \'Corruption\' (Phase 3) (Heroic Dungeon)'), +(17771, 0, 14, 0, 0, 0, 100, 0, 3000, 9000, 15000, 250000, 0, 11, 34880, 32, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - In Combat - Cast \'Elemental Armor\''), +(17771, 0, 15, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Oracle - Between 0-15% Health - Flee For Assist (No Repeat)'), +(17735, 0, 0, 0, 4, 0, 75, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Warrior - On Aggro - Say Line 0'), +(17735, 0, 1, 0, 0, 0, 100, 0, 4850, 9400, 1200, 24250, 0, 11, 11976, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Warrior - In Combat - Cast \'Strike\''), +(17735, 0, 2, 0, 13, 0, 100, 0, 4600, 4600, 0, 0, 0, 11, 11972, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Warrior - On Victim Casting - Cast \'Shield Bash\''), +(17735, 0, 3, 4, 2, 0, 100, 1, 0, 20, 0, 0, 0, 11, 8599, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Warrior - Between 0-20% Health - Cast \'Enrage\''), +(17735, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Warrior - Between 0-20% Health - Say Line 1'), +(17727, 0, 0, 0, 4, 0, 50, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Sentry - On Aggro - Say Line 0'), +(17727, 0, 1, 0, 0, 0, 100, 0, 6050, 13750, 1200, 16200, 0, 11, 11976, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Sentry - In Combat - Cast \'Strike\''), +(17727, 0, 2, 0, 0, 0, 100, 0, 12000, 15000, 17000, 22000, 0, 11, 11972, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wrathfin Sentry - In Combat - Cast \'Shield Bash\''), +(17729, 0, 0, 0, 0, 0, 100, 0, 850, 1600, 2400, 3600, 0, 11, 22887, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Spearman - In Combat - Cast \'Throw\''), +(17729, 0, 1, 0, 0, 0, 100, 0, 8800, 13600, 8200, 13300, 0, 11, 31407, 0, 0, 0, 0, 0, 5, 0, 0, 1, 0, 0, 0, 0, 0, 'Murkblood Spearman - In Combat - Cast \'Viper Sting\''), +(17729, 0, 2, 3, 2, 0, 100, 1, 0, 30, 0, 0, 0, 11, 8599, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Spearman - Between 0-30% Health - Cast \'Enrage\''), +(17729, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Murkblood Spearman - Linked - Say Line 0'), +(17734, 0, 0, 0, 0, 0, 100, 4, 10000, 10000, 10000, 10000, 0, 11, 40318, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Lord - In Combat - Cast \'Growth\' (Heroic Dungeon)'), +(17734, 0, 1, 2, 2, 0, 100, 3, 0, 30, 0, 0, 0, 11, 8599, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Lord - Between 0-30% Health - Cast \'Enrage\' (No Repeat) (Normal Dungeon)'), +(17734, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Underbog Lord - Between 0-30% Health - Say Line 0 (No Repeat) (Normal Dungeon)'), +(17734, 0, 3, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 3, 0, 17758, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hack: Underbog Lord - On Respawn - Morph To Model 17758'); + +DELETE FROM `creature_text` WHERE `CreatureID` IN (17723, 17729, 17734); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17723, 0, 0, '%s becomes enraged!', 16, 0, 100, 0, 0, 0, 24144, 0, 'Bog Giant'), +(17729, 0, 0, '%s goes into a frenzy!', 16, 0, 100, 0, 0, 0, 38630, 0, 'Murkblood Spearman'), +(17734, 0, 0, '%s goes into a frenzy!', 16, 0, 100, 0, 0, 0, 38630, 0, 'Underbog Lord'); + +DELETE FROM `creature_text` WHERE `CreatureID` = 17735 AND `GroupID` = 1; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17735, 1, 0, '%s becomes enraged!', 16, 0, 100, 0, 0, 0, 24144, 0, 'Wrathfin Warrior'); + +DELETE FROM `creature_template_addon` WHERE (`entry` IN (17734, 20187)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17734, 0, 0, 0, 1, 0, 0, '21737 32066'), +(20187, 0, 0, 0, 1, 0, 0, '21737 32066'); diff --git a/data/sql/updates/db_world/2023_05_10_01.sql b/data/sql/updates/db_world/2023_05_10_01.sql new file mode 100644 index 000000000..e90c3d21e --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_01.sql @@ -0,0 +1,11 @@ +-- DB update 2023_05_10_00 -> 2023_05_10_01 +-- +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (33617, 33783); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES +(33617, 33617, 39363), +(33783, 33783, 39364); + +DELETE FROM `spell_custom_attr` WHERE `spell_id` IN (33783, 39364); +INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES +(33783, 4194304), +(39364, 4194304); diff --git a/data/sql/updates/db_world/2023_05_10_02.sql b/data/sql/updates/db_world/2023_05_10_02.sql new file mode 100644 index 000000000..d1654110c --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_02.sql @@ -0,0 +1,200 @@ +-- DB update 2023_05_10_01 -> 2023_05_10_02 +-- Update spawnposition +UPDATE `creature` SET `position_x` = -2347.824219, `position_y` = -11363.384766, `position_z` = 27.942247, `orientation` = 1.895, `wander_distance` = 0, `MovementType` = 0 WHERE `guid` = 62369 AND `id1` = 17337; +UPDATE `creature` SET `position_x` = -2571.970459, `position_y` = -11343.209961, `position_z` = 25.304287, `wander_distance` = 10, `MovementType` = 1 WHERE `guid` = 62370 AND `id1` = 17338; +UPDATE `creature` SET `position_x` = -2551.867188, `position_y` = -11275.340820, `position_z` = 36.856060, `wander_distance` = 10, `MovementType` = 1 WHERE `guid` = 62391 AND `id1` = 17339; +UPDATE `creature` SET `position_x` = -2442.700684, `position_y` = -11346.622070, `position_z` = 30.975761, `wander_distance` = 10, `MovementType` = 1 WHERE `guid` = 62356 AND `id1` = 17337; +UPDATE `creature` SET `position_x` = -2331.138184, `position_y` = -11346.259766, `position_z` = 30.188799, `wander_distance` = 10, `MovementType` = 1 WHERE `guid` = 62388 AND `id1` = 17338; +UPDATE `creature` SET `position_x` = -2394.431396, `position_y` = -11369.132813, `position_z` = 30.477755, `wander_distance` = 10, `MovementType` = 1 WHERE `guid` = 62387 AND `id1` = 17338; +UPDATE `creature` SET `position_x` = -2418.719727, `position_y` = -11211.605469, `position_z` = 24.287613, `wander_distance` = 0, `MovementType` = 0 WHERE `guid` = 62399 AND `id1` = 17339; +UPDATE `creature` SET `position_x` = -2476.131348, `position_y` = -11252.391602, `position_z` = 28.754663 WHERE `guid` = 62358 AND `id1` = 17337; +UPDATE `creature` SET `position_x` = -2510.596924, `position_y` = -11405.423828, `position_z` = 39.383987 WHERE `guid` = 62371 AND `id1` = 17338; +UPDATE `creature` SET `position_x` = -2474.837158, `position_y` = -11339.492188, `position_z` = 33.152016 WHERE `guid` = 62390 AND `id1` = 17339; +UPDATE `creature` SET `wander_distance` = 0, `MovementType` = 0 WHERE `guid` IN (62394,62357,62404,62368,62403,62397,62396,62365,62366,62372,62389,62355,62378,62382,62373,62379); + +-- Waypoints & Text for Boss +UPDATE `creature` SET `position_x` = -2542.234375, `position_y` = -11328.796875, `position_z` = 22.867491, `orientation` = 0.662011, `wander_distance` = 0, `MovementType` = 0, `spawntimesecs` = 120 WHERE `guid` = 84399 AND `id1` = 17528; + +-- Tzerak SAI +SET @ENTRY := 17528; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,53,0,1752800,0,0,0,2,1,0,0,0,0,0,0,0,'Tzerak - On Respawn - Start Waypoint Aggressive'), +(@ENTRY,0,1,2,40,0,100,0,15,1752800,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,3.01264,'Tzerak - On Waypoint 15 Reached - Set Orientation 3.01264'), +(@ENTRY,0,2,0,61,0,100,0,0,0,0,0,41,120000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tzerak - On Waypoint 15 Reached - Despawn In 120000 ms'), +(@ENTRY,0,3,4,40,0,100,0,1,1752800,0,0,54,1000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tzerak - On Waypoint 1 Reached - Pause Waypoint'), +(@ENTRY,0,4,0,61,0,100,0,0,0,0,0,1,0,10000,0,0,0,0,1,0,0,0,0,0,0,0,'Tzerak - On Waypoint 1 Reached - Say Line 0'); + +DELETE FROM `waypoints` WHERE `entry` = 1752800; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `point_comment`) VALUES +(1752800, 1, -2542.23, -11328.8, 22.8675, NULL, 0, 'Tzerak'), +(1752800, 2, -2524.86, -11312.4, 25.5424, NULL, 0, 'Tzerak'), +(1752800, 3, -2516.88, -11305, 29.4704, NULL, 0, 'Tzerak'), +(1752800, 4, -2504.32, -11295.3, 32.0184, NULL, 0, 'Tzerak'), +(1752800, 5, -2484.1, -11275.5, 33.354, NULL, 0, 'Tzerak'), +(1752800, 6, -2470.59, -11269.7, 30.1162, NULL, 0, 'Tzerak'), +(1752800, 7, -2434.22, -11274.3, 30.9809, NULL, 0, 'Tzerak'), +(1752800, 8, -2417.37, -11278, 30.3146, NULL, 0, 'Tzerak'), +(1752800, 9, -2407.49, -11286, 33.2194, NULL, 0, 'Tzerak'), +(1752800, 10, -2395.33, -11298.7, 29.1992, NULL, 0, 'Tzerak'), +(1752800, 11, -2384.19, -11290, 31.0475, NULL, 0, 'Tzerak'), +(1752800, 12, -2359.67, -11270.9, 28.8272, NULL, 0, 'Tzerak'), +(1752800, 13, -2347.69, -11268.9, 30.022, NULL, 0, 'Tzerak'), +(1752800, 14, -2315.89, -11266.3, 35.8439, NULL, 0, 'Tzerak'), +(1752800, 15, -2315.89, -11266.3, 35.8439, NULL, 0, 'Tzerak'); + +DELETE FROM `creature_text` WHERE `CreatureID`=17528; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(17528, 0, 0, 'Fools! Weaklings! Tzerak has no need of your assistance!', 14, 0, 100, 0, 0, 0, 14070, 0, 'Tzerak'); + +-- Waypoints for Trashspawn +SET @NPC := 62392; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2521.73,-11261.4,36.1656,30000,0,1.7332), +(@PATH,2,-2522.38,-11282,36.231,300000,0,1.13446); + +SET @NPC := 62361; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2380.99,-11345,28.0672,150000,0,6.26573), +(@PATH,2,-2360.98,-11344.1,27.9434,30000,0,6.18013), +(@PATH,3,-2380.99,-11345,28.0672,150000,0,6.26573); + +SET @NPC := 62395; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2448.85,-11322.6,30.4971,50000,0,0.907571), +(@PATH,2,-2436.76,-11310.8,28.9112,30000,0,0.686272), +(@PATH,3,-2448.85,-11322.6,30.4971,250000,0,0.907571); + +SET @NPC := 62398; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2461.01,-11392.8,37.3679,60000,0,4.08407), +(@PATH,2,-2471.12,-11398,37.3497,30000,0,3.41946), +(@PATH,3,-2461.01,-11392.8,37.3679,240000,0,4.08407); + +SET @NPC := 62385; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2519.93,-11124.8,16.9338,100000,0,4.79965), +(@PATH,2,-2523.45,-11140,16.8102,30000,0,4.45305), +(@PATH,3,-2519.93,-11124.8,16.9338,180000,0,4.79965); + +SET @NPC := 62384; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2314.89,-11196.5,14.0951,180000,0,2.09439), +(@PATH,2,-2322.53,-11181.1,13.9421,30000,0,2.20995), +(@PATH,3,-2314.89,-11196.5,14.0951,120000,0,2.09439); + +SET @NPC := 62400; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2346.76,-11178.5,14.0671,160000,0,5.70723), +(@PATH,2,-2328.47,-11177.5,13.9423,50000,0,6.18407), +(@PATH,3,-2346.76,-11178.5,14.0671,140000,0,5.70723); + +SET @NPC := 62374; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2425.44,-11239.8,24.389,40000,0,2.33874), +(@PATH,2,-2430.69,-11227.7,23.4846,30000,0,2.01753), +(@PATH,3,-2425.44,-11239.8,24.389,260000,0,2.33874); + +SET @NPC := 62363; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2417.53,-11219.3,24.298,0,0,3.83202), +(@PATH,2,-2420.09,-11224.6,24.2207,0,0,4.58285), +(@PATH,3,-2417.4,-11234.2,24.287,0,0,5.35254), +(@PATH,4,-2407.2,-11243.3,25.2017,0,0,5.6392), +(@PATH,5,-2384.96,-11255.4,28.4475,0,0,5.79235), +(@PATH,6,-2365.68,-11262.6,28.6973,0,0,6.03975), +(@PATH,7,-2350.64,-11264.9,29.9547,0,0,6.2361), +(@PATH,8,-2327.79,-11264.1,34.9404,10000,0,0.0864284), +(@PATH,9,-2349.93,-11264.9,30.0943,0,0,3.14163), +(@PATH,10,-2365.42,-11262.5,28.7001,0,0,2.85496), +(@PATH,11,-2384.81,-11255.5,28.4646,0,0,2.71751), +(@PATH,12,-2406.78,-11243.7,25.2684,0,0,2.56436), +(@PATH,13,-2417.21,-11234.5,24.289,0,0,2.3523), +(@PATH,14,-2420.1,-11225.2,24.2164,0,0,1.70435), +(@PATH,15,-2418.02,-11219.3,24.2921,0,0,0.344823), +(@PATH,16,-2413.14,-11217.1,24.4672,300000,0,3.40339); + +SET @NPC := 62393; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2 WHERE `guid`=@NPC; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES (@NPC,@PATH,0,0,1,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`, `delay`, `action`, `orientation`) VALUES +(@PATH,1,-2525.62,-11248.4,36.167,0,0,5.98869), +(@PATH,2,-2516.71,-11251.2,36.167,0,0,5.89052), +(@PATH,3,-2504.22,-11260.2,36.167,0,0,5.65097), +(@PATH,4,-2487.4,-11265.7,33.7935,0,0,6.03189), +(@PATH,5,-2473.42,-11269.1,30.2829,0,0,6.05938), +(@PATH,6,-2448.13,-11275.2,29.8481,0,0,6.10257), +(@PATH,7,-2422.05,-11279.3,29.9044,0,0,6.13791), +(@PATH,8,-2406.46,-11281.8,32.759,0,0,2.6226), +(@PATH,9,-2380.68,-11277.7,29.0944,0,0,0.212084), +(@PATH,10,-2357.97,-11269.4,28.8948,0,0,0.116265), +(@PATH,11,-2329.64,-11267.7,34.2848,15000,0,0.0769952), +(@PATH,12,-2358.23,-11269.7,28.8781,0,0,3.35996), +(@PATH,13,-2380.33,-11277.9,29.0908,0,0,3.37959), +(@PATH,14,-2395.13,-11282,30.7833,0,0,3.08507), +(@PATH,15,-2406.13,-11281.8,32.7515,0,0,2.99868), +(@PATH,16,-2417.89,-11280.1,30.0178,0,0,2.99868), +(@PATH,17,-2446.36,-11275.3,29.9164,0,0,2.95941), +(@PATH,18,-2470.62,-11269.9,30.1313,0,0,2.9759), +(@PATH,19,-2485.65,-11266.4,33.2662,0,0,2.85338), +(@PATH,20,-2503.47,-11260.9,36.1658,0,0,2.62797), +(@PATH,21,-2517.11,-11250.9,36.1658,0,0,2.77327), +(@PATH,22,-2527.37,-11249.6,36.1658,0,0,3.32697), +(@PATH,23,-2542.37,-11253,36.2131,300000,0,6.14356); + +-- Gameobjects +DELETE FROM `gameobject` WHERE `guid` IN (21191,21202,21203,21237) AND `id` IN (185047,185046,185045,181806); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES +(21191, 185047, 530, 3525, 3592, 1, 1, -2546.796142578125, -11313.705078125, 23.08652687072753906, 6.224953651428222656, 0, 0, -0.02911186218261718, 0.999576151371002197, 120, 255, 1, 49343), +(21202, 185046, 530, 3525, 3592, 1, 1, -2522.584228515625, -11257.0703125, 36.05535888671875, 0.355989396572113037, 0, 0, 0.177056312561035156, 0.984200716018676757, 120, 255, 1, 49343), +(21203, 185045, 530, 3525, 3592, 1, 1, -2474.967529296875, -11399.513671875, 37.10285568237304687, 0.355989396572113037, 0, 0, 0.177056312561035156, 0.984200716018676757, 120, 255, 1, 49343), +(21237, 181806, 530, 3525, 3592, 1, 1, -2542.06787109375, -11328.0830078125, 22.86698150634765625, 3.90954136848449707, 0, 0, -0.92718315124511718, 0.37460830807685852, 120, 255, 1, 49343); diff --git a/data/sql/updates/db_world/2023_05_10_03.sql b/data/sql/updates/db_world/2023_05_10_03.sql new file mode 100644 index 000000000..eddd66259 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_03.sql @@ -0,0 +1,4 @@ +-- DB update 2023_05_10_02 -> 2023_05_10_03 +-- +UPDATE `quest_template_addon` SET `ExclusiveGroup` = -10962 WHERE (`ID` IN (10962, 10968)); +UPDATE `quest_template_addon` SET `ExclusiveGroup` = 0 WHERE (`ID` = 10956); diff --git a/data/sql/updates/db_world/2023_05_10_04.sql b/data/sql/updates/db_world/2023_05_10_04.sql new file mode 100644 index 000000000..ece367eb4 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_04.sql @@ -0,0 +1,3 @@ +-- DB update 2023_05_10_03 -> 2023_05_10_04 +-- +UPDATE `creature_template` SET `faction` = 1822 WHERE (`entry` IN (21815, 21784)); diff --git a/data/sql/updates/db_world/2023_05_10_05.sql b/data/sql/updates/db_world/2023_05_10_05.sql new file mode 100644 index 000000000..1845ef2b1 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_05.sql @@ -0,0 +1,49 @@ +-- DB update 2023_05_10_04 -> 2023_05_10_05 +-- +SET @NPC := 76415; +SET @PATH := @NPC * 10; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=2,`position_x`=-3749.31,`position_y`=1033.3,`position_z`=89.7322 WHERE `guid`=@NPC; +UPDATE `creature` SET `wander_distance`=0,`MovementType`=0,`position_x`=-3749.31,`position_y`=1033.3,`position_z`=89.7322 WHERE `guid` IN (70887, 70888) AND `id1` = 19801; +DELETE FROM `creature_addon` WHERE `guid`=@NPC; +INSERT INTO `creature_addon` (`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`emote`,`visibilityDistanceType`,`auras`) VALUES (@NPC,@PATH,0,0,1,0,0, ''); +DELETE FROM `waypoint_data` WHERE `id`=@PATH; +INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(@PATH, 1, -3757.53, 1029.77, 90.9887), +(@PATH, 2, -3775.93, 1032.31, 94.4492), +(@PATH, 3, -3799.31, 1053.31, 93.5239), +(@PATH, 4, -3773.25, 1031.12, 94.2648), +(@PATH, 5, -3755.86, 1031.77, 90.2802), +(@PATH, 6, -3740.91, 1039.71, 88.719), +(@PATH, 7, -3733.53, 1049.68, 87.3525), +(@PATH, 8, -3733.34, 1054.4, 86.5162), +(@PATH, 9, -3733.61, 1069.99, 87.8559), +(@PATH, 10, -3733.91, 1091.72, 85.9495), +(@PATH, 11, -3741.86, 1107.72, 84.366), +(@PATH, 12, -3744.4, 1111.01, 81.5303), +(@PATH, 13, -3752.36, 1119.98, 78.0073), +(@PATH, 14, -3759.7, 1124.51, 78.7782), +(@PATH, 15, -3770.4, 1127.24, 81.069), +(@PATH, 16, -3779.04, 1124.86, 83.6984), +(@PATH, 17, -3784.03, 1121.51, 84.4721), +(@PATH, 18, -3802.33, 1102.43, 84.2911), +(@PATH, 19, -3778.69, 1126.16, 83.4765), +(@PATH, 20, -3761.36, 1125.7, 79.0511), +(@PATH, 21, -3751.51, 1120.88, 77.9496), +(@PATH, 22, -3744.7, 1112.58, 81.0952), +(@PATH, 23, -3741.91, 1107.71, 84.3617), +(@PATH, 24, -3738.71, 1101.87, 85.9315), +(@PATH, 25, -3733.65, 1083.04, 86.6572), +(@PATH, 26, -3733.3, 1069.77, 87.8538), +(@PATH, 27, -3733.15, 1054.19, 86.5299), +(@PATH, 28, -3737.15, 1042.46, 88.3021), +(@PATH, 29, -3748.86, 1033.82, 89.6873); + +DELETE FROM `creature_formations` WHERE `memberGUID` IN (76415, 70887, 70888); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES +(76415, 76415, 0, 0, 515), +(76415, 70887, 4, 135, 515), +(76415, 70888, 4, 225, 515); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21827); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21827, 0, 0, 0, 9, 0, 100, 0, 0, 30, 14300, 28200, 0, 11, 38051, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Zandras - Within 0-30 Range - Cast \'Fel Shackles\''); diff --git a/data/sql/updates/db_world/2023_05_10_06.sql b/data/sql/updates/db_world/2023_05_10_06.sql new file mode 100644 index 000000000..2676cbb7b --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_06.sql @@ -0,0 +1,20 @@ +-- DB update 2023_05_10_05 -> 2023_05_10_06 +-- Void Baron Galaxi +DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 16939); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(16939, 0, 0, 1, 0, 0, 0, 0); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16939); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16939, 0, 0, 1, 54, 0, 100, 257, 0, 0, 0, 0, 0, 11, 34302, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Void Baron Galaxis - On Just Summoned - Cast \'Coalesce\' (No Repeat/Reset)'), +(16939, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 12, 22146, 3, 30000, 0, 0, 0, 8, 0, 0, 0, 0, -1243.23, 1312.41, -1, 0, 'Void Baron Galaxis - On Just Summoned - Summon Creature \'Summoning Voidstorm\' (No Repeat/Reset)'), +(16939, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 0, 9, 22146, 0, 5, 0, 0, 0, 0, 0, 'Void Baron Galaxis - On Just Summoned - Set Fly On (No Repeat/Reset)'), +(16939, 0, 3, 4, 60, 0, 100, 257, 2000, 2000, 0, 0, 0, 69, 1, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, -1232.9, 1355.96, 5.23, 1, 'Void Baron Galaxis - On Update - Move To Position (No Repeat/Reset)'), +(16939, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, -1232.9, 1355.96, 5.23, 1, 'Void Baron Galaxis - On Update - Set Home Position (No Repeat/Reset)'), +(16939, 0, 5, 0, 60, 0, 100, 257, 8500, 8500, 0, 0, 0, 11, 34236, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Void Baron Galaxis - On Update - Cast \'Baron`s Summons\' (No Repeat/Reset)'), +(16939, 0, 6, 0, 0, 0, 100, 0, 12000, 15000, 15000, 20000, 0, 11, 34239, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Void Baron Galaxis - In Combat - Cast \'Absorb Life\''); + +-- Summoning Voidstorm +DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 22146); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(22146, 0, 0, 1, 0, 0, 0, 0); diff --git a/data/sql/updates/db_world/2023_05_10_07.sql b/data/sql/updates/db_world/2023_05_10_07.sql new file mode 100644 index 000000000..fcc41bd9c --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_07.sql @@ -0,0 +1,74 @@ +-- DB update 2023_05_10_06 -> 2023_05_10_07 +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (32197, 40062, 30846); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES +(32197, 32197, 37113), +(40062, 40062, 40064), +(30846, 30846, 32784); + +-- Small Updates +UPDATE `smart_scripts` SET `event_param1` = 9300, `event_param2` = 18200, `event_param3` = 10950, `event_param4` = 23100 WHERE (`entryorguid` = 17626) AND (`source_type` = 0) AND (`id` = 1); -- Laughing Skull Legionnaire +UPDATE `smart_scripts` SET `event_param1` = 8100, `event_param2` = 10100 WHERE (`entryorguid` = 17624) AND (`source_type` = 0) AND (`id` = 1); -- Laughing Skull Warden + +-- Complete Rewrites +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (17370, 17491, 17371, 17395, 17400, 17414, 19016, 18894, 17398, 17429, 17397)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17370, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Laughing Skull Enforcer - On Aggro - Say Line 0'), +(17370, 0, 1, 0, 0, 0, 100, 0, 4850, 12150, 8500, 18400, 0, 11, 15655, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Laughing Skull Enforcer - In Combat - Cast \'Shield Slam\''), +(17370, 0, 2, 0, 0, 0, 100, 0, 1200, 15300, 1200, 21000, 0, 11, 14516, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Laughing Skull Enforcer - In Combat - Cast \'Strike\''), +(17491, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Laughing Skull Rogue - On Aggro - Say Line 0'), +(17491, 0, 1, 0, 0, 0, 100, 0, 1200, 9800, 400, 15800, 0, 11, 34969, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Laughing Skull Rogue - In Combat - Cast \'Poison\''), +(17491, 0, 2, 0, 0, 0, 100, 0, 4800, 4800, 60000, 60000, 0, 11, 6434, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Laughing Skull Rogue - In Combat - Cast \'Slice and Dice\''), +(17491, 0, 3, 0, 0, 0, 100, 0, 13750, 29150, 13750, 29150, 0, 11, 30832, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Laughing Skull Rogue - In Combat - Cast \'Kidney Shot\''), +(17371, 0, 0, 0, 0, 0, 100, 2, 400, 4750, 3600, 6300, 0, 11, 12739, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - In Combat - Cast \'Shadow Bolt\' (Normal Dungeon)'), +(17371, 0, 1, 0, 0, 0, 100, 4, 400, 4750, 3600, 6300, 0, 11, 15472, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - In Combat - Cast \'Shadow Bolt\' (Heroic Dungeon)'), +(17371, 0, 2, 0, 0, 0, 100, 0, 600, 8500, 12150, 21750, 0, 11, 32197, 32, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - In Combat - Cast \'Corruption\''), +(17371, 0, 3, 0, 0, 0, 100, 0, 6600, 10700, 14900, 14900, 0, 11, 13338, 32, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - In Combat - Cast \'Curse of Tongues\''), +(17371, 0, 4, 0, 0, 0, 100, 4, 2300, 16600, 21850, 43750, 0, 11, 32863, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - In Combat - Cast \'Seed of Corruption\' (Heroic Dungeon)'), +(17371, 0, 5, 0, 1, 0, 100, 0, 12600, 13700, 21900, 24900, 0, 11, 33111, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Warlock - Out of Combat - Cast \'Fel Power\''), +(17395, 0, 0, 0, 0, 0, 100, 2, 0, 0, 3600, 6050, 0, 11, 15242, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Summoner - In Combat - Cast \'Fireball\' (Normal Dungeon)'), +(17395, 0, 1, 0, 0, 0, 100, 4, 0, 0, 3600, 6050, 0, 11, 17290, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Summoner - In Combat - Cast \'Fireball\' (Heroic Dungeon)'), +(17395, 0, 2, 0, 0, 0, 100, 2, 7250, 29200, 14600, 29200, 0, 11, 18399, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Summoner - In Combat - Cast \'Flamestrike\' (Normal Dungeon)'), +(17395, 0, 3, 0, 0, 0, 100, 4, 7250, 29200, 14600, 29200, 0, 11, 16102, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Summoner - In Combat - Cast \'Flamestrike\' (Heroic Dungeon)'), +(17395, 0, 4, 0, 0, 0, 100, 1, 300, 9000, 0, 0, 0, 11, 30853, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Summoner - In Combat - Cast \'Summon Seductress\''), +(17395, 0, 5, 0, 0, 0, 100, 1, 300, 9000, 0, 0, 0, 11, 30851, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Summoner - In Combat - Cast \'Summon Felhound Manastalker\''), +(17400, 0, 0, 0, 9, 0, 100, 4, 8, 25, 8700, 14700, 1, 11, 27577, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Felguard Annihilator - Within 8-25 Range - Cast \'Intercept\' (Heroic Dungeon)'), +(17400, 0, 1, 0, 0, 0, 100, 0, 3000, 10950, 8500, 20650, 0, 11, 18072, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Felguard Annihilator - In Combat - Cast \'Uppercut\''), +(17400, 0, 2, 0, 13, 0, 100, 0, 6900, 9500, 0, 0, 0, 11, 15615, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Felguard Annihilator - On Victim Casting - Cast \'Pummel\''), +(17400, 0, 3, 0, 0, 0, 100, 0, 12000, 12000, 12000, 12000, 0, 14, 0, 100, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Felguard Annihilator - In Combat - Reset All Threat'), +(17414, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Technician - On Aggro - Say Line 0'), +(17414, 0, 1, 0, 0, 0, 100, 0, 1000, 8700, 15800, 25500, 0, 11, 30846, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Technician - In Combat - Cast \'Throw Proximity Bomb\''), +(17414, 0, 2, 0, 0, 0, 100, 0, 300, 8100, 1200, 6600, 0, 11, 40062, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Technician - In Combat - Cast \'Throw Dynamite\''), +(17414, 0, 3, 0, 0, 0, 100, 0, 5400, 11600, 24300, 24300, 0, 11, 6726, 32, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Technician - In Combat - Cast \'Silence\''), +(19016, 0, 0, 0, 0, 0, 100, 2, 0, 0, 2900, 4800, 0, 11, 11921, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Familiar - In Combat - Cast \'Fireball\' (Normal Dungeon)'), +(19016, 0, 1, 0, 0, 0, 100, 4, 0, 0, 2900, 4800, 0, 11, 14034, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Familiar - In Combat - Cast \'Fireball\' (Heroic Dungeon)'), +(18894, 0, 0, 0, 0, 0, 100, 0, 1050, 3550, 13700, 19400, 0, 11, 18072, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Felguard Brute - In Combat - Cast \'Uppercut\''), +(18894, 0, 1, 0, 13, 0, 100, 0, 6900, 9500, 0, 0, 0, 11, 15615, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Felguard Brute - On Victim Casting - Cast \'Pummel\''), +(17398, 0, 1, 0, 0, 0, 100, 0, 6000, 18500, 1200, 27950, 0, 11, 22427, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nascent Fel Orc - In Combat - Cast \'Concussion Blow\''), +(17398, 0, 2, 0, 0, 0, 100, 0, 1200, 12150, 12150, 27950, 0, 11, 31900, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Nascent Fel Orc - In Combat - Cast \'Stomp\''), +(17429, 0, 0, 0, 0, 0, 100, 0, 3000, 6000, 20500, 20500, 0, 11, 22120, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Fel Orc Neophyte - In Combat - Cast \'Charge\''), +(17429, 0, 1, 0, 0, 0, 100, 0, 1200, 7300, 120000, 120000, 0, 11, 8269, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Fel Orc Neophyte - In Combat - Cast \'Frenzy\''), +(17397, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Adept - On Aggro - Say Line 0'), +(17397, 0, 1, 0, 0, 0, 100, 0, 5600, 12300, 9600, 11400, 0, 11, 11978, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Adept - In Combat - Cast Kick'), +(17397, 0, 2, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Adept - At 15% HP - Flee For Assist'), +(17397, 0, 3, 0, 1, 0, 100, 1, 1000, 1000, 0, 0, 0, 11, 31059, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Adept - Out Of Combat - Cast Hellfire Channeling'); + +-- Partial Rewrites +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17477) AND (`source_type` = 0) AND (`id` IN (2, 3, 4)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17477, 0, 2, 0, 0, 0, 100, 2, 200, 2400, 3600, 4800, 0, 11, 15242, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Imp - In Combat - Cast \'Fireball\' (Normal Dungeon)'), +(17477, 0, 3, 0, 0, 0, 100, 4, 200, 2400, 3600, 4800, 0, 11, 17290, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Imp - In Combat - Cast \'Fireball\' (Heroic Dungeon)'), +(17477, 0, 4, 0, 0, 0, 100, 4, 8500, 14800, 6050, 17750, 0, 11, 16144, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hellfire Imp - In Combat - Cast \'Fire Blast\' (Heroic Dungeon)'); + +UPDATE `conditions` SET `SourceGroup` = 4 WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceGroup` = 6) AND (`SourceEntry` = 17397) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 29) AND (`ConditionTarget` = 1) AND (`ConditionValue1` = 17477) AND (`ConditionValue2` = 10) AND (`ConditionValue3` = 0); + +DELETE FROM `creature_template_addon` WHERE (`entry` IN (17491, 18610, 18615)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(17491, 0, 0, 0, 1, 0, 0, '30991'), +(18610, 0, 0, 0, 1, 0, 0, '30991'), +(18615, 0, 0, 0, 1, 0, 0, '8876'); + +UPDATE `creature_template_addon` SET `auras` = '8876' WHERE (`entry` = 17397); + +UPDATE `creature_addon` SET `auras` = '30991' WHERE (`guid` IN (138193, 138237)); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1739500, 1739501)); diff --git a/data/sql/updates/db_world/2023_05_10_08.sql b/data/sql/updates/db_world/2023_05_10_08.sql new file mode 100644 index 000000000..c39e39844 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_08.sql @@ -0,0 +1,4 @@ +-- DB update 2023_05_10_07 -> 2023_05_10_08 +-- +-- Removes a unused and incorrect creature (not found in brute force) +DELETE FROM `creature_template` WHERE `entry`=621; diff --git a/data/sql/updates/db_world/2023_05_10_09.sql b/data/sql/updates/db_world/2023_05_10_09.sql new file mode 100644 index 000000000..33dd419ba --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_09.sql @@ -0,0 +1,4 @@ +-- DB update 2023_05_10_08 -> 2023_05_10_09 +-- +-- Remove ability from creature that doesn't exist +DELETE FROM `creature_template_spell` WHERE `CreatureID`=601 AND `Index`=0; diff --git a/data/sql/updates/db_world/2023_05_10_10.sql b/data/sql/updates/db_world/2023_05_10_10.sql new file mode 100644 index 000000000..647c930ee --- /dev/null +++ b/data/sql/updates/db_world/2023_05_10_10.sql @@ -0,0 +1,2 @@ +-- DB update 2023_05_10_09 -> 2023_05_10_10 +UPDATE `creature_classlevelstats` SET `basehp1` = 4892 WHERE `class` = 2 and `level` = 66; diff --git a/data/sql/updates/db_world/2023_05_12_00.sql b/data/sql/updates/db_world/2023_05_12_00.sql new file mode 100644 index 000000000..dd0b3750a --- /dev/null +++ b/data/sql/updates/db_world/2023_05_12_00.sql @@ -0,0 +1,7 @@ +-- DB update 2023_05_10_10 -> 2023_05_12_00 +-- +UPDATE `creature_template` SET `ScriptName` = 'boss_mennu_the_betrayer', `AIName` = '' WHERE `entry` = 17941; +UPDATE `creature_template` SET `ScriptName` = 'boss_quagmirran', `AIName` = '' WHERE `entry` = 17942; +UPDATE `creature_template` SET `ScriptName` = 'boss_rokmar_the_crackler', `AIName` = '' WHERE `entry` = 17991; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (17941, 17942, 17991) AND `source_type` = 0; diff --git a/data/sql/updates/db_world/2023_05_12_01.sql b/data/sql/updates/db_world/2023_05_12_01.sql new file mode 100644 index 000000000..d714b5eb9 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_12_01.sql @@ -0,0 +1,6 @@ +-- DB update 2023_05_12_00 -> 2023_05_12_01 +-- +UPDATE `creature_template` SET `ScriptName` = 'boss_tavarok', `AIName` = '' WHERE `entry` = 18343; +UPDATE `creature_template` SET `ScriptName` = 'boss_darkweaver_syth', `AIName` = '' WHERE `entry` = 18472; + +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (18343, 18472, 1847200) AND (`source_type` = 0 OR `source_type` = 9); diff --git a/data/sql/updates/db_world/2023_05_12_02.sql b/data/sql/updates/db_world/2023_05_12_02.sql new file mode 100644 index 000000000..d43ac2150 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_12_02.sql @@ -0,0 +1,65 @@ +-- DB update 2023_05_12_01 -> 2023_05_12_02 +-- +-- Captain Auric Sunchaser +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=18745; +DELETE FROM `smart_scripts` WHERE `entryorguid`=18745 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18745,0,0,0,38,0,100,0,1,1,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,3.58753,'Captain Auric Sunchaser - On Data Set - Set Orientation'), +(18745,0,1,0,38,0,100,0,2,2,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.53786,'Captain Auric Sunchaser - On Data Set - Set Orientation'); + +-- Lieutenant Gravelhammer +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=18713; +DELETE FROM `smart_scripts` WHERE `entryorguid`=18713 AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (1871300,1871301,1871302) AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18713,0,0,0,1,0,100,0,5000,15000,300000,900000,80,1871300,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - OOC - Run Script'), +(18713,0,1,0,40,0,100,0,4,1871300,0,0,80,1871301,2,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Waypoint 4 Reached - Run Script'), +(18713,0,2,0,40,0,100,0,7,1871300,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.153880,'Lieutenant Gravelhammer - On Waypoint 7 Reached - Set Orientation'), +(1871300,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Say Line 0'), +(1871300,9,1,0,0,0,100,0,11000,11000,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Say Line 1'), +(1871300,9,2,0,0,0,100,0,5000,5000,0,0,53,0,1871300,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Start Waypoint'), +(1871301,9,0,0,0,0,100,0,0,0,0,0,54,35000,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Pause Waypoint'), +(1871301,9,1,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,0.259758,'Lieutenant Gravelhammer - On Script - Set Orientation'), +(1871301,9,2,0,0,0,100,0,200,200,0,0,45,1,1,0,0,0,0,19,18745,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Set Data to Captain Auric Sunchaser'), +(1871301,9,3,0,0,0,100,0,200,200,0,0,5,66,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Play Emote \'Salute\''), +(1871301,9,4,0,0,0,100,0,3000,3000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Say Line 2'), +(1871301,9,5,0,0,0,100,0,5000,5000,0,0,1,5,0,0,0,0,0,19,18745,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Say Line 5 (Captain Auric Sunchaser)'), +(1871301,9,6,0,0,0,100,0,6000,6000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Say Line 3'), +(1871301,9,7,0,0,0,100,0,8000,8000,0,0,1,6,0,0,0,0,0,19,18745,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Say Line 6 (Captain Auric Sunchaser)'), +(1871301,9,8,0,0,0,100,0,8000,8000,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Say Line 4'), +(1871301,9,9,0,0,0,100,0,3000,3000,0,0,45,2,2,0,0,0,0,19,18745,0,0,0,0,0,0,'Lieutenant Gravelhammer - On Script - Set Data to Captain Auric Sunchaser'); + +DELETE FROM `creature_text` WHERE `CreatureID` IN (18713,18745); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(18713,0,0,'Rifling through the stacks of books and scrolls on the table, Lieutenant Gravelhammer begins to examine one in particular with interest.',16,0,100,0,0,0,15827,0,'Lieutenant Gravelhammer'), +(18713,1,0,'What? What\'s this?!',12,7,100,5,0,0,15829,0,'Lieutenant Gravelhammer'), +(18713,1,1,'That is not even remotely imaginable!',12,7,100,5,0,0,15830,0,'Lieutenant Gravelhammer'), +(18713,1,2,'Looks like I picked a bad day to stop drinking.',12,7,100,5,0,0,15831,0,'Lieutenant Gravelhammer'), +(18713,1,3,'How did this get missed?!',12,7,100,5,0,0,15832,0,'Lieutenant Gravelhammer'), +(18713,2,0,'Cap\'n, sir, we have a slight problem.',12,7,100,1,0,0,15833,0,'Lieutenant Gravelhammer'), +(18713,3,0,'As you say, sir. It would appear that someone failed to mention to me that the druids at the Cenarion Thicket have been wiped out!',12,7,100,1,0,0,15838,0,'Lieutenant Gravelhammer'), +(18713,3,1,'Bad news. We\'ve been hit again. They\'re gone, but the front sentry tower is on fire.',12,7,100,1,0,0,15839,0,'Lieutenant Gravelhammer'), +(18713,3,2,'One of our merchants has gone missing!',12,7,100,1,0,0,15840,0,'Lieutenant Gravelhammer'), +(18713,3,3,'That group that recently arrived from Honor Hold -- they\'re mercs! They\'re starting to stir up trouble. Maybe I should have a talk with them?',12,7,100,1,0,0,15842,0,'Lieutenant Gravelhammer'), +(18713,3,4,'One of our scouts is reporting that a shadowy group has moved into the ruins of Grangol\'var Village. Oops, this report is over a week old.',12,7,100,1,0,0,15843,0,'Lieutenant Gravelhammer'), +(18713,3,5,'We have reports from a scout in the field that one of the Cenarion druids has been taken captive up at Firewing Point.',12,7,100,1,0,0,15844,0,'Lieutenant Gravelhammer'), +(18713,4,0,'Aye, aye, sir. Right away!',12,7,100,66,0,0,15853,0,'Lieutenant Gravelhammer'), +(18745,5,0,'At ease, lieutenant. Go on.',12,7,100,66,0,0,15834,0,'Captain Auric Sunchaser'), +(18745,5,1,'What is it now, Gravel?',12,7,100,6,0,0,15835,0,'Captain Auric Sunchaser'), +(18745,5,2,'What else could possibly go wrong?',12,7,100,6,0,0,15836,0,'Captain Auric Sunchaser'), +(18745,5,3,'Yes, lieutenant? Report.',12,7,100,1,0,0,15837,0,'Captain Auric Sunchaser'), +(18745,6,0,'That\'s troubling news indeed. See to it that it\'s taken care of immediately!',12,7,100,1,0,0,15849,0,'Captain Auric Sunchaser'), +(18745,6,1,'I don\'t have time for this, lieutenant. Make sure that you handle it.',12,7,100,1,0,0,15850,0,'Captain Auric Sunchaser'), +(18745,6,2,'If we\'re to help with that in any way we\'ll need more people. Call some of the scouts in to help with that.',12,7,100,1,0,0,15851,0,'Captain Auric Sunchaser'), +(18745,6,3,'Lieutenant, I want you to make that your top priority. Notify anyone that you think can help.',12,7,100,1,0,0,15852,0,'Captain Auric Sunchaser'); + +-- WP +DELETE FROM `waypoints` WHERE `entry`=1871300; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES +(1871300,1,-3012.45019,3983.69726,3.10552,'Lieutenant Gravelhammer'), +(1871300,2,-3011.6,3991.66,3.43526,'Lieutenant Gravelhammer'), +(1871300,3,-3011.15,3993.25,4.07544,'Lieutenant Gravelhammer'), +(1871300,4,-3010.1184,3994.7478,4.46475,'Lieutenant Gravelhammer'), +(1871300,5,-3010.28,3994.08,4.46465,'Lieutenant Gravelhammer'), +(1871300,6,-3012.069,3984.185,3.10552,'Lieutenant Gravelhammer'), +(1871300,7,-3007.9,3978.22,3.10527,'Lieutenant Gravelhammer'); diff --git a/data/sql/updates/db_world/2023_05_12_03.sql b/data/sql/updates/db_world/2023_05_12_03.sql new file mode 100644 index 000000000..9d792aeb9 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_12_03.sql @@ -0,0 +1,8 @@ +-- DB update 2023_05_12_02 -> 2023_05_12_03 +-- +UPDATE `creature_template` SET `AiName`='', `ScriptName`='npc_underbat' WHERE `entry`=17724; +DELETE FROM `smart_scripts` WHERE `entryorguid`=17724 AND `source_type`=0; + +DELETE FROM `spelldifficulty_dbc` WHERE `ID`=34171; +INSERT INTO `spelldifficulty_dbc` VALUES +(34171,34171,37956,0,0); diff --git a/data/sql/updates/db_world/2023_05_13_00.sql b/data/sql/updates/db_world/2023_05_13_00.sql new file mode 100644 index 000000000..3848c92b1 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_00.sql @@ -0,0 +1,3 @@ +-- DB update 2023_05_12_03 -> 2023_05_13_00 +-- +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask`|2|16|64|256|512|1024|2048|4096|8192|131072|524288|4194304|8388608|33554432, `flags_extra` = `flags_extra`|256 WHERE `entry` = 16473; diff --git a/data/sql/updates/db_world/2023_05_13_01.sql b/data/sql/updates/db_world/2023_05_13_01.sql new file mode 100644 index 000000000..eb3fdb326 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_01.sql @@ -0,0 +1,6 @@ +-- DB update 2023_05_13_00 -> 2023_05_13_01 +-- +DELETE FROM `creature_equip_template` WHERE `CreatureID` = 16809 AND `ID` IN (1, 2); +INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES +(16809, 1, 29484, 0, 0, 48999), +(16809, 2, 29479, 0, 0, 48999); diff --git a/data/sql/updates/db_world/2023_05_13_02.sql b/data/sql/updates/db_world/2023_05_13_02.sql new file mode 100644 index 000000000..611f5b6fe --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_02.sql @@ -0,0 +1,71 @@ +-- DB update 2023_05_13_01 -> 2023_05_13_02 +-- +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (32860, 32858, 31975, 32861, 32863); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES +(32860, 32860, 38378), +(32858, 32858, 38377), +(31975, 31975, 35511), +(32861, 32861, 38379), +(32863, 32863, 38252); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (18558, 18497, 18493, 18559, 18495, 18499, 18498, 18501, 18700, 18702)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18558, 0, 0, 0, 0, 0, 100, 2, 0, 0, 2400, 3800, 0, 11, 12466, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Sorcerer - In Combat CMC - Cast \'Fireball\' (Normal Dungeon)'), +(18558, 0, 1, 0, 0, 0, 100, 4, 0, 0, 2400, 3800, 0, 11, 17290, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Sorcerer - In Combat CMC - Cast \'Fireball\' (Heroic Dungeon)'), +(18558, 0, 2, 0, 0, 0, 100, 2, 3600, 7800, 7800, 14500, 0, 11, 15043, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Sorcerer - In Combat - Cast \'Frostbolt\' (Normal Dungeon)'), +(18558, 0, 3, 0, 0, 0, 100, 4, 6000, 8000, 7800, 14500, 0, 11, 15530, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Sorcerer - In Combat - Cast \'Frostbolt\' (Heroic Dungeon)'), +(18558, 0, 4, 0, 0, 0, 100, 2, 10900, 16900, 9700, 15700, 0, 11, 15744, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Sorcerer - In Combat - Cast \'Blast Wave\' (Normal Dungeon)'), +(18558, 0, 5, 0, 0, 0, 100, 4, 10900, 16900, 7200, 10900, 0, 11, 22424, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Sorcerer - In Combat - Cast \'Blast Wave\' (Heroic Dungeon)'), +(18497, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Monk - On Aggro - Say Line 0'), +(18497, 0, 1, 0, 0, 0, 100, 0, 18100, 40400, 20500, 33700, 0, 11, 37321, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Monk - In Combat - Cast \'Overpower\''), +(18497, 0, 2, 0, 0, 0, 100, 0, 14650, 25150, 14150, 31350, 0, 11, 32849, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Monk - In Combat - Cast \'Cyclone Strike\''), +(18497, 0, 3, 0, 13, 0, 100, 0, 8400, 19300, 0, 0, 0, 11, 32846, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Monk - On Victim Casting - Cast \'Counter Kick\''), +(18497, 0, 4, 0, 23, 0, 100, 0, 38168, 0, 3600, 3600, 0, 11, 38168, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Monk - On Aura \'Spiritual Sight\' Missing - Cast \'Spiritual Sight\''), +(18497, 0, 5, 0, 0, 0, 100, 513, 2450, 5700, 0, 0, 0, 88, 1849700, 1849704, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Monk - In Combat - Run Random Script (No Repeat)'), +(18493, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Soulpriest - On Aggro - Say Line 0'), +(18493, 0, 1, 0, 0, 0, 100, 0, 400, 4650, 2850, 4650, 0, 11, 32860, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Soulpriest - In Combat - Cast \'Shadow Bolt\''), +(18493, 0, 2, 0, 0, 0, 100, 0, 13800, 31900, 13800, 31900, 0, 11, 32859, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Soulpriest - In Combat - Cast \'Falter\''), +(18493, 0, 3, 0, 0, 0, 100, 0, 3600, 6500, 16900, 33700, 0, 11, 32858, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Soulpriest - In Combat - Cast \'Touch of the Forgotten\''), +(18493, 0, 4, 0, 0, 0, 100, 513, 3450, 7300, 0, 0, 0, 88, 1849300, 1849304, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Soulpriest - In Combat - Run Random Script (No Repeat)'), +(18559, 0, 0, 0, 0, 0, 100, 2, 0, 0, 3650, 5250, 0, 11, 15547, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Stalker - In Combat CMC - Cast \'Shoot\' (Normal Dungeon)'), +(18559, 0, 1, 0, 0, 0, 100, 4, 0, 0, 3650, 5250, 0, 11, 16100, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Stalker - In Combat CMC - Cast \'Shoot\' (Heroic Dungeon)'), +(18559, 0, 2, 0, 0, 0, 100, 2, 8450, 14350, 13300, 22900, 0, 11, 31975, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Stalker - In Combat - Cast \'Serpent Sting\' (Normal Dungeon)'), +(18559, 0, 4, 0, 0, 0, 100, 4, 6000, 11000, 12000, 16000, 0, 11, 37551, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Stalker - In Combat - Cast \'Viper Sting\' (Heroic Dungeon)'), +(18559, 0, 5, 0, 0, 0, 100, 0, 9650, 25300, 11000, 11000, 0, 11, 32829, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Phasing Stalker - In Combat - Cast \'Spirit Vengeance\''), +(18495, 0, 0, 0, 4, 0, 15, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Vindicator - On Aggro - Say Line 0'), +(18495, 0, 1, 0, 23, 0, 100, 0, 32861, 0, 3100, 5300, 0, 11, 32861, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Vindicator - On Aura \'Shadowguard\' Missing - Cast \'Shadowguard\''), +(18495, 0, 2, 0, 0, 0, 100, 2, 6100, 15000, 15750, 25550, 0, 11, 17439, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Vindicator - In Combat - Cast \'Shadow Shock\' (Normal Dungeon)'), +(18495, 0, 3, 0, 0, 0, 100, 4, 6100, 15000, 15750, 25550, 0, 11, 17289, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Vindicator - In Combat - Cast \'Shadow Shock\' (Heroic Dungeon)'), +(18495, 0, 4, 0, 0, 0, 100, 1, 3450, 7300, 0, 0, 0, 88, 1849300, 1849304, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Vindicator - In Combat - Run Random Script (No Repeat)'), +(18499, 0, 0, 0, 0, 0, 100, 2, 3200, 4650, 3200, 4650, 0, 87, 1849900, 1849901, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - In Combat - Cast Random Spell (Normal Dungeon)'), +(18499, 0, 1, 0, 0, 0, 100, 4, 3200, 4650, 3200, 4650, 0, 87, 1849902, 1849903, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - In Combat - Cast Random Spell (Heroic Dungeon)'), +(18499, 0, 2, 0, 0, 0, 100, 3, 7300, 25200, 0, 0, 0, 11, 15744, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - In Combat - Cast \'Blast Wave\' (No Repeat) (Normal Dungeon)'), +(18499, 0, 3, 0, 0, 0, 100, 5, 7300, 25200, 0, 0, 0, 11, 22424, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - In Combat - Cast \'Blast Wave\' (No Repeat) (Heroic Dungeon)'), +(18499, 0, 4, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 11, 33422, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - On Just Summoned - Cast \'Phase In\''), +(18499, 0, 5, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - On Evade - Despawn Instant'), +(18498, 0, 0, 0, 23, 0, 100, 0, 32828, 0, 3650, 4850, 0, 11, 32828, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Soldier - On Aura \'Protection Aura\' Missing - Cast \'Protection Aura\''), +(18498, 0, 1, 0, 0, 0, 100, 0, 4800, 10900, 7200, 14500, 0, 11, 11972, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Soldier - In Combat - Cast \'Shield Bash\''), +(18498, 0, 2, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 11, 33422, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Soldier - On Just Summoned - Cast \'Phase In\''), +(18498, 0, 3, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Soldier - On Evade - Despawn Instant'), +(18501, 0, 0, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 11, 33422, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Stalker - On Just Summoned - Cast \'Phase In\''), +(18501, 0, 1, 0, 0, 0, 100, 2, 0, 0, 3650, 5250, 0, 11, 15547, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Stalker - In Combat CMC - Cast \'Shoot\' (Normal Dungeon)'), +(18501, 0, 2, 0, 0, 0, 100, 4, 0, 0, 3650, 5250, 0, 11, 16100, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Stalker - In Combat CMC - Cast \'Shoot\' (Heroic Dungeon)'), +(18501, 0, 3, 0, 0, 0, 100, 0, 8450, 14350, 13300, 22900, 0, 11, 31975, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Stalker - In Combat - Cast \'Serpent Sting\''), +(18501, 0, 4, 0, 0, 0, 100, 4, 6000, 11000, 12000, 16000, 0, 11, 37551, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Stalker - In Combat - Cast \'Viper Sting\' (Heroic Dungeon)'), +(18501, 0, 5, 0, 0, 0, 100, 0, 9650, 25300, 11000, 11000, 0, 11, 32829, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Stalker - In Combat - Cast \'Spirit Vengeance\''), +(18501, 0, 6, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Stalker - On Evade - Despawn Instant'), +(18700, 0, 0, 0, 0, 0, 100, 0, 2600, 13700, 1200, 20600, 0, 11, 13584, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Reanimated Bones - In Combat - Cast \'Strike\''), +(18700, 0, 1, 0, 0, 0, 100, 0, 3650, 22850, 7250, 21150, 0, 11, 13444, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Reanimated Bones - In Combat - Cast \'Sunder Armor\''), +(18702, 0, 0, 0, 4, 0, 40, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Necromancer - On Aggro - Say Line 0'), +(18702, 0, 1, 0, 0, 0, 100, 0, 1000, 15200, 4800, 15700, 0, 11, 35839, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Necromancer - In Combat - Cast \'Drain Soul\''), +(18702, 0, 2, 0, 0, 0, 100, 2, 12100, 29000, 22900, 35000, 0, 11, 32863, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Necromancer - In Combat - Cast \'Seed of Corruption\' (Normal Dungeon)'), +(18702, 0, 3, 0, 0, 0, 100, 4, 12100, 17500, 4800, 9600, 0, 11, 38252, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Necromancer - In Combat - Cast \'Seed of Corruption\' (Heroic Dungeon)'), +(18702, 0, 4, 0, 74, 0, 100, 2, 0, 70, 15700, 26500, 15, 11, 33325, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Necromancer - On Friendly Between 0-70% Health - Cast \'Shadow Mend\' (Normal Dungeon)'), +(18702, 0, 5, 0, 74, 0, 100, 4, 0, 70, 6100, 8400, 15, 11, 37367, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Auchenai Necromancer - On Friendly Between 0-70% Health - Cast \'Shadow Mend\' (Heroic Dungeon)'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1849900, 1849901, 1849902, 1849903)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(1849900, 9, 0, 0, 0, 0, 100, 2, 0, 0, 0, 0, 0, 11, 12466, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - Actionlist for Random Cast - Cast \'Fireball\' (Normal Dungeon)'), +(1849901, 9, 0, 0, 0, 0, 100, 2, 0, 0, 0, 0, 0, 11, 15043, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - Actionlist for Random Cast - Cast \'Frostbolt\' (Normal Dungeon)'), +(1849902, 9, 0, 0, 0, 0, 100, 4, 0, 0, 0, 0, 0, 11, 17290, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - Actionlist for Random Cast - Cast \'Fireball\' (Heroic Dungeon)'), +(1849903, 9, 0, 0, 0, 0, 100, 4, 0, 0, 0, 0, 0, 11, 15530, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Unliving Sorcerer - Actionlist for Random Cast - Cast \'Frostbolt\' (Heroic Dungeon)'); diff --git a/data/sql/updates/db_world/2023_05_13_03.sql b/data/sql/updates/db_world/2023_05_13_03.sql new file mode 100644 index 000000000..e89f8f553 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_03.sql @@ -0,0 +1,2 @@ +-- DB update 2023_05_13_02 -> 2023_05_13_03 +UPDATE `smart_scripts` SET `action_type`=9, `comment`='Rhahk\'Zor - On Just Died - Activate Gameobject' WHERE `entryorguid`=644 AND `source_type`=0 AND `id`=2 AND `link`=3; diff --git a/data/sql/updates/db_world/2023_05_13_04.sql b/data/sql/updates/db_world/2023_05_13_04.sql new file mode 100644 index 000000000..3a18cf3f9 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_04.sql @@ -0,0 +1,17 @@ +-- DB update 2023_05_13_03 -> 2023_05_13_04 + +-- SQL Dark Ranger Loralen emote +DELETE FROM `creature_template_addon` WHERE (`entry` = 37779); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(37779, 0, 0, 0, 2, 0, 0, ''); +-- SQL LK Boss final +DELETE FROM `creature` WHERE (`id1` = 36954); +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 +(1972025, 36954, 0, 0, 668, 0, 0, 3, 1, 1, 5552.77, 2262.57, 733.012, 4.15523, 86400, 0, 0, 27890000, 0, 0, 0, 0, 0, '', 48999); +-- SQL LK Sylvanas final +DELETE FROM `creature` WHERE (`id1` = 37554); +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 +(1972026, 37554, 0, 0, 668, 0, 0, 3, 1, 1, 5549.51, 2257.59, 733.011, 0.99299, 86400, 0, 0, 5040000, 881400, 0, 0, 0, 0, '', 48999); +-- Add Gossip Sylvanas Final +DELETE FROM `gossip_menu` WHERE (`MenuID` = 10931); +INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES (10931, 15190); diff --git a/data/sql/updates/db_world/2023_05_13_05.sql b/data/sql/updates/db_world/2023_05_13_05.sql new file mode 100644 index 000000000..f33b87277 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_05.sql @@ -0,0 +1,5 @@ +-- DB update 2023_05_13_04 -> 2023_05_13_05 +-- +UPDATE `creature_template` +SET `mingold` = 448, `maxgold` = 2520 +WHERE `entry` IN (22241, 22242, 22243) AND `lootid` IN (22241, 22242, 22243); diff --git a/data/sql/updates/db_world/2023_05_13_06.sql b/data/sql/updates/db_world/2023_05_13_06.sql new file mode 100644 index 000000000..206c2970a --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_06.sql @@ -0,0 +1,4 @@ +-- DB update 2023_05_13_05 -> 2023_05_13_06 +DELETE FROM `gameobject` WHERE `guid` IN (105000, 105001, 105002, 105003, 105004, 105005, 105014, 105015, 105016, 105017, 105018, 105019, 105020, 105021); + +DELETE FROM `game_event_gameobject` WHERE `guid` IN (105000, 105001, 105002, 105003, 105004, 105005, 105014, 105015, 105016, 105017, 105018, 105019, 105020, 105021); diff --git a/data/sql/updates/db_world/2023_05_13_07.sql b/data/sql/updates/db_world/2023_05_13_07.sql new file mode 100644 index 000000000..c99ff158a --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_07.sql @@ -0,0 +1,8 @@ +-- DB update 2023_05_13_06 -> 2023_05_13_07 +-- +UPDATE `smart_scripts` SET `comment` = 'Windroc - In Combat - Cast \'Eagle Claw\'' WHERE `entryorguid` = 17128 AND `source_type` = 0 AND `id` = 0; +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `Entry` = 18220; + +DELETE FROM `smart_scripts` WHERE `entryorguid` = 18220 AND `source_type` = 0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18220, 0, 0, 0, 0, 0, 100, 0, 1000, 5000, 10000, 20000, 0, 11, 30285, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ravenous Windroc - In Combat - Cast \'Eagle Claw\''); diff --git a/data/sql/updates/db_world/2023_05_13_08.sql b/data/sql/updates/db_world/2023_05_13_08.sql new file mode 100644 index 000000000..c936b03c0 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_08.sql @@ -0,0 +1,28 @@ +-- DB update 2023_05_13_07 -> 2023_05_13_08 +-- +UPDATE `creature_template` SET `AIName`='', `ScriptName`='npc_violet_hold_defense_system' WHERE `entry`=30837; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 30837); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 and `SourceEntry` IN (57912, 57930, 58152); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorType`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,57912,0,0,31,0,3,29425,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,57930,0,0,31,0,3,30857,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,0,31,0,3,30661,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,1,31,0,3,30662,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,2,31,0,3,30663,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,3,31,0,3,30664,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,4,31,0,3,30665,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,5,31,0,3,30666,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,6,31,0,3,30667,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,7,31,0,3,30668,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,8,31,0,3,30918,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,9,31,0,3,30961,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,10,31,0,3,30962,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,11,31,0,3,30963,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,12,31,0,3,31007,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,13,31,0,3,31008,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,14,31,0,3,31009,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,15,31,0,3,31010,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,16,31,0,3,31118,0,0,0,0,'','Defense System - Arcane Lightning'), +(13,1,58152,0,17,31,0,3,32191,0,0,0,0,'','Defense System - Arcane Lightning'); diff --git a/data/sql/updates/db_world/2023_05_13_09.sql b/data/sql/updates/db_world/2023_05_13_09.sql new file mode 100644 index 000000000..cb4f59813 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_09.sql @@ -0,0 +1,5 @@ +-- DB update 2023_05_13_08 -> 2023_05_13_09 +-- +DELETE FROM `creature_template_movement` WHERE (`CreatureId` = 8982); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(8982, 1, 0, 0, 1, 0, 0, 0); diff --git a/data/sql/updates/db_world/2023_05_13_10.sql b/data/sql/updates/db_world/2023_05_13_10.sql new file mode 100644 index 000000000..8f08ce1de --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_10.sql @@ -0,0 +1,4 @@ +-- DB update 2023_05_13_09 -> 2023_05_13_10 +-- +UPDATE `creature_template` SET `ScriptName` = 'boss_swamplord_muselek', `AIName`= '' WHERE `entry` = 17826; +DELETE FROM `smart_scripts` WHERE `entryorguid` = 17826 AND `source_type` = 0; diff --git a/data/sql/updates/db_world/2023_05_13_11.sql b/data/sql/updates/db_world/2023_05_13_11.sql new file mode 100644 index 000000000..3448ceedf --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_11.sql @@ -0,0 +1,167 @@ +-- DB update 2023_05_13_10 -> 2023_05_13_11 +-- + +DELETE FROM `creature_template_addon` WHERE `entry` IN (32838,34679,29945,29855,28857,27351,25196,37993, 37998, 1312, 4984, 5510, 5516, 12791, 13358, 13359, 14489, 25195,28049); +INSERT INTO `creature_template_addon` (`entry`, `bytes2`, `emote`) VALUES +(14489,2,0), +(13359,2,0), +(13358,2,0), +(12791,258,0), +(5516,2,0), +(5510,2,0), +(4984,2,0), +(1312,2,0), +(37993,2,0), +(37998,2,0), +(25195,2,0), +(25196,2,0), +(27351,2,214), +(28049,2,0), +(28857,2,0), +(29855,2,0), +(29945,2,0), +(32838,2,0), +(34679,2,0); + +UPDATE `creature_template_addon` SET `bytes2`=2 WHERE `entry` IN (18965,18970,31294,37144,37146,32710,32711); +UPDATE `creature` SET `equipment_id`=-1 WHERE `id1` IN (27553,27560,27557,31563,25242,25243,25275,19068,16582,16842,16580,18240,17138,25962,19048,19792,18489,20203,19610,19737,19995,19362,21742,21717,22016,22018); +UPDATE `creature` SET `equipment_id`=1 WHERE `id1` IN (27588,16842, 28596, 28569, 18301, 19147, 21114, 21254); +UPDATE `creature_equip_template` SET `ItemID1`=34681 WHERE `CreatureID` IN (27573) AND `ID`=1; +DELETE FROM `creature_equip_template` WHERE `CreatureID`IN (27588,27553,27560,27557,31563,25242,25243,25275,28596, 28569, 18301, 19147, 21114, 21254, 19068,16582,16842,16580,18240,17138,25962,19048,19792,18489,20203,19610,19737,19995,19362,21742,21717,25994,22016,22018); +INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`) VALUES +(19068, 4, 14877, 14877, 5260), -- 19068 +(19068, 3, 18062, 0, 5260), -- 19068 +(19068, 2, 17383, 0, 5260), -- 19068 +(19068, 1, 10898, 12456, 5260), -- 19068 +(18489, 4, 14877, 14877, 5260), -- 18489 +(18489, 3, 18062, 0, 5260), -- 18489 +(18489, 2, 17383, 0, 5260), -- 18489 +(18489, 1, 10898, 12456, 5260), -- 18489 +(20203, 3, 1911, 0, 0), -- 20203 +(20203, 2, 2704, 0, 0), -- 20203 +(20203, 1, 1903, 0, 0), -- 20203 +(19610, 3, 1903, 0, 0), -- 19610 +(19610, 2, 4994, 0, 0), -- 19610 +(19610, 1, 1910, 0, 0), -- 19610 +(19737, 2, 4994, 0, 0), -- 19737 +(19737, 1, 1903, 0, 0), -- 19737 +(25994, 1, 1906, 2081, 0), -- 25994 +(25994, 2, 2200, 0, 0), -- 25994 +(19995, 3, 2703, 13407, 5870), -- 19995 +(19995, 2, 2703, 13406, 5870), -- 19995 +(19995, 1, 14874, 0, 5870), -- 19995 +(19362, 4, 30181, 21549, 2507), -- 19362 +(19362, 3, 30180, 30180, 2507), -- 19362 +(19362, 2, 30178, 0, 2507), -- 19362 +(19362, 1, 30179, 0, 2507), -- 1936 +(21742, 2, 5956, 24322, 0), -- 21742 +(21742, 1, 27405, 24322, 0), -- 21742 +(21717, 5, 5956, 0, 0), -- 21717 +(21717, 4, 31600, 31600, 0), -- 21717 +(21717, 3, 31601, 0, 0), -- 21717 +(21717, 2, 31603, 31603, 0), -- 21717 +(21717, 1, 31600, 31466, 0), -- 21717 +(22016, 4, 31206, 31466, 0), -- 22016 +(22016, 3, 31208, 0, 0), -- 22016 +(22016, 2, 31207, 0, 0), -- 22016 +(22016, 1, 31205, 31205, 0), -- 22016 +(22018, 4, 12403, 0, 0), -- 22018 +(22018, 3, 30636, 0, 0), -- 22018 +(22018, 2, 25758, 0, 0), -- 22018 +(22018, 1, 27405, 24328, 0), -- 22018 +(19792, 7, 30179, 21549, 0), -- 19792 +(19792, 6, 29417, 0, 0), -- 19792 +(19792, 5, 2028, 0, 0), -- 19792 +(19792, 4, 27405, 24328, 0), -- 19792 +(19792, 3, 25758, 0, 0), -- 19792 +(19792, 2, 30636, 0, 0), -- 19792 +(19792, 1, 23225, 0, 0), -- 19792 +(19048, 2, 1903, 0, 0), -- 19048 +(19048, 1, 1910, 0, 0), -- 19048 +(25962, 1, 2200, 0, 0), -- 25962 +(25962, 2, 1906, 2081, 0), -- 25962 +(17138, 5, 5289, 0, 0), -- 17138 +(17138, 4, 14475, 0, 0), -- 17138 +(17138, 3, 5287, 0, 0), -- 17138 +(17138, 2, 5288, 0, 0), -- 17138 +(17138, 1, 14643, 0, 0), -- 17138 +(18240, 6, 6233, 0, 0), -- 18240 +(18240, 5, 12868, 0, 0), -- 18240 +(18240, 4, 3362, 0, 0), -- 18240 +(18240, 3, 3351, 0, 0), -- 18240 +(18240, 2, 3346, 0, 0), -- 18240 +(18240, 1, 3367, 0, 0), -- 18240 +(16580, 1, 10898, 12456, 5260), -- 16580 +(16580, 2, 21465, 12452, 5260), -- 16580 +(16582, 2, 10898, 12456, 13924), -- 16582 +(16582, 1, 18062, 0, 13924), -- 16582 +(16842, 2, 1905, 2558, 0), -- 16842 +(16842, 1, 1901, 1901, 0), -- 16842 +(28596, 1, 5292, 0, 0), -- 28596 +(28569, 1, 5292, 0, 0), -- 28569 +(18301, 1, 3351, 0, 0), -- 18301 +(19147, 1, 2704, 0, 0), -- 19147 +(21114, 1, 1911, 0, 0), -- 21114 +(21254, 1, 3350, 0, 0), -- 21254 +(27588, 1, 21573, 21572, 21564), -- 27588 +(27553, 3, 34682, 12452, 0), -- 27553 +(27553, 2, 34681, 12452, 0), -- 27553 +(27553, 1, 30181, 12452, 0), -- 27553 +(27560, 4, 36790, 0, 0), -- 27560 +(27560, 3, 36791, 0, 0), -- 27560 +(27560, 2, 36792, 0, 0), -- 27560 +(27560, 1, 28914, 0, 0), -- 27560 +(27557, 2, 34682, 0, 0), -- 27557 +(27557, 1, 34681, 0, 0), -- 27557 +(31563, 3, 34637, 34637, 5260), -- 31563 +(31563, 2, 34639, 0, 5260), -- 31563 +(31563, 1, 34640, 21549, 5260), -- 31563 +(25242, 4, 34637, 34637, 42921), -- 25242 +(25242, 3, 34639, 0, 42921), -- 25242 +(25242, 2, 34640, 21549, 42921), -- 25242 +(25242, 1, 8178, 0, 42921), -- 25242 +(25243, 2, 34681, 0, 5260), -- 25243 +(25243, 1, 34682, 34682, 5260), -- 25243 +(25275, 2, 1903, 13611, 0), -- 25275 +(25275, 1, 35312, 9701, 0); -- 25275 + +DELETE FROM `creature_equip_template` WHERE `CreatureID`=38493; +INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`) VALUES +(38493, 1, 40595, 49933, 0), -- 38493 +(38493, 2, 46107, 49933, 0); -- 38493 +UPDATE `creature` SET `equipment_id`=2 WHERE `guid` IN (246904,246905,246915); + +UPDATE `creature` SET `equipment_id`=-1 WHERE `id1` IN (1976, 14901, 23745, 24015, 24062, 24212, 28579, 32710, 32711, 34838); +DELETE FROM `creature_equip_template` WHERE `CreatureID` IN (1976, 14901, 23745, 24015, 24062, 24212, 28579, 32710, 32711, 34838); +INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`) VALUES +(1976, 1, 1899, 143, 0), +(1976, 2, 2715, 143, 0), +(14901, 1, 12629, 0, 0), +(14901, 2, 1910, 13605, 0), +(23745, 1, 6228, 0, 0), +(23745, 2, 2023, 0, 0), +(24015, 1, 34818, 0, 0), +(24015, 2, 34817, 0, 0), +(24015, 3, 34819, 0, 0), +(24015, 4, 34819, 33212, 0), +(24015, 5, 34820, 0, 0), +(24015, 6, 34816, 0, 0), +(24015, 7, 34821, 0, 0), +(24062, 1, 1910, 0, 0), +(24062, 2, 2704, 0, 0), +(24212, 1, 1983, 0, 0), +(24212, 2, 1910, 0, 0), +(28579, 1, 39359, 0, 0), +(28579, 2, 33594, 33594, 0), +(32710, 1, 0, 0, 44635), +(32710, 2, 0, 0, 44643), +(32711, 1, 0, 0, 44643), +(32711, 2, 0, 0, 44635), +(34838, 1, 34817, 0, 0), +(34838, 2, 40894, 13407, 0), +(34838, 3, 34816, 34819, 0), +(34838, 4, 34821, 34816, 0), +(34838, 5, 34819, 33212, 0), +(34838, 6, 34818, 0, 0); + +UPDATE `creature` SET `equipment_id` = 0 WHERE `id1` IN (6500,5405,6513,9600,4075,3819); diff --git a/data/sql/updates/db_world/2023_05_13_12.sql b/data/sql/updates/db_world/2023_05_13_12.sql new file mode 100644 index 000000000..e144803ba --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_12.sql @@ -0,0 +1,54 @@ +-- DB update 2023_05_13_11 -> 2023_05_13_12 +-- Co-authored-by: aletson https://github.com/TrinityCore/TrinityCore/pull/20630 +-- Floon(18588) & Raliq the Drunk(18585) & Sal'salabim(18584) +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` IN (18588,18585,18584); + +-- Floon +DELETE FROM `smart_scripts` WHERE `entryorguid`=18588 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18588, 0, 0, 0, 0, 0, 100, 0, 2000, 2000, 30000, 30000, 0, 11, 6726, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Floon - In Combat - Cast \'Silence\''), +(18588, 0, 1, 0, 0, 0, 100, 0, 4000, 4000, 5000, 5000, 0, 11, 9672, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Floon - In Combat - Cast \'Frostbolt\''), +(18588, 0, 2, 0, 0, 0, 100, 0, 9000, 9000, 20000, 20000, 0, 11, 11831, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Floon - In Combat - Cast \'Frost Nova\''), +(18588, 0, 3, 4, 62, 0, 100, 0, 7731, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Floon - On Gossip Option 0 Selected - Close Gossip'), +(18588, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 2, 1738, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Floon - On Gossip Option 0 Selected - Set Faction Arrakoa'), +(18588, 0, 5, 6, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Floon - On Gossip Option 0 Selected - Say Line 0'), +(18588, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Floon - On Gossip Option 0 Selected - Start Attacking'), +(18588, 0, 7, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Floon - On Reset - Set Default Faction'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceGroup` = 7732; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 7732, 0, 0, 0, 9, 0, 10009, 0, 0, 0, 0, 0, '', 'Floon - Show gossip menu 7732 option id 0 if quest Crackin\' Some Skulls has been taken.'); + +-- Raliq the Drunk +UPDATE `creature_template_addon` SET `bytes2` = 1 WHERE `entry` = 18585; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=18585 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18585, 0, 0, 0, 0, 0, 100, 0, 5000, 5000, 15000, 15000, 0, 11, 10966, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Raliq the Drunk - In Combat - Cast \'Uppercut\''), +(18585, 0, 1, 2, 62, 0, 100, 0, 7729, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Raliq the Drunk - On Gossip Option 0 Selected - Close Gossip'), +(18585, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 2, 45, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Raliq the Drunk - On Gossip Option 0 Selected - Set Faction Ogre'), +(18585, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Raliq the Drunk - On Gossip Option 0 Selected - Say Line 0'), +(18585, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Raliq the Drunk - On Gossip Option 0 Selected - Start Attacking'), +(18585, 0, 5, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Raliq the Drunk - On Reset - Set Default Faction'), +(18585, 0, 6, 0, 1, 0, 100, 0, 0, 0, 3600, 5000, 0, 5, 92, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Raliq the Drunk - Out of Combat - Play Emote 92 (ONESHOT_EAT_NOSHEATHE)'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceGroup` = 7729; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 7729, 0, 0, 0, 9, 0, 10009, 0, 0, 0, 0, 0, '', 'Raliq the Drunk - Show gossip menu 7729 option id 0 if quest Crackin\' Some Skulls has been taken.'); + +-- Sal'salabim +DELETE FROM `smart_scripts` WHERE `entryorguid`=18584 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18584, 0, 0, 0, 9, 0, 100, 0, 8, 40, 15000, 15000, 0, 11, 31705, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sal\'salabim - Within 8-40 Range - Cast \'Magnetic Pull\''), +(18584, 0, 1, 2, 62, 0, 100, 0, 7725, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Sal\'salabim - On Gossip Option 0 Selected - Close Gossip'), +(18584, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 2, 90, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sal\'salabim - On Gossip Option 0 Selected - Set Faction Demon'), +(18584, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Sal\'salabim - On Gossip Option 0 Selected - Say Line 0'), +(18584, 0, 4, 5, 61, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Sal\'salabim - On Gossip Option 0 Selected - Start Attacking'), +(18584, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 42, 0, 19, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sal\'salabim - On Gossip Option 0 Selected - Set Invincibility Hp 19%'), +(18584, 0, 6, 7, 2, 0, 100, 1, 0, 20, 0, 0, 0, 15, 10004, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 'Sal\'salabim - On Health Below 20% - Quest Credit \'Patience and Understanding\''), +(18584, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sal\'salabim - On Health Below 20% - Evade'), +(18584, 0, 8, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sal\'salabim - On Reset - Set Default Faction'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 15 AND `SourceGroup` = 7725; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 7725, 0, 0, 0, 9, 0, 10004, 0, 0, 0, 0, 0, '', 'Sal\'salabim - Show gossip menu 7725 option id 0 if quest Patience and Understanding has been taken.'); diff --git a/data/sql/updates/db_world/2023_05_13_13.sql b/data/sql/updates/db_world/2023_05_13_13.sql new file mode 100644 index 000000000..f7e4402af --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_13.sql @@ -0,0 +1,5 @@ +-- DB update 2023_05_13_12 -> 2023_05_13_13 +DELETE FROM `warden_checks` WHERE `id` IN (795,796); +INSERT INTO `warden_checks` (`id`, `type`, `data`, `str`, `address`, `length`, `result`, `comment`) VALUES +(795, 139, NULL, 'local f=DEFAULT_CHAT_FRAME for i=1,f:GetNumMessages() do if (f:GetMessageInfo(i)):find("Rotation Mode Disable") then return true end end', NULL, NULL, NULL, 'Detects PQR'), +(796, 139, NULL, 'local f=DEFAULT_CHAT_FRAME for i=1,f:GetNumMessages() do if (f:GetMessageInfo(i)):find("Rotation Mode Enable") then return true end end', NULL, NULL, NULL, 'Detects PQR'); diff --git a/data/sql/updates/db_world/2023_05_13_14.sql b/data/sql/updates/db_world/2023_05_13_14.sql new file mode 100644 index 000000000..5083ad5d3 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_14.sql @@ -0,0 +1,5 @@ +-- DB update 2023_05_13_13 -> 2023_05_13_14 +-- +DELETE FROM `areatrigger_scripts` WHERE `entry` = 4347 AND `ScriptName` = 'at_rp_nethekurse'; +INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES +(4347, 'at_rp_nethekurse'); diff --git a/data/sql/updates/db_world/2023_05_13_15.sql b/data/sql/updates/db_world/2023_05_13_15.sql new file mode 100644 index 000000000..2a7403240 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_13_15.sql @@ -0,0 +1,27 @@ +-- DB update 2023_05_13_14 -> 2023_05_13_15 +DELETE FROM `creature_text` WHERE `CreatureID` = 16807; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(16807, 0, 0, 'You wish to fight us all at once? This should be amusing!\n', 14, 0, 100, 0, 0, 10262, 15594, 0, 'Netherkurse AGGRO_1'), +(16807, 1, 0, 'Thank you for saving me the trouble. Now it\'s my turn to have some fun!\n', 14, 0, 100, 0, 0, 10270, 15589, 0, 'Netherkurse AGGRO_2'), +(16807, 2, 0, 'You can have that one, I no longer need him!', 14, 0, 100, 0, 0, 10263, 15569, 0, 'Netherkurse PEON_ATTACK_1'), +(16807, 2, 1, 'Yes, beat him mercilessly! His skull is as thick as an ogre\'s!\n', 14, 0, 100, 0, 0, 10264, 15575, 0, 'Netherkurse PEON_ATTACK_2'), +(16807, 2, 2, 'Don\'t waste your time on that one, he\'s weak!', 14, 0, 100, 0, 0, 10265, 15573, 0, 'Netherkurse PEON_ATTACK_3'), +(16807, 2, 3, 'You want him? Very well, take him!', 14, 0, 100, 0, 0, 10266, 15572, 0, 'Netherkurse PEON_ATTACK_4'), +(16807, 3, 0, 'One pitiful wretch down. Go on, take another one! ', 14, 0, 100, 0, 0, 10267, 15579, 0, 'Netherkurse PEON_DIE_1'), +(16807, 3, 1, 'Ah, what a waste... next!', 14, 0, 100, 0, 0, 10268, 15584, 0, 'Netherkurse PEON_DIE_2'), +(16807, 3, 2, 'I was going to kill him anyway!', 14, 0, 100, 0, 0, 10269, 15582, 0, 'Netherkurse PEON_DIE_3'), +(16807, 4, 0, 'Beg for your pitiful life!', 14, 0, 100, 0, 0, 10259, 14130, 0, 'Netherkurse SAY_SHADOW_SEAR'), +(16807, 5, 0, 'Your pain amuses me!', 14, 0, 100, 0, 0, 10261, 14148, 0, 'Netherkurse SAY_SHADOW_FISSURE'), +(16807, 6, 0, 'Run, coward, run! ', 14, 0, 100, 0, 0, 10260, 14132, 0, 'Netherkurse SAY_DEATH_COIL'), +(16807, 7, 0, 'I\'m already bored!', 14, 0, 100, 0, 0, 10271, 16864, 0, 'Netherkurse SAY_SLAY_1'), +(16807, 7, 1, 'Come on, show me a real fight!', 14, 0, 100, 0, 0, 10272, 15595, 0, 'Netherkurse SAY_SLAY_2'), +(16807, 7, 2, 'I had more fun torturing the peons!', 14, 0, 100, 0, 0, 10273, 16863, 0, 'Netherkurse SAY_SLAY_3'), +(16807, 7, 3, 'You lose.', 14, 0, 100, 0, 0, 10274, 16865, 0, 'Netherkurse SAY_SLAY_4'), +(16807, 7, 4, 'Oh, just die!', 14, 0, 100, 0, 0, 10275, 16866, 0, 'Netherkurse SAY_SLAY_5'), +(16807, 8, 0, 'What... a shame.', 14, 0, 100, 0, 0, 10276, 16862, 0, 'Netherkurse SAY_DIE'); + +-- Auras for Shadow Fissures +DELETE FROM `creature_template_addon` WHERE `entry` IN (18370, 20598); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(18370, 0, 0, 0, 0, 0, 0, '32250'), +(20598, 0, 0, 0, 0, 0, 0, '32250'); -- Same aura in heroic diff --git a/data/sql/updates/db_world/2023_05_14_00.sql b/data/sql/updates/db_world/2023_05_14_00.sql new file mode 100644 index 000000000..91e19fbba --- /dev/null +++ b/data/sql/updates/db_world/2023_05_14_00.sql @@ -0,0 +1,11 @@ +-- DB update 2023_05_13_15 -> 2023_05_14_00 +-- 21151 (Borgrim Stouthammer) +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 21151; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 21151); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21151, 0, 0, 0, 20, 0, 100, 0, 10511, 0, 0, 0, 0, 80, 2115100, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Borgrim Stouthammer - On Quest \'Strange Brew\' Finished - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2115100); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(2115100, 9, 0, 0, 0, 0, 100, 0, 5000, 5000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Borgrim Stouthammer - Actionlist - Say Line 0'); diff --git a/data/sql/updates/db_world/2023_05_14_01.sql b/data/sql/updates/db_world/2023_05_14_01.sql new file mode 100644 index 000000000..f94a24969 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_14_01.sql @@ -0,0 +1,11 @@ +-- DB update 2023_05_14_00 -> 2023_05_14_01 +-- +UPDATE `creature_template` SET `minlevel`=63, `maxlevel`=63, `AIName`='SmartAI' WHERE `entry`=16383; + +DELETE FROM `creature_template_addon` WHERE `entry`=16383; +INSERT INTO `creature_template_addon` (`entry`, `auras`) VALUES (16383, '28330'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 16383); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(16383, 0, 0, 0, 0, 0, 100, 0, 5000, 10000, 10000, 20000, 0, 11, 28314, 32, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Flameshocker - In Combat - Cast \'Flameshocker`s Touch\''), +(16383, 0, 1, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 28323, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Flameshocker - On Just Died - Cast \'Flameshocker`s Revenge\''); diff --git a/data/sql/updates/db_world/2023_05_14_02.sql b/data/sql/updates/db_world/2023_05_14_02.sql new file mode 100644 index 000000000..0a45d0722 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_14_02.sql @@ -0,0 +1,2 @@ +-- DB update 2023_05_14_01 -> 2023_05_14_02 +DELETE FROM `conditions` WHERE `SourceEntry` = 18250 AND `SourceTypeOrReferenceId` = 1 AND `ConditionTypeOrReference` = 2; diff --git a/data/sql/updates/db_world/2023_05_14_03.sql b/data/sql/updates/db_world/2023_05_14_03.sql new file mode 100644 index 000000000..101c5f4d7 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_14_03.sql @@ -0,0 +1,15 @@ +-- DB update 2023_05_14_02 -> 2023_05_14_03 +-- Harold Lane +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=18218; +DELETE FROM `smart_scripts` WHERE `entryorguid`=18218 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(18218,0,0,0,1,0,100,0,1000,15000,150000,180000,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,'Harold Lane - Out of Combat - Say Line 5'); + +DELETE FROM `creature_text` WHERE `CreatureID`=18218 AND `GroupID`=5; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(18218,5,0,'Shifting, %s moans from the pain of his thorn scratch.',16,0,100,0,0,0,15157,0,'Harold Lane'), +(18218,5,1,'%s groans in pain.',16,0,100,0,0,0,15158,0,'Harold Lane'), +(18218,5,2,'%s looks at his friends and then grunts painfully.',16,0,100,0,0,0,15159,0,'Harold Lane'), +(18218,5,3,'%s wakes himself up snoring.',16,0,100,0,0,0,15160,0,'Harold Lane'), +(18218,5,4,'%s winces when he touches the tender area around his scratch.',16,0,100,0,0,0,15161,0,'Harold Lane'), +(18218,5,5,'%s begins to whistle a tune, but then stops abruptly and moans.',16,0,100,0,0,0,15162,0,'Harold Lane'); diff --git a/data/sql/updates/db_world/2023_05_14_04.sql b/data/sql/updates/db_world/2023_05_14_04.sql new file mode 100644 index 000000000..258954eed --- /dev/null +++ b/data/sql/updates/db_world/2023_05_14_04.sql @@ -0,0 +1,14 @@ +-- DB update 2023_05_14_03 -> 2023_05_14_04 +-- Jessera of Mac'Aree SAI +SET @ENTRY := 17663; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,60000,60000,60000,60000,1,0,10000,0,0,0,0,1,0,0,0,0,0,0,0,'Jessera of Mac\'Aree - Out of Combat - Say Line 0'); + +-- Messenger Hermesius SAI +SET @ENTRY := 17703; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,1,0,100,0,20000,25000,20000,25000,1,0,5000,0,0,0,0,1,0,0,0,0,0,0,0,'Messenger Hermesius - Out of Combat - Say Line 0'); diff --git a/data/sql/updates/db_world/2023_05_14_05.sql b/data/sql/updates/db_world/2023_05_14_05.sql new file mode 100644 index 000000000..43ea98b01 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_14_05.sql @@ -0,0 +1,18 @@ +-- DB update 2023_05_14_04 -> 2023_05_14_05 +-- [Q] Deciphering the Book -- http://wotlk.openwow.com/quest=9557 +-- Anchorite Paetheus SAI +SET @ENTRY := 17424; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,20,0,100,0,9557,0,0,0,80,@ENTRY*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Anchorite Paetheus - On Quest \'Deciphering the Book\' Finished - Run Script'); + +-- Actionlist SAI +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY*100 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Anchorite Paetheus - On Script - Remove Npc Flag Questgiver'), +(@ENTRY*100,9,1,0,0,0,100,0,1000,1000,0,0,1,0,4000,0,0,0,0,1,0,0,0,0,0,0,0,'Anchorite Paetheus - On Script - Say Line 0'), +(@ENTRY*100,9,2,0,0,0,100,0,4000,4000,0,0,1,1,6000,0,0,0,0,1,0,0,0,0,0,0,0,'Anchorite Paetheus - On Script - Say Line 1'), +(@ENTRY*100,9,3,0,0,0,100,0,6000,6000,0,0,1,2,6000,0,0,0,0,1,0,0,0,0,0,0,0,'Anchorite Paetheus - On Script - Say Line 2'), +(@ENTRY*100,9,4,0,0,0,100,0,6000,6000,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,'Anchorite Paetheus - On Script - Say Line 3'), +(@ENTRY*100,9,5,0,0,0,100,0,0,0,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Anchorite Paetheus - On Script - Add Npc Flag Questgiver'); diff --git a/data/sql/updates/db_world/2023_05_14_06.sql b/data/sql/updates/db_world/2023_05_14_06.sql new file mode 100644 index 000000000..516268740 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_14_06.sql @@ -0,0 +1,8 @@ +-- DB update 2023_05_14_05 -> 2023_05_14_06 +DELETE FROM `reference_loot_template` WHERE `Item` = 18337; +DELETE FROM `creature_loot_template` WHERE `Item` = 18337; +INSERT INTO `creature_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES +(11480, 18337, 0, 0.7, 0, 1, 0, 1, 1, 'Arcane Aberration - Orphic Bracers'), +(14399, 18337, 0, 0.9, 0, 1, 0, 1, 1, 'Arcane Torrent - Orphic Bracers'), +(11483, 18337, 0, 0.8, 0, 1, 0, 1, 1, 'Mana Remnant - Orphic Bracers'), +(11484, 18337, 0, 0.9, 0, 1, 0, 1, 1, 'Residual Monstrosity - Orphic Bracers'); diff --git a/data/sql/updates/db_world/2023_05_14_07.sql b/data/sql/updates/db_world/2023_05_14_07.sql new file mode 100644 index 000000000..bb8f0232c --- /dev/null +++ b/data/sql/updates/db_world/2023_05_14_07.sql @@ -0,0 +1,39 @@ +-- DB update 2023_05_14_06 -> 2023_05_14_07 +-- +-- Polly (pre E.C.A.C) +UPDATE `creature_template` SET `minlevel` = 50, `maxlevel` = 50 WHERE `entry` = 7167; + +DELETE FROM `creature_text` WHERE `CreatureID`=7167; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(7167, 0, 0, 'SQUAWK!!!', 14, 0, 100, 0, 0, 0, 3170, 0, 'Polly - SAY_SPAWN'), +(7167, 1, 0, 'MmmmmMmmmm... Enormous chemically altered cracker....', 12, 0, 100, 0, 0, 0, 3167, 0, 'Polly - SAY_ON_ECAC'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 7167); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(7167, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Polly - On Just Summoned - Say Line 0'), +(7167, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Polly - On Just Summoned - Start Attacking'), +(7167, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, -1456.55, -3959.53, 0.24, 1.99, 'Polly - On Just Summoned - Set Home Position'), +(7167, 0, 3, 0, 1, 0, 100, 1, 73000, 73000, 60000, 60000, 0, 11, 8822, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Polly - OOC - Cast Stealth'), +(7167, 0, 4, 0, 1, 0, 100, 257, 5000, 5000, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, -1456.55, -3959.53, 0.24, 1.99, 'Polly - Out of Combat - Move To Position (No Repeat/Reset)'), +(7167, 0, 5, 6, 8, 0, 100, 513, 9976, 0, 0, 0, 0, 1, 1, 2500, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Polly - On Spellhit \'Polly Eats the E.C.A.C.\' - Say Line 1 (No Repeat)'), +(7167, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 0, 2, 35, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Polly - On Spellhit \'Polly Eats the E.C.A.C.\' - Set Faction 35 (No Repeat)'), +(7167, 0, 7, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Polly - On Spellhit \'Polly Eats the E.C.A.C.\' - Set Home Position (No Repeat)'), +(7167, 0, 8, 9, 52, 0, 100, 513, 1, 7167, 0, 0, 0, 12, 7168, 4, 60000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Polly - On Text 1 Over - Summon Creature \'Polly\' (No Repeat)'), +(7167, 0, 9, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Polly - On Text 1 Over - Despawn Instant (No Repeat)'); + +-- Polly (after E.C.A.C) +DELETE FROM `creature_text` WHERE `CreatureID`=7168; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(7168, 0, 0, 'What the squawk??? Squawk squawk, squawk? SQUAWK!', 12, 0, 100, 0, 0, 0, 3165, 0, 'Polly - SAY_ON_ECAC'); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 7168; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 7168); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(7168, 0, 0, 1, 54, 0, 100, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Polly - On Just Summoned - Say Line 0 (No Repeat)'), +(7168, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 21, 10, 0, 0, 0, 0, 0, 0, 0, 'Polly - On Just Summoned - Start Attacking (No Repeat)'); + +-- Script event - Summon 7167 +DELETE FROM `event_scripts` WHERE `id`=2153 AND `datalong`=7167; +INSERT INTO `event_scripts` (`id`, `delay`, `command`, `datalong`, `datalong2`, `dataint`, `x`, `y`, `z`, `o`) VALUES +(2153, 5, 10, 7167, 900000, 0, -1463.40, -3926.96, 0.24, 4.88); diff --git a/data/sql/updates/db_world/2023_05_14_08.sql b/data/sql/updates/db_world/2023_05_14_08.sql new file mode 100644 index 000000000..ffd901a14 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_14_08.sql @@ -0,0 +1,10 @@ +-- DB update 2023_05_14_07 -> 2023_05_14_08 +-- +DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (19130,30925,12739,30500,30495); +INSERT INTO `spelldifficulty_dbc` (`ID`, `DifficultySpellID_1`, `DifficultySpellID_2`) VALUES +(19130, 19130, 40392), +(30925, 30925, 40059), +(12739, 12739, 15472), +(30500, 30500, 35954), +(30495, 30495, 35953); + diff --git a/data/sql/updates/db_world/2023_05_15_00.sql b/data/sql/updates/db_world/2023_05_15_00.sql new file mode 100644 index 000000000..c97995777 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_15_00.sql @@ -0,0 +1,25 @@ +-- DB update 2023_05_14_08 -> 2023_05_15_00 +SET @ENTRY := 20913; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY,0,0,0,20,0,100,0,10436,0,0,0,80,@ENTRY*100,2,0,0,0,0,1,0,0,0,0,0,0,0,'Tashar - On Quest \'All Clear!\' Finished - Run Script'); + +-- Actionlist SAI +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY*100 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,83,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tashar - On Script - Remove Npc Flag Questgiver'), +(@ENTRY*100,9,1,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tashar - On Script - Say Line 0'), +(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,59,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tashar - On Script - Set Run Off'), +(@ENTRY*100,9,3,0,0,0,100,0,2000,2000,0,0,69,0,0,0,0,0,0,8,0,0,0,4922.18,2991.38,93.9847,5.88582,'Tashar - On Script - Move To Position'), +(@ENTRY*100,9,4,0,0,0,100,0,5000,5000,0,0,17,173,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tashar - On Script - Set Emote State 173'), +(@ENTRY*100,9,5,0,0,0,100,0,4000,4000,0,0,17,26,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tashar - On Script - Set Emote State 26'), +(@ENTRY*100,9,6,0,0,0,100,0,0,0,0,0,11,28730,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tashar - On Script - Cast \'Arcane Torrent\''), +(@ENTRY*100,9,7,0,0,0,100,0,2000,2000,0,0,50,184614,15,0,0,0,0,8,0,0,0,4923.56,2990.45,93.9413,0.813699,'Tashar - On Script - Summon Gameobject \'Ethereal Repair Kit\''), +(@ENTRY*100,9,8,0,0,0,100,0,0,0,0,0,50,184614,15,0,0,0,0,8,0,0,0,4923.45,2991.21,93.9248,5.49404,'Tashar - On Script - Summon Gameobject \'Ethereal Repair Kit\''), +(@ENTRY*100,9,9,0,0,0,100,0,0,0,0,0,50,184614,15,0,0,0,0,8,0,0,0,4924.47,2990.35,93.8867,2.25067,'Tashar - On Script - Summon Gameobject \'Ethereal Repair Kit\''), +(@ENTRY*100,9,10,0,0,0,100,0,0,0,0,0,50,184614,15,0,0,0,0,8,0,0,0,4924.32,2991.21,93.8808,3.88003,'Tashar - On Script - Summon Gameobject \'Ethereal Repair Kit\''), +(@ENTRY*100,9,11,0,0,0,100,0,2000,2000,0,0,1,1,4000,0,0,0,0,1,0,0,0,0,0,0,0,'Tashar - On Script - Say Line 1'), +(@ENTRY*100,9,12,0,0,0,100,0,4000,4000,0,0,69,0,0,0,0,0,0,8,0,0,0,4914.74,2991.92,94.1138,0,'Tashar - On Script - Move To Position'), +(@ENTRY*100,9,13,0,0,0,100,0,3000,3000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,0.15708,'Tashar - On Script - Set Orientation 0,15708'), +(@ENTRY*100,9,14,0,0,0,100,0,0,0,0,0,82,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Tashar - On Script - Add Npc Flag Questgiver'); diff --git a/data/sql/updates/db_world/2023_05_17_00.sql b/data/sql/updates/db_world/2023_05_17_00.sql new file mode 100644 index 000000000..f60a545d6 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_17_00.sql @@ -0,0 +1,60 @@ +-- DB update 2023_05_15_00 -> 2023_05_17_00 +-- +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` IN (-151019,-151020,-151021,-151022,-151023,-151024,-151025,-151026,-151027,-151028,-151029,-151030,-151031,-151032,-151033,-151034,-151019,-151020,-151021,-151022,-151023,-151024,-151025,-151026,-151027,-151028,-151029,-151030,-151031,-151032,-151033,-151034) AND `action_type` = 80 AND `action_param1` IN (1670011, 1670012); + +DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryorguid` IN (-151019,-151020,-151021,-151022,-151023,-151024,-151025,-151026,-151027,-151028,-151029,-151030,-151031,-151032,-151033,-151034,-151019,-151020,-151021,-151022,-151023,-151024,-151025,-151026,-151027,-151028,-151029,-151030,-151031,-151032,-151033,-151034) AND `action_type` = 226; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-151019, 0, 1006, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - On Respawn - Disable'), +(-151020, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - On Respawn - Disable'), +(-151021, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Respawn - Disable'), +(-151022, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Heathen - On Respawn - Disable'), +(-151023, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - On Respawn - Disable'), +(-151024, 0, 1006, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - On Respawn - Disable'), +(-151025, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - On Respawn - Disable'), +(-151026, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Respawn - Disable'), +(-151027, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Respawn - Disable'), +(-151028, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - On Respawn - Disable'), +(-151029, 0, 1006, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - On Respawn - Disable'), +(-151030, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - On Respawn - Disable'), +(-151031, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - On Respawn - Disable'), +(-151032, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Respawn - Disable'), +(-151033, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Respawn - Disable'), +(-151034, 0, 1001, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Respawn - Disable'), +(-151019, 0, 1007, 1008, 77, 0, 100, 0, 1, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - On Counter 2/2 - Enable'), +(-151020, 0, 1002, 1003, 38, 0, 100, 0, 3, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - On Data Set 3 1 - Enable'), +(-151021, 0, 1002, 1003, 38, 0, 100, 0, 3, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Data Set 3 1 - Enable'), +(-151022, 0, 1002, 1003, 38, 0, 100, 0, 3, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Heathen - On Data Set 3 1 - Enable'), +(-151023, 0, 1002, 1003, 38, 0, 100, 0, 3, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - On Data Set 3 1 - Enable'), +(-151024, 0, 1007, 1008, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - On Data Set 3 2 - Enable'), +(-151025, 0, 1002, 1003, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - On Data Set 3 2 - Enable'), +(-151026, 0, 1002, 1003, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Data Set 3 2 - Enable'), +(-151027, 0, 1002, 1003, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Data Set 3 2 - Enable'), +(-151028, 0, 1002, 1003, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Darkcaster - On Data Set 3 2 - Enable'), +(-151029, 0, 1008, 1009, 10, 0, 100, 267, 0, 90, 0, 0, 1, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - Within 0-90 Range Out of Combat LoS - Enable'), +(-151030, 0, 1002, 1003, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - On Data Set 3 2 - Enable'), +(-151031, 0, 1002, 1003, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Reaver - On Data Set 3 2 - Enable'), +(-151032, 0, 1002, 1003, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Data Set 3 2 - Enable'), +(-151033, 0, 1002, 1003, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Data Set 3 2 - Enable'), +(-151034, 0, 1002, 1003, 38, 0, 100, 0, 3, 2, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Sharpshooter - On Data Set 3 2 - Enable'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = -151019) AND (`source_type` = 0) AND (`id` IN (1009, 1010, 1011)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-151019, 0, 1009, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 1670011, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - Linked - Run Script'), +(-151019, 0, 1010, 0, 58, 0, 100, 0, 0, 1670002, 0, 0, 0, 80, 1670013, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - On Waypoint Finished - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 1670011); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(1670011, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 1670002, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - Actionlist - Start Waypoint'), +(1670011, 9, 1, 0, 0, 0, 100, 0, 400, 400, 0, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - Actionlist - Say Line 5'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = -151024) AND (`source_type` = 0) AND (`id` IN (1008, 1009, 1010)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-151024, 0, 1008, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 80, 1670012, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - Linked - Run Script'), +(-151024, 0, 1009, 0, 40, 0, 100, 0, 4, 1670004, 0, 0, 0, 80, 1670014, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - On Waypoint Finished - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 1670012); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(1670012, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 53, 0, 1670004, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - Actionlist - Start Waypoint'), +(1670012, 9, 1, 0, 0, 0, 100, 0, 400, 400, 0, 0, 0, 1, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Legionnaire - Actionlist - Say Line 8'); + +UPDATE `smart_scripts` SET `event_flags`=257 WHERE `entryorguid`=-151029 AND `source_type`=0 AND `id`=1008 AND `link`=1009; diff --git a/data/sql/updates/db_world/2023_05_20_00.sql b/data/sql/updates/db_world/2023_05_20_00.sql new file mode 100644 index 000000000..b8053ef39 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_20_00.sql @@ -0,0 +1,40 @@ +-- DB update 2023_05_17_00 -> 2023_05_20_00 +-- +SET @CGUID := 138519; + +DELETE FROM `creature` WHERE `id1` IN (17653, 17377) AND `map` = 542; +INSERT INTO `creature` (`guid`, `id1`, `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`, `VerifiedBuild`) VALUES +(@CGUID+0, 17653, 542, 3713, 3713, 3, 1, 0, 316.273651123046875, -108.876602172851562, -24.6027107238769531, 1.256637096405029296, 86400, 0, 0, 0, 0, 0, 0, 0, 0, 46366), +(@CGUID+1, 17653, 542, 3713, 3713, 3, 1, 0, 345.848419189453125, -74.4559097290039062, -24.6402416229248046, 3.59537816047668457, 86400, 0, 0, 0, 0, 0, 0, 0, 0, 46366), +(@CGUID+2, 17653, 542, 3713, 3713, 3, 1, 0, 343.5838623046875, -103.630592346191406, -24.5688228607177734, 2.356194496154785156, 86400, 0, 0, 0, 0, 0, 0, 0, 0, 46366), +(@CGUID+3, 17653, 542, 3713, 3713, 3, 1, 0, 301.987579345703125, -86.74652099609375, -24.4516544342041015, 0.157079637050628662, 86400, 0, 0, 0, 0, 0, 0, 0, 0, 46366), +(@CGUID+4, 17653, 542, 3713, 3713, 3, 1, 0, 320.75, -63.6120796203613281, -24.6360912322998046, 4.886921882629394531, 86400, 0, 0, 0, 0, 0, 0, 0, 0, 46366), +(@CGUID+5, 17377, 542, 3713, 3713, 3, 1, 1, 326.502899169921875, -86.0027542114257812, -24.5770149230957031, 3.59537816047668457, 86400, 0, 0, 0, 0, 0, 0, 0, 0, 46366); + + UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE (`entry` = 17653); + UPDATE `creature_template` SET `flags_extra` = `flags_extra`|67108864 WHERE (`entry` IN (17653, 18620)); + + DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 17653); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17653, 0, 0, 0, 0, 0, 100, 0, 1200, 2400, 6000, 7200, 0, 11, 12739, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Channeler - In Combat - Cast \'Shadow Bolt\''), +(17653, 0, 1, 0, 0, 0, 100, 0, 5000, 6500, 16000, 17500, 0, 11, 30937, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Channeler - In Combat - Cast \'Mark of Shadow\''), +(17653, 0, 2, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 0, 10, @CGUID+5, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Channeler - On Just Died - Do Action 1 on Keli\'dan the Breaker'), +(17653, 0, 3, 0, 4, 0, 100, 512, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 9, 17653, 0, 100, 1, 0, 0, 0, 0, 'Shadowmoon Channeler - On Aggro - Set In Combat With Zone'); + +DELETE FROM `creature_formations` WHERE `memberGUID` IN (@CGUID+0,@CGUID+1,@CGUID+2,@CGUID+3,@CGUID+4,@CGUID+5); +INSERT INTO `creature_formations` (`memberGUID`, `leaderGUID`, `groupAI`) VALUES +(@CGUID+0, @CGUID+5, 24), +(@CGUID+1, @CGUID+5, 24), +(@CGUID+2, @CGUID+5, 24), +(@CGUID+3, @CGUID+5, 24), +(@CGUID+4, @CGUID+5, 24), +(@CGUID+5, @CGUID+5, 24); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (-138519,-138519,-138520,-138521,-138522,-138523)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-(@CGUID+0), 0, 1000, 0, 1, 0, 100, 0, 3600, 3600, 15000, 15000, 0, 11, 30888, 0, 0, 0, 0, 0, 10, @CGUID+4, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Channeler - Out of Combat - Cast \'Star Beam\''), +(-(@CGUID+0), 0, 1001, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 223, 2, 0, 0, 0, 0, 0, 10, @CGUID+5, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Channeler - On Aggro - Do Action 2 on Keli\'dan the Breaker'), +(-(@CGUID+1), 0, 1000, 0, 1, 0, 100, 0, 3600, 3600, 15000, 15000, 0, 11, 30888, 0, 0, 0, 0, 0, 10, @CGUID+0, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Channeler - Out of Combat - Cast \'Star Beam\''), +(-(@CGUID+2), 0, 1000, 0, 1, 0, 100, 0, 3600, 3600, 15000, 15000, 0, 11, 30888, 0, 0, 0, 0, 0, 10, @CGUID+3, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Channeler - Out of Combat - Cast \'Star Beam\''), +(-(@CGUID+3), 0, 1000, 0, 1, 0, 100, 0, 3600, 3600, 15000, 15000, 0, 11, 30888, 0, 0, 0, 0, 0, 10, @CGUID+1, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Channeler - Out of Combat - Cast \'Star Beam\''), +(-(@CGUID+4), 0, 1000, 0, 1, 0, 100, 0, 3600, 3600, 15000, 15000, 0, 11, 30888, 0, 0, 0, 0, 0, 10, @CGUID+2, 0, 0, 0, 0, 0, 0, 0, 'Shadowmoon Channeler - Out of Combat - Cast \'Star Beam\''); diff --git a/data/sql/updates/db_world/2023_05_20_01.sql b/data/sql/updates/db_world/2023_05_20_01.sql new file mode 100644 index 000000000..cce6163b6 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_20_01.sql @@ -0,0 +1,10 @@ +-- DB update 2023_05_20_00 -> 2023_05_20_01 +-- + +UPDATE `creature_addon` SET `auras` = '18950' WHERE `guid` IN (135170, 135171, 135174, 135175, 135345, 135346, 135347, 135348, 135349, 135350, 135351, 135352, 135353, 135354, 135355, 135356, 135357, 135358, 135359, 135360, 135361, 135362); + +DELETE FROM `creature_template_addon` WHERE `entry` = 16408; +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(16408, 0, 0, 0, 0, 0, 0, '18950'); + +UPDATE `creature_template_addon` SET `auras` = '18950' WHERE `entry` IN (20058, 16424); diff --git a/data/sql/updates/db_world/2023_05_20_02.sql b/data/sql/updates/db_world/2023_05_20_02.sql new file mode 100644 index 000000000..556cb5ecd --- /dev/null +++ b/data/sql/updates/db_world/2023_05_20_02.sql @@ -0,0 +1,36 @@ +-- DB update 2023_05_20_01 -> 2023_05_20_02 +-- +UPDATE `creature_template_addon` SET `bytes2` = 1, `auras` = '18950' WHERE (`entry` = 20993); +UPDATE `creature_template_addon` SET `bytes2` = 2 WHERE (`entry` IN (17826, 20183)); + +DELETE FROM `creature_template_addon` WHERE (`entry` IN (18054,17455,18051,19886,19885,21126,21842,17938,19888,21127,21843,17960,19890,19887,20254,20697,20691,20698)); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(18054, 0, 0, 0, 1, 0, 0, ''), +(17455, 0, 0, 0, 1, 0, 0, ''), +(18051, 0, 0, 0, 1, 0, 0, ''), +(19886, 0, 0, 0, 1, 0, 0, ''), +(19885, 0, 0, 0, 1, 0, 0, ''), +(21126, 0, 0, 0, 1, 0, 0, ''), +(21842, 0, 0, 0, 1, 0, 0, ''), +(17938, 0, 0, 0, 1, 0, 0, ''), +(19888, 0, 0, 0, 1, 0, 0, ''), +(21127, 0, 0, 0, 1, 0, 0, ''), +(21843, 0, 0, 0, 1, 0, 0, ''), +(17960, 0, 0, 0, 1, 0, 0, ''), +(19890, 0, 0, 0, 1, 0, 0, ''), +(19887, 0, 0, 0, 1, 0, 0, ''), +(20254, 0, 0, 0, 1, 0, 0, '32368'), +(20697, 0, 0, 0, 1, 0, 0, '37509'), +(20691, 0, 0, 0, 1, 0, 0, '37509'), +(20698, 0, 0, 0, 1, 0, 0, '37509'); + +UPDATE `creature_addon` SET `bytes2` = 1 WHERE `guid` IN (202625, 202627, 202628, 202629, 202630, 202631, 202697, 202623, 202624, 202614, 202615); +UPDATE `creature_addon` SET `bytes2` = 2 WHERE `guid` IN (138500); + +UPDATE `creature` SET `equipment_id` = 1 WHERE `id1` IN (17958, 17957, 21126, 17938, 17940, 21127, 17960, 17961, 17826); + +UPDATE `creature_template` SET `unit_flags` = `unit_flags`|33555200 WHERE (`entry` = 20307); +UPDATE `creature_template` SET `unit_flags` = `unit_flags`|33554688 WHERE (`entry` = 20304); + +UPDATE `creature_template` SET `lootid` = 18639, `pickpocketloot` = 18639, `mingold` = 881, `maxgold` = 1155 WHERE (`entry` = 20647); +UPDATE `creature_template` SET `lootid` = 18634, `pickpocketloot` = 18634, `mingold` = 881, `maxgold` = 1155 WHERE (`entry` = 20648); diff --git a/data/sql/updates/db_world/2023_05_21_00.sql b/data/sql/updates/db_world/2023_05_21_00.sql new file mode 100644 index 000000000..97220aed4 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_21_00.sql @@ -0,0 +1,176 @@ +-- DB update 2023_05_20_02 -> 2023_05_21_00 +/* + Blood Guard Porung +*/ +-- Add some leftover details to Porung +UPDATE `creature` SET `zoneId` = 3714, `areaId` = 3714 WHERE `guid` = 151283 AND `id1` = 20923; + +-- SAI Override for Zealots +UPDATE `creature_template` SET `flags_extra` = `flags_extra`|67108864 WHERE (`entry` IN (17462, 20595)); + +-- Delete deprecated summon_group +DELETE FROM `creature_summon_groups` WHERE `summonerID` = 20923; + +SET @CGUID := 151283; + +-- Add the pre-spawn Zealots +DELETE FROM `creature` WHERE `id1` = 17462 AND `guid` BETWEEN @CGUID+1 AND @CGUID+8; +INSERT INTO `creature` (`guid`, `id1`, `map`, `zoneId`, `areaId`, `spawnMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `VerifiedBuild`) VALUES +(@CGUID+1, 17462, 540, 3714, 3714, 3, 1, 500.66077, 335.08316, 2.1801622, 4.790035247802734375, 86400, 46924), +(@CGUID+2, 17462, 540, 3714, 3714, 3, 1, 502.3265, 339.933, 2.1924121, 4.682251453399658203, 86400, 46924), +(@CGUID+3, 17462, 540, 3714, 3714, 3, 1, 507.43033, 340.37152, 2.1807163, 4.49735260009765625, 86400, 46924), +(@CGUID+4, 17462, 540, 3714, 3714, 3, 1, 515.1152, 339.82166, 2.1918812, 4.189203739166259765, 86400, 46924), +(@CGUID+5, 17462, 540, 3714, 3714, 3, 1, 500.43695, 299.709, 2.0352724, 1.837408661842346191, 86400, 46924), +(@CGUID+6, 17462, 540, 3714, 3714, 3, 1, 500.4554, 295.4435, 2.0247803, 1.765462279319763183, 86400, 46924), +(@CGUID+7, 17462, 540, 3714, 3714, 3, 1, 505.0166, 294.01736, 2.0213714, 1.931191682815551757, 86400, 46924), +(@CGUID+8, 17462, 540, 3714, 3714, 3, 1, 510.66922, 292.43665, 2.0080533, 2.112969875335693359, 86400, 46924); + +DELETE FROM `creature_addon` WHERE (`guid` IN (@CGUID+1,@CGUID+2,@CGUID+3,@CGUID+4,@CGUID+5,@CGUID+6,@CGUID+7,@CGUID+8)); +INSERT INTO `creature_addon` (`guid`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(@CGUID+1, 0, 0, 0, 0, 0, 0, '18950'), +(@CGUID+2, 0, 0, 0, 0, 0, 0, '18950'), +(@CGUID+3, 0, 0, 0, 0, 0, 0, '18950'), +(@CGUID+4, 0, 0, 0, 0, 0, 0, '18950'), +(@CGUID+5, 0, 0, 0, 0, 0, 0, '18950'), +(@CGUID+6, 0, 0, 0, 0, 0, 0, '18950'), +(@CGUID+7, 0, 0, 0, 0, 0, 0, '18950'), +(@CGUID+8, 0, 0, 0, 0, 0, 0, '18950'); + +DELETE FROM `waypoints` WHERE `point_comment` LIKE 'Shattered Hand Zealot - %' AND `entry` BETWEEN 1746200 AND 1746208; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `point_comment`) VALUES +(1746200,1,518.51355,254.91473,1.935091,NULL,'Shattered Hand Zealot - Summon Gauntlet Guards'), +(1746200,2,522.1381,253.96086,1.9344256,NULL,'Shattered Hand Zealot - Summon Gauntlet Guards'), +(1746200,3,512.82446,286.9732,2.1900017,NULL,'Shattered Hand Zealot - Summon Gauntlet Guards'), -- Decomposed to not clip through the wall +(1746200,4,497.68735,316.3075,1.9454536,NULL,'Shattered Hand Zealot - Summon Gauntlet Guards'), +(1746200,5,485.92004,316.08777,1.9463365,NULL,'Shattered Hand Zealot - Summon Gauntlet Guards'), +(1746201,1,495.4776,316.98608,1.946535,NULL,'Shattered Hand Zealot - Add 1'), +(1746201,2,483.1907,317.86993,1.9473528,NULL,'Shattered Hand Zealot - Add 1'), +(1746201,3,455.10214,317.3777,1.9421942,NULL,'Shattered Hand Zealot - Add 1'), +(1746201,4,430.9916,316.97632,1.9160842,NULL,'Shattered Hand Zealot - Add 1'), +(1746201,5,400.69287,318.7411,1.8979802,NULL,'Shattered Hand Zealot - Add 1'), +(1746201,6,385.03403,321.49213,1.9389232,3.351032257080078125,'Shattered Hand Zealot - Add 1'), +(1746202,1,501.7538,320.9323,1.9434687,NULL,'Shattered Hand Zealot - Add 2'), +(1746202,2,476.05844,317.75107,1.9364125,NULL,'Shattered Hand Zealot - Add 2'), +(1746202,3,455.1762,318.79874,1.9421194,NULL,'Shattered Hand Zealot - Add 2'), +(1746202,4,429.9724,317.08362,1.9209572,NULL,'Shattered Hand Zealot - Add 2'), +(1746202,5,418.716,319.8783,1.9447119,3.351032257080078125,'Shattered Hand Zealot - Add 2'), +(1746203,1,503.322,321.56223,1.9413302,NULL,'Shattered Hand Zealot - Add 3'), +(1746203,2,492.0797,318.1158,1.9481977,NULL,'Shattered Hand Zealot - Add 3'), +(1746203,3,480.32916,318.5935,1.9409089,NULL,'Shattered Hand Zealot - Add 3'), +(1746203,4,454.69748,319.9294,1.942607,3.351032257080078125,'Shattered Hand Zealot - Add 3'), +(1746204,1,503.59293,319.84564,1.9425683,NULL,'Shattered Hand Zealot - Add 4'), +(1746204,2,493.9259,316.13474,1.9472932,NULL,'Shattered Hand Zealot - Add 4'), +(1746204,3,476.05844,317.75107,1.9364125,NULL,'Shattered Hand Zealot - Add 4'), +(1746204,4,455.65674,317.68033,1.9416298,NULL,'Shattered Hand Zealot - Add 4'), +(1746204,5,429.9724,317.08362,1.9209572,NULL,'Shattered Hand Zealot - Add 4'), +(1746204,6,409.81305,318.26263,1.9170406,NULL,'Shattered Hand Zealot - Add 4'), +(1746204,7,384.47876,318.11124,1.9394886,NULL,'Shattered Hand Zealot - Add 4'), +(1746204,8,359.87564,320.17487,1.9181617,3.351032257080078125,'Shattered Hand Zealot - Add 4'), +(1746205,1,497.69696,309.7413,1.9453896,NULL,'Shattered Hand Zealot - Add 5 - Decomposed'), +(1746205,2,485.07498,314.65887,1.9463371,NULL,'Shattered Hand Zealot - Add 5'), +(1746205,3,460.72418,313.97842,1.9364703,NULL,'Shattered Hand Zealot - Add 5'), +(1746205,4,434.42194,314.33572,1.9077104,NULL,'Shattered Hand Zealot - Add 5'), +(1746205,5,403.79083,314.16635,1.9008716,NULL,'Shattered Hand Zealot - Add 5'), +(1746205,6,374.89954,312.64014,1.9247476,NULL,'Shattered Hand Zealot - Add 5'), +(1746205,7,359.43372,312.43814,1.9181622,2.809980154037475585,'Shattered Hand Zealot - Add 5'), +(1746206,1,496.7627,314.17264,1.9459041,NULL,'Shattered Hand Zealot - Add 6'), +(1746206,2,485.07498,314.65887,1.9463371,NULL,'Shattered Hand Zealot - Add 6'), +(1746206,3,460.7832,315.03976,1.9364105,NULL,'Shattered Hand Zealot - Add 6'), +(1746206,4,435.2396,312.74365,1.9061459,NULL,'Shattered Hand Zealot - Add 6'), +(1746206,5,403.83655,312.20764,1.9023694,NULL,'Shattered Hand Zealot - Add 6'), +(1746206,6,385.5018,309.696,1.938451,2.809980154037475585,'Shattered Hand Zealot - Add 6'), +(1746207,1,497.28668,314.52902,1.9456482,NULL,'Shattered Hand Zealot - Add 7'), +(1746207,2,484.36633,313.18347,1.9463377,NULL,'Shattered Hand Zealot - Add 7'), +(1746207,3,459.75717,313.03488,1.9374542,NULL,'Shattered Hand Zealot - Add 7'), +(1746207,4,439.54303,312.2451,1.8873941,NULL,'Shattered Hand Zealot - Add 7'), +(1746207,5,420.8947,309.70868,1.9430903,2.809980154037475585,'Shattered Hand Zealot - Add 7'), +(1746208,1,497.14935,314.8804,1.9457157,NULL,'Shattered Hand Zealot - Add 8'), +(1746208,2,485.2548,314.55142,1.946337,NULL,'Shattered Hand Zealot - Add 8'), +(1746208,3,469.40604,311.16257,1.9173245,NULL,'Shattered Hand Zealot - Add 8'), +(1746208,4,460.55313,309.96686,1.936643,2.809980154037475585,'Shattered Hand Zealot - Add 8'); + +DELETE FROM `spell_target_position` WHERE `ID` = 30976; +INSERT INTO `spell_target_position` (`ID`, `MapID`, `PositionX`, `PositionY`, `PositionZ`, `VerifiedBuild`) VALUES +(30976, 540, 520.062, 255.486, 2.0333333, 48999); + +-- SmartAI for spell +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17462) 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`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17462, 0, 1, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1746200, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Just Summoned - Start Waypoint'), +(17462, 0, 2, 0, 58, 0, 100, 0, 0, 1746200, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Waypoint Finished - Set In Combat With Zone'); + +-- SmartAI for pre-spawns +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` IN (-(@CGUID+1),-(@CGUID+2),-(@CGUID+3),-(@CGUID+4),-(@CGUID+5),-(@CGUID+6),-(@CGUID+7),-(@CGUID+8))); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(-(@CGUID+1), 0, 1000, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Respawn - Disable'), +(-(@CGUID+1), 0, 1001, 1002, 38, 0, 100, 0, 1, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Data Set 1 1 - Enable'), +(-(@CGUID+1), 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1746201, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Linked - Start Waypoint'), +(-(@CGUID+1), 0, 1003, 0, 58, 0, 100, 0, 0, 1746201, 0, 0, 0, 80, 1746200, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Waypoint Finished - Run Script'), +(-(@CGUID+2), 0, 1000, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Respawn - Disable'), +(-(@CGUID+2), 0, 1001, 1002, 38, 0, 100, 0, 1, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Data Set 1 1 - Enable'), +(-(@CGUID+2), 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1746202, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Linked - Start Waypoint'), +(-(@CGUID+2), 0, 1003, 0, 58, 0, 100, 0, 0, 1746202, 0, 0, 0, 80, 1746200, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Waypoint Finished - Run Script'), +(-(@CGUID+3), 0, 1000, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Respawn - Disable'), +(-(@CGUID+3), 0, 1001, 1002, 38, 0, 100, 0, 1, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Data Set 1 1 - Enable'), +(-(@CGUID+3), 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1746203, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Linked - Start Waypoint'), +(-(@CGUID+3), 0, 1003, 0, 58, 0, 100, 0, 0, 1746203, 0, 0, 0, 80, 1746200, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Waypoint Finished - Run Script'), +(-(@CGUID+4), 0, 1000, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Respawn - Disable'), +(-(@CGUID+4), 0, 1001, 1002, 38, 0, 100, 0, 1, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Data Set 1 1 - Enable'), +(-(@CGUID+4), 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1746204, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Linked - Start Waypoint'), +(-(@CGUID+4), 0, 1003, 0, 58, 0, 100, 0, 0, 1746204, 0, 0, 0, 80, 1746200, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Waypoint Finished - Run Script'), +(-(@CGUID+5), 0, 1000, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Respawn - Disable'), +(-(@CGUID+5), 0, 1001, 1002, 38, 0, 100, 0, 1, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Data Set 1 1 - Enable'), +(-(@CGUID+5), 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1746205, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Linked - Start Waypoint'), +(-(@CGUID+5), 0, 1003, 0, 58, 0, 100, 0, 0, 1746205, 0, 0, 0, 80, 1746201, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Waypoint Finished - Run Script'), +(-(@CGUID+6), 0, 1000, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Respawn - Disable'), +(-(@CGUID+6), 0, 1001, 1002, 38, 0, 100, 0, 1, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Data Set 1 1 - Enable'), +(-(@CGUID+6), 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1746206, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Linked - Start Waypoint'), +(-(@CGUID+6), 0, 1003, 0, 58, 0, 100, 0, 0, 1746206, 0, 0, 0, 80, 1746201, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Waypoint Finished - Run Script'), +(-(@CGUID+7), 0, 1000, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Respawn - Disable'), +(-(@CGUID+7), 0, 1001, 1002, 38, 0, 100, 0, 1, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Data Set 1 1 - Enable'), +(-(@CGUID+7), 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1746207, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Linked - Start Waypoint'), +(-(@CGUID+7), 0, 1003, 0, 58, 0, 100, 0, 0, 1746207, 0, 0, 0, 80, 1746201, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Waypoint Finished - Run Script'), +(-(@CGUID+8), 0, 1000, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Respawn - Disable'), +(-(@CGUID+8), 0, 1001, 1002, 38, 0, 100, 0, 1, 1, 0, 0, 0, 226, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Data Set 1 1 - Enable'), +(-(@CGUID+8), 0, 1002, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1746208, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Linked - Start Waypoint'), +(-(@CGUID+8), 0, 1003, 0, 58, 0, 100, 0, 0, 1746208, 0, 0, 0, 80, 1746201, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - On Waypoint Finished - Run Script'); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` IN (1746200, 1746201)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(1746200, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 3.351032257080078, 'Shattered Hand Zealot - Actionlist - Set Orientation 3.351032257080078'), +(1746200, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Actionlist - Set Sheath Melee'), +(1746200, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 17, 333, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Actionlist - Set Emote State 333'), +(1746201, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 2.809980154037475585, 'Shattered Hand Zealot - Actionlist - Set Orientation 2.809980154037475585'), +(1746201, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 40, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Actionlist - Set Sheath Melee'), +(1746201, 9, 2, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 17, 333, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Shattered Hand Zealot - Actionlist - Set Emote State 333'); + +/* + Kargath Bladefist +*/ +DELETE FROM `waypoints` WHERE `entry`=1680800; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `point_comment`) VALUES +(1680800,1,312.5911,-84.185234,1.9369955,NULL,'Warchief Kargath Bladefist Add'), +(1680800,2,301.18335,-83.94184,1.9370385,NULL,'Warchief Kargath Bladefist Add'), +(1680800,3,289.016,-83.993065,1.9304622,NULL,'Warchief Kargath Bladefist Add'), +(1680800,4,279.15543,-84.08081,2.1895409,NULL,'Warchief Kargath Bladefist Add'), +(1680800,5,274.1177,-84.06761,2.3095043,NULL,'Warchief Kargath Bladefist Add'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17621) AND (`source_type` = 0) AND (`id` IN (3, 4)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17621, 0, 3, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1680800, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Heathen Guard - On Just Summoned - Start Waypoint'), +(17621, 0, 4, 0, 58, 0, 100, 0, 0, 1680800, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Heathen Guard - On Waypoint Finished - Set In Combat With Zone'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17622) AND (`source_type` = 0) AND (`id` IN (4, 5)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17622, 0, 4, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1680800, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sharpshooter Guard - On Just Summoned - Start Waypoint'), +(17622, 0, 5, 0, 58, 0, 100, 0, 0, 1680800, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sharpshooter Guard - On Waypoint Finished - Set In Combat With Zone'); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17623) AND (`source_type` = 0) AND (`id` IN (4, 5)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17623, 0, 4, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 53, 1, 1680800, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Reaver Guard - On Just Summoned - Start Waypoint'), +(17623, 0, 5, 0, 58, 0, 100, 0, 0, 1680800, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Reaver Guard - On Waypoint Finished - Set In Combat With Zone'); + +UPDATE `creature_template` SET `flags_extra` = `flags_extra`|33554432 WHERE (`entry` IN (17621, 17622, 17623, 20569, 20578, 20575)); + +UPDATE `creature_template_addon` SET `bytes2` = 1 WHERE (`entry` IN (17621, 20569, 17623, 20575)); +UPDATE `creature_template_addon` SET `bytes2` = 2 WHERE (`entry` IN (17622, 20578)); diff --git a/data/sql/updates/db_world/2023_05_21_01.sql b/data/sql/updates/db_world/2023_05_21_01.sql new file mode 100644 index 000000000..c083fbc57 --- /dev/null +++ b/data/sql/updates/db_world/2023_05_21_01.sql @@ -0,0 +1,45 @@ +-- DB update 2023_05_21_00 -> 2023_05_21_01 +-- +SET @NPC := 151089 * 10; +DELETE FROM `waypoint_data` WHERE `id` = @NPC; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`) VALUES +(@NPC, 1, 184.78966, 290.3699, -8.18139, 0), +(@NPC, 2, 178.51125, 287.97794, -8.183065, 0), +(@NPC, 3, 171.82281, 289.97687, -8.185595, 0), +(@NPC, 4, 178.51125, 287.97794, -8.183065, 0); + +UPDATE `creature` SET `MovementType` = 2 WHERE `ID1` IN (16807, 20568); + +DELETE FROM `creature_template_addon` WHERE `entry` IN (16807, 20568); +INSERT INTO `creature_template_addon` (`entry`, `path_id`) VALUES +(16807, @NPC), +(20568, @NPC); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17083) AND (`source_type` = 0) AND (`id` IN (1, 2, 3)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(17083, 0, 2, 0, 4, 0, 100, 512, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 19, 16807, 50, 0, 0, 0, 0, 0, 0, 'Fel Orc Convert - On Aggro - Set Data 1 1'), +(17083, 0, 3, 0, 6, 0, 100, 512, 0, 0, 0, 0, 0, 45, 1, 2, 0, 0, 0, 0, 19, 16807, 50, 0, 0, 0, 0, 0, 0, 'Fel Orc Convert - On Just Died - Set Data 1 2'); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceGroup` = 3) AND (`SourceEntry` = 17083) AND (`SourceId` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 3, 17083, 0, 0, 31, 0, 4, 0, 0, 0, 0, 0, '', 'Only play SAI Event if Invoker is a Player'); + +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_tsh_shadow_sear'; + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 3) AND (`SourceEntry` = 30741); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 3, 30741, 0, 0, 31, 0, 3, 17083, 151090, 0, 0, 0, '', 'Death Coil (30741) can only target Fel Orc Convert (17083) of specific guids'), +(13, 3, 30741, 0, 1, 31, 0, 3, 17083, 151091, 0, 0, 0, '', 'Death Coil (30741) can only target Fel Orc Convert (17083) of specific guids'), +(13, 3, 30741, 0, 2, 31, 0, 3, 17083, 151092, 0, 0, 0, '', 'Death Coil (30741) can only target Fel Orc Convert (17083) of specific guids'), +(13, 3, 30741, 0, 3, 31, 0, 3, 17083, 151093, 0, 0, 0, '', 'Death Coil (30741) can only target Fel Orc Convert (17083) of specific guids'); + +DELETE FROM `spell_script_names` WHERE `spell_id` = 30745; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(30745, 'spell_target_fissures'); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 3) AND (`SourceEntry` = 30745); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 30745, 0, 0, 31, 0, 3, 17083, 151090, 0, 0, 0, '', 'Target Fissures (30745) can only target Fel Orc Convert (17083) of specific guids'), +(13, 1, 30745, 0, 1, 31, 0, 3, 17083, 151091, 0, 0, 0, '', 'Target Fissures (30745) can only target Fel Orc Convert (17083) of specific guids'), +(13, 1, 30745, 0, 2, 31, 0, 3, 17083, 151092, 0, 0, 0, '', 'Target Fissures (30745) can only target Fel Orc Convert (17083) of specific guids'), +(13, 1, 30745, 0, 3, 31, 0, 3, 17083, 151093, 0, 0, 0, '', 'Target Fissures (30745) can only target Fel Orc Convert (17083) of specific guids'); diff --git a/data/sql/updates/db_world/2023_05_21_02.sql b/data/sql/updates/db_world/2023_05_21_02.sql new file mode 100644 index 000000000..f08ba22fe --- /dev/null +++ b/data/sql/updates/db_world/2023_05_21_02.sql @@ -0,0 +1,49 @@ +-- DB update 2023_05_21_01 -> 2023_05_21_02 +-- +UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` IN (19523, 19524); + +DELETE FROM `creature_template_movement` WHERE (`CreatureId` IN (19523, 19524)); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(19523, 0, 0, 1, 1, 0, 0, 0), +(19524, 0, 0, 1, 1, 0, 0, 0); + +DELETE FROM `creature_text` WHERE `CreatureID` IN (16809, 19523, 19524); +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(16809, 0, 0, '%s roars!', 16, 0, 100, 0, 0, 0, 14029, 0, 'O\'mrogg Burning Maul'), + +(19523, 0, 0, 'Smash!', 14, 0, 100, 0, 0, 10306, 14046, 0, 'O\'mrogg Left Head Aggro 1'), +(19523, 1, 0, 'If you nice me let you live.', 14, 0, 100, 0, 0, 10308, 14048, 0, 'O\'mrogg Left Head Aggro 2'), +(19523, 2, 0, 'Me hungry!', 14, 0, 100, 0, 0, 10309, 16918, 0, 'O\'mrogg Left Head Aggro 3'), + +(19523, 3, 0, 'You stay here. Me go kill someone else!', 14, 0, 100, 0, 0, 10303, 16898, 0, 'O\'mrogg Left Head Beatdown'), +(19523, 3, 1, 'We kill someone else!', 14, 0, 100, 0, 0, 10302, 16895, 0, 'O\'mrogg Left Head Beatdown'), +(19523, 3, 2, 'Me not like this one...', 14, 0, 100, 0, 0, 10300, 14043, 0, 'O\'mrogg Left Head Beatdown'), +(19523, 3, 3, 'We kill his friend!', 14, 0, 100, 0, 0, 10301, 14045, 0, 'O\'mrogg Left Head Beatdown'), + +(19523, 4, 0, 'Me get bored.', 14, 0, 100, 0, 0, 10305, 16902, 0, 'O\'mrogg Left Head Beatdown Reply'), +(19523, 5, 0, 'Ha ha ha.', 14, 0, 100, 0, 0, 10304, 16900, 0, 'O\'mrogg Left Head Beatdown Reply'), + +(19523, 6, 0, 'Hey...', 14, 0, 100, 0, 0, 10307, 16917, 0, 'O\'mrogg Left Head Kill Reply'), +(19523, 7, 0, 'This one die easy!', 14, 0, 100, 0, 0, 10310, 16922, 0, 'O\'mrogg Left Head Kill'), + +(19523, 8, 0, 'This all... your fault!', 14, 0, 100, 0, 0, 10311, 16924, 0, 'O\'mrogg Left Head Death'), + +(19524, 0, 0, 'Why don\'t you let me do the talking?', 14, 0, 100, 0, 0, 10317, 14047, 0, 'O\'mrogg Right Head Aggro 1'), +(19524, 1, 0, 'No, we will NOT let you live.', 14, 0, 100, 0, 0, 10318, 16916, 0, 'O\'mrogg Right Head Aggro 2'), +(19524, 2, 0, 'You\'re always hungry. That\'s why we so fat!', 14, 0, 100, 0, 0, 10319, 16919, 0, 'O\'mrogg Right Head Aggro 3'), + +(19524, 3, 0, 'What are you doing?', 14, 0, 100, 0, 0, 10315, 16901, 0, 'O\'mrogg Right Head Beatdown'), +(19524, 3, 1, 'I\'m not done yet, idiot!', 14, 0, 100, 0, 0, 10313, 16896, 0, 'O\'mrogg Right Head Beatdown'), +(19524, 3, 2, 'Hey, you numbskull!', 14, 0, 100, 0, 0, 10312, 14044, 0, 'O\'mrogg Right Head Beatdown'), + +(19524, 4, 0, 'Bored? He was almost dead!', 14, 0, 100, 0, 0, 10316, 16903, 0, 'O\'mrogg Right Head Beatdown Reply'), +(19524, 5, 0, 'That\'s not funny!', 14, 0, 100, 0, 0, 10314, 16899, 0, 'O\'mrogg Right Head Beatdown Reply'), + +(19524, 6, 0, 'I\'m tired. You kill next one!', 14, 0, 100, 0, 0, 10320, 16921, 0, 'O\'mrogg Right Head Kill'), +(19524, 7, 0, 'That\'s because I do all the hard work!', 14, 0, 100, 0, 0, 10321, 16923, 0, 'O\'mrogg Right Head Kill Reply'), + +(19524, 8, 0, 'I... hate... you.', 14, 0, 100, 0, 0, 10322, 16925, 0, 'O\'mrogg Right Head Death'); + +DELETE FROM `spell_script_names` WHERE `spell_id` = 30598 AND `ScriptName` = 'spell_burning_maul'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(30598, 'spell_burning_maul'); diff --git a/data/sql/updates/db_world/2023_05_23_00.sql b/data/sql/updates/db_world/2023_05_23_00.sql new file mode 100644 index 000000000..10e58210b --- /dev/null +++ b/data/sql/updates/db_world/2023_05_23_00.sql @@ -0,0 +1,11 @@ +-- DB update 2023_05_21_02 -> 2023_05_23_00 +-- +DELETE FROM `spell_script_names` WHERE `spell_id` = 30738 AND `ScriptName` = 'spell_blade_dance_targeting'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(30738, 'spell_blade_dance_targeting'); + +UPDATE `creature_template` SET `ScriptName` = 'npc_warchief_portal' WHERE `entry` = 17611; + +DELETE FROM `creature_text` WHERE `CreatureID` = 16808 AND `GroupID` = 5; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(16808, 5, 0, 'Cowards! You\'ll never draw me into the shadows!', 14, 0, 100, 0, 0, 0, 18367, 0, 'kargath SAY_EVADE'); diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index ac3935a12..8f751fad4 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -2267,7 +2267,20 @@ Rate.Drop.Item.Artifact = 1 Rate.Drop.Item.Referenced = 1 Rate.Drop.Money = 1 -# RewardBonusMoney +# Rate.Drop.Item.ReferencedAmount +# Description: Multiplier for referenced loot amount. Makes many raid bosses (and others) drop additional loot. +# Default: 1 + +Rate.Drop.Item.ReferencedAmount = 1 + +# +# Rate.Drop.Item.GroupAmount +# Description: Multiplier for grouped items. Makes many dungeon bosses (and others) drop additional loot. +# Default: 1 + +Rate.Drop.Item.GroupAmount = 1 + +# Rate.RewardBonusMoney # Description: Allows to further tweak the amount of extra money rewarded by quests when the player # is at MaxPlayerLevel (this amount is specified in quest_template.RewardBonusMoney). # NOTE: the final amount will also affected by Rate.Drop.Money @@ -2331,13 +2344,6 @@ Rate.BuyValue.Item.Legendary = 1 Rate.BuyValue.Item.Artifact = 1 Rate.BuyValue.Item.Heirloom = 1 -# -# Rate.Drop.Item.ReferencedAmount -# Description: Multiplier for referenced loot amount. -# Default: 1 - -Rate.Drop.Item.ReferencedAmount = 1 - # # Rate.XP.Kill # Rate.XP.Quest diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index ffe8a03fd..e089c7c24 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -640,12 +640,12 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u me->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlags); LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CAST: Unit {} casts spell {} on target {} with castflags {}", - me->GetGUID().ToString().c_str(), e.action.cast.spell, target->GetGUID().ToString().c_str(), e.action.cast.castFlags); + me->GetGUID().ToString(), e.action.cast.spell, target->GetGUID().ToString(), e.action.cast.castFlags); } else { LOG_DEBUG("scripts.ai", "Spell {} not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target {} already has the aura", - e.action.cast.spell, target->GetGUID().ToString().c_str()); + e.action.cast.spell, target->GetGUID().ToString()); } } break; @@ -729,12 +729,12 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u tempLastInvoker->CastSpell(target->ToUnit(), e.action.cast.spell, triggerFlags); LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_INVOKER_CAST: Invoker {} casts spell {} on target {} with castflags {}", - tempLastInvoker->GetGUID().ToString().c_str(), e.action.cast.spell, target->GetGUID().ToString().c_str(), e.action.cast.castFlags); + tempLastInvoker->GetGUID().ToString(), e.action.cast.spell, target->GetGUID().ToString(), e.action.cast.castFlags); } else { LOG_DEBUG("scripts.ai", "Spell {} not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target {} already has the aura", - e.action.cast.spell, target->GetGUID().ToString().c_str()); + e.action.cast.spell, target->GetGUID().ToString()); } } break; @@ -2797,6 +2797,18 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } break; } + case SMART_ACTION_DISABLE: + { + for (WorldObject* target : targets) + { + if (IsUnit(target)) + { + target->ToUnit()->SetImmuneToAll(!e.action.disable.state); + target->ToUnit()->SetVisible(e.action.disable.state); + } + } + break; + } default: LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry {} SourceType {}, Event {}, Unhandled Action type {}", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 26d52bb23..eede4981d 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -762,6 +762,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e) case SMART_ACTION_LOAD_GRID: return NO_PARAMS; case SMART_ACTION_MUSIC: return sizeof(SmartAction::music); case SMART_ACTION_SET_GUID: return sizeof(SmartAction::setGuid); + case SMART_ACTION_DISABLE: return sizeof(SmartAction::disable); default: LOG_WARN("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} is using an action with no unused params specified in SmartAIMgr::CheckUnusedActionParams(), please report this.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); @@ -1918,6 +1919,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_ATTACK_STOP: case SMART_ACTION_PLAY_CINEMATIC: case SMART_ACTION_SET_GUID: + case SMART_ACTION_DISABLE: break; default: LOG_ERROR("sql.sql", "SmartAIMgr: Not handled action_type({}), event_type({}), Entry {} SourceType {} Event {}, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 88d82027e..51fa2ea4a 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -693,8 +693,9 @@ enum SMART_ACTION SMART_ACTION_DO_ACTION = 223, // ActionId SMART_ACTION_ATTACK_STOP = 224, // SMART_ACTION_SET_GUID = 225, // Sends the invoker's or the base object's own ObjectGuid to target + SMART_ACTION_DISABLE = 226, // Disable the targeted creatures, setting them Invisible and Immune to All - SMART_ACTION_AC_END = 226, // placeholder + SMART_ACTION_AC_END = 227, // placeholder }; enum class SmartActionSummonCreatureFlags @@ -1365,6 +1366,11 @@ struct SmartAction SAIBool invokerGUID; uint32 index; } setGuid; + + struct + { + SAIBool state; + } disable; //! Note for any new future actions //! All parameters must have type uint32 diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 4b2e18d08..111f6a091 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -2683,7 +2683,7 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData() if (dataType != ACHIEVEMENT_CRITERIA_DATA_TYPE_SCRIPT) LOG_ERROR("sql.sql", "Table `achievement_criteria_data` has ScriptName set for non-scripted data type (Entry: {}, type {}), useless data.", criteria_id, dataType); else - scriptId = sObjectMgr->GetScriptId(scriptName.c_str()); + scriptId = sObjectMgr->GetScriptId(scriptName); } AchievementCriteriaData data(dataType, fields[2].Get(), fields[3].Get(), scriptId); diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp index b59515570..6f2c14b46 100644 --- a/src/server/game/Calendar/CalendarMgr.cpp +++ b/src/server/game/Calendar/CalendarMgr.cpp @@ -459,7 +459,7 @@ uint32 CalendarMgr::GetPlayerNumPending(ObjectGuid guid) std::string CalendarEvent::BuildCalendarMailSubject(ObjectGuid remover) const { std::ostringstream strm; - strm << remover.ToString().c_str() << ':' << _title; + strm << remover.ToString() << ':' << _title; return strm.str(); } diff --git a/src/server/game/DataStores/M2Stores.cpp b/src/server/game/DataStores/M2Stores.cpp index da56f1ff3..16a7c9fa5 100644 --- a/src/server/game/DataStores/M2Stores.cpp +++ b/src/server/game/DataStores/M2Stores.cpp @@ -206,7 +206,7 @@ void LoadM2Cameras(std::string const& dataPath) // Reject if not at least the size of the header if (static_cast(fileSize) < sizeof(M2Header)) { - LOG_ERROR("server.loading", "Camera file {} is damaged. File is smaller than header size", filename.string().c_str()); + LOG_ERROR("server.loading", "Camera file {} is damaged. File is smaller than header size", filename.string()); m2file.close(); continue; } @@ -220,7 +220,7 @@ void LoadM2Cameras(std::string const& dataPath) // Check file has correct magic (MD20) if (strcmp(fileCheck, "MD20")) { - LOG_ERROR("server.loading", "Camera file {} is damaged. File identifier not found", filename.string().c_str()); + LOG_ERROR("server.loading", "Camera file {} is damaged. File identifier not found", filename.string()); m2file.close(); continue; } @@ -240,14 +240,14 @@ void LoadM2Cameras(std::string const& dataPath) if (header->ofsCameras + sizeof(M2Camera) > static_cast(fileSize)) { - LOG_ERROR("server.loading", "Camera file {} is damaged. Camera references position beyond file end", filename.string().c_str()); + LOG_ERROR("server.loading", "Camera file {} is damaged. Camera references position beyond file end", filename.string()); continue; } // Get camera(s) - Main header, then dump them. M2Camera const* cam = reinterpret_cast(buffer.data() + header->ofsCameras); if (!readCamera(cam, fileSize, header, dbcentry)) - LOG_ERROR("server.loading", "Camera file {} is damaged. Camera references position beyond file end", filename.string().c_str()); + LOG_ERROR("server.loading", "Camera file {} is damaged. Camera references position beyond file end", filename.string()); } LOG_INFO("server.loading", ">> Loaded {} Cinematic Waypoint Sets in {} ms", (uint32)sFlyByCameraStore.size(), GetMSTimeDiffToNow(oldMSTime)); diff --git a/src/server/game/DungeonFinding/LFG.h b/src/server/game/DungeonFinding/LFG.h index 3e542ccc1..810ca2f30 100644 --- a/src/server/game/DungeonFinding/LFG.h +++ b/src/server/game/DungeonFinding/LFG.h @@ -484,7 +484,7 @@ namespace lfg [[nodiscard]] std::string toString() const // for debugging { std::ostringstream o; - o << guids[0].ToString().c_str() << "," << guids[1].ToString().c_str() << "," << guids[2].ToString().c_str() << "," << guids[3].ToString().c_str() << "," << guids[4].ToString().c_str() << ":" << (roles ? 1 : 0); + o << guids[0].ToString() << "," << guids[1].ToString() << "," << guids[2].ToString() << "," << guids[3].ToString() << "," << guids[4].ToString() << ":" << (roles ? 1 : 0); return o.str(); } }; diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index d9ebd3c26..01b8fb146 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1124,11 +1124,11 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) SetModifierValue(UNIT_MOD_MANA, BASE_VALUE, GetCreateMana()); // xinef: added some multipliers so debuffs can affect pets in any way... - SetCreateStat(STAT_STRENGTH, 22 + 2 * petlevel); - SetCreateStat(STAT_AGILITY, 22 + 1.5f * petlevel); - SetCreateStat(STAT_STAMINA, 25 + 2 * petlevel); - SetCreateStat(STAT_INTELLECT, 28 + 2 * petlevel); - SetCreateStat(STAT_SPIRIT, 27 + 1.5f * petlevel); + SetCreateStat(STAT_STRENGTH, 22); + SetCreateStat(STAT_AGILITY, 22); + SetCreateStat(STAT_STAMINA, 25); + SetCreateStat(STAT_INTELLECT, 28); + SetCreateStat(STAT_SPIRIT, 27); } switch (petType) @@ -1348,6 +1348,14 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4))); break; } + case NPC_VENOMOUS_SNAKE: + SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 0.7 - 38)); + SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 0.8 - 40)); + break; + case NPC_VIPER: + SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(1.3 * petlevel - 64)); + SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(1.5 * petlevel - 68)); + break; case NPC_GENERIC_IMP: case NPC_GENERIC_VOIDWALKER: { diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h index 1b739c1b3..22849c217 100644 --- a/src/server/game/Entities/Pet/PetDefines.h +++ b/src/server/game/Entities/Pet/PetDefines.h @@ -122,6 +122,10 @@ enum NPCEntries NPC_ARMY_OF_THE_DEAD = 24207, NPC_EBON_GARGOYLE = 27829, + // Hunter + NPC_VENOMOUS_SNAKE = 19833, + NPC_VIPER = 19921, + // Generic NPC_GENERIC_IMP = 12922, NPC_GENERIC_VOIDWALKER = 8996 diff --git a/src/server/game/Entities/Player/KillRewarder.cpp b/src/server/game/Entities/Player/KillRewarder.cpp index 7ea1c821d..e73930602 100644 --- a/src/server/game/Entities/Player/KillRewarder.cpp +++ b/src/server/game/Entities/Player/KillRewarder.cpp @@ -166,6 +166,7 @@ void KillRewarder::_RewardXP(Player* player, float rate) AddPct(xp, (*i)->GetAmount()); // 4.2.3. Give XP to player. + sScriptMgr->OnGivePlayerXP(player, xp, _victim, PlayerXPSource::XPSOURCE_KILL); player->GiveXP(xp, _victim, _groupRate); if (Pet* pet = player->GetPet()) // 4.2.4. If player has pet, reward pet with XP (100% for single player, 50% for group case). diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index c1dba76dd..240c3a557 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2372,8 +2372,6 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate, bool isLFGReward) uint8 level = GetLevel(); - sScriptMgr->OnGivePlayerXP(this, xp, victim); - // Favored experience increase START uint32 zone = GetZoneId(); float favored_exp_mult = 0; @@ -5147,7 +5145,7 @@ float Player::OCTRegenHPPerSpirit() if (baseSpirit > 50) baseSpirit = 50; float moreSpirit = spirit - baseSpirit; - float regen = baseSpirit * baseRatio->ratio + moreSpirit * moreRatio->ratio; + float regen = (baseSpirit * baseRatio->ratio + moreSpirit * moreRatio->ratio) * 2; return regen; } @@ -5732,6 +5730,7 @@ void Player::CheckAreaExploreAndOutdoor() XP = uint32(sObjectMgr->GetBaseXP(areaEntry->area_level) * sWorld->getRate(RATE_XP_EXPLORE)); } + sScriptMgr->OnGivePlayerXP(this, XP, nullptr, PlayerXPSource::XPSOURCE_EXPLORE); GiveXP(XP, nullptr); SendExplorationExperience(areaId, XP); } @@ -6121,7 +6120,11 @@ bool Player::RewardHonor(Unit* uVictim, uint32 groupsize, int32 honor, bool awar bg->UpdatePlayerScore(this, SCORE_BONUS_HONOR, honor, false); //false: prevent looping // Xinef: Only for BG activities if (!uVictim) - GiveXP(uint32(honor * (3 + GetLevel() * 0.30f)), nullptr); + { + uint32 xp = uint32(honor * (3 + GetLevel() * 0.30f)); + sScriptMgr->OnGivePlayerXP(this, xp, nullptr, PlayerXPSource::XPSOURCE_BATTLEGROUND); + GiveXP(xp, nullptr); + } } if (sWorld->getBoolConfig(CONFIG_PVP_TOKEN_ENABLE)) @@ -7074,7 +7077,8 @@ void Player::ApplyEquipSpell(SpellInfo const* spellInfo, Item* item, bool apply, LOG_DEBUG("entities.player", "WORLD: cast {} Equip spellId - {}", (item ? "item" : "itemset"), spellInfo->Id); - CastSpell(this, spellInfo, true, item); + //Ignore spellInfo->DurationEntry, cast with -1 duration + CastCustomSpell(spellInfo->Id, SPELLVALUE_AURA_DURATION, -1, this, true, item); } else { diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1befd925e..046645578 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -995,6 +995,16 @@ enum PlayerCommandStates CHEAT_WATERWALK = 0x10 }; +// Used for OnGiveXP PlayerScript hook +enum PlayerXPSource +{ + XPSOURCE_KILL = 0, + XPSOURCE_QUEST = 1, + XPSOURCE_QUEST_DF = 2, + XPSOURCE_EXPLORE = 3, + XPSOURCE_BATTLEGROUND = 4 +}; + enum InstantFlightGossipAction { GOSSIP_ACTION_TOGGLE_INSTANT_FLIGHT = 500 diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index 238bced9e..2d12cecc8 100644 --- a/src/server/game/Entities/Player/PlayerQuest.cpp +++ b/src/server/game/Entities/Player/PlayerQuest.cpp @@ -756,6 +756,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, } else { + sScriptMgr->OnGivePlayerXP(this, XP, nullptr, isLFGReward ? PlayerXPSource::XPSOURCE_QUEST_DF : PlayerXPSource::XPSOURCE_QUEST); GiveXP(XP, nullptr, isLFGReward); } diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index a943b590e..4b5336cfb 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -6978,7 +6978,7 @@ bool Player::CheckInstanceLoginValid() if (GetMap()->IsRaid()) { // cannot be in raid instance without a group - if (!GetGroup()) + if (!GetGroup() && !sWorld->getBoolConfig(CONFIG_INSTANCE_IGNORE_RAID)) return false; } else diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c4f1d7025..f961fb457 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -812,14 +812,8 @@ void Unit::DealDamageMods(Unit const* victim, uint32& damage, uint32* absorb) } } -uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss, bool /*allowGM*/, Spell const* damageSpell /*= nullptr*/, bool delayed) +uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss, bool /*allowGM*/, Spell const* damageSpell /*= nullptr*/) { - if (delayed && attacker->GetTypeId() == TYPEID_PLAYER && attacker->GetGUID() != victim->GetGUID()) - { - sWorld->AddDelayedDamage(attacker, victim, damage, cleanDamage, damagetype, damageSchoolMask, spellProto, durabilityLoss); - return 0; - } - // Xinef: initialize damage done for rage calculations // Xinef: its rare to modify damage in hooks, however training dummy's sets damage to 0 uint32 rage_damage = damage + ((cleanDamage != nullptr) ? cleanDamage->absorbed_damage : 0); @@ -1460,7 +1454,7 @@ void Unit::DealSpellDamage(SpellNonMeleeDamage* damageInfo, bool durabilityLoss, // Call default DealDamage CleanDamage cleanDamage(damageInfo->cleanDamage, damageInfo->absorb, BASE_ATTACK, MELEE_HIT_NORMAL); - Unit::DealDamage(this, victim, damageInfo->damage, &cleanDamage, SPELL_DIRECT_DAMAGE, SpellSchoolMask(damageInfo->schoolMask), spellProto, durabilityLoss, false, spell, true); + Unit::DealDamage(this, victim, damageInfo->damage, &cleanDamage, SPELL_DIRECT_DAMAGE, SpellSchoolMask(damageInfo->schoolMask), spellProto, durabilityLoss, false, spell); } // @todo for melee need create structure as in @@ -10392,7 +10386,7 @@ bool Unit::Attack(Unit* victim, bool meleeAttack) creature->SendAIReaction(AI_REACTION_HOSTILE); /// @todo: Implement aggro range, detection range and assistance range templates - if (!(creature->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_DONT_CALL_ASSISTANCE)) + if (!(creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_DONT_CALL_ASSISTANCE)) { creature->CallAssistance(); } @@ -20081,6 +20075,9 @@ void Unit::_ExitVehicle(Position const* exitPosition) Unit* vehicleBase = m_vehicle->GetBase(); m_vehicle = nullptr; + if (!vehicleBase) + return; + SetControlled(false, UNIT_STATE_ROOT); // SMSG_MOVE_FORCE_UNROOT, ~MOVEMENTFLAG_ROOT Position pos; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index d3083f7cf..2081b013f 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -757,18 +757,6 @@ struct CleanDamage struct CalcDamageInfo; struct SpellNonMeleeDamage; -struct DelayedDamage -{ - Unit* attacker; - Unit* victim; - uint32 damage; - CleanDamage const* cleanDamage; - DamageEffectType damagetype; - SpellSchoolMask damageSchoolMask; - SpellInfo const* spellProto; - bool durabilityLoss; -}; - class DamageInfo { private: @@ -1571,7 +1559,7 @@ public: uint16 GetMaxSkillValueForLevel(Unit const* target = nullptr) const { return (target ? getLevelForTarget(target) : GetLevel()) * 5; } static void DealDamageMods(Unit const* victim, uint32& damage, uint32* absorb); - static uint32 DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage = nullptr, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* spellProto = nullptr, bool durabilityLoss = true, bool allowGM = false, Spell const* spell = nullptr, bool delayed = false); + static uint32 DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage = nullptr, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* spellProto = nullptr, bool durabilityLoss = true, bool allowGM = false, Spell const* spell = nullptr); static void Kill(Unit* killer, Unit* victim, bool durabilityLoss = true, WeaponAttackType attackType = BASE_ATTACK, SpellInfo const* spellProto = nullptr, Spell const* spell = nullptr); void KillSelf(bool durabilityLoss = true, WeaponAttackType attackType = BASE_ATTACK, SpellInfo const* spellProto = nullptr, Spell const* spell = nullptr) { Kill(this, this, durabilityLoss, attackType, spellProto, spell); }; static int32 DealHeal(Unit* healer, Unit* victim, uint32 addhealth); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index c40591cfd..702f71441 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2885,7 +2885,7 @@ void ObjectMgr::LoadItemTemplates() } if (itemTemplate.Material != dbcitem->Material) { - LOG_ERROR("sql.sql", "Item (Entry: {%u}}) does not have a correct material ({}), must be {}.", entry, itemTemplate.Material, dbcitem->Material); + LOG_ERROR("sql.sql", "Item (Entry: {}) does not have a correct material ({}), must be {}.", entry, itemTemplate.Material, dbcitem->Material); if (enforceDBCAttributes) itemTemplate.Material = dbcitem->Material; } @@ -2897,7 +2897,7 @@ void ObjectMgr::LoadItemTemplates() } if (itemTemplate.DisplayInfoID != dbcitem->DisplayInfoID) { - LOG_ERROR("sql.sql", "Item (Entry: {%u}}) does not have a correct display id ({}), must be {}.", entry, itemTemplate.DisplayInfoID, dbcitem->DisplayInfoID); + LOG_ERROR("sql.sql", "Item (Entry: {}) does not have a correct display id ({}), must be {}.", entry, itemTemplate.DisplayInfoID, dbcitem->DisplayInfoID); if (enforceDBCAttributes) itemTemplate.DisplayInfoID = dbcitem->DisplayInfoID; } diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp index 6b4c74b76..8ebc0fd44 100644 --- a/src/server/game/Handlers/LFGHandler.cpp +++ b/src/server/game/Handlers/LFGHandler.cpp @@ -55,7 +55,7 @@ void WorldSession::HandleLfgJoinOpcode(WorldPackets::LFG::LFGJoin& packet) if (packet.Slots.empty()) { - LOG_DEBUG("lfg", "CMSG_LFG_JOIN {} no dungeons selected", GetPlayerInfo().c_str()); + LOG_DEBUG("lfg", "CMSG_LFG_JOIN {} no dungeons selected", GetPlayerInfo()); return; } diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 765c90f8c..f4b421369 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -953,21 +953,21 @@ void WorldSession::HandlePetSpellAutocastOpcode(WorldPackets::Pet::PetSpellAutoc Creature* checkPet = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player, packet.PetGUID); if (!checkPet) { - LOG_ERROR("entities.pet", "WorldSession::HandlePetSpellAutocastOpcode: Pet {} not found.", packet.PetGUID.ToString().c_str()); + LOG_ERROR("entities.pet", "WorldSession::HandlePetSpellAutocastOpcode: Pet {} not found.", packet.PetGUID.ToString()); return; } SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(packet.SpellID); if (!spellInfo) { - LOG_ERROR("spells.pet", "WorldSession::HandlePetSpellAutocastOpcode: Unknown spell id {} used by {}.", packet.SpellID, packet.PetGUID.ToString().c_str()); + LOG_ERROR("spells.pet", "WorldSession::HandlePetSpellAutocastOpcode: Unknown spell id {} used by {}.", packet.SpellID, packet.PetGUID.ToString()); return; } if (checkPet != _player->GetGuardianPet() && checkPet != _player->GetCharm()) { LOG_ERROR("entities.pet", "WorldSession::HandlePetSpellAutocastOpcode: {} isn't pet of player {} ({}).", - packet.PetGUID.ToString().c_str(), GetPlayer()->GetName().c_str(), GetPlayer()->GetGUID().ToString().c_str()); + packet.PetGUID.ToString(), GetPlayer()->GetName(), GetPlayer()->GetGUID().ToString()); return; } diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index 7d64fed6e..94d328dfe 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -100,7 +100,7 @@ public: bool HasQuestDrop(LootTemplateMap const& store) const; // True if group includes at least 1 quest drop entry bool HasQuestDropForPlayer(Player const* player, LootTemplateMap const& store) const; // The same for active quests of the player - void Process(Loot& loot, Player const* player, LootStore const& lootstore, uint16 lootMode) const; // Rolls an item from the group (if any) and adds the item to the loot + void Process(Loot& loot, Player const* player, LootStore const& lootstore, uint16 lootMode, uint16 nonRefIterationsLeft) const; // Rolls an item from the group (if any) and adds the item to the loot float RawTotalChance() const; // Overall chance for the group (without equal chanced items) float TotalChance() const; // Overall chance for the group @@ -570,7 +570,8 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo items.reserve(MAX_NR_LOOT_ITEMS); quest_items.reserve(MAX_NR_QUEST_ITEMS); - tab->Process(*this, store, lootMode, lootOwner); // Processing is done there, callback via Loot::AddItem() + // Initial group is 0, top level set to True + tab->Process(*this, store, lootMode, lootOwner, 0, true); // Processing is done there, callback via Loot::AddItem() sScriptMgr->OnAfterLootTemplateProcess(this, tab, store, lootOwner, personal, noEmptyError, lootMode); @@ -1413,7 +1414,7 @@ void LootTemplate::LootGroup::CopyConditions(ConditionList /*conditions*/) } // Rolls an item from the group (if any takes its chance) and adds the item to the loot -void LootTemplate::LootGroup::Process(Loot& loot, Player const* player, LootStore const& store, uint16 lootMode) const +void LootTemplate::LootGroup::Process(Loot& loot, Player const* player, LootStore const& store, uint16 lootMode, uint16 nonRefIterationsLeft) const { if (LootStoreItem const* item = Roll(loot, player, store, lootMode)) { @@ -1426,7 +1427,9 @@ void LootTemplate::LootGroup::Process(Loot& loot, Player const* player, LootStor uint32 maxcount = uint32(float(item->maxcount) * sWorld->getRate(RATE_DROP_ITEM_REFERENCED_AMOUNT)); sScriptMgr->OnAfterRefCount(player, loot, rate, lootMode, const_cast(item), maxcount, store); for (uint32 loop = 0; loop < maxcount; ++loop) // Ref multiplicator - Referenced->Process(loot, store, lootMode, player, item->groupid); + // This reference needs to be processed further, but it is marked isTopLevel=false so that any groups inside + // the reference are not multiplied by Rate.Drop.Item.GroupAmount + Referenced->Process(loot, store, lootMode, player, item->groupid, false); } } else @@ -1434,6 +1437,14 @@ void LootTemplate::LootGroup::Process(Loot& loot, Player const* player, LootStor // Plain entries (not a reference, not grouped) sScriptMgr->OnBeforeDropAddItem(player, loot, rate, lootMode, const_cast(item), store); loot.AddItem(*item); // Chance is already checked, just add + + // If we still have non-ref runs to do for this group AND this item wasn't a reference, + // recursively call this function to produce more items for this group. + // However, if this is a quest item we shouldn't multiply this group. + if (nonRefIterationsLeft > 1 && !item->needs_quest) + { + this->Process(loot, player, store, lootMode, nonRefIterationsLeft-1); + } } } } @@ -1665,7 +1676,7 @@ bool LootTemplate::CopyConditions(LootItem* li, uint32 conditionLootId) const } // Rolls for every item in the template and adds the rolled items the the loot -void LootTemplate::Process(Loot& loot, LootStore const& store, uint16 lootMode, Player const* player, uint8 groupId) const +void LootTemplate::Process(Loot& loot, LootStore const& store, uint16 lootMode, Player const* player, uint8 groupId, bool isTopLevel) const { bool rate = store.IsRatesAllowed(); @@ -1677,7 +1688,15 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, uint16 lootMode, if (!Groups[groupId - 1]) return; - Groups[groupId - 1]->Process(loot, player, store, lootMode); + // Rate.Drop.Item.GroupAmount is only in effect for the top loot template level + if (isTopLevel) + { + Groups[groupId - 1]->Process(loot, player, store, lootMode, sWorld->getRate(RATE_DROP_ITEM_GROUP_AMOUNT)); + } + else + { + Groups[groupId - 1]->Process(loot, player, store, lootMode, 0); + } return; } @@ -1687,7 +1706,6 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, uint16 lootMode, LootStoreItem* item = *i; if (!(item->lootmode & lootMode)) // Do not add if mode mismatch continue; - if (!item->Roll(rate, player, loot, store)) continue; // Bad luck for the entry @@ -1700,7 +1718,8 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, uint16 lootMode, uint32 maxcount = uint32(float(item->maxcount) * sWorld->getRate(RATE_DROP_ITEM_REFERENCED_AMOUNT)); sScriptMgr->OnAfterRefCount(player, loot, rate, lootMode, item, maxcount, store); for (uint32 loop = 0; loop < maxcount; ++loop) // Ref multiplicator - Referenced->Process(loot, store, lootMode, player, item->groupid); + // we're no longer in the top level, so isTopLevel is false + Referenced->Process(loot, store, lootMode, player, item->groupid, false); } else { @@ -1713,7 +1732,17 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, uint16 lootMode, // Now processing groups for (LootGroups::const_iterator i = Groups.begin(); i != Groups.end(); ++i) if (LootGroup* group = *i) - group->Process(loot, player, store, lootMode); + { + // Rate.Drop.Item.GroupAmount is only in effect for the top loot template level + if (isTopLevel) + { + group->Process(loot, player, store, lootMode, sWorld->getRate(RATE_DROP_ITEM_GROUP_AMOUNT)); + } + else + { + group->Process(loot, player, store, lootMode, 0); + } + } } // True if template includes at least 1 quest drop entry diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index b21cfcdbd..ee785e256 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -253,7 +253,7 @@ public: // Adds an entry to the group (at loading stage) void AddEntry(LootStoreItem* item); // Rolls for every item in the template and adds the rolled items the the loot - void Process(Loot& loot, LootStore const& store, uint16 lootMode, Player const* player, uint8 groupId = 0) const; + void Process(Loot& loot, LootStore const& store, uint16 lootMode, Player const* player, uint8 groupId = 0, bool isTopLevel = true) const; void CopyConditions(ConditionList conditions); bool CopyConditions(LootItem* li, uint32 conditionLootId = 0) const; diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h index c76bd6591..8bff3ebac 100644 --- a/src/server/game/Mails/Mail.h +++ b/src/server/game/Mails/Mail.h @@ -30,7 +30,7 @@ class Item; class Object; class Player; -#define MAIL_BODY_ITEM_TEMPLATE 8383 // - plain letter, A Dusty Unsent Letter: 889 +#define MAIL_BODY_ITEM_TEMPLATE 9311 // - plain letter, A Dusty Unsent Letter: 889 #define MAX_MAIL_ITEMS 12 enum MailMessageType diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 0780866e8..f1da9bbb5 100644 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -375,7 +375,7 @@ void FlightPathMovementGenerator::DoReset(Player* player) if (currentNodeId == end) { - LOG_DEBUG("movement.flightpath", "FlightPathMovementGenerator::DoReset: trying to start a flypath from the end point. {}", player->GetGUID().ToString().c_str()); + LOG_DEBUG("movement.flightpath", "FlightPathMovementGenerator::DoReset: trying to start a flypath from the end point. {}", player->GetGUID().ToString()); return; } @@ -406,7 +406,7 @@ bool FlightPathMovementGenerator::DoUpdate(Player* player, uint32 /*diff*/) bool departureEvent = true; do { - ASSERT(i_currentNode < i_path.size(), "Point Id: {}\n{}", pointId, player->GetGUID().ToString().c_str()); + ASSERT(i_currentNode < i_path.size(), "Point Id: {}\n{}", pointId, player->GetGUID().ToString()); DoEventIfAny(player, i_path[i_currentNode], departureEvent); while (!_pointsForPathSwitch.empty() && _pointsForPathSwitch.front().PathIndex <= i_currentNode) @@ -460,7 +460,7 @@ void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry { if (uint32 eventid = departure ? node->departureEventID : node->arrivalEventID) { - LOG_DEBUG("maps.script", "Taxi {} event {} of node {} of path {} for player {}", departure ? "departure" : "arrival", eventid, node->index, node->path, player->GetName().c_str()); + LOG_DEBUG("maps.script", "Taxi {} event {} of node {} of path {} for player {}", departure ? "departure" : "arrival", eventid, node->index, node->path, player->GetName()); player->GetMap()->ScriptsStart(sEventScripts, eventid, player, player); } } diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index 1874dabef..40f86ae1a 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -113,9 +113,9 @@ inline Player* Map::_GetScriptPlayerSourceOrTarget(Object* source, Object* targe if (!player) LOG_ERROR("maps.script", "{} neither source nor target object is player (source: TypeId: {}, Entry: {}, GUID: {}; target: TypeId: {}, Entry: {}, GUID: {}), skipping.", - scriptInfo->GetDebugInfo().c_str(), - source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().ToString().c_str() : "", - target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().ToString().c_str() : ""); + scriptInfo->GetDebugInfo(), + source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().ToString() : "", + target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().ToString() : ""); } return player; } @@ -146,9 +146,9 @@ inline Creature* Map::_GetScriptCreatureSourceOrTarget(Object* source, Object* t if (!creature) LOG_ERROR("maps.script", "{} neither source nor target are creatures (source: TypeId: {}, Entry: {}, GUID: {}; target: TypeId: {}, Entry: {}, GUID: {}), skipping.", - scriptInfo->GetDebugInfo().c_str(), - source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().ToString().c_str() : "", - target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().ToString().c_str() : ""); + scriptInfo->GetDebugInfo(), + source ? source->GetTypeId() : 0, source ? source->GetEntry() : 0, source ? source->GetGUID().ToString() : "", + target ? target->GetTypeId() : 0, target ? target->GetEntry() : 0, target ? target->GetGUID().ToString() : ""); } return creature; } @@ -533,7 +533,7 @@ void Map::ScriptsProcess() else { LOG_ERROR("maps.script", "{} neither source nor target is player (source: {}; target: {}), skipping.", - step.script->GetDebugInfo().c_str(), source->GetGUID().ToString().c_str(), target->GetGUID().ToString().c_str()); + step.script->GetDebugInfo(), source->GetGUID().ToString(), target->GetGUID().ToString()); break; } } diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 3cf3c9cff..76f1b069e 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -154,11 +154,11 @@ void ScriptMgr::OnBeforeLootMoney(Player* player, Loot* loot) }); } -void ScriptMgr::OnGivePlayerXP(Player* player, uint32& amount, Unit* victim) +void ScriptMgr::OnGivePlayerXP(Player* player, uint32& amount, Unit* victim, uint8 xpSource) { ExecuteScript([&](PlayerScript* script) { - script->OnGiveXP(player, amount, victim); + script->OnGiveXP(player, amount, victim, xpSource); }); } diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index f8ec2bb53..06a8a310f 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -161,7 +161,7 @@ void ScriptMgr::CheckIfScriptsInDatabaseExist() { for (auto const& scriptName : sObjectMgr->GetScriptNames()) { - if (uint32 sid = sObjectMgr->GetScriptId(scriptName.c_str())) + if (uint32 sid = sObjectMgr->GetScriptId(scriptName)) { if (!ScriptRegistry::GetScriptById(sid) && !ScriptRegistry::GetScriptById(sid) && diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 978b4f23d..ad64a88f2 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1037,7 +1037,7 @@ public: virtual void OnBeforeLootMoney(Player* /*player*/, Loot* /*loot*/) {} // Called when a player gains XP (before anything is given) - virtual void OnGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/) { } + virtual void OnGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/, uint8 /*xpSource*/) { } // Called when a player's reputation changes (before it is actually changed) virtual bool OnReputationChange(Player* /*player*/, uint32 /*factionID*/, int32& /*standing*/, bool /*incremental*/) { return true; } @@ -2281,7 +2281,7 @@ public: /* PlayerScript */ void OnPlayerTalentsReset(Player* player, bool noCost); void OnPlayerMoneyChanged(Player* player, int32& amount); void OnBeforeLootMoney(Player* player, Loot* loot); - void OnGivePlayerXP(Player* player, uint32& amount, Unit* victim); + void OnGivePlayerXP(Player* player, uint32& amount, Unit* victim, uint8 xpSource); bool OnPlayerReputationChange(Player* player, uint32 factionID, int32& standing, bool incremental); void OnPlayerReputationRankChange(Player* player, uint32 factionID, ReputationRank newRank, ReputationRank oldRank, bool increased); void OnPlayerLearnSpell(Player* player, uint32 spellID); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index b811441bf..069b75086 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -6387,7 +6387,7 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const SpellPeriodicAuraLogInfo pInfo(this, damage, overkill, absorb, resist, 0.0f, crit); target->SendPeriodicAuraLog(&pInfo); - Unit::DealDamage(caster, target, damage, &cleanDamage, DOT, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), true, false); + Unit::DealDamage(caster, target, damage, &cleanDamage, DOT, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), true); Unit::ProcDamageAndSpell(caster, target, caster ? procAttacker : 0, procVictim, procEx, damage, BASE_ATTACK, GetSpellInfo(), nullptr, GetEffIndex(), nullptr, &dmgInfo); } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 2b3ad358c..594d5133d 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3430,19 +3430,13 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex) } case SPELLFAMILY_PALADIN: { - // Seal of Command Unleashed - if (m_spellInfo->Id == 20467) - { - spell_bonus += int32(0.08f * m_caster->GetTotalAttackPowerValue(BASE_ATTACK)); - spell_bonus += int32(0.13f * m_caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask())); - } - switch (m_spellInfo->Id) { - case 20424: // Seal of Command - case 42463: // Seal of Vengeance - case 53739: // Seal of Corruption - case 53385: // Divine Storm + case 20467: // Seal of Command Unleashed + spell_bonus += int32(0.08f * m_caster->GetTotalAttackPowerValue(BASE_ATTACK)); + spell_bonus += int32(0.13f * m_caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask())); + break; + case 53385: // Divine Storm deals normalized damage normalized = true; break; default: diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 89629a44c..84e107db8 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -2104,6 +2104,7 @@ AuraStateType SpellInfo::LoadAuraState() const case 35331: // Black Blood case 9806: // Phantom Strike case 35325: // Glowing Blood + case 35328: // Lambent Blood case 16498: // Faerie Fire case 6950: case 20656: diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index f31cd691c..e37231d02 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -213,6 +213,15 @@ 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) { @@ -4500,6 +4509,31 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->AttributesEx3 |= SPELL_ATTR3_DOT_STACKING_RULE; }); + // Absorb Life + ApplySpellFix({ 34239 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].ValueMultiplier = 1; + }); + + // Summon a Warp Rift in Void Ridge + ApplySpellFix({ 35036 }, [](SpellInfo* spellInfo) + { + spellInfo->CastTimeEntry = sSpellCastTimesStore.LookupEntry(1); // 0s + }); + + // Hit Rating (Dungeon T3 - 2P Bonus - Wastewalker, Doomplate) + ApplySpellFix({ 37608, 37610 }, [](SpellInfo* spellInfo) + { + spellInfo->DurationEntry = sSpellDurationStore.LookupEntry(0); + spellInfo->Effects[EFFECT_0].MiscValue = 224; + }); + + // Target Fissures + ApplySpellFix({ 30745 }, [](SpellInfo* spellInfo) + { + spellInfo->MaxAffectedTargets = 1; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/game/World/IWorld.cpp b/src/server/game/World/IWorld.cpp deleted file mode 100644 index c29b2729d..000000000 --- a/src/server/game/World/IWorld.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by the - * Free Software Foundation; either version 3 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#include "IWorld.h" - -class Unit; -class IWorld; - -void IWorld::AddDelayedDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss) -{ - DelayedDamage delayedDamage; - delayedDamage.attacker = attacker; - delayedDamage.victim = victim; - delayedDamage.damage = damage; - delayedDamage.cleanDamage = cleanDamage; - delayedDamage.damagetype = damagetype; - delayedDamage.damageSchoolMask = damageSchoolMask; - delayedDamage.spellProto = spellProto; - delayedDamage.durabilityLoss = durabilityLoss; - _delayedDamages.push_back(delayedDamage); -} diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 0ec2f8472..fecbc169b 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -24,17 +24,15 @@ #include "ObjectGuid.h" #include "QueryResult.h" #include "SharedDefines.h" -#include "Unit.h" #include #include #include #include #include -class IWorld; -class Player; class WorldPacket; class WorldSession; +class Player; /// Storage class for commands issued for delayed execution struct AC_GAME_API CliCommandHolder @@ -438,8 +436,8 @@ enum Rates RATE_DROP_ITEM_LEGENDARY, RATE_DROP_ITEM_ARTIFACT, RATE_DROP_ITEM_REFERENCED, - RATE_DROP_ITEM_REFERENCED_AMOUNT, + RATE_DROP_ITEM_GROUP_AMOUNT, RATE_SELLVALUE_ITEM_POOR, RATE_SELLVALUE_ITEM_NORMAL, RATE_SELLVALUE_ITEM_UNCOMMON, @@ -518,13 +516,10 @@ enum Rates class IWorld { public: - std::list _delayedDamages; - virtual ~IWorld() = default; [[nodiscard]] virtual WorldSession* FindSession(uint32 id) const = 0; [[nodiscard]] virtual WorldSession* FindOfflineSession(uint32 id) const = 0; [[nodiscard]] virtual WorldSession* FindOfflineSessionForCharacterGUID(ObjectGuid::LowType guidLow) const = 0; - virtual void AddDelayedDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss); virtual void AddSession(WorldSession* s) = 0; virtual bool KickSession(uint32 id) = 0; virtual void UpdateMaxSessionCounters() = 0; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 8019b4c0d..e1b71cdeb 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -493,7 +493,9 @@ void World::LoadConfigSettings(bool reload) _rate_values[RATE_DROP_ITEM_ARTIFACT] = sConfigMgr->GetOption("Rate.Drop.Item.Artifact", 1.0f); _rate_values[RATE_DROP_ITEM_REFERENCED] = sConfigMgr->GetOption("Rate.Drop.Item.Referenced", 1.0f); _rate_values[RATE_DROP_ITEM_REFERENCED_AMOUNT] = sConfigMgr->GetOption("Rate.Drop.Item.ReferencedAmount", 1.0f); + _rate_values[RATE_DROP_ITEM_GROUP_AMOUNT] = sConfigMgr->GetOption("Rate.Drop.Item.GroupAmount", 1.0f); _rate_values[RATE_DROP_MONEY] = sConfigMgr->GetOption("Rate.Drop.Money", 1.0f); + _rate_values[RATE_REWARD_BONUS_MONEY] = sConfigMgr->GetOption("Rate.RewardBonusMoney", 1.0f); _rate_values[RATE_XP_KILL] = sConfigMgr->GetOption("Rate.XP.Kill", 1.0f); _rate_values[RATE_XP_BG_KILL_AV] = sConfigMgr->GetOption("Rate.XP.BattlegroundKillAV", 1.0f); @@ -2065,8 +2067,6 @@ void World::SetInitialWorldSettings() _mail_expire_check_timer = GameTime::GetGameTime() + 6h; - _timers[WUPDATE_DELAYED_DAMAGES].SetInterval(400); - ///- Initialize MapMgr LOG_INFO("server.loading", "Starting Map System"); LOG_INFO("server.loading", " "); @@ -2313,12 +2313,6 @@ void World::Update(uint32 diff) { METRIC_TIMER("world_update_time", METRIC_TAG("type", "Check quest reset times")); - if (_timers[WUPDATE_DELAYED_DAMAGES].Passed()) - { - _timers[WUPDATE_DELAYED_DAMAGES].Reset(); - ProcessDelayedDamages(); - } - /// Handle daily quests reset time if (currentGameTime > _nextDailyQuestReset) { @@ -3351,24 +3345,3 @@ CliCommandHolder::~CliCommandHolder() { free(m_command); } - -void World::AddDelayedDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss) -{ - DelayedDamage delayedDamage; - delayedDamage.attacker = attacker; - delayedDamage.victim = victim; - delayedDamage.damage = damage; - delayedDamage.cleanDamage = cleanDamage; - delayedDamage.damagetype = damagetype; - delayedDamage.damageSchoolMask = damageSchoolMask; - delayedDamage.spellProto = spellProto; - delayedDamage.durabilityLoss = durabilityLoss; - _delayedDamages.push_back(delayedDamage); -} - -void World::ProcessDelayedDamages() -{ - for (auto& damage : _delayedDamages) - Unit::DealDamage(damage.attacker, damage.victim, damage.damage, damage.cleanDamage, damage.damagetype, damage.damageSchoolMask, damage.spellProto, damage.durabilityLoss); - _delayedDamages.clear(); -} diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 478dd70ef..5fa4becef 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -28,7 +28,6 @@ #include "QueryResult.h" #include "SharedDefines.h" #include "Timer.h" -#include "Unit.h" #include #include #include @@ -71,7 +70,6 @@ enum WorldTimers WUPDATE_PINGDB, WUPDATE_5_SECS, WUPDATE_WHO_LIST, - WUPDATE_DELAYED_DAMAGES, WUPDATE_COUNT }; @@ -155,8 +153,6 @@ public: World(); ~World() override; - std::list _delayedDamages; - static World* instance(); static uint32 m_worldLoopCounter; @@ -357,10 +353,6 @@ public: void RemoveOldCorpses() override; - void AddDelayedDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask, SpellInfo const* spellProto, bool durabilityLoss) override; - - void ProcessDelayedDamages(); - protected: void _UpdateGameTime(); // callback for UpdateRealmCharacters diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index 0d92d33a6..27371a4b5 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -50,8 +50,9 @@ public: break; case GO_FACTORY_DOOR: gameobject->UpdateSaveToDb(true); + // GoState (Door opened) is restored during GO creation, but we need to set LootState to prevent Lever from closing it again if (_encounters[TYPE_RHAHK_ZOR] == DONE) - gameobject->SetGoState(GO_STATE_ACTIVE); + gameobject->SetLootState(GO_ACTIVATED); break; case GO_IRON_CLAD_DOOR: gameobject->UpdateSaveToDb(true); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp index 339ce76d9..6143b32c3 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_venoxis.cpp @@ -301,7 +301,7 @@ public: void JustEngagedWith(Unit*) { - events.ScheduleEvent(EVENT_POISON, 8ms); + events.ScheduleEvent(EVENT_POISON, 8s); if (Creature* Venoxis = GetVenoxis()) { @@ -331,7 +331,7 @@ public: case EVENT_POISON: { me->CastSpell(me->GetVictim(), SPELL_POISON); - events.ScheduleEvent(EVENT_POISON, 15ms); + events.ScheduleEvent(EVENT_POISON, 15s); break; } } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 5d24f7dd8..e45dd47fd 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -26,8 +26,13 @@ enum Events EVENT_PRE_INTRO_2, EVENT_PRE_INTRO_3, + EVENT_TALK_LEADER_1, + EVENT_EMOTE_LEADER_1, + EVENT_START_INTRO, EVENT_SKIP_INTRO, + EVENT_LORALEN_MOVE_1, + EVENT_LORALEN_MOVE_2, EVENT_INTRO_A2_1, EVENT_INTRO_A2_2, @@ -51,7 +56,10 @@ enum Events EVENT_INTRO_H2_1, EVENT_INTRO_H2_2, + EVENT_INTRO_H2_2_1, EVENT_INTRO_H2_3, + EVENT_INTRO_H2_3_1, + EVENT_INTRO_H2_3_2, EVENT_INTRO_H2_4, EVENT_INTRO_H2_5, EVENT_INTRO_H2_6, @@ -65,20 +73,31 @@ enum Events EVENT_INTRO_H2_14, EVENT_INTRO_H2_15, + //BATTLE SYLVANAS X LK// + BATTLE_SYLVANAS_PART1, + EVENT_INTRO_LK_1, + EVENT_INTRO_LK_1_1, EVENT_INTRO_LK_1_2, EVENT_INTRO_LK_1_3, EVENT_INTRO_LK_2, + EVENT_INTRO_LK_2_1, EVENT_INTRO_LK_3, EVENT_INTRO_LK_4, EVENT_INTRO_LK_4_2, EVENT_INTRO_LK_4_3, EVENT_INTRO_LK_5, + EVENT_INTRO_LK_5_1, EVENT_INTRO_LK_5_2, + EVENT_INTRO_LK_5_3, EVENT_INTRO_LK_6, EVENT_INTRO_LK_7, EVENT_INTRO_LK_8, EVENT_INTRO_LK_9, + EVENT_INTRO_LK_10, + EVENT_INTRO_LK_11, + EVENT_INTRO_LK_12, + EVENT_INTRO_LK_13, EVENT_INTRO_END, EVENT_INTRO_END_SET, @@ -86,12 +105,24 @@ enum Events enum Gossips { - GOSSIP_MENU_SYLVANAS = 10950, - GOSISP_MENU_JAINA = 11031, + GOSSIP_MENU_SYLVANAS = 10950, + GOSISP_MENU_JAINA = 11031, GOSSIP_OPTION_START = 0, GOSSIP_OPTION_START_SKIP = 1, }; +Position const NpcJainaOrSylvanasEscapeRoute[] = +{ + { 5601.217285f, 2207.652832f, 731.541931f, 5.223304f }, // leave the throne room + { 5607.224375f, 2173.913330f, 731.126038f, 2.608723f }, // adjust route + { 5583.427246f, 2138.784180f, 731.150391f, 4.260901f }, // stop for talking + { 5560.281738f, 2104.025635f, 731.410889f, 4.058383f }, // attack the first icewall + { 5510.990723f, 2000.772217f, 734.716064f, 3.973213f }, // attack the second icewall + { 5452.641113f, 1905.762329f, 746.530579f, 4.118834f }, // attack the third icewall + { 5338.126953f, 1768.429810f, 767.237244f, 3.855189f }, // attack the fourth icewall + { 5259.06f, 1669.27f, 784.3008f, 0.0f }, // trap (sniffed) + { 5265.53f, 1681.6f, 784.2947f, 4.13643f } // final position (sniffed) +}; class npc_hor_leader : public CreatureScript { @@ -198,7 +229,9 @@ public: first = false; events.ScheduleEvent(EVENT_PRE_INTRO_1, 10s); events.ScheduleEvent(EVENT_PRE_INTRO_2, 11s); - events.ScheduleEvent(EVENT_PRE_INTRO_3, 17s); + events.ScheduleEvent(EVENT_EMOTE_LEADER_1, 16s); + events.ScheduleEvent(EVENT_TALK_LEADER_1, 16s); + events.ScheduleEvent(EVENT_PRE_INTRO_3, 19s); } } @@ -218,375 +251,565 @@ public: void UpdateAI(uint32 diff) override { events.Update(diff); - switch(events.ExecuteEvent()) + switch (events.ExecuteEvent()) { - case EVENT_PRE_INTRO_1: - if (pInstance) - { - me->SetVisible(true); - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) - c->SetVisible(true); - } - break; - case EVENT_PRE_INTRO_2: - if (me->GetEntry() == NPC_JAINA_PART1) - Talk(SAY_JAINA_INTRO_1); - me->GetMotionMaster()->MovePoint(0, SpawnPos); - break; - case EVENT_PRE_INTRO_3: - me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); - Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_2 : SAY_SYLVANAS_INTRO_1); - me->SetFacingTo(0.89f); - break; + case EVENT_PRE_INTRO_1: + if (pInstance) + { - case EVENT_START_INTRO: - shortver = false; - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - me->GetMotionMaster()->MovePoint(0, MoveThronePos); - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) - c->GetMotionMaster()->MovePoint(0, LoralenFollowPos); - // Begining of intro is differents between factions as the speech sequence and timers are differents. - if (me->GetEntry() == NPC_JAINA_PART1) - events.ScheduleEvent(EVENT_INTRO_A2_1, 10s); - else - events.ScheduleEvent(EVENT_INTRO_H2_2, 10s); - break; - case EVENT_SKIP_INTRO: - shortver = true; - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, (me->GetEntry() == NPC_JAINA_PART1 ? EMOTE_STATE_READY2H : EMOTE_STATE_READY1H)); - me->GetMotionMaster()->MovePoint(0, MoveThronePos); - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) - c->GetMotionMaster()->MovePoint(0, LoralenFollowPos); - events.ScheduleEvent(EVENT_INTRO_LK_1, 0ms); - break; + me->SetSheath(SHEATH_STATE_MELEE); + me->SetVisible(true); + + } + break; + case EVENT_PRE_INTRO_2: + if (me->GetEntry() == NPC_JAINA_PART1) + { + Talk(SAY_JAINA_INTRO_1); + } + me->GetMotionMaster()->MovePoint(0, SpawnPos); + break; + case EVENT_TALK_LEADER_1: + me->SetSheath(SHEATH_STATE_UNARMED); + Talk(me->GetEntry() == NPC_JAINA_PART1 ? SAY_JAINA_INTRO_2 : SAY_SYLVANAS_INTRO_1); + break; + case EVENT_EMOTE_LEADER_1: + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + break; + case EVENT_PRE_INTRO_3: + me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->SetSheath(SHEATH_STATE_MELEE); + break; + case EVENT_START_INTRO: + shortver = false; + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->GetMotionMaster()->MovePoint(0, MoveThronePos); + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->LoadEquipment(true); + pLoralen->SetVisible(true); + pLoralen->SetWalk(true); + pLoralen->GetMotionMaster()->MovePoint(0, LoralenMidleFollowPos); + + } + // Begining of intro is differents between factions as the speech sequence and timers are differents. + if (me->GetEntry() == NPC_JAINA_PART1) + { + events.ScheduleEvent(EVENT_INTRO_A2_1, 10s); + } + else + { + events.ScheduleEvent(EVENT_INTRO_H2_2, 9s); + events.ScheduleEvent(EVENT_LORALEN_MOVE_1, 24s); + events.ScheduleEvent(EVENT_LORALEN_MOVE_2, 32s); + } + break; + + case EVENT_SKIP_INTRO: + shortver = true; + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, (me->GetEntry() == NPC_JAINA_PART1 ? EMOTE_STATE_READY2H : EMOTE_STATE_READY1H)); + me->GetMotionMaster()->MovePoint(0, MoveThronePos); + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowPos); + } + events.ScheduleEvent(EVENT_INTRO_LK_1, 0ms); + break; // A2 Intro Events - case EVENT_INTRO_A2_1: - Talk(SAY_JAINA_INTRO_3); - events.ScheduleEvent(EVENT_INTRO_A2_2, 5s); - break; - case EVENT_INTRO_A2_2: - Talk(SAY_JAINA_INTRO_4); - events.ScheduleEvent(EVENT_INTRO_A2_3, 10s); - break; - case EVENT_INTRO_A2_3: - pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), true); - me->CastSpell(me, SPELL_FROSTMOURNE_SPAWN_SOUND, true); - me->CastSpell(me, SPELL_ARCANE_CAST_VISUAL, false); - events.ScheduleEvent(EVENT_INTRO_A2_4, 10s); - break; - case EVENT_INTRO_A2_4: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - { - pUther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - pUther->SetVisible(true); - if (Aura* a = pUther->AddAura(SPELL_SHADOWMOURNE_VISUAL, pUther)) - a->SetDuration(8000); - } - events.ScheduleEvent(EVENT_INTRO_A2_5, 2s); - break; - case EVENT_INTRO_A2_5: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_A2_1); + case EVENT_INTRO_A2_1: + Talk(SAY_JAINA_INTRO_3); + events.ScheduleEvent(EVENT_INTRO_A2_2, 5s); + break; + case EVENT_INTRO_A2_2: + Talk(SAY_JAINA_INTRO_4); + events.ScheduleEvent(EVENT_INTRO_A2_3, 10s); + break; + case EVENT_INTRO_A2_3: + pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), true); + me->CastSpell(me, SPELL_FROSTMOURNE_SPAWN_SOUND, true); + //me->CastSpell(me, SPELL_ARCANE_CAST_VISUAL, false);// the sniff is missing from the alliance + events.ScheduleEvent(EVENT_INTRO_A2_4, 10s); + break; + case EVENT_INTRO_A2_4: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + pUther->SetVisible(true); + if (Aura* a = pUther->AddAura(SPELL_SHADOWMOURNE_VISUAL, pUther)) + a->SetDuration(8000); + } + events.ScheduleEvent(EVENT_INTRO_A2_5, 2s); + break; + case EVENT_INTRO_A2_5: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->AI()->Talk(SAY_UTHER_INTRO_A2_1); events.ScheduleEvent(EVENT_INTRO_A2_6, 3s); - break; - case EVENT_INTRO_A2_6: - Talk(SAY_JAINA_INTRO_5); - events.ScheduleEvent(EVENT_INTRO_A2_7, 6s); - break; - case EVENT_INTRO_A2_7: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_A2_2); - events.ScheduleEvent(EVENT_INTRO_A2_8, 6500ms); - break; - case EVENT_INTRO_A2_8: - Talk(SAY_JAINA_INTRO_6); - events.ScheduleEvent(EVENT_INTRO_A2_9, 2s); - break; - case EVENT_INTRO_A2_9: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_A2_3); - events.ScheduleEvent(EVENT_INTRO_A2_10, 9s); - break; - case EVENT_INTRO_A2_10: - Talk(SAY_JAINA_INTRO_7); - events.ScheduleEvent(EVENT_INTRO_A2_11, 5s); - break; - case EVENT_INTRO_A2_11: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_A2_4); - events.ScheduleEvent(EVENT_INTRO_A2_12, 11s); - break; - case EVENT_INTRO_A2_12: - Talk(SAY_JAINA_INTRO_8); - events.ScheduleEvent(EVENT_INTRO_A2_13, 4s); - break; - case EVENT_INTRO_A2_13: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_A2_5); - events.ScheduleEvent(EVENT_INTRO_A2_14, 12s + 500ms); - break; - case EVENT_INTRO_A2_14: - Talk(SAY_JAINA_INTRO_9); - events.ScheduleEvent(EVENT_INTRO_A2_15, 10s); - break; - case EVENT_INTRO_A2_15: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_A2_6); - events.ScheduleEvent(EVENT_INTRO_A2_16, 24s); - break; - case EVENT_INTRO_A2_16: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_A2_7); - events.ScheduleEvent(EVENT_INTRO_A2_17, 4s); - break; - case EVENT_INTRO_A2_17: - Talk(SAY_JAINA_INTRO_10); - events.ScheduleEvent(EVENT_INTRO_A2_18, 2s); - break; - case EVENT_INTRO_A2_18: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - { - pUther->HandleEmoteCommand(EMOTE_ONESHOT_NO); - pUther->AI()->Talk(SAY_UTHER_INTRO_A2_8); - } - events.ScheduleEvent(EVENT_INTRO_A2_19, 11s); - break; - case EVENT_INTRO_A2_19: - Talk(SAY_JAINA_INTRO_11); - events.ScheduleEvent(EVENT_INTRO_LK_1, 2s); - break; + } + break; + case EVENT_INTRO_A2_6: + Talk(SAY_JAINA_INTRO_5); + events.ScheduleEvent(EVENT_INTRO_A2_7, 6s); + break; + case EVENT_INTRO_A2_7: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->AI()->Talk(SAY_UTHER_INTRO_A2_2); + } + events.ScheduleEvent(EVENT_INTRO_A2_8, 6500ms); + break; + case EVENT_INTRO_A2_8: + Talk(SAY_JAINA_INTRO_6); + events.ScheduleEvent(EVENT_INTRO_A2_9, 2s); + break; + case EVENT_INTRO_A2_9: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->AI()->Talk(SAY_UTHER_INTRO_A2_3); + } + events.ScheduleEvent(EVENT_INTRO_A2_10, 9s); + break; + case EVENT_INTRO_A2_10: + Talk(SAY_JAINA_INTRO_7); + events.ScheduleEvent(EVENT_INTRO_A2_11, 5s); + break; + case EVENT_INTRO_A2_11: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->AI()->Talk(SAY_UTHER_INTRO_A2_4); + } + events.ScheduleEvent(EVENT_INTRO_A2_12, 11s); + break; + case EVENT_INTRO_A2_12: + Talk(SAY_JAINA_INTRO_8); + events.ScheduleEvent(EVENT_INTRO_A2_13, 4s); + break; + case EVENT_INTRO_A2_13: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->AI()->Talk(SAY_UTHER_INTRO_A2_5); + } + events.ScheduleEvent(EVENT_INTRO_A2_14, 12s + 500ms); + break; + case EVENT_INTRO_A2_14: + Talk(SAY_JAINA_INTRO_9); + events.ScheduleEvent(EVENT_INTRO_A2_15, 10s); + break; + case EVENT_INTRO_A2_15: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->AI()->Talk(SAY_UTHER_INTRO_A2_6); + } + events.ScheduleEvent(EVENT_INTRO_A2_16, 24s); + break; + case EVENT_INTRO_A2_16: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + pUther->AI()->Talk(SAY_UTHER_INTRO_A2_7); + events.ScheduleEvent(EVENT_INTRO_A2_17, 4s); + break; + case EVENT_INTRO_A2_17: + Talk(SAY_JAINA_INTRO_10); + events.ScheduleEvent(EVENT_INTRO_A2_18, 2s); + break; + case EVENT_INTRO_A2_18: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + pUther->AI()->Talk(SAY_UTHER_INTRO_A2_8); + } + events.ScheduleEvent(EVENT_INTRO_A2_19, 11s); + break; + case EVENT_INTRO_A2_19: + Talk(SAY_JAINA_INTRO_11); + events.ScheduleEvent(EVENT_INTRO_LK_1, 2s); + break; // H2 Intro Events - case EVENT_INTRO_H2_2: - Talk(SAY_SYLVANAS_INTRO_2); - events.ScheduleEvent(EVENT_INTRO_H2_3, 6s); - break; - case EVENT_INTRO_H2_3: - Talk(SAY_SYLVANAS_INTRO_3); - pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), true); - me->CastSpell(me, SPELL_FROSTMOURNE_SPAWN_SOUND, true); - me->CastSpell(me, SPELL_ARCANE_CAST_VISUAL, false); - events.ScheduleEvent(EVENT_INTRO_H2_4, 6s); - break; - case EVENT_INTRO_H2_4: - if (Creature* pUther = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_UTHER))) + case EVENT_LORALEN_MOVE_1: + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowPos); + } + break; + + case EVENT_LORALEN_MOVE_2: + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL); + } + break; + + case EVENT_INTRO_H2_2: + me->SetSheath(SHEATH_STATE_UNARMED); + me->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION); + Talk(SAY_SYLVANAS_INTRO_2); + events.ScheduleEvent(EVENT_INTRO_H2_2_1, 7s + 500ms); + break; + + case EVENT_INTRO_H2_2_1: + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + Talk(SAY_SYLVANAS_INTRO_3); + events.ScheduleEvent(EVENT_INTRO_H2_3, 2s); + break; + + case EVENT_INTRO_H2_3: + me->CastSpell(me, SPELL_SUMMON_SOULS, false); + events.ScheduleEvent(EVENT_INTRO_H2_3_1, 5s); + break; + + case EVENT_INTRO_H2_3_1: + me->CastSpell(me, SPELL_FROSTMOURNE_SPAWN_SOUND, false); + pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), true); + events.ScheduleEvent(EVENT_INTRO_H2_3_2, 3s); + break; + + case EVENT_INTRO_H2_3_2: + me->RemoveAurasDueToSpell(SPELL_SUMMON_SOULS); + events.ScheduleEvent(EVENT_INTRO_H2_4, 2s); + break; + case EVENT_INTRO_H2_4: + if (Creature* pUther = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_UTHER))) + { + pUther->SetVisible(true); + if (Aura* a = pUther->AddAura(SPELL_SHADOWMOURNE_VISUAL, pUther)) { - pUther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - pUther->SetVisible(true); - if (Aura* a = pUther->AddAura(SPELL_SHADOWMOURNE_VISUAL, pUther)) - a->SetDuration(8000); + a->SetDuration(8000); } - events.ScheduleEvent(EVENT_INTRO_H2_5, 2s); - break; - case EVENT_INTRO_H2_5: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_H2_1); - events.ScheduleEvent(EVENT_INTRO_H2_6, 11s); - break; - case EVENT_INTRO_H2_6: - Talk(SAY_SYLVANAS_INTRO_4); - events.ScheduleEvent(EVENT_INTRO_H2_7, 3s); - break; - case EVENT_INTRO_H2_7: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_H2_2); - events.ScheduleEvent(EVENT_INTRO_H2_8, 6s); - break; - case EVENT_INTRO_H2_8: - Talk(SAY_SYLVANAS_INTRO_5); - events.ScheduleEvent(EVENT_INTRO_H2_9, 5s); - break; - case EVENT_INTRO_H2_9: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_H2_3); - events.ScheduleEvent(EVENT_INTRO_H2_10, 19s); - break; - case EVENT_INTRO_H2_10: - Talk(SAY_SYLVANAS_INTRO_6); - events.ScheduleEvent(EVENT_INTRO_H2_11, 1500ms); - break; - case EVENT_INTRO_H2_11: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_H2_4); - events.ScheduleEvent(EVENT_INTRO_H2_12, 19s + 500ms); - break; - case EVENT_INTRO_H2_12: - Talk(SAY_SYLVANAS_INTRO_7); - events.ScheduleEvent(EVENT_INTRO_H2_13, 2s); - break; - case EVENT_INTRO_H2_13: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - { - pUther->HandleEmoteCommand(EMOTE_ONESHOT_NO); - pUther->AI()->Talk(SAY_UTHER_INTRO_H2_5); - } - events.ScheduleEvent(EVENT_INTRO_H2_14, 12s); - break; - case EVENT_INTRO_H2_14: - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->AI()->Talk(SAY_UTHER_INTRO_H2_6); - events.ScheduleEvent(EVENT_INTRO_H2_15, 8s); - break; - case EVENT_INTRO_H2_15: - Talk(SAY_SYLVANAS_INTRO_8); - events.ScheduleEvent(EVENT_INTRO_LK_1, 2s); - break; + } + events.ScheduleEvent(EVENT_INTRO_H2_5, 7s); + break; + + case EVENT_INTRO_H2_5: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + pUther->AI()->Talk(SAY_UTHER_INTRO_H2_1); + } + events.ScheduleEvent(EVENT_INTRO_H2_6, 11s); + break; + case EVENT_INTRO_H2_6: + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + Talk(SAY_SYLVANAS_INTRO_4); + events.ScheduleEvent(EVENT_INTRO_H2_7, 2s + 500ms); + break; + case EVENT_INTRO_H2_7: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + pUther->AI()->Talk(SAY_UTHER_INTRO_H2_2); + } + events.ScheduleEvent(EVENT_INTRO_H2_8, 9s);// + break; + case EVENT_INTRO_H2_8: + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + Talk(SAY_SYLVANAS_INTRO_5); + events.ScheduleEvent(EVENT_INTRO_H2_9, 5s); + break; + case EVENT_INTRO_H2_9: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + pUther->AI()->Talk(SAY_UTHER_INTRO_H2_3); + } + events.ScheduleEvent(EVENT_INTRO_H2_10, 20s); + break; + case EVENT_INTRO_H2_10: + me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + Talk(SAY_SYLVANAS_INTRO_6); + events.ScheduleEvent(EVENT_INTRO_H2_11, 3s); + break; + case EVENT_INTRO_H2_11: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + pUther->AI()->Talk(SAY_UTHER_INTRO_H2_4); + } + events.ScheduleEvent(EVENT_INTRO_H2_12, 21s + 500ms); + break; + case EVENT_INTRO_H2_12: + me->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION); + Talk(SAY_SYLVANAS_INTRO_7); + events.ScheduleEvent(EVENT_INTRO_H2_13, 3s + 500ms); + break; + case EVENT_INTRO_H2_13: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + pUther->AI()->Talk(SAY_UTHER_INTRO_H2_5); + + } + events.ScheduleEvent(EVENT_INTRO_H2_14, 12s + 500ms); + break; + case EVENT_INTRO_H2_14: + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + pUther->AI()->Talk(SAY_UTHER_INTRO_H2_6); + } + events.ScheduleEvent(EVENT_INTRO_H2_15, 8s); + break; + case EVENT_INTRO_H2_15: + me->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION); + Talk(SAY_SYLVANAS_INTRO_8); + events.ScheduleEvent(EVENT_INTRO_LK_1, 2s); + break; // Remaining Intro Events common for both faction - case EVENT_INTRO_LK_1: - if (Creature* pLichKing = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_EVENT))) + case EVENT_INTRO_LK_1: + if (Creature* pLichKing = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_EVENT))) + { + + pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), true); + pLichKing->SetVisible(true); + + pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveMidlelThronePos, false); + + } + + if (!shortver) + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + if (me->GetEntry() == NPC_JAINA_PART1) + + pUther->AI()->Talk(SAY_UTHER_INTRO_A2_9); + else + pUther->AI()->Talk(SAY_UTHER_INTRO_H2_7); + + } + events.ScheduleEvent(EVENT_INTRO_LK_1_1, 9s); + events.ScheduleEvent(EVENT_INTRO_LK_1_2, 3s); + events.ScheduleEvent(EVENT_INTRO_LK_1_3, 6s); + events.ScheduleEvent(EVENT_INTRO_LK_2, 12s); + break; + + case EVENT_INTRO_LK_1_1: + if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) + { + pLichKing->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); + pLichKing->AI()->Talk(SAY_LK_INTRO_1); + } + break; + + case EVENT_INTRO_LK_1_2: + if (!shortver) + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) + { + pUther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); + pUther->SetFacingTo(0.89f); + } + break; + + case EVENT_INTRO_LK_1_3: + pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), false); + break; + + case EVENT_INTRO_LK_2: + if (!shortver) + if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) { - pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), true); pLichKing->SetVisible(true); pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos, false); } + events.ScheduleEvent(EVENT_INTRO_LK_2_1, 1s); + break; - if (!shortver) - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - { - if (me->GetEntry() == NPC_JAINA_PART1) - pUther->AI()->Talk(SAY_UTHER_INTRO_A2_9); - else - pUther->AI()->Talk(SAY_UTHER_INTRO_H2_7); - } - - events.ScheduleEvent(EVENT_INTRO_LK_1_2, 2s); - events.ScheduleEvent(EVENT_INTRO_LK_1_3, 4s); - events.ScheduleEvent(EVENT_INTRO_LK_2, 11s); - break; - - case EVENT_INTRO_LK_1_2: - if (!shortver) - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); - break; - - case EVENT_INTRO_LK_1_3: - pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), false); - break; - - case EVENT_INTRO_LK_2: - if (!shortver) - if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) - pLichKing->AI()->Talk(SAY_LK_INTRO_1); - events.ScheduleEvent(EVENT_INTRO_LK_3, 2s); - break; - - case EVENT_INTRO_LK_3: - if (!shortver) - if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) - pUther->SetVisible(false); - events.ScheduleEvent(EVENT_INTRO_LK_4, 4s); - break; - - case EVENT_INTRO_LK_4: - if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) - pLichKing->AI()->Talk(SAY_LK_INTRO_2); - events.ScheduleEvent(EVENT_INTRO_LK_4_2, 10s); - break; - - case EVENT_INTRO_LK_4_2: - if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) + case EVENT_INTRO_LK_2_1: + if (!shortver) + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) { - pLichKing->LoadEquipment(1, true); - pLichKing->SendMovementFlagUpdate(); - pLichKing->CastSpell(pLichKing, SPELL_FROSTMOURNE_EQUIP, false); - pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), false); - events.ScheduleEvent(EVENT_INTRO_LK_4_3, 1750); + pUther->SendPlaySpellVisual(SPELL_UTHER_DESPAWN); + pUther->CastSpell(pUther, SPELL_UTHER_DESPAWN, true); } - events.ScheduleEvent(EVENT_INTRO_LK_5, 6s); - break; + events.ScheduleEvent(EVENT_INTRO_LK_3, 2s); + break; - case EVENT_INTRO_LK_4_3: - if (GameObject* go = pInstance->instance->GetGameObject(pInstance->GetGuidData(GO_FROSTMOURNE))) - go->SetPhaseMask(2, true); - break; - case EVENT_INTRO_LK_5: - if (Creature* pFalric = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_FALRIC))) + case EVENT_INTRO_LK_3: + if (!shortver) + if (Creature* pUther = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_UTHER))) { - pFalric->UpdatePosition(5274.9f, 2039.2f, 709.319f, 5.4619f, true); - pFalric->StopMovingOnCurrentPos(); - pFalric->SetVisible(true); - if (pFalric->IsAlive()) - { - pFalric->GetMotionMaster()->MovePoint(0, FalricMovePos); - if (Aura* a = pFalric->AddAura(SPELL_SHADOWMOURNE_VISUAL, pFalric)) - a->SetDuration(8000); - } + pUther->SetVisible(false); } - if (Creature* pMarwyn = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_MARWYN))) + events.ScheduleEvent(EVENT_INTRO_LK_4, 6s); + break; + + case EVENT_INTRO_LK_4: + if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) + { + pLichKing->HandleEmoteCommand(EMOTE_ONESHOT_QUESTION); + pLichKing->AI()->Talk(SAY_LK_INTRO_2); + } + events.ScheduleEvent(EVENT_INTRO_LK_4_2, 10s); + break; + + case EVENT_INTRO_LK_4_2: + if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) + { + pLichKing->LoadEquipment(1, true); + pLichKing->SendMovementFlagUpdate(); + pLichKing->CastSpell(pLichKing, SPELL_FROSTMOURNE_EQUIP, false); + pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), false); + events.ScheduleEvent(EVENT_INTRO_LK_4_3, 1750); + } + events.ScheduleEvent(EVENT_INTRO_LK_5, 6s); + break; + + case EVENT_INTRO_LK_4_3: + if (GameObject* go = pInstance->instance->GetGameObject(pInstance->GetGuidData(GO_FROSTMOURNE))) + go->SetPhaseMask(2, true); + break; + case EVENT_INTRO_LK_5: + if (Creature* pFalric = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_FALRIC))) + { + pFalric->UpdatePosition(5274.9f, 2039.2f, 709.319f, 5.4619f, true); + pFalric->StopMovingOnCurrentPos(); + pFalric->SetVisible(true); + if (pFalric->IsAlive()) { - pMarwyn->UpdatePosition(5343.77f, 1973.86f, 709.319f, 2.35173f, true); - pMarwyn->StopMovingOnCurrentPos(); - pMarwyn->SetVisible(true); - if (pMarwyn->IsAlive()) - { - pMarwyn->GetMotionMaster()->MovePoint(0, MarwynMovePos); - if (Aura* a = pMarwyn->AddAura(SPELL_SHADOWMOURNE_VISUAL, pMarwyn)) - a->SetDuration(8000); - } + pFalric->GetMotionMaster()->MovePoint(0, FalricMovePos); + if (Aura* a = pFalric->AddAura(SPELL_SHADOWMOURNE_VISUAL, pFalric)) + a->SetDuration(8000); } + } + if (Creature* pMarwyn = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_MARWYN))) + { + pMarwyn->UpdatePosition(5343.77f, 1973.86f, 709.319f, 2.35173f, true); + pMarwyn->StopMovingOnCurrentPos(); + pMarwyn->SetVisible(true); + if (pMarwyn->IsAlive()) + { + pMarwyn->GetMotionMaster()->MovePoint(0, MarwynMovePos); + if (Aura* a = pMarwyn->AddAura(SPELL_SHADOWMOURNE_VISUAL, pMarwyn)) + a->SetDuration(8000); + } + } + events.ScheduleEvent(EVENT_INTRO_LK_5_1, 0s); + events.ScheduleEvent(EVENT_INTRO_LK_5_2, 7s); + events.ScheduleEvent(EVENT_INTRO_LK_5_3, 0s); + events.ScheduleEvent(EVENT_INTRO_LK_6, 11s); + break; - if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) - pLichKing->AI()->Talk(SAY_LK_INTRO_3); + case EVENT_INTRO_LK_5_1: + if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) + { + pLichKing->HandleEmoteCommand(EMOTE_ONESHOT_TALK); + pLichKing->AI()->Talk(SAY_LK_INTRO_3); + } + break; - events.ScheduleEvent(EVENT_INTRO_LK_5_2, 5s); - events.ScheduleEvent(EVENT_INTRO_LK_6, 8s); - break; + case EVENT_INTRO_LK_5_2: + if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) + { + pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false); + } + break; - case EVENT_INTRO_LK_5_2: - if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) - pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false); - break; + case EVENT_INTRO_LK_5_3: + me->SetSpeed(MOVE_RUN, 1.6); + me->SetSheath(SHEATH_STATE_MELEE); + me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_READY1H); + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->SetSheath(SHEATH_STATE_MELEE); + pLoralen->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_READY1H); + pLoralen->SetWalk(false); + pLoralen->LoadEquipment(true); + } + break; - case EVENT_INTRO_LK_6: - if (Creature* pFalric = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_FALRIC))) - pFalric->AI()->Talk(SAY_FALRIC_INTRO_1); + case EVENT_INTRO_LK_6: + if (Creature* pFalric = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_FALRIC))) + { + pFalric->HandleEmoteCommand(EMOTE_ONESHOT_BOW); + pFalric->AI()->Talk(SAY_FALRIC_INTRO_1); + } + events.ScheduleEvent(EVENT_INTRO_LK_7, 2s); + break; - events.ScheduleEvent(EVENT_INTRO_LK_7, 2s); - break; + case EVENT_INTRO_LK_7: + if (Creature* pMarwyn = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_MARWYN))) + { + pMarwyn->HandleEmoteCommand(EMOTE_ONESHOT_BOW); + pMarwyn->AI()->Talk(SAY_MARWYN_INTRO_1); + } + events.ScheduleEvent(EVENT_INTRO_LK_8, 3s); + break; - case EVENT_INTRO_LK_7: - if (Creature* pMarwyn = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_MARWYN))) - pMarwyn->AI()->Talk(SAY_MARWYN_INTRO_1); - - events.ScheduleEvent(EVENT_INTRO_LK_8, 2s); - break; - - case EVENT_INTRO_LK_8: - if (Creature* pFalric = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_FALRIC))) - pFalric->AI()->Talk(SAY_FALRIC_INTRO_2); + case EVENT_INTRO_LK_8: + if (Creature* pFalric = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_FALRIC))) + { + pFalric->AI()->Talk(SAY_FALRIC_INTRO_2); pInstance->SetData(ACTION_SHOW_TRASH, 1); - pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), true); + } + events.ScheduleEvent(EVENT_INTRO_LK_9, 6s); + break; - events.ScheduleEvent(EVENT_INTRO_LK_9, 5s); - break; - - case EVENT_INTRO_LK_9: - if (me->GetEntry() == NPC_JAINA_PART1) - Talk(SAY_JAINA_INTRO_END); - else - Talk(SAY_SYLVANAS_INTRO_END); - + case EVENT_INTRO_LK_9: + if (me->GetEntry() == NPC_JAINA_PART1) + { + Talk(SAY_JAINA_INTRO_END); + } + else + { + Talk(SAY_SYLVANAS_INTRO_END); + me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false); - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) - c->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false); - events.ScheduleEvent(EVENT_INTRO_END, 14s); + } + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk1, false); + } + events.ScheduleEvent(EVENT_INTRO_LK_10, 1s + 500ms); + break; + + case EVENT_INTRO_LK_10: + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk2, false); + + } + events.ScheduleEvent(EVENT_INTRO_LK_11, 2s); + break; + + case EVENT_INTRO_LK_11: + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk3, false); + } + events.ScheduleEvent(EVENT_INTRO_LK_12, 5s + 500ms); + break; + + case EVENT_INTRO_LK_12: + if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) + { + pLichKing->SetVisible(false); + } + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLkFinal, false); + } + events.ScheduleEvent(EVENT_INTRO_LK_13, 2s); + break; + case EVENT_INTRO_LK_13: + me->SetVisible(false); + events.ScheduleEvent(EVENT_INTRO_END, 2s +500ms); break; case EVENT_INTRO_END: pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), false); pInstance->HandleGameObject(pInstance->GetGuidData(GO_FRONT_DOOR), false); - events.ScheduleEvent(EVENT_INTRO_END_SET, 10s); + events.ScheduleEvent(EVENT_INTRO_END_SET, 3s); break; case EVENT_INTRO_END_SET: - if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) - pLichKing->SetVisible(false); - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) - c->SetVisible(false); - me->SetVisible(false); + if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) + { + pLoralen->UpdatePosition(5369.71289f, 2083.6330f, 707.695129f, 0.188739f, true); + pLoralen->StopMovingOnCurrentPos(); + pLoralen->SetVisible(true); + pLoralen->KillSelf(pLoralen); + } pInstance->SetData(DATA_INTRO, DONE); break; } @@ -1391,6 +1614,10 @@ enum eFightEvents { EVENT_EMPTY = 0, EVENT_LK_SAY_AGGRO, + EVENT_LK_BATTLE_1, + EVENT_LK_BATTLE_2, + EVENT_LK_BATTLE_3, + EVENT_LK_BATTLE_4, EVENT_JAINA_IMMOBILIZE_LK, EVENT_SYLVANAS_IMMOBILIZE_JUMP, EVENT_SYLVANAS_DARK_BINDING, @@ -1444,7 +1671,6 @@ public: events.Reset(); events.RescheduleEvent(EVENT_LK_CHECK_COMBAT, 1s); } - void DoAction(int32 a) override { if (a == ACTION_START_LK_FIGHT_REAL) @@ -1463,7 +1689,6 @@ public: } else me->RemoveAura(SPELL_REMORSELESS_WINTER); - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_SYLVANAS_PART2))) c->AI()->DoAction(ACTION_INFORM_WALL_DESTROYED); } @@ -1480,9 +1705,10 @@ public: { Talk(SAY_LK_IW_1); me->SetOrientation(4.15f); - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_ICE_WALL_TARGET))) + if (Creature* icewall = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_ICE_WALL_TARGET))) { - me->CastSpell(c, SPELL_SUMMON_ICE_WALL, false); + me->SetFacingToObject(icewall); + me->CastSpell(icewall, SPELL_SUMMON_ICE_WALL, false); events.ScheduleEvent(EVENT_LK_REMORSELESS_WINTER, 4s); } } @@ -1496,6 +1722,7 @@ public: void JustSummoned(Creature* s) override { + ++reqKillCount; if (events.GetNextEventTime(EVENT_DECREASE_REQ_COUNT_BY_100)) events.RescheduleEvent(EVENT_DECREASE_REQ_COUNT_BY_100, 10s); @@ -1583,7 +1810,7 @@ public: me->CastSpell((Unit*)nullptr, SPELL_FURY_OF_FROSTMOURNE, false); } break; - case EVENT_LK_START_FOLLOWING: /// @todo: LK Moves too fast at the begining and too slow after and the leaders (Sylvana/Jaina) should be running instead of walking. + case EVENT_LK_START_FOLLOWING: { me->SetSpeed(MOVE_RUN, 9.0f / 7.0f); Movement::PointsArray path; @@ -1703,6 +1930,7 @@ public: pInstance = me->GetInstanceScript(); if (!pInstance) me->IsAIEnabled = false; + } InstanceScript* pInstance; @@ -1714,13 +1942,16 @@ public: currentStopPoint = 0; events.Reset(); } - void DoAction(int32 actionId) override + { switch(actionId) { case ACTION_START_INTRO: events.ScheduleEvent(EVENT_LK_SAY_AGGRO, 0ms); + events.ScheduleEvent(EVENT_LK_BATTLE_1, 2s +500ms); + events.ScheduleEvent(EVENT_LK_BATTLE_2, 3s); + events.ScheduleEvent(me->GetEntry() == NPC_JAINA_PART2 ? EVENT_JAINA_IMMOBILIZE_LK : EVENT_SYLVANAS_IMMOBILIZE_JUMP, 9s); break; case ACTION_START_LK_FIGHT_REAL: events.ScheduleEvent(EVENT_START_RUN, 0ms); @@ -1741,8 +1972,11 @@ public: void MoveToNextStopPoint() { + me->SetSpeed(MOVE_RUN, me->GetCreatureTemplate()->speed_run); me->InterruptNonMeleeSpells(true); + me->SetSheath(SHEATH_STATE_MELEE); ++currentStopPoint; + me->SetWalk(false); Movement::PointsArray path; path.push_back(G3D::Vector3(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ())); for (uint8 i = WP_STOP[currentStopPoint - 1] + (currentStopPoint == 1 ? 0 : 1); i <= WP_STOP[currentStopPoint]; ++i) @@ -1762,43 +1996,72 @@ public: switch(events.ExecuteEvent()) { case EVENT_LK_SAY_AGGRO: - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) - c->AI()->Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_LK_AGGRO_ALLY : SAY_LK_AGGRO_HORDE); - events.ScheduleEvent(me->GetEntry() == NPC_JAINA_PART2 ? EVENT_JAINA_IMMOBILIZE_LK : EVENT_SYLVANAS_IMMOBILIZE_JUMP, 12s); + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + { + me->Attack(lkboss, true), + lkboss->AI()->Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_LK_AGGRO_ALLY : SAY_LK_AGGRO_HORDE); + } + break; + case EVENT_LK_BATTLE_1: + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + { + lkboss->CastSpell(lkboss, SPELL_SOUL_REAPER, false); + } + break; + case EVENT_LK_BATTLE_2: + //horda + if (Creature* leader = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_SYLVANAS_PART2))) + { + leader->CastSpell(leader, SPELL_EVASION, true); + } + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + { + lkboss->SetFacingToObject(me); + } + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + { + lkboss->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK2HTIGHT); + me->SetFacingToObject(lkboss); + } break; case EVENT_JAINA_IMMOBILIZE_LK: - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) { - c->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + lkboss->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY_SPELL_OMNI); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - me->CastSpell(c, SPELL_JAINA_ICE_PRISON, false); + me->CastSpell(lkboss, SPELL_JAINA_ICE_PRISON, false); events.ScheduleEvent(EVENT_SAY_LEAVE, 5s); } break; case EVENT_SYLVANAS_IMMOBILIZE_JUMP: - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) { - c->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->AttackStop(); + me->SetSheath(SHEATH_STATE_MELEE); + lkboss->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY_SPELL_OMNI); + lkboss->CastSpell(me, SPELL_BLIDING_RETREAT, false); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - me->KnockbackFrom(c->GetPositionX(), c->GetPositionY(), 10.0f, 3.0f); - events.ScheduleEvent(EVENT_SYLVANAS_DARK_BINDING, 1500ms); + me->KnockbackFrom(lkboss->GetPositionX(), lkboss->GetPositionY(), 34.3f, 4.0f); + events.ScheduleEvent(EVENT_SYLVANAS_DARK_BINDING, 2s +500ms); } break; case EVENT_SYLVANAS_DARK_BINDING: - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) - me->CastSpell(c, SPELL_SYLVANAS_DARK_BINDING, false); - events.ScheduleEvent(EVENT_SAY_LEAVE, 3500ms); + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + me->CastSpell(lkboss, SPELL_SYLVANAS_DARK_BINDING, false); + events.ScheduleEvent(EVENT_SAY_LEAVE, 2s); break; case EVENT_SAY_LEAVE: { Map::PlayerList const& pl = pInstance->instance->GetPlayers(); for (Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr) if (Player* p = itr->GetSource()) - p->KilledMonsterCredit(me->GetEntry()); // for quest - + p->KilledMonsterCredit(me->GetEntry()); //for quest Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_AGGRO : SAY_SYLVANA_AGGRO); + me->SetSheath(SHEATH_STATE_MELEE); + me->SetWalk(false); + me->SetSpeed(MOVE_RUN, me->GetCreatureTemplate()->speed_run); me->GetMotionMaster()->MovePoint(0, LeaderEscapePos); - events.ScheduleEvent(EVENT_ADD_GOSSIP, 8s); + events.ScheduleEvent(EVENT_ADD_GOSSIP, 7s); } break; case EVENT_ADD_GOSSIP: @@ -1811,12 +2074,12 @@ public: pInstance->SetData(ACTION_START_LK_FIGHT, 1); me->setActive(true); MoveToNextStopPoint(); - if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) { - c->setActive(true); - c->SetInCombatWithZone(); - c->RemoveAura(me->GetEntry() == NPC_JAINA_PART2 ? SPELL_JAINA_ICE_PRISON : SPELL_SYLVANAS_DARK_BINDING); - c->AI()->DoAction(ACTION_START_LK_FIGHT_REAL); + lkboss->setActive(true); + lkboss->SetInCombatWithZone(); + lkboss->RemoveAura(me->GetEntry() == NPC_JAINA_PART2 ? SPELL_JAINA_ICE_PRISON : SPELL_SYLVANAS_DARK_BINDING); + lkboss->AI()->DoAction(ACTION_START_LK_FIGHT_REAL); } } break; @@ -1855,6 +2118,7 @@ public: Talk(me->GetEntry() == NPC_JAINA_PART2 ? SAY_JAINA_ESCAPE_01 : SAY_SYLVANA_ESCAPE_01); break; } + DoMeleeAttackIfReady(); } }; }; @@ -1898,8 +2162,8 @@ public: { me->SetCorpseDelay(10); if (InstanceScript* pInstance = me->GetInstanceScript()) - if (Creature* lk = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) - lk->AI()->DoAction(ACTION_INFORM_TRASH_DIED); + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + lkboss->AI()->DoAction(ACTION_INFORM_TRASH_DIED); } }; @@ -1967,8 +2231,10 @@ public: { me->SetCorpseDelay(10); if (InstanceScript* pInstance = me->GetInstanceScript()) - if (Creature* lk = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) - lk->AI()->DoAction(ACTION_INFORM_TRASH_DIED); + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + { + lkboss->AI()->DoAction(ACTION_INFORM_TRASH_DIED); + } } }; @@ -2023,8 +2289,9 @@ public: } if (me->GetVictim() && me->isAttackReady() && me->IsWithinMeleeRange(me->GetVictim()) && !me->HasUnitState(UNIT_STATE_CASTING)) + { me->CastSpell(me->GetVictim(), 40505, false); - + } DoMeleeAttackIfReady(); } @@ -2032,8 +2299,10 @@ public: { me->SetCorpseDelay(10); if (InstanceScript* pInstance = me->GetInstanceScript()) - if (Creature* lk = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) - lk->AI()->DoAction(ACTION_INFORM_TRASH_DIED); + if (Creature* lkboss = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_LICH_KING_BOSS))) + { + lkboss->AI()->DoAction(ACTION_INFORM_TRASH_DIED); + } } }; @@ -2057,7 +2326,9 @@ public: PreventDefaultAction(); if (Unit* caster = GetCaster()) if (Creature* c = caster->SummonCreature(WORLD_TRIGGER, CannonFirePos[caster->GetEntry() == NPC_JAINA_PART2 ? 0 : 1][urand(0, 2)], TEMPSUMMON_TIMED_DESPAWN, 1)) + { c->CastSpell((Unit*)nullptr, 70021, true); + } } void Register() override diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h index 55d9de53f..ee52a31a9 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.h @@ -50,6 +50,7 @@ enum Data ACTION_STOP_LK_FIGHT, ACTION_DELETE_ICE_WALL, DATA_WAVE_NUMBER, + DATA_LK_BATTLE,// in progress }; enum Creatures @@ -84,6 +85,7 @@ enum Creatures NPC_SKY_REAVER_KORM_BLACKSKAR = 30824, NPC_ALTAR_BUNNY = 37704, NPC_QUEL_DELAR = 37158, + }; enum GameObjects @@ -263,8 +265,14 @@ enum hMisc SPELL_HOR_START_QUEST_ALLY = 71351, SPELL_HOR_START_QUEST_HORDE = 71542, SPELL_SHADOWMOURNE_VISUAL = 72523, - SPELL_ARCANE_CAST_VISUAL = 65633, + SPELL_UTHER_DESPAWN = 70693, //Sniffed SPELL_WELL_OF_SOULS_VISUAL = 72630, + SPELL_SUMMON_SOULS = 72711, //Sniffed Sylvanas + + //Battle of LK + SPELL_BLIDING_RETREAT = 70199, //Sniffed LK + SPELL_SOUL_REAPER = 69410, //Sniffed LK + SPELL_EVASION = 70190, //Sniffed Sylvanas // Frostsworn General EVENT_ACTIVATE_REFLECTIONS = 1, @@ -310,18 +318,24 @@ const uint32 allowedCompositions[8][5] = {NPC_WAVE_MERCENARY, NPC_WAVE_MAGE, NPC_WAVE_PRIEST, NPC_WAVE_FOOTMAN, NPC_WAVE_FOOTMAN} }; -const Position CenterPos = {5309.459473f, 2006.478516f, 711.595459f, 0.0f}; -const Position SpawnPos = {5262.540527f, 1949.693726f, 707.695007f, 0.808736f}; // Jaina/Sylvanas Beginning Position -const Position LoralenFollowPos = {5283.234863f, 1990.946777f, 707.695679f, 0.929097f}; -const Position MoveThronePos = {5306.952148f, 1998.499023f, 709.341431f, 1.277278f}; // Jaina/Sylvanas walks to throne -const Position UtherSpawnPos = {5308.310059f, 2003.857178f, 709.341431f, 4.650315f}; +const Position CenterPos = {5309.459473f, 2006.478516f, 711.595459f, 0.0f}; +const Position SpawnPos = {5263.22412f, 1950.95544f, 707.695862f, 0.808736f}; // Jaina/Sylvanas Beginning Position +const Position LoralenMidleFollowPos = {5274.25634f, 1976.04760f, 707.694763f, 0.929097f}; // Sniffed +const Position LoralenFollowPos = {5283.29296f, 1992.43078f, 707.694763f, 0.549238f}; // Sniffed +const Position LoralenFollowLk1 = {5292.94921f, 2008.25451f, 707.695801f, 1.047967f}; // Sniffed +const Position LoralenFollowLk2 = {5298.94335f, 2016.37097f, 707.695801f, 0.694538f}; // Sniffed +const Position LoralenFollowLk3 = {5336.94044f, 2040.21814f, 707.695801f, 0.439284f}; // Sniffed +const Position LoralenFollowLkFinal = {5361.96777f, 2065.68310f, 707.693848f, 0.831989f}; // Sniffed +const Position LoralenDeadPos = {5369.71289f, 2083.6330f, 707.695129f, 0.188739f}; // Sniffed +const Position MoveThronePos = {5306.98535f, 1998.10302f, 709.341187f, 1.277278f}; // Jaina/Sylvanas walks to throne +const Position UtherSpawnPos = {5308.310059f, 2003.857178f, 709.341431f, 4.650315f}; // Uther starting position const Position LichKingSpawnPos = {5362.917480f, 2062.307129f, 707.695374f, 3.945812f}; -const Position LichKingMoveThronePos = {5312.080566f, 2009.172119f, 709.341431f, 3.973301f}; // Lich King walks to throne -const Position LichKingMoveAwayPos = {5400.069824f, 2102.7131689f, 707.69525f, 0.843803f}; // Lich King walks away +const Position LichKingMoveMidlelThronePos = {5333.48437f, 2032.02648f, 707.695679f, 3.973301f}; // Lich King moves and hits Uther [sniff] +const Position LichKingMoveThronePos = {5312.79638f, 2010.07141f, 709.3942183f, 3.973301f}; // Lich King walks to throne [sniff] +const Position LichKingMoveAwayPos = {5400.069824f, 2102.7131689f, 707.69525f, 0.843803f}; // Lich King walks away [sniff] const Position FalricMovePos = {5284.161133f, 2030.691650f, 709.319336f, 5.489386f}; const Position MarwynMovePos = {5335.330078f, 1982.376221f, 709.319580f, 2.339942f}; -const Position SylvanasFightPos = {5557.508301f, 2263.920654f, 733.011230f, 3.624075f}; -const Position LeaderEscapePos = {5577.654785f, 2235.347412f, 733.011230f, 2.359576f}; +const Position LeaderEscapePos = {5576.80566f, 2235.55004f, 733.012268f, 2.782125f}; //Sniff const Position ShipMasterSummonPos = {5262.773926f, 1669.980103f, 715.000000f, 0.000000f}; const Position WalkCaveInPos = {5267.594238f, 1678.750000f, 784.302856f, 1.041739f}; const Position AllyPortalPos = {5205.015625f, 1605.680298f, 806.444458f, 0.884375f}; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index 437351418..62bcd08af 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -230,6 +230,7 @@ public: { case NPC_SYLVANAS_PART1: creature->SetVisible(false); + creature->SetSpeed(MOVE_RUN, 1.1); NPC_LeaderIntroGUID = creature->GetGUID(); if (TeamIdInInstance == TEAM_ALLIANCE) creature->UpdateEntry(NPC_JAINA_PART1); @@ -296,12 +297,8 @@ public: creature->SetVisible(false); if (!(EncounterMask & (1 << DATA_LK_INTRO))) { - creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK2HTIGHT); - if (TeamIdInInstance != TEAM_ALLIANCE) - { - creature->StopMoving(); - creature->SetFacingTo(creature->GetAngle(&SylvanasFightPos)); - } + creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK2HTIGHT); //the fight cannot be in the form of an emote, it is causing bugs + creature->CastSpell(creature, SPELL_SOUL_REAPER, true); } else if (!(EncounterMask & (1 << DATA_LICH_KING))) creature->AddAura(TeamIdInInstance == TEAM_ALLIANCE ? SPELL_JAINA_ICE_PRISON : SPELL_SYLVANAS_DARK_BINDING, creature); @@ -316,22 +313,20 @@ public: if (!creature->IsAlive()) creature->Respawn(); NPC_LeaderGUID = creature->GetGUID(); + creature->SetWalk(false); + creature->SetSheath(SHEATH_STATE_MELEE); if (TeamIdInInstance == TEAM_ALLIANCE) creature->UpdateEntry(NPC_JAINA_PART2); + creature->SetWalk(false); creature->SetHealth(creature->GetMaxHealth() / 20); - if (!(EncounterMask & (1 << DATA_FROSTSWORN_GENERAL))) creature->SetVisible(false); if (!(EncounterMask & (1 << DATA_LK_INTRO))) { - creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, TeamIdInInstance == TEAM_ALLIANCE ? EMOTE_ONESHOT_ATTACK2HTIGHT : EMOTE_ONESHOT_ATTACK1H); + creature->SetSheath(SHEATH_STATE_MELEE); + creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, TeamIdInInstance == TEAM_ALLIANCE ? EMOTE_ONESHOT_ATTACK2HTIGHT : EMOTE_ONESHOT_ATTACK1H); //the fight cannot be in the form of an emote, it is causing bugs. creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); creature->CastSpell(creature, TeamIdInInstance == TEAM_ALLIANCE ? SPELL_JAINA_ICE_BARRIER : SPELL_SYLVANAS_CLOAK_OF_DARKNESS, true); - if (TeamIdInInstance != TEAM_ALLIANCE) - { - creature->UpdatePosition(SylvanasFightPos, true); - creature->StopMovingOnCurrentPos(); - } } else if (!(EncounterMask & (1 << DATA_LICH_KING))) { @@ -346,6 +341,7 @@ public: creature->UpdatePosition(PathWaypoints[PATH_WP_COUNT - 1], true); creature->StopMovingOnCurrentPos(); } + creature->SetSheath(SHEATH_STATE_MELEE); creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); break; case NPC_ICE_WALL_TARGET: @@ -444,8 +440,13 @@ public: if (Creature* c = instance->GetCreature(NPC_FrostswornGeneralGUID)) { c->SetVisible(true); + c->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); c->SetReactState(REACT_AGGRESSIVE); } + if (Creature* c = instance->GetCreature(NPC_FrostswornGeneralGUID)) + { + c->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); + } WaveNumber = 0; DoUpdateWorldState(WORLD_STATE_HOR_COUNTER, 0); @@ -712,7 +713,6 @@ public: case GO_FRONT_DOOR: return GO_FrontDoorGUID; } - return ObjectGuid::Empty; } @@ -772,7 +772,6 @@ public: ++ur; } } - if (bFinished5Waves) { for (; WaveNumber < 4; ++WaveNumber) @@ -860,9 +859,7 @@ public: num_to_activate = 3; else if (WaveNumber <= 4) num_to_activate = 4; - reqKillCount += num_to_activate; - for (uint8 i = 0; i < num_to_activate; ++i) { uint32 entry = chosenComposition[WaveNumber - (WaveNumber > 5 ? 2 : 1)][i]; @@ -910,7 +907,6 @@ public: c->StopMovingOnCurrentPos(); } memset(&TrashActive, 0, sizeof(TrashActive)); - if (Creature* falric = instance->GetCreature(NPC_FalricGUID)) falric->AI()->EnterEvadeMode(); if (Creature* marwyn = instance->GetCreature(NPC_MarwynGUID)) @@ -1014,7 +1010,6 @@ public: if (Aura* a = pMarwyn->AddAura(SPELL_SHADOWMOURNE_VISUAL, pMarwyn)) a->SetDuration(8000); } - pMarwyn->AI()->Talk(EMOTE_MARWYN_INTRO_SPIRIT); } ++ResumeFirstEventStep; @@ -1035,7 +1030,6 @@ public: } } } - SetData(ACTION_SHOW_TRASH, 1); ResumeFirstEventStep = 0; ResumeFirstEventTimer = 0; @@ -1057,7 +1051,6 @@ public: else ResumeFirstEventTimer -= diff; } - if (outroStep) { if (outroTimer <= diff) @@ -1153,7 +1146,6 @@ public: if (StairsPos[index][i].GetPositionX()) if (GameObject* go = leader->SummonGameObject(TeamIdInInstance == TEAM_ALLIANCE ? GO_STAIRS_ALLIANCE : GO_STAIRS_HORDE, StairsPos[index][i].GetPositionX(), StairsPos[index][i].GetPositionY(), StairsPos[index][i].GetPositionZ(), StairsPos[index][i].GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 86400, false)) go->SetGameObjectFlag(GO_FLAG_INTERACT_COND | GO_FLAG_NOT_SELECTABLE); - //Position pos = TeamIdInInstance == TEAM_ALLIANCE ? AllyPortalPos : HordePortalPos; //leader->SummonGameObject(GO_PORTAL_TO_DALARAN, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 86400); //pos = TeamIdInInstance == TEAM_ALLIANCE ? AllyChestPos : HordeChestPos; @@ -1169,6 +1161,7 @@ public: { c->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); c->GetMotionMaster()->MovePoint(0, WalkCaveInPos); + c->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); // need gossip ID 10931 } ++outroStep; outroTimer = 6000; diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 14c20d02f..72c88e7bc 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -1184,6 +1184,36 @@ public: } }; +struct npc_violet_hold_defense_system : public ScriptedAI +{ + npc_violet_hold_defense_system(Creature* creature) : ScriptedAI(creature) { } + + void Reset() override + { + DoCast(RAND(SPELL_DEFENSE_SYSTEM_SPAWN_EFFECT, SPELL_DEFENSE_SYSTEM_VISUAL)); + events.ScheduleEvent(EVENT_ARCANE_LIGHTNING, 4s); + events.ScheduleEvent(EVENT_ARCANE_LIGHTNING_INSTAKILL, 4s); + me->DespawnOrUnsummon(7s, 0s); + } + + void UpdateAI(uint32 diff) override + { + events.Update(diff); + + switch (events.ExecuteEvent()) + { + case EVENT_ARCANE_LIGHTNING: + DoCastAOE(RAND(SPELL_ARCANE_LIGHTNING, SPELL_ARCANE_LIGHTNING_VISUAL)); + events.RepeatEvent(2000); + break; + case EVENT_ARCANE_LIGHTNING_INSTAKILL: + DoCastAOE(SPELL_ARCANE_LIGHTNING_INSTAKILL); + events.RepeatEvent(1000); + break; + } + } +}; + void AddSC_violet_hold() { new go_vh_activation_crystal(); @@ -1201,4 +1231,5 @@ void AddSC_violet_hold() new npc_azure_stalker(); new spell_destroy_door_seal(); + RegisterCreatureAI(npc_violet_hold_defense_system); } diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.h b/src/server/scripts/Northrend/VioletHold/violet_hold.h index 84d3baa14..65d0723d4 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.h +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.h @@ -98,13 +98,16 @@ enum VHWorldStates enum Spells { - SPELL_CONTROL_CRYSTAL_ACTIVATION = 57804, - SPELL_ARCANE_LIGHTNING = 57912, - SPELL_ARCANE_LIGHTNING_VISUAL = 57930, - SPELL_PORTAL_CHANNEL = 58012, - SPELL_DESTROY_DOOR_SEAL = 58040, - SPELL_CYANIGOSA_TRANSFORM = 58668, - SPELL_CYANIGOSA_BLUE_AURA = 45870, + SPELL_CONTROL_CRYSTAL_ACTIVATION = 57804, + SPELL_DEFENSE_SYSTEM_SPAWN_EFFECT = 57886, + SPELL_DEFENSE_SYSTEM_VISUAL = 57887, + SPELL_ARCANE_LIGHTNING = 57912, + SPELL_ARCANE_LIGHTNING_VISUAL = 57930, + SPELL_ARCANE_LIGHTNING_INSTAKILL = 58152, + SPELL_PORTAL_CHANNEL = 58012, + SPELL_DESTROY_DOOR_SEAL = 58040, + SPELL_CYANIGOSA_TRANSFORM = 58668, + SPELL_CYANIGOSA_BLUE_AURA = 45870 }; enum Events @@ -117,6 +120,10 @@ enum Events EVENT_SUMMON_PORTAL, EVENT_CYANIGOSSA_TRANSFORM, EVENT_CYANIGOSA_ATTACK, + + // Event defense system + EVENT_ARCANE_LIGHTNING, + EVENT_ARCANE_LIGHTNING_INSTAKILL }; enum Data diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_tavarok.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_tavarok.cpp new file mode 100644 index 000000000..ce0c30e62 --- /dev/null +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_tavarok.cpp @@ -0,0 +1,77 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "mana_tombs.h" + +enum Spells +{ + SPELL_EARTHQUAKE = 33919, + SPELL_CRYSTAL_PRISON = 32361, + SPELL_ARCING_SMASH_N = 8374, + SPELL_ARCING_SMASH_H = 38761 +}; + +struct boss_tavarok : public BossAI +{ + boss_tavarok(Creature* creature) : BossAI(creature, DATA_TAVAROK) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void Reset() override + { + _Reset(); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + + scheduler.Schedule(10s, 14200ms, [this](TaskContext context) + { + DoCastSelf(SPELL_EARTHQUAKE); + context.Repeat(20s, 31s); + }).Schedule(12s, 22s, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_CRYSTAL_PRISON); + context.Repeat(15s, 22s); + }).Schedule(5900ms, [this](TaskContext context) + { + DoCastVictim(DUNGEON_MODE(SPELL_ARCING_SMASH_N, SPELL_ARCING_SMASH_H)); + context.Repeat(8s, 12s); + }); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + } + + void KilledUnit(Unit* /*victim*/) override + { + } +}; + +void AddSC_boss_tavarok() +{ + RegisterManaTombsCreatureAI(boss_tavarok); +} \ No newline at end of file diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h b/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h index 8ed9d3ce8..5db1dc75d 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h @@ -40,4 +40,6 @@ inline AI* GetManaTombsAI(T* obj) return GetInstanceAI(obj, MTScriptName); } +#define RegisterManaTombsCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetManaTombsAI) + #endif // MANA_TOMBS_H_ diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp new file mode 100644 index 000000000..45267f342 --- /dev/null +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/boss_darkweaver_syth.cpp @@ -0,0 +1,115 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "sethekk_halls.h" + +enum Spells +{ + SPELL_FLAME_SHOCK_N = 15039, + SPELL_FLAME_SHOCK_H = 15616, + SPELL_ARCANE_SHOCK_N = 33534, + SPELL_ARCANE_SHOCK_H = 38135, + SPELL_FROST_SHOCK_N = 12548, + SPELL_FROST_SHOCK_H = 21401, + SPELL_SHADOW_SHOCK_N = 33620, + SPELL_SHADOW_SHOCK_H = 38137, + SPELL_CHAIN_LIGHTNING_N = 15659, + SPELL_CHAIN_LIGHTNING_H = 15305, + SPELL_SUMMON_ARC_ELE = 33538, + SPELL_SUMMON_FIRE_ELE = 33537, + SPELL_SUMMON_FROST_ELE = 33539, + SPELL_SUMMON_SHADOW_ELE = 33540 +}; + +enum Text +{ + SAY_SUMMON = 0, + SAY_AGGRO = 1, + SAY_SLAY = 2, + SAY_DEATH = 3 +}; + +struct boss_darkweaver_syth : public BossAI +{ + boss_darkweaver_syth(Creature* creature) : BossAI(creature, DATA_DARKWEAVER_SYTH) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void Reset() override + { + _Reset(); + + ScheduleHealthCheckEvent({90, 50, 10}, [&] { + Talk(SAY_SUMMON); + DoCastSelf(SPELL_SUMMON_ARC_ELE); + DoCastSelf(SPELL_SUMMON_FIRE_ELE); + DoCastSelf(SPELL_SUMMON_FROST_ELE); + DoCastSelf(SPELL_SUMMON_SHADOW_ELE); + }); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + Talk(SAY_AGGRO); + + scheduler.Schedule(2s, [this](TaskContext context) + { + DoCastRandomTarget(DUNGEON_MODE(SPELL_FLAME_SHOCK_N, SPELL_FLAME_SHOCK_H)); + context.Repeat(10s, 15s); + }).Schedule(4s, [this](TaskContext context) + { + DoCastRandomTarget(DUNGEON_MODE(SPELL_ARCANE_SHOCK_N, SPELL_ARCANE_SHOCK_H)); + context.Repeat(10s, 15s); + }).Schedule(6s, [this](TaskContext context) + { + DoCastRandomTarget(DUNGEON_MODE(SPELL_FROST_SHOCK_N, SPELL_FROST_SHOCK_H)); + context.Repeat(10s, 15s); + }).Schedule(8s, [this](TaskContext context) + { + DoCastRandomTarget(DUNGEON_MODE(SPELL_SHADOW_SHOCK_N, SPELL_SHADOW_SHOCK_H)); + context.Repeat(10s, 15s); + }).Schedule(15s, [this](TaskContext context) + { + DoCastRandomTarget(DUNGEON_MODE(SPELL_CHAIN_LIGHTNING_N, SPELL_CHAIN_LIGHTNING_H)); + context.Repeat(10s, 15s); + }); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + + Talk(SAY_DEATH); + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(SAY_SLAY); + } +}; + +void AddSC_boss_darkweaver_syth() +{ + RegisterSethekkHallsCreatureAI(boss_darkweaver_syth); +} \ No newline at end of file diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp index c666b1fe0..bb7769ed2 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp @@ -28,8 +28,7 @@ enum GrandmasterVorpil SAY_SLAY = 3, SAY_DEATH = 4, - SPELL_RAIN_OF_FIRE_N = 33617, - SPELL_RAIN_OF_FIRE_H = 39363, + SPELL_RAIN_OF_FIRE = 33617, SPELL_DRAW_SHADOWS = 33563, SPELL_SHADOWBOLT_VOLLEY = 33841, @@ -38,8 +37,7 @@ enum GrandmasterVorpil NPC_VOID_TRAVELER = 19226, SPELL_SACRIFICE = 33587, SPELL_SHADOW_NOVA = 33846, - SPELL_EMPOWERING_SHADOWS_N = 33783, - SPELL_EMPOWERING_SHADOWS_H = 39364, + SPELL_EMPOWERING_SHADOWS = 33783, NPC_VOID_PORTAL = 19224, SPELL_VOID_PORTAL_VISUAL = 33569, @@ -155,22 +153,17 @@ struct boss_grandmaster_vorpil : public BossAI context.Repeat(); }).Schedule(36400ms, [this](TaskContext context) { - DoCastSelf(SPELL_DRAW_SHADOWS, true); + DoCastAOE(SPELL_DRAW_SHADOWS, true); - me->GetMap()->DoForAllPlayers([&](Player* player) - { - if (player->IsAlive() && !player->HasAura(SPELL_BANISH)) - { - player->TeleportTo(me->GetMapId(), VorpilPosition[0], VorpilPosition[1], VorpilPosition[2], 0, TELE_TO_NOT_LEAVE_COMBAT); - } - }); + me->NearTeleportTo(VorpilPosition[0], VorpilPosition[1], VorpilPosition[2], 0.0f); + me->GetMotionMaster()->Clear(); scheduler.Schedule(1s, [this](TaskContext /*context*/) { - DoCastSelf(DUNGEON_MODE(SPELL_RAIN_OF_FIRE_N, SPELL_RAIN_OF_FIRE_H)); + DoCastSelf(SPELL_RAIN_OF_FIRE); + me->ResumeChasingVictim(); }); - me->NearTeleportTo(VorpilPosition[0], VorpilPosition[1], VorpilPosition[2], 0.0f); context.Repeat(36400ms, 44950ms); }).Schedule(10900ms, [this](TaskContext context) { @@ -203,52 +196,59 @@ struct npc_voidtraveler : public ScriptedAI { npc_voidtraveler(Creature* creature) : ScriptedAI(creature) {} - ObjectGuid VorpilGUID; - uint32 moveTimer; - bool sacrificed; - void Reset() override { - moveTimer = 1000; - sacrificed = false; - } + if (TempSummon* summon = me->ToTempSummon()) + { + if (Unit* vorpil = summon->GetSummonerUnit()) + { + me->GetMotionMaster()->MoveFollow(vorpil, 0.0f, 0.0f); + } + } - void SetGUID(ObjectGuid guid, int32) override - { - VorpilGUID = guid; + _scheduler.Schedule(1s, [this](TaskContext context) + { + if (TempSummon* summon = me->ToTempSummon()) + { + if (Unit* vorpil = summon->GetSummonerUnit()) + { + if (me->IsWithinMeleeRange(vorpil)) + { + DoCastSelf(SPELL_SACRIFICE); + _scheduler.Schedule(1200ms, [this](TaskContext /*context*/) + { + if (TempSummon* summon = me->ToTempSummon()) + { + if (Unit* vorpil = summon->GetSummonerUnit()) + { + DoCastAOE(SPELL_SHADOW_NOVA, true); + me->CastSpell(vorpil, SPELL_EMPOWERING_SHADOWS, true, nullptr, nullptr, vorpil->GetGUID()); + vorpil->ModifyHealth(int32(vorpil->CountPctFromMaxHealth(4))); + } + } + + _scheduler.Schedule(100ms, [this](TaskContext /*context*/) + { + me->KillSelf(); + }); + }); + } + else + { + context.Repeat(); + } + } + } + }); } void UpdateAI(uint32 diff) override { - moveTimer += diff; - if (moveTimer >= 1000) - { - moveTimer = 0; - Creature* Vorpil = ObjectAccessor::GetCreature(*me, VorpilGUID); - if (!Vorpil) - { - me->DespawnOrUnsummon(); - return; - } - me->GetMotionMaster()->MoveFollow(Vorpil, 0.0f, 0.0f); - - if (sacrificed) - { - Vorpil->AddAura(DUNGEON_MODE(SPELL_EMPOWERING_SHADOWS_N, SPELL_EMPOWERING_SHADOWS_H), Vorpil); - Vorpil->ModifyHealth(int32(Vorpil->CountPctFromMaxHealth(4))); - DoCastAOE(SPELL_SHADOW_NOVA, true); - me->KillSelf(); - return; - } - - if (me->IsWithinDist(Vorpil, 3.0f)) - { - DoCastSelf(SPELL_SACRIFICE); - sacrificed = true; - moveTimer = 500; - } - } + _scheduler.Update(diff); } + +private: + TaskScheduler _scheduler; }; void AddSC_boss_grandmaster_vorpil() diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_mennu_the_betrayer.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_mennu_the_betrayer.cpp new file mode 100644 index 000000000..42b3d63e4 --- /dev/null +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_mennu_the_betrayer.cpp @@ -0,0 +1,101 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "the_slave_pens.h" + +enum Spells +{ + SPELL_LIGHTNING_BOLT = 35010, + SPELL_HEALING_WARD = 34980, + SPELL_EARTHGRAB_TOTEM = 31981, + SPELL_STONESKIN_TOTEM = 31985, + SPELL_NOVA_TOTEM = 31991 +}; + +enum Text +{ + SAY_AGGRO = 1, + SAY_KILL = 2, + SAY_JUST_DIED = 3 +}; + +struct boss_mennu_the_betrayer : public BossAI +{ + boss_mennu_the_betrayer(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void Reset() override + { + _Reset(); + + ScheduleHealthCheckEvent(60, [&] { + DoCastSelf(SPELL_HEALING_WARD); + }); + } + + void JustSummoned(Creature* summon) override + { + summon->GetMotionMaster()->Clear(); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + Talk(SAY_AGGRO); + + scheduler.Schedule(5s, 8s, [this](TaskContext context) + { + DoCastVictim(SPELL_LIGHTNING_BOLT); + context.Repeat(7s, 10s); + }).Schedule(20s, [this](TaskContext context) + { + DoCastSelf(SPELL_NOVA_TOTEM); + context.Repeat(26s); + }).Schedule(19200ms, [this](TaskContext context) + { + DoCastSelf(SPELL_EARTHGRAB_TOTEM); + context.Repeat(26s); + }).Schedule(18s, [this](TaskContext context) + { + DoCastSelf(SPELL_STONESKIN_TOTEM); + context.Repeat(26s); + }); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_JUST_DIED); + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(SAY_KILL); + } +}; + +void AddSC_boss_mennu_the_betrayer() +{ + RegisterTheSlavePensCreatureAI(boss_mennu_the_betrayer); +} diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_quagmirran.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_quagmirran.cpp new file mode 100644 index 000000000..105b17616 --- /dev/null +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_quagmirran.cpp @@ -0,0 +1,73 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "the_slave_pens.h" + +enum Spells +{ + SPELL_ACID_SPRAY = 38153, + SPELL_CLEAVE = 40504, + SPELL_POISON_BOLT_VOLLEY_N = 34780, + SPELL_POISON_BOLT_VOLLEY_H = 39340, + SPELL_UPPERCUT = 32055 +}; + +struct boss_quagmirran : public BossAI +{ + boss_quagmirran(Creature* creature) : BossAI(creature, DATA_QUAGMIRRAN) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void Reset() override + { + _Reset(); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + + scheduler.Schedule(9100ms, [this](TaskContext context) + { + DoCastVictim(SPELL_CLEAVE); + context.Repeat(18800ms, 24800ms); + }).Schedule(20300ms, [this](TaskContext context) + { + DoCastVictim(SPELL_UPPERCUT); + context.Repeat(21800ms); + }).Schedule(25200ms, [this](TaskContext context) + { + DoCastVictim(SPELL_ACID_SPRAY); + context.Repeat(25s); + }).Schedule(31800ms, [this](TaskContext context) + { + DoCastSelf(DUNGEON_MODE(SPELL_POISON_BOLT_VOLLEY_N, SPELL_POISON_BOLT_VOLLEY_H)); + context.Repeat(24400ms); + }); + } +}; + +void AddSC_boss_quagmirran() +{ + RegisterTheSlavePensCreatureAI(boss_quagmirran); +} \ No newline at end of file diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp new file mode 100644 index 000000000..04253f8d4 --- /dev/null +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_rokmar_the_crackler.cpp @@ -0,0 +1,73 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "the_slave_pens.h" + +enum Spells +{ + SPELL_ENSNARING_MOSS = 31948, + SPELL_FRENZY = 34970, + SPELL_GRIEVOUS_WOUND_N = 31956, + SPELL_GRIEVOUS_WOUND_H = 38801, + SPELL_WATER_SPIT = 35008 +}; + +struct boss_rokmar_the_crackler : public BossAI +{ + boss_rokmar_the_crackler(Creature* creature) : BossAI(creature, DATA_ROKMAR_THE_CRACKLER) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void Reset() override + { + _Reset(); + + ScheduleHealthCheckEvent(20, [&] { + DoCastSelf(SPELL_FRENZY); + }); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + + scheduler.Schedule(8s, [this] (TaskContext context) + { + DoCastVictim(DUNGEON_MODE(SPELL_GRIEVOUS_WOUND_N, SPELL_GRIEVOUS_WOUND_H)); + context.Repeat(20700ms); + }).Schedule(15300ms, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_ENSNARING_MOSS); + context.Repeat(26s); + }).Schedule(10700ms, [this](TaskContext context) + { + DoCastSelf(SPELL_WATER_SPIT); + context.Repeat(19s); + }); + } +}; + +void AddSC_boss_rokmar_the_crackler() +{ + RegisterTheSlavePensCreatureAI(boss_rokmar_the_crackler); +} diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/the_slave_pens.h b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/the_slave_pens.h index e467bcbc0..d54aa1c72 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/the_slave_pens.h +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/the_slave_pens.h @@ -27,10 +27,11 @@ uint32 const EncounterCount = 3; enum SPDataTypes { - DATA_MENNU_THE_BETRAYER = 1, - DATA_ROKMAR_THE_CRACKLER = 2, - DATA_QUAGMIRRAN = 3, - DATA_AHUNE = 4, + DATA_MENNU_THE_BETRAYER = 0, + DATA_ROKMAR_THE_CRACKLER = 1, + DATA_QUAGMIRRAN = 2, + DATA_AHUNE = 3, + MAX_ENCOUNTER = 4, DATA_AHUNE_BUNNY = 5, DATA_FROZEN_CORE = 6, DATA_FLAMECALLER_000 = 7, @@ -65,6 +66,8 @@ enum SPCreaturesIds NPC_SHAMAN_BEAM_BUNNY_002 = 25966, NPC_WHISP_DEST_BUNNY = 26120, NPC_WHISP_SOURCE_BUNNY = 26121, + NPC_MENNU_THE_BETRAYER = 17941, + NPC_ROKMAR_THE_CRACKLER = 17991, NPC_QUAGMIRRAN = 17942 }; @@ -80,4 +83,6 @@ inline AI* GetTheSlavePensAI(T* obj) return GetInstanceAI(obj, SPScriptName); } +#define RegisterTheSlavePensCreatureAI(ai_name) RegisterCreatureAIWithFactory (ai_name, GetTheSlavePensAI) + #endif // SLAVE_PENS_H diff --git a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_swamplord_muselek.cpp b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_swamplord_muselek.cpp new file mode 100644 index 000000000..0d220613b --- /dev/null +++ b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_swamplord_muselek.cpp @@ -0,0 +1,178 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "ScriptMgr.h" +#include "ScriptedCreature.h" +#include "the_underbog.h" + +enum Spells +{ + SPELL_SHOOT = 22907, + SPELL_KNOCKAWAY = 18813, + SPELL_RAPTOR_STRIKE = 31566, + SPELL_MULTISHOT = 34974, + SPELL_THROW_FREEZING_TRAP = 31946, + SPELL_AIMED_SHOT = 31623, + SPELL_HUNTERS_MARK = 31615 +}; + +enum Text +{ + SAY_AGGRO = 1, + SAY_KILL = 2, + SAY_JUST_DIED = 3 +}; + +enum Misc +{ + RANGED_GROUP = 1, + RANGE_CHECK = 2 +}; + +struct boss_swamplord_muselek : public BossAI +{ + boss_swamplord_muselek(Creature* creature) : BossAI(creature, DATA_MUSELEK) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void Reset() override + { + _Reset(); + _canChase = true; + } + + void AttackStart(Unit* victim) override + { + if (victim && me->Attack(victim, true) && me->IsWithinMeleeRange(victim)) + { + me->GetMotionMaster()->MoveChase(victim); + } + else + { + me->GetMotionMaster()->MoveIdle(); + } + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_JUST_DIED); + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(SAY_KILL); + } + + bool CanShootVictim() + { + return me->GetVictim() && !me->IsWithinRange(me->GetVictim(), 10.0f) && me->IsWithinLOSInMap(me->GetVictim()); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _JustEngagedWith(); + Talk(SAY_AGGRO); + + scheduler.Schedule(3s, [this](TaskContext context) + { + if (CanShootVictim()) + { + me->LoadEquipment(1, true); + DoCastVictim(SPELL_SHOOT); + me->GetMotionMaster()->Clear(); + } + else if (_canChase) + { + me->GetMotionMaster()->MoveChase(me->GetVictim()); + } + + context.Repeat(); + }).Schedule(15s, 30s, [this](TaskContext context) + { + if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim())) + { + DoCastVictim(SPELL_KNOCKAWAY); + } + + context.Repeat(); + }).Schedule(10s, 15s, [this](TaskContext context) + { + DoCastVictim(SPELL_MULTISHOT); + context.Repeat(20s, 30s); + }).Schedule(30s, 40s, [this](TaskContext context) + { + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, false, true)) + { + _markTarget = target->GetGUID(); + _canChase = false; + DoCastVictim(SPELL_THROW_FREEZING_TRAP); + + scheduler.Schedule(3s, [this, target](TaskContext) + { + if (target && me->GetVictim()) + { + if (me->IsWithinMeleeRange(me->GetVictim())) + { + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveBackwards(me->GetVictim(), 10.0f); + } + + me->m_Events.AddEventAtOffset([this]() + { + if (Unit* marktarget = ObjectAccessor::GetUnit(*me, _markTarget)) + { + DoCast(marktarget, SPELL_HUNTERS_MARK); + } + }, 3s); + } + }); + + scheduler.Schedule(5s, [this, target](TaskContext) + { + if (target) + { + me->m_Events.AddEventAtOffset([this]() + { + if (Unit* marktarget = ObjectAccessor::GetUnit(*me, _markTarget)) + { + scheduler.DelayAll(5s); + DoCast(marktarget, SPELL_AIMED_SHOT); + _canChase = true; + } + }, 3s); + } + }); + } + + context.Repeat(12s, 16s); + }); + } + +private: + ObjectGuid _markTarget; + bool _canChase; +}; + +void AddSC_boss_swamplord_muselek() +{ + RegisterUnderbogCreatureAI(boss_swamplord_muselek); +} diff --git a/src/server/scripts/Outland/CoilfangReservoir/underbog/underbog.cpp b/src/server/scripts/Outland/CoilfangReservoir/underbog/underbog.cpp index 6f68fcd74..04880735e 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/underbog/underbog.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/underbog/underbog.cpp @@ -16,9 +16,55 @@ */ #include "ScriptMgr.h" +#include "ScriptedCreature.h" #include "SpellScript.h" +#include "TaskScheduler.h" #include "the_underbog.h" +enum UnderbatSpells +{ + SPELL_TENTACLE_LASH = 34171 +}; + +struct npc_underbat : public ScriptedAI +{ + npc_underbat(Creature* c) : ScriptedAI(c) {} + + void Reset() override + { + _scheduler.CancelAll(); + } + + void JustEngagedWith(Unit* /*who*/) override + { + _scheduler.Schedule(2200ms, 6900ms, [this](TaskContext context) + { + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, [&](Unit* u) + { + return u->IsAlive() && !u->IsPet() && me->IsWithinCombatRange(u, 20.f) && !me->HasInArc(M_PI, u); + })) + { + DoCast(target, SPELL_TENTACLE_LASH); + } + context.Repeat(5700ms, 9700ms); + }); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + _scheduler.Update(diff, [this] + { + DoMeleeAttackIfReady(); + }); + } + +private: + TaskScheduler _scheduler; +}; + class spell_fungal_decay : public AuraScript { PrepareAuraScript(spell_fungal_decay); @@ -72,6 +118,7 @@ class spell_allergies : public AuraScript void AddSC_underbog() { + RegisterUnderbogCreatureAI(npc_underbat); RegisterSpellScript(spell_fungal_decay); RegisterSpellScript(spell_allergies); } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h index 985cb7618..23fc4acce 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h @@ -29,41 +29,41 @@ constexpr uint32 EncounterCount = 4; enum bloodFurnace { - DATA_THE_MAKER = 0, - DATA_BROGGOK = 1, - DATA_KELIDAN = 2, - MAX_ENCOUNTER = 3, + DATA_THE_MAKER = 0, + DATA_BROGGOK = 1, + DATA_KELIDAN = 2, + MAX_ENCOUNTER = 3, - DATA_DOOR1 = 10, - DATA_DOOR2 = 11, - DATA_DOOR3 = 12, - DATA_BROGGOK_REAR_DOOR = 13, - DATA_BROGGOK_LEVER = 14, - DATA_DOOR6 = 15, + DATA_DOOR1 = 10, + DATA_DOOR2 = 11, + DATA_DOOR3 = 12, + DATA_BROGGOK_REAR_DOOR = 13, + DATA_BROGGOK_LEVER = 14, + DATA_DOOR6 = 15, - DATA_PRISON_CELL1 = 20, - DATA_PRISON_CELL2 = 21, - DATA_PRISON_CELL3 = 22, - DATA_PRISON_CELL4 = 23, + DATA_PRISON_CELL1 = 20, + DATA_PRISON_CELL2 = 21, + DATA_PRISON_CELL3 = 22, + DATA_PRISON_CELL4 = 23, - ACTION_ACTIVATE_BROGGOK = 30, - ACTION_PREPARE_BROGGOK = 31 + ACTION_ACTIVATE_BROGGOK = 30, + ACTION_PREPARE_BROGGOK = 31 }; enum bloodFurnaceNPC { - NPC_THE_MAKER = 17381, - NPC_BROGGOK = 17380, - NPC_KELIDAN = 17377, - NPC_NASCENT_FEL_ORC = 17398, - NPC_CHANNELER = 17653 + NPC_THE_MAKER = 17381, + NPC_BROGGOK = 17380, + NPC_KELIDAN = 17377, + NPC_NASCENT_FEL_ORC = 17398, + NPC_CHANNELER = 17653 }; enum BloodFurnaceGO { - GO_BROGGOK_DOOR_FRONT = 181822, - GO_BROGGOK_DOOR_REAR = 181819, - GO_BROGGOK_LEVER = 181982 + GO_BROGGOK_DOOR_FRONT = 181822, + GO_BROGGOK_DOOR_REAR = 181819, + GO_BROGGOK_LEVER = 181982 }; template diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index 838216b81..6b2b5b01c 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -21,14 +21,17 @@ #include "SpellScript.h" #include "blood_furnace.h" -enum eEnums +enum Say { - SAY_AGGRO = 0, + SAY_AGGRO = 0 +}; +enum Spells +{ SPELL_SLIME_SPRAY = 30913, SPELL_POISON_CLOUD = 30916, SPELL_POISON_BOLT = 30917, - SPELL_POISON = 30914, + SPELL_POISON = 30914 }; struct boss_broggok : public BossAI @@ -52,7 +55,6 @@ struct boss_broggok : public BossAI void JustSummoned(Creature* summoned) override { summons.Summon(summoned); - summoned->SetFaction(FACTION_MONSTER_2); summoned->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); summoned->CastSpell(summoned, SPELL_POISON, true, 0, 0, me->GetGUID()); @@ -80,7 +82,6 @@ struct boss_broggok : public BossAI DoCastSelf(SPELL_POISON_CLOUD); context.Repeat(20s); }); - me->SetReactState(REACT_AGGRESSIVE); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetImmuneToAll(false); @@ -106,7 +107,6 @@ public: } } } - go->UseDoorOrButton(); return false; } @@ -121,6 +121,7 @@ class spell_broggok_poison_cloud : public AuraScript { if (!sSpellMgr->GetSpellInfo(spellInfo->Effects[EFFECT_0].TriggerSpell)) return false; + return true; } @@ -142,6 +143,6 @@ class spell_broggok_poison_cloud : public AuraScript void AddSC_boss_broggok() { RegisterBloodFurnaceCreatureAI(boss_broggok); - new go_broggok_lever(); RegisterSpellScript(spell_broggok_poison_cloud); + new go_broggok_lever(); } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp index f844aa727..51d72a28b 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp @@ -20,343 +20,160 @@ #include "SpellAuras.h" #include "blood_furnace.h" -enum eKelidan +enum Says { SAY_WAKE = 0, SAY_ADD_AGGRO = 1, SAY_KILL = 2, SAY_NOVA = 3, - SAY_DIE = 4, + SAY_DIE = 4 +}; - // Keldian spells +enum Spells +{ SPELL_CORRUPTION = 30938, SPELL_EVOCATION = 30935, SPELL_FIRE_NOVA = 33132, SPELL_SHADOW_BOLT_VOLLEY = 28599, SPELL_BURNING_NOVA = 30940, - SPELL_VORTEX = 37370, - - // Channelers spells - SPELL_SHADOW_BOLT = 12739, - SPELL_SHADOW_BOLT_H = 15472, - SPELL_MARK_OF_SHADOW = 30937, - SPELL_CHANNELING = 39123, - - // Events - EVENT_SPELL_VOLLEY = 1, - EVENT_SPELL_CORRUPTION = 2, - EVENT_SPELL_BURNING_NOVA = 3, - EVENT_SPELL_FIRE_NOVA = 4, - EVENT_SPELL_SHADOW_BOLT = 5, - EVENT_SPELL_MARK = 6, - - // Actions - ACTION_CHANNELER_ENGAGED = 1, - ACTION_CHANNELER_DIED = 2, + SPELL_VORTEX = 37370 }; -const float ShadowmoonChannelers[5][4] = +enum Misc { - {302.0f, -87.0f, -24.4f, 0.157f}, - {321.0f, -63.5f, -24.6f, 4.887f}, - {346.0f, -74.5f, -24.6f, 3.595f}, - {344.0f, -103.5f, -24.5f, 2.356f}, - {316.0f, -109.0f, -24.6f, 1.257f} + NPC_SHADOWMOON_CHANNELER = 17653 }; -class boss_kelidan_the_breaker : public CreatureScript +enum Actions { -public: - boss_kelidan_the_breaker() : CreatureScript("boss_kelidan_the_breaker") + ACTION_CHANNELER_DIED = 1, + ACTION_CHANNELER_AGGRO = 2 +}; + +struct boss_kelidan_the_breaker : public BossAI +{ + boss_kelidan_the_breaker(Creature* creature) : BossAI(creature, DATA_KELIDAN) { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); } - struct boss_kelidan_the_breakerAI : public ScriptedAI + void Reset() override { - boss_kelidan_the_breakerAI(Creature* creature) : ScriptedAI(creature) + _Reset(); + ApplyImmunities(true); + me->SetReactState(REACT_PASSIVE); + me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + DoCastSelf(SPELL_EVOCATION); + if (instance) { - instance = creature->GetInstanceScript(); + instance->SetData(DATA_KELIDAN, NOT_STARTED); } + } - InstanceScript* instance; - EventMap events; - ObjectGuid channelers[5]; - uint32 checkTimer; - bool addYell; - - void Reset() override + void JustEngagedWith(Unit* /*who*/) override + { + Talk(SAY_WAKE); + _JustEngagedWith(); + me->InterruptNonMeleeSpells(false); + if (instance) { - addYell = false; - checkTimer = 5000; - - events.Reset(); + instance->SetData(DATA_KELIDAN, IN_PROGRESS); + } + scheduler.Schedule(1s, [this](TaskContext context) + { + DoCastAOE(SPELL_SHADOW_BOLT_VOLLEY); + context.Repeat(8s, 13s); + }).Schedule(5s, [this](TaskContext context) + { + DoCastAOE(SPELL_CORRUPTION); + context.Repeat(30s, 50s); + }).Schedule(15s, [this](TaskContext context) + { + Talk(SAY_NOVA); + ApplyImmunities(false); + me->AddAura(SPELL_BURNING_NOVA, me); ApplyImmunities(true); - SummonChannelers(); - me->SetReactState(REACT_PASSIVE); - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->SetImmuneToAll(true); - if (instance) - instance->SetData(DATA_KELIDAN, NOT_STARTED); - } - - void JustEngagedWith(Unit* /*who*/) override - { - events.ScheduleEvent(EVENT_SPELL_VOLLEY, 1000); - events.ScheduleEvent(EVENT_SPELL_CORRUPTION, 5000); - events.ScheduleEvent(EVENT_SPELL_BURNING_NOVA, 15000); - - me->InterruptNonMeleeSpells(false); - Talk(SAY_WAKE); - - if (instance) - instance->SetData(DATA_KELIDAN, IN_PROGRESS); - } - - void KilledUnit(Unit* /*victim*/) override - { - if (urand(0, 1)) - Talk(SAY_KILL); - } - - void DoAction(int32 param) override - { - if (param == ACTION_CHANNELER_ENGAGED) + if (IsHeroic()) { - if (!addYell) - { - addYell = true; - Talk(SAY_ADD_AGGRO); - - for (uint8 i = 0; i < 5; ++i) - { - Creature* channeler = ObjectAccessor::GetCreature(*me, channelers[i]); - if (channeler && !channeler->IsInCombat()) - channeler->SetInCombatWithZone(); - } - } + DoCastAOE(SPELL_VORTEX); } - else if (param == ACTION_CHANNELER_DIED) + scheduler.DelayGroup(0, 6s); + scheduler.Schedule(5s, [this](TaskContext /*context*/) { - for (uint8 i = 0; i < 5; ++i) - { - Creature* channeler = ObjectAccessor::GetCreature(*me, channelers[i]); - if (channeler && channeler->IsAlive()) - return; - } - me->SetReactState(REACT_AGGRESSIVE); - me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->SetImmuneToAll(false); - if (Unit* target = me->SelectNearestPlayer(100.0f)) - AttackStart(target); - } - } - - void CheckChannelers() - { - if (addYell) - { - if (!SelectTargetFromPlayerList(100.0f)) - EnterEvadeMode(); - return; - } - - SummonChannelers(); - for (uint8 i = 0; i < 5; ++i) - { - Creature* channeler = ObjectAccessor::GetCreature(*me, channelers[i]); - if (channeler && !channeler->HasUnitState(UNIT_STATE_CASTING) && !channeler->IsInCombat()) - { - Creature* target = ObjectAccessor::GetCreature(*me, channelers[(i + 2) % 5]); - if (target) - channeler->CastSpell(target, SPELL_CHANNELING, false); - } - } - } - - void SummonChannelers() - { - for (uint8 i = 0; i < 5; ++i) - { - Creature* channeler = ObjectAccessor::GetCreature(*me, channelers[i]); - if (channeler && channeler->isDead()) - { - channeler->DespawnOrUnsummon(1); - channeler = nullptr; - } - if (!channeler) - channeler = me->SummonCreature(NPC_CHANNELER, ShadowmoonChannelers[i][0], ShadowmoonChannelers[i][1], ShadowmoonChannelers[i][2], ShadowmoonChannelers[i][3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000); - - channelers[i] = channeler ? channeler->GetGUID() : ObjectGuid::Empty; - } - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DIE); - if (instance) - { - // Xinef: load grid with start doors - me->GetMap()->LoadGrid(0, -111.0f); - instance->SetData(DATA_KELIDAN, DONE); - instance->HandleGameObject(instance->GetGuidData(DATA_DOOR1), true); - instance->HandleGameObject(instance->GetGuidData(DATA_DOOR6), true); - } - } - - void ApplyImmunities(bool apply) - { - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_CHARM, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_DISORIENTED, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_DISTRACT, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_FEAR, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_ROOT, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SILENCE, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SLEEP, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SNARE, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_FREEZE, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_KNOCKOUT, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_POLYMORPH, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_BANISH, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SHACKLE, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_TURN, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_HORROR, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_DAZE, apply); - me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SAPPED, apply); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - { - checkTimer += diff; - if (checkTimer >= 5000) - { - checkTimer = 0; - CheckChannelers(); - if (!me->HasUnitState(UNIT_STATE_CASTING)) - me->CastSpell(me, SPELL_EVOCATION, false); - } - return; - } - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_VOLLEY: - me->CastSpell(me, SPELL_SHADOW_BOLT_VOLLEY, false); - events.RepeatEvent(urand(8000, 13000)); - break; - case EVENT_SPELL_CORRUPTION: - me->CastSpell(me, SPELL_CORRUPTION, false); - events.RepeatEvent(urand(30000, 50000)); - break; - case EVENT_SPELL_BURNING_NOVA: - Talk(SAY_NOVA); - - ApplyImmunities(false); - me->AddAura(SPELL_BURNING_NOVA, me); - ApplyImmunities(true); - - if (IsHeroic()) - DoTeleportAll(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); - - events.DelayEvents(6000, 0); - events.RepeatEvent(urand(25000, 32000)); - events.ScheduleEvent(EVENT_SPELL_FIRE_NOVA, 5000); - break; - case EVENT_SPELL_FIRE_NOVA: - me->CastSpell(me, SPELL_FIRE_NOVA, true); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetBloodFurnaceAI(creature); + DoCastSelf(SPELL_FIRE_NOVA, true); + }); + context.Repeat(25s, 32s); + }); } -}; -class npc_shadowmoon_channeler : public CreatureScript -{ -public: - npc_shadowmoon_channeler() : CreatureScript("npc_shadowmoon_channeler") {} - - struct npc_shadowmoon_channelerAI : public ScriptedAI + void KilledUnit(Unit* /*victim*/) override { - npc_shadowmoon_channelerAI(Creature* creature) : ScriptedAI(creature) {} - - EventMap events; - - void Reset() override + if (urand(0, 1)) { - events.Reset(); + Talk(SAY_KILL); } - - Creature* GetKelidan() - { - if (InstanceScript* instance = me->GetInstanceScript()) - return instance->GetCreature(DATA_KELIDAN); - - return nullptr; - } - - void JustEngagedWith(Unit* /*who*/) override - { - if (Creature* kelidan = GetKelidan()) - kelidan->AI()->DoAction(ACTION_CHANNELER_ENGAGED); - - me->InterruptNonMeleeSpells(false); - events.ScheduleEvent(EVENT_SPELL_SHADOW_BOLT, urand(1500, 3500)); - events.ScheduleEvent(EVENT_SPELL_MARK, urand(5000, 6500)); - } - - void JustDied(Unit* /*killer*/) override - { - if (Creature* kelidan = GetKelidan()) - kelidan->AI()->DoAction(ACTION_CHANNELER_DIED); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_SHADOW_BOLT: - me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_SHADOW_BOLT_H : SPELL_SHADOW_BOLT, false); - events.RepeatEvent(urand(6000, 7500)); - break; - case EVENT_SPELL_MARK: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_MARK_OF_SHADOW, false); - events.RepeatEvent(urand(16000, 17500)); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetBloodFurnaceAI(creature); } + + void DoAction(int32 param) override + { + if (param == ACTION_CHANNELER_DIED) + { + if (me->FindNearestCreature(NPC_SHADOWMOON_CHANNELER, 100.0f)) + { + return; + } + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetReactState(REACT_AGGRESSIVE); + me->SetInCombatWithZone(); + } + + else if (param == ACTION_CHANNELER_AGGRO) + { + Talk(SAY_ADD_AGGRO); + } + } + + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DIE); + _JustDied(); + if (instance) + { + me->GetMap()->LoadGrid(0, -111.0f); + instance->SetData(DATA_KELIDAN, DONE); + instance->HandleGameObject(instance->GetGuidData(DATA_DOOR1), true); + instance->HandleGameObject(instance->GetGuidData(DATA_DOOR6), true); + } + } + + void ApplyImmunities(bool apply) + { + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_CHARM, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_DISORIENTED, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_DISTRACT, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_FEAR, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_ROOT, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SILENCE, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SLEEP, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SNARE, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_FREEZE, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_KNOCKOUT, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_POLYMORPH, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_BANISH, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SHACKLE, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_TURN, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_HORROR, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_DAZE, apply); + me->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SAPPED, apply); + } + }; void AddSC_boss_kelidan_the_breaker() { - new boss_kelidan_the_breaker(); - new npc_shadowmoon_channeler(); + RegisterBloodFurnaceCreatureAI(boss_kelidan_the_breaker); } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp index efc7a5316..77bb5ef91 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_the_maker.cpp @@ -19,111 +19,87 @@ #include "ScriptedCreature.h" #include "blood_furnace.h" -enum eEnums +enum Says { - SAY_AGGRO = 0, - SAY_KILL = 1, - SAY_DIE = 2, - - SPELL_EXPLODING_BREAKER = 30925, - SPELL_DOMINATION = 30923, - - EVENT_SPELL_EXPLODING = 1, - EVENT_SPELL_DOMINATION = 2 + SAY_AGGRO = 0, + SAY_KILL = 1, + SAY_DIE = 2 }; -class boss_the_maker : public CreatureScript +enum Spells { -public: - boss_the_maker() : CreatureScript("boss_the_maker") + SPELL_EXPLODING_BEAKER = 30925, + SPELL_DOMINATION = 30923 +}; + +struct boss_the_maker : public BossAI +{ + boss_the_maker(Creature* creature) : BossAI(creature, DATA_THE_MAKER) { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); } - struct boss_the_makerAI : public ScriptedAI + void Reset() override { - boss_the_makerAI(Creature* creature) : ScriptedAI(creature) + _Reset(); + if (instance) { - instance = creature->GetInstanceScript(); - } - - InstanceScript* instance; - EventMap events; - - void Reset() override - { - events.Reset(); - if (!instance) - return; - instance->SetData(DATA_THE_MAKER, NOT_STARTED); instance->HandleGameObject(instance->GetGuidData(DATA_DOOR2), true); } + } - void JustEngagedWith(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SPELL_EXPLODING, 6000); - events.ScheduleEvent(EVENT_SPELL_DOMINATION, 120000); - - if (!instance) - return; - - instance->SetData(DATA_THE_MAKER, IN_PROGRESS); - instance->HandleGameObject(instance->GetGuidData(DATA_DOOR2), false); - } - - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER && urand(0, 1)) - Talk(SAY_KILL); - } - - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DIE); - - if (!instance) - return; - - instance->SetData(DATA_THE_MAKER, DONE); - instance->HandleGameObject(instance->GetGuidData(DATA_DOOR2), true); - instance->HandleGameObject(instance->GetGuidData(DATA_DOOR3), true); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_EXPLODING: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_EXPLODING_BREAKER, false); - events.RepeatEvent(urand(7000, 11000)); - break; - case EVENT_SPELL_DOMINATION: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_DOMINATION, false); - events.RepeatEvent(120000); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override + void JustEngagedWith(Unit* /*who*/) override { - return GetBloodFurnaceAI(creature); + Talk(SAY_AGGRO); + _JustEngagedWith(); + instance->SetData(DATA_THE_MAKER, IN_PROGRESS); + instance->HandleGameObject(instance->GetGuidData(DATA_DOOR2), false); + scheduler.Schedule(6s, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_EXPLODING_BEAKER); + context.Repeat(7s, 11s); + }).Schedule(2min, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_DOMINATION); + context.Repeat(2min); + }); + } + + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER && urand(0, 1)) + { + Talk(SAY_KILL); + } + } + + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DIE); + _JustDied(); + instance->SetData(DATA_THE_MAKER, DONE); + instance->HandleGameObject(instance->GetGuidData(DATA_DOOR2), true); + instance->HandleGameObject(instance->GetGuidData(DATA_DOOR3), true); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + scheduler.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + DoMeleeAttackIfReady(); } }; void AddSC_boss_the_maker() { - new boss_the_maker(); + RegisterBloodFurnaceCreatureAI(boss_the_maker); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp index 84a017623..4abd908e3 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp @@ -34,134 +34,114 @@ enum Spells SPELL_SHADOW_BOLT = 30686, SPELL_SUMMON_FIENDISH_HOUND = 30707, SPELL_TREACHEROUS_AURA = 30695, - SPELL_DEMONIC_SHIELD = 31901, + SPELL_DEMONIC_SHIELD = 31901 }; -enum Misc +struct boss_omor_the_unscarred : public BossAI { - EVENT_SUMMON1 = 1, - EVENT_SUMMON2 = 2, - EVENT_TREACHEROUS_AURA = 3, - EVENT_DEMONIC_SHIELD = 4, - EVENT_KILL_TALK = 5 -}; - -class boss_omor_the_unscarred : public CreatureScript -{ -public: - boss_omor_the_unscarred() : CreatureScript("boss_omor_the_unscarred") { } - - struct boss_omor_the_unscarredAI : public BossAI + boss_omor_the_unscarred(Creature* creature) : BossAI(creature, DATA_OMOR_THE_UNSCARRED) { - boss_omor_the_unscarredAI(Creature* creature) : BossAI(creature, DATA_OMOR_THE_UNSCARRED) + SetCombatMovement(false); + scheduler.SetValidator([this] { - SetCombatMovement(false); - } - - void Reset() override - { - Talk(SAY_WIPE); - BossAI::Reset(); - _targetGUID.Clear(); - } - - void JustEngagedWith(Unit* who) override - { - Talk(SAY_AGGRO); - BossAI::JustEngagedWith(who); - - events.ScheduleEvent(EVENT_SUMMON1, 10000); - events.ScheduleEvent(EVENT_SUMMON2, 25000); - events.ScheduleEvent(EVENT_TREACHEROUS_AURA, 6000); - events.ScheduleEvent(EVENT_DEMONIC_SHIELD, 1000); - } - - void KilledUnit(Unit*) override - { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) - { - Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); - } - } - - void JustSummoned(Creature* summon) override - { - Talk(SAY_SUMMON); - summons.Summon(summon); - summon->SetInCombatWithZone(); - } - - void JustDied(Unit* killer) override - { - Talk(SAY_DIE); - BossAI::JustDied(killer); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SUMMON1: - Talk(SAY_SUMMON); - me->CastSpell(me, SPELL_SUMMON_FIENDISH_HOUND, false); - break; - case EVENT_SUMMON2: - me->CastSpell(me, SPELL_SUMMON_FIENDISH_HOUND, false); - events.ScheduleEvent(EVENT_SUMMON2, 15000); - break; - case EVENT_TREACHEROUS_AURA: - if (roll_chance_i(33)) - Talk(SAY_CURSE); - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_TREACHEROUS_AURA, false); - events.ScheduleEvent(EVENT_TREACHEROUS_AURA, urand(12000, 18000)); - break; - case EVENT_DEMONIC_SHIELD: - if (me->HealthBelowPct(21)) - { - me->CastSpell(me, SPELL_DEMONIC_SHIELD, false); - events.ScheduleEvent(EVENT_DEMONIC_SHIELD, 15000); - } - else - events.ScheduleEvent(EVENT_DEMONIC_SHIELD, 1000); - break; - } - - if (!me->GetVictim() || !me->isAttackReady()) - return; - - if (me->IsWithinMeleeRange(me->GetVictim())) - { - me->GetMotionMaster()->MoveChase(me->GetVictim()); - DoMeleeAttackIfReady(); - } - else - { - me->GetMotionMaster()->Clear(); - me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false); - me->resetAttackTimer(); - } - } - - private: - ObjectGuid _targetGUID; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetHellfireRampartsAI(creature); + return !me->HasUnitState(UNIT_STATE_CASTING); + }); } + + void Reset() override + { + Talk(SAY_WIPE); + _Reset(); + _targetGUID.Clear(); + ScheduleHealthCheckEvent(21, [&]{ + DoCastSelf(SPELL_DEMONIC_SHIELD); + scheduler.Schedule(15s, [this](TaskContext context) + { + DoCastSelf(SPELL_DEMONIC_SHIELD); + context.Repeat(15s); + }); + }); + } + + void JustEngagedWith(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + _JustEngagedWith(); + scheduler.Schedule(6s, [this](TaskContext context) + { + if (roll_chance_i(33)) + { + Talk(SAY_CURSE); + } + DoCastRandomTarget(SPELL_TREACHEROUS_AURA); + context.Repeat(12s, 18s); + }).Schedule(10s, [this](TaskContext /*context*/) + { + DoCastSelf(SPELL_SUMMON_FIENDISH_HOUND); + }).Schedule(25s, [this](TaskContext context) + { + DoCastSelf(SPELL_SUMMON_FIENDISH_HOUND); + context.Repeat(15s); + }); + } + + void KilledUnit(Unit*) override + { + if(!_hasSpoken) + { + _hasSpoken = true; + Talk(SAY_KILL); + } + scheduler.Schedule(6s, [this](TaskContext /*context*/) + { + _hasSpoken = false; + }); + } + + void JustSummoned(Creature* summon) override + { + Talk(SAY_SUMMON); + summons.Summon(summon); + summon->SetInCombatWithZone(); + } + + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DIE); + _JustDied(); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + scheduler.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + if (!me->GetVictim() || !me->isAttackReady()) + return; + + if (me->IsWithinMeleeRange(me->GetVictim())) + { + me->GetMotionMaster()->MoveChase(me->GetVictim()); + DoMeleeAttackIfReady(); + } + else + { + me->GetMotionMaster()->Clear(); + DoCastVictim(SPELL_SHADOW_BOLT); + me->resetAttackTimer(); + } + } + +private: + ObjectGuid _targetGUID; + bool _hasSpoken; }; void AddSC_boss_omor_the_unscarred() { - new boss_omor_the_unscarred(); + RegisterHellfireRampartsCreatureAI(boss_omor_the_unscarred); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index 4ae4b5a96..64a274f6a 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -21,40 +21,35 @@ enum Says { - SAY_INTRO = 0, - SAY_WIPE = 0, - SAY_AGGRO = 1, - SAY_KILL = 2, - SAY_DIE = 3, - EMOTE_NAZAN = 0 + SAY_INTRO = 0, + SAY_WIPE = 0, + SAY_AGGRO = 1, + SAY_KILL = 2, + SAY_DIE = 3, + EMOTE_NAZAN = 0 }; enum Spells { - SPELL_FIREBALL = 33793, - SPELL_SUMMON_LIQUID_FIRE = 31706, - SPELL_REVENGE = 19130, - SPELL_REVENGE_H = 40392, - SPELL_CALL_NAZAN = 30693, - SPELL_BELLOWING_ROAR = 39427, - SPELL_CONE_OF_FIRE = 30926 + SPELL_FIREBALL = 33793, + SPELL_SUMMON_LIQUID_FIRE = 31706, + SPELL_REVENGE = 19130, + SPELL_CALL_NAZAN = 30693, + SPELL_BELLOWING_ROAR = 39427, + SPELL_CONE_OF_FIRE = 30926 }; enum Misc { - ACTION_FLY_DOWN = 0, + ACTION_FLY_DOWN = 0, + POINT_MIDDLE = 0, + POINT_FLIGHT = 1 +}; - POINT_MIDDLE = 0, - POINT_FLIGHT = 1, - - EVENT_SPELL_REVENGE = 1, - EVENT_KILL_TALK = 2, - EVENT_AGGRO_TALK = 3, - EVENT_SPELL_FIREBALL = 4, - EVENT_SPELL_CONE_OF_FIRE = 5, - EVENT_SPELL_BELLOWING_ROAR = 6, - EVENT_CHANGE_POS = 7, - EVENT_RESTORE_COMBAT = 8 +enum GroupPhase +{ + GROUP_PHASE_1 = 0, + GROUP_PHASE_2 = 1 }; const Position NazanPos[3] = @@ -64,347 +59,302 @@ const Position NazanPos[3] = {-1373.84f, 1771.57f, 111.0f, 0.0f} }; -class boss_vazruden_the_herald : public CreatureScript +struct boss_vazruden_the_herald : public BossAI { -public: - boss_vazruden_the_herald() : CreatureScript("boss_vazruden_the_herald") { } + boss_vazruden_the_herald(Creature* creature) : BossAI(creature, DATA_VAZRUDEN) {} - struct boss_vazruden_the_heraldAI : public BossAI + void Reset() override { - boss_vazruden_the_heraldAI(Creature* creature) : BossAI(creature, DATA_VAZRUDEN) - { - } + BossAI::Reset(); + me->SetVisible(true); + me->SetReactState(REACT_PASSIVE); + me->SummonCreature(NPC_HELLFIRE_SENTRY, -1372.56f, 1724.31f, 82.967f, 5.3058f); + me->SummonCreature(NPC_HELLFIRE_SENTRY, -1383.39f, 1711.82f, 82.7961f, 5.67232f); + } - void Reset() override + void AttackStart(Unit*) override {} + + void JustSummoned(Creature* summon) override + { + summons.Summon(summon); + if (summon->GetEntry() != NPC_HELLFIRE_SENTRY) { - BossAI::Reset(); - me->SetVisible(true); + summon->SetInCombatWithZone(); + } + } + + void JustDied(Unit*) override + { + instance->SetBossState(DATA_VAZRUDEN, DONE); + } + + void MovementInform(uint32 type, uint32 id) override + { + if (type == POINT_MOTION_TYPE && id == POINT_MIDDLE) + { + me->SetVisible(false); + me->SummonCreature(NPC_VAZRUDEN, me->GetPositionX(), me->GetPositionY(), 81.2f, 5.46f); + me->SummonCreature(NPC_NAZAN, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 5.46f); + } + } + + void SummonedCreatureDies(Creature* summon, Unit*) override + { + summons.Despawn(summon); + if (summon->GetEntry() == NPC_HELLFIRE_SENTRY && summons.size() == 0) + { + Talk(SAY_INTRO); + me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 85.0f, false); + me->setActive(true); + } + else if (summons.size() == 0) + { + me->KillSelf(); + } + } + + void SummonedCreatureDespawn(Creature* summon) override + { + summons.Despawn(summon); + if (summon->GetEntry() != NPC_HELLFIRE_SENTRY) + { + BossAI::EnterEvadeMode(); + } + } + + void SetData(uint32 type, uint32 data) override + { + if (type == 0 && data == 1) + { + summons.DoZoneInCombat(NPC_HELLFIRE_SENTRY); + } + } + + void UpdateAI(uint32 /*diff*/) override + { + if (!me->IsVisible() && summons.size() == 0) + { + BossAI::EnterEvadeMode(); + } + } +}; + +struct boss_nazan : public BossAI +{ + boss_nazan(Creature* creature) : BossAI(creature, DATA_VAZRUDEN) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void Reset() override + { + me->SetCanFly(true); + me->SetDisableGravity(true); + } + + void EnterEvadeMode(EvadeReason /*why*/) override + { + me->DespawnOrUnsummon(1); + } + + void JustEngagedWith(Unit*) override + { + scheduler.CancelGroup(GROUP_PHASE_2); + scheduler.Schedule(5ms, GROUP_PHASE_1, [this](TaskContext context) + { + me->GetMotionMaster()->MovePoint(POINT_FLIGHT, NazanPos[urand(0, 2)], false); + scheduler.DelayAll(7s); + context.Repeat(30s); + }).Schedule(5s, GROUP_PHASE_1, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_FIREBALL); + context.Repeat(4s, 6s); + }); + } + + void AttackStart(Unit* who) override + { + if (me->IsLevitating()) + { + me->Attack(who, true); + } + else + { + ScriptedAI::AttackStart(who); + } + } + + void DoAction(int32 param) override + { + if (param == ACTION_FLY_DOWN) + { + Talk(EMOTE_NAZAN); me->SetReactState(REACT_PASSIVE); - me->SummonCreature(NPC_HELLFIRE_SENTRY, -1372.56f, 1724.31f, 82.967f, 5.3058f); - me->SummonCreature(NPC_HELLFIRE_SENTRY, -1383.39f, 1711.82f, 82.7961f, 5.67232f); + me->InterruptNonMeleeSpells(true); + me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 81.2f, false); } - - void AttackStart(Unit*) override - { - } - - void JustSummoned(Creature* summon) override - { - summons.Summon(summon); - if (summon->GetEntry() != NPC_HELLFIRE_SENTRY) - summon->SetInCombatWithZone(); - } - - void JustDied(Unit*) override - { - instance->SetBossState(DATA_VAZRUDEN, DONE); - } - - void MovementInform(uint32 type, uint32 id) override - { - if (type == POINT_MOTION_TYPE && id == POINT_MIDDLE) - { - me->SetVisible(false); - me->SummonCreature(NPC_VAZRUDEN, me->GetPositionX(), me->GetPositionY(), 81.2f, 5.46f); - me->SummonCreature(NPC_NAZAN, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 5.46f); - } - } - - void SummonedCreatureDies(Creature* summon, Unit*) override - { - summons.Despawn(summon); - if (summon->GetEntry() == NPC_HELLFIRE_SENTRY && summons.size() == 0) - { - Talk(SAY_INTRO); - me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 85.0f, false); - me->setActive(true); - } - else if (summons.size() == 0) - { - me->KillSelf(); - } - } - - void SummonedCreatureDespawn(Creature* summon) override - { - summons.Despawn(summon); - if (summon->GetEntry() != NPC_HELLFIRE_SENTRY) - BossAI::EnterEvadeMode(); - } - - void SetData(uint32 type, uint32 data) override - { - if (type == 0 && data == 1) - { - summons.DoZoneInCombat(NPC_HELLFIRE_SENTRY); - } - } - - void UpdateAI(uint32 /*diff*/) override - { - if (!me->IsVisible() && summons.size() == 0) - BossAI::EnterEvadeMode(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetHellfireRampartsAI(creature); } -}; -class boss_nazan : public CreatureScript -{ -public: - boss_nazan() : CreatureScript("boss_nazan") { } - - struct boss_nazanAI : public ScriptedAI + void MovementInform(uint32 type, uint32 id) override { - boss_nazanAI(Creature* creature) : ScriptedAI(creature) + if (type == POINT_MOTION_TYPE && id == POINT_MIDDLE) { - } - - void Reset() override - { - me->SetCanFly(true); - me->SetDisableGravity(true); - events.Reset(); - } - - void EnterEvadeMode(EvadeReason /*why*/) override - { - me->DespawnOrUnsummon(1); - } - - void JustEngagedWith(Unit*) override - { - events.ScheduleEvent(EVENT_CHANGE_POS, 0); - events.ScheduleEvent(EVENT_SPELL_FIREBALL, 5000); - } - - void AttackStart(Unit* who) override - { - if (me->IsLevitating()) - me->Attack(who, true); - else - ScriptedAI::AttackStart(who); - } - - void DoAction(int32 param) override - { - if (param == ACTION_FLY_DOWN) + me->SetCanFly(false); + me->SetDisableGravity(false); + me->SetReactState(REACT_AGGRESSIVE); + scheduler.CancelGroup(GROUP_PHASE_1); + me->GetMotionMaster()->MoveChase(me->GetVictim()); + scheduler.Schedule(5s, GROUP_PHASE_2, [this](TaskContext context) { - Talk(EMOTE_NAZAN); - events.Reset(); - me->SetReactState(REACT_PASSIVE); - me->InterruptNonMeleeSpells(true); - me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 81.2f, false); + DoCastVictim(SPELL_CONE_OF_FIRE); + context.Repeat(12s); + }).Schedule(6s, GROUP_PHASE_2, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_FIREBALL); + context.Repeat(4s, 6s); + }); + if (IsHeroic()) + { + scheduler.Schedule(10s, GROUP_PHASE_2, [this](TaskContext context) + { + DoCastSelf(SPELL_BELLOWING_ROAR); + context.Repeat(30s); + }); } } - - void MovementInform(uint32 type, uint32 id) override - { - if (type == POINT_MOTION_TYPE && id == POINT_MIDDLE) - { - me->SetCanFly(false); - me->SetDisableGravity(false); - me->SetReactState(REACT_AGGRESSIVE); - events.ScheduleEvent(EVENT_RESTORE_COMBAT, 1); - events.ScheduleEvent(EVENT_SPELL_CONE_OF_FIRE, 5000); - events.ScheduleEvent(EVENT_SPELL_FIREBALL, 6000); - if (IsHeroic()) - events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 10000); - } - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_FIREBALL: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_FIREBALL, false); - events.ScheduleEvent(EVENT_SPELL_FIREBALL, urand(4000, 6000)); - break; - case EVENT_CHANGE_POS: - me->GetMotionMaster()->MovePoint(POINT_FLIGHT, NazanPos[urand(0, 2)], false); - events.DelayEvents(7000); - events.ScheduleEvent(EVENT_CHANGE_POS, 30000); - break; - case EVENT_RESTORE_COMBAT: - me->GetMotionMaster()->MoveChase(me->GetVictim()); - break; - case EVENT_SPELL_CONE_OF_FIRE: - me->CastSpell(me->GetVictim(), SPELL_CONE_OF_FIRE, false); - events.ScheduleEvent(EVENT_SPELL_CONE_OF_FIRE, 12000); - break; - case EVENT_SPELL_BELLOWING_ROAR: - me->CastSpell(me, SPELL_BELLOWING_ROAR, false); - events.ScheduleEvent(EVENT_SPELL_BELLOWING_ROAR, 30000); - break; - } - - if (!me->IsLevitating()) - DoMeleeAttackIfReady(); - } - - private: - EventMap events; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetHellfireRampartsAI(creature); } -}; -class boss_vazruden : public CreatureScript -{ -public: - boss_vazruden() : CreatureScript("boss_vazruden") { } - - struct boss_vazrudenAI : public ScriptedAI + void UpdateAI(uint32 /*diff*/) override { - boss_vazrudenAI(Creature* creature) : ScriptedAI(creature) { } + if (!UpdateVictim()) + return; - void Reset() override - { - events.Reset(); - _nazanCalled = false; - } - - void EnterEvadeMode(EvadeReason /*why*/) override - { - Talk(SAY_WIPE); - me->DespawnOrUnsummon(1); - } - - void JustEngagedWith(Unit*) override - { - events.ScheduleEvent(EVENT_AGGRO_TALK, 5000); - events.ScheduleEvent(EVENT_SPELL_REVENGE, 4000); - } - - void KilledUnit(Unit*) override - { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) - { - Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); - } - } - - void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override - { - if (!_nazanCalled && me->HealthBelowPctDamaged(35, damage)) - { - _nazanCalled = true; - me->CastSpell(me, SPELL_CALL_NAZAN, true); - } - } - - void JustDied(Unit*) override - { - Talk(SAY_DIE); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - switch (events.ExecuteEvent()) - { - case EVENT_AGGRO_TALK: - Talk(SAY_AGGRO); - break; - case EVENT_SPELL_REVENGE: - me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_REVENGE, SPELL_REVENGE_H), false); - events.ScheduleEvent(EVENT_SPELL_REVENGE, 6000); - break; - } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + if (!me->IsLevitating()) DoMeleeAttackIfReady(); - } - - private: - EventMap events; - bool _nazanCalled; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetHellfireRampartsAI(creature); } }; -class spell_vazruden_fireball : public SpellScriptLoader +struct boss_vazruden : public BossAI { -public: - spell_vazruden_fireball() : SpellScriptLoader("spell_vazruden_fireball") { } - - class spell_vazruden_fireball_SpellScript : public SpellScript + boss_vazruden(Creature* creature) : BossAI(creature, DATA_VAZRUDEN) { - PrepareSpellScript(spell_vazruden_fireball_SpellScript); - - void HandleScriptEffect(SpellEffIndex /*effIndex*/) + scheduler.SetValidator([this] { - if (Unit* target = GetHitUnit()) - target->CastSpell(target, SPELL_SUMMON_LIQUID_FIRE, true); - } + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_vazruden_fireball_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + void Reset() override { - return new spell_vazruden_fireball_SpellScript(); + _nazanCalled = false; + } + + void EnterEvadeMode(EvadeReason /*why*/) override + { + Talk(SAY_WIPE); + me->DespawnOrUnsummon(1); + } + + void JustEngagedWith(Unit*) override + { + scheduler.Schedule(5s, [this](TaskContext /*context*/) + { + Talk(SAY_AGGRO); + }).Schedule(4s, [this](TaskContext context) + { + DoCastVictim(SPELL_REVENGE); + context.Repeat(6s); + }); + } + + void KilledUnit(Unit*) override + { + if (!_hasSpoken) + { + _hasSpoken = true; + Talk(SAY_KILL); + } + scheduler.Schedule(6s, [this](TaskContext /*context*/) + { + _hasSpoken = false; + }); + } + + void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override + { + if (!_nazanCalled && me->HealthBelowPctDamaged(35, damage)) + { + _nazanCalled = true; + DoCastSelf(SPELL_CALL_NAZAN, true); + } + } + + void JustDied(Unit*) override + { + Talk(SAY_DIE); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + scheduler.Update(diff); + DoMeleeAttackIfReady(); + } + +private: + bool _hasSpoken; + bool _nazanCalled; +}; + +class spell_vazruden_fireball : public SpellScript +{ + PrepareSpellScript(spell_vazruden_fireball); + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Unit* target = GetHitUnit()) + { + target->CastSpell(target, SPELL_SUMMON_LIQUID_FIRE, true); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_vazruden_fireball::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT); } }; -class spell_vazruden_call_nazan : public SpellScriptLoader +class spell_vazruden_call_nazan : public SpellScript { -public: - spell_vazruden_call_nazan() : SpellScriptLoader("spell_vazruden_call_nazan") { } + PrepareSpellScript(spell_vazruden_call_nazan); - class spell_vazruden_call_nazan_SpellScript : public SpellScript + void HandleScriptEffect(SpellEffIndex /*effIndex*/) { - PrepareSpellScript(spell_vazruden_call_nazan_SpellScript); - - void HandleScriptEffect(SpellEffIndex /*effIndex*/) + if (Unit* target = GetHitUnit()) { - if (Unit* target = GetHitUnit()) - target->GetAI()->DoAction(ACTION_FLY_DOWN); + target->GetAI()->DoAction(ACTION_FLY_DOWN); } + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_vazruden_call_nazan_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override + void Register() override { - return new spell_vazruden_call_nazan_SpellScript(); + OnEffectHitTarget += SpellEffectFn(spell_vazruden_call_nazan::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); } }; void AddSC_boss_vazruden_the_herald() { - new boss_vazruden_the_herald(); - new boss_vazruden(); - new boss_nazan(); - new spell_vazruden_fireball(); - new spell_vazruden_call_nazan(); + RegisterHellfireRampartsCreatureAI(boss_vazruden_the_herald); + RegisterHellfireRampartsCreatureAI(boss_vazruden); + RegisterHellfireRampartsCreatureAI(boss_nazan); + RegisterSpellScript(spell_vazruden_fireball); + RegisterSpellScript(spell_vazruden_call_nazan); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp index 42e1c1519..4718cc6fb 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp @@ -38,129 +38,113 @@ enum Spells enum Misc { - NPC_HELLFIRE_WATCHER = 17309, - - EVENT_MORTAL_WOUND = 1, - EVENT_SURGE = 2, - EVENT_RETALIATION = 3, - EVENT_KILL_TALK = 4, - EVENT_CHECK_HEALTH = 5 + NPC_HELLFIRE_WATCHER = 17309 }; -class boss_watchkeeper_gargolmar : public CreatureScript +struct boss_watchkeeper_gargolmar : public BossAI { -public: - boss_watchkeeper_gargolmar() : CreatureScript("boss_watchkeeper_gargolmar") { } - - struct boss_watchkeeper_gargolmarAI : public BossAI + boss_watchkeeper_gargolmar(Creature* creature) : BossAI(creature, DATA_WATCHKEEPER_GARGOLMAR) { - boss_watchkeeper_gargolmarAI(Creature* creature) : BossAI(creature, DATA_WATCHKEEPER_GARGOLMAR) + _taunted = false; + scheduler.SetValidator([this] { - _taunted = false; - } - - void Reset() override - { - BossAI::Reset(); - } - - void JustEngagedWith(Unit* who) override - { - Talk(SAY_AGGRO); - BossAI::JustEngagedWith(who); - events.ScheduleEvent(EVENT_MORTAL_WOUND, 5000); - events.ScheduleEvent(EVENT_SURGE, 3000); - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - events.ScheduleEvent(EVENT_RETALIATION, 1000); - } - - void MoveInLineOfSight(Unit* who) override - { - if (!_taunted) - { - if (who->GetTypeId() == TYPEID_PLAYER) - { - _taunted = true; - Talk(SAY_TAUNT); - } - } - - BossAI::MoveInLineOfSight(who); - } - - void KilledUnit(Unit*) override - { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) - { - Talk(SAY_KILL); - events.ScheduleEvent(EVENT_KILL_TALK, 6000); - } - } - - void JustDied(Unit* killer) override - { - Talk(SAY_DIE); - BossAI::JustDied(killer); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_MORTAL_WOUND: - me->CastSpell(me->GetVictim(), SPELL_MORTAL_WOUND, false); - events.ScheduleEvent(EVENT_MORTAL_WOUND, 8000); - break; - case EVENT_SURGE: - Talk(SAY_SURGE); - if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0)) - me->CastSpell(target, SPELL_SURGE, false); - events.ScheduleEvent(EVENT_SURGE, 11000); - break; - case EVENT_RETALIATION: - if (me->HealthBelowPct(20)) - { - me->CastSpell(me, SPELL_RETALIATION, false); - events.ScheduleEvent(EVENT_RETALIATION, 30000); - } - else - events.ScheduleEvent(EVENT_RETALIATION, 500); - break; - case EVENT_CHECK_HEALTH: - if (me->HealthBelowPct(50)) - { - Talk(SAY_HEAL); - std::list clist; - me->GetCreaturesWithEntryInRange(clist, 100.0f, NPC_HELLFIRE_WATCHER); - for (std::list::const_iterator itr = clist.begin(); itr != clist.end(); ++itr) - (*itr)->AI()->SetData(NPC_HELLFIRE_WATCHER, 0); - break; - } - events.ScheduleEvent(EVENT_CHECK_HEALTH, 500); - break; - } - - DoMeleeAttackIfReady(); - } - - private: - bool _taunted; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetHellfireRampartsAI(creature); + return !me->HasUnitState(UNIT_STATE_CASTING); + }); } + + void Reset() override + { + _Reset(); + ScheduleHealthCheckEvent(50, [&]{ + Talk(SAY_HEAL); + std::list clist; + me->GetCreaturesWithEntryInRange(clist, 100.0f, NPC_HELLFIRE_WATCHER); + for (std::list::const_iterator itr = clist.begin(); itr != clist.end(); ++itr) + { + (*itr)->AI()->SetData(NPC_HELLFIRE_WATCHER, 0); + } + }); + + ScheduleHealthCheckEvent(20, [&]{ + DoCastSelf(SPELL_RETALIATION); + scheduler.Schedule(30s, [this](TaskContext context) + { + DoCastSelf(SPELL_RETALIATION); + context.Repeat(30s); + }); + }); + } + + void JustEngagedWith(Unit* /*who*/) override + { + Talk(SAY_AGGRO); + _JustEngagedWith(); + scheduler.Schedule(5s, [this] (TaskContext context) + { + DoCastVictim(SPELL_MORTAL_WOUND); + context.Repeat(8s); + }).Schedule(3s, [this](TaskContext context) + { + Talk(SAY_SURGE); + if (Unit* target = SelectTarget(SelectTargetMethod::MinDistance, 0)) + { + me->CastSpell(target, SPELL_SURGE); + } + context.Repeat(11s); + }); + } + + void MoveInLineOfSight(Unit* who) override + { + if (!_taunted) + { + if (who->GetTypeId() == TYPEID_PLAYER) + { + _taunted = true; + Talk(SAY_TAUNT); + } + } + BossAI::MoveInLineOfSight(who); + } + + void KilledUnit(Unit*) override + { + if (!_hasSpoken) + { + _hasSpoken = true; + Talk(SAY_KILL); + } + scheduler.Schedule(6s, [this](TaskContext /*context*/) + { + _hasSpoken = false; + }); + } + + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DIE); + _JustDied(); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + scheduler.Update(diff); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + DoMeleeAttackIfReady(); + } + +private: + bool _taunted; + bool _hasSpoken; + }; void AddSC_boss_watchkeeper_gargolmar() { - new boss_watchkeeper_gargolmar(); + RegisterHellfireRampartsCreatureAI(boss_watchkeeper_gargolmar); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h index 35c71f723..0f6109880 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/hellfire_ramparts.h @@ -52,4 +52,6 @@ inline AI* GetHellfireRampartsAI(T* obj) return GetInstanceAI(obj, HellfireRampartsScriptName); } +#define RegisterHellfireRampartsCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetHellfireRampartsAI) + #endif diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp index f41f81900..52136278e 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp @@ -20,292 +20,295 @@ #include "ScriptedCreature.h" #include "shattered_halls.h" -enum eGrandWarlockNethekurse +enum Texts { - SAY_INTRO = 0, - SAY_PEON_ATTACKED = 1, - SAY_PEON_DIES = 2, - SAY_TAUNT = 3, - SAY_AGGRO = 4, - SAY_SLAY = 5, - SAY_DIE = 6, + SAY_SKIP_INTRO = 0, + SAY_INTRO_2 = 1, + SAY_PEON_ATTACKED = 2, + SAY_PEON_DIES = 3, + SAY_SHADOW_SEAR = 4, + SAY_SHADOW_FISSURE = 5, + SAY_DEATH_COIL = 6, + SAY_SLAY = 7, + SAY_DIE = 8 +}; - SPELL_DEATH_COIL_N = 30500, - SPELL_DEATH_COIL_H = 35954, - SPELL_DARK_SPIN = 30502, - SPELL_SHADOW_FISSURE = 30496, - SPELL_SHADOW_CLEAVE_N = 30495, - SPELL_SHADOW_SLAM_H = 35953, +enum Spells +{ + SPELL_DEATH_COIL = 30500, + SPELL_DARK_SPIN = 30502, + SPELL_SHADOW_FISSURE = 30496, + SPELL_SHADOW_CLEAVE = 30495, - // Spells used exclusively in RP - SPELL_SHADOW_SEAR = 30735, - SPELL_DEATH_COIL = 30741, + SPELL_SHADOW_SEAR = 30735, + SPELL_DEATH_COIL_RP = 30741, + SPELL_SHADOW_FISSURE_RP = 30745, + SPELL_LESSER_SHADOW_FISSURE = 30744 +}; +enum Events +{ EVENT_INTRO = 1, - EVENT_SPELL_DEATH_COIL = 2, - EVENT_SPELL_SHADOW_FISSURE = 3, - EVENT_SPELL_CLEAVE = 4, - EVENT_CHECK_HEALTH = 5, - EVENT_START_ATTACK = 6, + EVENT_START_ATTACK = 2, EVENT_STAGE_NONE = 0, EVENT_STAGE_INTRO = 1, EVENT_STAGE_TAUNT = 2, - EVENT_STAGE_MAIN = 3, + EVENT_STAGE_MAIN = 3 +}; +enum Data +{ SETDATA_DATA = 1, SETDATA_PEON_AGGRO = 1, SETDATA_PEON_DEATH = 2 }; -// ######################################################## -// Grand Warlock Nethekurse -// ######################################################## - -class boss_grand_warlock_nethekurse : public CreatureScript +enum Groups { -public: - boss_grand_warlock_nethekurse() : CreatureScript("boss_grand_warlock_nethekurse") { } + GROUP_RP = 0 +}; - struct boss_grand_warlock_nethekurseAI : public BossAI +enum Actions +{ + ACTION_START_INTRO = 0, + ACTION_CANCEL_INTRO = 1, + ACTION_START_COMBAT = 2, +}; + +enum Creatures +{ + NPC_PEON = 17083 +}; + +struct PeonRoleplay +{ + uint32 spellId; + uint8 textId; +}; + +PeonRoleplay PeonRoleplayData[3] = +{ + { SPELL_DEATH_COIL_RP, SAY_DEATH_COIL }, + { SPELL_SHADOW_FISSURE_RP, SAY_SHADOW_FISSURE }, + { SPELL_SHADOW_SEAR, SAY_SHADOW_SEAR } +}; + +struct boss_grand_warlock_nethekurse : public BossAI +{ + boss_grand_warlock_nethekurse(Creature* creature) : BossAI(creature, DATA_NETHEKURSE) { - boss_grand_warlock_nethekurseAI(Creature* creature) : BossAI(creature, DATA_NETHEKURSE) { } - - EventMap events2; - void Reset() override + scheduler.SetValidator([this] { - EventStage = EVENT_STAGE_NONE; - _Reset(); - events2.Reset(); + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void Reset() override + { + ScheduleHealthCheckEvent(25, [&] { + DoCastSelf(SPELL_DARK_SPIN); + }); + + instance->SetBossState(DATA_NETHEKURSE, NOT_STARTED); + } + + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DIE); + _JustDied(); + } + + void SetData(uint32 data, uint32 value) override + { + if (data != SETDATA_DATA) + return; + + if (value == SETDATA_PEON_AGGRO && PeonEngagedCount <= 4) + { + Talk(SAY_PEON_ATTACKED); } - - void JustDied(Unit* /*killer*/) override + else if (value == SETDATA_PEON_DEATH && PeonKilledCount <= 4) { - Talk(SAY_DIE); - _JustDied(); - } + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveIdle(); + me->SetFacingTo(4.572762489318847656f); - void SetData(uint32 data, uint32 value) override - { - if (data != SETDATA_DATA) - return; - - switch (value) + scheduler.Schedule(500ms, GROUP_RP, [this](TaskContext /*context*/) { - case SETDATA_PEON_AGGRO: - if (PeonEngagedCount >= 4) - return; + me->HandleEmoteCommand(EMOTE_ONESHOT_APPLAUD); + me->GetMotionMaster()->Initialize(); + Talk(SAY_PEON_DIES); - if (EventStage < EVENT_STAGE_TAUNT) - Talk(SAY_PEON_ATTACKED); - break; - case SETDATA_PEON_DEATH: - if (PeonKilledCount >= 4) - return; - - if (EventStage < EVENT_STAGE_TAUNT) - Talk(SAY_PEON_DIES); - - if (++PeonKilledCount == 4) - events2.ScheduleEvent(EVENT_START_ATTACK, 5000); - break; - } - } - - void AttackStart(Unit* who) override - { - if (EventStage < EVENT_STAGE_MAIN) - return; - - if (me->Attack(who, true)) - { - DoStartMovement(who); - } - } - - void MoveInLineOfSight(Unit* who) override - { - if (me->IsWithinDistInMap(who, 30.0f)) - { - if (who->GetTypeId() != TYPEID_PLAYER) - return; - - if (EventStage == EVENT_STAGE_NONE && PeonKilledCount < 4) + if (++PeonKilledCount == 4) { - events2.ScheduleEvent(EVENT_INTRO, 90000); - Talk(SAY_INTRO); - EventStage = EVENT_STAGE_INTRO; - instance->SetBossState(DATA_NETHEKURSE, IN_PROGRESS); - me->SetInCombatWithZone(); - } - else if (PeonKilledCount >= 4) - { - events2.ScheduleEvent(EVENT_START_ATTACK, 1000); - instance->SetBossState(DATA_NETHEKURSE, IN_PROGRESS); - me->SetInCombatWithZone(); - } - } - - if (EventStage < EVENT_STAGE_MAIN) - return; - - ScriptedAI::MoveInLineOfSight(who); - } - - void JustEngagedWith(Unit* /*who*/) override - { - } - - void KilledUnit(Unit* /*victim*/) override - { - Talk(SAY_SLAY); - } - - void UpdateAI(uint32 diff) override - { - events2.Update(diff); - uint32 eventId = events2.ExecuteEvent(); - - if (EventStage < EVENT_STAGE_MAIN && instance->GetBossState(DATA_NETHEKURSE) == IN_PROGRESS) - { - if (eventId == EVENT_INTRO) - { - Talk(SAY_TAUNT); - EventStage = EVENT_STAGE_TAUNT; - me->CastSpell(me, SPELL_SHADOW_SEAR, false); - } - else if (eventId == EVENT_START_ATTACK) - { - Talk(SAY_AGGRO); - EventStage = EVENT_STAGE_MAIN; - if (Unit* target = me->SelectNearestPlayer(50.0f)) + Talk(SAY_INTRO_2); + DoAction(ACTION_CANCEL_INTRO); + if (Unit* target = me->SelectNearestPlayer(80.0f)) + { AttackStart(target); + } + } + }); + } + } - events.ScheduleEvent(EVENT_SPELL_DEATH_COIL, 20000); - events.ScheduleEvent(EVENT_SPELL_SHADOW_FISSURE, 8000); - events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000); - return; + void IntroRP() + { + scheduler.Schedule(500ms, GROUP_RP, [this](TaskContext context) + { + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveIdle(); + me->SetFacingTo(4.572762489318847656f); + + scheduler.Schedule(500ms, GROUP_RP, [this](TaskContext /*context*/) + { + scheduler.Schedule(2500ms, GROUP_RP, [this](TaskContext /*context*/) + { + PeonRoleplay roleplayData = Acore::Containers::SelectRandomContainerElement(PeonRoleplayData); + DoCast(me, roleplayData.spellId); + Talk(roleplayData.textId); + me->GetMotionMaster()->Initialize(); + }); + }); + context.Repeat(16400ms, 28500ms); + }); + } + + void JustEngagedWith(Unit* who) override + { + if (who->GetEntry() == NPC_PEON) + { + return; + } + + _JustEngagedWith(); + DoAction(ACTION_CANCEL_INTRO); + + scheduler.CancelAll(); + + scheduler.Schedule(12150ms, 19850ms, [this](TaskContext context) + { + if (me->HealthBelowPct(90)) + { + DoCastRandomTarget(SPELL_DEATH_COIL, 0, 30.0f, true); + } + context.Repeat(); + }).Schedule(8100ms, 17300ms, [this](TaskContext context) + { + DoCastRandomTarget(SPELL_SHADOW_FISSURE, 0, 60.0f, true); + context.Repeat(8450ms, 9450ms); + }).Schedule(10950ms, 21850ms, [this](TaskContext context) + { + DoCastVictim(SPELL_SHADOW_CLEAVE); + context.Repeat(1200ms, 23900ms); + }); + + if (PeonKilledCount < 4) + { + Talk(SAY_SKIP_INTRO); + } + } + + void KilledUnit(Unit* /*victim*/) override + { + Talk(SAY_SLAY); + } + + void DoAction(int32 action) override + { + if (action == ACTION_CANCEL_INTRO) + { + scheduler.CancelGroup(GROUP_RP); + me->SetInCombatWithZone(); + return; + } + else if (action == ACTION_START_INTRO) + { + IntroRP(); + } + } + + void UpdateAI(uint32 diff) override + { + scheduler.Update(diff); + + if (!UpdateVictim()) + return; + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + if (!me->HealthBelowPct(25)) + DoMeleeAttackIfReady(); + } + +private: + uint8 PeonEngagedCount = 0; + uint8 PeonKilledCount = 0; +}; + +class spell_tsh_shadow_bolt : public SpellScript +{ + PrepareSpellScript(spell_tsh_shadow_bolt); + + void SelectRandomPlayer(WorldObject*& target) + { + if (Creature* caster = GetCaster()->ToCreature()) + { + if (Unit* randomTarget = caster->AI()->SelectTarget(SelectTargetMethod::Random, 0, 100.0f)) + { + target = randomTarget; + } + } + } + + void Register() override + { + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_tsh_shadow_bolt::SelectRandomPlayer, EFFECT_0, TARGET_UNIT_TARGET_ENEMY); + } +}; + +class spell_target_fissures : public SpellScript +{ + PrepareSpellScript(spell_target_fissures); + + void HandleEffect(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_LESSER_SHADOW_FISSURE, true); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_target_fissures::HandleEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +class at_rp_nethekurse : public OnlyOnceAreaTriggerScript +{ +public: + at_rp_nethekurse() : OnlyOnceAreaTriggerScript("at_rp_nethekurse") { } + + bool _OnTrigger(Player* player, AreaTrigger const* /*at*/) override + { + if (InstanceScript* instance = player->GetInstanceScript()) + { + if (instance->GetBossState(DATA_NETHEKURSE) != DONE && instance->GetBossState(DATA_NETHEKURSE) != IN_PROGRESS) + { + if (Creature* nethekurse = instance->GetCreature(DATA_NETHEKURSE)) + { + nethekurse->AI()->DoAction(ACTION_START_INTRO); } } - - if (!UpdateVictim()) - return; - - events.Update(diff); - if (EventStage < EVENT_STAGE_MAIN || me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_SHADOW_FISSURE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, SPELL_SHADOW_FISSURE, false); - events.RescheduleEvent(EVENT_SPELL_SHADOW_FISSURE, urand(7500, 10000)); - break; - case EVENT_SPELL_DEATH_COIL: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - me->CastSpell(target, DUNGEON_MODE(SPELL_DEATH_COIL_N, SPELL_DEATH_COIL_H), false); - events.RescheduleEvent(EVENT_SPELL_DEATH_COIL, urand(15000, 20000)); - break; - case EVENT_SPELL_CLEAVE: - me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_SHADOW_CLEAVE_N, SPELL_SHADOW_SLAM_H), false); - events.RescheduleEvent(EVENT_SPELL_CLEAVE, urand(6000, 8000)); - break; - case EVENT_CHECK_HEALTH: - if (me->HealthBelowPct(21)) - { - events.Reset(); - me->CastSpell(me, SPELL_DARK_SPIN, false); - } - else - { - events.RescheduleEvent(EVENT_CHECK_HEALTH, 1000); - } - break; - } - - if (!me->HealthBelowPct(21)) - DoMeleeAttackIfReady(); } - - private: - uint8 PeonEngagedCount = 0; - uint8 PeonKilledCount = 0; - uint8 EventStage; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetShatteredHallsAI(creature); - } -}; - -class spell_tsh_shadow_sear : public SpellScriptLoader -{ -public: - spell_tsh_shadow_sear() : SpellScriptLoader("spell_tsh_shadow_sear") { } - - class spell_tsh_shadow_sear_AuraScript : public AuraScript - { - PrepareAuraScript(spell_tsh_shadow_sear_AuraScript); - - void CalculateDamageAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) - { - amount = 1000; - } - - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_tsh_shadow_sear_AuraScript::CalculateDamageAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_tsh_shadow_sear_AuraScript(); - } -}; - -class spell_tsh_shadow_bolt : public SpellScriptLoader -{ -public: - spell_tsh_shadow_bolt() : SpellScriptLoader("spell_tsh_shadow_bolt") { } - - class spell_tsh_shadow_bolt_SpellScript : public SpellScript - { - PrepareSpellScript(spell_tsh_shadow_bolt_SpellScript); - - void SelectRandomPlayer(WorldObject*& target) - { - if (Creature* caster = GetCaster()->ToCreature()) - { - std::list playerList; - Map::PlayerList const& players = caster->GetMap()->GetPlayers(); - for (auto itr = players.begin(); itr != players.end(); ++itr) - if (Player* player = itr->GetSource()->ToPlayer()) - if (player->IsWithinDist(caster, 100.0f) && player->IsAlive()) - playerList.push_back(player); - - if (!playerList.empty()) - target = Acore::Containers::SelectRandomContainerElement(playerList); - } - } - - void Register() override - { - OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_tsh_shadow_bolt_SpellScript::SelectRandomPlayer, EFFECT_0, TARGET_UNIT_TARGET_ENEMY); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_tsh_shadow_bolt_SpellScript(); + return false; } }; void AddSC_boss_grand_warlock_nethekurse() { - new boss_grand_warlock_nethekurse(); - new spell_tsh_shadow_sear(); - new spell_tsh_shadow_bolt(); + RegisterShatteredHallsCreatureAI(boss_grand_warlock_nethekurse); + RegisterSpellScript(spell_tsh_shadow_bolt); + RegisterSpellScript(spell_target_fissures); + new at_rp_nethekurse(); } diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp index d71a2dad5..46d074148 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp @@ -17,6 +17,8 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" +#include "TaskScheduler.h" #include "shattered_halls.h" enum Spells @@ -24,249 +26,264 @@ enum Spells SPELL_BLAST_WAVE = 30600, SPELL_FEAR = 30584, SPELL_THUNDERCLAP = 30633, - SPELL_BURNING_MAUL_N = 30598, - SPELL_BURNING_MAUL_H = 36056, + SPELL_BEATDOWN = 30618, + SPELL_BURNING_MAUL = 30598 }; -enum Creatures +enum Equip { - NPC_LEFT_HEAD = 19523, - NPC_RIGHT_HEAD = 19524 + EQUIP_STANDARD = 1, + EQUIP_BURNING_MAUL = 2 +}; + +enum HeadYells +{ + SAY_ON_AGGRO = 0, + SAY_ON_AGGRO_2, + SAY_ON_AGGRO_3, + SAY_ON_BEATDOWN, + SAY_ON_BEATDOWN_2, + SAY_ON_BEATDOWN_3, + SAY_ON_KILL, + SAY_ON_KILL_2, + SAY_ON_DEATH }; enum Misc { - EMOTE_ENRAGE = 0, - - SETDATA_DATA = 1, - SETDATA_YELL = 1 + EMOTE_BURNING_MAUL = 0, + DATA_BURNING_MAUL_END = 1 }; -enum Events +enum Phase { - EVENT_AGGRO_YELL_1 = 1, - EVENT_AGGRO_YELL_2 = 2, - EVENT_AGGRO_YELL_3 = 3, - - EVENT_THREAT_YELL_L_1 = 4, - EVENT_THREAT_YELL_L_2 = 5, - EVENT_THREAT_YELL_L_3 = 6, - - EVENT_THREAT_YELL_R_1 = 7, - - EVENT_KILL_YELL_LEFT = 8, - EVENT_KILL_YELL_RIGHT = 9, - EVENT_DEATH_YELL = 10, - - EVENT_SPELL_FEAR = 20, - EVENT_SPELL_BURNING_MAUL = 21, - EVENT_SPELL_THUNDER_CLAP = 22, - EVENT_RESET_THREAT = 23, - EVENT_SPELL_BLAST_WAVE = 24 + GROUP_NON_BURNING_PHASE = 0, + GROUP_BURNING_PHASE = 1, + GROUP_FULL_PHASE = 2 }; -// ######################################################## -// Warbringer_Omrogg -// ######################################################## - -class boss_warbringer_omrogg : public CreatureScript +struct boss_warbringer_omrogg : public BossAI { -public: - boss_warbringer_omrogg() : CreatureScript("boss_warbringer_omrogg") { } - - struct boss_warbringer_omroggAI : public BossAI + boss_warbringer_omrogg(Creature* creature) : BossAI(creature, DATA_OMROGG) { - boss_warbringer_omroggAI(Creature* creature) : BossAI(creature, DATA_OMROGG) + scheduler.SetValidator([this] { - } - - EventMap events2; - - Creature* GetLeftHead() - { - return summons.GetCreatureWithEntry(NPC_LEFT_HEAD); - } - - Creature* GetRightHead() - { - return summons.GetCreatureWithEntry(NPC_RIGHT_HEAD); - } - - void JustEngagedWith(Unit* /*who*/) override - { - me->SummonCreature(NPC_LEFT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0); - me->SummonCreature(NPC_RIGHT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0); - - if (Creature* LeftHead = GetLeftHead()) - { - uint8 aggroYell = urand(EVENT_AGGRO_YELL_1, EVENT_AGGRO_YELL_3); - LeftHead->AI()->Talk(aggroYell - 1); - events2.ScheduleEvent(aggroYell, 3000); - } - - _JustEngagedWith(); - - events.ScheduleEvent(EVENT_SPELL_FEAR, 8000); - events.ScheduleEvent(EVENT_SPELL_BURNING_MAUL, 25000); - events.ScheduleEvent(EVENT_SPELL_THUNDER_CLAP, 15000); - events.ScheduleEvent(EVENT_RESET_THREAT, 30000); - } - - void JustSummoned(Creature* summoned) override - { - summons.Summon(summoned); - } - - void KilledUnit(Unit* /*victim*/) override - { - Creature* head = nullptr; - uint32 eventId = EVENT_KILL_YELL_LEFT; - if (urand(0, 1)) - { - head = GetLeftHead(); - eventId = EVENT_KILL_YELL_LEFT; - } - else - { - head = GetRightHead(); - eventId = EVENT_KILL_YELL_RIGHT; - } - - if (head) - head->AI()->Talk(eventId - 1); - - events2.ScheduleEvent(eventId, 3000); - } - - void JustDied(Unit* /*killer*/) override - { - Creature* LeftHead = GetLeftHead(); - Creature* RightHead = GetRightHead(); - if (!LeftHead || !RightHead) - return; - - LeftHead->DespawnOrUnsummon(5000); - RightHead->DespawnOrUnsummon(5000); - - LeftHead->AI()->Talk(EVENT_DEATH_YELL - 1); - RightHead->AI()->SetData(SETDATA_DATA, SETDATA_YELL); - - instance->SetBossState(DATA_OMROGG, DONE); - } - - void UpdateAI(uint32 diff) override - { - events2.Update(diff); - switch (uint32 eventId = events2.ExecuteEvent()) - { - case EVENT_AGGRO_YELL_1: - case EVENT_AGGRO_YELL_2: - case EVENT_AGGRO_YELL_3: - case EVENT_KILL_YELL_LEFT: - case EVENT_THREAT_YELL_L_1: - case EVENT_THREAT_YELL_L_2: - case EVENT_THREAT_YELL_L_3: - if (Creature* RightHead = GetRightHead()) - RightHead->AI()->Talk(eventId - 1); - break; - case EVENT_KILL_YELL_RIGHT: - case EVENT_THREAT_YELL_R_1: - if (Creature* LeftHead = GetLeftHead()) - LeftHead->AI()->Talk(eventId - 1); - break; - } - - if (!UpdateVictim()) - return; - - events.Update(diff); - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - switch (events.ExecuteEvent()) - { - case EVENT_SPELL_FEAR: - me->CastSpell(me, SPELL_FEAR, false); - events.ScheduleEvent(EVENT_SPELL_FEAR, 22000); - break; - case EVENT_SPELL_THUNDER_CLAP: - me->CastSpell(me, SPELL_THUNDERCLAP, false); - events.ScheduleEvent(EVENT_SPELL_THUNDER_CLAP, 25000); - break; - case EVENT_RESET_THREAT: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - { - uint8 threatYell = urand(EVENT_THREAT_YELL_L_1, EVENT_THREAT_YELL_R_1); - if (Creature* head = threatYell == EVENT_THREAT_YELL_R_1 ? GetRightHead() : GetLeftHead()) - head->AI()->Talk(threatYell - 1); - events.ScheduleEvent(threatYell, 3000); - - DoResetThreatList(); - me->AddThreat(target, 10.0f); - } - events.ScheduleEvent(EVENT_RESET_THREAT, 30000); - break; - case EVENT_SPELL_BURNING_MAUL: - Talk(EMOTE_ENRAGE); - me->CastSpell(me, DUNGEON_MODE(SPELL_BURNING_MAUL_N, SPELL_BURNING_MAUL_H), false); - events.ScheduleEvent(EVENT_SPELL_BURNING_MAUL, 40000); - events.ScheduleEvent(EVENT_SPELL_BLAST_WAVE, 15000); - events.ScheduleEvent(EVENT_SPELL_BLAST_WAVE, 20000); - break; - case EVENT_SPELL_BLAST_WAVE: - me->CastSpell(me, SPELL_BLAST_WAVE, false); - break; - } - - DoMeleeAttackIfReady(); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetShatteredHallsAI(creature); + return !me->HasUnitState(UNIT_STATE_CASTING); + }); } + + void HandleHeadTalk(HeadYells yell) + { + switch (yell) + { + case SAY_ON_AGGRO: + { + uint8 group = urand(SAY_ON_AGGRO, SAY_ON_AGGRO_3); + if (Creature* leftHead = instance->GetCreature(DATA_OMROGG_LEFT_HEAD)) + { + leftHead->AI()->Talk(group); + _headTalk.Schedule(3600ms, [this, group](TaskContext /*context*/) + { + if (Creature* rightHead = instance->GetCreature(DATA_OMROGG_RIGHT_HEAD)) + rightHead->AI()->Talk(group); + }); + } + break; + } + case SAY_ON_BEATDOWN: + { + if (Creature* leftHead = instance->GetCreature(DATA_OMROGG_LEFT_HEAD)) + { + leftHead->AI()->Talk(SAY_ON_BEATDOWN); + _headTalk.Schedule(3600ms, [this](TaskContext context) + { + if (Creature* rightHead = instance->GetCreature(DATA_OMROGG_RIGHT_HEAD)) + rightHead->AI()->Talk(SAY_ON_BEATDOWN); + context.Schedule(3600ms, [this](TaskContext context) + { + uint8 group = urand(SAY_ON_BEATDOWN_2, SAY_ON_BEATDOWN_3); + if (Creature* leftHead = instance->GetCreature(DATA_OMROGG_LEFT_HEAD)) + leftHead->AI()->Talk(group); + context.Schedule(3600ms, [this, group](TaskContext /*context*/) + { + if (Creature* rightHead = instance->GetCreature(DATA_OMROGG_RIGHT_HEAD)) + rightHead->AI()->Talk(group); + }); + }); + }); + } + break; + } + case SAY_ON_KILL: + { + uint8 group = urand(SAY_ON_KILL, SAY_ON_KILL_2); + if (Creature* leftHead = instance->GetCreature(DATA_OMROGG_LEFT_HEAD)) + leftHead->AI()->Talk(group); + _headTalk.Schedule(3600ms, [this, group](TaskContext /*context*/) + { + if (Creature* rightHead = instance->GetCreature(DATA_OMROGG_RIGHT_HEAD)) + rightHead->AI()->Talk(group); + }); + break; + } + case SAY_ON_DEATH: + { + if (Creature* leftHead = instance->GetCreature(DATA_OMROGG_LEFT_HEAD)) + leftHead->AI()->Talk(SAY_ON_DEATH); + _headTalk.Schedule(3600ms, [this](TaskContext /*context*/) + { + if (Creature* rightHead = instance->GetCreature(DATA_OMROGG_RIGHT_HEAD)) + rightHead->AI()->Talk(SAY_ON_DEATH); + }); + break; + } + default: + break; + } + } + + void SetData(uint32 data, uint32) override + { + if (data != DATA_BURNING_MAUL_END) + return; + + scheduler.CancelGroup(GROUP_BURNING_PHASE); + ScheduleNonBurningPhase(); + ScheduleBurningPhase(); + } + + void ScheduleNonBurningPhase() + { + scheduler. + Schedule(12100ms, 17300ms, GROUP_NON_BURNING_PHASE, [this](TaskContext context) + { + DoCastAOE(SPELL_THUNDERCLAP); + context.Repeat(17200ms, 24200ms); + }) + .Schedule(20s, 30s, GROUP_NON_BURNING_PHASE, [this](TaskContext context) + { + DoCastSelf(SPELL_BEATDOWN); + me->AttackStop(); + me->SetReactState(REACT_PASSIVE); + context.Schedule(200ms, GROUP_NON_BURNING_PHASE, [this](TaskContext context) + { + DoResetThreatList(); + if (Unit* newTarget = SelectTarget(SelectTargetMethod::Random, 1)) + me->AddThreat(newTarget, 2250.f); + HandleHeadTalk(SAY_ON_BEATDOWN); + context.Schedule(1200ms, GROUP_NON_BURNING_PHASE, [this](TaskContext /*context*/) + { + me->SetReactState(REACT_AGGRESSIVE); + }); + }); + context.Repeat(); + }); + } + + void ScheduleBurningPhase() + { + scheduler. + Schedule(45s, 60s, GROUP_BURNING_PHASE, [this](TaskContext context) + { + me->AttackStop(); + me->SetReactState(REACT_PASSIVE); + context.CancelGroup(GROUP_NON_BURNING_PHASE); + context.Schedule(1200ms, [this](TaskContext context) + { + DoCastAOE(SPELL_FEAR); + DoCast(SPELL_BURNING_MAUL); + context.Schedule(200ms, [this](TaskContext context) + { + Talk(EMOTE_BURNING_MAUL); + context.Schedule(2200ms, [this](TaskContext context) + { + DoResetThreatList(); + if (Unit* newTarget = SelectTarget(SelectTargetMethod::Random, 1)) + me->AddThreat(newTarget, 2250.f); + me->SetReactState(REACT_AGGRESSIVE); + context.Schedule(4850ms, 8500ms, GROUP_BURNING_PHASE, [this](TaskContext context) + { + DoCastAOE(SPELL_BLAST_WAVE); + context.Repeat(); + }); + }); + }); + }); + + }); + } + + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + _headTalk.CancelAll(); + HandleHeadTalk(SAY_ON_AGGRO); + + ScheduleNonBurningPhase(); + ScheduleBurningPhase(); + } + + void KilledUnit(Unit* victim) override + { + if (victim && victim->GetTypeId() == TYPEID_PLAYER) + HandleHeadTalk(SAY_ON_KILL); + } + + void JustDied(Unit* killer) override + { + HandleHeadTalk(SAY_ON_DEATH); + BossAI::JustDied(killer); + } + + void UpdateAI(uint32 diff) override + { + _headTalk.Update(diff); + + if (!UpdateVictim()) + return; + + scheduler.Update(diff, [this] + { + DoMeleeAttackIfReady(); + }); + } + + protected: + TaskScheduler _headTalk; }; -class npc_omrogg_heads : public CreatureScript +class spell_burning_maul : public AuraScript { -public: - npc_omrogg_heads() : CreatureScript("npc_omrogg_heads") { } + PrepareAuraScript(spell_burning_maul); - struct npc_omrogg_headsAI : public NullCreatureAI + void HandleOnRemove(AuraEffect const* /* aurEff */, AuraEffectHandleModes /* mode */) { - npc_omrogg_headsAI(Creature* creature) : NullCreatureAI(creature) { timer = 0; } - - void SetData(uint32 data, uint32 value) override + if (Unit* caster = GetCaster()) { - if (data == SETDATA_DATA && value == SETDATA_YELL) - timer = 1; - } - - void UpdateAI(uint32 diff) override - { - if (timer) + if (Creature* omrogg = caster->ToCreature()) { - timer += diff; - if (timer >= 3000) - { - timer = 0; - Talk(EVENT_DEATH_YELL - 1); - } + omrogg->LoadEquipment(EQUIP_STANDARD); + omrogg->AI()->SetData(DATA_BURNING_MAUL_END, 0); } } + } - uint32 timer; - }; - - CreatureAI* GetAI(Creature* creature) const override + void HandleOnApply(AuraEffect const* /* aurEff */, AuraEffectHandleModes /* mode */) { - return GetShatteredHallsAI(creature); + if (Unit* caster = GetCaster()) + if (Creature* omrogg = caster->ToCreature()) + omrogg->LoadEquipment(EQUIP_BURNING_MAUL); + } + + void Register() override + { + OnEffectRemove += AuraEffectRemoveFn(spell_burning_maul::HandleOnRemove, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); + OnEffectApply += AuraEffectApplyFn(spell_burning_maul::HandleOnApply, EFFECT_1, SPELL_AURA_PERIODIC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL); } }; void AddSC_boss_warbringer_omrogg() { - new boss_warbringer_omrogg(); - new npc_omrogg_heads(); + RegisterShatteredHallsCreatureAI(boss_warbringer_omrogg); + RegisterSpellScript(spell_burning_maul); } diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp index 1df447a16..71c2760f0 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp @@ -17,174 +17,305 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellScript.h" +#include "TaskScheduler.h" #include "shattered_halls.h" enum Says { - SAY_AGGRO = 0, - SAY_SLAY = 1, - SAY_DEATH = 2 + SAY_AGGRO = 0, + SAY_SLAY = 1, + SAY_DEATH = 2, + SAY_EVADE = 5 }; enum Spells { - SPELL_BLADE_DANCE = 30739, - SPELL_CHARGE = 25821, - SPELL_SPRINT = 32720, + // Blade dance + SPELL_BLADE_DANCE_TARGETING = 30738, + SPELL_BLADE_DANCE_DMG = 30739, + SPELL_BLADE_DANCE_CHARGE = 30751, + + // Warchief portal + SPELL_SUMMON_HEATHEN = 30737, + SPELL_SUMMON_REAVER = 30785, + SPELL_SUMMON_SHARPSHOOTER = 30786 }; enum Creatures { - NPC_SHATTERED_ASSASSIN = 17695, - NPC_HEARTHEN_GUARD = 17621, - NPC_SHARPSHOOTER_GUARD = 17622, - NPC_REAVER_GUARD = 17623 + NPC_SHATTERED_ASSASSIN = 17695, + NPC_BLADE_DANCE_TARGET = 20709 }; -float AssassEntrance[3] = { 275.136f, -84.29f, 2.3f }; // y -8 -float AssassExit[3] = { 184.233f, -84.29f, 2.3f }; // y -8 -float AddsEntrance[3] = { 306.036f, -84.29f, 1.93f }; - -enum Misc +enum PortalData { - EVENT_CHECK_ROOM = 1, - EVENT_SUMMON_ADDS = 2, - EVENT_SUMMON_ASSASSINS = 3, - EVENT_SPELL_CHARGE = 4, - EVENT_MOVE_TO_NEXT_POINT = 5, - EVENT_BLADE_DANCE = 6, - EVENT_FINISH_BLADE_DANCE = 7 + DATA_START_FIGHT = 1, + DATA_RESET_FIGHT = 2 }; -class boss_warchief_kargath_bladefist : public CreatureScript +std::array const summonSpells = { SPELL_SUMMON_HEATHEN, SPELL_SUMMON_REAVER, SPELL_SUMMON_SHARPSHOOTER }; +std::vector const assassinsPos = +{ + { 172.68164f, -80.65692f, 2.0834563f, 5.4279f }, + { 167.8295f, -86.55783f, 1.9949634f, 0.8118f }, + { 287.0375f, -88.17879f, 2.0663502f, 3.2490f }, + { 292.1491f, -82.25267f, 1.9973913f, 5.8568f } +}; + +Position const kargathRespawnPos = { 231.25f, -83.6449f, 5.02341f }; + +struct boss_warchief_kargath_bladefist : public BossAI +{ + boss_warchief_kargath_bladefist(Creature* creature) : BossAI(creature, DATA_KARGATH) + { + scheduler.SetValidator([this] + { + return !me->HasUnitState(UNIT_STATE_CASTING); + }); + } + + void InitializeAI() override + { + BossAI::InitializeAI(); + if (instance) + { + if (Creature* executioner = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXECUTIONER))) + { + executioner->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + } + } + } + + void JustSummoned(Creature* summon) override + { + summons.Summon(summon); + } + + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override + { + if (summon) + { + summon->SetVisible(false); + scheduler.Schedule(20s, [summon](TaskContext /*context*/) + { + if (summon) + { + summon->Respawn(true); + summon->SetVisible(true); + } + }); + } + } + + void RespawnAssassins() + { + for (Position const& summonPos : assassinsPos) + me->SummonCreature(NPC_SHATTERED_ASSASSIN, summonPos); + } + + void Reset() override + { + BossAI::Reset(); + if (Creature* warchiefPortal = instance->GetCreature(DATA_WARCHIEF_PORTAL)) + warchiefPortal->AI()->SetData(DATA_RESET_FIGHT, 0); + _danceCount = 0; + } + + void JustDied(Unit* killer) override + { + Talk(SAY_DEATH); + BossAI::JustDied(killer); + if (instance) + { + if (Creature* executioner = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXECUTIONER))) + { + executioner->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + } + } + } + + void JustEngagedWith(Unit* who) override + { + Talk(SAY_AGGRO); + BossAI::JustEngagedWith(who); + if (Creature* warchiefPortal = instance->GetCreature(DATA_WARCHIEF_PORTAL)) + warchiefPortal->AI()->SetData(DATA_START_FIGHT, 0); + RespawnAssassins(); + scheduler + .Schedule(30s, [this](TaskContext context) + { + me->SetReactState(REACT_PASSIVE); + _danceCount = 0; + DoCastAOE(SPELL_BLADE_DANCE_TARGETING); + context.Repeat(32850ms, 41350ms); + }); + } + + void KilledUnit(Unit* victim) override + { + if (victim && victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } + + void MovementInform(uint32 type, uint32 /*id*/) override + { + if (type != POINT_MOTION_TYPE) + return; + + if (_danceCount < 8) + { + _danceCount++; + scheduler.Schedule(100ms, [this](TaskContext /*context*/) + { + DoCastAOE(SPELL_BLADE_DANCE_TARGETING); + }); + } + else + me->SetReactState(REACT_AGGRESSIVE); + } + + bool IsInRoom() + { + if (me->GetExactDist2d(kargathRespawnPos) >= 42.f) + return false; + return true; + } + + void UpdateAI(uint32 diff) override + { + if (!IsInRoom()) + { + Talk(SAY_EVADE); + EnterEvadeMode(); + return; + } + + if (!UpdateVictim()) + return; + + scheduler.Update(diff, [this] + { + DoMeleeAttackIfReady(); + }); + } + + protected: + uint8 _danceCount; +}; + +struct npc_warchief_portal : public ScriptedAI { public: - boss_warchief_kargath_bladefist() : CreatureScript("boss_warchief_kargath_bladefist") { } + npc_warchief_portal(Creature* creature) : ScriptedAI(creature) { } - struct boss_warchief_kargath_bladefistAI : public BossAI + void UpdateAI(uint32 diff) override { - boss_warchief_kargath_bladefistAI(Creature* creature) : BossAI(creature, DATA_KARGATH) { } + _scheduler.Update(diff); + } - void InitializeAI() override + void JustSummoned(Creature* creature) override + { + InstanceScript* instance = me->GetInstanceScript(); + if (!instance) + return; + + if (Creature* kargath = instance->GetCreature(DATA_KARGATH)) + kargath->AI()->JustSummoned(creature); + } + + void SetData(uint32 type, uint32 /*data*/) override + { + if (type == DATA_START_FIGHT) { - BossAI::InitializeAI(); - if (instance) - if (Creature* executioner = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXECUTIONER))) - executioner->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + _scheduler.Schedule(20600ms, [this](TaskContext context) + { + DoCastSelf(summonSpells[context.GetRepeatCounter() % 3]); + context.Repeat(); + }); } - void JustDied(Unit* /*killer*/) override + if (type == DATA_RESET_FIGHT) { - Talk(SAY_DEATH); - _JustDied(); - - if (instance) - if (Creature* executioner = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXECUTIONER))) - executioner->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + _scheduler.CancelAll(); } + } - void JustEngagedWith(Unit* /*who*/) override - { - Talk(SAY_AGGRO); - _JustEngagedWith(); +protected: + TaskScheduler _scheduler; +}; - events.ScheduleEvent(EVENT_CHECK_ROOM, 5000); - events.ScheduleEvent(EVENT_SUMMON_ADDS, 30000); - events.ScheduleEvent(EVENT_SUMMON_ASSASSINS, 5000); - events.ScheduleEvent(EVENT_BLADE_DANCE, 30000); - events.ScheduleEvent(EVENT_SPELL_CHARGE, 0); - } +class spell_blade_dance_targeting : public SpellScript +{ + PrepareSpellScript(spell_blade_dance_targeting); - void JustSummoned(Creature* summon) override - { - if (summon->GetEntry() != NPC_SHATTERED_ASSASSIN) - summon->AI()->AttackStart(SelectTarget(SelectTargetMethod::Random, 0)); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_BLADE_DANCE_CHARGE, SPELL_BLADE_DANCE_DMG }); + } - summons.Summon(summon); - } + void FilterTargets(std::list& targets) + { + Unit* caster = GetCaster(); + if (!caster) + return; - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); - } - - void MovementInform(uint32 type, uint32 id) override - { - if (type != POINT_MOTION_TYPE || id != 1) - return; - - me->CastSpell(me, SPELL_BLADE_DANCE, true); - events.ScheduleEvent(EVENT_MOVE_TO_NEXT_POINT, 0); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - switch (events.ExecuteEvent()) + targets.remove_if([&](WorldObject* target) -> bool { - case EVENT_CHECK_ROOM: - if (me->GetPositionX() > 255 || me->GetPositionX() < 205) - { - EnterEvadeMode(); - return; - } - events.ScheduleEvent(EVENT_CHECK_ROOM, 5000); - break; - case EVENT_SUMMON_ASSASSINS: - me->SummonCreature(NPC_SHATTERED_ASSASSIN, AssassEntrance[0], AssassEntrance[1] + 8, AssassEntrance[2], 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - me->SummonCreature(NPC_SHATTERED_ASSASSIN, AssassEntrance[0], AssassEntrance[1] - 8, AssassEntrance[2], 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - me->SummonCreature(NPC_SHATTERED_ASSASSIN, AssassExit[0], AssassExit[1] + 8, AssassExit[2], 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - me->SummonCreature(NPC_SHATTERED_ASSASSIN, AssassExit[0], AssassExit[1] - 8, AssassExit[2], 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - break; - case EVENT_SUMMON_ADDS: - for (uint8 i = 0; i < 2; ++i) - me->SummonCreature(NPC_HEARTHEN_GUARD + urand(0, 2), AddsEntrance[0], AddsEntrance[1], AddsEntrance[2], 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + float dist = caster->GetDistance2d(target); + // Do not target dummies that are too close or too far away + if (dist < 5.f || dist > 16.f) + return true; + // Do not target anything that is not a target dummy + if (target->GetEntry() != NPC_BLADE_DANCE_TARGET) + return true; - events.ScheduleEvent(EVENT_SUMMON_ADDS, 30000); - break; - case EVENT_BLADE_DANCE: - events.DelayEvents(10001); - events.ScheduleEvent(EVENT_BLADE_DANCE, 40000); - events.ScheduleEvent(EVENT_MOVE_TO_NEXT_POINT, 0); - events.ScheduleEvent(EVENT_FINISH_BLADE_DANCE, 10000); - events.SetPhase(1); - me->CastSpell(me, SPELL_SPRINT, true); - break; - case EVENT_MOVE_TO_NEXT_POINT: - { - float x = 210 + frand(0.0f, 35.0f); - float y = -65.0f - frand(0.0f, 35.0f); - me->GetMotionMaster()->MovePoint(1, x, y, me->GetPositionZ()); - break; - } - case EVENT_FINISH_BLADE_DANCE: - events.SetPhase(0); - me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MoveChase(me->GetVictim()); - if (IsHeroic()) - events.ScheduleEvent(EVENT_SPELL_CHARGE, 3000); - break; - case EVENT_SPELL_CHARGE: - me->CastSpell(me->GetVictim(), SPELL_CHARGE, false); - break; - } + return false; + }); - if (!events.IsInPhase(1)) - DoMeleeAttackIfReady(); + std::list targets2 = targets; + + targets.remove_if([&](WorldObject* target) -> bool + { + if (target->SelectNearestPlayer(15.f)) + return false; + return true; + }); + + Acore::Containers::RandomResize(targets2, 1); + + if (urand(0, 2)) + { + if (targets.empty()) + targets = targets2; + else + Acore::Containers::RandomResize(targets, 1); } - }; + else + targets = targets2; + } - CreatureAI* GetAI(Creature* creature) const override + void HandleOnHit() { - return GetShatteredHallsAI(creature); + Unit* caster = GetCaster(); + Unit* target = GetHitUnit(); + if (!caster || !target) + return; + + caster->CastSpell(target, SPELL_BLADE_DANCE_CHARGE, true); + caster->CastSpell(target, SPELL_BLADE_DANCE_DMG, true); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_blade_dance_targeting::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENTRY); + OnHit += SpellHitFn(spell_blade_dance_targeting::HandleOnHit); } }; void AddSC_boss_warchief_kargath_bladefist() { - new boss_warchief_kargath_bladefist(); + RegisterShatteredHallsCreatureAI(boss_warchief_kargath_bladefist); + RegisterShatteredHallsCreatureAI(npc_warchief_portal); + RegisterSpellScript(spell_blade_dance_targeting); } diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp index 161393275..5df8630d0 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/instance_shattered_halls.cpp @@ -20,6 +20,23 @@ #include "ScriptMgr.h" #include "shattered_halls.h" +ObjectData const creatureData[] = +{ + { NPC_GRAND_WARLOCK_NETHEKURSE , DATA_NETHEKURSE }, + { NPC_WARCHIEF_KARGATH , DATA_KARGATH }, + { NPC_OMROGG_LEFT_HEAD , DATA_OMROGG_LEFT_HEAD }, + { NPC_OMROGG_RIGHT_HEAD , DATA_OMROGG_RIGHT_HEAD }, + { NPC_WARCHIEF_PORTAL , DATA_WARCHIEF_PORTAL }, + { 0 , 0 } +}; + +DoorData const doorData[] = +{ + { GO_GRAND_WARLOCK_CHAMBER_DOOR_1, DATA_NETHEKURSE, DOOR_TYPE_PASSAGE }, + { GO_GRAND_WARLOCK_CHAMBER_DOOR_2, DATA_NETHEKURSE, DOOR_TYPE_PASSAGE }, + { 0, 0, DOOR_TYPE_ROOM } // END +}; + class instance_shattered_halls : public InstanceMapScript { public: @@ -37,6 +54,8 @@ public: void Initialize() override { SetBossNumber(ENCOUNTER_COUNT); + LoadObjectData(creatureData, nullptr); + LoadDoorData(doorData); TeamIdInInstance = TEAM_NEUTRAL; RescueTimer = 100 * MINUTE * IN_MILLISECONDS; @@ -48,23 +67,6 @@ public: TeamIdInInstance = player->GetTeamId(); } - void OnGameObjectCreate(GameObject* go) override - { - switch (go->GetEntry()) - { - case GO_GRAND_WARLOCK_CHAMBER_DOOR_1: - nethekurseDoor1GUID = go->GetGUID(); - if (GetBossState(DATA_NETHEKURSE) == DONE) - HandleGameObject(ObjectGuid::Empty, true, go); - break; - case GO_GRAND_WARLOCK_CHAMBER_DOOR_2: - nethekurseDoor2GUID = go->GetGUID(); - if (GetBossState(DATA_NETHEKURSE) == DONE) - HandleGameObject(ObjectGuid::Empty, true, go); - break; - } - } - void OnCreatureCreate(Creature* creature) override { if (TeamIdInInstance == TEAM_NEUTRAL) @@ -77,9 +79,6 @@ public: switch (creature->GetEntry()) { - case NPC_WARCHIEF_KARGATH: - warchiefKargathGUID = creature->GetGUID(); - break; case NPC_SHATTERED_EXECUTIONER: if (RescueTimer > 25 * MINUTE * IN_MILLISECONDS) creature->AddLootMode(2); @@ -101,29 +100,7 @@ public: prisonerGUID[2] = creature->GetGUID(); break; } - } - - bool SetBossState(uint32 type, EncounterState state) override - { - if (!InstanceScript::SetBossState(type, state)) - return false; - - switch (type) - { - case DATA_NETHEKURSE: - if (state == IN_PROGRESS) - { - HandleGameObject(nethekurseDoor1GUID, false); - HandleGameObject(nethekurseDoor2GUID, false); - } - else - { - HandleGameObject(nethekurseDoor1GUID, true); - HandleGameObject(nethekurseDoor2GUID, true); - } - break; - } - return true; + InstanceScript::OnCreatureCreate(creature); } void SetData(uint32 type, uint32 data) override @@ -133,7 +110,7 @@ public: DoCastSpellOnPlayers(SPELL_KARGATHS_EXECUTIONER_1); instance->LoadGrid(230, -80); - if (Creature* kargath = instance->GetCreature(warchiefKargathGUID)) + if (Creature* kargath = GetCreature(DATA_KARGATH)) sCreatureTextMgr->SendChat(kargath, TeamIdInInstance == TEAM_ALLIANCE ? 3 : 4, nullptr, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); RescueTimer = 80 * MINUTE * IN_MILLISECONDS; @@ -197,10 +174,6 @@ public: } protected: - ObjectGuid warchiefKargathGUID; - ObjectGuid nethekurseDoor1GUID; - ObjectGuid nethekurseDoor2GUID; - ObjectGuid executionerGUID; ObjectGuid prisonerGUID[3]; uint32 RescueTimer; diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h index 0e94153ef..089c0d2d2 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.h @@ -35,14 +35,23 @@ enum DataTypes DATA_PRISONER_1 = 11, DATA_PRISONER_2 = 12, DATA_PRISONER_3 = 13, - DATA_EXECUTIONER = 14 + DATA_EXECUTIONER = 14, + DATA_OMROGG_LEFT_HEAD = 15, + DATA_OMROGG_RIGHT_HEAD = 16, + DATA_WARCHIEF_PORTAL = 17 }; enum CreatureIds { NPC_GRAND_WARLOCK_NETHEKURSE = 16807, - NPC_WARCHIEF_KARGATH = 16808, NPC_FEL_ORC_CONVERT = 17083, + // Warchief Kargath + NPC_WARCHIEF_KARGATH = 16808, + NPC_WARCHIEF_PORTAL = 17611, + + // O'MROGG + NPC_OMROGG_LEFT_HEAD = 19523, + NPC_OMROGG_RIGHT_HEAD = 19524, // Trial of the Naaru: Mercy NPC_SHATTERED_EXECUTIONER = 17301, @@ -73,4 +82,6 @@ inline AI* GetShatteredHallsAI(T* obj) return GetInstanceAI(obj, ShatteredHallsLairScriptName); } +#define RegisterShatteredHallsCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetShatteredHallsAI) + #endif diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp index 87956f1f3..5638bcbb3 100644 --- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp +++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_mechano_lord_capacitus.cpp @@ -46,11 +46,6 @@ enum Yells SAY_DEATH = 4 }; -enum Creatures -{ - NPC_NETHER_CHARGE = 20405 -}; - struct boss_mechano_lord_capacitus : public BossAI { boss_mechano_lord_capacitus(Creature* creature) : BossAI(creature, DATA_MECHANOLORD_CAPACITUS) @@ -127,7 +122,6 @@ struct boss_mechano_lord_capacitus : public BossAI void JustSummoned(Creature* summon) override { - summons.Summon(summon); summon->GetMotionMaster()->MoveRandom(30.0f); } }; diff --git a/src/server/scripts/Outland/outland_script_loader.cpp b/src/server/scripts/Outland/outland_script_loader.cpp index 272a0c317..ced2b80f4 100644 --- a/src/server/scripts/Outland/outland_script_loader.cpp +++ b/src/server/scripts/Outland/outland_script_loader.cpp @@ -21,9 +21,11 @@ void AddSC_instance_auchenai_crypts(); void AddSC_boss_shirrak_the_dead_watcher(); void AddSC_boss_nexusprince_shaffar(); //Auchindoun Mana Tombs void AddSC_boss_pandemonius(); +void AddSC_boss_tavarok(); void AddSC_instance_mana_tombs(); void AddSC_boss_talon_king_ikiss(); //Auchindoun Sekketh Halls void AddSC_boss_anzu(); +void AddSC_boss_darkweaver_syth(); void AddSC_instance_sethekk_halls(); void AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth void AddSC_boss_ambassador_hellmaw(); @@ -54,10 +56,14 @@ void AddSC_instance_steam_vault(); void AddSC_underbog(); //CR Underbog void AddSC_boss_hungarfen(); void AddSC_boss_ghazan(); +void AddSC_boss_swamplord_muselek(); void AddSC_boss_the_black_stalker(); void AddSC_instance_the_underbog(); void AddSC_the_slave_pens(); // The Slave Pens void AddSC_boss_ahune(); +void AddSC_boss_mennu_the_betrayer(); +void AddSC_boss_rokmar_the_crackler(); +void AddSC_boss_quagmirran(); void AddSC_instance_the_slave_pens(); void AddSC_boss_gruul(); //Gruul's Lair void AddSC_boss_high_king_maulgar(); @@ -119,9 +125,11 @@ void AddOutlandScripts() AddSC_boss_shirrak_the_dead_watcher(); AddSC_boss_nexusprince_shaffar(); //Auchindoun Mana Tombs AddSC_boss_pandemonius(); + AddSC_boss_tavarok(); AddSC_instance_mana_tombs(); AddSC_boss_talon_king_ikiss(); //Auchindoun Sekketh Halls AddSC_boss_anzu(); + AddSC_boss_darkweaver_syth(); AddSC_instance_sethekk_halls(); AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth AddSC_boss_ambassador_hellmaw(); @@ -152,10 +160,14 @@ void AddOutlandScripts() AddSC_underbog(); //CR Underbog AddSC_boss_hungarfen(); AddSC_boss_ghazan(); + AddSC_boss_swamplord_muselek(); AddSC_boss_the_black_stalker(); AddSC_instance_the_underbog(); - AddSC_the_slave_pens(); // The Slave Pens + AddSC_the_slave_pens(); //CR The Slave Pens AddSC_boss_ahune(); + AddSC_boss_mennu_the_betrayer(); + AddSC_boss_rokmar_the_crackler(); + AddSC_boss_quagmirran(); AddSC_instance_the_slave_pens(); AddSC_boss_gruul(); //Gruul's Lair AddSC_boss_high_king_maulgar(); @@ -207,4 +219,4 @@ void AddOutlandScripts() AddSC_shattrath_city(); AddSC_terokkar_forest(); //AddSC_zangarmarsh(); -} +} \ No newline at end of file diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index cc2475587..aacd828c1 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -15,21 +15,6 @@ * with this program. If not, see . */ -/* ScriptData -SDName: Shattrath_City -SD%Complete: 100 -SDComment: Quest support: 10004, 10009, 10211. Flask vendors, Teleport to Caverns of Time -SDCategory: Shattrath City -EndScriptData */ - -/* ContentData -npc_raliq_the_drunk -npc_salsalabim -npc_shattrathflaskvendors -npc_zephyr -npc_kservant -EndContentData */ - #include "Player.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" @@ -37,176 +22,6 @@ EndContentData */ #include "ScriptedGossip.h" #include "TaskScheduler.h" -/*###### -## npc_raliq_the_drunk -######*/ - -#define GOSSIP_RALIQ "You owe Sim'salabim money. Hand them over or die!" - -enum Raliq -{ - SPELL_UPPERCUT = 10966, - QUEST_CRACK_SKULLS = 10009, - EMOTE_DRINK = 7, -}; - -class npc_raliq_the_drunk : public CreatureScript -{ -public: - npc_raliq_the_drunk() : CreatureScript("npc_raliq_the_drunk") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - ClearGossipMenuFor(player); - if (action == GOSSIP_ACTION_INFO_DEF + 1) - { - CloseGossipMenuFor(player); - creature->SetFaction(FACTION_OGRE); - creature->AI()->AttackStart(player); - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE) - AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_RALIQ, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - - SendGossipMenuFor(player, 9440, creature->GetGUID()); - return true; - } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_raliq_the_drunkAI(creature); - } - - struct npc_raliq_the_drunkAI : public ScriptedAI - { - npc_raliq_the_drunkAI(Creature* creature) : ScriptedAI(creature) - { - m_uiNormFaction = creature->GetFaction(); - } - - uint32 m_uiNormFaction; - - void Reset() override - { - me->RestoreFaction(); - _scheduler.CancelAll(); - _scheduler.Schedule(5s, [this](TaskContext context) - { - me->HandleEmoteCommand(EMOTE_DRINK); - context.Repeat(5s); - }); - } - - void JustEngagedWith(Unit* /*who*/) override - { - _scheduler - .Schedule(5s, [this](TaskContext context) - { - DoCastVictim(SPELL_UPPERCUT); - context.Repeat(15s); - }); - }; - - void UpdateAI(uint32 diff) override - { - - _scheduler.Update(diff); - - if (!UpdateVictim()) - return; - - DoMeleeAttackIfReady(); - } - private: - TaskScheduler _scheduler; - }; -}; - -/*###### -# npc_salsalabim -######*/ - -enum Salsalabim -{ - // Quests - QUEST_10004 = 10004, - - // Spells - SPELL_MAGNETIC_PULL = 31705 -}; - -class npc_salsalabim : public CreatureScript -{ -public: - npc_salsalabim() : CreatureScript("npc_salsalabim") { } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (player->GetQuestStatus(QUEST_10004) == QUEST_STATUS_INCOMPLETE) - { - creature->SetFaction(FACTION_DEMON); - creature->AI()->AttackStart(player); - } - else - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID()); - } - return true; - } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_salsalabimAI(creature); - } - - struct npc_salsalabimAI : public ScriptedAI - { - npc_salsalabimAI(Creature* creature) : ScriptedAI(creature) { } - - uint32 MagneticPull_Timer; - - void Reset() override - { - MagneticPull_Timer = 15000; - me->RestoreFaction(); - } - - void DamageTaken(Unit* done_by, uint32& damage, DamageEffectType, SpellSchoolMask) override - { - // xinef: some corrections - if (done_by) - if (Player* player = done_by->GetCharmerOrOwnerPlayerOrPlayerItself()) - if (me->HealthBelowPctDamaged(20, damage)) - { - player->GroupEventHappens(QUEST_10004, me); - damage = 0; - EnterEvadeMode(); - } - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - if (MagneticPull_Timer <= diff) - { - DoCastVictim(SPELL_MAGNETIC_PULL); - MagneticPull_Timer = 15000; - } - else MagneticPull_Timer -= diff; - - DoMeleeAttackIfReady(); - } - }; -}; - /* ################################################## Shattrath City Flask Vendors provides flasks to people exalted with 3 fActions: @@ -436,8 +251,6 @@ public: void AddSC_shattrath_city() { - new npc_raliq_the_drunk(); - new npc_salsalabim(); new npc_shattrathflaskvendors(); new npc_zephyr(); new npc_kservant(); diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index 8e51648b6..bc9f2ca24 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -15,22 +15,6 @@ * with this program. If not, see . */ -/* ScriptData -SDName: Terokkar_Forest -SD%Complete: 85 -SDComment: Quest support: 9889, 10009, 10873, 10896, 10898, 11096, 10052, 10051. Skettis->Ogri'la Flight -SDCategory: Terokkar Forest -EndScriptData */ - -/* ContentData -npc_unkor_the_ruthless -npc_rotting_forest_rager -npc_netherweb_victim -npc_floon -npc_isla_starmane -npc_slim -EndContentData */ - #include "Group.h" #include "Player.h" #include "ScriptMgr.h" @@ -477,115 +461,6 @@ public: }; }; -/*###### -## npc_floon -######*/ - -#define GOSSIP_FLOON1 "You owe Sim'salabim money. Hand them over or die!" -#define GOSSIP_FLOON2 "Hand over the money or die...again!" - -enum Floon -{ - SAY_FLOON_ATTACK = 0, - - SPELL_SILENCE = 6726, - SPELL_FROSTBOLT = 9672, - SPELL_FROST_NOVA = 11831, - - QUEST_CRACK_SKULLS = 10009 -}; - -class npc_floon : public CreatureScript -{ -public: - npc_floon() : CreatureScript("npc_floon") { } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - ClearGossipMenuFor(player); - if (action == GOSSIP_ACTION_INFO_DEF) - { - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_FLOON2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - SendGossipMenuFor(player, 9443, creature->GetGUID()); - } - if (action == GOSSIP_ACTION_INFO_DEF + 1) - { - CloseGossipMenuFor(player); - creature->SetFaction(FACTION_ARAKKOA); - creature->AI()->Talk(SAY_FLOON_ATTACK, player); - creature->AI()->AttackStart(player); - } - return true; - } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE) - AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_FLOON1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - - SendGossipMenuFor(player, 9442, creature->GetGUID()); - return true; - } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_floonAI(creature); - } - - struct npc_floonAI : public ScriptedAI - { - npc_floonAI(Creature* creature) : ScriptedAI(creature) - { - m_uiNormFaction = creature->GetFaction(); - } - - uint32 m_uiNormFaction; - uint32 Silence_Timer; - uint32 Frostbolt_Timer; - uint32 FrostNova_Timer; - - void Reset() override - { - Silence_Timer = 2000; - Frostbolt_Timer = 4000; - FrostNova_Timer = 9000; - if (me->GetFaction() != m_uiNormFaction) - me->SetFaction(m_uiNormFaction); - } - - void JustEngagedWith(Unit* /*who*/) override { } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - if (Silence_Timer <= diff) - { - DoCastVictim(SPELL_SILENCE); - Silence_Timer = 30000; - } - else Silence_Timer -= diff; - - if (FrostNova_Timer <= diff) - { - DoCast(me, SPELL_FROST_NOVA); - FrostNova_Timer = 20000; - } - else FrostNova_Timer -= diff; - - if (Frostbolt_Timer <= diff) - { - DoCastVictim(SPELL_FROSTBOLT); - Frostbolt_Timer = 5000; - } - else Frostbolt_Timer -= diff; - - DoMeleeAttackIfReady(); - } - }; -}; - /*###### ## npc_isla_starmane ######*/ @@ -840,7 +715,6 @@ void AddSC_terokkar_forest() // Theirs new npc_unkor_the_ruthless(); new npc_rotting_forest_rager(); - new npc_floon(); new npc_isla_starmane(); new go_skull_pile(); new npc_slim(); diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp index 048afaf13..1e9298759 100644 --- a/src/server/scripts/Pet/pet_hunter.cpp +++ b/src/server/scripts/Pet/pet_hunter.cpp @@ -96,24 +96,17 @@ struct npc_pet_hunter_snake_trap : public ScriptedAI { _init = true; - CreatureTemplate const* Info = me->GetCreatureTemplate(); - CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(me->GetLevel(), Info->unit_class); uint32 health = uint32(107 * (me->GetLevel() - 40) * 0.025f); me->SetCreateHealth(health); - - for (uint8 stat = 0; stat < MAX_STATS; ++stat) - { - me->SetStat(Stats(stat), 0); - me->SetCreateStat(Stats(stat), 0); - } - me->SetModifierValue(UNIT_MOD_HEALTH, BASE_VALUE, (float)health); me->SetMaxHealth(health); + //Add delta to make them not all hit the same time uint32 delta = urand(0, 700); - me->SetAttackTime(BASE_ATTACK, Info->BaseAttackTime + delta); - me->SetStatFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER, float(stats->AttackPower)); - me->CastSpell(me, SPELL_HUNTER_DEADLY_POISON_PASSIVE, true); + me->SetAttackTime(BASE_ATTACK, me->GetAttackTime(BASE_ATTACK) + delta); + + if (me->GetEntry() == NPC_VENOMOUS_SNAKE) + DoCastSelf(SPELL_HUNTER_DEADLY_POISON_PASSIVE, true); // Glyph of Snake Trap if (Unit* owner = me->GetOwner())