浏览代码

Adding zoneMonserStrength: none

Warzyw647 2 年之前
父节点
当前提交
8ebaa3fd6b
共有 4 个文件被更改,包括 9 次插入4 次删除
  1. 1 0
      lib/rmg/CRmgTemplate.cpp
  2. 2 1
      lib/rmg/CRmgTemplate.h
  3. 3 0
      lib/rmg/ObjectManager.cpp
  4. 3 3
      lib/rmg/TreasurePlacer.cpp

+ 1 - 0
lib/rmg/CRmgTemplate.cpp

@@ -380,6 +380,7 @@ void ZoneOptions::serializeJson(JsonSerializeFormat & handler)
 		//TODO: add support for std::map to serializeEnum
 		static const std::vector<std::string> STRENGTH =
 		{
+			"none",
 			"weak",
 			"normal",
 			"strong"

+ 2 - 1
lib/rmg/CRmgTemplate.h

@@ -45,7 +45,8 @@ namespace EMonsterStrength
 {
 	enum EMonsterStrength
 	{
-		RANDOM = -2,
+		RANDOM = -3,
+		ZONE_NONE = -2,
 		ZONE_WEAK = -1,
 		ZONE_NORMAL = 0,
 		ZONE_STRONG = 1,

+ 3 - 0
lib/rmg/ObjectManager.cpp

@@ -409,6 +409,9 @@ CGCreature * ObjectManager::chooseGuard(si32 strength, bool zoneGuard)
 	//precalculate actual (randomized) monster strength based on this post
 	//http://forum.vcmi.eu/viewtopic.php?p=12426#12426
 	
+	if(zone.zoneMonsterStrength == EMonsterStrength::ZONE_NONE)
+		return nullptr; //no guards in this zone
+	
 	int mapMonsterStrength = map.getMapGenOptions().getMonsterStrength();
 	int monsterStrength = (zoneGuard ? 0 : zone.zoneMonsterStrength) + mapMonsterStrength - 1; //array index from 0 to 4
 	static const std::array<int, 5> value1{2500, 1500, 1000, 500, 0};

+ 3 - 3
lib/rmg/TreasurePlacer.cpp

@@ -528,7 +528,7 @@ size_t TreasurePlacer::getPossibleObjectsSize() const
 
 bool TreasurePlacer::isGuardNeededForTreasure(int value)
 {
-	return zone.getType() != ETemplateZoneType::WATER && value > minGuardedValue;
+	return ((zone.zoneMonsterStrength != EMonsterStrength::ZONE_NONE) && (zone.getType() != ETemplateZoneType::WATER) && (value > minGuardedValue));
 }
 
 std::vector<ObjectInfo*> TreasurePlacer::prepareTreasurePile(const CTreasureInfo& treasureInfo)
@@ -687,8 +687,8 @@ void TreasurePlacer::createTreasures(ObjectManager & manager)
 	const int maxAttempts = 2;
 	
 	int mapMonsterStrength = map.getMapGenOptions().getMonsterStrength();
-	int monsterStrength = zone.zoneMonsterStrength + mapMonsterStrength - 1; //array index from 0 to 4
-	
+	int monsterStrength = (zone.zoneMonsterStrength == EMonsterStrength::ZONE_NONE ? 0 : zone.zoneMonsterStrength  + mapMonsterStrength - 1); //array index from 0 to 4
+	// pick any correct value for ZONE_NONE, minGuardedValue won't be used in this case anyway
 	static int minGuardedValues[] = { 6500, 4167, 3000, 1833, 1333 };
 	minGuardedValue = minGuardedValues[monsterStrength];