aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Pet.cpp13
-rw-r--r--src/game/Player.cpp17
-rw-r--r--src/game/SpellAuras.cpp2
3 files changed, 17 insertions, 15 deletions
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp
index 1d45ed3a7fd..e4c10f1b3d9 100644
--- a/src/game/Pet.cpp
+++ b/src/game/Pet.cpp
@@ -1148,15 +1148,14 @@ void Pet::_SaveAuras()
{
// skip all auras from spell that apply at cast SPELL_AURA_MOD_SHAPESHIFT or pet area auras.
// do not save single target auras (unless they were cast by the player)
- if (itr->second->IsPassive()
- || (itr->second->GetCasterGUID() != GetGUID() && itr->second->IsSingleTarget()))
+ if (itr->second->IsPassive() || itr->second->IsAuraType(SPELL_AURA_MOD_STEALTH))
continue;
- SpellEntry const *spellInfo = itr->second->GetSpellProto();
- for (uint8 i=0;i<MAX_SPELL_EFFECTS;++i)
- if (spellInfo->EffectApplyAuraName[i] == SPELL_AURA_MOD_STEALTH ||
- spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_OWNER ||
- spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_PET )
+ bool isCaster = itr->second->GetCasterGUID() == GetGUID();
+ if (!isCaster)
+ if (itr->second->IsSingleTarget()
+ || itr->second->IsAreaAura())
continue;
+
uint32 amounts[MAX_SPELL_EFFECTS];
for (uint8 i=0;i<MAX_SPELL_EFFECTS;++i)
{
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 4b60def2e4a..5798c85e01d 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -15841,17 +15841,20 @@ void Player::_SaveAuras()
AuraMap const& auras = GetAuras();
for(AuraMap::const_iterator itr = auras.begin(); itr !=auras.end() ; ++itr)
{
- // skip all auras from spell that apply at cast SPELL_AURA_MOD_SHAPESHIFT or pet area auras.
- // do not save single target auras (unless they were cast by the player)
+ // skip:
+ // area auras or single cast auras casted by other unit
+ // passive auras and stances
if (itr->second->IsPassive()
- || (itr->second->GetCasterGUID() != GetGUID() && itr->second->IsSingleTarget())
+ || itr->second->IsAuraType(SPELL_AURA_MOD_SHAPESHIFT)
+ || itr->second->IsAuraType(SPELL_AURA_MOD_STEALTH)
|| itr->second->IsRemovedOnShapeLost())
continue;
- SpellEntry const *spellInfo = itr->second->GetSpellProto();
- for (uint8 i=0;i<MAX_SPELL_EFFECTS;++i)
- if (spellInfo->Effect[i] == SPELL_AURA_MOD_SHAPESHIFT ||
- spellInfo->Effect[i] == SPELL_AURA_MOD_STEALTH )
+ bool isCaster = itr->second->GetCasterGUID() == GetGUID();
+ if (!isCaster)
+ if (itr->second->IsSingleTarget()
+ || itr->second->IsAreaAura())
continue;
+
int32 amounts[MAX_SPELL_EFFECTS];
for (uint8 i=0;i<MAX_SPELL_EFFECTS;++i)
{
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 1df03bd6b73..462a609e9ff 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -415,7 +415,7 @@ m_auraSlot(MAX_AURAS), m_auraLevel(1), m_procCharges(0), m_stackAmount(1),m_aura
m_partAuras[i]=CreateAuraEffect(this, i, NULL , caster);
// correct flags if aura couldn't be created
if (!m_partAuras[i])
- m_auraFlags &= uint8(~(uint8(1) << i));
+ m_auraFlags &= uint8(~(1<< i));
}
else
{