mirror of
https://github.com/vcmi/vcmi.git
synced 2025-06-04 23:17:41 +02:00
Fix crash on attempt to dereference invalid subtype in bonus
This commit is contained in:
parent
8037d575ad
commit
ceea341bb0
@ -76,10 +76,10 @@ std::string CBonusTypeHandler::bonusToString(const std::shared_ptr<Bonus> & bonu
|
|||||||
if (text.find("${val}") != std::string::npos)
|
if (text.find("${val}") != std::string::npos)
|
||||||
boost::algorithm::replace_all(text, "${val}", std::to_string(bearer->valOfBonuses(Selector::typeSubtype(bonus->type, bonus->subtype))));
|
boost::algorithm::replace_all(text, "${val}", std::to_string(bearer->valOfBonuses(Selector::typeSubtype(bonus->type, bonus->subtype))));
|
||||||
|
|
||||||
if (text.find("${subtype.creature}") != std::string::npos)
|
if (text.find("${subtype.creature}") != std::string::npos && bonus->subtype.as<CreatureID>() != CreatureID::NONE)
|
||||||
boost::algorithm::replace_all(text, "${subtype.creature}", bonus->subtype.as<CreatureID>().toCreature()->getNamePluralTranslated());
|
boost::algorithm::replace_all(text, "${subtype.creature}", bonus->subtype.as<CreatureID>().toCreature()->getNamePluralTranslated());
|
||||||
|
|
||||||
if (text.find("${subtype.spell}") != std::string::npos)
|
if (text.find("${subtype.spell}") != std::string::npos && bonus->subtype.as<SpellID>() != SpellID::NONE)
|
||||||
boost::algorithm::replace_all(text, "${subtype.spell}", bonus->subtype.as<SpellID>().toSpell()->getNameTranslated());
|
boost::algorithm::replace_all(text, "${subtype.spell}", bonus->subtype.as<SpellID>().toSpell()->getNameTranslated());
|
||||||
|
|
||||||
return text;
|
return text;
|
||||||
|
@ -712,6 +712,11 @@ void BattleFlowProcessor::stackTurnTrigger(const CBattleInfoCallback & battle, c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
BonusList bl = *(st->getBonuses(Selector::type()(BonusType::ENCHANTER)));
|
BonusList bl = *(st->getBonuses(Selector::type()(BonusType::ENCHANTER)));
|
||||||
|
bl.remove_if([](const Bonus * b)
|
||||||
|
{
|
||||||
|
return b->subtype.as<SpellID>() == SpellID::NONE;
|
||||||
|
});
|
||||||
|
|
||||||
int side = *battle.playerToSide(st->unitOwner());
|
int side = *battle.playerToSide(st->unitOwner());
|
||||||
if(st->canCast() && battle.battleGetEnchanterCounter(side) == 0)
|
if(st->canCast() && battle.battleGetEnchanterCounter(side) == 0)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user