From c839b397e823d5482a23c61a35ca34f4410e775e Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Mon, 15 Jan 2024 23:14:32 +0200 Subject: [PATCH] Block self-casting, e.g. Archangels can't resurrect themselves --- lib/spells/BattleSpellMechanics.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/spells/BattleSpellMechanics.cpp b/lib/spells/BattleSpellMechanics.cpp index fc333fc93..d4a80902d 100644 --- a/lib/spells/BattleSpellMechanics.cpp +++ b/lib/spells/BattleSpellMechanics.cpp @@ -213,7 +213,21 @@ bool BattleSpellMechanics::canBeCastAt(const Target & target, Problem & problem) Target spellTarget = transformSpellTarget(target); - return effects->applicable(problem, this, target, spellTarget); + const battle::Unit * mainTarget = nullptr; + + if(spellTarget.front().unitValue) + { + mainTarget = target.front().unitValue; + } + else if(spellTarget.front().hexValue.isValid()) + { + mainTarget = battle()->battleGetUnitByPos(target.front().hexValue, true); + } + + if (mainTarget && mainTarget == caster) + return false; // can't cast on self + + return effects->applicable(problem, this, target, spellTarget); } std::vector BattleSpellMechanics::getAffectedStacks(const Target & target) const