Explorar el Código

Implemented support for showing amount of guards in banks

Ivan Savenko hace 2 años
padre
commit
7f1b982264
Se han modificado 4 ficheros con 28 adiciones y 0 borrados
  1. 6 0
      config/gameConfig.json
  2. 1 0
      lib/GameSettings.cpp
  3. 1 0
      lib/GameSettings.h
  4. 20 0
      lib/mapObjects/CBank.cpp

+ 6 - 0
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":
 		{

+ 1 - 0
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"            },

+ 1 - 0
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,

+ 20 - 0
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<CreatureID, int> 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);
 }