aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-04-26 10:17:05 +0300
committerGitHub <noreply@github.com>2021-04-26 09:17:05 +0200
commit0d9125d8e4a26caf727b54c519db9aeb1285f1e5 (patch)
tree3579368dd7d2ad961de39a2ddbcf8366c0def629 /src
parent2b6632e50a25882442b26a3a8b0c21261e1565dc (diff)
Scripts/Eye: Update Void Reaver to new model & few misc changes (#26470)
Co-authored-by: offl <offl@users.noreply.github.com>
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp214
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/the_eye.h2
2 files changed, 99 insertions, 117 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 74426a10c9c..91aba64264d 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_void_reaver.cpp
@@ -15,12 +15,12 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ScriptMgr.h"
+#include "the_eye.h"
#include "ObjectAccessor.h"
#include "ScriptedCreature.h"
-#include "the_eye.h"
+#include "ScriptMgr.h"
-enum Yells
+enum ReaverTexts
{
SAY_AGGRO = 0,
SAY_SLAY = 1,
@@ -28,7 +28,7 @@ enum Yells
SAY_POUNDING = 3
};
-enum Spells
+enum ReaverSpells
{
SPELL_POUNDING = 34162,
SPELL_ARCANE_ORB = 34172,
@@ -36,7 +36,7 @@ enum Spells
SPELL_BERSERK = 27680
};
-enum Events
+enum ReaverEvents
{
EVENT_POUNDING = 1,
EVENT_ARCANE_ORB,
@@ -44,131 +44,111 @@ enum Events
EVENT_BERSERK
};
-class boss_void_reaver : public CreatureScript
+struct boss_void_reaver : public BossAI
{
- public:
- boss_void_reaver() : CreatureScript("boss_void_reaver") { }
-
- struct boss_void_reaverAI : public BossAI
+ boss_void_reaver(Creature* creature) : BossAI(creature, DATA_VOID_REAVER), _enraged(false) { }
+
+ void Reset() override
+ {
+ _Reset();
+ _enraged = false;
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ Talk(SAY_AGGRO);
+ BossAI::JustEngagedWith(who);
+ me->CallForHelp(120.0f);
+
+ events.ScheduleEvent(EVENT_POUNDING, 15s);
+ events.ScheduleEvent(EVENT_ARCANE_ORB, 3s);
+ events.ScheduleEvent(EVENT_KNOCK_AWAY, 30s);
+ events.ScheduleEvent(EVENT_BERSERK, 10min);
+ }
+
+ void KilledUnit(Unit* /*victim*/) override
+ {
+ Talk(SAY_SLAY);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ Talk(SAY_DEATH);
+ _JustDied();
+ }
+
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
{
- boss_void_reaverAI(Creature* creature) : BossAI(creature, DATA_VOID_REAVER)
- {
- Initialize();
- }
-
- void Initialize()
- {
- Enraged = false;
- }
-
- void Reset() override
- {
- Initialize();
- _Reset();
- }
-
- void KilledUnit(Unit* /*victim*/) override
+ switch (eventId)
{
- Talk(SAY_SLAY);
- }
-
- void JustDied(Unit* /*killer*/) override
- {
- Talk(SAY_DEATH);
- DoZoneInCombat();
- _JustDied();
- }
-
- void JustEngagedWith(Unit* who) override
- {
- Talk(SAY_AGGRO);
- BossAI::JustEngagedWith(who);
- me->CallForHelp(120.0f);
-
- events.ScheduleEvent(EVENT_POUNDING, 15s);
- events.ScheduleEvent(EVENT_ARCANE_ORB, 3s);
- events.ScheduleEvent(EVENT_KNOCK_AWAY, 30s);
- events.ScheduleEvent(EVENT_BERSERK, 10min);
- }
-
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
+ case EVENT_POUNDING:
+ DoCastVictim(SPELL_POUNDING);
+ Talk(SAY_POUNDING);
+ events.ScheduleEvent(EVENT_POUNDING, 15s);
+ break;
+ case EVENT_ARCANE_ORB:
{
- switch (eventId)
+ std::vector<Unit*> target_list;
+ for (auto* ref : me->GetThreatManager().GetUnsortedThreatList())
{
- case EVENT_POUNDING:
- DoCastVictim(SPELL_POUNDING);
- Talk(SAY_POUNDING);
- events.ScheduleEvent(EVENT_POUNDING, 15s);
- break;
- case EVENT_ARCANE_ORB:
- {
- std::vector<Unit*> target_list;
- for (auto* ref : me->GetThreatManager().GetUnsortedThreatList())
- {
- Unit* target = ref->GetVictim();
- if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive() && !target->IsWithinDist(me, 18, false))
- target_list.push_back(target);
- }
-
- Unit* target;
- if (!target_list.empty())
- target = *(target_list.begin() + rand32() % target_list.size());
- else
- target = me->GetVictim();
-
- if (target)
- me->CastSpell(target, SPELL_ARCANE_ORB);
-
- events.ScheduleEvent(EVENT_ARCANE_ORB, 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);
- break;
- case EVENT_BERSERK:
- if (!Enraged)
- {
- DoCast(me, SPELL_BERSERK);
- Enraged = true;
- }
- break;
- default:
- break;
+ Unit* target = ref->GetVictim();
+ if (target->GetTypeId() == TYPEID_PLAYER && target->IsAlive() && !target->IsWithinDist(me, 18, false))
+ target_list.push_back(target);
}
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
+ Unit* target;
+ if (!target_list.empty())
+ target = *(target_list.begin() + rand32() % target_list.size());
+ else
+ target = me->GetVictim();
- DoMeleeAttackIfReady();
- }
+ if (target)
+ me->CastSpell(target, SPELL_ARCANE_ORB);
- private:
- bool Enraged;
- };
+ events.ScheduleEvent(EVENT_ARCANE_ORB, 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);
+ break;
+ case EVENT_BERSERK:
+ if (!_enraged)
+ {
+ DoCastSelf(SPELL_BERSERK);
+ _enraged = true;
+ }
+ break;
+ default:
+ break;
+ }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetTheEyeAI<boss_void_reaverAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
+
+private:
+ bool _enraged;
};
void AddSC_boss_void_reaver()
{
- new boss_void_reaver();
+ RegisterTheEyeCreatureAI(boss_void_reaver);
}
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h
index 3cc84c659a9..1c37673a85c 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h
+++ b/src/server/scripts/Outland/TempestKeep/Eye/the_eye.h
@@ -71,4 +71,6 @@ inline AI* GetTheEyeAI(T* obj)
return GetInstanceAI<AI>(obj, TheEyeScriptName);
}
+#define RegisterTheEyeCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetTheEyeAI)
+
#endif