mirror of
https://github.com/vcmi/vcmi.git
synced 2025-11-25 22:42:04 +02:00
vcmi: add sourceType to HasAnotherBonusLimiter
Now we can filter bonuses by sourceType, hence, checking, for example, specific secondary skills. Also fix archery artifacts working without Archery skill.
This commit is contained in:
@@ -708,10 +708,34 @@ std::shared_ptr<ILimiter> JsonUtils::parseLimiter(const JsonNode & limiter)
|
||||
{
|
||||
std::shared_ptr<HasAnotherBonusLimiter> bonusLimiter = std::make_shared<HasAnotherBonusLimiter>();
|
||||
bonusLimiter->type = it->second;
|
||||
auto findSource = [&](const JsonNode & parameter)
|
||||
{
|
||||
if(parameter.getType() == JsonNode::JsonType::DATA_STRUCT)
|
||||
{
|
||||
auto sourceIt = bonusSourceMap.find(parameter["type"].String());
|
||||
if(sourceIt != bonusSourceMap.end())
|
||||
{
|
||||
bonusLimiter->source = sourceIt->second;
|
||||
bonusLimiter->isSourceRelevant = true;
|
||||
if(!parameter["id"].isNull()) {
|
||||
resolveIdentifier(parameter["id"], bonusLimiter->sid);
|
||||
bonusLimiter->isSourceIDRelevant = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
if(parameters.size() > 1)
|
||||
{
|
||||
resolveIdentifier(parameters[1], bonusLimiter->subtype);
|
||||
bonusLimiter->isSubtypeRelevant = true;
|
||||
if(findSource(parameters[1]) && parameters.size() == 2)
|
||||
return bonusLimiter;
|
||||
else
|
||||
{
|
||||
resolveIdentifier(parameters[1], bonusLimiter->subtype);
|
||||
bonusLimiter->isSubtypeRelevant = true;
|
||||
if(parameters.size() > 2)
|
||||
findSource(parameters[2]);
|
||||
}
|
||||
}
|
||||
return bonusLimiter;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user