Bläddra i källkod

Merge pull request #1772 from vcmi/fix_invalid_native_terrain

Fix the case of invalid native town type
Andrii Danylchenko 2 år sedan
förälder
incheckning
a0de223901
2 ändrade filer med 13 tillägg och 3 borttagningar
  1. 2 2
      lib/GameConstants.h
  2. 11 1
      lib/rmg/Functions.cpp

+ 2 - 2
lib/GameConstants.h

@@ -250,8 +250,8 @@ public:
 	}
 
 	bool operator == (const Identifier & b) const { return num == b.num; }
-	bool operator <= (const Identifier & b) const { return num >= b.num; }
-	bool operator >= (const Identifier & b) const { return num <= b.num; }
+	bool operator <= (const Identifier & b) const { return num <= b.num; }
+	bool operator >= (const Identifier & b) const { return num >= b.num; }
 	bool operator != (const Identifier & b) const { return num != b.num; }
 	bool operator <  (const Identifier & b) const { return num <  b.num; }
 	bool operator >  (const Identifier & b) const { return num > b.num; }

+ 11 - 1
lib/rmg/Functions.cpp

@@ -130,7 +130,17 @@ void initTerrainType(Zone & zone, CMapGenerator & gen)
 	{
 		if(zone.isMatchTerrainToTown() && zone.getTownType() != ETownType::NEUTRAL)
 		{
-			zone.setTerrainType((*VLC->townh)[zone.getTownType()]->nativeTerrain);
+			auto terrainType = (*VLC->townh)[zone.getTownType()]->nativeTerrain;
+
+			if (terrainType <= ETerrainId::NONE)
+			{
+				logGlobal->warn("Town %s has invalid terrain type: %d", zone.getTownType(), terrainType);
+				zone.setTerrainType(ETerrainId::DIRT);
+			}
+			else
+			{
+				zone.setTerrainType(terrainType);
+			}
 		}
 		else
 		{