Browse Source

Fix for going through all passes despite not doing anything

AI now checks whether it moved anything when it executed tasks. If it didn't it will not continue to further passes.
Xilmi 9 months ago
parent
commit
ae6dcf4c6b
1 changed files with 12 additions and 1 deletions
  1. 12 1
      AI/Nullkiller/Engine/Nullkiller.cpp

+ 12 - 1
AI/Nullkiller/Engine/Nullkiller.cpp

@@ -528,6 +528,12 @@ void Nullkiller::makeTurn()
 #if NKAI_TRACE_LEVEL >= 1
 			logAi->info("Pass %d: Performing prio %d task %s with prio: %d", i, prioOfTask, bestTask->toString(), bestTask->priority);
 #endif
+			int totalMPBefore = 0;
+			int totalMPAfter = 0;
+			for (auto hero : cb->getHeroesInfo(true))
+			{
+				totalMPBefore += hero->movementPointsRemaining();
+			}
 			if(!executeTask(bestTask))
 			{
 				if(hasAnySuccess)
@@ -535,7 +541,12 @@ void Nullkiller::makeTurn()
 				else
 					return;
 			}
-			hasAnySuccess = true;
+			for (auto hero : cb->getHeroesInfo(true))
+			{
+				totalMPAfter +=	hero->movementPointsRemaining();
+			}
+			if(totalMPBefore > totalMPAfter)
+				hasAnySuccess = true;
 		}
 
 		hasAnySuccess |= handleTrading();