Jelajahi Sumber

NKAI: various AI fixes after tests in headless

Andrii Danylchenko 1 tahun lalu
induk
melakukan
0c1664dbe7

+ 6 - 1
AI/Nullkiller/AIGateway.cpp

@@ -586,13 +586,18 @@ void AIGateway::heroGotLevel(const CGHeroInstance * hero, PrimarySkill pskill, s
 
 	requestActionASAP([=]()
 	{ 
+		int sel = 0;
+
 		if(hPtr.validAndSet())
 		{
 			std::unique_lock<std::mutex> lockGuard(nullkiller->aiStateMutex);
 
 			nullkiller->heroManager->update();
-			answerQuery(queryID, nullkiller->heroManager->selectBestSkill(hPtr, skills));
+
+			sel = nullkiller->heroManager->selectBestSkill(hPtr, skills);
 		}
+
+		answerQuery(queryID, sel);
 	});
 }
 

+ 4 - 1
AI/Nullkiller/Engine/PriorityEvaluator.cpp

@@ -137,7 +137,7 @@ TResources getCreatureBankResources(const CGObjectInstance * target, const CGHer
 	return sum > 1 ? result / sum : result;
 }
 
-uint64_t getResourcesGoldReward(TResources & res)
+uint64_t getResourcesGoldReward(const TResources & res)
 {
 	int nonGoldResources = res[EGameResID::GEMS]
 		+ res[EGameResID::SULFUR]
@@ -541,6 +541,9 @@ float RewardEvaluator::getStrategicalValue(const CGObjectInstance * target) cons
 			? getEnemyHeroStrategicalValue(dynamic_cast<const CGHeroInstance *>(target))
 			: 0;
 
+	case Obj::KEYMASTER:
+		return 0.6f;
+
 	default:
 		return 0;
 	}

+ 10 - 11
client/CMT.cpp

@@ -524,25 +524,24 @@ void handleQuit(bool ask)
 	// FIXME: avoids crash if player attempts to close game while opening is still playing
 	// use cursor handler as indicator that loading is not done yet
 	// proper solution would be to abort init thread (or wait for it to finish)
+	if(!ask)
+	{
+		quitApplication();
+		return;
+	}
+
 	if (!CCS->curh)
 	{
 		quitRequestedDuringOpeningPlayback = true;
 		return;
 	}
 
-	if(ask)
-	{
-		CCS->curh->set(Cursor::Map::POINTER);
+	CCS->curh->set(Cursor::Map::POINTER);
 
-		if (LOCPLINT)
-			LOCPLINT->showYesNoDialog(CGI->generaltexth->allTexts[69], quitApplication, nullptr);
-		else
-			CInfoWindow::showYesNoDialog(CGI->generaltexth->allTexts[69], {}, quitApplication, {}, PlayerColor(1));
-	}
+	if (LOCPLINT)
+		LOCPLINT->showYesNoDialog(CGI->generaltexth->allTexts[69], quitApplication, nullptr);
 	else
-	{
-		quitApplication();
-	}
+		CInfoWindow::showYesNoDialog(CGI->generaltexth->allTexts[69], {}, quitApplication, {}, PlayerColor(1));
 }
 
 void handleFatalError(const std::string & message, bool terminate)

+ 1 - 3
lib/pathfinder/PathfindingRules.cpp

@@ -249,9 +249,7 @@ PathfinderBlockingRule::BlockingReason MovementAfterDestinationRule::getBlocking
 	}
 
 	case EPathNodeAction::BLOCKING_VISIT:
-		return destination.guarded
-			? BlockingReason::DESTINATION_GUARDED
-			: BlockingReason::DESTINATION_BLOCKVIS;
+		return BlockingReason::DESTINATION_BLOCKVIS;
 
 	case EPathNodeAction::NORMAL:
 		return BlockingReason::NONE;