mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Spells: Moved loading aoe target caps out of SpellMgr::LoadSpellInfoCorrections
This commit is contained in:
@@ -3483,38 +3483,53 @@ void SpellInfo::_LoadImmunityInfo()
|
||||
}
|
||||
}
|
||||
|
||||
void SpellInfo::_LoadSqrtTargetLimit(int32 maxTargets, int32 numNonDiminishedTargets, Optional<SpellEffIndex> maxTargetsEffectValueHolder,
|
||||
Optional<SpellEffIndex> numNonDiminishedTargetsEffectValueHolder)
|
||||
void SpellInfo::_LoadSqrtTargetLimit(int32 maxTargets, int32 numNonDiminishedTargets,
|
||||
Optional<uint32> maxTargetsValueHolderSpell, Optional<SpellEffIndex> maxTargetsValueHolderEffect,
|
||||
Optional<uint32> numNonDiminishedTargetsValueHolderSpell, Optional<SpellEffIndex> numNonDiminishedTargetsValueHolderEffect)
|
||||
{
|
||||
SqrtDamageAndHealingDiminishing.MaxTargets = maxTargets;
|
||||
SqrtDamageAndHealingDiminishing.NumNonDiminishedTargets = numNonDiminishedTargets;
|
||||
|
||||
if (maxTargetsEffectValueHolder)
|
||||
if (maxTargetsValueHolderEffect)
|
||||
{
|
||||
if (maxTargetsEffectValueHolder < GetEffects().size())
|
||||
SpellInfo const* maxTargetValueHolder = this;
|
||||
if (maxTargetsValueHolderSpell)
|
||||
maxTargetValueHolder = sSpellMgr->GetSpellInfo(*maxTargetsValueHolderSpell, Difficulty);
|
||||
|
||||
if (!maxTargetValueHolder)
|
||||
TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(maxTargets): Spell {} does not exist", maxTargetsValueHolderSpell);
|
||||
else if (maxTargetsValueHolderEffect >= maxTargetValueHolder->GetEffects().size())
|
||||
TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(maxTargets): Spell {} does not have effect {}",
|
||||
maxTargetValueHolder->Id, AsUnderlyingType(*maxTargetsValueHolderEffect));
|
||||
else
|
||||
{
|
||||
SpellEffectInfo const& valueHolder = GetEffect(*maxTargetsEffectValueHolder);
|
||||
SpellEffectInfo const& valueHolder = maxTargetValueHolder->GetEffect(*maxTargetsValueHolderEffect);
|
||||
int32 expectedValue = valueHolder.CalcBaseValue(nullptr, nullptr, 0, -1);
|
||||
if (maxTargets != expectedValue)
|
||||
TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(maxTargets): Spell {} has different value in effect {} than expected, recheck target caps (expected {}, got {})",
|
||||
Id, AsUnderlyingType(*maxTargetsEffectValueHolder), maxTargets, expectedValue);
|
||||
maxTargetValueHolder->Id, AsUnderlyingType(*maxTargetsValueHolderEffect), maxTargets, expectedValue);
|
||||
}
|
||||
else
|
||||
TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(maxTargets): Spell {} does not have effect {}", Id, AsUnderlyingType(*maxTargetsEffectValueHolder));
|
||||
}
|
||||
|
||||
if (numNonDiminishedTargetsEffectValueHolder)
|
||||
if (numNonDiminishedTargetsValueHolderEffect)
|
||||
{
|
||||
if (numNonDiminishedTargetsEffectValueHolder < GetEffects().size())
|
||||
SpellInfo const* numNonDiminishedTargetsValueHolder = this;
|
||||
if (numNonDiminishedTargetsValueHolderSpell)
|
||||
numNonDiminishedTargetsValueHolder = sSpellMgr->GetSpellInfo(*numNonDiminishedTargetsValueHolderSpell, Difficulty);
|
||||
|
||||
if (!numNonDiminishedTargetsValueHolder)
|
||||
TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(numNonDiminishedTargets): Spell {} does not exist", maxTargetsValueHolderSpell);
|
||||
else if (numNonDiminishedTargetsValueHolderEffect >= numNonDiminishedTargetsValueHolder->GetEffects().size())
|
||||
TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(numNonDiminishedTargets): Spell {} does not have effect {}",
|
||||
numNonDiminishedTargetsValueHolder->Id, AsUnderlyingType(*maxTargetsValueHolderEffect));
|
||||
else
|
||||
{
|
||||
SpellEffectInfo const& valueHolder = GetEffect(*numNonDiminishedTargetsEffectValueHolder);
|
||||
SpellEffectInfo const& valueHolder = numNonDiminishedTargetsValueHolder->GetEffect(*numNonDiminishedTargetsValueHolderEffect);
|
||||
int32 expectedValue = valueHolder.CalcBaseValue(nullptr, nullptr, 0, -1);
|
||||
if (numNonDiminishedTargets != expectedValue)
|
||||
TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(numNonDiminishedTargets): Spell {} has different value in effect {} than expected, recheck target caps (expected {}, got {})",
|
||||
Id, AsUnderlyingType(*numNonDiminishedTargetsEffectValueHolder), numNonDiminishedTargets, expectedValue);
|
||||
numNonDiminishedTargetsValueHolder->Id, AsUnderlyingType(*numNonDiminishedTargetsValueHolderEffect), numNonDiminishedTargets, expectedValue);
|
||||
}
|
||||
else
|
||||
TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(numNonDiminishedTargets): Spell {} does not have effect {}", Id, AsUnderlyingType(*numNonDiminishedTargetsEffectValueHolder));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -608,8 +608,8 @@ class TC_GAME_API SpellInfo
|
||||
void _LoadSpellDiminishInfo();
|
||||
void _LoadImmunityInfo();
|
||||
void _LoadSqrtTargetLimit(int32 maxTargets, int32 numNonDiminishedTargets,
|
||||
Optional<SpellEffIndex> maxTargetsEffectValueHolder,
|
||||
Optional<SpellEffIndex> numNonDiminishedTargetsEffectValueHolder);
|
||||
Optional<uint32> maxTargetsValueHolderSpell, Optional<SpellEffIndex> maxTargetsValueHolderEffect,
|
||||
Optional<uint32> numNonDiminishedTargetsValueHolderSpell, Optional<SpellEffIndex> numNonDiminishedTargetsValueHolderEffect);
|
||||
|
||||
// unloading helpers
|
||||
void _UnloadImplicitTargetConditionLists();
|
||||
|
||||
@@ -5065,12 +5065,6 @@ void SpellMgr::LoadSpellInfoCorrections()
|
||||
spellInfo->AttributesCu |= SPELL_ATTR0_CU_AURA_CANNOT_BE_SAVED;
|
||||
});
|
||||
|
||||
// Eye Beam
|
||||
ApplySpellFix({ 198030 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
spellInfo->_LoadSqrtTargetLimit(5, 0, {}, {});
|
||||
});
|
||||
|
||||
// Collective Anguish channel hack (triggered by another channel)
|
||||
ApplySpellFix({ 391057, 393831 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
@@ -5233,6 +5227,25 @@ void SpellMgr::LoadSpellInfoImmunities()
|
||||
TC_LOG_INFO("server.loading", ">> Loaded SpellInfo immunity infos in {} ms", GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
void SpellMgr::LoadSpellInfoTargetCaps()
|
||||
{
|
||||
uint32 oldMSTime = getMSTime();
|
||||
|
||||
// Eye Beam
|
||||
ApplySpellFix({ 198030 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
spellInfo->_LoadSqrtTargetLimit(5, 0, 198013, EFFECT_4, {}, {});
|
||||
});
|
||||
|
||||
// Volatile Agony
|
||||
ApplySpellFix({ 453035 }, [](SpellInfo* spellInfo)
|
||||
{
|
||||
spellInfo->_LoadSqrtTargetLimit(8, 0, 453034, EFFECT_1, {}, {});
|
||||
});
|
||||
|
||||
TC_LOG_INFO("server.loading", ">> Loaded SpellInfo target caps in {} ms", GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
void SpellMgr::LoadPetFamilySpellsStore()
|
||||
{
|
||||
std::unordered_map<uint32, SpellLevelsEntry const*> levelsBySpell;
|
||||
|
||||
@@ -827,6 +827,7 @@ class TC_GAME_API SpellMgr
|
||||
void LoadSpellInfoSpellSpecificAndAuraState();
|
||||
void LoadSpellInfoDiminishing();
|
||||
void LoadSpellInfoImmunities();
|
||||
void LoadSpellInfoTargetCaps();
|
||||
void LoadSpellTotemModel();
|
||||
|
||||
private:
|
||||
|
||||
@@ -1884,6 +1884,9 @@ bool World::SetInitialWorldSettings()
|
||||
TC_LOG_INFO("server.loading", "Loading SpellInfo immunity infos...");
|
||||
sSpellMgr->LoadSpellInfoImmunities();
|
||||
|
||||
TC_LOG_INFO("server.loading", "Loading SpellInfo target caps...");
|
||||
sSpellMgr->LoadSpellInfoTargetCaps();
|
||||
|
||||
TC_LOG_INFO("server.loading", "Loading PetFamilySpellsStore Data...");
|
||||
sSpellMgr->LoadPetFamilySpellsStore();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user