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 /src | |
| parent | e7f5df04be4e568bf3665c48388c9648a014982f (diff) | |
Core/Spells: Replaced assert with startup error log
(cherry picked from commit 8043b71708e2efd380c7a1f6a738a1e9e497706d)
Diffstat (limited to 'src')
| -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; | 
