Prechádzať zdrojové kódy

AI: fix freeze while endlesly trying to recruit hero which is not possible anylonger.

Andrii Danylchenko 6 rokov pred
rodič
commit
ee5a26da60
1 zmenil súbory, kde vykonal 8 pridanie a 0 odobranie
  1. 8 0
      AI/VCAI/VCAI.cpp

+ 8 - 0
AI/VCAI/VCAI.cpp

@@ -823,6 +823,7 @@ void VCAI::makeTurn()
 	}
 	markHeroAbleToExplore(primaryHero());
 	visitedHeroes.clear();
+	ai->ah->resetPaths();
 
 	try
 	{
@@ -1007,6 +1008,9 @@ void VCAI::mainLoop()
 				for (auto basicGoal : ultimateGoalsFromBasic[goalToRealize])
 					goalsToRemove.push_back(basicGoal);
 
+				// sometimes resource manager contains an elementar goal which is not able to execute anymore and just fails each turn.
+				ai->ah->notifyGoalCompleted(goalToRealize);
+
 				//we failed to realize best goal, but maybe others are still possible?
 			}
 
@@ -2056,6 +2060,10 @@ void VCAI::tryRealize(Goals::RecruitHero & g)
 		//TODO try to free way to blocked town
 		//TODO: adventure map tavern or prison?
 	}
+	else
+	{
+		throw cannotFulfillGoalException("No town to recruit hero!");
+	}
 }
 
 void VCAI::tryRealize(Goals::VisitTile & g)