aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--sql/updates/world/2012_01_14_03_world_trinity_string.sql (renamed from sql/updates/world/2011_01_14_03_world_trinity_string.sql)0
-rw-r--r--sql/updates/world/2012_01_15_00_world_loot_template.sql5
-rw-r--r--sql/updates/world/2012_01_15_02_world_creature_template.sql2
-rw-r--r--sql/updates/world/2012_01_15_03_world_item_loot_template.sql45
-rw-r--r--sql/updates/world/2012_01_16_00_world_stored_procedure.sql161
-rw-r--r--sql/updates/world/2012_01_16_01_world_sai.sql17
-rw-r--r--sql/updates/world/2012_01_16_02_world_sai.sql11
-rw-r--r--sql/updates/world/2012_01_16_03_world_sai.sql16
-rw-r--r--sql/updates/world/2012_01_16_04_world_sai.sql11
-rw-r--r--sql/updates/world/2012_01_16_05_world_sai.sql15
-rw-r--r--sql/updates/world/2012_01_16_06_world_sai.sql14
-rw-r--r--sql/updates/world/2012_01_16_07_world_sai.sql33
-rw-r--r--sql/updates/world/2012_01_16_08_world_sai.sql12
-rw-r--r--sql/updates/world/2012_01_16_09_world_sai.sql10
-rw-r--r--sql/updates/world/2012_01_17_00_world_misc.sql27
-rw-r--r--sql/updates/world/2012_01_17_01_world_conditions.sql12
-rwxr-xr-xsrc/server/game/Conditions/ConditionMgr.cpp2
-rwxr-xr-xsrc/server/game/DungeonFinding/LFGMgr.cpp2
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp28
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h6
-rwxr-xr-xsrc/server/game/Entities/Unit/Unit.cpp4
-rwxr-xr-xsrc/server/game/Movement/MotionMaster.cpp4
-rwxr-xr-xsrc/server/game/Movement/MotionMaster.h2
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuras.cpp14
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuras.h3
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/stormwind_city.cpp74
-rwxr-xr-xsrc/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp105
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp2
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp18
-rw-r--r--src/server/scripts/Northrend/dalaran.cpp13
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp78
33 files changed, 603 insertions, 150 deletions
diff --git a/.gitignore b/.gitignore
index 5bceef179b9..ace64225d0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+
build*/
.directory
.mailmap
@@ -9,3 +10,7 @@ build*/
*.bak
*.patch
*.diff
+*.REMOTE.*
+*.BACKUP.*
+*.BASE.*
+*.LOCAL.* \ No newline at end of file
diff --git a/sql/updates/world/2011_01_14_03_world_trinity_string.sql b/sql/updates/world/2012_01_14_03_world_trinity_string.sql
index 7dab007f774..7dab007f774 100644
--- a/sql/updates/world/2011_01_14_03_world_trinity_string.sql
+++ b/sql/updates/world/2012_01_14_03_world_trinity_string.sql
diff --git a/sql/updates/world/2012_01_15_00_world_loot_template.sql b/sql/updates/world/2012_01_15_00_world_loot_template.sql
new file mode 100644
index 00000000000..af61833536d
--- /dev/null
+++ b/sql/updates/world/2012_01_15_00_world_loot_template.sql
@@ -0,0 +1,5 @@
+UPDATE `creature_loot_template` SET `mincountOrRef`=-10001 WHERE `mincountOrRef`=-24725;
+UPDATE `gameobject_loot_template` SET `mincountOrRef`=-10001 WHERE `mincountOrRef`=-24725;
+UPDATE `item_loot_template` SET `mincountOrRef`=-10001 WHERE `mincountOrRef`=-24725;
+
+DELETE FROM `reference_loot_template` WHERE `entry`=24725;
diff --git a/sql/updates/world/2012_01_15_02_world_creature_template.sql b/sql/updates/world/2012_01_15_02_world_creature_template.sql
new file mode 100644
index 00000000000..4b6dcad8a33
--- /dev/null
+++ b/sql/updates/world/2012_01_15_02_world_creature_template.sql
@@ -0,0 +1,2 @@
+-- Among the Champions and The Grand Melee updates
+UPDATE `creature_template` SET `ScriptName`='npc_valiant', `dmg_multiplier`=2 WHERE `entry`IN (33285,33306,33384,33383,33382,33739,33749,33745,33744,33748,33740,33743,33747,33738,33746,33561,33558,33559,33562);
diff --git a/sql/updates/world/2012_01_15_03_world_item_loot_template.sql b/sql/updates/world/2012_01_15_03_world_item_loot_template.sql
new file mode 100644
index 00000000000..bbe9994e897
--- /dev/null
+++ b/sql/updates/world/2012_01_15_03_world_item_loot_template.sql
@@ -0,0 +1,45 @@
+SET @Bag := 20469;
+SET @RefA := 10022;
+SET @RefB := 10023;
+SET @RefC := 10024;
+SET @RefD := 10025;
+
+-- Add missing recipes to "Decoded True Believer Clippings" (i20469)
+DELETE FROM `item_loot_template` WHERE `entry` = 20469;
+INSERT INTO `item_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(@Bag,1,100,1,0,-@RefD,2), -- Decoded Twilight Texts
+-- scrolls via reference
+(@Bag,2,100,1,0,-10001,1), -- one from level V scrolls
+(@Bag,3,4,1,0,-@RefA,1), -- one from Crest of Beckoning
+(@Bag,4,4,1,0,-@RefB,1), -- one from Sigil of Beckoning
+(@Bag,5,4,1,0,-@RefC,1), -- one from Scepter of Beckoning
+-- special pattern drops:
+(@Bag,20546,3,1,0,1,1), -- Runed Stygian Leggings
+(@Bag,20547,3,1,0,1,1), -- Runed Stygian Boots
+(@Bag,20548,3,1,0,1,1), -- Runed Stygian Belt
+(@Bag,20553,3,1,0,1,1), -- Darkrune Gauntlets
+(@Bag,20554,3,1,0,1,1), -- Darkrune Breastplate
+(@Bag,20555,3,1,0,1,1); -- Darkrune Helm
+-- References:
+DELETE FROM `reference_loot_template` WHERE `entry` IN (@RefA,@RefB,@RefC,@RefD);
+INSERT INTO `reference_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(@RefA,20518,0,1,1,1,1), -- Scroll: Crest of Beckoning
+(@RefA,20526,0,1,1,1,1), -- Scroll: Crest of Beckoning
+(@RefA,20527,0,1,1,1,1), -- Scroll: Crest of Beckoning
+(@RefA,20528,0,1,1,1,1), -- Scroll: Crest of Beckoning
+(@RefB,20531,0,1,1,1,1), -- Scroll: Sigil of Beckoning
+(@RefB,20532,0,1,1,1,1), -- Scroll: Sigil of Beckoning
+(@RefB,20533,0,1,1,1,1), -- Scroll: Sigil of Beckoning
+(@RefB,20535,0,1,1,1,1), -- Scroll: Sigil of Beckoning
+(@RefC,20540,0,1,1,1,1), -- Scroll: Scepter of Beckoning
+(@RefC,20542,0,1,1,1,1), -- Scroll: Scepter of Beckoning
+(@RefC,20543,0,1,1,1,1), -- Scroll: Scepter of Beckoning
+(@RefC,20544,0,1,1,1,1), -- Scroll: Scepter of Beckoning
+-- Decoded Twilight Texts:
+(@RefD,20676,0,1,1,1,3),
+(@RefD,20541,0,1,1,1,3),
+(@RefD,20545,0,1,1,1,3),
+(@RefD,20679,0,1,1,1,3),
+(@RefD,20677,0,1,1,1,3),
+(@RefD,20678,0,1,1,1,3),
+(@RefD,20552,0,1,1,1,3); \ No newline at end of file
diff --git a/sql/updates/world/2012_01_16_00_world_stored_procedure.sql b/sql/updates/world/2012_01_16_00_world_stored_procedure.sql
new file mode 100644
index 00000000000..4a5b66df7b2
--- /dev/null
+++ b/sql/updates/world/2012_01_16_00_world_stored_procedure.sql
@@ -0,0 +1,161 @@
+-- sp_dev_reguid procedure
+/*!50003 DROP PROCEDURE IF EXISTS `sp_dev_reguid` */;
+DELIMITER ;;
+/*!50003 CREATE*/
+/*!50003 PROCEDURE `sp_dev_reguid`()
+BEGIN
+
+ DROP TABLE IF EXISTS `creature_temp`;
+ CREATE TABLE IF NOT EXISTS `creature_temp` (
+ `guid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Global Unique Identifier',
+ `id` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT 'Creature Identifier',
+ `map` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Map Identifier',
+ `spawnMask` tinyint(3) unsigned NOT NULL DEFAULT '1',
+ `phaseMask` smallint(5) unsigned NOT NULL DEFAULT '1',
+ `modelid` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `equipment_id` mediumint(9) NOT NULL DEFAULT '0',
+ `position_x` float NOT NULL DEFAULT '0',
+ `position_y` float NOT NULL DEFAULT '0',
+ `position_z` float NOT NULL DEFAULT '0',
+ `orientation` float NOT NULL DEFAULT '0',
+ `spawntimesecs` int(10) unsigned NOT NULL DEFAULT '120',
+ `spawndist` float NOT NULL DEFAULT '0',
+ `currentwaypoint` mediumint(8) unsigned NOT NULL DEFAULT '0',
+ `curhealth` int(10) unsigned NOT NULL DEFAULT '1',
+ `curmana` int(10) unsigned NOT NULL DEFAULT '0',
+ `MovementType` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `npcflag` int(10) unsigned NOT NULL DEFAULT '0',
+ `unit_flags` int(10) unsigned NOT NULL DEFAULT '0',
+ `dynamicflags` int(10) unsigned NOT NULL DEFAULT '0',
+ `old_guid` int(10) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`guid`),
+ KEY `idx_map` (`map`),
+ KEY `idx_id` (`id`),
+ KEY `idx_oldguid_tmp` (`old_guid`)
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Creature System' AUTO_INCREMENT=250001;
+
+ ALTER TABLE `creature_addon` ADD COLUMN `new_guid` INT(10) UNSIGNED NOT NULL;
+ ALTER TABLE `creature_formations` ADD COLUMN `new_guid_leader` INT(10) UNSIGNED NOT NULL;
+ ALTER TABLE `creature_formations` ADD COLUMN `new_guid_member` INT(10) UNSIGNED NOT NULL;
+ ALTER TABLE `game_event_creature` ADD COLUMN `new_guid` INT(10) UNSIGNED NOT NULL;
+ ALTER TABLE `pool_creature` ADD COLUMN `new_guid` INT(10) UNSIGNED NOT NULL;
+ ALTER TABLE `game_event_model_equip` ADD COLUMN `new_guid` INT(10) UNSIGNED NOT NULL;
+ ALTER TABLE `game_event_npc_vendor` ADD COLUMN `new_guid` INT(10) UNSIGNED NOT NULL;
+ ALTER TABLE `game_event_npcflag` ADD COLUMN `new_guid` INT(10) UNSIGNED NOT NULL;
+ ALTER TABLE `smart_scripts` ADD COLUMN `new_guid` INT(10) NOT NULL;
+
+ INSERT INTO `creature_temp`
+ (
+ `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`,
+ `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`,
+ `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`,
+ `unit_flags`, `dynamicflags`, `old_guid`
+ ) SELECT
+ `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`,
+ `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`,
+ `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`,
+ `unit_flags`, `dynamicflags`, `guid`
+ FROM `creature` WHERE `guid` < 250001 ORDER BY `id` ASC;
+
+ INSERT INTO `creature_temp`
+ (
+ `guid`,`id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`,
+ `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`,
+ `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`,
+ `unit_flags`, `dynamicflags`, `old_guid`
+ ) SELECT
+ `guid`,`id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`,
+ `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`,
+ `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`,
+ `unit_flags`, `dynamicflags`, `guid`
+ FROM `creature` WHERE `guid` >= 250001 ORDER BY `id` ASC;
+
+ UPDATE game_event_npc_vendor p
+ INNER JOIN creature_temp pp
+ ON p.guid = pp.old_guid
+ SET p.new_guid = pp.guid;
+ UPDATE game_event_npcflag p
+ INNER JOIN creature_temp pp
+ ON p.guid = pp.old_guid
+ SET p.new_guid = pp.guid;
+ UPDATE game_event_model_equip p
+ INNER JOIN creature_temp pp
+ ON p.guid = pp.old_guid
+ SET p.new_guid = pp.guid;
+ UPDATE creature_addon p
+ INNER JOIN creature_temp pp
+ ON p.guid = pp.old_guid
+ SET p.new_guid = pp.guid;
+ UPDATE creature_formations p
+ INNER JOIN creature_temp pp
+ ON p.leaderGUID = pp.old_guid
+ SET p.new_guid_leader = pp.guid;
+ UPDATE creature_formations p
+ INNER JOIN creature_temp pp
+ ON p.memberGUID = pp.old_guid
+ SET p.new_guid_member = pp.guid;
+ UPDATE game_event_creature p
+ INNER JOIN creature_temp pp
+ ON p.guid = pp.old_guid
+ SET p.new_guid = pp.guid;
+ UPDATE pool_creature p
+ INNER JOIN creature_temp pp
+ ON p.guid = pp.old_guid
+ SET p.new_guid = pp.guid;
+ UPDATE smart_scripts p
+ INNER JOIN creature_temp pp
+ ON p.entryorguid = pp.old_guid
+ SET p.new_guid = -pp.guid
+ WHERE
+ entryorguid < 0 AND
+ source_type = 0;
+
+ DROP TABLE `creature`;
+ ALTER TABLE `creature_temp` DROP COLUMN `old_guid`;
+ RENAME TABLE `creature_temp` TO `creature`;
+
+ ALTER TABLE game_event_npc_vendor DISABLE KEYS;
+ UPDATE `game_event_npc_vendor` SET `guid`=`new_guid`;
+ ALTER TABLE `game_event_npc_vendor` DROP COLUMN `new_guid`;
+ ALTER TABLE game_event_npc_vendor ENABLE KEYS;
+
+ ALTER TABLE game_event_npcflag DISABLE KEYS;
+ UPDATE `game_event_npcflag` SET `guid`=`new_guid`;
+ ALTER TABLE `game_event_npcflag` DROP COLUMN `new_guid`;
+ ALTER TABLE game_event_npcflag ENABLE KEYS;
+
+ ALTER TABLE game_event_model_equip DISABLE KEYS;
+ UPDATE `game_event_model_equip` SET `guid`=`new_guid`;
+ ALTER TABLE `game_event_model_equip` DROP COLUMN `new_guid`;
+ ALTER TABLE game_event_model_equip ENABLE KEYS;
+
+ ALTER TABLE `creature_addon` DROP PRIMARY KEY;
+ UPDATE `creature_addon` SET `guid`=`new_guid`;
+ ALTER TABLE `creature_addon` DROP COLUMN `new_guid`;
+ ALTER TABLE `creature_addon` ADD PRIMARY KEY(`guid`);
+
+ ALTER TABLE creature_formations DISABLE KEYS;
+ UPDATE `creature_formations` SET leaderGUID = new_guid_leader;
+ ALTER TABLE `creature_formations` DROP COLUMN `new_guid_leader`;
+ UPDATE `creature_formations` SET memberGUID = new_guid_member;
+ ALTER TABLE `creature_formations` DROP COLUMN `new_guid_member`;
+ ALTER TABLE creature_formations ENABLE KEYS;
+
+ ALTER TABLE `game_event_creature` DROP PRIMARY KEY;
+ UPDATE `game_event_creature` SET guid = new_guid;
+ ALTER TABLE `game_event_creature` DROP COLUMN `new_guid`;
+ ALTER TABLE `game_event_creature` ADD PRIMARY KEY(`guid`, `eventEntry`);
+
+ ALTER TABLE `pool_creature` DROP PRIMARY KEY;
+ UPDATE `pool_creature` SET guid = new_guid;
+ ALTER TABLE `pool_creature` DROP COLUMN `new_guid`;
+ ALTER TABLE `pool_creature` ADD PRIMARY KEY(`guid`);
+
+ ALTER TABLE `smart_scripts` DROP PRIMARY KEY;
+ UPDATE `smart_scripts` SET `entryorguid` = `new_guid`
+ WHERE entryorguid < 0 AND new_guid < 0 AND source_type = 0;
+ ALTER TABLE `smart_scripts` DROP COLUMN `new_guid`;
+ ALTER TABLE `smart_scripts` ADD PRIMARY KEY (`entryorguid`,`source_type`,`id`,`link`);
+
+ END */;;
+ \ No newline at end of file
diff --git a/sql/updates/world/2012_01_16_01_world_sai.sql b/sql/updates/world/2012_01_16_01_world_sai.sql
new file mode 100644
index 00000000000..5914e053f59
--- /dev/null
+++ b/sql/updates/world/2012_01_16_01_world_sai.sql
@@ -0,0 +1,17 @@
+-- [Q] [A] Report to Goldshire
+-- Also moved the emote to creature_text
+-- Doesn't work because it's auto-accept..
+-- Marshal McBride SAI
+SET @ENTRY := 197;
+SET @QUEST := 54;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Marshal McBride - On Quest Accept - Say Line 0");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry`=2000000059;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"You are dismissed, $N.",12,0,100,113,0,0,"Marshal McBride");
diff --git a/sql/updates/world/2012_01_16_02_world_sai.sql b/sql/updates/world/2012_01_16_02_world_sai.sql
new file mode 100644
index 00000000000..a34b38db099
--- /dev/null
+++ b/sql/updates/world/2012_01_16_02_world_sai.sql
@@ -0,0 +1,11 @@
+-- [Q] [A/H] The Completed Orb of Noh'Orahil
+-- Menara Voidrender SAI
+SET @ENTRY := 6266;
+SET @QUEST := 4975;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Menara Voidrender - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,10000,10000,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Menara Voidrender - On Script - Quest Credit"); -- After ten seconds
diff --git a/sql/updates/world/2012_01_16_03_world_sai.sql b/sql/updates/world/2012_01_16_03_world_sai.sql
new file mode 100644
index 00000000000..fb84a8b99be
--- /dev/null
+++ b/sql/updates/world/2012_01_16_03_world_sai.sql
@@ -0,0 +1,16 @@
+-- [Q] [A/H] Proving Allegiance
+-- Also moved the emote to creature_text
+-- Gunther Arcanus SAI
+SET @ENTRY := 1497;
+SET @QUEST := 409;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,1,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Gunther Arcanus - On Quest Accept - Say Line 0");
+-- Text
+DELETE FROM `db_script_string` WHERE `entry`=2000000085;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Take a Candle of Beckoning from this crate, $N.",12,0,100,25,0,0,"Gunther Arcanus");
diff --git a/sql/updates/world/2012_01_16_04_world_sai.sql b/sql/updates/world/2012_01_16_04_world_sai.sql
new file mode 100644
index 00000000000..630c9748c0a
--- /dev/null
+++ b/sql/updates/world/2012_01_16_04_world_sai.sql
@@ -0,0 +1,11 @@
+-- [Q] [A/H] Hope Within the Emerald Nightmare
+-- This NPC already had SAI so we're only adding additional lines
+-- Keeper Remulos SAI
+SET @ENTRY := 11832;
+SET @QUEST := 13074;
+SET @SPELL_FITFUL_DREAM := 57413;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `id`=4;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,4,0,19,0,100,0,@QUEST,0,0,0,11,@SPELL_FITFUL_DREAM,0,0,0,0,0,7,0,0,0,0,0,0,0,"Keeper Remulos - On Quest Accept - Cast Fitful Dream");
diff --git a/sql/updates/world/2012_01_16_05_world_sai.sql b/sql/updates/world/2012_01_16_05_world_sai.sql
new file mode 100644
index 00000000000..9f89e03acd8
--- /dev/null
+++ b/sql/updates/world/2012_01_16_05_world_sai.sql
@@ -0,0 +1,15 @@
+-- [Q] [A] A Humble Task
+-- Greatmother Hawkwind SAI
+SET @ENTRY := 2991;
+SET @QUEST := 753;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Greatmother Hawkwind - On Script - Emote Line 0");
+-- Texts
+DELETE FROM `db_script_string` WHERE `entry`=2000000077;
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"%s gestures to the pitcher of water sitting on the edge of the well.",16,0,100,0,0,0,"Greatmother Hawkwind");
diff --git a/sql/updates/world/2012_01_16_06_world_sai.sql b/sql/updates/world/2012_01_16_06_world_sai.sql
new file mode 100644
index 00000000000..a6f2667772f
--- /dev/null
+++ b/sql/updates/world/2012_01_16_06_world_sai.sql
@@ -0,0 +1,14 @@
+-- [Q] [A/H] The Boon of A'dal
+-- A'dal SAI
+SET @ENTRY := 18481;
+SET @QUEST := 13082;
+SET @SPELL_BLESSING := 35076;
+SET @SPELL_TP_DALARAN := 53141;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,1,0,100,0,0,0,0,0,11,@SPELL_BLESSING,0,0,0,0,0,1,0,0,0,0,0,0,0,"A'dal - Out of Combat - Cast Blessing of A'dal"), -- From EAI
+(@ENTRY,0,1,0,19,0,100,0,@QUEST,0,0,0,11,@SPELL_TP_DALARAN,0,0,0,0,0,7,0,0,0,0,0,0,0,"A'dal - On Quest Accept - Cast Teleport Dalaran");
diff --git a/sql/updates/world/2012_01_16_07_world_sai.sql b/sql/updates/world/2012_01_16_07_world_sai.sql
new file mode 100644
index 00000000000..63db0cda7a0
--- /dev/null
+++ b/sql/updates/world/2012_01_16_07_world_sai.sql
@@ -0,0 +1,33 @@
+-- [Q] [A] The Missing Diplomat
+-- Dashel Stonefist SAI
+SET @ENTRY := 4961;
+SET @QUEST := 1447;
+SET @SPELL_PUMMEL := 12555;
+UPDATE `creature_template` SET `AIName`='SmartAI',`ScriptName`='' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0,`EmoteOnComplete`=11 WHERE `id`=@QUEST; -- ONESHOT_LAUGH
+UPDATE `quest_template` SET `EmoteOnComplete`=14 WHERE `id`=1246; -- Previous version should make him rude against player
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100,@ENTRY*100+1);
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,13,0,100,0,6000,21000,0,0,11,@SPELL_PUMMEL,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - Player Casting - Cast Pummel"),
+
+(@ENTRY,0,1,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - On Script - Say Line 0"),
+(@ENTRY*100,9,1,0,0,0,100,0,0,0,0,0,2,168,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - On Script - Set Faction Hostile"),
+(@ENTRY*100,9,2,0,0,0,100,0,0,0,0,0,49,0,0,0,0,0,0,7,0,0,0,0,0,0,0,"Dashel Stonefist - On Script - Attack Player"),
+(@ENTRY*100,9,3,0,0,0,100,0,2000,2000,0,0,12,4969,1,300000,0,0,0,8,0,0,0,-8678.246094,440.952606,99.620926,4.364815,"Dashel Stonefist - On Script - Summon Old Town Thug"),
+(@ENTRY*100,9,4,0,0,0,100,0,0,0,0,0,12,4969,1,300000,0,0,0,8,0,0,0,-8682.465820,441.471161,99.531319,4.871392,"Dashel Stonefist - On Script - Summon Old Town Thug"),
+
+(@ENTRY,0,2,0,2,0,100,0,0,15,0,0,80,@ENTRY*100+1,0,2,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - On 15% HP - Run Script"),
+(@ENTRY*100+1,9,0,0,0,0,100,0,0,0,0,0,15,@QUEST,0,0,0,0,0,7,0,0,0,0,0,0,0,"Dashel Stonefist - On Script - Quest Credit"), -- We are putting this before evade else we lose our target
+(@ENTRY*100+1,9,1,0,0,0,100,0,0,0,0,0,20,9,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - On Script - Stop Attacking"),
+(@ENTRY*100+1,9,2,0,0,0,100,0,0,0,0,0,24,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - On Script - Evade"),
+(@ENTRY*100+1,9,3,0,0,0,100,0,0,0,0,0,2,84,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - On Script - Set Faction Back"),
+(@ENTRY*100+1,9,4,0,0,0,100,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - On Script - Say Line 1"),
+(@ENTRY*100+1,9,5,0,0,0,100,0,6000,6000,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Dashel Stonefist - On Script - Say Line 2");
+-- Texts
+DELETE FROM `creature_text` WHERE `entry`=@ENTRY;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
+(@ENTRY,0,0,"Now you're going to get it good!",12,0,100,0,0,0,"Dashel Stonefist"),
+(@ENTRY,1,0,"Okay, okay! Enough fighting. No one else needs to get hurt.",12,0,100,0,0,0,"Dashel Stonefist"),
+(@ENTRY,2,0,"It's okay, boys. Back off. You've done enough. I'll meet up with you later.",12,0,100,0,0,0,"Dashel Stonefist");
diff --git a/sql/updates/world/2012_01_16_08_world_sai.sql b/sql/updates/world/2012_01_16_08_world_sai.sql
new file mode 100644
index 00000000000..50bce9d5a9f
--- /dev/null
+++ b/sql/updates/world/2012_01_16_08_world_sai.sql
@@ -0,0 +1,12 @@
+-- [Q] [A/H] In Service Of The Lich King
+-- The Lich King SAI
+SET @ENTRY := 25462;
+SET @QUEST := 12593;
+SET @SPELL_EXLOSION := 58024;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (@ENTRY,@ENTRY*100);
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,19,0,100,0,@QUEST,0,0,0,80,@ENTRY*100,0,2,0,0,0,1,0,0,0,0,0,0,0,"The Lich King - On Quest Accept - Run Script"),
+(@ENTRY*100,9,0,0,0,0,100,0,3000,3000,0,0,11,@SPELL_EXLOSION,0,0,0,0,0,7,0,0,0,0,0,0,0,"The Lich King - On Script - Cast 'Icecrown Airship - A - Attack - 02b Cannon Explosion, Shield'"); -- After three seconds
diff --git a/sql/updates/world/2012_01_16_09_world_sai.sql b/sql/updates/world/2012_01_16_09_world_sai.sql
new file mode 100644
index 00000000000..d82fc341ff0
--- /dev/null
+++ b/sql/updates/world/2012_01_16_09_world_sai.sql
@@ -0,0 +1,10 @@
+-- [Q] [A] The Legend of Stalvan
+-- Sealed Crate SAI
+SET @ENTRY := 1561;
+SET @QUEST := 74;
+UPDATE `gameobject_template` SET `AIName`='SmartGameObjectAI' WHERE `entry`=@ENTRY;
+UPDATE `quest_template` SET `StartScript`=0,`CompleteScript`=0 WHERE `id`=@QUEST;
+DELETE FROM `quest_start_scripts` WHERE `id`=@QUEST;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=1;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,1,0,0,19,0,100,0,@QUEST,0,0,0,12,2044,1,30000,0,0,0,8,0,0,0,-10953.3,988.509,98.984,5.349,"Sealed Crate - On Quest Accept - Summon Forlorn Spirit"); -- What's wrong with those stupid co-ords? ..
diff --git a/sql/updates/world/2012_01_17_00_world_misc.sql b/sql/updates/world/2012_01_17_00_world_misc.sql
new file mode 100644
index 00000000000..300d239bd43
--- /dev/null
+++ b/sql/updates/world/2012_01_17_00_world_misc.sql
@@ -0,0 +1,27 @@
+DELETE FROM `spell_script_names` WHERE `spell_id` IN (69672,69673);
+INSERT INTO `spell_script_names`(`spell_id`,`ScriptName`) VALUES
+(69672,'spell_gen_sunreaver_disguise'),
+(69673,'spell_gen_silver_covenant_disguise');
+
+-- Update spells used on script. Now they are always casting the female spell,
+-- since the spell script is fixed we should cast now the correct spell.
+UPDATE `smart_scripts` SET `action_param1`=69672 WHERE `entryorguid`=36669 AND `action_type`=11 AND `action_param1`=70973;
+UPDATE `smart_scripts` SET `action_param1`=69673 WHERE `entryorguid`=36670 AND `action_type`=11 AND `action_param1`=70971;
+-- Set correct gossip menus ids for renewing the disguise
+UPDATE `smart_scripts` SET `event_param1`=10858 WHERE `entryorguid`=36669 AND `event_param1`=10857;
+UPDATE `smart_scripts` SET `event_param1`=10857 WHERE `entryorguid`=36670 AND `event_param1`=10858;
+
+-- Gossip options were crossed. They should offer to cast the oposing faction disguise,instead of his own faction disguise.
+UPDATE `gossip_menu_option` SET `option_text`="Would you renew my Covenant disguise?" WHERE `menu_id`=10857 AND `id`=1;
+UPDATE `gossip_menu_option` SET `option_text`="Would you renew my Sunreaver disguise?" WHERE `menu_id`=10858 AND `id`=1;
+
+-- Correct quest ids on conditios for showing the renew disguise option.
+-- Also add a check for male disguise aura.
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (10857,10858) AND `SourceEntry`=1;
+INSERT INTO `conditions`(`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(15,10858,1,0,11,70973,0,0,0,'',NULL),
+(15,10858,1,0,11,70974,0,0,0,'',NULL),
+(15,10858,1,0,9,20439,0,0,0,'',NULL),
+(15,10857,1,0,11,70971,0,0,0,'',NULL),
+(15,10857,1,0,11,70972,0,0,0,'',NULL),
+(15,10857,1,0,9,24451,0,0,0,'',NULL);
diff --git a/sql/updates/world/2012_01_17_01_world_conditions.sql b/sql/updates/world/2012_01_17_01_world_conditions.sql
new file mode 100644
index 00000000000..1dacd35dd4f
--- /dev/null
+++ b/sql/updates/world/2012_01_17_01_world_conditions.sql
@@ -0,0 +1,12 @@
+-- Condition update to flags
+DELETE FROM `conditions` WHERE `ConditionTypeOrReference`=5;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
+(19,0,13846,0,5,1106,127,0,0,'','Quest Contributin'' To The Cause - Requires Argent Crusade hated thru revered'),
+(20,0,13846,0,5,1106,127,0,0,'','Quest Contributin'' To The Cause - Requires Argent Crusade hated thru revered'),
+(14,21258,7594,0,5,270,120,0,0,'','Only show text_id 7594 if player is neutral thru revered with Zandalar Tribe (270)'),
+(14,21258,7595,0,5,270,128,0,0,'','Only show text_id 7594 if player is exalted with Zandalar Tribe (270)'),
+(15,21258,0,0,5,270,128,0,0,'','Only show gossip option if player is exalted with Zandalar Tribe (270)'),
+(15,21259,0,0,5,270,128,0,0,'','Only show gossip option if player is exalted with Zandalar Tribe (270)'),
+(15,21260,0,0,5,270,128,0,0,'','Only show gossip option if player is exalted with Zandalar Tribe (270)'),
+(1,23342,32726,0,5,1015,240,0,0,'','Murkblood Escape Plans - when Netherwing friendly thru exalted'),
+(1,23286,32726,0,5,1015,240,0,0,'','Murkblood Escape Plans - when Netherwing friendly thru exalted');
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 0bcd1a7864b..49b5d4cba65 100755
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -63,7 +63,7 @@ bool Condition::Meets(Player* player, Unit* invoker)
case CONDITION_REPUTATION_RANK:
{
if (FactionEntry const* faction = sFactionStore.LookupEntry(mConditionValue1))
- condMeets = uint32(player->GetReputationMgr().GetRank(faction)) == mConditionValue2;
+ condMeets = (mConditionValue2 & (1 << player->GetReputationMgr().GetRank(faction)));
break;
}
case CONDITION_ACHIEVEMENT:
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 0f146598a6e..ac7343e8f23 100755
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -483,7 +483,7 @@ void LFGMgr::InitializeLockedDungeons(Player* player)
void LFGMgr::Join(Player* player, uint8 roles, const LfgDungeonSet& selectedDungeons, const std::string& comment)
{
if (!player || !player->GetSession() || selectedDungeons.empty())
- return;
+ return;
Group* grp = player->GetGroup();
uint64 guid = player->GetGUID();
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index bed3c0cb1a7..ed65e1ce527 100755
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -296,15 +296,24 @@ Item* TradeData::GetItem(TradeSlots slot) const
return m_items[slot] ? m_player->GetItemByGuid(m_items[slot]) : NULL;
}
-bool TradeData::HasItem(uint64 item_guid) const
+bool TradeData::HasItem(uint64 itemGuid) const
{
for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i)
- if (m_items[i] == item_guid)
+ if (m_items[i] == itemGuid)
return true;
return false;
}
+TradeSlots const TradeData::GetTradeSlotForItem(uint64 itemGuid)
+{
+ for (uint8 i = 0; i < TRADE_SLOT_COUNT; ++i)
+ if (m_items[i] == itemGuid)
+ return TradeSlots(i);
+
+ return TRADE_SLOT_INVALID;
+}
+
Item* TradeData::GetSpellCastItem() const
{
return m_spellCastItem ? m_player->GetItemByGuid(m_spellCastItem) : NULL;
@@ -12833,7 +12842,7 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count)
pSrcItem->SetState(ITEM_CHANGED, this);
StoreItem(dest, pNewItem, true);
}
- else if (IsBankPos (dst))
+ else if (IsBankPos(dst))
{
// change item amount before check (for unique max count check)
pSrcItem->SetCount(pSrcItem->GetCount() - count);
@@ -12853,7 +12862,7 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count)
pSrcItem->SetState(ITEM_CHANGED, this);
BankItem(dest, pNewItem, true);
}
- else if (IsEquipmentPos (dst))
+ else if (IsEquipmentPos(dst))
{
// change item amount before check (for unique max count check), provide space for splitted items
pSrcItem->SetCount(pSrcItem->GetCount() - count);
@@ -12874,6 +12883,17 @@ void Player::SplitItem(uint16 src, uint16 dst, uint32 count)
EquipItem(dest, pNewItem, true);
AutoUnequipOffhandIfNeed();
}
+
+ //! Make sure that code below only is executed when trading
+ if (!GetTradeData())
+ return;
+
+ //! Update item count in trade window, prevent spoofing
+ //! Since pSrcItem has its count updated (see above), Item::GetCount() will return the new count
+ //! in the underlying packet builder function
+ TradeSlots const slot = GetTradeData()->GetTradeSlotForItem(pSrcItem->GetGUID());
+ if (slot != TRADE_SLOT_INVALID)
+ GetTradeData()->SetItem(slot, pSrcItem);
}
void Player::SwapItem(uint16 src, uint16 dst)
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 7a455590506..fccd380bd29 100755
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -686,7 +686,8 @@ enum TradeSlots
{
TRADE_SLOT_COUNT = 7,
TRADE_SLOT_TRADED_COUNT = 6,
- TRADE_SLOT_NONTRADED = 6
+ TRADE_SLOT_NONTRADED = 6,
+ TRADE_SLOT_INVALID = -1,
};
enum TransferAbortReason
@@ -1001,7 +1002,8 @@ class TradeData
TradeData* GetTraderData() const;
Item* GetItem(TradeSlots slot) const;
- bool HasItem(uint64 item_guid) const;
+ bool HasItem(uint64 itemGuid) const;
+ TradeSlots const GetTradeSlotForItem(uint64 itemGuid);
void SetItem(TradeSlots slot, Item* item);
uint32 GetSpell() const { return m_spell; }
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 63aa7771063..d7353d72ee0 100755
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -2114,12 +2114,12 @@ void Unit::SendMeleeAttackStart(Unit* victim)
void Unit::SendMeleeAttackStop(Unit* victim)
{
- WorldPacket data(SMSG_ATTACKSTOP, (8+8+4)); // we guess size
+ WorldPacket data(SMSG_ATTACKSTOP, (8+8+4));
data.append(GetPackGUID());
data.append(victim ? victim->GetPackGUID() : 0); // can be 0x00...
data << uint32(0); // can be 0x1
SendMessageToSet(&data, true);
- sLog->outStaticDebug("WORLD: Sent SMSG_ATTACKSTART");
+ sLog->outStaticDebug("WORLD: Sent SMSG_ATTACKSTOP");
if (victim)
sLog->outDetail("%s %u stopped attacking %s %u", (GetTypeId() == TYPEID_PLAYER ? "Player" : "Creature"), GetGUIDLow(), (victim->GetTypeId() == TYPEID_PLAYER ? "player" : "creature"), victim->GetGUIDLow());
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 2656d882009..c17f5096748 100755
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -368,7 +368,7 @@ void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float spee
Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED);
}
-void MotionMaster::MoveFall()
+void MotionMaster::MoveFall(uint32 id/*=0*/)
{
// use larger distance for vmap height search than in most other cases
float tz = i_owner->GetMap()->GetHeight(i_owner->GetPositionX(), i_owner->GetPositionY(), i_owner->GetPositionZ(), true, MAX_FALL_DISTANCE);
@@ -387,7 +387,7 @@ void MotionMaster::MoveFall()
init.MoveTo(i_owner->GetPositionX(),i_owner->GetPositionY(),tz);
init.SetFall();
init.Launch();
- Mutate(new EffectMovementGenerator(0), MOTION_SLOT_CONTROLLED);
+ Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED);
}
void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id)
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index 00f1701e591..a5bd0861b04 100755
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -163,7 +163,7 @@ class MotionMaster //: private std::stack<MovementGenerator *>
void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ);
void MoveJumpTo(float angle, float speedXY, float speedZ);
void MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id = 0);
- void MoveFall();
+ void MoveFall(uint32 id = 0);
void MoveSeekAssistance(float x, float y, float z);
void MoveSeekAssistanceDistract(uint32 timer);
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 5577422919f..b32e346757f 100755
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -1963,6 +1963,13 @@ bool Aura::IsProcTriggeredOnEvent(AuraApplication* aurApp, ProcEventInfo& eventI
if (!sSpellMgr->CanSpellTriggerProcOnEvent(*procEntry, eventInfo))
return false;
+ // TODO:
+ // - do checks using conditions table for eventInfo->GetActor() and eventInfo->GetActionTarget()
+ // - add DoCheckProc() AuraScript hook
+ // to allow additional requirements for procs
+ // this is needed because this is the last moment in which you can prevent aura charge drop on proc
+ // and possibly a way to prevent default checks (if there're going to be any)
+
// Check if current equipment meets aura requirements
// do that only for passive spells
// TODO: this needs to be unified for all kinds of auras
@@ -2023,11 +2030,14 @@ float Aura::CalcProcChance(SpellProcEntry const& procEntry, ProcEventInfo& event
void Aura::TriggerProcOnEvent(AuraApplication* aurApp, ProcEventInfo& eventInfo)
{
- // TODO: script hooks here (allowing prevention of selected effects)
+ // TODO: OnProc hook here
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
if (aurApp->HasEffect(i))
+ // TODO: OnEffectProc hook here (allowing prevention of selected effects)
GetEffect(i)->HandleProc(aurApp, eventInfo);
- // TODO: script hooks here
+ // TODO: AfterEffectProc hook here
+
+ // TODO: AfterProc hook here
// Remove aura if we've used last charge to proc
if (IsUsingCharges() && !GetCharges())
diff --git a/src/server/game/Spells/Auras/SpellAuras.h b/src/server/game/Spells/Auras/SpellAuras.h
index 8c9cde37c15..de743eb2991 100755
--- a/src/server/game/Spells/Auras/SpellAuras.h
+++ b/src/server/game/Spells/Auras/SpellAuras.h
@@ -186,6 +186,9 @@ class Aura
bool CanStackWith(Aura const* existingAura) const;
// Proc system
+ // this subsystem is not yet in use - the core of it is functional, but still some research has to be done
+ // and some dependant problems fixed before it can replace old proc system (for example cooldown handling)
+ // currently proc system functionality is implemented in Unit::ProcDamageAndSpell
bool IsProcOnCooldown() const;
void AddProcCooldown(uint32 msec);
bool IsUsingCharges() const { return m_isUsingCharges; }
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
index ecb909480c5..728446aa833 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
@@ -186,7 +186,7 @@ public:
void MovementInform(uint32 type, uint32 id)
{
if (type != POINT_MOTION_TYPE)
- return;
+ return;
if (Intro)
{
diff --git a/src/server/scripts/EasternKingdoms/stormwind_city.cpp b/src/server/scripts/EasternKingdoms/stormwind_city.cpp
index 4d43e4adefe..a4eca1950f8 100644
--- a/src/server/scripts/EasternKingdoms/stormwind_city.cpp
+++ b/src/server/scripts/EasternKingdoms/stormwind_city.cpp
@@ -26,7 +26,6 @@ EndScriptData */
/* ContentData
npc_archmage_malin
npc_bartleby
-npc_dashel_stonefist
npc_lady_katrana_prestor
npc_tyrion
npc_tyrion_spybot
@@ -148,78 +147,6 @@ public:
};
/*######
-## npc_dashel_stonefist
-######*/
-
-enum eDashel
-{
- QUEST_MISSING_DIPLO_PT8 = 1447,
- FACTION_HOSTILE = 168
-};
-
-class npc_dashel_stonefist : public CreatureScript
-{
-public:
- npc_dashel_stonefist() : CreatureScript("npc_dashel_stonefist") { }
-
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest)
- {
- if (quest->GetQuestId() == QUEST_MISSING_DIPLO_PT8)
- {
- creature->setFaction(FACTION_HOSTILE);
- CAST_AI(npc_dashel_stonefist::npc_dashel_stonefistAI, creature->AI())->AttackStart(player);
- }
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_dashel_stonefistAI(creature);
- }
-
- struct npc_dashel_stonefistAI : public ScriptedAI
- {
- npc_dashel_stonefistAI(Creature* c) : ScriptedAI(c)
- {
- m_uiNormalFaction = c->getFaction();
- }
-
- uint32 m_uiNormalFaction;
-
- void Reset()
- {
- if (me->getFaction() != m_uiNormalFaction)
- me->setFaction(m_uiNormalFaction);
- }
-
- void AttackedBy(Unit* pAttacker)
- {
- if (me->getVictim())
- return;
-
- if (me->IsFriendlyTo(pAttacker))
- return;
-
- AttackStart(pAttacker);
- }
-
- void DamageTaken(Unit* pDoneBy, uint32 &uiDamage)
- {
- if (uiDamage > me->GetHealth() || me->HealthBelowPctDamaged(15, uiDamage))
- {
- uiDamage = 0;
-
- if (pDoneBy->GetTypeId() == TYPEID_PLAYER)
- CAST_PLR(pDoneBy)->AreaExploredOrEventHappens(QUEST_MISSING_DIPLO_PT8);
-
- EnterEvadeMode();
- }
- }
- };
-
-};
-
-/*######
## npc_lady_katrana_prestor
######*/
@@ -716,7 +643,6 @@ void AddSC_stormwind_city()
{
new npc_archmage_malin();
new npc_bartleby();
- new npc_dashel_stonefist();
new npc_lady_katrana_prestor();
new npc_tyrion();
new npc_tyrion_spybot();
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
index 8e34a318d6c..d3d92375d39 100755
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp
@@ -122,6 +122,11 @@ const Position SphereSpawn[6] =
{ 706.6383f, 161.5266f, 155.6701f, 0 },
};
+enum MovementPoints
+{
+ POINT_FALL_GROUND = 1
+};
+
class boss_anubarak_trial : public CreatureScript
{
public:
@@ -553,68 +558,68 @@ public:
class mob_frost_sphere : public CreatureScript
{
-public:
- mob_frost_sphere() : CreatureScript("mob_frost_sphere") { }
+ public:
+ mob_frost_sphere() : CreatureScript("mob_frost_sphere") { }
- CreatureAI* GetAI(Creature* creature) const
- {
- return new mob_frost_sphereAI(creature);
- };
-
- struct mob_frost_sphereAI : public ScriptedAI
- {
- mob_frost_sphereAI(Creature* creature) : ScriptedAI(creature)
+ struct mob_frost_sphereAI : public ScriptedAI
{
- }
-
- bool m_bFall;
- float x, y, z;
+ mob_frost_sphereAI(Creature* creature) : ScriptedAI(creature)
+ {
+ }
- void Reset()
- {
- m_bFall = false;
- me->SetReactState(REACT_PASSIVE);
- me->SetFlying(true);
- me->SetDisplayId(25144);
- me->SetSpeed(MOVE_RUN, 0.5f, false);
- me->GetMotionMaster()->MoveRandom(20.0f);
- DoCast(SPELL_FROST_SPHERE);
- }
+ void Reset()
+ {
+ _isFalling = false;
+ me->SetReactState(REACT_PASSIVE);
+ me->SetFlying(true);
+ me->SetDisplayId(me->GetCreatureInfo()->Modelid2);
+ me->SetSpeed(MOVE_RUN, 0.5f, false);
+ me->GetMotionMaster()->MoveRandom(20.0f);
+ DoCast(SPELL_FROST_SPHERE);
+ }
- void DamageTaken(Unit* /*who*/, uint32& uiDamage)
- {
- if (me->GetHealth() < uiDamage)
+ void DamageTaken(Unit* /*who*/, uint32& damage)
{
- uiDamage = 0;
- if (!m_bFall)
+ if (me->GetHealth() <= damage)
{
- m_bFall = true;
- me->GetMotionMaster()->MoveIdle();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
- //At hit the ground
- me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
- me->GetMotionMaster()->MoveFall();
+ damage = 0;
+ if (!_isFalling)
+ {
+ _isFalling = true;
+ me->GetMotionMaster()->MoveIdle();
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
+ //At hit the ground
+ me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
+ me->GetMotionMaster()->MoveFall(POINT_FALL_GROUND);
+ }
}
}
- }
-
- void MovementInform(uint32 uiType, uint32 uiId)
- {
- if (uiType != POINT_MOTION_TYPE) return;
- switch (uiId)
+ void MovementInform(uint32 type, uint32 pointId)
{
- case 0:
- me->RemoveAurasDueToSpell(SPELL_FROST_SPHERE);
- me->SetDisplayId(11686);
- DoCast(SPELL_PERMAFROST_VISUAL);
- DoCast(SPELL_PERMAFROST);
- me->SetFloatValue(OBJECT_FIELD_SCALE_X, 2.0f);
- break;
+ if (type != EFFECT_MOTION_TYPE)
+ return;
+
+ switch (pointId)
+ {
+ case POINT_FALL_GROUND:
+ me->RemoveAurasDueToSpell(SPELL_FROST_SPHERE);
+ me->SetDisplayId(me->GetCreatureInfo()->Modelid1);
+ DoCast(SPELL_PERMAFROST_VISUAL);
+ DoCast(SPELL_PERMAFROST);
+ me->SetFloatValue(OBJECT_FIELD_SCALE_X, 2.0f);
+ break;
+ }
}
- }
- };
+ private:
+ bool _isFalling;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new mob_frost_sphereAI(creature);
+ };
};
class mob_anubarak_spike : public CreatureScript
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index 46c1cf425ed..11100e6297e 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -268,7 +268,7 @@ class boss_sindragosa : public CreatureScript
void MovementInform(uint32 type, uint32 point)
{
- if (type != POINT_MOTION_TYPE)
+ if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE)
return;
switch (point)
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
index 436336ec5b8..542243293de 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp
@@ -94,6 +94,11 @@ enum SvalaPhase
SVALADEAD
};
+enum SvalaPoint
+{
+ POINT_FALL_GROUND = 1,
+};
+
#define DATA_INCREDIBLE_HULK 2043
static const float spectatorWP[2][3] =
@@ -258,16 +263,16 @@ public:
SetCombatMovement(false);
me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH);
- me->GetMotionMaster()->MoveFall();
+ me->GetMotionMaster()->MoveFall(POINT_FALL_GROUND);
}
}
void MovementInform(uint32 motionType, uint32 pointId)
{
- if (motionType != POINT_MOTION_TYPE)
+ if (motionType != EFFECT_MOTION_TYPE)
return;
- if (pointId == 1)
+ if (pointId == POINT_FALL_GROUND)
me->DealDamage(me, me->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
}
@@ -288,7 +293,7 @@ public:
Phase = NORMAL;
SetCombatMovement(true);
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 300, true))
+ if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 300.0f, true))
me->GetMotionMaster()->MoveChase(target);
}
}
@@ -330,7 +335,7 @@ public:
{
std::list<Creature*> lspectatorList;
GetCreatureListWithEntryInGrid(lspectatorList, me, CREATURE_SPECTATOR, 100.0f);
- for(std::list<Creature*>::iterator itr = lspectatorList.begin(); itr != lspectatorList.end(); ++itr)
+ for (std::list<Creature*>::iterator itr = lspectatorList.begin(); itr != lspectatorList.end(); ++itr)
{
if ((*itr)->isAlive())
{
@@ -397,7 +402,8 @@ public:
Phase = NORMAL;
break;
}
- } else introTimer -= diff;
+ }
+ else introTimer -= diff;
return;
}
diff --git a/src/server/scripts/Northrend/dalaran.cpp b/src/server/scripts/Northrend/dalaran.cpp
index 57007a93fa7..cd3cbf29d0d 100644
--- a/src/server/scripts/Northrend/dalaran.cpp
+++ b/src/server/scripts/Northrend/dalaran.cpp
@@ -32,7 +32,12 @@ Script Data End */
enum Spells
{
SPELL_TRESPASSER_A = 54028,
- SPELL_TRESPASSER_H = 54029
+ SPELL_TRESPASSER_H = 54029,
+
+ SPELL_SUNREAVER_DISGUISE_FEMALE = 70973,
+ SPELL_SUNREAVER_DISGUISE_MALE = 70974,
+ SPELL_SILVER_COVENANT_DISGUISE_FEMALE = 70971,
+ SPELL_SILVER_COVENANT_DISGUISE_MALE = 70972,
};
enum NPCs // All outdoor guards are within 35.0f of these NPCs
@@ -71,8 +76,10 @@ public:
Player* player = who->GetCharmerOrOwnerPlayerOrPlayerItself();
- // If player has Disguise aura for quest A Meeting With The Magister or An Audience With The Arcanist, do not teleport it away but let it pass
- if (!player || player->isGameMaster() || player->IsBeingTeleported() || player->HasAura(70973) || player->HasAura(70971))
+ if (!player || player->isGameMaster() || player->IsBeingTeleported() ||
+ // If player has Disguise aura for quest A Meeting With The Magister or An Audience With The Arcanist, do not teleport it away but let it pass
+ player->HasAura(SPELL_SUNREAVER_DISGUISE_FEMALE) || player->HasAura(SPELL_SUNREAVER_DISGUISE_MALE) ||
+ player->HasAura(SPELL_SILVER_COVENANT_DISGUISE_FEMALE) || player->HasAura(SPELL_SILVER_COVENANT_DISGUISE_MALE))
return;
switch (me->GetEntry())
diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp
index 3fb2c4f3319..2b31a50510d 100644
--- a/src/server/scripts/Spells/spell_generic.cpp
+++ b/src/server/scripts/Spells/spell_generic.cpp
@@ -1481,6 +1481,82 @@ class spell_gen_luck_of_the_draw : public SpellScriptLoader
}
};
+enum DalaranDisguiseSpells
+{
+ SPELL_SUNREAVER_DISGUISE_TRIGGER = 69672,
+ SPELL_SUNREAVER_DISGUISE_FEMALE = 70973,
+ SPELL_SUNREAVER_DISGUISE_MALE = 70974,
+
+ SPELL_SILVER_COVENANT_DISGUISE_TRIGGER = 69673,
+ SPELL_SILVER_COVENANT_DISGUISE_FEMALE = 70971,
+ SPELL_SILVER_COVENANT_DISGUISE_MALE = 70972,
+};
+
+class spell_gen_dalaran_disguise : public SpellScriptLoader
+{
+ public:
+ spell_gen_dalaran_disguise(const char* name) : SpellScriptLoader(name) {}
+
+ class spell_gen_dalaran_disguise_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_gen_dalaran_disguise_SpellScript);
+ bool Validate(SpellInfo const* spellEntry)
+ {
+ switch (spellEntry->Id)
+ {
+ case SPELL_SUNREAVER_DISGUISE_TRIGGER:
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUNREAVER_DISGUISE_FEMALE))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_SUNREAVER_DISGUISE_MALE))
+ return false;
+ break;
+ case SPELL_SILVER_COVENANT_DISGUISE_TRIGGER:
+ if (!sSpellMgr->GetSpellInfo(SPELL_SILVER_COVENANT_DISGUISE_FEMALE))
+ return false;
+ if (!sSpellMgr->GetSpellInfo(SPELL_SILVER_COVENANT_DISGUISE_MALE))
+ return false;
+ break;
+ }
+ return true;
+ }
+
+ void HandleScript(SpellEffIndex /*effIndex*/)
+ {
+
+ if (Player* player = GetHitPlayer())
+ {
+ uint8 gender = player->getGender();
+
+ uint32 spellId = GetSpellInfo()->Id;
+
+ switch (spellId)
+ {
+ case SPELL_SUNREAVER_DISGUISE_TRIGGER:
+ spellId = gender ? SPELL_SUNREAVER_DISGUISE_FEMALE : SPELL_SUNREAVER_DISGUISE_MALE;
+ break;
+ case SPELL_SILVER_COVENANT_DISGUISE_TRIGGER:
+ spellId = gender ? SPELL_SILVER_COVENANT_DISGUISE_FEMALE : SPELL_SILVER_COVENANT_DISGUISE_MALE;
+ break;
+ default:
+ break;
+ }
+
+ GetCaster()->CastSpell(player, spellId, true);
+ }
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_gen_dalaran_disguise_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_gen_dalaran_disguise_SpellScript();
+ }
+};
+
void AddSC_generic_spell_scripts()
{
new spell_gen_absorb0_hitlimit1();
@@ -1514,4 +1590,6 @@ void AddSC_generic_spell_scripts()
new spell_gen_oracle_wolvar_reputation();
new spell_gen_damage_reduction_aura();
new spell_gen_luck_of_the_draw();
+ new spell_gen_dalaran_disguise("spell_gen_sunreaver_disguise");
+ new spell_gen_dalaran_disguise("spell_gen_silver_covenant_disguise");
}