From 3873e5047e2492c1d214a1b4bf0d7abaef2d2055 Mon Sep 17 00:00:00 2001 From: AlexVinS Date: Tue, 1 Mar 2016 13:24:46 +0300 Subject: [PATCH] Attempt to fix 2293 --- client/windows/CSpellWindow.cpp | 21 ++++++++++++--------- lib/spells/BattleSpellMechanics.cpp | 6 ++---- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/client/windows/CSpellWindow.cpp b/client/windows/CSpellWindow.cpp index 4ae3bbc5d..91aa12f90 100644 --- a/client/windows/CSpellWindow.cpp +++ b/client/windows/CSpellWindow.cpp @@ -647,16 +647,18 @@ void CSpellWindow::SpellArea::clickLeft(tribool down, bool previousState) break; case ESpellCastProblem::ANOTHER_ELEMENTAL_SUMMONED: { - std::string text = CGI->generaltexth->allTexts[538], summoner, elemental, caster; - std::vector stacks = owner->myInt->cb->battleGetStacks(); + std::string text = CGI->generaltexth->allTexts[538], elemental, caster; + const PlayerColor player = owner->myInt->playerID; + + const TStacks stacks = owner->myInt->cb->battleGetStacksIf([player](const CStack * s) + { + return s->owner == player + && vstd::contains(s->state, EBattleStackState::SUMMONED) + && !vstd::contains(s->state, EBattleStackState::CLONED); + }); for(const CStack * s : stacks) { - if(vstd::contains(s->state, EBattleStackState::SUMMONED)) - { - elemental = s->getCreature()->namePl; - summoner = owner->myInt->cb->battleGetHeroInfo(!s->attackerOwned).name; - break; - } + elemental = s->getCreature()->namePl; } if (owner->myHero->type->sex) { //female @@ -666,8 +668,9 @@ void CSpellWindow::SpellArea::clickLeft(tribool down, bool previousState) { //male caster = CGI->generaltexth->allTexts[539]; } - text = boost::str(boost::format(text) % summoner % elemental % caster); + std::string summoner = owner->myHero->name; + text = boost::str(boost::format(text) % summoner % elemental % caster); owner->myInt->showInfoDialog(text); } diff --git a/lib/spells/BattleSpellMechanics.cpp b/lib/spells/BattleSpellMechanics.cpp index 90fc78519..1958d3654 100644 --- a/lib/spells/BattleSpellMechanics.cpp +++ b/lib/spells/BattleSpellMechanics.cpp @@ -637,13 +637,11 @@ ESpellCastProblem::ESpellCastProblem SpecialRisingSpellMechanics::isImmuneByStac ///SummonMechanics ESpellCastProblem::ESpellCastProblem SummonMechanics::canBeCast(const CBattleInfoCallback * cb, PlayerColor player) const { - const ui8 side = cb->playerToSide(player); - //check if there are summoned elementals of other type - auto otherSummoned = cb->battleGetStacksIf([side, this](const CStack * st) + auto otherSummoned = cb->battleGetStacksIf([player, this](const CStack * st) { - return (st->attackerOwned == !side) + return (st->owner == player) && (vstd::contains(st->state, EBattleStackState::SUMMONED)) && (!vstd::contains(st->state, EBattleStackState::CLONED)) && (st->getCreature()->idNumber != creatureToSummon);