Browse Source

Fixed loading of settings from mods

Ivan Savenko 2 years ago
parent
commit
aea2a1e22e
4 changed files with 24 additions and 6 deletions
  1. 15 1
      config/schemas/mod.json
  2. 2 2
      config/schemas/settings.json
  3. 2 1
      lib/CModHandler.cpp
  4. 5 2
      lib/GameSettings.cpp

+ 15 - 1
config/schemas/mod.json

@@ -91,7 +91,7 @@
 		"language" : {
 			"type":"string",
 			"description": "Base language of the mod, before applying localizations. By default vcmi assumes English",
-			"enum" : [ "chinese", "english", "korean", "german", "polish", "russian", "ukrainian" ],
+			"enum" : [ "chinese", "english", "korean", "german", "polish", "russian", "spanish", "ukrainian" ],
 		},
 		"depends": {
 			"type":"array",
@@ -143,6 +143,9 @@
 		"russian" : {
 			"$ref" : "#/definitions/localizable"
 		},
+		"spanish" : {
+			"$ref" : "#/definitions/localizable"
+		},
 		"ukrainian" : {
 			"$ref" : "#/definitions/localizable"
 		},
@@ -243,6 +246,17 @@
 				"items" : { "type":"string" }
 			}
 		},
+		
+		"settings" : {
+			"type":"object",
+			"description": "List of changed game settings by mod",
+			"additionalProperties" : {
+				"type" : "object",
+				"properties" : { 
+					"type" : "object"
+				}
+			}
+		},
 
 		"filesystem": {
 			"type":"object",

+ 2 - 2
config/schemas/settings.json

@@ -64,12 +64,12 @@
 				},
 				"language" : {
 					"type":"string",
-					"enum" : [ "chinese", "english", "german", "polish", "russian", "ukrainian" ],
+					"enum" : [ "chinese", "english", "german", "polish", "russian", "spanish", "ukrainian" ],
 					"default" : "english"
 				},
 				"gameDataLanguage" : {
 					"type":"string",
-					"enum" : [ "auto", "chinese", "english", "german", "korean", "polish", "russian", "ukrainian", "other_cp1250", "other_cp1251", "other_cp1252" ],
+					"enum" : [ "auto", "chinese", "english", "german", "korean", "polish", "russian", "spanish", "ukrainian", "other_cp1250", "other_cp1251", "other_cp1252" ],
 					"default" : "auto"
 				},
 				"lastSave" : {

+ 2 - 1
lib/CModHandler.cpp

@@ -1064,7 +1064,8 @@ void CModHandler::initializeConfig()
 	for(const TModID & modName : activeMods)
 	{
 		const auto & mod = allMods[modName];
-		VLC->settingsHandler->load(mod.config["settings"]);
+		if (!mod.config["settings"].isNull())
+			VLC->settingsHandler->load(mod.config["settings"]);
 	}
 }
 

+ 5 - 2
lib/GameSettings.cpp

@@ -91,9 +91,12 @@ void GameSettings::load(const JsonNode & input)
 	for(const auto & option : optionPath)
 	{
 		const JsonNode & optionValue = input[option.group][option.key];
+		size_t index = static_cast<size_t>(option.setting);
 
-		if(!optionValue.isNull())
-			gameSettings[static_cast<size_t>(option.setting)] = optionValue;
+		if(optionValue.isNull())
+			continue;
+
+		JsonUtils::mergeCopy(gameSettings[index], optionValue);
 	}
 }