mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Scripts/Instances: Update Slave Pens scripts to new register model (#26568)
This commit is contained in:
@@ -591,37 +591,26 @@ private:
|
||||
uint8 _mySpot;
|
||||
};
|
||||
|
||||
class go_ahune_ice_stone : public GameObjectScript
|
||||
struct go_ahune_ice_stone : public GameObjectAI
|
||||
{
|
||||
public:
|
||||
go_ahune_ice_stone() : GameObjectScript("go_ahune_ice_stone") { }
|
||||
go_ahune_ice_stone(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
|
||||
|
||||
struct go_ahune_ice_stoneAI : public GameObjectAI
|
||||
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
|
||||
{
|
||||
go_ahune_ice_stoneAI(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { }
|
||||
ClearGossipMenuFor(player);
|
||||
|
||||
bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
|
||||
{
|
||||
ClearGossipMenuFor(player);
|
||||
if (Creature* ahuneBunny = _instance->GetCreature(DATA_AHUNE_BUNNY))
|
||||
ahuneBunny->AI()->DoAction(ACTION_START_EVENT);
|
||||
|
||||
if (Creature* ahuneBunny = _instance->GetCreature(DATA_AHUNE_BUNNY))
|
||||
ahuneBunny->AI()->DoAction(ACTION_START_EVENT);
|
||||
|
||||
if (Creature* luma = _instance->GetCreature(DATA_LUMA_SKYMOTHER))
|
||||
luma->CastSpell(player, SPELL_SUMMONING_RHYME_AURA, true);
|
||||
CloseGossipMenuFor(player);
|
||||
me->Delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
InstanceScript* _instance;
|
||||
};
|
||||
|
||||
GameObjectAI* GetAI(GameObject* go) const override
|
||||
{
|
||||
return GetSlavePensAI<go_ahune_ice_stoneAI>(go);
|
||||
if (Creature* luma = _instance->GetCreature(DATA_LUMA_SKYMOTHER))
|
||||
luma->CastSpell(player, SPELL_SUMMONING_RHYME_AURA, true);
|
||||
CloseGossipMenuFor(player);
|
||||
me->Delete();
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
InstanceScript* _instance;
|
||||
};
|
||||
|
||||
// 46430 - Synch Health
|
||||
@@ -870,7 +859,7 @@ void AddSC_boss_ahune()
|
||||
RegisterSlavePensCreatureAI(npc_frozen_core);
|
||||
RegisterSlavePensCreatureAI(npc_earthen_ring_flamecaller);
|
||||
RegisterSlavePensCreatureAI(npc_ahune_bunny);
|
||||
new go_ahune_ice_stone();
|
||||
RegisterSlavePensGameObjectAI(go_ahune_ice_stone);
|
||||
RegisterSpellScript(spell_ahune_synch_health);
|
||||
RegisterSpellScript(spell_summoning_rhyme_aura);
|
||||
RegisterSpellScript(spell_summon_ice_spear_delayer);
|
||||
|
||||
@@ -51,94 +51,83 @@ enum Events
|
||||
EVENT_LIGHTNING_BOLT = 5
|
||||
};
|
||||
|
||||
class boss_mennu_the_betrayer : public CreatureScript
|
||||
struct boss_mennu_the_betrayer : public BossAI
|
||||
{
|
||||
public:
|
||||
boss_mennu_the_betrayer() : CreatureScript("boss_mennu_the_betrayer") { }
|
||||
boss_mennu_the_betrayer(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { }
|
||||
|
||||
struct boss_mennu_the_betrayerAI : public BossAI
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
Talk(SAY_DEATH);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30s);
|
||||
events.ScheduleEvent(EVENT_TAINTED_EARTHGRAB_TOTEM, 20s);
|
||||
events.ScheduleEvent(EVENT_CORRUPTED_NOVA_TOTEM, 1min);
|
||||
events.ScheduleEvent(EVENT_MENNUS_HEALING_WARD, 14s, 25s);
|
||||
events.ScheduleEvent(EVENT_LIGHTNING_BOLT, 14s, 19s);
|
||||
Talk(SAY_AGGRO);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
{
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
boss_mennu_the_betrayerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER) { }
|
||||
|
||||
void Reset() override
|
||||
switch (eventId)
|
||||
{
|
||||
_Reset();
|
||||
case EVENT_TAINTED_STONESKIN_TOTEM:
|
||||
if (HealthBelowPct(100))
|
||||
DoCast(me, SPELL_TAINTED_STONESKIN_TOTEM);
|
||||
events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30s);
|
||||
break;
|
||||
case EVENT_TAINTED_EARTHGRAB_TOTEM:
|
||||
DoCast(me, SPELL_TAINTED_EARTHGRAB_TOTEM);
|
||||
break;
|
||||
case EVENT_CORRUPTED_NOVA_TOTEM:
|
||||
DoCast(me, SPELL_CORRUPTED_NOVA_TOTEM);
|
||||
break;
|
||||
case EVENT_MENNUS_HEALING_WARD:
|
||||
DoCast(me, SPELL_MENNUS_HEALING_WARD);
|
||||
events.ScheduleEvent(EVENT_MENNUS_HEALING_WARD, 14s, 25s);
|
||||
break;
|
||||
case EVENT_LIGHTNING_BOLT:
|
||||
DoCastVictim(SPELL_LIGHTNING_BOLT, true);
|
||||
events.ScheduleEvent(EVENT_LIGHTNING_BOLT, 14s, 25s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
Talk(SAY_DEATH);
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30s);
|
||||
events.ScheduleEvent(EVENT_TAINTED_EARTHGRAB_TOTEM, 20s);
|
||||
events.ScheduleEvent(EVENT_CORRUPTED_NOVA_TOTEM, 1min);
|
||||
events.ScheduleEvent(EVENT_MENNUS_HEALING_WARD, 14s, 25s);
|
||||
events.ScheduleEvent(EVENT_LIGHTNING_BOLT, 14s, 19s);
|
||||
Talk(SAY_AGGRO);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override
|
||||
{
|
||||
Talk(SAY_SLAY);
|
||||
}
|
||||
|
||||
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_TAINTED_STONESKIN_TOTEM:
|
||||
if (HealthBelowPct(100))
|
||||
DoCast(me, SPELL_TAINTED_STONESKIN_TOTEM);
|
||||
events.ScheduleEvent(EVENT_TAINTED_STONESKIN_TOTEM, 30s);
|
||||
break;
|
||||
case EVENT_TAINTED_EARTHGRAB_TOTEM:
|
||||
DoCast(me, SPELL_TAINTED_EARTHGRAB_TOTEM);
|
||||
break;
|
||||
case EVENT_CORRUPTED_NOVA_TOTEM:
|
||||
DoCast(me, SPELL_CORRUPTED_NOVA_TOTEM);
|
||||
break;
|
||||
case EVENT_MENNUS_HEALING_WARD:
|
||||
DoCast(me, SPELL_MENNUS_HEALING_WARD);
|
||||
events.ScheduleEvent(EVENT_MENNUS_HEALING_WARD, 14s, 25s);
|
||||
break;
|
||||
case EVENT_LIGHTNING_BOLT:
|
||||
DoCastVictim(SPELL_LIGHTNING_BOLT, true);
|
||||
events.ScheduleEvent(EVENT_LIGHTNING_BOLT, 14s, 25s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetSlavePensAI<boss_mennu_the_betrayerAI>(creature);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_mennu_the_betrayer()
|
||||
{
|
||||
new boss_mennu_the_betrayer();
|
||||
RegisterSlavePensCreatureAI(boss_mennu_the_betrayer);
|
||||
}
|
||||
|
||||
@@ -42,86 +42,75 @@ enum Events
|
||||
EVENT_POISON_BOLT_VOLLEY = 4
|
||||
};
|
||||
|
||||
class boss_quagmirran : public CreatureScript
|
||||
struct boss_quagmirran : public BossAI
|
||||
{
|
||||
public:
|
||||
boss_quagmirran() : CreatureScript("boss_quagmirran") { }
|
||||
boss_quagmirran(Creature* creature) : BossAI(creature, DATA_QUAGMIRRAN) { }
|
||||
|
||||
struct boss_quagmirranAI : public BossAI
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
events.ScheduleEvent(EVENT_ACID_SPRAY, 25s);
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 9s);
|
||||
events.ScheduleEvent(EVENT_UPPERCUT, 20s);
|
||||
events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 31s);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override { }
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
boss_quagmirranAI(Creature* creature) : BossAI(creature, DATA_QUAGMIRRAN) { }
|
||||
|
||||
void Reset() override
|
||||
switch (eventId)
|
||||
{
|
||||
_Reset();
|
||||
case EVENT_ACID_SPRAY:
|
||||
DoCastAOE(SPELL_ACID_SPRAY);
|
||||
events.ScheduleEvent(EVENT_ACID_SPRAY, 20s, 25s);
|
||||
break;
|
||||
case EVENT_CLEAVE:
|
||||
DoCastVictim(SPELL_CLEAVE, true);
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 18s, 34s);
|
||||
break;
|
||||
case EVENT_UPPERCUT:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 10.0f, true))
|
||||
DoCast(target, SPELL_UPPERCUT);
|
||||
events.ScheduleEvent(EVENT_UPPERCUT, 22s);
|
||||
break;
|
||||
case EVENT_POISON_BOLT_VOLLEY:
|
||||
DoCast(me, SPELL_POISON_BOLT_VOLLEY);
|
||||
events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 24s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
events.ScheduleEvent(EVENT_ACID_SPRAY, 25s);
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 9s);
|
||||
events.ScheduleEvent(EVENT_UPPERCUT, 20s);
|
||||
events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 31s);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override { }
|
||||
|
||||
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_ACID_SPRAY:
|
||||
DoCastAOE(SPELL_ACID_SPRAY);
|
||||
events.ScheduleEvent(EVENT_ACID_SPRAY, 20s, 25s);
|
||||
break;
|
||||
case EVENT_CLEAVE:
|
||||
DoCastVictim(SPELL_CLEAVE, true);
|
||||
events.ScheduleEvent(EVENT_CLEAVE, 18s, 34s);
|
||||
break;
|
||||
case EVENT_UPPERCUT:
|
||||
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 10.0f, true))
|
||||
DoCast(target, SPELL_UPPERCUT);
|
||||
events.ScheduleEvent(EVENT_UPPERCUT, 22s);
|
||||
break;
|
||||
case EVENT_POISON_BOLT_VOLLEY:
|
||||
DoCast(me, SPELL_POISON_BOLT_VOLLEY);
|
||||
events.ScheduleEvent(EVENT_POISON_BOLT_VOLLEY, 24s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetSlavePensAI<boss_quagmirranAI>(creature);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_quagmirran()
|
||||
{
|
||||
new boss_quagmirran();
|
||||
RegisterSlavePensCreatureAI(boss_quagmirran);
|
||||
}
|
||||
|
||||
@@ -41,98 +41,87 @@ enum Events
|
||||
EVENT_WATER_SPIT = 3
|
||||
};
|
||||
|
||||
class boss_rokmar_the_crackler : public CreatureScript
|
||||
struct boss_rokmar_the_crackler : public BossAI
|
||||
{
|
||||
public:
|
||||
boss_rokmar_the_crackler() : CreatureScript("boss_rokmar_the_crackler") { }
|
||||
boss_rokmar_the_crackler(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
struct boss_rokmar_the_cracklerAI : public BossAI
|
||||
void Initialize()
|
||||
{
|
||||
rokmarFrenzy = false;
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, 10s);
|
||||
events.ScheduleEvent(EVENT_ENSNARING_MOSS, 20s);
|
||||
events.ScheduleEvent(EVENT_WATER_SPIT, 14s);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override { }
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
boss_rokmar_the_cracklerAI(Creature* creature) : BossAI(creature, DATA_MENNU_THE_BETRAYER)
|
||||
switch (eventId)
|
||||
{
|
||||
Initialize();
|
||||
case EVENT_GRIEVOUS_WOUND:
|
||||
DoCastVictim(SPELL_GRIEVOUS_WOUND, true);
|
||||
events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, 20s, 30s);
|
||||
break;
|
||||
case EVENT_ENSNARING_MOSS:
|
||||
DoCastAOE(SPELL_ENSNARING_MOSS);
|
||||
events.ScheduleEvent(EVENT_ENSNARING_MOSS, 20s, 30s);
|
||||
break;
|
||||
case EVENT_WATER_SPIT:
|
||||
DoCastAOE(SPELL_WATER_SPIT);
|
||||
events.ScheduleEvent(EVENT_WATER_SPIT, 14s, 18s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
rokmarFrenzy = false;
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
}
|
||||
|
||||
void JustEngagedWith(Unit* who) override
|
||||
{
|
||||
BossAI::JustEngagedWith(who);
|
||||
events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, 10s);
|
||||
events.ScheduleEvent(EVENT_ENSNARING_MOSS, 20s);
|
||||
events.ScheduleEvent(EVENT_WATER_SPIT, 14s);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/) override { }
|
||||
|
||||
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_GRIEVOUS_WOUND:
|
||||
DoCastVictim(SPELL_GRIEVOUS_WOUND, true);
|
||||
events.ScheduleEvent(EVENT_GRIEVOUS_WOUND, 20s, 30s);
|
||||
break;
|
||||
case EVENT_ENSNARING_MOSS:
|
||||
DoCastAOE(SPELL_ENSNARING_MOSS);
|
||||
events.ScheduleEvent(EVENT_ENSNARING_MOSS, 20s, 30s);
|
||||
break;
|
||||
case EVENT_WATER_SPIT:
|
||||
DoCastAOE(SPELL_WATER_SPIT);
|
||||
events.ScheduleEvent(EVENT_WATER_SPIT, 14s, 18s);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
}
|
||||
|
||||
if (HealthBelowPct(10) && !rokmarFrenzy)
|
||||
{
|
||||
DoCast(me, SPELL_FRENZY);
|
||||
rokmarFrenzy = true;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
bool rokmarFrenzy;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetSlavePensAI<boss_rokmar_the_cracklerAI>(creature);
|
||||
if (me->HasUnitState(UNIT_STATE_CASTING))
|
||||
return;
|
||||
}
|
||||
|
||||
if (HealthBelowPct(10) && !rokmarFrenzy)
|
||||
{
|
||||
DoCast(me, SPELL_FRENZY);
|
||||
rokmarFrenzy = true;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
private:
|
||||
bool rokmarFrenzy;
|
||||
};
|
||||
|
||||
void AddSC_boss_rokmar_the_crackler()
|
||||
{
|
||||
new boss_rokmar_the_crackler();
|
||||
RegisterSlavePensCreatureAI(boss_rokmar_the_crackler);
|
||||
}
|
||||
|
||||
@@ -73,5 +73,6 @@ inline AI* GetSlavePensAI(T* obj)
|
||||
}
|
||||
|
||||
#define RegisterSlavePensCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetSlavePensAI)
|
||||
#define RegisterSlavePensGameObjectAI(ai_name) RegisterGameObjectAIWithFactory(ai_name, GetSlavePensAI)
|
||||
|
||||
#endif // SLAVE_PENS_H
|
||||
|
||||
Reference in New Issue
Block a user