rework with blizzard data

This commit is contained in:
luis
2026-09-01 18:12:44 -03:00
parent 0be2badb1c
commit c9a7d4ec91
4 changed files with 224 additions and 83 deletions
@@ -25,8 +25,7 @@ enum NalorakkSpells
SPELL_ECHOING_MAUL_AURA = 1242869,
SPELL_FURY_OF_THE_WAR_GOD = 1243011,
SPELL_OVERWHELMING_ONSLAUGHT = 1243569,
SPELL_DEFENSIVE_STANCE = 1261781,
SPELL_FURY_OF_THE_WAR_GODS = 1243025,
};
enum NalorakkTexts
@@ -35,11 +34,12 @@ enum NalorakkTexts
SAY_DEATH = 1,
};
enum events
enum NalorakkEvents
{
EVENT_ECHOING_MAUL = 1,
EVENT_SUMMON_ECHOES,
EVENT_FURY_OF_THE_WAR_GOD,
EVENT_OVERWHELMING_ONSLAUGHT,
EVENT_SUMMON_FURY_ECHOES,
};
// 246404 - Nalorakk
@@ -50,7 +50,6 @@ struct boss_nalorakk_midnight : public BossAI
void Reset() override
{
BossAI::Reset();
me->RemoveAurasDueToSpell(SPELL_DEFENSIVE_STANCE);
}
void JustEngagedWith(Unit* who) override
@@ -76,9 +75,15 @@ struct boss_nalorakk_midnight : public BossAI
void ScheduleTasks() override
{
events.ScheduleEvent(EVENT_ECHOING_MAUL, 7s);
events.ScheduleEvent(EVENT_FURY_OF_THE_WAR_GOD, 20s);
events.ScheduleEvent(EVENT_OVERWHELMING_ONSLAUGHT, 11s);
events.ScheduleEvent(EVENT_ECHOING_MAUL, 5s);
events.ScheduleEvent(EVENT_FURY_OF_THE_WAR_GOD, 25s);
}
void SummonEchoes(uint32 count)
{
for (uint32 i = 0; i < count; ++i)
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
me->SummonCreature(NPC_ECHO_OF_NALORAKK, target->GetPosition(), TEMPSUMMON_TIMED_DESPAWN, 20s);
}
void ExecuteEvent(uint32 eventId) override
@@ -86,17 +91,21 @@ struct boss_nalorakk_midnight : public BossAI
switch (eventId)
{
case EVENT_ECHOING_MAUL:
DoCastVictim(SPELL_ECHOING_MAUL);
events.Repeat(Milliseconds(20500));
DoCastSelf(SPELL_ECHOING_MAUL);
events.Repeat(10s);
events.ScheduleEvent(EVENT_SUMMON_ECHOES, 4s);
break;
case EVENT_SUMMON_ECHOES:
SummonEchoes(3);
break;
case EVENT_FURY_OF_THE_WAR_GOD:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
DoCast(target, SPELL_FURY_OF_THE_WAR_GOD);
events.Repeat(Milliseconds(20500));
DoCastSelf(SPELL_FURY_OF_THE_WAR_GOD);
DoCastSelf(SPELL_FURY_OF_THE_WAR_GODS);
events.ScheduleEvent(EVENT_SUMMON_FURY_ECHOES, 1s);
events.Repeat(30s);
break;
case EVENT_OVERWHELMING_ONSLAUGHT:
DoCastVictim(SPELL_OVERWHELMING_ONSLAUGHT);
events.Repeat(Milliseconds(20500));
case EVENT_SUMMON_FURY_ECHOES:
SummonEchoes(2);
break;
default:
break;
@@ -104,6 +113,20 @@ struct boss_nalorakk_midnight : public BossAI
}
};
enum EchoOfNalorakkSpells
{
SPELL_ECHO_SPAWN_FX = 1242896,
SPELL_SPECTRAL_SLASH = 1255570,
SPELL_ECHO_MAUL = 1242976,
SPELL_ECHOING_FURY = 1243405,
};
enum EchoOfNalorakkEvents
{
EVENT_ECHO_MAUL = 1,
EVENT_ECHOING_FURY,
};
// 247301 - Echo of Nalorakk
struct npc_echo_of_nalorakk : public ScriptedAI
{
@@ -112,12 +135,33 @@ struct npc_echo_of_nalorakk : public ScriptedAI
void Reset() override
{
ScriptedAI::Reset();
DoCastSelf(SPELL_DEFENSIVE_STANCE, true);
DoCastSelf(SPELL_ECHO_SPAWN_FX, true);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
DoCast(target, SPELL_SPECTRAL_SLASH);
}
void JustEngagedWith(Unit* /*who*/) override
void ScheduleTasks() override
{
me->CastSpell(me, SPELL_DEFENSIVE_STANCE, true);
events.ScheduleEvent(EVENT_ECHO_MAUL, 6s);
events.ScheduleEvent(EVENT_ECHOING_FURY, 4s);
}
void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
case EVENT_ECHO_MAUL:
DoCastVictim(SPELL_ECHO_MAUL);
events.Repeat(10s);
break;
case EVENT_ECHOING_FURY:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
DoCast(target, SPELL_ECHOING_FURY);
events.Repeat(5s);
break;
default:
break;
}
}
};
@@ -125,4 +169,4 @@ void AddSC_boss_nalorakk_midnight()
{
RegisterDenofNalorakkCreatureAI(boss_nalorakk_midnight);
RegisterDenofNalorakkCreatureAI(npc_echo_of_nalorakk);
}
}
@@ -21,11 +21,14 @@
enum SentinelOfWinterSpells
{
SPELL_GLACIAL_TORMENT = 1235548,
SPELL_RAGING_SQUALL = 1235623,
SPELL_RAGING_SQUALL_AURA = 1235641,
SPELL_SHATTERING_FROSTSPIKE = 1235783,
SPELL_FROZEN_TEMPEST = 1235656,
SPELL_QUAKING = 1250959,
SPELL_BLIZZARDS_WRATH = 1236323,
SPELL_GLACIAL_TORMENT = 1235548,
SPELL_RAGING_SQUALL = 1235623,
SPELL_RAGING_SQUALL_AURA = 1235625,
SPELL_SHATTERING_FROSTSPIKE = 1235783,
SPELL_FROZEN_TEMPEST = 1235656,
};
enum SentinelOfWinterTexts
@@ -34,13 +37,13 @@ enum SentinelOfWinterTexts
SAY_DEATH = 1,
};
enum events
enum SentinelOfWinterEvents
{
EVENT_GLACIAL_TORMENT = 1,
EVENT_BLIZZARDS_WRATH = 1,
EVENT_GLACIAL_TORMENT,
EVENT_RAGING_SQUALL,
EVENT_SHATTERING_FROSTSPIKE,
EVENT_FROZEN_TEMPEST,
EVENT_SUMMON_SHIVER,
};
// 244100 - Sentinel of Winter
@@ -58,6 +61,7 @@ struct boss_sentinel_of_winter : public BossAI
{
BossAI::JustEngagedWith(who);
Talk(SAY_AGGRO);
DoCastSelf(SPELL_QUAKING);
instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
}
@@ -78,17 +82,22 @@ struct boss_sentinel_of_winter : public BossAI
void ScheduleTasks() override
{
events.ScheduleEvent(EVENT_SHATTERING_FROSTSPIKE, 5s);
events.ScheduleEvent(EVENT_RAGING_SQUALL, 12s);
events.ScheduleEvent(EVENT_GLACIAL_TORMENT, 18s);
events.ScheduleEvent(EVENT_FROZEN_TEMPEST, 26s);
events.ScheduleEvent(EVENT_SUMMON_SHIVER, 14s);
events.ScheduleEvent(EVENT_BLIZZARDS_WRATH, 7s);
events.ScheduleEvent(EVENT_GLACIAL_TORMENT, Milliseconds(14400));
events.ScheduleEvent(EVENT_RAGING_SQUALL, 20s);
events.ScheduleEvent(EVENT_SHATTERING_FROSTSPIKE, 31s);
events.ScheduleEvent(EVENT_FROZEN_TEMPEST, 40s);
}
void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
case EVENT_BLIZZARDS_WRATH:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
me->SummonCreature(NPC_BLIZZARDS_WRATH, target->GetPosition(), TEMPSUMMON_TIMED_DESPAWN, 20s);
events.Repeat(Milliseconds(20500));
break;
case EVENT_GLACIAL_TORMENT:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
DoCast(target, SPELL_GLACIAL_TORMENT);
@@ -107,10 +116,55 @@ struct boss_sentinel_of_winter : public BossAI
DoCastAOE(SPELL_FROZEN_TEMPEST);
events.Repeat(30s);
break;
case EVENT_SUMMON_SHIVER:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
me->SummonCreature(NPC_SHIVER, target->GetPosition(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 5s);
events.Repeat(25s);
default:
break;
}
}
};
enum BlizzardsWrathSpells
{
SPELL_FROST_COSMETIC_MISSILES = 1236344,
SPELL_CRUSADER_STRIKE = 35395,
SPELL_AVENGERS_SHIELD = 31935,
};
enum BlizzardsWrathEvents
{
EVENT_FROST_MISSILES = 1,
EVENT_CRUSADER_STRIKE,
EVENT_AVENGERS_SHIELD,
};
// 244869 - Blizzard's Wrath
struct npc_blizzards_wrath : public ScriptedAI
{
npc_blizzards_wrath(Creature* creature) : ScriptedAI(creature) { }
void ScheduleTasks() override
{
DoZoneInCombat();
events.ScheduleEvent(EVENT_FROST_MISSILES, 1s);
events.ScheduleEvent(EVENT_CRUSADER_STRIKE, 13s);
events.ScheduleEvent(EVENT_AVENGERS_SHIELD, 23s);
}
void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
case EVENT_FROST_MISSILES:
DoCastAOE(SPELL_FROST_COSMETIC_MISSILES);
events.Repeat(1s);
break;
case EVENT_CRUSADER_STRIKE:
DoCastVictim(SPELL_CRUSADER_STRIKE);
events.Repeat(15s);
break;
case EVENT_AVENGERS_SHIELD:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
DoCast(target, SPELL_AVENGERS_SHIELD);
events.Repeat(20s);
break;
default:
break;
@@ -118,26 +172,15 @@ struct boss_sentinel_of_winter : public BossAI
}
};
// 244759 - Fractured Shivercore
struct npc_fractured_shivercore : public ScriptedAI
enum RagingSquallSpells
{
npc_fractured_shivercore(Creature* creature) : ScriptedAI(creature) { }
SPELL_RAGING_SQUALL_DESTROY = 1235638,
SPELL_RAGING_SQUALL_DEBUFF = 1270809,
};
void ScheduleTasks() override
{
DoZoneInCombat();
events.ScheduleEvent(1, 5s);
}
void ExecuteEvent(uint32 eventId) override
{
if (eventId == 1)
{
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true))
DoCast(target, SPELL_SHATTERING_FROSTSPIKE);
events.Repeat(8s);
}
}
enum RagingSquallEvents
{
EVENT_RAGING_SQUALL_PERIODIC = 1,
};
// 244696 - Raging Squall
@@ -148,15 +191,19 @@ struct npc_raging_squall : public ScriptedAI
void ScheduleTasks() override
{
DoZoneInCombat();
events.ScheduleEvent(1, 3s);
events.ScheduleEvent(EVENT_RAGING_SQUALL_PERIODIC, 2s);
}
void ExecuteEvent(uint32 eventId) override
{
if (eventId == 1)
if (eventId == EVENT_RAGING_SQUALL_PERIODIC)
{
DoCastAOE(SPELL_RAGING_SQUALL);
events.Repeat(8s);
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
{
DoCast(target, SPELL_RAGING_SQUALL_DESTROY);
DoCast(target, SPELL_RAGING_SQUALL_DEBUFF);
}
events.Repeat(2s);
}
}
};
@@ -164,6 +211,6 @@ struct npc_raging_squall : public ScriptedAI
void AddSC_boss_sentinel_of_winter()
{
RegisterDenofNalorakkCreatureAI(boss_sentinel_of_winter);
RegisterDenofNalorakkCreatureAI(npc_fractured_shivercore);
RegisterDenofNalorakkCreatureAI(npc_blizzards_wrath);
RegisterDenofNalorakkCreatureAI(npc_raging_squall);
}
}
@@ -21,11 +21,23 @@
enum HoardmongerSpells
{
SPELL_SPOILED_SUPPLIES = 1234233,
SPELL_EARTHSHATTER_SLAM = 1253268,
SPELL_RAVENOUS_BELLOW = 1235118,
SPELL_BONESPIKED_AURA = 1235405,
SPELL_TOXIC_SPORES_AURA = 1234846,
SPELL_RAVENOUS_BELLOW = 1234681,
SPELL_RESOURCEFUL_MEASURES = 1235037,
SPELL_SERRATED_FISTS = 1232012,
SPELL_EARTHSHATTER_SLAM = 1234021,
SPELL_SPOILED_SUPPLIES = 1234233,
SPELL_ROTTEN_MUSHROOM = 1234740,
SPELL_TOXIC_SPORES = 1234846,
};
enum HoardmongerResourcefulMeasuresSpells
{
SPELL_RESOURCEFUL_MEASURES_1 = 1235075,
SPELL_RESOURCEFUL_MEASURES_1_DMG = 1253185,
SPELL_RESOURCEFUL_MEASURES_2 = 1235072,
SPELL_RESOURCEFUL_MEASURES_2_DMG = 1253193,
SPELL_RESOURCEFUL_MEASURES_3 = 1235076,
SPELL_RESOURCEFUL_MEASURES_3_DMG = 1253194,
};
enum HoardmongerTexts
@@ -34,11 +46,15 @@ enum HoardmongerTexts
SAY_DEATH = 1,
};
enum events
enum HoardmongerEvents
{
EVENT_SPOILED_SUPPLIES = 1,
EVENT_RAVENOUS_BELLOW = 1,
EVENT_RESOURCEFUL_MEASURES,
EVENT_SERRATED_FISTS,
EVENT_EARTHSHATTER_SLAM,
EVENT_RAVENOUS_BELLOW,
EVENT_SPOILED_SUPPLIES,
EVENT_ROTTEN_MUSHROOM,
EVENT_TOXIC_SPORES,
};
// 241812 - The Hoardmonger
@@ -49,8 +65,7 @@ struct boss_the_hoardmonger : public BossAI
void Reset() override
{
BossAI::Reset();
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BONESPIKED_AURA);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TOXIC_SPORES_AURA);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TOXIC_SPORES);
}
void JustEngagedWith(Unit* who) override
@@ -64,8 +79,7 @@ struct boss_the_hoardmonger : public BossAI
{
BossAI::JustDied(killer);
Talk(SAY_DEATH);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_BONESPIKED_AURA);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TOXIC_SPORES_AURA);
instance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TOXIC_SPORES);
instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
}
@@ -78,27 +92,62 @@ struct boss_the_hoardmonger : public BossAI
void ScheduleTasks() override
{
events.ScheduleEvent(EVENT_RAVENOUS_BELLOW, 6s);
events.ScheduleEvent(EVENT_EARTHSHATTER_SLAM, 16s);
events.ScheduleEvent(EVENT_SPOILED_SUPPLIES, 30s);
events.ScheduleEvent(EVENT_RAVENOUS_BELLOW, 2s);
events.ScheduleEvent(EVENT_RESOURCEFUL_MEASURES, 4s);
events.ScheduleEvent(EVENT_SERRATED_FISTS, 6s);
events.ScheduleEvent(EVENT_EARTHSHATTER_SLAM, 15s);
events.ScheduleEvent(EVENT_SPOILED_SUPPLIES, 28s);
events.ScheduleEvent(EVENT_ROTTEN_MUSHROOM, 14s);
events.ScheduleEvent(EVENT_TOXIC_SPORES, 35s);
}
void ExecuteEvent(uint32 eventId) override
{
switch (eventId)
{
case EVENT_RAVENOUS_BELLOW:
DoCastAOE(SPELL_RAVENOUS_BELLOW);
events.Repeat(Milliseconds(20500));
break;
case EVENT_RESOURCEFUL_MEASURES:
DoCastSelf(SPELL_RESOURCEFUL_MEASURES);
switch (urand(0, 2))
{
case 0:
DoCastSelf(SPELL_RESOURCEFUL_MEASURES_1);
break;
case 1:
DoCastSelf(SPELL_RESOURCEFUL_MEASURES_2);
break;
case 2:
DoCastSelf(SPELL_RESOURCEFUL_MEASURES_3);
break;
default:
break;
}
events.Repeat(8s);
break;
case EVENT_SERRATED_FISTS:
DoCastVictim(SPELL_SERRATED_FISTS);
events.Repeat(15s);
break;
case EVENT_EARTHSHATTER_SLAM:
DoCastAOE(SPELL_EARTHSHATTER_SLAM);
events.Repeat(20s);
break;
case EVENT_SPOILED_SUPPLIES:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
DoCast(target, SPELL_SPOILED_SUPPLIES);
events.Repeat(Milliseconds(20500));
break;
case EVENT_EARTHSHATTER_SLAM:
DoCastVictim(SPELL_EARTHSHATTER_SLAM);
events.Repeat(Milliseconds(20500));
case EVENT_ROTTEN_MUSHROOM:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
DoCast(target, SPELL_ROTTEN_MUSHROOM);
events.Repeat(2s);
break;
case EVENT_RAVENOUS_BELLOW:
DoCastAOE(SPELL_RAVENOUS_BELLOW);
events.Repeat(Milliseconds(20500));
case EVENT_TOXIC_SPORES:
DoCastAOE(SPELL_TOXIC_SPORES);
events.Repeat(2s);
break;
default:
break;
@@ -109,4 +158,4 @@ struct boss_the_hoardmonger : public BossAI
void AddSC_boss_the_hoardmonger()
{
RegisterDenofNalorakkCreatureAI(boss_the_hoardmonger);
}
}
@@ -35,6 +35,7 @@ enum DenofNalorakkDataTypes
enum DenofNalorakkCreatureIds
{
BOSS_NALORAKK = 246404,
NPC_ECHO_OF_NALORAKK = 247301,
BOSS_SENTINEL_OF_WINTER = 244100,
NPC_SHIVER = 244759, // Fractured Shivercore