Sfoglia il codice sorgente

use primary skill array

kdmcser 1 anno fa
parent
commit
79f5d260a4
4 ha cambiato i file con 16 aggiunte e 20 eliminazioni
  1. 1 4
      config/gameConfig.json
  2. 1 4
      lib/GameSettings.cpp
  3. 1 4
      lib/GameSettings.h
  4. 13 8
      lib/MimialPrimarySkill.cpp

+ 1 - 4
config/gameConfig.json

@@ -298,10 +298,7 @@
 			// if heroes are invitable in tavern
 			"tavernInvite"            : false,
 			// minimai primary skills for heroes
-			"minimalAttack": 0,
-			"minimalDefence": 0,
-			"minimalKnowledge": 1,
-			"minimalSpellPower": 1
+			"minimalPrimarySkills": [ 0, 0, 1, 1]
 		},
 
 		"towns":

+ 1 - 4
lib/GameSettings.cpp

@@ -75,10 +75,7 @@ void GameSettings::load(const JsonNode & input)
 		{EGameSettings::HEROES_STARTING_STACKS_CHANCES,         "heroes",    "startingStackChances"             },
 		{EGameSettings::HEROES_BACKPACK_CAP,                    "heroes",    "backpackSize"                     },
 		{EGameSettings::HEROES_TAVERN_INVITE,                   "heroes",    "tavernInvite"                     },
-		{EGameSettings::HEROES_MINIMAL_ATTACK,                  "heroes",    "minimalAttack"                    },
-		{EGameSettings::HEROES_MINIMAL_DEFENCE,                 "heroes",    "minimalDefence"                   },
-		{EGameSettings::HEROES_MINIMAL_KNOWLEDGE,               "heroes",    "minimalKnowledge"                 },
-		{EGameSettings::HEROES_MINIMAL_SPELL_POWER,             "heroes",    "minimalSpellPower"                },
+		{EGameSettings::HEROES_MINIMAL_PRIMARY_SKILLS,          "heroes",    "minimalPrimarySkills"             },
 		{EGameSettings::MAP_FORMAT_RESTORATION_OF_ERATHIA,      "mapFormat", "restorationOfErathia"             },
 		{EGameSettings::MAP_FORMAT_ARMAGEDDONS_BLADE,           "mapFormat", "armageddonsBlade"                 },
 		{EGameSettings::MAP_FORMAT_SHADOW_OF_DEATH,             "mapFormat", "shadowOfDeath"                    },

+ 1 - 4
lib/GameSettings.h

@@ -39,10 +39,7 @@ enum class EGameSettings
 	HEROES_STARTING_STACKS_CHANCES,
 	HEROES_BACKPACK_CAP,
 	HEROES_TAVERN_INVITE,
-	HEROES_MINIMAL_ATTACK,
-	HEROES_MINIMAL_DEFENCE,
-	HEROES_MINIMAL_KNOWLEDGE,
-	HEROES_MINIMAL_SPELL_POWER,
+	HEROES_MINIMAL_PRIMARY_SKILLS,
 	MARKETS_BLACK_MARKET_RESTOCK_PERIOD,
 	BANKS_SHOW_GUARDS_COMPOSITION,
 	MODULE_COMMANDERS,

+ 13 - 8
lib/MimialPrimarySkill.cpp

@@ -14,16 +14,21 @@
 
 VCMI_LIB_NAMESPACE_BEGIN
 
+const std::vector<int> DEFAULT_MINIMAL_PSKILLS= {0, 0, 1, 1};
+const std::map<PrimarySkill, int> PSKILL_INDEX_MAP = {
+        {PrimarySkill::ATTACK, 0},
+        {PrimarySkill::DEFENSE, 1},
+        {PrimarySkill::SPELL_POWER, 2},
+        {PrimarySkill::KNOWLEDGE, 3}
+};
+
 int getPrimarySkillMinimum(PrimarySkill pSkill)
 {
-    if (pSkill == PrimarySkill::ATTACK)
-        return VLC->settings()->getInteger(EGameSettings::HEROES_MINIMAL_ATTACK);
-    else if (pSkill == PrimarySkill::DEFENSE)
-        return VLC->settings()->getInteger(EGameSettings::HEROES_MINIMAL_DEFENCE);
-    else if (pSkill == PrimarySkill::SPELL_POWER)
-        return VLC->settings()->getInteger(EGameSettings::HEROES_MINIMAL_SPELL_POWER);
-    else
-        return VLC->settings()->getInteger(EGameSettings::HEROES_MINIMAL_KNOWLEDGE);
+    auto minialPSkills = VLC->settings()->getVector(EGameSettings::HEROES_MINIMAL_PRIMARY_SKILLS);
+    if(minialPSkills.size() != DEFAULT_MINIMAL_PSKILLS.size())
+        logGlobal->error("gameConfig.json: heroes/minimalPrimarySkills format error. need a vector with 4 elements.");
+    int index = PSKILL_INDEX_MAP.at(pSkill);
+    return minialPSkills.size() > index ? minialPSkills[index] : DEFAULT_MINIMAL_PSKILLS[index];
 }
 
 VCMI_LIB_NAMESPACE_END