Browse Source

Important changes:
- Fixed goal completion logic
- WIN can't be completed

DJWarmonger 7 years ago
parent
commit
4d701736f9
1 changed files with 10 additions and 6 deletions
  1. 10 6
      AI/VCAI/VCAI.cpp

+ 10 - 6
AI/VCAI/VCAI.cpp

@@ -863,11 +863,12 @@ void VCAI::mainLoop()
 				catch (goalFulfilledException & e)
 				{
 					//it is impossible to continue some goals (like exploration, for example)
-					completeGoal(basicGoal); //put in goalsToRemove
-					logAi->debug("Goal %s decomposition failed: goal was completed as much as possible", basicGoal->name());
+					//complete abstract goal for now, but maybe main goal finds another path
+					logAi->debug("Goal %s decomposition failed: goal was completed as much as possible", e.goal->name());
+					completeGoal(e.goal); //put in goalsToRemove
 					break;
 				}
-				catch (std::exception & e)
+				catch (std::exception & e) //decomposition failed, which means we can't decompose entire tree
 				{
 					goalsToRemove.push_back(basicGoal);
 					logAi->debug("Goal %s decomposition failed: %s", basicGoal->name(), e.what());
@@ -939,7 +940,7 @@ void VCAI::mainLoop()
 			{
 				//the sub-goal was completed successfully
 				completeGoal(e.goal);
-				//local goal was also completed
+				//local goal was also completed?
 				completeGoal(goalToRealize);
 			}
 			catch (std::exception & e)
@@ -1508,6 +1509,9 @@ void VCAI::evaluateGoal(HeroPtr h)
 
 void VCAI::completeGoal(Goals::TSubgoal goal)
 {
+	if (goal->goalType == Goals::WIN) //we can never complete this goal - unless we already won
+		return;
+
 	logAi->trace("Completing goal: %s", goal->name());
 
 	//notify Managers
@@ -2248,8 +2252,8 @@ void VCAI::striveToGoal(Goals::TSubgoal basicGoal)
 		catch (goalFulfilledException & e)
 		{
 			//it is impossible to continue some goals (like exploration, for example)
-			completeGoal(basicGoal); //put in goalsToRemove
-			logAi->debug("Goal %s decomposition failed: goal was completed as much as possible", basicGoal->name());
+			completeGoal(e.goal); //put in goalsToRemove
+			logAi->debug("Goal %s decomposition failed: goal was completed as much as possible", e.goal->name());
 			return;
 		}
 		catch (std::exception & e)