aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2025-09-13 19:01:46 +0300
committerGitHub <noreply@github.com>2025-09-13 18:01:46 +0200
commit5c6bf610663b620f3eeba41d05082401eb1b995d (patch)
treef7fa33ac327ee279f4f255d95f21c2570b4e68e5 /src
parent399d89a74869cde1a713ba499056660e5e4f930d (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp191
1 files changed, 107 insertions, 84 deletions
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
index 420cd49e760..9ed295ac442 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp
@@ -15,113 +15,129 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "ObjectMgr.h"
+/*
+ * Timers requires to be revisited
+ */
+
+#include "ScriptMgr.h"
#include "ruins_of_ahnqiraj.h"
#include "ScriptedCreature.h"
-#include "ScriptMgr.h"
+#include "SpellInfo.h"
#include "SpellScript.h"
-enum Yells
+enum RajaxxTexts
{
- // The time of our retribution is at hand! Let darkness reign in the hearts of our enemies! Sound: 8645 Emote: 35
- SAY_ANDOROV_INTRO = 0, // Before for the first wave
- SAY_ANDOROV_ATTACK = 1, // Beginning the event
-
- SAY_WAVE3 = 0,
- SAY_WAVE4 = 1,
- SAY_WAVE5 = 2,
- SAY_WAVE6 = 3,
- SAY_WAVE7 = 4,
+ // Intro
+ SAY_WAVE_3 = 0,
+ SAY_WAVE_4 = 1,
+ SAY_WAVE_5 = 2,
+ SAY_WAVE_6 = 3,
+ SAY_WAVE_7 = 4,
SAY_INTRO = 5,
- SAY_UNK1 = 6,
- SAY_UNK2 = 7,
- SAY_UNK3 = 8,
- SAY_DEATH = 9,
- SAY_CHANGEAGGRO = 10,
- SAY_KILLS_ANDOROV = 11,
- SAY_COMPLETE_QUEST = 12 // Yell when realm complete quest 8743 for world event
- // Warriors, Captains, continue the fight! Sound: 8640
+
+ // Combat
+ SAY_SLAY = 6,
+ SAY_DEATH = 7,
+ EMOTE_FRENZY = 8
};
-enum Spells
+enum RajaxxSpells
{
- SPELL_DISARM = 6713,
- SPELL_FRENZY = 8269,
- SPELL_THUNDERCRASH = 25599
+ SPELL_DISARM = 6713,
+ SPELL_THUNDERCRASH = 25599,
+ SPELL_FRENZY = 8269
};
-enum Events
+enum RajaxxEvents
{
- EVENT_DISARM = 1, // 03:58:27, 03:58:49
- EVENT_THUNDERCRASH = 2, // 03:58:29, 03:58:50
- EVENT_CHANGE_AGGRO = 3,
+ EVENT_DISARM = 1,
+ EVENT_THUNDERCRASH,
+ EVENT_FRENZY
};
-class boss_rajaxx : public CreatureScript
+// 15341 - General Rajaxx
+struct boss_rajaxx : public BossAI
{
- public:
- boss_rajaxx() : CreatureScript("boss_rajaxx") { }
+ boss_rajaxx(Creature* creature) : BossAI(creature, DATA_RAJAXX), _frenzied(false) { }
+
+ void Reset() override
+ {
+ _Reset();
+ _frenzied = false;
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
- struct boss_rajaxxAI : public BossAI
+ events.ScheduleEvent(EVENT_DISARM, 10s, 20s);
+ events.ScheduleEvent(EVENT_THUNDERCRASH, 10s, 15s);
+ }
+
+ void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
+ {
+ if (!_frenzied && me->HealthBelowPctDamaged(30, damage))
{
- boss_rajaxxAI(Creature* creature) : BossAI(creature, DATA_RAJAXX)
- {
- Initialize();
- }
+ _frenzied = true;
+ events.ScheduleEvent(EVENT_FRENZY, 0s);
+ }
+ }
- void Initialize()
- {
- enraged = false;
- }
+ void OnSpellCast(SpellInfo const* spell) override
+ {
+ if (spell->Id == SPELL_FRENZY)
+ Talk(EMOTE_FRENZY);
+ }
- void Reset() override
- {
- _Reset();
- Initialize();
- events.ScheduleEvent(EVENT_DISARM, 10s);
- events.ScheduleEvent(EVENT_THUNDERCRASH, 12s);
- }
+ 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;
- void UpdateAI(uint32 diff) override
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (!UpdateVictim())
- return;
-
- events.Update(diff);
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_DISARM:
- DoCastVictim(SPELL_DISARM);
- events.ScheduleEvent(EVENT_DISARM, 22s);
- break;
- case EVENT_THUNDERCRASH:
- DoCast(me, SPELL_THUNDERCRASH);
- events.ScheduleEvent(EVENT_THUNDERCRASH, 21s);
- break;
- default:
- break;
- }
-
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
+ case EVENT_DISARM:
+ DoCastVictim(SPELL_DISARM);
+ events.Repeat(20s, 30s);
+ break;
+ case EVENT_THUNDERCRASH:
+ DoCastSelf(SPELL_THUNDERCRASH);
+ events.Repeat(20s, 35s);
+ break;
+ case EVENT_FRENZY:
+ DoCastSelf(SPELL_FRENZY);
+ break;
+ default:
+ break;
}
- private:
- bool enraged;
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetAQ20AI<boss_rajaxxAI>(creature);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
}
+
+ DoMeleeAttackIfReady();
+ }
+
+private:
+ bool _frenzied;
};
// 25599 - Thundercrash
@@ -138,14 +154,21 @@ class spell_rajaxx_thundercrash : public SpellScript
SetEffectValue(damage);
}
+ void HandleAfterCast()
+ {
+ if (GetCaster()->CanHaveThreatList())
+ GetCaster()->GetThreatManager().ResetAllThreat();
+ }
+
void Register() override
{
OnEffectLaunchTarget += SpellEffectFn(spell_rajaxx_thundercrash::HandleDamageCalc, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ AfterCast += SpellCastFn(spell_rajaxx_thundercrash::HandleAfterCast);
}
};
void AddSC_boss_rajaxx()
{
- new boss_rajaxx();
+ RegisterAQ20CreatureAI(boss_rajaxx);
RegisterSpellScript(spell_rajaxx_thundercrash);
}