fix(Core/ZulGurub): Hakkar hardmode (#12333)

This commit is contained in:
Nefertumm
2022-07-09 16:49:35 -03:00
committed by GitHub
parent b2e5ab4a90
commit bafac46639
4 changed files with 75 additions and 7 deletions

View File

@@ -90,9 +90,19 @@ public:
return true;
}
void ApplyHakkarPowerStacks()
{
me->RemoveAurasDueToSpell(SPELL_HAKKAR_POWER);
for (int i = DATA_JEKLIK; i < DATA_HAKKAR; i++)
if (instance->GetBossState(i) != DONE)
DoCastSelf(SPELL_HAKKAR_POWER, true);
}
void Reset() override
{
_Reset();
ApplyHakkarPowerStacks();
}
void JustDied(Unit* /*killer*/) override
@@ -108,13 +118,13 @@ public:
events.ScheduleEvent(EVENT_CAUSE_INSANITY, 17000);
events.ScheduleEvent(EVENT_ENRAGE, 600000);
if (instance->GetBossState(DATA_JEKLIK) != DONE)
events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, 4000);
events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, 21000);
if (instance->GetBossState(DATA_VENOXIS) != DONE)
events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 7000);
events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 14000);
if (instance->GetBossState(DATA_MARLI) != DONE)
events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 12000);
events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 15000);
if (instance->GetBossState(DATA_THEKAL) != DONE)
events.ScheduleEvent(EVENT_ASPECT_OF_THEKAL, 8000);
events.ScheduleEvent(EVENT_ASPECT_OF_THEKAL, 10000);
if (instance->GetBossState(DATA_ARLOKK) != DONE)
events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, 18000);
Talk(SAY_AGGRO);
@@ -166,11 +176,11 @@ public:
break;
case EVENT_ASPECT_OF_JEKLIK:
DoCastVictim(SPELL_ASPECT_OF_JEKLIK, true);
events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, urand(10000, 14000));
events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, 24000);
break;
case EVENT_ASPECT_OF_VENOXIS:
DoCastVictim(SPELL_ASPECT_OF_VENOXIS, true);
events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 8000);
events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, urand(16000, 18000));
break;
case EVENT_ASPECT_OF_MARLI:
if (Unit* victim = SelectTarget(SelectTargetMethod::MaxThreat, 0, 5.f, true))
@@ -178,7 +188,7 @@ public:
DoCast(victim, SPELL_ASPECT_OF_MARLI, true);
me->GetThreatMgr().modifyThreatPercent(victim, -100.f);
}
events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 10000);
events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 45000);
break;
case EVENT_ASPECT_OF_THEKAL:
DoCastVictim(SPELL_ASPECT_OF_THEKAL, true);
@@ -374,6 +384,23 @@ class spell_blood_siphon : public SpellScript
}
};
class spell_hakkar_power_down : public SpellScript
{
PrepareSpellScript(spell_hakkar_power_down);
void HandleOnHit()
{
if (Unit* caster = GetCaster())
if (caster->HasAura(SPELL_HAKKAR_POWER))
caster->RemoveAuraFromStack(SPELL_HAKKAR_POWER);
}
void Register() override
{
OnHit += SpellHitFn(spell_hakkar_power_down::HandleOnHit);
}
};
void AddSC_boss_hakkar()
{
new boss_hakkar();
@@ -383,4 +410,5 @@ void AddSC_boss_hakkar()
new at_zulgurub_bloodfire_pit_speech();
new at_zulgurub_edge_of_madness_speech();
RegisterSpellScript(spell_blood_siphon);
RegisterSpellScript(spell_hakkar_power_down);
}

View File

@@ -142,6 +142,36 @@ public:
return 0;
}
void RemoveHakkarPowerStack()
{
if (Creature* hakkar = instance->GetCreature(_hakkarGUID))
{
hakkar->CastSpell(hakkar, SPELL_HAKKAR_POWER_DOWN, true);
}
}
bool SetBossState(uint32 type, EncounterState state) override
{
if (!InstanceScript::SetBossState(type, state))
return false;
switch (type)
{
case DATA_JEKLIK:
case DATA_VENOXIS:
case DATA_MARLI:
case DATA_ARLOKK:
case DATA_THEKAL:
if (state == DONE)
RemoveHakkarPowerStack();
break;
default:
break;
}
return true;
}
std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;

View File

@@ -76,6 +76,12 @@ enum GameobjectIds
GO_GONG_OF_BETHEKK = 180526 // Arlokk Event
};
enum SpellIds
{
SPELL_HAKKAR_POWER = 24692,
SPELL_HAKKAR_POWER_DOWN = 24693
};
template <class AI, class T>
inline AI* GetZulGurubAI(T* obj)
{