diff options
34 files changed, 1086 insertions, 254 deletions
@@ -38,9 +38,6 @@ https://github.com/TrinityCore/TrinityCore For further information on the TrinityCore project, please visit our project website at http://www.TrinityCore.org -To get nightly builds of the master branch of TrinityCore, please visit -http://www.TrinityCore.net - Documentation including installation instructions can be found inside the doc directory. diff --git a/sql/updates/world/2012_09_19_00_world_dwarfageddon.sql b/sql/updates/world/2012_09_19_00_world_dwarfageddon.sql new file mode 100644 index 00000000000..1eda383b67d --- /dev/null +++ b/sql/updates/world/2012_09_19_00_world_dwarfageddon.sql @@ -0,0 +1,16 @@ +-- Edit the required spell credit markers for Dwarfageddon (10/25 player) achievements +UPDATE `spell_dbc` SET `attributes`=0x00800100,`DmgMultiplier1`=0, `DmgMultiplier2`=0, `DmgMultiplier3`=0,`RangeIndex`=12 WHERE `ID`=65387; -- (SPELL_ATTR0_HIDE_IN_COMBAT_LOG, SPELL_ATTR0_CASTABLE_WHILE_DEAD) +-- Edit SAI support for Dwarfageddon (10 and 25 player) achievement /required changes since attribute castable_while_dead is not working/ +SET @Defender := 33236; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@Defender 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 +(@Defender,0,0,0,25,0,100,0,0,0,0,0,42,0,1,0,0,0,0,1,0,0,0,0,0,0,0,'Steelforged Defender - On reset - Set Invincibility for 1%'), +(@Defender,0,1,2,2,0,100,0,1,1,0,0,11,65387,0,0,0,0,0,1,0,0,0,0,0,0,0,'Steelforged Defender - Health Percentage (1%) - Cast spell for achievement credit'), +(@Defender,0,2,0,61,0,100,0,0,0,0,0,37,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Steelforged Defender - Linked with previous event - Die'), +(@Defender,0,3,0,0,0,100,0,0,2500,9000,12000,11,62845,0,0,0,0,0,2,0,0,0,0,0,0,0,'Steelforged Defender - IC - Hamstring'), +(@Defender,0,4,0,0,0,100,0,0,2600,13000,14000,11,50370,0,0,0,0,0,2,0,0,0,0,0,0,0,'Steelforged Defender - IC - Cast Sunder armor'), +(@Defender,0,5,0,0,0,100,0,500,4000,4500,9000,11,57780,0,0,0,0,0,2,0,0,0,0,0,0,0,'Steelforged Defender - IC - Cast Lightening Bolt'); +-- Add conditions to prevent lag and for the sake of logic +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (65387); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(13,1,65387,0,1,31,0,4,0,0,0,0,'','Steelforged Defender kill credit for achievement can hit only players'); diff --git a/sql/updates/world/2012_09_19_00_world_reference_loot_template.sql b/sql/updates/world/2012_09_19_00_world_reference_loot_template.sql new file mode 100644 index 00000000000..7db30ede52b --- /dev/null +++ b/sql/updates/world/2012_09_19_00_world_reference_loot_template.sql @@ -0,0 +1,449 @@ +-- Changes To VOA Loot +-- Update gold drops for bosses +-- Archavon 10 & 25 +UPDATE `creature_template` SET `mingold`=1700000,`maxgold`=1800000 WHERE `entry` IN (31125,31722); +-- Emalon & koralon 10 & 25 +UPDATE `creature_template` SET `mingold`=1800000,`maxgold`=1900000 WHERE `entry` IN (33993,33994,35013,35360); +-- Toravon 10 & 25 +UPDATE `creature_template` SET `mingold`=1900000,`maxgold`=2000000 WHERE `entry` IN (38433,38462); +-- Combine PVP and PVE ref templates so loot has chance to be all pvp or all pve not one of each +-- Revome deadly items other than chest lega and hands from Archavon 25 loot +-- Toravon 25 drops 3 items +SET @ARCHAVON10 = 34209; +SET @ARCHAVON25 = 34216; +SET @EMALON10 = 34208; +SET @EMALON25 = 34215; +SET @TORAVON10 = 34206; +SET @TORAVON25 = 34207; +SET @KORALON10 = 34204; +SET @KORALON25 = 34205; +-- Create Reference loot template for @ARCHAVON25 T7(25) & Deadly Chest,Legs,Hands +DELETE FROM `reference_loot_template` WHERE `entry` IN (@ARCHAVON25,@KORALON25,@EMALON25); +INSERT INTO `reference_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES +(@ARCHAVON25,40550,0,1,1,1,1), -- Valorous Scourgeborne Battleplate +(@ARCHAVON25,40552,0,1,1,1,1), -- Valorous Scourgeborne Gauntlets +(@ARCHAVON25,40556,0,1,1,1,1), -- Valorous Scourgeborne Legplates +(@ARCHAVON25,40559,0,1,1,1,1), -- Valorous Scourgeborne Chestguard +(@ARCHAVON25,40563,0,1,1,1,1), -- Valorous Scourgeborne Handguards +(@ARCHAVON25,40567,0,1,1,1,1), -- Valorous Scourgeborne Legguards +(@ARCHAVON25,40463,0,1,1,1,1), -- Valorous Dreamwalker Robe +(@ARCHAVON25,40460,0,1,1,1,1), -- Valorous Dreamwalker Handguards +(@ARCHAVON25,40462,0,1,1,1,1), -- Valorous Dreamwalker Leggings +(@ARCHAVON25,40503,0,1,1,1,1), -- Valorous Cryptstalker Tunic +(@ARCHAVON25,40504,0,1,1,1,1), -- Valorous Cryptstalker Handguards +(@ARCHAVON25,40506,0,1,1,1,1), -- Valorous Cryptstalker Legguards +(@ARCHAVON25,40418,0,1,1,1,1), -- Valorous Frostfire Robe +(@ARCHAVON25,40415,0,1,1,1,1), -- Valorous Frostfire Gloves +(@ARCHAVON25,40417,0,1,1,1,1), -- Valorous Frostfire Leggings +(@ARCHAVON25,40569,0,1,1,1,1), -- Valorous Redemption Tunic +(@ARCHAVON25,40570,0,1,1,1,1), -- Valorous Redemption Gloves +(@ARCHAVON25,40572,0,1,1,1,1), -- Valorous Redemption Greaves +(@ARCHAVON25,40579,0,1,1,1,1), -- Valorous Redemption Breastplate +(@ARCHAVON25,40580,0,1,1,1,1), -- Valorous Redemption Handguards +(@ARCHAVON25,40583,0,1,1,1,1), -- Valorous Redemption Legguards +(@ARCHAVON25,40574,0,1,1,1,1), -- Valorous Redemption Chestpiece +(@ARCHAVON25,40575,0,1,1,1,1), -- Valorous Redemption Gauntlets +(@ARCHAVON25,40577,0,1,1,1,1), -- Valorous Redemption Legplates +(@ARCHAVON25,40449,0,1,1,1,1), -- Valorous Robe of Faith +(@ARCHAVON25,40445,0,1,1,1,1), -- Valorous Gloves of Faith +(@ARCHAVON25,40448,0,1,1,1,1), -- Valorous Leggings of Faith +(@ARCHAVON25,40458,0,1,1,1,1), -- Valorous Raiments of Faith +(@ARCHAVON25,40454,0,1,1,1,1), -- Valorous Handwraps of Faith +(@ARCHAVON25,40457,0,1,1,1,1), -- Valorous Pants of Faith +(@ARCHAVON25,40495,0,1,1,1,1), -- Valorous Bonescythe Breastplate +(@ARCHAVON25,40496,0,1,1,1,1), -- Valorous Bonescythe Gauntlets +(@ARCHAVON25,40500,0,1,1,1,1), -- Valorous Bonescythe Legplates +(@ARCHAVON25,40514,0,1,1,1,1), -- Valorous Earthshatter Hauberk +(@ARCHAVON25,40515,0,1,1,1,1), -- Valorous Earthshatter Gloves +(@ARCHAVON25,40517,0,1,1,1,1), -- Valorous Earthshatter Kilt +(@ARCHAVON25,40523,0,1,1,1,1), -- Valorous Earthshatter Chestguard +(@ARCHAVON25,40520,0,1,1,1,1), -- Valorous Earthshatter Grips +(@ARCHAVON25,40522,0,1,1,1,1), -- Valorous Earthshatter War-Kilt +(@ARCHAVON25,40508,0,1,1,1,1), -- Valorous Earthshatter Tunic +(@ARCHAVON25,40509,0,1,1,1,1), -- Valorous Earthshatter Handguards +(@ARCHAVON25,40512,0,1,1,1,1), -- Valorous Earthshatter Legguards +(@ARCHAVON25,40423,0,1,1,1,1), -- Valorous Plagueheart Robe +(@ARCHAVON25,40420,0,1,1,1,1), -- Valorous Plagueheart Gloves +(@ARCHAVON25,40422,0,1,1,1,1), -- Valorous Plagueheart Leggings +(@ARCHAVON25,40525,0,1,1,1,1), -- Valorous Dreadnaught Battleplate +(@ARCHAVON25,40527,0,1,1,1,1), -- Valorous Dreadnaught Gauntlets +(@ARCHAVON25,40529,0,1,1,1,1), -- Valorous Dreadnaught Legplates +(@ARCHAVON25,40544,0,1,1,1,1), -- Valorous Dreadnaught Breastplate +(@ARCHAVON25,40545,0,1,1,1,1), -- Valorous Dreadnaught Handguards +(@ARCHAVON25,40547,0,1,1,1,1), -- Valorous Dreadnaught Legguards +(@ARCHAVON25,40469,0,1,1,1,1), -- Valorous Dreamwalker Vestments +(@ARCHAVON25,40466,0,1,1,1,1), -- Valorous Dreamwalker Gloves +(@ARCHAVON25,40468,0,1,1,1,1), -- Valorous Dreamwalker Trousers +(@ARCHAVON25,40471,0,1,1,1,1), -- Valorous Dreamwalker Raiments +(@ARCHAVON25,40472,0,1,1,1,1), -- Valorous Dreamwalker Handgrips +(@ARCHAVON25,40493,0,1,1,1,1), -- Valorous Dreamwalker Legguards +(@ARCHAVON25,40786,0,1,1,1,1), -- Deadly Gladiator's Plate Chestpiece +(@ARCHAVON25,41951,0,1,1,1,1), -- Deadly Gladiator's Silk Raiment +(@ARCHAVON25,41997,0,1,1,1,1), -- Deadly Gladiator's Felweave Raiment +(@ARCHAVON25,41649,0,1,1,1,1), -- Deadly Gladiator's Leather Tunic +(@ARCHAVON25,40784,0,1,1,1,1), -- Deadly Gladiator's Dreadplate Chestpiece +(@ARCHAVON25,41086,0,1,1,1,1), -- Deadly Gladiator's Chain Armor +(@ARCHAVON25,41920,0,1,1,1,1), -- Deadly Gladiator's Satin Robe +(@ARCHAVON25,40785,0,1,1,1,1), -- Deadly Gladiator's Scaled Chestpiece +(@ARCHAVON25,41660,0,1,1,1,1), -- Deadly Gladiator's Dragonhide Robes +(@ARCHAVON25,41858,0,1,1,1,1), -- Deadly Gladiator's Mooncloth Robe +(@ARCHAVON25,40905,0,1,1,1,1), -- Deadly Gladiator's Ornamented Chestguard +(@ARCHAVON25,40990,0,1,1,1,1), -- Deadly Gladiator's Ringmail Armor +(@ARCHAVON25,41315,0,1,1,1,1), -- Deadly Gladiator's Wyrmhide Robes +(@ARCHAVON25,41309,0,1,1,1,1), -- Deadly Gladiator's Kodohide Robes +(@ARCHAVON25,41080,0,1,1,1,1), -- Deadly Gladiator's Linked Armor +(@ARCHAVON25,40991,0,1,1,1,1), -- Deadly Gladiator's Mail Armor +(@ARCHAVON25,40926,0,1,1,1,1), -- Deadly Gladiator's Ornamented Gloves +(@ARCHAVON25,40938,0,1,1,1,1), -- Deadly Gladiator's Ornamented Legplates +(@ARCHAVON25,40846,0,1,1,1,1), -- Deadly Gladiator's Scaled Legguards +(@ARCHAVON25,41863,0,1,1,1,1), -- Deadly Gladiator's Mooncloth Leggings +(@ARCHAVON25,41926,0,1,1,1,1), -- Deadly Gladiator's Satin Leggings +(@ARCHAVON25,41873,0,1,1,1,1), -- Deadly Gladiator's Mooncloth Gloves +(@ARCHAVON25,41032,0,1,1,1,1), -- Deadly Gladiator's Mail Leggings +(@ARCHAVON25,41006,0,1,1,1,1), -- Deadly Gladiator's Mail Gauntlets +(@ARCHAVON25,41198,0,1,1,1,1), -- Deadly Gladiator's Linked Leggings +(@ARCHAVON25,41666,0,1,1,1,1), -- Deadly Gladiator's Dragonhide Legguards +(@ARCHAVON25,41772,0,1,1,1,1), -- Deadly Gladiator's Dragonhide Gloves +(@ARCHAVON25,41000,0,1,1,1,1), -- Deadly Gladiator's Ringmail Gauntlets +(@ARCHAVON25,41136,0,1,1,1,1), -- Deadly Gladiator's Linked Gauntlets +(@ARCHAVON25,41286,0,1,1,1,1), -- Deadly Gladiator's Kodohide Gloves +(@ARCHAVON25,40805,0,1,1,1,1), -- Deadly Gladiator's Scaled Gauntlets +(@ARCHAVON25,41939,0,1,1,1,1), -- Deadly Gladiator's Satin Gloves +(@ARCHAVON25,41297,0,1,1,1,1), -- Deadly Gladiator's Kodohide Legguards +(@ARCHAVON25,41026,0,1,1,1,1), -- Deadly Gladiator's Ringmail Leggings +(@ARCHAVON25,41958,0,1,1,1,1), -- Deadly Gladiator's Silk Trousers +(@ARCHAVON25,41970,0,1,1,1,1), -- Deadly Gladiator's Silk Handguards +(@ARCHAVON25,40844,0,1,1,1,1), -- Deadly Gladiator's Plate Legguards +(@ARCHAVON25,41303,0,1,1,1,1), -- Deadly Gladiator's Wyrmhide Legguards +(@ARCHAVON25,41292,0,1,1,1,1), -- Deadly Gladiator's Wyrmhide Gloves +(@ARCHAVON25,42004,0,1,1,1,1), -- Deadly Gladiator's Felweave Trousers +(@ARCHAVON25,41142,0,1,1,1,1), -- Deadly Gladiator's Chain Gauntlets +(@ARCHAVON25,40845,0,1,1,1,1), -- Deadly Gladiator's Dreadplate Legguards +(@ARCHAVON25,40804,0,1,1,1,1), -- Deadly Gladiator's Plate Gauntlets +(@ARCHAVON25,42016,0,1,1,1,1), -- Deadly Gladiator's Felweave Handguards +(@ARCHAVON25,40806,0,1,1,1,1), -- Deadly Gladiator's Dreadplate Gauntlets +(@ARCHAVON25,41654,0,1,1,1,1), -- Deadly Gladiator's Leather Legguards +(@ARCHAVON25,41766,0,1,1,1,1), -- Deadly Gladiator's Leather Gloves +(@ARCHAVON25,41204,0,1,1,1,1), -- Deadly Gladiator's Chain Leggings +-- Create Ref for Emalon 25 furious PVP + T8(25) (chest,hands,legs) +(@EMALON25,41640,0,1,1,1,1), -- Furious Gladiator's Armwraps of Dominance +(@EMALON25,41625,0,1,1,1,1), -- Furious Gladiator's Armwraps of Salvation +(@EMALON25,41840,0,1,1,1,1), -- Furious Gladiator's Armwraps of Triumph +(@EMALON25,42116,0,1,1,1,1), -- Furious Gladiator's Band of Dominance +(@EMALON25,42117,0,1,1,1,1), -- Furious Gladiator's Band of Triumph +(@EMALON25,41630,0,1,1,1,1), -- Furious Gladiator's Belt of Dominance +(@EMALON25,41617,0,1,1,1,1), -- Furious Gladiator's Belt of Salvation +(@EMALON25,41832,0,1,1,1,1), -- Furious Gladiator's Belt of Triumph +(@EMALON25,41635,0,1,1,1,1), -- Furious Gladiator's Boots of Dominance +(@EMALON25,41621,0,1,1,1,1), -- Furious Gladiator's Boots of Salvation +(@EMALON25,41836,0,1,1,1,1), -- Furious Gladiator's Boots of Triumph +(@EMALON25,40983,0,1,1,1,1), -- Furious Gladiator's Bracers of Salvation +(@EMALON25,40889,0,1,1,1,1), -- Furious Gladiator's Bracers of Triumph +(@EMALON25,41143,0,1,1,1,1), -- Furious Gladiator's Chain Gauntlets +(@EMALON25,41205,0,1,1,1,1), -- Furious Gladiator's Chain Leggings +(@EMALON25,42071,0,1,1,1,1), -- Furious Gladiator's Cloak of Ascendancy +(@EMALON25,42073,0,1,1,1,1), -- Furious Gladiator's Cloak of Deliverance +(@EMALON25,42069,0,1,1,1,1), -- Furious Gladiator's Cloak of Dominance +(@EMALON25,42072,0,1,1,1,1), -- Furious Gladiator's Cloak of Salvation +(@EMALON25,42070,0,1,1,1,1), -- Furious Gladiator's Cloak of Subjugation +(@EMALON25,42074,0,1,1,1,1), -- Furious Gladiator's Cloak of Triumph +(@EMALON25,42075,0,1,1,1,1), -- Furious Gladiator's Cloak of Victory +(@EMALON25,41898,0,1,1,1,1), -- Furious Gladiator's Cord of Dominance +(@EMALON25,41881,0,1,1,1,1), -- Furious Gladiator's Cord of Salvation +(@EMALON25,41909,0,1,1,1,1), -- Furious Gladiator's Cuffs of Dominance +(@EMALON25,41893,0,1,1,1,1), -- Furious Gladiator's Cuffs of Salvation +(@EMALON25,41773,0,1,1,1,1), -- Furious Gladiator's Dragonhide Gloves +(@EMALON25,41667,0,1,1,1,1), -- Furious Gladiator's Dragonhide Legguards +(@EMALON25,40809,0,1,1,1,1), -- Furious Gladiator's Dreadplate Gauntlets +(@EMALON25,42017,0,1,1,1,1), -- Furious Gladiator's Felweave Handguards +(@EMALON25,42005,0,1,1,1,1), -- Furious Gladiator's Felweave Trousers +(@EMALON25,40976,0,1,1,1,1), -- Furious Gladiator's Girdle of Salvation +(@EMALON25,40881,0,1,1,1,1), -- Furious Gladiator's Girdle of Triumph +(@EMALON25,40977,0,1,1,1,1), -- Furious Gladiator's Greaves of Salvation +(@EMALON25,40882,0,1,1,1,1), -- Furious Gladiator's Greaves of Triumph +(@EMALON25,41287,0,1,1,1,1), -- Furious Gladiator's Kodohide Gloves +(@EMALON25,41298,0,1,1,1,1), -- Furious Gladiator's Kodohide Legguards +(@EMALON25,41767,0,1,1,1,1), -- Furious Gladiator's Leather Gloves +(@EMALON25,41655,0,1,1,1,1), -- Furious Gladiator's Leather Legguards +(@EMALON25,41137,0,1,1,1,1), -- Furious Gladiator's Linked Gauntlets +(@EMALON25,41199,0,1,1,1,1), -- Furious Gladiator's Linked Leggings +(@EMALON25,41007,0,1,1,1,1), -- Furious Gladiator's Mail Gauntlets +(@EMALON25,41033,0,1,1,1,1), -- Furious Gladiator's Mail Leggings +(@EMALON25,41874,0,1,1,1,1), -- Furious Gladiator's Mooncloth Gloves +(@EMALON25,41864,0,1,1,1,1), -- Furious Gladiator's Mooncloth Leggings +(@EMALON25,40927,0,1,1,1,1), -- Furious Gladiator's Ornamented Gloves +(@EMALON25,40939,0,1,1,1,1), -- Furious Gladiator's Ornamented Legplates +(@EMALON25,42037,0,1,1,1,1), -- Furious Gladiator's Pendant of Ascendancy +(@EMALON25,42039,0,1,1,1,1), -- Furious Gladiator's Pendant of Deliverance +(@EMALON25,42036,0,1,1,1,1), -- Furious Gladiator's Pendant of Dominance +(@EMALON25,42040,0,1,1,1,1), -- Furious Gladiator's Pendant of Salvation +(@EMALON25,42038,0,1,1,1,1), -- Furious Gladiator's Pendant of Subjugation +(@EMALON25,46373,0,1,1,1,1), -- Furious Gladiator's Pendant of Sundering +(@EMALON25,42034,0,1,1,1,1), -- Furious Gladiator's Pendant of Triumph +(@EMALON25,42035,0,1,1,1,1), -- Furious Gladiator's Pendant of Victory +(@EMALON25,40807,0,1,1,1,1), -- Furious Gladiator's Plate Gauntlets +(@EMALON25,40847,0,1,1,1,1), -- Furious Gladiator's Plate Legguards +(@EMALON25,41001,0,1,1,1,1), -- Furious Gladiator's Ringmail Gauntlets +(@EMALON25,41027,0,1,1,1,1), -- Furious Gladiator's Ringmail Leggings +(@EMALON25,41075,0,1,1,1,1), -- Furious Gladiator's Sabatons of Dominance +(@EMALON25,41055,0,1,1,1,1), -- Furious Gladiator's Sabatons of Salvation +(@EMALON25,41230,0,1,1,1,1), -- Furious Gladiator's Sabatons of Triumph +(@EMALON25,41940,0,1,1,1,1), -- Furious Gladiator's Satin Gloves +(@EMALON25,41927,0,1,1,1,1), -- Furious Gladiator's Satin Leggings +(@EMALON25,40808,0,1,1,1,1), -- Furious Gladiator's Scaled Gauntlets +(@EMALON25,40849,0,1,1,1,1), -- Furious Gladiator's Scaled Legguards +(@EMALON25,41971,0,1,1,1,1), -- Furious Gladiator's Silk Handguards +(@EMALON25,41959,0,1,1,1,1), -- Furious Gladiator's Silk Trousers +(@EMALON25,41903,0,1,1,1,1), -- Furious Gladiator's Slippers of Dominance +(@EMALON25,41885,0,1,1,1,1), -- Furious Gladiator's Slippers of Salvation +(@EMALON25,41070,0,1,1,1,1), -- Furious Gladiator's Waistguard of Dominance +(@EMALON25,41051,0,1,1,1,1), -- Furious Gladiator's Waistguard of Salvation +(@EMALON25,41235,0,1,1,1,1), -- Furious Gladiator's Waistguard of Triumph +(@EMALON25,41065,0,1,1,1,1), -- Furious Gladiator's Wristguards of Dominance +(@EMALON25,41060,0,1,1,1,1), -- Furious Gladiator's Wristguards of Salvation +(@EMALON25,41225,0,1,1,1,1), -- Furious Gladiator's Wristguards of Triumph +(@EMALON25,41293,0,1,1,1,1), -- Furious Gladiator's Wyrmhide Gloves +(@EMALON25,41304,0,1,1,1,1), -- Furious Gladiator's Wyrmhide Legguards +(@EMALON25,40811,0,1,1,1,1), -- Furious Gladiator's Girdle of Triumph +(@EMALON25,46155,0,1,1,1,1), -- Conqueror's Aegis Gauntlets +(@EMALON25,46179,0,1,1,1,1), -- Conqueror's Aegis Gloves +(@EMALON25,46181,0,1,1,1,1), -- Conqueror's Aegis Greaves +(@EMALON25,46174,0,1,1,1,1), -- Conqueror's Aegis Handguards +(@EMALON25,46176,0,1,1,1,1), -- Conqueror's Aegis Legguards +(@EMALON25,46153,0,1,1,1,1), -- Conqueror's Aegis Legplates +(@EMALON25,46113,0,1,1,1,1), -- Conqueror's Darkruned Gauntlets +(@EMALON25,46119,0,1,1,1,1), -- Conqueror's Darkruned Handguards +(@EMALON25,46121,0,1,1,1,1), -- Conqueror's Darkruned Legguards +(@EMALON25,46116,0,1,1,1,1), -- Conqueror's Darkruned Legplates +(@EMALON25,46135,0,1,1,1,1), -- Conqueror's Deathbringer Gloves +(@EMALON25,46139,0,1,1,1,1), -- Conqueror's Deathbringer Leggings +(@EMALON25,46188,0,1,1,1,1), -- Conqueror's Gloves of Sanctification +(@EMALON25,46163,0,1,1,1,1), -- Conqueror's Handwraps of Sanctification +(@EMALON25,46132,0,1,1,1,1), -- Conqueror's Kirin Tor Gauntlets +(@EMALON25,46133,0,1,1,1,1), -- Conqueror's Kirin Tor Leggings +(@EMALON25,46195,0,1,1,1,1), -- Conqueror's Leggings of Sanctification +(@EMALON25,46189,0,1,1,1,1), -- Conqueror's Nightsong Gloves +(@EMALON25,46158,0,1,1,1,1), -- Conqueror's Nightsong Handgrips +(@EMALON25,46183,0,1,1,1,1), -- Conqueror's Nightsong Handguards +(@EMALON25,46185,0,1,1,1,1), -- Conqueror's Nightsong Leggings +(@EMALON25,46160,0,1,1,1,1), -- Conqueror's Nightsong Legguards +(@EMALON25,46192,0,1,1,1,1), -- Conqueror's Nightsong Trousers +(@EMALON25,46170,0,1,1,1,1), -- Conqueror's Pants of Sanctification +(@EMALON25,46142,0,1,1,1,1), -- Conqueror's Scourgestalker Handguards +(@EMALON25,46144,0,1,1,1,1), -- Conqueror's Scourgestalker Legguards +(@EMALON25,46148,0,1,1,1,1), -- Conqueror's Siegebreaker Gauntlets +(@EMALON25,46164,0,1,1,1,1), -- Conqueror's Siegebreaker Handguards +(@EMALON25,46169,0,1,1,1,1), -- Conqueror's Siegebreaker Legguards +(@EMALON25,46150,0,1,1,1,1), -- Conqueror's Siegebreaker Legplates +(@EMALON25,46124,0,1,1,1,1), -- Conqueror's Terrorblade Gauntlets +(@EMALON25,46126,0,1,1,1,1), -- Conqueror's Terrorblade Legplates +(@EMALON25,46207,0,1,1,1,1), -- Conqueror's Worldbreaker Gloves +(@EMALON25,46200,0,1,1,1,1), -- Conqueror's Worldbreaker Grips +(@EMALON25,46199,0,1,1,1,1), -- Conqueror's Worldbreaker Handguards +(@EMALON25,46210,0,1,1,1,1), -- Conqueror's Worldbreaker Kilt +(@EMALON25,46202,0,1,1,1,1), -- Conqueror's Worldbreaker Legguards +(@EMALON25,46208,0,1,1,1,1), -- Conqueror's Worldbreaker War-Kilt +-- Create Ref for koralon 25 relentless + T9.5 (hands,legs) +(@KORALON25,41641,0,1,1,1,1), -- Relentless Gladiator's Armwraps of Dominance +(@KORALON25,41626,0,1,1,1,1), -- Relentless Gladiator's Armwraps of Salvation +(@KORALON25,41841,0,1,1,1,1), -- Relentless Gladiator's Armwraps of Triumph +(@KORALON25,42118,0,1,1,1,1), -- Relentless Gladiator's Band of Ascendancy +(@KORALON25,42119,0,1,1,1,1), -- Relentless Gladiator's Band of Victory +(@KORALON25,41631,0,1,1,1,1), -- Relentless Gladiator's Belt of Dominance +(@KORALON25,41618,0,1,1,1,1), -- Relentless Gladiator's Belt of Salvation +(@KORALON25,41833,0,1,1,1,1), -- Relentless Gladiator's Belt of Triumph +(@KORALON25,41636,0,1,1,1,1), -- Relentless Gladiator's Boots of Dominance +(@KORALON25,41622,0,1,1,1,1), -- Relentless Gladiator's Boots of Salvation +(@KORALON25,41837,0,1,1,1,1), -- Relentless Gladiator's Boots of Triumph +(@KORALON25,40984,0,1,1,1,1), -- Relentless Gladiator's Bracers of Salvation +(@KORALON25,40890,0,1,1,1,1), -- Relentless Gladiator's Bracers of Triumph +(@KORALON25,41144,0,1,1,1,1), -- Relentless Gladiator's Chain Gauntlets +(@KORALON25,41206,0,1,1,1,1), -- Relentless Gladiator's Chain Leggings +(@KORALON25,42078,0,1,1,1,1), -- Relentless Gladiator's Cloak of Ascendancy +(@KORALON25,42080,0,1,1,1,1), -- Relentless Gladiator's Cloak of Deliverance +(@KORALON25,42076,0,1,1,1,1), -- Relentless Gladiator's Cloak of Dominance +(@KORALON25,42079,0,1,1,1,1), -- Relentless Gladiator's Cloak of Salvation +(@KORALON25,42077,0,1,1,1,1), -- Relentless Gladiator's Cloak of Subjugation +(@KORALON25,42081,0,1,1,1,1), -- Relentless Gladiator's Cloak of Triumph +(@KORALON25,42082,0,1,1,1,1), -- Relentless Gladiator's Cloak of Victory +(@KORALON25,41899,0,1,1,1,1), -- Relentless Gladiator's Cord of Dominance +(@KORALON25,41882,0,1,1,1,1), -- Relentless Gladiator's Cord of Salvation +(@KORALON25,41910,0,1,1,1,1), -- Relentless Gladiator's Cuffs of Dominance +(@KORALON25,41894,0,1,1,1,1), -- Relentless Gladiator's Cuffs of Salvation +(@KORALON25,41774,0,1,1,1,1), -- Relentless Gladiator's Dragonhide Gloves +(@KORALON25,41668,0,1,1,1,1), -- Relentless Gladiator's Dragonhide Legguards +(@KORALON25,40851,0,1,1,1,1), -- Relentless Gladiator's Dreadplate Legguards +(@KORALON25,42018,0,1,1,1,1), -- Relentless Gladiator's Felweave Handguards +(@KORALON25,42006,0,1,1,1,1), -- Relentless Gladiator's Felweave Trousers +(@KORALON25,40978,0,1,1,1,1), -- Relentless Gladiator's Girdle of Salvation +(@KORALON25,40883,0,1,1,1,1), -- Relentless Gladiator's Girdle of Triumph +(@KORALON25,40979,0,1,1,1,1), -- Relentless Gladiator's Greaves of Salvation +(@KORALON25,40884,0,1,1,1,1), -- Relentless Gladiator's Greaves of Triumph +(@KORALON25,41288,0,1,1,1,1), -- Relentless Gladiator's Kodohide Gloves +(@KORALON25,41299,0,1,1,1,1), -- Relentless Gladiator's Kodohide Legguards +(@KORALON25,41768,0,1,1,1,1), -- Relentless Gladiator's Leather Gloves +(@KORALON25,41656,0,1,1,1,1), -- Relentless Gladiator's Leather Legguards +(@KORALON25,41138,0,1,1,1,1), -- Relentless Gladiator's Linked Gauntlets +(@KORALON25,41200,0,1,1,1,1), -- Relentless Gladiator's Linked Leggings +(@KORALON25,41008,0,1,1,1,1), -- Relentless Gladiator's Mail Gauntlets +(@KORALON25,41034,0,1,1,1,1), -- Relentless Gladiator's Mail Leggings +(@KORALON25,41875,0,1,1,1,1), -- Relentless Gladiator's Mooncloth Gloves +(@KORALON25,41865,0,1,1,1,1), -- Relentless Gladiator's Mooncloth Leggings +(@KORALON25,40928,0,1,1,1,1), -- Relentless Gladiator's Ornamented Gloves +(@KORALON25,40940,0,1,1,1,1), -- Relentless Gladiator's Ornamented Legplates +(@KORALON25,42044,0,1,1,1,1), -- Relentless Gladiator's Pendant of Ascendancy +(@KORALON25,42046,0,1,1,1,1), -- Relentless Gladiator's Pendant of Deliverance +(@KORALON25,42043,0,1,1,1,1), -- Relentless Gladiator's Pendant of Dominance +(@KORALON25,42047,0,1,1,1,1), -- Relentless Gladiator's Pendant of Salvation +(@KORALON25,42045,0,1,1,1,1), -- Relentless Gladiator's Pendant of Subjugation +(@KORALON25,46374,0,1,1,1,1), -- Relentless Gladiator's Pendant of Sundering +(@KORALON25,42041,0,1,1,1,1), -- Relentless Gladiator's Pendant of Triumph +(@KORALON25,42042,0,1,1,1,1), -- Relentless Gladiator's Pendant of Victory +(@KORALON25,40810,0,1,1,1,1), -- Relentless Gladiator's Plate Gauntlets +(@KORALON25,40850,0,1,1,1,1), -- Relentless Gladiator's Plate Legguards +(@KORALON25,41002,0,1,1,1,1), -- Relentless Gladiator's Ringmail Gauntlets +(@KORALON25,41028,0,1,1,1,1), -- Relentless Gladiator's Ringmail Leggings +(@KORALON25,41076,0,1,1,1,1), -- Relentless Gladiator's Sabatons of Dominance +(@KORALON25,41056,0,1,1,1,1), -- Relentless Gladiator's Sabatons of Salvation +(@KORALON25,41231,0,1,1,1,1), -- Relentless Gladiator's Sabatons of Triumph +(@KORALON25,41941,0,1,1,1,1), -- Relentless Gladiator's Satin Gloves +(@KORALON25,41928,0,1,1,1,1), -- Relentless Gladiator's Satin Leggings +(@KORALON25,40812,0,1,1,1,1), -- Relentless Gladiator's Scaled Gauntlets +(@KORALON25,40852,0,1,1,1,1), -- Relentless Gladiator's Scaled Legguards +(@KORALON25,41972,0,1,1,1,1), -- Relentless Gladiator's Silk Handguards +(@KORALON25,41960,0,1,1,1,1), -- Relentless Gladiator's Silk Trousers +(@KORALON25,41904,0,1,1,1,1), -- Relentless Gladiator's Treads of Dominance +(@KORALON25,41886,0,1,1,1,1), -- Relentless Gladiator's Treads of Salvation +(@KORALON25,41071,0,1,1,1,1), -- Relentless Gladiator's Waistguard of Dominance +(@KORALON25,41052,0,1,1,1,1), -- Relentless Gladiator's Waistguard of Salvation +(@KORALON25,41236,0,1,1,1,1), -- Relentless Gladiator's Waistguard of Triumph +(@KORALON25,41066,0,1,1,1,1), -- Relentless Gladiator's Wristguards of Dominance +(@KORALON25,41061,0,1,1,1,1), -- Relentless Gladiator's Wristguards of Salvation +(@KORALON25,41226,0,1,1,1,1), -- Relentless Gladiator's Wristguards of Triumph +(@KORALON25,41294,0,1,1,1,1), -- Relentless Gladiator's Wyrmhide Gloves +(@KORALON25,41305,0,1,1,1,1), -- Relentless Gladiator's Wyrmhide Legguards +(@KORALON25,48094,0,1,1,1,1), -- Zabra's Pants of Triumph +(@KORALON25,48064,0,1,1,1,1), -- Zabra's Leggings of Triumph +(@KORALON25,48096,0,1,1,1,1), -- Zabra's Handwraps of Triumph +(@KORALON25,48066,0,1,1,1,1), -- Zabra's Gloves of Triumph +(@KORALON25,48271,0,1,1,1,1), -- Windrunner's Legguards of Triumph +(@KORALON25,48273,0,1,1,1,1), -- Windrunner's Handguards of Triumph +(@KORALON25,48362,0,1,1,1,1), -- Thrall's War-Kilt of Triumph +(@KORALON25,48303,0,1,1,1,1), -- Thrall's Legguards of Triumph +(@KORALON25,48332,0,1,1,1,1), -- Thrall's Kilt of Triumph +(@KORALON25,48301,0,1,1,1,1), -- Thrall's Handguards of Triumph +(@KORALON25,48364,0,1,1,1,1), -- Thrall's Grips of Triumph +(@KORALON25,48334,0,1,1,1,1), -- Thrall's Gloves of Triumph +(@KORALON25,47770,0,1,1,1,1), -- Sunstrider's Leggings of Triumph +(@KORALON25,47772,0,1,1,1,1), -- Sunstrider's Gauntlets of Triumph +(@KORALON25,48180,0,1,1,1,1), -- Runetotem's Trousers of Triumph +(@KORALON25,48195,0,1,1,1,1), -- Runetotem's Legguards of Triumph +(@KORALON25,48150,0,1,1,1,1), -- Runetotem's Leggings of Triumph +(@KORALON25,48152,0,1,1,1,1), -- Runetotem's Handguards of Triumph +(@KORALON25,48193,0,1,1,1,1), -- Runetotem's Handgrips of Triumph +(@KORALON25,48182,0,1,1,1,1), -- Runetotem's Gloves of Triumph +(@KORALON25,48623,0,1,1,1,1), -- Liadrin's Legplates of Triumph +(@KORALON25,48660,0,1,1,1,1), -- Liadrin's Legguards of Triumph +(@KORALON25,48658,0,1,1,1,1), -- Liadrin's Handguards of Triumph +(@KORALON25,48591,0,1,1,1,1), -- Liadrin's Greaves of Triumph +(@KORALON25,48593,0,1,1,1,1), -- Liadrin's Gloves of Triumph +(@KORALON25,48625,0,1,1,1,1), -- Liadrin's Gauntlets of Triumph +(@KORALON25,48497,0,1,1,1,1), -- Koltira's Legplates of Triumph +(@KORALON25,48554,0,1,1,1,1), -- Koltira's Legguards of Triumph +(@KORALON25,48556,0,1,1,1,1), -- Koltira's Handguards of Triumph +(@KORALON25,48499,0,1,1,1,1), -- Koltira's Gauntlets of Triumph +(@KORALON25,48394,0,1,1,1,1), -- Hellscream's Legplates of Triumph +(@KORALON25,48464,0,1,1,1,1), -- Hellscream's Legguards of Triumph +(@KORALON25,48462,0,1,1,1,1), -- Hellscream's Handguards of Triumph +(@KORALON25,48392,0,1,1,1,1), -- Hellscream's Gauntlets of Triumph +(@KORALON25,47805,0,1,1,1,1), -- Gul'dan's Leggings of Triumph +(@KORALON25,47803,0,1,1,1,1), -- Gul'dan's Gloves of Triumph +(@KORALON25,48239,0,1,1,1,1), -- Garona's Legplates of Triumph +(@KORALON25,48241,0,1,1,1,1), -- Garona's Gauntlets of Triumph +(@KORALON25,48379,0,1,2,1,1), -- Wrynn's Legplates of Triumph +(@KORALON25,48446,0,1,2,1,1), -- Wrynn's Legguards of Triumph +(@KORALON25,48452,0,1,2,1,1), -- Wrynn's Handguards of Triumph +(@KORALON25,48377,0,1,2,1,1), -- Wrynn's Gauntlets of Triumph +(@KORALON25,48258,0,1,2,1,1), -- Windrunner's Legguards of Triumph +(@KORALON25,48256,0,1,2,1,1), -- Windrunner's Handguards of Triumph +(@KORALON25,48079,0,1,2,1,1), -- Velen's Pants of Triumph +(@KORALON25,48077,0,1,2,1,1), -- Velen's Handwraps of Triumph +(@KORALON25,47983,0,1,2,1,1), -- Velen's Gloves of Triumph +(@KORALON25,48226,0,1,2,1,1), -- VanCleef's Legplates of Triumph +(@KORALON25,48224,0,1,2,1,1), -- VanCleef's Gauntlets of Triumph +(@KORALON25,48610,0,1,2,1,1), -- Turalyon's Legplates of Triumph +(@KORALON25,48638,0,1,2,1,1), -- Turalyon's Legguards of Triumph +(@KORALON25,48640,0,1,2,1,1), -- Turalyon's Handguards of Triumph +(@KORALON25,48578,0,1,2,1,1), -- Turalyon's Greaves of Triumph +(@KORALON25,48576,0,1,2,1,1), -- Turalyon's Gloves of Triumph +(@KORALON25,48608,0,1,2,1,1), -- Turalyon's Gauntlets of Triumph +(@KORALON25,48484,0,1,2,1,1), -- Thassarian's Legplates of Triumph +(@KORALON25,48541,0,1,2,1,1), -- Thassarian's Legguards of Triumph +(@KORALON25,48539,0,1,2,1,1), -- Thassarian's Handguards of Triumph +(@KORALON25,48482,0,1,2,1,1), -- Thassarian's Gauntlets of Triumph +(@KORALON25,48349,0,1,2,1,1), -- Nobundo's War-Kilt of Triumph +(@KORALON25,48288,0,1,2,1,1), -- Nobundo's Legguards of Triumph +(@KORALON25,48319,0,1,2,1,1), -- Nobundo's Kilt of Triumph +(@KORALON25,48286,0,1,2,1,1), -- Nobundo's Handguards of Triumph +(@KORALON25,48347,0,1,2,1,1), -- Nobundo's Grips of Triumph +(@KORALON25,48317,0,1,2,1,1), -- Nobundo's Gloves of Triumph +(@KORALON25,48165,0,1,2,1,1), -- Malfurion's Trousers of Triumph +(@KORALON25,48210,0,1,2,1,1), -- Malfurion's Legguards of Triumph +(@KORALON25,48135,0,1,2,1,1), -- Malfurion's Leggings of Triumph +(@KORALON25,48133,0,1,2,1,1), -- Malfurion's Handguards of Triumph +(@KORALON25,48212,0,1,2,1,1), -- Malfurion's Handgrips of Triumph +(@KORALON25,48163,0,1,2,1,1), -- Malfurion's Gloves of Triumph +(@KORALON25,47755,0,1,2,1,1), -- Khadgar's Leggings of Triumph +(@KORALON25,47753,0,1,2,1,1), -- Khadgar's Gauntlets of Triumph +(@KORALON25,47780,0,1,2,1,1), -- Kel'Thuzad's Leggings of Triumph +(@KORALON25,47782,0,1,2,1,1), -- Kel'Thuzad's Gloves of Triumph +(@KORALON25,47985,0,1,2,1,1); -- Velen's Leggings of Triumph +-- Merge PVP and PVE items to one ref +UPDATE `reference_loot_template` SET `entry`=@TORAVON25 WHERE `entry`=34214; -- 25 Toravon +UPDATE `reference_loot_template` SET `entry`=@TORAVON10 WHERE `entry`=34213; -- 10 Toravon +UPDATE `reference_loot_template` SET `entry`=@ARCHAVON10 WHERE `entry`=34210; -- 10 Archavon +UPDATE `reference_loot_template` SET `entry`=@EMALON10 WHERE `entry`=34211; -- 10 Emalon +UPDATE `reference_loot_template` SET `entry`=@KORALON10 WHERE `entry`=34212; -- 10 Koralon +-- Assign to cratures +SET @Tora10 =38433; +SET @Tora25 =38462; +SET @Arch10 =31125; +SET @Arch25 =31722; +SET @Emal10 =33993; +SET @Emal25 =33994; +SET @Kora10 =35013; +SET @Kora25 =35360; +DELETE FROM `creature_loot_template` WHERE `entry`IN (@Tora10,@Tora25,@Arch10,@Arch25,@Emal10,@Emal25,@Kora10,@Kora25); +INSERT INTO `creature_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES +-- Update loot template for Toravon 10 +(@Tora10,47241,100,1,0,2,2), -- Emblem of triumph +(@Tora10,1,100,1,0,-@TORAVON10,2), -- Gear(Relentless PVP,T10 PVE) +(@Tora10,2,1,1,0,-34203,1), -- Mount +-- Update loot template for Toravon 25 to drop 3 items +(@Tora25,49426,100,1,0,2,2), -- Emblem of frost +(@Tora25,1,100,1,0,-@TORAVON25,3), -- Gear(Wrathful PVP,T10.5 PVE) +(@Tora25,2,1,1,0,-34203,1), -- Mount +-- Update loot template for Archavon 10 +(@Arch10,47241,100,1,0,2,2), -- Emblem of triumph +(@Arch10,1,100,1,0,-@ARCHAVON10,2), -- Gear(Hate PVP,T7 PVE) +(@Arch10,2,1,1,0,-34203,1), -- Mount +-- Update loot template for Archavon 25 +(@Arch25,47241,100,1,0,2,2), -- Emblem of triumph +(@Arch25,1,100,1,0,-@ARCHAVON25,4), -- Gear(Deadly PVP,T7(25) PVE) +(@Arch25,2,1,1,0,-34203,1), -- Mount +-- Update loot template for Emalon 10 +(@Emal10,47241,100,1,0,2,2), -- Emblem of triumph +(@Emal10,1,100,1,0,-@EMALON10,2), -- Gear(Deadly PVP,T8 PVE) +(@Emal10,2,1,1,0,-34203,1), -- Mount +-- Update loot template for Emalon 25 +(@Emal25,47241,100,1,0,2,2), -- Emblem of triumph +(@Emal25,1,100,1,0,-@EMALON25,4), -- Gear(Deadly PVP,T8(25) PVE) +(@Emal25,2,1,1,0,-34203,1), -- Mount +-- Update loot template for Koralon 10 +(@Kora10,47241,100,1,0,2,2), -- Emblem of triumph +(@Kora10,1,100,1,0,-@KORALON10,2), -- Gear(Furious PVP,T9 PVE) +(@Kora10,2,1,1,0,-34203,1), -- Mount +-- Update loot template for Koralon 25 +(@Kora25,47241,100,1,0,2,2), -- Emblem of triumph +(@Kora25,1,100,1,0,-@KORALON25,4), -- Gear(Relentless PVP,T9.5 PVE) +(@Kora25,2,1,1,0,-34203,1); -- Mount diff --git a/sql/updates/world/2012_09_22_00_world_utgarde.sql b/sql/updates/world/2012_09_22_00_world_utgarde.sql new file mode 100644 index 00000000000..83cc227f9cd --- /dev/null +++ b/sql/updates/world/2012_09_22_00_world_utgarde.sql @@ -0,0 +1,102 @@ +-- Frenzied geist +DELETE FROM `creature_loot_template` WHERE `entry`=31671; +-- Savage worg +DELETE FROM `creature_loot_template` WHERE `entry`=31678 AND `item` IN(39211,39212,33454); +INSERT INTO `creature_loot_template` (`entry`, `item`, `ChanceOrQuestChance`, `mincountOrRef`, `maxcount`) VALUES +(31678,39211,70,3,5), +(31678,39212,16,2,4), +(31678,33454, 3,1,1); + +-- Keleseth +UPDATE `creature_template` SET `mechanic_immune_mask`=617289692 WHERE `entry` IN(23953,30748); +-- Tunneling ghoul +DELETE FROM `creature_loot_template` WHERE `entry`=31681; +-- Dalronn heartsplitter +UPDATE `creature_template` SET `mindmg`=380,`maxdmg`=580,`attackpower`=0,`dmg_multiplier`=10 WHERE `entry`=31660; +-- Frenzied geist +UPDATE `creature_template` SET `lootid`=28419 WHERE `entry`=31671; +UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`='' WHERE `entry`=28419; +-- Skarvald the constructor - On level 81 health fits/is blizzlike, depending on wowhead his level range is 72 - 81 +UPDATE `creature_template` SET `minlevel`=81,`maxlevel`=81 WHERE `entry`=31679; +-- Tunneling ghoul +UPDATE `creature_template` SET `lootid`=24084 WHERE `entry`=31681; +-- Dragonflayer runecaster +UPDATE `creature_template` SET `ScriptName`='',`AIName`='SmartAI' WHERE `entry`=23960; +-- Dragonflayer strategist +UPDATE `creature_template` SET `minlevel`=80,`maxlevel`=80,`unit_flags`=`unit_flags`|131072 WHERE `entry`=32246; +-- Ingvar and undead Ingvar +UPDATE `creature_template` SET `mindmg`=650,`maxdmg`=900,`attackpower`=200, `dmg_multiplier`=10 WHERE `entry` IN(31673,31674); +UPDATE `creature_template` SET `mechanic_immune_mask`=`mechanic_immune_mask`|1 WHERE `entry` IN(23954,31673,23980,31674); +-- Throw axe dummy +UPDATE `creature_template` SET `unit_flags`=2|131072|33554432, `flags_extra`=`flags_extra`|2, `equipment_id`=720 WHERE `entry` IN(23997,31835); +-- Throw axe target +UPDATE `creature_template` SET `unit_flags`=2|4|256|512, `faction_A`=35, `faction_H`=35, `flags_extra`=`flags_extra`|128 WHERE `entry`=23996; + +-- Dragonflayer runecaster +DELETE FROM `creature_ai_scripts` WHERE `creature_id`=23960; +DELETE FROM `smart_scripts` WHERE `entryorguid`=23960 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `id`, `event_type`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `target_type`, `target_param2`, `comment`) VALUES +(23960,1,0,2,5000,7000,14000,17000,11,42740,11,30,'Dragonflayer Runecaster - In combat - Cast Njords Rune of Protection'), +(23960,2,0,4,5000,7000,14000,17000,11,59616,11,30,'Dragonflayer Runecaster - In combat - Cast Njords Rune of Protection'), +(23960,3,0,2,1000,2000,15000,18000,11,54965, 1, 0,'Dragonflayer Runecaster - In combat - Cast Bolthorns Rune of Flame'), +(23960,4,0,4,1000,2000,15000,18000,11,59617, 1, 0,'Dragonflayer Runecaster - In combat - Cast Bolthorns Rune of Flame'); + +-- Frenzied geist +DELETE FROM `creature_ai_scripts` WHERE `creature_id`=28419; +DELETE FROM `smart_scripts` WHERE `entryorguid`=28419 AND `source_type`=0; +INSERT INTO `smart_scripts`(`entryorguid`,`event_type`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`target_type`,`comment`) VALUES +(28419,0,5000,5000,30000,30000,11,40414,5,'Frenzied geist - In combat - Cast Fixate'); + +-- Difficulty data for spells used in utgarde keep +DELETE FROM `spelldifficulty_dbc` WHERE `id` IN(42669,42708,42750,42723,42729,43667,42702) OR `spellid0` IN(42669,42708,42750,42723,42729,43667,42702); +INSERT INTO `spelldifficulty_dbc`(`id`,`spellid0`,`spellid1`) VALUES +(42669,42669,59706), -- Smash +(42708,42708,59708), -- Staggering Roar +(42750,42750,59719), -- Throw Axe +(42723,42723,59709), -- Dark Smash +(42729,42729,59734), -- Dreadful Roar +(43667,43667,59389), -- Shadow Bolt +(42702,42702,59397); -- Decrepify + +-- Ticking Time Bomb, Fixate +DELETE FROM `spell_script_names` WHERE `spell_id` IN(59686,40414); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(59686,'spell_ticking_time_bomb'), +(40414,'spell_fixate'); + +-- Proto-drake striders +UPDATE `creature` SET `position_x`=212.429,`position_y`=-127.793,`position_z`=256.101,`MovementType`=2 WHERE `guid`=125914; +UPDATE `creature` SET `position_x`=211.854,`position_y`=-112.602,`position_z`=262.188,`MovementType`=2 WHERE `guid`=125915; +UPDATE `creature` SET `position_x`=211.024,`position_y`=-100.299,`position_z`=266.201,`MovementType`=2 WHERE `guid`=125920; +UPDATE `creature` SET `position_x`=213.777,`position_y`=-140.709,`position_z`=251.048,`MovementType`=2 WHERE `guid`=125922; +UPDATE `creature` SET `position_x`=252.247,`position_y`=-350.532,`position_z`=185.813,`MovementType`=2 WHERE `guid`=125934; +UPDATE `creature` SET `position_x`=243.964,`position_y`=-194.833,`position_z`=227.126,`MovementType`=2 WHERE `guid`=125936; +UPDATE `creature` SET `position_x`=221.534,`position_y`=-239.809,`position_z`=196.459,`MovementType`=2 WHERE `guid`=125937; +UPDATE `creature` SET `position_x`=238.382,`position_y`=-353.086,`position_z`=188.785,`MovementType`=2 WHERE `guid`=125940; + +-- Waypoint assignments +DELETE FROM `creature_addon` WHERE `guid` IN (125940,125934,125915,125920,125914,125936,125937,125922); +INSERT INTO `creature_addon`(`guid`,`path_id`,`mount`,`bytes1`,`bytes2`,`auras`) VALUES +(125914,1259140,22657,50331648,1,'54775'), +(125915,1259150,22657,50331648,1,'54775'), +(125920,1259200,22657,50331648,1,'54775'), +(125922,1259220,22657,50331648,1,'54775'), +(125934,1259340,22657,50331648,1,'54775'), +(125936,1259360,22657,50331648,1,'54775'), +(125937,1259370,22657,50331648,1,'54775'), +(125940,1259400,22657,50331648,1,'54775'); + +-- Waypoint data +DELETE FROM `waypoint_data` WHERE `id` IN (1259400,1259340,1259150,1259200,1259140,1259360,1259370,1259220); +INSERT INTO `waypoint_data`(`id`,`point`,`position_x`,`position_y`,`position_z`) VALUES +(1259400,1,211.864,-352.629,196.144), +(1259340,1,271.911,-318.506,185.049), +(1259150,1,265.478,-199.246,186.812), +(1259200,1,346.765,-99.2527,220.519), +(1259140,1,295.597,-181.162,207.374), +(1259360,1,271.68,-194.911,220.248), +(1259370,1,238.947,-255.704,191.639), +(1259220,1,149.42,-247.696,194.145); + +INSERT INTO `waypoint_data`(`id`,`point`,`position_x`,`position_y`,`position_z`) +SELECT `guid`*10,2,`position_x`,`position_y`,`position_z` FROM `creature` WHERE `guid` IN (125940,125934,125915,125920,125914,125936,125937,125922); diff --git a/sql/updates/world/2012_09_22_01_world_i_was_a_lot_of_things.sql b/sql/updates/world/2012_09_22_01_world_i_was_a_lot_of_things.sql new file mode 100644 index 00000000000..1682d9f699b --- /dev/null +++ b/sql/updates/world/2012_09_22_01_world_i_was_a_lot_of_things.sql @@ -0,0 +1,32 @@ +-- Quest: I was a lot of things +UPDATE `creature_template` SET `AIName`='',`ScriptName`='npc_shadowmoon_tuber_node',`flags_extra`=`flags_extra`|128 WHERE `entry`=21347; + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=36652; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`Comment`) VALUES +(13,1,36652,31,3,21347,'Tuber Whistle targets Shadowmoon Valley Tuber Node'); + +UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`='' WHERE `entry`=21195; +DELETE FROM `creature_ai_scripts` WHERE `creature_id`=21195; +DELETE FROM `smart_scripts` WHERE `entryorguid`=21195 AND `source_type`=0; +INSERT INTO `smart_scripts`(`entryorguid`,`id`,`link`,`event_type`,`event_param2`,`action_type`,`action_param1`,`action_param2`,`target_type`,`target_param1`,`target_param2`,`comment`) VALUES +(21195,1,0,34,1,24,0,0, 1, 0,0, 'Domesticated Felboar - Movementinform - Evade (Required for core script npc_shadowmoon_tuber_node)'), +(21195,2,0,34,1,45,1,1,11,21347,5, 'Domesticated Felboar - Movementinform - Set data (Required for core script npc_shadowmoon_tuber_node)'); + +SET @TRIGGER_GUID = 77821; -- 10 +SET @BOAR_GUID = 77832; -- 8 + +DELETE FROM `creature` WHERE `id`=21347 OR `guid` BETWEEN @TRIGGER_GUID AND @TRIGGER_GUID + 9; +SET @TRIGGER_GUID = @TRIGGER_GUID - 1; +INSERT INTO `creature`(`guid`,`id`,`map`,`phaseMask`,`position_x`,`position_y`,`position_z`) +SELECT (SELECT @TRIGGER_GUID:=@TRIGGER_GUID+1),21347,`map`,3,`position_x`,`position_y`,`position_z` FROM `gameobject` WHERE `id`=184701 LIMIT 10; + +DELETE FROM `creature` WHERE (`id`=21195 AND `map`=530) OR `guid` BETWEEN @BOAR_GUID AND @BOAR_GUID + 7; +INSERT INTO `creature`(`guid`,`id`,`map`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`curhealth`,`MovementType`) VALUES +(@BOAR_GUID ,21195,530,-2506.78,1190.22,55.9496,4.15084,300,5,6116,1), +(@BOAR_GUID+1,21195,530,-2486.92,1326.49,64.4239,5.31872,300,5,6116,1), +(@BOAR_GUID+2,21195,530,-2476.05,1284.68,48.0809,1.20087,300,5,5914,1), +(@BOAR_GUID+3,21195,530,-2476.74,1228.44,40.4087,3.72907,300,5,5914,1), +(@BOAR_GUID+4,21195,530,-2549.03,1162.94,78.8947,1.48754,300,5,6116,1), +(@BOAR_GUID+5,21195,530,-2553.91,1186.80,78.5604,1.17575,300,5,6116,1), +(@BOAR_GUID+6,21195,530,-2694.88,1495.00,19.2922,2.33106,300,5,5914,1), +(@BOAR_GUID+7,21195,530,-2706.26,1538.41,16.6343,1.96146,300,5,5914,1); diff --git a/sql/updates/world/2012_09_22_03_world_game_event.sql b/sql/updates/world/2012_09_22_03_world_game_event.sql new file mode 100644 index 00000000000..5e05ba03898 --- /dev/null +++ b/sql/updates/world/2012_09_22_03_world_game_event.sql @@ -0,0 +1,2 @@ +-- Brewfest (372) duration fix by nelegalno +UPDATE `game_event` SET `length` = 21600 WHERE `eventEntry` = 24; diff --git a/src/server/collision/Models/GameObjectModel.cpp b/src/server/collision/Models/GameObjectModel.cpp index 6cb0f90d98e..d8c39925dc6 100644 --- a/src/server/collision/Models/GameObjectModel.cpp +++ b/src/server/collision/Models/GameObjectModel.cpp @@ -148,7 +148,7 @@ bool GameObjectModel::initialize(const GameObject& go, const GameObjectDisplayIn GameObjectModel* GameObjectModel::Create(const GameObject& go) { - const GameObjectDisplayInfoEntry* info = sGameObjectDisplayInfoStore.LookupEntry(go.GetGOInfo()->displayId); + const GameObjectDisplayInfoEntry* info = sGameObjectDisplayInfoStore.LookupEntry(go.GetDisplayId()); if (!info) return NULL; diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 17cef3ec1a1..e5868117da8 100755 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -153,13 +153,20 @@ void CreatureAI::EnterEvadeMode() me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, me->GetFollowAngle(), MOTION_SLOT_ACTIVE); } else + { + // Required to prevent attacking creatures that are evading and cause them to reenter combat + // Does not apply to MoveFollow + me->AddUnitState(UNIT_STATE_EVADE); me->GetMotionMaster()->MoveTargetedHome(); + } } Reset(); if (me->IsVehicle()) // use the same sequence of addtoworld, aireset may remove all summons! me->GetVehicleKit()->Reset(true); + + me->SetLastDamagedTime(0); } /*void CreatureAI::AttackedBy(Unit* attacker) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index db79925cc7f..32b9f8b5903 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1268,7 +1268,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsSmart()) break; - CAST_AI(SmartAI, me->AI())->SetFly(e.action.setFly.fly ? false : true); + CAST_AI(SmartAI, me->AI())->SetFly(e.action.setFly.fly ? true : false); break; } case SMART_ACTION_SET_RUN: diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index d395bccf3a2..647f55c4ffa 100755 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1937,3 +1937,11 @@ void Battleground::RewardXPAtKill(Player* killer, Player* victim) if (sWorld->getBoolConfig(CONFIG_BG_XP_FOR_KILL) && killer && victim) killer->RewardPlayerAndGroupAtKill(victim, true); } + +void Battleground::HandleAreaTrigger(Player* player, uint32 trigger) +{ + sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger %u in Battleground %u. Player coords (x: %f, y: %f, z: %f)", + trigger, player->GetMapId(), player->GetPositionX(), player->GetPositionY(), player->GetPositionZ()); + if (player->isGameMaster()) + player->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", trigger); +} diff --git a/src/server/game/Battlegrounds/Battleground.h b/src/server/game/Battlegrounds/Battleground.h index e658ac4ecbd..fc292aa5bc1 100755 --- a/src/server/game/Battlegrounds/Battleground.h +++ b/src/server/game/Battlegrounds/Battleground.h @@ -507,7 +507,7 @@ class Battleground // Triggers handle // must be implemented in BG subclass - virtual void HandleAreaTrigger(Player* /*Source*/, uint32 /*Trigger*/) {} + virtual void HandleAreaTrigger(Player* /*Source*/, uint32 /*Trigger*/); // must be implemented in BG subclass if need AND call base class generic code virtual void HandleKillPlayer(Player* player, Player* killer); virtual void HandleKillUnit(Creature* /*unit*/, Player* /*killer*/); diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index 365ffb853d2..dfd7af583a5 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -210,24 +210,24 @@ void BattlegroundAB::RemovePlayer(Player* /*player*/, uint64 /*guid*/, uint32 /* } -void BattlegroundAB::HandleAreaTrigger(Player* Source, uint32 Trigger) +void BattlegroundAB::HandleAreaTrigger(Player* player, uint32 trigger) { if (GetStatus() != STATUS_IN_PROGRESS) return; - switch (Trigger) + switch (trigger) { case 3948: // Arathi Basin Alliance Exit. - if (Source->GetTeam() != ALLIANCE) - Source->GetSession()->SendAreaTriggerMessage("Only The Alliance can use that portal"); + if (player->GetTeam() != ALLIANCE) + player->GetSession()->SendAreaTriggerMessage("Only The Alliance can use that portal"); else - Source->LeaveBattleground(); + player->LeaveBattleground(); break; case 3949: // Arathi Basin Horde Exit. - if (Source->GetTeam() != HORDE) - Source->GetSession()->SendAreaTriggerMessage("Only The Horde can use that portal"); + if (player->GetTeam() != HORDE) + player->GetSession()->SendAreaTriggerMessage("Only The Horde can use that portal"); else - Source->LeaveBattleground(); + player->LeaveBattleground(); break; case 3866: // Stables case 3869: // Gold Mine @@ -238,8 +238,7 @@ void BattlegroundAB::HandleAreaTrigger(Player* Source, uint32 Trigger) case 4021: // Unk2 //break; default: - //sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); - //Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); + Battleground::HandleAreaTrigger(player, trigger); break; } } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index 37072866238..aeebfb945f9 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -489,27 +489,25 @@ void BattlegroundAV::RemovePlayer(Player* player, uint64 /*guid*/, uint32 /*team player->RemoveAurasDueToSpell(AV_BUFF_H_CAPTAIN); } -void BattlegroundAV::HandleAreaTrigger(Player* Source, uint32 Trigger) +void BattlegroundAV::HandleAreaTrigger(Player* player, uint32 trigger) { - // this is wrong way to implement these things. On official it done by gameobject spell cast. if (GetStatus() != STATUS_IN_PROGRESS) return; - uint32 SpellId = 0; - switch (Trigger) + switch (trigger) { case 95: case 2608: - if (Source->GetTeam() != ALLIANCE) - Source->GetSession()->SendAreaTriggerMessage("Only The Alliance can use that portal"); + if (player->GetTeam() != ALLIANCE) + player->GetSession()->SendAreaTriggerMessage("Only The Alliance can use that portal"); else - Source->LeaveBattleground(); + player->LeaveBattleground(); break; case 2606: - if (Source->GetTeam() != HORDE) - Source->GetSession()->SendAreaTriggerMessage("Only The Horde can use that portal"); + if (player->GetTeam() != HORDE) + player->GetSession()->SendAreaTriggerMessage("Only The Horde can use that portal"); else - Source->LeaveBattleground(); + player->LeaveBattleground(); break; case 3326: case 3327: @@ -520,13 +518,9 @@ void BattlegroundAV::HandleAreaTrigger(Player* Source, uint32 Trigger) //Source->Unmount(); break; default: - sLog->outDebug(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); -// Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); + Battleground::HandleAreaTrigger(player, trigger); break; } - - if (SpellId) - Source->CastSpell(Source, SpellId, true); } void BattlegroundAV::UpdatePlayerScore(Player* Source, uint32 type, uint32 value, bool doAddHonor) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp index 78cf6b9863f..4b34422f31b 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundBE.cpp @@ -105,30 +105,20 @@ bool BattlegroundBE::HandlePlayerUnderMap(Player* player) return true; } -void BattlegroundBE::HandleAreaTrigger(Player* Source, uint32 Trigger) +void BattlegroundBE::HandleAreaTrigger(Player* player, uint32 trigger) { - // this is wrong way to implement these things. On official it done by gameobject spell cast. if (GetStatus() != STATUS_IN_PROGRESS) return; - //uint32 SpellId = 0; - //uint64 buff_guid = 0; - switch (Trigger) + switch (trigger) { case 4538: // buff trigger? - //buff_guid = BgObjects[BG_BE_OBJECT_BUFF_1]; - break; case 4539: // buff trigger? - //buff_guid = BgObjects[BG_BE_OBJECT_BUFF_2]; break; default: - sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); - Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); + Battleground::HandleAreaTrigger(player, trigger); break; } - - //if (buff_guid) - // HandleTriggerBuff(buff_guid, Source); } void BattlegroundBE::FillInitialWorldStates(WorldPacket &data) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp index 20eba2a7f67..be947458964 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp @@ -181,18 +181,18 @@ void BattlegroundDS::HandleKillPlayer(Player* player, Player* killer) CheckArenaWinConditions(); } -void BattlegroundDS::HandleAreaTrigger(Player* Source, uint32 Trigger) +void BattlegroundDS::HandleAreaTrigger(Player* player, uint32 trigger) { if (GetStatus() != STATUS_IN_PROGRESS) return; - switch (Trigger) + switch (trigger) { case 5347: case 5348: // Remove effects of Demonic Circle Summon - if (Source->HasAura(48018)) - Source->RemoveAurasDueToSpell(48018); + if (player->HasAura(48018)) + player->RemoveAurasDueToSpell(48018); // Someone has get back into the pipes and the knockback has already been performed, // so we reset the knockback count for kicking the player again into the arena. @@ -200,8 +200,7 @@ void BattlegroundDS::HandleAreaTrigger(Player* Source, uint32 Trigger) setPipeKnockBackCount(0); break; default: - sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); - Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); + Battleground::HandleAreaTrigger(player, trigger); break; } } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index 35ea94ba607..bad56a95cfb 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -368,35 +368,35 @@ void BattlegroundEY::RemovePlayer(Player* player, uint64 guid, uint32 /*team*/) } } -void BattlegroundEY::HandleAreaTrigger(Player* Source, uint32 Trigger) +void BattlegroundEY::HandleAreaTrigger(Player* player, uint32 trigger) { if (GetStatus() != STATUS_IN_PROGRESS) return; - if (!Source->isAlive()) //hack code, must be removed later + if (!player->isAlive()) //hack code, must be removed later return; - switch (Trigger) + switch (trigger) { case TR_BLOOD_ELF_POINT: - if (m_PointState[BLOOD_ELF] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BLOOD_ELF] == Source->GetTeam()) - if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID()) - EventPlayerCapturedFlag(Source, BG_EY_OBJECT_FLAG_BLOOD_ELF); + if (m_PointState[BLOOD_ELF] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[BLOOD_ELF] == player->GetTeam()) + if (m_FlagState && GetFlagPickerGUID() == player->GetGUID()) + EventPlayerCapturedFlag(player, BG_EY_OBJECT_FLAG_BLOOD_ELF); break; case TR_FEL_REAVER_POINT: - if (m_PointState[FEL_REAVER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[FEL_REAVER] == Source->GetTeam()) - if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID()) - EventPlayerCapturedFlag(Source, BG_EY_OBJECT_FLAG_FEL_REAVER); + if (m_PointState[FEL_REAVER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[FEL_REAVER] == player->GetTeam()) + if (m_FlagState && GetFlagPickerGUID() == player->GetGUID()) + EventPlayerCapturedFlag(player, BG_EY_OBJECT_FLAG_FEL_REAVER); break; case TR_MAGE_TOWER_POINT: - if (m_PointState[MAGE_TOWER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[MAGE_TOWER] == Source->GetTeam()) - if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID()) - EventPlayerCapturedFlag(Source, BG_EY_OBJECT_FLAG_MAGE_TOWER); + if (m_PointState[MAGE_TOWER] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[MAGE_TOWER] == player->GetTeam()) + if (m_FlagState && GetFlagPickerGUID() == player->GetGUID()) + EventPlayerCapturedFlag(player, BG_EY_OBJECT_FLAG_MAGE_TOWER); break; case TR_DRAENEI_RUINS_POINT: - if (m_PointState[DRAENEI_RUINS] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[DRAENEI_RUINS] == Source->GetTeam()) - if (m_FlagState && GetFlagPickerGUID() == Source->GetGUID()) - EventPlayerCapturedFlag(Source, BG_EY_OBJECT_FLAG_DRAENEI_RUINS); + if (m_PointState[DRAENEI_RUINS] == EY_POINT_UNDER_CONTROL && m_PointOwnedByTeam[DRAENEI_RUINS] == player->GetTeam()) + if (m_FlagState && GetFlagPickerGUID() == player->GetGUID()) + EventPlayerCapturedFlag(player, BG_EY_OBJECT_FLAG_DRAENEI_RUINS); break; case 4512: case 4515: @@ -411,8 +411,7 @@ void BattlegroundEY::HandleAreaTrigger(Player* Source, uint32 Trigger) case 5866: break; default: - sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); - Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); + Battleground::HandleAreaTrigger(player, trigger); break; } } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp index f39b1ba5540..6c45d4a8873 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundNA.cpp @@ -102,26 +102,20 @@ bool BattlegroundNA::HandlePlayerUnderMap(Player* player) return true; } -void BattlegroundNA::HandleAreaTrigger(Player* Source, uint32 Trigger) +void BattlegroundNA::HandleAreaTrigger(Player* player, uint32 trigger) { if (GetStatus() != STATUS_IN_PROGRESS) return; - //uint32 SpellId = 0; - //uint64 buff_guid = 0; - switch (Trigger) + switch (trigger) { case 4536: // buff trigger? case 4537: // buff trigger? break; default: - sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); - Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); + Battleground::HandleAreaTrigger(player, trigger); break; } - - //if (buff_guid) - // HandleTriggerBuff(buff_guid, Source); } void BattlegroundNA::FillInitialWorldStates(WorldPacket &data) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp index 7fa9980a77c..3dd4fb32da4 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRL.cpp @@ -102,27 +102,20 @@ bool BattlegroundRL::HandlePlayerUnderMap(Player* player) return true; } -void BattlegroundRL::HandleAreaTrigger(Player* Source, uint32 Trigger) +void BattlegroundRL::HandleAreaTrigger(Player* player, uint32 trigger) { - // this is wrong way to implement these things. On official it done by gameobject spell cast. if (GetStatus() != STATUS_IN_PROGRESS) return; - //uint32 SpellId = 0; - //uint64 buff_guid = 0; - switch (Trigger) + switch (trigger) { case 4696: // buff trigger? case 4697: // buff trigger? break; default: - sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); - Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); + Battleground::HandleAreaTrigger(player, trigger); break; } - - //if (buff_guid) - // HandleTriggerBuff(buff_guid, Source); } void BattlegroundRL::FillInitialWorldStates(WorldPacket &data) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp index 769df5445c7..2cc48648022 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundRV.cpp @@ -148,12 +148,12 @@ bool BattlegroundRV::HandlePlayerUnderMap(Player* player) return true; } -void BattlegroundRV::HandleAreaTrigger(Player* Source, uint32 Trigger) +void BattlegroundRV::HandleAreaTrigger(Player* player, uint32 trigger) { if (GetStatus() != STATUS_IN_PROGRESS) return; - switch (Trigger) + switch (trigger) { case 5224: case 5226: @@ -162,8 +162,7 @@ void BattlegroundRV::HandleAreaTrigger(Player* Source, uint32 Trigger) case 5474: break; default: - sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); - Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); + Battleground::HandleAreaTrigger(player, trigger); break; } } @@ -247,4 +246,4 @@ void BattlegroundRV::TogglePillarCollision() } SetPillarCollision(!apply); -}
\ No newline at end of file +} diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index dd94606b4cd..a50553d2fa3 100755 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -595,15 +595,14 @@ void BattlegroundWS::UpdateTeamScore(uint32 team) UpdateWorldState(BG_WS_FLAG_CAPTURES_HORDE, GetTeamScore(team)); } -void BattlegroundWS::HandleAreaTrigger(Player* Source, uint32 Trigger) +void BattlegroundWS::HandleAreaTrigger(Player* player, uint32 trigger) { - // this is wrong way to implement these things. On official it done by gameobject spell cast. if (GetStatus() != STATUS_IN_PROGRESS) return; //uint32 SpellId = 0; //uint64 buff_guid = 0; - switch (Trigger) + switch (trigger) { case 3686: // Alliance elixir of speed spawn. Trigger not working, because located inside other areatrigger, can be replaced by IsWithinDist(object, dist) in Battleground::Update(). //buff_guid = BgObjects[BG_WS_OBJECT_SPEEDBUFF_1]; @@ -625,13 +624,13 @@ void BattlegroundWS::HandleAreaTrigger(Player* Source, uint32 Trigger) break; case 3646: // Alliance Flag spawn if (_flagState[BG_TEAM_HORDE] && !_flagState[BG_TEAM_ALLIANCE]) - if (GetFlagPickerGUID(BG_TEAM_HORDE) == Source->GetGUID()) - EventPlayerCapturedFlag(Source); + if (GetFlagPickerGUID(BG_TEAM_HORDE) == player->GetGUID()) + EventPlayerCapturedFlag(player); break; case 3647: // Horde Flag spawn if (_flagState[BG_TEAM_ALLIANCE] && !_flagState[BG_TEAM_HORDE]) - if (GetFlagPickerGUID(BG_TEAM_ALLIANCE) == Source->GetGUID()) - EventPlayerCapturedFlag(Source); + if (GetFlagPickerGUID(BG_TEAM_ALLIANCE) == player->GetGUID()) + EventPlayerCapturedFlag(player); break; case 3649: // unk1 case 3688: // unk2 @@ -639,8 +638,7 @@ void BattlegroundWS::HandleAreaTrigger(Player* Source, uint32 Trigger) case 4629: // unk4 break; default: - sLog->outError(LOG_FILTER_BATTLEGROUND, "WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger); - Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger); + Battleground::HandleAreaTrigger(player, trigger); break; } diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 546c4f303b2..7dc4b57d188 100755 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -223,6 +223,9 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) case RELATION_PASSENGER_OF: condMeets = unit->IsOnVehicle(toUnit); break; + case RELATION_CREATED_BY: + condMeets = unit->GetCreatorGUID() == toUnit->GetGUID(); + break; } } } diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index bd72015d76f..57af0562dcd 100755 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -144,6 +144,7 @@ enum RelationType RELATION_IN_RAID_OR_PARTY, RELATION_OWNED_BY, RELATION_PASSENGER_OF, + RELATION_CREATED_BY, RELATION_MAX }; diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index eb2fa8f1a0e..8fb81a0e021 100755 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -802,6 +802,7 @@ class GameObject : public WorldObject, public GridObject<GameObject> std::string GetAIName() const; void SetDisplayId(uint32 displayid); + uint32 GetDisplayId() const { return GetUInt32Value(GAMEOBJECT_DISPLAYID); } GameObjectModel * m_model; protected: diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a5ba72cb9b2..8e18f1de9ab 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -173,6 +173,7 @@ Unit::Unit(bool isWorldObject): WorldObject(isWorldObject) , m_vehicleKit(NULL) , m_unitTypeMask(UNIT_MASK_NONE) , m_HostileRefManager(this) + , _lastDamagedTime(0) { #ifdef _MSC_VER #pragma warning(default:4355) @@ -12419,6 +12420,10 @@ int32 Unit::ModifyHealth(int32 dVal) if (dVal == 0) return 0; + // Part of Evade mechanics. Only track health lost, not gained. + if (dVal < 0 && GetTypeId() != TYPEID_PLAYER && !isPet()) + SetLastDamagedTime(time(NULL)); + int32 curHealth = (int32)GetHealth(); int32 val = dVal + curHealth; @@ -13045,6 +13050,14 @@ Unit* Creature::SelectVictim() return target; } + // Case where mob is being kited. + // Mob may not be in range to attack or may have dropped target. In any case, + // don't evade if damage received within the last 10 seconds + // Does not apply to world bosses to prevent kiting to cities + if (!isWorldBoss() && !GetInstanceId()) + if (time(NULL) - GetLastDamagedTime() <= MAX_AGGRO_RESET_TIME) + return target; + // last case when creature must not go to evade mode: // it in combat but attacker not make any damage and not enter to aggro radius to have record in threat list // for example at owner command to pet attack some far away creature diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 8eb822831aa..5a639de574c 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -262,6 +262,8 @@ enum UnitRename #define MAX_SPELL_POSSESS 8 #define MAX_SPELL_CONTROL_BAR 10 +#define MAX_AGGRO_RESET_TIME 10 // in seconds + enum Swing { NOSWING = 0, @@ -2218,6 +2220,10 @@ class Unit : public WorldObject // Movement info Movement::MoveSpline * movespline; + // Part of Evade mechanics + time_t GetLastDamagedTime() const { return _lastDamagedTime; } + void SetLastDamagedTime(time_t val) { _lastDamagedTime = val; } + protected: explicit Unit (bool isWorldObject); @@ -2339,6 +2345,8 @@ class Unit : public WorldObject Spell const* _focusSpell; ///> Locks the target during spell cast for proper facing bool _isWalkingBeforeCharm; // Are we walking before we were charmed? + + time_t _lastDamagedTime; // Part of Evade mechanics }; namespace Trinity diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index abffc65245d..4060ee42206 100755 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1637,6 +1637,9 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b } if (GetSpellInfo()->GetSpellSpecific() == SPELL_SPECIFIC_AURA) { + if (!caster) + break; + // Improved devotion aura if (caster->HasAura(20140) || caster->HasAura(20138) || caster->HasAura(20139)) { diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 81807e63fb1..70ec7bd4d68 100755 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -74,6 +74,9 @@ DiminishingGroup GetDiminishingReturnsGroupForSpell(SpellInfo const* spellproto, // Pet charge effects (Infernal Awakening, Demon Charge) if (spellproto->SpellVisual[0] == 2816 && spellproto->SpellIconID == 15) return DIMINISHING_CONTROLLED_STUN; + // Frost Tomb + else if (spellproto->Id == 48400) + return DIMINISHING_NONE; // Gnaw else if (spellproto->Id == 47481) return DIMINISHING_CONTROLLED_STUN; @@ -2772,6 +2775,10 @@ void SpellMgr::LoadSpellCustomAttr() switch (spellInfo->Id) { + case 60256: + //Crashes client on pressing ESC (Maybe because of ReqSpellFocus and GameObject) + spellInfo->AttributesEx4 &= ~SPELL_ATTR4_TRIGGERED; + break; case 1776: // Gouge case 1777: case 8629: @@ -2982,6 +2989,16 @@ void SpellMgr::LoadDbcDataCorrections() switch (spellInfo->Id) { + case 42730: + spellInfo->EffectTriggerSpell[EFFECT_1] = 42739; + break; + case 59735: + spellInfo->EffectTriggerSpell[EFFECT_1] = 59736; + break; + case 52611: // Summon Skeletons + case 52612: // Summon Skeletons + spellInfo->EffectMiscValueB[0] = 64; + break; case 40244: // Simon Game Visual case 40245: // Simon Game Visual case 40246: // Simon Game Visual diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index e68e28be99b..270e31f4350 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -133,7 +133,7 @@ public: struct boss_eregosAI : public BossAI { boss_eregosAI(Creature* creature) : BossAI(creature, DATA_EREGOS_EVENT) { } - + void Reset() { _Reset(); @@ -160,7 +160,7 @@ public: _emeraldVoid = false; if (me->FindNearestCreature(NPC_AMBER_DRAKE_VEHICLE, 500.0f, true)) _amberVoid = false; - } + } uint32 GetData(uint32 type) { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index 48667053373..aaa95631792 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -56,13 +56,16 @@ enum Events EVENT_DARK_SMASH, EVENT_DREADFUL_ROAR, EVENT_WOE_STRIKE, - EVENT_SHADOW_AXE + EVENT_SHADOW_AXE, + EVENT_JUST_TRANSFORMED, + EVENT_SUMMON_BANSHEE }; enum Phases { PHASE_HUMAN = 1, PHASE_UNDEAD, + PHASE_EVENT }; enum Spells @@ -83,7 +86,7 @@ enum Spells SPELL_WOE_STRIKE = 42730, ENTRY_THROW_TARGET = 23996, - SPELL_SHADOW_AXE_SUMMON = 42749 + SPELL_SHADOW_AXE_SUMMON = 42748 }; class boss_ingvar_the_plunderer : public CreatureScript @@ -107,9 +110,6 @@ public: InstanceScript* instance; bool bIsUndead; - bool bEventInProgress; - - uint32 uiSpawnResTimer; void Reset() { @@ -117,7 +117,6 @@ public: me->UpdateEntry(MOB_INGVAR_HUMAN); bIsUndead = false; - bEventInProgress = false; me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); me->SetStandState(UNIT_STAND_STATE_STAND); @@ -130,13 +129,6 @@ public: events.ScheduleEvent(EVENT_ENRAGE, urand(7,14)*IN_MILLISECONDS, 0, PHASE_HUMAN); events.ScheduleEvent(EVENT_SMASH, urand(12,17)*IN_MILLISECONDS, 0, PHASE_HUMAN); - events.ScheduleEvent(EVENT_DARK_SMASH, urand(14,22)*IN_MILLISECONDS, 0, PHASE_UNDEAD); - events.ScheduleEvent(EVENT_DREADFUL_ROAR, urand(18,21)*IN_MILLISECONDS, 0, PHASE_UNDEAD); - events.ScheduleEvent(EVENT_WOE_STRIKE, urand(10,14)*IN_MILLISECONDS, 0, PHASE_UNDEAD); - events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD); - - uiSpawnResTimer = 3000; - if (instance) instance->SetData(DATA_INGVAR_EVENT, NOT_STARTED); } @@ -156,37 +148,34 @@ public: me->SetStandState(UNIT_STAND_STATE_DEAD); // visuel hack end - bEventInProgress = true; - bIsUndead = true; - events.SetPhase(PHASE_UNDEAD); + events.SetPhase(PHASE_EVENT); + events.ScheduleEvent(EVENT_SUMMON_BANSHEE, 3 * IN_MILLISECONDS, 0, PHASE_EVENT); DoScriptText(YELL_DEAD_1, me); } - if (bEventInProgress) - { + if (events.GetPhaseMask() & (1 << PHASE_EVENT)) damage = 0; - } } void StartZombiePhase() { bIsUndead = true; - bEventInProgress = false; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->UpdateEntry(MOB_INGVAR_UNDEAD); - me->SetInCombatWith(me->getVictim()); - me->GetMotionMaster()->MoveChase(me->getVictim()); + events.ScheduleEvent(EVENT_JUST_TRANSFORMED, 2 * IN_MILLISECONDS, 0, PHASE_EVENT); DoScriptText(YELL_AGGRO_2, me); } void EnterCombat(Unit* /*who*/) { - DoScriptText(YELL_AGGRO_1, me); + if (!bIsUndead) + DoScriptText(YELL_AGGRO_1, me); if (instance) instance->SetData(DATA_INGVAR_EVENT, IN_PROGRESS); + + me->SetInCombatWithZone(); } void JustDied(Unit* /*killer*/) @@ -201,6 +190,15 @@ public: } } + void ScheduleSecondPhase() + { + events.SetPhase(PHASE_UNDEAD); + events.ScheduleEvent(EVENT_DARK_SMASH, urand(14,18)*IN_MILLISECONDS, 0, PHASE_UNDEAD); + events.ScheduleEvent(EVENT_DREADFUL_ROAR, urand(18,22)*IN_MILLISECONDS, 0, PHASE_UNDEAD); + events.ScheduleEvent(EVENT_WOE_STRIKE, urand(10,14)*IN_MILLISECONDS, 0, PHASE_UNDEAD); + events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD); + } + void KilledUnit(Unit* /*victim*/) { if (bIsUndead) @@ -211,24 +209,9 @@ public: void UpdateAI(const uint32 diff) { - if (!UpdateVictim()) + if (!UpdateVictim() && !(events.GetPhaseMask() & (1 << PHASE_EVENT))) return; - if (bEventInProgress) - { - if (uiSpawnResTimer) - { - if (uiSpawnResTimer <= diff) - { - DoCast(me, SPELL_SUMMON_BANSHEE); // Summons directly on caster position - // DoCast(me, SPELL_SCOURG_RESURRECTION, true); // Not needed ? - uiSpawnResTimer = 0; - } else uiSpawnResTimer -= diff; - } - - return; - } - events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) @@ -245,24 +228,33 @@ public: break; case EVENT_STAGGERING_ROAR: DoCast(me, SPELL_STAGGERING_ROAR); - events.ScheduleEvent(EVENT_STAGGERING_ROAR, urand(18,21)*IN_MILLISECONDS, 0, PHASE_HUMAN); + events.ScheduleEvent(EVENT_STAGGERING_ROAR, urand(18,22)*IN_MILLISECONDS, 0, PHASE_HUMAN); break; case EVENT_ENRAGE: DoCast(me, SPELL_ENRAGE); events.ScheduleEvent(EVENT_ENRAGE, urand(7,14)*IN_MILLISECONDS, 0, PHASE_HUMAN); break; case EVENT_SMASH: - DoCastVictim(SPELL_SMASH); - events.ScheduleEvent(EVENT_SMASH, urand(12,17)*IN_MILLISECONDS, 0, PHASE_HUMAN); + DoCastAOE(SPELL_SMASH); + events.ScheduleEvent(EVENT_SMASH, urand(12,16)*IN_MILLISECONDS, 0, PHASE_HUMAN); break; + case EVENT_JUST_TRANSFORMED: + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->SetInCombatWithZone(); + me->GetMotionMaster()->MoveChase(me->getVictim()); + ScheduleSecondPhase(); + return; + case EVENT_SUMMON_BANSHEE: + DoCast(me, SPELL_SUMMON_BANSHEE); + return; // PHASE TWO case EVENT_DARK_SMASH: DoCastVictim(SPELL_DARK_SMASH); - events.ScheduleEvent(EVENT_DARK_SMASH, urand(14,22)*IN_MILLISECONDS, 0, PHASE_UNDEAD); + events.ScheduleEvent(EVENT_DARK_SMASH, urand(12,16)*IN_MILLISECONDS, 0, PHASE_UNDEAD); break; case EVENT_DREADFUL_ROAR: DoCast(me, SPELL_DREADFUL_ROAR); - events.ScheduleEvent(EVENT_DREADFUL_ROAR, urand(18,21)*IN_MILLISECONDS, 0, PHASE_UNDEAD); + events.ScheduleEvent(EVENT_DREADFUL_ROAR, urand(18,22)*IN_MILLISECONDS, 0, PHASE_UNDEAD); break; case EVENT_WOE_STRIKE: DoCastVictim(SPELL_WOE_STRIKE); @@ -271,8 +263,7 @@ public: case EVENT_SHADOW_AXE: if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 1)) { - me->SummonCreature(ENTRY_THROW_TARGET, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 2000); - DoCast(me, SPELL_SHADOW_AXE_SUMMON); + DoCast(target, SPELL_SHADOW_AXE_SUMMON); } events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD); break; @@ -411,7 +402,8 @@ public: enum eShadowAxe { SPELL_SHADOW_AXE_DAMAGE = 42750, - H_SPELL_SHADOW_AXE_DAMAGE = 59719 + H_SPELL_SHADOW_AXE_DAMAGE = 59719, + POINT_TARGET = 28 }; class mob_ingvar_throw_dummy : public CreatureScript @@ -430,32 +422,34 @@ public: { } - uint32 uiDespawnTimer; - void Reset() { - Unit* target = me->FindNearestCreature(ENTRY_THROW_TARGET, 50); - if (target) + if (Creature* target = me->FindNearestCreature(ENTRY_THROW_TARGET, 50.0f)) { - DoCast(me, SPELL_SHADOW_AXE_DAMAGE); float x, y, z; target->GetPosition(x, y, z); - me->GetMotionMaster()->MovePoint(0, x, y, z); + me->GetMotionMaster()->MoveCharge(x, y, z, 42.0f, POINT_TARGET); + target->DisappearAndDie(); + } + else + { + me->DisappearAndDie(); } - uiDespawnTimer = 7000; } - void AttackStart(Unit* /*who*/) {} - void MoveInLineOfSight(Unit* /*who*/) {} - void EnterCombat(Unit* /*who*/) {} - void UpdateAI(const uint32 diff) + void MovementInform(uint32 type, uint32 id) { - if (uiDespawnTimer <= diff) + if (type == EFFECT_MOTION_TYPE && id == POINT_TARGET) { - me->DealDamage(me, me->GetHealth()); - me->RemoveCorpse(); - uiDespawnTimer = 0; - } else uiDespawnTimer -= diff; + DoCast(me, SPELL_SHADOW_AXE_DAMAGE); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE); + if (TempSummon* summon = me->ToTempSummon()) + { + summon->UnSummon(10000); + } + else + me->DisappearAndDie(); + } } }; }; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index b987b00fa5b..e718942d091 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -43,6 +43,9 @@ enum KelsethEncounter NPC_FROSTTOMB = 23965, NPC_SKELETON = 23970, + NPC_RUNEMAGE = 23960, + NPC_STRATEGIST = 23956, + SAY_START_COMBAT = 1, SAY_SUMMON_SKELETONS, SAY_FROST_TOMB, @@ -118,10 +121,7 @@ public: struct boss_kelesethAI : public BossAI { - boss_kelesethAI(Creature* creature) : BossAI(creature, DATA_PRINCEKELESETH_EVENT) - { - creature->SetReactState(REACT_DEFENSIVE); - } + boss_kelesethAI(Creature* creature) : BossAI(creature, DATA_PRINCEKELESETH_EVENT){} void Reset() { @@ -138,12 +138,37 @@ public: onTheRocks = true; } - void EnterCombat(Unit* /*who*/) + void EnterCombat(Unit* who) { me->SetInCombatWithZone(); if (instance) instance->SetData(DATA_PRINCEKELESETH_EVENT, IN_PROGRESS); Talk(SAY_START_COMBAT); + + if (!who) + return; + + std::list<Creature*> runemages; + me->GetCreatureListWithEntryInGrid(runemages, NPC_RUNEMAGE, 60.0f); + if (!runemages.empty()) + { + for (std::list<Creature*>::iterator itr = runemages.begin(); itr != runemages.end(); ++itr) + { + if ((*itr)->isAlive() && (*itr)->IsWithinLOSInMap(me)) + (*itr)->AI()->AttackStart(who); + } + } + + std::list<Creature*> strategists; + me->GetCreatureListWithEntryInGrid(strategists, NPC_STRATEGIST, 60.0f); + if (!strategists.empty()) + { + for (std::list<Creature*>::iterator itr = strategists.begin(); itr != strategists.end(); ++itr) + { + if ((*itr)->isAlive() && (*itr)->IsWithinLOSInMap(me)) + (*itr)->AI()->AttackStart(who); + } + } } void JustDied(Unit* /*killer*/) @@ -168,10 +193,20 @@ public: return 0; } - void ExecuteEvent(uint32 const eventId) + void UpdateAI(uint32 const diff) { - switch (eventId) + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = events.ExecuteEvent()) { + switch (eventId) + { case EVENT_SUMMON_SKELETONS: Talk(SAY_SUMMON_SKELETONS); SummonSkeletons(); @@ -192,7 +227,10 @@ public: } events.ScheduleEvent(EVENT_FROST_TOMB, urand(14,19)*IN_MILLISECONDS); break; + } } + + DoMeleeAttackIfReady(); } void SummonSkeletons() @@ -225,7 +263,6 @@ public: events.Reset(); events.ScheduleEvent(EVENT_DECREPIFY, urand(4,6)*IN_MILLISECONDS); - DoCast(SPELL_BONE_ARMOR); } void DamageTaken(Unit* /*done_by*/, uint32 &damage) @@ -278,6 +315,13 @@ public: break; case EVENT_SHADOW_FISSURE: DoCast(me, SPELL_SHADOW_FISSURE, true); + if (TempSummon* temp = me->ToTempSummon()) + { + if (Unit* summoner = temp->GetSummoner()) + { + DoCast(summoner, SPELL_BONE_ARMOR); + } + } me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->RemoveFlag(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD); me->GetMotionMaster()->MoveChase(me->getVictim()); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index be8d60fbeb9..7c977250e79 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -47,6 +47,7 @@ enum eEnums SPELL_CHARGE = 43651, SPELL_STONE_STRIKE = 48583, SPELL_SUMMON_SKARVALD_GHOST = 48613, + SPELL_ENRAGE = 48193, MOB_SKARVALD_GHOST = 27390, //Spells of Dalronn and his Ghost MOB_DALRONN_THE_CONTROLLER = 24201, @@ -58,6 +59,20 @@ enum eEnums MOB_DALRONN_GHOST = 27389 }; +class SkarvaldChargePredicate +{ + public: + SkarvaldChargePredicate(Unit* unit) : me(unit) {} + + bool operator() (WorldObject* object) const + { + return object->GetDistance2d(me) >= 5.0f && object->GetDistance2d(me) <= 30.0f; + } + + private: + Unit* me; +}; + class boss_skarvald_the_constructor : public CreatureScript { public: @@ -83,6 +98,7 @@ public: uint32 Response_Timer; uint32 Check_Timer; bool Dalronn_isDead; + bool Enraged; void Reset() { @@ -90,6 +106,7 @@ public: StoneStrike_Timer = 10000; Dalronn_isDead = false; Check_Timer = 5000; + Enraged = false; ghost = (me->GetEntry() == MOB_SKARVALD_GHOST); if (!ghost && instance) @@ -116,6 +133,15 @@ public: } } + void DamageTaken(Unit* /*attacker*/, uint32& damage) + { + if (!Enraged && !ghost && me->HealthBelowPctDamaged(15, damage)) + { + Enraged = true; + DoCast(me, SPELL_ENRAGE); + } + } + void JustDied(Unit* killer) { if (!ghost && instance) @@ -194,7 +220,7 @@ public: if (Charge_Timer <= diff) { - DoCast(SelectTarget(SELECT_TARGET_RANDOM, 1), SPELL_CHARGE); + DoCast(SelectTarget(SELECT_TARGET_RANDOM, 0, SkarvaldChargePredicate(me)), SPELL_CHARGE); Charge_Timer = 5000+rand()%5000; } else Charge_Timer -= diff; @@ -204,7 +230,8 @@ public: StoneStrike_Timer = 5000+rand()%5000; } else StoneStrike_Timer -= diff; - DoMeleeAttackIfReady(); + if (!me->HasUnitState(UNIT_STATE_CASTING)) + DoMeleeAttackIfReady(); } }; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index 2d53e7062eb..c694aa88338 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -18,6 +18,8 @@ #include "ScriptMgr.h" #include "ScriptedCreature.h" #include "utgarde_keep.h" +#include "SpellScript.h" +#include "SpellAuraEffects.h" uint32 entry_search[3] = { @@ -164,7 +166,82 @@ public: }; }; +enum TickingTimeBomb +{ + SPELL_TICKING_TIME_BOMB_EXPLODE = 59687 +}; +class spell_ticking_time_bomb : public SpellScriptLoader +{ + public: + spell_ticking_time_bomb() : SpellScriptLoader("spell_ticking_time_bomb") { } + + class spell_ticking_time_bomb_AuraScript : public AuraScript + { + PrepareAuraScript(spell_ticking_time_bomb_AuraScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + return (bool) sSpellMgr->GetSpellInfo(SPELL_TICKING_TIME_BOMB_EXPLODE); + } + + void HandleOnEffectRemove(AuraEffect const* /* aurEff */, AuraEffectHandleModes /* mode */) + { + if (GetCaster() == GetTarget()) + { + GetTarget()->CastSpell(GetTarget(), SPELL_TICKING_TIME_BOMB_EXPLODE, true); + } + } + + void Register() + { + OnEffectRemove += AuraEffectRemoveFn(spell_ticking_time_bomb_AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_ticking_time_bomb_AuraScript(); + } +}; + +enum Fixate +{ + SPELL_FIXATE_TRIGGER = 40415 +}; +class spell_fixate : public SpellScriptLoader +{ + public: + spell_fixate() : SpellScriptLoader("spell_fixate") { } + + class spell_fixate_SpellScript : public SpellScript + { + PrepareSpellScript(spell_fixate_SpellScript); + + bool Validate(SpellInfo const* /*spellEntry*/) + { + return (bool) sSpellMgr->GetSpellInfo(SPELL_FIXATE_TRIGGER); + } + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + // The unit has to cast the taunt on hisself, but we need the original caster for SPELL_AURA_MOD_TAUNT + GetCaster()->CastSpell(GetCaster(), SPELL_FIXATE_TRIGGER, true, 0, 0, GetHitUnit()->GetGUID()); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_fixate_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_fixate_SpellScript(); + } +}; void AddSC_utgarde_keep() { new npc_dragonflayer_forge_master(); + new spell_ticking_time_bomb(); + new spell_fixate(); } diff --git a/src/server/scripts/Northrend/borean_tundra.cpp b/src/server/scripts/Northrend/borean_tundra.cpp index 9b207c257fc..224d06e9d3c 100644 --- a/src/server/scripts/Northrend/borean_tundra.cpp +++ b/src/server/scripts/Northrend/borean_tundra.cpp @@ -1667,7 +1667,6 @@ public: /*###### ## npc_imprisoned_beryl_sorcerer ######*/ - enum eImprisionedBerylSorcerer { SPELL_NEURAL_NEEDLE = 45634, @@ -1692,103 +1691,79 @@ public: { npc_imprisoned_beryl_sorcererAI(Creature* creature) : ScriptedAI(creature) {} - uint64 CasterGUID; - - uint32 uiStep; - uint32 uiPhase; + uint32 rebuff; void Reset() { - uiStep = 1; - uiPhase = 0; - CasterGUID = 0; + if (me->GetReactState() != REACT_PASSIVE) + me->SetReactState(REACT_PASSIVE); + + rebuff = 0; + } + + void UpdateAI(const uint32 diff) + { + UpdateVictim(); + + if (rebuff <= diff) + { + if (!me->HasAura(SPELL_COSMETIC_ENSLAVE_CHAINS_SELF)) + { + DoCast(me, SPELL_COSMETIC_ENSLAVE_CHAINS_SELF); + } + rebuff = 180000; + } + else + rebuff -= diff; + + DoMeleeAttackIfReady(); } void EnterCombat(Unit* /*who*/) { } - void SpellHit(Unit* unit, const SpellInfo* pSpell) + void SpellHit(Unit* unit, const SpellInfo* spell) { - if (pSpell->Id == SPELL_NEURAL_NEEDLE && unit->GetTypeId() == TYPEID_PLAYER) + if (spell->Id == SPELL_NEURAL_NEEDLE && unit->GetTypeId() == TYPEID_PLAYER) { - ++uiPhase; - CasterGUID = unit->GetGUID(); + if (Player* player = unit->ToPlayer()) + { + GotStinged(player->GetGUID()); + } } } - void UpdateAI(const uint32 uiDiff) + void GotStinged(uint64 casterGUID) { - ScriptedAI::UpdateAI(uiDiff); - - if (!me->HasAura(SPELL_COSMETIC_ENSLAVE_CHAINS_SELF)) - DoCast(me, SPELL_COSMETIC_ENSLAVE_CHAINS_SELF); - - if (me->GetReactState() != REACT_PASSIVE) - me->SetReactState(REACT_PASSIVE); - - switch (uiPhase) + if (Player* caster = Player::GetPlayer(*me, casterGUID)) { - case 1: - if (uiStep == 1) - { + uint32 step = caster->GetAuraCount(SPELL_NEURAL_NEEDLE) + 1; + switch (step) + { + case 1: DoScriptText(SAY_IMPRISIONED_BERYL_1, me); - uiStep = 2; - } - break; - - case 2: - if (uiStep == 2) - { - DoScriptText(SAY_IMPRISIONED_BERYL_2, me); - uiStep = 3; - } - break; - - case 3: - if (uiStep == 3) - { + break; + case 2: + DoScriptText(SAY_IMPRISIONED_BERYL_2, me, caster); + break; + case 3: DoScriptText(SAY_IMPRISIONED_BERYL_3, me); - uiStep = 4; - } - break; - - case 4: - if (uiStep == 4) - { + break; + case 4: DoScriptText(SAY_IMPRISIONED_BERYL_4, me); - uiStep = 5; - } - break; - - case 5: - if (uiStep == 5) - { - if (Player* pCaster = Unit::GetPlayer(*me, CasterGUID)) - { - DoScriptText(SAY_IMPRISIONED_BERYL_5, me); - pCaster->KilledMonsterCredit(25478, 0); - uiStep = 6; - } - } - break; - - case 6: - if (uiStep == 6) - { - DoScriptText(SAY_IMPRISIONED_BERYL_6, me); - uiStep = 7; - } - break; - - case 7: - if (uiStep == 7) - { + break; + case 5: + DoScriptText(SAY_IMPRISIONED_BERYL_5, me); + break; + case 6: + DoScriptText(SAY_IMPRISIONED_BERYL_6, me, caster); + break; + case 7: DoScriptText(SAY_IMPRISIONED_BERYL_7, me); - uiStep = 1; - uiPhase = 0; - } - break; + caster->KilledMonsterCredit(NPC_IMPRISONED_BERYL_SORCERER, 0); + break; + } } } }; diff --git a/src/server/scripts/Outland/shadowmoon_valley.cpp b/src/server/scripts/Outland/shadowmoon_valley.cpp index 078f8f5a4f0..c84df2ee3d4 100644 --- a/src/server/scripts/Outland/shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/shadowmoon_valley.cpp @@ -1899,6 +1899,96 @@ class spell_unlocking_zuluheds_chains : public SpellScriptLoader } }; +enum ShadowMoonTuberEnum +{ + SPELL_WHISTLE = 36652, + SPELL_SHADOWMOON_TUBER = 36462, + + NPC_BOAR_ENTRY = 21195, + GO_SHADOWMOON_TUBER_MOUND = 184701, + + POINT_TUBER = 1, + TYPE_BOAR = 1, + DATA_BOAR = 1 +}; + +class npc_shadowmoon_tuber_node : public CreatureScript +{ +public: + npc_shadowmoon_tuber_node() : CreatureScript("npc_shadowmoon_tuber_node") {} + + struct npc_shadowmoon_tuber_nodeAI : public ScriptedAI + { + npc_shadowmoon_tuber_nodeAI(Creature* creature) : ScriptedAI(creature) {} + + void Reset() + { + tapped = false; + tuberGUID = 0; + resetTimer = 60000; + } + + void SetData(uint32 id, uint32 data) + { + if (id == TYPE_BOAR && data == DATA_BOAR) + { + // Spawn chest GO + DoCast(SPELL_SHADOWMOON_TUBER); + + // Despawn the tuber + if (GameObject* tuber = me->FindNearestGameObject(GO_SHADOWMOON_TUBER_MOUND, 5.0f)) + { + tuberGUID = tuber->GetGUID(); + // @Workaround: find how to properly despawn the GO + tuber->SetPhaseMask(2, true); + } + } + } + + void SpellHit(Unit* /*caster*/, const SpellInfo* spell) + { + if (!tapped && spell->Id == SPELL_WHISTLE) + { + if (Creature* boar = me->FindNearestCreature(NPC_BOAR_ENTRY, 30.0f)) + { + // Disable trigger and force nearest boar to walk to him + tapped = true; + boar->SetWalk(false); + boar->GetMotionMaster()->MovePoint(POINT_TUBER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); + } + } + } + + void UpdateAI(const uint32 diff) + { + if (tapped) + { + if (resetTimer <= diff) + { + // Respawn the tuber + if (tuberGUID) + if (GameObject* tuber = GameObject::GetGameObject(*me, tuberGUID)) + // @Workaround: find how to properly respawn the GO + tuber->SetPhaseMask(1, true); + + Reset(); + } + else + resetTimer -= diff; + } + } + private: + bool tapped; + uint64 tuberGUID; + uint32 resetTimer; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_shadowmoon_tuber_nodeAI(creature); + } +}; + void AddSC_shadowmoon_valley() { new mob_mature_netherwing_drake(); @@ -1917,4 +2007,5 @@ void AddSC_shadowmoon_valley() new mob_torloth_the_magnificent(); new npc_enraged_spirit(); new spell_unlocking_zuluheds_chains(); + new npc_shadowmoon_tuber_node(); } |