diff --git a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs index f9cfd9f44..62218ed85 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs @@ -3097,20 +3097,38 @@ namespace Barotrauma } }); - commands.Add(new Command("lua_cl", "lua_cl: runs a string on the client", (string[] args) => + commands.Add(new Command("cl_lua", "lua_cl: runs a string on the client", (string[] args) => { - if (GameMain.Client != null) - GameMain.Lua.DoString(string.Join(" ", args)); - else - ThrowError("Client not connected to any server."); + if (GameMain.Client == null) + { + ThrowError("Client not connected to a server."); + return; + } + + if (!GameMain.Client.HasPermission(ClientPermissions.ConsoleCommands)) + { + ThrowError("Command not permitted."); + return; + } + + GameMain.Lua.DoString(string.Join(" ", args)); })); - commands.Add(new Command("reloadlua_cl", "reloads lua on the client", (string[] args) => + commands.Add(new Command("cl_reloadlua", "reloads lua on the client", (string[] args) => { - if (GameMain.Client != null) - GameMain.Lua.Initialize(); - else - ThrowError("Client not connected to any server."); + if (GameMain.Client == null) + { + ThrowError("Client not connected to a server."); + return; + } + + if (!GameMain.Client.HasPermission(ClientPermissions.ConsoleCommands)) + { + ThrowError("Command not permitted."); + return; + } + + GameMain.Lua.Initialize(); })); } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs index e14924cf9..6e88b11d6 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaClasses.cs @@ -10,6 +10,7 @@ using System.IO; using System.Net; using System.Linq; using System.Xml.Linq; +using FarseerPhysics.Dynamics; namespace Barotrauma { @@ -88,6 +89,14 @@ namespace Barotrauma } } + public World World + { + get + { + return GameMain.World; + } + } + public void OverrideTraitors(bool o) { overrideTraitors = o; diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaCustomConverters.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaCustomConverters.cs index a48c88daf..6ac7e659f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaCustomConverters.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaCustomConverters.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Text; using MoonSharp.Interpreter; using Microsoft.Xna.Framework; +using FarseerPhysics.Dynamics; namespace Barotrauma { @@ -17,6 +18,13 @@ namespace Barotrauma RegisterAction(); RegisterAction(); + + Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(Func), v => + { + var function = v.Function; + return (Func)((Fixture a, Vector2 b, Vector2 c, float d) => new LuaResult(function.Call(a, b, c, d)).Float()); + }); + #if CLIENT Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(GUIButton.OnClickedHandler), v => { @@ -39,7 +47,6 @@ namespace Barotrauma #endif } - public static void RegisterAction() { Script.GlobalOptions.CustomConverters.SetScriptToClrCustomConversion(DataType.Function, typeof(Action), v => diff --git a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs index f7621dda5..8d030911a 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Lua/LuaSetup.cs @@ -11,6 +11,7 @@ using System.Diagnostics; using System.Linq; using MoonSharp.Interpreter.Interop; using System.Reflection; +using FarseerPhysics.Dynamics; #if CLIENT using Microsoft.Xna.Framework.Graphics; @@ -251,7 +252,7 @@ namespace Barotrauma public void Initialize() { Stop(); - + luaSetup = this; PrintMessage("Lua! Version " + AssemblyInfo.GitRevision); @@ -352,6 +353,10 @@ namespace Barotrauma UserData.RegisterType(); UserData.RegisterType(); + UserData.RegisterType(); + UserData.RegisterType(); + UserData.RegisterType(typeof(Physics)); + UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); @@ -462,6 +467,7 @@ namespace Barotrauma lua.Globals["SubmarineInfo"] = UserData.CreateStatic(); lua.Globals["Rectangle"] = UserData.CreateStatic(); lua.Globals["Entity"] = UserData.CreateStatic(); + lua.Globals["Physics"] = UserData.CreateStatic(typeof(Physics)); #if SERVER