diff --git a/lib/spells/CDefaultSpellMechanics.cpp b/lib/spells/CDefaultSpellMechanics.cpp index 85a40d606..7e156d8f3 100644 --- a/lib/spells/CDefaultSpellMechanics.cpp +++ b/lib/spells/CDefaultSpellMechanics.cpp @@ -265,7 +265,7 @@ void DefaultSpellMechanics::battleCast(const SpellCastEnvironment * env, BattleS //must be vector, as in Chain Lightning order matters std::vector attackedCres; //CStack vector is somewhat more suitable than ID vector - auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.casterColor, parameters.spellLvl, parameters.destination, parameters.casterHero); + auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.casterColor, parameters.spellLvl, parameters.destination, parameters.caster); std::copy(creatures.begin(), creatures.end(), std::back_inserter(attackedCres)); logGlobal->debugStream() << "will affect: " << attackedCres.size() << " stacks"; @@ -779,7 +779,7 @@ void DefaultSpellMechanics::castMagicMirror(const SpellCastEnvironment* env, Bat //must be vector, as in Chain Lightning order matters std::vector attackedCres; //CStack vector is somewhat more suitable than ID vector - auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.casterColor, parameters.spellLvl, parameters.destination, parameters.casterHero); + auto creatures = owner->getAffectedStacks(parameters.cb, parameters.mode, parameters.casterColor, parameters.spellLvl, parameters.destination, parameters.caster); std::copy(creatures.begin(), creatures.end(), std::back_inserter(attackedCres)); logGlobal->debugStream() << "will affect: " << attackedCres.size() << " stacks"; diff --git a/lib/spells/CSpellHandler.cpp b/lib/spells/CSpellHandler.cpp index 335742bc1..0f401cdf6 100644 --- a/lib/spells/CSpellHandler.cpp +++ b/lib/spells/CSpellHandler.cpp @@ -151,7 +151,7 @@ std::vector CSpell::rangeInHexes(BattleHex centralHex, ui8 schoolLvl, return mechanics->rangeInHexes(centralHex,schoolLvl,side,outDroppedHexes); } -std::set CSpell::getAffectedStacks(const CBattleInfoCallback * cb, ECastingMode::ECastingMode mode, PlayerColor casterColor, int spellLvl, BattleHex destination, const CGHeroInstance * caster) const +std::set CSpell::getAffectedStacks(const CBattleInfoCallback * cb, ECastingMode::ECastingMode mode, PlayerColor casterColor, int spellLvl, BattleHex destination, const ISpellCaster * caster) const { ISpellMechanics::SpellTargetingContext ctx(this, cb,mode,casterColor,spellLvl,destination); diff --git a/lib/spells/CSpellHandler.h b/lib/spells/CSpellHandler.h index 9634cf6d6..bb6963c01 100644 --- a/lib/spells/CSpellHandler.h +++ b/lib/spells/CSpellHandler.h @@ -220,7 +220,7 @@ public: ui32 calculateDamage(const ISpellCaster * caster, const CStack * affectedCreature, int spellSchoolLevel, int usedSpellPower) const; ///selects from allStacks actually affected stacks - std::set getAffectedStacks(const CBattleInfoCallback * cb, ECastingMode::ECastingMode mode, PlayerColor casterColor, int spellLvl, BattleHex destination, const CGHeroInstance * caster = nullptr) const; + std::set getAffectedStacks(const CBattleInfoCallback * cb, ECastingMode::ECastingMode mode, PlayerColor casterColor, int spellLvl, BattleHex destination, const ISpellCaster * caster) const; si32 getCost(const int skillLevel) const; diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index f805334bf..96b51b7ed 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -806,7 +806,7 @@ void CGameHandler::prepareAttack(BattleAttack &bat, const CStack *att, const CSt //TODO: should spell override creature`s projectile? - std::set attackedCreatures = SpellID(bonus->subtype).toSpell()->getAffectedStacks(gs->curB, ECastingMode::SPELL_LIKE_ATTACK, att->owner, bonus->val, targetHex); + std::set attackedCreatures = SpellID(bonus->subtype).toSpell()->getAffectedStacks(gs->curB, ECastingMode::SPELL_LIKE_ATTACK, att->owner, bonus->val, targetHex, att); //TODO: get exact attacked hex for defender