From 694680720e2f8e9535575a721fc54e76e48f58f4 Mon Sep 17 00:00:00 2001 From: reaperrr Date: Sun, 30 Jun 2019 12:18:18 +0200 Subject: [PATCH] Updated AcceptsOrder check to be more readable This hopefully also fixes handling of multiple enabled RejectsOrders traits. --- OpenRA.Mods.Common/Traits/RejectsOrders.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/RejectsOrders.cs b/OpenRA.Mods.Common/Traits/RejectsOrders.cs index e947848496..5182875023 100644 --- a/OpenRA.Mods.Common/Traits/RejectsOrders.cs +++ b/OpenRA.Mods.Common/Traits/RejectsOrders.cs @@ -40,8 +40,14 @@ namespace OpenRA.Mods.Common.Traits { public static bool AcceptsOrder(this Actor self, string orderString) { - var r = self.TraitsImplementing().Where(Exts.IsTraitEnabled).ToList(); - return !r.Any() || r.Any(t => t.Reject.Any() && !t.Reject.Contains(orderString)) || r.Any(t => t.Except.Contains(orderString)); + var rejectsOrdersTraits = self.TraitsImplementing().Where(Exts.IsTraitEnabled).ToArray(); + if (!rejectsOrdersTraits.Any()) + return true; + + var reject = rejectsOrdersTraits.SelectMany(t => t.Reject); + var except = rejectsOrdersTraits.SelectMany(t => t.Except); + + return except.Contains(orderString) || (reject.Any() && !reject.Contains(orderString)); } } }