Core/Auras: Convert most rules from Aura::CanBeSaved to a custom spell attribute
This commit is contained in:
1 parent
86a06a5a5d
commit
ca034f4dbf
4 files changed
+47
-66
No files matched your search
@@ -0,0 +1,21 @@
|
||||
ALTER TABLE `spell_custom_attr`
|
||||
MODIFY `entry` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'spell id',
|
||||
MODIFY `attributes` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'SpellCustomAttributes';
|
||||
|
||||
DELETE FROM `spell_custom_attr` WHERE `entry` IN (44413, 40075, 55849, 96206, 81206, 81207, 81208, 81209, 68631, 89912, 67483, 67484, 48517, 48518, 94338);
|
||||
INSERT INTO `spell_custom_attr` (`entry`, `attributes`) VALUES
|
||||
(44413, 0x01000000),
|
||||
(40075, 0x01000000),
|
||||
(55849, 0x01000000),
|
||||
(96206, 0x01000000),
|
||||
(81206, 0x01000000),
|
||||
(81207, 0x01000000),
|
||||
(81208, 0x01000000),
|
||||
(81209, 0x01000000),
|
||||
(68631, 0x01000000),
|
||||
(89912, 0x01000000),
|
||||
(67483, 0x01000000),
|
||||
(67484, 0x01000000),
|
||||
(48517, 0x01000000),
|
||||
(48518, 0x01000000),
|
||||
(94338, 0x01000000);
|
||||
@@ -1117,71 +1117,11 @@ bool Aura::CanBeSaved() const
|
||||
return false;
|
||||
|
||||
// Check if aura is single target, not only spell info
|
||||
if (GetCasterGUID() != GetOwner()->GetGUID())
|
||||
{
|
||||
// owner == caster for area auras, check for possible bad data in DB
|
||||
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
{
|
||||
if (!GetSpellInfo()->Effects[i].IsEffect())
|
||||
continue;
|
||||
|
||||
if (GetSpellInfo()->Effects[i].IsTargetingArea() || GetSpellInfo()->Effects[i].IsAreaAuraEffect())
|
||||
return false;
|
||||
}
|
||||
|
||||
if (IsSingleTarget() || GetSpellInfo()->IsSingleTarget())
|
||||
if (GetCasterGUID() != GetOwner()->GetGUID() || IsSingleTarget())
|
||||
if (GetSpellInfo()->IsSingleTarget())
|
||||
return false;
|
||||
}
|
||||
|
||||
// don't save liquid auras
|
||||
if (GetSpellInfo()->HasAttribute(SPELL_ATTR0_CU_LIQUID_AURA))
|
||||
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))
|
||||
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 96206: // Nature's Bounty
|
||||
case 81206: // Chakra: Sanctuary
|
||||
case 81207: // Chakra: Sanctuary
|
||||
case 81208: // Chakra: Serenity
|
||||
case 81209: // Chakra: Chastise
|
||||
case 68631: // Curse of the Worgen
|
||||
case 89912: // Chakra Flow
|
||||
return false;
|
||||
}
|
||||
|
||||
// When a druid logins, he doesnt have either eclipse power, nor the marker auras, nor the eclipse buffs. Dont save them.
|
||||
if (GetId() == 67483 || GetId() == 67484 || GetId() == 48517 || GetId() == 48518 || GetId() == 94338)
|
||||
if (GetSpellInfo()->HasAttribute(SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED))
|
||||
return false;
|
||||
|
||||
// don't save auras removed by proc system
|
||||
@@ -1189,7 +1129,7 @@ bool Aura::CanBeSaved() const
|
||||
return false;
|
||||
|
||||
// don't save permanent auras triggered by items, they'll be recasted on login if necessary
|
||||
if (GetCastItemGUID() && IsPermanent())
|
||||
if (!GetCastItemGUID().IsEmpty() && IsPermanent())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
||||
@@ -203,7 +203,9 @@ enum SpellCustomAttributes
|
||||
SPELL_ATTR0_CU_ALLOW_INFLIGHT_TARGET = 0x00040000,
|
||||
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,
|
||||
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
|
||||
};
|
||||
|
||||
@@ -2704,6 +2704,20 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
|
||||
break;
|
||||
}
|
||||
|
||||
switch (spellInfo->Effects[j].ApplyAuraName)
|
||||
{
|
||||
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_CHARM:
|
||||
case SPELL_AURA_AOE_CHARM:
|
||||
case SPELL_AURA_CONVERT_RUNE:
|
||||
spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (spellInfo->Effects[j].Effect)
|
||||
{
|
||||
case SPELL_EFFECT_SCHOOL_DAMAGE:
|
||||
@@ -2887,6 +2901,10 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
|
||||
}
|
||||
|
||||
spellInfo->_InitializeExplicitTargetMask();
|
||||
|
||||
// Saving to DB happens before removing from world - skip saving these auras
|
||||
if (spellInfo->HasAuraInterruptFlag(SpellAuraInterruptFlags::LeaveWorld))
|
||||
spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED;
|
||||
}
|
||||
|
||||
// addition for binary spells, omit spells triggering other spells
|
||||
@@ -2945,7 +2963,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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user