mirror of
https://github.com/azerothcore/azerothcore-wotlk.git
synced 2025-11-10 12:24:22 +08:00
Merge branch 'master' into Vmaps
This commit is contained in:
commit
b4dce52620
8
data/sql/updates/db_world/2025_10_31_00.sql
Normal file
8
data/sql/updates/db_world/2025_10_31_00.sql
Normal file
@ -0,0 +1,8 @@
|
||||
-- DB update 2025_10_30_01 -> 2025_10_31_00
|
||||
--
|
||||
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 27966;
|
||||
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 27966) AND (`source_type` = 0) AND (`id` IN (0, 1, 2));
|
||||
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`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
|
||||
(27966, 0, 0, 0, 0, 0, 100, 7, 6000, 14000, 20000, 23000, 0, 0, 11, 51507, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Rune Controller - In Combat - Cast \'Summon Shardling\' (No Repeat) (Dungeon)'),
|
||||
(27966, 0, 1, 0, 0, 0, 100, 6, 5000, 10000, 17000, 25000, 0, 0, 11, 51503, 128, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Rune Controller - In Combat - Cast \'Domination\' (Dungeon)'),
|
||||
(27966, 0, 2, 0, 16, 0, 100, 6, 51805, 15, 14000, 17000, 0, 0, 11, 51805, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Dark Rune Controller - On Friendly Unit Missing Buff \'Crystalline Growth\' - Cast \'Crystalline Growth\' (Dungeon)');
|
||||
4
data/sql/updates/db_world/2025_10_31_01.sql
Normal file
4
data/sql/updates/db_world/2025_10_31_01.sql
Normal file
@ -0,0 +1,4 @@
|
||||
-- DB update 2025_10_31_00 -> 2025_10_31_01
|
||||
|
||||
-- Set Rooted
|
||||
UPDATE `creature_template_movement` SET `Rooted` = 1 WHERE (`CreatureId` = 16129);
|
||||
208
data/sql/updates/db_world/2025_10_31_02.sql
Normal file
208
data/sql/updates/db_world/2025_10_31_02.sql
Normal file
@ -0,0 +1,208 @@
|
||||
-- DB update 2025_10_31_01 -> 2025_10_31_02
|
||||
-- | present in spelldifficulty.dbc | new ->
|
||||
DELETE FROM `spelldifficulty_dbc` WHERE `ID` IN (66809,70867,70877,70879,70994,71623,68186,69037,72224,70873,28783,28785,28732,28884,57374,28863,28883,57376,28882,28371,28374,29317,28157,28158,29998,28478,28479,29865,29204,29484,28741,54121,54123,29213,29212,41926,55543,28531,55697,28542,54529,28135,28167,64717,64776,61916,61890,61903,61911,64637,62274,62269,62054,61879,61869,61915,61887,64389,64422,64666,64375,64478,64496,64458,62584,62528,62623,64587,62437,62862,62861,62451,62240,62217,62310,62275,62283,62285,62325,62337,62664,62653,62654,62648,62649,62589,62598,62478,65123,63711,62680,62546,62717,62548,65722,62836,63356,63573,62030,63716,63347,63629,63821,63766,62166,62056,63818,63666,62997,66351,63387,64019,63689,64352,64348,64626,64016,63317,46763,63809,64758,62131,62577,62334,62335,62333,62315,62316,62331,62332,62327,62328,62321,62613,62411,63024,63018,65737,64203,64227,63795,64125,64159,58695,58960,58663,58666,64213,64216);
|
||||
INSERT INTO `spelldifficulty_dbc` (`ID`,`DifficultySpellID_1`,`DifficultySpellID_2`,`DifficultySpellID_3`,`DifficultySpellID_4`) VALUES
|
||||
-- Trial of the Crusader
|
||||
-- Anubarak
|
||||
(68186,68186,68515,68186,68515),
|
||||
|
||||
-- ICC
|
||||
-- Lich King
|
||||
(69037,69037,74361,69037,74361),
|
||||
-- Valithria
|
||||
(72224,72224,72224,72480,72480),
|
||||
(70873,70873,70873,71941,71941),
|
||||
|
||||
-- Naxxramas
|
||||
-- Anubrekhan
|
||||
(28783,28783,56090,0,0),
|
||||
(28785,28785,54021,0,0),
|
||||
-- Faerlina
|
||||
(28732,28732,54097,0,0),
|
||||
-- Horsemen
|
||||
(28884,28884,57467,0,0),
|
||||
(57374,57374,57464,0,0),
|
||||
(28863,28863,57463,0,0),
|
||||
(28883,28883,57466,0,0),
|
||||
(57376,57376,57465,0,0),
|
||||
(28882,28882,57369,0,0),
|
||||
-- Gluth
|
||||
(28371,28371,54427,0,0),
|
||||
(28374,28374,54426,0,0),
|
||||
-- Gothik
|
||||
(29317,29317,56405,0,0),
|
||||
-- Grobbulus
|
||||
(28157,28157,54364,0,0),
|
||||
(28158,28158,54362,0,0),
|
||||
-- Heigan
|
||||
(29998,29998,55011,0,0),
|
||||
-- Kelthuzad
|
||||
(28478,28478,55802,0,0),
|
||||
(28479,28479,55807,0,0),
|
||||
-- Loatheb
|
||||
(29865,29865,55053,0,0),
|
||||
(29204,29204,55052,0,0),
|
||||
-- Maexxna
|
||||
(29484,29484,54125,0,0),
|
||||
(28741,28741,54122,0,0),
|
||||
(54121,54121,28776,0,0),
|
||||
(54123,54123,54124,0,0),
|
||||
-- Noth
|
||||
(29213,29213,54835,0,0),
|
||||
(29212,29212,54814,0,0),
|
||||
-- Patchwerk
|
||||
(41926,41926,59192,0,0),
|
||||
-- Razuvious
|
||||
(55543,55543,29107,0,0),
|
||||
-- Sapphiron
|
||||
(28531,28531,55799,0,0),
|
||||
(55697,55697,55696,0,0),
|
||||
(28542,28542,55665,0,0),
|
||||
-- Thaddius
|
||||
(54529,54529,28134,0,0),
|
||||
(28135,28135,54528,0,0),
|
||||
(28167,28167,54531,0,0),
|
||||
|
||||
-- Ulduar
|
||||
(64717,64717,65241,0,0),
|
||||
(64776,64776,65240,0,0),
|
||||
-- Assembly of Iron
|
||||
(61916,61916,63482,0,0),
|
||||
(61890,61890,63498,0,0),
|
||||
(61903,61903,63493,0,0),
|
||||
(61911,61911,63495,0,0),
|
||||
(64637,64637,61888,0,0),
|
||||
(62274,62274,63489,0,0),
|
||||
(62269,62269,63490,0,0),
|
||||
(62054,62054,63491,0,0),
|
||||
(61879,61879,63479,0,0),
|
||||
(61869,61869,63481,0,0),
|
||||
(61915,61915,63483,0,0),
|
||||
(61887,61887,63486,0,0),
|
||||
-- Auriaya
|
||||
(64389,64389,64678,0,0),
|
||||
(64422,64422,64688,0,0),
|
||||
(64666,64666,64374,0,0),
|
||||
(64375,64375,64667,0,0),
|
||||
(64478,64478,64669,0,0),
|
||||
(64496,64496,64674,0,0),
|
||||
(64458,64458,64676,0,0),
|
||||
-- Freya
|
||||
(62584,62584,64185,0,0),
|
||||
(62528,62528,62892,0,0),
|
||||
(62623,62623,62872,0,0),
|
||||
(64587,64587,64650,0,0),
|
||||
(62437,62437,62859,0,0),
|
||||
(62862,62862,62439,0,0),
|
||||
(62861,62861,62438,0,0),
|
||||
(62451,62451,62865,0,0),
|
||||
(62240,62240,64087,0,0),
|
||||
(62217,62217,62922,0,0),
|
||||
(62310,62310,62928,0,0),
|
||||
(62275,62275,62929,0,0),
|
||||
(62283,62283,62930,0,0),
|
||||
(62285,62285,62931,0,0),
|
||||
(62325,62325,62932,0,0),
|
||||
(62337,62337,62933,0,0),
|
||||
(62664,62664,64191,0,0),
|
||||
(62653,62653,62935,0,0),
|
||||
(62654,62654,62936,0,0),
|
||||
(62648,62648,62939,0,0),
|
||||
(62649,62649,62938,0,0),
|
||||
(62589,62589,63571,0,0),
|
||||
(62598,62598,62937,0,0),
|
||||
-- Hodir
|
||||
(62478,62478,63512,0,0),
|
||||
(65123,65123,65133,0,0),
|
||||
(63711,63711,65134,0,0),
|
||||
-- Ignis
|
||||
(62680,62680,63472,0,0),
|
||||
(62546,62546,63474,0,0),
|
||||
(62717,62717,63477,0,0),
|
||||
(62548,62548,63476,0,0),
|
||||
(65722,65722,65723,0,0),
|
||||
(62836,62836,63536,0,0),
|
||||
-- Kologarn
|
||||
(63356,63356,64003,0,0),
|
||||
(63573,63573,64006,0,0),
|
||||
(62030,62030,63980,0,0),
|
||||
(63716,63716,64005,0,0),
|
||||
(63347,63347,63977,0,0),
|
||||
(63629,63629,63979,0,0),
|
||||
(63821,63821,64001,0,0),
|
||||
(63766,63766,63983,0,0),
|
||||
(62166,62166,63981,0,0),
|
||||
(62056,62056,63985,0,0),
|
||||
(63818,63818,63978,0,0),
|
||||
-- Mimiron
|
||||
(63666,63666,65026,0,0),
|
||||
(62997,62997,64529,0,0),
|
||||
(66351,66351,63009,0,0),
|
||||
(63387,63387,64531,0,0),
|
||||
(64019,64019,64532,0,0),
|
||||
(63689,63689,64535,0,0),
|
||||
(64352,64352,64537,0,0),
|
||||
(64348,64348,64536,0,0),
|
||||
(64626,64626,65333,0,0),
|
||||
-- Razorscale
|
||||
(64016,64016,64023,0,0),
|
||||
(63317,63317,64021,0,0),
|
||||
(46763,46763,64062,0,0),
|
||||
(63809,63809,64696,0,0),
|
||||
(64758,64758,64759,0,0),
|
||||
-- Thorim
|
||||
(62131,62131,64390,0,0),
|
||||
(62577,62577,62603,0,0),
|
||||
(62334,62334,62442,0,0),
|
||||
(62335,62335,62443,0,0),
|
||||
(62333,62333,62441,0,0),
|
||||
(62315,62315,62415,0,0),
|
||||
(62316,62316,62417,0,0),
|
||||
(62331,62331,62418,0,0),
|
||||
(62332,62332,62420,0,0),
|
||||
(62327,62327,62445,0,0),
|
||||
(62328,62328,62446,0,0),
|
||||
(62321,62321,62529,0,0),
|
||||
(62613,62613,62614,0,0),
|
||||
(62411,62411,62413,0,0),
|
||||
-- XT
|
||||
(63024,63024,64234,0,0),
|
||||
(63018,63018,65121,0,0),
|
||||
(65737,65737,64193,0,0),
|
||||
(64203,64203,64235,0,0),
|
||||
(64227,64227,64236,0,0),
|
||||
-- Yoggsaron
|
||||
(63795,63795,65301,0,0),
|
||||
(64125,64125,64126,0,0),
|
||||
(64159,64159,64160,0,0),
|
||||
|
||||
-- Vault of Archavon
|
||||
-- Archavon
|
||||
(58695,58695,60883,0,0),
|
||||
(58960,58960,60894,0,0),
|
||||
(58663,58663,60880,0,0),
|
||||
(58666,58666,60882,0,0),
|
||||
-- Emalon
|
||||
(64213,64213,64215,0,0),
|
||||
(64216,64216,65279,0,0);
|
||||
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id` IN (63716,64005,69159,70136,69161,70139,69163,70469,70135,70138,70468,70137,70140,70470,28157,54364,66351,63009);
|
||||
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||
(63716,"spell_kologarn_stone_shout_aura"),
|
||||
(64005,"spell_kologarn_stone_shout_aura"),
|
||||
(69159,"spell_festergut_gaseous_blight"),
|
||||
(70136,"spell_festergut_gaseous_blight"),
|
||||
(69161,"spell_festergut_gaseous_blight"),
|
||||
(70139,"spell_festergut_gaseous_blight"),
|
||||
(69163,"spell_festergut_gaseous_blight"),
|
||||
(70469,"spell_festergut_gaseous_blight"),
|
||||
(70135,"spell_festergut_gaseous_blight"),
|
||||
(70138,"spell_festergut_gaseous_blight"),
|
||||
(70468,"spell_festergut_gaseous_blight"),
|
||||
(70137,"spell_festergut_gaseous_blight"),
|
||||
(70140,"spell_festergut_gaseous_blight"),
|
||||
(70470,"spell_festergut_gaseous_blight"),
|
||||
(28157,"spell_grobbulus_slime_spray"),
|
||||
(54364,"spell_grobbulus_slime_spray"),
|
||||
(66351,"spell_ulduar_mimiron_mine_explosion"),
|
||||
(63009,"spell_ulduar_mimiron_mine_explosion");
|
||||
@ -182,7 +182,7 @@ void CreatureAI::MoveInLineOfSight(Unit* who)
|
||||
if (me->IsMoveInLineOfSightDisabled())
|
||||
if (me->GetCreatureType() == CREATURE_TYPE_NON_COMBAT_PET || // nothing more to do, return
|
||||
!who->IsInCombat() || // if not in combat, nothing more to do
|
||||
!me->IsWithinDist(who, ATTACK_DISTANCE, true, false)) // if in combat and in dist - neutral to all can actually assist other creatures
|
||||
!me->IsWithinDist(who, ATTACK_DISTANCE, true, false, false)) // if in combat and in dist - neutral to all can actually assist other creatures
|
||||
return;
|
||||
|
||||
if (me->HasReactState(REACT_AGGRESSIVE) && me->CanStartAttack(who))
|
||||
|
||||
@ -566,7 +566,7 @@ Player* ScriptedAI::SelectTargetFromPlayerList(float maxdist, uint32 excludeAura
|
||||
std::vector<Player*> tList;
|
||||
for(Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr)
|
||||
{
|
||||
if (!me->IsWithinDistInMap(itr->GetSource(), maxdist, true, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
|
||||
if (!me->IsWithinDistInMap(itr->GetSource(), maxdist, true, false, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
|
||||
continue;
|
||||
if (excludeAura && itr->GetSource()->HasAura(excludeAura))
|
||||
continue;
|
||||
|
||||
@ -218,10 +218,10 @@ bool npc_escortAI::IsPlayerOrGroupInRange()
|
||||
{
|
||||
for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next())
|
||||
if (Player* member = groupRef->GetSource())
|
||||
if (me->IsWithinDistInMap(member, GetMaxPlayerDistance(), true, false))
|
||||
if (me->IsWithinDistInMap(member, GetMaxPlayerDistance(), true, false, false))
|
||||
return true;
|
||||
}
|
||||
else if (me->IsWithinDistInMap(player, GetMaxPlayerDistance(), true, false))
|
||||
else if (me->IsWithinDistInMap(player, GetMaxPlayerDistance(), true, false, false))
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -202,7 +202,7 @@ void FollowerAI::UpdateAI(uint32 uiDiff)
|
||||
{
|
||||
Player* member = groupRef->GetSource();
|
||||
|
||||
if (member && me->IsWithinDistInMap(member, MAX_PLAYER_DISTANCE, true, false))
|
||||
if (member && me->IsWithinDistInMap(member, MAX_PLAYER_DISTANCE, true, false, false))
|
||||
{
|
||||
bIsMaxRangeExceeded = false;
|
||||
break;
|
||||
@ -211,7 +211,7 @@ void FollowerAI::UpdateAI(uint32 uiDiff)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (me->IsWithinDistInMap(player, MAX_PLAYER_DISTANCE, true, false))
|
||||
if (me->IsWithinDistInMap(player, MAX_PLAYER_DISTANCE, true, false, false))
|
||||
bIsMaxRangeExceeded = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -771,7 +771,7 @@ void Creature::Update(uint32 diff)
|
||||
}
|
||||
|
||||
Unit* owner = GetCharmerOrOwner();
|
||||
if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false))
|
||||
if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false, false))
|
||||
{
|
||||
RemoveCharmAuras();
|
||||
}
|
||||
@ -1944,7 +1944,7 @@ bool Creature::CanStartAttack(Unit const* who) const
|
||||
if (!_IsTargetAcceptable(who))
|
||||
return false;
|
||||
|
||||
if (IsNeutralToAll() || !IsWithinDistInMap(who, GetAggroRange(who) + m_CombatDistance, true, false)) // pussywizard: +m_combatDistance for turrets and similar
|
||||
if (IsNeutralToAll() || !IsWithinDistInMap(who, GetAggroRange(who) + m_CombatDistance, true, false, false)) // pussywizard: +m_combatDistance for turrets and similar
|
||||
return false;
|
||||
|
||||
if (!CanCreatureAttack(who))
|
||||
|
||||
@ -414,7 +414,7 @@ private:
|
||||
void UpdatePackedRotation();
|
||||
|
||||
//! Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size.
|
||||
bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/, bool /*useBoundingRadius = true*/) const override
|
||||
bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/, bool /*incOwnRadius = true*/, bool /*incTargetRadius = true*/) const override
|
||||
{
|
||||
//! Following check does check 3d distance
|
||||
dist2compare += obj->GetObjectSize();
|
||||
|
||||
@ -1232,10 +1232,14 @@ float WorldObject::GetDistanceZ(WorldObject const* obj) const
|
||||
return (dist > 0 ? dist : 0);
|
||||
}
|
||||
|
||||
bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius) const
|
||||
bool WorldObject::_IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const
|
||||
{
|
||||
float sizefactor = useBoundingRadius ? GetObjectSize() + obj->GetObjectSize() : 0.0f;
|
||||
float maxdist = dist2compare + sizefactor;
|
||||
float maxdist = dist2compare;
|
||||
if (incOwnRadius)
|
||||
maxdist += GetObjectSize();
|
||||
|
||||
if (incTargetRadius)
|
||||
maxdist += obj->GetObjectSize();
|
||||
|
||||
if (m_transport && obj->GetTransport() && obj->GetTransport()->GetGUID() == m_transport->GetGUID())
|
||||
{
|
||||
@ -1342,14 +1346,14 @@ bool WorldObject::IsWithinDist2d(const Position* pos, float dist) const
|
||||
}
|
||||
|
||||
// use only if you will sure about placing both object at same map
|
||||
bool WorldObject::IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius) const
|
||||
bool WorldObject::IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const
|
||||
{
|
||||
return obj && _IsWithinDist(obj, dist2compare, is3D, useBoundingRadius);
|
||||
return obj && _IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius);
|
||||
}
|
||||
|
||||
bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius) const
|
||||
bool WorldObject::IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius, bool incTargetRadius) const
|
||||
{
|
||||
return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, useBoundingRadius);
|
||||
return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius);
|
||||
}
|
||||
|
||||
bool WorldObject::IsWithinLOS(float ox, float oy, float oz, VMAP::ModelIgnoreFlags ignoreFlags, LineOfSightChecks checks) const
|
||||
|
||||
@ -541,8 +541,8 @@ public:
|
||||
[[nodiscard]] bool IsWithinDist2d(float x, float y, float dist) const;
|
||||
bool IsWithinDist2d(const Position* pos, float dist) const;
|
||||
// use only if you will sure about placing both object at same map
|
||||
bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true, bool useBoundingRadius = true) const;
|
||||
bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool useBoundingRadius = true) const;
|
||||
bool IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
|
||||
bool IsWithinDistInMap(WorldObject const* obj, float dist2compare, bool is3D = true, bool incOwnRadius = true, bool incTargetRadius = true) const;
|
||||
[[nodiscard]] bool IsWithinLOS(float x, float y, float z, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS) const;
|
||||
[[nodiscard]] bool IsWithinLOSInMap(WorldObject const* obj, VMAP::ModelIgnoreFlags ignoreFlags = VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks = LINEOFSIGHT_ALL_CHECKS, Optional<float> collisionHeight = { }, Optional<float> combatReach = { }) const;
|
||||
[[nodiscard]] Position GetHitSpherePointFor(Position const& dest, Optional<float> collisionHeight = { }, Optional<float> combatReach = { }) const;
|
||||
@ -770,7 +770,7 @@ private:
|
||||
uint16 m_notifyflags;
|
||||
uint16 m_executed_notifies;
|
||||
|
||||
virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool useBoundingRadius = true) const;
|
||||
virtual bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool is3D, bool incOwnRadius = true, bool incTargetRadius = true) const;
|
||||
|
||||
bool CanNeverSee(WorldObject const* obj) const;
|
||||
virtual bool CanAlwaysSee(WorldObject const* /*obj*/) const { return false; }
|
||||
|
||||
@ -1092,10 +1092,9 @@ namespace Acore
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->IsDynamicObject() ? i_obj : nullptr) && i_obj->IsWithinDistInMap(u, i_range,true,false))
|
||||
if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->IsDynamicObject() ? i_obj : nullptr) && i_obj->IsWithinDistInMap(u, i_range,true,false, true))
|
||||
|
||||
return true;
|
||||
|
||||
@ -1192,7 +1191,7 @@ namespace Acore
|
||||
}
|
||||
bool operator()(Unit* u)
|
||||
{
|
||||
if (!me->IsWithinDistInMap(u, m_range, true, false))
|
||||
if (!me->IsWithinDistInMap(u, m_range, true, false, false))
|
||||
return false;
|
||||
|
||||
if (!me->IsValidAttackTarget(u))
|
||||
@ -1218,7 +1217,7 @@ namespace Acore
|
||||
explicit NearestHostileUnitInAttackDistanceCheck(Creature const* creature, float dist) : me(creature), m_range(dist) {}
|
||||
bool operator()(Unit* u)
|
||||
{
|
||||
if (!me->IsWithinDistInMap(u, m_range, true, false))
|
||||
if (!me->IsWithinDistInMap(u, m_range, true, false, false))
|
||||
return false;
|
||||
|
||||
if (!me->CanStartAttack(u))
|
||||
|
||||
@ -19,6 +19,7 @@
|
||||
#include "PassiveAI.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "SpellScript.h"
|
||||
#include "SpellScriptLoader.h"
|
||||
@ -161,7 +162,7 @@ public:
|
||||
events.Reset();
|
||||
bIntro = false;
|
||||
bPhase3 = false;
|
||||
me->ApplySpellImmune(0, IMMUNITY_ID, RAID_MODE(66193, 67855, 67856, 67857), true);
|
||||
me->ApplySpellImmune(0, IMMUNITY_ID, sSpellMgr->GetSpellIdForDifficulty(SPELL_PERMAFROST, me), true);
|
||||
me->m_SightDistance = 90.0f; // for MoveInLineOfSight distance
|
||||
}
|
||||
|
||||
@ -501,7 +502,7 @@ public:
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
me->CastSpell(me, RAID_MODE(SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25, SPELL_TRAITOR_KING_10, SPELL_TRAITOR_KING_25), true);
|
||||
me->CastSpell(me, SPELL_TRAITOR_KING, true);
|
||||
me->m_Events.AddEventAtOffset(new HideNpcEvent(*me), 5s);
|
||||
}
|
||||
|
||||
@ -679,7 +680,7 @@ public:
|
||||
events.Repeat(30s, 45s);
|
||||
break;
|
||||
case EVENT_SUBMERGE:
|
||||
if (HealthBelowPct(80) && !me->HasAura(RAID_MODE(66193, 67855, 67856, 67857))) // not having permafrost - allow submerge
|
||||
if (HealthBelowPct(80) && !me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_PERMAFROST, me))) // not having permafrost - allow submerge
|
||||
{
|
||||
me->GetMotionMaster()->MoveIdle();
|
||||
me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||
|
||||
@ -351,8 +351,7 @@ enum EventSpells
|
||||
SPELL_JORMUNGAR_ACHIEV = 68523,
|
||||
SPELL_FACTION_CHAMPIONS_KILL_CREDIT = 68184,
|
||||
SPELL_RESILIENCE_WILL_FIX_IT_CREDIT = 68620,
|
||||
SPELL_TRAITOR_KING_10 = 68186,
|
||||
SPELL_TRAITOR_KING_25 = 68515,
|
||||
SPELL_TRAITOR_KING = 68186,
|
||||
SPELL_PORTAL_TO_DALARAN = 53142,
|
||||
};
|
||||
|
||||
|
||||
@ -19,7 +19,9 @@
|
||||
#include "CreatureScript.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "SpellScriptLoader.h"
|
||||
#include "pit_of_saron.h"
|
||||
@ -54,11 +56,11 @@ enum Spells
|
||||
|
||||
SPELL_CHILLING_WAVE = 68778,
|
||||
SPELL_DEEP_FREEZE = 70381,
|
||||
};
|
||||
|
||||
#define SPELL_FORGE_BLADE RAID_MODE(68774, 70334)
|
||||
#define SPELL_FORGE_MACE RAID_MODE(68785, 70335)
|
||||
#define SPELL_SARONITE_TRIGGERED RAID_MODE(68789, 70851)
|
||||
SPELL_FORGE_BLADE = 68774,
|
||||
SPELL_FORGE_MACE = 68785,
|
||||
SPELL_SARONITE_TRIGGERED = 68789,
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
@ -154,21 +156,45 @@ public:
|
||||
if (phase == 1)
|
||||
{
|
||||
me->SetControlled(true, UNIT_STATE_ROOT);
|
||||
me->CastSpell(me, SPELL_FORGE_BLADE, false);
|
||||
if (me->CastSpell(me, SPELL_FORGE_BLADE, false) == SPELL_CAST_OK)
|
||||
{
|
||||
events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10s);
|
||||
SetEquipmentSlots(false, EQUIP_ID_SWORD);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
me->DisableRotate(false);
|
||||
if (me->GetVictim())
|
||||
{
|
||||
AttackStart(me->GetVictim());
|
||||
me->SetTarget(me->GetVictim()->GetGUID());
|
||||
}
|
||||
}
|
||||
Talk(SAY_HP_66);
|
||||
}
|
||||
else if (phase == 2)
|
||||
{
|
||||
me->SetControlled(true, UNIT_STATE_ROOT);
|
||||
me->RemoveAurasDueToSpell(SPELL_FORGE_BLADE);
|
||||
me->CastSpell(me, SPELL_FORGE_MACE, false);
|
||||
me->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_FORGE_BLADE, me));
|
||||
if (me->CastSpell(me, SPELL_FORGE_MACE, false) == SPELL_CAST_OK)
|
||||
{
|
||||
events.RescheduleEvent(EVENT_SPELL_DEEP_FREEZE, 10s);
|
||||
SetEquipmentSlots(false, EQUIP_ID_MACE);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
me->DisableRotate(false);
|
||||
if (me->GetVictim())
|
||||
{
|
||||
AttackStart(me->GetVictim());
|
||||
me->SetTarget(me->GetVictim()->GetGUID());
|
||||
}
|
||||
}
|
||||
Talk(SAY_HP_33);
|
||||
}
|
||||
}
|
||||
|
||||
void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
|
||||
{
|
||||
if (spell->Id == uint32(SPELL_SARONITE_TRIGGERED))
|
||||
if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_SARONITE_TRIGGERED, me))
|
||||
{
|
||||
if (bCanSayBoulderHit)
|
||||
{
|
||||
@ -176,32 +202,6 @@ public:
|
||||
Talk(SAY_BOULDER_HIT);
|
||||
}
|
||||
}
|
||||
if (spell->Id == uint32(SPELL_FORGE_BLADE))
|
||||
{
|
||||
events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10s);
|
||||
SetEquipmentSlots(false, EQUIP_ID_SWORD);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
me->DisableRotate(false);
|
||||
if (me->GetVictim())
|
||||
{
|
||||
AttackStart(me->GetVictim());
|
||||
me->SetTarget(me->GetVictim()->GetGUID());
|
||||
}
|
||||
}
|
||||
else if (spell->Id == uint32(SPELL_FORGE_MACE))
|
||||
{
|
||||
events.RescheduleEvent(EVENT_SPELL_DEEP_FREEZE, 10s);
|
||||
SetEquipmentSlots(false, EQUIP_ID_MACE);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
me->DisableRotate(false);
|
||||
if (me->GetVictim())
|
||||
{
|
||||
AttackStart(me->GetVictim());
|
||||
me->SetTarget(me->GetVictim()->GetGUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
|
||||
@ -118,9 +118,6 @@ enum Spells
|
||||
SPELL_ACHIEVEMENT = 72928,
|
||||
};
|
||||
|
||||
// Helper to get id of the aura on different modes (HasAura(baseId) wont work)
|
||||
#define BOILING_BLOOD_HELPER RAID_MODE<int32>(72385, 72441, 72442, 72443)
|
||||
|
||||
enum EventTypes
|
||||
{
|
||||
EVENT_INTRO_ALLIANCE_1 = 1,
|
||||
|
||||
@ -19,7 +19,10 @@
|
||||
#include "CreatureScript.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellInfo.h"
|
||||
#include "SpellScript.h"
|
||||
#include "SpellScriptLoader.h"
|
||||
#include "icecrown_citadel.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
@ -57,10 +60,6 @@ enum Spells
|
||||
SPELL_PLAGUE_STENCH = 71805,
|
||||
};
|
||||
|
||||
// Used for HasAura checks
|
||||
#define PUNGENT_BLIGHT_HELPER RAID_MODE<uint32>(69195, 71219, 73031, 73032)
|
||||
#define INOCULATED_HELPER RAID_MODE<uint32>(69291, 72101, 72102, 72103)
|
||||
|
||||
uint32 const gaseousBlight[3] = {69157, 69162, 69164};
|
||||
uint32 const gaseousBlightVisual[3] = {69126, 69152, 69154};
|
||||
|
||||
@ -168,19 +167,6 @@ public:
|
||||
Talk(SAY_KILL);
|
||||
}
|
||||
|
||||
void SpellHitTarget(Unit* target, SpellInfo const* spell) override
|
||||
{
|
||||
if (spell->Id == PUNGENT_BLIGHT_HELPER)
|
||||
target->RemoveAurasDueToSpell(INOCULATED_HELPER);
|
||||
else if (Player* p = target->ToPlayer())
|
||||
{
|
||||
// Gaseous Blight damage
|
||||
if (((spell->Id == 69159 || spell->Id == 70136 || spell->Id == 69161 || spell->Id == 70139 || spell->Id == 69163 || spell->Id == 70469) && p->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_10) == QUEST_STATUS_INCOMPLETE) ||
|
||||
((spell->Id == 70135 || spell->Id == 70138 || spell->Id == 70468 || spell->Id == 70137 || spell->Id == 70140 || spell->Id == 70470) && p->GetQuestStatus(QUEST_RESIDUE_RENDEZVOUS_25) == QUEST_STATUS_INCOMPLETE))
|
||||
p->CastSpell(p, SPELL_ORANGE_BLIGHT_RESIDUE, true);
|
||||
}
|
||||
}
|
||||
|
||||
void RemoveBlight()
|
||||
{
|
||||
if (Creature* gasDummy = ObjectAccessor::GetCreature(*me, _gasDummyGUID))
|
||||
@ -313,8 +299,15 @@ class spell_festergut_pungent_blight : public SpellScript
|
||||
professor->AI()->DoAction(ACTION_FESTERGUT_GAS);
|
||||
}
|
||||
|
||||
void HandleHit(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
target->RemoveAurasDueToSpell(sSpellMgr->GetSpellIdForDifficulty(SPELL_INOCULATED, GetCaster()));
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_festergut_pungent_blight::HandleHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
OnEffectHitTarget += SpellEffectFn(spell_festergut_pungent_blight::HandleScript, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
@ -378,6 +371,34 @@ class spell_festergut_gastric_bloat : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
class spell_festergut_gaseous_blight : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_festergut_gaseous_blight);
|
||||
|
||||
bool Validate(SpellInfo const* /*spell*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_ORANGE_BLIGHT_RESIDUE });
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (Player* p = GetHitUnit()->ToPlayer())
|
||||
{
|
||||
if (Map* map = GetCaster()->GetMap())
|
||||
{
|
||||
uint32 questId = map->Is25ManRaid() ? QUEST_RESIDUE_RENDEZVOUS_25 : QUEST_RESIDUE_RENDEZVOUS_10;
|
||||
if (p->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE)
|
||||
p->CastSpell(p, SPELL_ORANGE_BLIGHT_RESIDUE, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_festergut_gaseous_blight::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
class achievement_flu_shot_shortage : public AchievementCriteriaScript
|
||||
{
|
||||
public:
|
||||
@ -468,6 +489,7 @@ void AddSC_boss_festergut()
|
||||
RegisterSpellScript(spell_festergut_pungent_blight);
|
||||
RegisterSpellScript(spell_festergut_blighted_spores_aura);
|
||||
RegisterSpellScript(spell_festergut_gastric_bloat);
|
||||
RegisterSpellScript(spell_festergut_gaseous_blight);
|
||||
new achievement_flu_shot_shortage();
|
||||
|
||||
new npc_stinky_icc();
|
||||
|
||||
@ -72,8 +72,6 @@ enum Spells
|
||||
SPELL_AWAKEN_PLAGUED_ZOMBIES = 71159,
|
||||
};
|
||||
|
||||
#define MUTATED_INFECTION RAID_MODE<int32>(69674, 71224, 73022, 73023)
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_NONE,
|
||||
@ -193,7 +191,7 @@ public:
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(MUTATED_INFECTION);
|
||||
instance->DoRemoveAurasDueToSpellOnPlayers(sSpellMgr->GetSpellIdForDifficulty(SPELL_MUTATED_INFECTION, me));
|
||||
_JustDied();
|
||||
Talk(SAY_DEATH);
|
||||
if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE)))
|
||||
|
||||
@ -141,7 +141,6 @@ enum Spells
|
||||
SPELL_SOUL_REAPER = 69409, // instant
|
||||
SPELL_SOUL_REAPER_BUFF = 69410,
|
||||
SPELL_SUMMON_VALKYR = 69037, // instant
|
||||
SPELL_SUMMON_VALKYR_PERIODIC = 74361,
|
||||
SPELL_WINGS_OF_THE_DAMNED = 74352,
|
||||
SPELL_VALKYR_TARGET_SEARCH = 69030,
|
||||
SPELL_HARVEST_SOUL_VALKYR = 68985, // vehicle aura used by Val'kyr Shadowguard and Strangulate Vehicle
|
||||
@ -188,14 +187,6 @@ enum Spells
|
||||
SPELL_FRENZY = 28747,
|
||||
};
|
||||
|
||||
#define NECROTIC_PLAGUE_LK RAID_MODE<uint32>(70337, 73912, 73913, 73914)
|
||||
#define NECROTIC_PLAGUE_PLR RAID_MODE<uint32>(70338, 73785, 73786, 73787)
|
||||
#define REMORSELESS_WINTER_1 RAID_MODE<uint32>(68981, 74270, 74271, 74272)
|
||||
#define REMORSELESS_WINTER_2 RAID_MODE<uint32>(72259, 74273, 74274, 74275)
|
||||
#define SUMMON_VALKYR RAID_MODE<uint32>(69037, 74361, 69037, 74361)
|
||||
//#define HARVEST_SOUL RAID_MODE<uint32>(68980, 74325, 74296, 74297)
|
||||
#define HARVESTED_SOUL_BUFF RAID_MODE<uint32>(72679, 74318, 74319, 74320)
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_NONE,
|
||||
@ -915,7 +906,7 @@ public:
|
||||
|
||||
void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
|
||||
{
|
||||
if (spell->Id == HARVESTED_SOUL_BUFF && me->IsInCombat() && !IsHeroic() && _phase != PHASE_OUTRO && _lastTalkTimeBuff + 5 <= GameTime::GetGameTime().count())
|
||||
if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_HARVESTED_SOUL_LK_BUFF, me) && me->IsInCombat() && !IsHeroic() && _phase != PHASE_OUTRO && _lastTalkTimeBuff + 5 <= GameTime::GetGameTime().count())
|
||||
{
|
||||
_lastTalkTimeBuff = GameTime::GetGameTime().count();
|
||||
Talk(SAY_LK_FROSTMOURNE_KILL);
|
||||
@ -924,7 +915,7 @@ public:
|
||||
|
||||
void SpellHitTarget(Unit* /*target*/, SpellInfo const* spell) override
|
||||
{
|
||||
if (spell->Id == REMORSELESS_WINTER_1 || spell->Id == REMORSELESS_WINTER_2)
|
||||
if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_REMORSELESS_WINTER_1, me) || spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_REMORSELESS_WINTER_2, me))
|
||||
{
|
||||
me->GetMap()->SetZoneOverrideLight(AREA_THE_FROZEN_THRONE, LIGHT_SNOWSTORM, 5s);
|
||||
me->GetMap()->SetZoneWeather(AREA_THE_FROZEN_THRONE, WEATHER_STATE_LIGHT_SNOW, 0.5f);
|
||||
@ -1064,7 +1055,7 @@ public:
|
||||
events.ScheduleEvent(EVENT_INFEST, 22s + 500ms, EVENT_GROUP_ABILITIES);
|
||||
break;
|
||||
case EVENT_NECROTIC_PLAGUE:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NecroticPlagueTargetCheck(me, NECROTIC_PLAGUE_LK, NECROTIC_PLAGUE_PLR)))
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, NecroticPlagueTargetCheck(me, sSpellMgr->GetSpellIdForDifficulty(SPELL_NECROTIC_PLAGUE, me), sSpellMgr->GetSpellIdForDifficulty(SPELL_NECROTIC_PLAGUE_JUMP, me))))
|
||||
{
|
||||
Talk(EMOTE_NECROTIC_PLAGUE_WARNING, target);
|
||||
me->CastSpell(target, SPELL_NECROTIC_PLAGUE, false);
|
||||
@ -1145,7 +1136,7 @@ public:
|
||||
{
|
||||
me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL);
|
||||
Talk(SAY_LK_SUMMON_VALKYR);
|
||||
me->CastSpell((Unit*)nullptr, SUMMON_VALKYR, false);
|
||||
me->CastSpell((Unit*)nullptr, SPELL_SUMMON_VALKYR, false);
|
||||
events.ScheduleEvent(EVENT_SUMMON_VALKYR, 45s, EVENT_GROUP_ABILITIES);
|
||||
|
||||
// schedule a defile (or reschedule it) if next defile event
|
||||
@ -2352,8 +2343,7 @@ class spell_the_lich_king_defile : public SpellScript
|
||||
{
|
||||
targets.remove_if(VehicleCheck());
|
||||
targets.remove_if(Acore::AllWorldObjectsInExactRange(GetCaster(), 10.0f * GetCaster()->GetFloatValue(OBJECT_FIELD_SCALE_X), true));
|
||||
uint32 strangulatedAura[4] = {68980, 74325, 74296, 74297};
|
||||
targets.remove_if(Acore::UnitAuraCheck(true, strangulatedAura[GetCaster()->GetMap()->GetDifficulty()]));
|
||||
targets.remove_if(Acore::UnitAuraCheck(true, sSpellMgr->GetSpellIdForDifficulty(SPELL_HARVEST_SOUL, GetCaster())));
|
||||
}
|
||||
|
||||
void ChangeDamageAndGrow()
|
||||
|
||||
@ -52,8 +52,8 @@ enum Spells
|
||||
SPELL_NIGHTMARE_PORTAL_VISUAL_PRE = 71986,
|
||||
SPELL_NIGHTMARE_CLOUD = 71970,
|
||||
SPELL_NIGHTMARE_CLOUD_VISUAL = 71939,
|
||||
SPELL_PRE_SUMMON_DREAM_PORTAL = 72224,
|
||||
SPELL_PRE_SUMMON_NIGHTMARE_PORTAL = 72480,
|
||||
SPELL_PRE_SUMMON_DREAM_PORTAL = 72224, // normal
|
||||
SPELL_PRE_SUMMON_NIGHTMARE_PORTAL = 72480, // heroic
|
||||
SPELL_SUMMON_DREAM_PORTAL = 71305,
|
||||
SPELL_SUMMON_NIGHTMARE_PORTAL = 71987,
|
||||
SPELL_DREAMWALKERS_RAGE = 71189,
|
||||
@ -94,16 +94,13 @@ enum Spells
|
||||
SPELL_GUT_SPRAY = 70633,
|
||||
SPELL_ROT_WORM_SPAWNER = 70675,
|
||||
|
||||
// Dream Cloud
|
||||
// Dream Cloud (normal)
|
||||
SPELL_EMERALD_VIGOR = 70873,
|
||||
|
||||
// Nightmare Cloud
|
||||
// Nightmare Cloud (heroic)
|
||||
SPELL_TWISTED_NIGHTMARE = 71941,
|
||||
};
|
||||
|
||||
#define SUMMON_PORTAL RAID_MODE<uint32>(SPELL_PRE_SUMMON_DREAM_PORTAL, SPELL_PRE_SUMMON_DREAM_PORTAL, SPELL_PRE_SUMMON_NIGHTMARE_PORTAL, SPELL_PRE_SUMMON_NIGHTMARE_PORTAL)
|
||||
#define EMERALD_VIGOR RAID_MODE<uint32>(SPELL_EMERALD_VIGOR, SPELL_EMERALD_VIGOR, SPELL_TWISTED_NIGHTMARE, SPELL_TWISTED_NIGHTMARE)
|
||||
|
||||
enum Events
|
||||
{
|
||||
// Valithria Dreamwalker
|
||||
@ -462,7 +459,7 @@ public:
|
||||
if (!IsHeroic())
|
||||
Talk(SAY_VALITHRIA_DREAM_PORTAL);
|
||||
for (uint32 i = 0; i < _portalCount; ++i)
|
||||
me->CastSpell(me, SUMMON_PORTAL, false);
|
||||
me->CastSpell(me, SPELL_PRE_SUMMON_DREAM_PORTAL, false);
|
||||
_events.ScheduleEvent(EVENT_DREAM_PORTAL, 45s, 48s);
|
||||
break;
|
||||
case EVENT_DREAM_SLIP:
|
||||
@ -885,7 +882,7 @@ public:
|
||||
me->GetMotionMaster()->Clear(false);
|
||||
me->GetMotionMaster()->MoveIdle();
|
||||
// must use originalCaster the same for all clouds to allow stacking
|
||||
me->CastSpell(me, EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
|
||||
me->CastSpell(me, SPELL_EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER));
|
||||
me->DespawnOrUnsummon(1s);
|
||||
break;
|
||||
default:
|
||||
|
||||
@ -35,10 +35,8 @@ enum GuardSays
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_IMPALE_10 = 28783,
|
||||
SPELL_IMPALE_25 = 56090,
|
||||
SPELL_LOCUST_SWARM_10 = 28785,
|
||||
SPELL_LOCUST_SWARM_25 = 54021,
|
||||
SPELL_IMPALE = 28783,
|
||||
SPELL_LOCUST_SWARM = 28785,
|
||||
SPELL_SUMMON_CORPSE_SCRABS_5 = 29105,
|
||||
SPELL_SUMMON_CORPSE_SCRABS_10 = 28864,
|
||||
SPELL_BERSERK = 26662
|
||||
@ -138,12 +136,12 @@ public:
|
||||
}
|
||||
|
||||
ScheduleTimedEvent(15s, [&] {
|
||||
DoCastRandomTarget(RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25));
|
||||
DoCastRandomTarget(SPELL_IMPALE);
|
||||
}, 20s);
|
||||
|
||||
ScheduleTimedEvent(70s, 2min, [&] {
|
||||
Talk(EMOTE_LOCUST);
|
||||
DoCastSelf(RAID_MODE(SPELL_LOCUST_SWARM_10, SPELL_LOCUST_SWARM_25));
|
||||
DoCastSelf(SPELL_LOCUST_SWARM);
|
||||
|
||||
me->m_Events.AddEventAtOffset([&]
|
||||
{
|
||||
|
||||
@ -18,6 +18,7 @@
|
||||
#include "CreatureScript.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellInfo.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "naxxramas.h"
|
||||
|
||||
enum Yells
|
||||
@ -37,7 +38,6 @@ enum Spells
|
||||
SPELL_RAIN_OF_FIRE = 28794,
|
||||
SPELL_FRENZY = 28798,
|
||||
SPELL_WIDOWS_EMBRACE = 28732,
|
||||
SPELL_MINION_WIDOWS_EMBRACE = 54097
|
||||
};
|
||||
|
||||
enum Groups
|
||||
@ -143,7 +143,7 @@ public:
|
||||
|
||||
void SpellHit(Unit* caster, SpellInfo const* spell) override
|
||||
{
|
||||
if (spell->Id == RAID_MODE(SPELL_WIDOWS_EMBRACE, SPELL_MINION_WIDOWS_EMBRACE))
|
||||
if (spell->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_WIDOWS_EMBRACE, me))
|
||||
{
|
||||
Talk(EMOTE_WIDOWS_EMBRACE);
|
||||
scheduler.RescheduleGroup(GROUP_FRENZY, 1min);
|
||||
|
||||
@ -33,23 +33,17 @@ enum Spells
|
||||
SPELL_MARK_OF_ZELIEK = 28835,
|
||||
SPELL_MARK_DAMAGE = 28836,
|
||||
// Korth'azz
|
||||
SPELL_KORTHAZZ_METEOR_10 = 28884,
|
||||
SPELL_KORTHAZZ_METEOR_25 = 57467,
|
||||
SPELL_KORTHAZZ_METEOR = 28884,
|
||||
// Blaumeux
|
||||
SPELL_BLAUMEUX_SHADOW_BOLT_10 = 57374,
|
||||
SPELL_BLAUMEUX_SHADOW_BOLT_25 = 57464,
|
||||
SPELL_BLAUMEUX_VOID_ZONE_10 = 28863,
|
||||
SPELL_BLAUMEUX_VOID_ZONE_25 = 57463,
|
||||
SPELL_BLAUMEUX_SHADOW_BOLT = 57374,
|
||||
SPELL_BLAUMEUX_VOID_ZONE = 28863,
|
||||
SPELL_BLAUMEUX_UNYIELDING_PAIN = 57381,
|
||||
// Zeliek
|
||||
SPELL_ZELIEK_HOLY_WRATH_10 = 28883,
|
||||
SPELL_ZELIEK_HOLY_WRATH_25 = 57466,
|
||||
SPELL_ZELIEK_HOLY_BOLT_10 = 57376,
|
||||
SPELL_ZELIEK_HOLY_BOLT_25 = 57465,
|
||||
SPELL_ZELIEK_HOLY_WRATH = 28883,
|
||||
SPELL_ZELIEK_HOLY_BOLT = 57376,
|
||||
SPELL_ZELIEK_CONDEMNATION = 57377,
|
||||
// Rivendare
|
||||
SPELL_RIVENDARE_UNHOLY_SHADOW_10 = 28882,
|
||||
SPELL_RIVENDARE_UNHOLY_SHADOW_25 = 57369
|
||||
SPELL_RIVENDARE_UNHOLY_SHADOW = 28882,
|
||||
};
|
||||
|
||||
enum Events
|
||||
@ -87,15 +81,13 @@ enum FourHorsemen
|
||||
const uint32 TABLE_SPELL_MARK[4] = {SPELL_MARK_OF_ZELIEK, SPELL_MARK_OF_BLAUMEUX, SPELL_MARK_OF_RIVENDARE, SPELL_MARK_OF_KORTHAZZ};
|
||||
|
||||
// PRIMARY SPELL
|
||||
const uint32 TABLE_SPELL_PRIMARY_10[4] = {SPELL_ZELIEK_HOLY_BOLT_10, SPELL_BLAUMEUX_SHADOW_BOLT_10, SPELL_RIVENDARE_UNHOLY_SHADOW_10, SPELL_KORTHAZZ_METEOR_10};
|
||||
const uint32 TABLE_SPELL_PRIMARY_25[4] = {SPELL_ZELIEK_HOLY_BOLT_25, SPELL_BLAUMEUX_SHADOW_BOLT_25, SPELL_RIVENDARE_UNHOLY_SHADOW_25, SPELL_KORTHAZZ_METEOR_25};
|
||||
const uint32 TABLE_SPELL_PRIMARY[4] = {SPELL_ZELIEK_HOLY_BOLT, SPELL_BLAUMEUX_SHADOW_BOLT, SPELL_RIVENDARE_UNHOLY_SHADOW, SPELL_KORTHAZZ_METEOR};
|
||||
|
||||
// PUNISH
|
||||
const uint32 TABLE_SPELL_PUNISH[4] = {SPELL_ZELIEK_CONDEMNATION, SPELL_BLAUMEUX_UNYIELDING_PAIN, 0, 0};
|
||||
|
||||
// SECONDARY SPELL
|
||||
const uint32 TABLE_SPELL_SECONDARY_10[4] = {SPELL_ZELIEK_HOLY_WRATH_10, SPELL_BLAUMEUX_VOID_ZONE_10, 0, 0};
|
||||
const uint32 TABLE_SPELL_SECONDARY_25[4] = {SPELL_ZELIEK_HOLY_WRATH_25, SPELL_BLAUMEUX_VOID_ZONE_25, 0, 0};
|
||||
const uint32 TABLE_SPELL_SECONDARY[4] = {SPELL_ZELIEK_HOLY_WRATH, SPELL_BLAUMEUX_VOID_ZONE, 0, 0};
|
||||
|
||||
const Position WaypointPositions[12] =
|
||||
{
|
||||
@ -308,11 +300,11 @@ public:
|
||||
return;
|
||||
case EVENT_PRIMARY_SPELL:
|
||||
Talk(SAY_TAUNT);
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(TABLE_SPELL_PRIMARY_10[horsemanId], TABLE_SPELL_PRIMARY_25[horsemanId]), false);
|
||||
me->CastSpell(me->GetVictim(), TABLE_SPELL_PRIMARY[horsemanId], false);
|
||||
events.Repeat(15s);
|
||||
return;
|
||||
case EVENT_SECONDARY_SPELL:
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(TABLE_SPELL_SECONDARY_10[horsemanId], TABLE_SPELL_SECONDARY_25[horsemanId]), false);
|
||||
me->CastSpell(me->GetVictim(), TABLE_SPELL_SECONDARY[horsemanId], false);
|
||||
events.Repeat(15s);
|
||||
return;
|
||||
}
|
||||
@ -328,7 +320,7 @@ public:
|
||||
}
|
||||
if (me->IsWithinDistInMap(me->GetVictim(), 45.0f) && me->IsValidAttackTarget(me->GetVictim()))
|
||||
{
|
||||
DoCastVictim(RAID_MODE(TABLE_SPELL_PRIMARY_10[horsemanId], TABLE_SPELL_PRIMARY_25[horsemanId]));
|
||||
DoCastVictim(TABLE_SPELL_PRIMARY[horsemanId]);
|
||||
}
|
||||
else if (!me->IsWithinDistInMap(me->GetVictim(), 45.0f) || !me->IsValidAttackTarget(me->GetVictim()))
|
||||
{
|
||||
|
||||
@ -25,10 +25,8 @@
|
||||
enum Spells
|
||||
{
|
||||
SPELL_MORTAL_WOUND = 25646,
|
||||
SPELL_ENRAGE_10 = 28371,
|
||||
SPELL_ENRAGE_25 = 54427,
|
||||
SPELL_DECIMATE_10 = 28374,
|
||||
SPELL_DECIMATE_25 = 54426,
|
||||
SPELL_ENRAGE = 28371,
|
||||
SPELL_DECIMATE = 28374,
|
||||
SPELL_DECIMATE_DAMAGE = 28375,
|
||||
SPELL_BERSERK = 26662,
|
||||
SPELL_INFECTED_WOUND = 29306,
|
||||
@ -184,7 +182,7 @@ public:
|
||||
break;
|
||||
case EVENT_ENRAGE:
|
||||
Talk(EMOTE_ENRAGE);
|
||||
me->CastSpell(me, RAID_MODE(SPELL_ENRAGE_10, SPELL_ENRAGE_25), true);
|
||||
me->CastSpell(me, SPELL_ENRAGE, true);
|
||||
events.Repeat(22s);
|
||||
break;
|
||||
case EVENT_MORTAL_WOUND:
|
||||
@ -193,7 +191,7 @@ public:
|
||||
break;
|
||||
case EVENT_DECIMATE:
|
||||
Talk(EMOTE_DECIMATE);
|
||||
me->CastSpell(me, RAID_MODE(SPELL_DECIMATE_10, SPELL_DECIMATE_25), false);
|
||||
me->CastSpell(me, SPELL_DECIMATE, false);
|
||||
events.Repeat(RAID_MODE(110s, 90s));
|
||||
break;
|
||||
case EVENT_SUMMON_ZOMBIE:
|
||||
|
||||
@ -41,8 +41,7 @@ enum Spells
|
||||
{
|
||||
// Gothik
|
||||
SPELL_HARVEST_SOUL = 28679,
|
||||
SPELL_SHADOW_BOLT_10 = 29317,
|
||||
SPELL_SHADOW_BOLT_25 = 56405,
|
||||
SPELL_SHADOW_BOLT = 29317,
|
||||
// Teleport spells
|
||||
SPELL_TELEPORT_DEAD = 28025,
|
||||
SPELL_TELEPORT_LIVE = 28026,
|
||||
@ -267,7 +266,7 @@ public:
|
||||
std::vector<Player*> tList;
|
||||
for(Map::PlayerList::const_iterator itr = pList.begin(); itr != pList.end(); ++itr)
|
||||
{
|
||||
if (!me->IsWithinDistInMap(itr->GetSource(), 200.0f, true, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
|
||||
if (!me->IsWithinDistInMap(itr->GetSource(), 200.0f, true, false, false) || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -400,7 +399,7 @@ public:
|
||||
Talk(SAY_INTRO_4);
|
||||
break;
|
||||
case EVENT_SHADOW_BOLT:
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_SHADOW_BOLT_10, SPELL_SHADOW_BOLT_25), false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false);
|
||||
events.Repeat(1s);
|
||||
break;
|
||||
case EVENT_HARVEST_SOUL:
|
||||
|
||||
@ -29,10 +29,8 @@ enum Spells
|
||||
SPELL_POISON_CLOUD = 28240,
|
||||
SPELL_MUTATING_INJECTION = 28169,
|
||||
SPELL_MUTATING_EXPLOSION = 28206,
|
||||
SPELL_SLIME_SPRAY_10 = 28157,
|
||||
SPELL_SLIME_SPRAY_25 = 54364,
|
||||
SPELL_POISON_CLOUD_DAMAGE_AURA_10 = 28158,
|
||||
SPELL_POISON_CLOUD_DAMAGE_AURA_25 = 54362,
|
||||
SPELL_SLIME_SPRAY = 28157,
|
||||
SPELL_POISON_CLOUD_DAMAGE_AURA = 28158,
|
||||
SPELL_BERSERK = 26662,
|
||||
SPELL_BOMBARD_SLIME = 28280
|
||||
};
|
||||
@ -105,14 +103,6 @@ public:
|
||||
events.ScheduleEvent(EVENT_BERSERK, RAID_MODE(720s, 540s));
|
||||
}
|
||||
|
||||
void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override
|
||||
{
|
||||
if (spellInfo->Id == RAID_MODE(SPELL_SLIME_SPRAY_10, SPELL_SLIME_SPRAY_25) && target->IsPlayer())
|
||||
{
|
||||
me->SummonCreature(NPC_FALLOUT_SLIME, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* cr) override
|
||||
{
|
||||
if (cr->GetEntry() == NPC_FALLOUT_SLIME)
|
||||
@ -169,7 +159,7 @@ public:
|
||||
break;
|
||||
case EVENT_SLIME_SPRAY:
|
||||
Talk(EMOTE_SLIME);
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_SLIME_SPRAY_10, SPELL_SLIME_SPRAY_25), false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_SLIME_SPRAY, false);
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
case EVENT_MUTATING_INJECTION:
|
||||
@ -223,7 +213,7 @@ public:
|
||||
auraVisualTimer += diff;
|
||||
if (auraVisualTimer >= 1000)
|
||||
{
|
||||
me->CastSpell(me, (me->GetMap()->Is25ManRaid() ? SPELL_POISON_CLOUD_DAMAGE_AURA_25 : SPELL_POISON_CLOUD_DAMAGE_AURA_10), true);
|
||||
me->CastSpell(me, SPELL_POISON_CLOUD_DAMAGE_AURA, true);
|
||||
auraVisualTimer = 0;
|
||||
}
|
||||
}
|
||||
@ -291,10 +281,27 @@ class spell_grobbulus_mutating_injection_aura : public AuraScript
|
||||
}
|
||||
};
|
||||
|
||||
class spell_grobbulus_slime_spray : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_grobbulus_slime_spray);
|
||||
|
||||
void HandleHit()
|
||||
{
|
||||
if (Unit* target = GetHitUnit())
|
||||
GetCaster()->SummonCreature(NPC_FALLOUT_SLIME, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnHit += SpellHitFn(spell_grobbulus_slime_spray::HandleHit);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_grobbulus()
|
||||
{
|
||||
new boss_grobbulus();
|
||||
new boss_grobbulus_poison_cloud();
|
||||
RegisterSpellScript(spell_grobbulus_mutating_injection_aura);
|
||||
RegisterSpellScript(spell_grobbulus_poison);
|
||||
RegisterSpellScript(spell_grobbulus_slime_spray);
|
||||
}
|
||||
|
||||
@ -34,8 +34,7 @@ enum Says
|
||||
enum Spells
|
||||
{
|
||||
SPELL_SPELL_DISRUPTION = 29310,
|
||||
SPELL_DECREPIT_FEVER_10 = 29998,
|
||||
SPELL_DECREPIT_FEVER_25 = 55011,
|
||||
SPELL_DECREPIT_FEVER = 29998,
|
||||
SPELL_PLAGUE_CLOUD = 29350,
|
||||
SPELL_TELEPORT_SELF = 30211
|
||||
};
|
||||
@ -168,7 +167,7 @@ public:
|
||||
events.Repeat(10s);
|
||||
break;
|
||||
case EVENT_DECEPIT_FEVER:
|
||||
me->CastSpell(me, RAID_MODE(SPELL_DECREPIT_FEVER_10, SPELL_DECREPIT_FEVER_25), false);
|
||||
me->CastSpell(me, SPELL_DECREPIT_FEVER, false);
|
||||
events.Repeat(22s, 25s);
|
||||
break;
|
||||
case EVENT_PLAGUE_CLOUD:
|
||||
|
||||
@ -43,10 +43,8 @@ enum Yells
|
||||
enum Spells
|
||||
{
|
||||
// Kel'Thzuad
|
||||
SPELL_FROST_BOLT_SINGLE_10 = 28478,
|
||||
SPELL_FROST_BOLT_SINGLE_25 = 55802,
|
||||
SPELL_FROST_BOLT_MULTI_10 = 28479,
|
||||
SPELL_FROST_BOLT_MULTI_25 = 55807,
|
||||
SPELL_FROST_BOLT_SINGLE = 28478,
|
||||
SPELL_FROST_BOLT_MULTI = 28479,
|
||||
SPELL_SHADOW_FISURE = 27810,
|
||||
SPELL_VOID_BLAST = 27812,
|
||||
SPELL_DETONATE_MANA = 27819,
|
||||
@ -367,11 +365,11 @@ public:
|
||||
me->CastSpell(me, SPELL_BERSERK, true);
|
||||
break;
|
||||
case EVENT_FROST_BOLT_SINGLE:
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_FROST_BOLT_SINGLE_10, SPELL_FROST_BOLT_SINGLE_25), false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_FROST_BOLT_SINGLE, false);
|
||||
events.Repeat(2s, 10s);
|
||||
break;
|
||||
case EVENT_FROST_BOLT_MULTI:
|
||||
me->CastSpell(me, RAID_MODE(SPELL_FROST_BOLT_MULTI_10, SPELL_FROST_BOLT_MULTI_25), false);
|
||||
me->CastSpell(me, SPELL_FROST_BOLT_MULTI, false);
|
||||
events.Repeat(15s, 30s);
|
||||
break;
|
||||
case EVENT_SHADOW_FISSURE:
|
||||
|
||||
@ -23,10 +23,8 @@ enum Spells
|
||||
{
|
||||
SPELL_NECROTIC_AURA = 55593,
|
||||
SPELL_SUMMON_SPORE = 29234,
|
||||
SPELL_DEATHBLOOM_10 = 29865,
|
||||
SPELL_DEATHBLOOM_25 = 55053,
|
||||
SPELL_INEVITABLE_DOOM_10 = 29204,
|
||||
SPELL_INEVITABLE_DOOM_25 = 55052,
|
||||
SPELL_DEATHBLOOM = 29865,
|
||||
SPELL_INEVITABLE_DOOM = 29204,
|
||||
SPELL_BERSERK = 26662
|
||||
};
|
||||
|
||||
@ -134,11 +132,11 @@ public:
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
case EVENT_DEATHBLOOM:
|
||||
me->CastSpell(me, RAID_MODE(SPELL_DEATHBLOOM_10, SPELL_DEATHBLOOM_25), false);
|
||||
me->CastSpell(me, SPELL_DEATHBLOOM, false);
|
||||
events.Repeat(30s);
|
||||
break;
|
||||
case EVENT_INEVITABLE_DOOM:
|
||||
me->CastSpell(me, RAID_MODE(SPELL_INEVITABLE_DOOM_10, SPELL_INEVITABLE_DOOM_25), false);
|
||||
me->CastSpell(me, SPELL_INEVITABLE_DOOM, false);
|
||||
doomCounter++;
|
||||
events.Repeat(doomCounter < 6 ? 30s : 15s);
|
||||
break;
|
||||
|
||||
@ -26,14 +26,10 @@
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_WEB_SPRAY_10 = 29484,
|
||||
SPELL_WEB_SPRAY_25 = 54125,
|
||||
SPELL_POISON_SHOCK_10 = 28741,
|
||||
SPELL_POISON_SHOCK_25 = 54122,
|
||||
SPELL_NECROTIC_POISON_10 = 54121,
|
||||
SPELL_NECROTIC_POISON_25 = 28776,
|
||||
SPELL_FRENZY_10 = 54123,
|
||||
SPELL_FRENZY_25 = 54124,
|
||||
SPELL_WEB_SPRAY = 29484,
|
||||
SPELL_POISON_SHOCK = 28741,
|
||||
SPELL_NECROTIC_POISON = 54121,
|
||||
SPELL_FRENZY = 54123,
|
||||
SPELL_WEB_WRAP_STUN = 28622,
|
||||
SPELL_WEB_WRAP_SUMMON = 28627,
|
||||
SPELL_WEB_WRAP_KILL_WEBS = 52512,
|
||||
@ -231,15 +227,15 @@ public:
|
||||
{
|
||||
case EVENT_WEB_SPRAY:
|
||||
Talk(EMOTE_WEB_SPRAY);
|
||||
me->CastSpell(me, RAID_MODE(SPELL_WEB_SPRAY_10, SPELL_WEB_SPRAY_25), true);
|
||||
me->CastSpell(me, SPELL_WEB_SPRAY, true);
|
||||
events.Repeat(40s);
|
||||
break;
|
||||
case EVENT_POISON_SHOCK:
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_POISON_SHOCK_10, SPELL_POISON_SHOCK_25), false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_POISON_SHOCK, false);
|
||||
events.Repeat(10s);
|
||||
break;
|
||||
case EVENT_NECROTIC_POISON:
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_NECROTIC_POISON_10, SPELL_NECROTIC_POISON_25), false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_NECROTIC_POISON, false);
|
||||
events.Repeat(30s);
|
||||
break;
|
||||
case EVENT_SUMMON_SPIDERLINGS:
|
||||
@ -253,7 +249,7 @@ public:
|
||||
case EVENT_HEALTH_CHECK:
|
||||
if (me->GetHealthPct() < 30)
|
||||
{
|
||||
me->CastSpell(me, RAID_MODE(SPELL_FRENZY_10, SPELL_FRENZY_25), true);
|
||||
me->CastSpell(me, SPELL_FRENZY, true);
|
||||
break;
|
||||
}
|
||||
events.Repeat(1s);
|
||||
|
||||
@ -34,10 +34,8 @@ enum Says
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_CURSE_OF_THE_PLAGUEBRINGER_10 = 29213,
|
||||
SPELL_CURSE_OF_THE_PLAGUEBRINGER_25 = 54835,
|
||||
SPELL_CRIPPLE_10 = 29212,
|
||||
SPELL_CRIPPLE_25 = 54814,
|
||||
SPELL_CURSE_OF_THE_PLAGUEBRINGER = 29213,
|
||||
SPELL_CRIPPLE = 29212,
|
||||
SPELL_SUMMON_PLAGUED_WARRIORS = 29237,
|
||||
SPELL_TELEPORT = 29216,
|
||||
SPELL_TELEPORT_BACK = 29231,
|
||||
@ -207,7 +205,7 @@ public:
|
||||
case EVENT_CURSE:
|
||||
if (events.GetPhaseMask() == 0)
|
||||
{
|
||||
me->CastCustomSpell(RAID_MODE(SPELL_CURSE_OF_THE_PLAGUEBRINGER_10, SPELL_CURSE_OF_THE_PLAGUEBRINGER_25), SPELLVALUE_MAX_TARGETS, RAID_MODE(3, 10), me, false);
|
||||
me->CastCustomSpell(SPELL_CURSE_OF_THE_PLAGUEBRINGER, SPELLVALUE_MAX_TARGETS, RAID_MODE(3, 10), me, false);
|
||||
}
|
||||
events.Repeat(25s);
|
||||
break;
|
||||
@ -228,7 +226,7 @@ public:
|
||||
break;
|
||||
case EVENT_BLINK:
|
||||
DoResetThreatList();
|
||||
me->CastSpell(me, RAID_MODE(SPELL_CRIPPLE_10, SPELL_CRIPPLE_25), false);
|
||||
me->CastSpell(me, SPELL_CRIPPLE, false);
|
||||
me->CastSpell(me, SPELL_BLINK, true);
|
||||
Talk(EMOTE_BLINK);
|
||||
events.Repeat(30s);
|
||||
|
||||
@ -30,8 +30,7 @@ enum Yells
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_HATEFUL_STRIKE_10 = 41926,
|
||||
SPELL_HATEFUL_STRIKE_25 = 59192,
|
||||
SPELL_HATEFUL_STRIKE = 41926,
|
||||
SPELL_FRENZY = 28131,
|
||||
SPELL_BERSERK = 26662,
|
||||
SPELL_SLIME_BOLT = 32309
|
||||
@ -155,7 +154,7 @@ public:
|
||||
}
|
||||
if (finalTarget)
|
||||
{
|
||||
me->CastSpell(finalTarget, RAID_MODE(SPELL_HATEFUL_STRIKE_10, SPELL_HATEFUL_STRIKE_25), false);
|
||||
me->CastSpell(finalTarget, SPELL_HATEFUL_STRIKE, false);
|
||||
}
|
||||
events.Repeat(1s);
|
||||
break;
|
||||
|
||||
@ -34,8 +34,7 @@ enum Says
|
||||
enum Spells
|
||||
{
|
||||
SPELL_UNBALANCING_STRIKE = 26613,
|
||||
SPELL_DISRUPTING_SHOUT_10 = 55543,
|
||||
SPELL_DISRUPTING_SHOUT_25 = 29107,
|
||||
SPELL_DISRUPTING_SHOUT = 55543,
|
||||
SPELL_JAGGED_KNIFE = 55550,
|
||||
SPELL_HOPELESS = 29125,
|
||||
SPELL_TAUNT = 29060
|
||||
@ -267,7 +266,7 @@ public:
|
||||
events.Repeat(20s);
|
||||
break;
|
||||
case EVENT_DISRUPTING_SHOUT:
|
||||
me->CastSpell(me, RAID_MODE(SPELL_DISRUPTING_SHOUT_10, SPELL_DISRUPTING_SHOUT_25), false);
|
||||
me->CastSpell(me, SPELL_DISRUPTING_SHOUT, false);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
case EVENT_JAGGED_KNIFE:
|
||||
|
||||
@ -33,14 +33,11 @@ enum Yells
|
||||
enum Spells
|
||||
{
|
||||
// Fight
|
||||
SPELL_FROST_AURA_10 = 28531,
|
||||
SPELL_FROST_AURA_25 = 55799,
|
||||
SPELL_FROST_AURA = 28531,
|
||||
SPELL_CLEAVE = 19983,
|
||||
SPELL_TAIL_SWEEP_10 = 55697,
|
||||
SPELL_TAIL_SWEEP_25 = 55696,
|
||||
SPELL_TAIL_SWEEP = 55697,
|
||||
SPELL_SUMMON_BLIZZARD = 28560,
|
||||
SPELL_LIFE_DRAIN_10 = 28542,
|
||||
SPELL_LIFE_DRAIN_25 = 55665,
|
||||
SPELL_LIFE_DRAIN = 28542,
|
||||
SPELL_BERSERK = 26662,
|
||||
|
||||
// Ice block
|
||||
@ -160,7 +157,7 @@ public:
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
EnterCombatSelfFunction();
|
||||
me->CastSpell(me, RAID_MODE(SPELL_FROST_AURA_10, SPELL_FROST_AURA_25), true);
|
||||
me->CastSpell(me, SPELL_FROST_AURA, true);
|
||||
events.ScheduleEvent(EVENT_BERSERK, 15min);
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 5s);
|
||||
events.ScheduleEvent(EVENT_TAIL_SWEEP, 10s);
|
||||
@ -258,11 +255,11 @@ public:
|
||||
events.Repeat(10s);
|
||||
return;
|
||||
case EVENT_TAIL_SWEEP:
|
||||
me->CastSpell(me, RAID_MODE(SPELL_TAIL_SWEEP_10, SPELL_TAIL_SWEEP_25), false);
|
||||
me->CastSpell(me, SPELL_TAIL_SWEEP, false);
|
||||
events.Repeat(10s);
|
||||
return;
|
||||
case EVENT_LIFE_DRAIN:
|
||||
me->CastCustomSpell(RAID_MODE(SPELL_LIFE_DRAIN_10, SPELL_LIFE_DRAIN_25), SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5), me, false);
|
||||
me->CastCustomSpell(SPELL_LIFE_DRAIN, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 5), me, false);
|
||||
events.Repeat(24s);
|
||||
return;
|
||||
case EVENT_BLIZZARD:
|
||||
|
||||
@ -59,20 +59,17 @@ enum Spells
|
||||
SPELL_SHOCK_VISUAL = 28159,
|
||||
|
||||
// Stalagg
|
||||
SPELL_POWER_SURGE_10 = 54529,
|
||||
SPELL_POWER_SURGE_25 = 28134,
|
||||
SPELL_POWER_SURGE = 54529,
|
||||
SPELL_STALAGG_CHAIN = 28096,
|
||||
|
||||
// Feugen
|
||||
SPELL_STATIC_FIELD_10 = 28135,
|
||||
SPELL_STATIC_FIELD_25 = 54528,
|
||||
SPELL_STATIC_FIELD = 28135,
|
||||
SPELL_FEUGEN_CHAIN = 28111,
|
||||
|
||||
// Thaddius
|
||||
SPELL_POLARITY_SHIFT = 28089,
|
||||
SPELL_BALL_LIGHTNING = 28299,
|
||||
SPELL_CHAIN_LIGHTNING_10 = 28167,
|
||||
SPELL_CHAIN_LIGHTNING_25 = 54531,
|
||||
SPELL_CHAIN_LIGHTNING = 28167,
|
||||
SPELL_BERSERK = 27680,
|
||||
SPELL_THADDIUS_VISUAL_LIGHTNING = 28136,
|
||||
SPELL_THADDIUS_SPAWN_STUN = 28160,
|
||||
@ -308,16 +305,17 @@ public:
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->SetControlled(false, UNIT_STATE_STUNNED);
|
||||
me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
events.ScheduleEvent(EVENT_THADDIUS_CHAIN_LIGHTNING, 14s);
|
||||
events.ScheduleEvent(EVENT_THADDIUS_BERSERK, 6min);
|
||||
events.ScheduleEvent(EVENT_THADDIUS_POLARITY_SHIFT, 30s);
|
||||
events.ScheduleEvent(EVENT_THADDIUS_POLARITY_SHIFT, 20s);
|
||||
events.ScheduleEvent(EVENT_ALLOW_BALL_LIGHTNING, 5s);
|
||||
return;
|
||||
case EVENT_THADDIUS_BERSERK:
|
||||
me->CastSpell(me, SPELL_BERSERK, true);
|
||||
break;
|
||||
case EVENT_THADDIUS_CHAIN_LIGHTNING:
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25), false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_CHAIN_LIGHTNING, false);
|
||||
events.Repeat(15s);
|
||||
break;
|
||||
case EVENT_THADDIUS_POLARITY_SHIFT:
|
||||
@ -497,11 +495,11 @@ public:
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_MINION_POWER_SURGE:
|
||||
me->CastSpell(me, RAID_MODE(SPELL_POWER_SURGE_10, SPELL_POWER_SURGE_25), false);
|
||||
me->CastSpell(me, SPELL_POWER_SURGE, false);
|
||||
events.Repeat(19s);
|
||||
break;
|
||||
case EVENT_MINION_STATIC_FIELD:
|
||||
me->CastSpell(me, RAID_MODE(SPELL_STATIC_FIELD_10, SPELL_STATIC_FIELD_25), false);
|
||||
me->CastSpell(me, SPELL_STATIC_FIELD, false);
|
||||
events.Repeat(3s);
|
||||
break;
|
||||
case EVENT_MINION_MAGNETIC_PULL:
|
||||
|
||||
@ -30,6 +30,7 @@ enum VolkahnSpells
|
||||
|
||||
//Molten Golem
|
||||
SPELL_BLAST_WAVE = 23113,
|
||||
SPELL_COOL_DOWN = 52443,
|
||||
SPELL_IMMOLATION_STRIKE = 52433,
|
||||
SPELL_SHATTER = 52429,
|
||||
};
|
||||
@ -59,8 +60,8 @@ enum VolkhanEvents
|
||||
EVENT_MOVE_TO_ANVIL = 5,
|
||||
|
||||
// Molten Golem
|
||||
EVENT_BLAST = 11,
|
||||
EVENT_IMMOLATION = 12,
|
||||
EVENT_IMMOLATION_STRIKE = 12,
|
||||
EVENT_CHANGE_TARGET = 13,
|
||||
};
|
||||
|
||||
enum Yells
|
||||
@ -82,7 +83,7 @@ struct boss_volkhan : public BossAI
|
||||
{
|
||||
_Reset();
|
||||
x = y = z = PointID = ShatteredCount = 0;
|
||||
HealthCheck = 100;
|
||||
shatteredStompCast = false;
|
||||
me->SetSpeed(MOVE_RUN, 1.2f, true);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
instance->SetData(DATA_VOLKHAN_ACHIEVEMENT, true);
|
||||
@ -93,7 +94,10 @@ struct boss_volkhan : public BossAI
|
||||
_JustEngagedWith();
|
||||
me->SetInCombatWithZone();
|
||||
Talk(SAY_AGGRO);
|
||||
ScheduleEvents(false);
|
||||
events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, randtime(9s, 14s));
|
||||
events.ScheduleEvent(EVENT_HEAT, randtime(18s, 38s));
|
||||
events.ScheduleEvent(EVENT_CHECK_HEALTH, 1s);
|
||||
events.ScheduleEvent(EVENT_POSITION, 4s);
|
||||
}
|
||||
|
||||
void JustDied(Unit*) override
|
||||
@ -151,15 +155,6 @@ struct boss_volkhan : public BossAI
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void ScheduleEvents(bool anvil)
|
||||
{
|
||||
events.SetPhase(1);
|
||||
events.RescheduleEvent(EVENT_HEAT, 8s, 0, 1);
|
||||
events.RescheduleEvent(EVENT_SHATTER, 10s, 0, 1);
|
||||
events.RescheduleEvent(EVENT_CHECK_HEALTH, anvil ? 1s : 6s, 0, 1);
|
||||
events.RescheduleEvent(EVENT_POSITION, 4s, 0, 1);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summon) override
|
||||
{
|
||||
summons.Summon(summon);
|
||||
@ -182,6 +177,19 @@ struct boss_volkhan : public BossAI
|
||||
}
|
||||
}
|
||||
|
||||
bool HasActiveGolem()
|
||||
{
|
||||
for (ObjectGuid const& guid : summons)
|
||||
{
|
||||
if (Creature* golem = ObjectAccessor::GetCreature(*me, guid))
|
||||
{
|
||||
if (golem->GetEntry() == NPC_MOLTEN_GOLEM && golem->IsAlive())
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 id) override
|
||||
{
|
||||
if (type != POINT_MOTION_TYPE)
|
||||
@ -190,10 +198,8 @@ struct boss_volkhan : public BossAI
|
||||
if (id == POINT_ANVIL)
|
||||
{
|
||||
me->SetSpeed(MOVE_RUN, 1.2f, true);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
me->CastSpell(me, SPELL_TEMPER, false);
|
||||
DoCastSelf(SPELL_TEMPER);
|
||||
PointID = 0;
|
||||
ScheduleEvents(true);
|
||||
|
||||
// update orientation at server
|
||||
me->SetOrientation(2.19f);
|
||||
@ -205,24 +211,26 @@ struct boss_volkhan : public BossAI
|
||||
me->SetControlled(true, UNIT_STATE_ROOT);
|
||||
}
|
||||
else
|
||||
events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
|
||||
me->GetMotionMaster()->MovePoint(PointID, x, y, z);
|
||||
}
|
||||
|
||||
void SpellHitTarget(Unit* /*who*/, SpellInfo const* spellInfo) override
|
||||
{
|
||||
if (spellInfo->Id == SPELL_TEMPER)
|
||||
{
|
||||
me->CastSpell(me, SPELL_SUMMON_MOLTEN_GOLEM, true);
|
||||
me->CastSpell(me, SPELL_SUMMON_MOLTEN_GOLEM, true);
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||
DoCastSelf(SPELL_SUMMON_MOLTEN_GOLEM, true);
|
||||
DoCastSelf(SPELL_SUMMON_MOLTEN_GOLEM, true);
|
||||
me->SetControlled(false, UNIT_STATE_ROOT);
|
||||
me->SetReactState(REACT_AGGRESSIVE);
|
||||
if (me->GetVictim())
|
||||
me->GetMotionMaster()->MoveChase(me->GetVictim());
|
||||
|
||||
events.RescheduleEvent(EVENT_HEAT, randtime(9s, 24s));
|
||||
}
|
||||
}
|
||||
|
||||
void GoToAnvil()
|
||||
{
|
||||
events.SetPhase(2);
|
||||
HealthCheck -= 20;
|
||||
me->SetSpeed(MOVE_RUN, 4.0f, true);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
|
||||
@ -231,12 +239,12 @@ struct boss_volkhan : public BossAI
|
||||
if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
|
||||
me->GetMotionMaster()->MovementExpired();
|
||||
|
||||
events.ScheduleEvent(EVENT_MOVE_TO_ANVIL, 0ms, 0, 2);
|
||||
GetNextPos();
|
||||
me->GetMotionMaster()->MovePoint(PointID, x, y, z);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
@ -248,31 +256,31 @@ struct boss_volkhan : public BossAI
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_HEAT:
|
||||
me->CastSpell(me, SPELL_HEAT, true);
|
||||
events.Repeat(8s);
|
||||
if (HasActiveGolem())
|
||||
{
|
||||
DoCastSelf(SPELL_HEAT);
|
||||
events.Repeat(randtime(9s, 24s));
|
||||
}
|
||||
break;
|
||||
case EVENT_CHECK_HEALTH:
|
||||
if (HealthBelowPct(HealthCheck))
|
||||
GoToAnvil();
|
||||
|
||||
if (!shatteredStompCast && HealthBelowPct(25))
|
||||
{
|
||||
shatteredStompCast = true;
|
||||
DoCastAOE(SPELL_SHATTERING_STOMP);
|
||||
Talk(SAY_STOMP);
|
||||
summons.DoAction(ACTION_SHATTER);
|
||||
}
|
||||
events.Repeat(1s);
|
||||
return;
|
||||
case EVENT_SHATTER:
|
||||
{
|
||||
events.Repeat(10s);
|
||||
summons.DoAction(ACTION_SHATTER);
|
||||
break;
|
||||
}
|
||||
case EVENT_MOVE_TO_ANVIL:
|
||||
GetNextPos();
|
||||
me->GetMotionMaster()->MovePoint(PointID, x, y, z);
|
||||
GoToAnvil();
|
||||
events.Repeat(randtime(30s, 36s));
|
||||
return;
|
||||
case EVENT_POSITION:
|
||||
if (me->GetDistance(1331.9f, -106, 56) > 95)
|
||||
EnterEvadeMode();
|
||||
else
|
||||
events.Repeat(4s);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -282,10 +290,10 @@ struct boss_volkhan : public BossAI
|
||||
private:
|
||||
EventMap events;
|
||||
SummonList summons;
|
||||
uint8 HealthCheck;
|
||||
float x, y, z;
|
||||
uint8 PointID;
|
||||
uint8 ShatteredCount;
|
||||
bool shatteredStompCast;
|
||||
};
|
||||
|
||||
struct npc_molten_golem : public ScriptedAI
|
||||
@ -298,8 +306,9 @@ struct npc_molten_golem : public ScriptedAI
|
||||
void Reset() override
|
||||
{
|
||||
events.Reset();
|
||||
events.ScheduleEvent(EVENT_BLAST, 7s);
|
||||
events.ScheduleEvent(EVENT_IMMOLATION, 3s);
|
||||
events.ScheduleEvent(EVENT_IMMOLATION_STRIKE, 3s);
|
||||
events.ScheduleEvent(EVENT_CHANGE_TARGET, 5s);
|
||||
DoCastSelf(SPELL_COOL_DOWN, true);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit*, uint32& uiDamage, DamageEffectType, SpellSchoolMask) override
|
||||
@ -312,6 +321,9 @@ struct npc_molten_golem : public ScriptedAI
|
||||
|
||||
if (uiDamage >= me->GetHealth())
|
||||
{
|
||||
if (me->GetMap()->IsHeroic())
|
||||
DoCastSelf(SPELL_BLAST_WAVE, true);
|
||||
|
||||
me->UpdateEntry(NPC_BRITTLE_GOLEM, 0, false);
|
||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_DISABLE_MOVE);
|
||||
me->SetHealth(me->GetMaxHealth());
|
||||
@ -351,14 +363,19 @@ struct npc_molten_golem : public ScriptedAI
|
||||
|
||||
switch (events.ExecuteEvent())
|
||||
{
|
||||
case EVENT_BLAST:
|
||||
me->CastSpell(me, SPELL_BLAST_WAVE, false);
|
||||
events.Repeat(14s);
|
||||
break;
|
||||
case EVENT_IMMOLATION:
|
||||
me->CastSpell(me->GetVictim(), SPELL_IMMOLATION_STRIKE, false);
|
||||
case EVENT_IMMOLATION_STRIKE:
|
||||
if (SelectTarget(SelectTargetMethod::MaxThreat, 0, 0.0f, true, true, -SPELL_IMMOLATION_STRIKE))
|
||||
DoCastVictim(SPELL_IMMOLATION_STRIKE);
|
||||
events.Repeat(5s);
|
||||
break;
|
||||
case EVENT_CHANGE_TARGET:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true))
|
||||
{
|
||||
me->GetThreatMgr().ResetAllThreat();
|
||||
me->AddThreat(target, 30000.0f);
|
||||
AttackStart(target);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
|
||||
@ -77,10 +77,11 @@ public:
|
||||
|
||||
void JustEngagedWith(Unit* /*who*/) override
|
||||
{
|
||||
events.ScheduleEvent(EVENT_STORM, 5s);
|
||||
events.ScheduleEvent(EVENT_SHOCK, 26s, 32s);
|
||||
events.ScheduleEvent(EVENT_PILLAR, 12s, 20s);
|
||||
events.ScheduleEvent(EVENT_PARTING, 8s);
|
||||
events.ScheduleEvent(EVENT_STORM, 6s, 10s);
|
||||
events.ScheduleEvent(EVENT_SHOCK, 14s, 29s);
|
||||
events.ScheduleEvent(EVENT_PILLAR, 7s, 15s);
|
||||
if (IsHeroic())
|
||||
events.ScheduleEvent(EVENT_PARTING, 27s, 45s);
|
||||
|
||||
Talk(SAY_AGGRO);
|
||||
if (pInstance)
|
||||
@ -105,7 +106,7 @@ public:
|
||||
case EVENT_STORM:
|
||||
{
|
||||
me->CastSpell(me->GetVictim(), SPELL_STORM_OF_GRIEF, true);
|
||||
events.Repeat(10s);
|
||||
events.Repeat(16s, 20s);
|
||||
break;
|
||||
}
|
||||
case EVENT_SHOCK:
|
||||
@ -113,7 +114,7 @@ public:
|
||||
me->CastSpell(me->GetVictim(), SPELL_SHOCK_OF_SORROW, false);
|
||||
Talk(SAY_STUN);
|
||||
|
||||
events.Repeat(16s, 22s);
|
||||
events.Repeat(19s, 33s);
|
||||
break;
|
||||
}
|
||||
case EVENT_PILLAR:
|
||||
@ -121,15 +122,28 @@ public:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0))
|
||||
me->CastSpell(target, SPELL_PILLAR_OF_WOE, false);
|
||||
|
||||
events.Repeat(12s, 20s);
|
||||
events.Repeat(8s, 31s);
|
||||
break;
|
||||
}
|
||||
case EVENT_PARTING:
|
||||
{
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true, 0))
|
||||
Unit* target = nullptr;
|
||||
std::list<Unit*> targetList;
|
||||
|
||||
SelectTargetList(targetList, 10, SelectTargetMethod::Random, 0, 50.0f, true);
|
||||
for (Unit* possibleTarget : targetList)
|
||||
{
|
||||
if (possibleTarget && possibleTarget->IsPlayer() && possibleTarget->getPowerType() == POWER_MANA)
|
||||
{
|
||||
target = possibleTarget;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (target)
|
||||
me->CastSpell(target, SPELL_PARTING_SORROW, false);
|
||||
|
||||
events.Repeat(6s, 16s);
|
||||
events.Repeat(27s, 45s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,55 +31,35 @@ enum AssemblySpells
|
||||
SPELL_BERSERK = 47008,
|
||||
|
||||
// Steelbreaker
|
||||
SPELL_HIGH_VOLTAGE_10 = 61890,
|
||||
SPELL_HIGH_VOLTAGE_25 = 63498,
|
||||
SPELL_FUSION_PUNCH_10 = 61903,
|
||||
SPELL_FUSION_PUNCH_25 = 63493,
|
||||
SPELL_STATIC_DISRUPTION_10 = 61911,
|
||||
SPELL_STATIC_DISRUPTION_25 = 63495,
|
||||
SPELL_OVERWHELMING_POWER_10 = 64637,
|
||||
SPELL_OVERWHELMING_POWER_25 = 61888,
|
||||
SPELL_HIGH_VOLTAGE = 61890,
|
||||
SPELL_FUSION_PUNCH = 61903,
|
||||
SPELL_STATIC_DISRUPTION = 61911,
|
||||
SPELL_OVERWHELMING_POWER = 64637,
|
||||
SPELL_ELECTRICAL_CHARGE = 61902,
|
||||
|
||||
// Runemaster Molgeim
|
||||
SPELL_SHIELD_OF_RUNES_BUFF = 62277,
|
||||
SPELL_SHIELD_OF_RUNES_10 = 62274,
|
||||
SPELL_SHIELD_OF_RUNES_25 = 63489,
|
||||
SPELL_SHIELD_OF_RUNES = 62274,
|
||||
SPELL_RUNE_OF_POWER = 61973,
|
||||
SPELL_RUNE_OF_DEATH_10 = 62269,
|
||||
SPELL_RUNE_OF_DEATH_25 = 63490,
|
||||
SPELL_RUNE_OF_DEATH = 62269,
|
||||
SPELL_RUNE_OF_SUMMONING = 62273,
|
||||
SPELL_RUNE_OF_SUMMONING_SUMMON = 62020,
|
||||
SPELL_LIGHTNING_BLAST_10 = 62054,
|
||||
SPELL_LIGHTNING_BLAST_25 = 63491,
|
||||
SPELL_LIGHTNING_BLAST = 62054,
|
||||
CREATURE_LIGHTNING_ELEMENTAL = 32958,
|
||||
CREATURE_RUNE_OF_SUMMONING = 33051,
|
||||
SPELL_RUNE_OF_POWER_OOC_CHANNEL = 61975,
|
||||
|
||||
// Stormcaller Brundir
|
||||
SPELL_CHAIN_LIGHTNING_10 = 61879,
|
||||
SPELL_CHAIN_LIGHTNING_25 = 63479,
|
||||
SPELL_OVERLOAD_10 = 61869,
|
||||
SPELL_OVERLOAD_25 = 63481,
|
||||
SPELL_LIGHTNING_WHIRL_10 = 61915,
|
||||
SPELL_LIGHTNING_WHIRL_25 = 63483,
|
||||
SPELL_LIGHTNING_TENDRILS_10 = 61887,
|
||||
SPELL_LIGHTNING_TENDRILS_25 = 63486,
|
||||
SPELL_CHAIN_LIGHTNING = 61879,
|
||||
SPELL_OVERLOAD = 61869,
|
||||
SPELL_LIGHTNING_WHIRL = 61915,
|
||||
SPELL_LIGHTNING_WHIRL_TRIGG = 61916,
|
||||
SPELL_LIGHTNING_TENDRILS = 61887,
|
||||
SPELL_LIGHTNING_TENDRILS_2 = 61883,
|
||||
SPELL_STORMSHIELD = 64187,
|
||||
SPELL_LIGHTNING_CHANNEL_PRE = 61942,
|
||||
};
|
||||
|
||||
#define SPELL_HIGH_VOLTAGE RAID_MODE(SPELL_HIGH_VOLTAGE_10, SPELL_HIGH_VOLTAGE_25)
|
||||
#define SPELL_FUSION_PUNCH RAID_MODE(SPELL_FUSION_PUNCH_10, SPELL_FUSION_PUNCH_25)
|
||||
#define SPELL_STATIC_DISRUPTION RAID_MODE(SPELL_STATIC_DISRUPTION_10, SPELL_STATIC_DISRUPTION_25)
|
||||
#define SPELL_OVERWHELMING_POWER RAID_MODE(SPELL_OVERWHELMING_POWER_10, SPELL_OVERWHELMING_POWER_25)
|
||||
#define SPELL_SHIELD_OF_RUNES RAID_MODE(SPELL_SHIELD_OF_RUNES_10, SPELL_SHIELD_OF_RUNES_25)
|
||||
#define SPELL_RUNE_OF_DEATH RAID_MODE(SPELL_RUNE_OF_DEATH_10, SPELL_RUNE_OF_DEATH_25)
|
||||
#define SPELL_LIGHTNING_BLAST RAID_MODE(SPELL_LIGHTNING_BLAST_10, SPELL_LIGHTNING_BLAST_25)
|
||||
#define SPELL_CHAIN_LIGHTNING RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25)
|
||||
#define SPELL_OVERLOAD RAID_MODE(SPELL_OVERLOAD_10, SPELL_OVERLOAD_25)
|
||||
#define SPELL_LIGHTNING_WHIRL RAID_MODE(SPELL_LIGHTNING_WHIRL_10, SPELL_LIGHTNING_WHIRL_25)
|
||||
#define SPELL_LIGHTNING_TENDRILS RAID_MODE(SPELL_LIGHTNING_TENDRILS_10, SPELL_LIGHTNING_TENDRILS_25)
|
||||
};
|
||||
|
||||
enum eEnums
|
||||
{
|
||||
@ -720,7 +700,7 @@ public:
|
||||
|
||||
void SpellHitTarget(Unit* /*target*/, SpellInfo const* spellInfo) override
|
||||
{
|
||||
if (spellInfo->Id == SPELL_CHAIN_LIGHTNING || spellInfo->Id == uint32(RAID_MODE(61916, 63482))) // Lightning Whirl triggered
|
||||
if (spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_CHAIN_LIGHTNING, me) || spellInfo->Id == sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHTNING_WHIRL_TRIGG, me))
|
||||
_stunnedAchievement = false;
|
||||
}
|
||||
|
||||
@ -797,7 +777,7 @@ public:
|
||||
me->SetUnitFlag(UNIT_FLAG_STUNNED);
|
||||
|
||||
me->CastSpell(me, SPELL_LIGHTNING_TENDRILS, true);
|
||||
me->CastSpell(me, 61883, true);
|
||||
me->CastSpell(me, SPELL_LIGHTNING_TENDRILS_2, true);
|
||||
events.ScheduleEvent(EVENT_LIGHTNING_LAND, 16s);
|
||||
events.ScheduleEvent(EVENT_LIGHTNING_FLIGHT, 1s);
|
||||
break;
|
||||
@ -821,8 +801,8 @@ public:
|
||||
|
||||
me->SetRegeneratingHealth(true);
|
||||
_flyTargetGUID.Clear();
|
||||
me->RemoveAura(SPELL_LIGHTNING_TENDRILS);
|
||||
me->RemoveAura(61883);
|
||||
me->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_LIGHTNING_TENDRILS, me));
|
||||
me->RemoveAura(SPELL_LIGHTNING_TENDRILS_2);
|
||||
DoResetThreatList();
|
||||
events.CancelEvent(EVENT_LIGHTNING_FLIGHT);
|
||||
break;
|
||||
|
||||
@ -28,40 +28,25 @@ enum AuriayaSpells
|
||||
{
|
||||
// BASIC
|
||||
SPELL_TERRIFYING_SCREECH = 64386,
|
||||
SPELL_SENTINEL_BLAST_10 = 64389,
|
||||
SPELL_SENTINEL_BLAST_25 = 64678,
|
||||
SPELL_SONIC_SCREECH_10 = 64422,
|
||||
SPELL_SONIC_SCREECH_25 = 64688,
|
||||
SPELL_SENTINEL_BLAST = 64389,
|
||||
SPELL_SONIC_SCREECH = 64422,
|
||||
SPELL_GUARDIAN_SWARM = 64396,
|
||||
SPELL_ENRAGE = 47008,
|
||||
SPELL_ACTIVATE_FERAL_DEFENDER = 64449,
|
||||
|
||||
// Sanctum Sentry
|
||||
SPELL_SAVAGE_POUNCE_10 = 64666,
|
||||
SPELL_SAVAGE_POUNCE_25 = 64374,
|
||||
SPELL_RIP_FLESH_10 = 64375,
|
||||
SPELL_RIP_FLESH_25 = 64667,
|
||||
SPELL_SAVAGE_POUNCE = 64666,
|
||||
SPELL_RIP_FLESH = 64375,
|
||||
SPELL_STRENGTH_OF_THE_PACK = 64369,
|
||||
|
||||
// Feral Defender
|
||||
SPELL_FERAL_ESSENCE = 64455,
|
||||
SPELL_FERAL_POUNCE_10 = 64478,
|
||||
SPELL_FERAL_POUNCE_25 = 64669,
|
||||
SPELL_FERAL_RUSH_10 = 64496,
|
||||
SPELL_FERAL_RUSH_25 = 64674,
|
||||
SPELL_FERAL_POUNCE = 64478,
|
||||
SPELL_FERAL_RUSH = 64496,
|
||||
//SPELL_SEEPING_FERAL_ESSENCE_SUMMON = 64457,
|
||||
SPELL_SEEPING_FERAL_ESSENCE_10 = 64458,
|
||||
SPELL_SEEPING_FERAL_ESSENCE_25 = 64676,
|
||||
SPELL_SEEPING_FERAL_ESSENCE = 64458,
|
||||
};
|
||||
|
||||
#define SPELL_SONIC_SCREECH RAID_MODE(SPELL_SONIC_SCREECH_10, SPELL_SONIC_SCREECH_25)
|
||||
#define SPELL_SENTINEL_BLAST RAID_MODE(SPELL_SENTINEL_BLAST_10, SPELL_SENTINEL_BLAST_25)
|
||||
#define SPELL_SAVAGE_POUNCE RAID_MODE(SPELL_SAVAGE_POUNCE_10, SPELL_SAVAGE_POUNCE_25)
|
||||
#define SPELL_RIP_FLESH RAID_MODE(SPELL_RIP_FLESH_10, SPELL_RIP_FLESH_25)
|
||||
#define SPELL_FERAL_POUNCE RAID_MODE(SPELL_FERAL_POUNCE_10, SPELL_FERAL_POUNCE_25)
|
||||
#define SPELL_FERAL_RUSH RAID_MODE(SPELL_FERAL_RUSH_10, SPELL_FERAL_RUSH_25)
|
||||
//#define SPELL_SEEPING_FERAL_ESSENCE RAID_MODE(SPELL_SEEPING_FERAL_ESSENCE_10, SPELL_SEEPING_FERAL_ESSENCE_25)
|
||||
|
||||
enum AuriayaNPC
|
||||
{
|
||||
NPC_FERAL_DEFENDER = 34035,
|
||||
|
||||
@ -29,31 +29,23 @@ enum FreyaSpells
|
||||
SPELL_AUTO_GROW = 62559,
|
||||
SPELL_LIFEBINDER_PHERONOMES = 62619,
|
||||
SPELL_LIFEBINDER_VISUAL = 62579,
|
||||
SPELL_LIFEBINDER_HEAL_10 = 62584,
|
||||
SPELL_LIFEBINDER_HEAL_25 = 64185,
|
||||
SPELL_LIFEBINDER_HEAL = 62584,
|
||||
|
||||
// FREYA
|
||||
SPELL_TOUCH_OF_EONAR_10 = 62528,
|
||||
SPELL_TOUCH_OF_EONAR_25 = 62892,
|
||||
SPELL_TOUCH_OF_EONAR = 62528,
|
||||
SPELL_ATTUNED_TO_NATURE = 62519,
|
||||
SPELL_SUMMON_LIFEBINDER = 62870,
|
||||
SPELL_SUNBEAM_10 = 62623,
|
||||
SPELL_SUNBEAM_25 = 62872,
|
||||
SPELL_SUNBEAM = 62623,
|
||||
SPELL_NATURE_BOMB_FLIGHT = 64648,
|
||||
SPELL_NATURE_BOMB_DAMAGE_10 = 64587,
|
||||
SPELL_NATURE_BOMB_DAMAGE_25 = 64650,
|
||||
SPELL_NATURE_BOMB_DAMAGE = 64587,
|
||||
SPELL_GREEN_BANISH_STATE = 32567,
|
||||
SPELL_BERSERK = 47008,
|
||||
|
||||
// HARD MODE
|
||||
SPELL_GROUND_TREMOR_FREYA_10 = 62437,
|
||||
SPELL_GROUND_TREMOR_FREYA_25 = 62859,
|
||||
SPELL_IRON_ROOTS_FREYA_10 = 62862,
|
||||
SPELL_IRON_ROOTS_FREYA_25 = 62439,
|
||||
SPELL_IRON_ROOTS_FREYA_DAMAGE_10 = 62861,
|
||||
SPELL_IRON_ROOTS_FREYA_DAMAGE_25 = 62438,
|
||||
SPELL_UNSTABLE_SUN_FREYA_DAMAGE_10 = 62451,
|
||||
SPELL_UNSTABLE_SUN_FREYA_DAMAGE_25 = 62865,
|
||||
SPELL_GROUND_TREMOR_FREYA = 62437,
|
||||
SPELL_IRON_ROOTS_FREYA = 62862,
|
||||
SPELL_IRON_ROOTS_FREYA_DAMAGE = 62861,
|
||||
SPELL_UNSTABLE_SUN_FREYA_DAMAGE = 62451,
|
||||
SPELL_UNSTABLE_SUN_VISUAL = 62216,
|
||||
|
||||
// ELDERS
|
||||
@ -64,86 +56,49 @@ enum FreyaSpells
|
||||
|
||||
// BRIGHTLEAF
|
||||
SPELL_BRIGHTLEAF_FLUX = 62239,
|
||||
SPELL_SOLAR_FLARE_10 = 62240,
|
||||
SPELL_SOLAR_FLARE_25 = 64087,
|
||||
SPELL_SOLAR_FLARE = 62240,
|
||||
SPELL_UNSTABLE_SUN_BEAM_AURA = 62211,
|
||||
SPELL_PHOTOSYNTHESIS = 62209,
|
||||
SPELL_UNSTABLE_SUN_DAMAGE_10 = 62217,
|
||||
SPELL_UNSTABLE_SUN_DAMAGE_25 = 62922,
|
||||
SPELL_UNSTABLE_SUN_DAMAGE = 62217,
|
||||
|
||||
// IRONBRANCH
|
||||
SPELL_IMPALE_10 = 62310,
|
||||
SPELL_IMPALE_25 = 62928,
|
||||
SPELL_IRON_ROOTS_10 = 62275,
|
||||
SPELL_IRON_ROOTS_25 = 62929,
|
||||
SPELL_IRON_ROOTS_DAMAGE_10 = 62283,
|
||||
SPELL_IRON_ROOTS_DAMAGE_25 = 62930,
|
||||
SPELL_THORN_SWARM_10 = 62285,
|
||||
SPELL_THORN_SWARM_25 = 62931,
|
||||
SPELL_IMPALE = 62310,
|
||||
SPELL_IRON_ROOTS = 62275,
|
||||
SPELL_IRON_ROOTS_DAMAGE = 62283,
|
||||
SPELL_THORN_SWARM = 62285,
|
||||
|
||||
// STONEBARK
|
||||
SPELL_FISTS_OF_STONE = 62344,
|
||||
SPELL_GROUND_TREMOR_10 = 62325,
|
||||
SPELL_GROUND_TREMOR_25 = 62932,
|
||||
SPELL_PETRIFIED_BARK_10 = 62337,
|
||||
SPELL_PETRIFIED_BARK_25 = 62933,
|
||||
SPELL_GROUND_TREMOR = 62325,
|
||||
SPELL_PETRIFIED_BARK = 62337,
|
||||
|
||||
// SNAPLASHER
|
||||
SPELL_HARDENED_BARK_10 = 62664,
|
||||
SPELL_HARDENED_BARK_25 = 64191,
|
||||
SPELL_HARDENED_BARK = 62664,
|
||||
|
||||
// ANCIENT WATER SPIRIT
|
||||
SPELL_TIDAL_WAVE_10 = 62653,
|
||||
SPELL_TIDAL_WAVE_25 = 62935,
|
||||
SPELL_TIDAL_WAVE_DAMAGE_10 = 62654,
|
||||
SPELL_TIDAL_WAVE_DAMAGE_25 = 62936,
|
||||
SPELL_TIDAL_WAVE = 62653,
|
||||
SPELL_TIDAL_WAVE_DAMAGE = 62654,
|
||||
SPELL_TIDAL_WAVE_AURA = 62655,
|
||||
|
||||
// STORM LASHER
|
||||
SPELL_LIGHTNING_LASH_10 = 62648,
|
||||
SPELL_LIGHTNING_LASH_25 = 62939,
|
||||
SPELL_STORMBOLT_10 = 62649,
|
||||
SPELL_STORMBOLT_25 = 62938,
|
||||
SPELL_LIGHTNING_LASH = 62648,
|
||||
SPELL_STORMBOLT = 62649,
|
||||
|
||||
// ANCIENT CONSERVATOR
|
||||
SPELL_CONSERVATOR_GRIP = 62532,
|
||||
SPELL_NATURE_FURY_10 = 62589,
|
||||
SPELL_NATURE_FURY_25 = 63571,
|
||||
SPELL_NATURE_FURY = 62589,
|
||||
SPELL_POTENT_PHEROMONES = 62541,
|
||||
SPELL_HEALTHY_SPORE_VISUAL = 62538,
|
||||
SPELL_HEALTHY_SPORE_SUMMON = 62566,
|
||||
|
||||
// DETONATING LASHER
|
||||
SPELL_DETONATE_10 = 62598,
|
||||
SPELL_DETONATE_25 = 62937,
|
||||
SPELL_DETONATE = 62598,
|
||||
SPELL_FLAME_LASH = 62608,
|
||||
|
||||
// ACHIEVEMENT
|
||||
SPELL_DEFORESTATION_CREDIT = 65015,
|
||||
};
|
||||
|
||||
#define SPELL_GROUND_TREMOR RAID_MODE(SPELL_GROUND_TREMOR_10, SPELL_GROUND_TREMOR_25)
|
||||
#define SPELL_PETRIFIED_BARK RAID_MODE(SPELL_PETRIFIED_BARK_10, SPELL_PETRIFIED_BARK_25)
|
||||
#define SPELL_IRON_ROOTS RAID_MODE(SPELL_IRON_ROOTS_10, SPELL_IRON_ROOTS_25)
|
||||
#define SPELL_IMPALE RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25)
|
||||
#define SPELL_THORN_SWARM RAID_MODE(SPELL_THORN_SWARM_10, SPELL_THORN_SWARM_25)
|
||||
#define SPELL_UNSTABLE_SUN_DAMAGE RAID_MODE(SPELL_UNSTABLE_SUN_DAMAGE_10, SPELL_UNSTABLE_SUN_DAMAGE_25)
|
||||
#define SPELL_SOLAR_FLARE RAID_MODE(SPELL_SOLAR_FLARE_10, SPELL_SOLAR_FLARE_25)
|
||||
#define SPELL_TOUCH_OF_EONAR RAID_MODE(SPELL_TOUCH_OF_EONAR_10, SPELL_TOUCH_OF_EONAR_25)
|
||||
#define SPELL_LIFEBINDER_HEAL RAID_MODE(SPELL_LIFEBINDER_HEAL_10, SPELL_LIFEBINDER_HEAL_25)
|
||||
#define SPELL_TIDAL_WAVE RAID_MODE(SPELL_TIDAL_WAVE_10, SPELL_TIDAL_WAVE_25)
|
||||
#define SPELL_TIDAL_WAVE_DAMAGE RAID_MODE(SPELL_TIDAL_WAVE_DAMAGE_10, SPELL_TIDAL_WAVE_DAMAGE_25)
|
||||
#define SPELL_NATURE_FURY RAID_MODE(SPELL_NATURE_FURY_10, SPELL_NATURE_FURY_25)
|
||||
#define SPELL_HARDENED_BARK RAID_MODE(SPELL_HARDENED_BARK_10, SPELL_HARDENED_BARK_25)
|
||||
#define SPELL_DETONATE RAID_MODE(SPELL_DETONATE_10, SPELL_DETONATE_25)
|
||||
//#define SPELL_NATURE_BOMB_DAMAGE RAID_MODE(SPELL_NATURE_BOMB_DAMAGE_10, SPELL_NATURE_BOMB_DAMAGE_25)
|
||||
#define SPELL_SUNBEAM RAID_MODE(SPELL_SUNBEAM_10, SPELL_SUNBEAM_25)
|
||||
#define SPELL_GROUND_TREMOR_FREYA RAID_MODE(SPELL_GROUND_TREMOR_FREYA_10, SPELL_GROUND_TREMOR_FREYA_25)
|
||||
#define SPELL_IRON_ROOTS_FREYA RAID_MODE(SPELL_IRON_ROOTS_FREYA_10, SPELL_IRON_ROOTS_FREYA_25)
|
||||
#define SPELL_UNSTABLE_SUN_FREYA_DAMAGE RAID_MODE(SPELL_UNSTABLE_SUN_FREYA_DAMAGE_10, SPELL_UNSTABLE_SUN_FREYA_DAMAGE_25)
|
||||
#define SPELL_LIGHTNING_LASH RAID_MODE(SPELL_LIGHTNING_LASH_10, SPELL_LIGHTNING_LASH_25)
|
||||
#define SPELL_STORMBOLT RAID_MODE(SPELL_STORMBOLT_10, SPELL_STORMBOLT_25)
|
||||
|
||||
enum FreyaEvents
|
||||
{
|
||||
// FREYA
|
||||
@ -983,9 +938,9 @@ public:
|
||||
if (Unit* target = ObjectAccessor::GetUnit(*me, me->ToTempSummon()->GetSummonerGUID()))
|
||||
{
|
||||
if (me->GetEntry() == NPC_IRON_ROOT_TRIGGER) // Iron Branch spell
|
||||
target->RemoveAura(target->GetMap()->Is25ManRaid() ? SPELL_IRON_ROOTS_DAMAGE_25 : SPELL_IRON_ROOTS_DAMAGE_10);
|
||||
target->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_IRON_ROOTS_DAMAGE, me));
|
||||
else
|
||||
target->RemoveAura(target->GetMap()->Is25ManRaid() ? SPELL_IRON_ROOTS_FREYA_DAMAGE_25 : SPELL_IRON_ROOTS_FREYA_DAMAGE_10);
|
||||
target->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_IRON_ROOTS_FREYA_DAMAGE, me));
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -1023,7 +978,7 @@ public:
|
||||
if (_healTimer >= 12000)
|
||||
{
|
||||
me->RemoveAurasDueToSpell(SPELL_AUTO_GROW);
|
||||
me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_LIFEBINDER_HEAL_25 : SPELL_LIFEBINDER_HEAL_10, true);
|
||||
me->CastSpell(me, SPELL_LIFEBINDER_HEAL, true);
|
||||
me->DespawnOrUnsummon(2s);
|
||||
_healTimer = 0;
|
||||
}
|
||||
@ -1249,7 +1204,7 @@ public:
|
||||
_explodeTimer += diff;
|
||||
if (_explodeTimer >= 11000)
|
||||
{
|
||||
me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_NATURE_BOMB_DAMAGE_25 : SPELL_NATURE_BOMB_DAMAGE_10, false);
|
||||
me->CastSpell(me, SPELL_NATURE_BOMB_DAMAGE, false);
|
||||
me->DespawnOrUnsummon(1s);
|
||||
_explodeTimer = 0;
|
||||
}
|
||||
|
||||
@ -58,8 +58,7 @@ enum HodirSpellData
|
||||
SPELL_ICE_SHARDS_BIG = 65370,
|
||||
SPELL_SNOWDRIFT = 62463,
|
||||
|
||||
SPELL_FROZEN_BLOWS_10 = 62478,
|
||||
SPELL_FROZEN_BLOWS_25 = 63512,
|
||||
SPELL_FROZEN_BLOWS = 62478,
|
||||
|
||||
// Helpers:
|
||||
SPELL_PRIEST_DISPELL_MAGIC = 63499,
|
||||
@ -70,9 +69,8 @@ enum HodirSpellData
|
||||
SPELL_DRUID_STARLIGHT_AREA_AURA = 62807,
|
||||
|
||||
SPELL_SHAMAN_LAVA_BURST = 61924,
|
||||
SPELL_SHAMAN_STORM_CLOUD_10 = 65123,
|
||||
SPELL_SHAMAN_STORM_CLOUD_25 = 65133,
|
||||
SPELL_SHAMAN_STORM_POWER_10 = 63711,
|
||||
SPELL_SHAMAN_STORM_CLOUD = 65123,
|
||||
SPELL_SHAMAN_STORM_POWER = 63711,
|
||||
SPELL_SHAMAN_STORM_POWER_25 = 65134,
|
||||
|
||||
SPELL_MAGE_FIREBALL = 61909,
|
||||
@ -153,9 +151,6 @@ enum HodirText
|
||||
TEXT_EMOTE_BLOW = 8,
|
||||
};
|
||||
|
||||
#define SPELL_FROZEN_BLOWS RAID_MODE(SPELL_FROZEN_BLOWS_10, SPELL_FROZEN_BLOWS_25)
|
||||
#define SPELL_SHAMAN_STORM_CLOUD RAID_MODE(SPELL_SHAMAN_STORM_CLOUD_10, SPELL_SHAMAN_STORM_CLOUD_25)
|
||||
|
||||
enum HodirSounds
|
||||
{
|
||||
SOUND_HODIR_AGGRO = 15552,
|
||||
@ -483,7 +478,7 @@ public:
|
||||
{
|
||||
Talk(TEXT_EMOTE_BLOW);
|
||||
Talk(TEXT_STALACTITE);
|
||||
me->CastSpell(me, Is25ManRaid()? SPELL_FROZEN_BLOWS_25 : SPELL_FROZEN_BLOWS_10, true);
|
||||
me->CastSpell(me, SPELL_FROZEN_BLOWS, true);
|
||||
}
|
||||
break;
|
||||
case EVENT_FREEZE:
|
||||
@ -1008,8 +1003,9 @@ public:
|
||||
|
||||
void SpellHitTarget(Unit* target, SpellInfo const* spell) override
|
||||
{
|
||||
if (target && spell->Id == SPELL_SHAMAN_STORM_CLOUD)
|
||||
if (Aura* a = target->GetAura(SPELL_SHAMAN_STORM_CLOUD, me->GetGUID()))
|
||||
uint32 spellid = sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_CLOUD, me);
|
||||
if (target && spell->Id == spellid)
|
||||
if (Aura* a = target->GetAura(spellid, me->GetGUID()))
|
||||
a->SetStackAmount(spell->StackAmount);
|
||||
}
|
||||
|
||||
@ -1044,10 +1040,13 @@ public:
|
||||
events.Repeat(2600ms);
|
||||
break;
|
||||
case EVENT_SHAMAN_STORM_CLOUD:
|
||||
if (Player* target = ScriptedAI::SelectTargetFromPlayerList(35.0f, SPELL_SHAMAN_STORM_CLOUD))
|
||||
me->CastSpell(target, SPELL_SHAMAN_STORM_CLOUD, false);
|
||||
events.Repeat(30s);
|
||||
break;
|
||||
{
|
||||
uint32 spellid = sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_CLOUD, me);
|
||||
if (Player* target = ScriptedAI::SelectTargetFromPlayerList(35.0f, spellid))
|
||||
me->CastSpell(target, spellid, false);
|
||||
events.Repeat(30s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1403,7 +1402,7 @@ class spell_hodir_storm_power_aura : public AuraScript
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
if (Aura* a = caster->GetAura(GetId() == SPELL_SHAMAN_STORM_POWER_10 ? SPELL_SHAMAN_STORM_CLOUD_10 : SPELL_SHAMAN_STORM_CLOUD_25))
|
||||
if (Aura* a = caster->GetAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_CLOUD, caster)))
|
||||
a->ModStackAmount(-1);
|
||||
}
|
||||
|
||||
@ -1427,14 +1426,14 @@ class spell_hodir_storm_cloud_aura : public AuraScript
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_SHAMAN_STORM_CLOUD_10, SPELL_SHAMAN_STORM_POWER_10, SPELL_SHAMAN_STORM_POWER_25 });
|
||||
return ValidateSpellInfo({ SPELL_SHAMAN_STORM_POWER });
|
||||
}
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
|
||||
{
|
||||
PreventDefaultAction();
|
||||
if (Unit* target = GetTarget())
|
||||
target->CastSpell((Unit*)nullptr, (GetId() == SPELL_SHAMAN_STORM_CLOUD_10 ? SPELL_SHAMAN_STORM_POWER_10 : SPELL_SHAMAN_STORM_POWER_25), true);
|
||||
target->CastSpell((Unit*)nullptr, (sSpellMgr->GetSpellIdForDifficulty(SPELL_SHAMAN_STORM_POWER, GetCaster())), true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
@ -1528,7 +1527,7 @@ public:
|
||||
|
||||
bool OnCheck(Player* player, Unit* /*target*/, uint32 /*criteria_id*/) override
|
||||
{
|
||||
return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER_10);
|
||||
return player && player->HasAllAuras(SPELL_MAGE_TOASTY_FIRE_AURA, SPELL_DRUID_STARLIGHT_AREA_AURA, SPELL_SHAMAN_STORM_POWER);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -26,37 +26,33 @@
|
||||
#include "SpellScriptLoader.h"
|
||||
#include "ulduar.h"
|
||||
|
||||
#define SPELL_FLAME_JETS_10 62680
|
||||
#define SPELL_FLAME_JETS_25 63472
|
||||
#define S_FLAME_JETS RAID_MODE(SPELL_FLAME_JETS_10, SPELL_FLAME_JETS_25)
|
||||
#define SPELL_SCORCH_10 62546
|
||||
#define SPELL_SCORCH_25 63474
|
||||
#define S_SCORCH RAID_MODE(SPELL_SCORCH_10, SPELL_SCORCH_25)
|
||||
#define SPELL_ACTIVATE_CONSTRUCT 62488
|
||||
#define SPELL_STRENGTH_OF_THE_CREATOR 64473
|
||||
#define SPELL_SLAG_POT_10 62717
|
||||
#define SPELL_SLAG_POT_25 63477
|
||||
#define S_SLAG_POT RAID_MODE(SPELL_SLAG_POT_10, SPELL_SLAG_POT_25)
|
||||
#define SPELL_BERSERK 64238
|
||||
#define SPELL_GRAB 62707
|
||||
#define SPELL_GRAB_TRIGGERED 62708
|
||||
#define SPELL_GRAB_CONTROL_2 62711
|
||||
enum IgnisSpellData
|
||||
{
|
||||
SPELL_FLAME_JETS = 62680,
|
||||
SPELL_SCORCH = 62546,
|
||||
SPELL_ACTIVATE_CONSTRUCT = 62488,
|
||||
SPELL_STRENGTH_OF_THE_CREATOR = 64473,
|
||||
SPELL_SLAG_POT = 62717,
|
||||
SPELL_BERSERK = 64238,
|
||||
SPELL_GRAB = 62707,
|
||||
SPELL_GRAB_TRIGGERED = 62708,
|
||||
SPELL_GRAB_CONTROL_2 = 62711,
|
||||
|
||||
#define SPELL_SCORCHED_GROUND_10 62548
|
||||
#define SPELL_SCORCHED_GROUND_25 63476
|
||||
#define S_SCORCHED_GROUND RAID_MODE(SPELL_SCORCHED_GROUND_10, SPELL_SCORCHED_GROUND_25)
|
||||
#define SPELL_HEAT_AREA 62343
|
||||
#define SPELL_HEAT_BUFF 65667
|
||||
#define SPELL_MOLTEN 62373
|
||||
#define SPELL_BRITTLE_10 62382
|
||||
#define SPELL_BRITTLE_25 67114
|
||||
#define S_BRITTLE RAID_MODE(SPELL_BRITTLE_10, SPELL_BRITTLE_25)
|
||||
#define SPELL_SHATTER 62383
|
||||
SPELL_SCORCHED_GROUND = 62548,
|
||||
SPELL_HEAT_AREA = 62343,
|
||||
SPELL_HEAT_BUFF = 65667,
|
||||
SPELL_MOLTEN = 62373,
|
||||
SPELL_BRITTLE = 62382,
|
||||
SPELL_SHATTER = 62383,
|
||||
};
|
||||
|
||||
#define BOSS_IGNIS 33118
|
||||
#define NPC_IRON_CONSTRUCT 33121
|
||||
#define NPC_SCORCHED_GROUND 33123
|
||||
#define NPC_WATER_TRIGGER 22515
|
||||
enum IgnisNPCs
|
||||
{
|
||||
BOSS_IGNIS = 33118,
|
||||
NPC_IRON_CONSTRUCT = 33121,
|
||||
NPC_SCORCHED_GROUND = 33123,
|
||||
NPC_WATER_TRIGGER = 22515,
|
||||
};
|
||||
|
||||
enum Texts
|
||||
{
|
||||
@ -147,7 +143,7 @@ public:
|
||||
|
||||
void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType, SpellSchoolMask) override
|
||||
{
|
||||
if (damage >= RAID_MODE(3000U, 5000U) && me->GetAura(S_BRITTLE))
|
||||
if (damage >= RAID_MODE(3000U, 5000U) && me->GetAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_BRITTLE, me)))
|
||||
{
|
||||
me->CastSpell(me, SPELL_SHATTER, true);
|
||||
Unit::Kill(attacker, me);
|
||||
@ -177,7 +173,7 @@ public:
|
||||
if (me->FindNearestCreature(NPC_WATER_TRIGGER, 18.0f, true))
|
||||
{
|
||||
me->RemoveAura(a);
|
||||
me->CastSpell(me, S_BRITTLE, true);
|
||||
me->CastSpell(me, SPELL_BRITTLE, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -312,7 +308,7 @@ public:
|
||||
if (caster && spell->Id == SPELL_GRAB_CONTROL_2)
|
||||
{
|
||||
//caster->ClearUnitState(UNIT_STATE_ONVEHICLE);
|
||||
me->CastSpell(caster, S_SLAG_POT, true);
|
||||
me->CastSpell(caster, SPELL_SLAG_POT, true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -354,7 +350,7 @@ public:
|
||||
me->SetControlled(true, UNIT_STATE_ROOT);
|
||||
me->DisableRotate(true);
|
||||
me->SendMovementFlagUpdate();
|
||||
me->CastSpell(me->GetVictim(), S_SCORCH, false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_SCORCH, false);
|
||||
events.Repeat(20s);
|
||||
events.RescheduleEvent(EVENT_ENABLE_ROTATE, 3s);
|
||||
break;
|
||||
@ -364,7 +360,7 @@ public:
|
||||
break;
|
||||
case EVENT_SPELL_FLAME_JETS:
|
||||
Talk(EMOTE_JETS);
|
||||
me->CastSpell(me->GetVictim(), S_FLAME_JETS, false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_FLAME_JETS, false);
|
||||
events.Repeat(25s);
|
||||
break;
|
||||
case EVENT_GRAB:
|
||||
@ -431,7 +427,7 @@ class spell_ignis_scorch_aura : public AuraScript
|
||||
|
||||
bool Validate(SpellInfo const* /*spellInfo*/) override
|
||||
{
|
||||
return ValidateSpellInfo({ SPELL_SCORCHED_GROUND_10, SPELL_SCORCHED_GROUND_25 });
|
||||
return ValidateSpellInfo({ SPELL_SCORCHED_GROUND });
|
||||
}
|
||||
|
||||
void HandleEffectPeriodic(AuraEffect const* aurEff)
|
||||
@ -441,7 +437,7 @@ class spell_ignis_scorch_aura : public AuraScript
|
||||
if (Creature* summon = caster->SummonCreature(NPC_SCORCHED_GROUND, caster->GetPositionX() + 20.0f * cos(caster->GetOrientation()), caster->GetPositionY() + 20.0f * std::sin(caster->GetOrientation()), 361.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 30000))
|
||||
{
|
||||
if (!summon->FindNearestCreature(NPC_WATER_TRIGGER, 25.0f, true)) // must be away from the water
|
||||
summon->CastSpell(summon, (aurEff->GetId() == SPELL_SCORCH_10 ? SPELL_SCORCHED_GROUND_10 : SPELL_SCORCHED_GROUND_25), true);
|
||||
summon->CastSpell(summon, SPELL_SCORCHED_GROUND, true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -474,12 +470,10 @@ class spell_ignis_grab_initial : public SpellScript
|
||||
|
||||
enum SlagPot
|
||||
{
|
||||
SPELL_SLAG_POT_DAMAGE_1 = 65722,
|
||||
SPELL_SLAG_POT_DAMAGE_2 = 65723,
|
||||
SPELL_SLAG_POT_DAMAGE = 65722,
|
||||
SPELL_SCORCH_DAMAGE_1 = 62549,
|
||||
SPELL_SCORCH_DAMAGE_2 = 63475,
|
||||
SPELL_SLAG_IMBUED_1 = 62836,
|
||||
SPELL_SLAG_IMBUED_2 = 63536
|
||||
SPELL_SLAG_IMBUED = 62836,
|
||||
};
|
||||
|
||||
class spell_ignis_slag_pot_aura : public AuraScript
|
||||
@ -490,12 +484,10 @@ class spell_ignis_slag_pot_aura : public AuraScript
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_SLAG_POT_DAMAGE_1,
|
||||
SPELL_SLAG_POT_DAMAGE_2,
|
||||
SPELL_SLAG_POT_DAMAGE,
|
||||
SPELL_SCORCH_DAMAGE_1,
|
||||
SPELL_SCORCH_DAMAGE_2,
|
||||
SPELL_SLAG_IMBUED_1,
|
||||
SPELL_SLAG_IMBUED_2
|
||||
SPELL_SLAG_IMBUED
|
||||
});
|
||||
}
|
||||
|
||||
@ -503,7 +495,7 @@ class spell_ignis_slag_pot_aura : public AuraScript
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
if (Unit* target = GetTarget())
|
||||
caster->CastSpell(target, (GetId() == SPELL_SLAG_POT_10 ? SPELL_SLAG_POT_DAMAGE_1 : SPELL_SLAG_POT_DAMAGE_2), true);
|
||||
caster->CastSpell(target, SPELL_SLAG_POT_DAMAGE, true);
|
||||
}
|
||||
|
||||
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
@ -522,7 +514,7 @@ class spell_ignis_slag_pot_aura : public AuraScript
|
||||
target->ApplySpellImmune(GetId(), IMMUNITY_ID, SPELL_SCORCH_DAMAGE_1, false);
|
||||
target->ApplySpellImmune(GetId(), IMMUNITY_ID, SPELL_SCORCH_DAMAGE_2, false);
|
||||
if (target->IsAlive())
|
||||
target->CastSpell(target, (GetId() == SPELL_SLAG_POT_10 ? SPELL_SLAG_IMBUED_1 : SPELL_SLAG_IMBUED_2), true);
|
||||
target->CastSpell(target, SPELL_SLAG_IMBUED, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -45,56 +45,33 @@ enum KologarnSpells
|
||||
SPELL_KOLOGARN_REDUCE_PARRY = 64651,
|
||||
|
||||
// BASIC
|
||||
SPELL_OVERHEAD_SMASH_10 = 63356,
|
||||
SPELL_OVERHEAD_SMASH_25 = 64003,
|
||||
SPELL_ONEARMED_OVERHEAD_SMASH_10 = 63573,
|
||||
SPELL_ONEARMED_OVERHEAD_SMASH_25 = 64006,
|
||||
SPELL_PETRIFYING_BREATH_10 = 62030,
|
||||
SPELL_PETRIFYING_BREATH_25 = 63980,
|
||||
SPELL_STONE_SHOUT_10 = 63716,
|
||||
SPELL_STONE_SHOUT_25 = 64005,
|
||||
SPELL_OVERHEAD_SMASH = 63356,
|
||||
SPELL_ONEARMED_OVERHEAD_SMASH = 63573,
|
||||
SPELL_PETRIFYING_BREATH = 62030,
|
||||
SPELL_STONE_SHOUT = 63716,
|
||||
|
||||
// EYEBEAM
|
||||
SPELL_FOCUSED_EYEBEAM_SUMMON = 63342,
|
||||
SPELL_FOCUSED_EYEBEAM_10 = 63347,
|
||||
SPELL_FOCUSED_EYEBEAM_25 = 63977,
|
||||
SPELL_FOCUSED_EYEBEAM = 63347,
|
||||
SPELL_FOCUSED_EYEBEAM_RIGHT = 63702,
|
||||
SPELL_FOCUSED_EYEBEAM_LEFT = 63676,
|
||||
|
||||
// ARMS
|
||||
SPELL_ARM_DEAD_10 = 63629,
|
||||
SPELL_ARM_DEAD_25 = 63979,
|
||||
SPELL_RUBBLE_FALL_10 = 63821,
|
||||
SPELL_RUBBLE_FALL_25 = 64001,
|
||||
SPELL_ARM_DEAD = 63629,
|
||||
SPELL_RUBBLE_FALL = 63821,
|
||||
SPELL_ARM_RESPAWN_VISUAL = 64753,
|
||||
|
||||
// LEFT ARM
|
||||
SPELL_ARM_SWEEP_10 = 63766,
|
||||
SPELL_ARM_SWEEP_25 = 63983,
|
||||
SPELL_ARM_SWEEP = 63766,
|
||||
|
||||
// RIGHT ARM
|
||||
SPELL_STONE_GRIP_10 = 62166,
|
||||
SPELL_STONE_GRIP_25 = 63981,
|
||||
SPELL_RIDE_RIGHT_ARM_10 = 62056,
|
||||
SPELL_RIDE_RIGHT_ARM_25 = 63985,
|
||||
SPELL_STONE_GRIP = 62166,
|
||||
SPELL_RIDE_RIGHT_ARM = 62056,
|
||||
|
||||
// RUBBLE TRASH
|
||||
SPELL_RUBBLE_ATTACK_10 = 63818,
|
||||
SPELL_RUBBLE_ATTACK_25 = 63978,
|
||||
SPELL_RUBBLE_ATTACK = 63818,
|
||||
};
|
||||
|
||||
#define SPELL_PETRIFYING_BREATH RAID_MODE(SPELL_PETRIFYING_BREATH_10, SPELL_PETRIFYING_BREATH_25)
|
||||
#define SPELL_OVERHEAD_SMASH RAID_MODE(SPELL_OVERHEAD_SMASH_10, SPELL_OVERHEAD_SMASH_25)
|
||||
#define SPELL_ONEARMED_OVERHEAD_SMASH RAID_MODE(SPELL_ONEARMED_OVERHEAD_SMASH_10, SPELL_ONEARMED_OVERHEAD_SMASH_25)
|
||||
#define SPELL_ARM_DEAD RAID_MODE(SPELL_ARM_DEAD_10, SPELL_ARM_DEAD_25)
|
||||
#define SPELL_ARM_SWEEP RAID_MODE(SPELL_ARM_SWEEP_10, SPELL_ARM_SWEEP_25)
|
||||
#define SPELL_STONE_GRIP RAID_MODE(SPELL_STONE_GRIP_10, SPELL_STONE_GRIP_25)
|
||||
#define SPELL_FOCUSED_EYEBEAM RAID_MODE(SPELL_FOCUSED_EYEBEAM_10, SPELL_FOCUSED_EYEBEAM_25)
|
||||
#define SPELL_RUBBLE_FALL RAID_MODE(SPELL_RUBBLE_FALL_10, SPELL_RUBBLE_FALL_25)
|
||||
#define SPELL_RUBBLE_ATTACK RAID_MODE(SPELL_RUBBLE_ATTACK_10, SPELL_RUBBLE_ATTACK_25)
|
||||
#define SPELL_RIDE_RIGHT_ARM RAID_MODE(SPELL_RIDE_RIGHT_ARM_10, SPELL_RIDE_RIGHT_ARM_25)
|
||||
#define SPELL_STONE_SHOUT RAID_MODE(SPELL_STONE_SHOUT_10, SPELL_STONE_SHOUT_25)
|
||||
|
||||
enum KologarnEvents
|
||||
{
|
||||
EVENT_SMASH = 1,
|
||||
@ -796,9 +773,7 @@ class spell_ulduar_stone_grip_cast_target : public SpellScript
|
||||
// Remove "main tank" and non-player targets
|
||||
targets.remove_if(StoneGripTargetSelector(GetCaster()->ToCreature(), GetCaster()->GetVictim()));
|
||||
// Maximum affected targets per difficulty mode
|
||||
uint32 maxTargets = 1;
|
||||
if (GetSpellInfo()->Id == SPELL_STONE_GRIP_25)
|
||||
maxTargets = 3;
|
||||
uint32 maxTargets = GetSpellInfo()->Id == SPELL_STONE_GRIP ? 1 : 3;
|
||||
|
||||
// Return a random amount of targets based on maxTargets
|
||||
while (maxTargets < targets.size())
|
||||
@ -850,6 +825,7 @@ class spell_ulduar_squeezed_lifeless : public SpellScript
|
||||
}
|
||||
};
|
||||
|
||||
// 63720, 64004
|
||||
class spell_kologarn_stone_shout : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_kologarn_stone_shout);
|
||||
@ -861,7 +837,6 @@ class spell_kologarn_stone_shout : public SpellScript
|
||||
|
||||
void Register() override
|
||||
{
|
||||
if (m_scriptSpellId != SPELL_STONE_SHOUT_10 && m_scriptSpellId != SPELL_STONE_SHOUT_25)
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_kologarn_stone_shout::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
}
|
||||
};
|
||||
@ -879,7 +854,6 @@ class spell_kologarn_stone_shout_aura : public AuraScript
|
||||
|
||||
void Register() override
|
||||
{
|
||||
if (m_scriptSpellId == SPELL_STONE_SHOUT_10 || m_scriptSpellId == SPELL_STONE_SHOUT_25)
|
||||
OnEffectPeriodic += AuraEffectPeriodicFn(spell_kologarn_stone_shout_aura::OnPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL);
|
||||
}
|
||||
};
|
||||
@ -945,7 +919,8 @@ void AddSC_boss_kologarn()
|
||||
RegisterSpellScript(spell_ulduar_stone_grip_aura);
|
||||
RegisterSpellScript(spell_ulduar_squeezed_lifeless);
|
||||
RegisterSpellScript(spell_kologarn_focused_eyebeam);
|
||||
RegisterSpellAndAuraScriptPair(spell_kologarn_stone_shout, spell_kologarn_stone_shout_aura);
|
||||
RegisterSpellScript(spell_kologarn_stone_shout);
|
||||
RegisterSpellScript(spell_kologarn_stone_shout_aura);
|
||||
|
||||
// Achievements
|
||||
new achievement_kologarn_looks_could_kill();
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
#include "PassiveAI.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SharedDefines.h"
|
||||
#include "Spell.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "SpellScript.h"
|
||||
@ -35,18 +36,15 @@ enum SpellData
|
||||
SPELL_BERSERK = 64238,
|
||||
|
||||
// PHASE 1:
|
||||
SPELL_NAPALM_SHELL_25 = 65026,
|
||||
SPELL_NAPALM_SHELL_10 = 63666,
|
||||
SPELL_NAPALM_SHELL = 63666,
|
||||
|
||||
SPELL_PLASMA_BLAST_25 = 64529,
|
||||
SPELL_PLASMA_BLAST_10 = 62997,
|
||||
SPELL_PLASMA_BLAST = 62997,
|
||||
|
||||
SPELL_SHOCK_BLAST = 63631,
|
||||
|
||||
SPELL_PROXIMITY_MINES = 63027,
|
||||
NPC_PROXIMITY_MINE = 34362,
|
||||
SPELL_MINE_EXPLOSION_25 = 63009,
|
||||
SPELL_MINE_EXPLOSION_10 = 66351,
|
||||
SPELL_MINE_EXPLOSION = 66351,
|
||||
SPELL_SUMMON_PROXIMITY_MINE = 65347,
|
||||
|
||||
// PHASE 2:
|
||||
@ -57,17 +55,14 @@ enum SpellData
|
||||
NPC_ROCKET_STRIKE_N = 34047,
|
||||
|
||||
SPELL_RAPID_BURST = 63382,
|
||||
SPELL_RAPID_BURST_DAMAGE_25_1 = 64531,
|
||||
SPELL_RAPID_BURST_DAMAGE_25_2 = 64532,
|
||||
SPELL_RAPID_BURST_DAMAGE_10_1 = 63387,
|
||||
SPELL_RAPID_BURST_DAMAGE_10_2 = 64019,
|
||||
SPELL_RAPID_BURST_DAMAGE_1 = 63387,
|
||||
SPELL_RAPID_BURST_DAMAGE_2 = 64019,
|
||||
SPELL_SUMMON_BURST_TARGET = 64840,
|
||||
|
||||
SPELL_SPINNING_UP = 63414,
|
||||
|
||||
// PHASE 3:
|
||||
SPELL_PLASMA_BALL_25 = 64535,
|
||||
SPELL_PLASMA_BALL_10 = 63689,
|
||||
SPELL_PLASMA_BALL = 63689,
|
||||
|
||||
SPELL_MAGNETIC_CORE = 64436,
|
||||
SPELL_SPINNING = 64438,
|
||||
@ -80,10 +75,8 @@ enum SpellData
|
||||
SPELL_BEAM_BLUE = 63294,
|
||||
|
||||
// PHASE 4:
|
||||
SPELL_HAND_PULSE_10_R = 64352,
|
||||
SPELL_HAND_PULSE_25_R = 64537,
|
||||
SPELL_HAND_PULSE_10_L = 64348,
|
||||
SPELL_HAND_PULSE_25_L = 64536,
|
||||
SPELL_HAND_PULSE_R = 64352,
|
||||
SPELL_HAND_PULSE_L = 64348,
|
||||
|
||||
SPELL_SELF_REPAIR = 64383,
|
||||
SPELL_SLEEP_VISUAL_1 = 64393,
|
||||
@ -219,14 +212,6 @@ enum EVENTS
|
||||
EVENT_EMERGENCY_BOT_ATTACK = 70,
|
||||
};
|
||||
|
||||
#define SPELL_NAPALM_SHELL RAID_MODE(SPELL_NAPALM_SHELL_10, SPELL_NAPALM_SHELL_25)
|
||||
#define SPELL_PLASMA_BLAST RAID_MODE(SPELL_PLASMA_BLAST_10, SPELL_PLASMA_BLAST_25)
|
||||
#define SPELL_MINE_EXPLOSION RAID_MODE(SPELL_MINE_EXPLOSION_10, SPELL_MINE_EXPLOSION_25)
|
||||
#define SPELL_PLASMA_BALL RAID_MODE(SPELL_PLASMA_BALL_10, SPELL_PLASMA_BALL_25)
|
||||
#define SPELL_HAND_PULSE_R RAID_MODE(SPELL_HAND_PULSE_10_R, SPELL_HAND_PULSE_25_R)
|
||||
#define SPELL_HAND_PULSE_L RAID_MODE(SPELL_HAND_PULSE_10_L, SPELL_HAND_PULSE_25_L)
|
||||
#define SPELL_FROST_BOMB_EXPLOSION RAID_MODE(SPELL_FROST_BOMB_EXPLOSION_10, SPELL_FROST_BOMB_EXPLOSION_25)
|
||||
|
||||
enum Texts
|
||||
{
|
||||
// Mimiron
|
||||
@ -1889,14 +1874,6 @@ public:
|
||||
void MoveInLineOfSight(Unit* /*who*/) override {}
|
||||
bool CanAIAttack(Unit const* /*target*/) const override { return false; }
|
||||
|
||||
void SpellHitTarget(Unit* target, SpellInfo const* spell) override
|
||||
{
|
||||
if (target && spell && target->IsPlayer() && spell->Id == SPELL_MINE_EXPLOSION)
|
||||
if (InstanceScript* pInstance = me->GetInstanceScript())
|
||||
if (Creature* c = GetMimiron())
|
||||
c->AI()->SetData(0, 11);
|
||||
}
|
||||
|
||||
// MoveInLineOfSight is checked every few yards, can't use it
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
@ -1927,6 +1904,24 @@ public:
|
||||
};
|
||||
};
|
||||
|
||||
class spell_ulduar_mimiron_mine_explosion : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_ulduar_mimiron_mine_explosion);
|
||||
|
||||
void HandleDamage(SpellEffIndex /*effIndex*/)
|
||||
{
|
||||
if (GetHitPlayer())
|
||||
if (InstanceScript* pInstance = GetCaster()->GetInstanceScript())
|
||||
if (Creature* mimi = pInstance->GetCreature(TYPE_MIMIRON))
|
||||
mimi->AI()->SetData(0, 11);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnEffectHitTarget += SpellEffectFn(spell_ulduar_mimiron_mine_explosion::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
|
||||
}
|
||||
};
|
||||
|
||||
class npc_ulduar_mimiron_rocket : public CreatureScript
|
||||
{
|
||||
public:
|
||||
@ -2094,10 +2089,8 @@ class spell_mimiron_rapid_burst_aura : public AuraScript
|
||||
{
|
||||
return ValidateSpellInfo(
|
||||
{
|
||||
SPELL_RAPID_BURST_DAMAGE_10_1,
|
||||
SPELL_RAPID_BURST_DAMAGE_10_2,
|
||||
SPELL_RAPID_BURST_DAMAGE_25_1,
|
||||
SPELL_RAPID_BURST_DAMAGE_25_2
|
||||
SPELL_RAPID_BURST_DAMAGE_1,
|
||||
SPELL_RAPID_BURST_DAMAGE_2,
|
||||
});
|
||||
}
|
||||
|
||||
@ -2105,7 +2098,7 @@ class spell_mimiron_rapid_burst_aura : public AuraScript
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
uint32 id = (caster->GetMap()->Is25ManRaid() ? ((aurEff->GetTickNumber() % 2) ? SPELL_RAPID_BURST_DAMAGE_25_2 : SPELL_RAPID_BURST_DAMAGE_25_1) : ((aurEff->GetTickNumber() % 2) ? SPELL_RAPID_BURST_DAMAGE_10_2 : SPELL_RAPID_BURST_DAMAGE_10_1));
|
||||
uint32 id = (aurEff->GetTickNumber() % 2) ? SPELL_RAPID_BURST_DAMAGE_2 : SPELL_RAPID_BURST_DAMAGE_1;
|
||||
caster->CastSpell((Unit*)nullptr, id, true);
|
||||
}
|
||||
}
|
||||
@ -2498,6 +2491,7 @@ void AddSC_boss_mimiron()
|
||||
new npc_ulduar_bot_summon_trigger();
|
||||
RegisterSpellScript(spell_mimiron_rapid_burst_aura);
|
||||
RegisterSpellScript(spell_mimiron_p3wx2_laser_barrage_aura);
|
||||
RegisterSpellScript(spell_ulduar_mimiron_mine_explosion);
|
||||
new go_ulduar_do_not_push_this_button();
|
||||
new npc_ulduar_flames_initial();
|
||||
new npc_ulduar_flames_spread();
|
||||
|
||||
@ -30,12 +30,10 @@
|
||||
enum Spells
|
||||
{
|
||||
// Razorscale
|
||||
SPELL_FLAMEBUFFET_10 = 64016,
|
||||
SPELL_FLAMEBUFFET_25 = 64023,
|
||||
SPELL_FLAMEBUFFET = 64016,
|
||||
SPELL_FIREBALL = 63815,
|
||||
SPELL_WINGBUFFET = 62666,
|
||||
SPELL_FLAMEBREATH_10 = 63317,
|
||||
SPELL_FLAMEBREATH_25 = 64021,
|
||||
SPELL_FLAMEBREATH = 63317,
|
||||
SPELL_FUSEARMOR = 64771,
|
||||
SPELL_FUSED_ARMOR = 64774, // Applied on 5th stack of SPELL_FUSEARMOR
|
||||
SPELL_DEVOURINGFLAME = 63236,
|
||||
@ -50,25 +48,17 @@ enum Spells
|
||||
|
||||
// Dark Rune Sentinel
|
||||
SPELL_WHIRLWIND = 63808,
|
||||
SPELL_BATTLE_SHOUT_10 = 46763,
|
||||
SPELL_BATTLE_SHOUT_25 = 64062,
|
||||
SPELL_BATTLE_SHOUT = 46763,
|
||||
|
||||
// Dark Rune Guardian
|
||||
SPELL_STORMSTRIKE_DMG = 65971,
|
||||
SPELL_STORMSTRIKE_DEBUFF = 64757,
|
||||
|
||||
// Dark Rune Watcher
|
||||
SPELL_LIGHTINGBOLT_10 = 63809,
|
||||
SPELL_LIGHTINGBOLT_25 = 64696,
|
||||
SPELL_CHAINLIGHTNING_10 = 64758,
|
||||
SPELL_CHAINLIGHTNING_25 = 64759,
|
||||
SPELL_LIGHTINGBOLT = 63809,
|
||||
SPELL_CHAINLIGHTNING = 64758,
|
||||
};
|
||||
|
||||
#define SPELL_FLAMEBUFFET RAID_MODE(SPELL_FLAMEBUFFET_10, SPELL_FLAMEBUFFET_25)
|
||||
#define SPELL_FLAMEBREATH RAID_MODE(SPELL_FLAMEBREATH_10, SPELL_FLAMEBREATH_25)
|
||||
#define SPELL_BATTLE_SHOUT RAID_MODE(SPELL_BATTLE_SHOUT_10, SPELL_BATTLE_SHOUT_25)
|
||||
#define SPELL_LIGHTINGBOLT RAID_MODE(SPELL_LIGHTINGBOLT_10, SPELL_LIGHTINGBOLT_25)
|
||||
#define SPELL_CHAINLIGHTNING RAID_MODE(SPELL_CHAINLIGHTNING_10, SPELL_CHAINLIGHTNING_25)
|
||||
#define REQ_CHAIN_COUNT RAID_MODE(2, 4)
|
||||
|
||||
enum NPCs
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptedEscortAI.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "SpellScriptLoader.h"
|
||||
#include "ulduar.h"
|
||||
@ -34,8 +35,7 @@ enum ThorimSpells
|
||||
SPELL_SHEATH_OF_LIGHTNING = 62276,
|
||||
SPELL_STORMHAMMER = 62042,
|
||||
SPELL_BERSERK_FRIENDS = 62560,
|
||||
SPELL_CHAIN_LIGHTNING_10 = 62131,
|
||||
SPELL_CHAIN_LIGHTNING_25 = 64390,
|
||||
SPELL_CHAIN_LIGHTNING = 62131,
|
||||
SPELL_UNBALANCING_STRIKE = 62130,
|
||||
SPELL_BERSERK = 26662,
|
||||
|
||||
@ -54,17 +54,13 @@ enum ThorimSpells
|
||||
SPELL_SIF_CHANNEL_HOLOGRAM = 64324,
|
||||
SPELL_FROSTBOLT = 62601,
|
||||
SPELL_FROSTBOLT_VALLEY = 62604,
|
||||
SPELL_BLIZZARD_10 = 62577,
|
||||
SPELL_BLIZZARD_25 = 62603,
|
||||
SPELL_BLIZZARD = 62577,
|
||||
SPELL_FROST_NOVA = 62605,
|
||||
|
||||
// DARK RUNE ACOLYTE
|
||||
SPELL_GREATER_HEAL_10 = 62334,
|
||||
SPELL_GREATER_HEAL_25 = 62442,
|
||||
SPELL_HOLY_SMITE_10 = 62335,
|
||||
SPELL_HOLY_SMITE_25 = 62443,
|
||||
SPELL_RENEW_10 = 62333,
|
||||
SPELL_RENEW_25 = 62441,
|
||||
SPELL_GREATER_HEAL = 62334,
|
||||
SPELL_HOLY_SMITE = 62335,
|
||||
SPELL_RENEW = 62333,
|
||||
|
||||
// CAPTURED MERCENARY SOLDIER
|
||||
SPELL_BARBED_SHOT = 62318,
|
||||
@ -76,19 +72,15 @@ enum ThorimSpells
|
||||
SPELL_HEROIC_STRIKE = 62444,
|
||||
|
||||
// JORMUNGAR BEHEMOTH
|
||||
SPELL_ACID_BREATH_10 = 62315,
|
||||
SPELL_ACID_BREATH_25 = 62415,
|
||||
SPELL_SWEEP_10 = 62316,
|
||||
SPELL_SWEEP_25 = 62417,
|
||||
SPELL_ACID_BREATH = 62315,
|
||||
SPELL_SWEEP = 62316,
|
||||
|
||||
// IRON RING GUARD
|
||||
SPELL_IMPALE_10 = 62331,
|
||||
SPELL_IMPALE_25 = 62418,
|
||||
SPELL_IMPALE = 62331,
|
||||
SPELL_WHIRLING_TRIP = 64151,
|
||||
|
||||
// IRON HONOR GUARD
|
||||
SPELL_SHIELD_SMASH_10 = 62332,
|
||||
SPELL_SHIELD_SMASH_25 = 62420,
|
||||
SPELL_SHIELD_SMASH = 62332,
|
||||
SPELL_CLEAVE = 42724,
|
||||
SPELL_HAMSTRING = 48639,
|
||||
|
||||
@ -97,12 +89,9 @@ enum ThorimSpells
|
||||
SPELL_RUNIC_STRIKE = 62322,
|
||||
|
||||
// DARK RUNE EVOKER
|
||||
SPELL_RUNIC_LIGHTNING_10 = 62327,
|
||||
SPELL_RUNIC_LIGHTNING_25 = 62445,
|
||||
SPELL_RUNIC_MENDING_10 = 62328,
|
||||
SPELL_RUNIC_MENDING_25 = 62446,
|
||||
SPELL_RUNIC_SHIELD_10 = 62321,
|
||||
SPELL_RUNIC_SHIELD_25 = 62529,
|
||||
SPELL_RUNIC_LIGHTNING = 62327,
|
||||
SPELL_RUNIC_MENDING = 62328,
|
||||
SPELL_RUNIC_SHIELD = 62321,
|
||||
|
||||
// DARK RUNE CHAMPION
|
||||
SPELL_CHARGE = 32323,
|
||||
@ -114,8 +103,7 @@ enum ThorimSpells
|
||||
SPELL_PUMMEL = 38313,
|
||||
|
||||
// RUNIC COLOSSUS
|
||||
SPELL_COLOSSUS_CHARGE_10 = 62613,
|
||||
SPELL_COLOSSUS_CHARGE_25 = 62614,
|
||||
SPELL_COLOSSUS_CHARGE = 62613,
|
||||
SPELL_RUNIC_BARRIER = 62338,
|
||||
SPELL_SMASH = 62339,
|
||||
SPELL_RUNIC_SMASH_LEFT = 62057,
|
||||
@ -125,8 +113,7 @@ enum ThorimSpells
|
||||
// ANCIENT RUNE GIANT
|
||||
SPELL_RUNE_DETONATION = 62526,
|
||||
SPELL_RUNIC_FORTIFICATION = 62942,
|
||||
SPELL_STOMP_10 = 62411,
|
||||
SPELL_STOMP_25 = 62413,
|
||||
SPELL_STOMP = 62411,
|
||||
|
||||
// TRAPS
|
||||
SPELL_LIGHTNING_FIELD = 64972,
|
||||
@ -134,20 +121,6 @@ enum ThorimSpells
|
||||
SPELL_PARALYTIC_FIELD_SECOND = 63540,
|
||||
};
|
||||
|
||||
#define SPELL_GREATER_HEAL RAID_MODE(SPELL_GREATER_HEAL_10, SPELL_GREATER_HEAL_25)
|
||||
#define SPELL_HOLY_SMITE RAID_MODE(SPELL_HOLY_SMITE_10, SPELL_HOLY_SMITE_25)
|
||||
#define SPELL_RENEW RAID_MODE(SPELL_RENEW_10, SPELL_RENEW_25)
|
||||
#define SPELL_ACID_BREATH RAID_MODE(SPELL_ACID_BREATH_10, SPELL_ACID_BREATH_25)
|
||||
#define SPELL_SWEEP RAID_MODE(SPELL_SWEEP_10, SPELL_SWEEP_25)
|
||||
#define SPELL_IMPALE RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25)
|
||||
#define SPELL_COLOSSUS_CHARGE RAID_MODE(SPELL_COLOSSUS_CHARGE_10, SPELL_COLOSSUS_CHARGE_25)
|
||||
#define SPELL_STOMP RAID_MODE(SPELL_STOMP_10, SPELL_STOMP_25)
|
||||
#define SPELL_SHIELD_SMASH RAID_MODE(SPELL_SHIELD_SMASH_10, SPELL_SHIELD_SMASH_25)
|
||||
#define SPELL_RUNIC_LIGHTNING RAID_MODE(SPELL_RUNIC_LIGHTNING_10, SPELL_RUNIC_LIGHTNING_25)
|
||||
#define SPELL_RUNIC_MENDING RAID_MODE(SPELL_RUNIC_MENDING_10, SPELL_RUNIC_MENDING_25)
|
||||
#define SPELL_RUNIC_SHIELD RAID_MODE(SPELL_RUNIC_SHIELD_10, SPELL_RUNIC_SHIELD_25)
|
||||
#define SPELL_CHAIN_LIGHTNING RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25)
|
||||
|
||||
enum ThormNPCandGOs : uint32
|
||||
{
|
||||
// ARENA INIT
|
||||
@ -1044,7 +1017,7 @@ public:
|
||||
{
|
||||
me->SetSpeed(MOVE_RUN, 1);
|
||||
me->SetSpeed(MOVE_WALK, 1);
|
||||
me->CastSpell(me, RAID_MODE(SPELL_BLIZZARD_10, SPELL_BLIZZARD_25), true);
|
||||
me->CastSpell(me, SPELL_BLIZZARD, true);
|
||||
}
|
||||
|
||||
void WaypointReached(uint32 /*point*/) override
|
||||
@ -1206,7 +1179,7 @@ public:
|
||||
events.Repeat(1600ms);
|
||||
break;
|
||||
case EVENT_DR_ACOLYTE_R:
|
||||
if (HealthBelowPct(75) && !me->HasAura(SPELL_RENEW))
|
||||
if (HealthBelowPct(75) && !me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_RENEW, me)))
|
||||
me->CastSpell(me, SPELL_GREATER_HEAL, false);
|
||||
else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 10))
|
||||
me->CastSpell(target, SPELL_RENEW, false);
|
||||
@ -1331,7 +1304,7 @@ public:
|
||||
events.Repeat(1600ms);
|
||||
break;
|
||||
case EVENT_DR_ACOLYTE_R:
|
||||
if (HealthBelowPct(75) && !me->HasAura(SPELL_RENEW))
|
||||
if (HealthBelowPct(75) && !me->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_RENEW, me)))
|
||||
me->CastSpell(me, SPELL_GREATER_HEAL, false);
|
||||
else if (Unit* target = DoSelectLowestHpFriendly(60.0f, 10))
|
||||
me->CastSpell(target, SPELL_RENEW, false);
|
||||
|
||||
@ -30,10 +30,8 @@
|
||||
enum XT002Spells
|
||||
{
|
||||
// BASIC
|
||||
SPELL_GRAVITY_BOMB_10 = 63024,
|
||||
SPELL_GRAVITY_BOMB_25 = 64234,
|
||||
SPELL_SEARING_LIGHT_10 = 63018,
|
||||
SPELL_SEARING_LIGHT_25 = 65121,
|
||||
SPELL_GRAVITY_BOMB = 63024,
|
||||
SPELL_SEARING_LIGHT = 63018,
|
||||
SPELL_TYMPANIC_TANTARUM = 62776,
|
||||
SPELL_XT002_ENRAGE = 26662,
|
||||
|
||||
@ -48,27 +46,18 @@ enum XT002Spells
|
||||
SPELL_EXPOSED_HEART = 63849,
|
||||
SPELL_ENERGY_ORB = 62790,
|
||||
SPELL_ENERGY_ORB_TRIGGER = 62826,
|
||||
SPELL_HEARTBREAK_10 = 65737,
|
||||
SPELL_HEARTBREAK_25 = 64193,
|
||||
SPELL_HEARTBREAK = 65737,
|
||||
|
||||
// VOID ZONE
|
||||
SPELL_VOID_ZONE_SUMMON_10 = 64203,
|
||||
SPELL_VOID_ZONE_SUMMON_25 = 64235,
|
||||
//SPELL_VOID_ZONE_SUMMON = RAID_MODE(SPELL_VOID_ZONE_SUMMON_10, SPELL_VOID_ZONE_SUMMON_25, SPELL_VOID_ZONE_SUMMON_10, SPELL_VOID_ZONE_SUMMON_25),
|
||||
SPELL_VOID_ZONE_SUMMON = 64203,
|
||||
SPELL_VOID_ZONE_DAMAGE = 46262,
|
||||
|
||||
// SPARK
|
||||
SPELL_SPARK_SUMMON = 64210,
|
||||
SPELL_SPARK_DAMAGE_10 = 64227,
|
||||
SPELL_SPARK_DAMAGE_25 = 64236,
|
||||
SPELL_SPARK_DAMAGE = 64227,
|
||||
SPELL_SPARK_MELEE = 64230,
|
||||
};
|
||||
|
||||
#define SPELL_GRAVITY_BOMB RAID_MODE(SPELL_GRAVITY_BOMB_10, SPELL_GRAVITY_BOMB_25)
|
||||
#define SPELL_SEARING_LIGHT RAID_MODE(SPELL_SEARING_LIGHT_10, SPELL_SEARING_LIGHT_25)
|
||||
#define SPELL_HEARTBREAK RAID_MODE(SPELL_HEARTBREAK_10, SPELL_HEARTBREAK_25)
|
||||
#define SPELL_SPARK_DAMAGE RAID_MODE(SPELL_SPARK_DAMAGE_10, SPELL_SPARK_DAMAGE_25)
|
||||
|
||||
enum XT002Events
|
||||
{
|
||||
EVENT_HEALTH_CHECK = 1,
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
#include "ScriptedCreature.h"
|
||||
#include "ScriptedEscortAI.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellMgr.h"
|
||||
#include "SpellScript.h"
|
||||
#include "SpellScriptLoader.h"
|
||||
#include "ulduar.h"
|
||||
@ -102,8 +103,7 @@ enum YoggSpells
|
||||
|
||||
// CONSTRICTOR TENTACLE
|
||||
SPELL_LUNGE = 64123,
|
||||
SPELL_SQUEEZE_10 = 64125,
|
||||
SPELL_SQUEEZE_25 = 64126,
|
||||
SPELL_SQUEEZE = 64125,
|
||||
|
||||
// CORRUPTOR TENTACLE
|
||||
SPELL_APATHY = 64156,
|
||||
@ -142,15 +142,10 @@ enum YoggSpells
|
||||
SPELL_SIMPLE_TELEPORT = 64195,
|
||||
SPELL_EMPOWERED = 65294,
|
||||
SPELL_EMPOWERED_PASSIVE = 64161,
|
||||
SPELL_DRAIN_LIFE_10 = 64159,
|
||||
SPELL_DRAIN_LIFE_25 = 64160,
|
||||
SPELL_DRAIN_LIFE = 64159,
|
||||
SPELL_RECENTLY_SPAWNED = 64497,
|
||||
};
|
||||
|
||||
#define SPELL_PSYCHOSIS RAID_MODE(SPELL_SARA_PSYCHOSIS_10, SPELL_SARA_PSYCHOSIS_25)
|
||||
#define SPELL_SQUEEZE RAID_MODE(SPELL_SQUEEZE_10, SPELL_SQUEEZE_25)
|
||||
#define SPELL_DRAIN_LIFE RAID_MODE(SPELL_DRAIN_LIFE_10, SPELL_DRAIN_LIFE_25)
|
||||
|
||||
enum YoggEvents
|
||||
{
|
||||
EVENT_SARA_P1_DOORS_CLOSE = 1,
|
||||
@ -846,7 +841,7 @@ public:
|
||||
{
|
||||
Talk(SAY_SARA_PSYCHOSIS_HIT);
|
||||
}
|
||||
me->CastCustomSpell(SPELL_PSYCHOSIS, SPELLVALUE_MAX_TARGETS, 1, me, false);
|
||||
me->CastCustomSpell(SPELL_SARA_PSYCHOSIS_10, SPELLVALUE_MAX_TARGETS, 1, me, false);
|
||||
events.Repeat(3500ms);
|
||||
break;
|
||||
case EVENT_SARA_P2_DEATH_RAY:
|
||||
@ -1677,7 +1672,7 @@ public:
|
||||
{
|
||||
if (me->GetDistance(itr->GetSource()) > 10 || !itr->GetSource()->IsAlive() || itr->GetSource()->IsGameMaster())
|
||||
continue;
|
||||
if (itr->GetSource()->HasAura(SPELL_SQUEEZE) || itr->GetSource()->HasAura(SPELL_INSANE1))
|
||||
if (itr->GetSource()->HasAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_SQUEEZE, me)) || itr->GetSource()->HasAura(SPELL_INSANE1))
|
||||
continue;
|
||||
|
||||
if (count <= num || !target)
|
||||
@ -1719,7 +1714,7 @@ public:
|
||||
void JustDied(Unit*) override
|
||||
{
|
||||
if (Unit* player = ObjectAccessor::GetUnit(*me, _playerGUID))
|
||||
player->RemoveAura(SPELL_SQUEEZE);
|
||||
player->RemoveAura(sSpellMgr->GetSpellIdForDifficulty(SPELL_SQUEEZE, me));
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
@ -79,7 +79,11 @@ enum UldSpells
|
||||
SPELL_SIMPLE_TELEPORT = 12980,
|
||||
SPELL_KEEPER_TELEPORT = 62940,
|
||||
SPELL_SNOW_MOUND_PARTICLES = 64615,
|
||||
SPELL_ENERGY_SAP_10 = 64740
|
||||
SPELL_ENERGY_SAP_10 = 64740,
|
||||
|
||||
// Arachnopod Destroyer
|
||||
SPELL_FLAME_SPRAY = 64717,
|
||||
SPELL_MACHINE_GUN = 64776,
|
||||
};
|
||||
|
||||
class npc_ulduar_keeper : public CreatureScript
|
||||
@ -473,11 +477,11 @@ public:
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(64717, 65241), false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_FLAME_SPRAY, false);
|
||||
events.Repeat(15s, 25s);
|
||||
break;
|
||||
case 2:
|
||||
me->CastSpell(me->GetVictim(), RAID_MODE(64776, 65240), false);
|
||||
me->CastSpell(me->GetVictim(), SPELL_MACHINE_GUN, false);
|
||||
events.Repeat(10s, 15s);
|
||||
break;
|
||||
case 3:
|
||||
|
||||
@ -27,14 +27,10 @@ enum Archavon
|
||||
SPELL_ROCK_SHARDS = 58678,
|
||||
SPELL_ROCK_SHARDS_LEFT_HAND_VISUAL = 58689,
|
||||
SPELL_ROCK_SHARDS_RIGHT_HAND_VISUAL = 58692,
|
||||
SPELL_ROCK_SHARDS_DAMAGE_10 = 58695,
|
||||
SPELL_ROCK_SHARDS_DAMAGE_25 = 60883,
|
||||
SPELL_CRUSHING_LEAP_10 = 58960,
|
||||
SPELL_CRUSHING_LEAP_25 = 60894, // Instant (10-80yr range) -- Leaps at an enemy, inflicting 8000 Physical damage, knocking all nearby enemies away, and creating a cloud of choking debris.
|
||||
SPELL_STOMP_10 = 58663,
|
||||
SPELL_STOMP_25 = 60880,
|
||||
SPELL_IMPALE_10 = 58666,
|
||||
SPELL_IMPALE_25 = 60882, // Lifts an enemy off the ground with a spiked fist, inflicting 47125 to 52875 Physical damage and 9425 to 10575 additional damage each second for 8 sec.
|
||||
SPELL_ROCK_SHARDS_DAMAGE = 58695,
|
||||
SPELL_CRUSHING_LEAP = 58960,
|
||||
SPELL_STOMP = 58663,
|
||||
SPELL_IMPALE = 58666,
|
||||
SPELL_BERSERK = 47008
|
||||
};
|
||||
|
||||
@ -145,7 +141,7 @@ class boss_archavon : public CreatureScript
|
||||
case EVENT_CHOKING_CLOUD:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, false, false))
|
||||
{
|
||||
DoCast(target, RAID_MODE(SPELL_CRUSHING_LEAP_10, SPELL_CRUSHING_LEAP_25), true); //10y ~ 80y, ignore range
|
||||
DoCast(target, SPELL_CRUSHING_LEAP, true); //10y ~ 80y, ignore range
|
||||
}
|
||||
|
||||
events.Repeat(30s);
|
||||
@ -156,14 +152,14 @@ class boss_archavon : public CreatureScript
|
||||
snprintf(buffer, sizeof(buffer), "Archavon the Stone Watcher lunges for %s!", me->GetVictim()->GetName().c_str());
|
||||
me->TextEmote(buffer);
|
||||
|
||||
DoCastVictim(RAID_MODE(SPELL_STOMP_10, SPELL_STOMP_25));
|
||||
DoCastVictim(SPELL_STOMP);
|
||||
|
||||
events.Repeat(45s);
|
||||
events.ScheduleEvent(EVENT_IMPALE, 3s);
|
||||
break;
|
||||
}
|
||||
case EVENT_IMPALE:
|
||||
DoCastVictim(RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25));
|
||||
DoCastVictim(SPELL_IMPALE);
|
||||
break;
|
||||
case EVENT_BERSERK:
|
||||
DoCast(me, SPELL_BERSERK, true);
|
||||
@ -205,17 +201,10 @@ class spell_archavon_rock_shards : public SpellScript
|
||||
return;
|
||||
}
|
||||
|
||||
Map* map = caster->GetMap();
|
||||
if (!map)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
caster->CastSpell(target, SPELL_ROCK_SHARDS_LEFT_HAND_VISUAL, true);
|
||||
caster->CastSpell(target, SPELL_ROCK_SHARDS_RIGHT_HAND_VISUAL, true);
|
||||
|
||||
uint32 spellId = map->Is25ManRaid() ? SPELL_ROCK_SHARDS_DAMAGE_25 : SPELL_ROCK_SHARDS_DAMAGE_10;
|
||||
caster->CastSpell(target, spellId, true);
|
||||
caster->CastSpell(target, SPELL_ROCK_SHARDS_DAMAGE, true);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
|
||||
@ -29,10 +29,8 @@ enum Spells
|
||||
SPELL_OVERCHARGE = 64218,
|
||||
SPELL_BERSERK = 26662,
|
||||
|
||||
SPELL_CHAIN_LIGHTNING_10 = 64213,
|
||||
SPELL_CHAIN_LIGHTNING_25 = 64215,
|
||||
SPELL_LIGHTNING_NOVA_10 = 64216,
|
||||
SPELL_LIGHTNING_NOVA_25 = 65279,
|
||||
SPELL_CHAIN_LIGHTNING = 64213,
|
||||
SPELL_LIGHTNING_NOVA = 64216,
|
||||
};
|
||||
|
||||
enum Events
|
||||
@ -171,11 +169,11 @@ public:
|
||||
{
|
||||
case EVENT_CHAIN_LIGHTNING:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
|
||||
me->CastSpell(target, RAID_MODE(SPELL_CHAIN_LIGHTNING_10, SPELL_CHAIN_LIGHTNING_25), false);
|
||||
me->CastSpell(target, SPELL_CHAIN_LIGHTNING, false);
|
||||
events.Repeat(25s);
|
||||
break;
|
||||
case EVENT_LIGHTNING_NOVA:
|
||||
me->CastSpell(me, RAID_MODE(SPELL_LIGHTNING_NOVA_10, SPELL_LIGHTNING_NOVA_25), false);
|
||||
me->CastSpell(me, SPELL_LIGHTNING_NOVA, false);
|
||||
events.Repeat(40s);
|
||||
break;
|
||||
case EVENT_OVERCHARGE:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user