Skip to content

Commit 5c6bf61

Browse files
authored
Scripts/AQ20: Update Rajaxx (#31204)
* New register model * Repeat events instead of scheduling them * More proper timers for spells * Added unique names for enums * Added comment for script name * Added missing emote * Added missing Frenzy spell * Cleanup texts (keep only actually used) * Use combat texts * Add ResetAllThreat component to Thundercrash spell script
1 parent 399d89a commit 5c6bf61

2 files changed

Lines changed: 113 additions & 84 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
--
2+
DELETE FROM `creature_text` WHERE `CreatureID` = 15341 AND `GroupID` > 5;
3+
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
4+
(15341,6,0,"Breathe your last!",14,0,100,0,0,8604,11433,0,"rajaxx SAY_SLAY"),
5+
(15341,7,0,"Warriors, Captains, continue the fight!",14,0,100,0,0,8613,11434,0,"rajaxx SAY_DEATH"),
6+
(15341,8,0,"%s goes into a frenzy!",16,0,100,0,0,0,2384,0,"rajaxx EMOTE_FRENZY");

src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp

Lines changed: 107 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -15,113 +15,129 @@
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

147170
void AddSC_boss_rajaxx()
148171
{
149-
new boss_rajaxx();
172+
RegisterAQ20CreatureAI(boss_rajaxx);
150173
RegisterSpellScript(spell_rajaxx_thundercrash);
151174
}

0 commit comments

Comments
 (0)