mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	Fix crash on attempt to dereference invalid subtype in bonus
This commit is contained in:
		| @@ -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) | ||||||
| 		{ | 		{ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user