From 79f5d260a40c20bcb790b07be646c08f558cf78d Mon Sep 17 00:00:00 2001 From: kdmcser Date: Thu, 8 Aug 2024 20:43:20 +0800 Subject: [PATCH] use primary skill array --- config/gameConfig.json | 5 +---- lib/GameSettings.cpp | 5 +---- lib/GameSettings.h | 5 +---- lib/MimialPrimarySkill.cpp | 21 +++++++++++++-------- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/config/gameConfig.json b/config/gameConfig.json index 93bbf9aaf..231185998 100644 --- a/config/gameConfig.json +++ b/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": diff --git a/lib/GameSettings.cpp b/lib/GameSettings.cpp index 2a3a32420..77c6b3c66 100644 --- a/lib/GameSettings.cpp +++ b/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" }, diff --git a/lib/GameSettings.h b/lib/GameSettings.h index 9fe5e3c26..bcd8151f7 100644 --- a/lib/GameSettings.h +++ b/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, diff --git a/lib/MimialPrimarySkill.cpp b/lib/MimialPrimarySkill.cpp index 978ef9ca2..0c659b383 100644 --- a/lib/MimialPrimarySkill.cpp +++ b/lib/MimialPrimarySkill.cpp @@ -14,16 +14,21 @@ VCMI_LIB_NAMESPACE_BEGIN +const std::vector DEFAULT_MINIMAL_PSKILLS= {0, 0, 1, 1}; +const std::map 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 \ No newline at end of file