diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-07-14 22:24:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-14 22:24:06 +0300 |
commit | 5e240a4a50fa4c8075b7dcf8913f1723bdc682b1 (patch) | |
tree | 1078976da29126eede4d9fd874672ecad0b42d44 | |
parent | 572b480a2e030e55ac5d1c2ded1b72c5c7ade5cd (diff) |
Scripts/ZG: Update scripts to new register model (2/5) (#26692)
-rw-r--r-- | src/server/scripts/EasternKingdoms/ZulGurub/boss_hakkar.cpp | 201 | ||||
-rw-r--r-- | src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp | 117 |
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); } |