From 2649ca2d652b6ab7e186667d8988db6a90e87c46 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 26 Nov 2024 12:17:02 -0300 Subject: [PATCH] feat(Core/Spells): Allow modifying MiscValues during cast (#20731) --- src/server/game/Spells/Spell.cpp | 13 +++++++++++++ src/server/game/Spells/Spell.h | 1 + src/server/game/Spells/SpellDefines.h | 5 ++++- src/server/game/Spells/SpellEffects.cpp | 4 ++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 8e8bbf6e3..932704c01 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -556,7 +556,11 @@ void SpellCastTargets::OutDebug() const SpellValue::SpellValue(SpellInfo const* proto) { for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) + { EffectBasePoints[i] = proto->Effects[i].BasePoints; + MiscVal[i] = 0; + } + MaxAffectedTargets = proto->MaxAffectedTargets; RadiusMod = 1.0f; AuraStackAmount = 1; @@ -8458,6 +8462,15 @@ void Spell::SetSpellValue(SpellValueMod mod, int32 value) case SPELLVALUE_FORCED_CRIT_RESULT: m_spellValue->ForcedCritResult = (bool)value; break; + case SPELLVALUE_MISCVALUE0: + m_spellValue->MiscVal[0] = value; + break; + case SPELLVALUE_MISCVALUE1: + m_spellValue->MiscVal[1] = value; + break; + case SPELLVALUE_MISCVALUE2: + m_spellValue->MiscVal[2] = value; + break; } } diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 45ae57194..4d44af2e4 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -218,6 +218,7 @@ struct SpellValue uint8 AuraStackAmount; int32 AuraDuration; bool ForcedCritResult; + uint32 MiscVal[MAX_SPELL_EFFECTS]; }; enum SpellState diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 4da855467..22caee957 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -117,7 +117,10 @@ enum SpellValueMod SPELLVALUE_MAX_TARGETS, SPELLVALUE_AURA_STACK, SPELLVALUE_AURA_DURATION, - SPELLVALUE_FORCED_CRIT_RESULT + SPELLVALUE_FORCED_CRIT_RESULT, + SPELLVALUE_MISCVALUE0, + SPELLVALUE_MISCVALUE1, + SPELLVALUE_MISCVALUE2, }; enum SpellFacingFlags diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index ace8a1b51..4e8e9e507 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2332,6 +2332,10 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) return; uint32 entry = m_spellInfo->Effects[effIndex].MiscValue; + + if (m_spellValue->MiscVal[effIndex]) + entry = m_spellValue->MiscVal[effIndex]; + if (!entry) return;