diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-06-17 18:16:59 +0200 |
|---|---|---|
| committer | Ovahlord <dreadkiller@gmx.de> | 2024-06-20 01:21:41 +0200 |
| commit | 30bca20e0067064b771ebd9d8219de7ec0f88b67 (patch) | |
| tree | 63a061373c55dffa65bf1fb67b065ec8a6e9e6d8 | |
| parent | e7f5df04be4e568bf3665c48388c9648a014982f (diff) | |
Core/Spells: Replaced assert with startup error log
(cherry picked from commit 8043b71708e2efd380c7a1f6a738a1e9e497706d)
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 6 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 4890f570df6..70dd3371866 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -42,6 +42,7 @@ #include "Spell.h" #include "SpellHistory.h" #include "SpellMgr.h" +#include "SpellScript.h" #include "ThreatManager.h" #include "Unit.h" #include "Util.h" @@ -1015,6 +1016,32 @@ void AuraEffect::CalculateSpellMod() break; } GetBase()->CallScriptEffectCalcSpellModHandlers(this, m_spellmod); + + // validate modifier + if (m_spellmod) + { + bool isValid = true; + auto logErrors = [&] { return std::ranges::any_of(GetBase()->m_loadedScripts, [](AuraScript const* script) { return script->DoEffectCalcSpellMod.size() > 0; }); }; + if (AsUnderlyingType(m_spellmod->op) >= MAX_SPELLMOD) + { + isValid = false; + if (logErrors()) + TC_LOG_ERROR("spells.aura.effect", "Aura script for spell id {} created invalid spell modifier op {}", GetId(), AsUnderlyingType(m_spellmod->op)); + } + + if (m_spellmod->type >= SPELLMOD_END) + { + isValid = false; + if (logErrors()) + TC_LOG_ERROR("spells.aura.effect", "Aura script for spell id {} created invalid spell modifier type {}", GetId(), AsUnderlyingType(m_spellmod->type)); + } + + if (!isValid) + { + delete m_spellmod; + m_spellmod = nullptr; + } + } } void AuraEffect::ChangeAmount(int32 newAmount, bool mark, bool onStackOrReapply, AuraEffect const* triggeredBy /* = nullptr */) diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index ac2568f00f3..d79ae4627df 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2523,7 +2523,11 @@ void SpellMgr::LoadSpellInfoStore() case SPELL_AURA_ADD_PCT_MODIFIER: case SPELL_AURA_ADD_PCT_MODIFIER_BY_SPELL_LABEL: case SPELL_AURA_ADD_FLAT_MODIFIER_BY_SPELL_LABEL: - ASSERT(effect->EffectMiscValue[0] < MAX_SPELLMOD, "MAX_SPELLMOD must be at least %d", effect->EffectMiscValue[0] + 1); + if (effect->EffectMiscValue[0] >= MAX_SPELLMOD) + { + TC_LOG_ERROR("server.loading", "Invalid spell modifier type {} found on spell {} effect index {}, consider increasing MAX_SPELLMOD", + effect->EffectMiscValue[0], effect->SpellID, effect->EffectIndex); + } break; default: break; |
