65 ASSERT(casterGUID || caster);
75 if (!casterGUID && bindStackToCaster)
84 castItemGUID = castItem->
GetGUID();
92 if (effMask != foundAura->GetEffectMask())
98 if (!foundAura->HasEffect(i))
103 bp = *(baseAmount + i);
105 bp = foundAura->GetSpellInfo()->Effects[i].BasePoints;
107 int32* oldBP =
const_cast<int32*
>(&(foundAura->GetEffect(i)->m_baseAmount));
112 if (castItemGUID != foundAura->GetCastItemGUID())
114 uint64* oldGUID =
const_cast<uint64*
>(&foundAura->m_castItemGuid);
115 *oldGUID = castItemGUID;
119 foundAura->ModStackAmount(1);
151 for (Unit::AuraList::iterator itr = scAuras.begin(); itr != scAuras.end();)
153 if ((*itr) != aura &&
157 itr = scAuras.begin();
188 m_appliedAuras.insert(AuraApplicationMap::value_type(aurId, aurApp));
262 SF_LOG_DEBUG(
"spells",
"Aura %u now is remove mode %d", aura->
GetId(), removeMode);
280 bool auraStateFound =
false;
284 bool canBreak =
false;
286 for (AuraStateAurasMap::iterator itr =
m_auraStateAuras.lower_bound(auraState); itr !=
m_auraStateAuras.upper_bound(auraState) && !(auraStateFound && canBreak);)
288 if (itr->second == aurApp)
295 auraStateFound =
true;
339 for (AuraApplicationMap::iterator iter = range.first; iter != range.second;)
341 if (iter->second == aurApp)
390 Aura* aura = i->second;
412 if (((itr->second->GetEffectMask() & reqEffMask) == reqEffMask) && (!casterGUID || itr->second->GetCasterGUID() == casterGUID))
431 for (AuraMap::iterator itr = range.first; itr != range.second; ++itr)
433 if (itr->second == aura)
446 for (AuraMap::const_iterator itr = range.first; itr != range.second; ++itr)
448 if (((itr->second->GetEffectMask() & reqEffMask) == reqEffMask)
449 && (!casterGUID || itr->second->GetCasterGUID() == casterGUID)
450 && (!itemCasterGUID || itr->second->GetCastItemGUID() == itemCasterGUID)
451 && (!except || except != itr->second))
475 for (AuraApplicationMap::iterator iter = range.first; iter != range.second;)
477 Aura const* aura = iter->second->GetBase();
512 for (AuraApplicationMap::iterator iter = range.first; iter != range.second;)
514 if (aurApp == iter->second)
536 Aura const* aura = iter->second->GetBase();
551 for (AuraMap::iterator iter = range.first; iter != range.second;)
553 Aura* aura = iter->second;
568 for (AuraMap::iterator iter = range.first; iter != range.second;)
570 Aura* aura = iter->second;
573 DispelInfo dispelInfo(dispeller, dispellerSpellId, chargesRemoved);
596 for (AuraMap::iterator iter = range.first; iter != range.second;)
598 Aura* aura = iter->second;
604 uint32 recalculateMask = 0;
614 recalculateMask |= (1 << i);
630 oldAura->ModCharges(1);
632 oldAura->ModStackAmount(1);
633 oldAura->SetDuration(
int32(dur));
644 if (newAura->IsSingleTarget())
646 newAura->UnregisterSingleTarget();
653 newAura->ApplyForTargets();
673 if (iter->second->GetBase()->GetCastItemGUID() == castItemGuid)
685 for (AuraEffectList::iterator iter =
m_modAuras[auraType].begin(); iter !=
m_modAuras[auraType].end();)
687 Aura* aura = (*iter)->GetBase();
691 if (aura != except && (!casterGUID || aura->
GetCasterGUID() == casterGUID)
706 SpellInfo const* spell = iter->second->GetBase()->GetSpellInfo();
724 if (!newPhase && !phaseid)
729 if (!caster || (newPhase && !caster->
InSamePhase(newPhase)) || (!newPhase && !caster->
IsPhased(
this)))
741 for (AuraList::iterator iter = scAuras.begin(); iter != scAuras.end();)
747 iter = scAuras.begin();
762 Aura* aura = (*iter)->GetBase();
777 && (spell->m_spellInfo->ChannelInterruptFlags & flag)
778 && spell->m_spellInfo->Id != except
789 Aura const* aura = iter->second->GetBase();
812 Aura const* aura = iter->second->GetBase();
813 if (!except || aura->
GetId() != except)
830 Aura* aura = iter->second;
833 for (Aura::ApplicationMap::const_iterator itr = appMap.begin(); itr != appMap.end();)
849 if (iter->second->GetBase()->GetOwner() !=
this)
864 AuraApplicationMap::iterator aurAppIter;
868 AuraMap::iterator aurIter;
897 Aura const* aura = iter->second->GetBase();
906 Aura* aura = iter->second;
918 Aura const* aura = iter->second->GetBase();
927 Aura* aura = iter->second;
939 Aura const* aura = iter->second->GetBase();
948 Aura* aura = iter->second;
960 Aura const* aura = iter->second->GetBase();
969 Aura* aura = iter->second;
980 for (; range.first != range.second; ++range.first)
982 Aura* aura = range.first->second;
1012 for (AuraApplicationMap::const_iterator itr = range.first; itr != range.second; ++itr)
1014 if (itr->second->HasEffect(effIndex)
1015 && (!caster || itr->second->GetBase()->GetCasterGUID() == caster))
1017 return itr->second->GetBase()->GetEffect(effIndex);
1030 rankSpell =
sSpellMgr->GetNextSpellInChain(rankSpell);
1038 for (Unit::AuraEffectList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
1040 if (effIndex != (*itr)->GetEffIndex())
1042 SpellInfo const* spell = (*itr)->GetSpellInfo();
1052 for (AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
1054 SpellInfo const* spell = (*i)->GetSpellInfo();
1057 if (casterGUID && (*i)->GetCasterGUID() != casterGUID)
1073 for (; range.first != range.second; ++range.first)
1081 && (!except || except != app))
1092 return aurApp ? aurApp->
GetBase() : NULL;
1102 rankSpell =
sSpellMgr->GetNextSpellInChain(rankSpell);
1110 return aurApp ? aurApp->
GetBase() : NULL;
1120 for (AuraMap::const_iterator itr = auras.begin(); itr != auras.end(); ++itr)
1122 Aura* aura = itr->second;
1147 dispelList.push_back(std::make_pair(aura, charges));
1155 for (AuraApplicationMap::const_iterator itr = range.first; itr != range.second; ++itr)
1157 if (itr->second->HasEffect(effIndex)
1158 && (!caster || itr->second->GetBase()->GetCasterGUID() == caster))
1171 for (AuraApplicationMap::const_iterator itr = range.first; itr != range.second; ++itr)
1173 if (itr->second->GetBase()->GetStackAmount() == 0)
1176 count += (
uint32)itr->second->GetBase()->GetStackAmount();
1197 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1198 if (caster == (*i)->GetCasterGUID())
1206 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1207 if (miscvalue == (*i)->GetMiscValue())
1215 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1216 if ((*i)->IsAffectingSpell(affectedSpell))
1224 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1225 if (value == (*i)->GetAmount())
1236 if (!(*iter)->IsPositive() && (*iter)->GetBase()->GetSpellInfo()->AuraInterruptFlags & flag && (!guid || (*iter)->GetBase()->GetCasterGUID() == guid))
1246 Aura const* aura = iter->second->GetBase();
1257 SpellInfo const* spellInfo = iter->second->GetBase()->GetSpellInfo();
1273 for (AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
1275 if ((*i)->GetMiscValue() == script)
1276 if ((*i)->IsAffectingSpell(spell))
1284 static const AuraType diseaseAuraTypes[] =
1298 && (*i)->GetCasterGUID() == casterGUID)
1304 RemoveAura((*i)->GetId(), (*i)->GetCasterGUID());
1317 static const AuraType diseaseAuraTypes[] =
1328 for (AuraEffectList::const_iterator i = auras.begin(); i != auras.end(); ++i)
1331 if ((*i)->GetCasterGUID() == casterGUID)
1340 std::map<SpellGroup, int32> SameEffectSpellGroup;
1344 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1345 if (!
sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
1346 modifier += (*i)->GetAmount();
1348 for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
1349 modifier += itr->second;
1356 float multiplier = 1.0f;
1359 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1360 AddPct(multiplier, (*i)->GetAmount());
1370 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1372 if ((*i)->GetAmount() > modifier)
1373 modifier = (*i)->GetAmount();
1384 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1385 if ((*i)->GetAmount() < modifier)
1386 modifier = (*i)->GetAmount();
1393 std::map<SpellGroup, int32> SameEffectSpellGroup;
1398 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1399 if ((*i)->GetMiscValue() & miscMask)
1400 if (!
sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
1401 modifier += (*i)->GetAmount();
1403 for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
1404 modifier += itr->second;
1411 std::map<SpellGroup, int32> SameEffectSpellGroup;
1412 float multiplier = 1.0f;
1415 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1417 if (((*i)->GetMiscValue() & miscMask))
1421 if (!
sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
1422 AddPct(multiplier, (*i)->GetAmount());
1426 for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
1427 AddPct(multiplier, itr->second);
1437 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1439 if (except != (*i) && (*i)->
GetMiscValue() & miscMask && (*i)->GetAmount() > modifier)
1440 modifier = (*i)->GetAmount();
1451 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1453 if ((*i)->GetMiscValue() & miscMask && (*i)->GetAmount() < modifier)
1454 modifier = (*i)->GetAmount();
1462 std::map<SpellGroup, int32> SameEffectSpellGroup;
1466 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1468 if ((*i)->GetMiscValue() == miscValue)
1469 if (!
sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
1470 modifier += (*i)->GetAmount();
1473 for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
1474 modifier += itr->second;
1481 std::map<SpellGroup, int32> SameEffectSpellGroup;
1482 float multiplier = 1.0f;
1485 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1487 if ((*i)->GetMiscValue() == miscValue)
1488 if (!
sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
1489 AddPct(multiplier, (*i)->GetAmount());
1492 for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
1493 AddPct(multiplier, itr->second);
1503 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1505 if ((*i)->GetMiscValue() == miscValue && (*i)->GetAmount() > modifier)
1506 modifier = (*i)->GetAmount();
1517 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1519 if ((*i)->GetMiscValue() == miscValue && (*i)->GetAmount() < modifier)
1520 modifier = (*i)->GetAmount();
1528 std::map<SpellGroup, int32> SameEffectSpellGroup;
1532 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1534 if ((*i)->IsAffectingSpell(affectedSpell))
1535 if (!
sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
1536 modifier += (*i)->GetAmount();
1539 for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
1540 modifier += itr->second;
1547 std::map<SpellGroup, int32> SameEffectSpellGroup;
1548 float multiplier = 1.0f;
1551 for (AuraEffectList::const_iterator i = mTotalAuraList.begin(); i != mTotalAuraList.end(); ++i)
1553 if ((*i)->IsAffectingSpell(affectedSpell))
1554 if (!
sSpellMgr->AddSameEffectStackRuleSpellGroups((*i)->GetSpellInfo(), (*i)->GetAmount(), SameEffectSpellGroup))
1555 AddPct(multiplier, (*i)->GetAmount());
1558 for (std::map<SpellGroup, int32>::const_iterator itr = SameEffectSpellGroup.begin(); itr != SameEffectSpellGroup.end(); ++itr)
1559 AddPct(multiplier, itr->second);
1574 for (PlayerSpellMap::const_iterator itr = sp_list.begin(); itr != sp_list.end(); ++itr)
1579 if (!spellInfo || !spellInfo->
IsPassive())
1582 CastSpell(
this, itr->first,
true, NULL);
1587 for (PetSpellMap::const_iterator itr = pet->m_spells.begin(); itr != pet->m_spells.end(); ++itr)
1592 if (!spellInfo || !spellInfo->
IsPassive())
1595 CastSpell(
this, itr->first,
true, NULL);
1609 for (Unit::AuraApplicationMap::iterator itr = tAuras.begin(); itr != tAuras.end();)
1611 SpellInfo const* spellProto = (*itr).second->GetBase()->GetSpellInfo();
1627 if (itr->second->GetBase()->GetCasterGUID() == target->
GetGUID())
1628 auraStates |= (1 << (itr->first - 1));
1640 for (AuraEffectList::const_iterator j = stateAuras.begin(); j != stateAuras.end(); ++j)
1641 if ((*j)->IsAffectingSpell(spellProto))
1649 for (AuraStateAurasMap::const_iterator itr = range.first; itr != range.second; ++itr)
1650 if (itr->second->GetBase()->GetCasterGUID() == Caster->
GetGUID())
1669 if (limitduration > 0 && duration > limitduration)
1671 Unit const* target = tarGetOwner ? tarGetOwner :
this;
1672 Unit const* source = casterOwner ? casterOwner : caster;
1677 duration = limitduration;
1715 duration =
int32(duration * mod);
1724 if (i->DRGroup != group)
1744 SF_LOG_ERROR(
"entities.unit",
"attempt to access non-existing UnitMods in GetTotalAuraModValue()!");
1765 if (player->GetGroup())
1768 player->SetAuraUpdateMaskForRaid(slot);
1811 if (!(effMask & (1 << i)))
1815 effMask &= ~(1 << i);
1820 aura->ApplyForTargets();
1830 aura =
AddAura(spellId, target);
@ CREATURE_FLAG_EXTRA_TAUNT_DIMINISH
@ CREATURE_FLAG_EXTRA_ALL_DIMINISH
#define MAX_SPELL_EFFECTS
@ GROUP_UPDATE_FLAG_PET_AURAS
@ GROUP_UPDATE_FLAG_AURAS
#define SF_LOG_DEBUG(filterType__,...)
#define SF_LOG_ERROR(filterType__,...)
UNORDERED_MAP< uint32, PlayerSpell * > PlayerSpellMap
@ SPELL_ATTR7_DISPEL_CHARGES
@ SPELL_ATTR2_CAN_TARGET_DEAD
#define PER_CASTER_AURA_STATE_MASK
@ SPELL_ATTR3_DEATH_PERSISTENT
@ DIMINISHING_LEVEL_IMMUNE
@ DIMINISHING_LEVEL_TAUNT_IMMUNE
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_ABILITY_IGNORE_AURASTATE
@ SPELL_AURA_CAST_WHILE_WALKING
@ SPELL_AURA_CONTROL_VEHICLE
@ SPELL_AURA_PERIODIC_DAMAGE_PERCENT
@ SPELL_AURA_OVERRIDE_CLASS_SCRIPTS
@ AURA_EFFECT_HANDLE_STAT
@ SPELL_ATTR0_CU_ENCHANT_PROC
DiminishingReturnsType GetDiminishingReturnsGroupType(DiminishingGroup group)
@ AURA_INTERRUPT_FLAG_MOVE
@ AURA_INTERRUPT_FLAG_NOT_SEATED
@ AURA_REMOVE_BY_ENEMY_SPELL
@ CURRENT_CHANNELED_SPELL
std::list< std::pair< Aura *, uint8 > > DispelChargesList
void SetRemoveMode(AuraRemoveMode mode)
void _HandleEffect(uint8 effIndex, bool apply)
bool HasEffect(uint32 effect) const
uint32 GetEffectMask() const
AuraRemoveMode GetRemoveMode() const
AuraType GetAuraType() const
bool CanBeRecalculated() const
int32 GetMiscValue() const
int32 GetBaseAmount() const
virtual void _UnapplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
uint64 GetCasterGUID() const
const AuraApplication * GetApplicationOfTarget(uint64 guid) const
int32 GetMaxDuration() const
uint64 GetCastItemGUID() const
bool ModStackAmount(int32 num, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void CallScriptDispel(DispelInfo *dispelInfo)
ApplicationMap const & GetApplicationMap()
void SetStackAmount(uint8 num)
Unit * GetUnitOwner() const
bool HasEffect(uint8 effIndex) const
WorldObject * GetOwner() const
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
int32 GetDuration() const
void UnregisterSingleTarget()
bool IsDeathPersistent() const
bool HasEffectType(AuraType type) const
AuraEffect * GetEffect(uint8 effIndex) const
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 SetNeedClientUpdateForTargets() const
void SetDuration(int32 duration, bool withMods=false)
AuraObjectType GetType() const
uint8 GetStackAmount() const
SpellInfo const * GetSpellInfo() const
uint32 GetEffectMask() const
void HandleAuraSpecificMods(AuraApplication const *aurApp, Unit *caster, bool apply, bool onReapply)
void SetIsSingleTarget(bool val)
virtual void _ApplyForTarget(Unit *target, Unit *caster, AuraApplication *auraApp)
bool IsAppliedOnTarget(uint64 guid) const
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
void CallScriptAfterDispel(DispelInfo *dispelInfo)
void _Remove(AuraRemoveMode removeMode)
bool IsSingleTarget() const
void setDeathState(DeathState s) OVERRIDE
uint8 GetRemovedCharges() const
uint32 GetUInt32Value(uint16 index) const
uint32 GetGUIDLow() const
void SetFlag(uint16 index, uint32 newFlag)
void RemoveFlag(uint16 index, uint32 oldFlag)
bool HasFlag(uint16 index, uint32 flag) const
bool isControlled() const
void SetAuraUpdateMaskForRaid(uint8 slot)
void SetGroupUpdateFlag(uint32 flag)
PlayerSpellMap const & GetSpellMap() const
SpellEffectInfo Effects[MAX_SPELL_EFFECTS]
bool IsRequiringDeadTarget() const
bool IsDeathPersistent() const
bool IsStackableOnOneSlotWithDifferentCasters() const
uint32 GetDispelMask() const
bool IsMultiSlotAura() const
AuraStateType GetAuraState() const
bool IsPassiveStackableWithRanks() const
uint32 GetAllEffectsMechanicMask() const
bool HasAura(AuraType aura) const
uint32 AuraInterruptFlags
bool IsSingleTarget() const
bool HasAuraTypeWithAffectMask(AuraType auratype, SpellInfo const *affectedSpell) const
AuraApplication * GetAuraApplicationOfRankedSpell(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0, AuraApplication *except=NULL) const
std::pair< AuraApplicationMap::iterator, AuraApplicationMap::iterator > AuraApplicationMapBoundsNonConst
void RemoveOwnedAura(AuraMap::iterator &i, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Aura * _TryStackingOrRefreshingExistingAura(SpellInfo const *newAura, uint32 effMask, Unit *caster, int32 *baseAmount=NULL, Item *castItem=NULL, uint64 casterGUID=0)
AuraEffectList const & GetAuraEffectsByType(AuraType type) const
Spell * m_currentSpells[CURRENT_MAX_SPELL]
bool HasAuraState(AuraStateType flag, SpellInfo const *spellProto=NULL, Unit const *Caster=NULL) const
void _RemoveNoStackAurasDueToAura(Aura *aura)
int32 GetMaxPositiveAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask, const AuraEffect *except=NULL) const
bool HasAuraTypeWithValue(AuraType auratype, int32 value) const
bool HasAuraTypeWithCaster(AuraType auratype, uint64 caster) const
float GetTotalAuraModValue(UnitMods unitMod) const
void RemoveAurasWithMechanic(uint32 mechanic_mask, AuraRemoveMode removemode=AURA_REMOVE_BY_DEFAULT, uint32 except=0)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
void AddInterruptMask(uint32 mask)
Diminishing m_Diminishing
void _UnapplyAura(AuraApplicationMap::iterator &i, AuraRemoveMode removeMode)
bool HasAuraEffect(uint32 spellId, uint8 effIndex, uint64 caster=0) const
bool HasNegativeAuraWithAttribute(uint32 flag, uint64 guid=0) const
float m_auraModifiersGroup[UNIT_MOD_END][MODIFIER_TYPE_END]
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
std::list< Aura * > AuraList
void RemoveAurasWithInterruptFlags(uint32 flag, uint32 except=0)
void RemoveAurasDueToSpellBySteal(uint32 spellId, uint64 casterGUID, Unit *stealer)
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
int32 GetTotalAuraModifierByAffectMask(AuraType auratype, SpellInfo const *affectedSpell) const
std::multimap< uint32, AuraApplication * > AuraApplicationMap
virtual bool isBeingLoaded() const
void RemoveNotOwnSingleTargetAuras(uint32 newPhase=0, bool phaseid=false)
Aura * GetAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
void RemoveAllAurasExceptType(AuraType type)
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true)
void SetAuraStack(uint32 spellId, Unit *target, uint32 stack)
float ApplyDiminishingToDuration(DiminishingGroup group, int32 &duration, Unit *caster, DiminishingLevels Level, int32 limitduration)
float GetTotalAuraMultiplierByMiscValue(AuraType auratype, int32 misc_value) const
void UpdateInterruptMask()
Aura * AddAura(uint32 spellId, Unit *target)
void RemoveAurasDueToItemSpell(uint32 spellId, uint64 castItemGuid)
void RemoveAuraFromStack(uint32 spellId, uint64 casterGUID=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
std::pair< AuraMap::const_iterator, AuraMap::const_iterator > AuraMapBounds
bool HasAuraWithMechanic(uint32 mechanicMask) const
int32 GetTotalAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask) const
void RemoveAllAurasRequiringDeadTarget()
AuraEffect * GetAuraEffectOfRankedSpell(uint32 spellId, uint8 effIndex, uint64 casterGUID=0) const
AuraEffect * IsScriptOverriden(SpellInfo const *spell, int32 script) const
float GetTotalAuraMultiplierByAffectMask(AuraType auratype, SpellInfo const *affectedSpell) const
std::pair< AuraApplicationMap::const_iterator, AuraApplicationMap::const_iterator > AuraApplicationMapBounds
uint32 m_removedAurasCount
void RemoveAllAurasOnDeath()
AuraMap::iterator m_auraUpdateIterator
void RemoveAurasWithAttribute(uint32 flags)
void _DeleteRemovedAuras()
void _ApplyAura(AuraApplication *aurApp, uint32 effMask)
bool HasAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
std::pair< AuraStateAurasMap::const_iterator, AuraStateAurasMap::const_iterator > AuraStateAurasMapBounds
uint32 BuildAuraStateUpdateForTarget(Unit *target) const
bool IsDuringRemoveFromWorld() const
Unit * GetCharmerOrOwner() const
int32 GetMaxNegativeAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
void _ApplyAllAuraStatMods()
virtual bool IsImmunedToSpell(SpellInfo const *spellInfo) const
void RemoveAurasWithFamily(SpellFamilyNames family, uint32 familyFlag1, uint32 familyFlag2, uint32 familyFlag3, uint64 casterGUID)
AuraApplicationList m_interruptableAuras
void ModifyAuraState(AuraStateType flag, bool apply)
uint32 GetAuraCount(uint32 spellId) const
void UpdateAuraForGroup(uint8 slot)
int32 GetMaxPositiveAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
void _AddAura(UnitAura *aura, Unit *caster)
float GetTotalAuraMultiplier(AuraType auratype) const
std::multimap< uint32, Aura * > AuraMap
bool HasAuraType(AuraType auraType) const
int32 GetMaxPositiveAuraModifier(AuraType auratype) const
void _RemoveAllAuraStatMods()
uint32 GetDiseasesByCaster(uint64 casterGUID, bool remove=false)
void RemoveAreaAurasDueToLeaveWorld()
void RemoveAurasByType(AuraType auraType, uint64 casterGUID=0, Aura *except=NULL, bool negative=true, bool positive=true)
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, uint64 casterGUID=0) const
void DelayOwnedAuras(uint32 spellId, uint64 caster, int32 delaytime)
virtual bool IsImmunedToSpellEffect(SpellInfo const *spellInfo, uint32 index) const
AuraApplication * GetAuraApplication(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0, AuraApplication *except=NULL) const
AuraApplication * _CreateAuraApplication(Aura *aura, uint32 effMask)
bool IsFriendlyTo(Unit const *unit) const
std::pair< AuraMap::iterator, AuraMap::iterator > AuraMapBoundsNonConst
int32 GetMaxNegativeAuraModifier(AuraType auratype) const
AuraApplicationMap m_appliedAuras
int32 GetTotalAuraModifierByMiscValue(AuraType auratype, int32 misc_value) const
void RemoveAurasDueToSpellByDispel(uint32 spellId, uint32 dispellerSpellId, uint64 casterGUID, Unit *dispeller, uint8 chargesRemoved=1)
void _RegisterAuraEffect(AuraEffect *aurEff, bool apply)
float GetTotalAuraMultiplierByMiscMask(AuraType auratype, uint32 misc_mask) const
AuraEffect * GetDummyAuraEffect(SpellFamilyNames name, uint32 iconId, uint8 effIndex) const
int32 GetTotalAuraModifier(AuraType auratype) const
AuraApplicationMap & GetAppliedAuras()
std::list< AuraEffect * > AuraEffectList
int32 GetMaxNegativeAuraModifierByMiscMask(AuraType auratype, uint32 misc_mask) const
void GetDispellableAuraList(Unit *caster, uint32 dispelMask, DispelChargesList &dispelList)
void ApplyDiminishingAura(DiminishingGroup group, bool apply)
AuraStateAurasMap m_auraStateAuras
AuraList & GetSingleCastAuras()
AuraEffectList m_modAuras[TOTAL_AURAS]
void SetStandState(uint8 state)
void _ApplyAuraEffect(Aura *aura, uint8 effIndex)
AuraMap & GetOwnedAuras()
Aura * GetAuraOfRankedSpell(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
bool HasAuraTypeWithMiscvalue(AuraType auratype, int32 miscvalue) const
void RemoveMovementImpairingAuras()
Aura * GetOwnedAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0, Aura *except=NULL) const
bool HasNegativeAuraWithInterruptFlag(uint32 flag, uint64 guid=0) const
uint32 GetDoTsByCaster(uint64 casterGUID) const
bool IsPhased(WorldObject const *obj) const
bool InSamePhase(WorldObject const *obj) const
bool HasFlag(uint32 p1=0, uint32 p2=0, uint32 p3=0, uint32 p4=0) const
bool ShouldBindStackingAuraToCaster(bool canStackWithDifferentCasters, bool casterIsCreature, bool casterIsSummon, bool ownerIsSummon)