Bläddra i källkod

Add workaround for very common crash in BattleAI

Ivan Savenko 1 år sedan
förälder
incheckning
c3e76f19e1
1 ändrade filer med 5 tillägg och 2 borttagningar
  1. 5 2
      AI/BattleAI/BattleExchangeVariant.cpp

+ 5 - 2
AI/BattleAI/BattleExchangeVariant.cpp

@@ -376,11 +376,14 @@ MoveTarget BattleExchangeEvaluator::findMoveTowardsUnreachable(
 				logAi->trace("New high score");
 #endif
 
-				for(BattleHex enemyHex : enemy->getAttackableHexes(activeStack))
+				for(const BattleHex & initialEnemyHex : enemy->getAttackableHexes(activeStack))
 				{
-					while(!flying && dists.distances[enemyHex] > speed)
+					BattleHex enemyHex = initialEnemyHex;
+
+					while(!flying && dists.distances[enemyHex] > speed && dists.predecessors.at(enemyHex).isValid())
 					{
 						enemyHex = dists.predecessors.at(enemyHex);
+
 						if(dists.accessibility[enemyHex] == EAccessibility::ALIVE_STACK)
 						{
 							auto defenderToBypass = hb->battleGetUnitByPos(enemyHex);