Gundrak: Improvements in Moorabi script. Better use of timers.
--HG-- branch : trunk
This commit is contained in:
@@ -9,60 +9,67 @@ Script Data End */
|
|||||||
#include "precompiled.h"
|
#include "precompiled.h"
|
||||||
#include "gundrak.h"
|
#include "gundrak.h"
|
||||||
|
|
||||||
//Spells
|
enum eSpells
|
||||||
|
{
|
||||||
|
SPELL_DETERMINED_STAB = 55104,
|
||||||
|
SPELL_GROUND_TREMOR = 55142,
|
||||||
|
SPELL_NUMBING_SHOUT = 55106,
|
||||||
|
|
||||||
#define SPELL_DETERMINED_STAB 55104
|
SPELL_DETERMINED_GORE = 55102,
|
||||||
#define SPELL_GROUND_TREMOR 55142
|
SPELL_DETERMINED_GORE_1 = 59444,
|
||||||
#define SPELL_NUMBING_SHOUT 55106
|
SPELL_QUAKE = 55101,
|
||||||
|
SPELL_NUMBING_ROAR = 55100,
|
||||||
|
|
||||||
#define SPELL_DETERMINED_GORE 55102
|
SPELL_MOJO_FRENZY = 55163,
|
||||||
#define SPELL_DETERMINED_GORE_1 59444
|
SPELL_TRANSFORMATION = 55098, //Periodic, The caster transforms into a powerful mammoth, increasing Physical damage done by 25% and granting immunity to Stun effects.
|
||||||
#define SPELL_QUAKE 55101
|
};
|
||||||
#define SPELL_NUMBING_ROAR 55100
|
|
||||||
|
|
||||||
#define SPELL_MOJO_FRENZY 55163
|
enum eArchivements
|
||||||
#define SPELL_TRANSFORMATION 55098 //Periodic, The caster transforms into a powerful mammoth, increasing Physical damage done by 25% and granting immunity to Stun effects.
|
{
|
||||||
|
ACHIEVEMENT_LESS_RABI = 2040
|
||||||
|
};
|
||||||
|
|
||||||
#define ACHIEVEMENT_LESS_RABI 2040
|
enum eSays
|
||||||
|
{
|
||||||
//Yell
|
SAY_AGGRO = -1604010,
|
||||||
#define SAY_AGGRO -1604010
|
//SAY_SLAY_1 = -1604011, // not in db
|
||||||
//#define SAY_SLAY_1 -1604011 // not in db
|
SAY_SLAY_2 = -1604012,
|
||||||
#define SAY_SLAY_2 -1604012
|
SAY_SLAY_3 = -1604013,
|
||||||
#define SAY_SLAY_3 -1604013
|
SAY_DEATH = -1604014,
|
||||||
#define SAY_DEATH -1604014
|
SAY_TRANSFORM = -1604015,
|
||||||
#define SAY_TRANSFORM -1604015
|
SAY_QUAKE = -1604016,
|
||||||
#define SAY_QUAKE -1604016
|
EMOTE_TRANSFORM = -1604017
|
||||||
#define EMOTE_TRANSFORM -1604017
|
};
|
||||||
|
|
||||||
struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI
|
struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
boss_moorabiAI(Creature *c) : ScriptedAI(c)
|
boss_moorabiAI(Creature* pCreature) : ScriptedAI(pCreature)
|
||||||
{
|
{
|
||||||
pInstance = c->GetInstanceData();
|
pInstance = pCreature->GetInstanceData();
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptedInstance* pInstance;
|
ScriptedInstance* pInstance;
|
||||||
bool Phase;
|
|
||||||
uint32 SPELL_QUAKE_TIMER;
|
bool bPhase;
|
||||||
uint32 SPELL_NUMBING_SHOUT_TIMER;
|
|
||||||
uint32 SPELL_GROUND_TREMOR_TIMER;
|
uint32 uiNumblingShoutTimer;
|
||||||
uint32 SPELL_DETERMINED_STAB_TIMER;
|
uint32 uiGroundTremorTimer;
|
||||||
uint32 SPELL_TRANSFORMATION_TIMER;
|
uint32 uiDeterminedStabTimer;
|
||||||
|
uint32 uiTransformationTImer;
|
||||||
|
|
||||||
void Reset()
|
void Reset()
|
||||||
{
|
{
|
||||||
SPELL_GROUND_TREMOR_TIMER = 18000;
|
uiGroundTremorTimer = 18000;
|
||||||
SPELL_NUMBING_SHOUT_TIMER = 10000;
|
uiNumblingShoutTimer = 10000;
|
||||||
SPELL_DETERMINED_STAB_TIMER = 20000;
|
uiDeterminedStabTimer = 20000;
|
||||||
SPELL_TRANSFORMATION_TIMER = 12000;
|
uiTransformationTImer = 12000;
|
||||||
Phase = false;
|
bPhase = false;
|
||||||
|
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
pInstance->SetData(DATA_MOORABI_EVENT, NOT_STARTED);
|
pInstance->SetData(DATA_MOORABI_EVENT, NOT_STARTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnterCombat(Unit *who)
|
void EnterCombat(Unit* pWho)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_AGGRO, m_creature);
|
DoScriptText(SAY_AGGRO, m_creature);
|
||||||
DoCast(m_creature, SPELL_MOJO_FRENZY, true);
|
DoCast(m_creature, SPELL_MOJO_FRENZY, true);
|
||||||
@@ -71,78 +78,62 @@ struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI
|
|||||||
pInstance->SetData(DATA_MOORABI_EVENT, IN_PROGRESS);
|
pInstance->SetData(DATA_MOORABI_EVENT, IN_PROGRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 uiDiff)
|
||||||
{
|
{
|
||||||
//Return since we have no target
|
//Return since we have no target
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(Phase == false && m_creature->HasAura(SPELL_TRANSFORMATION))
|
if(!bPhase && m_creature->HasAura(SPELL_TRANSFORMATION))
|
||||||
Phase = true;
|
|
||||||
|
|
||||||
if(Phase == true)
|
|
||||||
{
|
{
|
||||||
|
bPhase = true;
|
||||||
m_creature->RemoveAura(SPELL_MOJO_FRENZY);
|
m_creature->RemoveAura(SPELL_MOJO_FRENZY);
|
||||||
|
}
|
||||||
|
|
||||||
if (SPELL_GROUND_TREMOR_TIMER <= diff)
|
if (uiGroundTremorTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_QUAKE, m_creature);
|
DoScriptText(SAY_QUAKE, m_creature);
|
||||||
|
if (bPhase)
|
||||||
DoCast(m_creature->getVictim(), SPELL_QUAKE, true);
|
DoCast(m_creature->getVictim(), SPELL_QUAKE, true);
|
||||||
SPELL_GROUND_TREMOR_TIMER = 10000;
|
|
||||||
} else SPELL_GROUND_TREMOR_TIMER -= diff;
|
|
||||||
|
|
||||||
if (SPELL_NUMBING_SHOUT_TIMER <= diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature->getVictim(), SPELL_NUMBING_ROAR, true);
|
|
||||||
SPELL_NUMBING_SHOUT_TIMER = 10000;
|
|
||||||
} else SPELL_NUMBING_SHOUT_TIMER -=diff;
|
|
||||||
|
|
||||||
if (SPELL_DETERMINED_STAB_TIMER <= diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature->getVictim(), HEROIC(SPELL_DETERMINED_GORE, SPELL_DETERMINED_GORE_1));
|
|
||||||
SPELL_DETERMINED_STAB_TIMER = 8000;
|
|
||||||
} else SPELL_DETERMINED_STAB_TIMER -=diff;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
|
DoCast(m_creature->getVictim(), SPELL_GROUND_TREMOR, true);
|
||||||
|
uiGroundTremorTimer = 10000;
|
||||||
|
} else uiGroundTremorTimer -= uiDiff;
|
||||||
|
|
||||||
|
if (uiNumblingShoutTimer <= uiDiff)
|
||||||
{
|
{
|
||||||
//CAST TRANSFORMATION
|
if (bPhase)
|
||||||
if (SPELL_TRANSFORMATION_TIMER <= diff)
|
DoCast(m_creature->getVictim(), SPELL_NUMBING_ROAR, true);
|
||||||
|
else
|
||||||
|
DoCast(m_creature->getVictim(), SPELL_NUMBING_SHOUT, true);
|
||||||
|
uiNumblingShoutTimer = 10000;
|
||||||
|
} else uiNumblingShoutTimer -=uiDiff;
|
||||||
|
|
||||||
|
if (uiDeterminedStabTimer <= uiDiff)
|
||||||
|
{
|
||||||
|
if (bPhase)
|
||||||
|
DoCast(m_creature->getVictim(), HEROIC(SPELL_DETERMINED_GORE, SPELL_DETERMINED_GORE_1));
|
||||||
|
else
|
||||||
|
DoCast(m_creature->getVictim(), SPELL_DETERMINED_STAB, true);
|
||||||
|
uiDeterminedStabTimer = 8000;
|
||||||
|
} else uiDeterminedStabTimer -=uiDiff;
|
||||||
|
|
||||||
|
if (!bPhase && uiTransformationTImer <= uiDiff)
|
||||||
{
|
{
|
||||||
DoScriptText(EMOTE_TRANSFORM, m_creature);
|
DoScriptText(EMOTE_TRANSFORM, m_creature);
|
||||||
DoScriptText(SAY_TRANSFORM, m_creature);
|
DoScriptText(SAY_TRANSFORM, m_creature);
|
||||||
DoCast(m_creature, SPELL_TRANSFORMATION, false);
|
DoCast(m_creature, SPELL_TRANSFORMATION, false);
|
||||||
SPELL_TRANSFORMATION_TIMER = 10000;
|
uiTransformationTImer = 10000;
|
||||||
} else SPELL_TRANSFORMATION_TIMER -= diff;
|
} else uiTransformationTImer -= uiDiff;
|
||||||
|
|
||||||
//CAST GROUND TERMOR || QUAKE
|
|
||||||
if (SPELL_GROUND_TREMOR_TIMER <= diff)
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_QUAKE, m_creature);
|
|
||||||
DoCast(m_creature->getVictim(), SPELL_GROUND_TREMOR, true);
|
|
||||||
SPELL_GROUND_TREMOR_TIMER = 10000;
|
|
||||||
} else SPELL_GROUND_TREMOR_TIMER -= diff;
|
|
||||||
|
|
||||||
//CAST NUMBING SHOUT || DETERMINED_STAB
|
|
||||||
if (SPELL_NUMBING_SHOUT_TIMER <= diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature->getVictim(), SPELL_NUMBING_SHOUT, true);
|
|
||||||
SPELL_NUMBING_SHOUT_TIMER = 10000;
|
|
||||||
} else SPELL_NUMBING_SHOUT_TIMER -= diff;
|
|
||||||
|
|
||||||
if (SPELL_DETERMINED_STAB_TIMER <= diff)
|
|
||||||
{
|
|
||||||
DoCast(m_creature->getVictim(), SPELL_DETERMINED_STAB, true);
|
|
||||||
SPELL_DETERMINED_STAB_TIMER = 8000;
|
|
||||||
} else SPELL_DETERMINED_STAB_TIMER -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
DoMeleeAttackIfReady();
|
||||||
}
|
}
|
||||||
void JustDied(Unit *killer)
|
|
||||||
|
void JustDied(Unit* pKiller)
|
||||||
{
|
{
|
||||||
DoScriptText(SAY_DEATH, m_creature);
|
DoScriptText(SAY_DEATH, m_creature);
|
||||||
|
|
||||||
if (HeroicMode && Phase == false)
|
if (HeroicMode && !bPhase)
|
||||||
{
|
{
|
||||||
AchievementEntry const *AchievLessRabi = GetAchievementStore()->LookupEntry(ACHIEVEMENT_LESS_RABI);
|
AchievementEntry const *AchievLessRabi = GetAchievementStore()->LookupEntry(ACHIEVEMENT_LESS_RABI);
|
||||||
if (AchievLessRabi)
|
if (AchievLessRabi)
|
||||||
@@ -160,9 +151,10 @@ struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI
|
|||||||
if (pInstance)
|
if (pInstance)
|
||||||
pInstance->SetData(DATA_MOORABI_EVENT, DONE);
|
pInstance->SetData(DATA_MOORABI_EVENT, DONE);
|
||||||
}
|
}
|
||||||
void KilledUnit(Unit *victim)
|
|
||||||
|
void KilledUnit(Unit* pVictim)
|
||||||
{
|
{
|
||||||
if (victim == m_creature)
|
if (pVictim == m_creature)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DoScriptText(RAND(SAY_SLAY_2,SAY_SLAY_3), m_creature);
|
DoScriptText(RAND(SAY_SLAY_2,SAY_SLAY_3), m_creature);
|
||||||
|
|||||||
Reference in New Issue
Block a user