rendered paste body/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>* 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* 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*//* ScriptDataSDName: Boss_moroesSD%Complete: 100SDComment:EndScriptData */#include "def_karazhan.h"#include "TargetedMovementGenerator.h"#include "IdleMovementGenerator.h"#define SAY_AGGRO "Hmm, unannounced visitors? Preparations must be made."#define SOUND_AGGRO 9211#define SAY_SPECIAL_1 "Now, where was I? Oh yes..."#define SOUND_SPECIAL_1 9215#define SAY_SPECIAL_2 "You rang?"#define SOUND_SPECIAL_2 9316#define SAY_KILL_1 "One more for dinner this evening"#define SOUND_KILL_1 9214#define SAY_KILL_2 "Time... Never enough time."#define SOUND_KILL_2 9314#define SAY_KILL_3 "I've gone and made a mess."#define SOUND_KILL_3 9315#define SAY_DEATH "How terribly clumsy of me..."#define SOUND_DEATH 9213#define SPELL_VANISH 24699#define SPELL_GARROTE 37066#define SPELL_BLIND 34654#define SPELL_GOUGE 28456#define SPELL_ENRAGE 37023#define ORIENT 4.5784#define POS_Z 81.73float Locations[4][2]={ {-10976.2793, -1878.1736}, {-10979.7587, -1877.8706}, {-10985.6650, -1877.2458}, {-10989.1367, -1876.8309},};uint32 Adds[6] = {19875, 19874, 19872, 17007, 19876, 19873};struct MANGOS_DLL_DECL boss_moroesAI : public ScriptedAI{ boss_moroesAI(Creature *c) : ScriptedAI(c) { FirstTime = true; pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); } ScriptedInstance *pInstance; uint32 Vanish_Timer; uint32 Blind_Timer; uint32 Gouge_Timer; uint32 Wait_Timer; uint32 CheckAdds_Timer; uint64 AddGuid[4]; uint32 AddType[4]; bool InVanish; bool Enrage; bool FirstTime; void Reset() { Vanish_Timer = 30000; Blind_Timer = 35000; Gouge_Timer = 23000; Wait_Timer = 0; CheckAdds_Timer = 5000; Enrage = false; InVanish = false; DeSpawnAdds(); SpawnAdds(); m_creature->setFaction(16); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); if (pInstance) pInstance->SetData(DATA_MOROES_EVENT, 0); } void StartEvent() { if (!pInstance) return; DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(m_creature, SOUND_AGGRO); if (pInstance) pInstance->SetData(DATA_MOROES_EVENT, 1); } void Aggro(Unit *who) { StartEvent(); DoYell(SAY_AGGRO, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(m_creature, SOUND_AGGRO); InCombat = true; AddsAttack(); } void KilledUnit(Unit *victim) { switch (rand()%3) { case 0: DoYell(SAY_KILL_1, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(victim, SOUND_KILL_1); break; case 1: DoYell(SAY_KILL_2, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(victim, SOUND_KILL_2); break; case 2: DoYell(SAY_KILL_3, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(victim, SOUND_KILL_3); break; } } void JustDied(Unit *victim) { DoYell(SAY_DEATH, LANG_UNIVERSAL, NULL); DoPlaySoundToSet(NULL, SOUND_DEATH); if (pInstance) pInstance->SetData(DATA_MOROES_EVENT, 0); DeSpawnAdds(); } bool isAddIsDeadOrDespawned(uint64 CreatureGuid) { if (CreatureGuid) { Unit *Temp; Temp = Unit::GetUnit((*m_creature),CreatureGuid); if (Temp && Temp->isAlive()) return false; } return true; } void SpawnAdds() { std::list<uint32> AddList; for(uint8 i = 0; i < 6; ++i) AddList.push_back(Adds[i]); uint32 entry = rand()%6; Unit *pCreature = NULL; if(FirstTime) { if(AddList.empty()) { // Debug DoTextEmote(": Add List is empty", NULL); EnterEvadeMode(); return; } for(uint8 i = 0; i < 4; ++i) { uint32 entry = *(AddList.begin()) + rand()%(AddList.size()); char debug[400]; sprintf(debug, "Selecting add entry %d", entry); DoTextEmote(debug, NULL); AddList.remove(entry); pCreature = m_creature->SummonCreature(Adds[entry], Locations[i][0], Locations[i][1], POS_Z, ORIENT, TEMPSUMMON_CORPSE_DESPAWN, 60000); if(pCreature) AddGuid[i] = pCreature->GetGUID(); } } /*if (FirstTime) { pCreature = m_creature->SummonCreature(Adds[i], SPAWN1_X, SPAWN1_Y, SPAWN1_Z, ORIENT, TEMPSUMMON_CORPSE_DESPAWN, 60000); if (pCreature) AddGuid[0] = pCreature->GetGUID(); AddType[0] = Adds[i]; i1 = i; while (i == i1) { i = rand()%6; } pCreature = m_creature->SummonCreature(Adds[i], SPAWN2_X, SPAWN2_Y, SPAWN2_Z, ORIENT, TEMPSUMMON_CORPSE_DESPAWN, 60000); if (pCreature) AddGuid[1] = pCreature->GetGUID(); AddType[1] = Adds[i]; i2 = i; while (i == i1 || i == i2) { i = rand()%6; } pCreature = m_creature->SummonCreature(Adds[i], SPAWN3_X, SPAWN3_Y, SPAWN3_Z, ORIENT, TEMPSUMMON_CORPSE_DESPAWN, 60000); if (pCreature) AddGuid[2] = pCreature->GetGUID(); AddType[2] = Adds[i]; i3 = i; while (i == i1 || i == i2 || i == i3) { i = rand()%6; } pCreature = m_creature->SummonCreature(Adds[i], SPAWN4_X, SPAWN4_Y, SPAWN4_Z, ORIENT, TEMPSUMMON_CORPSE_DESPAWN, 60000); if (pCreature) AddGuid[3] = pCreature->GetGUID(); AddType[3] = Adds[i]; FirstTime = false; }*/ else { for(uint8 i = 0; i < 4; ++i) { if(isAddIsDeadOrDespawned(AddGuid[i])) { pCreature = m_creature->SummonCreature(AddType[i], Locations[i][0], Locations[i][1], POS_Z, 0, TEMPSUMMON_CORPSE_DESPAWN, 60000); if(pCreature) AddGuid[i] = pCreature->GetGUID(); } } } } void DeSpawnAdds() { for(uint8 i = 0; i < 4 ; ++i) { Unit *Temp = NULL; if(AddGuid[i]) { Temp = Unit::GetUnit((*m_creature),AddGuid[i]); if(Temp && Temp->isAlive()) Temp->DealDamage(Temp, Temp->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false); } } } void AddsAttack() { if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() > 99) { for (uint8 i = 0; i < 4; ++i) { Unit *Temp = NULL; if (AddGuid[i]) { Temp = Unit::GetUnit((*m_creature),AddGuid[i]); if(Temp && Temp->isAlive()) ((Creature*)Temp)->AI()->AttackStart(m_creature->getVictim()); else EnterEvadeMode(); } } } } void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; if (pInstance && !pInstance->GetData(DATA_MOROES_EVENT)) EnterEvadeMode(); if (!Enrage && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30) { DoCast(m_creature, SPELL_ENRAGE); Enrage = true; } if (CheckAdds_Timer < diff) { for (uint8 i = 0; i < 4; ++i) { Unit *Temp = NULL; if (AddGuid[i]) { Temp = Unit::GetUnit((*m_creature),AddGuid[i]); if (Temp && Temp->isAlive()) if (!Temp->SelectHostilTarget() || !Temp->getVictim() ) ((Creature*)Temp)->AI()->AttackStart(m_creature->getVictim()); } } CheckAdds_Timer = 5000; }else CheckAdds_Timer -= diff; //Cast Vanish, then Garrote random victim if (Vanish_Timer < diff) { m_creature->setFaction(35); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); DoCast(m_creature, SPELL_VANISH); InVanish = true; Vanish_Timer = 30000; Wait_Timer = 5000; }else Vanish_Timer -= diff; if(InVanish) { if (Wait_Timer < diff) { Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0); if (target) target->CastSpell(target, SPELL_GARROTE,true); m_creature->setFaction(14); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->AI()->AttackStart(m_creature->getVictim()); InVanish = false; }else Wait_Timer -= diff; } //Blind highest aggro, and attack second highest if (Gouge_Timer < diff) { DoCast(m_creature->getVictim(), SPELL_GOUGE); Unit *target = SelectUnit(SELECT_TARGET_TOPAGGRO, 0); if (target) m_creature->getThreatManager().modifyThreatPercent(target,-99); Gouge_Timer = 40000; }else Gouge_Timer -= diff; if (Blind_Timer < diff) { Unit *target; std::list<HostilReference *> t_list = m_creature->getThreatManager().getThreatList(); std::vector<Unit *> target_list; for (std::list<HostilReference *>::iterator itr = t_list.begin(); itr!= t_list.end(); ++itr) { target = Unit::GetUnit(*m_creature, (*itr)->getUnitGuid()); if (target && target->GetDistance2dSq(m_creature) < 25) target_list.push_back(target); target = NULL; } if (target_list.size()) target = *(target_list.begin()+rand()%target_list.size()); DoCast(target, SPELL_BLIND); Blind_Timer = 40000; }else Blind_Timer -= diff; if (!InVanish) DoMeleeAttackIfReady(); }};#define SPELL_MANABURN 29405#define SPELL_MINDFLY 29570#define SPELL_SWPAIN 34441#define SPELL_SHADOWFORM 29406struct MANGOS_DLL_DECL boss_baroness_dorothea_millstipeAI : public ScriptedAI{ //Shadow Priest boss_baroness_dorothea_millstipeAI(Creature *c) : ScriptedAI(c) { pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); } ScriptedInstance *pInstance; uint32 ManaBurn_Timer; uint32 MindFlay_Timer; uint32 ShadowWordPain_Timer; bool InCombat; void Reset() { ManaBurn_Timer = 7000; MindFlay_Timer = 1000; ShadowWordPain_Timer = 6000; InCombat = false; if (pInstance) pInstance->SetData(DATA_MOROES_EVENT, 0); DoCast(m_creature,SPELL_SHADOWFORM); // It can be added in creature_addon table } void Aggro(Unit *who) { } void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; if (pInstance && !pInstance->GetData(DATA_MOROES_EVENT)) EnterEvadeMode(); if (MindFlay_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_MINDFLY); MindFlay_Timer = 12000; //3sec channeled }else MindFlay_Timer -= diff; if (ManaBurn_Timer < diff) { Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0); if (target && (target->getPowerType() == POWER_MANA)) DoCast(target,SPELL_MANABURN); ManaBurn_Timer = 5000; //3 sec cast }else ManaBurn_Timer -= diff; if (ShadowWordPain_Timer < diff) { Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0); if (target) DoCast(target,SPELL_SWPAIN); ShadowWordPain_Timer = 7000; }else ShadowWordPain_Timer -= diff; DoMeleeAttackIfReady(); }};#define SPELL_HAMMEROFJUSTICE 13005#define SPELL_JUDGEMENTOFCOMMAND 29386#define SPELL_SEALOFCOMMAND 29385struct MANGOS_DLL_DECL boss_baron_rafe_dreugerAI : public ScriptedAI{ //Retr Pally boss_baron_rafe_dreugerAI(Creature *c) : ScriptedAI(c) { pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); } ScriptedInstance *pInstance; uint32 HammerOfJustice_Timer; uint32 SealOfCommand_Timer; uint32 JudgementOfCommand_Timer; bool InCombat; void Reset() { HammerOfJustice_Timer = 1000; SealOfCommand_Timer = 7000; JudgementOfCommand_Timer = SealOfCommand_Timer + 29000;; if (pInstance) pInstance->SetData(DATA_MOROES_EVENT, 0); } void Aggro(Unit *who) { } void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; if (pInstance && !pInstance->GetData(DATA_MOROES_EVENT)) EnterEvadeMode(); if (SealOfCommand_Timer < diff) { DoCast(m_creature,SPELL_SEALOFCOMMAND); SealOfCommand_Timer = 32000; JudgementOfCommand_Timer = 29000; }else SealOfCommand_Timer -= diff; if (JudgementOfCommand_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_JUDGEMENTOFCOMMAND); JudgementOfCommand_Timer = SealOfCommand_Timer + 29000; }else JudgementOfCommand_Timer -= diff; if (HammerOfJustice_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_HAMMEROFJUSTICE); HammerOfJustice_Timer = 12000; }else HammerOfJustice_Timer -= diff; DoMeleeAttackIfReady(); }};#define SPELL_DISPELMAGIC 15090 //Self or other guest+Moroes#define SPELL_GREATERHEAL 29564 //Self or other guest+Moroes#define SPELL_HOLYFIRE 29563#define SPELL_PWSHIELD 29408struct MANGOS_DLL_DECL boss_lady_catriona_von_indiAI : public ScriptedAI{ //Holy Priest boss_lady_catriona_von_indiAI(Creature *c) : ScriptedAI(c) { for (uint8 i = 0; i < 5; ++i) AllGuestGuid[i] = 0; pInstance = (ScriptedInstance*)c->GetInstanceData(); Reset(); } ScriptedInstance *pInstance; uint64 AllGuestGuid[5]; uint32 DispelMagic_Timer; uint32 GreaterHeal_Timer; uint32 HolyFire_Timer; uint32 PowerWordShield_Timer; void Reset() { DispelMagic_Timer = 11000; GreaterHeal_Timer = 1500; HolyFire_Timer = 5000; PowerWordShield_Timer = 1000; FillAllGuestGuid(); if (pInstance) pInstance->SetData(DATA_MOROES_EVENT, 0); } void Aggro(Unit *who) { } void FillAllGuestGuid() { if (pInstance) { AllGuestGuid[0] = pInstance->GetData64(DATA_MOROES); Creature *pMoroes = (Creature *)Unit::GetUnit((*m_creature), AllGuestGuid[0]); if (pMoroes) for (uint8 i = 0; i < 5; ++i) AllGuestGuid[i] = ((boss_moroesAI*)pMoroes->AI())->AddGuid[i]; } } void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; if (pInstance && !pInstance->GetData(DATA_MOROES_EVENT)) EnterEvadeMode(); if (PowerWordShield_Timer < diff) { DoCast(m_creature,SPELL_PWSHIELD); PowerWordShield_Timer = 15000; }else PowerWordShield_Timer -= diff; if (GreaterHeal_Timer < diff) { Unit *Temp = NULL; uint64 TempGuid = AllGuestGuid[rand()%6]; if (TempGuid && TempGuid != m_creature->GetGUID()) { Temp = Unit::GetUnit((*m_creature),TempGuid); if (Temp && Temp->isAlive()) DoCast(Temp,SPELL_GREATERHEAL); else DoCast(m_creature,SPELL_GREATERHEAL); } else DoCast(m_creature,SPELL_GREATERHEAL); GreaterHeal_Timer = 17000; }else GreaterHeal_Timer -= diff; if (HolyFire_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_HOLYFIRE); HolyFire_Timer = 22000; }else HolyFire_Timer -= diff; if (DispelMagic_Timer < diff) { Unit *Temp; uint64 TempGuid = AllGuestGuid[rand()%6]; if (rand()%2) { if (TempGuid && TempGuid != m_creature->GetGUID()) { Temp = Unit::GetUnit((*m_creature),TempGuid); if (Temp && Temp->isAlive() && m_creature->IsWithinLOSInMap(Temp)) DoCast(Temp,SPELL_DISPELMAGIC); else DoCast(m_creature,SPELL_DISPELMAGIC); } else DoCast(m_creature,SPELL_DISPELMAGIC); } else { Temp = SelectUnit(SELECT_TARGET_RANDOM, 0); if (Temp) DoCast(Temp,SPELL_DISPELMAGIC); } DispelMagic_Timer = 25000; }else DispelMagic_Timer -= diff; DoMeleeAttackIfReady(); }};#define SPELL_CLEANSE 29380 //Self or other guest+Moroes#define SPELL_GREATERBLESSOFMIGHT 29381 //Self or other guest+Moroes#define SPELL_HOLYLIGHT 29562 //Self or other guest+Moroes#define SPELL_DIVINESHIELD 41367struct MANGOS_DLL_DECL boss_lady_keira_berrybuckAI : public ScriptedAI{ //Holy Pally boss_lady_keira_berrybuckAI(Creature *c) : ScriptedAI(c) { for (uint32 i = 0; i < 5; ++i) AllGuestGuid[i] = 0; pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); } ScriptedInstance *pInstance; uint64 AllGuestGuid[5]; uint32 Cleanse_Timer; uint32 GreaterBless_Timer; uint32 HolyLight_Timer; uint32 DivineShield_Timer; void Reset() { Cleanse_Timer = 13000; GreaterBless_Timer = 1000; HolyLight_Timer = 7000; DivineShield_Timer = 31000; FillAllGuestGuid(); if (pInstance) pInstance->SetData(DATA_MOROES_EVENT, 0); } void Aggro(Unit *who) { } void FillAllGuestGuid() { if (pInstance) { AllGuestGuid[0] = pInstance->GetData64(DATA_MOROES); Creature *pMoroes = (Creature *)Unit::GetUnit((*m_creature), AllGuestGuid[0]); if (pMoroes) for (uint32 i = 0; i < 5; ++i) AllGuestGuid[i] = ((boss_moroesAI*)pMoroes->AI())->AddGuid[i]; } } void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; if (pInstance && !pInstance->GetData(DATA_MOROES_EVENT)) EnterEvadeMode(); if (DivineShield_Timer < diff) { DoCast(m_creature,SPELL_DIVINESHIELD); DivineShield_Timer = 31000; }else DivineShield_Timer -= diff; if (HolyLight_Timer < diff) { Unit *Temp; uint64 TempGuid = AllGuestGuid[(rand()%6)]; if (TempGuid && TempGuid != m_creature->GetGUID()) { Temp = Unit::GetUnit((*m_creature),TempGuid); if (Temp && Temp->isAlive()) DoCast(Temp,SPELL_HOLYLIGHT); else DoCast(m_creature,SPELL_HOLYLIGHT); } else DoCast(m_creature,SPELL_HOLYLIGHT); HolyLight_Timer = 10000; }else HolyLight_Timer -= diff; if (GreaterBless_Timer < diff) { Unit *Temp; uint64 TempGuid = AllGuestGuid[rand()%6]; if (TempGuid && TempGuid != m_creature->GetGUID()) { Temp = Unit::GetUnit((*m_creature),TempGuid); if (Temp && Temp->isAlive()) DoCast(Temp,SPELL_GREATERBLESSOFMIGHT); else DoCast(m_creature,SPELL_GREATERBLESSOFMIGHT); } else DoCast(m_creature,SPELL_GREATERBLESSOFMIGHT); GreaterBless_Timer = 50000; }else GreaterBless_Timer -= diff; if (Cleanse_Timer < diff) { Unit *Temp; uint64 TempGuid = AllGuestGuid[rand()%6]; if (TempGuid && TempGuid != m_creature->GetGUID()) { Temp = Unit::GetUnit((*m_creature),TempGuid); if (Temp && Temp->isAlive() && m_creature->IsWithinLOSInMap(Temp)) DoCast(Temp,SPELL_CLEANSE); else DoCast(m_creature,SPELL_CLEANSE); } else DoCast(m_creature,SPELL_CLEANSE); Cleanse_Timer = 10000; }else Cleanse_Timer -= diff; DoMeleeAttackIfReady(); }};#define SPELL_HAMSTRING 9080#define SPELL_MORTALSTRIKE 29572#define SPELL_WHIRLWIND 29573struct MANGOS_DLL_DECL boss_lord_robin_darisAI : public ScriptedAI{ //Arms Warr boss_lord_robin_darisAI(Creature *c) : ScriptedAI(c) { pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); } ScriptedInstance *pInstance; uint32 Hamstring_Timer; uint32 MortalStrike_Timer; uint32 WhirlWind_Timer; void Reset() { Hamstring_Timer = 7000; MortalStrike_Timer = 10000; WhirlWind_Timer = 21000; if (pInstance) pInstance->SetData(DATA_MOROES_EVENT, 0); } void Aggro(Unit *who) { return; } void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; if (pInstance && !pInstance->GetData(DATA_MOROES_EVENT)) EnterEvadeMode(); if (Hamstring_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_HAMSTRING); Hamstring_Timer = 12000; }else Hamstring_Timer -= diff; if (MortalStrike_Timer < diff) { DoCast(m_creature->getVictim(), SPELL_MORTALSTRIKE); MortalStrike_Timer = 18000; }else MortalStrike_Timer -= diff; if (WhirlWind_Timer < diff) { DoCast(m_creature,SPELL_WHIRLWIND); WhirlWind_Timer = 21000; }else WhirlWind_Timer -= diff; DoMeleeAttackIfReady(); }};#define SPELL_DISARM 8379#define SPELL_HEROICSTRIKE 29567#define SPELL_SHIELDBASH 11972#define SPELL_SHIELDWALL 29390struct MANGOS_DLL_DECL boss_lord_crispin_ferenceAI : public ScriptedAI{ //Arms Warr boss_lord_crispin_ferenceAI(Creature *c) : ScriptedAI(c) { pInstance = ((ScriptedInstance*)c->GetInstanceData()); Reset(); } ScriptedInstance *pInstance; uint32 Disarm_Timer; uint32 HeroicStrike_Timer; uint32 ShieldBash_Timer; uint32 ShieldWall_Timer; void Reset() { Disarm_Timer = 6000; HeroicStrike_Timer = 10000; ShieldBash_Timer = 8000; ShieldWall_Timer = 4000; if (pInstance) pInstance->SetData(DATA_MOROES_EVENT, 0); } void Aggro(Unit *who) { } void UpdateAI(const uint32 diff) { if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() ) return; if (pInstance && !pInstance->GetData(DATA_MOROES_EVENT)) EnterEvadeMode(); if (Disarm_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_DISARM); Disarm_Timer = 12000; }else Disarm_Timer -= diff; if (HeroicStrike_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_HEROICSTRIKE); HeroicStrike_Timer = 10000; }else HeroicStrike_Timer -= diff; if (ShieldBash_Timer < diff) { DoCast(m_creature->getVictim(),SPELL_SHIELDBASH); ShieldBash_Timer = 13000; }else ShieldBash_Timer -= diff; if (ShieldWall_Timer < diff) { DoCast(m_creature,SPELL_SHIELDWALL); ShieldWall_Timer = 21000; }else ShieldWall_Timer -= diff; DoMeleeAttackIfReady(); }};CreatureAI* GetAI_boss_moroes(Creature *_Creature){ return new boss_moroesAI (_Creature);}CreatureAI* GetAI_baroness_dorothea_millstipe(Creature *_Creature){ return new boss_baroness_dorothea_millstipeAI (_Creature);}CreatureAI* GetAI_baron_rafe_dreuger(Creature *_Creature){ return new boss_baron_rafe_dreugerAI (_Creature);}CreatureAI* GetAI_lady_catriona_von_indi(Creature *_Creature){ return new boss_lady_catriona_von_indiAI (_Creature);}CreatureAI* GetAI_lady_keira_berrybuck(Creature *_Creature){ return new boss_lady_keira_berrybuckAI (_Creature);}CreatureAI* GetAI_lord_robin_daris(Creature *_Creature){ return new boss_lord_robin_darisAI (_Creature);}CreatureAI* GetAI_lord_crispin_ference(Creature *_Creature){ return new boss_lord_crispin_ferenceAI (_Creature);}void AddSC_boss_moroes(){ Script *newscript; newscript = new Script; newscript->Name="boss_moroes"; newscript->GetAI = GetAI_boss_moroes; m_scripts[nrscripts++] = newscript; newscript = new Script; newscript->Name="baroness_dorothea_millstipe"; newscript->GetAI = GetAI_baroness_dorothea_millstipe; m_scripts[nrscripts++] = newscript; newscript = new Script; newscript->Name="baron_rafe_dreuger"; newscript->GetAI = GetAI_baron_rafe_dreuger; m_scripts[nrscripts++] = newscript; newscript = new Script; newscript->Name="lady_catriona_von_indi"; newscript->GetAI = GetAI_lady_catriona_von_indi; m_scripts[nrscripts++] = newscript; newscript = new Script; newscript->Name="lady_keira_berrybuck"; newscript->GetAI = GetAI_lady_keira_berrybuck; m_scripts[nrscripts++] = newscript; newscript = new Script; newscript->Name="lord_robin_daris"; newscript->GetAI = GetAI_lord_robin_daris; m_scripts[nrscripts++] = newscript; newscript = new Script; newscript->Name="lord_crispin_ference"; newscript->GetAI = GetAI_lord_crispin_ference; m_scripts[nrscripts++] = newscript;}