aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-07-14 22:24:06 +0300
committerGitHub <noreply@github.com>2021-07-14 22:24:06 +0300
commit5e240a4a50fa4c8075b7dcf8913f1723bdc682b1 (patch)
tree1078976da29126eede4d9fd874672ecad0b42d44
parent572b480a2e030e55ac5d1c2ded1b72c5c7ade5cd (diff)
Scripts/ZG: Update scripts to new register model (2/5) (#26692)
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp201
-rw-r--r--src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp117
2 files changed, 148 insertions, 170 deletions
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
index cbe0f4da438..4935c03c259 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp
@@ -63,124 +63,113 @@ enum Events
EVENT_ASPECT_OF_ARLOKK = 10
};
-class boss_hakkar : public CreatureScript
+struct boss_hakkar : public BossAI
{
- public:
- boss_hakkar() : CreatureScript("boss_hakkar") { }
+ boss_hakkar(Creature* creature) : BossAI(creature, DATA_HAKKAR) { }
- struct boss_hakkarAI : public BossAI
- {
- boss_hakkarAI(Creature* creature) : BossAI(creature, DATA_HAKKAR) { }
-
- void Reset() override
- {
- _Reset();
- }
+ void Reset() override
+ {
+ _Reset();
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_BLOOD_SIPHON, 90s);
- events.ScheduleEvent(EVENT_CORRUPTED_BLOOD, 25s);
- events.ScheduleEvent(EVENT_CAUSE_INSANITY, 15s);
- events.ScheduleEvent(EVENT_WILL_OF_HAKKAR, 15s);
- events.ScheduleEvent(EVENT_ENRAGE, 10min);
- if (instance->GetBossState(DATA_JEKLIK) != DONE)
- events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, 4s);
- if (instance->GetBossState(DATA_VENOXIS) != DONE)
- events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 7s);
- if (instance->GetBossState(DATA_MARLI) != DONE)
- events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 12s);
- if (instance->GetBossState(DATA_THEKAL) != DONE)
- events.ScheduleEvent(EVENT_ASPECT_OF_THEKAL, 8s);
- if (instance->GetBossState(DATA_ARLOKK) != DONE)
- events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, 18s);
- Talk(SAY_AGGRO);
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_BLOOD_SIPHON, 90s);
+ events.ScheduleEvent(EVENT_CORRUPTED_BLOOD, 25s);
+ events.ScheduleEvent(EVENT_CAUSE_INSANITY, 15s);
+ events.ScheduleEvent(EVENT_WILL_OF_HAKKAR, 15s);
+ events.ScheduleEvent(EVENT_ENRAGE, 10min);
+ if (instance->GetBossState(DATA_JEKLIK) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, 4s);
+ if (instance->GetBossState(DATA_VENOXIS) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 7s);
+ if (instance->GetBossState(DATA_MARLI) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 12s);
+ if (instance->GetBossState(DATA_THEKAL) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_THEKAL, 8s);
+ if (instance->GetBossState(DATA_ARLOKK) != DONE)
+ events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, 18s);
+ Talk(SAY_AGGRO);
+ }
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- while (uint32 eventId = events.ExecuteEvent())
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_BLOOD_SIPHON:
+ DoCastVictim(SPELL_BLOOD_SIPHON, true);
+ events.ScheduleEvent(EVENT_BLOOD_SIPHON, 90s);
+ break;
+ case EVENT_CORRUPTED_BLOOD:
+ DoCastVictim(SPELL_CORRUPTED_BLOOD, true);
+ events.ScheduleEvent(EVENT_CORRUPTED_BLOOD, 30s, 45s);
+ break;
+ case EVENT_CAUSE_INSANITY:
+ // DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_CAUSE_INSANITY);
+ // events.ScheduleEvent(EVENT_CAUSE_INSANITY, 35s, 45s);
+ break;
+ case EVENT_WILL_OF_HAKKAR:
{
- switch (eventId)
- {
- case EVENT_BLOOD_SIPHON:
- DoCastVictim(SPELL_BLOOD_SIPHON, true);
- events.ScheduleEvent(EVENT_BLOOD_SIPHON, 90s);
- break;
- case EVENT_CORRUPTED_BLOOD:
- DoCastVictim(SPELL_CORRUPTED_BLOOD, true);
- events.ScheduleEvent(EVENT_CORRUPTED_BLOOD, 30s, 45s);
- break;
- case EVENT_CAUSE_INSANITY:
- // DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_CAUSE_INSANITY);
- // events.ScheduleEvent(EVENT_CAUSE_INSANITY, 35s, 45s);
- break;
- case EVENT_WILL_OF_HAKKAR:
- {
- // Mind Control is only triggered when there is more than one unit currently fighting Hakkar, including pets/guardians
- // But it is only actually cast on the player with the highest threat
- std::list<Unit*> unitList;
- SelectTargetList(unitList, 2, SelectTargetMethod::MaxThreat, 0, 0.0f, false);
- if (unitList.size() > 1)
- DoCast(SelectTarget(SelectTargetMethod::MaxThreat, 0, 100, true), SPELL_WILL_OF_HAKKAR);
- events.ScheduleEvent(EVENT_WILL_OF_HAKKAR, 25s, 35s);
- break;
- }
- case EVENT_ENRAGE:
- if (!me->HasAura(SPELL_ENRAGE))
- DoCast(me, SPELL_ENRAGE);
- events.ScheduleEvent(EVENT_ENRAGE, 90s);
- break;
- case EVENT_ASPECT_OF_JEKLIK:
- DoCastVictim(SPELL_ASPECT_OF_JEKLIK, true);
- events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, 10s, 14s);
- break;
- case EVENT_ASPECT_OF_VENOXIS:
- DoCastVictim(SPELL_ASPECT_OF_VENOXIS, true);
- events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 8s);
- break;
- case EVENT_ASPECT_OF_MARLI:
- DoCastVictim(SPELL_ASPECT_OF_MARLI, true);
- events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 10s);
- break;
- case EVENT_ASPECT_OF_THEKAL:
- DoCastVictim(SPELL_ASPECT_OF_THEKAL, true);
- events.ScheduleEvent(EVENT_ASPECT_OF_THEKAL, 15s);
- break;
- case EVENT_ASPECT_OF_ARLOKK:
- DoCastVictim(SPELL_ASPECT_OF_ARLOKK, true);
- events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, 10s, 15s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
+ // Mind Control is only triggered when there is more than one unit currently fighting Hakkar, including pets/guardians
+ // But it is only actually cast on the player with the highest threat
+ std::list<Unit*> unitList;
+ SelectTargetList(unitList, 2, SelectTargetMethod::MaxThreat, 0, 0.0f, false);
+ if (unitList.size() > 1)
+ DoCast(SelectTarget(SelectTargetMethod::MaxThreat, 0, 100, true), SPELL_WILL_OF_HAKKAR);
+ events.ScheduleEvent(EVENT_WILL_OF_HAKKAR, 25s, 35s);
+ break;
}
-
- DoMeleeAttackIfReady();
+ case EVENT_ENRAGE:
+ if (!me->HasAura(SPELL_ENRAGE))
+ DoCast(me, SPELL_ENRAGE);
+ events.ScheduleEvent(EVENT_ENRAGE, 90s);
+ break;
+ case EVENT_ASPECT_OF_JEKLIK:
+ DoCastVictim(SPELL_ASPECT_OF_JEKLIK, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_JEKLIK, 10s, 14s);
+ break;
+ case EVENT_ASPECT_OF_VENOXIS:
+ DoCastVictim(SPELL_ASPECT_OF_VENOXIS, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_VENOXIS, 8s);
+ break;
+ case EVENT_ASPECT_OF_MARLI:
+ DoCastVictim(SPELL_ASPECT_OF_MARLI, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_MARLI, 10s);
+ break;
+ case EVENT_ASPECT_OF_THEKAL:
+ DoCastVictim(SPELL_ASPECT_OF_THEKAL, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_THEKAL, 15s);
+ break;
+ case EVENT_ASPECT_OF_ARLOKK:
+ DoCastVictim(SPELL_ASPECT_OF_ARLOKK, true);
+ events.ScheduleEvent(EVENT_ASPECT_OF_ARLOKK, 10s, 15s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetZulGurubAI<boss_hakkarAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
class at_zulgurub_entrance : public OnlyOnceAreaTriggerScript
@@ -218,6 +207,6 @@ public:
void AddSC_boss_hakkar()
{
- new boss_hakkar();
+ RegisterZulGurubCreatureAI(boss_hakkar);
new at_zulgurub_entrance();
}
diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
index 81cd6e16c19..a1552bb734b 100644
--- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp
@@ -33,85 +33,74 @@ enum Events
EVENT_ILLUSIONS = 3
};
-class boss_hazzarah : public CreatureScript
+struct boss_hazzarah : public BossAI
{
- public:
- boss_hazzarah() : CreatureScript("boss_hazzarah") { }
+ boss_hazzarah(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { }
- struct boss_hazzarahAI : public BossAI
- {
- boss_hazzarahAI(Creature* creature) : BossAI(creature, DATA_EDGE_OF_MADNESS) { }
+ void Reset() override
+ {
+ _Reset();
+ }
- void Reset() override
- {
- _Reset();
- }
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ }
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- }
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ events.ScheduleEvent(EVENT_MANABURN, 4s, 10s);
+ events.ScheduleEvent(EVENT_SLEEP, 10s, 18s);
+ events.ScheduleEvent(EVENT_ILLUSIONS, 10s, 18s);
+ }
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- events.ScheduleEvent(EVENT_MANABURN, 4s, 10s);
- events.ScheduleEvent(EVENT_SLEEP, 10s, 18s);
- events.ScheduleEvent(EVENT_ILLUSIONS, 10s, 18s);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
+ events.Update(diff);
- events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_MANABURN:
+ DoCastVictim(SPELL_MANABURN, true);
+ events.ScheduleEvent(EVENT_MANABURN, 8s, 16s);
+ break;
+ case EVENT_SLEEP:
+ DoCastVictim(SPELL_SLEEP, true);
+ events.ScheduleEvent(EVENT_SLEEP, 12s, 20s);
+ break;
+ case EVENT_ILLUSIONS:
+ // We will summon 3 illusions that will spawn on a random gamer and attack this gamer
+ // We will just use one model for the beginning
+ for (uint8 i = 0; i < 3; ++i)
{
- case EVENT_MANABURN:
- DoCastVictim(SPELL_MANABURN, true);
- events.ScheduleEvent(EVENT_MANABURN, 8s, 16s);
- break;
- case EVENT_SLEEP:
- DoCastVictim(SPELL_SLEEP, true);
- events.ScheduleEvent(EVENT_SLEEP, 12s, 20s);
- break;
- case EVENT_ILLUSIONS:
- // We will summon 3 illusions that will spawn on a random gamer and attack this gamer
- // We will just use one model for the beginning
- for (uint8 i = 0; i < 3; ++i)
- {
- if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
- if (TempSummon* illusion = me->SummonCreature(NPC_NIGHTMARE_ILLUSION, target->GetPosition(), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30s))
- illusion->AI()->AttackStart(target);
- }
- events.ScheduleEvent(EVENT_ILLUSIONS, 15s, 25s);
- break;
- default:
- break;
+ if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.f, true))
+ if (TempSummon* illusion = me->SummonCreature(NPC_NIGHTMARE_ILLUSION, target->GetPosition(), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30s))
+ illusion->AI()->AttackStart(target);
}
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ events.ScheduleEvent(EVENT_ILLUSIONS, 15s, 25s);
+ break;
+ default:
+ break;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetZulGurubAI<boss_hazzarahAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
};
void AddSC_boss_hazzarah()
{
- new boss_hazzarah();
+ RegisterZulGurubCreatureAI(boss_hazzarah);
}