AzerothCore 3.3.5a
OpenSource WoW Emulator
No Matches
DynObjAura Class Reference

#include "SpellAuras.h"

Inheritance diagram for DynObjAura:

Public Member Functions

void Remove (AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT) override
void FillTargetMap (std::map< Unit *, uint8 > &targets, Unit *caster) override
- Public Member Functions inherited from Aura
 Aura (SpellInfo const *spellproto, WorldObject *owner, Unit *caster, Item *castItem, ObjectGuid casterGUID, ObjectGuid itemGUID=ObjectGuid::Empty)
void _InitEffects (uint8 effMask, Unit *caster, int32 *baseAmount)
virtual ~Aura ()
SpellInfo const * GetSpellInfo () const
uint32 GetId () const
ObjectGuid GetCastItemGUID () const
uint32 GetCastItemEntry () const
ObjectGuid GetCasterGUID () const
UnitGetCaster () const
WorldObjectGetOwner () const
UnitGetUnitOwner () const
DynamicObjectGetDynobjOwner () const
AuraObjectType GetType () const
virtual void _ApplyForTarget (Unit *target, Unit *caster, AuraApplication *auraApp)
virtual void _UnapplyForTarget (Unit *target, Unit *caster, AuraApplication *auraApp)
void _Remove (AuraRemoveMode removeMode)
virtual void Remove (AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
virtual void FillTargetMap (std::map< Unit *, uint8 > &targets, Unit *caster)=0
void UpdateTargetMap (Unit *caster, bool apply=true)
void _RegisterForTargets ()
void ApplyForTargets ()
void _ApplyEffectForTargets (uint8 effIndex)
void UpdateOwner (uint32 diff, WorldObject *owner)
void Update (uint32 diff, Unit *caster)
time_t GetApplyTime () const
int32 GetMaxDuration () const
void SetMaxDuration (int32 duration)
int32 CalcMaxDuration () const
int32 CalcMaxDuration (Unit *caster) const
int32 GetDuration () const
void SetDuration (int32 duration, bool withMods=false)
void RefreshDuration (bool withMods=false)
void RefreshTimers (bool periodicReset=false)
void RefreshTimersWithMods ()
bool IsExpired () const
bool IsPermanent () const
uint8 GetCharges () const
void SetCharges (uint8 charges)
uint8 CalcMaxCharges (Unit *caster) const
uint8 CalcMaxCharges () const
bool ModCharges (int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
bool DropCharge (AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
uint8 GetStackAmount () const
void SetStackAmount (uint8 num)
bool ModStackAmount (int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, bool periodicReset=false)
void RefreshSpellMods ()
uint8 GetCasterLevel () const
bool IsArea () const
bool IsPassive () const
bool IsDeathPersistent () const
bool IsRemovedOnShapeLost (Unit *target) const
bool CanBeSaved () const
bool IsRemoved () const
bool CanBeSentToClient () const
bool IsSingleTarget () const
bool IsSingleTargetWith (Aura const *aura) const
void SetIsSingleTarget (bool val)
void UnregisterSingleTarget ()
int32 CalcDispelChance (Unit *auraTarget, bool offensive) const
void SetLoadedState (int32 maxduration, int32 duration, int32 charges, uint8 stackamount, uint8 recalculateMask, int32 *amount)
bool HasEffect (uint8 effIndex) const
bool HasEffectType (AuraType type) const
AuraEffectGetEffect (uint8 effIndex) const
uint8 GetEffectMask () const
void RecalculateAmountOfEffects ()
void HandleAllEffects (AuraApplication *aurApp, uint8 mode, bool apply)
ApplicationMap const & GetApplicationMap ()
void GetApplicationList (std::list< AuraApplication * > &applicationList) const
const AuraApplicationGetApplicationOfTarget (ObjectGuid guid) const
AuraApplicationGetApplicationOfTarget (ObjectGuid guid)
bool IsAppliedOnTarget (ObjectGuid guid) const
void SetNeedClientUpdateForTargets () const
void HandleAuraSpecificMods (AuraApplication const *aurApp, Unit *caster, bool apply, bool onReapply)
bool CanBeAppliedOn (Unit *target)
bool CheckAreaTarget (Unit *target)
bool CanStackWith (Aura const *checkAura, bool remove) const
bool IsAuraStronger (Aura const *newAura) const
bool IsProcOnCooldown () const
void AddProcCooldown (Milliseconds msec)
bool IsUsingCharges () const
void SetUsingCharges (bool val)
void PrepareProcToTrigger (AuraApplication *aurApp, ProcEventInfo &eventInfo)
bool IsProcTriggeredOnEvent (AuraApplication *aurApp, ProcEventInfo &eventInfo) const
float CalcProcChance (SpellProcEntry const &procEntry, ProcEventInfo &eventInfo) const
void TriggerProcOnEvent (AuraApplication *aurApp, ProcEventInfo &eventInfo)
void LoadScripts ()
bool CallScriptCheckAreaTargetHandlers (Unit *target)
void CallScriptDispel (DispelInfo *dispelInfo)
void CallScriptAfterDispel (DispelInfo *dispelInfo)
bool CallScriptEffectApplyHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
bool CallScriptEffectRemoveHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
void CallScriptAfterEffectApplyHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
void CallScriptAfterEffectRemoveHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, AuraEffectHandleModes mode)
bool CallScriptEffectPeriodicHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp)
void CallScriptEffectUpdatePeriodicHandlers (AuraEffect *aurEff)
void CallScriptEffectCalcAmountHandlers (AuraEffect const *aurEff, int32 &amount, bool &canBeRecalculated)
void CallScriptEffectCalcPeriodicHandlers (AuraEffect const *aurEff, bool &isPeriodic, int32 &amplitude)
void CallScriptEffectCalcSpellModHandlers (AuraEffect const *aurEff, SpellModifier *&spellMod)
void CallScriptEffectAbsorbHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
void CallScriptEffectAfterAbsorbHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
void CallScriptEffectManaShieldHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount, bool &defaultPrevented)
void CallScriptEffectAfterManaShieldHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &absorbAmount)
void CallScriptEffectSplitHandlers (AuraEffect *aurEff, AuraApplication const *aurApp, DamageInfo &dmgInfo, uint32 &splitAmount)
bool CallScriptCheckProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool CallScriptAfterCheckProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo, bool isTriggeredAtSpellProcEvent)
bool CallScriptPrepareProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool CallScriptProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo)
void CallScriptAfterProcHandlers (AuraApplication const *aurApp, ProcEventInfo &eventInfo)
bool CallScriptEffectProcHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, ProcEventInfo &eventInfo)
void CallScriptAfterEffectProcHandlers (AuraEffect const *aurEff, AuraApplication const *aurApp, ProcEventInfo &eventInfo)
AuraScriptGetScriptByName (std::string const &scriptName) const
virtual std::string GetDebugInfo () const
void SetTriggeredByAuraSpellInfo (SpellInfo const *triggeredByAuraSpellInfo)
SpellInfo const * GetTriggeredByAuraSpellInfo () const

