See More

/* Copyright (C) 2006 - 2011 ScriptDev2 * 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 */ /* ScriptData SDName: Guards SD%Complete: 100 SDComment: CombatAI should be organized better for future. SDCategory: Guards EndScriptData */ /* ContentData guard_azuremyst guard_bluffwatcher guard_contested guard_darnassus guard_dunmorogh guard_durotar guard_elwynnforest guard_eversong guard_exodar guard_ironforge guard_mulgore guard_orgrimmar guard_shattrath guard_shattrath_aldor guard_shattrath_scryer guard_silvermoon guard_stormwind guard_teldrassil guard_tirisfal guard_undercity EndContentData */ #include "precompiled.h" #include "guard_ai.h" CreatureAI* GetAI_guard_azuremyst(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_bluffwatcher(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_contested(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_darnassus(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_dunmorogh(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_durotar(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_elwynnforest(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_eversong(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_exodar(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_ironforge(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_mulgore(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_orgrimmar(Creature* pCreature) { return new guardAI_orgrimmar(pCreature); } CreatureAI* GetAI_guard_shattrath(Creature* pCreature) { return new guardAI(pCreature); } /******************************************************* * guard_shattrath_aldor *******************************************************/ struct MANGOS_DLL_DECL guard_shattrath_aldorAI : public guardAI { guard_shattrath_aldorAI(Creature* pCreature) : guardAI(pCreature) { Reset(); } uint32 m_uiExile_Timer; uint32 m_uiBanish_Timer; uint64 m_uiPlayerGUID; bool m_bCanTeleport; void Reset() { m_uiBanish_Timer = 5000; m_uiExile_Timer = 8500; m_uiPlayerGUID = 0; m_bCanTeleport = false; } void UpdateAI(const uint32 uiDiff) { if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; if (m_bCanTeleport) { if (m_uiExile_Timer < uiDiff) { if (Player* pTarget = m_creature->GetMap()->GetPlayer(m_uiPlayerGUID)) { pTarget->CastSpell(pTarget, SPELL_EXILE, true); pTarget->CastSpell(pTarget, SPELL_BANISH_TELEPORT, true); } m_uiPlayerGUID = 0; m_uiExile_Timer = 8500; m_bCanTeleport = false; } else m_uiExile_Timer -= uiDiff; } else if (m_uiBanish_Timer < uiDiff) { Unit* pVictim = m_creature->getVictim(); if (pVictim && pVictim->GetTypeId() == TYPEID_PLAYER) { DoCastSpellIfCan(pVictim, SPELL_BANISHED_SHATTRATH_A); m_uiBanish_Timer = 9000; m_uiPlayerGUID = pVictim->GetGUID(); if (m_uiPlayerGUID) m_bCanTeleport = true; } } else m_uiBanish_Timer -= uiDiff; DoMeleeAttackIfReady(); } }; CreatureAI* GetAI_guard_shattrath_aldor(Creature* pCreature) { return new guard_shattrath_aldorAI(pCreature); } /******************************************************* * guard_shattrath_scryer *******************************************************/ struct MANGOS_DLL_DECL guard_shattrath_scryerAI : public guardAI { guard_shattrath_scryerAI(Creature* pCreature) : guardAI(pCreature) { Reset(); } uint32 m_uiExile_Timer; uint32 m_uiBanish_Timer; uint64 m_uiPlayerGUID; bool m_bCanTeleport; void Reset() { m_uiBanish_Timer = 5000; m_uiExile_Timer = 8500; m_uiPlayerGUID = 0; m_bCanTeleport = false; } void UpdateAI(const uint32 uiDiff) { if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) return; if (m_bCanTeleport) { if (m_uiExile_Timer < uiDiff) { if (Player* pTarget = m_creature->GetMap()->GetPlayer(m_uiPlayerGUID)) { pTarget->CastSpell(pTarget, SPELL_EXILE, true); pTarget->CastSpell(pTarget, SPELL_BANISH_TELEPORT, true); } m_uiPlayerGUID = 0; m_uiExile_Timer = 8500; m_bCanTeleport = false; } else m_uiExile_Timer -= uiDiff; } else if (m_uiBanish_Timer < uiDiff) { Unit* pVictim = m_creature->getVictim(); if (pVictim && pVictim->GetTypeId() == TYPEID_PLAYER) { DoCastSpellIfCan(pVictim, SPELL_BANISHED_SHATTRATH_S); m_uiBanish_Timer = 9000; m_uiPlayerGUID = pVictim->GetGUID(); if (m_uiPlayerGUID) m_bCanTeleport = true; } } else m_uiBanish_Timer -= uiDiff; DoMeleeAttackIfReady(); } }; CreatureAI* GetAI_guard_shattrath_scryer(Creature* pCreature) { return new guard_shattrath_scryerAI(pCreature); } CreatureAI* GetAI_guard_silvermoon(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_stormwind(Creature* pCreature) { return new guardAI_stormwind(pCreature); } CreatureAI* GetAI_guard_teldrassil(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_tirisfal(Creature* pCreature) { return new guardAI(pCreature); } CreatureAI* GetAI_guard_undercity(Creature* pCreature) { return new guardAI(pCreature); } void AddSC_guards() { Script *newscript; newscript = new Script; newscript->Name = "guard_azuremyst"; newscript->GetAI = &GetAI_guard_azuremyst; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_bluffwatcher"; newscript->GetAI = &GetAI_guard_bluffwatcher; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_contested"; newscript->GetAI = &GetAI_guard_contested; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_darnassus"; newscript->GetAI = &GetAI_guard_darnassus; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_dunmorogh"; newscript->GetAI = &GetAI_guard_dunmorogh; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_durotar"; newscript->GetAI = &GetAI_guard_durotar; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_elwynnforest"; newscript->GetAI = &GetAI_guard_elwynnforest; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_eversong"; newscript->GetAI = &GetAI_guard_eversong; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_exodar"; newscript->GetAI = &GetAI_guard_exodar; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_ironforge"; newscript->GetAI = &GetAI_guard_ironforge; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_mulgore"; newscript->GetAI = &GetAI_guard_mulgore; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_orgrimmar"; newscript->GetAI = &GetAI_guard_orgrimmar; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_shattrath"; newscript->GetAI = &GetAI_guard_shattrath; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_shattrath_aldor"; newscript->GetAI = &GetAI_guard_shattrath_aldor; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_shattrath_scryer"; newscript->GetAI = &GetAI_guard_shattrath_scryer; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_silvermoon"; newscript->GetAI = &GetAI_guard_silvermoon; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_stormwind"; newscript->GetAI = &GetAI_guard_stormwind; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_teldrassil"; newscript->GetAI = &GetAI_guard_teldrassil; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_tirisfal"; newscript->GetAI = &GetAI_guard_tirisfal; newscript->RegisterSelf(); newscript = new Script; newscript->Name = "guard_undercity"; newscript->GetAI = &GetAI_guard_undercity; newscript->RegisterSelf(); }