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();
} }
@@ -626,7 +616,7 @@ public:
float dist = Phase2NorthPos.GetExactDist2d(&CenterPos); float dist = Phase2NorthPos.GetExactDist2d(&CenterPos);
float newangle = angle + 0.5f; float newangle = angle + 0.5f;
if (newangle >= 2 * M_PI) newangle -= 2 * M_PI; if (newangle >= 2 * M_PI) newangle -= 2 * M_PI;
me->GetMotionMaster()->MovePoint(MI_POINT_CIRCLE_OUTSIDE_PH_2, CenterPos.GetPositionX() + cos(newangle)*dist, CenterPos.GetPositionY() + std::sin(newangle)*dist, Phase2NorthPos.GetPositionZ()); me->GetMotionMaster()->MovePoint(MI_POINT_CIRCLE_OUTSIDE_PH_2, CenterPos.GetPositionX() + cos(newangle) * dist, CenterPos.GetPositionY() + std::sin(newangle) * dist, Phase2NorthPos.GetPositionZ());
} }
break; break;
case EVENT_MOVE_TO_SURGE_OF_POWER: case EVENT_MOVE_TO_SURGE_OF_POWER:
@@ -833,26 +823,15 @@ public:
timer2 -= diff; timer2 -= diff;
} }
} }
};
}; };
#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);
@@ -938,22 +917,11 @@ public:
void AttackStart(Unit* /*who*/) override {} void AttackStart(Unit* /*who*/) override {}
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);
@@ -1033,22 +1001,11 @@ public:
MoveTimer -= diff; MoveTimer -= diff;
} }
} }
};
}; };
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();
@@ -1126,22 +1083,11 @@ public:
if (Vehicle* v = me->GetVehicle()) if (Vehicle* v = me->GetVehicle())
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();
@@ -1205,22 +1151,11 @@ 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();
@@ -1347,22 +1282,11 @@ 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);
@@ -1410,26 +1334,14 @@ 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();
@@ -1459,7 +1371,6 @@ public:
me->SetDisplayId(11686); // prevents nasty falling animation at despawn me->SetDisplayId(11686); // prevents nasty falling animation at despawn
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