diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-02-28 00:19:31 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-02-28 00:19:31 +0100 |
commit | a8bb1739e99c503fc72b3a4a9ecede214c88396f (patch) | |
tree | 2cf0399b95aee62d9790416a13260eeefa1f644b | |
parent | 982b60f39c526e217de3a3f24b740af41c4ede50 (diff) |
Core/Spells: Refactor Spell::finish to accept SpellCastResult argument instead of just a bool indicating success
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/PetHandler.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 50 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellScript.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp | 2 |
8 files changed, 34 insertions, 34 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 855bea611d6..bbe4e973e27 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -2946,7 +2946,7 @@ void Unit::InterruptSpell(CurrentSpellTypes spellType, bool withDelayed, bool wi } } -void Unit::FinishSpell(CurrentSpellTypes spellType, bool ok /*= true*/) +void Unit::FinishSpell(CurrentSpellTypes spellType, SpellCastResult result /*= SPELL_CAST_OK*/) { Spell* spell = m_currentSpells[spellType]; if (!spell) @@ -2955,7 +2955,7 @@ void Unit::FinishSpell(CurrentSpellTypes spellType, bool ok /*= true*/) if (spellType == CURRENT_CHANNELED_SPELL) spell->SendChannelUpdate(0); - spell->finish(ok); + spell->finish(result); } bool Unit::IsNonMeleeSpellCast(bool withDelayed, bool skipChanneled, bool skipAutorepeat, bool isAutoshoot, bool skipInstant) const diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index fe43a1deadd..0d831aa45f3 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1514,7 +1514,7 @@ class TC_GAME_API Unit : public WorldObject void SetCurrentCastSpell(Spell* pSpell); void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed = true, bool withInstant = true); - void FinishSpell(CurrentSpellTypes spellType, bool ok = true); + void FinishSpell(CurrentSpellTypes spellType, SpellCastResult result = SPELL_CAST_OK); // set withDelayed to true to account delayed spells as cast // delayed+channeled spells are always accounted as cast diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 2b06c11dc34..3d71bb0f4ea 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -389,7 +389,7 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe if (!pet->GetSpellHistory()->HasCooldown(spellid)) pet->GetSpellHistory()->ResetCooldown(spellid, true); - spell->finish(false); + spell->finish(result); delete spell; // reset specific flags in case of spell fail. AI will reset other flags @@ -748,7 +748,7 @@ void WorldSession::HandlePetCastSpellOpcode(WorldPackets::Spells::PetCastSpell& if (!caster->GetSpellHistory()->HasCooldown(spellInfo)) caster->GetSpellHistory()->ResetCooldown(spellInfo->Id, true); - spell->finish(false); + spell->finish(result); delete spell; } } diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index e9a26a4cd66..c07ada4cfff 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -2187,7 +2187,7 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo // prevent interrupt message if (GetCasterGUID() == target->GetGUID() && target->GetCurrentSpell(CURRENT_GENERIC_SPELL)) - target->FinishSpell(CURRENT_GENERIC_SPELL, false); + target->FinishSpell(CURRENT_GENERIC_SPELL, SPELL_FAILED_INTERRUPTED); target->InterruptNonMeleeSpells(true); // stop handling the effect if it was removed by linked event diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 506865a9088..d56bbffa9b5 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -777,7 +777,7 @@ void Spell::SelectSpellTargets() if (noTargetFound) { SendCastResult(SPELL_FAILED_BAD_IMPLICIT_TARGETS); - finish(false); + finish(SPELL_FAILED_BAD_IMPLICIT_TARGETS); return; } } @@ -791,7 +791,7 @@ void Spell::SelectSpellTargets() if (!anyNonImmuneTargetFound) { SendCastResult(SPELL_FAILED_IMMUNE); - finish(false); + finish(SPELL_FAILED_IMMUNE); return; } } @@ -803,7 +803,7 @@ void Spell::SelectSpellTargets() if (!focusObject && m_UniqueTargetInfo.empty() && m_UniqueGOTargetInfo.empty() && m_UniqueItemInfo.empty() && !m_targets.HasDst()) { SendCastResult(SPELL_FAILED_BAD_IMPLICIT_TARGETS); - finish(false); + finish(SPELL_FAILED_BAD_IMPLICIT_TARGETS); return; } @@ -1088,7 +1088,7 @@ void Spell::SelectImplicitNearbyTargets(SpellEffectInfo const& spellEffectInfo, else { SendCastResult(SPELL_FAILED_BAD_IMPLICIT_TARGETS); - finish(false); + finish(SPELL_FAILED_BAD_IMPLICIT_TARGETS); } return; } @@ -1108,7 +1108,7 @@ void Spell::SelectImplicitNearbyTargets(SpellEffectInfo const& spellEffectInfo, else { SendCastResult(SPELL_FAILED_BAD_IMPLICIT_TARGETS); - finish(false); + finish(SPELL_FAILED_BAD_IMPLICIT_TARGETS); } return; } @@ -1123,7 +1123,7 @@ void Spell::SelectImplicitNearbyTargets(SpellEffectInfo const& spellEffectInfo, { TC_LOG_DEBUG("spells", "Spell::SelectImplicitNearbyTargets: cannot find nearby target for spell ID {}, effect {}", m_spellInfo->Id, uint32(spellEffectInfo.EffectIndex)); SendCastResult(SPELL_FAILED_BAD_IMPLICIT_TARGETS); - finish(false); + finish(SPELL_FAILED_BAD_IMPLICIT_TARGETS); return; } @@ -1132,7 +1132,7 @@ void Spell::SelectImplicitNearbyTargets(SpellEffectInfo const& spellEffectInfo, { TC_LOG_DEBUG("spells", "Spell::SelectImplicitNearbyTargets: OnObjectTargetSelect script hook for spell Id {} set NULL target, effect {}", m_spellInfo->Id, uint32(spellEffectInfo.EffectIndex)); SendCastResult(SPELL_FAILED_BAD_IMPLICIT_TARGETS); - finish(false); + finish(SPELL_FAILED_BAD_IMPLICIT_TARGETS); return; } @@ -1145,7 +1145,7 @@ void Spell::SelectImplicitNearbyTargets(SpellEffectInfo const& spellEffectInfo, { TC_LOG_DEBUG("spells", "Spell::SelectImplicitNearbyTargets: OnObjectTargetSelect script hook for spell Id {} set object of wrong type, expected unit, got {}, effect {}", m_spellInfo->Id, target->GetGUID().GetTypeName(), effMask); SendCastResult(SPELL_FAILED_BAD_IMPLICIT_TARGETS); - finish(false); + finish(SPELL_FAILED_BAD_IMPLICIT_TARGETS); return; } break; @@ -1156,7 +1156,7 @@ void Spell::SelectImplicitNearbyTargets(SpellEffectInfo const& spellEffectInfo, { TC_LOG_DEBUG("spells", "Spell::SelectImplicitNearbyTargets: OnObjectTargetSelect script hook for spell Id {} set object of wrong type, expected gameobject, got {}, effect {}", m_spellInfo->Id, target->GetGUID().GetTypeName(), effMask); SendCastResult(SPELL_FAILED_BAD_IMPLICIT_TARGETS); - finish(false); + finish(SPELL_FAILED_BAD_IMPLICIT_TARGETS); return; } break; @@ -1167,7 +1167,7 @@ void Spell::SelectImplicitNearbyTargets(SpellEffectInfo const& spellEffectInfo, { TC_LOG_DEBUG("spells", "Spell::SelectImplicitNearbyTargets: OnObjectTargetSelect script hook for spell Id {} set object of wrong type, expected corpse, got {}, effect {}", m_spellInfo->Id, target->GetGUID().GetTypeName(), effMask); SendCastResult(SPELL_FAILED_BAD_IMPLICIT_TARGETS); - finish(false); + finish(SPELL_FAILED_BAD_IMPLICIT_TARGETS); return; } break; @@ -1420,7 +1420,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffectInfo const& spellEffectIn { SendCastResult(SPELL_FAILED_NOT_HERE); SendChannelUpdate(0); - finish(false); + finish(SPELL_FAILED_NOT_HERE); return; } @@ -1428,7 +1428,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffectInfo const& spellEffectIn { SendCastResult(SPELL_FAILED_TOO_SHALLOW); SendChannelUpdate(0); - finish(false); + finish(SPELL_FAILED_TOO_SHALLOW); return; } @@ -3302,7 +3302,7 @@ SpellCastResult Spell::prepare(SpellCastTargets const& targets, AuraEffect const else { SendCastResult(SPELL_FAILED_EQUIPPED_ITEM); - finish(false); + finish(SPELL_FAILED_EQUIPPED_ITEM); return SPELL_FAILED_EQUIPPED_ITEM; } } @@ -3325,7 +3325,7 @@ SpellCastResult Spell::prepare(SpellCastTargets const& targets, AuraEffect const if (DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, m_caster)) { SendCastResult(SPELL_FAILED_SPELL_UNAVAILABLE); - finish(false); + finish(SPELL_FAILED_SPELL_UNAVAILABLE); return SPELL_FAILED_SPELL_UNAVAILABLE; } @@ -3333,7 +3333,7 @@ SpellCastResult Spell::prepare(SpellCastTargets const& targets, AuraEffect const if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CAST_IN_PROGRESS) && m_caster->ToUnit() && m_caster->ToUnit()->IsNonMeleeSpellCast(false, true, true, m_spellInfo->Id == 75) && !m_castId.IsEmpty()) { SendCastResult(SPELL_FAILED_SPELL_IN_PROGRESS); - finish(false); + finish(SPELL_FAILED_SPELL_IN_PROGRESS); return SPELL_FAILED_SPELL_IN_PROGRESS; } @@ -3374,7 +3374,7 @@ SpellCastResult Spell::prepare(SpellCastTargets const& targets, AuraEffect const if (GetCurrentContainer() == CURRENT_AUTOREPEAT_SPELL && m_caster->IsUnit()) m_caster->ToUnit()->SetCurrentCastSpell(this); - finish(false); + finish(result); return result; } @@ -3389,7 +3389,7 @@ SpellCastResult Spell::prepare(SpellCastTargets const& targets, AuraEffect const if (result != SPELL_CAST_OK) { SendCastResult(result); - finish(false); + finish(result); return result; } } @@ -3508,7 +3508,7 @@ void Spell::cancel() //set state back so finish will be processed m_spellState = oldState; - finish(false); + finish(SPELL_FAILED_INTERRUPTED); } void Spell::cast(bool skipCheck) @@ -3586,7 +3586,7 @@ void Spell::_cast(bool skipCheck) if (modOwner) modOwner->SetSpellModTakingSpell(this, false); - finish(false); + finish(res); SetExecutedCurrently(false); }; @@ -3663,7 +3663,7 @@ void Spell::_cast(bool skipCheck) if (m_caster->GetTypeId() == TYPEID_PLAYER) m_caster->ToPlayer()->SetSpellModTakingSpell(this, false); - finish(false); + finish(SPELL_FAILED_INTERRUPTED); SetExecutedCurrently(false); return; } @@ -3899,7 +3899,7 @@ void Spell::handle_immediate() TakeCastItem(); if (m_spellState != SPELL_STATE_CASTING) - finish(true); // successfully finish spell cast (not last in case autorepeat or channel spell) + finish(); // successfully finish spell cast (not last in case autorepeat or channel spell) } uint64 Spell::handle_delayed(uint64 t_offset) @@ -3907,7 +3907,7 @@ uint64 Spell::handle_delayed(uint64 t_offset) if (!UpdatePointers()) { // finish the spell if UpdatePointers() returned false, something wrong happened there - finish(false); + finish(SPELL_FAILED_NO_VALID_TARGETS); return 0; } @@ -4001,7 +4001,7 @@ uint64 Spell::handle_delayed(uint64 t_offset) // spell is finished, perform some last features of the spell here _handle_finish_phase(); - finish(true); // successfully finish spell cast + finish(); // successfully finish spell cast // return zero, spell is finished now return 0; @@ -4184,7 +4184,7 @@ void Spell::update(uint32 difftime) } } -void Spell::finish(bool ok) +void Spell::finish(SpellCastResult result) { if (m_spellState == SPELL_STATE_FINISHED) return; @@ -4223,7 +4223,7 @@ void Spell::finish(bool ok) if (!m_spellInfo->HasAttribute(SPELL_ATTR3_SUPPRESS_CASTER_PROCS)) Unit::ProcSkillsAndAuras(unitCaster, nullptr, PROC_FLAG_CAST_ENDED, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, this, nullptr, nullptr); - if (!ok) + if (result != SPELL_CAST_OK) { // on failure (or manual cancel) send TraitConfigCommitFailed to revert talent UI saved config selection if (m_caster->IsPlayer() && m_spellInfo->HasEffect(SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG)) diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index be421b21182..d14329c7223 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -453,7 +453,7 @@ class TC_GAME_API Spell void cancel(); void update(uint32 difftime); void cast(bool skipCheck = false); - void finish(bool ok = true); + void finish(SpellCastResult result = SPELL_CAST_OK); void TakePower(); void TakeRunePower(bool didHit); diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 3750c6c073c..60f766d41f8 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -895,7 +895,7 @@ SpellInfo const* SpellScript::GetTriggeringSpell() const void SpellScript::FinishCast(SpellCastResult result, int32* param1 /*= nullptr*/, int32* param2 /*= nullptr*/) { m_spell->SendCastResult(result, param1, param2); - m_spell->finish(result == SPELL_CAST_OK); + m_spell->finish(result); } void SpellScript::SetCustomCastResultMessage(SpellCustomErrors result) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index c468477c152..e531e6d1980 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -214,7 +214,7 @@ struct boss_lord_marrowgar : public BossAI case EVENT_WARN_BONE_STORM: _boneSlice = false; Talk(EMOTE_BONE_STORM); - me->FinishSpell(CURRENT_MELEE_SPELL, false); + me->FinishSpell(CURRENT_MELEE_SPELL, SPELL_FAILED_INTERRUPTED); DoCast(me, SPELL_BONE_STORM); events.DelayEvents(3s, EVENT_GROUP_SPECIAL); events.ScheduleEvent(EVENT_BONE_STORM_BEGIN, 3050ms); |