diff options
author | _manuel_ <none@none> | 2009-12-27 22:28:28 -0300 |
---|---|---|
committer | _manuel_ <none@none> | 2009-12-27 22:28:28 -0300 |
commit | 5aa7a9531401cef85124ff6982f05cd497a9b992 (patch) | |
tree | 9bc2b3cff4b6d41db810981ebdd0000ccae77304 /src | |
parent | 942ea8433e30d404688c727d7526771a1106b92c (diff) |
Trial of the Champion: Rewrite of bosses Eadric and Paletress.
--HG--
branch : trunk
Diffstat (limited to 'src')
2 files changed, 207 insertions, 472 deletions
diff --git a/src/bindings/scripts/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_argent_challenge.cpp b/src/bindings/scripts/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_argent_challenge.cpp index 55639eb4eb7..3f02d42faea 100644 --- a/src/bindings/scripts/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_argent_challenge.cpp +++ b/src/bindings/scripts/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_argent_challenge.cpp @@ -1,4 +1,6 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> +/* + * Copyright (C) 2009 Trinity <http://www.trinitycore.org/> + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -6,156 +8,103 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ScriptData -SDName: boss_argent_challenge -SD%Complete: 92% -SDComment: missing yells. radiance is "wrong" -SDCategory: Trial Of the Champion +SDName: Argent Challenge Encounter. +SD%Complete: 90 % +SDComment: Texts are not implemented. +SDCategory: Trial of the Champion EndScriptData */ #include "precompiled.h" #include "trial_of_the_champion.h" -enum +enum eSpells { - //yells - //eadric - SPELL_VENGEANCE = 66889, - SPELL_RADIANCE = 66862, - SPELL_RADIANCE_H = 67681, - SPELL_HAMMER_OF_JUSTICE = 66940, - SPELL_HAMMER = 67680, - //paletress - SPELL_SMITE = 66536, - SPELL_SMITE_H = 67674, - SPELL_HOLY_FIRE = 66538, - SPELL_HOLY_FIRE_H = 67676, - SPELL_RENEW = 66537, - SPELL_RENEW_H = 67675, - SPELL_HOLY_NOVA = 66546, - SPELL_SHIELD = 66515, - SPELL_CONFESS = 66547, - //memory - SPELL_FEAR = 66552, - SPELL_FEAR_H = 67677, - SPELL_SHADOWS = 66619, - SPELL_SHADOWS_H = 67678, - SPELL_OLD_WOUNDS = 66620, - SPELL_OLD_WOUNDS_H = 67679, + //Eadric + SPELL_EADRIC_ACHIEVEMENT = 68197, + SPELL_HAMMER_JUSTICE = 66863, + SPELL_HAMMER_RIGHTEOUS = 66867, + SPELL_RADIANCE = 66935, + SPELL_VENGEANCE = 66865, + + //Paletress + SPELL_SMITE = 66536, + SPELL_SMITE_H = 67674, + SPELL_HOLY_FIRE = 66538, + SPELL_HOLY_FIRE_H = 67676, + SPELL_RENEW = 66537, + SPELL_RENEW_H = 67675, + SPELL_HOLY_NOVA = 66546, + SPELL_SHIELD = 66515, + SPELL_CONFESS = 66680, + + //Memory + SPELL_OLD_WOUNDS = 66620, + SPELL_OLD_WOUNDS_H = 67679, + SPELL_SHADOWS_PAST = 66619, + SPELL_SHADOWS_PAST_H = 67678, + SPELL_WAKING_NIGHTMARE = 66552, + SPELL_WAKING_NIGHTMARE_H = 67677 }; -// Eadric The Pure struct TRINITY_DLL_DECL boss_eadricAI : public ScriptedAI { - boss_eadricAI(Creature* pCreature) : ScriptedAI(pCreature) - { - Reset(); - m_pInstance = (ScriptedInstance*)pCreature->GetInstanceData(); - } - - ScriptedInstance* m_pInstance; - bool m_bIsRegularMode; + boss_eadricAI(Creature* pCreature) : ScriptedAI(pCreature) {} - uint32 Vengeance_Timer; - uint32 Radiance_Timer; - uint32 Hammer_Timer; - uint32 Hammer_Dmg_Timer; - - uint64 HammerTarget; + uint32 uiVenganceTimer; + uint32 uiRadianceTimer; + uint32 uiHammerJusticeTimer; void Reset() { - m_creature->SetRespawnDelay(999999999); - Vengeance_Timer = 1000; - Radiance_Timer = 15000; - Hammer_Timer = 40000; - Hammer_Dmg_Timer = 45000; - HammerTarget = 0; + uiVenganceTimer = 10000; + uiRadianceTimer = 16000; + uiHammerJusticeTimer = 25000; } - void EnterEvadeMode() + void UpdateAI(const uint32 uiDiff) { - Vengeance_Timer = 1000; - Radiance_Timer = 15000; - Hammer_Timer = 40000; - Hammer_Dmg_Timer = 45000; - HammerTarget = 0; - m_creature->RemoveArenaAuras(true); - m_creature->SendMonsterMove(746.864441, 660.918762, 411.695465, 4.698700, 3, 1); - m_creature->GetMap()->CreatureRelocation(m_creature, 754.360779, 660.816162, 412.395996, 4.698700); - m_creature->SetHealth(m_creature->GetMaxHealth()); - } + if (!UpdateVictim()) + return; - void Aggro(Unit* pWho) - { - if (!m_pInstance) - return; + if (uiHammerJusticeTimer <= uiDiff) + { + m_creature->InterruptNonMeleeSpells(true); - if (m_pInstance->GetData(TYPE_ARGENT_CHALLENGE) == DONE) - m_creature->ForcedDespawn(); - else - m_pInstance->SetData(TYPE_ARGENT_CHALLENGE, IN_PROGRESS); - } + if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 250, true)) + { + if (pTarget && pTarget->isAlive()) + { + DoCast(pTarget, SPELL_HAMMER_JUSTICE); + DoCast(pTarget, SPELL_HAMMER_RIGHTEOUS); + } + } + uiHammerJusticeTimer = 25000; + } else uiHammerJusticeTimer -= uiDiff; - void JustDied(Unit* pKiller) - { - if (!m_pInstance) - return; + if (uiVenganceTimer <= uiDiff) + { + DoCast(m_creature,SPELL_VENGEANCE); - m_pInstance->SetData(TYPE_ARGENT_CHALLENGE, DONE); - } + uiVenganceTimer = 10000; + } else uiVenganceTimer -= uiDiff; - void UpdateAI(const uint32 diff) - { - if (!m_creature->SelectVictim() || !m_creature->getVictim()) - return; - - if (Vengeance_Timer < diff) - { - DoCast(m_creature, SPELL_VENGEANCE); - Vengeance_Timer = 12000; - } - else - Vengeance_Timer -= diff; - - if (Radiance_Timer < diff) - { - DoCast(m_creature, m_bIsRegularMode ? SPELL_RADIANCE : SPELL_RADIANCE_H); - Radiance_Timer = 20000; - } - else - Radiance_Timer -= diff; - - if (Hammer_Timer < diff) - { - if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) - { - DoCast(target, SPELL_HAMMER_OF_JUSTICE); - HammerTarget = target->GetGUID(); - } - Hammer_Timer = 50000; - } - else - Hammer_Timer -= diff; + if (uiRadianceTimer <= uiDiff) + { + DoCastAOE(SPELL_RADIANCE); - if (Hammer_Dmg_Timer < diff) - { - if (Unit* pHammerTarget = Unit::GetUnit(*m_creature, HammerTarget)) - DoCast(pHammerTarget, SPELL_HAMMER); - Hammer_Dmg_Timer = 50000; - } - else - Hammer_Dmg_Timer -= diff; - - DoMeleeAttackIfReady(); + uiRadianceTimer = 16000; + } else uiRadianceTimer -= uiDiff; + + DoMeleeAttackIfReady(); } }; @@ -164,334 +113,116 @@ CreatureAI* GetAI_boss_eadric(Creature* pCreature) return new boss_eadricAI(pCreature); } -// Argent Confessor Paletress struct TRINITY_DLL_DECL boss_paletressAI : public ScriptedAI { boss_paletressAI(Creature* pCreature) : ScriptedAI(pCreature) { - Reset(); - m_pInstance = (ScriptedInstance*)pCreature->GetInstanceData(); + pMemory = NULL; } - ScriptedInstance* m_pInstance; - bool m_bIsRegularMode; + ScriptedInstance* pInstance; + + Creature* pMemory; + + bool bHealth; - uint32 Smite_Timer; - uint32 Holy_Fire_Timer; - uint32 Renew_Timer; - uint32 Shield_Delay; - uint32 Shield_Check; - - bool summoned; - bool shielded; + uint32 uiHolyFireTimer; + uint32 uiHolySmiteTimer; + uint32 uiRenewTimer; + + uint32 uiRandomSpell; void Reset() { - m_creature->SetRespawnDelay(999999999); - m_creature->RemoveAurasDueToSpell(SPELL_SHIELD); - Smite_Timer = 5000; - Holy_Fire_Timer = 10000; - Renew_Timer = 7000; - Shield_Delay = 0; - Shield_Check = 1000; - summoned = false; - shielded = false; - } + m_creature->RemoveAllAuras(); - void EnterEvadeMode() - { - m_creature->RemoveAurasDueToSpell(SPELL_SHIELD); - Smite_Timer = 2000; - Holy_Fire_Timer = 10000; - Renew_Timer = 7000; - Shield_Delay = 0; - Shield_Check = 1000; - summoned = false; - shielded = false; - m_creature->RemoveArenaAuras(true); - m_creature->SendMonsterMove(746.864441, 660.918762, 411.695465, 4.698700, m_creature->GetDefaultMovementType(), 1); - m_creature->GetMap()->CreatureRelocation(m_creature, 754.360779, 660.816162, 412.395996, 4.698700); - m_creature->SetHealth(m_creature->GetMaxHealth()); - } + uiHolyFireTimer = urand(9000,12000); + uiHolySmiteTimer = urand(5000,7000); + uiRenewTimer = urand(2000,5000); + uiRandomSpell = 0; - void Aggro(Unit* pWho) - { - if (!m_pInstance) - return; + bHealth = false; - m_pInstance->SetData(TYPE_ARGENT_CHALLENGE, IN_PROGRESS); + if (pMemory && pMemory->isAlive()) + pMemory->RemoveFromWorld(); } - void JustDied(Unit* pKiller) + void SetData(uint32 uiId, uint32 uiValue) { - if (!m_pInstance) - return; - - m_pInstance->SetData(TYPE_ARGENT_CHALLENGE, DONE); + if (uiId == 1) + m_creature->RemoveAura(SPELL_SHIELD); } - void UpdateAI(const uint32 diff) + void UpdateAI(const uint32 uiDiff) { - if (!m_creature->SelectVictim() || !m_creature->getVictim()) + if (!UpdateVictim()) return; - if (Smite_Timer < diff) - { - if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) - DoCast(target, m_bIsRegularMode ? SPELL_SMITE : SPELL_SMITE_H); - Smite_Timer = 2000; - } - else - Smite_Timer -= diff; - - if (Holy_Fire_Timer < diff) + if (uiHolyFireTimer <= uiDiff) { - m_creature->CastStop(m_bIsRegularMode ? SPELL_SMITE : SPELL_SMITE_H); - if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) - DoCast(target, m_bIsRegularMode ? SPELL_HOLY_FIRE : SPELL_HOLY_FIRE_H); - Holy_Fire_Timer = 10000; - } - else - Holy_Fire_Timer -= diff; - - if (Renew_Timer < diff) + if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 250, true)) + { + if (pTarget && pTarget->isAlive()) + DoCast(pTarget,HEROIC(SPELL_HOLY_FIRE_H,SPELL_HOLY_FIRE)); + } + if (m_creature->HasAura(SPELL_SHIELD)) + uiHolyFireTimer = 13000; + else + uiHolyFireTimer = urand(9000,12000); + } else uiHolyFireTimer -= uiDiff; + + if (uiHolySmiteTimer <= uiDiff) { - m_creature->CastStop(m_bIsRegularMode ? SPELL_SMITE : SPELL_SMITE_H); - m_creature->CastStop(m_bIsRegularMode ? SPELL_HOLY_FIRE : SPELL_HOLY_FIRE_H); - switch(urand(0, 1)) + if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 250, true)) + { + if (pTarget && pTarget->isAlive()) + DoCast(pTarget,HEROIC(SPELL_SMITE_H,SPELL_SMITE)); + } + if (m_creature->HasAura(SPELL_SHIELD)) + uiHolySmiteTimer = 9000; + else + uiHolySmiteTimer = urand(5000,7000); + } else uiHolySmiteTimer -= uiDiff; + + if (m_creature->HasAura(SPELL_SHIELD)) + if (uiRenewTimer <= uiDiff) { - case 0: + m_creature->InterruptNonMeleeSpells(true); + uint8 uiTarget = 0; + uiTarget = urand(0,1); + switch(uiTarget) { - if (Creature* pTemp = ((Creature*)Unit::GetUnit((*m_creature), m_pInstance->GetData64(DATA_MEMORY)))) - if (pTemp->isAlive()) - DoCast(pTemp, m_bIsRegularMode ? SPELL_RENEW : SPELL_RENEW_H); - else - DoCast(pTemp, m_bIsRegularMode ? SPELL_RENEW : SPELL_RENEW_H); + case 1: + DoCast(m_creature,HEROIC(SPELL_RENEW_H,SPELL_RENEW)); + break; + case 2: + if (pMemory && pMemory->isAlive()) + DoCast(pMemory,HEROIC(SPELL_RENEW_H,SPELL_RENEW)); + break; } - break; - case 1: - DoCast(m_creature, m_bIsRegularMode ? SPELL_RENEW : SPELL_RENEW_H); - break; - } - Renew_Timer = 15000; - } - else - Renew_Timer -= diff; - - if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 35 && !summoned) - { - m_creature->CastStop(m_bIsRegularMode ? SPELL_SMITE : SPELL_SMITE_H); - m_creature->CastStop(m_bIsRegularMode ? SPELL_HOLY_FIRE : SPELL_HOLY_FIRE_H); - DoCast(m_creature, SPELL_HOLY_NOVA); - switch(urand(0, 24)) - { - case 0: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_ALGALON, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 1: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_CHROMAGGUS, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 2: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_CYANIGOSA, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 3: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_DELRISSA, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 4: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_ECK, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 5: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_ENTROPIUS, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 6: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_GRUUL, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 7: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_HAKKAR, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 8: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_HEIGAN, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 9: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_HEROD, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 10: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_HOGGER, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 11: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_IGNIS, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 12: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_ILLIDAN, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 13: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_INGVAR, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 14: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_KALITHRESH, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 15: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_LUCIFRON, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 16: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_MALCHEZAAR, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 17: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_MUTANUS, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 18: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_ONYXIA, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 19: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_THUNDERAAN, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 20: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_VANCLEEF, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 21: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_VASHJ, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 22: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_VEKNILASH, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 23: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_VEZAX, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - case 24: - if (Creature* pTemp = m_creature->SummonCreature(MEMORY_ARCHIMONDE, 0.0f, 0.0f, 0.0f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - { - pTemp->AddThreat(m_creature->getVictim(),1000.0f); - pTemp->AI()->AttackStart(m_creature->getVictim()); - } - break; - } - summoned = true; - Shield_Delay = 1000; - } + uiRenewTimer = urand(15000,17000); + } else uiRenewTimer -= uiDiff; - if (Shield_Delay < diff && !shielded && summoned) - { - m_creature->CastStop(m_bIsRegularMode ? SPELL_SMITE : SPELL_SMITE_H); - m_creature->CastStop(m_bIsRegularMode ? SPELL_HOLY_FIRE : SPELL_HOLY_FIRE_H); - DoCast(m_creature, SPELL_SHIELD); - shielded = true; - Shield_Check = 1000; - } - else - Shield_Delay -= diff; - - if (!m_creature->FindNearestCreature(35052, 200, true) && !m_creature->FindNearestCreature(35041, 200, true) && !m_creature->FindNearestCreature(35033, 200, true) && - !m_creature->FindNearestCreature(35046, 200, true) && !m_creature->FindNearestCreature(35043, 200, true) && !m_creature->FindNearestCreature(35047, 200, true) && - !m_creature->FindNearestCreature(35044, 200, true) && !m_creature->FindNearestCreature(35039, 200, true) && !m_creature->FindNearestCreature(35034, 200, true) && - !m_creature->FindNearestCreature(35049, 200, true) && !m_creature->FindNearestCreature(34942, 200, true) && !m_creature->FindNearestCreature(35030, 200, true) && - !m_creature->FindNearestCreature(35050, 200, true) && !m_creature->FindNearestCreature(35042, 200, true) && !m_creature->FindNearestCreature(35045, 200, true) && - !m_creature->FindNearestCreature(35037, 200, true) && !m_creature->FindNearestCreature(35031, 200, true) && !m_creature->FindNearestCreature(35038, 200, true) && - !m_creature->FindNearestCreature(35029, 200, true) && !m_creature->FindNearestCreature(35048, 200, true) && !m_creature->FindNearestCreature(35032, 200, true) && - !m_creature->FindNearestCreature(35028, 200, true) && !m_creature->FindNearestCreature(35040, 200, true) && !m_creature->FindNearestCreature(35036, 200, true) && - !m_creature->FindNearestCreature(35051, 200, true) && shielded) + + if (!bHealth && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 25) { - m_creature->RemoveAurasDueToSpell(SPELL_SHIELD); - shielded = false; + m_creature->InterruptNonMeleeSpells(true); + uiRandomSpell = urand(1,26); + DoCastAOE(SPELL_HOLY_NOVA,false); + DoCast(m_creature, SPELL_SHIELD); + DoCastAOE(66545,false); + DoCastAOE(SPELL_CONFESS,false); + + bHealth = true; } - + DoMeleeAttackIfReady(); } + + void JustSummoned(Creature* pSummon) + { + pMemory = pSummon; + } }; CreatureAI* GetAI_boss_paletress(Creature* pCreature) @@ -499,67 +230,69 @@ CreatureAI* GetAI_boss_paletress(Creature* pCreature) return new boss_paletressAI(pCreature); } -// Summoned Memory -struct TRINITY_DLL_DECL mob_toc5_memoryAI : public ScriptedAI +struct TRINITY_DLL_DECL npc_memoryAI : public ScriptedAI { - mob_toc5_memoryAI(Creature* pCreature) : ScriptedAI(pCreature) - { - Reset(); - m_pInstance = (ScriptedInstance*)pCreature->GetInstanceData(); - } + npc_memoryAI(Creature* pCreature) : ScriptedAI(pCreature) {} - ScriptedInstance* m_pInstance; - bool m_bIsRegularMode; - - uint32 Old_Wounds_Timer; - uint32 Shadows_Timer; - uint32 Fear_Timer; + uint32 uiOldWoundsTimer; + uint32 uiShadowPastTimer; + uint32 uiWakingNightmare; void Reset() { - Old_Wounds_Timer = 5000; - Shadows_Timer = 8000; - Fear_Timer = 13000; + uiOldWoundsTimer = 12000; + uiShadowPastTimer = 5000; + uiWakingNightmare = 7000; } - void UpdateAI(const uint32 diff) + void UpdateAI(const uint32 uiDiff) { - if (!m_creature->SelectVictim() || !m_creature->getVictim()) + if (!UpdateVictim()) return; - if (Old_Wounds_Timer < diff) + if (uiOldWoundsTimer <= uiDiff) { - if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) - DoCast(target, m_bIsRegularMode ? SPELL_OLD_WOUNDS : SPELL_OLD_WOUNDS_H); - Old_Wounds_Timer = 10000; - } - else - Old_Wounds_Timer -= diff; - - if (Fear_Timer < diff) + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) + { + if (pTarget && pTarget->isAlive()) + DoCast(pTarget, HEROIC(SPELL_OLD_WOUNDS_H,SPELL_OLD_WOUNDS)); + } + uiOldWoundsTimer = 12000; + }else uiOldWoundsTimer -= uiDiff; + + if (uiWakingNightmare <= uiDiff) { - DoCast(m_creature, m_bIsRegularMode ? SPELL_FEAR : SPELL_FEAR_H); - Fear_Timer = 40000; - } - else - Fear_Timer -= diff; + DoCast(m_creature, HEROIC(SPELL_WAKING_NIGHTMARE_H,SPELL_WAKING_NIGHTMARE)); + uiWakingNightmare = 7000; + }else uiWakingNightmare -= uiDiff; - if (Shadows_Timer < diff) + if (uiShadowPastTimer <= uiDiff) { - if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,1)) - DoCast(target, m_bIsRegularMode ? SPELL_SHADOWS : SPELL_SHADOWS_H); - Shadows_Timer = 10000; - } - else - Shadows_Timer -= diff; - - DoMeleeAttackIfReady(); - } + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,1)) + { + if (pTarget && pTarget->isAlive()) + DoCast(pTarget,HEROIC(SPELL_SHADOWS_PAST_H,SPELL_SHADOWS_PAST)); + } + uiShadowPastTimer = 5000; + }else uiShadowPastTimer -= uiDiff; + + DoMeleeAttackIfReady(); + } + + void JustDied(Unit* pKiller) + { + if (m_creature->isSummon()) + if (Unit* pSummoner = CAST_SUM(m_creature)->GetSummoner()) + { + if (pSummoner && pSummoner->isAlive()) + CAST_CRE(pSummoner)->AI()->SetData(1,0); + } + } }; -CreatureAI* GetAI_mob_toc5_memory(Creature* pCreature) +CreatureAI* GetAI_npc_memory(Creature* pCreature) { - return new mob_toc5_memoryAI(pCreature); + return new npc_memoryAI(pCreature); } void AddSC_boss_argent_challenge() @@ -568,16 +301,16 @@ void AddSC_boss_argent_challenge() NewScript = new Script; NewScript->Name = "boss_eadric"; - NewScript->GetAI = &GetAI_boss_eadric; + NewScript->GetAI = &GetAI_boss_eadric; NewScript->RegisterSelf(); - NewScript = new Script; + NewScript = new Script; NewScript->Name = "boss_paletress"; - NewScript->GetAI = &GetAI_boss_paletress; + NewScript->GetAI = &GetAI_boss_paletress; NewScript->RegisterSelf(); - NewScript = new Script; - NewScript->Name = "mob_toc5_memory"; - NewScript->GetAI = &GetAI_mob_toc5_memory; + NewScript = new Script; + NewScript->Name = "npc_memory"; + NewScript->GetAI = &GetAI_npc_memory; NewScript->RegisterSelf(); } diff --git a/src/bindings/scripts/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_black_knight.cpp b/src/bindings/scripts/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_black_knight.cpp index 0bc13dbb816..832ef92b881 100644 --- a/src/bindings/scripts/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_black_knight.cpp +++ b/src/bindings/scripts/scripts/northrend/crusaders_coliseum/trial_of_the_champion/boss_black_knight.cpp @@ -1,17 +1,19 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/> -* This program is free software; you can redistribute it and/or modify +/* + * Copyright (C) 2009 Trinity <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* ScriptData |