瀏覽代碼

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 月之前
父節點
當前提交
ae6dcf4c6b
共有 1 個文件被更改,包括 12 次插入1 次删除
  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();