瀏覽代碼

Allow hit on any target including already destroyed, allow multiple hit on same target

AlexVinS 10 年之前
父節點
當前提交
729855ff60
共有 1 個文件被更改,包括 33 次插入13 次删除
  1. 33 13
      lib/spells/BattleSpellMechanics.cpp

+ 33 - 13
lib/spells/BattleSpellMechanics.cpp

@@ -182,17 +182,6 @@ void EarthquakeMechanics::applyBattleEffects(const SpellCastEnvironment * env, B
 	
 	assert(possibleTargets.size() == EWallPart::PARTS_COUNT);
 	
-	vstd::erase_if(possibleTargets, [parameters](EWallPart::EWallPart part)
-	{
-		return (parameters.cb->si.wallState[part] == EWallState::DESTROYED) || (parameters.cb->si.wallState[part] == EWallState::NONE);
-	});
-	
-	if(0 == possibleTargets.size())
-	{
-		env->complain("EarthquakeMechanics: no target to attack");
-		return;
-	}	
-	
 	int targetsToAttack = 2;
 	
 	switch(parameters.spellLvl)
@@ -222,10 +211,41 @@ void EarthquakeMechanics::applyBattleEffects(const SpellCastEnvironment * env, B
 		
 		ca.attackedParts.push_back(attackInfo);
 		
-		possibleTargets.erase(target);
+		//removing creatures in turrets / keep if one is destroyed
+		
+		BattleHex posRemove;
+
+		switch(target)
+		{
+		case EWallPart::KEEP:
+			posRemove = -2;
+			break;
+		case EWallPart::BOTTOM_TOWER:
+			posRemove = -3;
+			break;
+		case EWallPart::UPPER_TOWER:
+			posRemove = -4;
+			break;
+		}		
+		
+		if(posRemove != BattleHex::INVALID)
+		{
+			BattleStacksRemoved bsr;
+			for(auto & elem : parameters.cb->stacks)
+			{
+				if(elem->position == posRemove)
+				{
+					bsr.stackIDs.insert(elem->ID);
+					break;
+				}
+			}
+			if(bsr.stackIDs.size()>0)
+				env->sendAndApply(&bsr);
+		}		
+
 		targetsToAttack--;
 	}
-	while(targetsToAttack > 0 && possibleTargets.size() > 0);
+	while(targetsToAttack > 0);
 	
 	env->sendAndApply(&ca);
 }