Scripts/Ahn'kahet: Herald Volazj texts (#26202)

Co-authored-by: Giacomo Pozzoni <giacomopoz@gmail.com>
(cherry picked from commit 1a624cad36)
This commit is contained in:
offl
2021-03-20 17:00:12 +02:00
committed by Shauren
parent 77d320b9fc
commit f87aa64a14
2 changed files with 149 additions and 24 deletions

View File

@@ -0,0 +1,29 @@
--
DELETE FROM `spell_script_names` WHERE `spell_id` IN (60291,60292,60293,60294,60295,60296,60297) AND `ScriptName` = "spell_volazj_whisper";
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(60291,"spell_volazj_whisper"),
(60292,"spell_volazj_whisper"),
(60293,"spell_volazj_whisper"),
(60294,"spell_volazj_whisper"),
(60295,"spell_volazj_whisper"),
(60296,"spell_volazj_whisper"),
(60297,"spell_volazj_whisper");
-- SLAY_ based on https://wow.gamepedia.com/Herald_Volazj and https://wow.gamepedia.com/Shath%27Yar no sniffs for obvious reasons
DELETE FROM `creature_text` WHERE `CreatureID` = 29311;
INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
/* 0 */ (29311,0,0,"Shgla'yos plahf mh'naus.",14,0,100,0,0,14043,32596,0,"Herald Volazj SAY_AGGRO"),
/* 0 */ (29311,1,0,"Gul'kafh an'shel. Yoq'al shn ky ywaq nuul.",14,0,100,0,0,14044,32603,0,"Herald Volazj SAY_INSANITY"),
/* 0 */ (29311,2,0,"Ywaq ma phgwa'cul hnakf.",14,0,100,0,0,14045,32598,0,"Herald Volazj SAY_SLAY_1"),
/* 0 */ (29311,3,0,"Uulwi gag erh'ongg w'ssh.",14,0,100,0,0,14046,32599,0,"Herald Volazj SAY_SLAY_2"),
/* 0 */ (29311,4,0,"Ywaq puul skshgn: on'ma yeh'glu zuq.",14,0,100,0,0,14047,32600,0,"Herald Volazj SAY_SLAY_3"),
/* 0 */ (29311,5,0,"Iilth vwah, uhn'agth fhssh za.",14,0,100,0,0,14048,32601,0,"Herald Volazj SAY_DEATH_1"),
/* 0 */ (29311,6,0,"Ywaq maq oou; ywaq maq ssaggh. Ywaq ma shg'fhn.",14,0,100,0,0,14049,32602,0,"Herald Volazj SAY_DEATH_2"),
/* 60291 */ (29311,7,0,"They who dine on lost souls know only hunger.",15,0,100,0,0,0,32597,0,"Herald Volazj WHISPER_AGGRO"),
/* 60292 */ (29311,8,0,"Gaze into the void. It is the perpetuity in which they dwell.",15,0,100,0,0,0,32604,0,"Herald Volazj WHISPER_INSANITY"),
/* 60293 */ (29311,9,0,"They are the whisper on the shivering wind.",15,0,100,0,0,0,32605,0,"Herald Volazj WHISPER_SLAY_1"),
/* 60294 */ (29311,10,0,"Their shadow will choke the land for eternity.",15,0,100,0,0,0,32606,0,"Herald Volazj WHISPER_SLAY_2"),
/* 60295 */ (29311,11,0,"They drink your fear: it is the blood of life.",15,0,100,0,0,0,32607,0,"Herald Volazj WHISPER_SLAY_3"),
/* 60296 */ (29311,12,0,"Where one falls, many shall take its place.",15,0,100,0,0,0,32608,0,"Herald Volazj WHISPER_DEATH_1"),
/* 60297 */ (29311,13,0,"They do not die; they do not live. They are outside the cycle.",15,0,100,0,0,0,32609,0,"Herald Volazj WHISPER_DEATH_2");

View File

@@ -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);
}