/* 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();
}