6#ifndef SKYFIRE_UNITAI_H
7#define SKYFIRE_UNITAI_H
138 if (position >= threatlist.size())
141 std::list<Unit*> targetList;
142 for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
143 if (predicate((*itr)->getTarget()))
144 targetList.push_back((*itr)->getTarget());
146 if (position >= targetList.size())
157 std::list<Unit*>::iterator itr = targetList.begin();
158 std::advance(itr, position);
164 std::list<Unit*>::reverse_iterator ritr = targetList.rbegin();
165 std::advance(ritr, position);
170 std::list<Unit*>::iterator itr = targetList.begin();
171 std::advance(itr, (std::rand() % targetList.size()) + position);
188 if (threatlist.empty())
191 for (ThreatContainer::StorageType::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
192 if (predicate((*itr)->getTarget()))
193 targetList.push_back((*itr)->getTarget());
195 if (targetList.size() < maxTargets)
202 targetList.reverse();
207 targetList.resize(maxTargets);
#define SF_UNARY_FUNCTION
@ SELECT_TARGET_BOTTOMAGGRO
void OnCharmed(bool apply) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
SimpleCharmedAI(Player *player)
std::list< HostileReference * > StorageType
virtual void sQuestAccept(Player *, Quest const *)
virtual void HealReceived(Unit *, uint32 &)
virtual uint64 GetGUID(int32=0) const
virtual void SetData(uint32, uint32)
virtual void DoAction(int32)
void AttackStartCaster(Unit *victim, float dist)
virtual void SetGUID(uint64, int32=0)
static void FillAISpellInfo()
void SelectTargetList(std::list< Unit * > &targetList, PREDICATE const &predicate, uint32 maxTargets, SelectAggroTarget targetType)
void SelectTargetList(std::list< Unit * > &targetList, uint32 num, SelectAggroTarget targetType, float dist=0.0f, bool playerOnly=false, int32 aura=0)
virtual void SpellInterrupted(uint32, uint32)
void DoMeleeAttackIfReady()
void DoCast(uint32 spellId)
virtual void sGossipSelectCode(Player *, uint32, uint32, char const *)
virtual void sQuestComplete(Player *, Quest const *)
virtual bool CanAIAttack(Unit const *) const
virtual bool OnGossipHello(Player *player)
virtual void sQuestReward(Player *, Quest const *, uint32)
virtual uint32 GetData(uint32) const
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
virtual bool sOnDummyEffect(Unit *, uint32, SpellEffIndex)
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position, PREDICATE const &predicate)
UnitAI & operator=(UnitAI const &right)=delete
virtual void sGossipHello(Player *)
void DoCastToAllHostilePlayers(uint32 spellid, bool triggered=false)
float DoGetSpellMaxRange(uint32 spellId, bool positive=false)
void DoAddAuraToAllHostilePlayers(uint32 spellid)
virtual void InitializeAI()
virtual void DamageTaken(Unit *, uint32 &)
virtual void sGossipSelect(Player *, uint32, uint32)
bool DoSpellAttackIfReady(uint32 spell)
void DoCastVictim(uint32 spellId, bool triggered=false)
virtual void HealDone(Unit *, uint32 &)
virtual void DamageDealt(Unit *, uint32 &, DamageEffectType)
virtual void UpdateAI(uint32 diff)=0
virtual void sQuestSelect(Player *, Quest const *)
UnitAI(UnitAI const &right)=delete
void DoCastAOE(uint32 spellId, bool triggered=false)
static AISpellInfoType * AISpellInfo
virtual void AttackStart(Unit *)
virtual void OnCharmed(bool apply)=0
virtual void sOnGameEvent(bool, uint16)
bool HasAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
void RandomResizeList(std::list< T > &list, uint32 size)
DefaultTargetSelector(Unit const *unit, float dist, bool playerOnly, int32 aura)
bool operator()(Unit const *target) const
bool operator()(Unit const *target) const
NonTankTargetSelector(Creature *source, bool playerOnly=true)
SpellInfo const * _spellInfo
bool operator()(Unit const *target) const
SpellTargetSelector(Unit *caster, uint32 spellId)