chore(Core/Auras): Clean up Aura::CanBeSaved() (#9343)

This commit is contained in:
Kitzunu
2021-11-30 17:03:04 +01:00
committed by GitHub
parent d77d86e76d
commit f9337497d8
4 changed files with 29 additions and 42 deletions

View File

@@ -0,0 +1,5 @@
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1637861417456909900');
SET @flag := 268435456;
UPDATE `spell_custom_attr` SET `attributes` = 16777216 WHERE `spell_id` = (SELECT `spell_id` WHERE `attributes` & @flag = @flag);

View File

@@ -1062,7 +1062,7 @@ bool Aura::CanBeSaved() const
return true;
}
if (spellInfo->HasAttribute(SPELL_ATTR0_CU_REJECT_AURA_SAVING))
if (spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED))
{
return false;
}
@@ -1084,42 +1084,6 @@ bool Aura::CanBeSaved() const
return false;
}
// Xinef: Dont save control vehicle auras - caster may not exist
if (HasEffectType(SPELL_AURA_CONTROL_VEHICLE))
{
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;
}
// xinef: do not save bind sight auras!
if (HasEffectType(SPELL_AURA_BIND_SIGHT))
{
return false;
}
// xinef: no charming auras (taking direct control)
if (HasEffectType(SPELL_AURA_MOD_POSSESS) || HasEffectType(SPELL_AURA_MOD_POSSESS_PET))
{
return false;
}
// xinef: no charming auras can be saved
if (HasEffectType(SPELL_AURA_MOD_CHARM) || HasEffectType(SPELL_AURA_AOE_CHARM))
{
return false;
}
// don't save auras removed by proc system
if (IsUsingCharges() && !GetCharges())
{

View File

@@ -197,12 +197,13 @@ enum SpellCustomAttributes
SPELL_ATTR0_CU_NO_POSITIVE_TAKEN_BONUS = 0x00200000,
SPELL_ATTR0_CU_SINGLE_AURA_STACK = 0x00400000, // pussywizard
SPELL_ATTR0_CU_SCHOOLMASK_NORMAL_WITH_MAGIC = 0x00800000,
SPELL_ATTR0_CU_ENCOUNTER_REWARD = 0x01000000, // pussywizard
SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED = 0x01000000,
SPELL_ATTR0_CU_POSITIVE_EFF0 = 0x02000000,
SPELL_ATTR0_CU_POSITIVE_EFF1 = 0x04000000,
SPELL_ATTR0_CU_POSITIVE_EFF2 = 0x08000000,
SPELL_ATTR0_CU_REJECT_AURA_SAVING = 0x10000000,
// unused = 0x10000000,
SPELL_ATTR0_CU_FORCE_AURA_SAVING = 0x20000800,
SPELL_ATTR0_CU_ENCOUNTER_REWARD = 0x40000000, // pussywizard
SPELL_ATTR0_CU_NEGATIVE = SPELL_ATTR0_CU_NEGATIVE_EFF0 | SPELL_ATTR0_CU_NEGATIVE_EFF1 | SPELL_ATTR0_CU_NEGATIVE_EFF2,
SPELL_ATTR0_CU_POSITIVE = SPELL_ATTR0_CU_POSITIVE_EFF0 | SPELL_ATTR0_CU_POSITIVE_EFF1 | SPELL_ATTR0_CU_POSITIVE_EFF2,

View File

@@ -2806,10 +2806,10 @@ void SpellMgr::LoadSpellCustomAttr()
}
}
if ((attributes & SPELL_ATTR0_CU_FORCE_AURA_SAVING) && (attributes & SPELL_ATTR0_CU_REJECT_AURA_SAVING))
if ((attributes & SPELL_ATTR0_CU_FORCE_AURA_SAVING) && (attributes & SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED))
{
LOG_ERROR("sql.sql", "Table `spell_custom_attr` attribute1 field has attributes SPELL_ATTR1_CU_FORCE_AURA_SAVING and SPELL_ATTR1_CU_REJECT_AURA_SAVING which cannot stack for spell %u. Both attributes will get applied", spellId);
attributes &= ~(SPELL_ATTR0_CU_FORCE_AURA_SAVING | SPELL_ATTR0_CU_REJECT_AURA_SAVING);
LOG_ERROR("sql.sql", "Table `spell_custom_attr` attribute1 field has attributes SPELL_ATTR1_CU_FORCE_AURA_SAVING and SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED which cannot stack for spell %u. Both attributes will be ignored.", spellId);
attributes &= ~(SPELL_ATTR0_CU_FORCE_AURA_SAVING | SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED);
}
spellInfo->AttributesCu |= attributes;
@@ -2878,6 +2878,23 @@ void SpellMgr::LoadSpellCustomAttr()
break;
}
switch (spellInfo->Effects[j].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 (spellInfo->Effects[j].ApplyAuraName)
{
case SPELL_AURA_MOD_POSSESS: