diff --git a/OpenRA.Mods.RA/Crate.cs b/OpenRA.Mods.RA/Crate.cs index d4d3c86f94..2ff3300294 100644 --- a/OpenRA.Mods.RA/Crate.cs +++ b/OpenRA.Mods.RA/Crate.cs @@ -61,7 +61,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 42fa1e2fa8..274372384d 100644 --- a/OpenRA.Mods.RA/CrateAction.cs +++ b/OpenRA.Mods.RA/CrateAction.cs @@ -19,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); } } @@ -34,6 +35,14 @@ namespace OpenRA.Mods.RA 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) { return info.SelectionShares;