1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-29 23:07:48 +02:00

Implemented visit mode "limiter". Fixed h3m variable loading

This commit is contained in:
Ivan Savenko
2023-09-30 21:22:31 +03:00
parent fd01a25352
commit a3b2354481
9 changed files with 37 additions and 13 deletions

View File

@@ -108,6 +108,7 @@ void Rewardable::Info::configureLimiter(Rewardable::Configuration & object, CRan
limiter.daysPassed = JsonRandom::loadValue(source["daysPassed"], rng, variables);
limiter.heroExperience = JsonRandom::loadValue(source["heroExperience"], rng, variables);
limiter.heroLevel = JsonRandom::loadValue(source["heroLevel"], rng, variables);
limiter.canLearnSkills = source["canLearnSkills"].Bool();
limiter.manaPercentage = JsonRandom::loadValue(source["manaPercentage"], rng, variables);
limiter.manaPoints = JsonRandom::loadValue(source["manaPoints"], rng, variables);
@@ -185,31 +186,32 @@ void Rewardable::Info::configureVariables(Rewardable::Configuration & object, CR
for(const auto & entry : category.second.Struct())
{
JsonNode preset = object.getPresetVariable(category.first, entry.first);
const JsonNode & input = preset.isNull() ? entry.second : preset;
int32_t value = -1;
if (category.first == "number")
value = JsonRandom::loadValue(entry.second, rng, object.variables.values);
value = JsonRandom::loadValue(input, rng, object.variables.values);
if (category.first == "artifact")
value = JsonRandom::loadArtifact(entry.second, rng, object.variables.values).getNum();
value = JsonRandom::loadArtifact(input, rng, object.variables.values).getNum();
if (category.first == "spell")
value = JsonRandom::loadSpell(entry.second, rng, object.variables.values).getNum();
value = JsonRandom::loadSpell(input, rng, object.variables.values).getNum();
// TODO
// if (category.first == "creature")
// value = JsonRandom::loadCreature(entry.second, rng, object.variables.values).type->getId();
// value = JsonRandom::loadCreature(input, rng, object.variables.values).type->getId();
// TODO
// if (category.first == "resource")
// value = JsonRandom::loadResource(entry.second, rng, object.variables.values).getNum();
// value = JsonRandom::loadResource(input, rng, object.variables.values).getNum();
// TODO
// if (category.first == "primarySkill")
// value = JsonRandom::loadCreature(entry.second, rng, object.variables.values).getNum();
// value = JsonRandom::loadCreature(input, rng, object.variables.values).getNum();
if (category.first == "secondarySkill")
value = JsonRandom::loadSecondary(entry.second, rng, object.variables.values).getNum();
value = JsonRandom::loadSecondary(input, rng, object.variables.values).getNum();
object.initVariable(category.first, entry.first, value);
}
@@ -328,6 +330,9 @@ void Rewardable::Info::configureObject(Rewardable::Configuration & object, CRand
break;
}
}
configureLimiter(object, rng, object.visitLimiter, parameters["visitLimiter"]);
}
bool Rewardable::Info::givesResources() const