Protected Member Functions

 DynObjAura (SpellInfo const *spellproto, uint8 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, ObjectGuid casterGUID, ObjectGuid itemGUID=ObjectGuid::Empty)


AuraAura::Create (SpellInfo const *spellproto, uint8 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, ObjectGuid casterGUID, ObjectGuid itemGUID)

Additional Inherited Members

- Public Types inherited from Aura
typedef std::map< ObjectGuid, AuraApplication * > ApplicationMap
- Static Public Member Functions inherited from Aura
static uint8 BuildEffectMaskForOwner (SpellInfo const *spellProto, uint8 avalibleEffectMask, WorldObject *owner)
static AuraTryRefreshStackOrCreate (SpellInfo const *spellproto, uint8 tryEffMask, WorldObject *owner, Unit *caster, int32 *baseAmount=nullptr, Item *castItem=nullptr, ObjectGuid casterGUID=ObjectGuid::Empty, bool *refresh=nullptr, bool periodicReset=false)
static AuraTryCreate (SpellInfo const *spellproto, uint8 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount=nullptr, Item *castItem=nullptr, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemGUID=ObjectGuid::Empty)
static AuraCreate (SpellInfo const *spellproto, uint8 effMask, WorldObject *owner, Unit *caster, int32 *baseAmount, Item *castItem, ObjectGuid casterGUID, ObjectGuid itemGUID=ObjectGuid::Empty)
- Public Attributes inherited from Aura
std::list< AuraScript * > m_loadedScripts
- Protected Attributes inherited from Aura
SpellInfo const *const m_spellInfo
ObjectGuid const m_casterGuid
ObjectGuid const m_castItemGuid
uint32 const m_castItemEntry
time_t const m_applyTime
WorldObject *const m_owner
int32 m_maxDuration
int32 m_duration
int32 m_timeCla
int32 m_updateTargetMapInterval
uint8 const m_casterLevel
uint8 m_procCharges
uint8 m_stackAmount
AuraEffectm_effects [3]
ApplicationMap m_applications
bool m_isRemoved: 1
bool m_isSingleTarget: 1
bool m_isUsingCharges: 1

