fix(Core/ZulGurub): Hakkar hardmode (#12333)
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
--
|
||||||
|
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_hakkar_power_down';
|
||||||
|
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
|
||||||
|
(24693, 'spell_hakkar_power_down');
|
||||||
@@ -90,9 +90,19 @@ public:
|
|||||||
return true;
|
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
|
void Reset() override
|
||||||
{
|
{
|
||||||
_Reset();
|
_Reset();
|
||||||
|
|
||||||
|
ApplyHakkarPowerStacks();
|
||||||
}
|
}
|
||||||
|
|
||||||
void JustDied(Unit* /*killer*/) override
|
void JustDied(Unit* /*killer*/) override
|
||||||
@@ -108,13 +118,13 @@ public:
|
|||||||
events.ScheduleEvent(EVENT_CAUSE_INSANITY, 17000);
|
events.ScheduleEvent(EVENT_CAUSE_INSANITY, 17000);
|
||||||
events.ScheduleEvent(EVENT_ENRAGE, 600000);
|
events.ScheduleEvent(EVENT_ENRAGE, 600000);
|
||||||
if (instance->GetBossState(DATA_JEKLIK) != DONE)
|
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)
|
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)
|
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)
|
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)
|
if (instance->GetBossState(DATA_ARLOKK) != DONE)
|
||||||
events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, 18000);
|
events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, 18000);
|
||||||
Talk(SAY_AGGRO);
|
Talk(SAY_AGGRO);
|
||||||
@@ -166,11 +176,11 @@ public:
|
|||||||
break;
|
break;
|
||||||
case EVENT_ASPECT_OF_JEKLIK:
|
case EVENT_ASPECT_OF_JEKLIK:
|
||||||
DoCastVictim(SPELL_ASPECT_OF_JEKLIK, true);
|
DoCastVictim(SPELL_ASPECT_OF_JEKLIK, true);
|
||||||
events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, urand(10000, 14000));
|
events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, 24000);
|
||||||
break;
|
break;
|
||||||
case EVENT_ASPECT_OF_VENOXIS:
|
case EVENT_ASPECT_OF_VENOXIS:
|
||||||
DoCastVictim(SPELL_ASPECT_OF_VENOXIS, true);
|
DoCastVictim(SPELL_ASPECT_OF_VENOXIS, true);
|
||||||
events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 8000);
|
events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, urand(16000, 18000));
|
||||||
break;
|
break;
|
||||||
case EVENT_ASPECT_OF_MARLI:
|
case EVENT_ASPECT_OF_MARLI:
|
||||||
if (Unit* victim = SelectTarget(SelectTargetMethod::MaxThreat, 0, 5.f, true))
|
if (Unit* victim = SelectTarget(SelectTargetMethod::MaxThreat, 0, 5.f, true))
|
||||||
@@ -178,7 +188,7 @@ public:
|
|||||||
DoCast(victim, SPELL_ASPECT_OF_MARLI, true);
|
DoCast(victim, SPELL_ASPECT_OF_MARLI, true);
|
||||||
me->GetThreatMgr().modifyThreatPercent(victim, -100.f);
|
me->GetThreatMgr().modifyThreatPercent(victim, -100.f);
|
||||||
}
|
}
|
||||||
events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 10000);
|
events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 45000);
|
||||||
break;
|
break;
|
||||||
case EVENT_ASPECT_OF_THEKAL:
|
case EVENT_ASPECT_OF_THEKAL:
|
||||||
DoCastVictim(SPELL_ASPECT_OF_THEKAL, true);
|
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()
|
void AddSC_boss_hakkar()
|
||||||
{
|
{
|
||||||
new boss_hakkar();
|
new boss_hakkar();
|
||||||
@@ -383,4 +410,5 @@ void AddSC_boss_hakkar()
|
|||||||
new at_zulgurub_bloodfire_pit_speech();
|
new at_zulgurub_bloodfire_pit_speech();
|
||||||
new at_zulgurub_edge_of_madness_speech();
|
new at_zulgurub_edge_of_madness_speech();
|
||||||
RegisterSpellScript(spell_blood_siphon);
|
RegisterSpellScript(spell_blood_siphon);
|
||||||
|
RegisterSpellScript(spell_hakkar_power_down);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,6 +142,36 @@ public:
|
|||||||
return 0;
|
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
|
std::string GetSaveData() override
|
||||||
{
|
{
|
||||||
OUT_SAVE_INST_DATA;
|
OUT_SAVE_INST_DATA;
|
||||||
|
|||||||
@@ -76,6 +76,12 @@ enum GameobjectIds
|
|||||||
GO_GONG_OF_BETHEKK = 180526 // Arlokk Event
|
GO_GONG_OF_BETHEKK = 180526 // Arlokk Event
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum SpellIds
|
||||||
|
{
|
||||||
|
SPELL_HAKKAR_POWER = 24692,
|
||||||
|
SPELL_HAKKAR_POWER_DOWN = 24693
|
||||||
|
};
|
||||||
|
|
||||||
template <class AI, class T>
|
template <class AI, class T>
|
||||||
inline AI* GetZulGurubAI(T* obj)
|
inline AI* GetZulGurubAI(T* obj)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user