This commit is contained in:
luis
2026-09-04 09:55:37 -03:00
parent f3dfd39eb6
commit c7b20c24b4
2 changed files with 69 additions and 5 deletions
@@ -194,6 +194,8 @@ enum TrashSpells
SPELL_REPAIRING = 1271768,
SPELL_CORESPARKS_DETONATION = 1257526,
SPELL_CORESPARKS_SURGE = 1257079,
SPELL_ENERGY_INTAKE = 1279966,
SPELL_LEYLINE_ARRAY_WORKER = 1265841,
};
// ===== Corespark Pylon (Kasreth add) =====
@@ -239,6 +241,7 @@ enum NexusPointXenasEvents
EVENT_IMAGE_FLICKER,
EVENT_IMAGE_ZENITH,
EVENT_IMAGE_MIRRORED_REND,
EVENT_IMAGE_RADIANT_SCAR,
EVENT_PYLON_FLUX_COLLAPSE = 500,
EVENT_PYLON_ARCANE_SPILL,
@@ -27,6 +27,9 @@ enum TrashEvents
EVENT_UMBRA_BOLT,
EVENT_CORESPARK_SURGE,
EVENT_MANA_BATTERY,
EVENT_ERRATIC_SURGE,
EVENT_ENERGY_INTAKE,
EVENT_LEYLINE_ARRAY_WORKER,
};
// 248373 - Circuit Seer
@@ -39,7 +42,8 @@ struct npc_circuit_seer : public ScriptedAI
ScriptedAI::JustEngagedWith(who);
_events.ScheduleEvent(EVENT_ERRATIC_ZAP, 3s);
_events.ScheduleEvent(EVENT_ARCING_MANA, 8s);
_events.ScheduleEvent(EVENT_POWER_FLUX, 14s);
_events.ScheduleEvent(EVENT_ERRATIC_SURGE, 12s);
_events.ScheduleEvent(EVENT_POWER_FLUX, 16s);
}
void ExecuteEvent(uint32 eventId)
@@ -56,10 +60,15 @@ struct npc_circuit_seer : public ScriptedAI
DoCast(target, SPELL_ARCING_MANA_A);
_events.Repeat(12s, 16s);
break;
case EVENT_ERRATIC_SURGE:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
DoCast(target, SPELL_ERRATIC_SURGE);
_events.Repeat(16s, 22s);
break;
case EVENT_POWER_FLUX:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
DoCast(target, SPELL_POWER_FLUX_B);
_events.Repeat(16s, 22s);
_events.Repeat(20s, 26s);
break;
default:
break;
@@ -136,7 +145,9 @@ struct npc_manacite_worker : public ScriptedAI
{
ScriptedAI::JustEngagedWith(who);
_events.ScheduleEvent(EVENT_ARCING_MANA, 4s);
_events.ScheduleEvent(EVENT_MANA_BATTERY, 12s);
_events.ScheduleEvent(EVENT_ENERGY_INTAKE, 10s);
_events.ScheduleEvent(EVENT_LEYLINE_ARRAY_WORKER, 16s);
_events.ScheduleEvent(EVENT_MANA_BATTERY, 22s);
}
void ExecuteEvent(uint32 eventId)
@@ -148,9 +159,18 @@ struct npc_manacite_worker : public ScriptedAI
DoCast(target, SPELL_ARCING_MANA_B);
_events.Repeat(10s, 14s);
break;
case EVENT_ENERGY_INTAKE:
DoCastSelf(SPELL_ENERGY_INTAKE);
_events.Repeat(13s, 17s);
break;
case EVENT_LEYLINE_ARRAY_WORKER:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true))
DoCast(target, SPELL_LEYLINE_ARRAY_WORKER);
_events.Repeat(18s, 24s);
break;
case EVENT_MANA_BATTERY:
DoCastSelf(SPELL_MANA_BATTERY);
_events.Repeat(18s, 24s);
_events.Repeat(26s, 32s);
break;
default:
break;
@@ -230,9 +250,9 @@ struct npc_fractured_image : public ScriptedAI
{
DoZoneInCombat();
_events.ScheduleEvent(EVENT_IMAGE_MIRRORED_REND, 3s);
_events.ScheduleEvent(EVENT_IMAGE_RADIANT_SCAR, 8s);
_events.ScheduleEvent(EVENT_IMAGE_FLICKER, 12s);
_events.ScheduleEvent(EVENT_IMAGE_ZENITH, 20s);
_events.ScheduleEvent(EVENT_IMAGE_MIRRORED_REND, 28s);
}
void ExecuteEvent(uint32 eventId)
@@ -244,6 +264,11 @@ struct npc_fractured_image : public ScriptedAI
DoCast(target, SPELL_MIRRORED_REND);
_events.Repeat(10s, 14s);
break;
case EVENT_IMAGE_RADIANT_SCAR:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
DoCast(target, SPELL_RADIANT_SCAR_IMAGE);
_events.Repeat(6s, 9s);
break;
case EVENT_IMAGE_FLICKER:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true))
{
@@ -280,11 +305,47 @@ private:
EventMap _events;
};
// 252938 - [DNT] Orb Stalker (Coresparks wandering detonation orb)
struct npc_coresparks : public ScriptedAI
{
npc_coresparks(Creature* creature) : ScriptedAI(creature) { }
void IsSummonedBy(WorldObject* /*summoner*/) override
{
DoZoneInCombat();
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
Unit* target = me->GetVictim();
if (!target)
target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true);
if (!target)
return;
// Detonate when the orb reaches its target.
if (me->GetDistance(target) <= 2.5f)
{
DoCastSelf(SPELL_CORESPARKS_DETONATION, true);
me->DespawnOrUnsummon(500ms);
return;
}
// Otherwise drift toward the nearest player to chase them down.
me->GetMotionMaster()->MoveChase(target);
}
};
void AddSC_nexuspointxenas_trash()
{
RegisterNexusPointXenasCreatureAI(npc_circuit_seer);
RegisterNexusPointXenasCreatureAI(npc_umbra_weaver);
RegisterNexusPointXenasCreatureAI(npc_manacite_worker);
RegisterNexusPointXenasCreatureAI(npc_corespark_pylon);
RegisterNexusPointXenasCreatureAI(npc_coresparks);
RegisterNexusPointXenasCreatureAI(npc_fractured_image);
}