Pārlūkot izejas kodu

Merge pull request #4296 from vcmi/build-take-into-account-7lvl-creatures

NKAI: take into account 7lvl creature cost when we consider what reso…
Andrii Danylchenko 1 gadu atpakaļ
vecāks
revīzija
3502e30fe5

+ 10 - 2
AI/Nullkiller/Analyzers/BuildAnalyzer.cpp

@@ -100,10 +100,17 @@ int32_t convertToGold(const TResources & res)
 		+ 125 * (res[EGameResID::GEMS] + res[EGameResID::CRYSTAL] + res[EGameResID::MERCURY] + res[EGameResID::SULFUR]);
 }
 
+TResources withoutGold(TResources other)
+{
+	other[GameResID::GOLD] = 0;
+
+	return other;
+}
+
 TResources BuildAnalyzer::getResourcesRequiredNow() const
 {
 	auto resourcesAvailable = ai->getFreeResources();
-	auto result = requiredResources - resourcesAvailable;
+	auto result = withoutGold(armyCost) + requiredResources - resourcesAvailable;
 
 	result.positive();
 
@@ -113,7 +120,7 @@ TResources BuildAnalyzer::getResourcesRequiredNow() const
 TResources BuildAnalyzer::getTotalResourcesRequired() const
 {
 	auto resourcesAvailable = ai->getFreeResources();
-	auto result = totalDevelopmentCost - resourcesAvailable;
+	auto result = totalDevelopmentCost + withoutGold(armyCost) - resourcesAvailable;
 
 	result.positive();
 
@@ -341,6 +348,7 @@ void TownDevelopmentInfo::addExistingDwelling(const BuildingInfo & existingDwell
 void TownDevelopmentInfo::addBuildingToBuild(const BuildingInfo & nextToBuild)
 {
 	townDevelopmentCost += nextToBuild.buildCostWithPrerequisites;
+	townDevelopmentCost += withoutGold(nextToBuild.armyCost);
 
 	if(nextToBuild.canBuild)
 	{

+ 3 - 3
config/ai/nkai/object-priorities.txt

@@ -15,9 +15,9 @@ InputVariable: scoutTurnDistance
   range: 0.000 10.000
   lock-range: true
   term: LOWEST Ramp 0.250 0.000
-  term: LOW Discrete 0.000 1.000 0.500 0.800 1.000 0.000
-  term: MEDIUM Discrete 0.000 0.000 0.500 0.200 1.000 1.000 2.500 0.300 4.000 0.000
-  term: LONG Discrete 1.000 0.000 1.500 0.200 3.000 0.800 10.000 1.000
+  term: LOW Discrete 0.000 1.000 1.000 0.800 2.500 0.000
+  term: MEDIUM Discrete 0.000 0.000 1.000 0.200 2.500 1.000 3.500 0.300 5.000 0.000
+  term: LONG Discrete 2.500 0.000 3.500 0.200 5.000 0.800 10.000 1.000
 InputVariable: goldReward
   description: estimated amount of gold received
   enabled: true