refactor(Scripts/HallOfLightning): modernize scripts (#23209)

This commit is contained in:
Grimdhex
2025-10-17 13:33:25 +02:00
committed by GitHub
parent 058f7acac6
commit 789c98fccb
6 changed files with 1039 additions and 1130 deletions
@@ -106,19 +106,9 @@ enum Yells
EMOTE_BERSEKER_STANCE = 8,
};
class boss_bjarngrim : public CreatureScript
struct boss_bjarngrim : public npc_escortAI
{
public:
boss_bjarngrim() : CreatureScript("boss_bjarngrim") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfLightningAI<boss_bjarngrimAI>(creature);
}
struct boss_bjarngrimAI : public npc_escortAI
{
boss_bjarngrimAI(Creature* creature) : npc_escortAI(creature), summons(creature)
boss_bjarngrim(Creature* creature) : npc_escortAI(creature), summons(creature)
{
m_pInstance = creature->GetInstanceScript();
@@ -141,11 +131,6 @@ public:
Start(true, ObjectGuid::Empty, nullptr, false, true);
}
InstanceScript* m_pInstance;
EventMap events;
SummonList summons;
uint8 m_uiStance;
void Reset() override
{
events.Reset();
@@ -371,25 +356,17 @@ public:
DoMeleeAttackIfReady();
}
};
};
class npc_stormforged_lieutenant : public CreatureScript
{
public:
npc_stormforged_lieutenant() : CreatureScript("npc_stormforged_lieutenant") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfLightningAI<npc_stormforged_lieutenantAI>(creature);
}
struct npc_stormforged_lieutenantAI : public ScriptedAI
{
npc_stormforged_lieutenantAI(Creature* creature) : ScriptedAI(creature) { }
private:
InstanceScript* m_pInstance;
EventMap events;
ObjectGuid BjarngrimGUID;
SummonList summons;
uint8 m_uiStance;
};
struct npc_stormforged_lieutenant : public ScriptedAI
{
npc_stormforged_lieutenant(Creature* creature) : ScriptedAI(creature) { }
void Reset() override
{
@@ -433,11 +410,14 @@ public:
DoMeleeAttackIfReady();
}
};
private:
EventMap events;
ObjectGuid BjarngrimGUID;
};
void AddSC_boss_bjarngrim()
{
new boss_bjarngrim();
new npc_stormforged_lieutenant();
RegisterHallOfLightningCreatureAI(boss_bjarngrim);
RegisterHallOfLightningCreatureAI(npc_stormforged_lieutenant);
}
@@ -68,28 +68,13 @@ enum IonarEvents
EVENT_RESTORE = 5,
};
class boss_ionar : public CreatureScript
struct boss_ionar : public BossAI
{
public:
boss_ionar() : CreatureScript("boss_ionar") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfLightningAI<boss_ionarAI>(creature);
}
struct boss_ionarAI : public ScriptedAI
{
boss_ionarAI(Creature* creature) : ScriptedAI(creature), summons(creature)
boss_ionar(Creature* creature) : BossAI(creature, DATA_IONAR), summons(creature)
{
m_pInstance = creature->GetInstanceScript();
}
InstanceScript* m_pInstance;
EventMap events;
SummonList summons;
uint8 HealthCheck;
void Reset() override
{
HealthCheck = 50;
@@ -223,24 +208,17 @@ public:
DoMeleeAttackIfReady();
}
};
private:
InstanceScript* m_pInstance;
EventMap events;
SummonList summons;
uint8 HealthCheck;
};
class npc_spark_of_ionar : public CreatureScript
struct npc_spark_of_ionar : public ScriptedAI
{
public:
npc_spark_of_ionar() : CreatureScript("npc_spark_of_ionar") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfLightningAI<npc_spark_of_ionarAI>(creature);
}
struct npc_spark_of_ionarAI : public ScriptedAI
{
npc_spark_of_ionarAI(Creature* creature) : ScriptedAI(creature) { }
bool returning;
npc_spark_of_ionar(Creature* creature) : ScriptedAI(creature) { }
void MoveInLineOfSight(Unit*) override { }
void UpdateAI(uint32) override { }
@@ -272,7 +250,9 @@ public:
me->DespawnOrUnsummon(1s);
}
}
};
private:
bool returning;
};
// 52658, 59795 - Static Overload
@@ -302,7 +282,7 @@ class spell_ionar_static_overload : public AuraScript
void AddSC_boss_ionar()
{
new boss_ionar();
new npc_spark_of_ionar();
RegisterHallOfLightningCreatureAI(boss_ionar);
RegisterHallOfLightningCreatureAI(npc_spark_of_ionar);
RegisterSpellScript(spell_ionar_static_overload);
}
@@ -60,32 +60,15 @@ enum LokenEvents
EVENT_AURA_REMOVE = 5
};
class boss_loken : public CreatureScript
struct boss_loken : public BossAI
{
public:
boss_loken() : CreatureScript("boss_loken") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfLightningAI<boss_lokenAI>(creature);
}
struct boss_lokenAI : public ScriptedAI
{
boss_lokenAI(Creature* creature) : ScriptedAI(creature)
boss_loken(Creature* creature) : BossAI(creature, DATA_LOKEN)
{
m_pInstance = creature->GetInstanceScript();
if (m_pInstance)
isActive = m_pInstance->GetData(TYPE_LOKEN_INTRO);
}
InstanceScript* m_pInstance;
EventMap events;
bool isActive;
uint32 IntroTimer;
uint8 HealthCheck;
void MoveInLineOfSight(Unit*) override { }
void Reset() override
@@ -251,7 +234,13 @@ public:
DoMeleeAttackIfReady();
}
};
private:
InstanceScript* m_pInstance;
EventMap events;
bool isActive;
uint32 IntroTimer;
uint8 HealthCheck;
};
class spell_loken_pulsing_shockwave : public SpellScript
@@ -276,6 +265,6 @@ class spell_loken_pulsing_shockwave : public SpellScript
void AddSC_boss_loken()
{
new boss_loken();
RegisterHallOfLightningCreatureAI(boss_loken);
RegisterSpellScript(spell_loken_pulsing_shockwave);
}
@@ -78,31 +78,13 @@ enum Yells
EMOTE_SHATTER = 6,
};
class boss_volkhan : public CreatureScript
struct boss_volkhan : public BossAI
{
public:
boss_volkhan() : CreatureScript("boss_volkhan") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfLightningAI<boss_volkhanAI>(creature);
}
struct boss_volkhanAI : public ScriptedAI
{
boss_volkhanAI(Creature* creature) : ScriptedAI(creature), summons(creature)
boss_volkhan(Creature* creature) : BossAI(creature, DATA_VOLKHAN), summons(creature)
{
m_pInstance = creature->GetInstanceScript();
}
InstanceScript* m_pInstance;
EventMap events;
SummonList summons;
uint8 HealthCheck;
float x, y, z;
uint8 PointID;
uint8 ShatteredCount;
void Reset() override
{
x = y = z = PointID = ShatteredCount = 0;
@@ -316,29 +298,24 @@ public:
DoMeleeAttackIfReady();
}
};
private:
InstanceScript* m_pInstance;
EventMap events;
SummonList summons;
uint8 HealthCheck;
float x, y, z;
uint8 PointID;
uint8 ShatteredCount;
};
class npc_molten_golem : public CreatureScript
struct npc_molten_golem : public ScriptedAI
{
public:
npc_molten_golem() : CreatureScript("npc_molten_golem") { }
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfLightningAI<npc_molten_golemAI>(creature);
}
struct npc_molten_golemAI : public ScriptedAI
{
npc_molten_golemAI(Creature* creature) : ScriptedAI(creature)
npc_molten_golem(Creature* creature) : ScriptedAI(creature)
{
m_pInstance = creature->GetInstanceScript();
}
EventMap events;
InstanceScript* m_pInstance;
void Reset() override
{
events.Reset();
@@ -374,7 +351,7 @@ public:
{
if (me->GetEntry() == NPC_BRITTLE_GOLEM && param == ACTION_SHATTER)
{
if (Creature* volkhan = ObjectAccessor::GetCreature(*me, m_pInstance->GetGuidData(TYPE_VOLKHAN)))
if (Creature* volkhan = m_pInstance->GetCreature(DATA_VOLKHAN))
volkhan->AI()->DoAction(ACTION_DESTROYED);
me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_SHATTER_H : SPELL_SHATTER_N, true);
@@ -407,7 +384,9 @@ public:
DoMeleeAttackIfReady();
}
};
private:
EventMap events;
InstanceScript* m_pInstance;
};
enum monumentSpells
@@ -443,19 +422,9 @@ enum monumentEvents
EVENT_UNFREEZE = 20,
};
class npc_hol_monument : public CreatureScript
struct npc_hol_monument : public ScriptedAI
{
public:
npc_hol_monument() : CreatureScript("npc_hol_monument") {}
CreatureAI* GetAI(Creature* creature) const override
{
return GetHallsOfLightningAI<npc_hol_monumentAI>(creature);
}
struct npc_hol_monumentAI : public ScriptedAI
{
npc_hol_monumentAI(Creature* creature) : ScriptedAI(creature)
npc_hol_monument(Creature* creature) : ScriptedAI(creature)
{
_attackGUID.Clear();
_isActive = urand(0, 1);
@@ -463,14 +432,6 @@ public:
me->CastSpell(me, SPELL_FREEZE_ANIM, true);
}
EventMap events;
bool _isActive;
ObjectGuid _attackGUID;
void Reset() override
{
}
void MoveInLineOfSight(Unit* who) override
{
if (_attackGUID)
@@ -572,12 +533,16 @@ public:
DoMeleeAttackIfReady();
}
};
private:
EventMap events;
bool _isActive;
ObjectGuid _attackGUID;
};
void AddSC_boss_volkhan()
{
new boss_volkhan();
new npc_molten_golem();
new npc_hol_monument();
RegisterHallOfLightningCreatureAI(boss_volkhan);
RegisterHallOfLightningCreatureAI(npc_molten_golem);
RegisterHallOfLightningCreatureAI(npc_hol_monument);
}
@@ -24,6 +24,15 @@
#define HallsOfLightningScriptName "instance_halls_of_lightning"
enum BossIds
{
DATA_BJARNGRIM = 0,
DATA_IONAR = 1,
DATA_LOKEN = 2,
DATA_VOLKHAN = 3,
MAX_ENCOUNTERS
};
enum HoLEvents
{
TYPE_BJARNGRIM = 0,
@@ -60,4 +69,6 @@ inline AI* GetHallsOfLightningAI(T* obj)
return GetInstanceAI<AI>(obj, HallsOfLightningScriptName);
}
#define RegisterHallOfLightningCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetHallsOfLightningAI)
#endif
@@ -32,35 +32,19 @@ public:
struct instance_halls_of_lightning_InstanceMapScript : public InstanceScript
{
instance_halls_of_lightning_InstanceMapScript(Map* pMap) : InstanceScript(pMap) { Initialize(); };
uint32 m_auiEncounter[MAX_ENCOUNTER];
ObjectGuid m_uiGeneralBjarngrimGUID;
ObjectGuid m_uiIonarGUID;
ObjectGuid m_uiLokenGUID;
ObjectGuid m_uiVolkhanGUID;
ObjectGuid m_uiBjarngrimDoorGUID;
ObjectGuid m_uiVolkhanDoorGUID;
ObjectGuid m_uiIonarDoorGUID;
ObjectGuid m_uiLokenDoorGUID;
ObjectGuid m_uiLokenGlobeGUID;
bool volkhanAchievement;
bool bjarngrimAchievement;
void Initialize() override
instance_halls_of_lightning_InstanceMapScript(Map* pMap) : InstanceScript(pMap)
{
SetHeaders(DataHeader);
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
SetBossNumber(MAX_ENCOUNTERS);
volkhanAchievement = false;
bjarngrimAchievement = false;
}
};
bool IsEncounterInProgress() const override
{
if (InstanceScript::IsEncounterInProgress())
return true;
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
{
if (m_auiEncounter[i] == IN_PROGRESS && i != TYPE_LOKEN_INTRO)
@@ -195,22 +179,22 @@ public:
return m_auiEncounter[uiType];
}
ObjectGuid GetGuidData(uint32 uiData) const override
{
switch (uiData)
{
case TYPE_BJARNGRIM:
return m_uiGeneralBjarngrimGUID;
case TYPE_VOLKHAN:
return m_uiVolkhanGUID;
case TYPE_IONAR:
return m_uiIonarGUID;
case TYPE_LOKEN:
return m_uiLokenGUID;
}
private:
uint32 m_auiEncounter[MAX_ENCOUNTER];
return ObjectGuid::Empty;
}
ObjectGuid m_uiGeneralBjarngrimGUID;
ObjectGuid m_uiIonarGUID;
ObjectGuid m_uiLokenGUID;
ObjectGuid m_uiVolkhanGUID;
ObjectGuid m_uiBjarngrimDoorGUID;
ObjectGuid m_uiVolkhanDoorGUID;
ObjectGuid m_uiIonarDoorGUID;
ObjectGuid m_uiLokenDoorGUID;
ObjectGuid m_uiLokenGlobeGUID;
bool volkhanAchievement;
bool bjarngrimAchievement;
};
};