From b1c15cbfe61884664ed7615a34ca77ad0db3d95c Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 21 Jun 2024 21:17:16 +0200 Subject: Core/Spells: Corrected SpellCastResult values sent on spell interrupts --- src/server/game/Spells/Spell.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'src/server/game/Spells/Spell.cpp') diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 208da4685c2..24e70e7aff7 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3234,7 +3234,7 @@ SpellCastResult Spell::prepare(SpellCastTargets const& targets, AuraEffect const return SPELL_CAST_OK; } -void Spell::cancel() +void Spell::cancel(SpellCastResult result /*= SPELL_FAILED_INTERRUPTED*/, Optional resultOther /*= {}*/) { if (m_spellState == SPELL_STATE_FINISHED) return; @@ -3247,10 +3247,11 @@ void Spell::cancel() { case SPELL_STATE_PREPARING: CancelGlobalCooldown(); - SendCastResult(SPELL_FAILED_INTERRUPTED); + SendCastResult(result); + SendInterrupted(result, resultOther); break; case SPELL_STATE_DELAYED: - SendInterrupted(SPELL_FAILED_INTERRUPTED); + SendInterrupted(result, resultOther); break; case SPELL_STATE_CASTING: for (TargetInfo const& targetInfo : m_UniqueTargetInfo) @@ -3259,7 +3260,7 @@ void Spell::cancel() unit->RemoveOwnedAura(m_spellInfo->Id, m_originalCasterGUID, 0, AURA_REMOVE_BY_CANCEL); SendChannelUpdate(0); - SendInterrupted(SPELL_FAILED_INTERRUPTED); + SendInterrupted(result, resultOther); m_appliedMods.clear(); break; @@ -3355,7 +3356,7 @@ void Spell::_cast(bool skipCheck) auto cleanupSpell = [this, modOwner](SpellCastResult res, uint32* p1 = nullptr, uint32* p2 = nullptr) { SendCastResult(res, p1, p2); - SendInterrupted(0); + SendInterrupted(res); if (modOwner) modOwner->SetSpellModTakingSpell(this, false); @@ -3431,7 +3432,7 @@ void Spell::_cast(bool skipCheck) // Spell may be finished after target map check if (m_spellState == SPELL_STATE_FINISHED) { - SendInterrupted(0); + SendInterrupted(SPELL_FAILED_DONT_REPORT); if (modOwner) modOwner->SetSpellModTakingSpell(this, false); @@ -4618,20 +4619,20 @@ void Spell::ExecuteLogEffectResurrect(uint8 effIndex, Unit* target) *m_effectExecuteData[effIndex] << target->GetPackGUID(); } -void Spell::SendInterrupted(uint8 result) +void Spell::SendInterrupted(SpellCastResult result, Optional resultOther /*= {}*/) { - WorldPacket data(SMSG_SPELL_FAILURE, (8+4+1)); + WorldPacket data(SMSG_SPELL_FAILURE, 8 + 1 + 4 + 1); data << m_caster->GetPackGUID(); data << uint8(m_cast_count); data << uint32(m_spellInfo->Id); data << uint8(result); m_caster->SendMessageToSet(&data, true); - data.Initialize(SMSG_SPELL_FAILED_OTHER, (8+4)); + data.Initialize(SMSG_SPELL_FAILED_OTHER, 8 + 1 + 4 + 1); data << m_caster->GetPackGUID(); data << uint8(m_cast_count); data << uint32(m_spellInfo->Id); - data << uint8(result); + data << uint8(resultOther.value_or(result)); m_caster->SendMessageToSet(&data, true); } -- cgit v1.2.3