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

Attempt to fix crash on rewardable configuration

This commit is contained in:
Ivan Savenko 2023-12-21 22:33:33 +02:00
parent d8b601e759
commit 31cef2e7d7
3 changed files with 9 additions and 7 deletions

View File

@ -34,14 +34,16 @@ std::optional<int> Rewardable::Configuration::getVariable(const std::string & ca
return std::nullopt;
}
JsonNode Rewardable::Configuration::getPresetVariable(const std::string & category, const std::string & name) const
const JsonNode & Rewardable::Configuration::getPresetVariable(const std::string & category, const std::string & name) const
{
static const JsonNode emptyNode;
std::string variableID = category + '@' + name;
if (variables.preset.count(variableID))
return variables.preset.at(variableID);
else
return JsonNode();
return emptyNode;
}
void Rewardable::Configuration::presetVariable(const std::string & category, const std::string & name, const JsonNode & value)

View File

@ -167,7 +167,7 @@ struct DLL_LINKAGE Configuration
ui16 getResetDuration() const;
std::optional<int> getVariable(const std::string & category, const std::string & name) const;
JsonNode getPresetVariable(const std::string & category, const std::string & name) const;
const JsonNode & getPresetVariable(const std::string & category, const std::string & name) const;
void presetVariable(const std::string & category, const std::string & name, const JsonNode & value);
void initVariable(const std::string & category, const std::string & name, int value);

View File

@ -272,18 +272,18 @@ void Rewardable::Info::replaceTextPlaceholders(MetaString & target, const Variab
void Rewardable::Info::configureRewards(
Rewardable::Configuration & object,
CRandomGenerator & rng, const
JsonNode & source,
CRandomGenerator & rng,
const JsonNode & source,
Rewardable::EEventType event,
const std::string & modeName) const
{
for(size_t i = 0; i < source.Vector().size(); ++i)
{
const JsonNode reward = source.Vector()[i];
const JsonNode & reward = source.Vector().at(i);
if (!reward["appearChance"].isNull())
{
JsonNode chance = reward["appearChance"];
const JsonNode & chance = reward["appearChance"];
std::string diceID = std::to_string(chance["dice"].Integer());
auto diceValue = object.getVariable("dice", diceID);