mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-19 00:48:56 +01:00
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 "gundrak.h"
|
||||
|
||||
//Spells
|
||||
enum eSpells
|
||||
{
|
||||
SPELL_DETERMINED_STAB = 55104,
|
||||
SPELL_GROUND_TREMOR = 55142,
|
||||
SPELL_NUMBING_SHOUT = 55106,
|
||||
|
||||
#define SPELL_DETERMINED_STAB 55104
|
||||
#define SPELL_GROUND_TREMOR 55142
|
||||
#define SPELL_NUMBING_SHOUT 55106
|
||||
SPELL_DETERMINED_GORE = 55102,
|
||||
SPELL_DETERMINED_GORE_1 = 59444,
|
||||
SPELL_QUAKE = 55101,
|
||||
SPELL_NUMBING_ROAR = 55100,
|
||||
|
||||
#define SPELL_DETERMINED_GORE 55102
|
||||
#define SPELL_DETERMINED_GORE_1 59444
|
||||
#define SPELL_QUAKE 55101
|
||||
#define 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.
|
||||
};
|
||||
|
||||
#define SPELL_MOJO_FRENZY 55163
|
||||
#define SPELL_TRANSFORMATION 55098 //Periodic, The caster transforms into a powerful mammoth, increasing Physical damage done by 25% and granting immunity to Stun effects.
|
||||
enum eArchivements
|
||||
{
|
||||
ACHIEVEMENT_LESS_RABI = 2040
|
||||
};
|
||||
|
||||
#define ACHIEVEMENT_LESS_RABI 2040
|
||||
|
||||
//Yell
|
||||
#define SAY_AGGRO -1604010
|
||||
//#define SAY_SLAY_1 -1604011 // not in db
|
||||
#define SAY_SLAY_2 -1604012
|
||||
#define SAY_SLAY_3 -1604013
|
||||
#define SAY_DEATH -1604014
|
||||
#define SAY_TRANSFORM -1604015
|
||||
#define SAY_QUAKE -1604016
|
||||
#define EMOTE_TRANSFORM -1604017
|
||||
enum eSays
|
||||
{
|
||||
SAY_AGGRO = -1604010,
|
||||
//SAY_SLAY_1 = -1604011, // not in db
|
||||
SAY_SLAY_2 = -1604012,
|
||||
SAY_SLAY_3 = -1604013,
|
||||
SAY_DEATH = -1604014,
|
||||
SAY_TRANSFORM = -1604015,
|
||||
SAY_QUAKE = -1604016,
|
||||
EMOTE_TRANSFORM = -1604017
|
||||
};
|
||||
|
||||
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;
|
||||
bool Phase;
|
||||
uint32 SPELL_QUAKE_TIMER;
|
||||
uint32 SPELL_NUMBING_SHOUT_TIMER;
|
||||
uint32 SPELL_GROUND_TREMOR_TIMER;
|
||||
uint32 SPELL_DETERMINED_STAB_TIMER;
|
||||
uint32 SPELL_TRANSFORMATION_TIMER;
|
||||
|
||||
bool bPhase;
|
||||
|
||||
uint32 uiNumblingShoutTimer;
|
||||
uint32 uiGroundTremorTimer;
|
||||
uint32 uiDeterminedStabTimer;
|
||||
uint32 uiTransformationTImer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
SPELL_GROUND_TREMOR_TIMER = 18000;
|
||||
SPELL_NUMBING_SHOUT_TIMER = 10000;
|
||||
SPELL_DETERMINED_STAB_TIMER = 20000;
|
||||
SPELL_TRANSFORMATION_TIMER = 12000;
|
||||
Phase = false;
|
||||
uiGroundTremorTimer = 18000;
|
||||
uiNumblingShoutTimer = 10000;
|
||||
uiDeterminedStabTimer = 20000;
|
||||
uiTransformationTImer = 12000;
|
||||
bPhase = false;
|
||||
|
||||
if (pInstance)
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MOORABI_EVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit *who)
|
||||
void EnterCombat(Unit* pWho)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
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);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
void UpdateAI(const uint32 uiDiff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if(Phase == false && m_creature->HasAura(SPELL_TRANSFORMATION))
|
||||
Phase = true;
|
||||
|
||||
if(Phase == true)
|
||||
if(!bPhase && m_creature->HasAura(SPELL_TRANSFORMATION))
|
||||
{
|
||||
bPhase = true;
|
||||
m_creature->RemoveAura(SPELL_MOJO_FRENZY);
|
||||
|
||||
if (SPELL_GROUND_TREMOR_TIMER <= diff)
|
||||
{
|
||||
DoScriptText(SAY_QUAKE, m_creature);
|
||||
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
|
||||
|
||||
if (uiGroundTremorTimer <= uiDiff)
|
||||
{
|
||||
//CAST TRANSFORMATION
|
||||
if (SPELL_TRANSFORMATION_TIMER <= diff)
|
||||
{
|
||||
DoScriptText(EMOTE_TRANSFORM, m_creature);
|
||||
DoScriptText(SAY_TRANSFORM, m_creature);
|
||||
DoCast(m_creature, SPELL_TRANSFORMATION, false);
|
||||
SPELL_TRANSFORMATION_TIMER = 10000;
|
||||
} else SPELL_TRANSFORMATION_TIMER -= diff;
|
||||
|
||||
//CAST GROUND TERMOR || QUAKE
|
||||
if (SPELL_GROUND_TREMOR_TIMER <= diff)
|
||||
{
|
||||
DoScriptText(SAY_QUAKE, m_creature);
|
||||
DoScriptText(SAY_QUAKE, m_creature);
|
||||
if (bPhase)
|
||||
DoCast(m_creature->getVictim(), SPELL_QUAKE, true);
|
||||
else
|
||||
DoCast(m_creature->getVictim(), SPELL_GROUND_TREMOR, true);
|
||||
SPELL_GROUND_TREMOR_TIMER = 10000;
|
||||
} else SPELL_GROUND_TREMOR_TIMER -= diff;
|
||||
uiGroundTremorTimer = 10000;
|
||||
} else uiGroundTremorTimer -= uiDiff;
|
||||
|
||||
//CAST NUMBING SHOUT || DETERMINED_STAB
|
||||
if (SPELL_NUMBING_SHOUT_TIMER <= diff)
|
||||
{
|
||||
if (uiNumblingShoutTimer <= uiDiff)
|
||||
{
|
||||
if (bPhase)
|
||||
DoCast(m_creature->getVictim(), SPELL_NUMBING_ROAR, true);
|
||||
else
|
||||
DoCast(m_creature->getVictim(), SPELL_NUMBING_SHOUT, true);
|
||||
SPELL_NUMBING_SHOUT_TIMER = 10000;
|
||||
} else SPELL_NUMBING_SHOUT_TIMER -= diff;
|
||||
uiNumblingShoutTimer = 10000;
|
||||
} else uiNumblingShoutTimer -=uiDiff;
|
||||
|
||||
if (SPELL_DETERMINED_STAB_TIMER <= diff)
|
||||
{
|
||||
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);
|
||||
SPELL_DETERMINED_STAB_TIMER = 8000;
|
||||
} else SPELL_DETERMINED_STAB_TIMER -= diff;
|
||||
}
|
||||
uiDeterminedStabTimer = 8000;
|
||||
} else uiDeterminedStabTimer -=uiDiff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
if (!bPhase && uiTransformationTImer <= uiDiff)
|
||||
{
|
||||
DoScriptText(EMOTE_TRANSFORM, m_creature);
|
||||
DoScriptText(SAY_TRANSFORM, m_creature);
|
||||
DoCast(m_creature, SPELL_TRANSFORMATION, false);
|
||||
uiTransformationTImer = 10000;
|
||||
} else uiTransformationTImer -= uiDiff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
void JustDied(Unit *killer)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if (HeroicMode && Phase == false)
|
||||
void JustDied(Unit* pKiller)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if (HeroicMode && !bPhase)
|
||||
{
|
||||
AchievementEntry const *AchievLessRabi = GetAchievementStore()->LookupEntry(ACHIEVEMENT_LESS_RABI);
|
||||
if (AchievLessRabi)
|
||||
{
|
||||
Map *pMap = m_creature->GetMap();
|
||||
Map* pMap = m_creature->GetMap();
|
||||
if (pMap && pMap->IsDungeon())
|
||||
{
|
||||
Map::PlayerList const &players = pMap->GetPlayers();
|
||||
@@ -160,23 +151,24 @@ struct TRINITY_DLL_DECL boss_moorabiAI : public ScriptedAI
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_MOORABI_EVENT, DONE);
|
||||
}
|
||||
void KilledUnit(Unit *victim)
|
||||
|
||||
void KilledUnit(Unit* pVictim)
|
||||
{
|
||||
if (victim == m_creature)
|
||||
if (pVictim == m_creature)
|
||||
return;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
void AddSC_boss_moorabi()
|
||||
{
|
||||
Script *newscript;
|
||||
Script* newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_moorabi";
|
||||
|
||||
Reference in New Issue
Block a user