Detailed Description

Constructor & Destructor Documentation

◆ DynObjAura()

DynObjAura::DynObjAura ( SpellInfo const *  spellproto,
uint8  effMask,
WorldObject owner,
Unit caster,
int32 baseAmount,
Item castItem,
ObjectGuid  casterGUID,
ObjectGuid  itemGUID = ObjectGuid::Empty 
2874 : Aura(spellproto, owner, caster, castItem, casterGUID, itemGUID)
2876 LoadScripts();
2878 ASSERT(GetDynobjOwner()->IsInWorld());
2879 ASSERT(GetDynobjOwner()->GetMap() == caster->GetMap());
2880 _InitEffects(effMask, caster, baseAmount);
2881 GetDynobjOwner()->SetAura(this);
#define ASSERT
Definition: Errors.h:68
void SetAura(Aura *aura)
Definition: DynamicObject.cpp:220
Map * GetMap() const
Definition: Object.h:517
Definition: SpellAuras.h:87
DynamicObject * GetDynobjOwner() const
Definition: SpellAuras.h:109
void LoadScripts()
Definition: SpellAuras.cpp:2360
void _InitEffects(uint8 effMask, Unit *caster, int32 *baseAmount)
Definition: SpellAuras.cpp:435

References Aura::_InitEffects(), ASSERT, Aura::GetDynobjOwner(), WorldObject::GetMap(), Aura::LoadScripts(), and DynamicObject::SetAura().

Member Function Documentation

◆ FillTargetMap()

void DynObjAura::FillTargetMap ( std::map< Unit *, uint8 > &  targets,
Unit caster 

Implements Aura.

2893 Unit* dynObjOwnerCaster = GetDynobjOwner()->GetCaster();
2894 float radius = GetDynobjOwner()->GetRadius();
2896 for (uint8 effIndex = 0; effIndex < MAX_SPELL_EFFECTS; ++effIndex)
2897 {
2898 if (!HasEffect(effIndex))
2899 continue;
2901 SpellInfo const* spellInfo = GetSpellInfo();
2902 UnitList targetList;
2903 if (spellInfo->Effects[effIndex].TargetB.GetTarget() == TARGET_DEST_DYNOBJ_ALLY || spellInfo->Effects[effIndex].TargetB.GetTarget() == TARGET_UNIT_DEST_AREA_ALLY)
2904 {
2905 Acore::AnyFriendlyUnitInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius);
2907 Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius);
2908 }
2909 // pussywizard: TARGET_DEST_DYNOBJ_NONE is supposed to search for both friendly and unfriendly targets, so for any unit
2910 // what about EffectImplicitTargetA?
2911 else if (spellInfo->Effects[effIndex].TargetB.GetTarget() == TARGET_DEST_DYNOBJ_NONE)
2912 {
2915 Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius);
2916 }
2917 else
2918 {
2919 Acore::AnyAoETargetUnitInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius);
2921 Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius);
2922 }
2924 for (UnitList::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
2925 {
2926 Unit* target = *itr;
2928 Optional<float> collisionHeight = { };
2929 Optional<float> combatReach = { };
2930 if (Unit* dynObjCaster = GetDynobjOwner()->GetCaster())
2931 {
2932 collisionHeight = dynObjCaster->GetCollisionHeight();
2933 combatReach = dynObjCaster->GetCombatReach();
2934 }
2937 !GetDynobjOwner()->IsWithinLOSInMap(target, VMAP::ModelIgnoreFlags::Nothing, LINEOFSIGHT_ALL_CHECKS, collisionHeight, combatReach))
2938 {
2939 continue;
2940 }
2942 std::map<Unit*, uint8>::iterator existing = targets.find(*itr);
2943 if (existing != targets.end())
2944 existing->second |= 1 << effIndex;
2945 else
2946 targets[*itr] = 1 << effIndex;
2947 }
2948 }
std::uint8_t uint8
Definition: Define.h:110
std::optional< T > Optional
Optional helper class to wrap optional values within.
Definition: Optional.h:24
std::list< Unit * > UnitList
Definition: Unit.h:240
Definition: Map.h:197
Definition: DBCStructure.h:1610
Definition: SharedDefines.h:565
Definition: SharedDefines.h:1407
Definition: SharedDefines.h:1464
Definition: SharedDefines.h:1405
Definition: SharedDefines.h:430
Unit * GetCaster() const
Definition: DynamicObject.h:55
float GetRadius() const
Definition: DynamicObject.h:60
Definition: Unit.h:1290
float GetCollisionHeight() const override
Return collision height sent to client.
Definition: Unit.cpp:21273
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:207
Definition: GridNotifiers.h:420
Definition: GridNotifiers.h:973
Definition: GridNotifiers.h:1074
bool HasEffect(uint8 effIndex) const
Definition: SpellAuras.h:173
Unit * GetCaster() const
Definition: SpellAuras.cpp:471
SpellInfo const * GetSpellInfo() const
Definition: SpellAuras.h:100
Definition: SpellInfo.h:314
bool HasAttribute(SpellAttr0 attribute) const
Definition: SpellInfo.h:412
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition: SpellInfo.h:391

