1515 * with this program. If not, see <http://www.gnu.org/licenses/>.
1616 */
1717
18- #include " the_eye.h"
19- #include " ObjectAccessor.h"
20- #include " ScriptedCreature.h"
2118#include " ScriptMgr.h"
19+ #include " Containers.h"
20+ #include " ScriptedCreature.h"
21+ #include " SpellInfo.h"
22+ #include " the_eye.h"
2223
2324enum ReaverTexts
2425{
@@ -33,7 +34,7 @@ enum ReaverSpells
3334 SPELL_POUNDING = 34162 ,
3435 SPELL_ARCANE_ORB = 34172 ,
3536 SPELL_KNOCK_AWAY = 25778 ,
36- SPELL_BERSERK = 27680
37+ SPELL_BERSERK = 26662
3738};
3839
3940enum ReaverEvents
@@ -44,28 +45,31 @@ enum ReaverEvents
4445 EVENT_BERSERK
4546};
4647
48+ // 19516 - Void Reaver
4749struct boss_void_reaver : public BossAI
4850{
49- boss_void_reaver (Creature* creature) : BossAI(creature, DATA_VOID_REAVER), _enraged(false ) { }
50-
51- void Reset () override
52- {
53- _Reset ();
54- _enraged = false ;
55- }
51+ boss_void_reaver (Creature* creature) : BossAI(creature, DATA_VOID_REAVER) { }
5652
5753 void JustEngagedWith (Unit* who) override
5854 {
59- Talk (SAY_AGGRO);
6055 BossAI::JustEngagedWith (who);
56+
57+ Talk (SAY_AGGRO);
58+
6159 me->CallForHelp (120 .0f );
6260
63- events.ScheduleEvent (EVENT_POUNDING, 15s);
61+ events.ScheduleEvent (EVENT_POUNDING, 8s, 15s);
6462 events.ScheduleEvent (EVENT_ARCANE_ORB, 3s);
65- events.ScheduleEvent (EVENT_KNOCK_AWAY, 30s );
63+ events.ScheduleEvent (EVENT_KNOCK_AWAY, 12s, 16s );
6664 events.ScheduleEvent (EVENT_BERSERK, 10min);
6765 }
6866
67+ void OnSpellCast (SpellInfo const * spell) override
68+ {
69+ if (spell->Id == SPELL_POUNDING)
70+ Talk (SAY_POUNDING);
71+ }
72+
6973 void KilledUnit (Unit* /* victim*/ ) override
7074 {
7175 Talk (SAY_SLAY);
@@ -92,14 +96,13 @@ struct boss_void_reaver : public BossAI
9296 switch (eventId)
9397 {
9498 case EVENT_POUNDING:
95- DoCastVictim (SPELL_POUNDING);
96- Talk (SAY_POUNDING);
97- events.ScheduleEvent (EVENT_POUNDING, 15s);
99+ DoCastSelf (SPELL_POUNDING);
100+ events.Repeat (12s, 14s);
98101 break ;
99102 case EVENT_ARCANE_ORB:
100103 {
101104 std::vector<Unit*> target_list;
102- for (auto * ref : me->GetThreatManager ().GetUnsortedThreatList ())
105+ for (ThreatReference const * ref : me->GetThreatManager ().GetUnsortedThreatList ())
103106 {
104107 Unit* target = ref->GetVictim ();
105108 if (target->GetTypeId () == TYPEID_PLAYER && target->IsAlive () && !target->IsWithinDist (me, 18 , false ))
@@ -108,30 +111,22 @@ struct boss_void_reaver : public BossAI
108111
109112 Unit* target;
110113 if (!target_list.empty ())
111- target = * (target_list. begin () + rand32 () % target_list. size () );
114+ target = Trinity::Containers::SelectRandomContainerElement (target_list);
112115 else
113116 target = me->GetVictim ();
114117
115118 if (target)
116- me-> CastSpell (target, SPELL_ARCANE_ORB);
119+ DoCast (target, SPELL_ARCANE_ORB);
117120
118- events.ScheduleEvent (EVENT_ARCANE_ORB, 3s);
121+ events.Repeat ( 3s);
119122 break ;
120123 }
121124 case EVENT_KNOCK_AWAY:
122125 DoCastVictim (SPELL_KNOCK_AWAY);
123- // Drop 25% aggro
124- if (GetThreat (me->GetVictim ()))
125- ModifyThreatByPercent (me->GetVictim (), -25 );
126-
127- events.ScheduleEvent (EVENT_KNOCK_AWAY, 30s);
126+ events.Repeat (20s, 22s);
128127 break ;
129128 case EVENT_BERSERK:
130- if (!_enraged)
131- {
132- DoCastSelf (SPELL_BERSERK);
133- _enraged = true ;
134- }
129+ DoCastSelf (SPELL_BERSERK);
135130 break ;
136131 default :
137132 break ;
@@ -143,9 +138,6 @@ struct boss_void_reaver : public BossAI
143138
144139 DoMeleeAttackIfReady ();
145140 }
146-
147- private:
148- bool _enraged;
149141};
150142
151143void AddSC_boss_void_reaver ()
0 commit comments