aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/world_database.sql5
-rw-r--r--sql/scripts/world_scripts_full.sql26
-rw-r--r--sql/updates/world/2011_06_23_04_world_achievement_criteria_data.sql5
-rw-r--r--sql/updates/world/2011_06_23_05_world_achievement_criteria_data.sql6
-rw-r--r--sql/updates/world/2011_06_23_06_world_spell_script_names.sql5
-rw-r--r--sql/updates/world/2011_06_23_07_world_misc.sql959
-rw-r--r--sql/updates/world/2011_06_24_00_world_achievement_criteria_data.sql6
-rw-r--r--sql/updates/world/2011_06_24_01_world_achievement_criteria_data.sql6
-rw-r--r--sql/updates/world/2011_06_24_02_world_achievement_criteria_data.sql6
-rw-r--r--sql/updates/world/2011_06_24_03_world_achievement_criteria_data.sql6
-rw-r--r--sql/updates/world/2011_06_24_04_world_achievement_criteria_data.sql1
-rw-r--r--sql/updates/world/2011_06_24_05_world_spell_bonus_data.sql3
-rw-r--r--sql/updates/world/2011_06_24_06_world_spell_script_names.sql7
-rw-r--r--sql/updates/world/2011_06_24_07_world_achievement_criteria_data.sql9
-rw-r--r--sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql6
-rw-r--r--sql/updates/world/2011_06_25_00_world_spell_dbc.sql3
-rw-r--r--sql/updates/world/2011_06_25_01_world_script_texts.sql2
-rw-r--r--sql/updates/world/2011_06_25_02_world_misc.sql31
-rw-r--r--sql/updates/world/2011_06_25_03_world_sai.sql52
-rw-r--r--sql/updates/world/2011_06_25_04_world_achievement_criteria_data.sql6
-rw-r--r--sql/updates/world/2011_06_25_05_world_achievement_criteria_data.sql6
-rw-r--r--sql/updates/world/2011_06_25_06_world_achievement_criteria_data.sql4
-rw-r--r--sql/updates/world/2011_06_25_07_world_achievement_criteria_data.sql6
-rw-r--r--sql/updates/world/2011_06_25_08_world_achievement_criteria_data.sql1
-rw-r--r--sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql11
-rw-r--r--sql/updates/world/2011_06_25_10_world_achievement_criteria_data.sql11
-rw-r--r--sql/updates/world/2011_06_25_11_world_creature_template.sql1
-rw-r--r--sql/updates/world/2011_06_25_12_world_trinity_string.sql1
-rw-r--r--sql/updates/world/2011_06_25_13_world_achievement_criteria_data.sql1
-rw-r--r--sql/updates/world/2011_06_25_14_world_spell_proc_event.sql3
-rw-r--r--sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql13
-rw-r--r--sql/updates/world/2011_06_25_16_world_spell_proc_event.sql3
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundIC.cpp4
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.h2
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp71
-rwxr-xr-xsrc/server/game/Instances/InstanceScript.cpp18
-rwxr-xr-xsrc/server/game/Instances/InstanceScript.h3
-rwxr-xr-xsrc/server/game/Miscellaneous/Language.h4
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/ItemHandler.cpp66
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/SpellHandler.cpp2
-rwxr-xr-xsrc/server/game/Server/WorldSession.h2
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp3
-rwxr-xr-xsrc/server/game/Spells/Spell.h3
-rwxr-xr-xsrc/server/game/Spells/SpellMgr.cpp5
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp70
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h1
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp9
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp75
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp10
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp115
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp3
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp72
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp55
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp41
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp23
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp41
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp3
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp3
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp105
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp82
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp59
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp60
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_auriaya.cpp47
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp122
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp12
-rw-r--r--src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp23
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp11
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp21
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp46
-rw-r--r--src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp11
-rw-r--r--src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp11
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.h3
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp67
-rw-r--r--src/server/scripts/World/boss_emerald_dragons.cpp76
-rw-r--r--src/server/worldserver/worldserver.conf.dist11
75 files changed, 2134 insertions, 548 deletions
diff --git a/sql/base/world_database.sql b/sql/base/world_database.sql
index c3347731ab3..35f79bc11cf 100644
--- a/sql/base/world_database.sql
+++ b/sql/base/world_database.sql
@@ -16959,6 +16959,7 @@ INSERT INTO `spell_bonus_data` (`entry`,`direct_bonus`,`dot_bonus`,`ap_bonus`,`a
(53600, 0, 0, 0, 0 ,'Paladin - Shield of Righteousness'),
(20267, 0, 0, 0, 0, 'Paladin - Judgement of Light Proc'),
(25997, 0, 0, 0, 0, 'Paladin - Eye for an Eye'),
+(64891, -1, 0, -1, -1, 'Paladin - T8 Holy 2P - Holy Mending'),
(50256, -1, -1, 0.08, -1, 'Pet Skills - Bear (Swipe)'),
(32546, 0.8068, -1, -1, -1, 'Priest - Binding Heal'),
(27813, 0, 0, 0, 0, 'Priest - Blessed Recovery Rank 1'),
@@ -19354,6 +19355,7 @@ INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFam
( 54832, 0x00, 7, 0x00000000, 0x00001000, 0x00000000, 0x00004000, 0x00000000, 0, 0, 0), -- Glyph of Innervate
( 67353, 0x00, 7, 0x00008000, 0x00100500, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- uncommented
( 57989, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000, 0, 0, 0), -- uncommented
+( 63086, 0x00, 9, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0, 0, 0), -- Glyph of Raptor Strike
( 65661, 0x00, 15, 0x00400011, 0x20020004, 0x00000000, 0x00000010, 0x00000000, 0, 100, 0), -- Threat of Thassarian (Rank 1)
( 66191, 0x00, 15, 0x00400011, 0x20020004, 0x00000000, 0x00000010, 0x00000000, 0, 100, 0), -- Threat of Thassarian (Rank 2)
( 66192, 0x00, 15, 0x00400011, 0x20020004, 0x00000000, 0x00000010, 0x00000000, 0, 100, 0), -- Threat of Thassarian (Rank 3)
@@ -19400,6 +19402,7 @@ INSERT INTO `spell_proc_event` (`entry`,`SchoolMask`,`SpellFamilyName`,`SpellFam
( 70803, 0x00, 8, 0x003E0000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Item - Rogue T10 4P Bonus
( 70805, 0x00, 8, 0x00000000, 0x00020000, 0x00000000, 0x00004000, 0x00000000, 0, 0, 0), -- Item - Rogue T10 2P Bonus
( 70807, 0x00, 11, 0x00000000, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0, 0, 0), -- Item - Shaman T10 Restoration 2P Bonus
+( 70817, 0x00, 11, 0x00000000, 0x00001000, 0x00000000, 0x00010000, 0x00000000, 0, 0, 0), -- Item - Shaman T10 Elemental 4P Bonus
( 70830, 0x00, 11, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Item - Shaman T10 Enhancement 2P Bonus
( 70841, 0x00, 5, 0x00000004, 0x00000100, 0x00000000, 0x00040000, 0x00000000, 0, 0, 0), -- Item - Warlock T10 4P Bonus
( 70844, 0x00, 4, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0, 0, 0), -- Item - Warrior T10 Protection 4P Bonus
@@ -27581,7 +27584,7 @@ INSERT INTO `trinity_string` (`entry`,`content_default`,`content_loc1`,`content_
(1131, 'The following characters match your query:', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(1132, 'Currently Banned Characters:', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(1133, '| Character | BanDate | UnbanDate | Banned By | Ban Reason |', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
-(1200, 'You try to view cinemitic %u but it doesn''t exist.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
+(1200, 'You try to view cinematic %u but it doesn''t exist.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(1201, 'You try to view movie %u but it doesn''t exist.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(1205, 'The battle will begin in two minutes.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(1206, 'The battle will begin in 1 minute.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql
index 583b44bd543..9cf49eb561e 100644
--- a/sql/scripts/world_scripts_full.sql
+++ b/sql/scripts/world_scripts_full.sql
@@ -1544,7 +1544,7 @@ UPDATE `creature_template` SET `ScriptName`='boss_flame_leviathan_defense_turret
UPDATE `creature_template` SET `ScriptName`='boss_flame_leviathan_overload_device' WHERE `entry`=33143;
UPDATE `creature_template` SET `ScriptName`='boss_flame_leviathan_defense_cannon' WHERE `entry`=33139;
UPDATE `creature_template` SET `ScriptName`='npc_colossus' WHERE `entry`=33237;
-UPDATE `creature_template` SET `ScriptName`='spell_pool_of_tar' WHERE `entry`=33090;
+UPDATE `creature_template` SET `ScriptName`='npc_pool_of_tar' WHERE `entry`=33090;
UPDATE `creature_template` SET `ScriptName`='boss_ignis' WHERE `entry`=33118;
UPDATE `creature_template` SET `ScriptName`='npc_iron_construct' WHERE `entry`=33121;
UPDATE `creature_template` SET `ScriptName`='npc_scorch_ground' WHERE `entry`=33221;
@@ -1827,7 +1827,7 @@ UPDATE `outdoorpvp_template` SET `ScriptName`='outdoorpvp_si' WHERE `TypeId`=5;
UPDATE `outdoorpvp_template` SET `ScriptName`='outdoorpvp_ep' WHERE `TypeId`=6;
/* ACHIEVEMENTS */
-DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (3693,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,1234,1239,5605,5606,12778,13036,13035,13037,12977,12967,12986,12982,12993,12780,13012,13011,13013,12062,12063,12064,12065,12183,12068,12060,12061,12822,12996,12972,12989,10062,10063,10054,10055,10046,10047,10048,10049,10050,10051,10044,10045,6446,7625,7628,5541,5542,5543,7573,7574,7265,7549,12971,12978,12979,12980,7598,7587,7264,7548,10068,10069,10173,10306,10451,10462,10447,10448,10449,10459,10460,10461) AND `type` IN (0,11);
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (3693,3804,3805,3806,3807,3808,3809,3810,3811,3812,3813,1234,1239,5605,5606,12778,13036,13035,13037,12977,12967,12986,12982,12993,12780,13012,13011,13013,12062,12063,12064,12065,12183,12068,12060,12061,12822,12996,12972,12989,10062,10063,10054,10055,10046,10047,10048,10049,10050,10051,10044,10045,6446,7625,7628,5541,5542,5543,7573,7574,7265,7549,12971,12978,12979,12980,7598,7587,7264,7548,10068,10069,10173,10306,10451,10462,10447,10448,10449,10459,10460,10461,7316,7317,7318,7583,4240,6803,7319,7577,7320,7590,7361) AND `type` IN (0,11);
INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) VALUES
(3693,11,0,0, 'achievement_storm_glory'),
(3804,11,0,0, 'achievement_resilient_victory'),
@@ -1911,7 +1911,18 @@ INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,
(10460,11,0,0,'achievement_knock_knock_on_wood'),
(10461,11,0,0,'achievement_knock_knock_knock_on_wood'),
(10445,11,0,0,'achievement_getting_back_to_nature'),
-(10758,11,0,0,'achievement_getting_back_to_nature');
+(10758,11,0,0,'achievement_getting_back_to_nature'),
+(7317,11,0,0,'achievement_respect_your_elders'),
+(7318,11,0,0,'achievement_king_dred'),
+(7316,11,0,0,'achievement_chaos_theory'),
+(7583,11,0,0,'achievement_share_the_love'),
+(4240,11,0,0,'achievement_watch_him_die'),
+(6803,11,0,0,'achievement_defenseless'),
+(7319,11,0,0,'achievement_less_rabi'),
+(7577,11,0,0,'achievement_split_personality'),
+(7320,11,0,0,'achievement_dehydration'),
+(7590,11,0,0,'achievement_brann_sparklin_news'),
+(7361,11,0,0,'achievement_oh_novos');
/* SPELLS */
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
@@ -1919,7 +1930,6 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
( 39228, 'spell_gen_absorb0_hitlimit1'),
( 60218, 'spell_gen_absorb0_hitlimit1'),
( 6962, 'spell_gen_pet_summoned'),
-( 10848, 'spell_gen_shroud_of_death'),
( 24750, 'spell_gen_trick'),
( 24751, 'spell_gen_trick_or_treat'),
( 29266, 'spell_creature_permanent_feign_death'),
@@ -1972,6 +1982,11 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
( 25281, 'spell_gen_turkey_marker'),
(-55428, 'spell_gen_lifeblood'),
( 65917, 'spell_gen_magic_rooster'),
+( 4073, 'spell_gen_allow_cast_from_item_only'),
+( 19804, 'spell_gen_allow_cast_from_item_only'),
+( 12749, 'spell_gen_allow_cast_from_item_only'),
+( 13258, 'spell_gen_allow_cast_from_item_only'),
+( 13166, 'spell_gen_allow_cast_from_item_only'),
-- instances
-- Black Temple
( 41475, 'spell_boss_lady_malande_shield'),
@@ -2242,6 +2257,8 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
( 37751, 'spell_xt002_submerged'),
( 37752, 'spell_xt002_stand'),
( 64381, 'spell_auriaya_strenght_of_the_pack'),
+( 64679, 'spell_auriaya_sentinel_blast'),
+( 64392, 'spell_auriaya_sentinel_blast'),
-- Eye Of Eternity
( 56105, 'spell_malygos_vortex_dummy'),
( 55873, 'spell_malygos_vortex_visual'),
@@ -2366,6 +2383,7 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(-33851, 'spell_dru_primal_tenacity'),
( 62606, 'spell_dru_savage_defense'),
( 70691, 'spell_dru_t10_restoration_4p_bonus'),
+(-50294, 'spell_dru_starfall_aoe'),
-- example
( 66244, 'spell_ex_66244'),
( 5581, 'spell_ex_5581'),
diff --git a/sql/updates/world/2011_06_23_04_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_23_04_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..e827105a94e
--- /dev/null
+++ b/sql/updates/world/2011_06_23_04_world_achievement_criteria_data.sql
@@ -0,0 +1,5 @@
+DELETE FROM `disables` WHERE `entry`=7136 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7136 AND `type`=5;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`) VALUES
+(7136,5,55817,0,'');
diff --git a/sql/updates/world/2011_06_23_05_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_23_05_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..6e39da9abb4
--- /dev/null
+++ b/sql/updates/world/2011_06_23_05_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=4240 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=4240 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(4240,11,0,0,'achievement_watch_him_die');
diff --git a/sql/updates/world/2011_06_23_06_world_spell_script_names.sql b/sql/updates/world/2011_06_23_06_world_spell_script_names.sql
new file mode 100644
index 00000000000..33d20e467c6
--- /dev/null
+++ b/sql/updates/world/2011_06_23_06_world_spell_script_names.sql
@@ -0,0 +1,5 @@
+DELETE FROM `spell_script_names` WHERE `spell_id` IN (64679,64392);
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`)
+VALUES
+(64679,'spell_auriaya_sentinel_blast'),
+(64392,'spell_auriaya_sentinel_blast');
diff --git a/sql/updates/world/2011_06_23_07_world_misc.sql b/sql/updates/world/2011_06_23_07_world_misc.sql
new file mode 100644
index 00000000000..e160887bfbc
--- /dev/null
+++ b/sql/updates/world/2011_06_23_07_world_misc.sql
@@ -0,0 +1,959 @@
+-- Pathing for Arctic Ram Entry: 26426
+SET @NPC := 133248;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3509.64,`position_y`=-750.9414,`position_z`=294.3868 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3511.387,-733.5805,299.6368,49000,0,0,100,0),
+(@PATH,2,3509.64,-750.9414,294.3868,0,0,0,100,0),
+(@PATH,3,3498.443,-768.702,291.2594,0,0,0,100,0),
+(@PATH,4,3509.64,-750.9414,294.3868,0,0,0,100,0);
+
+-- Pathing for Illusia Lune Entry: 27042
+SET @NPC := 133617;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3647.948,`position_y`=-717.1948,`position_z`=215.0342 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,3648.265,-715.3195,215.0314,0,0,0,100,0),
+(@PATH,2,3644.507,-714.7984,214.2407,0,0,0,100,0),
+(@PATH,3,3635.043,-713.5746,214.2407,0,0,0,100,0),
+(@PATH,4,3644.625,-714.8554,214.2407,0,0,0,100,0),
+(@PATH,5,3648.25,-715.2807,215.0314,0,0,0,100,0),
+(@PATH,6,3647.977,-717.1859,215.0342,0,0,0,100,0),
+(@PATH,7,3655.216,-718.0604,215.0296,0,0,0,100,0),
+(@PATH,8,3647.948,-717.1948,215.0342,0,0,0,100,0);
+
+-- Pathing for Ordal McLumpkins Entry: 27044
+SET @NPC := 133619;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=3621.722,`position_y`=-718.3648,`position_z`=215.0349 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,2,3619.423,-714.603,215.0349,35000,0,@PATH+1,100,0),
+(@PATH,4,3616.081,-716.1984,215.0349,50000,0,@PATH+2,100,0),
+(@PATH,6,3621.722,-718.3648,215.0349,35000,0,@PATH+2,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1,@PATH+2,@PATH+3);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,0,30,0,0,1.466077,846),
+(@PATH+1,1,2,83,69,0,847),
+(@PATH+2,0,30,0,0,4.639134,848),
+(@PATH+2,1,2,83,69,0,849);
+
+-- Pathing for Hulking Jormungar Entry: 26293
+SET @NPC := 113071;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4686.325,`position_y`=338.1416,`position_z`=116.9954 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4700.168,367.0156,118.5855,0,0,0,100,0),
+(@PATH,2,4731.135,364.8878,126.2894,0,0,0,100,0),
+(@PATH,3,4743.483,343.251,129.0478,0,0,0,100,0),
+(@PATH,4,4713.793,315.9503,120.7992,0,0,0,100,0),
+(@PATH,5,4686.325,338.1416,116.9954,0,0,0,100,0);
+
+-- Pathing for Magnataur Patriarch Entry: 26295
+SET @NPC := 113266;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4049.302,`position_y`=-29.04574,`position_z`=55.26999 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4047.976,-37.78185,55.98508,0,0,0,100,0),
+(@PATH,2,4047.698,-50.11871,53.98508,0,0,0,100,0),
+(@PATH,3,4047.976,-37.78185,55.98508,0,0,0,100,0),
+(@PATH,4,4049.302,-29.04574,55.26999,0,0,0,100,0),
+(@PATH,5,4047.754,-16.93381,53.89499,0,0,0,100,0),
+(@PATH,6,4049.302,-29.04574,55.26999,0,0,0,100,0);
+
+-- Pathing for Crystalline Ice Elemental Entry: 26316
+SET @NPC := 115062;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4860.147,`position_y`=992.9332,`position_z`=210.192 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4869.752,1002.653,215.5425,0,0,0,100,0),
+(@PATH,2,4860.147,992.9332,210.192,0,0,0,100,0),
+(@PATH,3,4850.6,983.3943,204.442,0,0,0,100,0),
+(@PATH,4,4844.505,971.259,198.692,0,0,0,100,0),
+(@PATH,5,4858.342,938.2769,188.1321,0,0,0,100,0),
+(@PATH,6,4844.505,971.259,198.692,0,0,0,100,0),
+(@PATH,7,4850.6,983.3943,204.442,0,0,0,100,0),
+(@PATH,8,4860.147,992.9332,210.192,0,0,0,100,0);
+
+-- Pathing for Crystalline Ice Elemental Entry: 26316
+SET @NPC := 115054;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4917.303,`position_y`=924.0703,`position_z`=223.1336 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4929.146,915.8573,220.6336,0,0,0,100,0),
+(@PATH,2,4940.256,927.373,227.7124,0,0,0,100,0),
+(@PATH,3,4941.91,938.2441,233.9879,0,0,0,100,0),
+(@PATH,4,4938.07,947.0781,238.7379,0,0,0,100,0),
+(@PATH,5,4917.303,924.0703,223.1336,0,0,0,100,0);
+
+-- Pathing for Crystalline Ice Giant Entry: 26291
+SET @NPC := 112865;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4770.23,`position_y`=469.9691,`position_z`=111.7675 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4796.084,455.2377,109.338,54000,0,@PATH+1,100,0),
+(@PATH,2,4770.23,469.9691,111.7675,22000,0,@PATH+2,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1,@PATH+2);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,0,30,0,0,2.9147,850),
+(@PATH+2,0,30,0,0,5.201081,851);
+
+-- Pathing for Crystalline Ice Giant Entry: 26291
+SET @NPC := 112866;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=4874.087,`position_y`=452.3281,`position_z`=115.6979 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,4888.814,445.456,118.1979,5000,0,@PATH+1,100,0),
+(@PATH,2,4901.041,426.041,116.2949,0,0,0,100,0),
+(@PATH,3,4901.041,426.041,116.2949,6000,0,@PATH+2,100,0),
+(@PATH,4,4874.087,452.3281,115.6979,0,0,0,100,0),
+(@PATH,5,4874.087,452.3281,115.6979,8000,0,@PATH+3,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1,@PATH+2,@PATH+3);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,0,30,0,0,0.8552113,852),
+(@PATH+2,0,30,0,0,0.8901179,853),
+(@PATH+3,0,30,0,0,0.06981317,854);
+
+-- Pathing for Rabbit Entry: 721
+SET @NPC := 115702;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=5753.539,`position_y`=772.873,`position_z`=640.8826 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,5767.785,754.2614,641.7114,0,0,0,100,0),
+(@PATH,2,5773.825,766.6644,640.7427,0,0,0,100,0),
+(@PATH,3,5767.785,754.2614,641.7114,5000,0,0,100,0),
+(@PATH,4,5753.539,772.873,640.8826,0,0,0,100,0),
+(@PATH,5,5748.938,764.3101,641.9448,0,0,0,100,0),
+(@PATH,6,5733.615,778.2639,641.7114,0,0,0,100,0),
+(@PATH,7,5737.831,782.386,641.448,0,0,0,100,0),
+(@PATH,8,5740.602,787.1411,641.0325,0,0,0,100,0),
+(@PATH,9,5733.241,793.4806,640.9481,0,0,0,100,0),
+(@PATH,10,5722.088,796.697,641.5259,0,0,0,100,0),
+(@PATH,11,5726.339,806.3635,640.8337,0,0,0,100,0),
+(@PATH,12,5722.138,815.5085,640.8914,0,0,0,100,0),
+(@PATH,13,5714.45,821.5867,641.2027,0,0,0,100,0),
+(@PATH,14,5700.078,828.2365,641.8647,0,0,0,100,0),
+(@PATH,15,5698.136,820.8531,641.5467,0,0,0,100,0),
+(@PATH,16,5709.789,810.5593,641.5497,0,0,0,100,0),
+(@PATH,17,5698.065,820.5817,641.5533,0,0,0,100,0),
+(@PATH,18,5700.078,828.2365,641.8647,0,0,0,100,0),
+(@PATH,19,5714.45,821.5867,641.2027,0,0,0,100,0),
+(@PATH,20,5722.138,815.5085,640.8914,0,0,0,100,0),
+(@PATH,21,5726.339,806.3635,640.8337,0,0,0,100,0),
+(@PATH,22,5722.088,796.697,641.5259,0,0,0,100,0),
+(@PATH,23,5733.241,793.4806,640.9481,0,0,0,100,0),
+(@PATH,24,5740.602,787.1411,641.0325,0,0,0,100,0),
+(@PATH,25,5737.831,782.386,641.448,0,0,0,100,0),
+(@PATH,26,5733.615,778.2639,641.7114,0,0,0,100,0),
+(@PATH,27,5748.938,764.3101,641.9448,0,0,0,100,0),
+(@PATH,28,5753.539,772.873,640.8826,0,0,0,100,0);
+
+-- Pathing for Putrid Wight Entry: 23992
+SET @NPC := 113344;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2668.823,`position_y`=-3746.312,`position_z`=249.9565 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2646.826,-3743.444,246.5889,0,0,0,100,0),
+(@PATH,2,2629.433,-3732.29,245.4538,0,0,0,100,0),
+(@PATH,3,2623.224,-3719.469,245.4964,0,0,0,100,0),
+(@PATH,4,2627.88,-3711.047,246.3409,0,0,0,100,0),
+(@PATH,5,2639.799,-3709.354,243.2022,0,0,0,100,0),
+(@PATH,6,2647.973,-3713.873,239.3536,0,0,0,100,0),
+(@PATH,7,2655.269,-3720.628,235.0643,0,0,0,100,0),
+(@PATH,8,2664.609,-3723.947,230.2771,0,0,0,100,0),
+(@PATH,9,2672.977,-3721.034,225.9482,0,0,0,100,0),
+(@PATH,10,2680.715,-3711.313,221.8469,6000,0,0,100,0),
+(@PATH,11,2677.229,-3716.424,222.8778,0,0,0,100,0),
+(@PATH,12,2668.853,-3722.688,228.2985,0,0,0,100,0),
+(@PATH,13,2659.52,-3723.743,232.6282,0,0,0,100,0),
+(@PATH,14,2651.728,-3716.389,237.3867,0,0,0,100,0),
+(@PATH,15,2643.281,-3709.406,241.6877,0,0,0,100,0),
+(@PATH,16,2632.315,-3711.092,245.6459,0,0,0,100,0),
+(@PATH,17,2624.75,-3717.884,245.7113,0,0,0,100,0),
+(@PATH,18,2624.219,-3728.446,245.2014,0,0,0,100,0),
+(@PATH,19,2631.771,-3736.979,245.6085,0,0,0,100,0),
+(@PATH,20,2643.255,-3747.242,246.4638,0,0,0,100,0),
+(@PATH,21,2655.134,-3751.437,248.9429,0,0,0,100,0),
+(@PATH,22,2662.831,-3751.152,249.8362,0,0,0,100,0),
+(@PATH,23,2668.823,-3746.312,249.9565,8000,0,0,100,0);
+
+-- Pathing for Putrid Wight Entry: 23992
+SET @NPC := 113343;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2785.402,`position_y`=-3613.447,`position_z`=250.922 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2785.402,-3613.447,250.922,0,0,0,100,0),
+(@PATH,2,2785.44,-3590.348,251.3575,0,0,0,100,0),
+(@PATH,3,2780.647,-3566.933,248.1158,0,0,0,100,0),
+(@PATH,4,2776.989,-3563.271,247.6174,6000,0,0,100,0),
+(@PATH,5,2786.118,-3579.14,249.4645,0,0,0,100,0),
+(@PATH,6,2789.177,-3593.625,250.844,0,0,0,100,0),
+(@PATH,7,2784.655,-3606.138,251.7757,0,0,0,100,0),
+(@PATH,8,2778.348,-3606.077,253.5872,0,0,0,100,0),
+(@PATH,9,2781.997,-3610.31,252.2005,0,0,0,100,0),
+(@PATH,10,2789.771,-3615.286,249.8559,0,0,0,100,0),
+(@PATH,11,2796.63,-3628.361,248.4757,0,0,0,100,0),
+(@PATH,12,2798.595,-3636.199,247.7422,0,0,0,100,0),
+(@PATH,13,2794.572,-3637.352,248.0836,0,0,0,100,0),
+(@PATH,14,2806.817,-3639.35,246.4777,0,0,0,100,0),
+(@PATH,15,2815.37,-3643.385,242.7697,0,0,0,100,0),
+(@PATH,16,2817.436,-3655.363,242.607,0,0,0,100,0),
+(@PATH,17,2803.864,-3660.431,246.2676,0,0,0,100,0),
+(@PATH,18,2790.148,-3659.774,245.6176,0,0,0,100,0),
+(@PATH,19,2783.257,-3650.315,241.2681,0,0,0,100,0),
+(@PATH,20,2778.241,-3638.333,235.9849,0,0,0,100,0),
+(@PATH,21,2771.057,-3630.219,230.9954,0,0,0,100,0),
+(@PATH,22,2761.502,-3627.29,226.378,0,0,0,100,0),
+(@PATH,23,2751.042,-3632.291,221.8077,6000,0,0,100,0),
+(@PATH,24,2754.787,-3630.722,223.3591,0,0,0,100,0),
+(@PATH,25,2766.29,-3628.396,228.8643,0,0,0,100,0),
+(@PATH,26,2774.306,-3633.359,232.863,0,0,0,100,0),
+(@PATH,27,2779.261,-3642.92,237.6714,0,0,0,100,0),
+(@PATH,28,2785.011,-3652.979,242.7388,0,0,0,100,0),
+(@PATH,29,2792.728,-3659.369,246.4393,0,0,0,100,0),
+(@PATH,30,2806.87,-3658.866,245.5233,0,0,0,100,0),
+(@PATH,31,2817.342,-3650.064,242.2243,0,0,0,100,0),
+(@PATH,32,2799.635,-3631.787,247.9718,0,0,0,100,0),
+(@PATH,33,2785.402,-3613.447,250.922,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 97230;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `id`=24014,`modelid`=0,`spawndist`=0,`MovementType`=2,`position_x`=2809.687,`position_y`=-3622.016,`position_z`=161.3961 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2814.799,-3624.542,161.3958,0,0,0,100,0),
+(@PATH,2,2823.035,-3625.648,161.3949,0,0,0,100,0),
+(@PATH,3,2829.876,-3624.724,161.3975,0,0,0,100,0),
+(@PATH,4,2836.048,-3620.994,161.3983,0,0,0,100,0),
+(@PATH,5,2841.855,-3615.051,161.3947,0,0,0,100,0),
+(@PATH,6,2844.207,-3609.994,161.3975,0,0,0,100,0),
+(@PATH,7,2845.186,-3601.875,161.3951,0,0,0,100,0),
+(@PATH,8,2844.337,-3594.973,161.3975,0,0,0,100,0),
+(@PATH,9,2840.764,-3588.99,161.3957,0,0,0,100,0),
+(@PATH,10,2834.76,-3583.182,161.3952,0,0,0,100,0),
+(@PATH,11,2829.575,-3580.736,161.3979,0,0,0,100,0),
+(@PATH,12,2821.425,-3579.65,161.3952,0,0,0,100,0),
+(@PATH,13,2814.341,-3580.5,161.4046,0,0,0,100,0),
+(@PATH,14,2808.07,-3583.772,161.4029,0,0,0,100,0),
+(@PATH,15,2802.685,-3590.109,161.395,0,0,0,100,0),
+(@PATH,16,2800.225,-3595.279,161.3977,0,0,0,100,0),
+(@PATH,17,2799.105,-3603.418,161.3947,0,0,0,100,0),
+(@PATH,18,2800.01,-3610.333,161.3973,0,0,0,100,0),
+(@PATH,19,2803.705,-3616.418,161.3981,0,0,0,100,0),
+(@PATH,20,2809.687,-3622.016,161.3961,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 97248;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `id`=24014,`modelid`=0,`spawndist`=0,`MovementType`=2,`position_x`=2824.036,`position_y`=-3624.829,`position_z`=221.4252 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2816.773,-3623.985,221.4255,0,0,0,100,0),
+(@PATH,2,2809.992,-3621.294,221.4247,0,0,0,100,0),
+(@PATH,3,2803.77,-3615.729,221.4243,0,0,0,100,0),
+(@PATH,4,2800.449,-3608.825,221.4259,0,0,0,100,0),
+(@PATH,5,2799.794,-3601.215,221.4245,0,0,0,100,0),
+(@PATH,6,2802.056,-3593.389,221.4274,0,0,0,100,0),
+(@PATH,7,2806.402,-3587.211,221.4274,0,0,0,100,0),
+(@PATH,8,2812.614,-3583.304,221.4273,0,0,0,100,0),
+(@PATH,9,2819.016,-3581.604,221.4285,0,0,0,100,0),
+(@PATH,10,2825.446,-3581.84,221.4301,0,0,0,100,0),
+(@PATH,11,2831.818,-3583.644,221.4293,0,0,0,100,0),
+(@PATH,12,2836.348,-3587.178,221.4313,0,0,0,100,0),
+(@PATH,13,2839.835,-3592.544,221.434,0,0,0,100,0),
+(@PATH,14,2842.145,-3599.79,221.4294,0,0,0,100,0),
+(@PATH,15,2843.347,-3608.321,221.4291,0,0,0,100,0),
+(@PATH,16,2840.997,-3614.059,221.4281,0,0,0,100,0),
+(@PATH,17,2836.926,-3619.116,221.4238,0,0,0,100,0),
+(@PATH,18,2831.312,-3622.841,221.4241,0,0,0,100,0),
+(@PATH,19,2824.036,-3624.829,221.4252,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 97260;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `id`=24014,`modelid`=0,`spawndist`=0,`MovementType`=2,`position_x`=2586.513,`position_y`=-3756.084,`position_z`=161.398 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2594.313,-3758.43,161.3953,0,0,0,100,0),
+(@PATH,2,2601.175,-3758.778,161.3977,0,0,0,100,0),
+(@PATH,3,2607.68,-3756.348,161.3983,0,0,0,100,0),
+(@PATH,4,2614.385,-3751.512,161.3951,0,0,0,100,0),
+(@PATH,5,2617.877,-3746.704,161.3976,0,0,0,100,0),
+(@PATH,6,2620.328,-3738.942,161.3956,0,0,0,100,0),
+(@PATH,7,2620.506,-3731.859,161.3961,0,0,0,100,0),
+(@PATH,8,2618.016,-3725.396,161.3984,0,0,0,100,0),
+(@PATH,9,2612.961,-3718.617,161.3952,0,0,0,100,0),
+(@PATH,10,2608.518,-3715.498,161.398,0,0,0,100,0),
+(@PATH,11,2600.665,-3713.045,161.3954,0,0,0,100,0),
+(@PATH,12,2593.633,-3712.684,161.4046,0,0,0,100,0),
+(@PATH,13,2586.809,-3714.743,161.4106,0,0,0,100,0),
+(@PATH,14,2580.48,-3720.084,161.3953,0,0,0,100,0),
+(@PATH,15,2577.218,-3724.641,161.3979,0,0,0,100,0),
+(@PATH,16,2574.743,-3732.453,161.3959,0,0,0,100,0),
+(@PATH,17,2574.244,-3739.552,161.3972,0,0,0,100,0),
+(@PATH,18,2576.927,-3746.14,161.3958,0,0,0,100,0),
+(@PATH,19,2581.687,-3752.61,161.398,0,0,0,100,0),
+(@PATH,20,2586.513,-3756.084,161.398,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 203503;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2603.992,`position_y`=-3713.681,`position_z`=141.3663 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2597.609,-3712.674,141.3633,0,0,0,100,0),
+(@PATH,2,2593.398,-3712.327,141.3879,0,0,0,100,0),
+(@PATH,3,2587.152,-3715.266,141.3655,0,0,0,100,0),
+(@PATH,4,2580.309,-3720.183,141.3624,0,0,0,100,0),
+(@PATH,5,2576.709,-3724.49,141.3625,0,0,0,100,0),
+(@PATH,6,2574.215,-3732.656,141.3617,0,0,0,100,0),
+(@PATH,7,2574.386,-3739.554,141.3635,0,0,0,100,0),
+(@PATH,8,2576.045,-3746.666,141.3606,0,0,0,100,0),
+(@PATH,9,2579.443,-3751.851,141.3886,0,0,0,100,0),
+(@PATH,10,2584.13,-3754.667,141.3627,0,0,0,100,0),
+(@PATH,11,2590.743,-3758.33,141.3646,0,0,0,100,0),
+(@PATH,12,2597.277,-3758.514,141.364,0,0,0,100,0),
+(@PATH,13,2605.202,-3757.24,141.363,0,0,0,100,0),
+(@PATH,14,2611.11,-3754.3,141.3651,0,0,0,100,0),
+(@PATH,15,2616.42,-3749.062,141.363,0,0,0,100,0),
+(@PATH,16,2619.533,-3741.9,141.3637,0,0,0,100,0),
+(@PATH,17,2620.534,-3736.029,141.3637,0,0,0,100,0),
+(@PATH,18,2618.751,-3727.877,141.3636,0,0,0,100,0),
+(@PATH,19,2616.373,-3722.089,141.3558,0,0,0,100,0),
+(@PATH,20,2610.62,-3717.114,141.3638,0,0,0,100,0),
+(@PATH,21,2603.992,-3713.681,141.3663,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 115178;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2810.375,`position_y`=-3582.374,`position_z`=141.3599 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2805.214,-3586.358,141.3641,0,0,0,100,0),
+(@PATH,2,2801.175,-3592.824,141.363,0,0,0,100,0),
+(@PATH,3,2798.759,-3600.248,141.3618,0,0,0,100,0),
+(@PATH,4,2799.583,-3606.401,141.3644,0,0,0,100,0),
+(@PATH,5,2802.503,-3614.063,141.3632,0,0,0,100,0),
+(@PATH,6,2805.852,-3619.302,141.3641,0,0,0,100,0),
+(@PATH,7,2812.384,-3623.335,141.3662,0,0,0,100,0),
+(@PATH,8,2819.554,-3625.753,141.3661,0,0,0,100,0),
+(@PATH,9,2825.986,-3625.251,141.364,0,0,0,100,0),
+(@PATH,10,2833.809,-3622.541,141.3623,0,0,0,100,0),
+(@PATH,11,2838.974,-3618.843,141.3642,0,0,0,100,0),
+(@PATH,12,2843.044,-3612.401,141.3634,0,0,0,100,0),
+(@PATH,13,2845.442,-3605.066,141.3624,0,0,0,100,0),
+(@PATH,14,2845.091,-3598.814,141.3633,0,0,0,100,0),
+(@PATH,15,2842.213,-3590.969,141.3621,0,0,0,100,0),
+(@PATH,16,2838.518,-3585.883,141.3633,0,0,0,100,0),
+(@PATH,17,2831.972,-3581.769,141.3635,0,0,0,100,0),
+(@PATH,18,2824.755,-3579.538,141.3658,0,0,0,100,0),
+(@PATH,19,2818.303,-3579.807,141.3651,0,0,0,100,0),
+(@PATH,20,2810.375,-3582.374,141.3599,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 97251;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `id`=24014,`modelid`=0,`spawndist`=0,`MovementType`=2,`position_x`=2801.415,`position_y`=-3592.805,`position_z`=181.4086 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2805.63,-3586.741,181.4093,0,0,0,100,0),
+(@PATH,2,2810.837,-3582.852,181.4067,0,0,0,100,0),
+(@PATH,3,2818.372,-3579.891,181.4075,0,0,0,100,0),
+(@PATH,4,2824.698,-3579.42,181.4061,0,0,0,100,0),
+(@PATH,5,2831.986,-3581.824,181.4095,0,0,0,100,0),
+(@PATH,6,2838.559,-3585.897,181.4075,0,0,0,100,0),
+(@PATH,7,2842.173,-3590.988,181.4084,0,0,0,100,0),
+(@PATH,8,2845.01,-3598.905,181.3987,0,0,0,100,0),
+(@PATH,9,2845.163,-3605.083,181.4067,0,0,0,100,0),
+(@PATH,10,2842.933,-3612.533,181.4066,0,0,0,100,0),
+(@PATH,11,2839.144,-3618.943,181.4076,0,0,0,100,0),
+(@PATH,12,2833.877,-3622.96,181.4045,0,0,0,100,0),
+(@PATH,13,2826.177,-3625.395,181.4086,0,0,0,100,0),
+(@PATH,14,2819.915,-3625.802,181.4059,0,0,0,100,0),
+(@PATH,15,2812.322,-3623.443,181.3985,0,0,0,100,0),
+(@PATH,16,2805.912,-3619.149,181.4085,0,0,0,100,0),
+(@PATH,17,2801.737,-3614.466,181.4039,0,0,0,100,0),
+(@PATH,18,2799.258,-3606.344,181.4081,0,0,0,100,0),
+(@PATH,19,2798.46,-3600.148,181.4072,0,0,0,100,0),
+(@PATH,20,2801.415,-3592.805,181.4086,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 115180;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2819.609,`position_y`=-3625.823,`position_z`=201.4168 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2825.926,-3625.365,201.4147,0,0,0,100,0),
+(@PATH,2,2833.738,-3622.546,201.414,0,0,0,100,0),
+(@PATH,3,2838.858,-3618.962,201.4162,0,0,0,100,0),
+(@PATH,4,2842.757,-3612.3,201.4155,0,0,0,100,0),
+(@PATH,5,2845.156,-3605.187,201.4145,0,0,0,100,0),
+(@PATH,6,2845.112,-3598.919,201.4165,0,0,0,100,0),
+(@PATH,7,2842.278,-3590.991,201.4143,0,0,0,100,0),
+(@PATH,8,2838.798,-3585.699,201.4129,0,0,0,100,0),
+(@PATH,9,2832.123,-3581.366,201.4112,0,0,0,100,0),
+(@PATH,10,2824.705,-3579.036,201.4159,0,0,0,100,0),
+(@PATH,11,2818.319,-3579.608,201.414,0,0,0,100,0),
+(@PATH,12,2810.397,-3582.356,201.4127,0,0,0,100,0),
+(@PATH,13,2805.141,-3585.997,201.4149,0,0,0,100,0),
+(@PATH,14,2801.093,-3592.536,201.4165,0,0,0,100,0),
+(@PATH,15,2798.692,-3600.158,201.4118,0,0,0,100,0),
+(@PATH,16,2799.542,-3606.275,201.4129,0,0,0,100,0),
+(@PATH,17,2802.349,-3614.061,201.4144,0,0,0,100,0),
+(@PATH,18,2805.995,-3619.276,201.4165,0,0,0,100,0),
+(@PATH,19,2812.382,-3623.6,201.4161,0,0,0,100,0),
+(@PATH,20,2819.609,-3625.823,201.4168,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 97241;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `id`=24014,`modelid`=0,`spawndist`=0,`MovementType`=2,`position_x`=2576.456,`position_y`=-3746.067,`position_z`=201.4139 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2581.68,-3752.681,201.414,0,0,0,100,0),
+(@PATH,2,2586.568,-3756.62,201.413,0,0,0,100,0),
+(@PATH,3,2594.226,-3758.521,201.4138,0,0,0,100,0),
+(@PATH,4,2601.322,-3758.976,201.4392,0,0,0,100,0),
+(@PATH,5,2608.325,-3756.202,201.4066,0,0,0,100,0),
+(@PATH,6,2614.482,-3751.383,201.4148,0,0,0,100,0),
+(@PATH,7,2617.85,-3746.781,201.4146,0,0,0,100,0),
+(@PATH,8,2620.605,-3739.148,201.4127,0,0,0,100,0),
+(@PATH,9,2620.888,-3731.896,201.415,0,0,0,100,0),
+(@PATH,10,2618.019,-3725.131,201.4144,0,0,0,100,0),
+(@PATH,11,2613.131,-3718.841,201.4171,0,0,0,100,0),
+(@PATH,12,2608.565,-3715.357,201.4166,0,0,0,100,0),
+(@PATH,13,2600.781,-3713.322,201.4151,0,0,0,100,0),
+(@PATH,14,2593.642,-3712.292,201.4142,0,0,0,100,0),
+(@PATH,15,2586.736,-3714.775,201.4059,0,0,0,100,0),
+(@PATH,16,2580.157,-3719.908,201.413,0,0,0,100,0),
+(@PATH,17,2577.031,-3724.391,201.4146,0,0,0,100,0),
+(@PATH,18,2574.256,-3732.734,201.4134,0,0,0,100,0),
+(@PATH,19,2573.823,-3739.465,201.4134,0,0,0,100,0),
+(@PATH,20,2576.456,-3746.067,201.4139,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 97249;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `id`=24014,`modelid`=0,`spawndist`=0,`MovementType`=2,`position_x`=2611.017,`position_y`=-3716.675,`position_z`=181.398 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2616.453,-3722.186,181.4082,0,0,0,100,0),
+(@PATH,2,2619.343,-3727.752,181.4051,0,0,0,100,0),
+(@PATH,3,2620.622,-3735.984,181.4042,0,0,0,100,0),
+(@PATH,4,2619.866,-3742.29,181.4087,0,0,0,100,0),
+(@PATH,5,2616.442,-3749.24,181.4057,0,0,0,100,0),
+(@PATH,6,2611.063,-3754.8,181.4085,0,0,0,100,0),
+(@PATH,7,2604.478,-3757.701,181.4068,0,0,0,100,0),
+(@PATH,8,2597.286,-3758.759,181.4067,0,0,0,100,0),
+(@PATH,9,2590.852,-3757.972,181.4083,0,0,0,100,0),
+(@PATH,10,2584.248,-3754.43,181.4082,0,0,0,100,0),
+(@PATH,11,2578.261,-3749.372,181.4069,0,0,0,100,0),
+(@PATH,12,2575.873,-3743.828,181.4057,0,0,0,100,0),
+(@PATH,13,2574.191,-3735.234,181.4073,0,0,0,100,0),
+(@PATH,14,2575.195,-3729.327,181.4094,0,0,0,100,0),
+(@PATH,15,2578.681,-3722.37,181.4084,0,0,0,100,0),
+(@PATH,16,2583.938,-3716.915,181.4063,0,0,0,100,0),
+(@PATH,17,2589.764,-3714.326,181.4076,0,0,0,100,0),
+(@PATH,18,2597.566,-3712.55,181.4071,0,0,0,100,0),
+(@PATH,19,2604.017,-3713.141,181.4054,0,0,0,100,0),
+(@PATH,20,2611.017,-3716.675,181.398,0,0,0,100,0);
+
+-- Pathing for Necrolord Entry: 24014
+SET @NPC := 97250;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `id`=24014,`modelid`=0,`spawndist`=0,`MovementType`=2,`position_x`=2585.757,`position_y`=-3717.824,`position_z`=221.4304 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2579.807,-3722.263,221.4254,0,0,0,100,0),
+(@PATH,2,2575.761,-3730.515,221.4254,0,0,0,100,0),
+(@PATH,3,2575.521,-3739.346,221.4455,0,0,0,100,0),
+(@PATH,4,2577.731,-3745.002,221.4266,0,0,0,100,0),
+(@PATH,5,2581.885,-3751.379,221.4258,0,0,0,100,0),
+(@PATH,6,2588.023,-3755.677,221.4271,0,0,0,100,0),
+(@PATH,7,2596.354,-3757.416,221.4265,0,0,0,100,0),
+(@PATH,8,2602.154,-3756.99,221.4272,0,0,0,100,0),
+(@PATH,9,2608.952,-3753.872,221.4283,0,0,0,100,0),
+(@PATH,10,2613.777,-3748.49,221.4299,0,0,0,100,0),
+(@PATH,11,2616.507,-3743.333,221.4301,0,0,0,100,0),
+(@PATH,12,2617.603,-3736.914,221.4314,0,0,0,100,0),
+(@PATH,13,2616.173,-3730.112,221.4334,0,0,0,100,0),
+(@PATH,14,2611.927,-3721.691,221.432,0,0,0,100,0),
+(@PATH,15,2605.345,-3717.231,221.4332,0,0,0,100,0),
+(@PATH,16,2595.783,-3715.589,221.4307,0,0,0,100,0),
+(@PATH,17,2585.757,-3717.824,221.4304,0,0,0,100,0);
+
+-- Pathing for Fearsome Horror Entry: 24073
+SET @NPC := 97267;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2685.435,`position_y`=-3516.336,`position_z`=161.3539 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2662.709,-3500.542,161.3926,0,0,0,100,0),
+(@PATH,2,2650.608,-3502.922,161.3893,0,0,0,100,0),
+(@PATH,3,2642.166,-3507.048,161.4015,0,0,0,100,0),
+(@PATH,4,2640.603,-3513.472,161.4016,0,0,0,100,0),
+(@PATH,5,2643.823,-3521.674,161.4016,0,0,0,100,0),
+(@PATH,6,2647.113,-3529.029,161.403,0,0,0,100,0),
+(@PATH,7,2655.038,-3531.975,161.4017,0,0,0,100,0),
+(@PATH,8,2671.99,-3521.808,161.3573,0,0,0,100,0),
+(@PATH,9,2673.333,-3507.633,161.3396,0,0,0,100,0),
+(@PATH,10,2675.246,-3494.586,161.3678,0,0,0,100,0),
+(@PATH,11,2685.497,-3487.036,161.3884,0,0,0,100,0),
+(@PATH,12,2692.917,-3484.15,161.3961,0,0,0,100,0),
+(@PATH,13,2699.012,-3487.089,161.4006,0,0,0,100,0),
+(@PATH,14,2706.217,-3502.243,161.4013,0,0,0,100,0),
+(@PATH,15,2703.759,-3510.093,161.4025,0,0,0,100,0),
+(@PATH,16,2685.435,-3516.336,161.3539,0,0,0,100,0);
+
+-- Pathing for Fearsome Horror Entry: 24073
+SET @NPC := 97246;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2579.879,`position_y`=-3696.3,`position_z`=161.4409 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2588.232,-3690.074,161.4458,0,0,0,100,0),
+(@PATH,2,2589.271,-3684.429,161.4359,0,0,0,100,0),
+(@PATH,3,2585.342,-3675.472,161.4335,0,0,0,100,0),
+(@PATH,4,2581.837,-3668.191,161.4327,0,0,0,100,0),
+(@PATH,5,2575.887,-3666.925,161.4406,0,0,0,100,0),
+(@PATH,6,2570.748,-3698.407,161.4427,0,0,0,100,0),
+(@PATH,7,2579.879,-3696.3,161.4409,0,0,0,100,0);
+
+-- Pathing for Fearsome Horror Entry: 24073
+SET @NPC := 105763;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `id`=24073,`modelid`=0,`spawndist`=0,`MovementType`=2,`position_x`=2725.236,`position_y`=-3392.25,`position_z`=159.6907 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2727.104,-3390.643,159.6644,0,0,0,100,0),
+(@PATH,2,2724.281,-3389.372,159.6592,0,0,0,100,0),
+(@PATH,3,2721.806,-3387.376,159.6504,0,0,0,100,0),
+(@PATH,4,2722.977,-3393.822,159.6598,0,0,0,100,0),
+(@PATH,5,2725.236,-3392.25,159.6907,0,0,0,100,0);
+
+-- Pathing for Fearsome Horror Entry: 24073
+SET @NPC := 97252;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2813.579,`position_y`=-3620.822,`position_z`=161.4043 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2820.259,-3622.993,161.4039,0,0,0,100,0),
+(@PATH,2,2825.655,-3622.695,161.4055,0,0,0,100,0),
+(@PATH,3,2832.094,-3620.313,161.4071,0,0,0,100,0),
+(@PATH,4,2836.655,-3616.929,161.4057,0,0,0,100,0),
+(@PATH,5,2840.545,-3611.404,161.4061,0,0,0,100,0),
+(@PATH,6,2842.39,-3604.52,161.4045,0,0,0,100,0),
+(@PATH,7,2842.031,-3599.292,161.4063,0,0,0,100,0),
+(@PATH,8,2839.814,-3592.598,161.4043,0,0,0,100,0),
+(@PATH,9,2836.608,-3587.857,161.4041,0,0,0,100,0),
+(@PATH,10,2830.603,-3584.255,161.4064,0,0,0,100,0),
+(@PATH,11,2823.961,-3581.964,161.4031,0,0,0,100,0),
+(@PATH,12,2818.599,-3582.841,161.4023,0,0,0,100,0),
+(@PATH,13,2809.316,-3579.184,161.4106,0,0,0,100,0),
+(@PATH,14,2801.529,-3572.713,161.4457,0,0,0,100,0),
+(@PATH,15,2795.903,-3559.435,161.579,0,0,0,100,0),
+(@PATH,16,2793.693,-3547.917,161.4434,0,0,0,100,0),
+(@PATH,17,2794.609,-3538.025,161.6062,0,0,0,100,0),
+(@PATH,18,2789.339,-3527.189,166.2076,0,0,0,100,0),
+(@PATH,19,2778.46,-3527.366,166.1371,0,0,0,100,0),
+(@PATH,20,2772.763,-3531.095,166.1371,0,0,0,100,0),
+(@PATH,21,2765.156,-3536.607,166.1371,0,0,0,100,0),
+(@PATH,22,2763.8,-3543.712,166.3489,0,0,0,100,0),
+(@PATH,23,2772.348,-3554.362,161.5688,0,0,0,100,0),
+(@PATH,24,2780.89,-3556.149,161.4322,0,0,0,100,0),
+(@PATH,25,2791.389,-3562.775,161.5777,0,0,0,100,0),
+(@PATH,26,2803.1,-3574.7,161.4174,0,0,0,100,0),
+(@PATH,27,2803.814,-3581.895,161.3991,0,0,0,100,0),
+(@PATH,28,2804,-3593.935,161.4066,0,0,0,100,0),
+(@PATH,29,2801.798,-3600.579,161.4039,0,0,0,100,0),
+(@PATH,30,2802.101,-3606.185,161.4054,0,0,0,100,0),
+(@PATH,31,2804.482,-3612.46,161.4072,0,0,0,100,0),
+(@PATH,32,2807.753,-3617.282,161.405,0,0,0,100,0),
+(@PATH,33,2813.579,-3620.822,161.4043,0,0,0,100,0);
+
+-- Pathing for Gjalerbron Warrior Entry: 23991
+SET @NPC := 113286;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=2656.009,`position_y`=-3595.201,`position_z`=205.3548 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,2619.413,-3562.591,205.3707,0,0,0,100,0),
+(@PATH,2,2578.914,-3535.467,206.4749,0,0,0,100,0),
+(@PATH,3,2569.813,-3526.975,206.25688,0,0,0,100,0),
+(@PATH,4,2547.857,-3503.03,187.9234,0,0,0,100,0),
+(@PATH,5,2550.461,-3454.087,184.147,0,0,0,100,0),
+(@PATH,6,2603.13,-3431.154,184.0111,0,0,0,100,0),
+(@PATH,7,2618.346,-3441.865,186.16079,0,0,0,100,0),
+(@PATH,8,2636.813,-3462.923,202.8718,0,0,0,100,0),
+(@PATH,9,2639.909,-3468.866,206.72212,0,0,0,100,0),
+(@PATH,10,2659.177,-3506.079,205.3751,0,0,0,100,0),
+(@PATH,11,2684.902,-3549.402,205.3751,0,0,0,100,0),
+(@PATH,12,2687.326,-3578.99,205.3152,0,0,0,100,0),
+(@PATH,13,2656.009,-3595.201,205.3548,0,0,0,100,0);
+
+-- Allerian Stronghold Fixup
+
+-- Update position for Erick Nateson
+UPDATE `creature` SET `position_x`=-2947.306,`position_y`=3982.602,`position_z`=0.04192996,`orientation`=3.493307 WHERE `id`=21399;
+
+-- Pathing for High Elf Ranger Entry: 19000
+SET @NPC := 68300;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2892.84,`position_y`=3947.823,`position_z`=13.40542 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,258,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2900.541,3949.979,13.40506,8000,0,0,100,0),
+(@PATH,2,-2892.84,3947.823,13.40542,16000,0,0,100,0);
+
+-- Pathing for High Elf Ranger Entry: 19000
+SET @NPC := 68302;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2984.74,`position_y`=4065.979,`position_z`=16.47879 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,258,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2989.837,4072.737,16.47879,16000,0,0,100,0),
+(@PATH,2,-2984.74,4065.979,16.47879,8000,0,0,100,0);
+
+-- Pathing for High Elf Ranger Entry: 19000
+SET @NPC := 68304;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3057.808,`position_y`=4017.832,`position_z`=16.17462 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,258,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3052.007,4011.99,16.17451,8000,0,0,100,0),
+(@PATH,2,-3057.808,4017.832,16.17462,16000,0,0,100,0);
+
+-- Pathing for Allerian Horseman Entry: 19003
+SET @NPC := 68308;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2872.895,`position_y`=3981.621,`position_z`=5.133294 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,2404, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2862.589,3983.513,4.859164,23000,0,0,100,0),
+(@PATH,2,-2877.861,3980.92,4.691218,22000,0,@PATH+1,100,0),
+(@PATH,3,-2872.895,3981.621,5.133294,0,0,0,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,1,30,0,0,0.1919862,822);
+
+-- Pathing for Allerian Horseman Entry: 19003
+SET @NPC := 68309;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2965.397,`position_y`=4084.842,`position_z`=3.064998 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,2404, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2971.184,4089.91,4.059246,0,0,0,100,0),
+(@PATH,2,-2974.546,4096.034,4.809246,0,0,0,100,0),
+(@PATH,3,-2975.984,4102.904,5.563596,0,0,0,100,0),
+(@PATH,4,-2976.84,4109.215,6.188596,0,0,0,100,0),
+(@PATH,5,-2977.442,4116.1,6.438596,29000,0,0,100,0),
+(@PATH,6,-2976.687,4106.692,6.063596,0,0,0,100,0),
+(@PATH,7,-2975.544,4099.55,5.309246,0,0,0,100,0),
+(@PATH,8,-2973.493,4091.829,4.309246,0,0,0,100,0),
+(@PATH,9,-2969.062,4087.132,3.684246,0,0,0,100,0),
+(@PATH,10,-2965.397,4084.842,3.064998,29000,0,@PATH+1,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,1,30,0,0,2.321288,823);
+
+-- Pathing for Lemla Hopewing Entry: 19181
+SET @NPC := 68626;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2981.203,`position_y`=3879.134,`position_z`=9.613096 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2992.487,3878.415,9.613096,9000,0,@PATH+1,100,0),
+(@PATH,2,-2996.076,3870.127,9.613096,20000,0,0,100,0),
+(@PATH,3,-2997.53,3865.11,9.484549,8000,0,0,100,0),
+(@PATH,4,-2993.53,3863.55,9.484549,7000,0,0,100,0),
+(@PATH,5,-2981.203,3879.134,9.613096,7000,0,0,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,0,30,0,0,1.27409,824);
+
+-- Pathing for Allerian Defender Entry: 18999
+SET @NPC := 68292;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2947.596,`position_y`=3983.544,`position_z`=-0.08307004 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2944.827,3979.540,0.041929,0,0,0,100,0),
+(@PATH,2,-2942.500,3979.078,-0.20807,25000,0,@PATH+1,100,0),
+(@PATH,3,-2939.759,3978.620,-0.425645,0,0,0,100,0),
+(@PATH,4,-2936.500,3981.641,-0.33307,0,0,0,100,0),
+(@PATH,5,-2935.938,3983.333,-0.33307,29000,0,@PATH+2,100,0),
+(@PATH,6,-2935.374,3986.827,-0.594707,0,0,0,100,0),
+(@PATH,7,-2937.500,3990.625,-0.58307,0,0,0,100,0),
+(@PATH,8,-2940.678,3990.862,-0.70807,23000,0,@PATH+3,100,0),
+(@PATH,9,-2943.362,3990.967,-0.597971,0,0,0,100,0),
+(@PATH,10,-2947.396,3988.542,-0.20807,0,0,0,100,0),
+(@PATH,11,-2947.596,3983.544,-0.08307004,27000,0,@PATH+4,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1,@PATH+2,@PATH+3,@PATH+4);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,1,30,0,0,4.729842,825),
+(@PATH+2,1,30,0,0,6.091199,826),
+(@PATH+3,1,30,0,0,1.815142,827),
+(@PATH+4,1,30,0,0,3.560472,828);
+
+-- Pathing for Allerian Defender Entry: 18999
+SET @NPC := 68296;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-3004.182,`position_y`=4059.2,`position_z`=16.47264 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-3016.535,4050.462,16.47229,0,0,0,100,0),
+(@PATH,2,-3022.042,4045.356,17.46166,0,0,0,100,0),
+(@PATH,3,-3030.056,4039.186,17.46166,0,0,0,100,0),
+(@PATH,4,-3032.783,4036.933,16.18017,0,0,0,100,0),
+(@PATH,5,-3044.368,4027.187,16.17542,12000,0,@PATH+1,100,0),
+(@PATH,6,-3039.387,4030.45,16.1769,0,0,0,100,0),
+(@PATH,7,-3032.683,4037.32,16.1804,0,0,0,100,0),
+(@PATH,8,-3025.89,4042.386,17.46166,0,0,0,100,0),
+(@PATH,9,-3019.17,4047.763,17.46166,0,0,0,100,0),
+(@PATH,10,-3016.295,4049.834,16.47264,0,0,0,100,0),
+(@PATH,11,-3004.042,4059.303,16.47269,12000,0,@PATH+2,100,0),
+(@PATH,12,-2992.944,4066.828,16.47743,0,0,0,100,0),
+(@PATH,13,-2989.875,4062.297,16.47566,0,0,0,100,0),
+(@PATH,14,-2999.597,4055.534,10.61597,0,0,0,100,0),
+(@PATH,15,-3008.305,4049.41,5.663261,10000,0,@PATH+3,100,0),
+(@PATH,16,-3003.988,4052.784,7.524997,0,0,0,100,0),
+(@PATH,17,-2989.94,4062.394,16.47567,0,0,0,100,0),
+(@PATH,18,-2992.964,4066.766,16.47739,0,0,0,100,0),
+(@PATH,19,-3004.182,4059.2,16.47264,12000,0,@PATH+4,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1,@PATH+2,@PATH+3,@PATH+4);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,1,30,0,0,2.373648,829),
+(@PATH+2,1,30,0,0,2.164208,830),
+(@PATH+3,1,30,0,0,0.3490658,831),
+(@PATH+4,1,30,0,0,2.164208,832);
+
+-- Pathing for Allerian Defender Entry: 18999
+SET @NPC := 68290;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2908.265,`position_y`=3922.398,`position_z`=13.40726 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2905.809,3933.479,7.323796,0,0,0,100,0),
+(@PATH,2,-2903.188,3943.559,2.596507,11000,0,@PATH+1,100,0),
+(@PATH,3,-2907.823,3925.806,12.06445,0,0,0,100,0),
+(@PATH,4,-2908.265,3922.398,13.40726,0,0,0,100,0),
+(@PATH,5,-2903.021,3920.76,13.40938,19000,0,@PATH+2,100,0),
+(@PATH,6,-2900.368,3931.102,13.40561,0,0,0,100,0),
+(@PATH,7,-2896.775,3945.807,13.40281,29000,0,@PATH+3,100,0),
+(@PATH,8,-2898.747,3936.718,13.40411,0,0,0,100,0),
+(@PATH,9,-2903.021,3920.76,13.40938,28000,0,@PATH+4,100,0),
+(@PATH,10,-2908.265,3922.398,13.40726,0,0,0,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (@PATH+1,@PATH+2,@PATH+3,@PATH+4);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,1,30,0,0,2.80998,833),
+(@PATH+2,1,30,0,0,6.021386,834),
+(@PATH+3,1,30,0,0,6.161012,835),
+(@PATH+4,1,30,0,0,6.003932,836);
+
+-- Allerian Defender SAI
+SET @ENTRY := 18999; -- NPC entry
+SET @SPELL1 := 18396; -- Dismounting Blast
+SET @GUID1 := 68293; -- One Defender is scripted
+UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry`=@ENTRY; -- Set SAI as AI. Remove cpp ScriptName if one exist
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY; -- Remove EAI if exist
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid` IN (@ENTRY,-@GUID1);
+DELETE FROM `smart_scripts` WHERE `source_type`=9 AND `entryorguid` IN (@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,4,0,100,1,0,0,0,0,11,@SPELL1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Allerian Defender - On Aggro - Cast Dismounting Blast on victim'),
+(-@GUID1,0,0,0,4,0,100,1,0,0,0,0,11,@SPELL1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Allerian Defender - On Aggro - Cast Dismounting Blast on victim'),
+(-@GUID1,0,1,0,1,0,100,0,40000,80000,180000,180000,80,@ENTRY*100,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Allerian Defender - OOC - Run Script'),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,4.642576, 'Allerian Defender - Script - turn to'),
+(@ENTRY*100,9,1,0,0,0,100,0,1000,1000,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Allerian Defender - Script - Say text 0'),
+(@ENTRY*100,9,2,0,0,0,100,0,5000,5000,0,0,66,0,0,0,0,0,0,8,0,0,0,0,0,0,1.466077, 'Allerian Defender - Script - turn to'),
+(@ENTRY*100,9,3,0,0,0,100,0,1000,1000,0,0,1,1,0,0,0,0,0,10,68291,@ENTRY,0,0,0,0,0, 'Allerian Defender - Script - Say text 0');
+-- NPC talk text insert from sniff
+DELETE FROM `creature_text` WHERE `entry`=18999;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(18999,0,0, 'Hey, did you read the bounty on this wanted poster?',12,7,100,6,0,0, 'Allerian Defender'),
+(18999,0,1, 'The Bone Wastes! I don''t care what''s being offered as a reward, I''m not going into the Bone Wastes!',12,7,100,6,0,0, 'Allerian Defender'),
+(18999,0,2, 'This wanted poster says that they''re offering gold to these so-called adventurers to go kill things. Isn''t that what we do? I don''t think I''m being paid enough!',12,7,100,6,0,0, 'Allerian Defender'),
+(18999,0,3, 'You want to go do the bounty off of this wanted poster after the shift is over?',12,7,100,6,0,0, 'Allerian Defender'),
+(18999,0,4, 'This poster has a bounty on bonelashers. You think I should do that?',12,7,100,6,0,0, 'Allerian Defender'),
+(18999,1,0, 'Is that wanted poster all that you''re going to talk about today?',12,7,100,1,0,0, 'Allerian Defender'),
+(18999,1,1, 'I''m up to looking into that bounty after this shift.',12,7,100,1,0,0, 'Allerian Defender'),
+(18999,1,2, 'I could use the extra money.',12,7,100,1,0,0, 'Allerian Defender'),
+(18999,1,3, 'I don''t know and I don''t care.',12,7,100,1,0,0, 'Allerian Defender'),
+(18999,1,4, 'The bonelashers of the wastes are no laughing matter. I hear they carry diseases!',12,7,100,1,0,0, 'Allerian Defender');
+-- Remove old crappy script
+UPDATE `creature` SET `MovementType`=0 WHERE `guid` IN (68291,68293);
+UPDATE `creature_addon` SET `path_id`=0 WHERE `guid` IN (68291,68293);
+DELETE FROM `waypoint_data` WHERE `id` IN (682910,682930);
+DELETE FROM `waypoint_scripts` WHERE `id` BETWEEN 170 AND 171;
+DELETE FROM `db_script_string` WHERE `entry` IN (2000005046,2000005047);
+
+-- Pathing for Allerian Peasant Entry: 19147
+SET @NPC := 68470;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2983.204,`position_y`=3971.366,`position_z`=2.162047 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2981.773,3966.45,2.614914,0,0,0,100,0),
+(@PATH,2,-2981.005,3960.968,2.989914,0,0,0,100,0),
+(@PATH,3,-2981.881,3954.581,2.614914,0,0,0,100,0),
+(@PATH,4,-2982.862,3947.319,3.114914,0,0,0,100,0),
+(@PATH,5,-2986.684,3945.63,3.239914,0,0,0,100,0),
+(@PATH,6,-2986.646,3950.593,3.761735,6000,0,@PATH+1,100,0),
+(@PATH,7,-2986.979,3946.354,3.114914,0,0,0,100,0),
+(@PATH,8,-2982.707,3945.763,3.364914,0,0,0,100,0),
+(@PATH,9,-2980.747,3953.042,2.739914,0,0,0,100,0),
+(@PATH,10,-2980.202,3961.786,2.864914,0,0,0,100,0),
+(@PATH,11,-2983.204,3971.366,2.162047,4000,0,@PATH+2,100,0);
+-- F1304ACB07BEF300 .go -2981.773 3966.45 2.614914
+DELETE FROM `waypoint_scripts` WHERE `id` IN (188,189,@PATH+1,@PATH+2);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,0,30,0,0,1.413717,837),
+(@PATH+1,1,2,83,381,0,838),
+(@PATH+2,1,2,83,381,0,839);
+
+-- Pathing for Allerian Peasant Entry: 19147
+SET @NPC := 68468;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2977.357,`position_y`=4012.234,`position_z`=1.424733 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2978.323,4006.793,1.174733,0,0,0,100,0),
+(@PATH,2,-2973.405,4002.646,1.424733,0,0,0,100,0),
+(@PATH,3,-2967.158,4003.521,1.299733,0,0,0,100,0),
+(@PATH,4,-2964.591,4008.163,1.124218,0,0,0,100,0),
+(@PATH,5,-2966.771,4010.062,1.299733,0,0,0,100,0),
+(@PATH,6,-2969.096,4008.951,1.830398,5000,0,@PATH+1,100,0),
+(@PATH,7,-2966.771,4010.062,1.299733,0,0,0,100,0),
+(@PATH,8,-2964.591,4008.163,1.124218,0,0,0,100,0),
+(@PATH,9,-2965.665,4005.173,1.249218,0,0,0,100,0),
+(@PATH,10,-2972.548,4002.835,1.424733,0,0,0,100,0),
+(@PATH,11,-2977.689,4007.088,1.174733,0,0,0,100,0),
+(@PATH,12,-2977.357,4012.234,1.424733,4000,0,@PATH+2,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (184,185,@PATH+1,@PATH+2);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,0,30,0,0,3.839724,840),
+(@PATH+1,1,2,83,381,0,841),
+(@PATH+2,1,2,83,381,0,842);
+
+-- Pathing for Allerian Peasant Entry: 19147
+SET @NPC := 68469;
+SET @PATH := @NPC * 10;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-2994.862,`position_y`=4029.217,`position_z`=1.799733 WHERE `guid`=@NPC;
+DELETE FROM `creature_addon` WHERE `guid`=@NPC;
+INSERT INTO `creature_addon` (`guid`,`path_id`,`bytes2`,`mount`,`auras`) VALUES (@NPC,@PATH,1,0, '');
+DELETE FROM `waypoint_data` WHERE `id`=@PATH;
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,-2995.501,4024.677,1.674733,0,0,0,100,0),
+(@PATH,2,-2991.115,4017.175,1.424733,0,0,0,100,0),
+(@PATH,3,-2986.05,4011.426,0.7997329,0,0,0,100,0),
+(@PATH,4,-2980.667,4005.888,1.049733,0,0,0,100,0),
+(@PATH,5,-2974.792,4001.254,1.424733,0,0,0,100,0),
+(@PATH,6,-2969.111,3999.192,1.787047,0,0,0,100,0),
+(@PATH,7,-2962.025,4001.197,1.249218,0,0,0,100,0),
+(@PATH,8,-2955.767,4003.337,0.8742183,0,0,0,100,0),
+(@PATH,9,-2949.479,4006.26,-0.5007817,0,0,0,100,0),
+(@PATH,10,-2943.639,4005.681,-0.8757817,0,0,0,100,0),
+(@PATH,11,-2938.82,4004.248,-0.8757817,5000,0,@PATH+2,100,0),
+(@PATH,12,-2944.247,4006.454,-0.8757817,0,0,0,100,0),
+(@PATH,13,-2950.113,4005.459,-0.2507817,0,0,0,100,0),
+(@PATH,14,-2958.819,4002.142,1.124218,0,0,0,100,0),
+(@PATH,15,-2968.181,3999.478,1.662047,0,0,0,100,0),
+(@PATH,16,-2976.377,4001.348,1.424733,0,0,0,100,0),
+(@PATH,17,-2982.522,4005.211,1.049733,0,0,0,100,0),
+(@PATH,18,-2987.678,4011.322,0.6747329,0,0,0,100,0),
+(@PATH,19,-2991.716,4016.418,1.174733,0,0,0,100,0),
+(@PATH,20,-2994.956,4023.157,1.549733,0,0,0,100,0),
+(@PATH,21,-2994.996,4027.696,1.799733,0,0,0,100,0),
+(@PATH,22,-2994.862,4029.217,1.799733,5000,0,@PATH+1,100,0);
+DELETE FROM `waypoint_scripts` WHERE `id` IN (186,187,@PATH+1,@PATH+2);
+INSERT INTO `waypoint_scripts` (`id`,`delay`,`command`,`datalong`,`datalong2`,`o`,`guid`) VALUES
+(@PATH+1,0,30,0,0,1.570796,843),
+(@PATH+1,1,2,83,381,0,844),
+(@PATH+2,1,2,83,69,0,845);
diff --git a/sql/updates/world/2011_06_24_00_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_24_00_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..28f15696382
--- /dev/null
+++ b/sql/updates/world/2011_06_24_00_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=6803 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=6803 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(6803,11,0,0,'achievement_defenseless');
diff --git a/sql/updates/world/2011_06_24_01_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_24_01_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..1054e710fec
--- /dev/null
+++ b/sql/updates/world/2011_06_24_01_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=7319 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7319 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7319,11,0,0,'achievement_less_rabi');
diff --git a/sql/updates/world/2011_06_24_02_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_24_02_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..1668e241338
--- /dev/null
+++ b/sql/updates/world/2011_06_24_02_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=7577 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7577 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7577,11,0,0,'achievement_split_personality');
diff --git a/sql/updates/world/2011_06_24_03_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_24_03_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..be782da4967
--- /dev/null
+++ b/sql/updates/world/2011_06_24_03_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=7320 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7320 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7320,11,0,0,'achievement_dehydration');
diff --git a/sql/updates/world/2011_06_24_04_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_24_04_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..056450445e2
--- /dev/null
+++ b/sql/updates/world/2011_06_24_04_world_achievement_criteria_data.sql
@@ -0,0 +1 @@
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7590 AND `type`=18; \ No newline at end of file
diff --git a/sql/updates/world/2011_06_24_05_world_spell_bonus_data.sql b/sql/updates/world/2011_06_24_05_world_spell_bonus_data.sql
new file mode 100644
index 00000000000..58ae76c3100
--- /dev/null
+++ b/sql/updates/world/2011_06_24_05_world_spell_bonus_data.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_bonus_data` WHERE `entry` = 64891;
+INSERT INTO `spell_bonus_data` VALUES
+(64891, -1, 0, -1, -1, 'Paladin - T8 Holy 2P - Holy Mending');
diff --git a/sql/updates/world/2011_06_24_06_world_spell_script_names.sql b/sql/updates/world/2011_06_24_06_world_spell_script_names.sql
new file mode 100644
index 00000000000..5c7b6e9bfc0
--- /dev/null
+++ b/sql/updates/world/2011_06_24_06_world_spell_script_names.sql
@@ -0,0 +1,7 @@
+DELETE FROM `spell_script_names` WHERE `spell_id` IN(4073,19804,12749,13258,13166);
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(4073,'spell_gen_allow_cast_from_item_only'),
+(19804,'spell_gen_allow_cast_from_item_only'),
+(12749,'spell_gen_allow_cast_from_item_only'),
+(13258,'spell_gen_allow_cast_from_item_only'),
+(13166,'spell_gen_allow_cast_from_item_only');
diff --git a/sql/updates/world/2011_06_24_07_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_24_07_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..cb76cbb1d4a
--- /dev/null
+++ b/sql/updates/world/2011_06_24_07_world_achievement_criteria_data.sql
@@ -0,0 +1,9 @@
+DELETE FROM `spell_dbc` WHERE `id`=59046;
+INSERT INTO `spell_dbc` (`Id`,`Effect1`,`EffectRadiusIndex1`,`EffectImplicitTargetA1`,`EffectImplicitTargetB1`,`comment`)
+VALUES
+(59046,3,28,22,30,'Tribunal of Ages - Criteria Marker');
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7590 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7590,11,0,0,'achievement_brann_spankin_new');
diff --git a/sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..4e64ce26ae1
--- /dev/null
+++ b/sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=7361 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7361 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7361,11,0,0,'achievement_oh_novos');
diff --git a/sql/updates/world/2011_06_25_00_world_spell_dbc.sql b/sql/updates/world/2011_06_25_00_world_spell_dbc.sql
new file mode 100644
index 00000000000..782a29db90d
--- /dev/null
+++ b/sql/updates/world/2011_06_25_00_world_spell_dbc.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_dbc` WHERE `Id`=24308;
+INSERT INTO `spell_dbc`(`Id`,`Dispel`,`Mechanic`,`Attributes`,`AttributesEx`,`AttributesEx2`,`AttributesEx3`,`AttributesEx4`,`AttributesEx5`,`Stances`,`StancesNot`,`Targets`,`CastingTimeIndex`,`AuraInterruptFlags`,`ProcFlags`,`ProcChance`,`ProcCharges`,`MaxLevel`,`BaseLevel`,`SpellLevel`,`DurationIndex`,`RangeIndex`,`StackAmount`,`EquippedItemClass`,`EquippedItemSubClassMask`,`EquippedItemInventoryTypeMask`,`Effect1`,`Effect2`,`Effect3`,`EffectDieSides1`,`EffectDieSides2`,`EffectDieSides3`,`EffectRealPointsPerLevel1`,`EffectRealPointsPerLevel2`,`EffectRealPointsPerLevel3`,`EffectBasePoints1`,`EffectBasePoints2`,`EffectBasePoints3`,`EffectMechanic1`,`EffectMechanic2`,`EffectMechanic3`,`EffectImplicitTargetA1`,`EffectImplicitTargetA2`,`EffectImplicitTargetA3`,`EffectImplicitTargetB1`,`EffectImplicitTargetB2`,`EffectImplicitTargetB3`,`EffectRadiusIndex1`,`EffectRadiusIndex2`,`EffectRadiusIndex3`,`EffectApplyAuraName1`,`EffectApplyAuraName2`,`EffectApplyAuraName3`,`EffectAmplitude1`,`EffectAmplitude2`,`EffectAmplitude3`,`EffectMultipleValue1`,`EffectMultipleValue2`,`EffectMultipleValue3`,`EffectMiscValue1`,`EffectMiscValue2`,`EffectMiscValue3`,`EffectMiscValueB1`,`EffectMiscValueB2`,`EffectMiscValueB3`,`EffectTriggerSpell1`,`EffectTriggerSpell2`,`EffectTriggerSpell3`,`EffectSpellClassMaskA1`,`EffectSpellClassMaskA2`,`EffectSpellClassMaskA3`,`EffectSpellClassMaskB1`,`EffectSpellClassMaskB2`,`EffectSpellClassMaskB3`,`EffectSpellClassMaskC1`,`EffectSpellClassMaskC2`,`EffectSpellClassMaskC3`,`MaxTargetLevel`,`SpellFamilyName`,`SpellFamilyFlags1`,`SpellFamilyFlags2`,`SpellFamilyFlags3`,`MaxAffectedTargets`,`DmgClass`,`PreventionType`,`DmgMultiplier1`,`DmgMultiplier2`,`DmgMultiplier3`,`AreaGroupId`,`SchoolMask`,`Comment`) VALUES
+('24308','0','0','256','0','0','0','0','0','0','0','0','1','0','0','101','0','0','0','0','26','1','0','-1','0','0','41','0','0','1','0','0','0','0','0','0','0','0','0','0','0','18','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','14986','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','1','0','0','0','0','Summon Shade of Jin''Do');
diff --git a/sql/updates/world/2011_06_25_01_world_script_texts.sql b/sql/updates/world/2011_06_25_01_world_script_texts.sql
new file mode 100644
index 00000000000..8b0a68f41c0
--- /dev/null
+++ b/sql/updates/world/2011_06_25_01_world_script_texts.sql
@@ -0,0 +1,2 @@
+-- Fix typo for Ragnaros' Magmaburst
+UPDATE `script_texts` SET `content_default`='MY PATIENCE IS DWINDLING! COME, GNATS, TO YOUR DEATH!' WHERE `npc_entry`=11502 AND `entry`='-1409018';
diff --git a/sql/updates/world/2011_06_25_02_world_misc.sql b/sql/updates/world/2011_06_25_02_world_misc.sql
new file mode 100644
index 00000000000..a30d8492262
--- /dev/null
+++ b/sql/updates/world/2011_06_25_02_world_misc.sql
@@ -0,0 +1,31 @@
+-- Fix Quest 11465 "The Ransacked Caravan"
+-- Fjord Turkey SAI
+SET @ENTRY := 24746; -- NPC entry
+SET @SPELL1 := 44323; -- Hawk Hunting
+SET @SPELL2 := 44327; -- Hawk Hunting
+UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,8,0,100,0,@SPELL1,0,0,0,11,@SPELL2,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Fjord Turkey - On Spellhit - Cast spell on invoker'),
+(@ENTRY,0,1,0,61,0,100,0,0,0,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Fjord Turkey - On Spellhit - Despawn');
+-- Fix condition for Item 34111 to only target Fjord Turkey
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=18 AND `SourceEntry`=34111;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(18,0,34111,0,24,1,@ENTRY,0,63,'','Item Trained Rock Falcon targets only Fjord Turkey');
+-- Dragonflayer Ambusher SAI
+SET @ENTRY := 24779; -- NPC entry
+SET @SPELL1 := 38557; -- Throw
+UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,89,10,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Dragonflayer Ambusher - On spawn - Set random movement'),
+(@ENTRY,0,1,0,4,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Dragonflayer Ambusher - On aggro - Say text'),
+(@ENTRY,0,2,0,0,0,100,1,0,0,0,0,11,@SPELL1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Dragonflayer Ambusher - Combat - Cast spell on victim');
+-- NPC talk text insert from sniff
+DELETE FROM `creature_text` WHERE `entry`=24779;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(24779,0,0, 'Tonight we feast on you!',12,0,100,0,0,0, 'Dragonflayer Ambusher'),
+(24779,0,1, 'Such easy prey...',12,0,100,0,0,0, 'Dragonflayer Ambusher'),
+(24779,0,2, 'Who''s hunting who?',12,0,100,0,0,0, 'Dragonflayer Ambusher');
diff --git a/sql/updates/world/2011_06_25_03_world_sai.sql b/sql/updates/world/2011_06_25_03_world_sai.sql
new file mode 100644
index 00000000000..61ab8ff2b88
--- /dev/null
+++ b/sql/updates/world/2011_06_25_03_world_sai.sql
@@ -0,0 +1,52 @@
+-- Ice Heart Jormungar Feeder SAI
+SET @ENTRY := 26358; -- NPC entry
+SET @SPELL1 := 47447; -- Corrosive Spit
+UPDATE `creature_template` SET `AIName`='SmartAI', `ScriptName`='' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,100,0,5000,11000,20000,26000,11,@SPELL1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Ice Heart Jormungar Feeder - Combat - Cast Corrosive Spit');
+
+-- SAI for Fulgorge
+SET @ENTRY := 18678;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `creature` SET `spawndist`=20,`MovementType`=1 WHERE `id`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,1,1,0,100,1,0,0,0,0,11,34038,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - OOC - Cast Submerge Visual'),
+(@ENTRY,0,1,0,61,0,100,1,0,0,0,0,18,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - OOC - Set Unselectable and Unattackable Flags'),
+(@ENTRY,0,2,3,0,0,100,1,0,0,0,0,28,34038,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - On Aggro - Remove Submerge Visual'),
+(@ENTRY,0,3,4,61,0,100,0,0,0,0,0,19,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - On Aggro - Remove Unselectable and Unattackable Flags'),
+(@ENTRY,0,4,5,61,0,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - On Aggro - Prevent Combat Movement'),
+(@ENTRY,0,5,0,61,0,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - On Aggro - Set Phase 1'),
+(@ENTRY,0,6,7,0,1,100,0,1000,1000,2100,4500,11,31747,1,0,0,0,0,2,0,0,0,0,0,0,0,'Fulgorge - Combat - Cast Poison (Phase 1)'),
+(@ENTRY,0,7,0,61,1,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - Combat - Prevent Combat Movement (Phase 1)'),
+(@ENTRY,0,8,0,0,1,100,0,20400,20400,45000,50000,11,32738,1,0,0,0,0,2,0,0,0,0,0,0,0,'Fulgorge - Combat - Cast Bore (Phase 1)'),
+(@ENTRY,0,9,10,9,1,100,0,20,60,0,0,11,34038,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - At 20 - 60 Yards Range - Cast Submerge Visual (Phase 1)'),
+(@ENTRY,0,10,0,61,1,100,0,0,0,0,0,22,2,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - At 20 - 60 Yards Range - Set Phase 2 (Phase 1)'),
+(@ENTRY,0,11,12,9,2,100,0,0,8,0,0,28,34038,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - At 0 - 8 Yards - Remove Submerge Visual (Phase 2)'),
+(@ENTRY,0,12,13,61,2,100,0,0,0,0,0,21,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - Combat - Prevent Combat Movement (Phase 2)'),
+(@ENTRY,0,13,14,61,2,100,0,0,8,0,0,19,33554434,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - At 0 - 8 Yards - Remove Unselectable and Unattackable Flags (Phase 2)'),
+(@ENTRY,0,14,0,61,2,100,0,0,0,0,0,22,1,0,0,0,0,0,1,0,0,0,0,0,0,0,'Fulgorge - At 20 - 60 Yards Range - Set Phase 1 (Phase 2)');
+
+-- Deranged Helboar SAI
+SET @ENTRY := 16863; -- NPC entry
+SET @SPELL1 := 33908; -- Burning Spikes
+SET @SPELL2 := 8599; -- Enrage
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,11,0,100,0,0,0,0,0,11,@SPELL1,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Deranged Helboar - On spawn - Cast Burning Spikes on self'),
+(@ENTRY,0,1,0,2,0,100,1,0,30,0,0,11,@SPELL2,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Deranged Helboar - On Health level - Cast Enrage When Below 30% HP');
+
+-- Stonescythe Alpha SAI
+SET @ENTRY := 16929; -- NPC entry
+SET @SPELL1 := 33911; -- Tear Armor
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type`=0 AND `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,0,0,50,0,3000,3000,8000,8000,11,@SPELL1,0,0,0,0,0,2,0,0,0,0,0,0,0, 'Stonescythe Alpha - Combat - Cast Tear Armor');
+
diff --git a/sql/updates/world/2011_06_25_04_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_04_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..66a9ff7f115
--- /dev/null
+++ b/sql/updates/world/2011_06_25_04_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=7593 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7593 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7593,11,0,0,'achievement_abuse_the_ooze');
diff --git a/sql/updates/world/2011_06_25_05_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_05_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..c67289b76a5
--- /dev/null
+++ b/sql/updates/world/2011_06_25_05_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=7579 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7579 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7579,11,0,0,'achievement_consumption_junction');
diff --git a/sql/updates/world/2011_06_25_06_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_06_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..3fa82b56f43
--- /dev/null
+++ b/sql/updates/world/2011_06_25_06_world_achievement_criteria_data.sql
@@ -0,0 +1,4 @@
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=12976 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(12976,11,0,0,'achievement_three_faced');
diff --git a/sql/updates/world/2011_06_25_07_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_07_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..f714e984a19
--- /dev/null
+++ b/sql/updates/world/2011_06_25_07_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=7359 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7359 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7359,11,0,0,'achievement_volunteer_work');
diff --git a/sql/updates/world/2011_06_25_08_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_08_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..fd2567ed526
--- /dev/null
+++ b/sql/updates/world/2011_06_25_08_world_achievement_criteria_data.sql
@@ -0,0 +1 @@
+UPDATE `achievement_criteria_data` SET `ScriptName`='achievement_brann_spankin_new' WHERE `ScriptName`='achievement_brann_sparklin_news';
diff --git a/sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..6a2681b5e71
--- /dev/null
+++ b/sql/updates/world/2011_06_25_09_world_achievement_criteria_data.sql
@@ -0,0 +1,11 @@
+DELETE FROM `disables` WHERE `entry` IN (7328,7329,7330,7331,7332,7333) AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (7328,7329,7330,7331,7332,7333) AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7328,11,0,0,'achievement_twilight_assist'),
+(7329,11,0,0,'achievement_twilight_duo'),
+(7330,11,0,0,'achievement_twilight_zone'),
+(7331,11,0,0,'achievement_twilight_assist'),
+(7332,11,0,0,'achievement_twilight_duo'),
+(7333,11,0,0,'achievement_twilight_zone');
diff --git a/sql/updates/world/2011_06_25_10_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_10_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..1fddea0ad52
--- /dev/null
+++ b/sql/updates/world/2011_06_25_10_world_achievement_criteria_data.sql
@@ -0,0 +1,11 @@
+DELETE FROM `disables` WHERE `entry`=7315 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7315 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7315,11,0,0,'achievement_intense_cold');
+
+DELETE FROM `spell_script_names` WHERE `spell_id`=48095;
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`)
+VALUES
+(48095,'spell_intense_cold');
diff --git a/sql/updates/world/2011_06_25_11_world_creature_template.sql b/sql/updates/world/2011_06_25_11_world_creature_template.sql
new file mode 100644
index 00000000000..a0a41fb74c0
--- /dev/null
+++ b/sql/updates/world/2011_06_25_11_world_creature_template.sql
@@ -0,0 +1 @@
+UPDATE `creature_template` SET `ScriptName`='npc_pool_of_tar' WHERE `entry`=33090;
diff --git a/sql/updates/world/2011_06_25_12_world_trinity_string.sql b/sql/updates/world/2011_06_25_12_world_trinity_string.sql
new file mode 100644
index 00000000000..cb4cbbe4a95
--- /dev/null
+++ b/sql/updates/world/2011_06_25_12_world_trinity_string.sql
@@ -0,0 +1 @@
+UPDATE `trinity_string` SET `content_default`='You try to view cinematic %u but it doesn\'t exist.' WHERE entry='1200';
diff --git a/sql/updates/world/2011_06_25_13_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_13_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..a7a9de5cbdf
--- /dev/null
+++ b/sql/updates/world/2011_06_25_13_world_achievement_criteria_data.sql
@@ -0,0 +1 @@
+DELETE FROM `conditions` WHERE `SourceEntry`=24311 AND `ConditionValue2` IN (14825,14986,14826,14883); \ No newline at end of file
diff --git a/sql/updates/world/2011_06_25_14_world_spell_proc_event.sql b/sql/updates/world/2011_06_25_14_world_spell_proc_event.sql
new file mode 100644
index 00000000000..b78a9c087a9
--- /dev/null
+++ b/sql/updates/world/2011_06_25_14_world_spell_proc_event.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_proc_event` WHERE `entry` = 70817;
+INSERT INTO `spell_proc_event` VALUES
+(70817,0,11,0,0x1000,0,0x10000,0,0,0,0);
diff --git a/sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..244d572253c
--- /dev/null
+++ b/sql/updates/world/2011_06_25_15_world_achievement_criteria_data.sql
@@ -0,0 +1,13 @@
+DELETE FROM `disables` WHERE `entry` IN (10056,10057,10058,10059,10060,10061,10218,10219) AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (10056,10057,10058,10059,10060,10061,10218,10219) AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(10056,11,0,0,'achievement_orbital_bombardment'),
+(10057,11,0,0,'achievement_orbital_devastation'),
+(10058,11,0,0,'achievement_nuked_from_orbit'),
+(10059,11,0,0,'achievement_orbital_bombardment'),
+(10060,11,0,0,'achievement_orbital_devastation'),
+(10061,11,0,0,'achievement_nuked_from_orbit'),
+(10218,11,0,0,'achievement_orbit_uary'),
+(10219,11,0,0,'achievement_orbit_uary');
diff --git a/sql/updates/world/2011_06_25_16_world_spell_proc_event.sql b/sql/updates/world/2011_06_25_16_world_spell_proc_event.sql
new file mode 100644
index 00000000000..d7ee64c667c
--- /dev/null
+++ b/sql/updates/world/2011_06_25_16_world_spell_proc_event.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_proc_event` WHERE `entry` = 63086;
+INSERT INTO `spell_proc_event` VALUES
+(63086, 0x00, 9, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0, 0, 0);
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
index bd3125ff18d..d5fd8cca112 100755
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -186,7 +186,7 @@ void BattlegroundIC::Update(uint32 diff)
siege->Respawn(true);
}
- // we need to confirm this, i am not sure if this every 3 minutes
+ // we need to confirm if it is every 3 minutes
for (uint8 u = (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_1_A : BG_IC_NPC_DEMOLISHER_1_H); u < (nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_NPC_DEMOLISHER_4_A : BG_IC_NPC_DEMOLISHER_4_H); u++)
{
if (Creature* demolisher = GetBGCreature(u))
@@ -200,7 +200,7 @@ void BattlegroundIC::Update(uint32 diff)
}
}
- // the point is waiting for a change on his banner
+ // the point is waiting for a change on its banner
if (nodePoint[i].needChange)
{
if (nodePoint[i].timer <= diff)
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 6634760fdfd..95be55e595e 100755
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -774,7 +774,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>
uint64 GetRotation() const { return m_rotation; }
virtual uint32 GetScriptId() const { return GetGOInfo()->ScriptId; }
- GameObjectAI* AI() const { return (GameObjectAI*)m_AI; }
+ GameObjectAI* AI() const { return m_AI; }
std::string GetAIName() const;
protected:
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index c5122b04d69..fd8be29c3e0 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -5704,7 +5704,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
{
if (effIndex != 0)
return false;
- AuraEffect* counter = triggeredByAura->GetBase()->GetEffect(1);
+ AuraEffect* counter = triggeredByAura->GetBase()->GetEffect(EFFECT_1);
if (!counter)
return true;
@@ -6040,7 +6040,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
// regen mana for caster
CastCustomSpell(this, 59117, &basepoints0, NULL, NULL, true, castItem, triggeredByAura);
// Get second aura of spell for replenishment effect on party
- if (AuraEffect const* aurEff = (*i)->GetBase()->GetEffect(1))
+ if (AuraEffect const* aurEff = (*i)->GetBase()->GetEffect(EFFECT_1))
{
// Replenishment - roll chance
if (roll_chance_i(aurEff->GetAmount()))
@@ -6108,7 +6108,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
{
// Multiple effects stack, so let's try to find this aura.
int32 bonus = 0;
- if (AuraEffect* aurEff = target->GetAuraEffect(47753, 0))
+ if (AuraEffect const* aurEff = target->GetAuraEffect(47753, 0))
bonus = aurEff->GetAmount();
basepoints0 = CalculatePctN(int32(damage), triggerAmount) + bonus;
@@ -6605,7 +6605,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
// This effect only from Rapid Killing (mana regen)
if (!(procSpell->SpellFamilyFlags[1] & 0x01000000))
return false;
- triggered_spell_id = 56654;
target = this;
@@ -6688,7 +6687,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
{
if (procFlag & PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS)
{
- if ((procSpell->SpellFamilyName == SPELLFAMILY_PALADIN) && (procSpell->SpellFamilyFlags[0] & 0x40000000))
+ if (procSpell->SpellFamilyName == SPELLFAMILY_PALADIN && (procSpell->SpellFamilyFlags[0] & 0x40000000))
{
basepoints0 = damage / 12;
@@ -6703,6 +6702,11 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
else if (damage > 0)
triggered_spell_id = 58597;
+ // Item - Paladin T8 Holy 4P Bonus
+ if (Unit* caster = triggeredByAura->GetCaster())
+ if (AuraEffect const* aurEff = caster->GetAuraEffect(64895, 0))
+ cooldown = aurEff->GetAmount();
+
target = this;
break;
}
@@ -6710,7 +6714,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
if (dummySpell->SpellIconID == 3025)
{
// 4 damage tick
- basepoints0 = triggerAmount*damage/400;
+ basepoints0 = triggerAmount * damage / 400;
triggered_spell_id = 61840;
// Add remaining ticks to damage done
basepoints0 += pVictim->GetRemainingPeriodicAmount(GetGUID(), triggered_spell_id, SPELL_AURA_PERIODIC_DAMAGE);
@@ -6720,7 +6724,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
if (dummySpell->SpellIconID == 3030)
{
// 4 healing tick
- basepoints0 = triggerAmount*damage/400;
+ basepoints0 = triggerAmount * damage / 400;
triggered_spell_id = 54203;
break;
}
@@ -6808,7 +6812,8 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
// At melee attack or Hammer of the Righteous spell damage considered as melee attack
bool stacker = !procSpell || procSpell->Id == 53595;
- bool damager = procSpell && procSpell->EquippedItemClass == ITEM_CLASS_WEAPON;
+ // spells with SPELL_DAMAGE_CLASS_MELEE excluding Judgements
+ bool damager = procSpell && procSpell->EquippedItemClass != -1;
if (!stacker && !damager)
return false;
@@ -6839,7 +6844,8 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
// At melee attack or Hammer of the Righteous spell damage considered as melee attack
bool stacker = !procSpell || procSpell->Id == 53595;
- bool damager = procSpell && procSpell->EquippedItemClass == ITEM_CLASS_WEAPON;
+ // spells with SPELL_DAMAGE_CLASS_MELEE excluding Judgements
+ bool damager = procSpell && procSpell->EquippedItemClass != -1;
if (!stacker && !damager)
return false;
@@ -6913,6 +6919,13 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
basepoints0 = CalculatePctN(int32(damage), triggerAmount);
break;
}
+ // Item - Paladin T8 Holy 2P Bonus
+ case 64890:
+ {
+ triggered_spell_id = 64891;
+ basepoints0 = triggerAmount * damage / 300;
+ break;
+ }
case 71406: // Tiny Abomination in a Jar
case 71545: // Tiny Abomination in a Jar (Heroic)
{
@@ -7239,6 +7252,26 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, AuraEffect* trigger
}
return false;
}
+ // Item - Shaman T10 Elemental 4P Bonus
+ case 70817:
+ {
+ // try to find spell Flame Shock on the target
+ if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_SHAMAN, 0x10000000, 0x0, 0x0, GetGUID()))
+ {
+ Aura* flameShock = aurEff->GetBase();
+ int32 maxDuration = flameShock->GetMaxDuration();
+ int32 newDuration = flameShock->GetDuration() + 2 * aurEff->GetAmplitude();
+
+ flameShock->SetDuration(newDuration);
+ // is it blizzlike to change max duration for FS?
+ if (newDuration > maxDuration)
+ flameShock->SetMaxDuration(newDuration);
+
+ return true;
+ }
+ // if not found Flame Shock
+ return false;
+ }
case 63280: // Glyph of Totem of Wrath
{
if (procSpell->SpellIconID != 2019)
@@ -7942,6 +7975,9 @@ bool Unit::HandleAuraProc(Unit* pVictim, uint32 damage, Aura * triggeredByAura,
if (pVictim->HasAura(53601))
{
int32 bp0 = CalculatePctN(int32(damage / 12), SpellMgr::CalculateSpellEffectAmount(dummySpell, 2));
+ // Item - Paladin T9 Holy 4P Bonus
+ if (AuraEffect const* aurEff = GetAuraEffect(67191, 0))
+ AddPctN(bp0, aurEff->GetAmount());
CastCustomSpell(pVictim, 66922, &bp0, NULL, NULL, true);
return true;
}
@@ -8014,7 +8050,7 @@ bool Unit::HandleAuraProc(Unit* pVictim, uint32 damage, Aura * triggeredByAura,
return false;
int32 bp0 = int32(CalculatePctN(GetCreateMana(), SpellMgr::CalculateSpellEffectAmount(spInfo, 0)));
- CastCustomSpell(this, 67545, &bp0, NULL, NULL, true, NULL, triggeredByAura->GetEffect(0), GetGUID());
+ CastCustomSpell(this, 67545, &bp0, NULL, NULL, true, NULL, triggeredByAura->GetEffect(EFFECT_0), GetGUID());
return true;
}
}
@@ -8037,7 +8073,7 @@ bool Unit::HandleAuraProc(Unit* pVictim, uint32 damage, Aura * triggeredByAura,
// can't proc from death rune use
if (rune == RUNE_DEATH)
return false;
- AuraEffect* aurEff = triggeredByAura->GetEffect(0);
+ AuraEffect* aurEff = triggeredByAura->GetEffect(EFFECT_0);
if (!aurEff)
return false;
// Reset amplitude - set death rune remove timer to 30s
@@ -8786,7 +8822,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, AuraEffect* trig
}
// Cast positive spell on enemy target
case 7099: // Curse of Mending
- case 39647: // Curse of Mending
+ case 39703: // Curse of Mending
case 29494: // Temptation
case 20233: // Improved Lay on Hands (cast on target)
{
@@ -10940,7 +10976,7 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM
// Improved Faerie Fire
if (pVictim->HasAuraState(AURA_STATE_FAERIE_FIRE))
if (AuraEffect const* aurEff = GetDummyAuraEffect(SPELLFAMILY_DRUID, 109, 0))
- crit_chance+=aurEff->GetAmount();
+ crit_chance += aurEff->GetAmount();
// cumulative effect - don't break
@@ -10950,7 +10986,7 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM
// Improved Insect Swarm
if (AuraEffect const* aurEff = GetDummyAuraEffect(SPELLFAMILY_DRUID, 1771, 0))
if (pVictim->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_DRUID, 0x00000002, 0, 0))
- crit_chance+=aurEff->GetAmount();
+ crit_chance += aurEff->GetAmount();
break;
}
break;
@@ -10964,9 +11000,8 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM
if (spellProto->SpellFamilyFlags[0] & 0x40000000)
{
// Sacred Shield
- AuraEffect const* aura = pVictim->GetAuraEffect(58597, 1);
- if (aura && aura->GetCasterGUID() == GetGUID())
- crit_chance+=aura->GetAmount();
+ if (AuraEffect const* aura = pVictim->GetAuraEffect(58597, 1, GetGUID()))
+ crit_chance += aura->GetAmount();
break;
}
// Exorcism
@@ -11839,7 +11874,7 @@ void Unit::MeleeDamageBonus(Unit *pVictim, uint32 *pdamage, WeaponAttackType att
case 6427: case 6428: // Dirty Deeds
if (pVictim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, spellProto, this))
{
- AuraEffect* eff0 = (*i)->GetBase()->GetEffect(0);
+ AuraEffect* eff0 = (*i)->GetBase()->GetEffect(EFFECT_0);
if (!eff0 || (*i)->GetEffIndex() != 1)
{
sLog->outError("Spell structure of DD (%u) changed.", (*i)->GetId());
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp
index 2281caf4e74..c7800b0223c 100755
--- a/src/server/game/Instances/InstanceScript.cpp
+++ b/src/server/game/Instances/InstanceScript.cpp
@@ -319,24 +319,6 @@ void InstanceScript::DoSendNotifyToInstance(const char *format, ...)
}
}
-// Complete Achievement for all players in instance
-void InstanceScript::DoCompleteAchievement(uint32 achievement)
-{
- AchievementEntry const* pAE = GetAchievementStore()->LookupEntry(achievement);
- Map::PlayerList const &PlayerList = instance->GetPlayers();
-
- if (!pAE)
- {
- sLog->outError("TSCR: DoCompleteAchievement called for not existing achievement %u", achievement);
- return;
- }
-
- if (!PlayerList.isEmpty())
- for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
- if (Player *pPlayer = i->getSource())
- pPlayer->CompletedAchievement(pAE);
-}
-
// Update Achievement Criteria for all players in instance
void InstanceScript::DoUpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1 /*= 0*/, uint32 miscValue2 /*= 0*/, Unit* unit /*= NULL*/)
{
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index b3dcb9525c5..d2c98af0838 100755
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -169,9 +169,6 @@ class InstanceScript : public ZoneScript
// Send Notify to all players in instance
void DoSendNotifyToInstance(char const* format, ...);
- // Complete Achievement for all players in instance
- DECLSPEC_DEPRECATED void DoCompleteAchievement(uint32 achievement) ATTR_DEPRECATED;
-
// Update Achievement Criteria for all players in instance
void DoUpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1 = 0, uint32 miscValue2 = 0, Unit* unit = NULL);
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 41458ecaf55..bd2c34aef5c 100755
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -831,8 +831,8 @@ enum TrinityStrings
LANG_BG_IC_REFINERY = 1222,
LANG_BG_IC_QUARRY = 1223,
LANG_BG_IC_HANGAR = 1224,
- LANG_BG_IC_ALLIANCE = 1225,
- LANG_BG_IC_HORDE = 1226,
+ LANG_BG_IC_ALLIANCE = 1300,
+ LANG_BG_IC_HORDE = 1301,
// FREE IDS 1228-9999
diff --git a/src/server/game/Server/Protocol/Handlers/ItemHandler.cpp b/src/server/game/Server/Protocol/Handlers/ItemHandler.cpp
index db2c76b422a..84f54786256 100755
--- a/src/server/game/Server/Protocol/Handlers/ItemHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/ItemHandler.cpp
@@ -718,14 +718,14 @@ void WorldSession::HandleListInventoryOpcode(WorldPacket & recv_data)
SendListInventory(guid);
}
-void WorldSession::SendListInventory(uint64 vendorguid)
+void WorldSession::SendListInventory(uint64 vendorGuid)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_LIST_INVENTORY");
- Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR);
- if (!pCreature)
+ Creature* vendor = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR);
+ if (!vendor)
{
- sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: SendListInventory - Unit (GUID: %u) not found or you can not interact with him.", uint32(GUID_LOPART(vendorguid)));
+ sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: SendListInventory - Unit (GUID: %u) not found or you can not interact with him.", uint32(GUID_LOPART(vendorGuid)));
_player->SendSellError(SELL_ERR_CANT_FIND_VENDOR, NULL, 0, 0);
return;
}
@@ -735,56 +735,62 @@ void WorldSession::SendListInventory(uint64 vendorguid)
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
// Stop the npc if moving
- if (pCreature->HasUnitState(UNIT_STAT_MOVING))
- pCreature->StopMoving();
+ if (vendor->HasUnitState(UNIT_STAT_MOVING))
+ vendor->StopMoving();
- VendorItemData const* vItems = pCreature->GetVendorItems();
- if (!vItems)
+ VendorItemData const* items = vendor->GetVendorItems();
+ if (!items)
{
- WorldPacket data(SMSG_LIST_INVENTORY, (8+1+1));
- data << uint64(vendorguid);
- data << uint8(0); // count==0, next will be error code
+ WorldPacket data(SMSG_LIST_INVENTORY, 8 + 1 + 1);
+ data << uint64(vendorGuid);
+ data << uint8(0); // count == 0, next will be error code
data << uint8(0); // "Vendor has no inventory"
SendPacket(&data);
return;
}
- uint8 numitems = vItems->GetItemCount();
+ uint8 itemCount = items->GetItemCount();
uint8 count = 0;
- WorldPacket data(SMSG_LIST_INVENTORY, (8+1+numitems*8*4));
- data << uint64(vendorguid);
+ WorldPacket data(SMSG_LIST_INVENTORY, 8 + 1 + itemCount * 8 * 4);
+ data << uint64(vendorGuid);
- size_t count_pos = data.wpos();
+ size_t countPos = data.wpos();
data << uint8(count);
- float discountMod = _player->GetReputationPriceDiscount(pCreature);
+ float discountMod = _player->GetReputationPriceDiscount(vendor);
- for (uint8 vendorslot = 0; vendorslot < numitems; ++vendorslot )
+ for (uint8 slot = 0; slot < itemCount; ++slot)
{
- if (VendorItem const* crItem = vItems->GetItem(vendorslot))
+ if (VendorItem const* item = items->GetItem(slot))
{
- if (ItemTemplate const *pProto = sObjectMgr->GetItemTemplate(crItem->item))
+ if (ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(item->item))
{
- if ((pProto->AllowableClass & _player->getClassMask()) == 0 && pProto->Bonding == BIND_WHEN_PICKED_UP && !_player->isGameMaster())
+ if (!(itemTemplate->AllowableClass & _player->getClassMask()) && itemTemplate->Bonding == BIND_WHEN_PICKED_UP && !_player->isGameMaster())
continue;
// Only display items in vendor lists for the team the
// player is on. If GM on, display all items.
- if (!_player->isGameMaster() && ((pProto->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY && _player->GetTeam() == ALLIANCE) || (pProto->Flags2 == ITEM_FLAGS_EXTRA_ALLIANCE_ONLY && _player->GetTeam() == HORDE)))
+ if (!_player->isGameMaster() && ((itemTemplate->Flags2 & ITEM_FLAGS_EXTRA_HORDE_ONLY && _player->GetTeam() == ALLIANCE) || (itemTemplate->Flags2 == ITEM_FLAGS_EXTRA_ALLIANCE_ONLY && _player->GetTeam() == HORDE)))
continue;
+
+ // Items sold out are not displayed in list
+ uint32 leftInStock = !item->maxcount ? 0xFFFFFFFF : vendor->GetVendorItemCurrentCount(item);
+ if (!_player->isGameMaster() && !leftInStock)
+ continue;
+
++count;
// reputation discount
- int32 price = crItem->IsGoldRequired(pProto) ? uint32(floor(pProto->BuyPrice * discountMod)) : 0;
+ int32 price = item->IsGoldRequired(itemTemplate) ? uint32(floor(itemTemplate->BuyPrice * discountMod)) : 0;
- data << uint32(vendorslot+1); // client expects counting to start at 1
- data << uint32(crItem->item);
- data << uint32(pProto->DisplayInfoID);
- data << int32(crItem->maxcount <= 0 ? 0xFFFFFFFF : pCreature->GetVendorItemCurrentCount(crItem));
+ data << uint32(slot + 1); // client expects counting to start at 1
+ data << uint32(item->item);
+ data << uint32(itemTemplate->DisplayInfoID);
+ data << int32(leftInStock);
data << uint32(price);
- data << uint32(pProto->MaxDurability);
- data << uint32(pProto->BuyCount);
- data << uint32(crItem->ExtendedCost);
+ data << uint32(itemTemplate->MaxDurability);
+ data << uint32(itemTemplate->BuyCount);
+ data << uint32(item->ExtendedCost);
}
}
}
@@ -796,7 +802,7 @@ void WorldSession::SendListInventory(uint64 vendorguid)
return;
}
- data.put<uint8>(count_pos, count);
+ data.put<uint8>(countPos, count);
SendPacket(&data);
}
diff --git a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
index b127831bad5..6193b0c6213 100755
--- a/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/SpellHandler.cpp
@@ -402,7 +402,7 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket)
spellInfo = actualSpellInfo;
}
- Spell* spell = new Spell(mover, spellInfo, false);
+ Spell* spell = new Spell(mover, spellInfo, false, 0, false, true);
spell->m_cast_count = castCount; // set count of casts
spell->prepare(&targets);
}
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index eb1fd068bc3..f45ee79847c 100755
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -284,7 +284,7 @@ class WorldSession
void SendTrainerList(uint64 guid);
void SendTrainerList(uint64 guid, const std::string& strTitle);
- void SendListInventory(uint64 guid);
+ void SendListInventory(uint64 vendorGuid);
void SendShowBank(uint64 guid);
void SendTabardVendorActivate(uint64 guid);
void SendSpiritResurrect();
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index f52ce6461b3..17f8b246c83 100755
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -439,7 +439,7 @@ void SpellCastTargets::OutDebug() const
sLog->outString("elevation: %f", m_elevation);
}
-Spell::Spell(Unit* Caster, SpellEntry const *info, bool triggered, uint64 originalCasterGUID, bool skipCheck):
+Spell::Spell(Unit* Caster, SpellEntry const *info, bool triggered, uint64 originalCasterGUID, bool skipCheck, bool castedClientside):
m_spellInfo(sSpellMgr->GetSpellForDifficultyFromSpell(info, Caster)),
m_caster(Caster), m_spellValue(new SpellValue(m_spellInfo))
{
@@ -502,6 +502,7 @@ m_caster(Caster), m_spellValue(new SpellValue(m_spellInfo))
m_spellState = SPELL_STATE_NULL;
+ m_castedClientside = castedClientside;
m_IsTriggeredSpell = bool(triggered || (info->AttributesEx4 & SPELL_ATTR4_TRIGGERED));
m_CastItem = NULL;
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index a05ad331776..57fbf815a9d 100755
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -386,7 +386,7 @@ class Spell
typedef std::set<Aura*> UsedSpellMods;
- Spell(Unit* Caster, SpellEntry const *info, bool triggered, uint64 originalCasterGUID = 0, bool skipCheck = false);
+ Spell(Unit* Caster, SpellEntry const *info, bool triggered, uint64 originalCasterGUID = 0, bool skipCheck = false, bool castedClientside = false);
~Spell();
void prepare(SpellCastTargets const* targets, AuraEffect const* triggeredByAura = NULL);
@@ -684,6 +684,7 @@ class Spell
uint32 m_timer;
bool m_IsTriggeredSpell;
+ bool m_castedClientside;
// if need this can be replaced by Aura copy
// we can't store original aura link to prevent access to deleted auras
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 4167b9e1516..d6a447bd75f 100755
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3823,7 +3823,6 @@ void SpellMgr::LoadSpellCustomAttr()
case 45641: // Fire Bloom
case 55665: // Life Drain - Sapphiron (H)
case 28796: // Poison Bolt Volly - Faerlina
- case 5484: // Howl Of Terror (Warlock)
spellInfo->MaxAffectedTargets = 5;
++count;
break;
@@ -4176,7 +4175,6 @@ void SpellMgr::LoadSpellCustomAttr()
spellInfo->AreaGroupId = 0; // originally, these require area 4522, which is... outside of Icecrown Citadel
++count;
break;
- case 70588: // Suppression
case 70602: // Corruption
spellInfo->AttributesEx |= SPELL_ATTR1_STACK_FOR_DIFF_CASTERS;
++count;
@@ -4227,9 +4225,6 @@ void SpellMgr::LoadSpellCustomAttr()
// Starfall Target Selection
if (spellInfo->SpellFamilyFlags[2] & 0x100)
spellInfo->MaxAffectedTargets = 2;
- // Starfall AOE Damage
- else if (spellInfo->SpellFamilyFlags[2] & 0x800000)
- mSpellCustomAttr[i] |= SPELL_ATTR0_CU_EXCLUDE_SELF;
// Roar
else if (spellInfo->SpellFamilyFlags[0] & 0x8)
mSpellCustomAttr[i] |= SPELL_ATTR0_CU_AURA_CC;
diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
index 71063c9a80b..39aefd45287 100644
--- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_krikthir_the_gatewatcher.cpp
@@ -75,11 +75,6 @@ enum Yells
SAY_PREFIGHT_3 = -1601019
};
-enum Misc
-{
- ACHIEV_WATH_HIM_DIE = 1296
-};
-
const Position SpawnPoint[] =
{
{ 566.164f, 682.087f, 769.079f, 2.21657f },
@@ -186,24 +181,8 @@ public:
{
DoScriptText(SAY_DEATH, me);
- if (!pInstance)
- return;
-
- pInstance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, DONE);
- //Achievement: Watch him die
- Creature *pAdd = Unit::GetCreature(*me, pInstance->GetData64(DATA_WATCHER_GASHRA));
- if (!pAdd || !pAdd->isAlive())
- return;
-
- pAdd = Unit::GetCreature(*me, pInstance->GetData64(DATA_WATCHER_SILTHIK));
- if (!pAdd || !pAdd->isAlive())
- return;
-
- pAdd = Unit::GetCreature(*me, pInstance->GetData64(DATA_WATCHER_NARJIL));
- if (!pAdd || !pAdd->isAlive())
- return;
-
- pInstance->DoCompleteAchievement(ACHIEV_WATH_HIM_DIE);
+ if (pInstance)
+ pInstance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, DONE);
}
void KilledUnit(Unit* victim)
@@ -551,14 +530,43 @@ public:
}
};
+class achievement_watch_him_die : public AchievementCriteriaScript
+{
+ public:
+ achievement_watch_him_die() : AchievementCriteriaScript("achievement_watch_him_die")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ InstanceScript* instance = target->GetInstanceScript();
+ Creature* Watcher[3];
+ if (!instance)
+ return false;
+
+ for (uint8 n = 0; n < 3; ++n)
+ {
+ Watcher[n] = ObjectAccessor::GetCreature(*target, instance->GetData64(DATA_WATCHER_GASHRA + n));
+ if (Watcher[n] && !Watcher[n]->isAlive())
+ return false;
+ }
+
+ return true;
+ }
+};
+
void AddSC_boss_krik_thir()
{
- new boss_krik_thir;
- new npc_skittering_infector;
- new npc_anub_ar_skirmisher;
- new npc_anub_ar_shadowcaster;
- new npc_watcher_gashra;
- new npc_anub_ar_warrior;
- new npc_watcher_silthik;
- new npc_watcher_narjil;
+ new boss_krik_thir();
+ new npc_skittering_infector();
+ new npc_anub_ar_skirmisher();
+ new npc_anub_ar_shadowcaster();
+ new npc_watcher_gashra();
+ new npc_anub_ar_warrior();
+ new npc_watcher_silthik();
+ new npc_watcher_narjil();
+ new achievement_watch_him_die();
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h
index a25093579bb..e19054d2f46 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h
@@ -44,7 +44,6 @@ enum Data
DATA_SPHERE2_EVENT,
DATA_JEDOGA_TRIGGER_SWITCH,
DATA_JEDOGA_RESET_INITIANDS,
- DATA_INITIAND_KILLED,
DATA_ALL_INITIAND_DEAD
};
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp
index 25164e08f65..1513bebead7 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_elder_nadox.cpp
@@ -127,12 +127,6 @@ class boss_elder_nadox : public CreatureScript
return 0;
}
- void SetData(uint32 id, uint32 data)
- {
- if (id == DATA_RESPECT_YOUR_ELDERS)
- respectYourElders = data ? true : false;
- }
-
void UpdateAI(uint32 const diff)
{
if (!UpdateVictim())
@@ -311,6 +305,9 @@ class achievement_respect_your_elders : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Nadox = target->ToCreature())
if (Nadox->AI()->GetData(DATA_RESPECT_YOUR_ELDERS))
return true;
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
index 68d1272750c..a3fd20c830e 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -63,6 +63,9 @@ const Position JedogaPosition[2] =
{372.330994f, -705.278015f, -16.179716f, 5.427970f}
};
+#define ACTION_INITIAND_KILLED 1
+#define DATA_VOLUNTEER_WORK 2
+
class boss_jedoga_shadowseeker : public CreatureScript
{
public:
@@ -89,7 +92,7 @@ public:
bool bOnGround;
bool bOpFerokFail;
bool bCanDown;
-
+ bool volunteerWork;
bool bFirstTime;
void Reset()
@@ -104,6 +107,7 @@ public:
bOpFerokFail = false;
bOnGround = false;
bCanDown = false;
+ volunteerWork = true;
if (pInstance)
{
@@ -152,6 +156,20 @@ public:
pInstance->SetData(DATA_JEDOGA_SHADOWSEEKER_EVENT, DONE);
}
+ void DoAction(int32 const action)
+ {
+ if (action == ACTION_INITIAND_KILLED)
+ volunteerWork = false;
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_VOLUNTEER_WORK)
+ return volunteerWork ? 1 : 0;
+
+ return 0;
+ }
+
void MoveInLineOfSight(Unit* who)
{
if (!pInstance || !who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER))
@@ -374,43 +392,53 @@ public:
void JustDied(Unit* Killer)
{
- if (!Killer || !pInstance) return;
+ if (!Killer || !pInstance)
+ return;
if (bWalking)
{
- Creature* boss = me->GetMap()->GetCreature(pInstance->GetData64(DATA_JEDOGA_SHADOWSEEKER));
- if (boss && !CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok) CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = true;
+ if (Creature* boss = ObjectAccessor::GetCreature(*me, pInstance->GetData64(DATA_JEDOGA_SHADOWSEEKER)))
+ {
+ if (!CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok)
+ CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = true;
+
+ boss->AI()->DoAction(ACTION_INITIAND_KILLED);
+ }
- if (Killer->GetTypeId() == TYPEID_PLAYER) pInstance->SetData(DATA_INITIAND_KILLED, 1);
pInstance->SetData64(DATA_ADD_JEDOGA_OPFER, 0);
bWalking = false;
}
- if (Killer->GetTypeId() == TYPEID_PLAYER) pInstance->SetData64(DATA_PL_JEDOGA_TARGET, Killer->GetGUID());
+ if (Killer->GetTypeId() == TYPEID_PLAYER)
+ pInstance->SetData64(DATA_PL_JEDOGA_TARGET, Killer->GetGUID());
}
void EnterCombat(Unit* who)
{
- if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who) return;
+ if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who)
+ return;
}
void AttackStart(Unit* victim)
{
- if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !victim) return;
+ if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !victim)
+ return;
ScriptedAI::AttackStart(victim);
}
void MoveInLineOfSight(Unit* who)
{
- if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who) return;
+ if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who)
+ return;
ScriptedAI::MoveInLineOfSight(who);
}
void MovementInform(uint32 uiType, uint32 uiPointId)
{
- if (uiType != POINT_MOTION_TYPE || !pInstance) return;
+ if (uiType != POINT_MOTION_TYPE || !pInstance)
+ return;
switch(uiPointId)
{
@@ -569,9 +597,30 @@ public:
}
};
+class achievement_volunteer_work : public AchievementCriteriaScript
+{
+ public:
+ achievement_volunteer_work() : AchievementCriteriaScript("achievement_volunteer_work")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Jedoga = target->ToCreature())
+ if (Jedoga->AI()->GetData(DATA_VOLUNTEER_WORK))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_jedoga_shadowseeker()
{
- new boss_jedoga_shadowseeker;
- new mob_jedoga_initiand;
- new npc_jedogas_aufseher_trigger;
+ new boss_jedoga_shadowseeker();
+ new mob_jedoga_initiand();
+ new npc_jedogas_aufseher_trigger();
+ new achievement_volunteer_work();
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp
index 55346cd8197..b10a49b7116 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp
@@ -59,9 +59,8 @@ public:
uint32 m_auiEncounter[MAX_ENCOUNTER];
uint32 spheres[2];
- uint8 InitiandCnt,
- switchtrigger,
- initiandkilled;
+ uint8 InitiandCnt;
+ uint8 switchtrigger;
std::string str_data;
@@ -81,7 +80,6 @@ public:
InitiandCnt = 0;
switchtrigger = 0;
- initiandkilled = 0;
JedogaSacrifices = 0;
JedogaTarget = 0;
}
@@ -200,8 +198,6 @@ public:
cr->RemoveCorpse();
}
}
- if (!initiandkilled && instance->IsHeroic())
- DoCompleteAchievement(ACHIEV_VOLUNTEER_WORK);
}
break;
case DATA_HERALD_VOLAZJ_EVENT: m_auiEncounter[3] = data; break;
@@ -209,7 +205,6 @@ public:
case DATA_SPHERE1_EVENT: spheres[0] = data; break;
case DATA_SPHERE2_EVENT: spheres[1] = data; break;
case DATA_JEDOGA_TRIGGER_SWITCH: switchtrigger = data; break;
- case DATA_INITIAND_KILLED: initiandkilled = data; break;
case DATA_JEDOGA_RESET_INITIANDS:
for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
{
@@ -245,7 +240,6 @@ public:
}
return 1;
case DATA_JEDOGA_TRIGGER_SWITCH: return switchtrigger;
- case DATA_INITIAND_KILLED: return initiandkilled;
}
return 0;
}
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
index bc844698fdb..847b5ddb9cc 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp
@@ -122,14 +122,6 @@ enum eEnums
//using these custom points for dragons start and end
POINT_ID_INIT = 100,
POINT_ID_LAND = 200,
-
- //Achievements
- ACHIEV_TWILIGHT_ASSIST = 2049,
- H_ACHIEV_TWILIGHT_ASSIST = 2052,
- ACHIEV_TWILIGHT_DUO = 2050,
- H_ACHIEV_TWILIGHT_DUO = 2053,
- ACHIEV_TWILIGHT_ZONE = 2051,
- H_ACHIEV_TWILIGHT_ZONE = 2054
};
#define DATA_CAN_LOOT 0
@@ -213,6 +205,8 @@ Locations TwilightEggsSarth[] =
{3257.54f, 502.285f , 58.2077f}
};
+#define TWILIGHT_ACHIEVEMENTS 1
+
/*######
## Boss Sartharion
######*/
@@ -256,7 +250,7 @@ public:
bool m_bHasCalledShadron;
bool m_bHasCalledVesperon;
- uint32 achievProgress;
+ uint8 drakeCount;
void Reset()
{
@@ -285,7 +279,7 @@ public:
me->SetHomePosition(3246.57f, 551.263f, 58.6164f, 4.66003f);
- achievProgress = 0;
+ drakeCount = 0;
// Drakes respawning system
if (pInstance)
@@ -384,20 +378,6 @@ public:
if (pVesperon && pVesperon->isAlive())
pVesperon->DisappearAndDie();
- if (achievProgress == 1)
- pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ASSIST, H_ACHIEV_TWILIGHT_ASSIST));
- else if (achievProgress == 2)
- {
- pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ASSIST, H_ACHIEV_TWILIGHT_ASSIST));
- pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_DUO, H_ACHIEV_TWILIGHT_DUO));
- }
- else if (achievProgress == 3)
- {
- pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ASSIST, H_ACHIEV_TWILIGHT_ASSIST));
- pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_DUO, H_ACHIEV_TWILIGHT_DUO));
- pInstance->DoCompleteAchievement(RAID_MODE(ACHIEV_TWILIGHT_ZONE, H_ACHIEV_TWILIGHT_ZONE));
- }
-
pInstance->SetData(TYPE_SARTHARION_EVENT, DONE);
}
}
@@ -419,13 +399,21 @@ public:
me->AddLootMode(LOOT_MODE_HARD_MODE_1); // Add 1st Drake loot mode
}
+ uint32 GetData(uint32 type)
+ {
+ if (type == TWILIGHT_ACHIEVEMENTS)
+ return drakeCount;
+
+ return 0;
+ }
+
void FetchDragons()
{
- if(!pInstance)
+ if (!pInstance)
return;
me->ResetLootMode();
- achievProgress = 0;
+ drakeCount = 0;
Creature* pFetchTene = Unit::GetCreature(*me, pInstance->GetData64(DATA_TENEBRON));
Creature* pFetchShad = Unit::GetCreature(*me, pInstance->GetData64(DATA_SHADRON));
@@ -437,10 +425,10 @@ public:
if (pFetchTene && pFetchTene->isAlive() && !pFetchTene->getVictim())
{
bCanUseWill = true;
- if(!pFetchTene->isInCombat())
+ if (!pFetchTene->isInCombat())
{
AddDrakeLootMode();
- achievProgress++;
+ ++drakeCount;
}
pFetchTene->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aTene[0].m_fX, m_aTene[0].m_fY, m_aTene[0].m_fZ);
@@ -451,10 +439,10 @@ public:
if (pFetchShad && pFetchShad->isAlive() && !pFetchShad->getVictim())
{
bCanUseWill = true;
- if(!pFetchShad->isInCombat())
+ if (!pFetchShad->isInCombat())
{
AddDrakeLootMode();
- achievProgress++;
+ ++drakeCount;
}
pFetchShad->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aShad[0].m_fX, m_aShad[0].m_fY, m_aShad[0].m_fZ);
@@ -465,10 +453,10 @@ public:
if (pFetchVesp && pFetchVesp->isAlive() && !pFetchVesp->getVictim())
{
bCanUseWill = true;
- if(!pFetchVesp->isInCombat())
+ if (!pFetchVesp->isInCombat())
{
AddDrakeLootMode();
- achievProgress++;
+ ++drakeCount;
}
pFetchVesp->GetMotionMaster()->MovePoint(POINT_ID_INIT, m_aVesp[0].m_fX, m_aVesp[0].m_fY, m_aVesp[0].m_fZ);
@@ -1710,6 +1698,66 @@ public:
};
+class achievement_twilight_assist : public AchievementCriteriaScript
+{
+ public:
+ achievement_twilight_assist() : AchievementCriteriaScript("achievement_twilight_assist")
+ {
+ }
+
+ bool OnCheck(Player* player, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Sartharion = target->ToCreature())
+ if (Sartharion->AI()->GetData(TWILIGHT_ACHIEVEMENTS) >= 1)
+ return true;
+
+ return false;
+ }
+};
+
+class achievement_twilight_duo : public AchievementCriteriaScript
+{
+ public:
+ achievement_twilight_duo() : AchievementCriteriaScript("achievement_twilight_duo")
+ {
+ }
+
+ bool OnCheck(Player* player, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Sartharion = target->ToCreature())
+ if (Sartharion->AI()->GetData(TWILIGHT_ACHIEVEMENTS) >= 2)
+ return true;
+
+ return false;
+ }
+};
+
+class achievement_twilight_zone : public AchievementCriteriaScript
+{
+ public:
+ achievement_twilight_zone() : AchievementCriteriaScript("achievement_twilight_zone")
+ {
+ }
+
+ bool OnCheck(Player* player, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Sartharion = target->ToCreature())
+ if (Sartharion->AI()->GetData(TWILIGHT_ACHIEVEMENTS) == 3)
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_sartharion()
{
new boss_sartharion();
@@ -1722,4 +1770,7 @@ void AddSC_boss_sartharion()
new npc_flame_tsunami();
new npc_twilight_fissure();
new mob_twilight_whelp();
+ new achievement_twilight_assist();
+ new achievement_twilight_duo();
+ new achievement_twilight_zone();
}
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp
index 2274b30b29a..3dcc620c87a 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_dred.cpp
@@ -283,6 +283,9 @@ class achievement_king_dred : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Dred = target->ToCreature())
if (Dred->AI()->GetData(DATA_KING_DRED) >= 6)
return true;
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
index 2672a22d26c..a92ed4abdb1 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
@@ -31,6 +31,7 @@ enum Spells
H_SPELL_WRATH_OF_MISERY = 59856,
SPELL_SUMMON_MINIONS = 59910 //Summons an army of Fetid Troll Corpses to assist the caster.
};
+
//not in db
enum Yells
{
@@ -41,6 +42,7 @@ enum Yells
SAY_REUBBLE_1 = -1600004,
SAY_REUBBLE_2 = -1600005
};
+
enum Creatures
{
CREATURE_RISEN_SHADOWCASTER = 27600,
@@ -48,16 +50,16 @@ enum Creatures
CREATURE_HULKING_CORPSE = 27597,
CREATURE_CRYSTAL_HANDLER = 26627
};
+
enum CombatPhase
{
IDLE,
PHASE_1,
PHASE_2
};
-enum Achievements
-{
- ACHIEV_OH_NOVOS = 2057
-};
+
+#define ACTION_MINION_REACHED 1
+#define DATA_OH_NOVOS 2
static Position AddSpawnPoint = { -379.20f, -816.76f, 59.70f, 0.0f };
static Position CrystalHandlerSpawnPoint = { -326.626343f, -709.956604f, 27.813314f, 0.0f };
@@ -79,7 +81,7 @@ public:
uint32 uiCrystalHandlerTimer;
uint8 crystalHandlerAmount;
- bool bAchiev;
+ bool ohNovos;
SummonList lSummons;
@@ -93,7 +95,7 @@ public:
{
Phase = IDLE;
luiCrystals.clear();
- bAchiev = true;
+ ohNovos = true;
me->CastStop();
lSummons.DespawnAll();
crystalHandlerAmount = 0;
@@ -108,10 +110,8 @@ public:
if (pInstance)
{
pInstance->SetData(DATA_NOVOS_EVENT, NOT_STARTED);
- luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_1));
- luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_2));
- luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_3));
- luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_4));
+ for (uint8 n = 0; n < 4; ++n)
+ luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_1 + n));
for (std::list<uint64>::const_iterator itr = luiCrystals.begin(); itr != luiCrystals.end(); ++itr)
{
if (GameObject* pTemp = pInstance->instance->GetGameObject(*itr))
@@ -182,12 +182,7 @@ public:
{
DoScriptText(SAY_DEATH, me);
if (pInstance)
- {
pInstance->SetData(DATA_NOVOS_EVENT, DONE);
-
- if (IsHeroic() && bAchiev)
- pInstance->DoCompleteAchievement(ACHIEV_OH_NOVOS);
- }
lSummons.DespawnAll();
}
@@ -206,6 +201,20 @@ public:
lSummons.Summon(summon);
}
+ void DoAction(int32 const action)
+ {
+ if (action == ACTION_MINION_REACHED)
+ ohNovos = false;
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_OH_NOVOS)
+ return ohNovos ? 1 : 0;
+
+ return 0;
+ }
+
void RemoveCrystal()
{
if (!luiCrystals.empty())
@@ -319,10 +328,10 @@ public:
{
if (type != POINT_MOTION_TYPE || id !=0)
return;
- if (Creature* pNovos = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_NOVOS) : 0))
+ if (Creature* Novos = ObjectAccessor::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_NOVOS) : 0))
{
- CAST_AI(boss_novos::boss_novosAI, pNovos->AI())->bAchiev = false;
- if (Unit *pTarget = CAST_AI(boss_novos::boss_novosAI, pNovos->AI())->GetRandomTarget())
+ Novos->AI()->DoAction(ACTION_MINION_REACHED);
+ if (Unit *pTarget = CAST_AI(boss_novos::boss_novosAI, Novos->AI())->GetRandomTarget())
AttackStart(pTarget);
}
}
@@ -334,9 +343,30 @@ public:
}
};
+class achievement_oh_novos : public AchievementCriteriaScript
+{
+ public:
+ achievement_oh_novos() : AchievementCriteriaScript("achievement_oh_novos")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Novos = target->ToCreature())
+ if (Novos->AI()->GetData(DATA_OH_NOVOS))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_novos()
{
- new boss_novos;
- new mob_crystal_handler;
- new mob_novos_minion;
+ new boss_novos();
+ new mob_crystal_handler();
+ new mob_novos_minion();
+ new achievement_oh_novos();
}
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
index db285306071..745c092b673 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp
@@ -34,6 +34,7 @@ enum Spells
H_SPELL_CONSUME = 59803,
H_SPELL_CONSUME_AURA = 59805,
};
+
enum Yells
{
SAY_AGGRO = -1600006,
@@ -42,16 +43,15 @@ enum Yells
SAY_EXPLODE = -1600009,
SAY_DEATH = -1600010
};
-enum Achievements
-{
- ACHIEV_CONSUMPTION_JUNCTION = 2151
-};
+
enum Creatures
{
NPC_DRAKKARI_INVADER_1 = 27753,
NPC_DRAKKARI_INVADER_2 = 27709
};
+#define DATA_CONSUMPTION_JUNCTION 1
+
Position AddSpawnPoint = { -260.493011f, -622.968018f, 26.605301f, 3.036870f };
class boss_trollgore : public CreatureScript
@@ -73,7 +73,7 @@ public:
uint32 uiExplodeCorpseTimer;
uint32 uiSpawnTimer;
- bool bAchiev;
+ bool consumptionJunction;
SummonList lSummons;
@@ -88,7 +88,7 @@ public:
uiExplodeCorpseTimer = 3*IN_MILLISECONDS;
uiSpawnTimer = urand(30*IN_MILLISECONDS, 40*IN_MILLISECONDS);
- bAchiev = IsHeroic();
+ consumptionJunction = true;
lSummons.DespawnAll();
@@ -127,11 +127,11 @@ public:
uiConsumeTimer = 15*IN_MILLISECONDS;
} else uiConsumeTimer -= diff;
- if (bAchiev)
+ if (consumptionJunction)
{
- Aura *pConsumeAura = me->GetAura(DUNGEON_MODE(SPELL_CONSUME_AURA, H_SPELL_CONSUME_AURA));
- if (pConsumeAura && pConsumeAura->GetStackAmount() > 9)
- bAchiev = false;
+ Aura* ConsumeAura = me->GetAura(DUNGEON_MODE(SPELL_CONSUME_AURA, H_SPELL_CONSUME_AURA));
+ if (ConsumeAura && ConsumeAura->GetStackAmount() > 9)
+ consumptionJunction = false;
}
if (uiCrushTimer <= diff)
@@ -163,11 +163,15 @@ public:
lSummons.DespawnAll();
if (pInstance)
- {
- if (bAchiev)
- pInstance->DoCompleteAchievement(ACHIEV_CONSUMPTION_JUNCTION);
pInstance->SetData(DATA_TROLLGORE_EVENT, DONE);
- }
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_CONSUMPTION_JUNCTION)
+ return consumptionJunction ? 1 : 0;
+
+ return 0;
}
void KilledUnit(Unit* victim)
@@ -191,7 +195,28 @@ public:
}
};
+class achievement_consumption_junction : public AchievementCriteriaScript
+{
+ public:
+ achievement_consumption_junction() : AchievementCriteriaScript("achievement_consumption_junction")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Trollgore = target->ToCreature())
+ if (Trollgore->AI()->GetData(DATA_CONSUMPTION_JUNCTION))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_trollgore()
{
- new boss_trollgore;
+ new boss_trollgore();
+ new achievement_consumption_junction();
}
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
index 38af9ad3a47..c7f54e27191 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp
@@ -77,7 +77,6 @@ enum Events
enum eEnum
{
- ACHIEV_THREE_FACED = 4523,
DISPLAY_ANGER = 30148,
DISPLAY_SORROW = 30149,
DISPLAY_DESIRE = 30150,
@@ -115,6 +114,8 @@ struct outroPosition
{ { 0, 0 }, { 0.0f, 0.0f, 0.0f, 0.0f } }
};
+#define DATA_THREE_FACED 1
+
class boss_devourer_of_souls : public CreatureScript
{
public:
@@ -143,7 +144,7 @@ class boss_devourer_of_souls : public CreatureScript
events.Reset();
summons.DespawnAll();
- threeFaceAchievement = true;
+ threeFaced = true;
mirroredSoulTarget = 0;
instance->SetData(DATA_DEVOURER_EVENT, NOT_STARTED);
@@ -214,9 +215,6 @@ class boss_devourer_of_souls : public CreatureScript
instance->SetData(DATA_DEVOURER_EVENT, DONE);
- if (threeFaceAchievement && IsHeroic())
- instance->DoCompleteAchievement(ACHIEV_THREE_FACED);
-
int32 entryIndex;
if (instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE)
entryIndex = 0;
@@ -239,7 +237,15 @@ class boss_devourer_of_souls : public CreatureScript
void SpellHitTarget(Unit* /*target*/, const SpellEntry *spell)
{
if (spell->Id == H_SPELL_PHANTOM_BLAST)
- threeFaceAchievement = false;
+ threeFaced = false;
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_THREE_FACED)
+ return threeFaced;
+
+ return 0;
}
void UpdateAI(const uint32 diff)
@@ -344,7 +350,7 @@ class boss_devourer_of_souls : public CreatureScript
}
private:
- bool threeFaceAchievement;
+ bool threeFaced;
// wailing soul event
float beamAngle;
@@ -360,7 +366,28 @@ class boss_devourer_of_souls : public CreatureScript
}
};
+class achievement_three_faced : public AchievementCriteriaScript
+{
+ public:
+ achievement_three_faced() : AchievementCriteriaScript("achievement_three_faced")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Devourer = target->ToCreature())
+ if (Devourer->AI()->GetData(DATA_THREE_FACED))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_devourer_of_souls()
{
new boss_devourer_of_souls();
+ new achievement_three_faced();
}
diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
index 93acb74cee6..96f7fb200a5 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp
@@ -32,7 +32,6 @@ enum Spells
SPELL_STAMPEDE = 55218,
SPELL_WHIRLING_SLASH = 55250,
H_SPELL_WHIRLING_SLASH = 59824,
- SPELL_ECK_RESIDUE = 55817
};
//Yells
@@ -50,11 +49,6 @@ enum Yells
SAY_TRANSFORM_2 = -1604009
};
-enum Achievements
-{
- ACHIEV_WHAT_THE_ECK = 1864,
-};
-
enum Displays
{
DISPLAY_RHINO = 26265,
@@ -276,21 +270,7 @@ public:
DoScriptText(SAY_DEATH, me);
if (pInstance)
- {
- if (IsHeroic())
- {
- AchievementEntry const *achievWhatTheEck = GetAchievementStore()->LookupEntry(ACHIEV_WHAT_THE_ECK);
- if (achievWhatTheEck)
- {
- Map::PlayerList const &players = pInstance->instance->GetPlayers();
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- if (itr->getSource()->HasAura(SPELL_ECK_RESIDUE))
- itr->getSource()->CompletedAchievement(achievWhatTheEck);
- }
- }
-
pInstance->SetData(DATA_GAL_DARAH_EVENT, DONE);
- }
}
void KilledUnit(Unit* victim)
@@ -313,6 +293,9 @@ class achievement_share_the_love : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* GalDarah = target->ToCreature())
if (GalDarah->AI()->GetData(DATA_SHARE_THE_LOVE) >= 5)
return true;
diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
index d02a906b79b..660cf571c68 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
@@ -31,11 +31,6 @@ enum eSpells
SPELL_TRANSFORMATION = 55098, //Periodic, The caster transforms into a powerful mammoth, increasing Physical damage done by 25% and granting immunity to Stun effects.
};
-enum eArchivements
-{
- ACHIEV_LESS_RABI = 2040
-};
-
enum eSays
{
SAY_AGGRO = -1604010,
@@ -48,6 +43,8 @@ enum eSays
EMOTE_TRANSFORM = -1604017
};
+#define DATA_LESS_RABI 1
+
class boss_moorabi : public CreatureScript
{
public:
@@ -146,17 +143,20 @@ public:
DoMeleeAttackIfReady();
}
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_LESS_RABI)
+ return bPhase ? 0 : 1;
+
+ return 0;
+ }
+
void JustDied(Unit* /*pKiller*/)
{
DoScriptText(SAY_DEATH, me);
if (pInstance)
- {
pInstance->SetData(DATA_MOORABI_EVENT, DONE);
-
- if (IsHeroic() && !bPhase)
- pInstance->DoCompleteAchievement(ACHIEV_LESS_RABI);
- }
}
void KilledUnit(Unit* pVictim)
@@ -170,7 +170,28 @@ public:
};
+class achievement_less_rabi : public AchievementCriteriaScript
+{
+ public:
+ achievement_less_rabi() : AchievementCriteriaScript("achievement_less_rabi")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Moorabi = target->ToCreature())
+ if (Moorabi->AI()->GetData(DATA_LESS_RABI))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_moorabi()
{
new boss_moorabi();
+ new achievement_less_rabi();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
index b11e5eb82f3..2fc5a8499c1 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
@@ -216,6 +216,9 @@ class achievement_safety_dance : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Heigan = target->ToCreature())
if (Heigan->AI()->GetData(DATA_SAFETY_DANCE))
return true;
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
index eece702f984..98f821eb153 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp
@@ -263,6 +263,9 @@ class achievement_chaos_theory : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Anomalus = target->ToCreature())
if (Anomalus->AI()->GetData(DATA_CHAOS_THEORY))
return true;
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
index 7a5261a0548..c0949cb03fe 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
@@ -32,6 +32,7 @@ enum Spells
SPELL_INTENSE_COLD = 48094,
SPELL_INTENSE_COLD_TRIGGERED = 48095
};
+
enum Yells
{
//Yell
@@ -41,13 +42,11 @@ enum Yells
SAY_DEATH = -1576043,
SAY_CRYSTAL_NOVA = -1576044
};
-enum Achievements
-{
- ACHIEV_INTENSE_COLD = 2036
-};
+
enum Misc
{
- DATA_CONTAINMENT_SPHERES = 3
+ DATA_INTENSE_COLD = 1,
+ DATA_CONTAINMENT_SPHERES = 3,
};
class boss_keristrasza : public CreatureScript
@@ -69,16 +68,14 @@ public:
InstanceScript* pInstance;
+ std::list<uint64> intenseColdList;
+ uint64 auiContainmentSphereGUIDs[DATA_CONTAINMENT_SPHERES];
uint32 uiCrystalfireBreathTimer;
uint32 uiCrystalChainsCrystalizeTimer;
uint32 uiTailSweepTimer;
+ bool intenseCold;
bool bEnrage;
- uint64 auiContainmentSphereGUIDs[DATA_CONTAINMENT_SPHERES];
-
- uint32 uiCheckIntenseColdTimer;
- bool bMoreThanTwoIntenseCold; // needed for achievement: Intense Cold(2036)
-
void Reset()
{
uiCrystalfireBreathTimer = 14*IN_MILLISECONDS;
@@ -86,8 +83,8 @@ public:
uiTailSweepTimer = 5*IN_MILLISECONDS;
bEnrage = false;
- uiCheckIntenseColdTimer = 2*IN_MILLISECONDS;
- bMoreThanTwoIntenseCold = false;
+ intenseCold = true;
+ intenseColdList.clear();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
@@ -111,11 +108,7 @@ public:
DoScriptText(SAY_DEATH, me);
if (pInstance)
- {
- if (IsHeroic() && !bMoreThanTwoIntenseCold)
- pInstance->DoCompleteAchievement(ACHIEV_INTENSE_COLD);
pInstance->SetData(DATA_KERISTRASZA_EVENT, DONE);
- }
}
void KilledUnit(Unit* /*victim*/)
@@ -164,30 +157,17 @@ public:
}
}
+ void SetGUID(uint64 const& guid, int32 id/* = 0 */)
+ {
+ if (id == DATA_INTENSE_COLD)
+ intenseColdList.push_back(guid);
+ }
+
void UpdateAI(const uint32 diff)
{
if (!UpdateVictim())
return;
- if (uiCheckIntenseColdTimer < diff && !bMoreThanTwoIntenseCold)
- {
- std::list<HostileReference*> ThreatList = me->getThreatManager().getThreatList();
- for (std::list<HostileReference*>::const_iterator itr = ThreatList.begin(); itr != ThreatList.end(); ++itr)
- {
- Unit *pTarget = Unit::GetUnit(*me, (*itr)->getUnitGuid());
- if (!pTarget || pTarget->GetTypeId() != TYPEID_PLAYER)
- continue;
-
- Aura *AuraIntenseCold = pTarget->GetAura(SPELL_INTENSE_COLD_TRIGGERED);
- if (AuraIntenseCold && AuraIntenseCold->GetStackAmount() > 2)
- {
- bMoreThanTwoIntenseCold = true;
- break;
- }
- }
- uiCheckIntenseColdTimer = 2*IN_MILLISECONDS;
- } else uiCheckIntenseColdTimer -= diff;
-
if (!bEnrage && HealthBelowPct(25))
{
DoScriptText(SAY_ENRAGE, me);
@@ -246,8 +226,63 @@ public:
};
+class spell_intense_cold : public SpellScriptLoader
+{
+ public:
+ spell_intense_cold() : SpellScriptLoader("spell_intense_cold") { }
+
+ class spell_intense_cold_AuraScript : public AuraScript
+ {
+ PrepareAuraScript(spell_intense_cold_AuraScript);
+
+ void HandlePeriodicTick(AuraEffect const* aurEff)
+ {
+ Unit* caster = GetCaster();
+ if (!caster)
+ return;
+
+ if (aurEff->GetBase()->GetStackAmount() >= 2)
+ caster->GetAI()->SetGUID(GetTarget()->GetGUID(), DATA_INTENSE_COLD);
+ }
+
+ void Register()
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_intense_cold_AuraScript::HandlePeriodicTick, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE);
+ }
+ };
+
+ AuraScript* GetAuraScript() const
+ {
+ return new spell_intense_cold_AuraScript();
+ }
+};
+
+class achievement_intense_cold : public AchievementCriteriaScript
+{
+ public:
+ achievement_intense_cold() : AchievementCriteriaScript("achievement_intense_cold")
+ {
+ }
+
+ bool OnCheck(Player* player, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ std::list<uint64> intenseColdList = CAST_AI(boss_keristrasza::boss_keristraszaAI, target->ToCreature()->AI())->intenseColdList;
+ if (!intenseColdList.empty())
+ for (std::list<uint64>::iterator itr = intenseColdList.begin(); itr != intenseColdList.end(); ++itr)
+ if (player->GetGUID() == *itr)
+ return false;
+
+ return true;
+ }
+};
+
void AddSC_boss_keristrasza()
{
new boss_keristrasza();
new containment_sphere();
+ new achievement_intense_cold();
+ new spell_intense_cold();
}
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
index 66d98186975..3440ba0a028 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp
@@ -32,12 +32,14 @@ enum Spells
SPELL_FROST_MAGUS_VISUAL = 47706,
SPELL_ARCANE_MAGUS_VISUAL = 47704
};
+
enum Creatures
{
MOB_FIRE_MAGUS = 26928,
MOB_FROST_MAGUS = 26930,
MOB_ARCANE_MAGUS = 26929
};
+
enum Yells
{
SAY_AGGRO = -1576000,
@@ -47,11 +49,9 @@ enum Yells
SAY_SPLIT_1 = -1576004,
SAY_SPLIT_2 = -1576005,
};
-enum Achievements
-{
- ACHIEV_SPLIT_PERSONALITY = 2150,
- ACHIEV_TIMER = 5*IN_MILLISECONDS
-};
+
+#define ACTION_MAGUS_DEAD 1
+#define DATA_SPLIT_PERSONALITY 2
const Position CenterOfRoom = {504.80f, 89.07f, -16.12f, 6.27f};
@@ -82,17 +82,16 @@ public:
bool bFrostMagusDead;
bool bArcaneMagusDead;
bool bIsWaitingToAppear;
- bool bIsAchievementTimerRunning;
uint32 uiIsWaitingToAppearTimer;
uint32 uiIceNovaTimer;
uint32 uiFireBombTimer;
uint32 uiGravityWellTimer;
uint32 uiCooldown;
- uint32 uiAchievementTimer;
uint8 Phase;
- uint8 uiAchievementProgress;
+ uint8 splitPersonality;
+ time_t time[3];
void Reset()
{
@@ -107,10 +106,10 @@ public:
uiFrostMagusGUID = 0;
uiArcaneMagusGUID = 0;
- uiAchievementProgress = 0;
- uiAchievementTimer = 0;
+ for (uint8 n = 0; n < 3; ++n)
+ time[n] = 0;
- bIsAchievementTimerRunning = false;
+ splitPersonality = 0;
bIsWaitingToAppear = false;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -133,11 +132,7 @@ public:
DoScriptText(SAY_DEATH, me);
if (pInstance)
- {
- if (IsHeroic() && uiAchievementProgress == 2)
- pInstance->DoCompleteAchievement(ACHIEV_SPLIT_PERSONALITY);
pInstance->SetData(DATA_MAGUS_TELESTRA_EVENT, DONE);
- }
}
void KilledUnit(Unit* /*victim*/)
@@ -145,6 +140,28 @@ public:
DoScriptText(SAY_KILL, me);
}
+ void DoAction(int32 const action)
+ {
+ if (action == ACTION_MAGUS_DEAD)
+ {
+ uint8 i = 0;
+ while (time[i] != 0)
+ ++i;
+
+ time[i] = sWorld->GetGameTime();
+ if (i == 2 && (time[2] - time[1] < 5) && (time[1] - time[0] < 5))
+ ++splitPersonality;
+ }
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_SPLIT_PERSONALITY)
+ return splitPersonality;
+
+ return 0;
+ }
+
uint64 SplitPersonality(uint32 entry)
{
if (Creature* Summoned = me->SummonCreature(entry, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1*IN_MILLISECONDS))
@@ -181,18 +198,18 @@ public:
if (summon->GetGUID() == uiFireMagusGUID)
{
+ me->AI()->DoAction(ACTION_MAGUS_DEAD);
bFireMagusDead = true;
- bIsAchievementTimerRunning = true;
}
else if (summon->GetGUID() == uiFrostMagusGUID)
{
+ me->AI()->DoAction(ACTION_MAGUS_DEAD);
bFrostMagusDead = true;
- bIsAchievementTimerRunning = true;
}
else if (summon->GetGUID() == uiArcaneMagusGUID)
{
+ me->AI()->DoAction(ACTION_MAGUS_DEAD);
bArcaneMagusDead = true;
- bIsAchievementTimerRunning = true;
}
}
@@ -216,12 +233,10 @@ public:
if ((Phase == 1) ||(Phase == 3))
{
- if (bIsAchievementTimerRunning)
- uiAchievementTimer += diff;
if (bFireMagusDead && bFrostMagusDead && bArcaneMagusDead)
{
- if (uiAchievementTimer <= ACHIEV_TIMER)
- uiAchievementProgress +=1;
+ for (uint8 n = 0; n < 3; ++n)
+ time[n] = 0;
me->GetMotionMaster()->Clear();
me->GetMap()->CreatureRelocation(me, CenterOfRoom.GetPositionX(), CenterOfRoom.GetPositionY(), CenterOfRoom.GetPositionZ(), CenterOfRoom.GetOrientation());
DoCast(me, SPELL_TELESTRA_BACK);
@@ -236,8 +251,6 @@ public:
bIsWaitingToAppear = true;
uiIsWaitingToAppearTimer = 4*IN_MILLISECONDS;
DoScriptText(SAY_MERGE, me);
- bIsAchievementTimerRunning = false;
- uiAchievementTimer = 0;
}
else
return;
@@ -324,7 +337,28 @@ public:
};
+class achievement_split_personality : public AchievementCriteriaScript
+{
+ public:
+ achievement_split_personality() : AchievementCriteriaScript("achievement_split_personality")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Telestra = target->ToCreature())
+ if (Telestra->AI()->GetData(DATA_SPLIT_PERSONALITY) == 2)
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_magus_telestra()
{
new boss_magus_telestra();
+ new achievement_split_personality();
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
index 2377c5e908a..808f0d6a8e0 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp
@@ -60,11 +60,7 @@ enum SjonnirCreatures
CREATURE_IRON_SLUDGE = 28165
};
-enum Misc
-{
- DATA_TIME_BEFORE_OOZE = 150000, //2min 30 secs
- ACHIEV_ABUSE_THE_OOZE = 2155
-};
+#define DATA_TIME_BEFORE_OOZE 150000 //2min 30 secs
struct Locations
{
@@ -73,10 +69,13 @@ struct Locations
static Locations PipeLocations[] =
{
- {1295.44f, 734.07f, 200.3f}, //left
- {1297.7f, 595.6f, 199.9f} //right
+ {1295.44f, 734.07f, 200.3f}, //left
+ {1297.7f, 595.6f, 199.9f} //right
};
+#define ACTION_OOZE_DEAD 1
+#define DATA_ABUSE_THE_OOZE 2
+
static Locations CenterPoint = {1295.21f, 667.157f, 189.691f};
class boss_sjonnir : public CreatureScript
@@ -105,7 +104,7 @@ public:
uint32 uiSummonTimer;
uint32 uiFrenzyTimer;
uint32 uiEncounterTimer;
- uint32 uiKilledIronSludges;
+ uint8 abuseTheOoze;
SummonList lSummons;
@@ -122,7 +121,7 @@ public:
uiLightningRingTimer = 30000 + rand()%5000;
uiSummonTimer = 5000;
uiFrenzyTimer = 300000; //5 minutes
- uiKilledIronSludges = 0;
+ abuseTheOoze = 0;
lSummons.DespawnAll();
@@ -221,11 +220,7 @@ public:
lSummons.DespawnAll();
if (pInstance)
- {
pInstance->SetData(DATA_SJONNIR_EVENT, DONE);
- if (IsHeroic() && uiKilledIronSludges > 4)
- pInstance->DoCompleteAchievement(ACHIEV_ABUSE_THE_OOZE);
- }
}
void KilledUnit(Unit* victim)
{
@@ -234,9 +229,18 @@ public:
DoScriptText(RAND(SAY_SLAY_1, SAY_SLAY_2, SAY_SLAY_3), me);
}
- void KilledIronSludge()
+ void DoAction(int32 const action)
{
- ++uiKilledIronSludges;
+ if (action == ACTION_OOZE_DEAD)
+ ++abuseTheOoze;
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_ABUSE_THE_OOZE)
+ return abuseTheOoze;
+
+ return 0;
}
};
@@ -307,16 +311,37 @@ public:
void JustDied(Unit* /*pKiller*/)
{
if (pInstance)
- if (Creature* pSjonnir = Unit::GetCreature(*me, pInstance->GetData64(DATA_SJONNIR)))
- CAST_AI(boss_sjonnir::boss_sjonnirAI, pSjonnir->AI())->KilledIronSludge();
+ if (Creature* Sjonnir = ObjectAccessor::GetCreature(*me, pInstance->GetData64(DATA_SJONNIR)))
+ Sjonnir->AI()->DoAction(ACTION_OOZE_DEAD);
}
};
};
+class achievement_abuse_the_ooze : public AchievementCriteriaScript
+{
+ public:
+ achievement_abuse_the_ooze() : AchievementCriteriaScript("achievement_abuse_the_ooze")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Sjonnir = target->ToCreature())
+ if (Sjonnir->AI()->GetData(DATA_ABUSE_THE_OOZE) >= 5)
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_sjonnir()
{
new boss_sjonnir();
new mob_malformed_ooze();
new mob_iron_sludge();
+ new achievement_abuse_the_ooze();
}
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
index f237871ef90..2af26df3829 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
@@ -110,7 +110,9 @@ enum Spells
H_SPELL_DARK_MATTER = 59868,
//Abedneum
SPELL_SEARING_GAZE = 51136,
- H_SPELL_SEARING_GAZE = 59867
+ H_SPELL_SEARING_GAZE = 59867,
+
+ SPELL_REWARD_ACHIEVEMENT = 59046,
};
enum Quests
@@ -118,13 +120,9 @@ enum Quests
QUEST_HALLS_OF_STONE = 13207
};
-enum Achievements
-{
- ACHIEV_BRANN_SPANKIN_NEW = 2154
-};
-
#define GOSSIP_ITEM_START "Brann, it would be our honor!"
#define GOSSIP_ITEM_PROGRESS "Let's move Brann, enough of the history lessons!"
+#define DATA_BRANN_SPARKLIN_NEWS 1
static Position SpawnLocations[]=
{
@@ -184,7 +182,7 @@ public:
}
void UpdateFacesList()
- {
+ {
/*GetCreatureListWithEntryInGrid(lKaddrakGUIDList, me, CREATURE_KADDRAK, 50.0f);
if (!lKaddrakGUIDList.empty())
{
@@ -315,7 +313,7 @@ public:
bool bIsBattle;
bool bIsLowHP;
- bool bHasBeenDamaged;
+ bool brannSparklinNews;
void Reset()
{
@@ -323,10 +321,10 @@ public:
{
bIsLowHP = false;
bIsBattle = false;
- bHasBeenDamaged = false;
uiStep = 0;
uiPhaseTimer = 0;
uiControllerGUID = 0;
+ brannSparklinNews = true;
DespawnDwarf();
@@ -425,8 +423,16 @@ public:
void DamageTaken(Unit* /*done_by*/, uint32 & /*damage*/)
{
- if (!bHasBeenDamaged)
- bHasBeenDamaged = true;
+ if (brannSparklinNews)
+ brannSparklinNews = false;
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_BRANN_SPARKLIN_NEWS)
+ return brannSparklinNews ? 1 : 0;
+
+ return 0;
}
void UpdateEscortAI(const uint32 uiDiff)
@@ -590,17 +596,8 @@ public:
case 29:
DoScriptText(SAY_EVENT_END_02, me);
if (pInstance)
- {
pInstance->SetData(DATA_BRANN_EVENT, DONE);
-
- // Achievement criteria is with spell 59046 which does not exist.
- // There is thus no way it can be given by casting the spell on the players.
- pInstance->DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, 59046);
-
- if (!bHasBeenDamaged)
- pInstance->DoCompleteAchievement(ACHIEV_BRANN_SPANKIN_NEW);
- }
-
+ me->CastSpell(me, SPELL_REWARD_ACHIEVEMENT, true);
JumpToNextStep(5500);
break;
case 30:
@@ -738,8 +735,29 @@ public:
};
+class achievement_brann_spankin_new : public AchievementCriteriaScript
+{
+ public:
+ achievement_brann_spankin_new() : AchievementCriteriaScript("achievement_brann_spankin_new")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Brann = target->ToCreature())
+ if (Brann->AI()->GetData(DATA_BRANN_SPARKLIN_NEWS))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_halls_of_stone()
{
new npc_brann_hos();
new mob_tribuna_controller();
+ new achievement_brann_spankin_new();
}
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_auriaya.cpp
index ee0dd85519c..0684e8a4fac 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_auriaya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_auriaya.cpp
@@ -113,7 +113,7 @@ class boss_auriaya : public CreatureScript
{
_Reset();
DefenderGUID = 0;
- defenderLifes = 8;
+ defenderLives = 8;
crazyCatLady = true;
nineLives = false;
}
@@ -165,8 +165,8 @@ class boss_auriaya : public CreatureScript
SetData(DATA_CRAZY_CAT_LADY, 0);
break;
case ACTION_RESPAWN_DEFENDER:
- --defenderLifes;
- if (!defenderLifes)
+ --defenderLives;
+ if (!defenderLives)
{
SetData(DATA_NINE_LIVES, 1);
break;
@@ -247,8 +247,8 @@ class boss_auriaya : public CreatureScript
if (Creature* Defender = ObjectAccessor::GetCreature(*me, DefenderGUID))
{
Defender->Respawn();
- if (defenderLifes)
- Defender->SetAuraStack(SPELL_FERAL_ESSENCE, Defender, defenderLifes);
+ if (defenderLives)
+ Defender->SetAuraStack(SPELL_FERAL_ESSENCE, Defender, defenderLives);
Defender->SetInCombatWithZone();
if (!Defender->isInCombat())
Defender->AI()->AttackStart(me->getVictim());
@@ -273,7 +273,7 @@ class boss_auriaya : public CreatureScript
private:
uint64 DefenderGUID;
- uint8 defenderLifes;
+ uint8 defenderLives;
bool crazyCatLady;
bool nineLives;
};
@@ -507,6 +507,34 @@ class spell_auriaya_strenght_of_the_pack : public SpellScriptLoader
}
};
+class spell_auriaya_sentinel_blast : public SpellScriptLoader
+{
+ public:
+ spell_auriaya_sentinel_blast() : SpellScriptLoader("spell_auriaya_sentinel_blast") { }
+
+ class spell_auriaya_sentinel_blast_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_auriaya_sentinel_blast_SpellScript);
+
+ void FilterTargets(std::list<Unit*>& unitList)
+ {
+ unitList.remove_if(PlayerOrPetCheck());
+ }
+
+ void Register()
+ {
+ OnUnitTargetSelect += SpellUnitTargetFn(spell_auriaya_sentinel_blast_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_AREA_ENEMY_SRC);
+ OnUnitTargetSelect += SpellUnitTargetFn(spell_auriaya_sentinel_blast_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_AREA_ENEMY_SRC);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_auriaya_sentinel_blast_SpellScript();
+ }
+};
+
+
class achievement_nine_lives : public AchievementCriteriaScript
{
public:
@@ -516,6 +544,9 @@ class achievement_nine_lives : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Auriaya = target->ToCreature())
if (Auriaya->AI()->GetData(DATA_NINE_LIVES))
return true;
@@ -533,6 +564,9 @@ class achievement_crazy_cat_lady : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Auriaya = target->ToCreature())
if (Auriaya->AI()->GetData(DATA_CRAZY_CAT_LADY))
return true;
@@ -548,6 +582,7 @@ void AddSC_boss_auriaya()
new npc_feral_defender();
new npc_sanctum_sentry();
new spell_auriaya_strenght_of_the_pack();
+ new spell_auriaya_sentinel_blast();
new achievement_nine_lives();
new achievement_crazy_cat_lady();
}
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
index 007ad1fb25b..209e3ce2ece 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_flame_leviathan.cpp
@@ -158,20 +158,6 @@ enum Yells
SAY_OVERLOAD_3 = -1603075,
};
-enum AchievementData
-{
- ACHIEV_10_NUKED_FROM_ORBIT = 2915,
- ACHIEV_25_NUKED_FROM_ORBIT = 2917,
- ACHIEV_10_ORBITAL_BOMBARDMENT = 2913,
- ACHIEV_25_ORBITAL_BOMBARDMENT = 2918,
- ACHIEV_10_ORBITAL_DEVASTATION = 2914,
- ACHIEV_25_ORBITAL_DEVASTATION = 2916,
- ACHIEV_10_ORBIT_UARY = 3056,
- ACHIEV_25_ORBIT_UARY = 3057,
- ACHIEV_10_SIEGE_OF_ULDUAR = 2886,
- ACHIEV_25_SIEGE_OF_ULDUAR = 2887,
-};
-
enum actions
{
ACTION_TOWER_OF_STORM_DESTROYED = 1,
@@ -212,6 +198,8 @@ Position const PosDemolisher[5] =
{-798.01f, -227.24f, 429.84f, 1.446f},
};
+#define DATA_ORBIT_ACHIEVEMENTS 1
+
class boss_flame_leviathan : public CreatureScript
{
public:
@@ -321,21 +309,6 @@ class boss_flame_leviathan : public CreatureScript
{
_JustDied();
DoScriptText(SAY_DEATH, me);
-
- if (ActiveTowers)
- {
- switch (ActiveTowersCount)
- {
- case 4:
- instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBIT_UARY, ACHIEV_25_ORBIT_UARY));
- case 3:
- instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_NUKED_FROM_ORBIT, ACHIEV_25_NUKED_FROM_ORBIT));
- case 2:
- instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_DEVASTATION, ACHIEV_25_ORBITAL_DEVASTATION));
- case 1:
- instance->DoCompleteAchievement(RAID_MODE(ACHIEV_10_ORBITAL_BOMBARDMENT, ACHIEV_25_ORBITAL_BOMBARDMENT));
- }
- }
}
void SpellHit(Unit* /*caster*/, SpellEntry const* spell)
@@ -358,6 +331,8 @@ class boss_flame_leviathan : public CreatureScript
return Shutout ? 1 : 0;
case DATA_UNBROKEN:
return Unbroken ? 1 : 0;
+ case DATA_ORBIT_ACHIEVEMENTS:
+ return ActiveTowersCount;
default:
break;
}
@@ -846,15 +821,14 @@ class npc_mechanolift : public CreatureScript
}
};
-// WHY IS THIS CALLED spell_???
-class spell_pool_of_tar : public CreatureScript
+class npc_pool_of_tar : public CreatureScript
{
public:
- spell_pool_of_tar() : CreatureScript("spell_pool_of_tar") { }
+ npc_pool_of_tar() : CreatureScript("npc_pool_of_tar") { }
- struct spell_pool_of_tarAI : public ScriptedAI
+ struct npc_pool_of_tarAI : public ScriptedAI
{
- spell_pool_of_tarAI(Creature* creature) : ScriptedAI(creature)
+ npc_pool_of_tarAI(Creature* creature) : ScriptedAI(creature)
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetReactState(REACT_PASSIVE);
@@ -877,7 +851,7 @@ class spell_pool_of_tar : public CreatureScript
CreatureAI* GetAI(Creature* creature) const
{
- return new spell_pool_of_tarAI(creature);
+ return new npc_pool_of_tarAI(creature);
}
};
@@ -1412,6 +1386,78 @@ class achievement_unbroken : public AchievementCriteriaScript
}
};
+class achievement_orbital_bombardment : public AchievementCriteriaScript
+{
+ public:
+ achievement_orbital_bombardment() : AchievementCriteriaScript("achievement_orbital_bombardment") { }
+
+ bool OnCheck(Player* /*source*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Leviathan = target->ToCreature())
+ if (Leviathan->AI()->GetData(DATA_ORBIT_ACHIEVEMENTS) >= 1)
+ return true;
+
+ return false;
+ }
+};
+
+class achievement_orbital_devastation : public AchievementCriteriaScript
+{
+ public:
+ achievement_orbital_devastation() : AchievementCriteriaScript("achievement_orbital_devastation") { }
+
+ bool OnCheck(Player* /*source*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Leviathan = target->ToCreature())
+ if (Leviathan->AI()->GetData(DATA_ORBIT_ACHIEVEMENTS) >= 2)
+ return true;
+
+ return false;
+ }
+};
+
+class achievement_nuked_from_orbit : public AchievementCriteriaScript
+{
+ public:
+ achievement_nuked_from_orbit() : AchievementCriteriaScript("achievement_nuked_from_orbit") { }
+
+ bool OnCheck(Player* /*source*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Leviathan = target->ToCreature())
+ if (Leviathan->AI()->GetData(DATA_ORBIT_ACHIEVEMENTS) >= 3)
+ return true;
+
+ return false;
+ }
+};
+
+class achievement_orbit_uary : public AchievementCriteriaScript
+{
+ public:
+ achievement_orbit_uary() : AchievementCriteriaScript("achievement_orbit_uary") { }
+
+ bool OnCheck(Player* /*source*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Leviathan = target->ToCreature())
+ if (Leviathan->AI()->GetData(DATA_ORBIT_ACHIEVEMENTS) == 4)
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_flame_leviathan()
{
new boss_flame_leviathan();
@@ -1421,7 +1467,7 @@ void AddSC_boss_flame_leviathan()
new boss_flame_leviathan_overload_device();
new boss_flame_leviathan_safety_container();
new npc_mechanolift();
- new spell_pool_of_tar();
+ new npc_pool_of_tar();
new npc_colossus();
new npc_thorims_hammer();
new npc_mimirons_inferno();
@@ -1437,4 +1483,8 @@ void AddSC_boss_flame_leviathan()
new achievement_three_car_garage_siege();
new achievement_shutout();
new achievement_unbroken();
+ new achievement_orbital_bombardment();
+ new achievement_orbital_devastation();
+ new achievement_nuked_from_orbit();
+ new achievement_orbit_uary();
}
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp
index bcd22a5c248..b3dea49203b 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_freya.cpp
@@ -1620,6 +1620,9 @@ class achievement_knock_on_wood : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Freya = target->ToCreature())
if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) >= 1)
return true;
@@ -1637,6 +1640,9 @@ class achievement_knock_knock_on_wood : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Freya = target->ToCreature())
if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) >= 2)
return true;
@@ -1654,6 +1660,9 @@ class achievement_knock_knock_knock_on_wood : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Freya = target->ToCreature())
if (Freya->AI()->GetData(DATA_KNOCK_ON_WOOD) == 3)
return true;
@@ -1671,6 +1680,9 @@ class achievement_getting_back_to_nature : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Freya = target->ToCreature())
if (Freya->AI()->GetData(DATA_GETTING_BACK_TO_NATURE) >= 25)
return true;
diff --git a/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp
index cbb4550a3e2..f45b0815abe 100644
--- a/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp
+++ b/src/server/scripts/Northrend/Ulduar/ulduar/boss_general_vezax.cpp
@@ -203,7 +203,7 @@ class boss_general_vezax : public CreatureScript
void SpellHitTarget(Unit* who, SpellEntry const* spell)
{
if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == SPELL_SHADOW_CRASH_HIT)
- SetData(DATA_SHADOWDODGER, 0);
+ shadowDodger = false;
}
void KilledUnit(Unit* /*who*/)
@@ -245,25 +245,12 @@ class boss_general_vezax : public CreatureScript
return 0;
}
- void SetData(uint32 id, uint32 data)
- {
- switch (id)
- {
- case DATA_SHADOWDODGER:
- shadowDodger = data ? true : false;
- break;
- case DATA_SMELL_SARONITE:
- smellSaronite = data ? true : false;
- break;
- }
- }
-
void DoAction(int32 const action)
{
switch (action)
{
case ACTION_VAPORS_DIE:
- SetData(DATA_SMELL_SARONITE, 0);
+ smellSaronite = false;
break;
case ACTION_ANIMUS_DIE:
me->RemoveAurasDueToSpell(SPELL_SARONITE_BARRIER);
@@ -487,6 +474,9 @@ class achievement_shadowdodger : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Vezax = target->ToCreature())
if (Vezax->AI()->GetData(DATA_SHADOWDODGER))
return true;
@@ -504,6 +494,9 @@ class achievement_smell_saronite : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Vezax = target->ToCreature())
if (Vezax->AI()->GetData(DATA_SMELL_SARONITE))
return true;
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
index 1fb24699b60..7bd659400b7 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp
@@ -194,13 +194,7 @@ public:
void SpellHitTarget(Unit* who, SpellEntry const* spell)
{
if (who && who->GetTypeId() == TYPEID_PLAYER && spell->Id == 59302)
- SetData(DATA_KINGS_BANE, 0);
- }
-
- void SetData(uint32 id, uint32 data)
- {
- if (id == DATA_KINGS_BANE)
- kingsBane = data ? true : false;
+ kingsBane = false;
}
uint32 GetData(uint32 type)
@@ -406,6 +400,9 @@ class achievement_kings_bane : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Ymiron = target->ToCreature())
if (Ymiron->AI()->GetData(DATA_KINGS_BANE))
return true;
diff --git a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
index 017da20a176..804d602a06f 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_cyanigosa.cpp
@@ -159,7 +159,28 @@ public:
};
+class achievement_defenseless : public AchievementCriteriaScript
+{
+ public:
+ achievement_defenseless() : AchievementCriteriaScript("achievement_defenseless")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ InstanceScript* instance = target->GetInstanceScript();
+ if (!instance)
+ return false;
+
+ if (!instance->GetData(DATA_DEFENSELESS))
+ return false;
+
+ return true;
+ }
+};
+
void AddSC_boss_cyanigosa()
{
new boss_cyanigosa();
+ new achievement_defenseless();
}
diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
index 3f2ea65958d..1e3914ab40b 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp
@@ -50,11 +50,6 @@ enum Yells
SAY_BUBBLE = -1608026
};
-enum Achievements
-{
- ACHIEVEMENT_DEHYDRATION = 2041,
-};
-
enum Actions
{
ACTION_WATER_ELEMENT_HIT = 1,
@@ -72,6 +67,8 @@ static Position SpawnLoc[MAX_SPAWN_LOC]=
{1935.50f, 796.224f, 52.492f, 4.224f},
};
+#define DATA_DEHYDRATION 1
+
class boss_ichoron : public CreatureScript
{
public:
@@ -91,7 +88,7 @@ public:
bool bIsExploded;
bool bIsFrenzy;
- bool bAchievement;
+ bool dehydration;
uint32 uiBubbleCheckerTimer;
uint32 uiWaterBoltVolleyTimer;
@@ -104,7 +101,7 @@ public:
{
bIsExploded = false;
bIsFrenzy = false;
- bAchievement = true;
+ dehydration = true;
uiBubbleCheckerTimer = 1000;
uiWaterBoltVolleyTimer = urand(10000, 15000);
@@ -168,7 +165,7 @@ public:
if (bIsExploded)
DoExplodeCompleted();
- bAchievement = false;
+ dehydration = false;
break;
case ACTION_WATER_ELEMENT_KILLED:
uint32 damage = me->CountPctFromMaxHealth(3);
@@ -199,11 +196,18 @@ public:
me->GetMotionMaster()->MoveChase(me->getVictim());
}
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_DEHYDRATION)
+ return dehydration ? 1 : 0;
+
+ return 0;
+ }
+
void MoveInLineOfSight(Unit* /*pWho*/) {}
void UpdateAI(const uint32 uiDiff)
{
- //Return since we have no target
if (!UpdateVictim())
return;
@@ -284,9 +288,6 @@ public:
if (pInstance)
{
- if (IsHeroic() && bAchievement)
- pInstance->DoCompleteAchievement(ACHIEVEMENT_DEHYDRATION);
-
if (pInstance->GetData(DATA_WAVE_COUNT) == 6)
{
pInstance->SetData(DATA_1ST_BOSS_EVENT, DONE);
@@ -394,8 +395,29 @@ public:
};
+class achievement_dehydration : public AchievementCriteriaScript
+{
+ public:
+ achievement_dehydration() : AchievementCriteriaScript("achievement_dehydration")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (!target)
+ return false;
+
+ if (Creature* Ichoron = target->ToCreature())
+ if (Ichoron->AI()->GetData(DATA_DEHYDRATION))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_ichoron()
{
new boss_ichoron();
new mob_ichor_globule();
+ new achievement_dehydration();
}
diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
index af7321b4dd1..16f49316782 100644
--- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
+++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp
@@ -154,13 +154,7 @@ public:
void SummonedCreatureDies(Creature* summoned, Unit* /*who*/)
{
if (summoned->GetEntry() == CREATURE_VOID_SENTRY)
- SetData(DATA_VOID_DANCE, 0);
- }
-
- void SetData(uint32 id, uint32 data)
- {
- if (id == DATA_VOID_DANCE)
- voidDance = data ? true : false;
+ voidDance = false;
}
uint32 GetData(uint32 type)
@@ -217,6 +211,9 @@ class achievement_void_dance : public AchievementCriteriaScript
bool OnCheck(Player* /*player*/, Unit* target)
{
+ if (!target)
+ return false;
+
if (Creature* Zuramat = target->ToCreature())
if (Zuramat->AI()->GetData(DATA_VOID_DANCE))
return true;
diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
index 93ef8256fef..98731f4aa7b 100644
--- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp
@@ -93,15 +93,12 @@ enum Yells
{
CYANIGOSA_SAY_SPAWN = -1608005
};
+
enum Spells
{
CYANIGOSA_SPELL_TRANSFORM = 58668,
CYANIGOSA_BLUE_AURA = 47759,
};
-enum Achievements
-{
- ACHIEV_DEFENSELESS = 1816
-};
class instance_violet_hold : public InstanceMapScript
{
@@ -165,6 +162,7 @@ public:
bool bWiped;
bool bIsDoorSpellCasted;
bool bCrystalActivated;
+ bool defenseless;
std::list<uint8> NpcAtDoorCastingList;
@@ -214,6 +212,7 @@ public:
bActive = false;
bIsDoorSpellCasted = false;
bCrystalActivated = false;
+ defenseless = true;
uiMainEventPhase = NOT_STARTED;
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -334,8 +333,6 @@ public:
uiMainEventPhase = DONE;
if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
pMainDoor->SetGoState(GO_STATE_ACTIVE);
- if (!bCrystalActivated && uiDoorIntegrity == 100)
- DoCompleteAchievement(ACHIEV_DEFENSELESS);
}
break;
case DATA_WAVE_COUNT:
@@ -350,6 +347,7 @@ public:
break;
case DATA_DOOR_INTEGRITY:
uiDoorIntegrity = data;
+ defenseless = false;
DoUpdateWorldState(WORLD_STATE_VH_PRISON_STATE, uiDoorIntegrity);
break;
case DATA_NPC_PRESENCE_AT_DOOR_ADD:
@@ -432,6 +430,7 @@ public:
case DATA_FIRST_BOSS: return uiFirstBoss;
case DATA_SECOND_BOSS: return uiSecondBoss;
case DATA_MAIN_EVENT_PHASE: return uiMainEventPhase;
+ case DATA_DEFENSELESS: return defenseless ? 1 : 0;
}
return 0;
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.h b/src/server/scripts/Northrend/VioletHold/violet_hold.h
index 5fe8b75e97f..ff663efe275 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.h
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.h
@@ -52,7 +52,8 @@ enum Data
DATA_FIRST_BOSS,
DATA_SECOND_BOSS,
DATA_ACTIVATE_CRYSTAL,
- DATA_MAIN_EVENT_PHASE
+ DATA_MAIN_EVENT_PHASE,
+ DATA_DEFENSELESS,
};
enum Data64
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index f693c1b249e..67939a61f23 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -623,42 +623,6 @@ class spell_gen_animal_blood : public SpellScriptLoader
}
};
-class spell_gen_shroud_of_death : public SpellScriptLoader
-{
- public:
- spell_gen_shroud_of_death() : SpellScriptLoader("spell_gen_shroud_of_death") { }
-
- class spell_gen_shroud_of_death_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_gen_shroud_of_death_AuraScript);
-
- void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Unit* target = GetTarget();
- target->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
- target->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
- }
-
- void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
- {
- Unit* target = GetTarget();
- target->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE);
- target->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE);
- }
-
- void Register()
- {
- OnEffectApply += AuraEffectApplyFn(spell_gen_shroud_of_death_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- OnEffectRemove += AuraEffectRemoveFn(spell_gen_shroud_of_death_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
- }
- };
-
- AuraScript* GetAuraScript() const
- {
- return new spell_gen_shroud_of_death_AuraScript();
- }
-};
-
enum DivineStormSpell
{
SPELL_DIVINE_STORM = 53385,
@@ -1161,6 +1125,35 @@ class spell_gen_magic_rooster : public SpellScriptLoader
}
};
+class spell_gen_allow_cast_from_item_only : public SpellScriptLoader
+{
+public:
+ spell_gen_allow_cast_from_item_only() : SpellScriptLoader("spell_gen_allow_cast_from_item_only") { }
+
+ class spell_gen_allow_cast_from_item_only_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_allow_cast_from_item_only_SpellScript);
+
+ SpellCastResult CheckRequirement()
+ {
+ if (!GetCastItem())
+ return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
+
+ return SPELL_CAST_OK;
+ }
+
+ void Register()
+ {
+ OnCheckCast += SpellCheckCastFn(spell_gen_allow_cast_from_item_only_SpellScript::CheckRequirement);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_gen_allow_cast_from_item_only_SpellScript();
+ }
+};
+
void AddSC_generic_spell_scripts()
{
new spell_gen_absorb0_hitlimit1();
@@ -1176,7 +1169,6 @@ void AddSC_generic_spell_scripts()
new spell_creature_permanent_feign_death();
new spell_pvp_trinket_wotf_shared_cd();
new spell_gen_animal_blood();
- new spell_gen_shroud_of_death();
new spell_gen_divine_storm_cd_reset();
new spell_gen_parachute_ic();
new spell_gen_gunship_portal();
@@ -1188,4 +1180,5 @@ void AddSC_generic_spell_scripts()
new spell_gen_turkey_marker();
new spell_gen_lifeblood();
new spell_gen_magic_rooster();
+ new spell_gen_allow_cast_from_item_only();
}
diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp
index 223dbb43f11..ac101d239b5 100644
--- a/src/server/scripts/World/boss_emerald_dragons.cpp
+++ b/src/server/scripts/World/boss_emerald_dragons.cpp
@@ -85,9 +85,6 @@ enum Events
* ---
* --- Emerald Dragons : Base AI-structure used for all the Emerald dragons
* ---
- *
- * TODO
- * - Fix player teleportation when running off too far from the dragon (emerald_dragonAI)
*/
struct emerald_dragonAI : public WorldBossAI
@@ -153,10 +150,8 @@ struct emerald_dragonAI : public WorldBossAI
while (uint32 eventId = events.ExecuteEvent())
ExecuteEvent(eventId);
- std::list<HostileReference*> threats = me->getThreatManager().getThreatList();
- if (Unit* target = threats.front()->getTarget())
- if ((target->GetTypeId() == TYPEID_PLAYER) && (me->GetDistance(target) > 20.0f))
- DoCast(target, SPELL_SUMMON_PLAYER);
+ if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0, -50.0f, true))
+ DoCast(target, SPELL_SUMMON_PLAYER);
DoMeleeAttackIfReady();
}
@@ -190,8 +185,7 @@ class npc_dream_fog : public CreatureScript
if (!_roamTimer)
{
// Chase target, but don't attack - otherwise just roam around
- Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true);
- if (target)
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true))
{
_roamTimer = urand(15000, 30000);
me->GetMotionMaster()->Clear(false);
@@ -397,22 +391,6 @@ class boss_ysondre : public CreatureScript
}
}
- void UpdateAI(uint32 const diff)
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STAT_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- ExecuteEvent(eventId);
-
- DoMeleeAttackIfReady();
- }
-
private:
uint8 _stage;
};
@@ -496,22 +474,6 @@ class boss_lethon : public CreatureScript
}
}
- void UpdateAI(uint32 const diff)
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STAT_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- ExecuteEvent(eventId);
-
- DoMeleeAttackIfReady();
- }
-
private:
uint8 _stage;
};
@@ -597,22 +559,6 @@ class boss_emeriss : public CreatureScript
}
}
- void UpdateAI(uint32 const diff)
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STAT_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- ExecuteEvent(eventId);
-
- DoMeleeAttackIfReady();
- }
-
private:
uint8 _stage;
};
@@ -738,12 +684,7 @@ class boss_taerar : public CreatureScript
void UpdateAI(uint32 const diff)
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STAT_CASTING))
+ if (!me->isInCombat())
return;
if (_banished)
@@ -760,13 +701,14 @@ class boss_taerar : public CreatureScript
// _banishtimer has not expired, and we still have active shades:
else
_banishedTimer -= diff;
+
+ // Update the events before we return (handled under emerald_dragonAI::UpdateAI(diff); if we're not inside this check)
+ events.Update(diff);
+
return;
}
- while (uint32 eventId = events.ExecuteEvent())
- ExecuteEvent(eventId);
-
- DoMeleeAttackIfReady();
+ emerald_dragonAI::UpdateAI(diff);
}
private:
diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
index 66ca7645e49..eb1e33626c6 100644
--- a/src/server/worldserver/worldserver.conf.dist
+++ b/src/server/worldserver/worldserver.conf.dist
@@ -1895,11 +1895,12 @@ GM.LowerSecurity = 0
#
# GM.AllowAchievementGain.Level
-# Description: Max GM level that can obtain achievements.
-# Default: 3 - (Anyone)
-# 0 - (Only players)
-# 1 - (Only moderators)
-# 2 - (Only gamemasters)
+# Description: Max GM level allowed to obtain achievements.
+# Default: 3 - (Players, Moderators, GameMasters, Admins)
+# 0 - (Players)
+# 1 - (Players, Moderators)
+# 2 - (Players, Moderators, GameMasters)
+# 3 - (Players, Moderators, GameMasters, Admins)
GM.AllowAchievementGain.Level = 3