Răsfoiți Sursa

Fixed copying zone settings.

DjWarmonger 11 ani în urmă
părinte
comite
fe05de9aff
2 a modificat fișierele cu 29 adăugiri și 18 ștergeri
  1. 12 12
      config/rmg.json
  2. 17 6
      lib/rmg/CRmgTemplateStorage.cpp

+ 12 - 12
config/rmg.json

@@ -16,19 +16,19 @@
 			{
 				"type" : "playerStart", "size" : 1, "owner" : 2,
 				"playerTowns" : { "castles" : 1 }, "neutralTowns" : { "towns" : 1 }, "townsAreSameType" : true,
-				"treaureLikeZone" : 1
+				"treasureLikeZone" : 1
 			},
 			"3" :
 			{
 				"type" : "playerStart", "size" : 1, "owner" : 3,
 				"playerTowns" : { "castles" : 1 }, "neutralTowns" : { "towns" : 1 }, "townsAreSameType" : true,
-				"treaureLikeZone" : 1
+				"treasureLikeZone" : 1
 			},
 			"4" :
 			{
 				"type" : "playerStart", "size" : 1, "owner" : 4,
 				"playerTowns" : { "castles" : 1 }, "neutralTowns" : { "towns" : 1 }, "townsAreSameType" : true,
-				"treaureLikeZone" : 1
+				"treasureLikeZone" : 1
 			},
 			"5" :
 			{
@@ -60,7 +60,7 @@
 			{
 				"type" : "playerStart", "size" : 1, "owner" : 2,
 				"playerTowns" : { "castles" : 1 },
-				"treaureLikeZone" : 1
+				"treasureLikeZone" : 1
 			},
 			"3" :
 			{
@@ -70,7 +70,7 @@
 			"4" :
 			{
 				"type" : "treasure", "size" : 2, "neutralTowns" : { "towns" : 1 }, "townTypeLikeZone" : "2",
-				"treaureLikeZone" : 3
+				"treasureLikeZone" : 3
 			},
 			"5" :
 			{
@@ -113,14 +113,14 @@
 				"treaureLikeZone" : 1
 			},
 			"4" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "1", "treasure" : {"min" : 3000, "max": 10000} },
-			"5" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "1", "treaureLikeZone" : 4},
-			"6" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "2", "treaureLikeZone" : 4 },
-			"7" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "2", "treaureLikeZone" : 4 },
-			"8" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "3", "treaureLikeZone" : 4 },
-			"9" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "3", "treaureLikeZone" : 4 },
+			"5" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "1", "treasureLikeZone" : 4},
+			"6" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "2", "treasureLikeZone" : 4 },
+			"7" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "2", "treasureLikeZone" : 4 },
+			"8" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "3", "treasureLikeZone" : 4 },
+			"9" : { "type" : "treasure", "size" : 1, "terrainTypeLikeZone" : "3", "treasureLikeZone" : 4 },
 			"10" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasure" : {"min" : 10000, "max": 25000} },
-			"11" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treaureLikeZone" : 10 },
-			"12" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treaureLikeZone" : 10 }
+			"11" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasureLikeZone" : 10 },
+			"12" : { "type" : "treasure", "size" : 1, "neutralTowns" : { "towns" : 1 }, "treasureLikeZone" : 10 }
 		},
 		"connections" :
 		[

+ 17 - 6
lib/rmg/CRmgTemplateStorage.cpp

@@ -63,9 +63,6 @@ void CJsonRmgTemplateLoader::loadTemplates()
 				zone->setMatchTerrainToTown(zoneNode["matchTerrainToTown"].Bool());
 				zone->setTerrainTypes(parseTerrainTypes(zoneNode["terrainTypes"].Vector(), zone->getDefaultTerrainTypes()));
 				zone->setTownsAreSameType((zoneNode["townsAreSameType"].Bool()));
-				//TODO: do these lines even do anything?
-				if(!zoneNode["terrainTypeLikeZone"].isNull()) zone->setTerrainTypeLikeZone(boost::lexical_cast<int>(zoneNode["terrainTypeLikeZone"].String()));
-				if(!zoneNode["townTypeLikeZone"].isNull()) zone->setTownTypeLikeZone(boost::lexical_cast<int>(zoneNode["townTypeLikeZone"].String()));
 
 				//treasures
 				if (!zoneNode["treasure"].isNull())
@@ -80,17 +77,31 @@ void CJsonRmgTemplateLoader::loadTemplates()
 						zone->addTreasureInfo(ti);
 					}
 				}
+
+				zones[zone->getId()] = zone;
+			}
+
+			//copy settings from already parsed zones
+			for (const auto & zonePair : templateNode["zones"].Struct())
+			{
+				auto zoneId = boost::lexical_cast<TRmgTemplateZoneId>(zonePair.first);
+				auto zone = zones[zoneId];
+
+				const auto & zoneNode = zonePair.second;
+
+				//TODO: do these lines even do anything?
+				if(!zoneNode["terrainTypeLikeZone"].isNull()) zone->setTerrainTypeLikeZone(boost::lexical_cast<int>(zoneNode["terrainTypeLikeZone"].String()));
+				if(!zoneNode["townTypeLikeZone"].isNull()) zone->setTownTypeLikeZone(boost::lexical_cast<int>(zoneNode["townTypeLikeZone"].String()));
+
 				if (!zoneNode["treasureLikeZone"].isNull())
 				{
-					//TODO: check if the zone with that index exists
 					for (auto treasureInfo : zones[zoneNode["treasureLikeZone"].Float()]->getTreasureInfo())
 					{
 						zone->addTreasureInfo(treasureInfo);
 					}
 				}
-
-				zones[zone->getId()] = zone;
 			}
+
 			tpl->setZones(zones);
 
 			// Parse connections