From 813aaf29b87da5c770323746323115ad22a6ade1 Mon Sep 17 00:00:00 2001 From: Evil Factory <36804725+evilfactory@users.noreply.github.com> Date: Fri, 10 Sep 2021 18:32:19 -0300 Subject: [PATCH] making things more organized, turning Player deprecated, preparing for nlua and using partial classes for additions to another barotrauma classes --- .../ServerSource/DebugConsole.cs | 2 +- .../BarotraumaServer/ServerSource/GameMain.cs | 2 + .../Lua/LuaBarotraumaAdditions.cs | 62 +++++++++++++++++++ .../ServerSource/Lua/LuaClasses.cs | 10 +-- .../ServerSource/Lua/LuaSetup.cs | 44 +++++++++---- .../ServerSource/Lua/NLuaSetup.cs | 14 +++++ .../ServerSource/Networking/GameServer.cs | 4 +- Barotrauma/BarotraumaShared/Lua/NluaSetup.lua | 0 8 files changed, 118 insertions(+), 20 deletions(-) create mode 100644 Barotrauma/BarotraumaServer/ServerSource/Lua/LuaBarotraumaAdditions.cs create mode 100644 Barotrauma/BarotraumaServer/ServerSource/Lua/NLuaSetup.cs create mode 100644 Barotrauma/BarotraumaShared/Lua/NluaSetup.lua diff --git a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs index a25909ddd..e1e4ec1a5 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs @@ -1250,7 +1250,7 @@ namespace Barotrauma commands.Add(new Command("reloadlua", "reloads lua", (string[] args) => { - GameMain.Lua = new LuaSetup(); + GameMain.Lua.Initialize(); })); diff --git a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs index 7ad695ace..2598af51f 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/GameMain.cs @@ -137,6 +137,8 @@ namespace Barotrauma NetLobbyScreen = new NetLobbyScreen(); CheckContentPackage(); + + Lua = new LuaSetup(); } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaBarotraumaAdditions.cs b/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaBarotraumaAdditions.cs new file mode 100644 index 000000000..c03af4166 --- /dev/null +++ b/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaBarotraumaAdditions.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Text; + + +namespace Barotrauma.Networking +{ + partial class Client + { + public static List ClientList + { + get + { + return GameMain.Server.ConnectedClients; + } + } + + public void SetClientCharacter(Character character) + { + GameMain.Server.SetClientCharacter(this, character); + } + + public void Kick(string reason = "") + { + GameMain.Server.KickClient(this.Connection, reason); + } + + public void Ban(string reason = "", bool range = false, float seconds = -1) + { + if (seconds == -1) + { + GameMain.Server.BanClient(this, reason, range, null); + } + else + { + GameMain.Server.BanClient(this, reason, range, TimeSpan.FromSeconds(seconds)); + } + } + + public static void Unban(string player, string endpoint) + { + GameMain.Server.UnbanPlayer(player, endpoint); + } + + public bool CheckPermission(ClientPermissions permissions) + { + return this.Permissions.HasFlag(permissions); + } + } + +} + +namespace Barotrauma +{ + partial class CharacterInfo + { + public static CharacterInfo Create(string speciesName, string name = "", JobPrefab jobPrefab = null, string ragdollFileName = null, int variant = 0, Rand.RandSync randSync = Rand.RandSync.Unsynced, string npcIdentifier = "") + { + return new CharacterInfo(speciesName, name, name, jobPrefab, ragdollFileName, variant, randSync, npcIdentifier); + } + } +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaClasses.cs b/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaClasses.cs index e49664b10..97467c1f4 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaClasses.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaClasses.cs @@ -13,6 +13,7 @@ using System.Xml.Linq; namespace Barotrauma { + partial class LuaSetup { private static Vector2 CreateVector2(float x, float y) @@ -40,13 +41,12 @@ namespace Barotrauma public static List GetAllClients() { - return GameMain.Server.ConnectedClients; } - public static CharacterInfo CreateCharacterInfo(string speciesName, string name = "", JobPrefab jobPrefab = null, string ragdollFileName = null, int variant = 0, Rand.RandSync randSync = Rand.RandSync.Unsynced) + public static CharacterInfo CreateCharacterInfo(string speciesName, string name = "", JobPrefab jobPrefab = null, string ragdollFileName = null, int variant = 0, Rand.RandSync randSync = Rand.RandSync.Unsynced, string npcIdentifier = "") { - return new CharacterInfo(speciesName, name, name, jobPrefab, ragdollFileName, variant, randSync); + return new CharacterInfo(speciesName, name, name, jobPrefab, ragdollFileName, variant, randSync, npcIdentifier); } public static void SetClientCharacter(Client client, Character character) @@ -89,7 +89,7 @@ namespace Barotrauma public static void SetSpectatorPos(Client client, Vector2 pos) { - client.SpectatePos = pos; + } public static void SetRadioRange(Character character, float range) @@ -610,6 +610,8 @@ namespace Barotrauma { if (hf.function is Closure) lastResult = env.lua.Call(hf.function, args); + // else if (hf.function is NLua.LuaFunction luaFunction) + // lastResult = luaFunction.Call(args); } catch (Exception e) { diff --git a/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaSetup.cs b/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaSetup.cs index 60cb3b03e..070b58a8b 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaSetup.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Lua/LuaSetup.cs @@ -13,8 +13,10 @@ namespace Barotrauma { partial class LuaSetup { + public static LuaSetup luaSetup; public Script lua; + public LuaHook hook; public LuaGame game; @@ -22,9 +24,9 @@ namespace Barotrauma public void HandleLuaException(Exception ex) { - if(ex is InterpreterException) + if (ex is InterpreterException) { - if(((InterpreterException)ex).DecoratedMessage == null) + if (((InterpreterException)ex).DecoratedMessage == null) PrintMessage(((InterpreterException)ex).Message); else PrintMessage(((InterpreterException)ex).DecoratedMessage); @@ -70,12 +72,12 @@ namespace Barotrauma return null; } - public DynValue DoFile(string file, Table globalContext=null, string codeStringFriendly = null) + public DynValue DoFile(string file, Table globalContext = null, string codeStringFriendly = null) { try { return lua.DoFile(file, globalContext, codeStringFriendly); - + } catch (Exception e) { @@ -133,11 +135,11 @@ namespace Barotrauma public static DynValue CreateUserDataSafe(object o) { - if(o == null) + if (o == null) return DynValue.Nil; return UserData.Create(o); - + } @@ -146,15 +148,22 @@ namespace Barotrauma luaScriptLoader.ModulePaths = str; } - public LuaSetup() + public float TestFunction(float value) { + return value * 2; + } + + public void Initialize() + { + luaSetup = this; + PrintMessage("Lua!"); luaScriptLoader = new LuaScriptLoader(this); luaScriptLoader.ModulePaths = new string[] { }; LuaCustomConverters.RegisterAll(); - + UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); @@ -203,8 +212,8 @@ namespace Barotrauma UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); - UserData.RegisterType(); UserData.RegisterType(); + UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); UserData.RegisterType(); @@ -229,10 +238,12 @@ namespace Barotrauma lua.Options.DebugPrint = PrintMessage; lua.Options.ScriptLoader = luaScriptLoader; - + hook = new LuaHook(this); game = new LuaGame(this); + lua.Globals["TestFunction"] = (Func)TestFunction; + lua.Globals["printNoLog"] = (Action)PrintMessageNoLog; lua.Globals["dofile"] = (Func)DoFile; @@ -258,6 +269,7 @@ namespace Barotrauma lua.Globals["Submarine"] = UserData.CreateStatic(); lua.Globals["Client"] = UserData.CreateStatic(); lua.Globals["Character"] = UserData.CreateStatic(); + lua.Globals["CharacterInfo"] = UserData.CreateStatic(); lua.Globals["Item"] = UserData.CreateStatic(); lua.Globals["Level"] = UserData.CreateStatic(); lua.Globals["PositionType"] = UserData.CreateStatic(); @@ -265,7 +277,7 @@ namespace Barotrauma lua.Globals["TraitorMessageType"] = UserData.CreateStatic(); lua.Globals["CauseOfDeathType"] = UserData.CreateStatic(); lua.Globals["AfflictionPrefab"] = UserData.CreateStatic(); - lua.Globals["CharacterTeamType"] = UserData.CreateStatic(); + lua.Globals["CharacterTeamType"] = UserData.CreateStatic(); lua.Globals["Vector2"] = UserData.CreateStatic(); lua.Globals["Vector3"] = UserData.CreateStatic(); lua.Globals["Vector4"] = UserData.CreateStatic(); @@ -279,12 +291,13 @@ namespace Barotrauma lua.Globals["ContentPackage"] = UserData.CreateStatic(); lua.Globals["ClientPermissions"] = UserData.CreateStatic(); + if (File.Exists("Lua/MoonsharpSetup.lua")) // try the default loader DoFile("Lua/MoonsharpSetup.lua"); - else if(File.Exists("Mods/LuaForBarotrauma/Lua/MoonsharpSetup.lua")) // in case its the workshop version + else if (File.Exists("Mods/LuaForBarotrauma/Lua/MoonsharpSetup.lua")) // in case its the workshop version DoFile("Mods/LuaForBarotrauma/Lua/MoonsharpSetup.lua"); else // fallback to c# script loading - { + { List modulePaths = new List(); foreach (string d in Directory.GetDirectories("Mods")) @@ -299,6 +312,11 @@ namespace Barotrauma luaScriptLoader.ModulePaths = modulePaths.ToArray(); } + } + + + public LuaSetup() + { } diff --git a/Barotrauma/BarotraumaServer/ServerSource/Lua/NLuaSetup.cs b/Barotrauma/BarotraumaServer/ServerSource/Lua/NLuaSetup.cs new file mode 100644 index 000000000..d4843f8e9 --- /dev/null +++ b/Barotrauma/BarotraumaServer/ServerSource/Lua/NLuaSetup.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Barotrauma +{ + partial class LuaSetup + { + //private void NLua_HookException(object sender, NLua.Event.HookExceptionEventArgs e) + //{ + // HandleLuaException(e.Exception); + //} + } +} diff --git a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs index c06305102..fbeb2c6cf 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/Networking/GameServer.cs @@ -197,7 +197,7 @@ namespace Barotrauma.Networking #endif } - GameMain.Lua = new LuaSetup(); + GameMain.Lua.Initialize(); TickRate = serverSettings.TickRate; @@ -3844,7 +3844,7 @@ namespace Barotrauma.Networking { if (GameMain.Server == null || !GameMain.Server.ServerSettings.SaveServerLogs) { return; } - if(GameMain.Lua != null) + if(GameMain.Lua.hook != null) GameMain.Lua.hook.Call("serverLog", new object[] { line, messageType }); GameMain.Server.ServerSettings.ServerLog.WriteLine(line, messageType); diff --git a/Barotrauma/BarotraumaShared/Lua/NluaSetup.lua b/Barotrauma/BarotraumaShared/Lua/NluaSetup.lua new file mode 100644 index 000000000..e69de29bb