aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_09_21_03_world.sql (renamed from sql/updates/world/2014_09_21_03_world_version.sql)0
-rw-r--r--sql/updates/world/2014_09_21_04_world.sql17
-rw-r--r--sql/updates/world/2014_09_21_05_world.sql3
-rw-r--r--sql/updates/world/2014_09_21_06_world.sql72
-rw-r--r--sql/updates/world/2014_09_21_07_world.sql9
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp27
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h2
-rw-r--r--src/server/game/Battlefield/Zones/BattlefieldWG.cpp1
-rw-r--r--src/server/game/Entities/Player/Player.cpp51
-rw-r--r--src/server/game/Entities/Player/Player.h10
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp12
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp4
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp19
-rw-r--r--src/server/game/Scripting/ScriptLoader.h1
-rw-r--r--src/server/game/Spells/Spell.cpp4
-rw-r--r--src/server/scripts/CMakeLists.txt2
-rw-r--r--src/server/scripts/Examples/CMakeLists.txt21
-rw-r--r--src/server/scripts/Examples/example_commandscript.cpp60
-rw-r--r--src/server/scripts/Examples/example_creature.cpp298
-rw-r--r--src/server/scripts/Examples/example_escort.cpp244
-rw-r--r--src/server/scripts/Examples/example_gossip_codebox.cpp114
-rw-r--r--src/server/scripts/Examples/example_misc.cpp82
-rw-r--r--src/server/scripts/Examples/example_spell.cpp491
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp1
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp1
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp1
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp1
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp207
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp50
-rw-r--r--src/server/scripts/Northrend/zone_howling_fjord.cpp27
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp12
-rw-r--r--src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp24
-rw-r--r--src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp1
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp69
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp46
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp47
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp28
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp14
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp12
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp28
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp21
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_gruul.cpp24
-rw-r--r--src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp72
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp34
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_omor_the_unscarred.cpp12
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp42
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp16
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp5
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp52
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp16
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp33
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warchief_kargath_bladefist.cpp23
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp40
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp45
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp148
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp18
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp14
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp14
-rw-r--r--src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp18
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp36
-rw-r--r--src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp24
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp12
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp20
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp20
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp14
-rw-r--r--src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp20
-rw-r--r--src/server/scripts/Outland/boss_doomwalker.cpp8
-rw-r--r--src/server/scripts/Outland/zone_blades_edge_mountains.cpp36
-rw-r--r--src/server/scripts/Outland/zone_hellfire_peninsula.cpp24
-rw-r--r--src/server/scripts/Outland/zone_nagrand.cpp30
-rw-r--r--src/server/scripts/Outland/zone_netherstorm.cpp40
-rw-r--r--src/server/scripts/Outland/zone_shadowmoon_valley.cpp184
72 files changed, 1453 insertions, 1775 deletions
diff --git a/sql/updates/world/2014_09_21_03_world_version.sql b/sql/updates/world/2014_09_21_03_world.sql
index be9e7de91ba..be9e7de91ba 100644
--- a/sql/updates/world/2014_09_21_03_world_version.sql
+++ b/sql/updates/world/2014_09_21_03_world.sql
diff --git a/sql/updates/world/2014_09_21_04_world.sql b/sql/updates/world/2014_09_21_04_world.sql
new file mode 100644
index 00000000000..2885e30b1ff
--- /dev/null
+++ b/sql/updates/world/2014_09_21_04_world.sql
@@ -0,0 +1,17 @@
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=8301 AND `id`=1;
+INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `OptionBroadcastTextID`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`, `BoxBroadcastTextID`) VALUES
+(8301, 1, 0, 'I need another disguise, Borak. I lost the last one.', 19182, 1, 1, 0, 0, 0, 0, '', 0);
+
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=37064, `action_param2`=2, `comment`='Borak, Son of Oronok - On Gossip Option 0 Selected -Cast Create Bundle of Bloodthistle' WHERE `entryorguid`=21293 AND `source_type`=0 AND `id`=2 AND `link`=3;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24806, `action_param2`=2, `comment`='Hive\'Ashi Glyphed Crystal - On Gossip Option 0 Selected - Cast Create Hive\'Ashi Rubbing DND' WHERE `entryorguid`=180454 AND `source_type`=1 AND `id`=1 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24807, `action_param2`=2, `comment`='Hive\'Regal Glyphed Crystal - On Gossip Option 0 Selected - Cast Create Hive\'Regal Rubbing DND' WHERE `entryorguid`=180453 AND `source_type`=1 AND `id`=1 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24805, `action_param2`=2, `comment`='Hive\'Zora Glyphed Crystal - On Gossip Option 0 Selected - Cast Create Hive\'Zora Rubbing DND' WHERE `entryorguid`=180455 AND `source_type`=1 AND `id`=1 AND `link`=0;
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21293 AND `source_type`=0 AND `id`=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`, `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
+(21293, 0, 5, 3, 62, 0, 100, 0, 8301, 1, 0, 0, 85, 37100, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Borak, Son of Oronok - On Gossip Option 1 Selected -Cast Create Blood Elf Disguise');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=8301 AND `SourceEntry`=1;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+(15, 8301, 1, 0, 0, 9, 0, 10577, 0, 0, 0, 0, 0, '', 'Show gossip menu option if player has quest What Illidan Wants, Illidan Gets...'),
+(15, 8301, 1, 0, 0, 2, 0, 30639, 1, 0, 1, 0, 0, '', 'Show gossip menu option if player does not have item Blood Elf Disguise');
diff --git a/sql/updates/world/2014_09_21_05_world.sql b/sql/updates/world/2014_09_21_05_world.sql
new file mode 100644
index 00000000000..b2a4fc2a0d4
--- /dev/null
+++ b/sql/updates/world/2014_09_21_05_world.sql
@@ -0,0 +1,3 @@
+UPDATE `creature_template` SET `ScriptName`= 'npc_invis_infernal_caster' WHERE `entry`=21417;
+UPDATE `creature_template` SET `AIName`="", `ScriptName`= 'npc_infernal_attacker' WHERE `entry`=21419;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=21419 AND `source_type`=0;
diff --git a/sql/updates/world/2014_09_21_06_world.sql b/sql/updates/world/2014_09_21_06_world.sql
new file mode 100644
index 00000000000..8f1f22d4486
--- /dev/null
+++ b/sql/updates/world/2014_09_21_06_world.sql
@@ -0,0 +1,72 @@
+UPDATE `gossip_menu_option` SET `OptionBroadcastTextID`=19252 WHERE `menu_id`=8301 AND `id`=1;
+
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28945, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 0 Selected - Cast Summon Confessor\'s Belt DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=0 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28939, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 0 Selected - Cast Summon Madcap\'s Bracers DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=0 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=22958, `action_param2`=2, `comment`='Highlord Demitrian - On Gossip Complete - Cast Summon Vessel of Rebirth DND' WHERE `entryorguid`=14347 AND `source_type`=0 AND `id`=0 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28920, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 0 Selected - Cast Summon Freethinker\'s Bracers DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=0 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28923, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 0 Selected - Summon Augur\'s Belt DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=0 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=38255, `action_param2`=2, `comment`='Tally Zapnabber - On Gossip Option 0 Selected - Cast Create Gnome Cannon Waiver' WHERE `entryorguid`=21460 AND `source_type`=0 AND `id`=0 AND `link`=1;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=25763, `action_param2`=2, `comment`='Draconic for Dummies - On Gossip Option 0 Selected - Cast Draconic For Dummies 7 DND' WHERE `entryorguid`=180667 AND `source_type`=1 AND `id`=0 AND `link`=1;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=25765, `action_param2`=2, `comment`='Draconic for Dummies - On Gossip Option 0 Selected - Cast Draconic For Dummies 4 DND' WHERE `entryorguid`=180666 AND `source_type`=1 AND `id`=0 AND `link`=1;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=25764, `action_param2`=2, `comment`='Draconic for Dummies - On Gossip Option 0 Selected - Cast Draconic For Dummies 5 DND' WHERE `entryorguid`=180665 AND `source_type`=1 AND `id`=0 AND `link`=1;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28937, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 1 Selected - Cast Summon Madcap\'s Mantle DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=1 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28943, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 1 Selected - Cast Summon Confessor\'s Mantle DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=1 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28919, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 1 Selected - Cast Summon Freethinker\'s Belt DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=1 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28926, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 1 Selected - Cast Summon Augur\'s Bracers DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=1 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28946, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 2 Selected - Cast Summon Confessor\'s Bracers DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=2 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28935, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 2 Selected - Cast Summon Madcap\'s BP DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=2 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28909, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 2 Selected - Cast Summon Freethinker\'s BP DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=2 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28959, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 2 Selected - Cast Summon Augur\'s BP DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=2 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24015, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 3 Selected - Cast Create Zul\'Gurub Talisman PRT R4 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=3 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24075, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 3 Selected - Cast Create Zul\'Gurub Talisman ROG R4 DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=3 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24010, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 3 Selected - Cast Zul\'Gurub Talisman PAL R4 DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=3 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24070, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 3 Selected - Cast Create Zul\'Gurub Talisman SHM R4 DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=3 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24012, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 4 Selected - Cast Create Zul\'Gurub Talisman PRT R1 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=4 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24072, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 4 Selected - Cast Create Zul\'Gurub Talisman ROG R1 DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=4 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24007, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 4 Selected - Cast Zul\'Gurub Talisman PAL R1 DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=4 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24067, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 4 Selected - Cast Create Zul\'Gurub Talisman SHM R1 DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=4 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24013, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 5 Selected - Cast Create Zul\'Gurub Talisman PRT R2 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=5 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24073, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 5 Selected - Cast Create Zul\'Gurub Talisman ROG R2 DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=5 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24008, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 5 Selected - Cast Zul\'Gurub Talisman PAL R2 DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=5 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24068, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 5 Selected - Cast Create Zul\'Gurub Talisman SHM R2 DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=5 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24014, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 6 Selected - Cast Create Zul\'Gurub Talisman PRT R3 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=6 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24074, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 6 Selected - Cast Create Zul\'Gurub Talisman ROG R3 DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=6 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24009, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 6 Selected - Cast Zul\'Gurub Talisman PAL R3 DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=6 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24069, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 6 Selected - Cast Create Zul\'Gurub Talisman SHM R3 DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=6 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28956, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 0 Selected - Cast Summon Demoniac\'s Mantle DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=14 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28929, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 0 Selected - Cast Summon Predator\'s Belt DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=14 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28908, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 0 Selected - Cast Summon Vindicator\'s Armguards DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=14 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28941, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 0 Selected - Cast Summon Haruspex\'s Belt DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=14 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28954, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 1 Selected - Summon Demoniac\'s BP DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=15 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28930, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 1 Selected - Cast Summon Predator\'s Bracers DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=15 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28886, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 1 Selected - Cast Summon Vindicator\'s Belt DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=15 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28942, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 1 Selected - Cast Summon Haruspex\'s Bracers DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=15 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28958, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 2 Selected - Casy Summon Demoniac\'s Bracers DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=16 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28921, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 2 Selected - Cast Summon Predator\'s Mantle DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=16 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28885, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 2 Selected - Cast Summon Vindicator\'s BP DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=16 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28940, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 2 Selected - Cast Summon Haruspex\'s BP DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=16 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24047, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 3 Selected - Cast Create Zul\'Gurub Talisman WLK R4 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=17 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24079, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 3 Selected - Cast Create Zul\'Gurub Talisman HUN R4 DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=17 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24001, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 3 Selected - Cast Create Zul\'Gurub Talisman WAR R4 DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=17 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24060, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 3 Selected - Cast Create Zul\'Gurub Talisman DRU R4 DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=17 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24044, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 4 Selected - Cast Create Zul\'Gurub Talisman WLK R1 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=18 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24076, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 4 Selected - Cast Create Zul\'Gurub Talisman HUN R1 DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=18 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=23998, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 4 Selected - Cast Create Zul\'Gurub Talisman WAR R1 DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=18 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24055, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 4 Selected - Cast Create Zul\'Gurub Talisman DRU R1 DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=18 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24045, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 5 Selected - Cast Create Zul\'Gurub Talisman WLK R2 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=19 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24077, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 5 Selected - Cast Create Zul\'Gurub Talisman HUN R2 DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=19 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=23999, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 5 Selected - Cast Create Zul\'Gurub Talisman WAR R2 DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=19 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24056, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 5 Selected - Cast Create Zul\'Gurub Talisman DRU R2 DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=19 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24046, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 6 Selected - Cast Create Zul\'Gurub Talisman WLK R3 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=20 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24078, `action_param2`=2, `comment`='Falthir the Sightless - On Gossip Option 6 Selected - Cast Create Zul\'Gurub Talisman HUN R3 DND' WHERE `entryorguid`=14905 AND `source_type`=0 AND `id`=20 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24000, `action_param2`=2, `comment`='Jin\'rokh the Breaker - On Gossip Option 6 Selected - Cast Create Zul\'Gurub Talisman WAR R3 DND' WHERE `entryorguid`=14902 AND `source_type`=0 AND `id`=20 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24059, `action_param2`=2, `comment`='Maywiki of Zuldazar - On Gossip Option 6 Selected - Cast Create Zul\'Gurub Talisman DRU R3 DND' WHERE `entryorguid`=14904 AND `source_type`=0 AND `id`=20 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28951, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 0 Selected - Cast Summon Illusionist\'s Mantle DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=28 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28949, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 1 Selected - Cast Summon Illusionist\'s BP DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=29 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=28952, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 2 Selected - Cast Summon Illusionist\'s Bracers DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=30 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24041, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 3 Selected - Cast Create Zul\'Gurub Talisman MAG R4 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=31 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24038, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 4 Selected - Cast Create Zul\'Gurub Talisman MAG R1 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=32 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24039, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 5 Selected - Cast Create Zul\'Gurub Talisman MAG R2 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=33 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=24040, `action_param2`=2, `comment`='Al\'tabim the All-Seeing - On Gossip Option 6 Selected -Cast Create Zul\'Gurub Talisman MAG R3 DND' WHERE `entryorguid`=14903 AND `source_type`=0 AND `id`=34 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=25600, `action_param2`=2, `comment`='Spirit of Azuregos - On Gossip Option 0 Selected - Cast Idol of Neptulon DND' WHERE `entryorguid`=15481 AND `source_type`=0 AND `id`=0 AND `link`=0;
+UPDATE `smart_scripts` SET `action_type`=85, `action_param1`=31314, `action_param2`=2, `comment`='Blood Knight Dawnstar - On Gossip Option 0 Selected - Cast Summon Blood Knight Insignia' WHERE `entryorguid`=17832 AND `source_type`=0 AND `id`=0 AND `link`=1;
diff --git a/sql/updates/world/2014_09_21_07_world.sql b/sql/updates/world/2014_09_21_07_world.sql
new file mode 100644
index 00000000000..db11a7fa3d2
--- /dev/null
+++ b/sql/updates/world/2014_09_21_07_world.sql
@@ -0,0 +1,9 @@
+-- ModelID Fix For NPC: 21749
+-- Also Remove Dwarf ModelID From ModelID of 21749
+DELETE FROM `creature_model_info` WHERE `modelid` IN (20447, 20448, 20449, 20450, 18790);
+INSERT INTO `creature_model_info` (`modelid`, `bounding_radius`, `combat_reach`, `gender`, `modelid_other_gender`) VALUES
+(20447, 0.372, 1.5, 0, 20449), -- Male Green Orc
+(20448, 0.372, 1.5, 0, 20450), -- Male Dark Green Orc
+(20449, 0.236, 1.5, 1, 20448), -- Female Dark Green Orc
+(20450, 0.236, 1.5, 1, 20447), -- Female Green Orc
+(18790, 0.347, 1.5, 1, 18791); -- Dwarf
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index db61730326c..86119785cbd 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -883,10 +883,9 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
CacheSpellContainerBounds sBounds = GetSummonGameObjectSpellContainerBounds(e.action.summonGO.entry);
for (CacheSpellContainer::const_iterator itr = sBounds.first; itr != sBounds.second; ++itr)
TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u gameobject summon: There is a summon spell for gameobject entry %u (SpellId: %u, effect: %u)",
- e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.summonGO.entry, itr->second.first, itr->second.second);
+ e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.summonGO.entry, itr->second.first, itr->second.second);
break;
}
- case SMART_ACTION_ADD_ITEM:
case SMART_ACTION_REMOVE_ITEM:
if (!IsItemValid(e, e.action.item.entry))
return false;
@@ -894,6 +893,20 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
if (!NotNULL(e, e.action.item.count))
return false;
break;
+ case SMART_ACTION_ADD_ITEM:
+ {
+ if (!IsItemValid(e, e.action.item.entry))
+ return false;
+
+ if (!NotNULL(e, e.action.item.count))
+ return false;
+
+ CacheSpellContainerBounds sBounds = GetCreditItemSpellContainerBounds(e.action.item.entry);
+ for (CacheSpellContainer::const_iterator itr = sBounds.first; itr != sBounds.second; ++itr)
+ TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u Create Item: There is a create item spell for item %u (SpellId: %u effect: %u)",
+ e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.item.entry, itr->second.first, itr->second.second);
+ break;
+ }
case SMART_ACTION_TELEPORT:
if (!sMapStore.LookupEntry(e.action.teleport.mapID))
{
@@ -1172,6 +1185,9 @@ void SmartAIMgr::LoadHelperStores()
else if (spellInfo->Effects[j].IsEffect(SPELL_EFFECT_KILL_CREDIT) || spellInfo->Effects[j].IsEffect(SPELL_EFFECT_KILL_CREDIT2))
KillCreditSpellStore.insert(std::make_pair(uint32(spellInfo->Effects[j].MiscValue), std::make_pair(i, SpellEffIndex(j))));
+
+ else if (spellInfo->Effects[j].IsEffect(SPELL_EFFECT_CREATE_ITEM))
+ CreateItemSpellStore.insert(std::make_pair(uint32(spellInfo->Effects[j].ItemType), std::make_pair(i, SpellEffIndex(j))));
}
}
@@ -1183,6 +1199,7 @@ void SmartAIMgr::UnLoadHelperStores()
SummonCreatureSpellStore.clear();
SummonGameObjectSpellStore.clear();
KillCreditSpellStore.clear();
+ CreateItemSpellStore.clear();
}
CacheSpellContainerBounds SmartAIMgr::GetSummonCreatureSpellContainerBounds(uint32 creatureEntry) const
@@ -1199,3 +1216,9 @@ CacheSpellContainerBounds SmartAIMgr::GetKillCreditSpellContainerBounds(uint32 k
{
return KillCreditSpellStore.equal_range(killCredit);
}
+
+CacheSpellContainerBounds SmartAIMgr::GetCreditItemSpellContainerBounds(uint32 itemId) const
+{
+ return CreateItemSpellStore.equal_range(itemId);
+}
+
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 4404b224db1..51105d5b433 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -1623,10 +1623,12 @@ class SmartAIMgr
CacheSpellContainerBounds GetSummonCreatureSpellContainerBounds(uint32 creatureEntry) const;
CacheSpellContainerBounds GetSummonGameObjectSpellContainerBounds(uint32 gameObjectEntry) const;
CacheSpellContainerBounds GetKillCreditSpellContainerBounds(uint32 killCredit) const;
+ CacheSpellContainerBounds GetCreditItemSpellContainerBounds(uint32 itemId) const;
CacheSpellContainer SummonCreatureSpellStore;
CacheSpellContainer SummonGameObjectSpellStore;
CacheSpellContainer KillCreditSpellStore;
+ CacheSpellContainer CreateItemSpellStore;
};
#define sSmartScriptMgr SmartAIMgr::instance()
diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
index 3b3f6eb247a..4c5994f6b3a 100644
--- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
+++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp
@@ -1061,6 +1061,7 @@ BfWGGameObjectBuilding::BfWGGameObjectBuilding(BattlefieldWG* wg, WintergraspGam
_type = type;
_worldState = worldState;
_state = BATTLEFIELD_WG_OBJECTSTATE_NONE;
+ _staticTowerInfo = nullptr;
}
void BfWGGameObjectBuilding::Rebuild()
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index ed3ae280c5b..964d826394c 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -754,6 +754,13 @@ Player::Player(WorldSession* session): Unit(true)
m_DailyQuestChanged = false;
m_lastDailyQuestTime = 0;
+ // Init rune flags
+ for (uint8 i = 0; i < MAX_RUNES; ++i)
+ {
+ SetRuneTimer(i, 0xFFFFFFFF);
+ SetLastRuneGraceTimer(i, 0);
+ }
+
for (uint8 i=0; i < MAX_TIMERS; i++)
m_MirrorTimer[i] = DISABLED_MIRROR_TIMER;
@@ -1852,6 +1859,26 @@ void Player::Update(uint32 p_time)
}
}
+ if (getClass() == CLASS_DEATH_KNIGHT)
+ {
+ // Update rune timers
+ for (uint8 i = 0; i < MAX_RUNES; ++i)
+ {
+ uint32 timer = GetRuneTimer(i);
+
+ // Don't update timer if rune is disabled
+ if (GetRuneCooldown(i))
+ continue;
+
+ // Timer has began
+ if (timer < 0xFFFFFFFF)
+ {
+ timer += p_time;
+ SetRuneTimer(i, std::min(uint32(2500), timer));
+ }
+ }
+ }
+
// group update
SendUpdateToOutOfRangeGroupMembers();
@@ -25264,8 +25291,22 @@ uint32 Player::GetRuneTypeBaseCooldown(RuneType runeType) const
return cooldown;
}
-void Player::SetRuneCooldown(uint8 index, uint32 cooldown)
+void Player::SetRuneCooldown(uint8 index, uint32 cooldown, bool casted /*= false*/)
{
+ uint32 gracePeriod = GetRuneTimer(index);
+
+ if (casted && IsInCombat())
+ {
+ if (gracePeriod < 0xFFFFFFFF && cooldown > 0)
+ {
+ uint32 lessCd = std::min(uint32(2500), gracePeriod);
+ cooldown = (cooldown > lessCd) ? (cooldown - lessCd) : 0;
+ SetLastRuneGraceTimer(index, lessCd);
+ }
+
+ SetRuneTimer(index, 0);
+ }
+
m_runes->runes[index].Cooldown = cooldown;
m_runes->SetRuneState(index, (cooldown == 0) ? true : false);
}
@@ -25362,9 +25403,11 @@ void Player::InitRunes()
for (uint8 i = 0; i < MAX_RUNES; ++i)
{
- SetBaseRune(i, runeSlotTypes[i]); // init base types
- SetCurrentRune(i, runeSlotTypes[i]); // init current types
- SetRuneCooldown(i, 0); // reset cooldowns
+ SetBaseRune(i, runeSlotTypes[i]); // init base types
+ SetCurrentRune(i, runeSlotTypes[i]); // init current types
+ SetRuneCooldown(i, 0); // reset cooldowns
+ SetRuneTimer(i, 0xFFFFFFFF); // Reset rune flags
+ SetLastRuneGraceTimer(i, 0);
SetRuneConvertAura(i, NULL);
m_runes->SetRuneState(i);
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index e2395b6d734..2d4d5183a92 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2043,6 +2043,10 @@ class Player : public Unit, public GridObject<Player>
void ApplyHealthRegenBonus(int32 amount, bool apply);
void UpdateManaRegen();
void UpdateRuneRegen(RuneType rune);
+ uint32 GetRuneTimer(uint8 index) const { return m_runeGraceCooldown[index]; }
+ void SetRuneTimer(uint8 index, uint32 timer) { m_runeGraceCooldown[index] = timer; }
+ uint32 GetLastRuneGraceTimer(uint8 index) const { return m_lastRuneGraceTimers[index]; }
+ void SetLastRuneGraceTimer(uint8 index, uint32 timer) { m_lastRuneGraceTimers[index] = timer; }
void UpdateAllRunesRegen();
ObjectGuid GetLootGUID() const { return m_lootGuid; }
@@ -2499,7 +2503,7 @@ class Player : public Unit, public GridObject<Player>
void SetLastUsedRune(RuneType type) { m_runes->lastUsedRune = type; }
void SetBaseRune(uint8 index, RuneType baseRune) { m_runes->runes[index].BaseRune = baseRune; }
void SetCurrentRune(uint8 index, RuneType currentRune) { m_runes->runes[index].CurrentRune = currentRune; }
- void SetRuneCooldown(uint8 index, uint32 cooldown);
+ void SetRuneCooldown(uint8 index, uint32 cooldown, bool casted = false);
void SetRuneConvertAura(uint8 index, AuraEffect const* aura);
void AddRuneByAuraEffect(uint8 index, RuneType newType, AuraEffect const* aura);
void RemoveRunesByAuraEffect(AuraEffect const* aura);
@@ -2886,6 +2890,10 @@ class Player : public Unit, public GridObject<Player>
uint8 m_MirrorTimerFlagsLast;
bool m_isInWater;
+ // Rune type / Rune timer
+ uint32 m_runeGraceCooldown[MAX_RUNES];
+ uint32 m_lastRuneGraceTimers[MAX_RUNES];
+
// Current teleport data
WorldLocation m_teleport_dest;
uint32 m_teleport_options;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 01978027ff1..bca95e155d4 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -6571,7 +6571,7 @@ bool Unit::HandleAuraProc(Unit* victim, uint32 /*damage*/, Aura* triggeredByAura
player->GetBaseRune(i) != RUNE_BLOOD)
continue;
}
- if (player->GetRuneCooldown(i) != player->GetRuneBaseCooldown(i))
+ if (player->GetRuneCooldown(i) != (player->GetRuneBaseCooldown(i) - player->GetLastRuneGraceTimer(i)))
continue;
--runesLeft;
@@ -10167,6 +10167,16 @@ void Unit::ClearInCombat()
m_CombatTimer = 0;
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
+ // Reset rune flags after combat
+ if (GetTypeId() == TYPEID_PLAYER && getClass() == CLASS_DEATH_KNIGHT)
+ {
+ for (uint8 i = 0; i < MAX_RUNES; ++i)
+ {
+ ToPlayer()->SetRuneTimer(i, 0xFFFFFFFF);
+ ToPlayer()->SetLastRuneGraceTimer(i, 0);
+ }
+ }
+
// Player's state will be cleared in Player::UpdateContestedPvP
if (Creature* creature = ToCreature())
{
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 8a8570b7fc6..0bb49260244 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -688,13 +688,13 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
if (cInfo->minlevel > difficultyInfo->minlevel)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, minlevel %u) has different `minlevel` in difficulty %u mode (Entry: %u, minlevel %u).",
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, minlevel %u) has lower `minlevel` in difficulty %u mode (Entry: %u, minlevel %u).",
cInfo->Entry, cInfo->minlevel, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->minlevel);
}
if (cInfo->maxlevel > difficultyInfo->maxlevel)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, maxlevel %u) has different `maxlevel` in difficulty %u mode (Entry: %u, maxlevel %u).",
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, maxlevel %u) has lower `maxlevel` in difficulty %u mode (Entry: %u, maxlevel %u).",
cInfo->Entry, cInfo->maxlevel, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->maxlevel);
}
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index bff413d73f4..0e43a63c98e 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -18,13 +18,6 @@
#include "ScriptLoader.h"
#include "World.h"
-//examples
-void AddSC_example_creature();
-void AddSC_example_escort();
-void AddSC_example_gossip_codebox();
-void AddSC_example_misc();
-void AddSC_example_commandscript();
-
// spells
void AddSC_deathknight_spell_scripts();
void AddSC_druid_spell_scripts();
@@ -39,7 +32,6 @@ void AddSC_warlock_spell_scripts();
void AddSC_warrior_spell_scripts();
void AddSC_quest_spell_scripts();
void AddSC_item_spell_scripts();
-void AddSC_example_spell_scripts();
void AddSC_holiday_spell_scripts();
void AddSC_SmartScripts();
@@ -714,7 +706,6 @@ void AddSC_action_ip_logger();
void AddScripts()
{
- AddExampleScripts();
AddSpellScripts();
AddSC_SmartScripts();
AddCommandScripts();
@@ -733,15 +724,6 @@ void AddScripts()
#endif
}
-void AddExampleScripts()
-{
- AddSC_example_creature();
- AddSC_example_escort();
- AddSC_example_gossip_codebox();
- AddSC_example_misc();
- AddSC_example_commandscript();
-}
-
void AddSpellScripts()
{
AddSC_deathknight_spell_scripts();
@@ -757,7 +739,6 @@ void AddSpellScripts()
AddSC_warrior_spell_scripts();
AddSC_quest_spell_scripts();
AddSC_item_spell_scripts();
- AddSC_example_spell_scripts();
AddSC_holiday_spell_scripts();
}
diff --git a/src/server/game/Scripting/ScriptLoader.h b/src/server/game/Scripting/ScriptLoader.h
index a68f78997b3..49a31700403 100644
--- a/src/server/game/Scripting/ScriptLoader.h
+++ b/src/server/game/Scripting/ScriptLoader.h
@@ -19,7 +19,6 @@
#define SC_SCRIPTLOADER_H
void AddScripts();
-void AddExampleScripts();
void AddSpellScripts();
void AddCommandScripts();
void AddWorldScripts();
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 05cf35465ef..01eeac8066a 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -4475,7 +4475,7 @@ void Spell::TakeRunePower(bool didHit)
RuneType rune = player->GetCurrentRune(i);
if (!player->GetRuneCooldown(i) && runeCost[rune] > 0)
{
- player->SetRuneCooldown(i, didHit ? player->GetRuneBaseCooldown(i) : uint32(RUNE_MISS_COOLDOWN));
+ player->SetRuneCooldown(i, didHit ? player->GetRuneBaseCooldown(i) : uint32(RUNE_MISS_COOLDOWN), true);
player->SetLastUsedRune(rune);
runeCost[rune]--;
}
@@ -4490,7 +4490,7 @@ void Spell::TakeRunePower(bool didHit)
RuneType rune = player->GetCurrentRune(i);
if (!player->GetRuneCooldown(i) && rune == RUNE_DEATH)
{
- player->SetRuneCooldown(i, didHit ? player->GetRuneBaseCooldown(i) : uint32(RUNE_MISS_COOLDOWN));
+ player->SetRuneCooldown(i, didHit ? player->GetRuneBaseCooldown(i) : uint32(RUNE_MISS_COOLDOWN), true);
player->SetLastUsedRune(rune);
runeCost[rune]--;
diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt
index 31c61cdf0e6..e92c883eeff 100644
--- a/src/server/scripts/CMakeLists.txt
+++ b/src/server/scripts/CMakeLists.txt
@@ -20,8 +20,6 @@ include(Spells/CMakeLists.txt)
include(Commands/CMakeLists.txt)
-include(Examples/CMakeLists.txt)
-
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
../game/AI/ScriptedAI/ScriptedEscortAI.cpp
diff --git a/src/server/scripts/Examples/CMakeLists.txt b/src/server/scripts/Examples/CMakeLists.txt
deleted file mode 100644
index 2688fe4174d..00000000000
--- a/src/server/scripts/Examples/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
-#
-# This file is free software; as a special exception the author gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
-set(scripts_STAT_SRCS
- ${scripts_STAT_SRCS}
- Examples/example_misc.cpp
- Examples/example_gossip_codebox.cpp
- Examples/example_escort.cpp
- Examples/example_creature.cpp
- Examples/example_spell.cpp
- Examples/example_commandscript.cpp
-)
-
-message(" -> Prepared: Examples")
diff --git a/src/server/scripts/Examples/example_commandscript.cpp b/src/server/scripts/Examples/example_commandscript.cpp
deleted file mode 100644
index 8b7003c6666..00000000000
--- a/src/server/scripts/Examples/example_commandscript.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 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 General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* ScriptData
-Name: Example_Commandscript
-%Complete: 100
-Comment: Short custom scripting example
-Category: Script Examples
-EndScriptData */
-
-#include "ScriptMgr.h"
-#include "Chat.h"
-
-// **** This script is designed as an example for others to build on ****
-// **** Please modify whatever you'd like to as this script is only for developement ****
-
-// **** Script Info* ***
-// This script's primary purpose is to show just how much you can really do with commandscripts
-
-class example_commandscript : public CommandScript
-{
- public:
- example_commandscript() : CommandScript("example_commandscript") { }
-
- static bool HandleHelloWorldCommand(ChatHandler* handler, const char* /*args*/)
- {
- handler->PSendSysMessage("Hello World");
- return true;
- }
-
- ChatCommand* GetCommands() const override
- {
- static ChatCommand HelloWorldCommandTable[] =
- {
- { "hello", SEC_PLAYER, true, &HandleHelloWorldCommand, "", NULL },
- { NULL, 0, false, NULL, "", NULL }
- };
- return HelloWorldCommandTable;
- }
-};
-
-void AddSC_example_commandscript()
-{
- new example_commandscript();
-}
diff --git a/src/server/scripts/Examples/example_creature.cpp b/src/server/scripts/Examples/example_creature.cpp
deleted file mode 100644
index 9fa2940a43f..00000000000
--- a/src/server/scripts/Examples/example_creature.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 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 General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* ScriptData
-SDName: Example_Creature
-SD%Complete: 100
-SDComment: Short custom scripting example
-SDCategory: Script Examples
-EndScriptData */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-#include "ScriptedGossip.h"
-#include "Player.h"
-
-// **** This script is designed as an example for others to build on ****
-// **** Please modify whatever you'd like to as this script is only for developement ****
-
-// **** Script Info* ***
-// This script is written in a way that it can be used for both friendly and hostile monsters
-// Its primary purpose is to show just how much you can really do with scripts
-// I recommend trying it out on both an agressive NPC and on friendly npc
-
-// **** Quick Info* ***
-// Functions with Handled Function marked above them are functions that are called automatically by the core
-// Functions that are marked Custom Function are functions I've created to simplify code
-
-enum Yells
-{
- //List of text id's. The text is stored in database, also in a localized version
- //(if translation not exist for the textId, default english text will be used)
- //Not required to define in this way, but simplify if changes are needed.
- //These texts must be added to the creature texts of the npc for which the script is assigned.
- SAY_AGGRO = 0, // "Let the games begin."
- SAY_RANDOM = 1, // "I see endless suffering. I see torment. I see rage. I see everything.",
- // "Muahahahaha",
- // "These mortal infedels my lord, they have invaded your sanctum and seek to steal your secrets.",
- // "You are already dead.",
- // "Where to go? What to do? So many choices that all end in pain, end in death."
- SAY_BERSERK = 2, // "$N, I sentance you to death!"
- SAY_PHASE = 3, // "The suffering has just begun!"
- SAY_DANCE = 4, // "I always thought I was a good dancer."
- SAY_SALUTE = 5, // "Move out Soldier!"
- SAY_EVADE = 6 // "Help $N! I'm under attack!"
-};
-
-enum Spells
-{
- // List of spells.
- // Not required to define them in this way, but will make it easier to maintain in case spellId change
- SPELL_BUFF = 25661,
- SPELL_ONE = 12555,
- SPELL_ONE_ALT = 24099,
- SPELL_TWO = 10017,
- SPELL_THREE = 26027,
- SPELL_FRENZY = 23537,
- SPELL_BERSERK = 32965,
-};
-
-enum Factions
-{
- // any other constants
- FACTION_WORGEN = 24
-};
-
-//List of gossip item texts. Items will appear in the gossip window.
-#define GOSSIP_ITEM "I'm looking for a fight"
-
-class example_creature : public CreatureScript
-{
- public:
-
- example_creature()
- : CreatureScript("example_creature")
- {
- }
-
- struct example_creatureAI : public ScriptedAI
- {
- // *** HANDLED FUNCTION ***
- //This is the constructor, called only once when the Creature is first created
- example_creatureAI(Creature* creature) : ScriptedAI(creature) { }
-
- // *** CUSTOM VARIABLES ****
- //These variables are for use only by this individual script.
- //Nothing else will ever call them but us.
-
- uint32 m_uiSayTimer; // Timer for random chat
- uint32 m_uiRebuffTimer; // Timer for rebuffing
- uint32 m_uiSpell1Timer; // Timer for spell 1 when in combat
- uint32 m_uiSpell2Timer; // Timer for spell 1 when in combat
- uint32 m_uiSpell3Timer; // Timer for spell 1 when in combat
- uint32 m_uiBeserkTimer; // Timer until we go into Beserk (enraged) mode
- uint32 m_uiPhase; // The current battle phase we are in
- uint32 m_uiPhaseTimer; // Timer until phase transition
-
- // *** HANDLED FUNCTION ***
- //This is called after spawn and whenever the core decides we need to evade
- void Reset() override
- {
- m_uiPhase = 1; // Start in phase 1
- m_uiPhaseTimer = 60000; // 60 seconds
- m_uiSpell1Timer = 5000; // 5 seconds
- m_uiSpell2Timer = urand(10000, 20000); // between 10 and 20 seconds
- m_uiSpell3Timer = 19000; // 19 seconds
- m_uiBeserkTimer = 120000; // 2 minutes
-
- me->RestoreFaction();
- }
-
- // *** HANDLED FUNCTION ***
- // Enter Combat called once per combat
- void EnterCombat(Unit* who) override
- {
- //Say some stuff
- Talk(SAY_AGGRO, who);
- }
-
- // *** HANDLED FUNCTION ***
- // Attack Start is called when victim change (including at start of combat)
- // By default, attack who and start movement toward the victim.
- //void AttackStart(Unit* who) override
- //{
- // ScriptedAI::AttackStart(who);
- //}
-
- // *** HANDLED FUNCTION ***
- // Called when going out of combat. Reset is called just after.
- void EnterEvadeMode() override
- {
- Talk(SAY_EVADE);
- }
-
- // *** HANDLED FUNCTION ***
- //Our Receive emote function
- void ReceiveEmote(Player* /*player*/, uint32 uiTextEmote) override
- {
- me->HandleEmoteCommand(uiTextEmote);
-
- switch (uiTextEmote)
- {
- case TEXT_EMOTE_DANCE:
- Talk(SAY_DANCE);
- break;
- case TEXT_EMOTE_SALUTE:
- Talk(SAY_SALUTE);
- break;
- }
- }
-
- // *** HANDLED FUNCTION ***
- //Update AI is called Every single map update (roughly once every 50ms if a player is within the grid)
- void UpdateAI(uint32 uiDiff) override
- {
- //Out of combat timers
- if (!me->GetVictim())
- {
- //Random Say timer
- if (m_uiSayTimer <= uiDiff)
- {
- //Random switch between 5 outcomes
- Talk(SAY_RANDOM);
-
- m_uiSayTimer = 45000; //Say something agian in 45 seconds
- }
- else
- m_uiSayTimer -= uiDiff;
-
- //Rebuff timer
- if (m_uiRebuffTimer <= uiDiff)
- {
- DoCast(me, SPELL_BUFF);
- m_uiRebuffTimer = 900000; //Rebuff agian in 15 minutes
- }
- else
- m_uiRebuffTimer -= uiDiff;
- }
-
- //Return since we have no target
- if (!UpdateVictim())
- return;
-
- //Spell 1 timer
- if (m_uiSpell1Timer <= uiDiff)
- {
- //Cast spell one on our current target.
- if (rand32() % 50 > 10)
- DoCastVictim(SPELL_ONE_ALT);
- else if (me->IsWithinDist(me->GetVictim(), 25.0f))
- DoCastVictim(SPELL_ONE);
-
- m_uiSpell1Timer = 5000;
- }
- else
- m_uiSpell1Timer -= uiDiff;
-
- //Spell 2 timer
- if (m_uiSpell2Timer <= uiDiff)
- {
- //Cast spell two on our current target.
- DoCastVictim(SPELL_TWO);
- m_uiSpell2Timer = 37000;
- }
- else
- m_uiSpell2Timer -= uiDiff;
-
- //Beserk timer
- if (m_uiPhase > 1)
- {
- //Spell 3 timer
- if (m_uiSpell3Timer <= uiDiff)
- {
- //Cast spell one on our current target.
- DoCastVictim(SPELL_THREE);
-
- m_uiSpell3Timer = 19000;
- }
- else
- m_uiSpell3Timer -= uiDiff;
-
- if (m_uiBeserkTimer <= uiDiff)
- {
- //Say our line then cast uber death spell
- Talk(SAY_BERSERK, me->GetVictim());
- DoCastVictim(SPELL_BERSERK);
-
- //Cast our beserk spell agian in 12 seconds if we didn't kill everyone
- m_uiBeserkTimer = 12000;
- }
- else
- m_uiBeserkTimer -= uiDiff;
- }
- else if (m_uiPhase == 1) //Phase timer
- {
- if (m_uiPhaseTimer <= uiDiff)
- {
- //Go to next phase
- ++m_uiPhase;
- Talk(SAY_PHASE);
- DoCast(me, SPELL_FRENZY);
- }
- else
- m_uiPhaseTimer -= uiDiff;
- }
-
- DoMeleeAttackIfReady();
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new example_creatureAI(creature);
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- player->SEND_GOSSIP_MENU(907, creature->GetGUID());
-
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- player->CLOSE_GOSSIP_MENU();
- //Set our faction to hostile towards all
- creature->setFaction(FACTION_WORGEN);
- creature->AI()->AttackStart(player);
- }
-
- return true;
- }
-};
-
-//This is the actual function called only once durring InitScripts()
-//It must define all handled functions that are to be run in this script
-void AddSC_example_creature()
-{
- new example_creature();
-}
diff --git a/src/server/scripts/Examples/example_escort.cpp b/src/server/scripts/Examples/example_escort.cpp
deleted file mode 100644
index 229d32e6c4a..00000000000
--- a/src/server/scripts/Examples/example_escort.cpp
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 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 General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* ScriptData
-SDName: Example_Escort
-SD%Complete: 100
-SDComment: Script used for testing escortAI
-SDCategory: Script Examples
-EndScriptData */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-#include "ScriptedGossip.h"
-#include "ScriptedEscortAI.h"
-#include "Player.h"
-#include "CreatureTextMgr.h"
-
-enum Yells
-{
- SAY_AGGRO1 = 0,
- SAY_AGGRO2 = 1,
- SAY_WP_1 = 2,
- SAY_WP_2 = 3,
- SAY_WP_3 = 4,
- SAY_WP_4 = 5,
- SAY_DEATH_1 = 6,
- SAY_DEATH_2 = 7,
- SAY_DEATH_3 = 8,
- SAY_SPELL = 9,
- SAY_RAND_1 = 10,
- SAY_RAND_2 = 11
-};
-
-enum Spells
-{
- SPELL_DEATH_COIL = 33130,
- SPELL_ELIXIR_OF_FORTITUDE = 3593,
- SPELL_BLUE_FIREWORK = 11540
-};
-
-enum Creatures
-{
- NPC_FELBOAR = 21878
-};
-
-#define GOSSIP_ITEM_1 "Click to Test Escort(Attack, Run)"
-#define GOSSIP_ITEM_2 "Click to Test Escort(NoAttack, Walk)"
-#define GOSSIP_ITEM_3 "Click to Test Escort(NoAttack, Run)"
-
-class example_escort : public CreatureScript
-{
- public:
-
- example_escort()
- : CreatureScript("example_escort")
- {
- }
-
- struct example_escortAI : public npc_escortAI
- {
- // CreatureAI functions
- example_escortAI(Creature* creature) : npc_escortAI(creature) { }
-
- uint32 m_uiDeathCoilTimer;
- uint32 m_uiChatTimer;
-
- void JustSummoned(Creature* summoned) override
- {
- summoned->AI()->AttackStart(me);
- }
-
- // Pure Virtual Functions (Have to be implemented)
- void WaypointReached(uint32 waypointId) override
- {
- switch (waypointId)
- {
- case 1:
- Talk(SAY_WP_1);
- break;
- case 3:
- Talk(SAY_WP_2);
- me->SummonCreature(NPC_FELBOAR, me->GetPositionX()+5.0f, me->GetPositionY()+7.0f, me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
- break;
- case 4:
- if (Player* player = GetPlayerForEscort())
- {
- //pTmpPlayer is the target of the text
- Talk(SAY_WP_3, player);
- //pTmpPlayer is the source of the text
- sCreatureTextMgr->SendChat(me, SAY_WP_4, NULL, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, TEAM_OTHER, false, player);
- }
- break;
- }
- }
-
- void EnterCombat(Unit* /*who*/) override
- {
- if (HasEscortState(STATE_ESCORT_ESCORTING))
- {
- if (Player* player = GetPlayerForEscort())
- Talk(SAY_AGGRO1, player);
- }
- else
- Talk(SAY_AGGRO2);
- }
-
- void Reset() override
- {
- m_uiDeathCoilTimer = 4000;
- m_uiChatTimer = 4000;
- }
-
- void JustDied(Unit* killer) override
- {
- if (HasEscortState(STATE_ESCORT_ESCORTING))
- {
- if (Player* player = GetPlayerForEscort())
- {
- // not a likely case, code here for the sake of example
- if (killer == me)
- Talk(SAY_DEATH_1, player);
- else
- Talk(SAY_DEATH_2, player);
- }
- }
- else
- Talk(SAY_DEATH_3);
- }
-
- void UpdateAI(uint32 uiDiff) override
- {
- //Must update npc_escortAI
- npc_escortAI::UpdateAI(uiDiff);
-
- //Combat check
- if (me->GetVictim())
- {
- if (m_uiDeathCoilTimer <= uiDiff)
- {
- Talk(SAY_SPELL);
- DoCastVictim(SPELL_DEATH_COIL, false);
- m_uiDeathCoilTimer = 4000;
- }
- else
- m_uiDeathCoilTimer -= uiDiff;
- }
- else
- {
- //Out of combat but being escorted
- if (HasEscortState(STATE_ESCORT_ESCORTING))
- {
- if (m_uiChatTimer <= uiDiff)
- {
- if (me->HasAura(SPELL_ELIXIR_OF_FORTITUDE))
- {
- Talk(SAY_RAND_1);
- DoCast(me, SPELL_BLUE_FIREWORK, false);
- }
- else
- {
- Talk(SAY_RAND_2);
- DoCast(me, SPELL_ELIXIR_OF_FORTITUDE, false);
- }
-
- m_uiChatTimer = 12000;
- }
- else
- m_uiChatTimer -= uiDiff;
- }
- }
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new example_escortAI(creature);
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- player->TalkedToCreature(creature->GetEntry(), creature->GetGUID());
- player->PrepareGossipMenu(creature, 0);
-
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
-
- player->SendPreparedGossip(creature);
-
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- npc_escortAI* pEscortAI = CAST_AI(example_escort::example_escortAI, creature->AI());
-
- switch (action)
- {
- case GOSSIP_ACTION_INFO_DEF+1:
- player->CLOSE_GOSSIP_MENU();
-
- if (pEscortAI)
- pEscortAI->Start(true, true, player->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- player->CLOSE_GOSSIP_MENU();
-
- if (pEscortAI)
- pEscortAI->Start(false, false, player->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+3:
- player->CLOSE_GOSSIP_MENU();
-
- if (pEscortAI)
- pEscortAI->Start(false, true, player->GetGUID());
- break;
- default:
- return false; // nothing defined -> trinity core handling
- }
-
- return true; // no default handling -> prevent trinity core handling
- }
-};
-
-void AddSC_example_escort()
-{
- new example_escort();
-}
diff --git a/src/server/scripts/Examples/example_gossip_codebox.cpp b/src/server/scripts/Examples/example_gossip_codebox.cpp
deleted file mode 100644
index 801159ff6ae..00000000000
--- a/src/server/scripts/Examples/example_gossip_codebox.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 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 General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* ScriptData
-SDName: Example_Gossip_Codebox
-SD%Complete: 100
-SDComment: Show a codebox in gossip option
-SDCategory: Script Examples
-EndScriptData */
-
-#include "ScriptMgr.h"
-#include "ScriptedCreature.h"
-#include "ScriptedGossip.h"
-#include "Player.h"
-#include <cstring>
-
-enum Yells
-{
- // These texts must be added to the creature texts of the npc for which the script is assigned.
- SAY_NOT_INTERESTED = 0, // "Normal select, guess you're not interested."
- SAY_WRONG = 1, // "Wrong!"
- SAY_CORRECT = 2 // "You're right, you are allowed to see my inner secrets."
-};
-
-enum Spells
-{
- SPELL_POLYMORPH = 12826,
- SPELL_MARK_OF_THE_WILD = 26990
-};
-
-#define GOSSIP_ITEM_1 "A quiz: what's your name?"
-#define GOSSIP_ITEM_2 "I'm not interested"
-
-class example_gossip_codebox : public CreatureScript
-{
- public:
-
- example_gossip_codebox()
- : CreatureScript("example_gossip_codebox")
- {
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- player->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1, "", 0, true);
- player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
-
- player->PlayerTalkClass->SendGossipMenu(907, creature->GetGUID());
-
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- player->PlayerTalkClass->ClearMenus();
- if (action == GOSSIP_ACTION_INFO_DEF+2)
- {
- //Read comment in enum
- creature->AI()->Talk(SAY_NOT_INTERESTED);
- player->CLOSE_GOSSIP_MENU();
- }
-
- return true;
- }
-
- bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, char const* code) override
- {
- player->PlayerTalkClass->ClearMenus();
- if (sender == GOSSIP_SENDER_MAIN)
- {
- switch (action)
- {
- case GOSSIP_ACTION_INFO_DEF+1:
- if (player->GetName() != code)
- {
- //Read comment in enum
- creature->AI()->Talk(SAY_WRONG);
- creature->CastSpell(player, SPELL_POLYMORPH, true);
- }
- else
- {
- //Read comment in enum
- creature->AI()->Talk(SAY_CORRECT);
- creature->CastSpell(player, SPELL_MARK_OF_THE_WILD, true);
- }
- player->CLOSE_GOSSIP_MENU();
-
- return true;
- }
- }
-
- return false;
- }
-};
-
-void AddSC_example_gossip_codebox()
-{
- new example_gossip_codebox();
-}
diff --git a/src/server/scripts/Examples/example_misc.cpp b/src/server/scripts/Examples/example_misc.cpp
deleted file mode 100644
index 1cf0d1375be..00000000000
--- a/src/server/scripts/Examples/example_misc.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 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 General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* ScriptData
-SDName: Example_Misc
-SD%Complete: 100
-SDComment: Item, Areatrigger and other small code examples
-SDCategory: Script Examples
-EndScriptData */
-
-#include "ScriptMgr.h"
-#include "Player.h"
-
-class AT_example_areatrigger : public AreaTriggerScript
-{
- public:
-
- AT_example_areatrigger()
- : AreaTriggerScript("example_areatrigger")
- {
- }
-
- bool OnTrigger(Player* player, AreaTriggerEntry const* /*trigger*/) override
- {
- player->Kill(player);
- return true;
- }
-};
-
-class ItemUse_example_item : public ItemScript
-{
- public:
-
- ItemUse_example_item()
- : ItemScript("example_item")
- {
- }
-
- bool OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/) override
- {
- sScriptMgr->LoadDatabase();
- return true;
- }
-};
-
-class GOHello_example_go_teleporter : public GameObjectScript
-{
- public:
-
- GOHello_example_go_teleporter()
- : GameObjectScript("example_go_teleporter")
- {
- }
-
- bool OnGossipHello(Player* player, GameObject* /*go*/) override
- {
- player->TeleportTo(0, 1807.07f, 336.105f, 70.3975f, 0.0f);
- return false;
- }
-};
-
-void AddSC_example_misc()
-{
- new AT_example_areatrigger();
- new ItemUse_example_item();
- new GOHello_example_go_teleporter();
-}
diff --git a/src/server/scripts/Examples/example_spell.cpp b/src/server/scripts/Examples/example_spell.cpp
deleted file mode 100644
index f90cc069780..00000000000
--- a/src/server/scripts/Examples/example_spell.cpp
+++ /dev/null
@@ -1,491 +0,0 @@
-/*
- * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 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 General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * An example of a spell script file
- * to bind a script to spell you have to add entry for it in `spell_script_names`
- * where `spell_id` is id of the spell to bind
- * and `ScriptName` is the name of a script assigned on registration
- */
-
-#include "ScriptMgr.h"
-#include "SpellAuras.h"
-#include "SpellAuraEffects.h"
-#include "SpellScript.h"
-#include "Player.h"
-
-enum Spells
-{
- SPELL_TRIGGERED = 18282
-};
-
-class spell_ex_5581 : public SpellScriptLoader
-{
- public:
- spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }
-
- class spell_ex_5581SpellScript : public SpellScript
- {
- // initialize script, this macro does compile time check for type of the function - prevents possible issues
- // if you have assigned wrong type of function to a hook you'll receive type conversion error during build
- // this line is required, otherwise you'll get XXXHandlerFunction - identifier not found errors
- PrepareSpellScript(spell_ex_5581SpellScript);
-
- std::string localVariable;
- char* localVariable2;
-
- // function called on server startup
- // checks if script has data required for it to work
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- // check if spellid 70522 exists in dbc, we will trigger it later
- if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
- return false;
- return true;
- }
-
- // function called just after script is added to spell
- // we initialize local variables if needed
- bool Load() override
- {
- localVariable = "we're using local variable";
- localVariable2 = new char();
- return true;
- // return false - script will be immediately removed from the spell
- // for example - we don't want this script to be executed on a creature
- // if (GetCaster()->GetTypeID() != TYPEID_PLAYER)
- // return false;
- }
-
- // function called just before script delete
- // we free allocated memory
- void Unload() override
- {
- delete localVariable2;
- }
-
- void HandleBeforeCast()
- {
- // this hook is executed before anything about casting the spell is done
- // after this hook is executed all the machinery starts
- TC_LOG_INFO("misc", "Caster just finished preparing the spell (cast bar has expired)");
- }
-
- void HandleOnCast()
- {
- // cast is validated and spell targets are selected at this moment
- // this is a last place when the spell can be safely interrupted
- TC_LOG_INFO("misc", "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
- }
-
- void HandleAfterCast()
- {
- TC_LOG_INFO("misc", "All immediate Actions for the spell are finished now");
- // this is a safe for triggering additional effects for a spell without interfering
- // with visuals or with other effects of the spell
- //GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
- }
-
- SpellCastResult CheckRequirement()
- {
- // in this hook you can add additional requirements for spell caster (and throw a client error if reqs're not passed)
- // in this case we're disallowing to select non-player as a target of the spell
- //if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
- //return SPELL_FAILED_BAD_TARGETS;
- return SPELL_CAST_OK;
- }
-
-
- void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
- {
- TC_LOG_INFO("misc", "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
- }
-
- void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
- {
- ObjectGuid targetGUID;
- if (Unit* unitTarget = GetHitUnit())
- targetGUID = unitTarget->GetGUID();
- // we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
- TC_LOG_INFO("misc", "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID.GetRawValue());
- }
-
- void HandleDummyHit(SpellEffIndex /*effIndex*/)
- {
- TC_LOG_INFO("misc", "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
- }
-
- void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
- {
- TC_LOG_INFO("misc", "SPELL_EFFECT_DUMMY is hits it's target!");
- // make caster cast a spell on a unit target of effect
- if (Unit* target = GetHitUnit())
- GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
- }
-
- void HandleBeforeHit()
- {
- TC_LOG_INFO("misc", "Spell is about to hit target!");
- }
-
- void HandleOnHit()
- {
- TC_LOG_INFO("misc", "Spell just hit target!");
- }
-
- void HandleAfterHit()
- {
- TC_LOG_INFO("misc", "Spell just finished hitting target!");
- }
-
- void FilterTargets(std::list<Unit*>& /*targetList*/)
- {
- // usually you want this call for Area Target spells
- TC_LOG_INFO("misc", "Spell is about to add targets from targetList to final targets!");
- }
-
- // register functions used in spell script - names of these functions do not matter
- void Register() override
- {
- // we're registering our functions here
- BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
- OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
- AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
- OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
- // function HandleDummy will be called when spell is launched, independant from targets selected for spell, just before default effect 0 launch handler
- OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
- // function HandleDummy will be called when spell is launched at target, just before default effect 0 launch at target handler
- OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
- // function HandleDummy will be called when spell hits it's destination, independant from targets selected for spell, just before default effect 0 hit handler
- OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
- // function HandleDummy will be called when unit is hit by spell, just before default effect 0 hit target handler
- OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
- // this will prompt an error on startup because effect 0 of spell 49375 is set to SPELL_EFFECT_DUMMY, not SPELL_EFFECT_APPLY_AURA
- //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
- // this will make HandleDummy function to be called on first != 0 effect of spell 49375
- //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
- // this will make HandleDummy function to be called on all != 0 effect of spell 49375
- //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
- // bind handler to BeforeHit event of the spell
- BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
- // bind handler to OnHit event of the spell
- OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
- // bind handler to AfterHit event of the spell
- AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
- // bind handler to OnUnitTargetSelect event of the spell
- //OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
- }
- };
-
- // function which creates SpellScript
- SpellScript* GetSpellScript() const override
- {
- return new spell_ex_5581SpellScript();
- }
-};
-
-class spell_ex_66244 : public SpellScriptLoader
-{
- public:
- spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }
-
- class spell_ex_66244AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_ex_66244AuraScript);
- // function called on server startup
- // checks if script has data required for it to work
- bool Validate(SpellInfo const* /*spellInfo*/) override
- {
- // check if spellid exists in dbc, we will trigger it later
- if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
- return false;
- return true;
- }
-
- // function called in aura constructor
- // we initialize local variables if needed
- bool Load() override
- {
- // do not load script if aura is cast by player or caster not avalible
- if (Unit* caster = GetCaster())
- if (caster->GetTypeId() == TYPEID_PLAYER)
- return true;
- return false;
- }
-
-
- void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- TC_LOG_INFO("misc", "Aura Effect is about to be applied on target!");
- // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
- //PreventDefaultAction();
- }
- void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- TC_LOG_INFO("misc", "Aura Effect is about to be removed from target!");
- // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
- //PreventDefaultAction();
- }
-
- void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- TC_LOG_INFO("misc", "Aura Effect has just been applied on target!");
- Unit* target = GetTarget();
- // cast spell on target on aura apply
- target->CastSpell(target, SPELL_TRIGGERED, true);
- }
-
- void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- TC_LOG_INFO("misc", "Aura Effect has just been just removed from target!");
- Unit* target = GetTarget();
- Unit* caster = GetCaster();
- // caster may be not avalible (logged out for example)
- if (!caster)
- return;
- // cast spell on caster on aura remove
- target->CastSpell(caster, SPELL_TRIGGERED, true);
- }
-
- void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
- {
- TC_LOG_INFO("misc", "Perioidic Aura Effect is does a tick on target!");
- Unit* target = GetTarget();
- // aura targets damage self on tick
- target->DealDamage(target, 100);
- }
-
- void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
- {
- TC_LOG_INFO("misc", "Perioidic Aura Effect is now updated!");
- // we're doubling aura amount every tick
- aurEff->ChangeAmount(aurEff->GetAmount() * 2);
- }
-
- void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
- {
- TC_LOG_INFO("misc", "Amount of Aura Effect is being calculated now!");
- // we're setting amount to 100
- amount = 100;
- // amount will be never recalculated due to applying passive aura
- canBeRecalculated = false;
- }
-
- void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
- {
- TC_LOG_INFO("misc", "Periodic data of Aura Effect is being calculated now!");
- // we're setting aura to be periodic and tick every 10 seconds
- isPeriodic = true;
- amplitude = 2 * IN_MILLISECONDS;
- }
-
- void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
- {
- TC_LOG_INFO("misc", "SpellMod data of Aura Effect is being calculated now!");
- // we don't want spellmod for example
- if (spellMod)
- {
- delete spellMod;
- spellMod = NULL;
- }
- /*
- // alternative: we want spellmod for spell which doesn't have it
- if (!spellMod)
- {
- spellMod = new SpellModifier(GetAura());
- spellMod->op = SPELLMOD_DOT;
- spellMod->type = SPELLMOD_PCT;
- spellMod->spellId = GetId();
- spellMod->mask[1] = 0x00002000;
- }
- */
- }
-
- // function registering
- void Register() override
- {
- OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- // AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - makes handler to be called when aura is reapplied on target
- AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
- AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
- OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
- DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
- DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
- DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
- /*OnApply += AuraEffectApplyFn();
- OnRemove += AuraEffectRemoveFn();
- DoCheckAreaTarget += AuraCheckAreaTargetFn();*/
- }
- /*
- void OnApply()
- {
- }
-
- void OnRemove()
- {
- }
-
- bool DoCheckAreaTarget(Unit* proposedTarget)
- {
- }*/
- };
-
- // function which creates AuraScript
- AuraScript* GetAuraScript() const override
- {
- return new spell_ex_66244AuraScript();
- }
-};
-
-// example usage of OnEffectManaShield and AfterEffectManaShield hooks
-// see spell_ex_absorb_aura, these hooks work the same as OnEffectAbsorb and AfterEffectAbsorb
-
-// example usage of OnEffectAbsorb and AfterEffectAbsorb hooks
-class spell_ex_absorb_aura : public SpellScriptLoader
-{
- public:
- spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }
-
- class spell_ex_absorb_auraAuraScript : public AuraScript
- {
- PrepareAuraScript(spell_ex_absorb_auraAuraScript);
-
- void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
- {
- TC_LOG_INFO("misc", "Our aura is now absorbing damage done to us!");
- // absorb whole damage done to us
- absorbAmount = dmgInfo.GetDamage();
- }
-
- void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
- {
- TC_LOG_INFO("misc", "Our aura has absorbed %u damage!", absorbAmount);
- }
-
- // function registering
- void Register() override
- {
- OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
- AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
- }
- };
-
- // function which creates AuraScript
- AuraScript* GetAuraScript() const override
- {
- return new spell_ex_absorb_auraAuraScript();
- }
-};
-
-class spell_ex_463 : public SpellScriptLoader
-{
- public:
- spell_ex_463() : SpellScriptLoader("spell_ex_463") { }
-
- class spell_ex_463AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_ex_463AuraScript);
-
- bool CheckAreaTarget(Unit* target)
- {
- TC_LOG_INFO("misc", "Area aura checks if unit is a valid target for it!");
- // in our script we allow only players to be affected
- return target->GetTypeId() == TYPEID_PLAYER;
- }
- void Register() override
- {
- DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
- }
- };
-
- // function which creates AuraScript
- AuraScript* GetAuraScript() const override
- {
- return new spell_ex_463AuraScript();
- }
-};
-
-// this function has to be added to function set in ScriptLoader.cpp
-void AddSC_example_spell_scripts()
-{
- new spell_ex_5581;
- new spell_ex_66244;
- new spell_ex_absorb_aura;
- new spell_ex_463;
-}
-
-/* empty script for copypasting
-class spell_ex : public SpellScriptLoader
-{
- public:
- spell_ex() : SpellScriptLoader("spell_ex") { }
-
- class spell_ex_SpellScript : public SpellScript
- {
- PrepareSpellScript(spell_ex_SpellScript);
-
- //bool Validate(SpellInfo const* spellEntry){return true;} override
- //bool Load(){return true;}
- //void Unload(){ }
-
- //void Function(SpellEffIndex effIndex) //OnEffect += SpellEffectFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_EFFECT_ANY);
- //void Function() //OnHit += SpellEffectFn(spell_ex_SpellScript::Function);
- void Register() override
- {
- }
- };
-
- SpellScript* GetSpellScript() const override
- {
- return new spell_ex_SpellScript();
- }
-};
-*/
-
-/* empty script for copypasting
-class spell_ex : public SpellScriptLoader
-{
- public:
- spell_ex() : SpellScriptLoader("spell_ex") { }
-
- class spell_ex_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_ex)
- //bool Validate(SpellInfo const* spellEntry){return true;} override
- //bool Load(){return true;}
- //void Unload(){ }
-
- //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectApply += AuraEffectApplyFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
- //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectRemove += AuraEffectRemoveFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
- //void spell_ex_SpellScript::Function(AuraEffect const* aurEff) //OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
- //void spell_ex_SpellScript::Function(AuraEffect* aurEff) //OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
- //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) //DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
- //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude) //OnEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
- //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, SpellModifier*& spellMod) //OnEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
- void Register() override
- {
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_ex_AuraScript();
- }
-};
-*/
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
index 3f74ed2eb88..a654a37e2f5 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp
@@ -73,6 +73,7 @@ public:
{
Initialize();
instance = creature->GetInstanceScript();
+ uiOutroStep = 0;
}
void Initialize()
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
index ff104a28197..fd5e328b7f2 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
@@ -356,6 +356,7 @@ public:
step = 0;
gossipStep = 0;
bossEvent = 0;
+ WavesCounter = 0;
}
void Initialize()
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
index b6f43371232..316c3e6ca4d 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp
@@ -346,7 +346,6 @@ public:
uint32 uiBladeStormTimer;
uint32 uiInterceptTimer;
uint32 uiMortalStrikeTimer;
- uint32 uiAttackTimer;
bool bDone;
bool bHome;
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index b1db173804b..4c45be9d24d 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -345,6 +345,7 @@ public:
Initialize();
_despawned = false; // We determine if Malygos will be realocated to spawning position on reset triggered by boss despawn on evade
_flySpeed = me->GetSpeed(MOVE_FLIGHT); // Get initial fly speed, otherwise on each wipe fly speed would add up if we get it
+ _phase = PHASE_NOT_STARTED;
}
void Initialize()
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 1aad8079e07..131222b5f8f 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -67,7 +67,17 @@ public:
struct npc_sinkhole_kill_creditAI : public ScriptedAI
{
- npc_sinkhole_kill_creditAI(Creature* creature) : ScriptedAI(creature){ }
+ npc_sinkhole_kill_creditAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ phaseTimer = 500;
+ phase = 0;
+ casterGuid.Clear();
+ }
uint32 phaseTimer;
uint8 phase;
@@ -75,9 +85,7 @@ public:
void Reset() override
{
- phaseTimer = 500;
- phase = 0;
- casterGuid.Clear();
+ Initialize();
}
void SpellHit(Unit* caster, const SpellInfo* spell) override
@@ -447,7 +455,18 @@ public:
struct npc_nesingwary_trapperAI : public ScriptedAI
{
- npc_nesingwary_trapperAI(Creature* creature) : ScriptedAI(creature) { creature->SetVisible(false); }
+ npc_nesingwary_trapperAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ me->SetVisible(false);
+ phaseTimer = 2500;
+ phase = 1;
+ go_caribouGUID.Clear();
+ }
ObjectGuid go_caribouGUID;
uint8 phase;
@@ -455,10 +474,7 @@ public:
void Reset() override
{
- me->SetVisible(false);
- phaseTimer = 2500;
- phase = 1;
- go_caribouGUID.Clear();
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -576,7 +592,16 @@ public:
struct npc_lurgglbrAI : public npc_escortAI
{
- npc_lurgglbrAI(Creature* creature) : npc_escortAI(creature){ }
+ npc_lurgglbrAI(Creature* creature) : npc_escortAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ IntroTimer = 0;
+ IntroPhase = 0;
+ }
uint32 IntroTimer;
uint32 IntroPhase;
@@ -584,10 +609,7 @@ public:
void Reset() override
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
- {
- IntroTimer = 0;
- IntroPhase = 0;
- }
+ Initialize();
}
void WaypointReached(uint32 waypointId) override
@@ -723,6 +745,12 @@ public:
{
npc_nexus_drake_hatchlingAI(Creature* creature) : FollowerAI(creature)
{
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ WithRedDragonBlood = false;
}
ObjectGuid HarpoonerGUID;
@@ -730,7 +758,7 @@ public:
void Reset() override
{
- WithRedDragonBlood = false;
+ Initialize();
}
void EnterCombat(Unit* who) override
@@ -862,7 +890,26 @@ public:
struct npc_thassarianAI : public npc_escortAI
{
- npc_thassarianAI(Creature* creature) : npc_escortAI(creature) { }
+ npc_thassarianAI(Creature* creature) : npc_escortAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ arthasGUID.Clear();
+ talbotGUID.Clear();
+ leryssaGUID.Clear();
+ arlosGUID.Clear();
+
+ arthasInPosition = false;
+ arlosInPosition = false;
+ leryssaInPosition = false;
+ talbotInPosition = false;
+
+ phase = 0;
+ phaseTimer = 0;
+ }
ObjectGuid arthasGUID;
ObjectGuid talbotGUID;
@@ -882,18 +929,7 @@ public:
me->RestoreFaction();
me->RemoveStandFlags(UNIT_STAND_STATE_SIT);
- arthasGUID.Clear();
- talbotGUID.Clear();
- leryssaGUID.Clear();
- arlosGUID.Clear();
-
- arthasInPosition = false;
- arlosInPosition = false;
- leryssaInPosition = false;
- talbotInPosition = false;
-
- phase = 0;
- phaseTimer = 0;
+ Initialize();
}
void WaypointReached(uint32 waypointId) override
@@ -1239,7 +1275,20 @@ public:
struct npc_counselor_talbotAI : public ScriptedAI
{
- npc_counselor_talbotAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_counselor_talbotAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ leryssaGUID.Clear();
+ arlosGUID.Clear();
+ bCheck = false;
+ shadowBoltTimer = urand(5000, 12000);
+ deflectionTimer = urand(20000, 25000);
+ soulBlastTimer = urand(12000, 18000);
+ }
ObjectGuid leryssaGUID;
ObjectGuid arlosGUID;
@@ -1252,12 +1301,7 @@ public:
void Reset() override
{
- leryssaGUID.Clear();
- arlosGUID.Clear();
- bCheck = false;
- shadowBoltTimer = urand(5000, 12000);
- deflectionTimer = urand(20000, 25000);
- soulBlastTimer = urand(12000, 18000);
+ Initialize();
}
void MovementInform(uint32 uiType, uint32 /*uiId*/) override
{
@@ -1487,14 +1531,22 @@ public:
struct npc_beryl_sorcererAI : public FollowerAI
{
- npc_beryl_sorcererAI(Creature* creature) : FollowerAI(creature) { }
+ npc_beryl_sorcererAI(Creature* creature) : FollowerAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ bEnslaved = false;
+ }
bool bEnslaved;
void Reset() override
{
me->SetReactState(REACT_AGGRESSIVE);
- bEnslaved = false;
+ Initialize();
}
void EnterCombat(Unit* who) override
@@ -1571,7 +1623,15 @@ public:
struct npc_imprisoned_beryl_sorcererAI : public ScriptedAI
{
- npc_imprisoned_beryl_sorcererAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_imprisoned_beryl_sorcererAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ rebuff = 0;
+ }
uint32 rebuff;
@@ -1580,7 +1640,7 @@ public:
if (me->GetReactState() != REACT_PASSIVE)
me->SetReactState(REACT_PASSIVE);
- rebuff = 0;
+ Initialize();
}
void UpdateAI(uint32 diff) override
@@ -1775,12 +1835,21 @@ public:
struct npc_bonker_togglevoltAI : public npc_escortAI
{
- npc_bonker_togglevoltAI(Creature* creature) : npc_escortAI(creature) { }
+ npc_bonker_togglevoltAI(Creature* creature) : npc_escortAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Bonker_agro = 0;
+ }
+
uint32 Bonker_agro;
void Reset() override
{
- Bonker_agro=0;
+ Initialize();
SetDespawnAtFar(false);
}
@@ -1873,15 +1942,23 @@ public:
struct npc_trapped_mammoth_calfAI : public ScriptedAI
{
- npc_trapped_mammoth_calfAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_trapped_mammoth_calfAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ uiTimer = 1500;
+ bStarted = false;
+ }
uint32 uiTimer;
bool bStarted;
void Reset() override
{
- uiTimer = 1500;
- bStarted = false;
+ Initialize();
GameObject* pTrap = NULL;
for (uint8 i = 0; i < MammothTrapsNum; ++i)
@@ -2003,13 +2080,21 @@ public:
struct npc_valiance_keep_cannoneerAI : public ScriptedAI
{
- npc_valiance_keep_cannoneerAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_valiance_keep_cannoneerAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ uiTimer = urand(13000, 18000);
+ }
uint32 uiTimer;
void Reset() override
{
- uiTimer = urand(13000, 18000);
+ Initialize();
}
void UpdateAI(uint32 diff) override
@@ -2061,13 +2146,21 @@ public:
struct npc_warmage_coldarraAI : public ScriptedAI
{
- npc_warmage_coldarraAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_warmage_coldarraAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ m_uiTimer = 0;
+ }
uint32 m_uiTimer; //Timer until recast
void Reset() override
{
- m_uiTimer = 0;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -2180,8 +2273,17 @@ public:
{
npc_hidden_cultistAI(Creature* creature) : ScriptedAI(creature)
{
- uiEmoteState = creature->GetUInt32Value(UNIT_NPC_EMOTESTATE);
- uiNpcFlags = creature->GetUInt32Value(UNIT_NPC_FLAGS);
+ Initialize();
+ uiEmoteState = creature->GetUInt32Value(UNIT_NPC_EMOTESTATE);
+ uiNpcFlags = creature->GetUInt32Value(UNIT_NPC_FLAGS);
+ }
+
+ void Initialize()
+ {
+ uiEventTimer = 0;
+ uiEventPhase = 0;
+
+ uiPlayerGUID.Clear();
}
uint32 uiEmoteState;
@@ -2200,10 +2302,7 @@ public:
if (uiNpcFlags)
me->SetUInt32Value(UNIT_NPC_FLAGS, uiNpcFlags);
- uiEventTimer = 0;
- uiEventPhase = 0;
-
- uiPlayerGUID.Clear();
+ Initialize();
DoCast(SPELL_SHROUD_OF_THE_DEATH_CULTIST);
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index e60c2162339..198fd53438a 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -279,12 +279,20 @@ public:
struct npc_outhouse_bunnyAI : public ScriptedAI
{
- npc_outhouse_bunnyAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_outhouse_bunnyAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
_counter = 0;
- _gender = 0;
+ _gender = 0;
+ }
+
+ void Reset() override
+ {
+ Initialize();
}
void SetData(uint32 Type, uint32 Data) override
@@ -341,13 +349,21 @@ public:
struct npc_tallhorn_stagAI : public ScriptedAI
{
- npc_tallhorn_stagAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_tallhorn_stagAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
_phase = 1;
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void UpdateAI(uint32 /*diff*/) override
{
if (_phase == 1)
@@ -459,13 +475,21 @@ public:
struct npc_wounded_skirmisherAI : public ScriptedAI
{
- npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_wounded_skirmisherAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
_despawnTimer = 5000;
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void MovementInform(uint32, uint32 id) override
{
if (id == 1)
@@ -651,12 +675,20 @@ public:
struct npc_lake_frogAI : public ScriptedAI
{
- npc_lake_frogAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_lake_frogAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
_following = false;
_runningScript = false;
+ }
+
+ void Reset() override
+ {
+ Initialize();
if (me->GetEntry() == NPC_LAKE_FROG_QUEST)
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp
index 53dc2a62f90..adf2af50a8e 100644
--- a/src/server/scripts/Northrend/zone_howling_fjord.cpp
+++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp
@@ -74,13 +74,22 @@ public:
struct npc_Apothecary_HanesAI : public npc_escortAI
{
- npc_Apothecary_HanesAI(Creature* creature) : npc_escortAI(creature){ }
+ npc_Apothecary_HanesAI(Creature* creature) : npc_escortAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ PotTimer = 10000; //10 sec cooldown on potion
+ }
+
uint32 PotTimer;
void Reset() override
{
SetDespawnAtFar(false);
- PotTimer = 10000; //10 sec cooldown on potion
+ Initialize();
}
void JustDied(Unit* /*killer*/) override
@@ -318,15 +327,23 @@ public:
/// @todo make prisoners help (unclear if summoned or using npc's from surrounding cages (summon inside small cages?))
struct npc_daegarnAI : public ScriptedAI
{
- npc_daegarnAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_daegarnAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ bEventInProgress = false;
+ uiPlayerGUID.Clear();
+ }
bool bEventInProgress;
ObjectGuid uiPlayerGUID;
void Reset() override
{
- bEventInProgress = false;
- uiPlayerGUID.Clear();
+ Initialize();
}
void StartEvent(ObjectGuid uiGUID)
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index 44f559bfa79..cde2cf94e3c 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -222,13 +222,21 @@ public:
struct npc_crusade_recruitAI : public ScriptedAI
{
- npc_crusade_recruitAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_crusade_recruitAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ _heading = me->GetOrientation();
+ }
void Reset() override
{
me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER);
- _heading = me->GetOrientation();
+ Initialize();
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
index 99cda91b866..08d042582e5 100644
--- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
+++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp
@@ -170,9 +170,23 @@ public:
{
boss_exarch_maladaarAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
HasTaunted = false;
}
+ void Initialize()
+ {
+ soulmodel = 0;
+ soulholder.Clear();
+ soulclass = 0;
+
+ Fear_timer = 15000 + rand32() % 5000;
+ Ribbon_of_Souls_timer = 5000;
+ StolenSoul_Timer = 25000 + rand32() % 10000;
+
+ Avatar_summoned = false;
+ }
+
uint32 soulmodel;
ObjectGuid soulholder;
uint8 soulclass;
@@ -186,15 +200,7 @@ public:
void Reset() override
{
- soulmodel = 0;
- soulholder.Clear();
- soulclass = 0;
-
- Fear_timer = 15000 + rand32() % 5000;
- Ribbon_of_Souls_timer = 5000;
- StolenSoul_Timer = 25000 + rand32() % 10000;
-
- Avatar_summoned = false;
+ Initialize();
}
void MoveInLineOfSight(Unit* who) override
diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
index aa0f3daeef0..9e9f3f60a59 100644
--- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
+++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp
@@ -265,7 +265,6 @@ public:
uint32 SummonDoomBlossomTimer;
uint32 EnrageTimer;
uint32 CrushingShadowsTimer;
- uint32 ShadowOfDeathTimer;
uint32 SummonShadowsTimer;
uint32 RandomYellTimer;
uint32 AggroTimer;
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
index 9f51155b334..94b75727d69 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_leotheras_the_blind.cpp
@@ -83,6 +83,13 @@ public:
{
npc_inner_demonAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ShadowBolt_Timer = 10000;
+ Link_Timer = 1000;
}
uint32 ShadowBolt_Timer;
@@ -92,8 +99,7 @@ public:
void Reset() override
{
- ShadowBolt_Timer = 10000;
- Link_Timer = 1000;
+ Initialize();
}
void SetGUID(ObjectGuid guid, int32 id/* = 0 */) override
@@ -187,10 +193,30 @@ public:
{
boss_leotheras_the_blindAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
creature->GetPosition(x, y, z);
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ BanishTimer = 1000;
+ Whirlwind_Timer = 15000;
+ ChaosBlast_Timer = 1000;
+ SwitchToDemon_Timer = 45000;
+ SwitchToHuman_Timer = 60000;
+ Berserk_Timer = 600000;
+ InnerDemons_Timer = 30000;
+
+ DealDamage = true;
+ DemonForm = false;
+ IsFinalForm = false;
+ NeedThreatReset = false;
+ EnrageUsed = false;
+ memset(InnderDemon, 0, sizeof(InnderDemon));
+ InnerDemon_Count = 0;
+ }
+
InstanceScript* instance;
uint32 Whirlwind_Timer;
@@ -216,21 +242,8 @@ public:
void Reset() override
{
CheckChannelers();
- BanishTimer = 1000;
- Whirlwind_Timer = 15000;
- ChaosBlast_Timer = 1000;
- SwitchToDemon_Timer = 45000;
- SwitchToHuman_Timer = 60000;
- Berserk_Timer = 600000;
- InnerDemons_Timer = 30000;
+ Initialize();
me->SetCanDualWield(true);
- DealDamage = true;
- DemonForm = false;
- IsFinalForm = false;
- NeedThreatReset = false;
- EnrageUsed = false;
- memset(InnderDemon, 0, sizeof(InnderDemon));
- InnerDemon_Count = 0;
me->SetSpeed(MOVE_RUN, 2.0f, true);
me->SetDisplayId(MODEL_NIGHTELF);
me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID , 0);
@@ -600,15 +613,23 @@ public:
struct boss_leotheras_the_blind_demonformAI : public ScriptedAI
{
- boss_leotheras_the_blind_demonformAI(Creature* creature) : ScriptedAI(creature) { }
+ boss_leotheras_the_blind_demonformAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ChaosBlast_Timer = 1000;
+ DealDamage = true;
+ }
uint32 ChaosBlast_Timer;
bool DealDamage;
void Reset() override
{
- ChaosBlast_Timer = 1000;
- DealDamage = true;
+ Initialize();
}
void StartEvent()
@@ -675,10 +696,17 @@ public:
{
npc_greyheart_spellbinderAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
AddedBanish = false;
}
+ void Initialize()
+ {
+ Mindblast_Timer = urand(3000, 8000);
+ Earthshock_Timer = urand(5000, 10000);
+ }
+
InstanceScript* instance;
ObjectGuid leotherasGUID;
@@ -690,8 +718,7 @@ public:
void Reset() override
{
- Mindblast_Timer = urand(3000, 8000);
- Earthshock_Timer = urand(5000, 10000);
+ Initialize();
instance->SetGuidData(DATA_LEOTHERAS_EVENT_STARTER, ObjectGuid::Empty);
Creature* leotheras = ObjectAccessor::GetCreature(*me, leotherasGUID);
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
index 83b8722ce47..0fffdaa0554 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp
@@ -88,10 +88,30 @@ public:
{
boss_the_lurker_belowAI(Creature* creature) : ScriptedAI(creature), Summons(me)
{
+ Initialize();
SetCombatMovement(false);
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ SpoutAnimTimer = 1000;
+ RotTimer = 0;
+ WaterboltTimer = 15000; // give time to get in range when fight starts
+ SpoutTimer = 45000;
+ WhirlTimer = 18000; // after avery spout
+ PhaseTimer = 120000;
+ GeyserTimer = rand32() % 5000 + 15000;
+ CheckTimer = 15000; // give time to get in range when fight starts
+ WaitTimer = 60000; // never reached
+ WaitTimer2 = 60000; // never reached
+
+ Submerged = true; // will be false at combat start
+ Spawned = false;
+ InRange = false;
+ CanStartEvent = false;
+ }
+
InstanceScript* instance;
SummonList Summons;
@@ -121,21 +141,7 @@ public:
{
me->SetSwim(true);
me->SetDisableGravity(true);
- SpoutAnimTimer = 1000;
- RotTimer = 0;
- WaterboltTimer = 15000; // give time to get in range when fight starts
- SpoutTimer = 45000;
- WhirlTimer = 18000; // after avery spout
- PhaseTimer = 120000;
- GeyserTimer = rand32() % 5000 + 15000;
- CheckTimer = 15000; // give time to get in range when fight starts
- WaitTimer = 60000; // never reached
- WaitTimer2 = 60000; // never reached
-
- Submerged = true; // will be false at combat start
- Spawned = false;
- InRange = false;
- CanStartEvent = false;
+ Initialize();
Summons.DespawnAll();
@@ -374,16 +380,22 @@ public:
{
npc_coilfang_ambusherAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
SetCombatMovement(false);
}
+ void Initialize()
+ {
+ MultiShotTimer = 10000;
+ ShootBowTimer = 4000;
+ }
+
uint32 MultiShotTimer;
uint32 ShootBowTimer;
void Reset() override
{
- MultiShotTimer = 10000;
- ShootBowTimer = 4000;
+ Initialize();
}
void MoveInLineOfSight(Unit* who) override
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
index 0a538ac0c39..ccf7903ebe3 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp
@@ -98,12 +98,28 @@ public:
{
boss_morogrim_tidewalkerAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
+ Playercount = 0;
+ counter = 0;
}
- InstanceScript* instance;
+ void Initialize()
+ {
+ TidalWave_Timer = 10000;
+ WateryGrave_Timer = 30000;
+ Earthquake_Timer = 40000;
+ WateryGlobules_Timer = 0;
+ globulespell[0] = SPELL_SUMMON_WATER_GLOBULE_1;
+ globulespell[1] = SPELL_SUMMON_WATER_GLOBULE_2;
+ globulespell[2] = SPELL_SUMMON_WATER_GLOBULE_3;
+ globulespell[3] = SPELL_SUMMON_WATER_GLOBULE_4;
+
+ Earthquake = false;
+ Phase2 = false;
+ }
- Map::PlayerList const* PlayerList;
+ InstanceScript* instance;
uint32 TidalWave_Timer;
uint32 WateryGrave_Timer;
@@ -118,17 +134,7 @@ public:
void Reset() override
{
- TidalWave_Timer = 10000;
- WateryGrave_Timer = 30000;
- Earthquake_Timer = 40000;
- WateryGlobules_Timer = 0;
- globulespell[0] = SPELL_SUMMON_WATER_GLOBULE_1;
- globulespell[1] = SPELL_SUMMON_WATER_GLOBULE_2;
- globulespell[2] = SPELL_SUMMON_WATER_GLOBULE_3;
- globulespell[3] = SPELL_SUMMON_WATER_GLOBULE_4;
-
- Earthquake = false;
- Phase2 = false;
+ Initialize();
instance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED);
}
@@ -154,8 +160,7 @@ public:
void EnterCombat(Unit* /*who*/) override
{
- PlayerList = &me->GetMap()->GetPlayers();
- Playercount = PlayerList->getSize();
+ Playercount = me->GetMap()->GetPlayers().getSize();
StartEvent();
}
@@ -296,13 +301,21 @@ public:
struct npc_water_globuleAI : public ScriptedAI
{
- npc_water_globuleAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_water_globuleAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Check_Timer = 1000;
+ }
uint32 Check_Timer;
void Reset() override
{
- Check_Timer = 1000;
+ Initialize();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
index 3207727b5d1..745c44eebec 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_mekgineer_steamrigger.cpp
@@ -64,9 +64,21 @@ public:
{
boss_mekgineer_steamriggerAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ Shrink_Timer = 20000;
+ Saw_Blade_Timer = 15000;
+ Electrified_Net_Timer = 10000;
+
+ Summon75 = false;
+ Summon50 = false;
+ Summon25 = false;
+ }
+
InstanceScript* instance;
uint32 Shrink_Timer;
@@ -78,13 +90,7 @@ public:
void Reset() override
{
- Shrink_Timer = 20000;
- Saw_Blade_Timer = 15000;
- Electrified_Net_Timer = 10000;
-
- Summon75 = false;
- Summon50 = false;
- Summon25 = false;
+ Initialize();
instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, NOT_STARTED);
}
@@ -201,16 +207,22 @@ public:
{
npc_steamrigger_mechanicAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ Repair_Timer = 2000;
+ }
+
InstanceScript* instance;
uint32 Repair_Timer;
void Reset() override
{
- Repair_Timer = 2000;
+ Initialize();
}
void MoveInLineOfSight(Unit* /*who*/) override
diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
index 8024d5138eb..16b84e53cfd 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp
@@ -110,9 +110,18 @@ public:
{
boss_warlord_kalithreshAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ Reflection_Timer = 10000;
+ Impale_Timer = 7000 + rand32() % 7000;
+ Rage_Timer = 45000;
+ CanRage = false;
+ }
+
InstanceScript* instance;
uint32 Reflection_Timer;
@@ -122,10 +131,7 @@ public:
void Reset() override
{
- Reflection_Timer = 10000;
- Impale_Timer = 7000 + rand32() % 7000;
- Rage_Timer = 45000;
- CanRage = false;
+ Initialize();
instance->SetBossState(DATA_WARLORD_KALITHRESH, NOT_STARTED);
}
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
index 6fb41f2eab5..546ed38082f 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_rokmar_the_crackler.cpp
@@ -48,12 +48,20 @@ class boss_rokmar_the_crackler : public CreatureScript
struct boss_rokmar_the_cracklerAI : public BossAI
{
- boss_rokmar_the_cracklerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { }
+ boss_rokmar_the_cracklerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ rokmarFrenzy = false;
+ }
void Reset() override
{
_Reset();
- rokmarFrenzy = false;
+ Initialize();
}
void JustDied(Unit* /*killer*/) override
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp
index 90853138448..f097b2c1551 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp
@@ -50,6 +50,14 @@ public:
{
boss_hungarfenAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Root = false;
+ Mushroom_Timer = 5000; // 1 mushroom after 5s, then one per 10s. This should be different in heroic mode
+ AcidGeyser_Timer = 10000;
}
bool Root;
@@ -58,9 +66,7 @@ public:
void Reset() override
{
- Root = false;
- Mushroom_Timer = 5000; // 1 mushroom after 5s, then one per 10s. This should be different in heroic mode
- AcidGeyser_Timer = 10000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
@@ -116,7 +122,17 @@ public:
struct npc_underbog_mushroomAI : public ScriptedAI
{
- npc_underbog_mushroomAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_underbog_mushroomAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Stop = false;
+ Grow_Timer = 0;
+ Shrink_Timer = 20000;
+ }
bool Stop;
uint32 Grow_Timer;
@@ -124,9 +140,7 @@ public:
void Reset() override
{
- Stop = false;
- Grow_Timer = 0;
- Shrink_Timer = 20000;
+ Initialize();
DoCast(me, SPELL_PUTRID_MUSHROOM, true);
DoCast(me, SPELL_SPORE_CLOUD, true);
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
index d3b11d481fb..e8ce29e9f1a 100644
--- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
+++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp
@@ -56,6 +56,19 @@ public:
{
boss_the_black_stalkerAI(Creature* creature) : ScriptedAI(creature), Striders(creature)
{
+ Initialize();
+ InAir = false;
+ }
+
+ void Initialize()
+ {
+ Levitate_Timer = 12000;
+ ChainLightning_Timer = 6000;
+ StaticCharge_Timer = 10000;
+ SporeStriders_Timer = 10000 + rand32() % 5000;
+ check_Timer = 5000;
+ LevitatedTarget.Clear();
+ LevitatedTarget_Timer = 0;
}
uint32 SporeStriders_Timer;
@@ -70,13 +83,7 @@ public:
void Reset() override
{
- Levitate_Timer = 12000;
- ChainLightning_Timer = 6000;
- StaticCharge_Timer = 10000;
- SporeStriders_Timer = 10000 + rand32() % 5000;
- check_Timer = 5000;
- LevitatedTarget.Clear();
- LevitatedTarget_Timer = 0;
+ Initialize();
Striders.DespawnAll();
}
diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
index 592ffc1f69e..2cee741cbf3 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp
@@ -72,7 +72,21 @@ class boss_gruul : public CreatureScript
struct boss_gruulAI : public BossAI
{
- boss_gruulAI(Creature* creature) : BossAI(creature, DATA_GRUUL) { }
+ boss_gruulAI(Creature* creature) : BossAI(creature, DATA_GRUUL)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ m_uiGrowth_Timer = 30000;
+ m_uiCaveIn_Timer = 27000;
+ m_uiCaveIn_StaticTimer = 30000;
+ m_uiGroundSlamTimer = 35000;
+ m_bPerformingGroundSlam = false;
+ m_uiHurtfulStrike_Timer = 8000;
+ m_uiReverberation_Timer = 60000 + 45000;
+ }
uint32 m_uiGrowth_Timer;
uint32 m_uiCaveIn_Timer;
@@ -86,13 +100,7 @@ class boss_gruul : public CreatureScript
void Reset() override
{
_Reset();
- m_uiGrowth_Timer= 30000;
- m_uiCaveIn_Timer= 27000;
- m_uiCaveIn_StaticTimer = 30000;
- m_uiGroundSlamTimer= 35000;
- m_bPerformingGroundSlam= false;
- m_uiHurtfulStrike_Timer= 8000;
- m_uiReverberation_Timer= 60000+45000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
index 0fcc7310d07..4dcfe2be4cb 100644
--- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
+++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp
@@ -77,9 +77,21 @@ public:
{
boss_high_king_maulgarAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ ArcingSmash_Timer = 10000;
+ MightyBlow_Timer = 40000;
+ Whirlwind_Timer = 30000;
+ Charging_Timer = 0;
+ Roar_Timer = 0;
+
+ Phase2 = false;
+ }
+
InstanceScript* instance;
uint32 ArcingSmash_Timer;
@@ -92,16 +104,10 @@ public:
void Reset() override
{
- ArcingSmash_Timer = 10000;
- MightyBlow_Timer = 40000;
- Whirlwind_Timer = 30000;
- Charging_Timer = 0;
- Roar_Timer = 0;
+ Initialize();
DoCast(me, SPELL_DUAL_WIELD, false);
- Phase2 = false;
-
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
@@ -209,20 +215,26 @@ public:
{
boss_olm_the_summonerAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ DarkDecay_Timer = 10000;
+ Summon_Timer = 15000;
+ DeathCoil_Timer = 20000;
+ }
+
uint32 DarkDecay_Timer;
uint32 Summon_Timer;
- uint32 DeathCoil_Timer;
+ uint32 DeathCoil_Timer;
InstanceScript* instance;
void Reset() override
{
- DarkDecay_Timer = 10000;
- Summon_Timer = 15000;
- DeathCoil_Timer = 20000;
+ Initialize();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
@@ -305,9 +317,18 @@ public:
{
boss_kiggler_the_crazedAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ GreaterPolymorph_Timer = 5000;
+ LightningBolt_Timer = 10000;
+ ArcaneShock_Timer = 20000;
+ ArcaneExplosion_Timer = 30000;
+ }
+
uint32 GreaterPolymorph_Timer;
uint32 LightningBolt_Timer;
uint32 ArcaneShock_Timer;
@@ -317,10 +338,7 @@ public:
void Reset() override
{
- GreaterPolymorph_Timer = 5000;
- LightningBolt_Timer = 10000;
- ArcaneShock_Timer = 20000;
- ArcaneExplosion_Timer = 30000;
+ Initialize();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
@@ -393,9 +411,17 @@ public:
{
boss_blindeye_the_seerAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ GreaterPowerWordShield_Timer = 5000;
+ Heal_Timer = urand(25000, 40000);
+ PrayerofHealing_Timer = urand(45000, 55000);
+ }
+
uint32 GreaterPowerWordShield_Timer;
uint32 Heal_Timer;
uint32 PrayerofHealing_Timer;
@@ -404,9 +430,7 @@ public:
void Reset() override
{
- GreaterPowerWordShield_Timer = 5000;
- Heal_Timer = urand(25000, 40000);
- PrayerofHealing_Timer = urand(45000, 55000);
+ Initialize();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
@@ -470,9 +494,17 @@ public:
{
boss_krosh_firehandAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ GreaterFireball_Timer = 1000;
+ SpellShield_Timer = 5000;
+ BlastWave_Timer = 20000;
+ }
+
uint32 GreaterFireball_Timer;
uint32 SpellShield_Timer;
uint32 BlastWave_Timer;
@@ -481,9 +513,7 @@ public:
void Reset() override
{
- GreaterFireball_Timer = 1000;
- SpellShield_Timer = 5000;
- BlastWave_Timer = 20000;
+ Initialize();
instance->SetBossState(DATA_MAULGAR, NOT_STARTED);
}
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 da7074b131f..1d9eb81b1e7 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
@@ -65,6 +65,17 @@ class boss_kelidan_the_breaker : public CreatureScript
{
boss_kelidan_the_breakerAI(Creature* creature) : BossAI(creature, DATA_KELIDAN_THE_BREAKER)
{
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ShadowVolley_Timer = 1000;
+ BurningNova_Timer = 15000;
+ Corruption_Timer = 5000;
+ check_Timer = 0;
+ Firenova = false;
+ addYell = false;
}
uint32 ShadowVolley_Timer;
@@ -79,12 +90,7 @@ class boss_kelidan_the_breaker : public CreatureScript
void Reset() override
{
_Reset();
- ShadowVolley_Timer = 1000;
- BurningNova_Timer = 15000;
- Corruption_Timer = 5000;
- check_Timer = 0;
- Firenova = false;
- addYell = false;
+ Initialize();
SummonChannelers();
me->SetReactState(REACT_PASSIVE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE);
@@ -271,7 +277,17 @@ class npc_shadowmoon_channeler : public CreatureScript
struct npc_shadowmoon_channelerAI : public ScriptedAI
{
- npc_shadowmoon_channelerAI(Creature* creature) : ScriptedAI(creature){ }
+ npc_shadowmoon_channelerAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ShadowBolt_Timer = 1000 + rand32() % 1000;
+ MarkOfShadow_Timer = 5000 + rand32() % 2000;
+ check_Timer = 0;
+ }
uint32 ShadowBolt_Timer;
uint32 MarkOfShadow_Timer;
@@ -279,9 +295,7 @@ class npc_shadowmoon_channeler : public CreatureScript
void Reset() override
{
- ShadowBolt_Timer = 1000 + rand32() % 1000;
- MarkOfShadow_Timer = 5000 + rand32() % 2000;
- check_Timer = 0;
+ Initialize();
if (me->IsNonMeleeSpellCast(false))
me->InterruptNonMeleeSpells(true);
}
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 061d6a6a9a8..831818a4c9a 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
@@ -60,13 +60,12 @@ class boss_omor_the_unscarred : public CreatureScript
{
boss_omor_the_unscarredAI(Creature* creature) : BossAI(creature, DATA_OMOR_THE_UNSCARRED)
{
+ Initialize();
SetCombatMovement(false);
}
- void Reset() override
+ void Initialize()
{
- Talk(SAY_WIPE);
-
OrbitalStrike_Timer = 25000;
ShadowWhip_Timer = 2000;
Aura_Timer = 10000;
@@ -76,6 +75,13 @@ class boss_omor_the_unscarred : public CreatureScript
SummonedCount = 0;
PlayerGUID.Clear();
CanPullBack = false;
+ }
+
+ void Reset() override
+ {
+ Talk(SAY_WIPE);
+
+ Initialize();
_Reset();
}
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 44c93dc77c9..566c6439893 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
@@ -70,16 +70,24 @@ class boss_nazan : public CreatureScript
{
boss_nazanAI(Creature* creature) : BossAI(creature, DATA_NAZAN)
{
+ Initialize();
flight = true;
+ BellowingRoar_Timer = 0;
+ ConeOfFire_Timer = 0;
}
- void Reset() override
+ void Initialize()
{
Fireball_Timer = 4000;
Fly_Timer = 45000;
Turn_Timer = 0;
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void EnterCombat(Unit* /*who*/) override { }
void IsSummonedBy(Unit* summoner) override
@@ -198,13 +206,21 @@ class boss_vazruden : public CreatureScript
struct boss_vazrudenAI : public BossAI
{
- boss_vazrudenAI(Creature* creature) : BossAI(creature, DATA_VAZRUDEN) { }
+ boss_vazrudenAI(Creature* creature) : BossAI(creature, DATA_VAZRUDEN)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
Revenge_Timer = 4000;
UnsummonCheck = 2000;
WipeSaid = false;
+ }
+
+ void Reset() override
+ {
+ Initialize();
_Reset();
}
@@ -278,16 +294,22 @@ class boss_vazruden_the_herald : public CreatureScript
{
boss_vazruden_the_heraldAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
summoned = false;
sentryDown = false;
lootSpawned = false;
}
- void Reset() override
+ void Initialize()
{
phase = 0;
waypoint = 0;
check = 0;
+ }
+
+ void Reset() override
+ {
+ Initialize();
UnsummonAdds();
}
@@ -451,13 +473,21 @@ class npc_hellfire_sentry : public CreatureScript
struct npc_hellfire_sentryAI : public ScriptedAI
{
- npc_hellfire_sentryAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_hellfire_sentryAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
KidneyShot_Timer = urand(3000, 7000);
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void EnterCombat(Unit* /*who*/) override { }
void JustDied(Unit* killer) override
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 5baaebc0d7b..2fbef051313 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_watchkeeper_gargolmar.cpp
@@ -58,13 +58,21 @@ class boss_watchkeeper_gargolmar : public CreatureScript
struct boss_watchkeeper_gargolmarAI : public BossAI
{
- boss_watchkeeper_gargolmarAI(Creature* creature) : BossAI(creature, DATA_WATCHKEEPER_GARGOLMAR) { }
+ boss_watchkeeper_gargolmarAI(Creature* creature) : BossAI(creature, DATA_WATCHKEEPER_GARGOLMAR)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
- hasTaunted = false;
+ hasTaunted = false;
yelledForHeal = false;
- retaliation = false;
+ retaliation = false;
+ }
+
+ void Reset() override
+ {
+ Initialize();
_Reset();
}
diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
index 1c3eb6d8c34..7b8eeb8834d 100644
--- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp
@@ -34,7 +34,10 @@ class instance_ramparts : public InstanceMapScript
struct instance_ramparts_InstanceMapScript : public InstanceScript
{
- instance_ramparts_InstanceMapScript(Map* map) : InstanceScript(map) { }
+ instance_ramparts_InstanceMapScript(Map* map) : InstanceScript(map)
+ {
+ spawned = false;
+ }
void Initialize() override
{
diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
index 50cdcfe121b..e7c1e60e432 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -100,17 +100,23 @@ class npc_abyssal : public CreatureScript
{
npc_abyssalAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
trigger = 0;
Despawn_Timer = 60000;
}
+ void Initialize()
+ {
+ FireBlast_Timer = 6000;
+ }
+
uint32 FireBlast_Timer;
uint32 Despawn_Timer;
uint32 trigger;
void Reset() override
{
- FireBlast_Timer = 6000;
+ Initialize();
}
void SpellHit(Unit*, const SpellInfo* spell) override
@@ -207,11 +213,26 @@ class boss_magtheridon : public CreatureScript
{
boss_magtheridonAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10);
}
+ void Initialize()
+ {
+ Berserk_Timer = 1320000;
+ Quake_Timer = 40000;
+ Debris_Timer = 10000;
+ Blaze_Timer = 10000 + rand32() % 20000;
+ BlastNova_Timer = 60000;
+ Cleave_Timer = 15000;
+ RandChat_Timer = 90000;
+
+ Phase3 = false;
+ NeedCheckCube = false;
+ }
+
CubeMap Cube;
InstanceScript* instance;
@@ -229,16 +250,7 @@ class boss_magtheridon : public CreatureScript
void Reset() override
{
- Berserk_Timer = 1320000;
- Quake_Timer = 40000;
- Debris_Timer = 10000;
- Blaze_Timer = 10000 + rand32() % 20000;
- BlastNova_Timer = 60000;
- Cleave_Timer = 15000;
- RandChat_Timer = 90000;
-
- Phase3 = false;
- NeedCheckCube = false;
+ Initialize();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -468,9 +480,20 @@ class npc_hellfire_channeler : public CreatureScript
{
npc_hellfire_channelerAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ ShadowBoltVolley_Timer = urand(8000, 10000);
+ DarkMending_Timer = 10000;
+ Fear_Timer = urand(15000, 20000);
+ Infernal_Timer = urand(10000, 50000);
+
+ Check_Timer = 5000;
+ }
+
InstanceScript* instance;
uint32 ShadowBoltVolley_Timer;
@@ -482,12 +505,7 @@ class npc_hellfire_channeler : public CreatureScript
void Reset() override
{
- ShadowBoltVolley_Timer = urand(8000, 10000);
- DarkMending_Timer = 10000;
- Fear_Timer = urand(15000, 20000);
- Infernal_Timer = urand(10000, 50000);
-
- Check_Timer = 5000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
index 741d5b78285..59fb8b48e30 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp
@@ -83,12 +83,13 @@ class boss_grand_warlock_nethekurse : public CreatureScript
struct boss_grand_warlock_nethekurseAI : public BossAI
{
- boss_grand_warlock_nethekurseAI(Creature* creature) : BossAI(creature, DATA_NETHEKURSE) { }
-
- void Reset() override
+ boss_grand_warlock_nethekurseAI(Creature* creature) : BossAI(creature, DATA_NETHEKURSE)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ Initialize();
+ }
+ void Initialize()
+ {
IsIntroEvent = false;
IntroOnce = false;
IsMainEvent = false;
@@ -105,6 +106,13 @@ class boss_grand_warlock_nethekurse : public CreatureScript
Cleave_Timer = 5000;
}
+ void Reset() override
+ {
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+
+ Initialize();
+ }
+
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DIE);
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 f60c65b0b7a..2d33bee4091 100644
--- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_warbringer_omrogg.cpp
@@ -136,6 +136,26 @@ class boss_warbringer_omrogg : public CreatureScript
{
boss_warbringer_omroggAI(Creature* creature) : BossAI(creature, DATA_OMROGG)
{
+ Initialize();
+ iaggro = 0;
+ ithreat = 0;
+ ikilling = 0;
+ }
+
+ void Initialize()
+ {
+ AggroYell = false;
+ ThreatYell = false;
+ ThreatYell2 = false;
+ KillingYell = false;
+
+ Delay_Timer = 4000;
+ BlastWave_Timer = 0;
+ BlastCount = 0;
+ Fear_Timer = 8000;
+ BurningMaul_Timer = 25000;
+ ThunderClap_Timer = 15000;
+ ResetThreat_Timer = 30000;
}
void Reset() override
@@ -152,18 +172,7 @@ class boss_warbringer_omrogg : public CreatureScript
RightHeadGUID.Clear();
}
- AggroYell = false;
- ThreatYell = false;
- ThreatYell2 = false;
- KillingYell = false;
-
- Delay_Timer = 4000;
- BlastWave_Timer = 0;
- BlastCount = 0;
- Fear_Timer = 8000;
- BurningMaul_Timer = 25000;
- ThunderClap_Timer = 15000;
- ResetThreat_Timer = 30000;
+ Initialize();
instance->SetData(DATA_OMROGG, NOT_STARTED); //End boss can use this later. O'mrogg must be defeated(DONE) or he will come to aid.
}
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 7145ebfd7aa..ff8bb84c397 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
@@ -65,15 +65,14 @@ class boss_warchief_kargath_bladefist : public CreatureScript
struct boss_warchief_kargath_bladefistAI : public BossAI
{
- boss_warchief_kargath_bladefistAI(Creature* creature) : BossAI(creature, DATA_KARGATH) { }
-
- void Reset() override
+ boss_warchief_kargath_bladefistAI(Creature* creature) : BossAI(creature, DATA_KARGATH)
{
- removeAdds();
-
- me->SetSpeed(MOVE_RUN, 2);
- me->SetWalk(false);
+ Initialize();
+ target_num = 0;
+ }
+ void Initialize()
+ {
summoned = 2;
InBlade = false;
Wait_Timer = 0;
@@ -85,6 +84,16 @@ class boss_warchief_kargath_bladefist : public CreatureScript
resetcheck_timer = 5000;
}
+ void Reset() override
+ {
+ removeAdds();
+
+ me->SetSpeed(MOVE_RUN, 2);
+ me->SetWalk(false);
+
+ Initialize();
+ }
+
void JustDied(Unit* /*killer*/) override
{
Talk(SAY_DEATH);
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
index 8dd1aad5d4d..0f9547a2b37 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp
@@ -81,8 +81,28 @@ class boss_alar : public CreatureScript
{
boss_alarAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
DefaultMoveSpeedRate = creature->GetSpeedRate(MOVE_RUN);
+ DiveBomb_Timer = 0;
+ MeltArmor_Timer = 0;
+ Charge_Timer = 0;
+ FlamePatch_Timer = 0;
+ }
+
+ void Initialize()
+ {
+ Berserk_Timer = 1200000;
+ Platforms_Move_Timer = 0;
+
+ Phase1 = true;
+ WaitEvent = WE_NONE;
+ WaitTimer = 0;
+ AfterMoving = false;
+ ForceMove = false;
+ ForceTimer = 5000;
+
+ cur_wp = 4;
}
InstanceScript* instance;
@@ -111,17 +131,7 @@ class boss_alar : public CreatureScript
{
instance->SetData(DATA_ALAREVENT, NOT_STARTED);
- Berserk_Timer = 1200000;
- Platforms_Move_Timer = 0;
-
- Phase1 = true;
- WaitEvent = WE_NONE;
- WaitTimer = 0;
- AfterMoving = false;
- ForceMove = false;
- ForceTimer = 5000;
-
- cur_wp = 4;
+ Initialize();
me->SetDisplayId(me->GetNativeDisplayId());
me->SetSpeed(MOVE_RUN, DefaultMoveSpeedRate);
@@ -461,17 +471,23 @@ class npc_ember_of_alar : public CreatureScript
{
npc_ember_of_alarAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
creature->SetDisableGravity(true);
creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
}
+ void Initialize()
+ {
+ toDie = false;
+ }
+
InstanceScript* instance;
bool toDie;
void Reset() override
{
- toDie = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
index 0a9e5665ec8..cd433000e8e 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp
@@ -101,10 +101,29 @@ class boss_high_astromancer_solarian : public CreatureScript
{
boss_high_astromancer_solarianAI(Creature* creature) : ScriptedAI(creature), Summons(me)
{
+ Initialize();
instance = creature->GetInstanceScript();
defaultarmor = creature->GetArmor();
defaultsize = creature->GetObjectScale();
+ memset(Portals, 0, sizeof(Portals));
+ }
+
+ void Initialize()
+ {
+ ArcaneMissiles_Timer = 2000;
+ m_uiWrathOfTheAstromancer_Timer = 15000;
+ BlindingLight_Timer = 41000;
+ Fear_Timer = 20000;
+ VoidBolt_Timer = 10000;
+ Phase1_Timer = 50000;
+ Phase2_Timer = 10000;
+ Phase3_Timer = 15000;
+ AppearDelay_Timer = 2000;
+ BlindingLight = false;
+ AppearDelay = false;
+ Wrath_Timer = 20000 + rand32() % 5000;//twice in phase one
+ Phase = 1;
}
InstanceScript* instance;
@@ -132,19 +151,7 @@ class boss_high_astromancer_solarian : public CreatureScript
void Reset() override
{
- ArcaneMissiles_Timer = 2000;
- m_uiWrathOfTheAstromancer_Timer = 15000;
- BlindingLight_Timer = 41000;
- Fear_Timer = 20000;
- VoidBolt_Timer = 10000;
- Phase1_Timer = 50000;
- Phase2_Timer = 10000;
- Phase3_Timer = 15000;
- AppearDelay_Timer = 2000;
- BlindingLight = false;
- AppearDelay = false;
- Wrath_Timer = 20000 + rand32() % 5000;//twice in phase one
- Phase = 1;
+ Initialize();
instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, NOT_STARTED);
@@ -433,9 +440,17 @@ class npc_solarium_priest : public CreatureScript
{
npc_solarium_priestAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ healTimer = 9000;
+ holysmiteTimer = 1;
+ aoesilenceTimer = 15000;
+ }
+
InstanceScript* instance;
uint32 healTimer;
@@ -444,9 +459,7 @@ class npc_solarium_priest : public CreatureScript
void Reset() override
{
- healTimer = 9000;
- holysmiteTimer = 1;
- aoesilenceTimer = 15000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index 8b23ee172af..961f07bd823 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -155,10 +155,18 @@ struct advisorbase_ai : public ScriptedAI
{
advisorbase_ai(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
m_bDoubled_Health = false;
}
+ void Initialize()
+ {
+ FakeDeath = false;
+ DelayRes_Timer = 0;
+ DelayRes_Target.Clear();
+ }
+
InstanceScript* instance;
bool FakeDeath;
bool m_bDoubled_Health;
@@ -173,9 +181,7 @@ struct advisorbase_ai : public ScriptedAI
m_bDoubled_Health = false;
}
- FakeDeath = false;
- DelayRes_Timer = 0;
- DelayRes_Target.Clear();
+ Initialize();
me->SetStandState(UNIT_STAND_STATE_STAND);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -289,7 +295,29 @@ class boss_kaelthas : public CreatureScript
{
boss_kaelthasAI(Creature* creature) : ScriptedAI(creature), summons(me)
{
+ Initialize();
instance = creature->GetInstanceScript();
+ PhaseSubphase = 0;
+ Phase_Timer = 0;
+ }
+
+ void Initialize()
+ {
+ Fireball_Timer = 5000 + rand32() % 10000;
+ ArcaneDisruption_Timer = 45000;
+ MindControl_Timer = 40000;
+ Phoenix_Timer = 50000;
+ ShockBarrier_Timer = 60000;
+ FlameStrike_Timer = 30000;
+ GravityLapse_Timer = 20000;
+ GravityLapse_Phase = 0;
+ NetherBeam_Timer = 8000;
+ NetherVapor_Timer = 10000;
+ PyrosCast = 0;
+ Phase = 0;
+ InGravityLapse = false;
+ IsCastingFireball = false;
+ ChainPyros = false;
}
InstanceScript* instance;
@@ -319,21 +347,7 @@ class boss_kaelthas : public CreatureScript
void Reset() override
{
- Fireball_Timer = 5000 + rand32() % 10000;
- ArcaneDisruption_Timer = 45000;
- MindControl_Timer = 40000;
- Phoenix_Timer = 50000;
- ShockBarrier_Timer = 60000;
- FlameStrike_Timer = 30000;
- GravityLapse_Timer = 20000;
- GravityLapse_Phase = 0;
- NetherBeam_Timer = 8000;
- NetherVapor_Timer = 10000;
- PyrosCast = 0;
- Phase = 0;
- InGravityLapse = false;
- IsCastingFireball = false;
- ChainPyros = false;
+ Initialize();
if (me->IsInCombat())
PrepareAdvisors();
@@ -1016,7 +1030,17 @@ class boss_thaladred_the_darkener : public CreatureScript
}
struct boss_thaladred_the_darkenerAI : public advisorbase_ai
{
- boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature) { }
+ boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Gaze_Timer = 100;
+ Silence_Timer = 20000;
+ PsychicBlow_Timer = 10000;
+ }
uint32 Gaze_Timer;
uint32 Silence_Timer;
@@ -1024,9 +1048,7 @@ class boss_thaladred_the_darkener : public CreatureScript
void Reset() override
{
- Gaze_Timer = 100;
- Silence_Timer = 20000;
- PsychicBlow_Timer = 10000;
+ Initialize();
advisorbase_ai::Reset();
}
@@ -1114,13 +1136,21 @@ class boss_lord_sanguinar : public CreatureScript
}
struct boss_lord_sanguinarAI : public advisorbase_ai
{
- boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature) { }
+ boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Fear_Timer = 20000;
+ }
uint32 Fear_Timer;
void Reset() override
{
- Fear_Timer = 20000;
+ Initialize();
advisorbase_ai::Reset();
}
@@ -1181,7 +1211,19 @@ class boss_grand_astromancer_capernian : public CreatureScript
}
struct boss_grand_astromancer_capernianAI : public advisorbase_ai
{
- boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature) { }
+ boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Fireball_Timer = 2000;
+ Conflagration_Timer = 20000;
+ ArcaneExplosion_Timer = 5000;
+ Yell_Timer = 2000;
+ Yell = false;
+ }
uint32 Fireball_Timer;
uint32 Conflagration_Timer;
@@ -1191,11 +1233,7 @@ class boss_grand_astromancer_capernian : public CreatureScript
void Reset() override
{
- Fireball_Timer = 2000;
- Conflagration_Timer = 20000;
- ArcaneExplosion_Timer = 5000;
- Yell_Timer = 2000;
- Yell = false;
+ Initialize();
advisorbase_ai::Reset();
}
@@ -1326,15 +1364,23 @@ class boss_master_engineer_telonicus : public CreatureScript
}
struct boss_master_engineer_telonicusAI : public advisorbase_ai
{
- boss_master_engineer_telonicusAI(Creature* creature) : advisorbase_ai(creature) { }
+ boss_master_engineer_telonicusAI(Creature* creature) : advisorbase_ai(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Bomb_Timer = 10000;
+ RemoteToy_Timer = 5000;
+ }
uint32 Bomb_Timer;
uint32 RemoteToy_Timer;
void Reset() override
{
- Bomb_Timer = 10000;
- RemoteToy_Timer = 5000;
+ Initialize();
advisorbase_ai::Reset();
}
@@ -1411,18 +1457,24 @@ class npc_kael_flamestrike : public CreatureScript
{
npc_kael_flamestrikeAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
SetCombatMovement(false);
}
+ void Initialize()
+ {
+ Timer = 5000;
+ Casting = false;
+ KillSelf = false;
+ }
+
uint32 Timer;
bool Casting;
bool KillSelf;
void Reset() override
{
- Timer = 5000;
- Casting = false;
- KillSelf = false;
+ Initialize();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->setFaction(14);
@@ -1477,13 +1529,21 @@ class npc_phoenix_tk : public CreatureScript
}
struct npc_phoenix_tkAI : public ScriptedAI
{
- npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Cycle_Timer = 2000;
+ }
uint32 Cycle_Timer;
void Reset() override
{
- Cycle_Timer = 2000;
+ Initialize();
DoCast(me, SPELL_BURN, true);
}
@@ -1531,13 +1591,21 @@ class npc_phoenix_egg_tk : public CreatureScript
}
struct npc_phoenix_egg_tkAI : public ScriptedAI
{
- npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Rebirth_Timer = 15000;
+ }
uint32 Rebirth_Timer;
void Reset() override
{
- Rebirth_Timer = 15000;
+ Initialize();
}
//ignore any
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
index b518eb1cb8b..dd97d10cfbe 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
@@ -56,9 +56,20 @@ class boss_void_reaver : public CreatureScript
{
boss_void_reaverAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ Pounding_Timer = 15000;
+ ArcaneOrb_Timer = 3000;
+ KnockAway_Timer = 30000;
+ Berserk_Timer = 600000;
+
+ Enraged = false;
+ }
+
InstanceScript* instance;
uint32 Pounding_Timer;
@@ -70,12 +81,7 @@ class boss_void_reaver : public CreatureScript
void Reset() override
{
- Pounding_Timer = 15000;
- ArcaneOrb_Timer = 3000;
- KnockAway_Timer = 30000;
- Berserk_Timer = 600000;
-
- Enraged = false;
+ Initialize();
if (me->IsAlive())
instance->SetData(DATA_VOIDREAVEREVENT, NOT_STARTED);
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp
index 32af9f647ad..22526465283 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.cpp
@@ -47,15 +47,23 @@ class npc_crystalcore_devastator : public CreatureScript
}
struct npc_crystalcore_devastatorAI : public ScriptedAI
{
- npc_crystalcore_devastatorAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_crystalcore_devastatorAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Countercharge_Timer = 9000;
+ Knockaway_Timer = 25000;
+ }
uint32 Knockaway_Timer;
uint32 Countercharge_Timer;
void Reset() override
{
- Countercharge_Timer = 9000;
- Knockaway_Timer = 25000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
index 3e4e6a213bd..276b291e236 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_nethermancer_sepethrea.cpp
@@ -151,9 +151,18 @@ class npc_ragin_flames : public CreatureScript
{
npc_ragin_flamesAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ inferno_Timer = 10000;
+ flame_timer = 500;
+ Check_Timer = 2000;
+ onlyonce = false;
+ }
+
InstanceScript* instance;
uint32 inferno_Timer;
@@ -164,10 +173,7 @@ class npc_ragin_flames : public CreatureScript
void Reset() override
{
- inferno_Timer = 10000;
- flame_timer = 500;
- Check_Timer = 2000;
- onlyonce = false;
+ Initialize();
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true);
me->SetSpeed(MOVE_RUN, DUNGEON_MODE(0.5f, 0.7f));
diff --git a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
index 3c6fe2040fc..8f416d3aa8c 100644
--- a/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Mechanar/boss_pathaleon_the_calculator.cpp
@@ -172,7 +172,18 @@ class npc_nether_wraith : public CreatureScript
struct npc_nether_wraithAI : public ScriptedAI
{
- npc_nether_wraithAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_nether_wraithAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ArcaneMissiles_Timer = urand(1000, 4000);
+ Detonation_Timer = 20000;
+ Die_Timer = 2200;
+ Detonation = false;
+ }
uint32 ArcaneMissiles_Timer;
uint32 Detonation_Timer;
@@ -181,10 +192,7 @@ class npc_nether_wraith : public CreatureScript
void Reset() override
{
- ArcaneMissiles_Timer = urand(1000, 4000);
- Detonation_Timer = 20000;
- Die_Timer = 2200;
- Detonation = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
index 1a8658c8fbc..cb875e26c42 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp
@@ -75,9 +75,21 @@ class npc_millhouse_manastorm : public CreatureScript
{
npc_millhouse_manastormAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ EventProgress_Timer = 2000;
+ LowHp = false;
+ Init = false;
+ Phase = 1;
+
+ Pyroblast_Timer = 1000;
+ Fireball_Timer = 2500;
+ }
+
InstanceScript* instance;
uint32 EventProgress_Timer;
@@ -90,13 +102,7 @@ class npc_millhouse_manastorm : public CreatureScript
void Reset() override
{
- EventProgress_Timer = 2000;
- LowHp = false;
- Init = false;
- Phase = 1;
-
- Pyroblast_Timer = 1000;
- Fireball_Timer = 2500;
+ Initialize();
if (instance->GetData(DATA_WARDEN_2) == DONE)
Init = true;
@@ -271,9 +277,19 @@ class npc_warden_mellichar : public CreatureScript
{
npc_warden_mellicharAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
instance = creature->GetInstanceScript();
}
+ void Initialize()
+ {
+ IsRunning = false;
+ CanSpawn = false;
+
+ EventProgress_Timer = 22000;
+ Phase = 1;
+ }
+
InstanceScript* instance;
bool IsRunning;
@@ -284,11 +300,7 @@ class npc_warden_mellichar : public CreatureScript
void Reset() override
{
- IsRunning = false;
- CanSpawn = false;
-
- EventProgress_Timer = 22000;
- Phase = 1;
+ Initialize();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
DoCast(me, SPELL_TARGET_OMEGA);
diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
index ec22baf2d4e..2d549e590c5 100644
--- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
+++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp
@@ -67,9 +67,23 @@ class boss_harbinger_skyriss : public CreatureScript
{
boss_harbinger_skyrissAI(Creature* creature) : BossAI(creature, DATA_HARBINGER_SKYRISS)
{
+ Initialize();
Intro = false;
}
+ void Initialize()
+ {
+ IsImage33 = false;
+ IsImage66 = false;
+
+ Intro_Phase = 1;
+ Intro_Timer = 5000;
+ MindRend_Timer = 3000;
+ Fear_Timer = 15000;
+ Domination_Timer = 30000;
+ ManaBurn_Timer = 25000;
+ }
+
bool Intro;
bool IsImage33;
bool IsImage66;
@@ -86,15 +100,7 @@ class boss_harbinger_skyriss : public CreatureScript
if (!Intro)
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- IsImage33 = false;
- IsImage66 = false;
-
- Intro_Phase = 1;
- Intro_Timer = 5000;
- MindRend_Timer = 3000;
- Fear_Timer = 15000;
- Domination_Timer = 30000;
- ManaBurn_Timer = 25000;
+ Initialize();
}
void MoveInLineOfSight(Unit* who) override
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp
index 7b831e82a75..e254d92bac8 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_commander_sarannis.cpp
@@ -50,12 +50,20 @@ class boss_commander_sarannis : public CreatureScript
struct boss_commander_sarannisAI : public BossAI
{
- boss_commander_sarannisAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS) { }
+ boss_commander_sarannisAI(Creature* creature) : BossAI(creature, DATA_COMMANDER_SARANNIS)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ _phase = true;
+ }
void Reset() override
{
_Reset();
- _phase = true;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
index c0591f7b874..ff336216954 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_high_botanist_freywinn.cpp
@@ -64,7 +64,19 @@ class boss_high_botanist_freywinn : public CreatureScript
struct boss_high_botanist_freywinnAI : public BossAI
{
- boss_high_botanist_freywinnAI(Creature* creature) : BossAI(creature, DATA_HIGH_BOTANIST_FREYWINN) { }
+ boss_high_botanist_freywinnAI(Creature* creature) : BossAI(creature, DATA_HIGH_BOTANIST_FREYWINN)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ SummonSeedling_Timer = 6000;
+ TreeForm_Timer = 30000;
+ MoveCheck_Timer = 1000;
+ DeadAddsCount = 0;
+ MoveFree = true;
+ }
uint32 SummonSeedling_Timer;
uint32 TreeForm_Timer;
@@ -76,11 +88,7 @@ class boss_high_botanist_freywinn : public CreatureScript
{
summons.DespawnAll();
- SummonSeedling_Timer = 6000;
- TreeForm_Timer = 30000;
- MoveCheck_Timer = 1000;
- DeadAddsCount = 0;
- MoveFree = true;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
index 768c9b5b8f1..0e25a6e0758 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_laj.cpp
@@ -62,7 +62,19 @@ class boss_laj : public CreatureScript
struct boss_lajAI : public BossAI
{
- boss_lajAI(Creature* creature) : BossAI(creature, DATA_LAJ) { }
+ boss_lajAI(Creature* creature) : BossAI(creature, DATA_LAJ)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ CanSummon = false;
+ Teleport_Timer = 20000;
+ Summon_Timer = 2500;
+ Transform_Timer = 30000;
+ Allergic_Timer = 5000;
+ }
bool CanSummon;
uint32 Teleport_Timer;
@@ -79,11 +91,7 @@ class boss_laj : public CreatureScript
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, false);
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);
- CanSummon = false;
- Teleport_Timer = 20000;
- Summon_Timer = 2500;
- Transform_Timer = 30000;
- Allergic_Timer = 5000;
+ Initialize();
}
void DoTransform()
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp
index 9114027b9fb..906c6e187ce 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_thorngrin_the_tender.cpp
@@ -51,15 +51,23 @@ class boss_thorngrin_the_tender : public CreatureScript
struct boss_thorngrin_the_tenderAI : public BossAI
{
- boss_thorngrin_the_tenderAI(Creature* creature) : BossAI(creature, DATA_THORNGRIN_THE_TENDER) { }
+ boss_thorngrin_the_tenderAI(Creature* creature) : BossAI(creature, DATA_THORNGRIN_THE_TENDER)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
- _Reset();
_phase1 = true;
_phase2 = true;
}
+ void Reset() override
+ {
+ _Reset();
+ Initialize();
+ }
+
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
diff --git a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
index 56c62bbf50f..fbebe897477 100644
--- a/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
+++ b/src/server/scripts/Outland/TempestKeep/botanica/boss_warp_splinter.cpp
@@ -74,6 +74,12 @@ class npc_warp_splinter_treant : public CreatureScript
{
npc_warp_splinter_treantAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ check_Timer = 0;
}
ObjectGuid WarpGuid;
@@ -81,7 +87,7 @@ class npc_warp_splinter_treant : public CreatureScript
void Reset() override
{
- check_Timer = 0;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -138,10 +144,18 @@ class boss_warp_splinter : public CreatureScript
{
boss_warp_splinterAI(Creature* creature) : BossAI(creature, DATA_WARP_SPLINTER)
{
+ Initialize();
Treant_Spawn_Pos_X = creature->GetPositionX();
Treant_Spawn_Pos_Y = creature->GetPositionY();
}
+ void Initialize()
+ {
+ War_Stomp_Timer = urand(25000, 40000);
+ Summon_Treants_Timer = 45000;
+ Arcane_Volley_Timer = urand(8000, 20000);
+ }
+
uint32 War_Stomp_Timer;
uint32 Summon_Treants_Timer;
uint32 Arcane_Volley_Timer;
@@ -151,9 +165,7 @@ class boss_warp_splinter : public CreatureScript
void Reset() override
{
- War_Stomp_Timer = urand(25000, 40000);
- Summon_Treants_Timer = 45000;
- Arcane_Volley_Timer = urand(8000, 20000);
+ Initialize();
me->SetSpeed(MOVE_RUN, 0.7f, true);
}
diff --git a/src/server/scripts/Outland/boss_doomwalker.cpp b/src/server/scripts/Outland/boss_doomwalker.cpp
index 7b72da0b02e..05113520566 100644
--- a/src/server/scripts/Outland/boss_doomwalker.cpp
+++ b/src/server/scripts/Outland/boss_doomwalker.cpp
@@ -57,6 +57,12 @@ class boss_doomwalker : public CreatureScript
{
boss_doomwalkerAI(Creature* creature) : ScriptedAI(creature)
{
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ _inEnrage = false;
}
void Reset() override
@@ -67,7 +73,7 @@ class boss_doomwalker : public CreatureScript
_events.ScheduleEvent(EVENT_CHAIN, urand(10000, 30000));
_events.ScheduleEvent(EVENT_QUAKE, urand(25000, 35000));
_events.ScheduleEvent(EVENT_OVERRUN, urand(30000, 45000));
- _inEnrage = false;
+ Initialize();
}
void KilledUnit(Unit* victim) override
diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
index 5c95376cdfc..5941bd3decf 100644
--- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
+++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp
@@ -242,7 +242,21 @@ public:
struct npc_nether_drakeAI : public ScriptedAI
{
- npc_nether_drakeAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_nether_drakeAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ IsNihil = false;
+ NihilSpeech_Timer = 3000;
+ NihilSpeech_Phase = 0;
+
+ ArcaneBlast_Timer = 7500;
+ ManaBurn_Timer = 10000;
+ IntangiblePresence_Timer = 15000;
+ }
bool IsNihil;
uint32 NihilSpeech_Timer;
@@ -254,13 +268,7 @@ public:
void Reset() override
{
- IsNihil = false;
- NihilSpeech_Timer = 3000;
- NihilSpeech_Phase = 0;
-
- ArcaneBlast_Timer = 7500;
- ManaBurn_Timer = 10000;
- IntangiblePresence_Timer = 15000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -602,7 +610,17 @@ class npc_simon_bunny : public CreatureScript
struct npc_simon_bunnyAI : public ScriptedAI
{
- npc_simon_bunnyAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_simon_bunnyAI(Creature* creature) : ScriptedAI(creature)
+ {
+ large = false;
+ listening = false;
+ gameLevel = 0;
+ fails = 0;
+ gameTicks = 0;
+ memset(clusterIds, 0, sizeof(clusterIds));
+ zCoordCorrection = 0.f;
+ searchDistance = 0.f;
+ }
bool large;
bool listening;
diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
index 01ad2ce334f..79e6649495b 100644
--- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
+++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp
@@ -58,13 +58,21 @@ public:
struct npc_aeranasAI : public ScriptedAI
{
- npc_aeranasAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_aeranasAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
faction_Timer = 8000;
envelopingWinds_Timer = 9000;
shock_Timer = 5000;
+ }
+
+ void Reset() override
+ {
+ Initialize();
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
me->setFaction(FACTION_FRIENDLY);
@@ -305,14 +313,22 @@ public:
struct npc_fel_guard_houndAI : public ScriptedAI
{
- npc_fel_guard_houndAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_fel_guard_houndAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
- void Reset() override
+ void Initialize()
{
checkTimer = 5000; //check for creature every 5 sec
helboarGUID.Clear();
}
+ void Reset() override
+ {
+ Initialize();
+ }
+
void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE || id != 1)
diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp
index b8dd1393600..c08f891d13f 100644
--- a/src/server/scripts/Outland/zone_nagrand.cpp
+++ b/src/server/scripts/Outland/zone_nagrand.cpp
@@ -338,15 +338,23 @@ public:
struct npc_corkiAI : public ScriptedAI
{
- npc_corkiAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_corkiAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ Say_Timer = 5000;
+ ReleasedFromCage = false;
+ }
uint32 Say_Timer;
bool ReleasedFromCage;
void Reset() override
{
- Say_Timer = 5000;
- ReleasedFromCage = false;
+ Initialize();
}
void UpdateAI(uint32 diff) override
@@ -441,7 +449,17 @@ public:
struct npc_kurenai_captiveAI : public npc_escortAI
{
- npc_kurenai_captiveAI(Creature* creature) : npc_escortAI(creature) { }
+ npc_kurenai_captiveAI(Creature* creature) : npc_escortAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ ChainLightningTimer = 1000;
+ HealTimer = 0;
+ FrostShockTimer = 6000;
+ }
uint32 ChainLightningTimer;
uint32 HealTimer;
@@ -449,9 +467,7 @@ public:
void Reset() override
{
- ChainLightningTimer = 1000;
- HealTimer = 0;
- FrostShockTimer = 6000;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override
diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp
index eb2fae03202..8bc94663f30 100644
--- a/src/server/scripts/Outland/zone_netherstorm.cpp
+++ b/src/server/scripts/Outland/zone_netherstorm.cpp
@@ -81,7 +81,22 @@ public:
struct npc_commander_dawnforgeAI : public ScriptedAI
{
- npc_commander_dawnforgeAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_commander_dawnforgeAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ PlayerGUID.Clear();
+ ardonisGUID.Clear();
+ pathaleonGUID.Clear();
+
+ Phase = 1;
+ PhaseSubphase = 0;
+ Phase_Timer = 4000;
+ isEvent = false;
+ }
ObjectGuid PlayerGUID;
ObjectGuid ardonisGUID;
@@ -94,14 +109,7 @@ public:
void Reset() override
{
- PlayerGUID.Clear();
- ardonisGUID.Clear();
- pathaleonGUID.Clear();
-
- Phase = 1;
- PhaseSubphase = 0;
- Phase_Timer = 4000;
- isEvent = false;
+ Initialize();
}
void EnterCombat(Unit* /*who*/) override { }
@@ -623,15 +631,23 @@ public:
struct npc_maxx_a_million_escortAI : public npc_escortAI
{
- npc_maxx_a_million_escortAI(Creature* creature) : npc_escortAI(creature) { }
+ npc_maxx_a_million_escortAI(Creature* creature) : npc_escortAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ bTake = false;
+ uiTakeTimer = 3000;
+ }
bool bTake;
uint32 uiTakeTimer;
void Reset() override
{
- bTake=false;
- uiTakeTimer=3000;
+ Initialize();
}
void WaypointReached(uint32 waypointId) override
diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
index 54a7455d3f8..10a03b76fc9 100644
--- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
+++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp
@@ -24,6 +24,8 @@ SDCategory: Shadowmoon Valley
EndScriptData */
/* ContentData
+npc_invis_infernal_caster
+npc_infernal_attacker
npc_mature_netherwing_drake
npc_enslaved_netherwing_drake
npc_drake_dealer_hurlunk
@@ -48,6 +50,144 @@ EndContentData */
#include "WorldSession.h"
/*#####
+# npc_invis_infernal_caster
+#####*/
+
+enum InvisInfernalCaster
+{
+ EVENT_CAST_SUMMON_INFERNAL = 1,
+ NPC_INFERNAL_ATTACKER = 21419,
+ MODEL_INVISIBLE = 20577,
+ MODEL_INFERNAL = 17312,
+ SPELL_SUMMON_INFERNAL = 37277,
+ TYPE_INFERNAL = 1,
+ DATA_DIED = 1
+};
+
+class npc_invis_infernal_caster : public CreatureScript
+{
+public:
+ npc_invis_infernal_caster() : CreatureScript("npc_invis_infernal_caster") { }
+
+ struct npc_invis_infernal_casterAI : public ScriptedAI
+ {
+ npc_invis_infernal_casterAI(Creature* creature) : ScriptedAI(creature)
+ {
+ ground = 0.f;
+ }
+
+ void Reset() override
+ {
+ ground = me->GetMap()->GetHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZMinusOffset());
+ SummonInfernal();
+ events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, urand(1000, 3000));
+ }
+
+ void SetData(uint32 id, uint32 data) override
+ {
+ if (id == TYPE_INFERNAL && data == DATA_DIED)
+ SummonInfernal();
+ }
+
+ void SummonInfernal()
+ {
+ Creature* infernal = me->SummonCreature(NPC_INFERNAL_ATTACKER, me->GetPositionX(), me->GetPositionY(), ground + 0.05f, 0.0f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000);
+ infernalGUID = infernal->GetGUID();
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ events.Update(diff);
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_CAST_SUMMON_INFERNAL:
+ {
+ if (Unit* infernal = ObjectAccessor::GetUnit(*me, infernalGUID))
+ if (infernal->GetDisplayId() == MODEL_INVISIBLE)
+ me->CastSpell(infernal, SPELL_SUMMON_INFERNAL, true);
+ events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, 12000);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+
+ private:
+ EventMap events;
+ ObjectGuid infernalGUID;
+ float ground;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_invis_infernal_casterAI(creature);
+ }
+};
+
+/*#####
+# npc_infernal_attacker
+#####*/
+
+class npc_infernal_attacker : public CreatureScript
+{
+public:
+ npc_infernal_attacker() : CreatureScript("npc_infernal_attacker") { }
+
+ struct npc_infernal_attackerAI : public ScriptedAI
+ {
+ npc_infernal_attackerAI(Creature* creature) : ScriptedAI(creature) { }
+
+ void Reset() override
+ {
+ me->SetDisplayId(MODEL_INVISIBLE);
+ me->GetMotionMaster()->MoveRandom(5.0f);
+ }
+
+ void IsSummonedBy(Unit* summoner) override
+ {
+ if (summoner->ToCreature())
+ casterGUID = summoner->ToCreature()->GetGUID();;
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ if (Creature* caster = ObjectAccessor::GetCreature(*me, casterGUID))
+ caster->AI()->SetData(TYPE_INFERNAL, DATA_DIED);
+ }
+
+ void SpellHit(Unit* /*caster*/, const SpellInfo* spell) override
+ {
+ if (spell->Id == SPELL_SUMMON_INFERNAL)
+ {
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE);
+ me->SetDisplayId(MODEL_INFERNAL);
+ }
+ }
+
+ void UpdateAI(uint32 /*diff*/) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ ObjectGuid casterGUID;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_infernal_attackerAI(creature);
+ }
+};
+
+/*#####
# npc_mature_netherwing_drake
#####*/
@@ -886,13 +1026,21 @@ public:
struct npc_earthmender_wildaAI : public npc_escortAI
{
- npc_earthmender_wildaAI(Creature* creature) : npc_escortAI(creature) { }
+ npc_earthmender_wildaAI(Creature* creature) : npc_escortAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ m_uiHealingTimer = 0;
+ }
uint32 m_uiHealingTimer;
void Reset() override
{
- m_uiHealingTimer = 0;
+ Initialize();
}
void WaypointReached(uint32 waypointId) override
@@ -1271,7 +1419,24 @@ public:
struct npc_lord_illidan_stormrageAI : public ScriptedAI
{
- npc_lord_illidan_stormrageAI(Creature* creature) : ScriptedAI(creature) { }
+ npc_lord_illidan_stormrageAI(Creature* creature) : ScriptedAI(creature)
+ {
+ Initialize();
+ }
+
+ void Initialize()
+ {
+ PlayerGUID.Clear();
+
+ WaveTimer = 10000;
+ AnnounceTimer = 7000;
+ LiveCount = 0;
+ WaveCount = 0;
+
+ EventStarted = false;
+ Announced = false;
+ Failed = false;
+ }
ObjectGuid PlayerGUID;
@@ -1287,16 +1452,7 @@ public:
void Reset() override
{
- PlayerGUID.Clear();
-
- WaveTimer = 10000;
- AnnounceTimer = 7000;
- LiveCount = 0;
- WaveCount = 0;
-
- EventStarted = false;
- Announced = false;
- Failed = false;
+ Initialize();
me->SetVisible(false);
}
@@ -1826,6 +1982,8 @@ public:
void AddSC_shadowmoon_valley()
{
+ new npc_invis_infernal_caster();
+ new npc_infernal_attacker();
new npc_mature_netherwing_drake();
new npc_enslaved_netherwing_drake();
new npc_dragonmaw_peon();