diff --git a/config/objects/rewardableOncePerWeek.json b/config/objects/rewardableOncePerWeek.json index 1c8b6f2f1..24ea682a7 100644 --- a/config/objects/rewardableOncePerWeek.json +++ b/config/objects/rewardableOncePerWeek.json @@ -184,9 +184,14 @@ "selectMode" : "selectFirst", "rewards" : [ { + "limiter" : { "daysPassed" : 8 }, "message" : 164, "resources" : { "gold" : 1000 } } + { + "message" : 164, + "resources" : { "gold" : 500 } + } ] } } diff --git a/lib/mapObjects/CRewardableConstructor.cpp b/lib/mapObjects/CRewardableConstructor.cpp index 9b314c2be..5b1c6f58a 100644 --- a/lib/mapObjects/CRewardableConstructor.cpp +++ b/lib/mapObjects/CRewardableConstructor.cpp @@ -64,6 +64,7 @@ TRewardLimitersList CRandomRewardObjectInfo::configureSublimiters(CRewardableObj void CRandomRewardObjectInfo::configureLimiter(CRewardableObject * object, CRandomGenerator & rng, CRewardLimiter & limiter, const JsonNode & source) const { limiter.dayOfWeek = JsonRandom::loadValue(source["dayOfWeek"], rng); + limiter.daysPassed = JsonRandom::loadValue(source["daysPassed"], rng); limiter.minLevel = JsonRandom::loadValue(source["minLevel"], rng); limiter.manaPercentage = JsonRandom::loadValue(source["manaPercentage"], rng); limiter.manaPoints = JsonRandom::loadValue(source["manaPoints"], rng); diff --git a/lib/mapObjects/CRewardableObject.cpp b/lib/mapObjects/CRewardableObject.cpp index d60b7b9e2..8381bbab9 100644 --- a/lib/mapObjects/CRewardableObject.cpp +++ b/lib/mapObjects/CRewardableObject.cpp @@ -30,6 +30,12 @@ bool CRewardLimiter::heroAllowed(const CGHeroInstance * hero) const return false; } + if(daysPassed != 0) + { + if (IObjectInterface::cb->getDate(Date::DAY) < daysPassed) + return false; + } + for(auto & reqStack : creatures) { size_t count = 0; diff --git a/lib/mapObjects/CRewardableObject.h b/lib/mapObjects/CRewardableObject.h index 6e730316f..8c1d6726c 100644 --- a/lib/mapObjects/CRewardableObject.h +++ b/lib/mapObjects/CRewardableObject.h @@ -30,6 +30,7 @@ class DLL_LINKAGE CRewardLimiter public: /// day of week, unused if 0, 1-7 will test for current day of week si32 dayOfWeek; + si32 daysPassed; /// level that hero needs to have si32 minLevel; @@ -65,6 +66,7 @@ public: CRewardLimiter(): dayOfWeek(0), + daysPassed(0), minLevel(0), primary(4, 0) {} @@ -74,6 +76,7 @@ public: template void serialize(Handler &h, const int version) { h & dayOfWeek; + h & daysPassed; h & minLevel; h & manaPoints; h & manaPercentage;