瀏覽代碼

Workaround - check also for valueType when updating bonuses

We should not assume that spells always have a single bonus with same
type/subtype
Ivan Savenko 1 年之前
父節點
當前提交
58b1e74342
共有 1 個文件被更改,包括 2 次插入2 次删除
  1. 2 2
      lib/battle/BattleInfo.cpp

+ 2 - 2
lib/battle/BattleInfo.cpp

@@ -930,7 +930,7 @@ uint32_t BattleInfo::nextUnitId() const
 
 
 void BattleInfo::addOrUpdateUnitBonus(CStack * sta, const Bonus & value, bool forceAdd)
 void BattleInfo::addOrUpdateUnitBonus(CStack * sta, const Bonus & value, bool forceAdd)
 {
 {
-	if(forceAdd || !sta->hasBonus(Selector::source(BonusSource::SPELL_EFFECT, value.sid).And(Selector::typeSubtype(value.type, value.subtype))))
+	if(forceAdd || !sta->hasBonus(Selector::source(BonusSource::SPELL_EFFECT, value.sid).And(Selector::typeSubtypeValueType(value.type, value.subtype, value.valType))))
 	{
 	{
 		//no such effect or cumulative - add new
 		//no such effect or cumulative - add new
 		logBonus->trace("%s receives a new bonus: %s", sta->nodeName(), value.Description());
 		logBonus->trace("%s receives a new bonus: %s", sta->nodeName(), value.Description());
@@ -942,7 +942,7 @@ void BattleInfo::addOrUpdateUnitBonus(CStack * sta, const Bonus & value, bool fo
 
 
 		for(const auto & stackBonus : sta->getExportedBonusList()) //TODO: optimize
 		for(const auto & stackBonus : sta->getExportedBonusList()) //TODO: optimize
 		{
 		{
-			if(stackBonus->source == value.source && stackBonus->sid == value.sid && stackBonus->type == value.type && stackBonus->subtype == value.subtype)
+			if(stackBonus->source == value.source && stackBonus->sid == value.sid && stackBonus->type == value.type && stackBonus->subtype == value.subtype && stackBonus->valType == value.valType)
 			{
 			{
 				stackBonus->turnsRemain = std::max(stackBonus->turnsRemain, value.turnsRemain);
 				stackBonus->turnsRemain = std::max(stackBonus->turnsRemain, value.turnsRemain);
 			}
 			}