Gundrak: Improvements in Moorabi script. Better use of timers.

--HG--
branch : trunk
This commit is contained in:
maanuel
2009-12-20 03:12:08 -03:00
parent 18d5940f5c
commit 7a2fc5e43d
@@ -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,83 +78,67 @@ 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)
{ {
Map *pMap = m_creature->GetMap(); Map* pMap = m_creature->GetMap();
if (pMap && pMap->IsDungeon()) if (pMap && pMap->IsDungeon())
{ {
Map::PlayerList const &players = pMap->GetPlayers(); Map::PlayerList const &players = pMap->GetPlayers();
@@ -160,23 +151,24 @@ 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);
} }
}; };
CreatureAI *GetAI_boss_moorabi(Creature *pCreature) CreatureAI* GetAI_boss_moorabi(Creature *pCreature)
{ {
return new boss_moorabiAI(pCreature); return new boss_moorabiAI(pCreature);
} }
void AddSC_boss_moorabi() void AddSC_boss_moorabi()
{ {
Script *newscript; Script* newscript;
newscript = new Script; newscript = new Script;
newscript->Name = "boss_moorabi"; newscript->Name = "boss_moorabi";