1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-15 00:05:02 +02:00

Rewardable object randomization is now always server-sided

This commit is contained in:
Ivan Savenko
2024-07-12 15:10:03 +00:00
parent 388d65d6b2
commit d2839c8e52
17 changed files with 126 additions and 26 deletions

View File

@ -40,19 +40,29 @@ CGObjectInstance * CRewardableConstructor::create(IGameCallback * cb, std::share
return ret;
}
Rewardable::Configuration CRewardableConstructor::generateConfiguration(IGameCallback * cb, vstd::RNG & rand, MapObjectID objectID) const
{
Rewardable::Configuration result;
objectInfo.configureObject(result, rand, cb);
for(auto & rewardInfo : result.info)
{
for (auto & bonus : rewardInfo.reward.bonuses)
{
bonus.source = BonusSource::OBJECT_TYPE;
bonus.sid = BonusSourceID(objectID);
}
}
return result;
}
void CRewardableConstructor::configureObject(CGObjectInstance * object, vstd::RNG & rng) const
{
if(auto * rewardableObject = dynamic_cast<CRewardableObject*>(object))
{
objectInfo.configureObject(rewardableObject->configuration, rng, object->cb);
for(auto & rewardInfo : rewardableObject->configuration.info)
{
for (auto & bonus : rewardInfo.reward.bonuses)
{
bonus.source = BonusSource::OBJECT_TYPE;
bonus.sid = BonusSourceID(rewardableObject->ID);
}
}
rewardableObject->configuration = generateConfiguration(object->cb, rng, object->ID);
if (rewardableObject->configuration.info.empty())
{
if (objectInfo.getParameters()["rewards"].isNull())