Core/Scripts: Moorabi encounter updated. (#19013)

(cherrypicked from 21b5a377e4)
This commit is contained in:
Afgann
2017-02-10 01:07:29 +01:00
committed by Shauren
parent be87c0e8b8
commit afade22ffb
2 changed files with 133 additions and 59 deletions

View File

@@ -0,0 +1,7 @@
-- Phantom Mammoth
DELETE FROM `creature` WHERE `guid`=127005; -- shouldn't stand all the time
UPDATE `creature_template` SET `flags_extra` = `flags_extra`&0x2 WHERE `entry`=29748; -- set visible to players
-- Mojo Frenzy
DELETE FROM `spell_script_names` WHERE `ScriptName` = "spell_moorabi_mojo_frenzy";
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(55163, "spell_moorabi_mojo_frenzy");

View File

@@ -20,43 +20,51 @@
#include "ScriptedCreature.h"
#include "SpellInfo.h"
/// @todo: implement mojo frenzy
enum Spells
{
SPELL_DETERMINED_GORE = 55102,
SPELL_DETERMINED_STAB = 55104,
SPELL_GROUND_TREMOR = 55142,
SPELL_NUMBING_SHOUT = 55106,
SPELL_QUAKE = 55101,
SPELL_NUMBING_ROAR = 55100,
SPELL_MOJO_FRENZY = 55163,
SPELL_TRANSFORMATION = 55098, // Periodic, The caster transforms into a powerful mammoth, increasing Physical damage done by 25% and granting immunity to Stun effects.
SPELL_SUMMON_PHANTOM = 55205,
SPELL_SUMMON_PHANTOM_TRANSFORM = 55097,
SPELL_DETERMINED_GORE = 55102,
SPELL_DETERMINED_STAB = 55104,
SPELL_GROUND_TREMOR = 55142,
SPELL_NUMBING_SHOUT = 55106,
SPELL_QUAKE = 55101,
SPELL_NUMBING_ROAR = 55100,
SPELL_MOJO_FRENZY = 55163,
SPELL_MOJO_FRENZY_CAST_SPEED = 55096,
SPELL_TRANSFORMATION = 55098 // Periodic, The caster transforms into a powerful mammoth, increasing Physical damage done by 25% and granting immunity to Stun effects.
};
enum Says
{
SAY_AGGRO = 0,
SAY_SLAY = 1,
SAY_DEATH = 2,
SAY_TRANSFORM = 3,
SAY_QUAKE = 4,
EMOTE_BEGIN_TRANSFORM = 5,
EMOTE_TRANSFORMED = 6,
EMOTE_ACTIVATE_ALTAR = 7
SAY_AGGRO = 0,
SAY_SLAY = 1,
SAY_DEATH = 2,
SAY_TRANSFORM = 3,
SAY_QUAKE = 4,
EMOTE_BEGIN_TRANSFORM = 5,
EMOTE_TRANSFORMED = 6,
EMOTE_ACTIVATE_ALTAR = 7
};
enum Events
{
EVENT_GROUND_TREMOR = 1,
EVENT_GROUND_TREMOR = 1,
EVENT_NUMBLING_SHOUT,
EVENT_DETERMINED_STAB,
EVENT_TRANFORMATION
EVENT_TRANFORMATION,
EVENT_PHANTOM
};
enum Misc
{
DATA_LESS_RABI = 1
DATA_LESS_RABI = 1
};
enum Phases
{
PHASE_INTRO = 1,
PHASE_COMBAT
};
class boss_moorabi : public CreatureScript
@@ -78,22 +86,32 @@ class boss_moorabi : public CreatureScript
void Reset() override
{
Initialize();
_Reset();
Initialize();
events.SetPhase(PHASE_INTRO);
events.ScheduleEvent(EVENT_PHANTOM, Seconds(21), 0, PHASE_INTRO);
}
void EnterCombat(Unit* /*who*/) override
{
_EnterCombat();
Talk(SAY_AGGRO);
DoCast(me, SPELL_MOJO_FRENZY, true);
DoCastSelf(SPELL_MOJO_FRENZY, true);
events.ScheduleEvent(EVENT_GROUND_TREMOR, 18 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_DETERMINED_STAB, 20 * IN_MILLISECONDS);
events.ScheduleEvent(EVENT_TRANFORMATION, 12 * IN_MILLISECONDS);
events.SetPhase(PHASE_COMBAT);
events.ScheduleEvent(EVENT_GROUND_TREMOR, Seconds(18), 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_NUMBLING_SHOUT, Seconds(10), 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_DETERMINED_STAB, Seconds(20), 0, PHASE_COMBAT);
events.ScheduleEvent(EVENT_TRANFORMATION, Seconds(12), 0, PHASE_COMBAT);
}
void EnterEvadeMode(EvadeReason /*why*/) override
{
_DespawnAtEvade();
}
void JustSummoned(Creature* /*summon*/) override {}
uint32 GetData(uint32 type) const override
{
if (type == DATA_LESS_RABI)
@@ -125,41 +143,53 @@ class boss_moorabi : public CreatureScript
}
}
void ExecuteEvent(uint32 eventId) override
void UpdateAI(uint32 diff) override
{
switch (eventId)
if (!UpdateVictim() && !events.IsInPhase(PHASE_INTRO))
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
while (uint32 eventId = events.ExecuteEvent())
{
case EVENT_GROUND_TREMOR:
Talk(SAY_QUAKE);
if (_transformed)
DoCastAOE(SPELL_QUAKE);
else
DoCastAOE(SPELL_GROUND_TREMOR);
events.ScheduleEvent(eventId, 10 * IN_MILLISECONDS);
break;
case EVENT_NUMBLING_SHOUT:
if (_transformed)
DoCastAOE(SPELL_NUMBING_ROAR);
else
DoCastAOE(SPELL_NUMBING_SHOUT);
events.ScheduleEvent(eventId, 10 * IN_MILLISECONDS);
break;
case EVENT_DETERMINED_STAB:
if (_transformed)
DoCastVictim(SPELL_DETERMINED_GORE);
else
DoCastVictim(SPELL_DETERMINED_STAB);
events.ScheduleEvent(eventId, 8 * IN_MILLISECONDS);
break;
case EVENT_TRANFORMATION:
Talk(EMOTE_BEGIN_TRANSFORM);
Talk(SAY_TRANSFORM);
DoCast(me, SPELL_TRANSFORMATION);
events.ScheduleEvent(eventId, 10 * IN_MILLISECONDS);
break;
default:
break;
switch (eventId)
{
case EVENT_GROUND_TREMOR:
if (roll_chance_i(50))
Talk(SAY_QUAKE);
DoCastAOE(_transformed ? SPELL_QUAKE : SPELL_GROUND_TREMOR);
events.Repeat(Seconds(10));
break;
case EVENT_NUMBLING_SHOUT:
DoCastAOE(_transformed ? SPELL_NUMBING_ROAR : SPELL_NUMBING_SHOUT);
events.Repeat(Seconds(10));
break;
case EVENT_DETERMINED_STAB:
DoCastAOE(_transformed ? SPELL_DETERMINED_GORE : SPELL_DETERMINED_STAB);
events.Repeat(Seconds(8));
break;
case EVENT_TRANFORMATION:
Talk(EMOTE_BEGIN_TRANSFORM);
Talk(SAY_TRANSFORM);
DoCastSelf(SPELL_TRANSFORMATION);
DoCastSelf(SPELL_SUMMON_PHANTOM_TRANSFORM, true);
events.Repeat(Seconds(10));
break;
case EVENT_PHANTOM:
DoCastSelf(SPELL_SUMMON_PHANTOM, true);
events.Repeat(Seconds(20), Seconds(25));
break;
default:
break;
}
if(me->HasUnitState(UNIT_STATE_CASTING))
return;
}
DoMeleeAttackIfReady();
}
private:
@@ -190,8 +220,45 @@ class achievement_less_rabi : public AchievementCriteriaScript
}
};
// 55163 - Mojo Frenzy
class spell_moorabi_mojo_frenzy : public SpellScriptLoader
{
public:
spell_moorabi_mojo_frenzy() : SpellScriptLoader("spell_moorabi_mojo_frenzy") { }
class spell_moorabi_mojo_frenzy_AuraScript : public AuraScript
{
PrepareAuraScript(spell_moorabi_mojo_frenzy_AuraScript);
bool Validate(SpellInfo const* /*spell*/) override
{
return ValidateSpellInfo({ SPELL_MOJO_FRENZY_CAST_SPEED });
}
void HandlePeriodic(AuraEffect const* /*aurEff*/)
{
PreventDefaultAction();
Unit* owner = GetUnitOwner();
int32 castSpeedBonus = (100.0f - owner->GetHealthPct()) * 4; // between 0% and 400% cast speed bonus
owner->CastCustomSpell(SPELL_MOJO_FRENZY_CAST_SPEED, SPELLVALUE_BASE_POINT0, castSpeedBonus, owner, true);
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_moorabi_mojo_frenzy_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
AuraScript* GetAuraScript() const override
{
return new spell_moorabi_mojo_frenzy_AuraScript();
}
};
void AddSC_boss_moorabi()
{
new boss_moorabi();
new achievement_less_rabi();
new spell_moorabi_mojo_frenzy();
}