Przeglądaj źródła

- Implemented map object limit which should also distribute the objects evenly
- Fixed Magic Well limit of 1 per zone

DjWarmonger 11 lat temu
rodzic
commit
1cabc8f7f4
2 zmienionych plików z 8 dodań i 3 usunięć
  1. 1 0
      config/objects/generic.json
  2. 7 3
      lib/rmg/CRmgTemplateZone.cpp

+ 1 - 0
config/objects/generic.json

@@ -401,6 +401,7 @@
 			"object" : {
 				"index" : 0,
 				"rmg" : {
+					"zoneLimit" : 1,
 					"value"		: 250,
 					"rarity"	: 100
 				}

+ 7 - 3
lib/rmg/CRmgTemplateZone.cpp

@@ -1606,6 +1606,8 @@ void CRmgTemplateZone::addAllPossibleObjects (CMapGenerator* gen)
 	ObjectInfo oi;
 	oi.maxPerMap = std::numeric_limits<ui32>().max();
 
+	int numZones = gen->getZones().size();
+
 	for (auto primaryID : VLC->objtypeh->knownObjects()) 
 	{ 
 		for (auto secondaryID : VLC->objtypeh->knownSubObjects(primaryID)) 
@@ -1621,10 +1623,12 @@ void CRmgTemplateZone::addAllPossibleObjects (CMapGenerator* gen)
 						{
 							return VLC->objtypeh->getHandlerFor(temp.id, temp.subid)->create(temp);
 						};
-						oi.value = handler->getRMGInfo().value;
-						oi.probability = handler->getRMGInfo().rarity;
+						auto rmgInfo = handler->getRMGInfo();
+						oi.value = rmgInfo.value;
+						oi.probability = rmgInfo.rarity;
 						oi.templ = temp;
-						oi.maxPerZone = handler->getRMGInfo().zoneLimit;
+						oi.maxPerZone = rmgInfo.zoneLimit;
+						vstd::amin (oi.maxPerZone, rmgInfo.mapLimit / numZones); //simple, but should distribute objects evenly on large maps
 						possibleObjects.push_back (oi);
 					}
 				}