6#ifndef SKYFIRE_SPELLAURAS_H
7#define SKYFIRE_SPELLAURAS_H
15struct ProcTriggerSpell;
26#define UPDATE_TARGET_MAP_INTERVAL 500
#define MAX_SPELL_EFFECTS
@ SPELL_ATTR0_NOT_SHAPESHIFT
@ SPELL_ATTR2_NOT_NEED_SHAPESHIFT
void SetRemoveMode(AuraRemoveMode mode)
void ClientUpdate(bool remove=false)
void _HandleEffect(uint8 effIndex, bool apply)
bool IsNeedClientUpdate() const
void _InitFlags(Unit *caster, uint32 effMask)
AuraApplication(Unit *target, Unit *caster, Aura *base, uint32 effMask)
uint32 GetEffectsToApply() const
bool IsSelfcasted() const
bool HasEffect(uint32 effect) const
void SetNeedClientUpdate()
uint32 GetEffectMask() const
AuraRemoveMode GetRemoveMode() const
AuraRemoveMode _removeMode
void HandleAllEffects(AuraApplication *aurApp, uint8 mode, bool apply)
Unit::AuraApplicationList m_removedApplications
void SetLoadedState(int32 maxduration, int32 duration, int32 charges, uint8 stackamount, uint32 recalculateMask, int32 *amount)
virtual void _UnapplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
uint64 GetCasterGUID() const
virtual void FillTargetMap(std::map< Unit *, uint32 > &targets, Unit *caster)=0
void AddProcCooldown(uint32 msec)
const AuraApplication * GetApplicationOfTarget(uint64 guid) const
bool CheckAreaTarget(Unit *target)
int32 GetMaxDuration() const
uint64 GetCastItemGUID() const
void CallScriptEffectAbsorbHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
AuraEffect * m_effects[MAX_SPELL_EFFECTS]
void CallScriptDispel(DispelInfo *dispelInfo)
ApplicationMap const & GetApplicationMap()
void SetStackAmount(uint8 num)
void CallScriptEffectCalcSpellModHandlers(AuraEffect const *aurEff, SpellModifier *&spellMod)
Unit * GetUnitOwner() const
AuraApplication * GetApplicationOfTarget(uint64 guid)
std::list< AuraScript * > m_loadedScripts
bool CanBeSentToClient() const
DynamicObject * GetDynobjOwner() const
void SetUsingCharges(bool val)
bool CallScriptCheckAreaTargetHandlers(Unit *target)
bool CallScriptEffectRemoveHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
void CallScriptEffectCalcAmountHandlers(AuraEffect const *aurEff, int32 &amount, bool &canBeRecalculated)
void _RegisterForTargets()
bool CallScriptEffectPeriodicHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp)
void CallScriptAfterProcHandlers(AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool HasEffect(uint8 effIndex) const
void GetApplicationList(Unit::AuraApplicationList &applicationList) const
void Update(uint32 diff, Unit *caster)
uint8 GetCasterLevel() const
WorldObject * GetOwner() const
static Aura * TryCreate(SpellInfo const *spellproto, uint32 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount=NULL, Item *castItem=NULL, uint64 casterGUID=0)
bool IsSingleTargetWith(Aura const *aura) const
bool ModCharges(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
bool CanStackWith(Aura const *existingAura) const
std::map< uint64, AuraApplication * > ApplicationMap
ApplicationMap m_applications
int32 GetDuration() const
bool IsUsingCharges() const
void UpdateOwner(uint32 diff, WorldObject *owner)
void UnregisterSingleTarget()
bool IsDeathPersistent() const
bool CallScriptPrepareProcHandlers(AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool HasEffectType(AuraType type) const
AuraEffect * GetEffect(uint8 effIndex) const
uint64 const m_casterGuid
static Aura * TryRefreshStackOrCreate(SpellInfo const *spellproto, uint32 tryEffMask, WorldObject *owner, Unit *caster, int32 *baseAmount=NULL, Item *castItem=NULL, uint64 casterGUID=0, bool *refresh=NULL)
void CallScriptAfterEffectApplyHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
int32 CalcDispelChance(Unit *auraTarget, bool offensive) const
void SetCharges(uint8 charges)
bool CallScriptCheckProcHandlers(AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool CallScriptEffectApplyHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
void CallScriptAfterEffectRemoveHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
void UpdateTargetMap(Unit *caster, bool apply=true)
static Aura * Create(SpellInfo const *spellproto, uint32 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, uint64 casterGUID)
void _InitEffects(uint32 effMask, Unit *caster, int32 *baseAmount)
void SetNeedClientUpdateForTargets() const
bool CallScriptEffectProcHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, ProcEventInfo &eventInfo)
void CallScriptAfterEffectProcHandlers(AuraEffect const *aurEff, AuraApplication const *aurApp, ProcEventInfo &eventInfo)
int32 CalcMaxDuration() const
void SetDuration(int32 duration, bool withMods=false)
bool CallScriptProcHandlers(AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool IsProcOnCooldown() const
float CalcProcChance(SpellProcEntry const &procEntry, ProcEventInfo &eventInfo) const
void CallScriptEffectAfterAbsorbHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
void CallScriptEffectManaShieldHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
SpellInfo const *const m_spellInfo
void CallScriptEffectSplitHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &splitAmount)
AuraObjectType GetType() const
uint8 GetStackAmount() const
void _ApplyEffectForTargets(uint8 effIndex)
AuraScript * GetScriptByName(std::string const &scriptName) const
void TriggerProcOnEvent(AuraApplication *aurApp, ProcEventInfo &eventInfo)
WorldObject *const m_owner
SpellInfo const * GetSpellInfo() const
uint32 GetEffectMask() const
uint64 const m_castItemGuid
bool IsRemovedOnShapeLost(Unit *target) const
void CallScriptEffectCalcPeriodicHandlers(AuraEffect const *aurEff, bool &isPeriodic, int32 &litude)
void SetMaxDuration(int32 duration)
bool CanBeAppliedOn(Unit *target)
bool IsProcTriggeredOnEvent(AuraApplication *aurApp, ProcEventInfo &eventInfo) const
uint8 const m_casterLevel
void HandleAuraSpecificMods(AuraApplication const *aurApp, Unit *caster, bool apply, bool onReapply)
void SetIsSingleTarget(bool val)
void _DeleteRemovedApplications()
void PrepareProcToTrigger(AuraApplication *aurApp, ProcEventInfo &eventInfo)
Aura(SpellInfo const *spellproto, WorldObject *owner, Unit *caster, Item *castItem, uint64 casterGUID)
virtual void _ApplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
uint8 CalcMaxCharges() const
void CallScriptEffectUpdatePeriodicHandlers(AuraEffect *aurEff)
bool IsAppliedOnTarget(uint64 guid) const
void RecalculateAmountOfEffects()
static uint32 BuildEffectMaskForOwner(SpellInfo const *spellProto, uint32 avalibleEffectMask, WorldObject *owner)
time_t GetApplyTime() const
int32 m_updateTargetMapInterval
void CallScriptEffectAfterManaShieldHandlers(AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
bool DropCharge(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void CallScriptAfterDispel(DispelInfo *dispelInfo)
void _Remove(AuraRemoveMode removeMode)
bool IsSingleTarget() const
DynObjAura(SpellInfo const *spellproto, uint32 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, uint64 casterGUID)
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void FillTargetMap(std::map< Unit *, uint32 > &targets, Unit *caster)
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
DiminishingGroup m_AuraDRGroup
void _ApplyForTarget(Unit *target, Unit *caster, AuraApplication *aurApp)
void SetDiminishGroup(DiminishingGroup group)
DiminishingGroup GetDiminishGroup() const
void FillTargetMap(std::map< Unit *, uint32 > &targets, Unit *caster)
void _UnapplyForTarget(Unit *target, Unit *caster, AuraApplication *aurApp)
UnitAura(SpellInfo const *spellproto, uint32 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, uint64 casterGUID)
Aura * _TryStackingOrRefreshingExistingAura(SpellInfo const *newAura, uint32 effMask, Unit *caster, int32 *baseAmount=NULL, Item *castItem=NULL, uint64 casterGUID=0)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
void _UnapplyAura(AuraApplicationMap::iterator &i, AuraRemoveMode removeMode)
std::list< AuraApplication * > AuraApplicationList
void _ApplyAura(AuraApplication *aurApp, uint32 effMask)
AuraApplication * _CreateAuraApplication(Aura *aura, uint32 effMask)
void _ApplyAuraEffect(Aura *aura, uint8 effIndex)