Core/Scripts: Rewrite Magtheridons Lair
This commit is contained in:
1 parent
087e130c2b
commit
21cc1fd280
5 files changed
+713
-686
No files matched your search
@@ -0,0 +1,138 @@
|
||||
--
|
||||
SET @GUID:=87977;
|
||||
DELETE FROM `creature` WHERE `id` IN(17256,17474) AND `map`=544;
|
||||
DELETE FROM `linked_respawn` WHERE `guid` IN(90982,90981,90980,90979,90978); -- Delete Linked respawn from channelers
|
||||
INSERT INTO `creature` (`guid`,`id`,`map`,`zoneId`,`areaId`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`,`VerifiedBuild`) VALUES
|
||||
(@GUID,17474,544,0,0,1,1,15435,0,11.2283,2.97198,-0.320875,1.14748,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+1,17474,544,0,0,1,1,15435,0,10.2283,1.97198,-0.320875,1.41097,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+2,17474,544,0,0,1,1,15435,0,-44.0663,21.973,-0.329128,5.15817,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+3,17474,544,0,0,1,1,15435,0,-44.3225,22.0454,-0.329129,5.87281,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+4,17474,544,0,0,1,1,15435,0,-13.1443,-26.8186,-0.412466,3.70357,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+5,17474,544,0,0,1,1,15435,0,-14.3701,-24.6551,-0.412466,1.99314,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+6,17474,544,0,0,1,1,15435,0,-45.6199,-16.1769,-0.329109,5.65524,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+7,17474,544,0,0,1,1,15435,0,-44.6199,-15.1769,-0.329109,1.5311,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+8,17474,544,0,0,1,1,15435,0,-17.5166,2.10518,-0.320812,5.98416,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+9,17474,544,0,0,1,1,15435,0,-16.5166,3.10518,-0.320812,0.0813029,7200,15,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+10,17474,544,0,0,1,1,15435,0,-12.4546,35.4987,-0.319343,2.09894,7200,5,0,3965,0,1,0,0,0,0),
|
||||
(@GUID+11,17474,544,0,0,1,1,15435,0,-11.6249,31.6464,-0.412482,4.08569,7200,15,0,3965,0,1,0,0,0,0);
|
||||
|
||||
-- Target Trigger should walk in ground, not fly
|
||||
UPDATE `creature_template` SET `InhabitType`=1 WHERE `entry`=17474;
|
||||
-- Added Taunt Immunity in Magtheridon.
|
||||
UPDATE `creature_template` SET `spell2`=0, `spell3`=0, `spell4`=0, `flags_extra` = `flags_extra` |256 WHERE `entry`=17257;
|
||||
|
||||
-- Delete addon aura from Magtheridon
|
||||
DELETE FROM `creature_addon` WHERE `guid`=91254;
|
||||
|
||||
-- Added missing Fire Blast aura in Burning Abyssal creature
|
||||
DELETE FROM `creature_template_addon` WHERE `entry`=17454;
|
||||
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES
|
||||
(17454, 0, 0, 0, 1, 0, 30516);
|
||||
-- Removed script from Burning Abyssal creature
|
||||
UPDATE `creature_template` SET `ScriptName`='' WHERE `entry`=17454;
|
||||
|
||||
-- Updated condition for Shadow Grasp hits Hellfire Raid Trigger
|
||||
UPDATE `conditions` SET `ConditionValue2`=17376, `Comment`='Effect_0 hits Hellfire Raid Trigger' WHERE `SourceEntry`=30410 AND `SourceTypeOrReferenceId`=13 AND `SourceGroup`=1;
|
||||
-- Added condition for Blaze hit Target Trigger
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=30541;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(13,1,30541,0,0,31,0,3,17474,0,0,0,0,'','Effect_0 hits Target Trigger');
|
||||
-- Added condition for Quake hits Target Trigger
|
||||
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=30657;
|
||||
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
|
||||
(13,7,30657,0,0,31,0,3,17474,0,0,0,0,'','Effect_0, Effect_1, Effect_2 hits Target Trigger');
|
||||
|
||||
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=30658;
|
||||
INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
|
||||
(30658, 30571, 0, 'Quake Trigger Quake Knockback');
|
||||
|
||||
-- Making a summon group for Magtheridon.
|
||||
DELETE FROM `creature_summon_groups` WHERE `summonerId`=17257; -- Magtheridon
|
||||
INSERT INTO `creature_summon_groups` (`summonerId`,`summonerType`,`groupId`,`entry`,`position_x`,`position_y`,`position_z`,`orientation`,`summonType`,`summonTime`) VALUES
|
||||
(17257,0,1,17256,-31.7645,-35.8374,0.714268,1.37881,6,6000), -- Hellfire Channelers
|
||||
(17257,0,1,17256,10.3369,-19.7942,0.714241,2.53073,6,6000),
|
||||
(17257,0,1,17256,10.4777,23.9914,0.714224,3.66519,6,6000),
|
||||
(17257,0,1,17256,-31.9479,40.2201,0.714251,4.93928,6,6000),
|
||||
(17257,0,1,17256,-55.6891,2.17024,0.71428,0.05236,6,6000);
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN('spell_magtheridon_blaze_target','spell_magtheridon_shadow_grasp','spell_magtheridon_shadow_grasp_visual');
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(30541,'spell_magtheridon_blaze_target'),
|
||||
(30410,'spell_magtheridon_shadow_grasp'),
|
||||
(30166,'spell_magtheridon_shadow_grasp_visual');
|
||||
|
||||
DELETE FROM `spell_linked_spell` WHERE `spell_trigger`=-30410 AND `spell_effect`=44032 AND `type`=0;
|
||||
|
||||
UPDATE `creature_template` SET `flags_extra`=128, `ScriptName`='npc_magtheridon_room' WHERE `entry`=17516;
|
||||
|
||||
UPDATE `spell_dbc` SET `AttributesEx3`=262400, `EffectImplicitTargetA1`=53, `EffectImplicitTargetB1`=0, `EffectRadiusIndex1`=16, `MaxAffectedTargets`=1, `RangeIndex`=13 WHERE `Id`=30630;
|
||||
|
||||
DELETE FROM `creature_text` WHERE `entry`=17257;
|
||||
INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
|
||||
(17257,0,0,'Wretched, meddling insects! Release me, and perhaps I will grant you a merciful death!',14,0,100,0,0,10247,17339,0,'Magtheridon - Taunt01'),
|
||||
(17257,0,1,'Vermin! Leeches! Take my blood and choke on it!',14,0,100,0,0,10248,17340,0,'Magtheridon - Taunt02'),
|
||||
(17257,0,2,'Illidan is an arrogant fool! I will crush him and reclaim Outland as my own!',14,0,100,0,0,10249,17341,0,'Magtheridon - Taunt03'),
|
||||
(17257,0,3,'Away, you mindless parasites! My blood is my own!',14,0,100,0,0,10250,17342,0,'Magtheridon - Taunt04'),
|
||||
(17257,0,4,'How long do you believe your pathetic sorcery can hold me?',14,0,100,0,0,10251,17343,0,'Magtheridon - Taunt05'),
|
||||
(17257,0,5,'My blood will be the end of you!',14,0,100,0,0,10252,17344,0,'Magtheridon - Taunt06'),
|
||||
(17257,1,0,'I... am... unleashed!',14,0,100,15,0,10253,17346,0,'Magtheridon - Free'),
|
||||
(17257,2,0,'Did you think me weak? Soft? Who is the weak one now?',14,0,100,0,0,10255,17349,0,'Magtheridon - Slay'),
|
||||
(17257,3,0,'Not again! Not again...',14,0,100,0,0,10256,17348,0,'Magtheridon - Banished'),
|
||||
(17257,4,0,'I will not be taken so easily! Let the walls of this prison tremble... and fall!',14,0,100,0,0,10257,17336,0,'Magtheridon - Collapse'),
|
||||
(17257,5,0,'The Legion will consume you all!',14,0,100,0,0,10258,17347,0,'Magtheridon - Death'),
|
||||
(17257,6,0,'%s\'s bonds begin to weaken!',16,0,100,0,0,0,13689,0,'Magtheridon - Weaken'),
|
||||
(17257,7,0,'%s is nearly free of his bonds!',16,0,100,0,0,0,13690,0,'Magtheridon - Nearly free'),
|
||||
(17257,8,0,'%s breaks free!',16,0,100,0,0,0,13691,0,'Magtheridon - Breaks free'),
|
||||
(17257,9,0,'%s begins to cast Blast Nova!',41,0,100,0,0,0,18739,0,'Magtheridon - Blast Nova');
|
||||
|
||||
UPDATE `smart_scripts` SET `event_chance`=100 WHERE `entryorguid`=18829 AND `source_type`=0;
|
||||
|
||||
-- Channel Visual Group
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` IN(-90985,-90986,-90987) 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
|
||||
(-90986,0,0,0,0,0,100,2,4800,4800,18400,27400,11,39175,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Bolt Volley\''),
|
||||
(-90986,0,1,0,0,0,100,2,9000,9000,14500,21500,11,34437,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Death Coil\''),
|
||||
(-90986,0,2,0,0,0,100,2,3000,3000,17000,18000,11,34435,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Rain of Fire\''),
|
||||
(-90986,0,3,0,0,0,100,2,4100,4100,20000,23500,11,34436,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Burst\''),
|
||||
(-90986,0,4,0,0,0,100,2,1400,1400,7000,9000,11,34439,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Unstable Affliction\''),
|
||||
(-90986,0,5,0,0,0,100,2,57700,57700,50000,50000,11,34441,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Word: Pain\''),
|
||||
(-90986,0,6,0,1,0,100,1,1000,1000,0,0,11,33827,0,0,0,0,0,19,15384,20,0,0,0,0,0,'Hellfire Warder - Ooc no repeat - Cast Hellfire Warder Channel Visual'),
|
||||
(-90987,0,0,0,0,0,100,2,4800,4800,18400,27400,11,39175,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Bolt Volley\''),
|
||||
(-90987,0,1,0,0,0,100,2,9000,9000,14500,21500,11,34437,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Death Coil\''),
|
||||
(-90987,0,2,0,0,0,100,2,3000,3000,17000,18000,11,34435,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Rain of Fire\''),
|
||||
(-90987,0,3,0,0,0,100,2,4100,4100,20000,23500,11,34436,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Burst\''),
|
||||
(-90987,0,4,0,0,0,100,2,1400,1400,7000,9000,11,34439,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Unstable Affliction\''),
|
||||
(-90987,0,5,0,0,0,100,2,57700,57700,50000,50000,11,34441,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Word: Pain\''),
|
||||
(-90987,0,6,0,1,0,100,1,1000,1000,0,0,11,33827,0,0,0,0,0,19,15384,20,0,0,0,0,0,'Hellfire Warder - Ooc no repeat - Cast Hellfire Warder Channel Visual'),
|
||||
(-90985,0,0,0,0,0,100,2,4800,4800,18400,27400,11,39175,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Bolt Volley\''),
|
||||
(-90985,0,1,0,0,0,100,2,9000,9000,14500,21500,11,34437,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Death Coil\''),
|
||||
(-90985,0,2,0,0,0,100,2,3000,3000,17000,18000,11,34435,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Rain of Fire\''),
|
||||
(-90985,0,3,0,0,0,100,2,4100,4100,20000,23500,11,34436,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Burst\''),
|
||||
(-90985,0,4,0,0,0,100,2,1400,1400,7000,9000,11,34439,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Unstable Affliction\''),
|
||||
(-90985,0,5,0,0,0,100,2,57700,57700,50000,50000,11,34441,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Word: Pain\''),
|
||||
(-90985,0,6,0,1,0,100,1,1000,1000,0,0,11,33827,0,0,0,0,0,19,15384,20,0,0,0,0,0,'Hellfire Warder - Ooc no repeat - Cast Hellfire Warder Channel Visual');
|
||||
|
||||
-- Green Beam group
|
||||
DELETE FROM `smart_scripts` WHERE `entryorguid` IN(-91247,-91248,-91249) 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
|
||||
(-91248,0,0,0,0,0,100,2,4800,4800,18400,27400,11,39175,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Bolt Volley\''),
|
||||
(-91248,0,1,0,0,0,100,2,9000,9000,14500,21500,11,34437,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Death Coil\''),
|
||||
(-91248,0,2,0,0,0,100,2,3000,3000,17000,18000,11,34435,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Rain of Fire\''),
|
||||
(-91248,0,3,0,0,0,100,2,4100,4100,20000,23500,11,34436,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Burst\''),
|
||||
(-91248,0,4,0,0,0,100,2,1400,1400,7000,9000,11,34439,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Unstable Affliction\''),
|
||||
(-91248,0,5,0,0,0,100,2,57700,57700,50000,50000,11,34441,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Word: Pain\''),
|
||||
(-91248,0,6,0,1,0,100,1,1000,1000,0,0,11,33346,0,0,0,0,0,19,15384,20,0,0,0,0,0,'Hellfire Warder - Ooc no repeat - Cast Green Beam'),
|
||||
(-91247,0,0,0,0,0,100,2,4800,4800,18400,27400,11,39175,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Bolt Volley\''),
|
||||
(-91247,0,1,0,0,0,100,2,9000,9000,14500,21500,11,34437,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Death Coil\''),
|
||||
(-91247,0,2,0,0,0,100,2,3000,3000,17000,18000,11,34435,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Rain of Fire\''),
|
||||
(-91247,0,3,0,0,0,100,2,4100,4100,20000,23500,11,34436,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Burst\''),
|
||||
(-91247,0,4,0,0,0,100,2,1400,1400,7000,9000,11,34439,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Unstable Affliction\''),
|
||||
(-91247,0,5,0,0,0,100,2,57700,57700,50000,50000,11,34441,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Word: Pain\''),
|
||||
(-91247,0,6,0,1,0,100,1,1000,1000,0,0,11,33346,0,0,0,0,0,19,15384,20,0,0,0,0,0,'Hellfire Warder - Ooc no repeat - Cast Green Beam'),
|
||||
(-91249,0,0,0,0,0,100,2,4800,4800,18400,27400,11,39175,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Bolt Volley\''),
|
||||
(-91249,0,1,0,0,0,100,2,9000,9000,14500,21500,11,34437,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Death Coil\''),
|
||||
(-91249,0,2,0,0,0,100,2,3000,3000,17000,18000,11,34435,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Rain of Fire\''),
|
||||
(-91249,0,3,0,0,0,100,2,4100,4100,20000,23500,11,34436,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Burst\''),
|
||||
(-91249,0,4,0,0,0,100,2,1400,1400,7000,9000,11,34439,0,0,0,0,0,5,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Unstable Affliction\''),
|
||||
(-91249,0,5,0,0,0,100,2,57700,57700,50000,50000,11,34441,0,0,0,0,0,2,0,0,0,0,0,0,0,'Hellfire Warder - In Combat - Cast \'Shadow Word: Pain\''),
|
||||
(-91249,0,6,0,1,0,100,1,1000,1000,0,0,11,33346,0,0,0,0,0,19,15384,20,0,0,0,0,0,'Hellfire Warder - Ooc no repeat - Cast Green Beam');
|
||||
@@ -3048,13 +3048,6 @@ void SpellMgr::LoadSpellInfoCorrections()
|
||||
case 42835: // Spout, remove damage effect, only anim is needed
|
||||
spellInfo->Effects[EFFECT_0].Effect = 0;
|
||||
break;
|
||||
case 30657: // Quake
|
||||
spellInfo->Effects[EFFECT_0].TriggerSpell = 30571;
|
||||
break;
|
||||
case 30541: // Blaze (needs conditions entry)
|
||||
spellInfo->Effects[EFFECT_0].TargetA = SpellImplicitTargetInfo(TARGET_UNIT_TARGET_ENEMY);
|
||||
spellInfo->Effects[EFFECT_0].TargetB = SpellImplicitTargetInfo();
|
||||
break;
|
||||
case 63665: // Charge (Argent Tournament emote on riders)
|
||||
case 31298: // Sleep (needs target selection script)
|
||||
case 51904: // Summon Ghouls On Scarlet Crusade (this should use conditions table, script for this spell needs to be fixed)
|
||||
|
||||
+448
-480
File diff suppressed because it is too large.
Load diff
+79
-193
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
|
||||
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
@@ -16,234 +15,121 @@
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* ScriptData
|
||||
SDName: Instance_Magtheridons_Lair
|
||||
SD%Complete: 100
|
||||
SDComment:
|
||||
SDCategory: Hellfire Citadel, Magtheridon's lair
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "InstanceScript.h"
|
||||
#include "magtheridons_lair.h"
|
||||
|
||||
enum Spells
|
||||
BossBoundaryData const boundaries =
|
||||
{
|
||||
SPELL_SOUL_TRANSFER = 30531, // core bug, does not support target 7
|
||||
SPELL_BLAZE_TARGET = 30541, // core bug, does not support target 7
|
||||
{ DATA_MAGTHERIDON, new CircleBoundary(Position(-18.70f, 2.24f), 52.30) }
|
||||
};
|
||||
|
||||
#define CHAMBER_CENTER_X -15.14
|
||||
#define CHAMBER_CENTER_Y 1.8
|
||||
#define CHAMBER_CENTER_Z -0.4
|
||||
DoorData const doorData[] =
|
||||
{
|
||||
{ GO_MAGTHERIDON_DOOR, DATA_MAGTHERIDON, DOOR_TYPE_ROOM },
|
||||
{ 0, 0, DOOR_TYPE_ROOM } // END
|
||||
};
|
||||
|
||||
#define MAX_ENCOUNTER 2
|
||||
ObjectData const creatureData[] =
|
||||
{
|
||||
{ NPC_MAGTHERIDON, DATA_MAGTHERIDON },
|
||||
{ NPC_WORLD_TRIGGER, DATA_WORLD_TRIGGER },
|
||||
{ 0, 0 } // END
|
||||
|
||||
#define EMOTE_BONDS_WEAKEN "'s bonds begin to weaken!"
|
||||
};
|
||||
|
||||
ObjectData const gameObjectData[] =
|
||||
{
|
||||
{ GO_MAGTHERIDON_HALL, DATA_MAGTHERIDON_HALL },
|
||||
{ GO_MAGTHERIDON_COLUMN_0, DATA_MAGTHERIDON_COLUMN_0 },
|
||||
{ GO_MAGTHERIDON_COLUMN_1, DATA_MAGTHERIDON_COLUMN_1 },
|
||||
{ GO_MAGTHERIDON_COLUMN_2, DATA_MAGTHERIDON_COLUMN_2 },
|
||||
{ GO_MAGTHERIDON_COLUMN_3, DATA_MAGTHERIDON_COLUMN_3 },
|
||||
{ GO_MAGTHERIDON_COLUMN_4, DATA_MAGTHERIDON_COLUMN_4 },
|
||||
{ GO_MAGTHERIDON_COLUMN_5, DATA_MAGTHERIDON_COLUMN_5 },
|
||||
{ 0, 0 } //END
|
||||
};
|
||||
|
||||
static DataTypes const collapseObjectDatas[] =
|
||||
{
|
||||
DATA_MAGTHERIDON_COLUMN_0,
|
||||
DATA_MAGTHERIDON_COLUMN_1,
|
||||
DATA_MAGTHERIDON_COLUMN_2,
|
||||
DATA_MAGTHERIDON_COLUMN_3,
|
||||
DATA_MAGTHERIDON_COLUMN_4,
|
||||
DATA_MAGTHERIDON_COLUMN_5,
|
||||
};
|
||||
|
||||
class instance_magtheridons_lair : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
instance_magtheridons_lair()
|
||||
: InstanceMapScript("instance_magtheridons_lair", 544)
|
||||
{
|
||||
}
|
||||
instance_magtheridons_lair() : InstanceMapScript("instance_magtheridons_lair", 544) { }
|
||||
|
||||
struct instance_magtheridons_lair_InstanceMapScript : public InstanceScript
|
||||
{
|
||||
instance_magtheridons_lair_InstanceMapScript(Map* map) : InstanceScript(map)
|
||||
{
|
||||
SetHeaders(DataHeader);
|
||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||
|
||||
CageTimer = 0;
|
||||
RespawnTimer = 0;
|
||||
}
|
||||
|
||||
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
||||
|
||||
ObjectGuid MagtheridonGUID;
|
||||
GuidSet ChannelerGUID;
|
||||
ObjectGuid DoorGUID;
|
||||
GuidSet ColumnGUID;
|
||||
|
||||
uint32 CageTimer;
|
||||
uint32 RespawnTimer;
|
||||
|
||||
bool IsEncounterInProgress() const override
|
||||
{
|
||||
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
if (m_auiEncounter[i] == IN_PROGRESS)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* creature) override
|
||||
{
|
||||
switch (creature->GetEntry())
|
||||
{
|
||||
case 17257:
|
||||
MagtheridonGUID = creature->GetGUID();
|
||||
break;
|
||||
case 17256:
|
||||
ChannelerGUID.insert(creature->GetGUID());
|
||||
break;
|
||||
}
|
||||
SetBossNumber(EncounterCount);
|
||||
LoadDoorData(doorData);
|
||||
LoadBossBoundaries(boundaries);
|
||||
LoadObjectData(creatureData, gameObjectData);
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* go) override
|
||||
{
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case 181713:
|
||||
go->SetUInt32Value(GAMEOBJECT_FLAGS, 0);
|
||||
break;
|
||||
case 183847:
|
||||
DoorGUID = go->GetGUID();
|
||||
break;
|
||||
case 184653: // hall
|
||||
case 184634: // six columns
|
||||
case 184635:
|
||||
case 184636:
|
||||
case 184637:
|
||||
case 184638:
|
||||
case 184639:
|
||||
ColumnGUID.insert(go->GetGUID());
|
||||
break;
|
||||
}
|
||||
InstanceScript::OnGameObjectCreate(go);
|
||||
|
||||
if (go->GetEntry() == GO_MANTICRON_CUBE)
|
||||
cubesGUIDS.push_back(go->GetGUID());
|
||||
}
|
||||
|
||||
ObjectGuid GetGuidData(uint32 type) const override
|
||||
void OnCreatureCreate(Creature* creature) override
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DATA_MAGTHERIDON:
|
||||
return MagtheridonGUID;
|
||||
}
|
||||
return ObjectGuid::Empty;
|
||||
InstanceScript::OnCreatureCreate(creature);
|
||||
|
||||
if (creature->GetEntry() == NPC_HELLFIRE_WARDER)
|
||||
warderGUIDS.push_back(creature->GetGUID());
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data) override
|
||||
void SetData(uint32 data, uint32 value) override
|
||||
{
|
||||
switch (type)
|
||||
switch (data)
|
||||
{
|
||||
case DATA_MAGTHERIDON_EVENT:
|
||||
m_auiEncounter[0] = data;
|
||||
if (data == NOT_STARTED)
|
||||
RespawnTimer = 10000;
|
||||
if (data != IN_PROGRESS)
|
||||
HandleGameObject(DoorGUID, true);
|
||||
break;
|
||||
case DATA_CHANNELER_EVENT:
|
||||
switch (data)
|
||||
{
|
||||
case NOT_STARTED: // Reset all channelers once one is reset.
|
||||
if (m_auiEncounter[1] != NOT_STARTED)
|
||||
{
|
||||
m_auiEncounter[1] = NOT_STARTED;
|
||||
for (GuidSet::const_iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i)
|
||||
case DATA_MANTICRON_CUBE:
|
||||
for (ObjectGuid gobGUID : cubesGUIDS)
|
||||
if (GameObject* cube = instance->GetGameObject(gobGUID))
|
||||
{
|
||||
if (Creature* Channeler = instance->GetCreature(*i))
|
||||
{
|
||||
if (Channeler->IsAlive())
|
||||
Channeler->AI()->EnterEvadeMode();
|
||||
else
|
||||
Channeler->Respawn();
|
||||
}
|
||||
}
|
||||
CageTimer = 0;
|
||||
HandleGameObject(DoorGUID, true);
|
||||
}
|
||||
break;
|
||||
case IN_PROGRESS: // Event start.
|
||||
if (m_auiEncounter[1] != IN_PROGRESS)
|
||||
{
|
||||
m_auiEncounter[1] = IN_PROGRESS;
|
||||
// Let all five channelers aggro.
|
||||
for (GuidSet::const_iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i)
|
||||
{
|
||||
Creature* Channeler = instance->GetCreature(*i);
|
||||
if (Channeler && Channeler->IsAlive())
|
||||
Channeler->AI()->AttackStart(Channeler->SelectNearestTarget(999));
|
||||
}
|
||||
// Release Magtheridon after two minutes.
|
||||
Creature* Magtheridon = instance->GetCreature(MagtheridonGUID);
|
||||
if (Magtheridon && Magtheridon->IsAlive())
|
||||
{
|
||||
Magtheridon->TextEmote(EMOTE_BONDS_WEAKEN);
|
||||
CageTimer = 120000;
|
||||
}
|
||||
HandleGameObject(DoorGUID, false);
|
||||
}
|
||||
break;
|
||||
case DONE: // Add buff and check if all channelers are dead.
|
||||
for (GuidSet::const_iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i)
|
||||
{
|
||||
Creature* Channeler = instance->GetCreature(*i);
|
||||
if (Channeler && Channeler->IsAlive())
|
||||
{
|
||||
//Channeler->CastSpell(Channeler, SPELL_SOUL_TRANSFER, true);
|
||||
data = IN_PROGRESS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
m_auiEncounter[1] = data;
|
||||
break;
|
||||
case DATA_COLLAPSE:
|
||||
// true - collapse / false - reset
|
||||
for (GuidSet::const_iterator i = ColumnGUID.begin(); i != ColumnGUID.end(); ++i)
|
||||
DoUseDoorOrButton(*i);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 type) const override
|
||||
{
|
||||
if (type == DATA_MAGTHERIDON_EVENT)
|
||||
return m_auiEncounter[0];
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Update(uint32 diff) override
|
||||
{
|
||||
if (CageTimer)
|
||||
{
|
||||
if (CageTimer <= diff)
|
||||
{
|
||||
Creature* Magtheridon = instance->GetCreature(MagtheridonGUID);
|
||||
if (Magtheridon && Magtheridon->IsAlive())
|
||||
{
|
||||
Magtheridon->ClearUnitState(UNIT_STATE_STUNNED);
|
||||
Magtheridon->AI()->AttackStart(Magtheridon->SelectNearestTarget(999));
|
||||
}
|
||||
CageTimer = 0;
|
||||
} else CageTimer -= diff;
|
||||
}
|
||||
|
||||
if (RespawnTimer)
|
||||
{
|
||||
if (RespawnTimer <= diff)
|
||||
{
|
||||
for (GuidSet::const_iterator i = ChannelerGUID.begin(); i != ChannelerGUID.end(); ++i)
|
||||
{
|
||||
if (Creature* Channeler = instance->GetCreature(*i))
|
||||
{
|
||||
if (Channeler->IsAlive())
|
||||
Channeler->AI()->EnterEvadeMode();
|
||||
if (value == ACTION_ENABLE)
|
||||
cube->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
else
|
||||
Channeler->Respawn();
|
||||
cube->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
}
|
||||
RespawnTimer = 0;
|
||||
} else RespawnTimer -= diff;
|
||||
break;
|
||||
case DATA_COLLAPSE:
|
||||
if (GameObject* hall = GetGameObject(DATA_MAGTHERIDON_HALL))
|
||||
HandleGameObject(ObjectGuid::Empty, value == ACTION_ENABLE ? true : false, hall);
|
||||
break;
|
||||
case DATA_COLLAPSE_2:
|
||||
for (DataTypes data : collapseObjectDatas)
|
||||
if (GameObject* go = GetGameObject(data))
|
||||
HandleGameObject(ObjectGuid::Empty, value == ACTION_ENABLE ? true : false, go);
|
||||
break;
|
||||
case DATA_CALL_WARDERS:
|
||||
for (ObjectGuid warderGuid : warderGUIDS)
|
||||
if (Creature* warder = instance->GetCreature(warderGuid))
|
||||
if (warder->IsAlive())
|
||||
warder->SetInCombatWithZone();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
GuidVector cubesGUIDS;
|
||||
GuidVector warderGUIDS;
|
||||
};
|
||||
|
||||
InstanceScript* GetInstanceScript(InstanceMap* map) const override
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
|
||||
* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
@@ -21,13 +20,56 @@
|
||||
|
||||
#define DataHeader "ML"
|
||||
|
||||
|
||||
uint32 const EncounterCount = 1;
|
||||
|
||||
enum MLDataTypes
|
||||
{
|
||||
DATA_MAGTHERIDON_EVENT = 1,
|
||||
DATA_MAGTHERIDON = 3,
|
||||
DATA_CHANNELER_EVENT = 2,
|
||||
DATA_COLLAPSE = 6,
|
||||
DATA_CHANNELER = 9
|
||||
DATA_MAGTHERIDON = 0,
|
||||
DATA_WORLD_TRIGGER = 1,
|
||||
DATA_MAGTHERIDON_HALL = 2,
|
||||
DATA_MAGTHERIDON_COLUMN_0 = 3,
|
||||
DATA_MAGTHERIDON_COLUMN_1 = 4,
|
||||
DATA_MAGTHERIDON_COLUMN_2 = 5,
|
||||
DATA_MAGTHERIDON_COLUMN_3 = 6,
|
||||
DATA_MAGTHERIDON_COLUMN_4 = 7,
|
||||
DATA_MAGTHERIDON_COLUMN_5 = 8,
|
||||
DATA_MANTICRON_CUBE = 9,
|
||||
DATA_COLLAPSE = 10,
|
||||
DATA_COLLAPSE_2 = 11,
|
||||
DATA_CALL_WARDERS = 12
|
||||
};
|
||||
|
||||
enum Actions
|
||||
{
|
||||
ACTION_ENABLE = 1,
|
||||
ACTION_DISABLE = 2
|
||||
};
|
||||
|
||||
enum CreatureIds
|
||||
{
|
||||
NPC_MAGTHERIDON = 17257,
|
||||
NPC_ABYSSAL = 17454,
|
||||
NPC_HELLFIRE_CHANNELLER = 17256,
|
||||
NPC_TARGET_TRIGGER = 17474,
|
||||
NPC_WORLD_TRIGGER = 21252,
|
||||
NPC_HELFIRE_RAID_TRIGGER = 17376,
|
||||
NPC_OLDWORLD_TRIGGER = 15384,
|
||||
NPC_MAGTHERIDON_ROOM = 17516,
|
||||
NPC_HELLFIRE_WARDER = 18829
|
||||
};
|
||||
|
||||
enum GameObjectIds
|
||||
{
|
||||
GO_MAGTHERIDON_DOOR = 183847,
|
||||
GO_MANTICRON_CUBE = 181713,
|
||||
GO_MAGTHERIDON_HALL = 184653,
|
||||
GO_MAGTHERIDON_COLUMN_0 = 184638,
|
||||
GO_MAGTHERIDON_COLUMN_1 = 184639,
|
||||
GO_MAGTHERIDON_COLUMN_2 = 184635,
|
||||
GO_MAGTHERIDON_COLUMN_3 = 184634,
|
||||
GO_MAGTHERIDON_COLUMN_4 = 184636,
|
||||
GO_MAGTHERIDON_COLUMN_5 = 184637
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user