aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2015_12_14_00_world.sql32
-rw-r--r--sql/updates/world/2015_12_15_00_world.sql2
-rw-r--r--sql/updates/world/2015_12_15_01_world.sql2
-rw-r--r--sql/updates/world/2015_12_15_02_world.sql22
-rw-r--r--sql/updates/world/2015_12_15_03_world.sql5
-rw-r--r--sql/updates/world/2015_12_16_00_world.sql91
-rw-r--r--sql/updates/world/2015_12_16_01_world.sql53
-rw-r--r--sql/updates/world/2015_12_16_02_world335.sql7
-rw-r--r--sql/updates/world/2015_12_17_00_world.sql3
-rw-r--r--sql/updates/world/2015_12_18_00_world_335.sql2
-rw-r--r--sql/updates/world/2015_12_18_01_world.sql3
-rw-r--r--sql/updates/world/2015_12_18_02_world.sql2
-rw-r--r--sql/updates/world/2015_12_18_03_world_335.sql5
-rw-r--r--sql/updates/world/2015_12_18_04_world.sql8
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp123
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h11
-rw-r--r--src/server/game/Entities/Player/Player.cpp3
-rw-r--r--src/server/game/Handlers/AuctionHouseHandler.cpp7
-rw-r--r--src/server/game/Quests/QuestDef.cpp66
-rw-r--r--src/server/game/Spells/SpellMgr.cpp1
-rw-r--r--src/server/game/World/World.cpp8
-rw-r--r--src/server/game/World/World.h1
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp86
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp1
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp1
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp51
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp56
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp5
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp7
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h86
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp18
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp196
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp8
-rw-r--r--src/server/scripts/Northrend/Naxxramas/naxxramas.h2
35 files changed, 758 insertions, 219 deletions
diff --git a/sql/updates/world/2015_12_14_00_world.sql b/sql/updates/world/2015_12_14_00_world.sql
new file mode 100644
index 00000000000..85faf4448e2
--- /dev/null
+++ b/sql/updates/world/2015_12_14_00_world.sql
@@ -0,0 +1,32 @@
+-- instructor razuvious cleanup
+DELETE FROM `creature_text` WHERE `entry`=16061;
+INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
+(16061,0,0,"Do as I taught you!",14,100,8855,13075,3,"Razuvious SAY_AGGRO #1"),
+(16061,0,1,"The time for practice is over! Show me what you have learned!",14,100,8859,13078,3,"Razuvious SAY_AGGRO #2"),
+(16061,0,2,"Show them no mercy!",14,100,8856,13076,3,"Razuvious SAY_AGGRO #3"),
+(16061,1,0,"%s lets loose a triumphant shout.",41,30,0,13082,3,"Razuvious SAY_SLAY"),
+(16061,2,0,"You should have stayed home.",14,50,8861,13081,3,"Razuvious SAY_TAUNTED #1"),
+(16061,2,1,"You disappoint me, students!",14,50,8858,13077,3,"Razuvious SAY_TAUNTED #2"),
+(16061,2,2,"I'm just getting warmed up!",14,50,8852,13072,3,"Razuvious SAY_TAUNTED #3"),
+(16061,2,3,"Stand and fight!",14,50,8853,13073,3,"Razuvious SAY_TAUNTED #4"),
+(16061,2,4,"Sweep the leg... Do you have a problem with that?",14,50,8861,13080,3,"Razuvious SAY_TAUNTED #5"),
+(16061,3,0,"An honorable... death.",14,100,8860,13079,3,"Razuvious SAY_DEATH");
+
+-- move understudies to summon groups for proper reset behavior
+DELETE FROM `creature` WHERE `guid` IN (128184,128185);
+DELETE FROM `linked_respawn` WHERE `guid` IN (128184,128185);
+DELETE FROM `creature_summon_groups` WHERE `summonerId`=16061 AND `summonerType`=0;
+INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`) VALUES
+(16061,0,1,16803,2757.476,-3111.519,267.7678,3.926991,8),
+(16061,0,1,16803,2762.049,-3084.467,267.7678,2.129302,8),
+(16061,0,2,16803,2778.911,-3114.142,267.7678,5.288348,8),
+(16061,0,2,16803,2781.866,-3088.187,267.7678,0.9075712,8);
+
+-- "Hopeless" debuff on death may only target understudies
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=29125;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`NegativeCondition`,`Comment`) VALUES
+(13,1,29125,31,0,3,16803,0,"Instructor Razuvious - Hopeless debuff - only target Death Knight Understudy");
+
+-- transition understudies to scripted AI to prevent them overriding player control
+UPDATE `creature_template` SET `AIName`="",`ScriptName`="npc_dk_understudy" WHERE `entry`=16803;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=16803 AND `source_type`=0;
diff --git a/sql/updates/world/2015_12_15_00_world.sql b/sql/updates/world/2015_12_15_00_world.sql
new file mode 100644
index 00000000000..f27bb448bbd
--- /dev/null
+++ b/sql/updates/world/2015_12_15_00_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `guid` IN (111277, 111300);
diff --git a/sql/updates/world/2015_12_15_01_world.sql b/sql/updates/world/2015_12_15_01_world.sql
new file mode 100644
index 00000000000..86fbec83c38
--- /dev/null
+++ b/sql/updates/world/2015_12_15_01_world.sql
@@ -0,0 +1,2 @@
+-- trinity_string 2022 (ticket message)
+UPDATE `trinity_string` SET `content_default`='|cff00ff00Ticket Message|r: [%s]|r ' WHERE `entry`=2022;
diff --git a/sql/updates/world/2015_12_15_02_world.sql b/sql/updates/world/2015_12_15_02_world.sql
new file mode 100644
index 00000000000..eda5c26550f
--- /dev/null
+++ b/sql/updates/world/2015_12_15_02_world.sql
@@ -0,0 +1,22 @@
+--
+UPDATE `creature_text` SET `sound`=14211 WHERE `BroadcastTextID`=25357;
+UPDATE `creature_text` SET `sound`=14212 WHERE `BroadcastTextID`=25358;
+UPDATE `creature_text` SET `sound`=14756 WHERE `BroadcastTextID`=25362;
+UPDATE `creature_text` SET `sound`=14212 WHERE `BroadcastTextID`=28189;
+UPDATE `creature_text` SET `sound`=14664 WHERE `BroadcastTextID`=25359;
+UPDATE `creature_text` SET `sound`=14665 WHERE `BroadcastTextID`=25360;
+UPDATE `creature_text` SET `sound`=14757 WHERE `BroadcastTextID`=25363;
+UPDATE `creature_text` SET `sound`=14666 WHERE `BroadcastTextID`=25366;
+UPDATE `creature_text` SET `sound`=14213 WHERE `BroadcastTextID`=25361;
+UPDATE `creature_text` SET `sound`=14758 WHERE `BroadcastTextID`=25364;
+UPDATE `creature_text` SET `sound`=14214 WHERE `BroadcastTextID`=25365;
+UPDATE `creature_text` SET `sound`=14196 WHERE `BroadcastTextID`=25841;
+UPDATE `creature_text` SET `sound`=14489 WHERE `BroadcastTextID`=25842;
+UPDATE `creature_text` SET `sound`=14197 WHERE `BroadcastTextID`=25847;
+UPDATE `creature_text` SET `sound`=14667 WHERE `BroadcastTextID`=25844;
+UPDATE `creature_text` SET `sound`=14490 WHERE `BroadcastTextID`=25843;
+UPDATE `creature_text` SET `sound`=14668 WHERE `BroadcastTextID`=25845;
+UPDATE `creature_text` SET `sound`=14491 WHERE `BroadcastTextID`=25848;
+UPDATE `creature_text` SET `sound`=14669 WHERE `BroadcastTextID`=25846;
+UPDATE `creature_text` SET `sound`=14492 WHERE `BroadcastTextID`=25849;
+UPDATE `creature_text` SET `sound`=14670 WHERE `BroadcastTextID`=25850;
diff --git a/sql/updates/world/2015_12_15_03_world.sql b/sql/updates/world/2015_12_15_03_world.sql
new file mode 100644
index 00000000000..99cc9e14646
--- /dev/null
+++ b/sql/updates/world/2015_12_15_03_world.sql
@@ -0,0 +1,5 @@
+DELETE FROM `areatrigger_scripts` WHERE `entry` IN (5732 /*entrance Lord Marrowgar*/, 5708/*Blood Prince Council*/, 5709 /*entrance Lady Deathwhisper*/);
+INSERT INTO `areatrigger_scripts` (`entry`, `ScriptName`) VALUES
+(5732, 'at_lord_marrowgar_entrance'),
+(5708, 'at_blood_prince_council_start_intro'),
+(5709, 'at_lady_deathwhisper_entrance');
diff --git a/sql/updates/world/2015_12_16_00_world.sql b/sql/updates/world/2015_12_16_00_world.sql
new file mode 100644
index 00000000000..62d640117f7
--- /dev/null
+++ b/sql/updates/world/2015_12_16_00_world.sql
@@ -0,0 +1,91 @@
+--
+-- Sulaa Waypointscript
+UPDATE `creature` SET spawndist = 0, MovementType = 0 WHERE guid = 61958;
+UPDATE `creature_template_addon` SET bytes1 = 0 WHERE Entry = 17219;
+
+-- Sulaa SAI
+SET @ENTRY := 17219;
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,0,0,0,25,0,100,0,0,0,0,0,53,0,17219,1,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Reset - Start Waypoint"),
+(@ENTRY,0,1,0,64,0,100,0,0,0,0,0,54,20000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Gossip Hello - Pause Waypoint"),
+(@ENTRY,0,2,0,40,0,100,0,1,17219,0,0,80,@ENTRY*100+00,2,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Waypoint 1 Reached - Run Script"),
+(@ENTRY,0,3,0,40,0,100,0,4,17219,0,0,80,@ENTRY*100+01,2,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Waypoint 4 Reached - Run Script"),
+(@ENTRY,0,4,0,40,0,100,0,8,17219,0,0,80,@ENTRY*100+02,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Waypoint 8 Reached - Pause Waypoint"),
+(@ENTRY,0,5,0,40,0,100,0,12,17219,0,0,80,@ENTRY*100+03,2,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Waypoint 12 Reached - Run Script");
+
+-- Actionlist SAI
+SET @ENTRY := 1721900;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,300000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Pause Waypoint"),
+(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,11,32992,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Cast 'Ice Cast Visual'"),
+(@ENTRY,9,2,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,10,67179,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"),
+(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67176,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"),
+(@ENTRY,9,4,0,0,0,100,0,2000,2000,0,0,5,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Play Emote 4"),
+(@ENTRY,9,5,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67175,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"),
+(@ENTRY,9,6,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67180,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"),
+(@ENTRY,9,7,0,0,0,100,0,2000,2000,0,0,45,1,1,0,0,0,0,10,67173,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"),
+(@ENTRY,9,8,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67178,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1");
+
+-- Actionlist SAI
+SET @ENTRY := 1721901;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,8000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Pause Waypoint"),
+(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,11,32992,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Cast 'Ice Cast Visual'"),
+(@ENTRY,9,2,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,10,67179,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"),
+(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67181,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1"),
+(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67182,18814,0,0,0,0,0,"Sulaa - On Script - Set Data 1 1");
+
+-- Actionlist SAI
+SET @ENTRY := 1721902;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,8000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Pause Waypoint"),
+(@ENTRY,9,1,0,0,0,100,0,2000,2000,0,0,11,32992,0,0,0,0,0,1,0,0,0,0,0,0,0,"On Script - Cast 'Ice Cast Visual'"),
+(@ENTRY,9,2,0,0,0,100,0,5000,5000,0,0,45,1,1,0,0,0,0,10,67176,18814,0,0,0,0,0,"On Script - Set Data 1 1"),
+(@ENTRY,9,3,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67171,18814,0,0,0,0,0,"On Script - Set Data 1 1"),
+(@ENTRY,9,4,0,0,0,100,0,0,0,0,0,45,1,1,0,0,0,0,10,67172,18814,0,0,0,0,0,"On Script - Set Data 1 1");
+
+-- Actionlist SAI
+SET @ENTRY := 1721903;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=9;
+INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
+(@ENTRY,9,0,0,0,0,100,0,0,0,0,0,54,12000,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Pause Waypoint"),
+(@ENTRY,9,1,0,0,0,100,0,3000,3000,0,0,90,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Set Flag Standstate Kneel"),
+(@ENTRY,9,2,0,0,0,100,0,7000,7000,0,0,91,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Sulaa - On Script - Remove Flag Standstate Kneel");
+
+
+DELETE FROM `waypoints` WHERE `entry`=17219;
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(17219,1,-3778.78,-11409.2,-137.952, 'Sulaa'),
+(17219,2,-3778.9,-11411.9,-137.96, 'Sulaa'),
+(17219,3,-3779.4,-11415.4,-137.982, 'Sulaa'),
+(17219,4,-3775.53,-11420.1,-137.955, 'Sulaa'),
+(17219,5,-3777.94,-11421.6,-137.988, 'Sulaa'),
+(17219,6,-3781.69,-11422.3,-138.036, 'Sulaa'),
+(17219,7,-3788.19,-11418.6,-138.097, 'Sulaa'),
+(17219,8,-3789.85,-11414.1,-138.101, 'Sulaa'),
+(17219,9,-3788.37,-11413.7,-138.081, 'Sulaa'),
+(17219,10,-3783.87,-11414.4,-138.031, 'Sulaa'),
+(17219,11,-3779.87,-11410.7,-137.97, 'Sulaa'),
+(17219,12,-3777.9,-11407.2,-137.934, 'Sulaa');
+
+-- Exodar Invisible Stalker SAI
+UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=18814;
+DELETE FROM `smart_scripts` WHERE `entryorguid` IN (-67179, -67176, -67175, -67180, -67173, -67178, -67181, -67182, -67171, -67172) 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
+(-67179,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"),
+(-67176,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"),
+(-67175,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"),
+(-67180,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"),
+(-67173,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"),
+(-67178,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"),
+(-67181,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"),
+(-67182,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"),
+(-67171,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'"),
+(-67172,0,0,0,38,0,100,0,1,1,0,0,11,32995,0,0,0,0,0,1,0,0,0,0,0,0,0,"Exodar Invisible Stalker - On Data Set 1 1 - Cast 'Water Elemental Impact Visual'");
+
+UPDATE `creature_template` SET `InhabitType`=4 WHERE `entry`=17436;
diff --git a/sql/updates/world/2015_12_16_01_world.sql b/sql/updates/world/2015_12_16_01_world.sql
new file mode 100644
index 00000000000..73c9675e5be
--- /dev/null
+++ b/sql/updates/world/2015_12_16_01_world.sql
@@ -0,0 +1,53 @@
+DELETE FROM `creature_text` WHERE `entry` IN(26860,26862,27102,27037);
+INSERT INTO `creature_text` (`entry`, `groupid`, `id`, `text`, `type`, `language`, `probability`, `emote`, `duration`, `sound`, `BroadcastTextID`, `comment`) VALUES
+(26860, 0, 0, 'I''ve never seen you so eager to cause harm to someone, sister. Such a pleasant development... very well, go!', 12, 0, 100, 25, 0, 0, 26229, 'Conqueror Krenna to Player'),
+(26860, 1, 0, 'That spineless troll has failed me for the last time. Anthis! Break his legs!', 12, 0, 100, 53, 0, 0, 26227, 'Conqueror Krenna to Player'),
+(26862, 0, 0, 'At once, my lady!', 12, 0, 100, 0, 0, 0, 26228, 'Anthis to Player'),
+(27102, 0, 0, 'Let me take care of it, sister.', 12, 0, 100, 0, 0, 0, 27108, 'Gorgonna to Player'),
+(27102, 1, 0, 'What were you thinking, provoking her like that?', 15, 0, 100, 0, 0, 0, 27109, 'Gorgonna to Player'),
+(27102, 2, 0, 'I used good judgment when you showed none. I don''t want to see you lead us into ruin, Krenna!', 12, 0, 100, 0, 0, 0, 27027, 'Gorgonna to Player'),
+(27102, 3, 0, 'We''ll see about that.', 12, 0, 100, 0, 0, 0, 27028, 'Gorgonna to Player'),
+(27102, 4, 0, 'You... half-idiot! You really did it this time. I''m going to have to make it look like your leg''s broken.', 12, 0, 100, 0, 0, 0, 27110, 'Gorgonna to Player'),
+(27102, 5, 0, 'Now don''t move if you ever want to walk again!', 12, 0, 100, 0, 0, 0, 27111, 'Gorgonna to Player'),
+(27037, 0, 0, 'No, please! Don''t!', 12, 0, 100, 430, 0, 0, 27112, 'Hidetrader Jun''ik to Player');
+
+DELETE FROM `smart_scripts` WHERE `entryorguid`=26860 AND `source_type`=0 AND `id`>0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`=27102 AND `source_type`=0;
+DELETE FROM `smart_scripts` WHERE `entryorguid`IN(2686000,2710200) AND `source_type`=9;
+UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry` IN(27102);
+
+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
+(26860, 0, 1, 2, 20, 0, 100, 0, 12178, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - On Quest return (12178) - Store Targetlist'),
+(26860, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2686000, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - On Quest return (12178) - Run Script'),
+
+(27102, 0, 0, 5, 38, 0, 100, 0, 2, 2, 0, 0, 53, 1, 27102, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - On Data Set 2 2 - Start WP'),
+(27102, 0, 1, 2, 40, 0, 100, 0, 3, 27102, 0, 0, 54, 9000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Reached WP3 - Pause WP'),
+(27102, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 80, 2710200, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Reached WP3 - Run Script'),
+(27102, 0, 3, 0, 40, 0, 100, 0, 4, 27102, 0, 0, 66, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 2.80998, 'Gorgonna - Reached WP4 - Set Orientation'),
+(27102, 0, 4, 0, 38, 0, 100, 0, 1, 1, 0, 0, 5, 66, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - On Data Set 1 1 - Play Emote OneShotSalute'),
+(27102, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 'Gorgonna - On Data Set 2 2 - Say Line 1'),
+
+(2710200, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Say Line 4 '),
+(2710200, 9, 1, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 27037, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Say Line 0 (Hidetrader Jun''ik)'),
+(2710200, 9, 2, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Say Line 5 '),
+(2710200, 9, 3, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 11, 42908, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Cast Cosmetic - Combat Kick'),
+(2710200, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 21, 50, 0, 0, 0, 0, 0, 0, 'Gorgonna - Script - Turn Run Off'),
+
+(2686000, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Say Line 1'),
+(2686000, 9, 1, 0, 0, 0, 100, 0, 7000, 7000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 19, 26862, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Say Line 0 (Anthis)'),
+(2686000, 9, 2, 0, 0, 0, 100, 0, 8000, 8000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Say Line 0 (Gorgonna)'),
+(2686000, 9, 3, 0, 0, 0, 100, 0, 6000, 6000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Say Line 0'), -- 15:45:27.765
+(2686000, 9, 4, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Set Data (Gorgonna)'),
+(2686000, 9, 5, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 1, 1, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Set Data (Gorgonna)'),
+(2686000, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 100, 1, 0, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Send Targetlist (Gorgonna)'),
+(2686000, 9, 7, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 45, 2, 2, 0, 0, 0, 0, 10, 117164, 27102, 0, 0, 0, 0, 0, 'Conqueror Krenna - Script - Set Data (Gorgonna)');
+
+
+DELETE FROM `waypoints` WHERE `entry`=27102;
+
+INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `point_comment`) VALUES
+(27102, 1, 3257.147, -2228.854, 116.0879, 'Gorgonna'),
+(27102, 2, 3244.31, -2251.519, 114.7344, 'Gorgonna'),
+(27102, 3, 3237.79, -2265.45, 114.2664, 'Gorgonna'),
+(27102, 4, 3275.846, -2208.026, 117.0294, 'Gorgonna');
+
diff --git a/sql/updates/world/2015_12_16_02_world335.sql b/sql/updates/world/2015_12_16_02_world335.sql
new file mode 100644
index 00000000000..20c1ac94a39
--- /dev/null
+++ b/sql/updates/world/2015_12_16_02_world335.sql
@@ -0,0 +1,7 @@
+ DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` in(19,20) AND `SourceEntry`=254;
+
+ INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
+ (19, 0, 254, 0, 0, 29, 0, 314, 200, 0, 1, 0, 0, '', 'Show quest \'Digging Through the Dirt\' only if no Eliza nearby'),
+ (20, 0, 254, 0, 0, 29, 0, 314, 200, 0, 1, 0, 0, '', 'Show quest \'Digging Through the Dirt\' only if no Eliza nearby'),
+ (19, 0, 254, 0, 0, 8, 0, 253, 0, 0, 1, 0, 0, '', 'Show quest \'Digging Through the Dirt\' only if quest \'Bride of the Embalmer\' is not rewarded'),
+ (19, 0, 254, 0, 0, 28, 0, 253, 0, 0, 1, 0, 0, '', 'Show quest \'Digging Through the Dirt\' only if quest \'Bride of the Embalmer\' is not completed');
diff --git a/sql/updates/world/2015_12_17_00_world.sql b/sql/updates/world/2015_12_17_00_world.sql
new file mode 100644
index 00000000000..8419473b203
--- /dev/null
+++ b/sql/updates/world/2015_12_17_00_world.sql
@@ -0,0 +1,3 @@
+--
+UPDATE `smart_scripts` SET `target_type`=1, `target_param1`=0 WHERE `entryorguid`=2710200 AND `source_type`=9 AND `id`=4;
+UPDATE `smart_scripts` SET `target_type`=21, `target_param1`=50 WHERE `entryorguid`=2710200 AND `source_type`=9 AND `id`=3;
diff --git a/sql/updates/world/2015_12_18_00_world_335.sql b/sql/updates/world/2015_12_18_00_world_335.sql
new file mode 100644
index 00000000000..3fb3e5a6e1e
--- /dev/null
+++ b/sql/updates/world/2015_12_18_00_world_335.sql
@@ -0,0 +1,2 @@
+--
+UPDATE `creature_addon` SET `bytes1`=8 WHERE `guid`=4216;
diff --git a/sql/updates/world/2015_12_18_01_world.sql b/sql/updates/world/2015_12_18_01_world.sql
new file mode 100644
index 00000000000..2ccc93def23
--- /dev/null
+++ b/sql/updates/world/2015_12_18_01_world.sql
@@ -0,0 +1,3 @@
+--
+DELETE FROM `creature_template_addon` WHERE `entry` = 16491;
+INSERT INTO `creature_template_addon` (`entry`,`auras`) VALUES (16491, '39804');
diff --git a/sql/updates/world/2015_12_18_02_world.sql b/sql/updates/world/2015_12_18_02_world.sql
new file mode 100644
index 00000000000..f590d18a8ab
--- /dev/null
+++ b/sql/updates/world/2015_12_18_02_world.sql
@@ -0,0 +1,2 @@
+--
+DELETE FROM `creature` WHERE `id`= 27032 AND `guid`= 110149;
diff --git a/sql/updates/world/2015_12_18_03_world_335.sql b/sql/updates/world/2015_12_18_03_world_335.sql
new file mode 100644
index 00000000000..de778343a0e
--- /dev/null
+++ b/sql/updates/world/2015_12_18_03_world_335.sql
@@ -0,0 +1,5 @@
+--
+UPDATE `smart_scripts` SET `event_flags`=(`event_flags`|1) WHERE `entryorguid`=702 AND `source_type`=0 AND `id`=2;
+UPDATE `smart_scripts` SET `event_flags`=(`event_flags`|1) WHERE `entryorguid`=1393 AND `source_type`=0 AND `id`=1;
+UPDATE `smart_scripts` SET `event_param3`=15000 AND `event_param4`=15000 WHERE `entryorguid`=26073 AND `source_type`=0 AND `id`=9;
+UPDATE `smart_scripts` SET `event_param3`=4000 AND `event_param4`=7000 WHERE`entryorguid`=11353 AND `source_type`=0 AND `id`=0;
diff --git a/sql/updates/world/2015_12_18_04_world.sql b/sql/updates/world/2015_12_18_04_world.sql
new file mode 100644
index 00000000000..c8c3352319c
--- /dev/null
+++ b/sql/updates/world/2015_12_18_04_world.sql
@@ -0,0 +1,8 @@
+--
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 30838 AND `source_type` = 0 AND `id`=8;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 30839 AND `source_type` = 0 AND `id`=8;
+DELETE FROM `smart_scripts` WHERE `entryorguid` = 30840 AND `source_type` = 0 AND `id`=10;
+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
+(30839,0,8,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,19,30831,30,0,0,0,0,0,'Jayde - In Just summoned - Start attack'),
+(30840,0,10,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,19,30829,30,0,0,0,0,0,'Munch - In Just summoned - Start attack'),
+(30838,0,8,0,54,0,100,0,0,0,0,0,49,0,0,0,0,0,0,19,30830,30,0,0,0,0,0,'Highlord Darion Mograine - In Just summoned - Start attack');
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 768def2ff4d..20d30704c13 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -83,12 +83,23 @@ uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32
float multiplier = CalculatePct(float(entry->depositPercent), 3);
uint32 timeHr = (((time / 60) / 60) / 12);
- uint32 deposit = uint32(((multiplier * MSV * count / 3) * timeHr * 3) * sWorld->getRate(RATE_AUCTION_DEPOSIT));
+ uint32 deposit = uint32(MSV * multiplier * sWorld->getRate(RATE_AUCTION_DEPOSIT));
+ float remainderbase = float(MSV * multiplier * sWorld->getRate(RATE_AUCTION_DEPOSIT)) - deposit;
+
+ deposit *= timeHr * count;
+
+ int i = count;
+ while (i > 0 && (remainderbase * i) != uint32(remainderbase * i))
+ i--;
+
+ if (i)
+ deposit += remainderbase * i * timeHr;
TC_LOG_DEBUG("auctionHouse", "MSV: %u", MSV);
TC_LOG_DEBUG("auctionHouse", "Items: %u", count);
TC_LOG_DEBUG("auctionHouse", "Multiplier: %f", multiplier);
TC_LOG_DEBUG("auctionHouse", "Deposit: %u", deposit);
+ TC_LOG_DEBUG("auctionHouse", "Deposit rm: %f", remainderbase * count);
if (deposit < AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT))
return AH_MINIMUM_DEPOSIT * sWorld->getRate(RATE_AUCTION_DEPOSIT);
@@ -389,6 +400,116 @@ bool AuctionHouseMgr::RemoveAItem(ObjectGuid::LowType id, bool deleteItem)
return true;
}
+void AuctionHouseMgr::PendingAuctionAdd(Player* player, AuctionEntry* aEntry)
+{
+ PlayerAuctions* thisAH;
+ auto itr = pendingAuctionMap.find(player->GetGUID());
+ if (itr != pendingAuctionMap.end())
+ thisAH = itr->second.first;
+ else
+ {
+ thisAH = new PlayerAuctions;
+ pendingAuctionMap[player->GetGUID()] = AuctionPair(thisAH, 0);
+ }
+ thisAH->push_back(aEntry);
+}
+
+uint32 AuctionHouseMgr::PendingAuctionCount(const Player* player) const
+{
+ auto const itr = pendingAuctionMap.find(player->GetGUID());
+ if (itr != pendingAuctionMap.end())
+ return itr->second.first->size();
+
+ return 0;
+}
+
+void AuctionHouseMgr::PendingAuctionProcess(Player* player)
+{
+ auto iterMap = pendingAuctionMap.find(player->GetGUID());
+ if (iterMap == pendingAuctionMap.end())
+ return;
+
+ PlayerAuctions* thisAH = iterMap->second.first;
+
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+
+ uint32 totalItems = 0;
+ for (auto itrAH = thisAH->begin(); itrAH != thisAH->end(); ++itrAH)
+ {
+ AuctionEntry* AH = (*itrAH);
+ totalItems += AH->itemCount;
+ }
+
+ uint32 totaldeposit = 0;
+ auto itr = (*thisAH->begin());
+
+ if (Item* item = GetAItem(itr->itemGUIDLow))
+ totaldeposit = GetAuctionDeposit(itr->auctionHouseEntry, itr->etime, item, totalItems);
+
+ uint32 depositremain = totaldeposit;
+ for (auto itr = thisAH->begin(); itr != thisAH->end(); ++itr)
+ {
+ AuctionEntry* AH = (*itr);
+
+ if (next(itr) == thisAH->end())
+ AH->deposit = depositremain;
+ else
+ {
+ AH->deposit = totaldeposit / thisAH->size();
+ depositremain -= AH->deposit;
+ }
+
+ AH->DeleteFromDB(trans);
+ AH->SaveToDB(trans);
+ }
+
+ CharacterDatabase.CommitTransaction(trans);
+ pendingAuctionMap.erase(player->GetGUID());
+ delete thisAH;
+ player->ModifyMoney(-int32(totaldeposit));
+}
+
+void AuctionHouseMgr::UpdatePendingAuctions()
+{
+ for (auto itr = pendingAuctionMap.begin(); itr != pendingAuctionMap.end();)
+ {
+ ObjectGuid playerGUID = itr->first;
+ if (Player* player = ObjectAccessor::FindConnectedPlayer(playerGUID))
+ {
+ // Check if there were auctions since last update process if not
+ if (PendingAuctionCount(player) == itr->second.second)
+ {
+ ++itr;
+ PendingAuctionProcess(player);
+ }
+ else
+ {
+ ++itr;
+ pendingAuctionMap[playerGUID].second = PendingAuctionCount(player);
+ }
+ }
+ else
+ {
+ // Expire any auctions that we couldn't get a deposit for
+ TC_LOG_WARN("auctionHouse", "Player %s was offline, unable to retrieve deposit!", playerGUID.ToString().c_str());
+ PlayerAuctions* thisAH = itr->second.first;
+ ++itr;
+ SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ for (auto AHitr = thisAH->begin(); AHitr != thisAH->end();)
+ {
+ AuctionEntry* AH = (*AHitr);
+ ++AHitr;
+ AH->expire_time = time(NULL);
+ AH->DeleteFromDB(trans);
+ AH->SaveToDB(trans);
+ }
+ CharacterDatabase.CommitTransaction(trans);
+ pendingAuctionMap.erase(playerGUID);
+ delete thisAH;
+ }
+ }
+}
+
void AuctionHouseMgr::Update()
{
mHordeAuctions.Update();
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index 45cdba361f3..1f885837a44 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -22,6 +22,7 @@
#include "Common.h"
#include "DatabaseEnv.h"
#include "DBCStructure.h"
+#include <set>
class Item;
class Player;
@@ -82,6 +83,7 @@ struct AuctionEntry
time_t expire_time;
ObjectGuid::LowType bidder;
uint32 deposit; //deposit can be calculated only when creating auction
+ uint32 etime;
AuctionHouseEntry const* auctionHouseEntry; // in AuctionHouse.dbc
// helpers
@@ -151,6 +153,8 @@ class AuctionHouseMgr
}
typedef std::unordered_map<ObjectGuid::LowType, Item*> ItemMap;
+ typedef std::vector<AuctionEntry*> PlayerAuctions;
+ typedef std::pair<PlayerAuctions*, uint32> AuctionPair;
AuctionHouseObject* GetAuctionsMap(uint32 factionTemplateId);
AuctionHouseObject* GetAuctionsMapByHouseId(uint8 auctionHouseId);
@@ -184,7 +188,10 @@ class AuctionHouseMgr
void AddAItem(Item* it);
bool RemoveAItem(ObjectGuid::LowType id, bool deleteItem = false);
-
+ void PendingAuctionAdd(Player* player, AuctionEntry* aEntry);
+ uint32 PendingAuctionCount(const Player* player) const;
+ void PendingAuctionProcess(Player* player);
+ void UpdatePendingAuctions();
void Update();
private:
@@ -193,6 +200,8 @@ class AuctionHouseMgr
AuctionHouseObject mAllianceAuctions;
AuctionHouseObject mNeutralAuctions;
+ std::map<ObjectGuid, AuctionPair> pendingAuctionMap;
+
ItemMap mAitems;
};
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index a8f015a8749..ceab7d06c96 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1535,6 +1535,7 @@ void Player::Update(uint32 p_time)
//because we don't want player's ghost teleported from graveyard
if (IsHasDelayedTeleport() && IsAlive())
TeleportTo(m_teleport_dest, m_teleport_options);
+
}
void Player::setDeathState(DeathState s)
@@ -5836,8 +5837,6 @@ void Player::UpdateCombatSkills(Unit* victim, WeaponAttackType attType, bool def
uint8 plevel = getLevel(); // if defense than victim == attacker
uint8 greylevel = Trinity::XP::GetGrayLevel(plevel);
uint8 moblevel = victim->getLevelForTarget(this);
- if (moblevel < greylevel)
- return;
if (moblevel > plevel + 5)
moblevel = plevel + 5;
diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp
index 8ecf86680ca..a9680ff69bb 100644
--- a/src/server/game/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Handlers/AuctionHouseHandler.cpp
@@ -303,18 +303,21 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
AH->buyout = buyout;
AH->expire_time = time(NULL) + auctionTime;
AH->deposit = deposit;
+ AH->etime = etime;
AH->auctionHouseEntry = auctionHouseEntry;
TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u",
_player->GetName().c_str(), _player->GetGUID().GetCounter(), item->GetTemplate()->Name1.c_str(), item->GetEntry(), item->GetGUID().GetCounter(), item->GetCount(), bid, buyout, auctionTime, AH->GetHouseId());
sAuctionMgr->AddAItem(item);
auctionHouse->AddAuction(AH);
+ sAuctionMgr->PendingAuctionAdd(_player, AH);
_player->MoveItemFromInventory(item->GetBagSlot(), item->GetSlot(), true);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
item->DeleteFromInventoryDB(trans);
item->SaveToDB(trans);
+
AH->SaveToDB(trans);
_player->SaveInventoryAndGoldToDB(trans);
CharacterDatabase.CommitTransaction(trans);
@@ -351,12 +354,14 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
AH->buyout = buyout;
AH->expire_time = time(NULL) + auctionTime;
AH->deposit = deposit;
+ AH->etime = etime;
AH->auctionHouseEntry = auctionHouseEntry;
TC_LOG_INFO("network", "CMSG_AUCTION_SELL_ITEM: Player %s (guid %d) is selling item %s entry %u (guid %d) with count %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u",
_player->GetName().c_str(), _player->GetGUID().GetCounter(), newItem->GetTemplate()->Name1.c_str(), newItem->GetEntry(), newItem->GetGUID().GetCounter(), newItem->GetCount(), bid, buyout, auctionTime, AH->GetHouseId());
sAuctionMgr->AddAItem(newItem);
auctionHouse->AddAuction(AH);
+ sAuctionMgr->PendingAuctionAdd(_player, AH);
for (uint32 j = 0; j < itemsCount; ++j)
{
@@ -396,8 +401,6 @@ void WorldSession::HandleAuctionSellItem(WorldPacket& recvData)
GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_CREATE_AUCTION, 1);
}
-
- _player->ModifyMoney(-int32(deposit));
}
//this function is called when client bids or buys out auction
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index a3f662f2ade..1e4bb96303e 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -22,6 +22,13 @@
Quest::Quest(Field* questRecord)
{
+ EmoteOnIncomplete = 0;
+ EmoteOnComplete = 0;
+ _reqItemsCount = 0;
+ _reqCreatureOrGOcount = 0;
+ _rewItemsCount = 0;
+ _rewChoiceItemsCount = 0;
+
Id = questRecord[0].GetUInt32();
Method = questRecord[1].GetUInt8();
Level = questRecord[2].GetInt16();
@@ -54,12 +61,18 @@ Quest::Quest(Field* questRecord)
{
RewardItemId[i] = questRecord[27+i*2].GetUInt32();
RewardItemIdCount[i] = questRecord[28+i*2].GetUInt16();
+
+ if (RewardItemId[i])
+ ++_rewItemsCount;
}
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
{
RewardChoiceItemId[i] = questRecord[35+i*2].GetUInt32();
RewardChoiceItemCount[i] = questRecord[36+i*2].GetUInt16();
+
+ if (RewardChoiceItemId[i])
+ ++_rewChoiceItemsCount;
}
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
@@ -80,65 +93,40 @@ Quest::Quest(Field* questRecord)
CompletedText = questRecord[70].GetString();
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
+ {
RequiredNpcOrGo[i] = questRecord[71+i].GetInt32();
-
- for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
RequiredNpcOrGoCount[i] = questRecord[75+i].GetUInt16();
+ ObjectiveText[i] = questRecord[100+i].GetString();
- for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
- ItemDrop[i] = questRecord[79+i].GetUInt32();
+ if (RequiredNpcOrGo[i])
+ ++_reqCreatureOrGOcount;
+ }
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
+ {
+ ItemDrop[i] = questRecord[79+i].GetUInt32();
ItemDropQuantity[i] = questRecord[83+i].GetUInt16();
+ }
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
+ {
RequiredItemId[i] = questRecord[87+i].GetUInt32();
-
- for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
RequiredItemCount[i] = questRecord[93+i].GetUInt16();
- // int8 Unknown0 = questRecord[99].GetUInt8();
-
- for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- ObjectiveText[i] = questRecord[100+i].GetString();
-
- EmoteOnIncomplete = 0;
- EmoteOnComplete = 0;
-
- //int32 VerifiedBuild = questRecord[104].GetInt32();
-
- _reqItemsCount = 0;
- _reqCreatureOrGOcount = 0;
- _rewItemsCount = 0;
- _rewChoiceItemsCount = 0;
-
- for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
if (RequiredItemId[i])
++_reqItemsCount;
+ }
- for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
- if (RequiredNpcOrGo[i])
- ++_reqCreatureOrGOcount;
-
- for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
- if (RewardItemId[i])
- ++_rewItemsCount;
-
- for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
- if (RewardChoiceItemId[i])
- ++_rewChoiceItemsCount;
+ // int8 Unknown0 = questRecord[99].GetUInt8();
+ // int32 VerifiedBuild = questRecord[104].GetInt32();
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
+ {
DetailsEmote[i] = 0;
-
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
DetailsEmoteDelay[i] = 0;
-
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
OfferRewardEmote[i] = 0;
-
- for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
OfferRewardEmoteDelay[i] = 0;
+ }
}
void Quest::LoadQuestDetails(Field* fields)
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 2d990ad3ed2..debe4ac3cbf 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -3053,6 +3053,7 @@ void SpellMgr::LoadSpellInfoCorrections()
case 52479: // Gift of the Harvester
case 48246: // Ball of Flame
case 36327: // Shoot Arcane Explosion Arrow
+ case 55479: // Force Obedience
spellInfo->MaxAffectedTargets = 1;
break;
case 36384: // Skartax Purple Beam
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 93adc30f9c4..2aa65324a3a 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1787,6 +1787,7 @@ void World::SetInitialWorldSettings()
m_timers[WUPDATE_WEATHERS].SetInterval(1*IN_MILLISECONDS);
m_timers[WUPDATE_AUCTIONS].SetInterval(MINUTE*IN_MILLISECONDS);
+ m_timers[WUPDATE_AUCTIONS_PENDING].SetInterval(250);
m_timers[WUPDATE_UPTIME].SetInterval(m_int_configs[CONFIG_UPTIME_UPDATE]*MINUTE*IN_MILLISECONDS);
//Update "uptime" table based on configuration entry in minutes.
m_timers[WUPDATE_CORPSES].SetInterval(20 * MINUTE * IN_MILLISECONDS);
@@ -2057,6 +2058,13 @@ void World::Update(uint32 diff)
sAuctionMgr->Update();
}
+ if (m_timers[WUPDATE_AUCTIONS_PENDING].Passed())
+ {
+ m_timers[WUPDATE_AUCTIONS_PENDING].Reset();
+
+ sAuctionMgr->UpdatePendingAuctions();
+ }
+
/// <li> Handle AHBot operations
if (m_timers[WUPDATE_AHBOT].Passed())
{
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index ed5e218b084..64ebafbd6e8 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -69,6 +69,7 @@ enum ShutdownExitCode
enum WorldTimers
{
WUPDATE_AUCTIONS,
+ WUPDATE_AUCTIONS_PENDING,
WUPDATE_WEATHERS,
WUPDATE_UPTIME,
WUPDATE_CORPSES,
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
index aeaf8a70ba5..cfeb31d5526 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp
@@ -136,11 +136,12 @@ enum Events
enum Actions
{
- ACTION_STAND_UP = 1,
- ACTION_CAST_INVOCATION = 2,
- ACTION_REMOVE_INVOCATION = 3,
- ACTION_KINETIC_BOMB_JUMP = 4,
- ACTION_FLAME_BALL_CHASE = 5,
+ ACTION_START_INTRO = 1,
+ ACTION_STAND_UP = 2,
+ ACTION_CAST_INVOCATION = 3,
+ ACTION_REMOVE_INVOCATION = 4,
+ ACTION_KINETIC_BOMB_JUMP = 5,
+ ACTION_FLAME_BALL_CHASE = 6,
};
enum Points
@@ -162,6 +163,7 @@ class StandUpEvent : public BasicEvent
bool Execute(uint64 /*eventTime*/, uint32 /*diff*/)
{
_owner.HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
+ _owner.SetReactState(REACT_AGGRESSIVE);
return true;
}
@@ -382,8 +384,6 @@ class boss_prince_keleseth_icc : public CreatureScript
if (!me->isDead())
JustRespawned();
-
- me->SetReactState(REACT_DEFENSIVE);
}
void Reset() override
@@ -395,7 +395,6 @@ class boss_prince_keleseth_icc : public CreatureScript
_isEmpowered = false;
me->SetHealth(_spawnHealth);
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true));
- me->SetReactState(REACT_DEFENSIVE);
}
void EnterCombat(Unit* /*who*/) override
@@ -597,8 +596,6 @@ class boss_prince_taldaram_icc : public CreatureScript
if (!me->isDead())
JustRespawned();
-
- me->SetReactState(REACT_DEFENSIVE);
}
void Reset() override
@@ -610,12 +607,6 @@ class boss_prince_taldaram_icc : public CreatureScript
_isEmpowered = false;
me->SetHealth(_spawnHealth);
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true));
- me->SetReactState(REACT_DEFENSIVE);
- }
-
- void MoveInLineOfSight(Unit* /*who*/) override
-
- {
}
void EnterCombat(Unit* /*who*/) override
@@ -821,8 +812,6 @@ class boss_prince_valanar_icc : public CreatureScript
if (!me->isDead())
JustRespawned();
-
- me->SetReactState(REACT_DEFENSIVE);
}
void Reset() override
@@ -834,12 +823,6 @@ class boss_prince_valanar_icc : public CreatureScript
_isEmpowered = false;
me->SetHealth(me->GetMaxHealth());
instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true));
- me->SetReactState(REACT_DEFENSIVE);
- }
-
- void MoveInLineOfSight(Unit* /*who*/) override
-
- {
}
void EnterCombat(Unit* /*who*/) override
@@ -905,6 +888,7 @@ class boss_prince_valanar_icc : public CreatureScript
default:
break;
}
+
summons.Summon(summon);
if (me->IsInCombat())
DoZoneInCombat(summon);
@@ -1070,25 +1054,28 @@ class npc_blood_queen_lana_thel : public CreatureScript
me->SetVisible(true);
}
- void MoveInLineOfSight(Unit* who) override
-
+ void DoAction(int32 action) override
{
- if (_introDone)
- return;
-
- if (!me->IsWithinDistInMap(who, 35.0f, false))
- return;
-
- _introDone = true;
- Talk(SAY_INTRO_1);
- _events.SetPhase(1);
- _events.ScheduleEvent(EVENT_INTRO_1, 14000);
- // summon a visual trigger
- if (Creature* summon = DoSummon(NPC_FLOATING_TRIGGER, triggerPos, 15000, TEMPSUMMON_TIMED_DESPAWN))
+ switch (action)
{
- summon->CastSpell(summon, SPELL_OOC_INVOCATION_VISUAL, true);
- summon->SetSpeed(MOVE_FLIGHT, 0.15f, true);
- summon->GetMotionMaster()->MovePoint(0, triggerEndPos);
+ case ACTION_START_INTRO:
+ if (!_introDone)
+ {
+ _introDone = true;
+ Talk(SAY_INTRO_1);
+ _events.SetPhase(1);
+ _events.ScheduleEvent(EVENT_INTRO_1, 14000);
+ // summon a visual trigger
+ if (Creature* summon = DoSummon(NPC_FLOATING_TRIGGER, triggerPos, 15000, TEMPSUMMON_TIMED_DESPAWN))
+ {
+ summon->CastSpell(summon, SPELL_OOC_INVOCATION_VISUAL, true);
+ summon->SetSpeed(MOVE_FLIGHT, 0.15f, true); // todo: creature is swimming, check if this is blizzlike or not.
+ summon->GetMotionMaster()->MovePoint(0, triggerEndPos);
+ }
+ }
+ break;
+ default:
+ break;
}
}
@@ -1328,7 +1315,6 @@ class npc_dark_nucleus : public CreatureScript
}
void MoveInLineOfSight(Unit* who) override
-
{
ScriptedAI::MoveInLineOfSight(who);
}
@@ -1670,6 +1656,21 @@ class spell_blood_council_shadow_prison_damage : public SpellScriptLoader
}
};
+class at_blood_prince_council_start_intro : public AreaTriggerScript
+{
+ public:
+ at_blood_prince_council_start_intro() : AreaTriggerScript("at_blood_prince_council_start_intro") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
+ {
+ if (InstanceScript* instance = player->GetInstanceScript())
+ if (Creature* bloodQueen = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL)))
+ bloodQueen->AI()->DoAction(ACTION_START_INTRO);
+
+ return true;
+ }
+};
+
void AddSC_boss_blood_prince_council()
{
new boss_blood_council_controller();
@@ -1689,4 +1690,5 @@ void AddSC_boss_blood_prince_council()
new spell_valanar_kinetic_bomb_absorb();
new spell_blood_council_shadow_prison();
new spell_blood_council_shadow_prison_damage();
+ new at_blood_prince_council_start_intro();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index 365e0a1588d..54c24769246 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -268,7 +268,6 @@ class boss_deathbringer_saurfang : public CreatureScript
void Reset() override
{
_Reset();
- me->SetReactState(REACT_DEFENSIVE);
events.SetPhase(PHASE_COMBAT);
Initialize();
me->SetPower(POWER_ENERGY, 0);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
index e3e89d865ff..f76c415ab92 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp
@@ -93,7 +93,6 @@ class boss_festergut : public CreatureScript
void Reset() override
{
_Reset();
- me->SetReactState(REACT_DEFENSIVE);
events.ScheduleEvent(EVENT_BERSERK, 300000);
events.ScheduleEvent(EVENT_INHALE_BLIGHT, urand(25000, 30000));
events.ScheduleEvent(EVENT_GAS_SPORE, urand(20000, 25000));
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
index 3a745e2c98c..78a279b94fd 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp
@@ -174,6 +174,11 @@ enum DeprogrammingData
POINT_DESPAWN = 384721,
};
+enum Actions
+{
+ ACTION_START_INTRO
+};
+
#define NPC_DARNAVAN RAID_MODE<uint32>(NPC_DARNAVAN_10, NPC_DARNAVAN_25, NPC_DARNAVAN_10, NPC_DARNAVAN_25)
#define NPC_DARNAVAN_CREDIT RAID_MODE<uint32>(NPC_DARNAVAN_CREDIT_10, NPC_DARNAVAN_CREDIT_25, NPC_DARNAVAN_CREDIT_10, NPC_DARNAVAN_CREDIT_25)
#define QUEST_DEPROGRAMMING RAID_MODE<uint32>(QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25, QUEST_DEPROGRAMMING_10, QUEST_DEPROGRAMMING_25)
@@ -241,20 +246,26 @@ class boss_lady_deathwhisper : public CreatureScript
me->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, false);
}
- void MoveInLineOfSight(Unit* who) override
-
+ void DoAction(int32 action) override
{
- if (!_introDone && me->IsWithinDistInMap(who, 110.0f))
+ switch (action)
{
- _introDone = true;
- Talk(SAY_INTRO_1);
- events.SetPhase(PHASE_INTRO);
- events.ScheduleEvent(EVENT_INTRO_2, 11000, 0, PHASE_INTRO);
- events.ScheduleEvent(EVENT_INTRO_3, 21000, 0, PHASE_INTRO);
- events.ScheduleEvent(EVENT_INTRO_4, 31500, 0, PHASE_INTRO);
- events.ScheduleEvent(EVENT_INTRO_5, 39500, 0, PHASE_INTRO);
- events.ScheduleEvent(EVENT_INTRO_6, 48500, 0, PHASE_INTRO);
- events.ScheduleEvent(EVENT_INTRO_7, 58000, 0, PHASE_INTRO);
+ case ACTION_START_INTRO:
+ if (!_introDone)
+ {
+ _introDone = true;
+ Talk(SAY_INTRO_1);
+ events.SetPhase(PHASE_INTRO);
+ events.ScheduleEvent(EVENT_INTRO_2, 11000, 0, PHASE_INTRO);
+ events.ScheduleEvent(EVENT_INTRO_3, 21000, 0, PHASE_INTRO);
+ events.ScheduleEvent(EVENT_INTRO_4, 31500, 0, PHASE_INTRO);
+ events.ScheduleEvent(EVENT_INTRO_5, 39500, 0, PHASE_INTRO);
+ events.ScheduleEvent(EVENT_INTRO_6, 48500, 0, PHASE_INTRO);
+ events.ScheduleEvent(EVENT_INTRO_7, 58000, 0, PHASE_INTRO);
+ }
+ break;
+ default:
+ break;
}
}
@@ -1024,6 +1035,21 @@ class spell_cultist_dark_martyrdom : public SpellScriptLoader
}
};
+class at_lady_deathwhisper_entrance : public AreaTriggerScript
+{
+ public:
+ at_lady_deathwhisper_entrance() : AreaTriggerScript("at_lady_deathwhisper_entrance") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
+ {
+ if (InstanceScript* instance = player->GetInstanceScript())
+ if (Creature* ladyDeathwhisper = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_LADY_DEATHWHISPER)))
+ ladyDeathwhisper->AI()->DoAction(ACTION_START_INTRO);
+
+ return true;
+ }
+};
+
void AddSC_boss_lady_deathwhisper()
{
new boss_lady_deathwhisper();
@@ -1033,4 +1059,5 @@ void AddSC_boss_lady_deathwhisper()
new npc_darnavan();
new spell_deathwhisper_mana_barrier();
new spell_cultist_dark_martyrdom();
+ new at_lady_deathwhisper_entrance();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
index 2fbd1293891..993fc75fcde 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp
@@ -89,11 +89,15 @@ enum MiscInfo
//DATA_SPIKE_IMMUNE_1, = 2, // Reserved & used
//DATA_SPIKE_IMMUNE_2, = 3, // Reserved & used
- ACTION_CLEAR_SPIKE_IMMUNITIES = 1,
-
MAX_BONE_SPIKE_IMMUNE = 3,
};
+enum Actions
+{
+ ACTION_CLEAR_SPIKE_IMMUNITIES = 1,
+ ACTION_TALK_ENTER_ZONE = 2
+};
+
class BoneSpikeTargetSelector : public std::unary_function<Unit*, bool>
{
public:
@@ -131,7 +135,6 @@ class boss_lord_marrowgar : public CreatureScript
_boneStormDuration = RAID_MODE<uint32>(20000, 30000, 20000, 30000);
_baseSpeed = creature->GetSpeedRate(MOVE_RUN);
_coldflameLastPos.Relocate(creature);
- _introDone = false;
_boneSlice = false;
}
@@ -146,6 +149,7 @@ class boss_lord_marrowgar : public CreatureScript
events.ScheduleEvent(EVENT_COLDFLAME, 5000, EVENT_GROUP_SPECIAL);
events.ScheduleEvent(EVENT_WARN_BONE_STORM, urand(45000, 50000));
events.ScheduleEvent(EVENT_ENRAGE, 600000);
+ _introDone = false;
_boneSlice = false;
_boneSpikeImmune.clear();
}
@@ -179,16 +183,6 @@ class boss_lord_marrowgar : public CreatureScript
Talk(SAY_KILL);
}
- void MoveInLineOfSight(Unit* who) override
-
- {
- if (!_introDone && me->IsWithinDistInMap(who, 70.0f))
- {
- Talk(SAY_ENTER_ZONE);
- _introDone = true;
- }
- }
-
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim() || !CheckInRoom())
@@ -324,10 +318,21 @@ class boss_lord_marrowgar : public CreatureScript
void DoAction(int32 action) override
{
- if (action != ACTION_CLEAR_SPIKE_IMMUNITIES)
- return;
-
- _boneSpikeImmune.clear();
+ switch (action)
+ {
+ case ACTION_CLEAR_SPIKE_IMMUNITIES:
+ _boneSpikeImmune.clear();
+ break;
+ case ACTION_TALK_ENTER_ZONE:
+ if (!_introDone)
+ {
+ Talk(SAY_ENTER_ZONE);
+ _introDone = true;
+ }
+ break;
+ default:
+ break;
+ }
}
private:
@@ -742,6 +747,22 @@ class spell_marrowgar_bone_slice : public SpellScriptLoader
}
};
+class at_lord_marrowgar_entrance : public AreaTriggerScript
+{
+ public:
+ at_lord_marrowgar_entrance() : AreaTriggerScript("at_lord_marrowgar_entrance") { }
+
+ bool OnTrigger(Player* player, AreaTriggerEntry const* /*areaTrigger*/) override
+ {
+ if (InstanceScript* instance = player->GetInstanceScript())
+ if (Creature* lordMarrowgar = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_LORD_MARROWGAR)))
+ lordMarrowgar->AI()->DoAction(ACTION_TALK_ENTER_ZONE);
+
+ return true;
+ }
+
+};
+
void AddSC_boss_lord_marrowgar()
{
new boss_lord_marrowgar();
@@ -753,4 +774,5 @@ void AddSC_boss_lord_marrowgar()
new spell_marrowgar_bone_spike_graveyard();
new spell_marrowgar_bone_storm();
new spell_marrowgar_bone_slice();
+ new at_lord_marrowgar_entrance();
}
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
index be134a06173..4c67c0a7163 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp
@@ -236,7 +236,6 @@ class boss_professor_putricide : public CreatureScript
summons.DespawnAll();
SetPhase(PHASE_COMBAT_1);
_experimentState = EXPERIMENT_STATE_OOZE;
- me->SetReactState(REACT_DEFENSIVE);
me->SetWalk(false);
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE)
me->GetMotionMaster()->MovementExpired();
@@ -616,7 +615,7 @@ class boss_professor_putricide : public CreatureScript
DoCast(me, SPELL_TEAR_GAS_PERIODIC_TRIGGER, true);
break;
case EVENT_RESUME_ATTACK:
- me->SetReactState(REACT_DEFENSIVE);
+ me->SetReactState(REACT_AGGRESSIVE);
AttackStart(me->GetVictim());
// remove Tear Gas
me->RemoveAurasDueToSpell(SPELL_TEAR_GAS_PERIODIC_TRIGGER);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index 1a2ebd179fe..d03925f734a 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -168,11 +168,6 @@ class boss_rotface : public CreatureScript
Talk(SAY_SLIME_SPRAY);
}
- void MoveInLineOfSight(Unit* /*who*/) override
- {
- // don't enter combat
- }
-
void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_VILE_GAS_STALKER)
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
index 65d99b022dc..8917af0038f 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp
@@ -234,7 +234,6 @@ class boss_sindragosa : public CreatureScript
void Reset() override
{
BossAI::Reset();
- me->SetReactState(REACT_DEFENSIVE);
DoCast(me, SPELL_TANK_MARKER, true);
events.ScheduleEvent(EVENT_BERSERK, 600000);
events.ScheduleEvent(EVENT_CLEAVE, 10000, EVENT_GROUP_LAND_PHASE);
@@ -659,7 +658,6 @@ class npc_spinestalker : public CreatureScript
_events.ScheduleEvent(EVENT_BELLOWING_ROAR, urand(20000, 25000));
_events.ScheduleEvent(EVENT_CLEAVE_SPINESTALKER, urand(10000, 15000));
_events.ScheduleEvent(EVENT_TAIL_SWEEP, urand(8000, 12000));
- me->SetReactState(REACT_DEFENSIVE);
if (!_summoned)
{
@@ -699,6 +697,7 @@ class npc_spinestalker : public CreatureScript
me->GetMotionMaster()->MoveIdle();
me->StopMoving();
me->GetMotionMaster()->MovePoint(POINT_FROSTWYRM_FLY_IN, SpinestalkerFlyPos);
+ me->SetReactState(REACT_DEFENSIVE);
}
}
@@ -714,6 +713,7 @@ class npc_spinestalker : public CreatureScript
me->SetHomePosition(SpinestalkerLandPos);
me->SetFacingTo(SpinestalkerLandPos.GetOrientation());
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ me->SetReactState(REACT_AGGRESSIVE);
}
void UpdateAI(uint32 diff) override
@@ -794,7 +794,6 @@ class npc_rimefang : public CreatureScript
_events.Reset();
_events.ScheduleEvent(EVENT_FROST_BREATH_RIMEFANG, urand(12000, 15000));
_events.ScheduleEvent(EVENT_ICY_BLAST, urand(30000, 35000));
- me->SetReactState(REACT_DEFENSIVE);
Initialize();
if (!_summoned)
@@ -835,6 +834,7 @@ class npc_rimefang : public CreatureScript
me->GetMotionMaster()->MoveIdle();
me->StopMoving();
me->GetMotionMaster()->MovePoint(POINT_FROSTWYRM_FLY_IN, RimefangFlyPos);
+ me->SetReactState(REACT_DEFENSIVE);
}
}
@@ -850,6 +850,7 @@ class npc_rimefang : public CreatureScript
me->SetHomePosition(RimefangLandPos);
me->SetFacingTo(RimefangLandPos.GetOrientation());
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ me->SetReactState(REACT_AGGRESSIVE);
}
void EnterCombat(Unit* /*victim*/) override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
index e739f5a5036..224aa6cda45 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.h
@@ -72,50 +72,51 @@ enum TeleporterSpells
enum DataTypes
{
// Encounter States/Boss GUIDs
- DATA_LORD_MARROWGAR = 0,
- DATA_LADY_DEATHWHISPER = 1,
- DATA_ICECROWN_GUNSHIP_BATTLE = 2,
- DATA_DEATHBRINGER_SAURFANG = 3,
- DATA_FESTERGUT = 4,
- DATA_ROTFACE = 5,
- DATA_PROFESSOR_PUTRICIDE = 6,
- DATA_BLOOD_PRINCE_COUNCIL = 7,
- DATA_BLOOD_QUEEN_LANA_THEL = 8,
- DATA_SISTER_SVALNA = 9,
- DATA_VALITHRIA_DREAMWALKER = 10,
- DATA_SINDRAGOSA = 11,
- DATA_THE_LICH_KING = 12,
+ DATA_LORD_MARROWGAR = 0,
+ DATA_LADY_DEATHWHISPER = 1,
+ DATA_ICECROWN_GUNSHIP_BATTLE = 2,
+ DATA_DEATHBRINGER_SAURFANG = 3,
+ DATA_FESTERGUT = 4,
+ DATA_ROTFACE = 5,
+ DATA_PROFESSOR_PUTRICIDE = 6,
+ DATA_BLOOD_PRINCE_COUNCIL = 7,
+ DATA_BLOOD_QUEEN_LANA_THEL = 8,
+ DATA_SISTER_SVALNA = 9,
+ DATA_VALITHRIA_DREAMWALKER = 10,
+ DATA_SINDRAGOSA = 11,
+ DATA_THE_LICH_KING = 12,
// Additional data
- DATA_SAURFANG_EVENT_NPC = 13,
- DATA_BONED_ACHIEVEMENT = 14,
- DATA_OOZE_DANCE_ACHIEVEMENT = 15,
- DATA_PUTRICIDE_TABLE = 16,
- DATA_NAUSEA_ACHIEVEMENT = 17,
- DATA_ORB_WHISPERER_ACHIEVEMENT = 18,
- DATA_PRINCE_KELESETH_GUID = 19,
- DATA_PRINCE_TALDARAM_GUID = 20,
- DATA_PRINCE_VALANAR_GUID = 21,
- DATA_BLOOD_PRINCES_CONTROL = 22,
- DATA_SINDRAGOSA_FROSTWYRMS = 23,
- DATA_SPINESTALKER = 24,
- DATA_RIMEFANG = 25,
- DATA_COLDFLAME_JETS = 26,
- DATA_TEAM_IN_INSTANCE = 27,
- DATA_BLOOD_QUICKENING_STATE = 28,
- DATA_HEROIC_ATTEMPTS = 29,
- DATA_CROK_SCOURGEBANE = 30,
- DATA_CAPTAIN_ARNATH = 31,
- DATA_CAPTAIN_BRANDON = 32,
- DATA_CAPTAIN_GRONDEL = 33,
- DATA_CAPTAIN_RUPERT = 34,
- DATA_VALITHRIA_TRIGGER = 35,
- DATA_VALITHRIA_LICH_KING = 36,
- DATA_HIGHLORD_TIRION_FORDRING = 37,
- DATA_ARTHAS_PLATFORM = 38,
- DATA_TERENAS_MENETHIL = 39,
- DATA_ENEMY_GUNSHIP = 40,
- DATA_UPPERSPIRE_TELE_ACT = 41,
+ DATA_SAURFANG_EVENT_NPC = 13,
+ DATA_BONED_ACHIEVEMENT = 14,
+ DATA_OOZE_DANCE_ACHIEVEMENT = 15,
+ DATA_PUTRICIDE_TABLE = 16,
+ DATA_NAUSEA_ACHIEVEMENT = 17,
+ DATA_ORB_WHISPERER_ACHIEVEMENT = 18,
+ DATA_PRINCE_KELESETH_GUID = 19,
+ DATA_PRINCE_TALDARAM_GUID = 20,
+ DATA_PRINCE_VALANAR_GUID = 21,
+ DATA_BLOOD_PRINCES_CONTROL = 22,
+ DATA_SINDRAGOSA_FROSTWYRMS = 23,
+ DATA_SPINESTALKER = 24,
+ DATA_RIMEFANG = 25,
+ DATA_COLDFLAME_JETS = 26,
+ DATA_TEAM_IN_INSTANCE = 27,
+ DATA_BLOOD_QUICKENING_STATE = 28,
+ DATA_HEROIC_ATTEMPTS = 29,
+ DATA_CROK_SCOURGEBANE = 30,
+ DATA_CAPTAIN_ARNATH = 31,
+ DATA_CAPTAIN_BRANDON = 32,
+ DATA_CAPTAIN_GRONDEL = 33,
+ DATA_CAPTAIN_RUPERT = 34,
+ DATA_VALITHRIA_TRIGGER = 35,
+ DATA_VALITHRIA_LICH_KING = 36,
+ DATA_HIGHLORD_TIRION_FORDRING = 37,
+ DATA_ARTHAS_PLATFORM = 38,
+ DATA_TERENAS_MENETHIL = 39,
+ DATA_ENEMY_GUNSHIP = 40,
+ DATA_UPPERSPIRE_TELE_ACT = 41,
+ DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL = 42
};
enum CreaturesIds
@@ -247,6 +248,7 @@ enum CreaturesIds
NPC_KINETIC_BOMB_TARGET = 38458,
NPC_KINETIC_BOMB = 38454,
NPC_SHOCK_VORTEX = 38422,
+ NPC_BLOOD_QUEEN_LANA_THEL_COUNCIL = 38004,
// Blood-Queen Lana'thel
NPC_BLOOD_QUEEN_LANA_THEL = 37955,
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index 5354d1772b6..718c0ebe231 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -173,6 +173,12 @@ class instance_icecrown_citadel : public InstanceMapScript
switch (creature->GetEntry())
{
+ case NPC_LORD_MARROWGAR:
+ LordMarrowgarGUID = creature->GetGUID();
+ break;
+ case NPC_LADY_DEATHWHISPER:
+ LadyDeahtwhisperGUID = creature->GetGUID();
+ break;
case NPC_KOR_KRON_GENERAL:
if (TeamInInstance == ALLIANCE)
creature->UpdateEntry(NPC_ALLIANCE_COMMANDER);
@@ -249,6 +255,9 @@ class instance_icecrown_citadel : public InstanceMapScript
case NPC_BLOOD_ORB_CONTROLLER:
BloodCouncilControllerGUID = creature->GetGUID();
break;
+ case NPC_BLOOD_QUEEN_LANA_THEL_COUNCIL:
+ BloodQueenLanaThelCouncilGUID = creature->GetGUID();
+ break;
case NPC_BLOOD_QUEEN_LANA_THEL:
BloodQueenLanaThelGUID = creature->GetGUID();
break;
@@ -712,6 +721,10 @@ class instance_icecrown_citadel : public InstanceMapScript
{
switch (type)
{
+ case DATA_LORD_MARROWGAR:
+ return LordMarrowgarGUID;
+ case DATA_LADY_DEATHWHISPER:
+ return LadyDeahtwhisperGUID;
case DATA_ICECROWN_GUNSHIP_BATTLE:
return GunshipGUID;
case DATA_ENEMY_GUNSHIP:
@@ -738,6 +751,8 @@ class instance_icecrown_citadel : public InstanceMapScript
return BloodCouncilGUIDs[2];
case DATA_BLOOD_PRINCES_CONTROL:
return BloodCouncilControllerGUID;
+ case DATA_BLOOD_QUEEN_LANA_THEL_COUNCIL:
+ return BloodQueenLanaThelCouncilGUID;
case DATA_BLOOD_QUEEN_LANA_THEL:
return BloodQueenLanaThelGUID;
case DATA_CROK_SCOURGEBANE:
@@ -1425,6 +1440,8 @@ class instance_icecrown_citadel : public InstanceMapScript
protected:
EventMap Events;
+ ObjectGuid LordMarrowgarGUID;
+ ObjectGuid LadyDeahtwhisperGUID;
ObjectGuid LadyDeathwisperElevatorGUID;
ObjectGuid GunshipGUID;
ObjectGuid EnemyGunshipGUID;
@@ -1452,6 +1469,7 @@ class instance_icecrown_citadel : public InstanceMapScript
ObjectGuid PutricideTableGUID;
ObjectGuid BloodCouncilGUIDs[3];
ObjectGuid BloodCouncilControllerGUID;
+ ObjectGuid BloodQueenLanaThelCouncilGUID;
ObjectGuid BloodQueenLanaThelGUID;
ObjectGuid CrokScourgebaneGUID;
ObjectGuid CrokCaptainGUIDs[4];
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
index 1683667a02a..f94f7b227bf 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp
@@ -17,43 +17,40 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "SpellInfo.h"
#include "naxxramas.h"
-//Razuvious - NO TEXT sound only
-//8852 aggro01 - Hah hah, I'm just getting warmed up!
-//8853 aggro02 Stand and fight!
-//8854 aggro03 Show me what you've got!
-//8861 slay1 - You should've stayed home!
-//8863 slay2-
-//8858 cmmnd3 - You disappoint me, students!
-//8855 cmmnd1 - Do as I taught you!
-//8856 cmmnd2 - Show them no mercy!
-//8859 cmmnd4 - The time for practice is over! Show me what you've learned!
-//8861 Sweep the leg! Do you have a problem with that?
-//8860 death - An honorable... death...
-//8947 - Aggro Mixed? - ?
-
-#define SOUND_AGGRO RAND(8852, 8853, 8854)
-#define SOUND_SLAY RAND(8861, 8863)
-#define SOUND_COMMND RAND(8855, 8856, 8858, 8859, 8861)
-#define SOUND_DEATH 8860
-#define SOUND_AGGROMIX 8847
+enum Yells
+{
+ SAY_AGGRO = 0,
+ SAY_SLAY = 1,
+ SAY_TAUNTED = 2,
+ SAY_DEATH = 3
+};
enum Spells
{
- SPELL_UNBALANCING_STRIKE = 26613,
- SPELL_DISRUPTING_SHOUT = 29107,
- SPELL_JAGGED_KNIFE = 55550,
- SPELL_HOPELESS = 29125
+ SPELL_UNBALANCING_STRIKE = 26613,
+ SPELL_DISRUPTING_SHOUT = 29107,
+ SPELL_JAGGED_KNIFE = 55550,
+ SPELL_HOPELESS = 29125,
+ SPELL_UNDERSTUDY_TAUNT = 29060,
+ SPELL_UNDERSTUDY_BLOOD_STRIKE = 61696,
+ SPELL_FORCE_OBEDIENCE = 55479
};
enum Events
{
- EVENT_NONE,
+ EVENT_ATTACK = 1,
EVENT_STRIKE,
EVENT_SHOUT,
- EVENT_KNIFE,
- EVENT_COMMAND,
+ EVENT_KNIFE
+};
+
+enum SummonGroups
+{
+ SUMMON_GROUP_10MAN = 1,
+ SUMMON_GROUP_25MAN = 2
};
class boss_razuvious : public CreatureScript
@@ -70,36 +67,60 @@ public:
{
boss_razuviousAI(Creature* creature) : BossAI(creature, BOSS_RAZUVIOUS) { }
- void KilledUnit(Unit* /*victim*/) override
+ void SummonAdds()
{
- if (!(rand32() % 3))
- DoPlaySoundToSet(me, SOUND_SLAY);
+ me->SummonCreatureGroup(SUMMON_GROUP_10MAN);
+ if (Is25ManRaid())
+ me->SummonCreatureGroup(SUMMON_GROUP_25MAN);
}
- void DamageTaken(Unit* pDone_by, uint32& uiDamage) override
+ void InitializeAI() override
{
- // Damage done by the controlled Death Knight understudies should also count toward damage done by players
- if (pDone_by->GetTypeId() == TYPEID_UNIT && (pDone_by->GetEntry() == 16803 || pDone_by->GetEntry() == 29941))
+ if (!me->isDead())
{
- me->LowerPlayerDamageReq(uiDamage);
+ Reset();
+ SummonAdds();
}
}
+ void JustReachedHome() override
+ {
+ _JustReachedHome();
+ SummonAdds();
+ me->GetMotionMaster()->Initialize();
+ }
+
+ void KilledUnit(Unit* victim) override
+ {
+ if (victim->GetTypeId() == TYPEID_PLAYER || (victim->GetTypeId() == TYPEID_UNIT && victim->GetEntry() == NPC_DK_UNDERSTUDY))
+ Talk(SAY_SLAY);
+ }
+
+ void SpellHit(Unit* caster, SpellInfo const* spell) override
+ {
+ if (spell->Id == SPELL_UNDERSTUDY_TAUNT)
+ Talk(SAY_TAUNTED, caster);
+ }
+
void JustDied(Unit* /*killer*/) override
{
- _JustDied();
- DoPlaySoundToSet(me, SOUND_DEATH);
- me->CastSpell(me, SPELL_HOPELESS, true); /// @todo this may affect other creatures
+ Talk(SAY_DEATH);
+ DoCastAOE(SPELL_HOPELESS, true);
+
+ events.Reset();
+ instance->SetBossState(BOSS_RAZUVIOUS, DONE);
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
- DoPlaySoundToSet(me, SOUND_AGGRO);
- events.ScheduleEvent(EVENT_STRIKE, 30000);
- events.ScheduleEvent(EVENT_SHOUT, 25000);
- events.ScheduleEvent(EVENT_COMMAND, 40000);
- events.ScheduleEvent(EVENT_KNIFE, 10000);
+ me->StopMoving();
+ summons.DoZoneInCombat();
+ Talk(SAY_AGGRO);
+ events.ScheduleEvent(EVENT_ATTACK, 7 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_STRIKE, 21 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_SHOUT, 16 * IN_MILLISECONDS);
+ events.ScheduleEvent(EVENT_KNIFE, 10 * IN_MILLISECONDS);
}
void UpdateAI(uint32 diff) override
@@ -113,33 +134,112 @@ public:
{
switch (eventId)
{
+ case EVENT_ATTACK:
+ SetCombatMovement(true);
+ if (Unit* victim = me->GetVictim())
+ me->GetMotionMaster()->MoveChase(victim);
+ break;
case EVENT_STRIKE:
DoCastVictim(SPELL_UNBALANCING_STRIKE);
- events.ScheduleEvent(EVENT_STRIKE, 30000);
+ events.ScheduleEvent(EVENT_STRIKE, 6 * IN_MILLISECONDS);
return;
case EVENT_SHOUT:
DoCastAOE(SPELL_DISRUPTING_SHOUT);
- events.ScheduleEvent(EVENT_SHOUT, 25000);
+ events.ScheduleEvent(EVENT_SHOUT, 16 * IN_MILLISECONDS);
return;
case EVENT_KNIFE:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f))
DoCast(target, SPELL_JAGGED_KNIFE);
- events.ScheduleEvent(EVENT_KNIFE, 10000);
- return;
- case EVENT_COMMAND:
- DoPlaySoundToSet(me, SOUND_COMMND);
- events.ScheduleEvent(EVENT_COMMAND, 40000);
+ events.ScheduleEvent(EVENT_KNIFE, urandms(10,15));
return;
}
}
DoMeleeAttackIfReady();
}
+
+ void Reset() override
+ {
+ SetCombatMovement(false);
+ _Reset();
+ }
};
};
+class npc_dk_understudy : public CreatureScript
+{
+ public:
+ npc_dk_understudy() : CreatureScript("npc_dk_understudy") { }
+
+ struct npc_dk_understudyAI : public ScriptedAI
+ {
+ npc_dk_understudyAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()), bloodStrikeTimer(0) { }
+
+ void EnterCombat(Unit* /*who*/) override
+ {
+ me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
+ if (Creature* razuvious = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_RAZUVIOUS)))
+ razuvious->AI()->DoZoneInCombat(nullptr, 250.0f);
+ }
+
+ void JustReachedHome() override
+ {
+ if (_instance->GetBossState(BOSS_RAZUVIOUS) == DONE)
+ me->DespawnOrUnsummon();
+ else
+ ScriptedAI::JustReachedHome();
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!me->isPossessedByPlayer() && !UpdateVictim())
+ return;
+
+ if (!me->isPossessedByPlayer())
+ {
+ if (diff < bloodStrikeTimer)
+ bloodStrikeTimer -= diff;
+ else
+ DoCastVictim(SPELL_UNDERSTUDY_BLOOD_STRIKE);
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ void OnCharmed(bool apply) override
+ {
+ ScriptedAI::OnCharmed(apply);
+ if (apply)
+ {
+ if (!me->IsInCombat())
+ EnterCombat(nullptr);
+ me->StopMoving();
+ me->SetReactState(REACT_PASSIVE);
+ _charmer = me->GetCharmerGUID();
+ }
+ else
+ {
+ me->SetReactState(REACT_AGGRESSIVE);
+ if (Unit* charmer = ObjectAccessor::GetUnit(*me, _charmer))
+ me->AddThreat(charmer, 100000.0f);
+ DoZoneInCombat(nullptr, 250.0f);
+ }
+ }
+ private:
+ InstanceScript* const _instance;
+ ObjectGuid _charmer;
+ uint32 bloodStrikeTimer;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_dk_understudyAI>(creature);
+ }
+};
+
void AddSC_boss_razuvious()
{
new boss_razuvious();
+ new npc_dk_understudy();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 53ce68d3efc..0e572835a51 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -60,7 +60,6 @@ DoorData const doorData[] =
MinionData const minionData[] =
{
- { NPC_DK_UNDERSTUDY, BOSS_RAZUVIOUS },
{ NPC_SIR, BOSS_HORSEMEN },
{ NPC_THANE, BOSS_HORSEMEN },
{ NPC_LADY, BOSS_HORSEMEN },
@@ -143,6 +142,9 @@ class instance_naxxramas : public InstanceMapScript
case NPC_FAERLINA:
FaerlinaGUID = creature->GetGUID();
break;
+ case NPC_RAZUVIOUS:
+ RazuviousGUID = creature->GetGUID();
+ break;
case NPC_THANE:
ThaneGUID = creature->GetGUID();
break;
@@ -378,6 +380,8 @@ class instance_naxxramas : public InstanceMapScript
return AnubRekhanGUID;
case DATA_FAERLINA:
return FaerlinaGUID;
+ case DATA_RAZUVIOUS:
+ return RazuviousGUID;
case DATA_THANE:
return ThaneGUID;
case DATA_LADY:
@@ -652,6 +656,8 @@ class instance_naxxramas : public InstanceMapScript
ObjectGuid HeiganGUID;
/* The Military Quarter */
+ // Instructor Razuvious
+ ObjectGuid RazuviousGUID;
// Gothik the Harvester
ObjectGuid GothikGateGUID;
// The Four Horsemen
diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
index d2b99784953..e4d15cf84ba 100644
--- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h
+++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
@@ -66,6 +66,7 @@ enum Data64
{
DATA_ANUBREKHAN,
DATA_FAERLINA,
+ DATA_RAZUVIOUS,
DATA_THANE,
DATA_LADY,
DATA_BARON,
@@ -87,6 +88,7 @@ enum CreaturesIds
{
NPC_ANUBREKHAN = 15956,
NPC_FAERLINA = 15953,
+ NPC_RAZUVIOUS = 16061,
NPC_THANE = 16064,
NPC_LADY = 16065,
NPC_BARON = 30549,