1515 * with this program. If not, see <http://www.gnu.org/licenses/>.
1616 */
1717
18- #include " ObjectMgr.h"
18+ /*
19+ * Timers requires to be revisited
20+ */
21+
22+ #include " ScriptMgr.h"
1923#include " ruins_of_ahnqiraj.h"
2024#include " ScriptedCreature.h"
21- #include " ScriptMgr .h"
25+ #include " SpellInfo .h"
2226#include " SpellScript.h"
2327
24- enum Yells
28+ enum RajaxxTexts
2529{
26- // The time of our retribution is at hand! Let darkness reign in the hearts of our enemies! Sound: 8645 Emote: 35
27- SAY_ANDOROV_INTRO = 0 , // Before for the first wave
28- SAY_ANDOROV_ATTACK = 1 , // Beginning the event
29-
30- SAY_WAVE3 = 0 ,
31- SAY_WAVE4 = 1 ,
32- SAY_WAVE5 = 2 ,
33- SAY_WAVE6 = 3 ,
34- SAY_WAVE7 = 4 ,
30+ // Intro
31+ SAY_WAVE_3 = 0 ,
32+ SAY_WAVE_4 = 1 ,
33+ SAY_WAVE_5 = 2 ,
34+ SAY_WAVE_6 = 3 ,
35+ SAY_WAVE_7 = 4 ,
3536 SAY_INTRO = 5 ,
36- SAY_UNK1 = 6 ,
37- SAY_UNK2 = 7 ,
38- SAY_UNK3 = 8 ,
39- SAY_DEATH = 9 ,
40- SAY_CHANGEAGGRO = 10 ,
41- SAY_KILLS_ANDOROV = 11 ,
42- SAY_COMPLETE_QUEST = 12 // Yell when realm complete quest 8743 for world event
43- // Warriors, Captains, continue the fight! Sound: 8640
37+
38+ // Combat
39+ SAY_SLAY = 6 ,
40+ SAY_DEATH = 7 ,
41+ EMOTE_FRENZY = 8
4442};
4543
46- enum Spells
44+ enum RajaxxSpells
4745{
48- SPELL_DISARM = 6713 ,
49- SPELL_FRENZY = 8269 ,
50- SPELL_THUNDERCRASH = 25599
46+ SPELL_DISARM = 6713 ,
47+ SPELL_THUNDERCRASH = 25599 ,
48+ SPELL_FRENZY = 8269
5149};
5250
53- enum Events
51+ enum RajaxxEvents
5452{
55- EVENT_DISARM = 1 , // 03:58:27, 03:58:49
56- EVENT_THUNDERCRASH = 2 , // 03:58:29, 03:58:50
57- EVENT_CHANGE_AGGRO = 3 ,
53+ EVENT_DISARM = 1 ,
54+ EVENT_THUNDERCRASH,
55+ EVENT_FRENZY
5856};
5957
60- class boss_rajaxx : public CreatureScript
58+ // 15341 - General Rajaxx
59+ struct boss_rajaxx : public BossAI
6160{
62- public:
63- boss_rajaxx () : CreatureScript(" boss_rajaxx" ) { }
61+ boss_rajaxx (Creature* creature) : BossAI(creature, DATA_RAJAXX), _frenzied(false ) { }
62+
63+ void Reset () override
64+ {
65+ _Reset ();
66+ _frenzied = false ;
67+ }
68+
69+ void JustEngagedWith (Unit* who) override
70+ {
71+ BossAI::JustEngagedWith (who);
6472
65- struct boss_rajaxxAI : public BossAI
73+ events.ScheduleEvent (EVENT_DISARM, 10s, 20s);
74+ events.ScheduleEvent (EVENT_THUNDERCRASH, 10s, 15s);
75+ }
76+
77+ void DamageTaken (Unit* /* attacker*/ , uint32& damage, DamageEffectType /* damageType*/ , SpellInfo const * /* spellInfo = nullptr*/ ) override
78+ {
79+ if (!_frenzied && me->HealthBelowPctDamaged (30 , damage))
6680 {
67- boss_rajaxxAI (Creature* creature) : BossAI(creature, DATA_RAJAXX)
68- {
69- Initialize ();
70- }
81+ _frenzied = true ;
82+ events. ScheduleEvent (EVENT_FRENZY, 0s);
83+ }
84+ }
7185
72- void Initialize ()
73- {
74- enraged = false ;
75- }
86+ void OnSpellCast (SpellInfo const * spell) override
87+ {
88+ if (spell->Id == SPELL_FRENZY)
89+ Talk (EMOTE_FRENZY);
90+ }
7691
77- void Reset () override
78- {
79- _Reset ();
80- Initialize ();
81- events.ScheduleEvent (EVENT_DISARM, 10s);
82- events.ScheduleEvent (EVENT_THUNDERCRASH, 12s);
83- }
92+ void KilledUnit (Unit* /* victim*/ ) override
93+ {
94+ Talk (SAY_SLAY);
95+ }
96+
97+ void JustDied (Unit* /* killer*/ ) override
98+ {
99+ Talk (SAY_DEATH);
100+ _JustDied ();
101+ }
102+
103+ void UpdateAI (uint32 diff) override
104+ {
105+ if (!UpdateVictim ())
106+ return ;
84107
85- void UpdateAI (uint32 diff) override
108+ events.Update (diff);
109+
110+ if (me->HasUnitState (UNIT_STATE_CASTING))
111+ return ;
112+
113+ while (uint32 eventId = events.ExecuteEvent ())
114+ {
115+ switch (eventId)
86116 {
87- if (!UpdateVictim ())
88- return ;
89-
90- events.Update (diff);
91-
92- if (me->HasUnitState (UNIT_STATE_CASTING))
93- return ;
94-
95- while (uint32 eventId = events.ExecuteEvent ())
96- {
97- switch (eventId)
98- {
99- case EVENT_DISARM:
100- DoCastVictim (SPELL_DISARM);
101- events.ScheduleEvent (EVENT_DISARM, 22s);
102- break ;
103- case EVENT_THUNDERCRASH:
104- DoCast (me, SPELL_THUNDERCRASH);
105- events.ScheduleEvent (EVENT_THUNDERCRASH, 21s);
106- break ;
107- default :
108- break ;
109- }
110-
111- if (me->HasUnitState (UNIT_STATE_CASTING))
112- return ;
113- }
114-
115- DoMeleeAttackIfReady ();
117+ case EVENT_DISARM:
118+ DoCastVictim (SPELL_DISARM);
119+ events.Repeat (20s, 30s);
120+ break ;
121+ case EVENT_THUNDERCRASH:
122+ DoCastSelf (SPELL_THUNDERCRASH);
123+ events.Repeat (20s, 35s);
124+ break ;
125+ case EVENT_FRENZY:
126+ DoCastSelf (SPELL_FRENZY);
127+ break ;
128+ default :
129+ break ;
116130 }
117- private:
118- bool enraged;
119- };
120131
121- CreatureAI* GetAI (Creature* creature) const override
122- {
123- return GetAQ20AI<boss_rajaxxAI>(creature);
132+ if (me->HasUnitState (UNIT_STATE_CASTING))
133+ return ;
124134 }
135+
136+ DoMeleeAttackIfReady ();
137+ }
138+
139+ private:
140+ bool _frenzied;
125141};
126142
127143// 25599 - Thundercrash
@@ -138,14 +154,21 @@ class spell_rajaxx_thundercrash : public SpellScript
138154 SetEffectValue (damage);
139155 }
140156
157+ void HandleAfterCast ()
158+ {
159+ if (GetCaster ()->CanHaveThreatList ())
160+ GetCaster ()->GetThreatManager ().ResetAllThreat ();
161+ }
162+
141163 void Register () override
142164 {
143165 OnEffectLaunchTarget += SpellEffectFn (spell_rajaxx_thundercrash::HandleDamageCalc, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
166+ AfterCast += SpellCastFn (spell_rajaxx_thundercrash::HandleAfterCast);
144167 }
145168};
146169
147170void AddSC_boss_rajaxx ()
148171{
149- new boss_rajaxx ( );
172+ RegisterAQ20CreatureAI (boss_rajaxx );
150173 RegisterSpellScript (spell_rajaxx_thundercrash);
151174}
0 commit comments