diff --git a/OpenRA.Mods.RA/Crate.cs b/OpenRA.Mods.RA/Crate.cs index 9de41281a3..1565c3c401 100644 --- a/OpenRA.Mods.RA/Crate.cs +++ b/OpenRA.Mods.RA/Crate.cs @@ -58,7 +58,7 @@ namespace OpenRA.Mods.RA public void OnCrush(Actor crusher) { var shares = self.TraitsImplementing().Select( - a => Pair.New(a, a.GetSelectionShares(crusher))); + a => Pair.New(a, a.GetSelectionSharesOuter(crusher))); var totalShares = shares.Sum(a => a.Second); var n = self.World.SharedRandom.Next(totalShares); diff --git a/OpenRA.Mods.RA/CrateAction.cs b/OpenRA.Mods.RA/CrateAction.cs index 7827656b08..3afb3ecdb6 100644 --- a/OpenRA.Mods.RA/CrateAction.cs +++ b/OpenRA.Mods.RA/CrateAction.cs @@ -8,6 +8,7 @@ */ #endregion +using System.Linq; using OpenRA.Mods.RA.Effects; using OpenRA.Traits; @@ -18,6 +19,7 @@ namespace OpenRA.Mods.RA public int SelectionShares = 10; public string Effect = null; public string Notification = null; + public string[] ExcludedActorTypes = { }; public virtual object Create(ActorInitializer init) { return new CrateAction(init.self, this); } } @@ -32,6 +34,14 @@ namespace OpenRA.Mods.RA this.self = self; this.info = info; } + + public int GetSelectionSharesOuter(Actor collector) + { + if (info.ExcludedActorTypes.Contains(collector.Info.Name)) + return 0; + + return GetSelectionShares(collector); + } public virtual int GetSelectionShares(Actor collector) {