Browse Source

Fix possible crash on loading save with invalid buildings, e.g. Mage
Guild 4 in towns without one

Ivan Savenko 9 months ago
parent
commit
4ccd860b2f
1 changed files with 8 additions and 0 deletions
  1. 8 0
      lib/mapObjects/CGTownInstance.cpp

+ 8 - 0
lib/mapObjects/CGTownInstance.cpp

@@ -1247,6 +1247,14 @@ void CGTownInstance::postDeserialize()
 	setNodeType(CBonusSystemNode::TOWN);
 	setNodeType(CBonusSystemNode::TOWN);
 	for(auto & building : rewardableBuildings)
 	for(auto & building : rewardableBuildings)
 		building.second->town = this;
 		building.second->town = this;
+
+	if (getFactionID().hasValue())
+	{
+		vstd::erase_if(builtBuildings, [this](const BuildingID & buildID)
+		{
+			return getTown()->buildings.count(buildID) == 0;
+		});
+	}
 }
 }
 
 
 std::map<BuildingID, TownRewardableBuildingInstance*> CGTownInstance::convertOldBuildings(std::vector<TownRewardableBuildingInstance*> oldVector)
 std::map<BuildingID, TownRewardableBuildingInstance*> CGTownInstance::convertOldBuildings(std::vector<TownRewardableBuildingInstance*> oldVector)