Browse Source

BattleAI: fixes

Andrii Danylchenko 1 year ago
parent
commit
1a1ae5cd8b
2 changed files with 5 additions and 8 deletions
  1. 1 1
      AI/BattleAI/BattleEvaluator.cpp
  2. 4 7
      AI/BattleAI/BattleExchangeVariant.cpp

+ 1 - 1
AI/BattleAI/BattleEvaluator.cpp

@@ -609,7 +609,7 @@ bool BattleEvaluator::attemptCastingSpell(const CStack * activeStack)
 
 						if(ourUnit * goodEffect == 1)
 						{
-							if(ourUnit && goodEffect && (unit->isClone() || unit->isGhost() || !unit->unitSlot().validSlot()))
+							if(ourUnit && goodEffect && (unit->isClone() || unit->isGhost()))
 								continue;
 
 							ps.value += dpsReduce * scoreEvaluator.getPositiveEffectMultiplier();

+ 4 - 7
AI/BattleAI/BattleExchangeVariant.cpp

@@ -258,7 +258,9 @@ EvaluationResult BattleExchangeEvaluator::findBestTarget(
 
 	updateReachabilityMap(hb);
 
-	if(result.bestAttack.attack.shooting && hb->battleHasShootingPenalty(activeStack, result.bestAttack.dest))
+	if(result.bestAttack.attack.shooting
+		&& !activeStack->waited()
+		&& hb->battleHasShootingPenalty(activeStack, result.bestAttack.dest))
 	{
 		if(!canBeHitThisTurn(result.bestAttack))
 			return result; // lets wait
@@ -481,11 +483,6 @@ float BattleExchangeEvaluator::evaluateExchange(
 	DamageCache & damageCache,
 	std::shared_ptr<HypotheticBattle> hb)
 {
-	if(ap.from.hex == 127)
-	{
-		logAi->trace("x");
-	}
-
 	BattleScore score = calculateExchange(ap, turn, targets, damageCache, hb);
 
 #if BATTLE_TRACE_LEVEL >= 1
@@ -887,7 +884,7 @@ bool BattleExchangeEvaluator::checkPositionBlocksOurStacks(HypotheticBattle & hb
 				continue;
 
 			auto blockedUnitDamage = unit->getMinDamage(hb.battleCanShoot(unit)) * unit->getCount();
-			auto ratio = blockedUnitDamage / (blockedUnitDamage + activeUnitDamage);
+			float ratio = blockedUnitDamage / (float)(blockedUnitDamage + activeUnitDamage + 0.01);
 
 			auto unitReachability = turnBattle.getReachability(unit);
 			auto unitSpeed = unit->speed(turn); // Cached value, to avoid performance hit