Ruins of Ahn'Qiraj: Moam script
--HG-- branch : trunk
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user