From 7f1b982264dbc59e12af6a27c440f15818255e6d Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Wed, 19 Jul 2023 13:17:50 +0300 Subject: [PATCH] Implemented support for showing amount of guards in banks --- config/gameConfig.json | 6 ++++++ lib/GameSettings.cpp | 1 + lib/GameSettings.h | 1 + lib/mapObjects/CBank.cpp | 20 ++++++++++++++++++++ 4 files changed, 28 insertions(+) diff --git a/config/gameConfig.json b/config/gameConfig.json index 048d23e12..66fda48aa 100644 --- a/config/gameConfig.json +++ b/config/gameConfig.json @@ -320,6 +320,12 @@ // period between restocking of "Black Market" object found on adventure map "blackMarketRestockPeriod" : 0 }, + + "banks" : + { + // show guards composition when visiting creature banks + "showGuardsComposition" : true + }, "modules": { diff --git a/lib/GameSettings.cpp b/lib/GameSettings.cpp index 5abdedc6c..3a2969704 100644 --- a/lib/GameSettings.cpp +++ b/lib/GameSettings.cpp @@ -81,6 +81,7 @@ void GameSettings::load(const JsonNode & input) {EGameSettings::MAP_FORMAT_IN_THE_WAKE_OF_GODS, "mapFormat", "inTheWakeOfGods" }, {EGameSettings::MAP_FORMAT_JSON_VCMI, "mapFormat", "jsonVCMI" }, {EGameSettings::MARKETS_BLACK_MARKET_RESTOCK_PERIOD, "markets", "blackMarketRestockPeriod" }, + {EGameSettings::BANKS_SHOW_GUARDS_COMPOSITION, "banks", "showGuardsComposition" }, {EGameSettings::MODULE_COMMANDERS, "modules", "commanders" }, {EGameSettings::MODULE_STACK_ARTIFACT, "modules", "stackArtifact" }, {EGameSettings::MODULE_STACK_EXPERIENCE, "modules", "stackExperience" }, diff --git a/lib/GameSettings.h b/lib/GameSettings.h index e933fa197..eae22cbda 100644 --- a/lib/GameSettings.h +++ b/lib/GameSettings.h @@ -39,6 +39,7 @@ enum class EGameSettings HEROES_STARTING_STACKS_CHANCES, HEROES_BACKPACK_CAP, MARKETS_BLACK_MARKET_RESTOCK_PERIOD, + BANKS_SHOW_GUARDS_COMPOSITION, MODULE_COMMANDERS, MODULE_STACK_ARTIFACT, MODULE_STACK_EXPERIENCE, diff --git a/lib/mapObjects/CBank.cpp b/lib/mapObjects/CBank.cpp index 23c4c2391..e36dbf5df 100644 --- a/lib/mapObjects/CBank.cpp +++ b/lib/mapObjects/CBank.cpp @@ -17,6 +17,7 @@ #include "../NetPacks.h" #include "../CGeneralTextHandler.h" #include "../CSoundBase.h" +#include "../GameSettings.h" #include "../mapObjectConstructors/CObjectClassesHandler.h" #include "../mapObjectConstructors/CBankInstanceConstructor.h" #include "../IGameCallback.h" @@ -131,6 +132,25 @@ void CBank::onHeroVisit(const CGHeroInstance * h) const bd.text.appendLocalString(EMetaText::ADVOB_TXT, banktext); if (banktext == 32) bd.text.replaceRawString(getObjectName()); + + if (VLC->settings()->getBoolean(EGameSettings::BANKS_SHOW_GUARDS_COMPOSITION)) + { + std::map guardsAmounts; + + for (auto const & guard : bc->guards) + guardsAmounts[guard.getType()->getId()] += guard.getCount(); + + for (auto const & guard : guardsAmounts) + { + Component comp; + comp.id = Component::EComponentType::CREATURE; + comp.subtype = guard.first.getNum(); + comp.val = guard.second; + + bd.components.push_back(comp); + } + } + cb->showBlockingDialog(&bd); }