Cast to long to avoid overflow when multiplying by the health (part 2)

This commit is contained in:
Arular101
2018-01-10 18:12:37 +01:00
committed by reaperrr
parent 30acee38c9
commit 24b7f7a23f
6 changed files with 17 additions and 7 deletions

View File

@@ -98,7 +98,9 @@ namespace OpenRA.Mods.Common.Activities
{
var unitCost = self.Info.TraitInfo<ValuedInfo>().Cost;
var hpToRepair = repairsUnits.Info.HpPerStep;
var cost = Math.Max(1, (hpToRepair * unitCost * repairsUnits.Info.ValuePercentage) / (health.MaxHP * 100));
// Cast to long to avoid overflow when multiplying by the health
var cost = Math.Max(1, (int)(((long)hpToRepair * unitCost * repairsUnits.Info.ValuePercentage) / (health.MaxHP * 100L)));
if (!played)
{