From 8eca149eb3ba25d471e34d5d0a4eae67cfc9cc59 Mon Sep 17 00:00:00 2001 From: AlexVinS Date: Sat, 10 Sep 2016 20:21:51 +0300 Subject: [PATCH] Fixed creature`s aimed spell targeting. --- client/battle/CBattleInterface.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/client/battle/CBattleInterface.cpp b/client/battle/CBattleInterface.cpp index e6681e7fe..e6840048d 100644 --- a/client/battle/CBattleInterface.cpp +++ b/client/battle/CBattleInterface.cpp @@ -1586,8 +1586,8 @@ void CBattleInterface::activateStack() stackCanCastSpell = true; if(randomSpellcaster) creatureSpellToCast = -1; //spell will be set later on cast - - creatureSpellToCast = curInt->cb->battleGetRandomStackSpell(s, CBattleInfoCallback::RANDOM_AIMED); //faerie dragon can cast only one spell until their next move + else + creatureSpellToCast = curInt->cb->battleGetRandomStackSpell(s, CBattleInfoCallback::RANDOM_AIMED); //faerie dragon can cast only one spell until their next move //TODO: what if creature can cast BOTH random genie spell and aimed spell? } else @@ -1633,23 +1633,16 @@ void CBattleInterface::getPossibleActionsForStack(const CStack * stack) { if (stack->hasBonusOfType (Bonus::SPELLCASTER)) { - //TODO: poll possible spells - const CSpell * spell; - BonusList spellBonuses = *stack->getBonuses (Selector::type(Bonus::SPELLCASTER)); - for (Bonus * spellBonus : spellBonuses) + if(creatureSpellToCast != -1) { - spell = SpellID(spellBonus->subtype).toSpell(); - + const CSpell * spell = SpellID(creatureSpellToCast).toSpell(); PossibleActions act = getCasterAction(spell, stack); - if(act == NO_LOCATION) logGlobal->error("NO_LOCATION action target is not yet supported for creatures"); else possibleActions.push_back(act); + } - std::sort(possibleActions.begin(), possibleActions.end()); - auto it = std::unique (possibleActions.begin(), possibleActions.end()); - possibleActions.erase (it, possibleActions.end()); } if (stack->hasBonusOfType (Bonus::RANDOM_SPELLCASTER)) possibleActions.push_back (RANDOM_GENIE_SPELL);