Merge branch 'master' into Vmaps

This commit is contained in:
天鹭 2025-10-31 23:31:06 +08:00 committed by GitHub
commit b4dce52620
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
51 changed files with 715 additions and 663 deletions

View 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)');

View 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);

View 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");

View File

@ -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))

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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))

View File

@ -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();

View File

@ -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

View File

@ -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; }

View File

@ -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))

View File

@ -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);

View File

@ -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,
};

View File

@ -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

View File

@ -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,

View File

@ -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();

View File

@ -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)))

View File

@ -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()

View File

@ -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:

View File

@ -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([&]
{

View File

@ -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);

View File

@ -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()))
{

View File

@ -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:

View File

@ -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:

View File

@ -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);
}

View File

@ -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:

View File

@ -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:

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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:

View File

@ -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:

View File

@ -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:

View File

@ -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();

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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,

View File

@ -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;
}

View File

@ -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);
}
};

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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();

View File

@ -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

View File

@ -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);

View File

@ -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,

View File

@ -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));
}
};
};

View File

@ -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:

View File

@ -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

View File

@ -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: