1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-27 21:49:10 +02:00

Fixed Bonus parser crashing at unspecified value. Assigning empty objects is also not good solution.

This commit is contained in:
DjWarmonger 2012-09-27 17:58:14 +00:00
parent 0b15a634f9
commit ecda63683e
2 changed files with 15 additions and 7 deletions

View File

@ -3236,7 +3236,7 @@ TSubgoal CGoal::whatToDoToAchieve()
int primaryPath, secondaryPath;
auto h = otherHeroes.back();
cb->setSelection(hero.h);
primaryPath = cb->getPathInfo(h->pos)->turns;
primaryPath = cb->getPathInfo(h->pos)->turns; //FIXME: investigate crash at this line
cb->setSelection(h);
secondaryPath = cb->getPathInfo(hero->pos)->turns;

View File

@ -942,6 +942,8 @@ const T & parseByMap(const std::map<std::string, T> & map, const JsonNode * val,
return it->second;
}
}
else
return T();
};
Bonus * ParseBonus (const JsonNode &ability)
@ -967,7 +969,9 @@ Bonus * ParseBonus (const JsonNode &ability)
if (!value->isNull())
b->val = value->Float();
b->valType = parseByMap(bonusValueMap, &ability["valueType"], "value type ");
value = &ability["valueType"];
if (!value->isNull())
b->valType = parseByMap(bonusValueMap, value, "value type ");
value = &ability["additionalInfo"];
if (!value->isNull())
@ -985,11 +989,15 @@ Bonus * ParseBonus (const JsonNode &ability)
if (!value->isNull())
b->description = value->String();
b->effectRange = parseByMap(bonusLimitEffect, &ability["effectRange"], "effect range ");
b->duration = parseByMap(bonusDurationMap, &ability["duration"], "duration type ");
b->source = parseByMap(bonusSourceMap, &ability["source"], "source type ");
value = &ability["effectRange"];
if (!value->isNull())
b->valType = parseByMap(bonusValueMap, value, "effect range ");
value = &ability["duration"];
if (!value->isNull())
b->valType = parseByMap(bonusValueMap, value, "duration type ");
value = &ability["source"];
if (!value->isNull())
b->valType = parseByMap(bonusValueMap, value, "source type ");
// value = &ability["limiter"];
// if (!value->isNull())