Scripts/Instances: Update Slave Pens scripts to new register model (#26568)

This commit is contained in:
offl
2021-06-07 00:25:46 +03:00
committed by GitHub
parent 483f24c5ed
commit 57d369dd6a
5 changed files with 216 additions and 259 deletions

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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