aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-02-28 00:19:31 +0100
committerShauren <shauren.trinity@gmail.com>2023-02-28 00:19:31 +0100
commita8bb1739e99c503fc72b3a4a9ecede214c88396f (patch)
tree2cf0399b95aee62d9790416a13260eeefa1f644b
parent982b60f39c526e217de3a3f24b740af41c4ede50 (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.cpp4
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
-rw-r--r--src/server/game/Handlers/PetHandler.cpp4
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp2
-rw-r--r--src/server/game/Spells/Spell.cpp50
-rw-r--r--src/server/game/Spells/Spell.h2
-rw-r--r--src/server/game/Spells/SpellScript.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp2
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);