aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_kurinnaxx.cpp38
-rw-r--r--src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_moam.cpp132
-rw-r--r--src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/instance_ruins_of_ahnqiraj.cpp8
3 files changed, 116 insertions, 62 deletions
diff --git a/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_kurinnaxx.cpp b/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_kurinnaxx.cpp
index 834a6aeb515..722f02ec7f3 100644
--- a/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_kurinnaxx.cpp
+++ b/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_kurinnaxx.cpp
@@ -43,6 +43,9 @@ struct TRINITY_DLL_DECL boss_kurinnaxxAI : public ScriptedAI
uint32 uiMortalWoundTimer;
uint32 uiSandtrapTimer;
+ uint32 uiWideSlashTimer;
+ uint32 uiSummonPlayerTimer;
+ uint32 uiTrashTimer;
bool bIsEnraged;
ScriptedInstance* pInstance;
@@ -51,7 +54,10 @@ struct TRINITY_DLL_DECL boss_kurinnaxxAI : public ScriptedAI
{
bIsEnraged = false;
uiMortalWoundTimer = urand(2000,7000);
- uiSandtrapTimer = 30000;
+ uiSandtrapTimer = urand(20000,30000);
+ uiWideSlashTimer = urand(10000,15000);
+ uiTrashTimer = urand(20000,25000);
+ uiSummonPlayerTimer = urand(30000,40000);
if (pInstance)
pInstance->SetData(DATA_KURINNAXX_EVENT, NOT_STARTED);
@@ -81,20 +87,42 @@ struct TRINITY_DLL_DECL boss_kurinnaxxAI : public ScriptedAI
DoCast(m_creature,SPELL_ENRAGE);
}
- //uiMortalWoundTimer
+ //Mortal Wound spell
if (uiMortalWoundTimer < diff)
{
DoCast(m_creature->getVictim(),SPELL_MORTALWOUND);
uiMortalWoundTimer = urand(2000,7000);;
- }else uiMortalWoundTimer -= diff;
+ } else uiMortalWoundTimer -= diff;
- //uiSandtrapTimer
+ //Santrap spell
if (uiSandtrapTimer < diff)
{
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget,SPELL_SANDTRAP);
uiSandtrapTimer = 30000;
- }else uiSandtrapTimer -= diff;
+ } else uiSandtrapTimer -= diff;
+
+ //Wide Slash spell
+ if (uiWideSlashTimer < diff)
+ {
+ DoCast(m_creature->getVictim(),SPELL_WIDE_SLASH);
+ uiWideSlashTimer = urand(10000,15000);
+ } else uiWideSlashTimer -= diff;
+
+ //Trash spell
+ if (uiTrashTimer < diff)
+ {
+ DoCast(m_creature, SPELL_TRASH);
+ uiTrashTimer = urand(20000,25000);
+ } else uiTrashTimer -= diff;
+
+ //Summon Player spell
+ if (uiSummonPlayerTimer < diff)
+ {
+ if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
+ DoCast(pTarget,SPELL_SUMMON_PLAYER);
+ uiSummonPlayerTimer = urand(30000,40000);
+ } else uiSummonPlayerTimer -= diff;
DoMeleeAttackIfReady();
}
diff --git a/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_moam.cpp b/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_moam.cpp
index 9412439a7d8..b3cd4b934a6 100644
--- a/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_moam.cpp
+++ b/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_moam.cpp
@@ -16,8 +16,8 @@
/* ScriptData
SDName: Boss_Moam
-SD%Complete: 100
-SDComment: VERIFY SCRIPT AND SQL
+SD%Complete: 90
+SDComment: TODO: Adjust timer, correct Stone phase buff
SDCategory: Ruins of Ahn'Qiraj
EndScriptData */
@@ -33,10 +33,21 @@ enum Emotes
enum Spells
{
SPELL_TRAMPLE = 15550,
- SPELL_DRAINMANA = 27256,
+ SPELL_DRAINMANA = 27256, //Doesn't exist ?
SPELL_ARCANEERUPTION = 25672,
- SPELL_SUMMONMANA = 25681,
- SPELL_GRDRSLEEP = 24360 //Greater Dreamless Sleep
+ SPELL_SUMMONMANA = 25681, //Summon Mana fiend. It only summons one so exec it three times
+ SPELL_GRDRSLEEP = 24360 //Greater Dreamless Sleep
+};
+
+enum Creatures
+{
+ CREATURE_MANA_FIEND = 15527
+};
+
+enum CombatPhase
+{
+ NORMAL,
+ STONE
};
struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
@@ -45,23 +56,21 @@ struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
{
pInstance = c->GetInstanceData();
}
-
- Unit *pTarget;
- uint32 TRAMPLE_Timer;
- uint32 DRAINMANA_Timer;
- uint32 SUMMONMANA_Timer;
- uint32 i;
- uint32 j;
+
+ uint32 uiTrampleTimer;
+ uint32 uiDrainManaTimer;
+ uint32 uiPhaseTimer;
+ CombatPhase Phase;
ScriptedInstance *pInstance;
void Reset()
{
- i=0;
- j=0;
- pTarget = NULL;
- TRAMPLE_Timer = 30000;
- DRAINMANA_Timer = 30000;
+ uiTrampleTimer = urand(3000,7000);
+ uiDrainManaTimer = urand(3000,7000);
+ uiPhaseTimer = 90000;
+ Phase = NORMAL;
+ m_creature->SetPower(POWER_MANA,0);
if (pInstance)
pInstance->SetData(DATA_MOAM_EVENT, NOT_STARTED);
@@ -70,7 +79,6 @@ struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
void EnterCombat(Unit *who)
{
DoScriptText(EMOTE_AGGRO, m_creature);
- pTarget = who;
if (pInstance)
pInstance->SetData(DATA_MOAM_EVENT, IN_PROGRESS);
@@ -81,53 +89,63 @@ struct TRINITY_DLL_DECL boss_moamAI : public ScriptedAI
if (pInstance)
pInstance->SetData(DATA_MOAM_EVENT, DONE);
}
-
- void UpdateAI(const uint32 diff)
+
+ void DrainMana()
{
- if (!UpdateVictim())
- return;
-
- //If we are 100%MANA cast Arcane Erruption
- //if (j==1 && m_creature->GetMana()*100 / m_creature->GetMaxMana() == 100 && !m_creature->IsNonMeleeSpellCasted(false))
+ for (uint8 i=0;i<6;++i)
{
- DoCast(m_creature->getVictim(),SPELL_ARCANEERUPTION);
- DoScriptText(EMOTE_MANA_FULL, m_creature);
+ if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM,0,100,true))
+ {
+ pTarget->ModifyPower(POWER_MANA, -500);
+ m_creature->ModifyPower(POWER_MANA, 1000);
+ }
}
+ }
- //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))
+ void UpdateAI(const uint32 diff)
+ {
+ if (Phase == NORMAL)
{
- i=1;
- DoCast(m_creature->getVictim(),SPELL_SUMMONMANA);
- DoCast(m_creature->getVictim(),SPELL_GRDRSLEEP);
+ if (!UpdateVictim())
+ 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;
}
-
- //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)
{
return new boss_moamAI (pCreature);
diff --git a/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/instance_ruins_of_ahnqiraj.cpp b/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/instance_ruins_of_ahnqiraj.cpp
index 3e9c0197629..68ff1ff1ee2 100644
--- a/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/instance_ruins_of_ahnqiraj.cpp
+++ b/src/bindings/scripts/scripts/kalimdor/ruins_of_ahnqiraj/instance_ruins_of_ahnqiraj.cpp
@@ -59,6 +59,14 @@ struct TRINITY_DLL_DECL instance_ruins_of_ahn_qiraj : public ScriptedInstance
uiOssirian = 0;
}
+ bool IsEncounterInProgress() const
+ {
+ for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ if (m_auiEncounter[i] == IN_PROGRESS) return true;
+
+ return false;
+ }
+
void OnCreatureCreate(Creature* pCreature, bool add)
{
switch (pCreature->GetEntry())