diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp | 144 |
1 files changed, 120 insertions, 24 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index 7c2d2479dba..9597d42f872 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -27,36 +27,56 @@ #include "PhasingHandler.h" #include "Player.h" #include "ScriptedCreature.h" +#include "SpellScript.h" #include "SpellInfo.h" #include "TemporarySummon.h" -enum Spells +enum VolazjTexts { - SPELL_INSANITY = 57496, //Dummy - INSANITY_VISUAL = 57561, - SPELL_INSANITY_TARGET = 57508, - SPELL_MIND_FLAY = 57941, - SPELL_SHADOW_BOLT_VOLLEY = 57942, - SPELL_SHIVER = 57949, - SPELL_CLONE_PLAYER = 57507, //cast on player during insanity - SPELL_INSANITY_PHASING_1 = 57508, - SPELL_INSANITY_PHASING_2 = 57509, - SPELL_INSANITY_PHASING_3 = 57510, - SPELL_INSANITY_PHASING_4 = 57511, - SPELL_INSANITY_PHASING_5 = 57512 + SAY_AGGRO = 0, + SAY_INSANITY = 1, + SAY_SLAY_1 = 2, + SAY_SLAY_2 = 3, + SAY_SLAY_3 = 4, + SAY_DEATH_1 = 5, + SAY_DEATH_2 = 6, + + WHISPER_AGGRO = 7, + WHISPER_INSANITY = 8, + WHISPER_SLAY_1 = 9, + WHISPER_SLAY_2 = 10, + WHISPER_SLAY_3 = 11, + WHISPER_DEATH_1 = 12, + WHISPER_DEATH_2 = 13 }; -enum Yells +enum VolazjSpells { - SAY_AGGRO = 0, - SAY_SLAY = 1, - SAY_DEATH = 2, - SAY_PHASE = 3 + SPELL_INSANITY = 57496, // Dummy + INSANITY_VISUAL = 57561, + SPELL_INSANITY_TARGET = 57508, + SPELL_MIND_FLAY = 57941, + SPELL_SHADOW_BOLT_VOLLEY = 57942, + SPELL_SHIVER = 57949, + SPELL_CLONE_PLAYER = 57507, // cast on player during insanity + SPELL_INSANITY_PHASING_1 = 57508, + SPELL_INSANITY_PHASING_2 = 57509, + SPELL_INSANITY_PHASING_3 = 57510, + SPELL_INSANITY_PHASING_4 = 57511, + SPELL_INSANITY_PHASING_5 = 57512, + + SPELL_WHISPER_AGGRO = 60291, + SPELL_WHISPER_INSANITY = 60292, + SPELL_WHISPER_SLAY_1 = 60293, + SPELL_WHISPER_SLAY_2 = 60294, + SPELL_WHISPER_SLAY_3 = 60295, + SPELL_WHISPER_DEATH_1 = 60296, + SPELL_WHISPER_DEATH_2 = 60297 }; -enum Achievements +enum VolazjAchievements { - ACHIEV_QUICK_DEMISE_START_EVENT = 20382, + ACHIEV_QUICK_DEMISE_START_EVENT = 20382, }; struct boss_volazj : public BossAI @@ -146,6 +166,8 @@ struct boss_volazj : public BossAI { // Channel visual DoCast(me, INSANITY_VISUAL, true); + Talk(SAY_INSANITY); + DoCastSelf(SPELL_WHISPER_INSANITY, true); // Unattackable me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(true, UNIT_STATE_STUNNED); @@ -187,6 +209,7 @@ struct boss_volazj : public BossAI { BossAI::JustEngagedWith(who); Talk(SAY_AGGRO); + DoCastSelf(SPELL_WHISPER_AGGRO); _instance->DoStartCriteriaTimer(CriteriaStartEvent::SendEvent, ACHIEV_QUICK_DEMISE_START_EVENT); } @@ -285,15 +308,41 @@ struct boss_volazj : public BossAI void JustDied(Unit* killer) override { BossAI::JustDied(killer); - - Talk(SAY_DEATH); ResetPlayersPhaseMask(); + + switch (urand(0, 1)) + { + case 0: + Talk(SAY_DEATH_1); + DoCastSelf(SPELL_WHISPER_DEATH_1, true); + break; + case 1: + Talk(SAY_DEATH_2); + DoCastSelf(SPELL_WHISPER_DEATH_2, true); + break; + } } void KilledUnit(Unit* who) override { - if (who->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); + if (who->GetTypeId() != TYPEID_PLAYER) + return; + + switch (urand(0, 2)) + { + case 0: + Talk(SAY_SLAY_1); + DoCastSelf(SPELL_WHISPER_SLAY_1); + break; + case 1: + Talk(SAY_SLAY_2); + DoCastSelf(SPELL_WHISPER_SLAY_2); + break; + case 2: + Talk(SAY_SLAY_3); + DoCastSelf(SPELL_WHISPER_SLAY_3); + break; + } } private: @@ -302,7 +351,54 @@ private: uint32 _insanityHandled; }; +class spell_volazj_whisper : public SpellScript +{ + PrepareSpellScript(spell_volazj_whisper); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo( + { + SPELL_WHISPER_AGGRO, + SPELL_WHISPER_INSANITY, + SPELL_WHISPER_SLAY_1, + SPELL_WHISPER_SLAY_2, + SPELL_WHISPER_SLAY_3, + SPELL_WHISPER_DEATH_1, + SPELL_WHISPER_DEATH_2 + }); + } + + void HandleScriptEffect(SpellEffIndex /* effIndex */) + { + Unit* target = GetHitPlayer(); + Creature* caster = GetCaster()->ToCreature(); + if (!target || !caster) + return; + + uint32 text = 0; + switch (GetSpellInfo()->Id) + { + case SPELL_WHISPER_AGGRO: text = WHISPER_AGGRO; break; + case SPELL_WHISPER_INSANITY: text = WHISPER_INSANITY; break; + case SPELL_WHISPER_SLAY_1: text = WHISPER_SLAY_1; break; + case SPELL_WHISPER_SLAY_2: text = WHISPER_SLAY_2; break; + case SPELL_WHISPER_SLAY_3: text = WHISPER_SLAY_3; break; + case SPELL_WHISPER_DEATH_1: text = WHISPER_DEATH_1; break; + case SPELL_WHISPER_DEATH_2: text = WHISPER_DEATH_2; break; + default: return; + } + caster->AI()->Talk(text, target); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_volazj_whisper::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_boss_volazj() { RegisterAhnKahetCreatureAI(boss_volazj); + RegisterSpellScript(spell_volazj_whisper); } |