diff --git a/lib/HeroBonus.cpp b/lib/HeroBonus.cpp index c95538799..640cf88b2 100644 --- a/lib/HeroBonus.cpp +++ b/lib/HeroBonus.cpp @@ -1998,6 +1998,22 @@ const JsonNode & BonusParams::toJson() return ret; }; +CSelector BonusParams::toSelector() +{ + assert(isConverted); + if(subtypeRelevant && !subtypeStr.empty()) + JsonUtils::resolveIdentifier(subtype, toJson(), "subtype"); + + auto ret = Selector::type()(type); + if(subtypeRelevant) + ret = ret.And(Selector::subtype()(subtype)); + if(valueTypeRelevant) + ret = ret.And(Selector::valueType(valueType)); + if(targetTypeRelevant) + ret = ret.And(Selector::targetSourceType()(targetType)); + return ret; +} + Bonus::Bonus(Bonus::BonusDuration Duration, BonusType Type, BonusSource Src, si32 Val, ui32 ID, std::string Desc, si32 Subtype) : duration((ui16)Duration), type(Type), subtype(Subtype), source(Src), val(Val), sid(ID), description(Desc) { diff --git a/lib/HeroBonus.h b/lib/HeroBonus.h index ba28ff938..6f1222c10 100644 --- a/lib/HeroBonus.h +++ b/lib/HeroBonus.h @@ -554,6 +554,7 @@ struct DLL_LINKAGE BonusParams { BonusParams(bool isConverted = true) : isConverted(isConverted) {}; BonusParams(std::string deprecatedTypeStr, std::string deprecatedSubtypeStr = "", int deprecatedSubtype = 0); const JsonNode & toJson(); + CSelector toSelector(); private: JsonNode ret; bool jsonCreated = false;