aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2012_01_05_00_world_sai.sql8
-rw-r--r--sql/updates/world/2013_01_03_02_world_sai.sql10
-rw-r--r--sql/updates/world/2013_01_03_03_world_spelldifficulty_dbc.sql3
-rw-r--r--sql/updates/world/2013_01_03_04_world_sai.sql14
-rw-r--r--sql/updates/world/2013_01_03_05_world_sai.sql8
-rw-r--r--sql/updates/world/2013_01_03_06_world_sai.sql11
-rw-r--r--sql/updates/world/2013_01_03_07_world_sai.sql6
-rw-r--r--sql/updates/world/2013_01_03_08_world_misc.sql2
-rw-r--r--sql/updates/world/2013_01_03_09_world_sai.sql81
-rw-r--r--sql/updates/world/2013_01_03_10_world_gameobject.sql4
-rw-r--r--sql/updates/world/2013_01_03_11_world_item_template.sql2
-rw-r--r--sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql2
-rw-r--r--sql/updates/world/2013_01_03_12_world_misc.sql3
-rw-r--r--sql/updates/world/2013_01_03_13_world_quest_template.sql3
-rw-r--r--sql/updates/world/2013_01_03_14_world_spell_area.sql4
-rw-r--r--sql/updates/world/2013_01_03_15_world_various_fixes.sql73
-rw-r--r--sql/updates/world/2013_01_03_16_world_various_fixes.sql8
-rw-r--r--sql/updates/world/2013_01_04_00_world_creature_text.sql3
-rw-r--r--sql/updates/world/2013_01_04_01_world_sai.sql38
-rw-r--r--sql/updates/world/2013_01_04_02_world_misc.sql29
-rw-r--r--src/server/collision/BoundingIntervalHierarchy.cpp2
-rw-r--r--src/server/game/AI/CoreAI/PetAI.cpp6
-rw-r--r--src/server/game/AI/EventAI/CreatureEventAI.cpp7
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp36
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h4
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp5
-rw-r--r--src/server/game/Addons/AddonMgr.h3
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp1
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp2
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp3
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp1
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp4
-rw-r--r--src/server/game/Entities/Object/ObjectDefines.h8
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp3
-rw-r--r--src/server/game/Entities/Player/Player.cpp8
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp8
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp22
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp17
-rw-r--r--src/server/game/Globals/ObjectMgr.h3
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp3
-rw-r--r--src/server/game/Loot/LootMgr.cpp2
-rw-r--r--src/server/game/Maps/MapManager.cpp1
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.cpp4
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp2
-rw-r--r--src/server/game/Server/WorldSocketMgr.cpp2
-rw-r--r--src/server/game/Spells/Spell.h2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp16
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rw-r--r--src/server/game/Warden/WardenWin.cpp2
-rw-r--r--src/server/game/World/World.cpp1
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp2
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/CMakeLists.txt1
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp331
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp43
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/scholomance.h36
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp4
-rw-r--r--src/server/shared/Dynamic/LinkedReference/Reference.h4
-rw-r--r--src/server/shared/Utilities/Util.cpp7
-rw-r--r--src/server/worldserver/RemoteAccess/RARunnable.cpp2
-rw-r--r--src/tools/vmap4_extractor/model.cpp6
62 files changed, 794 insertions, 158 deletions
diff --git a/sql/updates/world/2012_01_05_00_world_sai.sql b/sql/updates/world/2012_01_05_00_world_sai.sql
new file mode 100644
index 00000000000..bfa06980983
--- /dev/null
+++ b/sql/updates/world/2012_01_05_00_world_sai.sql
@@ -0,0 +1,8 @@
+-- Fixup some runtime errors, linked events that were not SMART_EVENT_LINK
+UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=38017 AND `id`=1 AND `source_type`=0;
+UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=1443 AND `id`=1 AND `source_type`=0;
+UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=3448 AND `id` IN (1, 2, 3) AND `source_type`=0;
+UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=3616 AND `id` IN (1, 2) AND `source_type`=0;
+UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=4049 AND `id`=1 AND `source_type`=0;
+UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=305400 AND `id` IN (1, 2) AND `source_type`=9;
+UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=83600 AND `id` IN (1, 2, 3) AND `source_type`=9;
diff --git a/sql/updates/world/2013_01_03_02_world_sai.sql b/sql/updates/world/2013_01_03_02_world_sai.sql
new file mode 100644
index 00000000000..ecd84c96800
--- /dev/null
+++ b/sql/updates/world/2013_01_03_02_world_sai.sql
@@ -0,0 +1,10 @@
+DELETE FROM `gameobject_scripts` WHERE `id` IN (43177,44809,44811,45625,45428,61664);
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (193020,175432,176767,101852,101853,177385);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (193020,175432,176767,101852,101853,177385) AND `source_type`=1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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
+(193020,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,61606,193019,0,0,0,0,0, 'Lever - On activate - Activate The Violet Hold'),
+(175432,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,45626,175369,0,0,0,0,0, ' - On activate - Activate Elders Square Service Entrance'),
+(176767,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,45427,174626,0,0,0,0,0, 'Torch - On activate - Activate Scholomance Door'),
+(101852,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,15013,101851,0,0,0,0,0, 'Lever - On activate - Activate Armory Door'),
+(101853,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,15012,101850,0,0,0,0,0, 'Lever - On activate - Activate Cathedral Door'),
+(177385,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,43178,175610,0,0,0,0,0, 'Torch - On activate - Activate Door');
diff --git a/sql/updates/world/2013_01_03_03_world_spelldifficulty_dbc.sql b/sql/updates/world/2013_01_03_03_world_spelldifficulty_dbc.sql
new file mode 100644
index 00000000000..6a41f705491
--- /dev/null
+++ b/sql/updates/world/2013_01_03_03_world_spelldifficulty_dbc.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spelldifficulty_dbc` WHERE `id`=62166 OR `spellid0`=62166;
+INSERT INTO `spelldifficulty_dbc`(`id`,`spellid0`,`spellid1`) VALUES
+(62166,62166,63981); -- Stone Grip
diff --git a/sql/updates/world/2013_01_03_04_world_sai.sql b/sql/updates/world/2013_01_03_04_world_sai.sql
new file mode 100644
index 00000000000..ccac9266af2
--- /dev/null
+++ b/sql/updates/world/2013_01_03_04_world_sai.sql
@@ -0,0 +1,14 @@
+UPDATE `gameobject` SET `position_x`=-113.4616,`position_y`=2165.083,`position_z`=156.7546,`orientation`=1.195702,`rotation0`=0.6946974,`rotation1`=-0.1318922,`rotation2`=0.6946964,`rotation3`=0.1318972,`spawntimesecs`=7200,`animprogress`=255 WHERE `guid`=32480;
+
+DELETE FROM `gameobject_scripts` WHERE `id` IN (32260,32378,32480,32625,32442,32443,32444,34006);
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (18900,18901,18899,90567,101811,101812,101855,185501);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (18900,18901,18899,90567,101811,101812,101855,185501) AND `source_type`=1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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
+( 18900,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,32445,18934,0,0,0,0,0, 'Lever - On activate - Activate Cell Door'),
+( 18901,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,33219,18936,0,0,0,0,0, 'Lever - On activate - Activate Cell Door'),
+( 18899,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,33241,18971,0,0,0,0,0, 'Lever - On activate - Activate Arugals Lair'),
+( 90567,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,32373,90566,0,0,0,0,0, 'Lever - On activate - Activate Workshop Door'),
+(101811,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,32446,18935,0,0,0,0,0, 'Lever - On activate - Activate Cell Door'),
+(101812,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,20835,18895,0,0,0,0,0, 'Lever - On activate - Activate Courtyard Door'),
+(101855,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,32250,101854,0,0,0,0,0, 'Lever - On activate - Activate Herods Door'),
+(185501,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,25064,184212,0,0,0,0,0, 'Waterfall Control Console - On activate - Activate Waterfall');
diff --git a/sql/updates/world/2013_01_03_05_world_sai.sql b/sql/updates/world/2013_01_03_05_world_sai.sql
new file mode 100644
index 00000000000..9e5537835ff
--- /dev/null
+++ b/sql/updates/world/2013_01_03_05_world_sai.sql
@@ -0,0 +1,8 @@
+DELETE FROM `gameobject_scripts` WHERE `id`=15351;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=161460;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=161460 AND `source_type`=1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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
+(161460,1,0,1,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,15639,161461,0,0,0,0,0, 'Shadowforge Lock - On Activate - Open the Giant Door Mechanism'),
+(161460,1,1,2,61,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,15576,157923,0,0,0,0,0, 'Shadowforge Lock - On Activate - Close the Giant Doors'),
+(161460,1,2,3,61,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,15640,161462,0,0,0,0,0, 'Shadowforge Lock - On Activate - Remove the great invisible wall'),
+(161460,1,3,0,61,0,100,0,0,0,0,0,9,0,0,0,0,0,0,14,15352,161516,0,0,0,0,0, 'Shadowforge Lock - On Activate - Remove the invisible wall on top');
diff --git a/sql/updates/world/2013_01_03_06_world_sai.sql b/sql/updates/world/2013_01_03_06_world_sai.sql
new file mode 100644
index 00000000000..e77122e908e
--- /dev/null
+++ b/sql/updates/world/2013_01_03_06_world_sai.sql
@@ -0,0 +1,11 @@
+DELETE FROM `gameobject_scripts` WHERE `id` IN (24397,24398,25980,26188,26192);
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry` IN (101831,101832,101833,101834,183517,183518,185123);
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (101831,101832,101833,101834,183517,183518,185123) AND `source_type`=1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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
+(101831,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,30533,13965,0,0,0,0,0, 'Door Lever - On activate - Activate Factory Door'),
+(101832,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,26185,17153,0,0,0,0,0, 'Door Lever - On activate - Activate Heavy Door'),
+(101833,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,30534,16397,0,0,0,0,0, 'Door Lever - On activate - Activate Iron Clad Door'),
+(101834,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,26182,17153,0,0,0,0,0, 'Door Lever - On activate - Activate Heavy Door'),
+(183517,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,25826,184912,0,0,0,0,0, 'Lever - On activate - Activate The Shattered Halls'),
+(183518,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,24141,183294,0,0,0,0,0, 'Lever - On activate - Activate The Shadow Labyrinth'),
+(185123,1,0,0,70,0,100,0,2,0,0,0,9,0,0,0,0,0,0,14,25083,184246,0,0,0,0,0, 'Lever - On activate - Activate Heavy Iron Portcullis');
diff --git a/sql/updates/world/2013_01_03_07_world_sai.sql b/sql/updates/world/2013_01_03_07_world_sai.sql
new file mode 100644
index 00000000000..35a03b9078c
--- /dev/null
+++ b/sql/updates/world/2013_01_03_07_world_sai.sql
@@ -0,0 +1,6 @@
+DELETE FROM `gameobject_scripts` WHERE `id` IN (12609,26185,30534);
+DELETE FROM `smart_scripts` WHERE `entryorguid`=177673 AND `source_type`=1;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=17767300 AND `source_type`=9;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(177673,1,0,0,70,0,100,0,2,0,0,0,80,17767300,2,0,0,0,0,1,0,0,0,0,0,0,0, 'Serpent Statue - On activate - Start Script'),
+(17767300,9,0,0,1,0,100,0,2000,2000,0,0,12,12369,1,300000,0,1,0,8,0,0,0,251.381,2962.47,2.76527,0.860446, 'Serpent Statue - After 2s - Summon Lord Kragaru');
diff --git a/sql/updates/world/2013_01_03_08_world_misc.sql b/sql/updates/world/2013_01_03_08_world_misc.sql
new file mode 100644
index 00000000000..816b4b4dcf6
--- /dev/null
+++ b/sql/updates/world/2013_01_03_08_world_misc.sql
@@ -0,0 +1,2 @@
+-- remove the leverscript not non-existing doorscripts!
+DELETE FROM `gameobject_scripts` WHERE `id` IN (26206,26197);
diff --git a/sql/updates/world/2013_01_03_09_world_sai.sql b/sql/updates/world/2013_01_03_09_world_sai.sql
new file mode 100644
index 00000000000..c15eeb88843
--- /dev/null
+++ b/sql/updates/world/2013_01_03_09_world_sai.sql
@@ -0,0 +1,81 @@
+-- Servant of the Throne [SAI]
+SET @ENTRY := 36724;
+SET @SOURCETYPE := 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=@SOURCETYPE;
+UPDATE creature_template SET AIName='SmartAI' WHERE entry=@ENTRY LIMIT 1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,@SOURCETYPE,3,0,0,0,100,30,5000,7000,5000,9000,11,70980,0,0,0,0,0,4,0,0,0,0,0,0,0, 'Cast Web Wrap'),
+(@ENTRY,@SOURCETYPE,1,0,0,0,100,0,3000,6000,6000,12000,11,71029,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Cast Glacial Blast');
+-- Ancient Skeletal Soldier
+SET @ENTRY := 37012;
+SET @SOURCETYPE := 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=@SOURCETYPE;
+UPDATE creature_template SET AIName='SmartAI' WHERE entry=@ENTRY LIMIT 1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,3,0,0,0,100,30,5000,7000,5000,9000,11,70980,0,0,0,0,0,4,0,0,0,0,0,0,0, 'Cast Web Wrap'),
+(@ENTRY,@SOURCETYPE,0,0,0,0,100,0,3000,6000,6000,8000,11,70964,2,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Cast Shield Bash(70964)');
+-- Nerub'ar Broodkeeper
+SET @ENTRY := 36725;
+SET @SOURCETYPE :=0;
+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,@SOURCETYPE,1,0,10,0,100,30,1,60,1000,1000,38,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 'Nerub''ar Broodkeeper - On LOS - Zone Combat Pulse'),
+(@ENTRY,@SOURCETYPE,2,0,0,0,100,30,5000,7000,5000,9000,11,70965,0,0,0,0,0,4,0,0,0,0,0,0,0, 'Nerub''ar Broodkeeper - In Combat - Cast Crypt Scarabs'),
+(@ENTRY,@SOURCETYPE,3,0,0,0,100,30,5000,7000,5000,9000,11,70980,0,0,0,0,0,4,0,0,0,0,0,0,0, 'Nerub''ar Broodkeeper - In Combat - Cast Web Wrap'),
+(@ENTRY,@SOURCETYPE,4,0,14,0,100,30,5000,30,8000,13000,11,36725,0,0,0,0,0,7,0,0,0,0,0,0,0, 'Nerub''ar Broodkeeper - In Combat - Cast Dark Mending on Friendlies');
+-- Deathbound Ward
+SET @ENTRY := 37007;
+SET @SOURCETYPE := 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=@SOURCETYPE;
+UPDATE creature_template SET AIName='SmartAI' WHERE entry=@ENTRY LIMIT 1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,@SOURCETYPE,0,0,0,0,100,0,3000,6000,6000,8000,11,71021,2,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Saber Lash'),
+(@ENTRY,@SOURCETYPE,1,0,0,0,100,0,6000,8000,6000,12000,11,71022,2,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Disrupting Shout');
+-- Entrance Mobs End
+-- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+-- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+-- Starting Mobs infront Lady Deathwhisper
+-- Deathspeaker Zealot
+SET @ENTRY := 36808;
+SET @SOURCETYPE := 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=@SOURCETYPE;
+UPDATE creature_template SET AIName='SmartAI' WHERE entry=@ENTRY LIMIT 1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,@SOURCETYPE,0,0,0,0,100,0,3000,6000,6000,8000,11,69492,2,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Shadow Cleave');
+-- Deathspeaker Servant
+SET @ENTRY := 36805;
+SET @SOURCETYPE := 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=@SOURCETYPE;
+UPDATE creature_template SET AIName='SmartAI' WHERE entry=@ENTRY LIMIT 1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,@SOURCETYPE,0,0,0,0,100,0,3000,6000,6000,8000,11,69576,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Chaos Bolt'),
+(@ENTRY,@SOURCETYPE,1,0,0,0,100,0,3000,6000,6000,8000,11,69405,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Consuming Shadows'),
+(@ENTRY,@SOURCETYPE,2,0,0,0,100,0,3000,6000,6000,8000,11,69404,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Curse of Agony');
+-- Deathspeaker Attendant
+SET @ENTRY := 36811;
+SET @SOURCETYPE := 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=@SOURCETYPE;
+UPDATE creature_template SET AIName='SmartAI' WHERE entry=@ENTRY LIMIT 1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,@SOURCETYPE,0,0,0,0,100,0,3000,6000,6000,8000,11,69387,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Cast Shadow Bolt'),
+(@ENTRY,@SOURCETYPE,1,0,0,0,100,0,3000,6000,6000,8000,11,69355,0,0,0,0,0,18,15,0,0,0.0,0.0,0.0,0.0,'Cast Shadow Nova on 15 yard distance');
+-- Deathspeaker Disciple
+DELETE FROM smart_scripts WHERE entryorguid = 36807 AND source_type = 0;
+SET @ENTRY := 36807;
+SET @SOURCETYPE := 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=@SOURCETYPE;
+UPDATE creature_template SET AIName='SmartAI' WHERE entry=@ENTRY LIMIT 1;
+INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `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, @SOURCETYPE, 0, 0, 0, 0, 100, 30, 0, 3000, 4000, 6000, 11, 69387, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Deathspeaker Disciple - Cast Shadow Bolt'),
+(@ENTRY, @SOURCETYPE, 1, 0, 16, 0, 100, 30, 69391, 40, 15000, 20000, 11, 69391, 1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Deathspeaker Disciple - Cast Dark Blessing'),
+(@ENTRY, @SOURCETYPE, 2, 0, 14, 0, 100, 30, 90000, 40, 15000, 20000, 11, 69389, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Deathspeaker Disciple - Cast Shadow Mend');
+-- Deathspeaker High Priest [SAI]
+SET @ENTRY := 36829;
+SET @SOURCETYPE := 0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=@SOURCETYPE;
+UPDATE creature_template SET AIName='SmartAI' WHERE entry=@ENTRY LIMIT 1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`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,@SOURCETYPE,0,0,0,0,100,0,3000,6000,10000,15000,11,69483,2,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0,'Cast Dark Reckoning'),
+(@ENTRY,@SOURCETYPE,1,0,32,0,100,1,0,10000,0,0,11,69491,2,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,'Cast Aura of Darkness On Self'); -- when combat starts
diff --git a/sql/updates/world/2013_01_03_10_world_gameobject.sql b/sql/updates/world/2013_01_03_10_world_gameobject.sql
new file mode 100644
index 00000000000..11700da1dc9
--- /dev/null
+++ b/sql/updates/world/2013_01_03_10_world_gameobject.sql
@@ -0,0 +1,4 @@
+-- Issue 8693 Invincible Grave Plaque
+DELETE FROM `gameobject` WHERE `guid`=364;
+INSERT INTO `gameobject` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`position_x`,`position_y`,`position_z`,`orientation`,`rotation0`,`rotation1`,`rotation2`,`rotation3`,`spawntimesecs`,`animprogress`,`state`) VALUES
+(364,192835,0,1,1,2044.38,-520.9688,46.01406,-3.097385,0,0,0,1,120,255,1);
diff --git a/sql/updates/world/2013_01_03_11_world_item_template.sql b/sql/updates/world/2013_01_03_11_world_item_template.sql
new file mode 100644
index 00000000000..df0bd5cd1e7
--- /dev/null
+++ b/sql/updates/world/2013_01_03_11_world_item_template.sql
@@ -0,0 +1,2 @@
+-- make sure timers are real-time via flagsCustom
+UPDATE `item_template` SET `flagsCustom`=`flagsCustom`|1 WHERE `entry` IN(39878,44623,44625,44626,44632,44717);
diff --git a/sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql b/sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql
new file mode 100644
index 00000000000..aede83aa0c8
--- /dev/null
+++ b/sql/updates/world/2013_01_03_12_world_gameobject_scripts.sql
@@ -0,0 +1,2 @@
+DROP TABLE `gameobject_scripts`;
+DELETE FROM `command` WHERE `name`='reload gameobject_scripts';
diff --git a/sql/updates/world/2013_01_03_12_world_misc.sql b/sql/updates/world/2013_01_03_12_world_misc.sql
new file mode 100644
index 00000000000..79d2e2daea9
--- /dev/null
+++ b/sql/updates/world/2013_01_03_12_world_misc.sql
@@ -0,0 +1,3 @@
+-- Fix startup errors:
+-- Set correct questid for Many Wyrm
+UPDATE `smart_scripts` SET `action_param1`=8346 WHERE `entryorguid` IN (15273,15274,15294,15298) AND `source_type`=0 AND `id` IN (0,1);
diff --git a/sql/updates/world/2013_01_03_13_world_quest_template.sql b/sql/updates/world/2013_01_03_13_world_quest_template.sql
new file mode 100644
index 00000000000..12adb1e94ba
--- /dev/null
+++ b/sql/updates/world/2013_01_03_13_world_quest_template.sql
@@ -0,0 +1,3 @@
+UPDATE `quest_template` SET `PrevQuestId`=7022 WHERE `Id`=7025; -- Treats for Greatfather Winter (7025) Alliance version
+UPDATE `quest_template` SET `RequiredRaces`=690,`PrevQuestId`=7021 WHERE `Id`=6962; -- Treats for Great-father Winter (6962) Horde version
+UPDATE `quest_template` SET `ExclusiveGroup`=7021 WHERE `Id`=6961; -- Great-father Winter is Here!
diff --git a/sql/updates/world/2013_01_03_14_world_spell_area.sql b/sql/updates/world/2013_01_03_14_world_spell_area.sql
new file mode 100644
index 00000000000..352fe0e9d85
--- /dev/null
+++ b/sql/updates/world/2013_01_03_14_world_spell_area.sql
@@ -0,0 +1,4 @@
+-- add aura to be able to hand in quests
+DELETE FROM `spell_area` WHERE `spell`=52217;
+INSERT INTO `spell_area` (`spell`,`area`,`quest_start`,`quest_end`,`aura_spell`,`racemask`,`gender`,`autocast`,`quest_start_status`,`quest_end_status`) VALUES
+(52217,4306,12574,0,0,0,2,1,1,64);
diff --git a/sql/updates/world/2013_01_03_15_world_various_fixes.sql b/sql/updates/world/2013_01_03_15_world_various_fixes.sql
new file mode 100644
index 00000000000..d3db9afa6e5
--- /dev/null
+++ b/sql/updates/world/2013_01_03_15_world_various_fixes.sql
@@ -0,0 +1,73 @@
+-- Issue 7541: Shambling Horror immunities
+UPDATE `creature_template` SET `mechanic_immune_mask`=`mechanic_immune_mask`|1|2|4|8|16|64|512|1024|4096|8192|65536|131072|524288|4194304|536870912 WHERE `entry`=37698;
+
+-- Issue 7436: Ground bound Highperch
+-- Highperch Soarer
+SET @NPC := 21708;
+SET @PATH := @NPC*10;
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=6139;
+UPDATE `creature` SET `spawndist`=0,`MovementType`=2,`position_x`=-5155.09,`position_y`=-1194.89,`position_z`=73.70869 WHERE `guid`=@NPC;
+UPDATE `creature_addon` SET `path_id`=@PATH WHERE `guid`=@NPC;
+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,-5155.09,-1194.89,73.70869,0,0,0,100,0),
+(@PATH,2,-5155.986,-1199.748,81.49023,0,0,0,100,0),
+(@PATH,3,-5166.314,-1220.043,81.76808,0,0,0,100,0),
+(@PATH,4,-5170.551,-1226.347,76.71234,0,0,0,100,0),
+(@PATH,5,-5178.024,-1237.037,72.43468,0,0,0,100,0),
+(@PATH,6,-5190.296,-1239.181,71.90687,0,0,0,100,0),
+(@PATH,7,-5215.796,-1225.133,69.76797,0,0,0,100,0),
+(@PATH,8,-5221.52,-1209.387,67.79574,0,0,0,100,0),
+(@PATH,9,-5219.366,-1194.92,67.15694,0,0,0,100,0),
+(@PATH,10,-5209.852,-1187.224,65.96239,0,0,0,100,0),
+(@PATH,11,-5194.886,-1188.915,70.71236,0,0,0,100,0),
+(@PATH,12,-5181.055,-1199.332,60.29574,0,0,0,100,0),
+(@PATH,13,-5158.846,-1213.597,57.6291,0,0,0,100,0),
+(@PATH,14,-5122.129,-1222.279,42.46242,0,0,0,100,0),
+(@PATH,15,-5110.988,-1230.767,15.32349,0,0,0,100,0),
+(@PATH,16,-5084.673,-1227.625,-11.81538,0,0,0,100,0),
+(@PATH,17,-5065.282,-1209.691,-34.89864,0,0,0,100,0),
+(@PATH,18,-5052.477,-1181.261,-39.42649,0,0,0,100,0),
+(@PATH,19,-5025.058,-1165.288,-32.56528,0,0,0,100,0),
+(@PATH,20,-5004.282,-1140.431,-38.3154,0,0,0,100,0),
+(@PATH,21,-4984.813,-1123.683,-38.17639,0,0,0,100,0),
+(@PATH,22,-4971.478,-1109.776,-38.17639,0,0,0,100,0),
+(@PATH,23,-4949.74,-1096.296,-32.42633,0,0,0,100,0),
+(@PATH,24,-4927.954,-1090.275,-24.84298,0,0,0,100,0),
+(@PATH,25,-4909.837,-1080.728,-14.0652,0,0,0,100,0),
+(@PATH,26,-4914.713,-1066.641,-7.898551,0,0,0,100,0),
+(@PATH,27,-4927.922,-1056.954,-3.352009,0,0,0,100,0),
+(@PATH,28,-4942.696,-1055.217,8.220422,0,0,0,100,0),
+(@PATH,29,-4951.954,-1049.145,14.62554,0,0,0,100,0),
+(@PATH,30,-4960.176,-1028.92,20.03323,0,0,0,100,0),
+(@PATH,31,-4970.474,-1008.432,22.08879,0,0,0,100,0),
+(@PATH,32,-4980.969,-992.9671,23.42848,0,0,0,100,0),
+(@PATH,33,-4993.734,-980.054,23.75917,0,0,0,100,0),
+(@PATH,34,-5012.753,-967.9377,24.0925,0,0,0,100,0),
+(@PATH,35,-5032.862,-971.138,30.92584,0,0,0,100,0),
+(@PATH,36,-5052.127,-982.1085,39.0092,0,0,0,100,0),
+(@PATH,37,-5060.675,-991.1913,52.28708,0,0,0,100,0),
+(@PATH,38,-5072.277,-1008.99,67.84268,0,0,0,100,0),
+(@PATH,39,-5090.256,-1005.558,79.18673,0,0,0,100,0),
+(@PATH,40,-5106.005,-1004.311,73.88409,0,0,0,100,0);
+
+-- Issue 8639: Eyes of the Eagle
+-- Talonshrike's Egg
+SET @ENTRY := 186814;
+SET @SOURCETYPE := 1;
+UPDATE gameobject_template SET AIName="SmartGameObjectAI" WHERE entry IN(186814,190283);
+UPDATE creature_template SET AIName="SmartAI" WHERE entry=24518;
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN(186814,190283) AND `source_type`=1;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=24518 AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+-- first egg
+(186814,1,0,0,70,0,100,0,2,0,0,0,45,0,1,0,0,0,0,11,24518,500,0,0.0,0.0,0.0,0.0,"ON egg USE notify Talonshrike"),
+(186814,1,1,0,70,0,100,0,2,0,0,0,45,0,2,0,0,0,0,11,24518,500,0,0.0,0.0,0.0,0.0,"ON egg USE notify Talonshrike to set attackable"),
+-- second egg
+(190283,1,0,0,70,0,100,0,2,0,0,0,45,0,1,0,0,0,0,11,24518,500,0,0.0,0.0,0.0,0.0,"ON egg USE notify Talonshrike"),
+(190283,1,1,0,70,0,100,0,2,0,0,0,45,0,2,0,0,0,0,11,24518,500,0,0.0,0.0,0.0,0.0,"ON egg USE notify Talonshrike to set attackable"),
+-- Talonshrike
+(24518,0,0,0,38,0,100,0,0,1,0,0,69,0,0,0,0,0,0,8,0,0,0,1597.4,-3903.79,79.702,0.0,"ON notification fly TO nest"),
+(24518,0,1,0,0,0,100,0,5000,5000,10000,12000,11,49865,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0," USE Eye Peck"),
+(24518,0,2,0,0,0,100,0,3000,3000,5000,7000,11,32909,0,0,0,0,0,2,0,0,0,0.0,0.0,0.0,0.0," USE Talon Strike"),
+(24518,0,3,0,38,0,100,0,0,2,0,0,19,256,0,0,0,0,0,1, 0, 0, 0, 0, 0, 0, 0, "Talonshrike - On notification - Remove UNIT_FLAG_IMMUNE_TO_PC");
diff --git a/sql/updates/world/2013_01_03_16_world_various_fixes.sql b/sql/updates/world/2013_01_03_16_world_various_fixes.sql
new file mode 100644
index 00000000000..bc5f4f4b6ec
--- /dev/null
+++ b/sql/updates/world/2013_01_03_16_world_various_fixes.sql
@@ -0,0 +1,8 @@
+-- NPC talk text convert from creature_ai_text. Moving boss to cpp.
+UPDATE `creature_template` SET `minlevel`=63,`maxlevel`=63,`InhabitType`=5,`AIName`= '', `ScriptName`= 'boss_kirtonos_the_herald' WHERE `entry`=10506;
+UPDATE `gameobject_template` SET `AIName`= '', `ScriptName`= 'go_brazier_of_the_herald' WHERE `entry`=175564;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=10506;
+DELETE FROM `creature_ai_texts` WHERE `entry`=-448;
+DELETE FROM `creature_text` WHERE `entry` IN (10506);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(10506,0,0, '%s lets out a shrill cry.',16,0,100,0,0,0, 'Kirtonos The Herald - Emote');
diff --git a/sql/updates/world/2013_01_04_00_world_creature_text.sql b/sql/updates/world/2013_01_04_00_world_creature_text.sql
new file mode 100644
index 00000000000..ae38180e1ac
--- /dev/null
+++ b/sql/updates/world/2013_01_04_00_world_creature_text.sql
@@ -0,0 +1,3 @@
+DELETE FROM `creature_text` WHERE `entry`=4295;
+INSERT INTO `creature_text`(`entry`,`text`,`type`,`language`,`comment`) VALUES
+(4295,"There is no escape for you. The Crusade shall destroy all who carry the scourge's taint.",12,7,"Scarlet Myrmidon - Talk on low HP");
diff --git a/sql/updates/world/2013_01_04_01_world_sai.sql b/sql/updates/world/2013_01_04_01_world_sai.sql
new file mode 100644
index 00000000000..8e7127e5728
--- /dev/null
+++ b/sql/updates/world/2013_01_04_01_world_sai.sql
@@ -0,0 +1,38 @@
+-- Arcane Wraith SAI
+SET @ENTRY := 15273;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,28730,0,0,0,27,15468,28730,0,0,0,0,7,0,0,0,0,0,0,0,"Arcane Wraith - On Spellhit Arcane Torrent - Quest Credit"),
+(@ENTRY,0,1,0,8,0,100,1,25046,0,0,0,27,15468,28730,0,0,0,0,7,0,0,0,0,0,0,0,"Arcane Wraith - On Spellhit Arcane Torrent - Quest Credit"),
+(@ENTRY,0,2,0,0,0,100,0,10100,16500,12700,24800,11,37361,0,0,0,0,0,2,0,0,0,0,0,0,0,"Arcane Wraith - In Combat - Cast Arcane Bolt");
+
+-- Mana Wyrm SAI
+SET @ENTRY := 15274;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,28730,0,0,0,27,15468,28730,0,0,0,0,7,0,0,0,0,0,0,0,"Mana Wyrm - On Spellhit Arcane Torrent - Quest Credit"),
+(@ENTRY,0,1,0,8,0,100,1,25046,0,0,0,27,15468,28730,0,0,0,0,7,0,0,0,0,0,0,0,"Mana Wyrm - On Spellhit Arcane Torrent - Quest Credit");
+
+-- Feral Tender SAI
+SET @ENTRY := 15294;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,28730,0,0,0,27,15468,28730,0,0,0,0,7,0,0,0,0,0,0,0,"Feral Tender - On Spellhit Arcane Torrent - Quest Credit"),
+(@ENTRY,0,1,0,8,0,100,1,25046,0,0,0,27,15468,28730,0,0,0,0,7,0,0,0,0,0,0,0,"Feral Tender - On Spellhit Arcane Torrent - Quest Credit"),
+(@ENTRY,0,2,0,2,0,100,0,0,50,15300,22900,11,31325,0,0,0,0,0,1,0,0,0,0,0,0,0,"Feral Tender - At 50% HP - Cast Renew");
+
+-- Tainted Arcane Wraith SAI
+SET @ENTRY := 15298;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,8,0,100,1,28730,0,0,0,27,15468,28730,0,0,0,0,7,0,0,0,0,0,0,0,"Tainted Arcane Wraith - On Spellhit Arcane Torrent - Quest Credit"),
+(@ENTRY,0,1,0,8,0,100,1,25046,0,0,0,27,15468,28730,0,0,0,0,7,0,0,0,0,0,0,0,"Tainted Arcane Wraith - On Spellhit Arcane Torrent - Quest Credit"),
+(@ENTRY,0,2,0,0,0,100,0,9000,18800,21100,32200,11,25603,0,0,0,0,0,2,0,0,0,0,0,0,0,"Tainted Arcane Wraith - In Combat - Cast Slow");
diff --git a/sql/updates/world/2013_01_04_02_world_misc.sql b/sql/updates/world/2013_01_04_02_world_misc.sql
new file mode 100644
index 00000000000..6833a22ff23
--- /dev/null
+++ b/sql/updates/world/2013_01_04_02_world_misc.sql
@@ -0,0 +1,29 @@
+-- Add Gossip for Harrison Jones
+UPDATE `creature_template` SET `gossip_menu_id`=8932 WHERE `entry`=24358;
+DELETE FROM `gossip_menu` WHERE `entry`=8932 AND `text_id`=12135;
+INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES (8932,12135);
+DELETE FROM `gossip_menu_option` WHERE `menu_id`=8932 AND `id`=0;
+INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`) VALUES
+(8932,0,0, 'Thanks for the concern, but we intend to explore Zul''Aman.',1,1);
+
+-- Pathing for Harrison Jones Entry: 24358
+SET @NPC := 86177;
+SET @PATH := @NPC * 10;
+DELETE FROM `waypoint_data` WHERE `id`IN (@PATH,@PATH+1,@PATH+2);
+INSERT INTO `waypoint_data` (`id`,`point`,`position_x`,`position_y`,`position_z`,`delay`,`move_flag`,`action`,`action_chance`,`wpguid`) VALUES
+(@PATH,1,112.1772,1670.18,42.02158,0,0,0,100,0),
+(@PATH,2,82.44975,1655.312,42.02155,0,0,0,100,0),
+(@PATH,3,114.1627,1661.469,42.02158,0,0,0,100,0),
+(@PATH,4,131.8243,1644.853,42.0216,0,0,0,100,0),
+(@PATH+1,1,121.897,1639.106,42.19081,0,0,0,100,0),
+(@PATH+1,2,120.8522,1637.931,42.37172,0,0,0,100,0),
+(@PATH+1,3,120.7898,1609.063,43.49005,0,0,0,100,0),
+(@PATH+2,1,120.6967,1603.713,43.4503,0,0,0,100,0);
+
+-- Text for Harrison Jones from sniff
+DELETE FROM `creature_text` WHERE `entry` IN (24358);
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(24358,0,0, 'Suit yourself. At least five of you must assist me if we''re to get inside. Follow me....',14,0,100,1,0,0, 'Harrison Jones - Gong Event Say 0'),
+(24358,1,0, 'According to my calculations, if enough of us bang the gong at once the seal on these doors will break and we can enter.',14,0,100,1,0,0, 'Harrison Jones - Gong Event Say 1'),
+(24358,2,0, 'I''ve researched this site extensively and I won''t allow any dim-witted treasure hunters to swoop in and steal what belongs in a museum. I''ll lead this charge...',14,0,100,0,0,0, 'Harrison Jones - Gong Event Say 2'),
+(24358,3,0, 'In fact, it would be best if you just stay here. You''d only get in my way....',14,0,100,0,0,0, 'Harrison Jones - Gong Event Say 3');
diff --git a/src/server/collision/BoundingIntervalHierarchy.cpp b/src/server/collision/BoundingIntervalHierarchy.cpp
index 76218936879..ad3753ea3c9 100644
--- a/src/server/collision/BoundingIntervalHierarchy.cpp
+++ b/src/server/collision/BoundingIntervalHierarchy.cpp
@@ -241,7 +241,7 @@ void BIH::subdivide(int left, int right, std::vector<uint32> &tempTree, buildDat
bool BIH::writeToFile(FILE* wf) const
{
uint32 treeSize = tree.size();
- uint32 check=0, count=0;
+ uint32 check=0, count;
check += fwrite(&bounds.low(), sizeof(float), 3, wf);
check += fwrite(&bounds.high(), sizeof(float), 3, wf);
check += fwrite(&treeSize, sizeof(uint32), 1, wf);
diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp
index 31e49e4b8d3..a8d2a2248ad 100644
--- a/src/server/game/AI/CoreAI/PetAI.cpp
+++ b/src/server/game/AI/CoreAI/PetAI.cpp
@@ -251,6 +251,12 @@ void PetAI::UpdateAI(const uint32 diff)
for (TargetSpellList::const_iterator itr = targetSpellStore.begin(); itr != targetSpellStore.end(); ++itr)
delete itr->second;
}
+
+ // Update speed as needed to prevent dropping too far behind and despawning
+ me->UpdateSpeed(MOVE_RUN, true);
+ me->UpdateSpeed(MOVE_WALK, true);
+ me->UpdateSpeed(MOVE_FLIGHT, true);
+
}
void PetAI::UpdateAllies()
diff --git a/src/server/game/AI/EventAI/CreatureEventAI.cpp b/src/server/game/AI/EventAI/CreatureEventAI.cpp
index f1a1b8824c7..7172a187504 100644
--- a/src/server/game/AI/EventAI/CreatureEventAI.cpp
+++ b/src/server/game/AI/EventAI/CreatureEventAI.cpp
@@ -746,15 +746,12 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
break;
case ACTION_T_SUMMON_GO:
{
- GameObject* object = NULL;
-
float x, y, z;
me->GetPosition(x, y, z);
- object = me->SummonGameObject(action.raw.param1, x, y, z, 0, 0, 0, 0, 0, action.raw.param2);
+ GameObject* object = me->SummonGameObject(action.raw.param1, x, y, z, 0, 0, 0, 0, 0, action.raw.param2);
if (!object)
- {
sLog->outError(LOG_FILTER_TSCR, "EventAI failed to spawn object %u. Spawn event %d is on creature %d", action.raw.param1, eventId, me->GetEntry());
- }
+
break;
}
case ACTION_T_SET_SHEATH:
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 4b147e080e2..e68c8c27194 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2260,46 +2260,30 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /*
case SMART_TARGET_CREATURE_GUID:
{
Creature* target = NULL;
- if (e.target.unitGUID.entry)
+ if (!trigger && !GetBaseObject())
{
- uint64 guid = MAKE_NEW_GUID(e.target.unitGUID.guid, e.target.unitGUID.entry, HIGHGUID_UNIT);
- target = HashMapHolder<Creature>::Find(guid);
+ sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_CREATURE_GUID can not be used without invoker");
+ break;
}
- else
- {
- if (!trigger && !GetBaseObject())
- {
- sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_CREATURE_GUID can not be used without invoker and without entry");
- break;
- }
- target = FindCreatureNear(trigger ? trigger : GetBaseObject(), e.target.unitGUID.guid);
- }
+ target = FindCreatureNear(trigger ? trigger : GetBaseObject(), e.target.unitGUID.dbGuid);
- if (target)
+ if (target && (!e.target.unitGUID.entry || target->GetEntry() == e.target.unitGUID.entry))
l->push_back(target);
break;
}
case SMART_TARGET_GAMEOBJECT_GUID:
{
GameObject* target = NULL;
- if (e.target.unitGUID.entry)
+ if (!trigger && !GetBaseObject())
{
- uint64 guid = MAKE_NEW_GUID(e.target.goGUID.guid, e.target.goGUID.entry, HIGHGUID_GAMEOBJECT);
- target = HashMapHolder<GameObject>::Find(guid);
+ sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_GAMEOBJECT_GUID can not be used without invoker");
+ break;
}
- else
- {
- if (!trigger && !GetBaseObject())
- {
- sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_GAMEOBJECT_GUID can not be used without invoker and without entry");
- break;
- }
- target = FindGameObjectNear(trigger ? trigger : GetBaseObject(), e.target.goGUID.guid);
- }
+ target = FindGameObjectNear(trigger ? trigger : GetBaseObject(), e.target.goGUID.dbGuid);
- if (target)
+ if (target && (!e.target.goGUID.entry || target->GetEntry() == e.target.goGUID.entry))
l->push_back(target);
break;
}
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index b6690e35944..c70e78d5395 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -996,7 +996,7 @@ struct SmartTarget
struct
{
- uint32 guid;
+ uint32 dbGuid;
uint32 entry;
} unitGUID;
@@ -1031,7 +1031,7 @@ struct SmartTarget
struct
{
- uint32 guid;
+ uint32 dbGuid;
uint32 entry;
} goGUID;
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 4caee8bfd6c..2fd55ac29ef 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -2032,8 +2032,6 @@ void AchievementMgr::RemoveTimedAchievement(AchievementCriteriaTimedTypes type,
void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
{
- sLog->outInfo(LOG_FILTER_ACHIEVEMENTSYS, "AchievementMgr::CompletedAchievement(%u)", achievement->ID);
-
// disable for gamemasters with GM-mode enabled
if (m_player->isGameMaster())
return;
@@ -2041,6 +2039,9 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement->ID))
return;
+ sLog->outInfo(LOG_FILTER_ACHIEVEMENTSYS, "AchievementMgr::CompletedAchievement(%u). Player: %s (%u)",
+ achievement->ID, m_player->GetName().c_str(), m_player->GetGUIDLow());
+
SendAchievementEarned(achievement);
CompletedAchievementData& ca = m_completedAchievements[achievement->ID];
ca.date = time(NULL);
diff --git a/src/server/game/Addons/AddonMgr.h b/src/server/game/Addons/AddonMgr.h
index 5893b79165f..4d387fcfd4c 100644
--- a/src/server/game/Addons/AddonMgr.h
+++ b/src/server/game/Addons/AddonMgr.h
@@ -37,9 +37,8 @@ struct AddonInfo
struct SavedAddon
{
- SavedAddon(const std::string& name, uint32 crc)
+ SavedAddon(const std::string& name, uint32 crc) : Name(name)
{
- Name = name;
CRC = crc;
}
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index 837fa1039f3..32f71822737 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -41,6 +41,7 @@ Battlefield::Battlefield()
m_TypeId = 0;
m_BattleId = 0;
m_ZoneId = 0;
+ m_Map = NULL;
m_MapId = 0;
m_MaxPlayer = 0;
m_MinPlayer = 0;
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 9a7d2e58bb0..1b0955fb670 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -337,7 +337,7 @@ void ArenaTeam::Disband(WorldSession* session)
// Broadcast update
if (session)
{
- BroadcastEvent(ERR_ARENA_TEAM_DISBANDED_S, 0, 2, session->GetPlayerName().c_str(), GetName(), "");
+ BroadcastEvent(ERR_ARENA_TEAM_DISBANDED_S, 0, 2, session->GetPlayerName(), GetName(), "");
if (Player* player = session->GetPlayer())
sLog->outDebug(LOG_FILTER_ARENAS, "Player: %s [GUID: %u] disbanded arena team type: %u [Id: %u].", player->GetName().c_str(), player->GetGUIDLow(), GetType(), GetId());
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 6145ed3b6c2..71ac8cf8180 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -1135,9 +1135,8 @@ BattlegroundTypeId BattlegroundMgr::GetRandomBG(BattlegroundTypeId bgTypeId)
if (weight)
{
- uint32 selectedWeight = 0;
// Select a random value
- selectedWeight = urand(0, weight - 1);
+ uint32 selectedWeight = urand(0, weight - 1);
// Select the correct bg (if we have in DB A(10), B(20), C(10), D(15) --> [0---A---9|10---B---29|30---C---39|40---D---54])
weight = 0;
for (BattlegroundSelectionWeightMap::const_iterator it = selectionWeights.begin(); it != selectionWeights.end(); ++it)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
index 1082ad7df66..61c68bca121 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
@@ -30,6 +30,7 @@
BattlegroundAB::BattlegroundAB()
{
+ m_IsInformedNearVictory = false;
m_BuffChange = true;
BgObjects.resize(BG_AB_OBJECT_MAX);
BgCreatures.resize(BG_AB_ALL_NODES_COUNT + 5);//+5 for aura triggers
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 508147cec9f..bf0fbb4199d 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -1098,11 +1098,7 @@ void GameObject::Use(Unit* user)
case GAMEOBJECT_TYPE_BUTTON: //1
//doors/buttons never really despawn, only reset to default state/flags
UseDoorOrButton(0, false, user);
-
- // activate script
- GetMap()->ScriptsStart(sGameObjectScripts, GetDBTableGUIDLow(), spellCaster, this);
return;
-
case GAMEOBJECT_TYPE_QUESTGIVER: //2
{
if (user->GetTypeId() != TYPEID_PLAYER)
diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h
index 021e3d0aea5..d0b9819b0a3 100644
--- a/src/server/game/Entities/Object/ObjectDefines.h
+++ b/src/server/game/Entities/Object/ObjectDefines.h
@@ -34,7 +34,7 @@ enum HighGuid
HIGHGUID_DYNAMICOBJECT = 0xF100, // blizz F100
HIGHGUID_CORPSE = 0xF101, // blizz F100
HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
- HIGHGUID_GROUP = 0x1F05
+ HIGHGUID_GROUP = 0x1F50
};
// used for creating values for respawn for example
@@ -198,15 +198,15 @@ uint32 GUID_HIPART(uint64 guid)
uint32 GUID_ENPART(uint64 x)
{
return IsGuidHaveEnPart(x)
- ? ((uint32)((x >> 32) & UI64LIT(0x00000000000FFFFF)))
+ ? (uint32)((x >> 24) & UI64LIT(0x0000000000FFFFFF))
: 0;
}
uint32 GUID_LOPART(uint64 x)
{
return IsGuidHaveEnPart(x)
- ? ((uint32)(x & UI64LIT(0x00000000FFFFFFFF)))
- : ((uint32)(x & UI64LIT(0x0000000000FFFFFF)));
+ ? (uint32)(x & UI64LIT(0x0000000000FFFFFF))
+ : (uint32)(x & UI64LIT(0x00000000FFFFFFFF));
}
bool IsGuidHaveEnPart(uint64 guid)
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index fcfd6523812..d11f6d94734 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -1775,8 +1775,7 @@ void Pet::resetTalentsForAllPetsOf(Player* owner, Pet* online_pet /*= NULL*/)
ss << id;
need_comma = true;
- }
- while (resultPets->NextRow());
+ } while (resultPets->NextRow());
ss << ") AND spell IN (";
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 801530eb9f1..e501471b688 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -16008,6 +16008,8 @@ void Player::ItemRemovedQuestCheck(uint32 entry, uint32 count)
void Player::KilledMonster(CreatureTemplate const* cInfo, uint64 guid)
{
+ ASSERT(cInfo);
+
if (cInfo->Entry)
KilledMonsterCredit(cInfo->Entry, guid);
@@ -16160,6 +16162,12 @@ void Player::CastedCreatureOrGO(uint32 entry, uint64 guid, uint32 spell_id)
if (reqTarget != entry) // if entry doesn't match, check for killcredits referenced in template
{
CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry);
+ if (!cinfo)
+ {
+ sLog->outError(LOG_FILTER_PLAYER, "Player::CastedCreatureOrGO: GetCreatureTemplate failed for entry %u. Skipping.", entry);
+ continue;
+ }
+
for (uint8 k = 0; k < MAX_KILL_CREDIT; ++k)
if (cinfo->KillCredit[k] == reqTarget)
entry = cinfo->KillCredit[k];
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index 1bd7c1b217d..5cf0550905c 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -200,10 +200,9 @@ void Player::UpdateResistances(uint32 school)
void Player::UpdateArmor()
{
- float value = 0.0f;
UnitMods unitMod = UNIT_MOD_ARMOR;
- value = GetModifierValue(unitMod, BASE_VALUE); // base armor (from items)
+ float value = GetModifierValue(unitMod, BASE_VALUE); // base armor (from items)
value *= GetModifierValue(unitMod, BASE_PCT); // armor percent from items
value += GetStat(STAT_AGILITY) * 2.0f; // armor bonus from stats
value += GetModifierValue(unitMod, TOTAL_VALUE);
@@ -1091,10 +1090,9 @@ bool Guardian::UpdateStats(Stats stat)
case STAT_STRENGTH: mod = 0.7f; break; // Default Owner's Strength scale
default: break;
}
- // Ravenous Dead
- AuraEffect const* aurEff = NULL;
+
// Check just if owner has Ravenous Dead since it's effect is not an aura
- aurEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0);
+ AuraEffect const* aurEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0);
if (aurEff)
{
SpellInfo const* spellInfo = aurEff->GetSpellInfo(); // Then get the SpellProto and add the dummy effect value
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index b53b3a4c617..5d1ab9aa17a 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12712,9 +12712,27 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
case MOVE_SWIM:
case MOVE_FLIGHT:
{
- // Set creature speed rate from CreatureInfo
+ // Set creature speed rate
if (GetTypeId() == TYPEID_UNIT)
- speed *= ToCreature()->GetCreatureTemplate()->speed_run; // at this point, MOVE_WALK is never reached
+ {
+ Unit* pOwner = GetCharmerOrOwner();
+ if (isPet() && !isInCombat() && pOwner) // Must check for owner or crash on "Tame Beast"
+ {
+ // For every yard over 5, increase speed by 0.01
+ // to help prevent pet from lagging behind and despawning
+ float dist = GetDistance(pOwner);
+ float base_rate = 1.00f; // base speed is 100% of owner speed
+
+ if (dist < 5)
+ dist = 5;
+
+ float mult = base_rate + ((dist - 5) * 0.01f);
+
+ speed *= pOwner->GetSpeedRate(mtype) * mult; // pets derive speed from owner when not in combat
+ }
+ else
+ speed *= ToCreature()->GetCreatureTemplate()->speed_run; // at this point, MOVE_WALK is never reached
+ }
// Normalize speed by 191 aura SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED if need
// TODO: possible affect only on MOVE_RUN
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 32c6ffeb153..b41b61904e6 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -50,7 +50,6 @@
#include "World.h"
ScriptMapMap sSpellScripts;
-ScriptMapMap sGameObjectScripts;
ScriptMapMap sEventScripts;
ScriptMapMap sWaypointScripts;
@@ -60,7 +59,6 @@ std::string GetScriptsTableNameByType(ScriptsType type)
switch (type)
{
case SCRIPTS_SPELL: res = "spell_scripts"; break;
- case SCRIPTS_GAMEOBJECT: res = "gameobject_scripts"; break;
case SCRIPTS_EVENT: res = "event_scripts"; break;
case SCRIPTS_WAYPOINT: res = "waypoint_scripts"; break;
default: break;
@@ -74,7 +72,6 @@ ScriptMapMap* GetScriptsMapByType(ScriptsType type)
switch (type)
{
case SCRIPTS_SPELL: res = &sSpellScripts; break;
- case SCRIPTS_GAMEOBJECT: res = &sGameObjectScripts; break;
case SCRIPTS_EVENT: res = &sEventScripts; break;
case SCRIPTS_WAYPOINT: res = &sWaypointScripts; break;
default: break;
@@ -118,7 +115,7 @@ std::string GetScriptCommandName(ScriptCommands command)
default:
{
char sz[32];
- sprintf(sz, "Unknown command: %u", command);
+ sprintf(sz, "Unknown command: %d", command);
res = sz;
break;
}
@@ -4667,18 +4664,6 @@ void ObjectMgr::LoadScripts(ScriptsType type)
sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u script definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
-void ObjectMgr::LoadGameObjectScripts()
-{
- LoadScripts(SCRIPTS_GAMEOBJECT);
-
- // check ids
- for (ScriptMapMap::const_iterator itr = sGameObjectScripts.begin(); itr != sGameObjectScripts.end(); ++itr)
- {
- if (!GetGOData(itr->first))
- sLog->outError(LOG_FILTER_SQL, "Table `gameobject_scripts` has not existing gameobject (GUID: %u) as script id", itr->first);
- }
-}
-
void ObjectMgr::LoadSpellScripts()
{
LoadScripts(SCRIPTS_SPELL);
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 620a265ca1e..9339684964c 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -128,7 +128,6 @@ enum ScriptsType
SCRIPTS_FIRST = 1,
SCRIPTS_SPELL = SCRIPTS_FIRST,
- SCRIPTS_GAMEOBJECT,
SCRIPTS_EVENT,
SCRIPTS_WAYPOINT,
@@ -361,7 +360,6 @@ typedef std::map<uint32, ScriptMap > ScriptMapMap;
typedef std::multimap<uint32, uint32> SpellScriptsContainer;
typedef std::pair<SpellScriptsContainer::iterator, SpellScriptsContainer::iterator> SpellScriptsBounds;
extern ScriptMapMap sSpellScripts;
-extern ScriptMapMap sGameObjectScripts;
extern ScriptMapMap sEventScripts;
extern ScriptMapMap sWaypointScripts;
@@ -863,7 +861,6 @@ class ObjectMgr
return _creatureQuestInvolvedRelations.equal_range(creature_entry);
}
- void LoadGameObjectScripts();
void LoadEventScripts();
void LoadSpellScripts();
void LoadWaypointScripts();
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 886303c9b9c..d8e50be11f0 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -67,9 +67,8 @@ bool LoginQueryHolder::Initialize()
bool res = true;
uint32 lowGuid = GUID_LOPART(m_guid);
- PreparedStatement* stmt = NULL;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_FROM, stmt);
diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp
index b1db7f6563f..a64e8117ce9 100644
--- a/src/server/game/Loot/LootMgr.cpp
+++ b/src/server/game/Loot/LootMgr.cpp
@@ -664,7 +664,7 @@ void Loot::DeleteLootItemFromContainerItemDB(uint32 itemID)
CharacterDatabase.Execute(stmt);
// Mark the item looted to prevent resaving
- for (LootItemList::iterator _itr = items.begin(); _itr != items.end(); _itr++)
+ for (LootItemList::iterator _itr = items.begin(); _itr != items.end(); ++_itr)
{
if (_itr->itemid != itemID)
continue;
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index a7b7e4044b8..755d443091a 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -179,6 +179,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
else // attempt to downscale
mapDiff = GetDownscaledMapDifficultyData(entry->MapID, targetDifficulty);
}
+ // FIXME: mapDiff is never used
//Bypass checks for GMs
if (player->isGameMaster())
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index cdcacc86d3c..05696694033 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -789,7 +789,7 @@ enum SpellEffects
SPELL_EFFECT_APPLY_AREA_AURA_FRIEND = 128,
SPELL_EFFECT_APPLY_AREA_AURA_ENEMY = 129,
SPELL_EFFECT_REDIRECT_THREAT = 130,
- SPELL_EFFECT_131 = 131,
+ SPELL_EFFECT_PLAY_SOUND = 131,
SPELL_EFFECT_PLAY_MUSIC = 132,
SPELL_EFFECT_UNLEARN_SPECIALIZATION = 133,
SPELL_EFFECT_KILL_CREDIT2 = 134,
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp
index df0b3e3944f..b327d0d0cd6 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.cpp
+++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp
@@ -162,9 +162,11 @@ namespace Movement
{
if (_transformForTransport)
{
- float unused = 0.0f;
if (TransportBase* transport = _owner.GetDirectTransport())
+ {
+ float unused = 0.0f; // need reference
transport->CalculatePassengerOffset(input.x, input.y, input.z, unused);
+ }
}
return input;
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index d1f4162ee7a..479979f177f 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -192,6 +192,7 @@ void AddSC_boss_lorekeeperpolkelt();
void AddSC_boss_rasfrost();
void AddSC_boss_theravenian();
void AddSC_boss_vectus();
+void AddSC_boss_kirtonos_the_herald();
void AddSC_instance_scholomance();
void AddSC_shadowfang_keep(); //Shadowfang keep
void AddSC_instance_shadowfang_keep();
@@ -826,6 +827,7 @@ void AddEasternKingdomsScripts()
AddSC_boss_rasfrost();
AddSC_boss_theravenian();
AddSC_boss_vectus();
+ AddSC_boss_kirtonos_the_herald();
AddSC_instance_scholomance();
AddSC_shadowfang_keep(); //Shadowfang keep
AddSC_instance_shadowfang_keep();
diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp
index 7876ad2cb66..15025bf893d 100644
--- a/src/server/game/Server/WorldSocketMgr.cpp
+++ b/src/server/game/Server/WorldSocketMgr.cpp
@@ -60,7 +60,7 @@ class ReactorRunnable : protected ACE_Task_Base
m_Connections(0),
m_ThreadId(-1)
{
- ACE_Reactor_Impl* imp = 0;
+ ACE_Reactor_Impl* imp;
#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index dc5e2bae990..1fe8affc407 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -333,7 +333,7 @@ class Spell
void EffectPlayMusic(SpellEffIndex effIndex);
void EffectSpecCount(SpellEffIndex effIndex);
void EffectActivateSpec(SpellEffIndex effIndex);
- void EffectPlayerNotification(SpellEffIndex effIndex);
+ void EffectPlaySound(SpellEffIndex effIndex);
void EffectRemoveAura(SpellEffIndex effIndex);
void EffectCastButtons(SpellEffIndex effIndex);
void EffectRechargeManaGem(SpellEffIndex effIndex);
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index fa5cec3db6a..8913cf2ac20 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -198,7 +198,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
&Spell::EffectApplyAreaAura, //128 SPELL_EFFECT_APPLY_AREA_AURA_FRIEND
&Spell::EffectApplyAreaAura, //129 SPELL_EFFECT_APPLY_AREA_AURA_ENEMY
&Spell::EffectRedirectThreat, //130 SPELL_EFFECT_REDIRECT_THREAT
- &Spell::EffectPlayerNotification, //131 SPELL_EFFECT_PLAYER_NOTIFICATION sound id in misc value (SoundEntries.dbc)
+ &Spell::EffectPlaySound, //131 SPELL_EFFECT_PLAY_SOUND sound id in misc value (SoundEntries.dbc)
&Spell::EffectPlayMusic, //132 SPELL_EFFECT_PLAY_MUSIC sound id in misc value (SoundEntries.dbc)
&Spell::EffectUnlearnSpecialization, //133 SPELL_EFFECT_UNLEARN_SPECIALIZATION unlearn profession specialization
&Spell::EffectKillCredit, //134 SPELL_EFFECT_KILL_CREDIT misc value is creature entry
@@ -2010,7 +2010,6 @@ void Spell::SendLoot(uint64 guid, LootType loottype)
case GAMEOBJECT_TYPE_DOOR:
case GAMEOBJECT_TYPE_BUTTON:
gameObjTarget->UseDoorOrButton(0, false, player);
- player->GetMap()->ScriptsStart(sGameObjectScripts, gameObjTarget->GetDBTableGUIDLow(), player, gameObjTarget);
return;
case GAMEOBJECT_TYPE_QUESTGIVER:
@@ -6141,7 +6140,7 @@ void Spell::EffectActivateSpec(SpellEffIndex /*effIndex*/)
unitTarget->ToPlayer()->ActivateSpec(damage-1); // damage is 1 or 2, spec is 0 or 1
}
-void Spell::EffectPlayerNotification(SpellEffIndex effIndex)
+void Spell::EffectPlaySound(SpellEffIndex effIndex)
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
@@ -6154,20 +6153,21 @@ void Spell::EffectPlayerNotification(SpellEffIndex effIndex)
case 58730: // Restricted Flight Area
case 58600: // Restricted Flight Area
unitTarget->ToPlayer()->GetSession()->SendNotification(LANG_ZONE_NOFLYZONE);
- unitTarget->PlayDirectSound(9417); // Fel Reaver sound
+ break;
+ default:
break;
}
- uint32 soundid = m_spellInfo->Effects[effIndex].MiscValue;
+ uint32 soundId = m_spellInfo->Effects[effIndex].MiscValue;
- if (!sSoundEntriesStore.LookupEntry(soundid))
+ if (!sSoundEntriesStore.LookupEntry(soundId))
{
- sLog->outError(LOG_FILTER_SPELLS_AURAS, "EffectPlayerNotification: Sound (Id: %u) not exist in spell %u.", soundid, m_spellInfo->Id);
+ sLog->outError(LOG_FILTER_SPELLS_AURAS, "EffectPlayerSound: Sound (Id: %u) not exist in spell %u.", soundId, m_spellInfo->Id);
return;
}
WorldPacket data(SMSG_PLAY_SOUND, 4);
- data << uint32(soundid);
+ data << uint32(soundId);
unitTarget->ToPlayer()->GetSession()->SendPacket(&data);
}
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index be2d79d22b6..afbf85a0a13 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -684,7 +684,7 @@ SpellEffectInfo::StaticData SpellEffectInfo::_data[TOTAL_SPELL_EFFECTS] =
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 128 SPELL_EFFECT_APPLY_AREA_AURA_FRIEND
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 129 SPELL_EFFECT_APPLY_AREA_AURA_ENEMY
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 130 SPELL_EFFECT_REDIRECT_THREAT
- {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_UNIT}, // 131 SPELL_EFFECT_131
+ {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_UNIT}, // 131 SPELL_EFFECT_PLAY_SOUND
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 132 SPELL_EFFECT_PLAY_MUSIC
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 133 SPELL_EFFECT_UNLEARN_SPECIALIZATION
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_UNIT}, // 134 SPELL_EFFECT_KILL_CREDIT2
diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp
index ed7a10b8cb0..bff12280d89 100644
--- a/src/server/game/Warden/WardenWin.cpp
+++ b/src/server/game/Warden/WardenWin.cpp
@@ -453,8 +453,8 @@ void WardenWin::HandleData(ByteBuffer &buff)
if (luaStrLen != 0)
{
char *str = new char[luaStrLen + 1];
- memset(str, 0, luaStrLen + 1);
memcpy(str, buff.contents() + buff.rpos(), luaStrLen);
+ str[luaStrLen] = '\0'; // null terminator
sLog->outDebug(LOG_FILTER_WARDEN, "Lua string: %s", str);
delete[] str;
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 855d576a2dd..38faf4de22f 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1648,7 +1648,6 @@ void World::SetInitialWorldSettings()
///- Load and initialize scripts
sObjectMgr->LoadSpellScripts(); // must be after load Creature/Gameobject(Template/Data)
- sObjectMgr->LoadGameObjectScripts(); // must be after load Creature/Gameobject(Template/Data)
sObjectMgr->LoadEventScripts(); // must be after load Creature/Gameobject(Template/Data)
sObjectMgr->LoadWaypointScripts();
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index 3395047c720..2130e61cb47 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -1033,7 +1033,7 @@ public:
found = true;
}
}
-
+
if (!found)
handler->SendSysMessage(LANG_COMMAND_NOSPELLFOUND);
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index ef1fc681a31..43c2001fbf7 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -97,7 +97,6 @@ public:
{ "gameobject_involvedrelation", SEC_ADMINISTRATOR, true, &HandleReloadGOQuestInvRelationsCommand, "", NULL },
{ "gameobject_loot_template", SEC_ADMINISTRATOR, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL },
{ "gameobject_questrelation", SEC_ADMINISTRATOR, true, &HandleReloadGOQuestRelationsCommand, "", NULL },
- { "gameobject_scripts", SEC_ADMINISTRATOR, true, &HandleReloadGameObjectScriptsCommand, "", NULL },
{ "gm_tickets", SEC_ADMINISTRATOR, true, &HandleReloadGMTicketsCommand, "", NULL },
{ "gossip_menu", SEC_ADMINISTRATOR, true, &HandleReloadGossipMenuCommand, "", NULL },
{ "gossip_menu_option", SEC_ADMINISTRATOR, true, &HandleReloadGossipMenuOptionCommand, "", NULL },
@@ -260,7 +259,6 @@ public:
}
sLog->outInfo(LOG_FILTER_GENERAL, "Re-Loading Scripts...");
- HandleReloadGameObjectScriptsCommand(handler, "a");
HandleReloadEventScriptsCommand(handler, "a");
HandleReloadSpellScriptsCommand(handler, "a");
handler->SendGlobalGMSysMessage("DB tables `*_scripts` reloaded.");
@@ -951,26 +949,6 @@ public:
return true;
}
- static bool HandleReloadGameObjectScriptsCommand(ChatHandler* handler, const char* args)
- {
- if (sScriptMgr->IsScriptScheduled())
- {
- handler->SendSysMessage("DB scripts used currently, please attempt reload later.");
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (*args != 'a')
- sLog->outInfo(LOG_FILTER_GENERAL, "Re-Loading Scripts from `gameobject_scripts`...");
-
- sObjectMgr->LoadGameObjectScripts();
-
- if (*args != 'a')
- handler->SendGlobalGMSysMessage("DB table `gameobject_scripts` reloaded.");
-
- return true;
- }
-
static bool HandleReloadEventScriptsCommand(ChatHandler* handler, const char* args)
{
if (sScriptMgr->IsScriptScheduled())
diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt
index 15faf9dfb83..f581baa31fa 100644
--- a/src/server/scripts/EasternKingdoms/CMakeLists.txt
+++ b/src/server/scripts/EasternKingdoms/CMakeLists.txt
@@ -31,6 +31,7 @@ set(scripts_STAT_SRCS
EasternKingdoms/Scholomance/instance_scholomance.cpp
EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
+ EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
EasternKingdoms/zone_isle_of_queldanas.cpp
EasternKingdoms/boss_kruul.cpp
EasternKingdoms/ZulGurub/boss_hakkar.cpp
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
new file mode 100644
index 00000000000..091c9fd1f91
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -0,0 +1,331 @@
+/*
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "scholomance.h"
+#include "MoveSplineInit.h"
+#include "GameObjectAI.h"
+#include "Player.h"
+
+enum Says
+{
+ EMOTE_SUMMONED = 0
+};
+
+enum Spells
+{
+ SPELL_SWOOP = 18144,
+ SPELL_WING_FLAP = 12882,
+ SPELL_PIERCE_ARMOR = 6016,
+ SPELL_DISARM = 8379,
+
+ SPELL_KIRTONOS_TRANSFORM = 16467,
+
+ SPELL_SHADOW_BOLT = 17228,
+ SPELL_CURSE_OF_TONGUES = 12889,
+ SPELL_DONINATE_MIND = 14515
+};
+
+enum Events
+{
+ INTRO_1 = 1,
+ INTRO_2 = 2,
+ INTRO_3 = 3,
+ INTRO_4 = 4,
+ INTRO_5 = 5,
+ INTRO_6 = 6,
+ EVENT_SWOOP = 7,
+ EVENT_WING_FLAP = 8,
+ EVENT_PIERCE_ARMOR = 9,
+ EVENT_DISARM = 10,
+ EVENT_SHADOW_BOLT = 11,
+ EVENT_CURSE_OF_TONGUES = 12,
+ EVENT_DONINATE_MIND = 13,
+ EVENT_KIRTONOS_TRANSFORM = 14
+};
+
+enum Points
+{
+ MAX_KIRTONOS_WAYPOINTS_INTRO = 14,
+ POINT_KIRTONOS_LAND = 14
+};
+
+enum Misc
+{
+ WEAPON_KIRTONOS_STAFF = 11365
+};
+
+Position const kirtonosIntroWaypoint[MAX_KIRTONOS_WAYPOINTS_INTRO] =
+{
+ {316.7087f, 71.26834f, 104.5843f, 0.0f},
+ {321.1605f, 72.80973f, 104.6676f, 0.0f},
+ {332.3713f, 77.98991f, 105.8621f, 0.0f},
+ {333.3254f, 86.60159f, 106.6399f, 0.0f},
+ {334.1263f, 101.6836f, 106.8343f, 0.0f},
+ {331.0458f, 114.5935f, 106.3621f, 0.0f},
+ {329.5439f, 126.7019f, 106.1399f, 0.0f},
+ {335.2471f, 136.5460f, 105.7232f, 0.0f},
+ {343.2100f, 139.9459f, 107.6399f, 0.0f},
+ {364.3288f, 140.9012f, 109.9454f, 0.0f},
+ {362.6760f, 115.6384f, 110.3065f, 0.0f},
+ {341.7896f, 91.94390f, 107.1676f, 0.0f},
+ {313.4945f, 93.45945f, 104.0565f, 0.0f},
+ {306.3839f, 93.61675f, 104.0565f, 0.0f},
+};
+
+class boss_kirtonos_the_herald : public CreatureScript
+{
+ public: boss_kirtonos_the_herald() : CreatureScript("boss_kirtonos_the_herald") { }
+
+ struct boss_kirtonos_the_heraldAI : public BossAI
+ {
+ boss_kirtonos_the_heraldAI(Creature* creature) : BossAI(creature, TYPE_KIRTONOS) { }
+
+ void Reset()
+ {
+ _introEvent = 0;
+ _introTimer = 0;
+ _Reset();
+ }
+
+ void EnterCombat(Unit* /*who*/)
+ {
+ _introTimer = 0;
+ _introEvent = 0;
+ events.ScheduleEvent(EVENT_SWOOP, urand(8000, 8000));
+ events.ScheduleEvent(EVENT_WING_FLAP, urand(15000, 15000));
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(18000, 18000));
+ events.ScheduleEvent(EVENT_DISARM, urand(22000, 22000));
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(42000, 42000));
+ events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, urand(53000, 53000));
+ events.ScheduleEvent(EVENT_DONINATE_MIND, urand(34000, 48000));
+ events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, urand(20000, 20000));
+ _EnterCombat();
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
+ {
+ brazier->ResetDoorOrButton();
+ brazier->SetGoState(GO_STATE_READY);
+ }
+ _JustDied();
+ }
+
+ void EnterEvadeMode()
+ {
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
+ {
+ brazier->ResetDoorOrButton();
+ brazier->SetGoState(GO_STATE_READY);
+ }
+ me->DespawnOrUnsummon(5000);
+ }
+
+ void DamageTaken(Unit* /*killer*/, uint32 &damage)
+ {
+
+ }
+
+ void IsSummonedBy(Unit* summoner)
+ {
+ me->SetDisableGravity(true);
+ me->SetReactState(REACT_PASSIVE);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ _introEvent = INTRO_1;
+ _introTimer = 1;
+ _currentPoint = 0;
+ Talk(EMOTE_SUMMONED);
+ }
+
+ void JustSummoned(Creature* summon)
+ {
+ BossAI::JustSummoned(summon);
+ }
+
+ void MovementInform(uint32 movementType, uint32 pointId)
+ {
+ if (movementType != POINT_MOTION_TYPE)
+ return;
+
+ _currentPoint = pointId + 1;
+ }
+
+ void UpdateAI(uint32 const diff)
+ {
+ if (_introEvent)
+ {
+ if (_introTimer <= diff)
+ {
+ switch (_introEvent)
+ {
+ case INTRO_1:
+ if (_currentPoint < POINT_KIRTONOS_LAND)
+ me->GetMotionMaster()->MovePoint(_currentPoint, kirtonosIntroWaypoint[_currentPoint]);
+ else
+ {
+ _introTimer = 1000;
+ _introEvent = INTRO_2;
+ }
+ break;
+ case INTRO_2:
+ me->SetWalk(true);
+ me->GetMotionMaster()->MovePoint(0, 299.4884f, 92.76137f, 105.6335f);
+ _introTimer = 1000;
+ _introEvent = INTRO_3;
+ break;
+ case INTRO_3:
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_READY);
+ me->SetFacingTo(0.01745329f);
+ _introTimer = 3000;
+ _introEvent = INTRO_4;
+ break;
+ case INTRO_4:
+ if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
+ brazier->SetGoState(GO_STATE_READY);
+ me->SetDisableGravity(false);
+ DoCast(me, SPELL_KIRTONOS_TRANSFORM);
+ _introTimer = 1000;
+ _introEvent = INTRO_5;
+ break;
+ case INTRO_5:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ me->SetReactState(REACT_AGGRESSIVE);
+ _introTimer = 5000;
+ _introEvent = INTRO_6;
+ case INTRO_6:
+ me->GetMotionMaster()->MovePoint(0, 314.8673f, 90.3021f, 101.6459f);
+ _introTimer = 0;
+ _introEvent = 0;
+ break;
+ }
+ }
+ else
+ _introTimer -= diff;
+ }
+
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SWOOP:
+ DoCast(me, SPELL_SWOOP);
+ events.ScheduleEvent(EVENT_SWOOP, urand(15000, 15000));
+ break;
+ case EVENT_WING_FLAP:
+ DoCast(me, SPELL_WING_FLAP);
+ events.ScheduleEvent(EVENT_WING_FLAP, urand(13000, 13000));
+ break;
+ case EVENT_PIERCE_ARMOR:
+ DoCastVictim(SPELL_PIERCE_ARMOR, true);
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(12000, 12000));
+ break;
+ case EVENT_DISARM:
+ DoCastVictim(SPELL_DISARM, true);
+ events.ScheduleEvent(EVENT_DISARM, urand(11000, 11000));
+ break;
+ case EVENT_SHADOW_BOLT:
+ DoCastVictim(SPELL_SHADOW_BOLT, true);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(42000, 42000));
+ break;
+ case EVENT_CURSE_OF_TONGUES:
+ DoCastVictim(SPELL_CURSE_OF_TONGUES, true);
+ events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, urand(35000, 35000));
+ break;
+ case EVENT_DONINATE_MIND:
+ DoCastVictim(SPELL_DONINATE_MIND, true);
+ events.ScheduleEvent(EVENT_DONINATE_MIND, urand(44000, 48000));
+ break;
+ case EVENT_KIRTONOS_TRANSFORM:
+ if (me->HasAura(SPELL_KIRTONOS_TRANSFORM))
+ {
+ me->RemoveAura(SPELL_KIRTONOS_TRANSFORM);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(0));
+ }
+ else
+ {
+ DoCast(me, SPELL_KIRTONOS_TRANSFORM);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
+ }
+ events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, urand(16000, 18000));
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ uint8 _introEvent;
+ uint32 _introTimer;
+ uint32 _currentPoint;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_kirtonos_the_heraldAI(creature);
+ }
+};
+
+/*######
+## go_brazier_of_the_herald
+######*/
+
+enum Brazier_Of_The_Herald
+{
+ NPC_KIRTONOS = 10506,
+ SOUND_SCREECH = 557
+};
+
+class go_brazier_of_the_herald : public GameObjectScript
+{
+public:
+ go_brazier_of_the_herald() : GameObjectScript("go_brazier_of_the_herald") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ go->UseDoorOrButton();
+ go->PlayDirectSound(SOUND_SCREECH,0);
+ player->SummonCreature(NPC_KIRTONOS, 315.028f, 70.53845f, 102.1496f, 0.3859715f, TEMPSUMMON_DEAD_DESPAWN, 900000);
+ return true;
+ }
+};
+
+void AddSC_boss_kirtonos_the_herald()
+{
+ new boss_kirtonos_the_herald();
+ new go_brazier_of_the_herald;
+}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
index 583b9074433..fc966c4bbb9 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
@@ -27,17 +27,6 @@ EndScriptData */
#include "InstanceScript.h"
#include "scholomance.h"
-#define GO_GATE_KIRTONOS 175570
-#define GO_GATE_GANDLING 177374
-#define GO_GATE_MALICIA 177375
-#define GO_GATE_THEOLEN 177377
-#define GO_GATE_POLKELT 177376
-#define GO_GATE_RAVENIAN 177372
-#define GO_GATE_BAROV 177373
-#define GO_GATE_ILLUCIA 177371
-
-#define MAX_ENCOUNTER 2
-
class instance_scholomance : public InstanceMapScript
{
public:
@@ -64,6 +53,7 @@ public:
uint64 GateRavenianGUID;
uint64 GateBarovGUID;
uint64 GateIlluciaGUID;
+ uint64 BrazierOfTheHeraldGUID;
void Initialize()
{
@@ -77,6 +67,7 @@ public:
GateRavenianGUID = 0;
GateBarovGUID = 0;
GateIlluciaGUID = 0;
+ BrazierOfTheHeraldGUID = 0;
for (uint8 i = 0; i < 6; ++i)
IsBossDied[i] = false;
@@ -86,14 +77,15 @@ public:
{
switch (go->GetEntry())
{
- case GO_GATE_KIRTONOS: GateKirtonosGUID = go->GetGUID(); break;
- case GO_GATE_GANDLING: GateGandlingGUID = go->GetGUID(); break;
- case GO_GATE_MALICIA: GateMiliciaGUID = go->GetGUID(); break;
- case GO_GATE_THEOLEN: GateTheolenGUID = go->GetGUID(); break;
- case GO_GATE_POLKELT: GatePolkeltGUID = go->GetGUID(); break;
- case GO_GATE_RAVENIAN: GateRavenianGUID = go->GetGUID(); break;
- case GO_GATE_BAROV: GateBarovGUID = go->GetGUID(); break;
- case GO_GATE_ILLUCIA: GateIlluciaGUID = go->GetGUID(); break;
+ case GO_GATE_KIRTONOS: GateKirtonosGUID = go->GetGUID(); break;
+ case GO_GATE_GANDLING: GateGandlingGUID = go->GetGUID(); break;
+ case GO_GATE_MALICIA: GateMiliciaGUID = go->GetGUID(); break;
+ case GO_GATE_THEOLEN: GateTheolenGUID = go->GetGUID(); break;
+ case GO_GATE_POLKELT: GatePolkeltGUID = go->GetGUID(); break;
+ case GO_GATE_RAVENIAN: GateRavenianGUID = go->GetGUID(); break;
+ case GO_GATE_BAROV: GateBarovGUID = go->GetGUID(); break;
+ case GO_GATE_ILLUCIA: GateIlluciaGUID = go->GetGUID(); break;
+ case GO_BRAZIER_OF_THE_HERALD: BrazierOfTheHeraldGUID = go->GetGUID(); break;
}
}
@@ -135,6 +127,19 @@ public:
IsBossDied[3] && IsBossDied[4] && IsBossDied[5])
? IN_PROGRESS : 0;
}
+
+ uint64 GetData64(uint32 type) const
+ {
+ switch (type)
+ {
+ case GO_GATE_KIRTONOS:
+ return GateKirtonosGUID;
+ case GO_BRAZIER_OF_THE_HERALD:
+ return BrazierOfTheHeraldGUID;
+ }
+
+ return 0;
+ }
};
};
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
index bae7c8c8efc..20b782fd43a 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
+++ b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
@@ -19,13 +19,31 @@
#ifndef DEF_SCHOLOMANCE_H
#define DEF_SCHOLOMANCE_H
-#define TYPE_GANDLING 1
-#define DATA_DOCTORTHEOLENKRASTINOV_DEATH 2
-#define DATA_INSTRUCTORMALICIA_DEATH 3
-#define DATA_LADYILLUCIABAROV_DEATH 4
-#define DATA_LORDALEXEIBAROV_DEATH 5
-#define DATA_LOREKEEPERPOLKELT_DEATH 6
-#define DATA_THERAVENIAN_DEATH 7
-#define TYPE_KIRTONOS 8
-#endif
+uint32 const MAX_ENCOUNTER = 2;
+
+enum DataTypes
+{
+ TYPE_GANDLING = 1,
+ DATA_DOCTORTHEOLENKRASTINOV_DEATH = 2,
+ DATA_INSTRUCTORMALICIA_DEATH = 3,
+ DATA_LADYILLUCIABAROV_DEATH = 4,
+ DATA_LORDALEXEIBAROV_DEATH = 5,
+ DATA_LOREKEEPERPOLKELT_DEATH = 6,
+ DATA_THERAVENIAN_DEATH = 7,
+ TYPE_KIRTONOS = 8
+};
+enum GameobjectIds
+{
+ GO_GATE_KIRTONOS = 175570,
+ GO_GATE_GANDLING = 177374,
+ GO_GATE_MALICIA = 177375,
+ GO_GATE_THEOLEN = 177377,
+ GO_GATE_POLKELT = 177376,
+ GO_GATE_RAVENIAN = 177372,
+ GO_GATE_BAROV = 177373,
+ GO_GATE_ILLUCIA = 177371,
+ GO_BRAZIER_OF_THE_HERALD = 175564
+};
+
+#endif
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 25daff60761..952363c6dcf 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -153,13 +153,13 @@ enum Texts
SAY_KILLED_PLAYER_P_THREE = 12,
SAY_SPELL_CASTING_P_THREE = 13,
SAY_DEATH,
-
+
// Alexstrasza
SAY_ONE = 0,
SAY_TWO = 1,
SAY_THREE = 2,
SAY_FOUR = 3,
-
+
// Power Sparks
EMOTE_POWER_SPARK_SUMMONED = 0
};
diff --git a/src/server/shared/Dynamic/LinkedReference/Reference.h b/src/server/shared/Dynamic/LinkedReference/Reference.h
index c221753cfbf..4c3630b175d 100644
--- a/src/server/shared/Dynamic/LinkedReference/Reference.h
+++ b/src/server/shared/Dynamic/LinkedReference/Reference.h
@@ -20,7 +20,7 @@
#define _REFERENCE_H
#include "Dynamic/LinkedList.h"
-#include <assert.h>
+#include "Errors.h" // for ASSERT
//=====================================================
@@ -45,7 +45,7 @@ template <class TO, class FROM> class Reference : public LinkedListElement
// Create new link
void link(TO* toObj, FROM* fromObj)
{
- assert(fromObj); // fromObj MUST not be NULL
+ ASSERT(fromObj); // fromObj MUST not be NULL
if (isValid())
unlink();
if (toObj != NULL)
diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp
index 50fbaa799c6..0d9314c48a3 100644
--- a/src/server/shared/Utilities/Util.cpp
+++ b/src/server/shared/Utilities/Util.cpp
@@ -20,6 +20,7 @@
#include "Common.h"
#include "utf8.h"
#include "SFMT.h"
+#include "Errors.h" // for ASSERT
#include <ace/TSS_T.h>
#include <ace/INET_Addr.h>
@@ -28,19 +29,19 @@ static SFMTRandTSS sfmtRand;
int32 irand(int32 min, int32 max)
{
- assert(max >= min);
+ ASSERT(max >= min);
return int32(sfmtRand->IRandom(min, max));
}
uint32 urand(uint32 min, uint32 max)
{
- assert(max >= min);
+ ASSERT(max >= min);
return sfmtRand->URandom(min, max);
}
float frand(float min, float max)
{
- assert(max >= min);
+ ASSERT(max >= min);
return float(sfmtRand->Random() * (max - min) + min);
}
diff --git a/src/server/worldserver/RemoteAccess/RARunnable.cpp b/src/server/worldserver/RemoteAccess/RARunnable.cpp
index e64e8d03115..8d57ef6c3b2 100644
--- a/src/server/worldserver/RemoteAccess/RARunnable.cpp
+++ b/src/server/worldserver/RemoteAccess/RARunnable.cpp
@@ -35,7 +35,7 @@
RARunnable::RARunnable()
{
- ACE_Reactor_Impl* imp = NULL;
+ ACE_Reactor_Impl* imp;
#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
imp = new ACE_Dev_Poll_Reactor();
diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp
index 57f9b421dbe..c642f73ccae 100644
--- a/src/tools/vmap4_extractor/model.cpp
+++ b/src/tools/vmap4_extractor/model.cpp
@@ -77,8 +77,7 @@ bool Model::ConvertToVMAPModel(const char * outfilename)
return false;
}
fwrite(szRawVMAPMagic, 8, 1, output);
- uint32 nVertices = 0;
- nVertices = header.nBoundingVertices;
+ uint32 nVertices = header.nBoundingVertices;
fwrite(&nVertices, sizeof(int), 1, output);
uint32 nofgroups = 1;
fwrite(&nofgroups,sizeof(uint32), 1, output);
@@ -91,8 +90,7 @@ bool Model::ConvertToVMAPModel(const char * outfilename)
wsize = sizeof(branches) + sizeof(uint32) * branches;
fwrite(&wsize, sizeof(int), 1, output);
fwrite(&branches,sizeof(branches), 1, output);
- uint32 nIndexes = 0;
- nIndexes = header.nBoundingTriangles;
+ uint32 nIndexes = header.nBoundingTriangles;
fwrite(&nIndexes,sizeof(uint32), 1, output);
fwrite("INDX",4, 1, output);
wsize = sizeof(uint32) + sizeof(unsigned short) * nIndexes;