diff --git a/OpenRA.Mods.RA/Activities/Sell.cs b/OpenRA.Mods.RA/Activities/Sell.cs index 7313905295..7bbd41b1c5 100755 --- a/OpenRA.Mods.RA/Activities/Sell.cs +++ b/OpenRA.Mods.RA/Activities/Sell.cs @@ -23,9 +23,8 @@ namespace OpenRA.Mods.RA.Activities var h = self.TraitOrDefault(); var si = self.Info.Traits.Get(); var pr = self.Owner.PlayerActor.Trait(); - var csv = self.Info.Traits.GetOrDefault(); - var cost = csv != null ? csv.Value : self.Info.Traits.Get().Cost; + var cost = self.GetSellValue(); var refund = (cost * si.RefundPercent * (h == null ? 1 : h.HP)) / (100 * (h == null ? 1 : h.MaxHP)); pr.GiveCash(refund); diff --git a/OpenRA.Mods.RA/Buildings/CustomSellValue.cs b/OpenRA.Mods.RA/Buildings/CustomSellValue.cs index 94260e637d..7a6296d075 100755 --- a/OpenRA.Mods.RA/Buildings/CustomSellValue.cs +++ b/OpenRA.Mods.RA/Buildings/CustomSellValue.cs @@ -21,4 +21,18 @@ namespace OpenRA.Mods.RA.Buildings } public class CustomSellValue { } + + public static class CustomSellValueExts + { + public static int GetSellValue( this Actor a ) + { + var csv = a.Info.Traits.GetOrDefault(); + if (csv != null) return csv.Value; + + var valued = a.Info.Traits.GetOrDefault(); + if (valued != null) return valued.Cost; + + return 0; + } + } } diff --git a/OpenRA.Mods.RA/Buildings/RepairableBuilding.cs b/OpenRA.Mods.RA/Buildings/RepairableBuilding.cs index d8b1c7639d..1c0554207b 100755 --- a/OpenRA.Mods.RA/Buildings/RepairableBuilding.cs +++ b/OpenRA.Mods.RA/Buildings/RepairableBuilding.cs @@ -52,8 +52,7 @@ namespace OpenRA.Mods.RA.Buildings if (remainingTicks == 0) { - var csv = self.Info.Traits.GetOrDefault(); - var buildingValue = csv != null ? csv.Value : self.Info.Traits.Get().Cost; + var buildingValue = self.GetSellValue(); var hpToRepair = Math.Min(Info.RepairStep, Health.MaxHP - Health.HP); var cost = (hpToRepair * Info.RepairPercent * buildingValue) / (Health.MaxHP * 100); diff --git a/OpenRA.Mods.RA/GivesBounty.cs b/OpenRA.Mods.RA/GivesBounty.cs index 31330b6b39..9a02fb11fa 100644 --- a/OpenRA.Mods.RA/GivesBounty.cs +++ b/OpenRA.Mods.RA/GivesBounty.cs @@ -10,6 +10,7 @@ using OpenRA.Traits; using OpenRA.Mods.RA.Effects; +using OpenRA.Mods.RA.Buildings; namespace OpenRA.Mods.RA { @@ -21,7 +22,6 @@ namespace OpenRA.Mods.RA class GivesBounty : INotifyKilled { - int GetMultiplier(Actor self) { // returns 100's as 1, so as to keep accuracy for longer. @@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA if (gainsExp == null) return 100; - var slevel = self.Trait().Level; + var slevel = gainsExp.Level; return (slevel > 0) ? slevel * info.LevelMod : 100; } @@ -41,8 +41,7 @@ namespace OpenRA.Mods.RA if (e.Attacker == null || e.Attacker.Destroyed || e.Attacker.Owner.Stances[self.Owner] == Stance.Ally) return; - var valued = self.Info.Traits.GetOrDefault(); - var cost = valued != null ? valued.Cost : 0; + var cost = self.GetSellValue(); // 2 hundreds because of GetMultiplier and info.Percentage. var bounty = cost * GetMultiplier(self) * info.Percentage / 10000;