refactor(Scripts/ZulGurub): Modernize Gahzranka script (#20603)

This commit is contained in:
Andrew
2024-11-17 02:19:46 -03:00
committed by GitHub
parent 287ac42423
commit d2c28681aa

View File

@@ -20,12 +20,6 @@
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "zulgurub.h"
/* ScriptData
SDName: Boss_Gahz'ranka
SD%Complete: 85
SDComment: Massive Geyser with knockback not working. Spell buggy.
SDCategory: Zul'Gurub
EndScriptData */
enum Spells
{
@@ -36,89 +30,39 @@ enum Spells
SPELL_SPLASH = 24593
};
enum Events
{
EVENT_FROSTBREATH = 1,
EVENT_MASSIVEGEYSER = 2,
EVENT_SLAM = 3
};
enum Misc
{
GAMEOBJECT_MUDSKUNK_LURE = 180346
};
class boss_gahzranka : public CreatureScript
struct boss_gahzranka : public BossAI
{
public:
boss_gahzranka() : CreatureScript("boss_gahzranka") { }
boss_gahzranka(Creature* creature) : BossAI(creature, DATA_GAHZRANKA) {}
struct boss_gahzrankaAI : public BossAI
void IsSummonedBy(WorldObject* /*summoner*/) override
{
boss_gahzrankaAI(Creature* creature) : BossAI(creature, DATA_GAHZRANKA) { }
me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
}
void IsSummonedBy(WorldObject* /*summoner*/) override
{
me->GetMotionMaster()->MovePath(me->GetEntry() * 10, false);
}
void Reset() override
{
_Reset();
}
void JustDied(Unit* /*killer*/) override
{
_JustDied();
}
void JustEngagedWith(Unit* /*who*/) override
{
_JustEngagedWith();
me->AddAura(SPELL_THRASH, me);
events.ScheduleEvent(EVENT_FROSTBREATH, 8s);
events.ScheduleEvent(EVENT_MASSIVEGEYSER, 25s);
events.ScheduleEvent(EVENT_SLAM, 15s);
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_FROSTBREATH:
DoCastVictim(SPELL_FROSTBREATH);
events.ScheduleEvent(EVENT_FROSTBREATH, 8s, 20s);
break;
case EVENT_MASSIVEGEYSER:
DoCastVictim(SPELL_MASSIVEGEYSER);
events.ScheduleEvent(EVENT_MASSIVEGEYSER, 22s, 32s);
break;
case EVENT_SLAM:
DoCastVictim(SPELL_SLAM, true);
events.ScheduleEvent(EVENT_SLAM, 12s, 20s);
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const override
void JustEngagedWith(Unit* /*who*/) override
{
return GetZulGurubAI<boss_gahzrankaAI>(creature);
_JustEngagedWith();
me->AddAura(SPELL_THRASH, me);
ScheduleTimedEvent(8s, [&]
{
DoCastVictim(SPELL_FROSTBREATH);
}, 8s, 20s);
ScheduleTimedEvent(25s, [&]
{
DoCastVictim(SPELL_MASSIVEGEYSER);
}, 22s, 32s);
ScheduleTimedEvent(15s, [&]
{
DoCastVictim(SPELL_SLAM, true);
}, 12s, 20s);
}
};
@@ -129,23 +73,15 @@ class spell_gahzranka_slam : public SpellScript
void FilterTargets(std::list<WorldObject*>& targets)
{
if (Unit* caster = GetCaster())
{
_wipeThreat = targets.size() < caster->GetThreatMgr().GetThreatListSize();
}
}
void HandleWipeThreat(SpellEffIndex /*effIndex*/)
{
if (_wipeThreat)
{
if (Unit* caster = GetCaster())
{
if (Unit* target = GetHitUnit())
{
caster->GetThreatMgr().ModifyThreatByPercent(target, -100);
}
}
}
}
void Register() override
@@ -198,7 +134,7 @@ class spell_pagles_point_cast : public SpellScript
void AddSC_boss_gahzranka()
{
new boss_gahzranka();
RegisterZulGurubCreatureAI(boss_gahzranka);
RegisterSpellScript(spell_gahzranka_slam);
RegisterSpellScript(spell_pagles_point_cast);
}