浏览代码

Hardcoded feature to allow new heroes always have 3 stacks like in HotA

Dydzio 2 年之前
父节点
当前提交
4f4660e82d
共有 4 个文件被更改,包括 18 次插入9 次删除
  1. 2 1
      config/defaultMods.json
  2. 2 0
      lib/CModHandler.cpp
  3. 2 0
      lib/CModHandler.h
  4. 12 8
      lib/mapObjects/CGHeroInstance.cpp

+ 2 - 1
config/defaultMods.json

@@ -33,7 +33,8 @@
 		"ATTACK_POINT_DMG_MULTIPLIER": 0.05, //every 1 attack point damage influence in battle when attack points > defense points during creature attack
 		"ATTACK_POINTS_DMG_MULTIPLIER_CAP": 4.0, //limit of damage increase that can be achieved by overpowering attack points
 		"DEFENSE_POINT_DMG_MULTIPLIER": 0.025, //every 1 defense point damage influence in battle when defense points > attack points during creature attack
-		"DEFENSE_POINTS_DMG_MULTIPLIER_CAP": 0.7 //limit of damage reduction that can be achieved by overpowering defense points
+		"DEFENSE_POINTS_DMG_MULTIPLIER_CAP": 0.7, //limit of damage reduction that can be achieved by overpowering defense points
+		"NEW_HERO_ALWAYS_3_CREATURE_STACKS": false
 	},
 	"modules":
 	{

+ 2 - 0
lib/CModHandler.cpp

@@ -766,6 +766,8 @@ void CModHandler::loadConfigFromFile (std::string name)
 	logMod->debug("\tDEFENSE_POINT_DMG_MULTIPLIER\t%f", settings.DEFENSE_POINT_DMG_MULTIPLIER);
 	settings.DEFENSE_POINTS_DMG_MULTIPLIER_CAP = hardcodedFeatures["DEFENSE_POINTS_DMG_MULTIPLIER_CAP"].Float();
 	logMod->debug("\tDEFENSE_POINTS_DMG_MULTIPLIER_CAP\t%f", settings.DEFENSE_POINTS_DMG_MULTIPLIER_CAP);
+	settings.NEW_HERO_ALWAYS_3_CREATURE_STACKS = hardcodedFeatures["NEW_HERO_ALWAYS_3_CREATURE_STACKS"].Bool();
+	logMod->debug("\tNEW_HERO_ALWAYS_3_CREATURE_STACKS\t%f", settings.NEW_HERO_ALWAYS_3_CREATURE_STACKS);
 
 	const JsonNode & gameModules = settings.data["modules"];
 	modules.STACK_EXP = gameModules["STACK_EXPERIENCE"].Bool();

+ 2 - 0
lib/CModHandler.h

@@ -363,6 +363,7 @@ public:
 		double ATTACK_POINTS_DMG_MULTIPLIER_CAP;
 		double DEFENSE_POINT_DMG_MULTIPLIER;
 		double DEFENSE_POINTS_DMG_MULTIPLIER_CAP;
+		bool NEW_HERO_ALWAYS_3_CREATURE_STACKS;
 
 		template <typename Handler> void serialize(Handler &h, const int version)
 		{
@@ -382,6 +383,7 @@ public:
 			h & ATTACK_POINTS_DMG_MULTIPLIER_CAP;
 			h & DEFENSE_POINT_DMG_MULTIPLIER;
 			h & DEFENSE_POINTS_DMG_MULTIPLIER_CAP;
+			h & NEW_HERO_ALWAYS_3_CREATURE_STACKS;
 		}
 	} settings;
 

+ 12 - 8
lib/mapObjects/CGHeroInstance.cpp

@@ -348,16 +348,20 @@ void CGHeroInstance::initArmy(CRandomGenerator & rand, IArmyDescriptor * dst)
 	if(!dst)
 		dst = this;
 
-	int howManyStacks = 0; //how many stacks will hero receives <1 - 3>
-	int pom = rand.nextInt(99);
+	int howManyStacks = 3; //how many stacks will hero receives <1 - 3>
 	int warMachinesGiven = 0;
 
-	if(pom < 9)
-		howManyStacks = 1;
-	else if(pom < 79)
-		howManyStacks = 2;
-	else
-		howManyStacks = 3;
+	if(!VLC->modh->settings.NEW_HERO_ALWAYS_3_CREATURE_STACKS)
+	{
+		int stacksCountInitRandomNumber = rand.nextInt(99);
+
+		if(stacksCountInitRandomNumber < 9)
+			howManyStacks = 1;
+		else if(stacksCountInitRandomNumber < 79)
+			howManyStacks = 2;
+		else
+			howManyStacks = 3;
+	}
 
 	vstd::amin(howManyStacks, type->initialArmy.size());