From f658c8ea0cc659a6e01fdbfb2949f0bba5b1ae1d Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Mon, 19 Sep 2022 05:52:37 +0200 Subject: [PATCH] =?UTF-8?q?fix(Core/Spells):=20Fingers=20of=20Frost=20shou?= =?UTF-8?q?ld=20always=20proc=20alongside=20with=20=E2=80=A6=20(#13008)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ...Frostbite. --- src/server/game/Spells/Auras/SpellAuras.cpp | 20 ++++++++++++++++++++ src/server/game/Spells/Spell.cpp | 7 +++++-- src/server/game/Spells/Spell.h | 2 +- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 822fa289a..17cce5aa3 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1450,6 +1450,26 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b else target->AddAura(74396, target); } + break; + case 12494: // Frostbite, synchronise with Fingers of Frost + { + // Find Fingers of Frost + if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_PROC_TRIGGER_SPELL, SPELLFAMILY_MAGE, 2947, EFFECT_0)) + { + if (SpellInfo const* triggeringSpellInfo = GetTriggeredByAuraSpellInfo()) + { + uint8 fbRank = sSpellMgr->GetSpellRank(triggeringSpellInfo->Id); + uint8 fofRank = sSpellMgr->GetSpellRank(aurEff->GetId()); + uint8 chance = uint8(std::ceil(fofRank * fbRank * 16.6f)); + + if (roll_chance_i(chance)) + { + caster->CastSpell(caster, aurEff->GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, true); + } + } + } + break; + } default: break; } diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 18a8c30ec..a2eaf13e7 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3278,12 +3278,14 @@ void Spell::DoTriggersOnSpellHit(Unit* unit, uint8 effMask) } else { - m_caster->CastCustomSpell(i->triggeredSpell->Id, SPELLVALUE_AURA_DURATION, _duration, unit, true); + AuraEffect const* triggeringAuraEffect = m_caster->GetAuraEffect(i->triggeredByAura->Id, i->triggeredByEffIdx); + m_caster->CastCustomSpell(i->triggeredSpell->Id, SPELLVALUE_AURA_DURATION, _duration, unit, true, nullptr, triggeringAuraEffect); } } else { - m_caster->CastSpell(unit, i->triggeredSpell, true); + AuraEffect const* triggeringAuraEffect = m_caster->GetAuraEffect(i->triggeredByAura->Id, i->triggeredByEffIdx); + m_caster->CastSpell(unit, i->triggeredSpell, true, nullptr, triggeringAuraEffect); } } } @@ -8766,6 +8768,7 @@ void Spell::PrepareTriggersExecutedOnHit() HitTriggerSpell spellTriggerInfo; spellTriggerInfo.triggeredSpell = spellInfo; spellTriggerInfo.triggeredByAura = auraSpellInfo; + spellTriggerInfo.triggeredByEffIdx = (*i)->GetEffIndex(); spellTriggerInfo.chance = chance * (*i)->GetBase()->GetStackAmount(); m_hitTriggerSpells.push_back(spellTriggerInfo); } diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index d9a564871..f6e3e646f 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -741,7 +741,7 @@ public: { SpellInfo const* triggeredSpell; SpellInfo const* triggeredByAura; - // uint8 triggeredByEffIdx This might be needed at a later stage - No need known for now + uint8 triggeredByEffIdx; int32 chance; };