fix #772 -- GivesBounty uses Actor.GetSellValue
This commit is contained in:
@@ -23,9 +23,8 @@ namespace OpenRA.Mods.RA.Activities
|
|||||||
var h = self.TraitOrDefault<Health>();
|
var h = self.TraitOrDefault<Health>();
|
||||||
var si = self.Info.Traits.Get<SellableInfo>();
|
var si = self.Info.Traits.Get<SellableInfo>();
|
||||||
var pr = self.Owner.PlayerActor.Trait<PlayerResources>();
|
var pr = self.Owner.PlayerActor.Trait<PlayerResources>();
|
||||||
var csv = self.Info.Traits.GetOrDefault<CustomSellValueInfo>();
|
|
||||||
|
|
||||||
var cost = csv != null ? csv.Value : self.Info.Traits.Get<ValuedInfo>().Cost;
|
var cost = self.GetSellValue();
|
||||||
|
|
||||||
var refund = (cost * si.RefundPercent * (h == null ? 1 : h.HP)) / (100 * (h == null ? 1 : h.MaxHP));
|
var refund = (cost * si.RefundPercent * (h == null ? 1 : h.HP)) / (100 * (h == null ? 1 : h.MaxHP));
|
||||||
pr.GiveCash(refund);
|
pr.GiveCash(refund);
|
||||||
|
|||||||
@@ -21,4 +21,18 @@ namespace OpenRA.Mods.RA.Buildings
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class CustomSellValue { }
|
public class CustomSellValue { }
|
||||||
|
|
||||||
|
public static class CustomSellValueExts
|
||||||
|
{
|
||||||
|
public static int GetSellValue( this Actor a )
|
||||||
|
{
|
||||||
|
var csv = a.Info.Traits.GetOrDefault<CustomSellValueInfo>();
|
||||||
|
if (csv != null) return csv.Value;
|
||||||
|
|
||||||
|
var valued = a.Info.Traits.GetOrDefault<ValuedInfo>();
|
||||||
|
if (valued != null) return valued.Cost;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,8 +52,7 @@ namespace OpenRA.Mods.RA.Buildings
|
|||||||
|
|
||||||
if (remainingTicks == 0)
|
if (remainingTicks == 0)
|
||||||
{
|
{
|
||||||
var csv = self.Info.Traits.GetOrDefault<CustomSellValueInfo>();
|
var buildingValue = self.GetSellValue();
|
||||||
var buildingValue = csv != null ? csv.Value : self.Info.Traits.Get<ValuedInfo>().Cost;
|
|
||||||
|
|
||||||
var hpToRepair = Math.Min(Info.RepairStep, Health.MaxHP - Health.HP);
|
var hpToRepair = Math.Min(Info.RepairStep, Health.MaxHP - Health.HP);
|
||||||
var cost = (hpToRepair * Info.RepairPercent * buildingValue) / (Health.MaxHP * 100);
|
var cost = (hpToRepair * Info.RepairPercent * buildingValue) / (Health.MaxHP * 100);
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
using OpenRA.Traits;
|
using OpenRA.Traits;
|
||||||
using OpenRA.Mods.RA.Effects;
|
using OpenRA.Mods.RA.Effects;
|
||||||
|
using OpenRA.Mods.RA.Buildings;
|
||||||
|
|
||||||
namespace OpenRA.Mods.RA
|
namespace OpenRA.Mods.RA
|
||||||
{
|
{
|
||||||
@@ -21,7 +22,6 @@ namespace OpenRA.Mods.RA
|
|||||||
|
|
||||||
class GivesBounty : INotifyKilled
|
class GivesBounty : INotifyKilled
|
||||||
{
|
{
|
||||||
|
|
||||||
int GetMultiplier(Actor self)
|
int GetMultiplier(Actor self)
|
||||||
{
|
{
|
||||||
// returns 100's as 1, so as to keep accuracy for longer.
|
// returns 100's as 1, so as to keep accuracy for longer.
|
||||||
@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA
|
|||||||
if (gainsExp == null)
|
if (gainsExp == null)
|
||||||
return 100;
|
return 100;
|
||||||
|
|
||||||
var slevel = self.Trait<GainsExperience>().Level;
|
var slevel = gainsExp.Level;
|
||||||
return (slevel > 0) ? slevel * info.LevelMod : 100;
|
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)
|
if (e.Attacker == null || e.Attacker.Destroyed || e.Attacker.Owner.Stances[self.Owner] == Stance.Ally)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var valued = self.Info.Traits.GetOrDefault<ValuedInfo>();
|
var cost = self.GetSellValue();
|
||||||
var cost = valued != null ? valued.Cost : 0;
|
|
||||||
// 2 hundreds because of GetMultiplier and info.Percentage.
|
// 2 hundreds because of GetMultiplier and info.Percentage.
|
||||||
var bounty = cost * GetMultiplier(self) * info.Percentage / 10000;
|
var bounty = cost * GetMultiplier(self) * info.Percentage / 10000;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user