diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 41 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.h | 3 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 19 |
3 files changed, 21 insertions, 42 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 9225876eb9d..7a0b01a65b6 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1113,48 +1113,9 @@ bool Aura::CanBeSaved() const return false; } - // don't save liquid auras - if (GetSpellInfo()->HasAttribute(SPELL_ATTR0_CU_LIQUID_AURA)) + if (GetSpellInfo()->HasAttribute(SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED)) return false; - // Can't be saved - aura handler relies on calculated amount and changes it - if (HasEffectType(SPELL_AURA_CONVERT_RUNE)) - return false; - - // No point in saving this, since the stable dialog can't be open on aura load anyway. - if (HasEffectType(SPELL_AURA_OPEN_STABLE)) - return false; - - // Can't save vehicle auras, it requires both caster & target to be in world - if (HasEffectType(SPELL_AURA_CONTROL_VEHICLE)) - return false; - - // do not save bind sight auras - if (HasEffectType(SPELL_AURA_BIND_SIGHT)) - return false; - - // no charming auras (taking direct control) - if (HasEffectType(SPELL_AURA_MOD_POSSESS) || HasEffectType(SPELL_AURA_MOD_POSSESS_PET)) - return false; - - // no charming auras can be saved - if (HasEffectType(SPELL_AURA_MOD_CHARM) || HasEffectType(SPELL_AURA_AOE_CHARM)) - return false; - - // Incanter's Absorbtion - considering the minimal duration and problems with aura stacking - // we skip saving this aura - // Also for some reason other auras put as MultiSlot crash core on keeping them after restart, - // so put here only these for which you are sure they get removed - switch (GetId()) - { - case 44413: // Incanter's Absorption - case 40075: // Fel Flak Fire - case 55849: // Power Spark - case 73822: // Hellscream's Warsong - case 73828: // Strength of Wrynn - return false; - } - // don't save auras removed by proc system if (IsUsingCharges() && !GetCharges()) return false; diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index b9ec5514adc..b837f9b3efc 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -198,8 +198,9 @@ enum SpellCustomAttributes SPELL_ATTR0_CU_NEEDS_AMMO_DATA = 0x00080000, SPELL_ATTR0_CU_BINARY_SPELL = 0x00100000, SPELL_ATTR0_CU_SCHOOLMASK_NORMAL_WITH_MAGIC = 0x00200000, - SPELL_ATTR0_CU_LIQUID_AURA = 0x00400000, + SPELL_ATTR0_CU_DEPRECATED_LIQUID_AURA = 0x00400000, // DO NOT REUSE SPELL_ATTR0_CU_IS_TALENT = 0x00800000, // reserved for master branch + SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED = 0x01000000, SPELL_ATTR0_CU_NEGATIVE = SPELL_ATTR0_CU_NEGATIVE_EFF0 | SPELL_ATTR0_CU_NEGATIVE_EFF1 | SPELL_ATTR0_CU_NEGATIVE_EFF2 }; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 404b9d4fac6..ecb2a67010d 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2673,6 +2673,23 @@ void SpellMgr::LoadSpellInfoCustomAttributes() break; } + switch (spellEffectInfo.ApplyAuraName) + { + case SPELL_AURA_CONVERT_RUNE: // Can't be saved - aura handler relies on calculated amount and changes it + case SPELL_AURA_OPEN_STABLE: // No point in saving this, since the stable dialog can't be open on aura load anyway. + // Auras that require both caster & target to be in world cannot be saved + case SPELL_AURA_CONTROL_VEHICLE: + case SPELL_AURA_BIND_SIGHT: + case SPELL_AURA_MOD_POSSESS: + case SPELL_AURA_MOD_POSSESS_PET: + case SPELL_AURA_MOD_CHARM: + case SPELL_AURA_AOE_CHARM: + spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED; + break; + default: + break; + } + switch (spellEffectInfo.Effect) { case SPELL_EFFECT_SCHOOL_DAMAGE: @@ -2949,7 +2966,7 @@ void SpellMgr::LoadSpellInfoCustomAttributes() { if (uint32 spellId = liquid->SpellID) if (SpellInfo* spellInfo = _GetSpellInfo(spellId)) - spellInfo->AttributesCu |= SPELL_ATTR0_CU_LIQUID_AURA; + spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED; } TC_LOG_INFO("server.loading", ">> Loaded SpellInfo custom attributes in %u ms", GetMSTimeDiffToNow(oldMSTime)); |