diff options
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; |
