Browse Source

fixed random reward generation in CGVisitableOPW

AlexVinS 9 years ago
parent
commit
5c3f84138b
3 changed files with 13 additions and 4 deletions
  1. 7 1
      lib/ResourceSet.cpp
  2. 2 1
      lib/ResourceSet.h
  3. 4 2
      lib/mapObjects/CRewardableObject.cpp

+ 7 - 1
lib/ResourceSet.cpp

@@ -7,7 +7,7 @@
  * Full text of license available in license.txt file, in main folder
  *
  */
- 
+
 #include "StdInc.h"
 #include "ResourceSet.h"
 #include "StringConstants.h"
@@ -40,6 +40,12 @@ void Res::ResourceSet::amax(const TResourceCap &val)
 		::vstd::amax(elem, val);
 }
 
+void Res::ResourceSet::amin(const TResourceCap &val)
+{
+	for(auto & elem : *this)
+		::vstd::amin(elem, val);
+}
+
 void Res::ResourceSet::positive()
 {
 	for(auto & elem : *this)

+ 2 - 1
lib/ResourceSet.h

@@ -7,7 +7,7 @@
  * Full text of license available in license.txt file, in main folder
  *
  */
- 
+
 #pragma once
 
 typedef si32 TResource;
@@ -125,6 +125,7 @@ namespace Res
 		}
 
 		DLL_LINKAGE void amax(const TResourceCap &val); //performs vstd::amax on each element
+		DLL_LINKAGE void amin(const TResourceCap &val); //performs vstd::amin on each element
 		DLL_LINKAGE void positive(); //values below 0 are set to 0 - upgrade cost can't be negative, for example
 		DLL_LINKAGE bool nonZero() const; //returns true if at least one value is non-zero;
 		DLL_LINKAGE bool canAfford(const ResourceSet &price) const;

+ 4 - 2
lib/mapObjects/CRewardableObject.cpp

@@ -1108,25 +1108,27 @@ void CGVisitableOPW::setRandomReward(CRandomGenerator &rand)
 	{
 	case Obj::MYSTICAL_GARDEN:
 		info.resize(1);
+		info[0].limiter.numOfGrants = 1;
+		info[0].reward.resources.amin(0);
 		if (rand.nextInt(1) == 0)
 		{
 			info[0].reward.resources[Res::GEMS] = 5;
-			info[0].limiter.numOfGrants = 1;
 		}
 		else
 		{
 			info[0].reward.resources[Res::GOLD] = 500;
-			info[0].limiter.numOfGrants = 1;
 		}
 		break;
 	case Obj::WINDMILL:
 		info.resize(1);
+		info[0].reward.resources.amin(0);
 		// 3-6 of any resource but wood and gold
 		info[0].reward.resources[rand.nextInt(Res::MERCURY, Res::GEMS)] = rand.nextInt(3, 6);
 		info[0].limiter.numOfGrants = 1;
 		break;
 	case Obj::WATER_WHEEL:
 		info.resize(1);
+		info[0].reward.resources.amin(0);
 		info[0].reward.resources[Res::GOLD] = 500;
 		info[0].limiter.numOfGrants = 1;
 		break;