diff options
| author | offl <11556157+offl@users.noreply.github.com> | 2025-12-20 22:09:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-20 21:09:40 +0100 |
| commit | ac4dc7bf8fe77790302a0697360bd62522013c64 (patch) | |
| tree | 7085e68f4b5c2298d972c38045367e15367ca695 | |
| parent | 37284e759f340b657f08c3e9593b0791caa1291a (diff) | |
Scripts/Tempest Keep: Update Void Reaver (#31429)
| -rw-r--r-- | src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp | 60 |
1 files changed, 26 insertions, 34 deletions
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp index 91aba64264d..bf0979e1400 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp @@ -15,10 +15,11 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "the_eye.h" -#include "ObjectAccessor.h" -#include "ScriptedCreature.h" #include "ScriptMgr.h" +#include "Containers.h" +#include "ScriptedCreature.h" +#include "SpellInfo.h" +#include "the_eye.h" enum ReaverTexts { @@ -33,7 +34,7 @@ enum ReaverSpells SPELL_POUNDING = 34162, SPELL_ARCANE_ORB = 34172, SPELL_KNOCK_AWAY = 25778, - SPELL_BERSERK = 27680 + SPELL_BERSERK = 26662 }; enum ReaverEvents @@ -44,28 +45,31 @@ enum ReaverEvents EVENT_BERSERK }; +// 19516 - Void Reaver struct boss_void_reaver : public BossAI { - boss_void_reaver(Creature* creature) : BossAI(creature, DATA_VOID_REAVER), _enraged(false) { } - - void Reset() override - { - _Reset(); - _enraged = false; - } + boss_void_reaver(Creature* creature) : BossAI(creature, DATA_VOID_REAVER) { } void JustEngagedWith(Unit* who) override { - Talk(SAY_AGGRO); BossAI::JustEngagedWith(who); + + Talk(SAY_AGGRO); + me->CallForHelp(120.0f); - events.ScheduleEvent(EVENT_POUNDING, 15s); + events.ScheduleEvent(EVENT_POUNDING, 8s, 15s); events.ScheduleEvent(EVENT_ARCANE_ORB, 3s); - events.ScheduleEvent(EVENT_KNOCK_AWAY, 30s); + events.ScheduleEvent(EVENT_KNOCK_AWAY, 12s, 16s); events.ScheduleEvent(EVENT_BERSERK, 10min); } + void OnSpellCast(SpellInfo const* spell) override + { + if (spell->Id == SPELL_POUNDING) + Talk(SAY_POUNDING); + } + void KilledUnit(Unit* /*victim*/) override { Talk(SAY_SLAY); @@ -92,14 +96,13 @@ struct boss_void_reaver : public BossAI switch (eventId) { case EVENT_POUNDING: - DoCastVictim(SPELL_POUNDING); - Talk(SAY_POUNDING); - events.ScheduleEvent(EVENT_POUNDING, 15s); + DoCastSelf(SPELL_POUNDING); + events.Repeat(12s, 14s); break; case EVENT_ARCANE_ORB: { std::vector<Unit*> target_list; - for (auto* ref : me->GetThreatManager().GetUnsortedThreatList()) + for (ThreatReference const* ref : me->GetThreatManager().GetUnsortedThreatList()) { Unit* target = ref->GetVictim(); if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive() && !target->IsWithinDist(me, 18, false)) @@ -108,30 +111,22 @@ struct boss_void_reaver : public BossAI Unit* target; if (!target_list.empty()) - target = *(target_list.begin() + rand32() % target_list.size()); + target = Trinity::Containers::SelectRandomContainerElement(target_list); else target = me->GetVictim(); if (target) - me->CastSpell(target, SPELL_ARCANE_ORB); + DoCast(target, SPELL_ARCANE_ORB); - events.ScheduleEvent(EVENT_ARCANE_ORB, 3s); + events.Repeat(3s); break; } case EVENT_KNOCK_AWAY: DoCastVictim(SPELL_KNOCK_AWAY); - // Drop 25% aggro - if (GetThreat(me->GetVictim())) - ModifyThreatByPercent(me->GetVictim(), -25); - - events.ScheduleEvent(EVENT_KNOCK_AWAY, 30s); + events.Repeat(20s, 22s); break; case EVENT_BERSERK: - if (!_enraged) - { - DoCastSelf(SPELL_BERSERK); - _enraged = true; - } + DoCastSelf(SPELL_BERSERK); break; default: break; @@ -143,9 +138,6 @@ struct boss_void_reaver : public BossAI DoMeleeAttackIfReady(); } - -private: - bool _enraged; }; void AddSC_boss_void_reaver() |
