diff options
Diffstat (limited to 'src/game/SpellAuras.h')
-rw-r--r-- | src/game/SpellAuras.h | 226 |
1 files changed, 0 insertions, 226 deletions
diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h deleted file mode 100644 index be76b520bd9..00000000000 --- a/src/game/SpellAuras.h +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * Copyright (C) 2008-2010 Trinity <http://www.trinitycore.org/> - * - * 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 - */ - -#ifndef TRINITY_SPELLAURAS_H -#define TRINITY_SPELLAURAS_H - -#include "SpellAuraDefines.h" - -class Unit; -struct SpellEntry; -struct SpellModifier; -struct ProcTriggerSpell; - -// forward decl -class AuraEffect; -class Aura; -class DynamicObject; - -// update aura target map every 500 ms instead of every update - reduce amount of grid searcher calls -#define UPDATE_TARGET_MAP_INTERVAL 500 - -class AuraApplication -{ - friend void Unit::_ApplyAura(AuraApplication * aurApp, uint8 effMask); - friend void Unit::_UnapplyAura(AuraApplicationMap::iterator &i, AuraRemoveMode removeMode); - friend void Unit::_ApplyAuraEffect(Aura * aura, uint8 effIndex); - friend AuraApplication * Unit::_CreateAuraApplication(Aura * aura, uint8 effMask); - private: - Unit * const m_target; - Aura * const m_base; - uint8 m_slot; // Aura slot on unit - uint8 m_flags; // Aura info flag - uint8 m_effectsToApply; // Used only at spell hit to determine which effect should be applied - AuraRemoveMode m_removeMode:8; // Store info for know remove aura reason - bool m_needClientUpdate:1; - bool m_isNeedManyNegativeEffects:1; - - explicit AuraApplication(Unit * target, Unit * caster, Aura * base, uint8 effMask); - void _Remove(); - private: - bool _CheckPositive(Unit * caster) const; - void _HandleEffect(uint8 effIndex, bool apply); - public: - - Unit * GetTarget() const { return m_target; } - Aura * GetBase() const { return m_base; } - - uint8 GetSlot() const { return m_slot; } - uint8 GetFlags() const { return m_flags; } - uint8 GetEffectMask() const { return m_flags & (AFLAG_EFF_INDEX_0 | AFLAG_EFF_INDEX_1 | AFLAG_EFF_INDEX_2); } - bool HasEffect(uint8 effect) const { assert(effect < MAX_SPELL_EFFECTS); return m_flags & (1<<effect); } - bool IsPositive() const { return m_flags & AFLAG_POSITIVE; } - uint8 GetEffectsToApply() const { return m_effectsToApply; } - - void SetRemoveMode(AuraRemoveMode mode) { m_removeMode = mode; } - AuraRemoveMode GetRemoveMode() const {return m_removeMode;} - - void SetNeedClientUpdate() { m_needClientUpdate = true;} - bool IsNeedClientUpdate() const { return m_needClientUpdate;} - void ClientUpdate(bool remove = false); -}; - -class Aura -{ - public: - typedef std::map<uint64, AuraApplication *> ApplicationMap; - - static Aura * TryCreate(SpellEntry const* spellproto, uint8 effMask, WorldObject * owner, Unit * caster, int32 *baseAmount = NULL, Item * castItem = NULL, uint64 casterGUID = 0); - static Aura * TryCreate(SpellEntry const* spellproto, WorldObject * owner, Unit * caster, int32 *baseAmount = NULL, Item * castItem = NULL, uint64 casterGUID = 0); - static Aura * Create(SpellEntry const* spellproto, uint8 effMask, WorldObject * owner, Unit * caster, int32 *baseAmount = NULL, Item * castItem = NULL, uint64 casterGUID = 0); - explicit Aura(SpellEntry const* spellproto, uint8 effMask, WorldObject * owner, Unit * caster, int32 *baseAmount, Item * castItem, uint64 casterGUID); - ~Aura(); - - SpellEntry const* GetSpellProto() const { return m_spellProto; } - uint32 GetId() const{ return GetSpellProto()->Id; } - - uint64 GetCastItemGUID() const { return m_castItemGuid; } - uint64 const& GetCasterGUID() const { return m_casterGuid; } - Unit* GetCaster() const; - WorldObject * GetOwner() const { return m_owner; } - Unit * GetUnitOwner() const { assert(GetType() == UNIT_AURA_TYPE); return (Unit*)m_owner; } - DynamicObject * GetDynobjOwner() const { assert(GetType() == DYNOBJ_AURA_TYPE); return (DynamicObject*)m_owner; } - - 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() {Unit * caster = GetCaster(); UpdateTargetMap(caster, false);} - void ApplyForTargets() {Unit * caster = GetCaster(); UpdateTargetMap(caster, true);} - void _ApplyEffectForTargets(uint8 effIndex); - - void UpdateOwner(uint32 diff, WorldObject * owner); - void Update(uint32 diff, Unit * caster); - - time_t GetApplyTime() const { return m_applyTime; } - int32 GetMaxDuration() const { return m_maxDuration; } - void SetMaxDuration(int32 duration) { m_maxDuration = duration; } - int32 GetDuration() const { return m_duration; } - void SetDuration(int32 duration, bool withMods = false); - void RefreshDuration(); - bool IsExpired() const { return !GetDuration();} - bool IsPermanent() const { return GetMaxDuration() == -1; } - - uint8 GetCharges() const { return m_procCharges; } - void SetCharges(uint8 charges); - bool DropCharge(); - - uint8 GetStackAmount() const { return m_stackAmount; } - void SetStackAmount(uint8 num, bool applied = true); - bool ModStackAmount(int32 num); // return true if last charge dropped - - uint8 GetCasterLevel() const { return m_casterLevel; } - - bool IsPassive() const; - bool IsDeathPersistent() const; - bool IsRemovedOnShapeLost(Unit * target) const { return (GetCasterGUID() == target->GetGUID() && m_spellProto->Stances && !(m_spellProto->AttributesEx2 & SPELL_ATTR_EX2_NOT_NEED_SHAPESHIFT) && !(m_spellProto->Attributes & SPELL_ATTR_NOT_SHAPESHIFT)); } - bool CanBeSaved() const; - bool IsRemoved() const { return m_isRemoved; } - bool IsVisible() const; - // Single cast aura helpers - bool IsSingleTarget() const {return m_isSingleTarget;} - void SetIsSingleTarget(bool val) { m_isSingleTarget = val;} - void UnregisterSingleTarget(); - - void SetLoadedState(int32 maxduration, int32 duration, int32 charges, uint8 stackamount, uint8 recalculateMask, int32 * amount); - - // helpers for aura effects - bool HasEffect(uint8 effIndex) const { return bool(GetEffect(effIndex)); } - bool HasEffectType(AuraType type) const; - AuraEffect * GetEffect (uint8 effIndex) const { assert (effIndex < MAX_SPELL_EFFECTS); return m_effects[effIndex]; } - uint8 GetEffectMask() const { uint8 effMask = 0; for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i) if (m_effects[i]) effMask |= 1<<i; return effMask; } - void RecalculateAmountOfEffects(); - void HandleAllEffects(AuraApplication const * aurApp, uint8 mode, bool apply); - - // Helpers for targets - ApplicationMap const & GetApplicationMap() {return m_applications;} - const AuraApplication * GetApplicationOfTarget (uint64 const & guid) const { ApplicationMap::const_iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } - AuraApplication * GetApplicationOfTarget (uint64 const & guid) { ApplicationMap::iterator itr = m_applications.find(guid); if (itr != m_applications.end()) return itr->second; return NULL; } - bool IsAppliedOnTarget (uint64 const & guid) const { return m_applications.find(guid) != m_applications.end(); } - - void SetNeedClientUpdateForTargets() const; - void HandleAuraSpecificMods(AuraApplication const * aurApp, Unit * caster, bool apply); - bool CheckTarget(Unit *target); - private: - void _DeleteRemovedApplications(); - protected: - SpellEntry const * const m_spellProto; - uint64 const m_casterGuid; - uint64 const m_castItemGuid; // it is NOT safe to keep a pointer to the item because it may get deleted - time_t const m_applyTime; - WorldObject * const m_owner; // - - int32 m_maxDuration; // Max aura duration - int32 m_duration; // Current time - int32 m_timeCla; // Timer for power per sec calcultion - int32 m_updateTargetMapInterval; // Timer for UpdateTargetMapOfEffect - - uint8 const m_casterLevel; // Aura level (store caster level for correct show level dep amount) - uint8 m_procCharges; // Aura charges (0 for infinite) - uint8 m_stackAmount; // Aura stack amount - - AuraEffect * m_effects[3]; - ApplicationMap m_applications; - - bool m_isRemoved:1; - bool m_isSingleTarget:1; // true if it's a single target spell and registered at caster - can change at spell steal for example - - private: - Unit::AuraApplicationList m_removedApplications; -}; - -class UnitAura : public Aura -{ - friend Aura * Aura::Create(SpellEntry const* spellproto, uint8 effMask, WorldObject * owner, Unit * caster, int32 *baseAmount, Item * castItem, uint64 casterGUID); - protected: - explicit UnitAura(SpellEntry const* spellproto, uint8 effMask, WorldObject * owner, Unit * caster, int32 *baseAmount, Item * castItem, uint64 casterGUID); - public: - void _ApplyForTarget(Unit * target, Unit * caster, AuraApplication * aurApp); - void _UnapplyForTarget(Unit * target, Unit * caster, AuraApplication * aurApp); - - void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT); - - void FillTargetMap(std::map<Unit *, uint8> & targets, Unit * caster); - - // Allow Apply Aura Handler to modify and access m_AuraDRGroup - void SetDiminishGroup(DiminishingGroup group) { m_AuraDRGroup = group; } - DiminishingGroup GetDiminishGroup() const { return m_AuraDRGroup; } - - private: - DiminishingGroup m_AuraDRGroup:8; // Diminishing -}; - -class DynObjAura : public Aura -{ - friend Aura * Aura::Create(SpellEntry const* spellproto, uint8 effMask, WorldObject * owner, Unit * caster, int32 *baseAmount, Item * castItem, uint64 casterGUID); - protected: - explicit DynObjAura(SpellEntry const* spellproto, uint8 effMask, WorldObject * owner, Unit * caster, int32 *baseAmount, Item * castItem, uint64 casterGUID); - public: - void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT); - - void FillTargetMap(std::map<Unit *, uint8> & targets, Unit * caster); -}; -#endif |