aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README3
-rw-r--r--sql/updates/world/2012_09_19_00_world_dwarfageddon.sql16
-rw-r--r--sql/updates/world/2012_09_19_00_world_reference_loot_template.sql449
-rw-r--r--sql/updates/world/2012_09_22_00_world_utgarde.sql102
-rw-r--r--sql/updates/world/2012_09_22_01_world_i_was_a_lot_of_things.sql32
-rw-r--r--sql/updates/world/2012_09_22_03_world_game_event.sql2
-rw-r--r--src/server/collision/Models/GameObjectModel.cpp2
-rwxr-xr-xsrc/server/game/AI/CreatureAI.cpp7
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp2
-rwxr-xr-xsrc/server/game/Battlegrounds/Battleground.cpp8
-rwxr-xr-xsrc/server/game/Battlegrounds/Battleground.h2
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundAB.cpp19
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundAV.cpp24
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundBE.cpp16
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundDS.cpp11
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundEY.cpp33
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundNA.cpp12
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundRL.cpp13
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundRV.cpp9
-rwxr-xr-xsrc/server/game/Battlegrounds/Zones/BattlegroundWS.cpp16
-rwxr-xr-xsrc/server/game/Conditions/ConditionMgr.cpp3
-rwxr-xr-xsrc/server/game/Conditions/ConditionMgr.h1
-rwxr-xr-xsrc/server/game/Entities/GameObject/GameObject.h1
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp13
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.h8
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuras.cpp3
-rwxr-xr-xsrc/server/game/Spells/SpellMgr.cpp17
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp4
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp122
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp60
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp31
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp77
-rw-r--r--src/server/scripts/Northrend/borean_tundra.cpp131
-rw-r--r--src/server/scripts/Outland/shadowmoon_valley.cpp91
34 files changed, 1086 insertions, 254 deletions
diff --git a/README b/README
index f2ae18f6cf5..9f2f9483b81 100644
--- a/README
+++ b/README
@@ -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();
}