1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

fixed random reward generation in CGVisitableOPW

This commit is contained in:
AlexVinS 2016-10-11 18:00:54 +03:00
parent 7db7ece143
commit 5c3f84138b
3 changed files with 13 additions and 4 deletions

View File

@ -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)

View File

@ -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;

View File

@ -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;