diff options
Diffstat (limited to 'src')
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()) |