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

Limit predicted damage / loses to actual stack health

Tomasz Zieliński 1 рік тому
батько
коміт
bfa93be765
2 змінених файлів з 10 додано та 1 видалено
  1. 9 0
      AI/StupidAI/StupidAI.cpp
  2. 1 1
      lib/battle/DamageCalculator.cpp

+ 9 - 0
AI/StupidAI/StupidAI.cpp

@@ -77,6 +77,15 @@ public:
 		// FIXME: provide distance info for Jousting bonus
 		DamageEstimation retal;
 		DamageEstimation dmg = cb->getBattle(battleID)->battleEstimateDamage(ourStack, s, 0, &retal);
+		// Clip damage dealt to total stack health
+		auto totalHealth = s->getTotalHealth();
+		dmg.damage.min = std::min<int64_t>(totalHealth, dmg.damage.min);
+		dmg.damage.max = std::min<int64_t>(totalHealth, dmg.damage.max);
+
+		auto ourHealth = s->getTotalHealth();
+		retal.damage.min = std::min<int64_t>(ourHealth, retal.damage.min);
+		retal.damage.max = std::min<int64_t>(ourHealth, retal.damage.max);
+		
 		adi = static_cast<int>((dmg.damage.min + dmg.damage.max) / 2);
 		adr = static_cast<int>((retal.damage.min + retal.damage.max) / 2);
 	}

+ 1 - 1
lib/battle/DamageCalculator.cpp

@@ -509,7 +509,7 @@ int64_t DamageCalculator::getCasualties(int64_t damageDealt) const
 	int64_t damageLeft = damageDealt - info.defender->getFirstHPleft();
 	int64_t killsLeft = damageLeft / info.defender->getMaxHealth();
 
-	return 1 + killsLeft;
+	return std::min<int32_t>(1 + killsLeft, info.defender->getCount());
 }
 
 int DamageCalculator::battleBonusValue(const IBonusBearer * bearer, const CSelector & selector) const