浏览代码

Fix: Clamp on-hover damage estimation by defender's available health

Michał Zaremba 3 周之前
父节点
当前提交
f8da1dedc2
共有 1 个文件被更改,包括 9 次插入10 次删除
  1. 9 10
      lib/battle/DamageCalculator.cpp

+ 9 - 10
lib/battle/DamageCalculator.cpp

@@ -565,18 +565,17 @@ DamageEstimation DamageCalculator::calculateDmgRange() const
 
 	double resultingFactor = attackFactorTotal * defenseFactorTotal;
 
-	DamageRange damageDealt {
-		std::max<int64_t>( 1.0, std::floor(damageBase.min * resultingFactor)),
-		std::max<int64_t>( 1.0, std::floor(damageBase.max * resultingFactor))
-	};
+	int64_t avail = info.defender->getAvailableHealth();
 
-	DamageRange killsDealt = getCasualties(damageDealt);
+	auto dmin = std::max<int64_t>(1.0, std::floor(damageBase.min * resultingFactor));
+	auto dmax = std::max<int64_t>(1.0, std::floor(damageBase.max * resultingFactor));
 
-	if(killsDealt.min > 0)
-	{
-		damageDealt.min = std::min(killsDealt.min * info.defender->getMaxHealth(), damageDealt.min);
-		damageDealt.max = std::min(killsDealt.max * info.defender->getMaxHealth(), damageDealt.max);
-	}
+	dmin = std::min(dmin, avail);
+	dmax = std::min(dmax, avail);
+
+	DamageRange damageDealt{ dmin, dmax };
+
+	DamageRange killsDealt = getCasualties(damageDealt);
 
 	return DamageEstimation{damageDealt, killsDealt};
 }