diff options
-rw-r--r-- | sql/updates/world/3.3.5/2025_09_13_00_world.sql | 6 | ||||
-rw-r--r-- | src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp | 191 |
2 files changed, 113 insertions, 84 deletions
diff --git a/sql/updates/world/3.3.5/2025_09_13_00_world.sql b/sql/updates/world/3.3.5/2025_09_13_00_world.sql new file mode 100644 index 00000000000..d4dc1722ab2 --- /dev/null +++ b/sql/updates/world/3.3.5/2025_09_13_00_world.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `creature_text` WHERE `CreatureID` = 15341 AND `GroupID` > 5; +INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES +(15341,6,0,"Breathe your last!",14,0,100,0,0,8604,11433,0,"rajaxx SAY_SLAY"), +(15341,7,0,"Warriors, Captains, continue the fight!",14,0,100,0,0,8613,11434,0,"rajaxx SAY_DEATH"), +(15341,8,0,"%s goes into a frenzy!",16,0,100,0,0,0,2384,0,"rajaxx EMOTE_FRENZY"); 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); } |