Browse Source

- added check to avoid recursion in AI town building code
- restored previously missing AI shield during AI turn

Ivan Savenko 12 years ago
parent
commit
881a7cf862
3 changed files with 12 additions and 3 deletions
  1. 6 0
      AI/VCAI/VCAI.cpp
  2. 3 3
      AI/VCAI/VCAI.h
  3. 3 0
      client/AdventureMapClasses.cpp

+ 6 - 0
AI/VCAI/VCAI.cpp

@@ -928,6 +928,12 @@ void VCAI::recruitCreatures(const CGDwelling * d)
 
 bool VCAI::tryBuildStructure(const CGTownInstance * t, BuildingID building, unsigned int maxDays)
 {
+	if (maxDays == 0)
+	{
+		logAi->warnStream() << "Request to build building " << building <<  " in 0 days!";
+		return false;
+	}
+
 	if (!vstd::contains(t->town->buildings, building))
 		return false; // no such building in town
 

+ 3 - 3
AI/VCAI/VCAI.h

@@ -115,11 +115,11 @@ class VCAI : public CAdventureAI
 	//internal methods for town development
 
 	//try build an unbuilt structure in maxDays at most (0 = indefinite)
-	bool tryBuildStructure(const CGTownInstance * t, BuildingID building, unsigned int maxDays=0);
+	bool tryBuildStructure(const CGTownInstance * t, BuildingID building, unsigned int maxDays=7);
 	//try build ANY unbuilt structure
-	bool tryBuildAnyStructure(const CGTownInstance * t, std::vector<BuildingID> buildList, unsigned int maxDays=0);
+	bool tryBuildAnyStructure(const CGTownInstance * t, std::vector<BuildingID> buildList, unsigned int maxDays=7);
 	//try build first unbuilt structure
-	bool tryBuildNextStructure(const CGTownInstance * t, std::vector<BuildingID> buildList, unsigned int maxDays=0);
+	bool tryBuildNextStructure(const CGTownInstance * t, std::vector<BuildingID> buildList, unsigned int maxDays=7);
 
 public:
 	friend class FuzzyHelper;

+ 3 - 0
client/AdventureMapClasses.cpp

@@ -627,6 +627,9 @@ void CMinimap::setAIRadar(bool on)
 		vstd::clear_pointer(aiShield);
 		update();
 	}
+	// this my happen during AI turn when this interface is inactive
+	// force redraw in order to properly update interface
+	GH.totalRedraw();
 }
 
 void CMinimap::hideTile(const int3 &pos)