refactor(Scripts/EoE): Update creature register methods (#24556)

This commit is contained in:
Andrew
2026-01-30 10:20:21 -03:00
committed by GitHub
parent f9bc6c6292
commit 6c32ea2e5e
2 changed files with 1059 additions and 1157 deletions

View File

@@ -188,19 +188,9 @@ enum MalygosLightOverrides
LIGHT_OBSCURE_ARCANE_RUNES = 1825, LIGHT_OBSCURE_ARCANE_RUNES = 1825,
}; };
class boss_malygos : public CreatureScript struct boss_malygos : public ScriptedAI
{ {
public: boss_malygos(Creature* c) : ScriptedAI(c), summons(me)
boss_malygos() : CreatureScript("boss_malygos") { }
CreatureAI* GetAI(Creature* pCreature) const override
{
return GetEyeOfEternityAI<boss_malygosAI>(pCreature);
}
struct boss_malygosAI : public ScriptedAI
{
boss_malygosAI(Creature* c) : ScriptedAI(c), summons(me)
{ {
pInstance = me->GetInstanceScript(); pInstance = me->GetInstanceScript();
} }
@@ -834,25 +824,14 @@ public:
} }
} }
}; };
};
#define VORTEX_DEFAULT_DIFF 250 #define VORTEX_DEFAULT_DIFF 250
#define VORTEX_TRAVEL_TIME 3000 #define VORTEX_TRAVEL_TIME 3000
//#define VORTEX_RADIUS 25.0f //#define VORTEX_RADIUS 25.0f
class npc_vortex_ride : public CreatureScript struct npc_vortex_ride : public VehicleAI
{ {
public: npc_vortex_ride(Creature* pCreature) : VehicleAI(pCreature)
npc_vortex_ride() : CreatureScript("npc_vortex_ride") { }
CreatureAI* GetAI(Creature* pCreature) const override
{
return GetEyeOfEternityAI<npc_vortex_rideAI> (pCreature);
}
struct npc_vortex_rideAI : public VehicleAI
{
npc_vortex_rideAI(Creature* pCreature) : VehicleAI(pCreature)
{ {
VORTEX_RADIUS = urand(22, 28); VORTEX_RADIUS = urand(22, 28);
float h = urand(15, 30); float h = urand(15, 30);
@@ -939,21 +918,10 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {} void MoveInLineOfSight(Unit* /*who*/) override {}
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override { damage = 0; } void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override { damage = 0; }
}; };
};
class npc_power_spark : public CreatureScript struct npc_power_spark : public NullCreatureAI
{ {
public: npc_power_spark(Creature* pCreature) : NullCreatureAI(pCreature)
npc_power_spark() : CreatureScript("npc_power_spark") { }
CreatureAI* GetAI(Creature* pCreature) const override
{
return GetEyeOfEternityAI<npc_power_sparkAI>(pCreature);
}
struct npc_power_sparkAI : public NullCreatureAI
{
npc_power_sparkAI(Creature* pCreature) : NullCreatureAI(pCreature)
{ {
pInstance = me->GetInstanceScript(); pInstance = me->GetInstanceScript();
me->CastSpell(me, SPELL_POWER_SPARK_VISUAL, false); me->CastSpell(me, SPELL_POWER_SPARK_VISUAL, false);
@@ -1034,21 +1002,10 @@ public:
} }
} }
}; };
};
class npc_nexus_lord : public CreatureScript struct npc_nexus_lord : public ScriptedAI
{ {
public: npc_nexus_lord(Creature* pCreature) : ScriptedAI(pCreature)
npc_nexus_lord() : CreatureScript("npc_nexus_lord") { }
CreatureAI* GetAI(Creature* pCreature) const override
{
return GetEyeOfEternityAI<npc_nexus_lordAI>(pCreature);
}
struct npc_nexus_lordAI : public ScriptedAI
{
npc_nexus_lordAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
me->SetReactState(REACT_PASSIVE); me->SetReactState(REACT_PASSIVE);
pInstance = me->GetInstanceScript(); pInstance = me->GetInstanceScript();
@@ -1127,21 +1084,10 @@ public:
v->RemoveAllPassengers(); v->RemoveAllPassengers();
} }
}; };
};
class npc_scion_of_eternity : public CreatureScript struct npc_scion_of_eternity : public ScriptedAI
{ {
public: npc_scion_of_eternity(Creature* pCreature) : ScriptedAI(pCreature)
npc_scion_of_eternity() : CreatureScript("npc_scion_of_eternity") { }
CreatureAI* GetAI(Creature* pCreature) const override
{
return GetEyeOfEternityAI<npc_scion_of_eternityAI>(pCreature);
}
struct npc_scion_of_eternityAI : public ScriptedAI
{
npc_scion_of_eternityAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
me->SetReactState(REACT_PASSIVE); me->SetReactState(REACT_PASSIVE);
pInstance = me->GetInstanceScript(); pInstance = me->GetInstanceScript();
@@ -1206,21 +1152,10 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {} void MoveInLineOfSight(Unit* /*who*/) override {}
void AttackStart(Unit* /*who*/) override {} void AttackStart(Unit* /*who*/) override {}
}; };
};
class npc_hover_disk : public CreatureScript struct npc_hover_disk : public VehicleAI
{ {
public: npc_hover_disk(Creature* pCreature) : VehicleAI(pCreature)
npc_hover_disk() : CreatureScript("npc_hover_disk") { }
CreatureAI* GetAI(Creature* pCreature) const override
{
return GetEyeOfEternityAI<npc_hover_diskAI>(pCreature);
}
struct npc_hover_diskAI : public VehicleAI
{
npc_hover_diskAI(Creature* pCreature) : VehicleAI(pCreature)
{ {
pInstance = me->GetInstanceScript(); pInstance = me->GetInstanceScript();
events.Reset(); events.Reset();
@@ -1348,21 +1283,10 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {} void MoveInLineOfSight(Unit* /*who*/) override {}
void AttackStart(Unit* /*who*/) override {} void AttackStart(Unit* /*who*/) override {}
}; };
};
class npc_alexstrasza : public CreatureScript struct npc_alexstrasza : public ScriptedAI
{ {
public: npc_alexstrasza(Creature* pCreature) : ScriptedAI(pCreature)
npc_alexstrasza() : CreatureScript("npc_alexstrasza") { }
CreatureAI* GetAI(Creature* pCreature) const override
{
return GetEyeOfEternityAI<npc_alexstraszaAI>(pCreature);
}
struct npc_alexstraszaAI : public ScriptedAI
{
npc_alexstraszaAI(Creature* pCreature) : ScriptedAI(pCreature)
{ {
events.Reset(); events.Reset();
events.ScheduleEvent(1, 9s); events.ScheduleEvent(1, 9s);
@@ -1411,25 +1335,13 @@ public:
void MoveInLineOfSight(Unit* /*who*/) override {} void MoveInLineOfSight(Unit* /*who*/) override {}
void AttackStart(Unit* /*who*/) override {} void AttackStart(Unit* /*who*/) override {}
}; };
};
class npc_eoe_wyrmrest_skytalon : public CreatureScript struct npc_eoe_wyrmrest_skytalon : public VehicleAI
{ {
public: npc_eoe_wyrmrest_skytalon(Creature* creature) : VehicleAI(creature) { }
npc_eoe_wyrmrest_skytalon() : CreatureScript("npc_eoe_wyrmrest_skytalon") { }
CreatureAI* GetAI(Creature* pCreature) const override
{
return GetEyeOfEternityAI<npc_eoe_wyrmrest_skytalonAI>(pCreature);
}
struct npc_eoe_wyrmrest_skytalonAI : public VehicleAI
{
npc_eoe_wyrmrest_skytalonAI(Creature* pCreature) : VehicleAI(pCreature) { }
void IsSummonedBy(WorldObject* summoner) override void IsSummonedBy(WorldObject* summoner) override
{ {
me->SetDisableGravity(true);
if (summoner && summoner->IsPlayer()) if (summoner && summoner->IsPlayer())
{ {
ObjectGuid summonerGUID = summoner->GetGUID(); ObjectGuid summonerGUID = summoner->GetGUID();
@@ -1460,7 +1372,6 @@ public:
me->DespawnOrUnsummon(1ms); me->DespawnOrUnsummon(1ms);
} }
}; };
};
class go_the_focusing_iris : public GameObjectScript class go_the_focusing_iris : public GameObjectScript
{ {
@@ -1567,15 +1478,15 @@ class spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger : public SpellScript
void AddSC_boss_malygos() void AddSC_boss_malygos()
{ {
new boss_malygos(); RegisterEoECreatureAI(boss_malygos);
new npc_power_spark(); RegisterEoECreatureAI(npc_power_spark);
new npc_vortex_ride(); RegisterEoECreatureAI(npc_vortex_ride);
new npc_alexstrasza(); RegisterEoECreatureAI(npc_alexstrasza);
new go_the_focusing_iris(); new go_the_focusing_iris();
new npc_nexus_lord(); RegisterEoECreatureAI(npc_nexus_lord);
new npc_scion_of_eternity(); RegisterEoECreatureAI(npc_scion_of_eternity);
new npc_hover_disk(); RegisterEoECreatureAI(npc_hover_disk);
new npc_eoe_wyrmrest_skytalon(); RegisterEoECreatureAI(npc_eoe_wyrmrest_skytalon);
RegisterSpellScript(spell_wyrmrest_skytalon_summon_red_dragon_buddy); RegisterSpellScript(spell_wyrmrest_skytalon_summon_red_dragon_buddy);
RegisterSpellScript(spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger); RegisterSpellScript(spell_wyrmrest_skytalon_ride_red_dragon_buddy_trigger);

View File

@@ -105,20 +105,11 @@ const Position Phase2NorthPos = {837.22f, 1301.676f, 296.10f, M_PI};
const uint32 MalygosIntroIntervals[] = {18000, 19000, 21000, 18000, 15000}; const uint32 MalygosIntroIntervals[] = {18000, 19000, 21000, 18000, 15000};
class EoEDrakeEnterVehicleEvent : public BasicEvent
{
public:
EoEDrakeEnterVehicleEvent(Creature& owner, ObjectGuid playerGUID) : _owner(owner), _playerGUID(playerGUID) { }
bool Execute(uint64 /*eventTime*/, uint32 /*updateTime*/) override;
private:
Creature& _owner;
ObjectGuid _playerGUID;
};
template <class AI, class T> template <class AI, class T>
inline AI* GetEyeOfEternityAI(T* obj) inline AI* GetEyeOfEternityAI(T* obj)
{ {
return GetInstanceAI<AI>(obj, EyeOfEternityScriptName); return GetInstanceAI<AI>(obj, EyeOfEternityScriptName);
} }
#define RegisterEoECreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetEyeOfEternityAI)
#endif #endif