References SpellInfo::Effects, DynamicObject::GetCaster(), Aura::GetCaster(), Unit::GetCollisionHeight(), Aura::GetDynobjOwner(), DynamicObject::GetRadius(), Aura::GetSpellInfo(), SpellInfo::HasAttribute(), Aura::HasEffect(), LINEOFSIGHT_ALL_CHECKS, MAX_SPELL_EFFECTS, VMAP::Nothing, SPELL_ATTR2_IGNORE_LINE_OF_SIGHT, SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT, TARGET_DEST_DYNOBJ_ALLY, TARGET_DEST_DYNOBJ_NONE, TARGET_UNIT_DEST_AREA_ALLY, and Cell::VisitAllObjects().

◆ Remove()

void DynObjAura::Remove ( AuraRemoveMode  removeMode = AURA_REMOVE_BY_DEFAULT)

Implements Aura.

2886 if (IsRemoved())
2887 return;
2888 _Remove(removeMode);
bool IsRemoved() const
Definition: SpellAuras.h:161
void _Remove(AuraRemoveMode removeMode)
Definition: SpellAuras.cpp:574

References Aura::_Remove(), and Aura::IsRemoved().

Friends And Related Function Documentation

◆ Aura::Create

Aura * Aura::Create ( SpellInfo const *  spellproto,
uint8  effMask,
WorldObject owner,
Unit caster,
int32 baseAmount,
Item castItem,
ObjectGuid  casterGUID,
ObjectGuid  itemGUID