From d2c5aec08d0d128bed827d8c31ef5d147b6c8575 Mon Sep 17 00:00:00 2001 From: abcdefg30 Date: Sun, 10 Jul 2016 18:41:40 +0200 Subject: [PATCH] Filter the lua PlayerProperties on Requires --- OpenRA.Game/Scripting/ScriptContext.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/OpenRA.Game/Scripting/ScriptContext.cs b/OpenRA.Game/Scripting/ScriptContext.cs index fbbd30a86a..d6917b9575 100644 --- a/OpenRA.Game/Scripting/ScriptContext.cs +++ b/OpenRA.Game/Scripting/ScriptContext.cs @@ -155,9 +155,11 @@ namespace OpenRA.Scripting .ToArray(); ActorCommands = new Cache(FilterActorCommands); - PlayerCommands = Game.ModData.ObjectCreator + + var knownPlayerCommands = Game.ModData.ObjectCreator .GetTypesImplementing() .ToArray(); + PlayerCommands = FilterCommands(world.Map.Rules.Actors["player"], knownPlayerCommands); runtime.Globals["GameDir"] = Platform.GameDir; runtime.DoBuffer(File.Open(Platform.ResolvePath(".", "lua", "scriptwrapper.lua"), FileMode.Open, FileAccess.Read).ReadAllText(), "scriptwrapper.lua").Dispose(); @@ -280,9 +282,14 @@ namespace OpenRA.Scripting static readonly object[] NoArguments = new object[0]; Type[] FilterActorCommands(ActorInfo ai) + { + return FilterCommands(ai, knownActorCommands); + } + + Type[] FilterCommands(ActorInfo ai, Type[] knownCommands) { var method = typeof(ActorInfo).GetMethod("HasTraitInfo"); - return knownActorCommands.Where(c => ExtractRequiredTypes(c) + return knownCommands.Where(c => ExtractRequiredTypes(c) .All(t => (bool)method.MakeGenericMethod(t).Invoke(ai, NoArguments))) .ToArray(); }