diff --git a/OpenRA.Mods.Common/Traits/CashTrickler.cs b/OpenRA.Mods.Common/Traits/CashTrickler.cs index dd034d47aa..4711ed2f07 100644 --- a/OpenRA.Mods.Common/Traits/CashTrickler.cs +++ b/OpenRA.Mods.Common/Traits/CashTrickler.cs @@ -10,6 +10,7 @@ #endregion using System; +using System.Linq; using OpenRA.Mods.Common.Effects; using OpenRA.Traits; @@ -71,8 +72,10 @@ namespace OpenRA.Mods.Common.Traits if (--Ticks < 0) { + var cashTrickerModifier = self.TraitsImplementing().Select(x => x.GetCashTricklerModifier()); + Ticks = info.Interval; - ModifyCash(self, self.Owner, info.Amount); + ModifyCash(self, self.Owner, Util.ApplyPercentageModifiers(info.Amount, cashTrickerModifier)); } } diff --git a/OpenRA.Mods.Common/Traits/Multipliers/CashTricklerMultiplier.cs b/OpenRA.Mods.Common/Traits/Multipliers/CashTricklerMultiplier.cs new file mode 100644 index 0000000000..f62a366194 --- /dev/null +++ b/OpenRA.Mods.Common/Traits/Multipliers/CashTricklerMultiplier.cs @@ -0,0 +1,36 @@ +#region Copyright & License Information +/* + * Copyright 2007-2018 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. For more + * information, see COPYING. + */ +#endregion + +using OpenRA.Traits; + +namespace OpenRA.Mods.Common.Traits +{ + [Desc("Modifies the cash given by cash tricker traits of this actor.")] + public class CashTricklerMultiplierInfo : ConditionalTraitInfo, Requires + { + [FieldLoader.Require] + [Desc("Percentage modifier to apply.")] + public readonly int Modifier = 100; + + public override object Create(ActorInitializer init) { return new CashTricklerMultiplier(this); } + } + + public class CashTricklerMultiplier : ConditionalTrait, ICashTricklerModifier + { + public CashTricklerMultiplier(CashTricklerMultiplierInfo info) + : base(info) { } + + int ICashTricklerModifier.GetCashTricklerModifier() + { + return IsTraitDisabled ? 100 : Info.Modifier; + } + } +} diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index ac0c38bfe2..7d52ab4734 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -308,6 +308,9 @@ namespace OpenRA.Mods.Common.Traits string SequencePrefix { get; } } + [RequireExplicitImplementation] + public interface ICashTricklerModifier { int GetCashTricklerModifier(); } + [RequireExplicitImplementation] public interface IDamageModifier { int GetDamageModifier(Actor attacker, Damage damage); }