diff --git a/AI/BattleAI/BattleAI.cpp b/AI/BattleAI/BattleAI.cpp index a9828d7e3..cc4da6bf6 100644 --- a/AI/BattleAI/BattleAI.cpp +++ b/AI/BattleAI/BattleAI.cpp @@ -192,9 +192,9 @@ void CBattleAI::attemptCastingSpell() LOGL("Casting spells sounds like fun. Let's see..."); //Get all spells we can cast std::vector possibleSpells; - vstd::copy_if(VLC->spellh->objects, std::back_inserter(possibleSpells), [this] (const CSpell *s) -> bool + vstd::copy_if(VLC->spellh->objects, std::back_inserter(possibleSpells), [this, hero] (const CSpell *s) -> bool { - auto problem = getCbc()->battleCanCastThisSpell(s); + auto problem = getCbc()->battleCanCastThisSpell(hero, s, ECastingMode::HERO_CASTING); return problem == ESpellCastProblem::OK; }); LOGFL("I can cast %d spells.", possibleSpells.size()); diff --git a/client/windows/CSpellWindow.cpp b/client/windows/CSpellWindow.cpp index ff09ba16a..15c012e7c 100644 --- a/client/windows/CSpellWindow.cpp +++ b/client/windows/CSpellWindow.cpp @@ -547,9 +547,9 @@ void CSpellWindow::SpellArea::clickLeft(tribool down, bool previousState) } //we will cast a spell - if(mySpell->combatSpell && owner->myInt->battleInt) //if battle window is open + if(mySpell->isCombatSpell() && owner->myInt->battleInt) //if battle window is open { - ESpellCastProblem::ESpellCastProblem problem = owner->myInt->cb->battleCanCastThisSpell(mySpell); + ESpellCastProblem::ESpellCastProblem problem = owner->myInt->cb->battleCanCastThisSpell(owner->myHero, mySpell, ECastingMode::HERO_CASTING); switch (problem) { case ESpellCastProblem::OK: diff --git a/lib/CBattleCallback.cpp b/lib/CBattleCallback.cpp index 2b181bdf2..c0d9523bf 100644 --- a/lib/CBattleCallback.cpp +++ b/lib/CBattleCallback.cpp @@ -2111,18 +2111,6 @@ ReachabilityInfo::Parameters::Parameters(const CStack *Stack) knownAccessible = stack->getHexes(); } -ESpellCastProblem::ESpellCastProblem CPlayerBattleCallback::battleCanCastThisSpell(const CSpell * spell) const -{ - RETURN_IF_NOT_BATTLE(ESpellCastProblem::INVALID); - ASSERT_IF_CALLED_WITH_PLAYER - - const ISpellCaster * hero = battleGetMyHero(); - if(hero == nullptr) - return ESpellCastProblem::INVALID; - else - return CBattleInfoCallback::battleCanCastThisSpell(hero, spell, ECastingMode::HERO_CASTING); -} - bool CPlayerBattleCallback::battleCanFlee() const { RETURN_IF_NOT_BATTLE(false); diff --git a/lib/CBattleCallback.h b/lib/CBattleCallback.h index da2759b78..04d7cb9c2 100644 --- a/lib/CBattleCallback.h +++ b/lib/CBattleCallback.h @@ -336,7 +336,6 @@ class DLL_LINKAGE CPlayerBattleCallback : public CBattleInfoCallback public: bool battleCanFlee() const; //returns true if caller can flee from the battle TStacks battleGetStacks(EStackOwnership whose = MINE_AND_ENEMY, bool onlyAlive = true) const; //returns stacks on battlefield - ESpellCastProblem::ESpellCastProblem battleCanCastThisSpell(const CSpell * spell) const; //determines if given spell can be cast (and returns problem description) int battleGetSurrenderCost() const; //returns cost of surrendering battle, -1 if surrendering is not possible