diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2018-02-11 22:52:28 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2018-02-12 00:21:26 -0300 |
| commit | 546a605bd0cd0e828def81e26697f1c116a3f1b7 (patch) | |
| tree | 92a8b481bd8e2615c54ea6242fd611e0dd42f3e9 /src/server/game/Spells/SpellMgr.cpp | |
| parent | 52873a7072ceb1f88d9caeefdda6084e6bb1d4af (diff) | |
Core/Spells: implement SPELLVALUE_CRIT_CHANCE and SPELL_ATTR4_INHERIT_CRIT_FROM_AURA
Closes #18813
Diffstat (limited to 'src/server/game/Spells/SpellMgr.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index a1e47697481..ec66d537640 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2841,7 +2841,7 @@ void SpellMgr::LoadSpellInfoCustomAttributes() spellInfo->_InitializeExplicitTargetMask(); } - // addition for binary spells, ommit spells triggering other spells + // addition for binary spells, omit spells triggering other spells for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { spellInfo = mSpellInfoMap[i]; @@ -2879,17 +2879,36 @@ void SpellMgr::LoadSpellInfoCustomAttributes() } // remove attribute from spells that can't crit + // and mark triggering spell (instead of triggered spell) for spells with SPELL_ATTR4_INHERIT_CRIT_FROM_AURA for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { spellInfo = mSpellInfoMap[i]; if (!spellInfo) continue; - if (!spellInfo->HasAttribute(SPELL_ATTR0_CU_CAN_CRIT)) - continue; - if (spellInfo->HasAttribute(SPELL_ATTR2_CANT_CRIT)) spellInfo->AttributesCu &= ~SPELL_ATTR0_CU_CAN_CRIT; + else if (spellInfo->HasAttribute(SPELL_ATTR4_INHERIT_CRIT_FROM_AURA)) + { + bool found = false; + for (uint8 j = 0; j < MAX_SPELL_EFFECTS; ++j) + { + switch (spellInfo->Effects[j].ApplyAuraName) + { + case SPELL_AURA_PERIODIC_TRIGGER_SPELL: + case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: + if (SpellInfo* triggerSpell = const_cast<SpellInfo*>(sSpellMgr->GetSpellInfo(spellInfo->Effects[j].TriggerSpell))) + if (triggerSpell->HasAttribute(SPELL_ATTR0_CU_CAN_CRIT)) + found = true; + break; + default: + continue; + } + } + + if (found) + spellInfo->AttributesCu |= SPELL_ATTR0_CU_CAN_CRIT; + } } TC_LOG_INFO("server.loading", ">> Loaded SpellInfo custom attributes in %u ms", GetMSTimeDiffToNow(oldMSTime)); @@ -4764,6 +4783,10 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->SpellFamilyFlags[0] |= 0x40; break; } + + // allows those to calculate proper crit chance, that needs to be passed on to triggered spell + if (spellInfo->HasAttribute(SPELL_ATTR4_INHERIT_CRIT_FROM_AURA) && spellInfo->DmgClass == SPELL_DAMAGE_CLASS_NONE) + spellInfo->DmgClass = SPELL_DAMAGE_CLASS_MAGIC; } if (SummonPropertiesEntry* properties = const_cast<SummonPropertiesEntry*>(sSummonPropertiesStore.LookupEntry(121))) |
