diff --git a/OpenRA.Mods.Common/Projectiles/Missile.cs b/OpenRA.Mods.Common/Projectiles/Missile.cs index b3fd256085..58101b5874 100644 --- a/OpenRA.Mods.Common/Projectiles/Missile.cs +++ b/OpenRA.Mods.Common/Projectiles/Missile.cs @@ -396,7 +396,7 @@ namespace OpenRA.Mods.Common.Projectiles if ((tp.Actor.CenterPosition - pos).HorizontalLengthSquared > tp.Trait.Range.LengthSquared) return false; - if (tp.Actor.Owner.Stances[args.SourceActor.Owner] == Stance.Ally && !tp.Trait.AlliedMissiles) + if (!tp.Actor.Owner.Stances[args.SourceActor.Owner].HasStance(tp.Trait.DeflectionStances)) return false; return tp.Actor.World.SharedRandom.Next(100 / tp.Trait.Chance) == 0; diff --git a/OpenRA.Mods.Common/Traits/JamsMissiles.cs b/OpenRA.Mods.Common/Traits/JamsMissiles.cs index 0c67644088..0344a0fff6 100644 --- a/OpenRA.Mods.Common/Traits/JamsMissiles.cs +++ b/OpenRA.Mods.Common/Traits/JamsMissiles.cs @@ -13,10 +13,16 @@ using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits { + [Desc("This actor deflects missiles.")] public class JamsMissilesInfo : ITraitInfo { + [Desc("Range of the deflection.")] public readonly WDist Range = WDist.Zero; - public readonly bool AlliedMissiles = true; + + [Desc("What diplomatic stances are affected.")] + public readonly Stance DeflectionStances = Stance.Ally | Stance.Neutral | Stance.Enemy; + + [Desc("Chance of deflecting missiles.")] public readonly int Chance = 100; public object Create(ActorInitializer init) { return new JamsMissiles(this); } @@ -27,7 +33,7 @@ namespace OpenRA.Mods.Common.Traits readonly JamsMissilesInfo info; public WDist Range { get { return info.Range; } } - public bool AlliedMissiles { get { return info.AlliedMissiles; } } + public Stance DeflectionStances { get { return info.DeflectionStances; } } public int Chance { get { return info.Chance; } } public JamsMissiles(JamsMissilesInfo info) { this.info = info; }