Core/Scripts: Rewrite Magtheridons Lair

This commit is contained in:
Keader authored and Aokromes committed 2016-12-16 19:15:24 +01:00
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');
-7
View File
@@ -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)
File diff suppressed because it is too large. Load diff
@@ -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