Ruins of Ahn'Qiraj: Moam script

--HG--
branch : trunk
This commit is contained in:
tartalo
2009-10-20 21:40:12 +02:00
parent d9a4dfa6e9
commit fd6448dbc0
@@ -16,8 +16,8 @@
/* ScriptData /* ScriptData
SDName: Boss_Moam SDName: Boss_Moam
SD%Complete: 100 SD%Complete: 90
SDComment: VERIFY SCRIPT AND SQL SDComment: TODO: Adjust timer, correct Stone phase buff
SDCategory: Ruins of Ahn'Qiraj SDCategory: Ruins of Ahn'Qiraj
EndScriptData */ EndScriptData */
@@ -33,10 +33,21 @@ enum Emotes
enum Spells enum Spells
{ {
SPELL_TRAMPLE = 15550, SPELL_TRAMPLE = 15550,
SPELL_DRAINMANA = 27256, SPELL_DRAINMANA = 27256, //Doesn't exist ?
SPELL_ARCANEERUPTION = 25672, SPELL_ARCANEERUPTION = 25672,
SPELL_SUMMONMANA = 25681, SPELL_SUMMONMANA = 25681, //Summon Mana fiend. It only summons one so exec it three times
SPELL_GRDRSLEEP = 24360 //Greater Dreamless Sleep SPELL_GRDRSLEEP = 24360 //Greater Dreamless Sleep
};
enum Creatures
{
CREATURE_MANA_FIEND = 15527
};
enum CombatPhase
{
NORMAL,
STONE
}; };
struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
@@ -45,23 +56,21 @@ struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
{ {
pInstance = c->GetInstanceData(); pInstance = c->GetInstanceData();
} }
Unit *pTarget; uint32 uiTrampleTimer;
uint32 TRAMPLE_Timer; uint32 uiDrainManaTimer;
uint32 DRAINMANA_Timer; uint32 uiPhaseTimer;
uint32 SUMMONMANA_Timer; CombatPhase Phase;
uint32 i;
uint32 j;
ScriptedInstance *pInstance; ScriptedInstance *pInstance;
void Reset() void Reset()
{ {
i=0; uiTrampleTimer = urand(3000,7000);
j=0; uiDrainManaTimer = urand(3000,7000);
pTarget = NULL; uiPhaseTimer = 90000;
TRAMPLE_Timer = 30000; Phase = NORMAL;
DRAINMANA_Timer = 30000; m_creature->SetPower(POWER_MANA,0);
if (pInstance) if (pInstance)
pInstance->SetData(DATA_MOAM_EVENT, NOT_STARTED); pInstance->SetData(DATA_MOAM_EVENT, NOT_STARTED);
@@ -70,7 +79,6 @@ struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
void EnterCombat(Unit *who) void EnterCombat(Unit *who)
{ {
DoScriptText(EMOTE_AGGRO, m_creature); DoScriptText(EMOTE_AGGRO, m_creature);
pTarget = who;
if (pInstance) if (pInstance)
pInstance->SetData(DATA_MOAM_EVENT, IN_PROGRESS); pInstance->SetData(DATA_MOAM_EVENT, IN_PROGRESS);
@@ -81,53 +89,63 @@ struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
if (pInstance) if (pInstance)
pInstance->SetData(DATA_MOAM_EVENT, DONE); pInstance->SetData(DATA_MOAM_EVENT, DONE);
} }
void DrainMana()
{
for (uint8 i=0;i<6;++i)
{
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM,0,100,true))
{
pTarget->ModifyPower(POWER_MANA, -500);
m_creature->ModifyPower(POWER_MANA, 1000);
}
}
}
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
if (!UpdateVictim()) if (Phase == NORMAL)
return;
//If we are 100%MANA cast Arcane Erruption
//if (j==1 && m_creature->GetMana()*100 / m_creature->GetMaxMana() == 100 && !m_creature->IsNonMeleeSpellCasted(false))
{ {
DoCast(m_creature->getVictim(),SPELL_ARCANEERUPTION); if (!UpdateVictim())
DoScriptText(EMOTE_MANA_FULL, m_creature); return;
//If we are 100%MANA cast Arcane Erruption
if (m_creature->GetPower(POWER_MANA) == m_creature->GetMaxPower(POWER_MANA))
{
DoCast(m_creature->getVictim(),SPELL_ARCANEERUPTION);
DoScriptText(EMOTE_MANA_FULL, m_creature);
m_creature->SetPower(POWER_MANA,0);
}
//Trample Spell
if (uiTrampleTimer < diff)
{
DoCast(m_creature->getVictim(),SPELL_TRAMPLE);
uiTrampleTimer = urand(3000,7000);
} else uiTrampleTimer -= diff;
//Drain Mana
if (uiDrainManaTimer < diff)
{
DrainMana();
uiDrainManaTimer = urand(3000,7000);
} else uiDrainManaTimer -= diff;
DoMeleeAttackIfReady();
//After 90secs change phase
if (uiPhaseTimer < diff)
{
Phase = STONE;
DoCast(m_creature,SPELL_SUMMONMANA);
DoCast(m_creature,SPELL_SUMMONMANA);
DoCast(m_creature,SPELL_SUMMONMANA);
DoCast(m_creature,SPELL_GRDRSLEEP);
} else uiPhaseTimer -= diff;
} }
//If we are <50%HP cast MANA FIEND (Summon Mana) and Sleep
//if (i==0 && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50 && !m_creature->IsNonMeleeSpellCasted(false))
{
i=1;
DoCast(m_creature->getVictim(),SPELL_SUMMONMANA);
DoCast(m_creature->getVictim(),SPELL_GRDRSLEEP);
}
//SUMMONMANA_Timer
if (i==1 && SUMMONMANA_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SUMMONMANA);
SUMMONMANA_Timer = 90000;
}else SUMMONMANA_Timer -= diff;
//TRAMPLE_Timer
if (TRAMPLE_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_TRAMPLE);
j=1;
TRAMPLE_Timer = 30000;
}else TRAMPLE_Timer -= diff;
//DRAINMANA_Timer
if (DRAINMANA_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_DRAINMANA);
DRAINMANA_Timer = 30000;
}else DRAINMANA_Timer -= diff;
DoMeleeAttackIfReady();
} }
}; };
CreatureAI* GetAI_boss_moam(Creature* pCreature) CreatureAI* GetAI_boss_moam(Creature* pCreature)
{ {
return new boss_moamAI (pCreature); return new boss_moamAI (pCreature);