Prechádzať zdrojové kódy

fixed base merging and limiter creation

Henning Koehler 8 rokov pred
rodič
commit
16f59fb213
3 zmenil súbory, kde vykonal 11 pridanie a 8 odobranie
  1. 6 4
      config/heroes/castle.json
  2. 4 3
      lib/CHeroHandler.cpp
  3. 1 1
      lib/HeroBonus.cpp

+ 6 - 4
config/heroes/castle.json

@@ -35,10 +35,12 @@
 		],
 		"specialty" : {
 			"base" : {
-				"limiter" : {
-					"parameters" : [ "archer", true ],
-					"type" : "CREATURE_TYPE_LIMITER"
-				}
+				"limiters" : [
+					{
+						"parameters" : [ "archer", true ],
+						"type" : "CREATURE_TYPE_LIMITER"
+					}
+				]
 			},
 			"bonuses" : {
 				"attack" : {

+ 4 - 3
lib/CHeroHandler.cpp

@@ -536,14 +536,15 @@ std::vector<std::shared_ptr<Bonus>> SpecialtyInfoToBonuses(const SSpecialtyInfo
 void CHeroHandler::beforeValidate(JsonNode & object)
 {
 	//handle "base" specialty info
-	const JsonNode & specialtyNode = object["specialty"];
+	JsonNode & specialtyNode = object["specialty"];
 	if(specialtyNode.getType() == JsonNode::JsonType::DATA_STRUCT)
 	{
 		const JsonNode & base = specialtyNode["base"];
 		if(!base.isNull())
 		{
-			for(auto keyValue : specialtyNode["bonuses"].Struct())
-				JsonUtils::inherit(keyValue.second, base);
+			JsonMap & bonuses = specialtyNode["bonuses"].Struct();
+			for(std::pair<std::string, JsonNode> keyValue : bonuses)
+				JsonUtils::inherit(bonuses[keyValue.first], base);
 		}
 	}
 }

+ 1 - 1
lib/HeroBonus.cpp

@@ -1212,7 +1212,7 @@ JsonNode Bonus::toJsonNode() const
 	if(valType != ADDITIVE_VALUE)
 		root["valType"].String() = vstd::findKey(bonusValueMap, valType);
 	if(limiter)
-		root["limiter"] = limiter->toJsonNode();
+		root["limiters"].Vector().push_back(limiter->toJsonNode());
 	if(updater)
 		root["updater"] = updater->toJsonNode();
 	return root;