diff options
| author | Shauren <shauren.trinity@gmail.com> | 2022-01-11 19:05:35 +0100 | 
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-01-11 19:05:35 +0100 | 
| commit | 415aaae7f2fa3a5e09a51b0355120bf4138cde41 (patch) | |
| tree | 28d9edc672d0d1abd628f4b5647df9f208183737 /src | |
| parent | 4772b55368e43002b32b598812bffa4c8877504e (diff) | |
Core/Spells: Validate spell_proc.AttributesMask on startup
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.h | 7 | 
2 files changed, 12 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 5599e0cea39..6860f0e9347 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -1626,6 +1626,11 @@ void SpellMgr::LoadSpellProcs()                      if (!found)                          TC_LOG_ERROR("sql.sql", "The `spell_proc` table entry for spellId %u has Attribute PROC_ATTR_REQ_SPELLMOD, but spell has no spell mods. Proc will not be triggered", spellInfo->Id);                  } +                if (procEntry.AttributesMask & ~PROC_ATTR_ALL_ALLOWED) +                { +                    TC_LOG_ERROR("sql.sql", "The `spell_proc` table entry for spellId %u has `AttributesMask` value specifying invalid attributes 0x%02X.", spellInfo->Id, procEntry.AttributesMask & ~PROC_ATTR_ALL_ALLOWED); +                    procEntry.AttributesMask &= PROC_ATTR_ALL_ALLOWED; +                }                  mSpellProcMap[{ spellInfo->Id, spellInfo->Difficulty }] = procEntry; diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 00b93cb18fd..85bf5367a2d 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -272,6 +272,13 @@ enum ProcAttributes      PROC_ATTR_REDUCE_PROC_60            = 0x0000080  // aura should have a reduced chance to proc if level of proc Actor > 60  }; +#define PROC_ATTR_ALL_ALLOWED (PROC_ATTR_REQ_EXP_OR_HONOR       | \ +                               PROC_ATTR_TRIGGERED_CAN_PROC     | \ +                               PROC_ATTR_REQ_POWER_COST         | \ +                               PROC_ATTR_REQ_SPELLMOD           | \ +                               PROC_ATTR_USE_STACKS_FOR_CHARGES | \ +                               PROC_ATTR_REDUCE_PROC_60) +  struct SpellProcEntry  {      uint32 SchoolMask;       // if nonzero - bitmask for matching proc condition based on spell's school  | 
