Переглянути джерело

Do not show bonuses for which unit only has percentage bonuses

Ivan Savenko 4 місяців тому
батько
коміт
f9c8071537
1 змінених файлів з 5 додано та 2 видалено
  1. 5 2
      client/windows/CCreatureWindow.cpp

+ 5 - 2
client/windows/CCreatureWindow.cpp

@@ -900,9 +900,12 @@ void CStackWindow::initBonusesList()
 		BonusList groupIndepMin = group;
 		BonusList groupIndepMin = group;
 		BonusList groupIndepMax = group;
 		BonusList groupIndepMax = group;
 		BonusList groupNoMinMax = group;
 		BonusList groupNoMinMax = group;
+		BonusList groupBaseOnly = group;
+
 		groupIndepMin.remove_if([](const Bonus * b) { return b->valType != BonusValueType::INDEPENDENT_MIN; });
 		groupIndepMin.remove_if([](const Bonus * b) { return b->valType != BonusValueType::INDEPENDENT_MIN; });
 		groupIndepMax.remove_if([](const Bonus * b) { return b->valType != BonusValueType::INDEPENDENT_MAX; });
 		groupIndepMax.remove_if([](const Bonus * b) { return b->valType != BonusValueType::INDEPENDENT_MAX; });
 		groupNoMinMax.remove_if([](const Bonus * b) { return b->valType == BonusValueType::INDEPENDENT_MAX || b->valType == BonusValueType::INDEPENDENT_MIN; });
 		groupNoMinMax.remove_if([](const Bonus * b) { return b->valType == BonusValueType::INDEPENDENT_MAX || b->valType == BonusValueType::INDEPENDENT_MIN; });
+		groupBaseOnly.remove_if([](const Bonus * b) { return b->valType != BonusValueType::ADDITIVE_VALUE || b->valType == BonusValueType::BASE_NUMBER; });
 
 
 		int valIndepMin = groupIndepMin.totalValue();
 		int valIndepMin = groupIndepMin.totalValue();
 		int valIndepMax = groupIndepMax.totalValue();
 		int valIndepMax = groupIndepMax.totalValue();
@@ -914,8 +917,8 @@ void CStackWindow::initBonusesList()
 			usedGroup = groupIndepMin; // bonus value was limited due to INDEPENDENT_MIN bonus -> show this bonus
 			usedGroup = groupIndepMin; // bonus value was limited due to INDEPENDENT_MIN bonus -> show this bonus
 		else if (!groupIndepMax.empty() && valNoMinMax != valIndepMax)
 		else if (!groupIndepMax.empty() && valNoMinMax != valIndepMax)
 			usedGroup = groupIndepMax; // bonus value was limited due to INDEPENDENT_MAX bonus -> show this bonus
 			usedGroup = groupIndepMax; // bonus value was limited due to INDEPENDENT_MAX bonus -> show this bonus
-		else
-			usedGroup = groupNoMinMax; // bonus value is not limited - show first non-independent bonus
+		else if (!groupBaseOnly.empty())
+			usedGroup = groupNoMinMax; // bonus value is not limited and has bonuses other than percent to base / percent to all - show first non-independent bonus
 
 
 		// It is possible that empty group was selected. For example, there is only INDEPENDENT effect with value of 0, which does not actually has any effect on this unit
 		// It is possible that empty group was selected. For example, there is only INDEPENDENT effect with value of 0, which does not actually has any effect on this unit
 		// For example, orb of vulnerability on unit without any resistances
 		// For example, orb of vulnerability on unit without any resistances