Browse Source

Handle "bannedTowns" (alredy used on Jebus).

Tomasz Zieliński 2 years ago
parent
commit
73b78dd75e
2 changed files with 13 additions and 3 deletions
  1. 11 2
      lib/rmg/CRmgTemplate.cpp
  2. 2 1
      lib/rmg/CRmgTemplate.h

+ 11 - 2
lib/rmg/CRmgTemplate.cpp

@@ -205,9 +205,17 @@ std::set<FactionID> ZoneOptions::getDefaultTownTypes() const
 	return defaultTowns;
 }
 
-const std::set<FactionID> & ZoneOptions::getTownTypes() const
+const std::set<FactionID> ZoneOptions::getTownTypes() const
 {
-	return townTypes;
+	if (townTypes.empty())
+	{
+		//Assume that all towns are allowed, unless banned
+		return vstd::difference(getDefaultTownTypes(), bannedTownTypes);
+	}
+	else 
+	{
+		return vstd::difference(townTypes, bannedTownTypes);
+	}
 }
 
 void ZoneOptions::setTownTypes(const std::set<FactionID> & value)
@@ -376,6 +384,7 @@ void ZoneOptions::serializeJson(JsonSerializeFormat & handler)
 	handler.serializeBool("townsAreSameType", townsAreSameType, false);
 	handler.serializeIdArray<FactionID, FactionID>("allowedMonsters", monsterTypes, std::set<FactionID>());
 	handler.serializeIdArray<FactionID, FactionID>("allowedTowns", townTypes, std::set<FactionID>());
+	handler.serializeIdArray<FactionID, FactionID>("bannedTowns", bannedTownTypes, std::set<FactionID>());
 
 	{
 		//TODO: add support for std::map to serializeEnum

+ 2 - 1
lib/rmg/CRmgTemplate.h

@@ -145,7 +145,7 @@ public:
 	const CTownInfo & getPlayerTowns() const;
 	const CTownInfo & getNeutralTowns() const;
 	std::set<FactionID> getDefaultTownTypes() const;
-	const std::set<FactionID> & getTownTypes() const;
+	const std::set<FactionID> getTownTypes() const;
 	const std::set<FactionID> & getMonsterTypes() const;
 
 	void setTownTypes(const std::set<FactionID> & value);
@@ -188,6 +188,7 @@ protected:
 	bool townsAreSameType;
 
 	std::set<FactionID> townTypes;
+	std::set<FactionID> bannedTownTypes;
 	std::set<FactionID> monsterTypes;
 
 	std::map<TResource, ui16> mines; //obligatory mines to spawn in this zone