diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Pet.cpp | 13 | ||||
-rw-r--r-- | src/game/Player.cpp | 17 | ||||
-rw-r--r-- | src/game/SpellAuras.cpp | 2 |
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 { |