diff --git a/data/sql/updates/db_world/2022_07_01_02.sql b/data/sql/updates/db_world/2022_07_01_02.sql new file mode 100644 index 000000000..787ea78ae --- /dev/null +++ b/data/sql/updates/db_world/2022_07_01_02.sql @@ -0,0 +1,3 @@ +-- DB update 2022_07_01_01 -> 2022_07_01_02 +-- +UPDATE `creature_template` SET `DamageModifier` = 26 WHERE `entry` = 15163; diff --git a/data/sql/updates/db_world/2022_07_01_03.sql b/data/sql/updates/db_world/2022_07_01_03.sql new file mode 100644 index 000000000..2cb1c048c --- /dev/null +++ b/data/sql/updates/db_world/2022_07_01_03.sql @@ -0,0 +1,7 @@ +-- DB update 2022_07_01_02 -> 2022_07_01_03 +-- +DELETE FROM `creature_template_movement` WHERE `CreatureId` IN (15242, 18707, 22441, 8276); +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`) VALUES (15242, 1, 0, 1, 0, 0, 0), +(18707, 1, 0, 1, 0, 0, 0), +(22441, 1, 0, 1, 0, 0, 0), +(8276, 1, 0, 1, 0, 0, 0); diff --git a/data/sql/updates/db_world/2022_07_02_00.sql b/data/sql/updates/db_world/2022_07_02_00.sql new file mode 100644 index 000000000..247f6bd61 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_02_00.sql @@ -0,0 +1,6 @@ +-- DB update 2022_07_01_03 -> 2022_07_02_00 +-- +DELETE FROM `creature_formations` WHERE `memberGUID` IN (49313, 49314); +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(49310, 49313, 0, 0, 27, 0, 0), +(49310, 49314, 0, 0, 27, 0, 0); diff --git a/data/sql/updates/db_world/2022_07_02_01.sql b/data/sql/updates/db_world/2022_07_02_01.sql new file mode 100644 index 000000000..50f873011 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_02_01.sql @@ -0,0 +1,4 @@ +-- DB update 2022_07_02_00 -> 2022_07_02_01 +-- +UPDATE `creature_template` SET `flags_extra`=`flags_extra`|0x00200000 WHERE `entry` IN (29618,29619); +UPDATE `smart_scripts` SET `target_type`=23 WHERE `entryorguid`=29475 AND `source_type`=0 AND `id` IN (2,3); diff --git a/data/sql/updates/db_world/2022_07_02_02.sql b/data/sql/updates/db_world/2022_07_02_02.sql new file mode 100644 index 000000000..4b26ebfb3 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_02_02.sql @@ -0,0 +1,4 @@ +-- DB update 2022_07_02_01 -> 2022_07_02_02 +DELETE FROM `spell_script_names` WHERE `spell_id` = 45644; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(45644, "spell_midsummer_torch_catch"); diff --git a/data/sql/updates/db_world/2022_07_03_00.sql b/data/sql/updates/db_world/2022_07_03_00.sql new file mode 100644 index 000000000..465971ea5 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_03_00.sql @@ -0,0 +1,4 @@ +-- DB update 2022_07_02_02 -> 2022_07_03_00 +-- +UPDATE `smart_scripts` SET `event_flags`=512 WHERE `entryorguid`=24823 AND `source_type`=0; +UPDATE `smart_scripts` SET `event_phase_mask`=0, `event_param3`=5000, `event_param4`=5000 WHERE `entryorguid`=24718 AND `source_type`=0 AND `id`=1; diff --git a/data/sql/updates/db_world/2022_07_03_01.sql b/data/sql/updates/db_world/2022_07_03_01.sql new file mode 100644 index 000000000..26277ddb2 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_03_01.sql @@ -0,0 +1,5 @@ +-- DB update 2022_07_03_00 -> 2022_07_03_01 +-- +DELETE FROM `smart_scripts` WHERE `entryorguid`=3177300 AND `source_type`=9 AND `id`=46; +INSERT INTO `smart_scripts` VALUES +(3177300,9,46,0,0,0,100,0,0,0,0,0,0,28,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Script9 - Remove all auras'); diff --git a/data/sql/updates/db_world/2022_07_03_02.sql b/data/sql/updates/db_world/2022_07_03_02.sql new file mode 100644 index 000000000..417f6803c --- /dev/null +++ b/data/sql/updates/db_world/2022_07_03_02.sql @@ -0,0 +1,4 @@ +-- DB update 2022_07_03_01 -> 2022_07_03_02 +-- +UPDATE `smart_scripts` SET `event_flags`=512 WHERE `entryorguid`=28750 AND `source_type`=0 AND `id`=5; +UPDATE `smart_scripts` SET `event_flags`=512 WHERE `entryorguid`=2875000 AND `source_type`=9; diff --git a/data/sql/updates/db_world/2022_07_03_03.sql b/data/sql/updates/db_world/2022_07_03_03.sql new file mode 100644 index 000000000..c05ceef90 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_03_03.sql @@ -0,0 +1,3 @@ +-- DB update 2022_07_03_02 -> 2022_07_03_03 +-- +UPDATE `smart_scripts` SET `action_param3`=1 WHERE `entryorguid`=26293 AND `source_type`=0 AND `id`=2; diff --git a/data/sql/updates/db_world/2022_07_03_04.sql b/data/sql/updates/db_world/2022_07_03_04.sql new file mode 100644 index 000000000..2e36691c4 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_03_04.sql @@ -0,0 +1,14 @@ +-- DB update 2022_07_03_03 -> 2022_07_03_04 +-- delete wrong game_graveyard link to graveyard_zone +DELETE FROM `graveyard_zone` WHERE `ID`=469 AND `GhostZone`=141; +DELETE FROM `graveyard_zone` WHERE `ID`=469 AND `GhostZone`=1657; + +-- originally was faction 469 alliance and should be 0 ID originally 469 +DELETE FROM `graveyard_zone` WHERE `ID`=91 AND `GhostZone`=141; +INSERT INTO `graveyard_zone` (`ID`, `GhostZone`, `Faction`, `Comment`) VALUES +(91, 141, 0, 'Teldrassil, Dolanaar GY'); + +-- id originally 469 +DELETE FROM `graveyard_zone` WHERE `ID`=91 AND `GhostZone`=1657; +INSERT INTO `graveyard_zone` (`ID`, `GhostZone`, `Faction`, `Comment`) VALUES +(91, 1657, 67, 'Teldrassil, Dolanaar GY'); diff --git a/data/sql/updates/db_world/2022_07_03_05.sql b/data/sql/updates/db_world/2022_07_03_05.sql new file mode 100644 index 000000000..9fa096ea0 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_03_05.sql @@ -0,0 +1,81 @@ +-- DB update 2022_07_03_04 -> 2022_07_03_05 +-- +SET @NPC_HEBJIN := 28636; +SET @NPC_BAT := 28639; +SET @GO_DRUM := 190695; + +DELETE FROM `creature` WHERE `guid` IN (117079,117301); + +UPDATE `creature_template` SET `speed_run`=0.857143, `unit_flags`=33024, `AIName`='SmartAI' WHERE `entry`=@NPC_HEBJIN; +UPDATE `creature_template` SET `speed_run`=2, `unit_flags`=256, `AIName`='SmartAI' WHERE `entry`=@NPC_BAT; + +DELETE FROM `event_scripts` WHERE `id`=18773; +INSERT INTO `event_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`dataint`,`x`,`y`,`z`,`o`) VALUES +(18773,0,10,@NPC_HEBJIN,180000,0,5988.715,-3878.036,417.1502,2.356194); + +UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@GO_DRUM; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@NPC_HEBJIN,@NPC_BAT) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@GO_DRUM AND `source_type`=1; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@NPC_HEBJIN*100,@NPC_BAT*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 +(@NPC_HEBJIN,0,0,0,54,0,100,0,0,0,0,0,80,@NPC_HEBJIN*100,2,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin - Just summoned - Run script'), +(@NPC_HEBJIN,0,1,2,38,0,100,0,0,1,0,0,11,52354,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Heb''Jin - On data 0 1 set - Spellcast Script Effect - Creature Attack GUID from Dot Variable'), +(@NPC_HEBJIN,0,2,3,61,0,100,0,0,0,0,0,101,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin - On data 0 1 set - Set Home Pos'), +(@NPC_HEBJIN,0,3,4,61,0,100,0,0,0,0,0,69,0,0,0,0,0,0,8,0,0,0,5937.22,-3820.871,366.5563,0, 'Heb''Jin - On data 0 1 set - Move to position'), +(@NPC_HEBJIN,0,4,5,61,0,100,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin - On data 0 1 set - Say line'), +(@NPC_HEBJIN,0,5,6,61,0,100,0,0,0,0,0,19,256,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin - On data 0 1 set - Remove unit_flags IMMUNE_TO_PC'), +(@NPC_HEBJIN,0,6,0,61,0,100,0,0,0,0,0,49,0,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Heb''Jin - On data 0 1 set - Start attack'), +(@NPC_HEBJIN,0,7,0,0,0,100,0,1000,1000,7000,8000,11,12734,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin - On update IC - Spellcast Ground Smash'), +(@NPC_HEBJIN,0,8,0,0,0,100,0,5000,5000,10000,12000,11,15548,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin - On update IC - Spellcast Thunder Clap'), +(@NPC_HEBJIN,0,9,0,13,0,100,0,12000,15000,0,0,11,12555,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Heb''Jin - On target casting - Spellcast Pummel'), + +(@NPC_BAT,0,0,1,11,0,100,0,0,0,0,0,91,7,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin''s Bat - On spawn - Remove unit_field_bytes1 (dead)'), +(@NPC_BAT,0,1,2,61,0,100,0,0,0,0,0,11,52353,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Heb''Jin''s Bat - On spawn - Spellcast Script Effect - Creature Capture GUID to Dot Variable'), +(@NPC_BAT,0,2,0,61,0,100,0,0,0,0,0,4,10892,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin''s Bat - On spawn - Play sound'), +(@NPC_BAT,0,3,0,27,0,100,1,0,0,0,0,53,1,@NPC_BAT,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin''s Bat - On passenger boarded - Start WP movement'), +(@NPC_BAT,0,4,5,40,0,100,0,4,@NPC_BAT,0,0,28,43671,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin''s Bat - On WP 4 reached - Remove aura Ride Vehicle'), +(@NPC_BAT,0,5,6,61,0,100,0,0,0,0,0,45,0,1,0,0,0,0,19,@NPC_HEBJIN,10,0,0,0,0,0, 'Heb''Jin''s Bat - On WP 4 reached - Set data 0 1 Heb''Jin'), +(@NPC_BAT,0,6,0,61,0,100,0,0,0,0,0,80,@NPC_BAT*100,2,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin''s Bat - On WP 4 reached - Run script'), +(@NPC_BAT,0,7,8,8,0,100,0,52151,0,0,0,18,256,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin''s Bat - On spellhit Bat Net - Set unit_flags IMMUNE_TO_PC'), +(@NPC_BAT,0,8,9,61,0,100,0,0,0,0,0,90,7,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin''s Bat - On spellhit Bat Net - Set unit_field_bytes1 (dead)'), +(@NPC_BAT,0,9,0,61,0,100,0,0,0,0,0,41,5000,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin''s Bat - On spellhit Bat Net - Despawn after 5 seconds'), + +(@GO_DRUM,1,0,1,70,0,100,0,2,0,0,0,64,1,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Heb''Jin''s Drum - On state changed - Store targetlist'), +(@GO_DRUM,1,1,0,61,0,100,0,0,0,0,0,100,1,0,0,0,0,0,19,@NPC_HEBJIN,100,0,0,0,0,0, 'Heb''Jin''s Drum - On state changed - Send targetlist to Heb''Jin'), + +(@NPC_HEBJIN*100,9,0,0,0,0,100,0,0,0,0,0,11,52353,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Heb''Jin script - Spellcast Script Effect - Creature Capture GUID to Dot Variable'), +(@NPC_HEBJIN*100,9,1,0,0,0,100,0,3200,3200,0,0,11,52154,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin script - Spellcast Taunt'), +(@NPC_HEBJIN*100,9,2,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin script - Say line'), +(@NPC_HEBJIN*100,9,3,0,0,0,100,0,300,300,0,0,12,@NPC_BAT,8,0,0,0,0,8,0,0,0,5984.547,-3882.621,417.4379,1.919862, 'Heb''Jin script - Summon Heb''Jin''s Bat'), +(@NPC_HEBJIN*100,9,4,0,0,0,100,0,0,0,0,0,100,1,0,0,0,0,0,19,@NPC_BAT,10,0,0,0,0,0, 'Heb''Jin script - Send targetlist'), +(@NPC_HEBJIN*100,9,5,0,0,0,100,0,5700,5700,0,0,1,1,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Heb''Jin script - Say line'), +(@NPC_HEBJIN*100,9,6,0,0,0,100,0,2400,2400,0,0,11,43671,0,0,0,0,0,19,@NPC_BAT,10,0,0,0,0,0, 'Heb''Jin script - Spellcast Ride Vehicle'), + +(@NPC_BAT*100,9,0,0,0,0,100,0,2000,2000,0,0,19,256,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Heb''Jin''s Bat script 1 - Remove unit_flags IMMUNE_TO_PC'), +(@NPC_BAT*100,9,1,0,0,0,100,0,0,0,0,0,49,0,0,0,0,0,0,12,1,0,0,0,0,0,0, 'Heb''Jin''s Bat script 1 - Start attack'); + +DELETE FROM `smart_scripts` WHERE `source_type`=1 AND `entryorguid`=190695; +DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid`=19069500; +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 +(190695, 1, 0, 1, 70, 0, 100, 0, 2, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Heb\'Jin\'s Drum - On state changed - Store targetlist'), +(190695, 1, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 19069500, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Heb\'Jin\'s Drum - Linked with Previous Event - Run Script'), +(19069500, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 98562, 23837, 0, 0, 0,0,0, 'Heb\'Jin\'s Drum - Script - Set Data ELM General Purpose Bunny'), +(19069500, 9, 1, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 100, 1, 0, 0, 0, 0, 0, 19, 28636, 100, 0, 0, 0, 0, 0, 'Heb\'Jin\'s Drum - Script - Send Target list to heb jin'); + +UPDATE `smart_scripts` SET `action_param2`=2, `action_param3`=300000 WHERE `entryorguid`=2863600 AND `source_type`=9 AND `id`=3 AND `link`=0; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=28636 AND `id`=9; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=28639 AND `id`=10; +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 +(28636, 0, 9, 0, 7, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Heb Jin - On Evade - Despawn'), +(28639, 0, 10, 0, 7, 0, 100, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Heb Jins Bat - On Evade - Despawn'); + +DELETE FROM `event_scripts` WHERE `id`=18773; +DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=-98562; +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 +(-98562, 0, 0, 1, 38, 0, 100, 0, 1, 1, 0, 0, 45, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'ELM General Purpose Bunny - On Data Set - Set Data'), +(-98562, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 12, 28636, 2, 300000, 0, 0, 0, 8, 0, 0, 0, 5988.71, -3878.04, 417.15, 2.35619, 'ELM General Purpose Bunny - Linked with Previous Event - Spawn Heb Jin'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=22 AND `SourceId`=0 AND `SourceEntry`=-98562; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 1, -98562, 0, 0, 29, 1, 28636, 200, 0, 1, 0, 0, '', 'Only run SAI if no heb jin nearby'), +(22, 1, -98562, 0, 0, 29, 1, 28639, 200, 0, 1, 0, 0, '', 'Only run SAI if no heb jins bat nearby'); diff --git a/data/sql/updates/db_world/2022_07_03_06.sql b/data/sql/updates/db_world/2022_07_03_06.sql new file mode 100644 index 000000000..5e9a7c2b6 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_03_06.sql @@ -0,0 +1,3 @@ +-- DB update 2022_07_03_05 -> 2022_07_03_06 +-- +UPDATE `smart_scripts` SET `target_type`=12, `target_param1`=1 WHERE `entryorguid`=19720 AND `source_type`=0 AND `id`=22; diff --git a/data/sql/updates/db_world/2022_07_03_07.sql b/data/sql/updates/db_world/2022_07_03_07.sql new file mode 100644 index 000000000..b86e4dc34 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_03_07.sql @@ -0,0 +1,3 @@ +-- DB update 2022_07_03_06 -> 2022_07_03_07 +-- +UPDATE `creature_template` SET `mingold` = 0, `maxgold` = 0 WHERE (`entry` = 4196); diff --git a/data/sql/updates/db_world/2022_07_05_00.sql b/data/sql/updates/db_world/2022_07_05_00.sql new file mode 100644 index 000000000..1fd915287 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_05_00.sql @@ -0,0 +1,23 @@ +-- DB update 2022_07_03_07 -> 2022_07_05_00 +-- +DELETE FROM `waypoint_data` WHERE `id`=518940; +INSERT INTO `acore_world`.`waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES +(518940, 1, 3866.84, -672.53, 328.888), +(518940, 2, 3866.84, -672.534, 328.888), +(518940, 3, 3818.17, -768.04, 314.71), +(518940, 4, 3881.4, -769.048, 311.51), +(518940, 5, 3892.74, -762.76, 312.98), +(518940, 6, 3863.57, -759.42, 312.95), +(518940, 7, 3844.86, -719.223, 324.47), +(518940, 8, 3894.64, -635.31, 336.71), +(518940, 9, 3932.94, -611.101, 340.266), +(518940, 10, 3981.27, -598.98, 338.19), +(518940, 11, 3932.94, -611.101, 340.266), +(518940, 12, 3894.64, -635.31, 336.71), +(518940, 13, 3844.86, -719.223, 324.47), +(518940, 14, 3863.57, -759.42, 312.95), +(518940, 15, 3892.74, -762.76, 312.98), +(518940, 16, 3881.4, -769.048, 311.51), +(518940, 17, 3818.17, -768.04, 314.71), +(518940, 18, 3866.84, -672.534, 328.888), +(518940, 19, 3866.84, -672.53, 328.888); diff --git a/data/sql/updates/db_world/2022_07_05_01.sql b/data/sql/updates/db_world/2022_07_05_01.sql new file mode 100644 index 000000000..026eb3461 --- /dev/null +++ b/data/sql/updates/db_world/2022_07_05_01.sql @@ -0,0 +1,3 @@ +-- DB update 2022_07_05_00 -> 2022_07_05_01 +-- fixed `Anatoly Will Talk` quest +UPDATE `smart_scripts` SET `event_flags`= 512 WHERE `entryorguid`= 2762600; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 1f8cb7030..d1da549cf 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -5099,8 +5099,8 @@ void SmartScript::SetScript9(SmartScriptHolder& e, uint32 entry) return; } - // Do NOT allow to start a new actionlist if a previous one is already running. We need to always finish the current actionlist - if (!mTimedActionList.empty()) + // Do NOT allow to start a new actionlist if a previous one is already running, unless explicitly allowed. We need to always finish the current actionlist + if (!e.action.timedActionList.allowOverride && !mTimedActionList.empty()) { return; } diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 23a93f166..82292262d 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1774,9 +1774,13 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) AC_SAI_IS_BOOLEAN_VALID(e, e.action.setHealthRegen.regenHealth); break; } + case SMART_ACTION_CALL_TIMED_ACTIONLIST: + { + AC_SAI_IS_BOOLEAN_VALID(e, e.action.timedActionList.allowOverride); + break; + } case SMART_ACTION_FLEE_FOR_ASSIST: case SMART_ACTION_MOVE_TO_POS: - case SMART_ACTION_CALL_TIMED_ACTIONLIST: case SMART_ACTION_EVADE: case SMART_ACTION_SET_ACTIVE: case SMART_ACTION_START_CLOSEST_WAYPOINT: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 0867679fe..c8f3f2609 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1081,6 +1081,7 @@ struct SmartAction { uint32 id; uint32 timerType; + SAIBool allowOverride; } timedActionList; struct diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 636fdace6..da59caf67 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -383,8 +383,6 @@ public: void ModifyThreatPercentTemp(Unit* victim, int32 percent, Milliseconds duration); - void ResetFaction() { SetFaction(GetCreatureTemplate()->faction); } - protected: bool CreateFromProto(ObjectGuid::LowType guidlow, uint32 Entry, uint32 vehId, const CreatureData* data = nullptr); bool InitEntry(uint32 entry, const CreatureData* data = nullptr); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index debaaa62f..04d5bc43e 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13181,7 +13181,7 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy, uint32 duration) // xinef: if we somehow engage in combat (scripts, dunno) with player, remove this flag so he can fight back if (GetTypeId() == TYPEID_UNIT && enemy && IsImmuneToPC() && enemy->GetCharmerOrOwnerPlayerOrPlayerItself()) - SetImmuneToPC(true); // unit has engaged in combat, remove immunity so players can fight back + SetImmuneToPC(false); // unit has engaged in combat, remove immunity so players can fight back if (IsInCombat()) return; diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 985ead07c..2ef18974e 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -4295,6 +4295,24 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->Dispel = DISPEL_NONE; }); + // Summon Nightmare Illusions + ApplySpellFix({ 24681, 24728, 24729 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].MiscValueB = 64; + }); + + // Place Fake Fur + ApplySpellFix({ 46085 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].MiscValue = 8; + }); + + // Smash Mammoth Trap + ApplySpellFix({ 46201 }, [](SpellInfo* spellInfo) + { + spellInfo->Effects[EFFECT_0].MiscValue = 8; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp index d475bd966..be9b57e66 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp @@ -15,13 +15,6 @@ * with this program. If not, see . */ -/* ScriptData -SDName: Boss_Hazzarah -SD%Complete: 100 -SDComment: -SDCategory: Zul'Gurub -EndScriptData */ - #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "SpellScript.h" @@ -45,100 +38,98 @@ enum Events EVENT_ILLUSIONS = 4 }; -class boss_hazzarah : public CreatureScript +struct boss_hazzarah : public BossAI { -public: - boss_hazzarah() : CreatureScript("boss_hazzarah") { } + boss_hazzarah(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { } - struct boss_hazzarahAI : public BossAI + void JustSummoned(Creature* summon) override { - boss_hazzarahAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { } + summons.Summon(summon); - void JustSummoned(Creature* summon) override - { - summons.Summon(summon); - - summon->SetCorpseDelay(10); - summon->SetReactState(REACT_PASSIVE); - summon->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE); - summon->SetVisible(false); - summon->m_Events.AddEventAtOffset([summon]() + summon->SetCorpseDelay(10); + summon->SetReactState(REACT_PASSIVE); + summon->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE); + summon->SetVisible(false); + summon->m_Events.AddEventAtOffset([summon]() { summon->SetVisible(true); }, 2s); - summon->m_Events.AddEventAtOffset([summon]() + summon->m_Events.AddEventAtOffset([summon]() { summon->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE); summon->SetReactState(REACT_AGGRESSIVE); summon->SetInCombatWithZone(); - }, 3500ms); - } + }, 5s); + } - void EnterCombat(Unit* /*who*/) override + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override + { + summons.Despawn(summon); + summon->DespawnOrUnsummon(); + } + + void EnterCombat(Unit* /*who*/) override + { + _EnterCombat(); + events.ScheduleEvent(EVENT_SLEEP, 12s, 15s); + events.ScheduleEvent(EVENT_EARTH_SHOCK, 8s, 18s); + events.ScheduleEvent(EVENT_CHAIN_BURN, 12s, 28s); + events.ScheduleEvent(EVENT_ILLUSIONS, 16s, 24s); + } + + bool CanAIAttack(Unit const* target) const override + { + if (me->GetThreatMgr().getThreatList().size() > 1 && me->GetThreatMgr().getOnlineContainer().getMostHated()->getTarget() == target) + return !target->HasAura(SPELL_SLEEP); + + return true; + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = events.ExecuteEvent()) { - _EnterCombat(); - events.ScheduleEvent(EVENT_SLEEP, 12s, 15s); - events.ScheduleEvent(EVENT_EARTH_SHOCK, 8s, 18s); - events.ScheduleEvent(EVENT_CHAIN_BURN, 12s, 28s); - events.ScheduleEvent(EVENT_ILLUSIONS, 16s, 24s); - } - - bool CanAIAttack(Unit const* target) const override - { - if (me->GetThreatMgr().getThreatList().size() > 1 && me->GetThreatMgr().getOnlineContainer().getMostHated()->getTarget() == target) - return !target->HasAura(SPELL_SLEEP); - - return true; - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - while (uint32 eventId = events.ExecuteEvent()) + switch (eventId) { - switch (eventId) - { - case EVENT_SLEEP: - DoCastVictim(SPELL_SLEEP, true); - events.ScheduleEvent(EVENT_SLEEP, 24s, 32s); - return; - case EVENT_EARTH_SHOCK: - DoCastVictim(SPELL_EARTH_SHOCK); - events.ScheduleEvent(EVENT_EARTH_SHOCK, 8s, 18s); - break; - case EVENT_CHAIN_BURN: + case EVENT_SLEEP: + DoCastVictim(SPELL_SLEEP, true); + events.ScheduleEvent(EVENT_SLEEP, 24s, 32s); + return; + case EVENT_EARTH_SHOCK: + DoCastVictim(SPELL_EARTH_SHOCK); + events.ScheduleEvent(EVENT_EARTH_SHOCK, 8s, 18s); + break; + case EVENT_CHAIN_BURN: + if (me->GetPowerPct(POWER_MANA) > 5.f) // totally guessed + { if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, [&](Unit* u) { return u && !u->IsPet() && u->getPowerType() == POWER_MANA; })) { - DoCast(target, SPELL_CHAIN_BURN, false); + DoCast(target, SPELL_CHAIN_BURN); } - events.ScheduleEvent(EVENT_CHAIN_BURN, 12s, 28s); - break; - case EVENT_ILLUSIONS: - DoCastSelf(SPELL_SUMMON_NIGHTMARE_ILLUSION_LEFT, true); - DoCastSelf(SPELL_SUMMON_NIGHTMARE_ILLUSION_BACK, true); - DoCastSelf(SPELL_SUMMON_NIGHTMARE_ILLUSION_RIGHT, true); - events.ScheduleEvent(EVENT_ILLUSIONS, 16s, 24s); - break; - default: - break; - } + } + events.ScheduleEvent(EVENT_CHAIN_BURN, 12s, 28s); + break; + case EVENT_ILLUSIONS: + DoCastSelf(SPELL_SUMMON_NIGHTMARE_ILLUSION_LEFT, true); + DoCastSelf(SPELL_SUMMON_NIGHTMARE_ILLUSION_BACK, true); + DoCastSelf(SPELL_SUMMON_NIGHTMARE_ILLUSION_RIGHT, true); + events.ScheduleEvent(EVENT_ILLUSIONS, 15s, 25s); + break; + default: + break; } - - DoMeleeAttackIfReady(); } - }; - CreatureAI* GetAI(Creature* creature) const override - { - return GetZulGurubAI(creature); + DoMeleeAttackIfReady(); } }; @@ -164,6 +155,6 @@ class spell_chain_burn : public SpellScript void AddSC_boss_hazzarah() { - new boss_hazzarah(); + RegisterZulGurubCreatureAI(boss_hazzarah); RegisterSpellScript(spell_chain_burn); } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp index c646774b6..de71c138f 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_thekal.cpp @@ -71,9 +71,6 @@ public: Initialize(); } - bool Enraged; - bool WasDead; - void Initialize() { Enraged = false; @@ -90,17 +87,16 @@ public: me->SetStandState(UNIT_STAND_STATE_STAND); me->SetReactState(REACT_AGGRESSIVE); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->LoadEquipment(1, true); if (Creature* zealot = instance->GetCreature(DATA_LORKHAN)) { zealot->AI()->Reset(); - zealot->ResetFaction(); } if (Creature* zealot = instance->GetCreature(DATA_ZATH)) { zealot->AI()->Reset(); - zealot->ResetFaction(); } _scheduler.SetValidator([this] @@ -157,16 +153,21 @@ public: void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType, SpellSchoolMask) override { - if (!WasDead && damage >= me->GetHealth()) + if (me->GetEntry() == NPC_HIGH_PRIEST_THEKAL && damage >= me->GetHealth()) { damage = me->GetHealth() - 1; - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetReactState(REACT_PASSIVE); - me->SetStandState(UNIT_STAND_STATE_SLEEP); - me->AttackStop(); - WasDead = true; - CheckPhaseTransition(); - Talk(EMOTE_THEKAL_DIES); + + if (!WasDead) + { + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->SetReactState(REACT_PASSIVE); + me->SetStandState(UNIT_STAND_STATE_SLEEP); + me->AttackStop(); + DoResetThreat(); + WasDead = true; + CheckPhaseTransition(); + Talk(EMOTE_THEKAL_DIES); + } } if (!Enraged && me->HealthBelowPctDamaged(20, damage) && me->GetEntry() != NPC_HIGH_PRIEST_THEKAL) @@ -182,7 +183,7 @@ public: { me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->ResetFaction(); + me->RestoreFaction(); me->SetReactState(REACT_AGGRESSIVE); me->SetFullHealth(); WasDead = false; @@ -202,11 +203,7 @@ public: { if (Creature* zealot = instance->GetCreature(zealotData)) { - zealot->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - zealot->ResetFaction(); - zealot->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - zealot->SetReactState(REACT_AGGRESSIVE); - zealot->SetFullHealth(); + zealot->Respawn(true); UpdateZealotStatus(zealotData, false); } } @@ -231,10 +228,10 @@ public: Talk(SAY_AGGRO); me->SetStandState(UNIT_STAND_STATE_STAND); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - DoResetThreat(); _scheduler.Schedule(6s, [this](TaskContext /*context*/) { DoCastSelf(SPELL_TIGER_FORM); + me->LoadEquipment(0, true); me->SetReactState(REACT_AGGRESSIVE); _scheduler.Schedule(30s, [this](TaskContext context) { @@ -261,7 +258,10 @@ public: else { _scheduler.Schedule(10s, [this](TaskContext /*context*/) { - DoAction(ACTION_RESSURRECT); + if (!(WasDead && _lorkhanDied && _zathDied)) + { + DoAction(ACTION_RESSURRECT); + } }); } } @@ -271,6 +271,8 @@ public: GuidVector _catGuids; bool _lorkhanDied; bool _zathDied; + bool Enraged; + bool WasDead; }; CreatureAI* GetAI(Creature* creature) const override @@ -295,10 +297,6 @@ public: void Reset() override { - me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->SetReactState(REACT_AGGRESSIVE); - _scheduler.CancelAll(); _scheduler.SetValidator([this] @@ -339,24 +337,13 @@ public: }); } - void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType, SpellSchoolMask) override + void JustDied(Unit* /*killer*/) override { - if (damage >= me->GetHealth() && me->HasReactState(REACT_AGGRESSIVE)) + Talk(EMOTE_ZEALOT_DIES); + + if (Creature* thekal = instance->GetCreature(DATA_THEKAL)) { - Talk(EMOTE_ZEALOT_DIES); - me->RemoveAllAuras(); - me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->SetStandState(UNIT_STAND_STATE_SLEEP); - me->SetReactState(REACT_PASSIVE); - me->InterruptNonMeleeSpells(false); - me->AttackStop(); - - damage = 0; - - if (Creature* thekal = instance->GetCreature(DATA_THEKAL)) - { - thekal->AI()->SetData(ACTION_RESSURRECT, DATA_LORKHAN); - } + thekal->AI()->SetData(ACTION_RESSURRECT, DATA_LORKHAN); } } @@ -395,10 +382,6 @@ public: void Reset() override { - me->SetStandState(UNIT_STAND_STATE_STAND); - me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->SetReactState(REACT_AGGRESSIVE); - _scheduler.CancelAll(); _scheduler.SetValidator([this] @@ -436,23 +419,13 @@ public: }); } - void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType, SpellSchoolMask) override + void JustDied(Unit* /*killer*/) override { - if (damage >= me->GetHealth() && me->HasReactState(REACT_AGGRESSIVE)) + Talk(EMOTE_ZEALOT_DIES); + + if (Creature* thekal = instance->GetCreature(DATA_THEKAL)) { - Talk(EMOTE_ZEALOT_DIES); - me->RemoveAllAuras(); - me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->SetStandState(UNIT_STAND_STATE_SLEEP); - me->SetReactState(REACT_PASSIVE); - me->AttackStop(); - - damage = 0; - - if (Creature* thekal = instance->GetCreature(DATA_THEKAL)) - { - thekal->AI()->SetData(ACTION_RESSURRECT, DATA_ZATH); - } + thekal->AI()->SetData(ACTION_RESSURRECT, DATA_ZATH); } } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp index 2cab32c31..325dd749c 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp @@ -51,7 +51,6 @@ public: instance_zulgurub_InstanceMapScript(Map* map) : InstanceScript(map) { SetBossNumber(EncounterCount); - LoadObjectData(creatureData, nullptr); LoadDoorData(doorData); LoadObjectData(creatureData, nullptr); } diff --git a/src/server/scripts/Events/midsummer.cpp b/src/server/scripts/Events/midsummer.cpp index 66e217d0c..3fe6b35e1 100644 --- a/src/server/scripts/Events/midsummer.cpp +++ b/src/server/scripts/Events/midsummer.cpp @@ -453,7 +453,8 @@ enum eJuggle SPELL_TORCH_CHECK = 45644, SPELL_GIVE_TORCH = 45280, - QUEST_CHECK = 11937, + QUEST_TORCH_CATCHING_A = 11657, + QUEST_TORCH_CATCHING_H = 11923 }; class spell_midsummer_juggling_torch : public SpellScript @@ -507,6 +508,36 @@ class spell_midsummer_juggling_torch : public SpellScript } }; +// 45644 - Juggle Torch (Catch) +class spell_midsummer_torch_catch : public SpellScript +{ + PrepareSpellScript(spell_midsummer_torch_catch); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_GIVE_TORCH }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Player* player = GetHitPlayer(); + if (!player) + { + return; + } + + if (player->GetQuestStatus(QUEST_TORCH_CATCHING_A) == QUEST_STATUS_REWARDED || player->GetQuestStatus(QUEST_TORCH_CATCHING_H) == QUEST_STATUS_REWARDED) + { + player->CastSpell(player, SPELL_GIVE_TORCH); + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_midsummer_torch_catch::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + void AddSC_event_midsummer_scripts() { // NPCs @@ -520,4 +551,5 @@ void AddSC_event_midsummer_scripts() RegisterSpellScript(spell_midsummer_torch_quest); RegisterSpellScript(spell_midsummer_fling_torch); RegisterSpellScript(spell_midsummer_juggling_torch); + RegisterSpellScript(spell_midsummer_torch_catch); } diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp index 9c529ca8c..55fa7d7c5 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/instance_azjol_nerub.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "AreaBoundary.h" #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "azjol_nerub.h" @@ -34,6 +35,13 @@ ObjectData const creatureData[] = { NPC_HADRONOX, DATA_HADRONOX_EVENT } }; +BossBoundaryData const boundaries = +{ + { DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, new RectangleBoundary(400.0f, 580.0f, 623.5f, 810.0f) }, + { DATA_HADRONOX_EVENT, new ZRangeBoundary(666.0f, 776.0f) }, + { DATA_ANUBARAK_EVENT, new CircleBoundary(Position(550.6178f, 253.5917f), 26.0f) } +}; + class instance_azjol_nerub : public InstanceMapScript { public: @@ -44,6 +52,7 @@ public: instance_azjol_nerub_InstanceScript(Map* map) : InstanceScript(map) { SetBossNumber(MAX_ENCOUNTERS); + LoadBossBoundaries(boundaries); LoadDoorData(doorData); LoadObjectData(creatureData, nullptr); }; diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 786b7b5a3..94379e484 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -125,20 +125,27 @@ public: { if (HealthBelowPct(50) && !health50) { - WorldObject* summoner = nullptr; if (TempSummon const* tempSummon = me->ToTempSummon()) { - summoner = tempSummon->GetSummonerUnit(); + if (WorldObject* summoner = tempSummon->GetSummonerUnit()) + { + Talk(SAY_TURMOIL_HALF_HP, summoner); + } } - Talk(SAY_TURMOIL_HALF_HP, summoner); health50 = true; } } void JustDied(Unit* /*killer*/) override { - Talk(SAY_TURMOIL_DEATH, me->ToTempSummon()->GetSummonerUnit()->ToPlayer()); + if (TempSummon const* tempSummon = me->ToTempSummon()) + { + if (WorldObject* summoner = tempSummon->GetSummonerUnit()) + { + Talk(SAY_TURMOIL_DEATH, summoner); + } + } } void setphase(short newPhase) diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index 2109d7265..d14a994e5 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -821,19 +821,19 @@ public: if (!IsHolidayActive(HOLIDAY_FIRE_FESTIVAL)) break; - Map::PlayerList const& players = me->GetMap()->GetPlayers(); - for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr) + std::list targets; + Acore::AnyPlayerInObjectRangeCheck check(me, me->GetVisibilityRange(), false); + Acore::PlayerListSearcherWithSharedVision searcher(me, targets, check); + Cell::VisitWorldObjects(me, searcher, me->GetVisibilityRange()); + for (Player* player : targets) { - if (Player* player = itr->GetSource()) + if (player->GetTeamId() == TEAM_HORDE) { - if (player->GetTeamId() == TEAM_HORDE) - { - me->PlayDirectMusic(EVENTMIDSUMMERFIREFESTIVAL_H, player); - } - else - { - me->PlayDirectMusic(EVENTMIDSUMMERFIREFESTIVAL_A, player); - } + me->PlayDirectMusic(EVENTMIDSUMMERFIREFESTIVAL_H, player); + } + else + { + me->PlayDirectMusic(EVENTMIDSUMMERFIREFESTIVAL_A, player); } }