Browse Source

Fix build

Ivan Savenko 2 years ago
parent
commit
0ea44520fd
4 changed files with 17 additions and 15 deletions
  1. 1 1
      config/objects/rewardableScholar.json
  2. 14 12
      lib/JsonRandom.cpp
  3. 1 1
      lib/JsonRandom.h
  4. 1 1
      lib/rewardable/Info.cpp

+ 1 - 1
config/objects/rewardableScholar.json

@@ -47,7 +47,7 @@
 						},
 						"spells" : [
 							"@gainedSpell"
-						]
+						],
 						"removeObject" : true
 					},
 					{

+ 14 - 12
lib/JsonRandom.cpp

@@ -95,6 +95,12 @@ namespace JsonRandom
 			return loadVariable(IdentifierType::entityType(), value.String(), variables, IdentifierType::NONE);
 	}
 
+	template<>
+	PlayerColor decodeKey(const JsonNode & value, const Variables & variables)
+	{
+		return PlayerColor(*VLC->identifiers()->getIdentifier("playerColor", value));
+	}
+
 	template<>
 	PrimarySkill decodeKey(const JsonNode & value, const Variables & variables)
 	{
@@ -414,23 +420,19 @@ namespace JsonRandom
 		return ret;
 	}
 
-	std::vector<PlayerColor> loadColors(const JsonNode & value, CRandomGenerator & rng)
+	std::vector<PlayerColor> loadColors(const JsonNode & value, CRandomGenerator & rng, const Variables & variables)
 	{
 		std::vector<PlayerColor> ret;
-		std::set<std::string> def;
-		
-		for(auto & color : GameConstants::PLAYER_COLOR_NAMES)
-			def.insert(color);
-		
+		std::set<PlayerColor> defaultPlayers;
+		for(size_t i = 0; i < PlayerColor::PLAYER_LIMIT_I; ++i)
+			defaultPlayers.insert(PlayerColor(i));
+
 		for(auto & entry : value.Vector())
 		{
-			auto key = loadKey(entry, rng, def);
-			auto pos = vstd::find_pos(GameConstants::PLAYER_COLOR_NAMES, key);
-			if(pos < 0)
-				logMod->warn("Unable to determine player color %s", key);
-			else
-				ret.emplace_back(pos);
+			std::set<PlayerColor> potentialPicks = filterKeys(entry, defaultPlayers, variables);
+			ret.push_back(*RandomGeneratorUtil::nextItem(potentialPicks, rng));
 		}
+
 		return ret;
 	}
 

+ 1 - 1
lib/JsonRandom.h

@@ -52,7 +52,7 @@ namespace JsonRandom
 	DLL_LINKAGE std::vector<CStackBasicDescriptor> loadCreatures(const JsonNode & value, CRandomGenerator & rng, const Variables & variables);
 	DLL_LINKAGE std::vector<RandomStackInfo> evaluateCreatures(const JsonNode & value, const Variables & variables);
 
-	DLL_LINKAGE std::vector<PlayerColor> loadColors(const JsonNode & value, CRandomGenerator & rng);
+	DLL_LINKAGE std::vector<PlayerColor> loadColors(const JsonNode & value, CRandomGenerator & rng, const Variables & variables);
 	DLL_LINKAGE std::vector<HeroTypeID> loadHeroes(const JsonNode & value, CRandomGenerator & rng);
 	DLL_LINKAGE std::vector<HeroClassID> loadHeroClasses(const JsonNode & value, CRandomGenerator & rng);
 

+ 1 - 1
lib/rewardable/Info.cpp

@@ -122,7 +122,7 @@ void Rewardable::Info::configureLimiter(Rewardable::Configuration & object, CRan
 	limiter.canLearnSpells  = JsonRandom::loadSpells(source["canLearnSpells"], rng, variables);
 	limiter.creatures = JsonRandom::loadCreatures(source["creatures"], rng, variables);
 	
-	limiter.players = JsonRandom::loadColors(source["colors"], rng);
+	limiter.players = JsonRandom::loadColors(source["colors"], rng, variables);
 	limiter.heroes = JsonRandom::loadHeroes(source["heroes"], rng);
 	limiter.heroClasses = JsonRandom::loadHeroClasses(source["heroClasses"], rng);