瀏覽代碼

Fix initialization of gold pile from random resource with fixed amount

Ivan Savenko 1 年之前
父節點
當前提交
c68f2da977
共有 3 個文件被更改,包括 8 次插入4 次删除
  1. 4 1
      lib/mapObjects/MiscObjects.cpp
  2. 3 2
      lib/mapObjects/MiscObjects.h
  3. 1 1
      lib/mapping/MapFormatH3M.cpp

+ 4 - 1
lib/mapObjects/MiscObjects.cpp

@@ -263,6 +263,9 @@ void CGResource::pickRandomObject(CRandomGenerator & rand)
 		ID = Obj::RESOURCE;
 		subID = rand.nextInt(EGameResID::WOOD, EGameResID::GOLD);
 		setType(ID, subID);
+
+		if (subID == EGameResID::GOLD && amount != CGResource::RANDOM_AMOUNT)
+			amount *= CGResource::GOLD_AMOUNT_MULTIPLIER;
 	}
 }
 
@@ -275,7 +278,7 @@ void CGResource::initObj(CRandomGenerator & rand)
 		switch(resourceID().toEnum())
 		{
 		case EGameResID::GOLD:
-			amount = rand.nextInt(5, 10) * 100;
+			amount = rand.nextInt(5, 10) * CGResource::GOLD_AMOUNT_MULTIPLIER;
 			break;
 		case EGameResID::WOOD: case EGameResID::ORE:
 			amount = rand.nextInt(6, 10);

+ 3 - 2
lib/mapObjects/MiscObjects.h

@@ -122,8 +122,9 @@ class DLL_LINKAGE CGResource : public CArmedInstance
 public:
 	using CArmedInstance::CArmedInstance;
 
-	static constexpr ui32 RANDOM_AMOUNT = 0;
-	ui32 amount = RANDOM_AMOUNT; //0 if random
+	static constexpr uint32_t RANDOM_AMOUNT = 0;
+	static constexpr uint32_t GOLD_AMOUNT_MULTIPLIER = 100;
+	uint32_t amount = RANDOM_AMOUNT; //0 if random
 	
 	MetaString message;
 

+ 1 - 1
lib/mapping/MapFormatH3M.cpp

@@ -1315,7 +1315,7 @@ CGObjectInstance * CMapLoaderH3M::readResource(const int3 & mapPosition, std::sh
 	if(GameResID(objectTemplate->subid) == GameResID(EGameResID::GOLD))
 	{
 		// Gold is multiplied by 100.
-		object->amount *= 100;
+		object->amount *= CGResource::GOLD_AMOUNT_MULTIPLIER;
 	}
 	reader->skipZero(4);
 	return object;