Browse Source

Fixed http://bugs.vcmi.eu/view.php?id=2419

AlexVinS 9 years ago
parent
commit
1e7e7a7006
2 changed files with 16 additions and 0 deletions
  1. 9 0
      lib/NetPacksLib.cpp
  2. 7 0
      lib/spells/BattleSpellMechanics.cpp

+ 9 - 0
lib/NetPacksLib.cpp

@@ -1198,6 +1198,15 @@ DLL_LINKAGE void BattleNextRound::applyGs( CGameState *gs )
 		s->counterAttacksTotalCache = 0;
 		// new turn effects
 		s->battleTurnPassed();
+
+		if(s->alive() && vstd::contains(s->state, EBattleStackState::CLONED))
+		{
+			//cloned stack has special lifetime marker
+			//check it after bonuses updated in battleTurnPassed()
+
+			if(!s->hasBonus(Selector::type(Bonus::NONE).And(Selector::source(Bonus::SPELL_EFFECT, SpellID::CLONE))))
+				s->makeGhost();
+		}
 	}
 
 	for(auto &obst : gs->curB->obstacles)

+ 7 - 0
lib/spells/BattleSpellMechanics.cpp

@@ -131,6 +131,13 @@ void CloneMechanics::applyBattleEffects(const SpellCastEnvironment * env, const
 	ssp.val = bsa.newStackID;
 	ssp.absolute = 1;
 	env->sendAndApply(&ssp);
+
+	SetStackEffect sse;
+	sse.stacks.push_back(bsa.newStackID);
+	Bonus lifeTimeMarker(Bonus::N_TURNS, Bonus::NONE, Bonus::SPELL_EFFECT, 0, owner->id.num);
+	lifeTimeMarker.turnsRemain = parameters.enchantPower;
+	sse.effect.push_back(lifeTimeMarker);
+	env->sendAndApply(&sse);
 }
 
 ESpellCastProblem::ESpellCastProblem CloneMechanics::isImmuneByStack(const ISpellCaster * caster, const CStack * obj) const