diff --git a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs index da5698ef6..291db9585 100644 --- a/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaClient/ClientSource/DebugConsole.cs @@ -3314,7 +3314,7 @@ namespace Barotrauma } catch(Exception ex) { - GameMain.LuaCs.HandleException(ex, LuaCsMessageOrigin.LuaMod); + LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.LuaMod); } })); diff --git a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs index ceaf4ab10..37e0e4e66 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/DebugConsole.cs @@ -1251,7 +1251,7 @@ namespace Barotrauma } catch (Exception ex) { - GameMain.LuaCs.HandleException(ex, LuaCsMessageOrigin.LuaMod); + LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.LuaMod); } })); commands.Add(new Command("cs", "cs: Runs a string.", (string[] args) => diff --git a/Barotrauma/BarotraumaServer/ServerSource/LuaCs/LuaCsInstaller.cs b/Barotrauma/BarotraumaServer/ServerSource/LuaCs/LuaCsInstaller.cs index 358ee911a..454f6d6c5 100644 --- a/Barotrauma/BarotraumaServer/ServerSource/LuaCs/LuaCsInstaller.cs +++ b/Barotrauma/BarotraumaServer/ServerSource/LuaCs/LuaCsInstaller.cs @@ -62,13 +62,13 @@ namespace Barotrauma } catch (UnauthorizedAccessException e) { - GameMain.LuaCs.PrintError("You seem to already have Client Side Lua installed, if you are trying to reinstall, make sure uninstall it first (mainmenu button located top left).", LuaCsMessageOrigin.LuaCs); + LuaCsLogger.LogError("You seem to already have Client Side Lua installed, if you are trying to reinstall, make sure uninstall it first (mainmenu button located top left).", LuaCsMessageOrigin.LuaCs); return; } catch (Exception e) { - GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.LuaCs); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.LuaCs); return; } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/ACsMod.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/ACsMod.cs index 5d141e5ba..60ef6551d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/ACsMod.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/ACsMod.cs @@ -37,7 +37,7 @@ namespace Barotrauma } catch (Exception e) { - GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.CSharpMod); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.CSharpMod); } LoadedMods.Remove(this); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptLoader.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptLoader.cs index 8a03955be..fc4ba56f2 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptLoader.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptLoader.cs @@ -52,12 +52,12 @@ namespace Barotrauma { if (rtValue == RunType.Standard && isEnabled) { - LuaCsSetup.PrintCsMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Standard)"); + LuaCsLogger.LogMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Standard)"); return true; } else if (rtValue == RunType.Forced) { - LuaCsSetup.PrintCsMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Forced)"); + LuaCsLogger.LogMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Forced)"); return true; } else if (rtValue == RunType.None) @@ -71,7 +71,7 @@ namespace Barotrauma if (isEnabled) { - LuaCsSetup.PrintCsMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Assumed)"); + LuaCsLogger.LogMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Assumed)"); return true; } else @@ -160,7 +160,7 @@ namespace Barotrauma } catch (Exception ex) { - LuaCsSetup.PrintCsError("Error loading '" + folder + "':\n" + ex.Message + "\n" + ex.StackTrace); + LuaCsLogger.LogError("Error loading '" + folder + "':\n" + ex.Message + "\n" + ex.StackTrace, LuaCsMessageOrigin.CSharpMod); } } @@ -189,7 +189,7 @@ namespace Barotrauma { errStr += $"\n{diagnostic}"; } - LuaCsSetup.PrintCsError(errStr); + LuaCsLogger.LogError(errStr, LuaCsMessageOrigin.CSharpMod); } else { @@ -207,7 +207,7 @@ namespace Barotrauma } catch (ReflectionTypeLoadException re) { - LuaCsSetup.PrintCsError($"Unable to load CsMod Types. {re.Message}"); + LuaCsLogger.LogError($"Unable to load CsMod Types. {re.Message}", LuaCsMessageOrigin.CSharpMod); throw re; } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptRunner.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptRunner.cs index 36869a536..835792b85 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptRunner.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/Cs/CsScriptRunner.cs @@ -84,7 +84,7 @@ namespace Barotrauma { errStr += $"\n{idx}: {err}"; } - LuaCsSetup.PrintCsError(errStr); + LuaCsLogger.LogError(errStr, LuaCsMessageOrigin.CSharpMod); } else { @@ -102,16 +102,16 @@ namespace Barotrauma UserData.UnregisterType(type, true); } } - else { LuaCsSetup.PrintCsError("Script Error - no run method detected"); } + else { LuaCsLogger.LogError("Script Error - no run method detected", LuaCsMessageOrigin.CSharpMod); } } - else { LuaCsSetup.PrintCsError("Script Error - no runner class detected"); } + else { LuaCsLogger.LogError("Script Error - no runner class detected", LuaCsMessageOrigin.CSharpMod); } } } Unload(); } catch (Exception ex) { - LuaCsSetup.PrintCsError("Error running script:\n" + ex.Message + "\n" + ex.StackTrace); + LuaCsLogger.LogError("Error running script:\n" + ex.Message + "\n" + ex.StackTrace, LuaCsMessageOrigin.CSharpMod); } return scriptResilt; diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs index f746013c9..311779926 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHook.cs @@ -814,8 +814,8 @@ namespace Barotrauma { argsSb.Append(arg + " "); } - luaCs.PrintError($"Error in Hook '{name}'->'{key}', with args '{argsSb}':\n{e}", LuaCsMessageOrigin.Unknown); - luaCs.HandleException(e, LuaCsMessageOrigin.Unknown); + LuaCsLogger.LogError($"Error in Hook '{name}'->'{key}', with args '{argsSb}':\n{e}", LuaCsMessageOrigin.Unknown); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.Unknown); } } @@ -1177,10 +1177,9 @@ namespace Barotrauma il.If((il) => { // IL: LuaCs.HandleException(exception, LuaCsMessageOrigin.LuaMod); - il.LoadField(luaCsField); il.LoadLocal(exception); il.LoadConstant((int)LuaCsMessageOrigin.LuaMod); // underlying enum type is int - il.Call(typeof(LuaCsSetup).GetMethod(nameof(LuaCsSetup.HandleException), BindingFlags.NonPublic | BindingFlags.Instance)); + il.Call(typeof(LuaCsLogger).GetMethod(nameof(LuaCsLogger.HandleException), BindingFlags.Public | BindingFlags.Static)); }); il.EndCatchBlock(catchBlock); @@ -1227,7 +1226,7 @@ namespace Barotrauma { if (methodPatches.Prefixes.Remove(identifier)) { - luaCs.PrintMessage($"Replacing existing prefix: {identifier}"); + LuaCsLogger.LogMessage($"Replacing existing prefix: {identifier}"); } methodPatches.Prefixes.Add(identifier, new LuaCsPatch @@ -1240,7 +1239,7 @@ namespace Barotrauma { if (methodPatches.Postfixes.Remove(identifier)) { - luaCs.PrintMessage($"Replacing existing postfix: {identifier}"); + LuaCsLogger.LogMessage($"Replacing existing postfix: {identifier}"); } methodPatches.Postfixes.Add(identifier, new LuaCsPatch diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHookCompat.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHookCompat.cs index e48902f8e..957f77ba9 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHookCompat.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsHookCompat.cs @@ -83,8 +83,8 @@ namespace Barotrauma } catch (Exception ex) { - GameMain.LuaCs.PrintError($"Error in {__originalMethod.Name}:", LuaCsMessageOrigin.Unknown); - GameMain.LuaCs.HandleException(ex, LuaCsMessageOrigin.Unknown); + LuaCsLogger.LogError($"Error in {__originalMethod.Name}:", LuaCsMessageOrigin.Unknown); + LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.Unknown); } } @@ -125,7 +125,7 @@ namespace Barotrauma { if (identifier == null || method == null || patch == null) { - luaCs.HandleException(new ArgumentNullException("Identifier, Method and Patch arguments must not be null."), LuaCsMessageOrigin.Unknown); + LuaCsLogger.HandleException(new ArgumentNullException("Identifier, Method and Patch arguments must not be null."), LuaCsMessageOrigin.Unknown); return; } ValidatePatchTarget(method); diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsLogger.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsLogger.cs index 11970aca3..0d643f21f 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsLogger.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsLogger.cs @@ -13,136 +13,159 @@ namespace Barotrauma CSharpMod, } - internal delegate void LuaCsMessageLogger(string prefix, object o); - internal delegate void LuaCsExceptionHandler(Exception ex, LuaCsMessageOrigin origin); - - // TODO: make it a separate class - partial class LuaCsSetup + class LuaCsLogger { - #if SERVER - private const string LOG_PREFIX = "SV"; + private const string LogPrefix = "SV"; + private const int NetMaxLength = 1024; + private const int NetMaxMessages = 60; #else - private const string LOG_PREFIX = "CL"; + private const string LogPrefix = "CL"; #endif - public static void PrintLuaError(object o) => PrintErrorBase($"[{LOG_PREFIX} LUA ERROR] ", o, "nil"); - public static void PrintCsError(object o) => PrintErrorBase($"[{LOG_PREFIX} CS ERROR] ", o, "Null"); - public static void PrintGenericError(object o) => PrintErrorBase($"[{LOG_PREFIX} ERROR] ", o, "Null"); + public static LuaCsMessageLogger MessageLogger; + public static LuaCsExceptionHandler ExceptionHandler; - private static void PrintErrorBase(string prefix, object message, string empty) - { - message ??= empty; - var str = message.ToString(); - - for (int i = 0; i < str.Length; i += 1024) - { - var subStr = str.Substring(i, Math.Min(1024, str.Length - i)); - - var errorMsg = subStr; - if (i == 0) errorMsg = prefix + errorMsg; - - DebugConsole.ThrowError(errorMsg); - -#if SERVER - if (GameMain.Server != null) - { - foreach (var c in GameMain.Server.ConnectedClients) - { - GameMain.Server.SendDirectChatMessage(ChatMessage.Create("", errorMsg, ChatMessageType.Console, null, textColor: Color.Red), c); - } - - GameServer.Log(errorMsg, ServerLog.MessageType.Error); - } -#endif - } - } - - // TODO: deprecate this (in an effort to get rid of as much global state as possible) - public void PrintError(object o, LuaCsMessageOrigin origin) - { - switch (origin) - { - case LuaCsMessageOrigin.LuaCs: - PrintGenericError(o); - break; - case LuaCsMessageOrigin.LuaMod: - PrintLuaError(o); - break; - case LuaCsMessageOrigin.CSharpMod: - PrintCsError(o); - break; - } - } - - private void DefaultExceptionHandler(Exception ex, LuaCsMessageOrigin origin) + public static void HandleException(Exception ex, LuaCsMessageOrigin origin) { switch (ex) { case NetRuntimeException netRuntimeException: if (netRuntimeException.DecoratedMessage == null) { - PrintError(netRuntimeException, origin); + LogError(netRuntimeException.ToString(), origin); } else { // FIXME: netRuntimeException.ToString() doesn't print the InnerException's stack trace... - PrintError($"{netRuntimeException.DecoratedMessage}: {netRuntimeException}", origin); + LogError($"{netRuntimeException.DecoratedMessage}: {netRuntimeException}", origin); } break; case InterpreterException interpreterException: if (interpreterException.DecoratedMessage == null) { - PrintError(interpreterException, origin); + LogError(interpreterException.ToString(), origin); } else { - PrintError(interpreterException.DecoratedMessage, origin); + LogError(interpreterException.DecoratedMessage, origin); } break; default: var msg = ex.StackTrace != null ? ex.ToString() : $"{ex}\n{Environment.StackTrace}"; - PrintError(msg, origin); + LogError(msg, origin); break; } } - private static void DefaultMessageLogger(string prefix, object o) + public static void LogError(string message, LuaCsMessageOrigin origin) { - var message = o.ToString(); - for (int i = 0; i < message.Length; i += 1024) + switch (origin) { - var subStr = message.Substring(i, Math.Min(1024, message.Length - i)); - -#if SERVER - if (GameMain.Server != null) - { - foreach (var c in GameMain.Server.ConnectedClients) - { - GameMain.Server.SendDirectChatMessage(ChatMessage.Create("", subStr, ChatMessageType.Console, null, textColor: Color.MediumPurple), c); - } - -#if !DEBUG - GameServer.Log(prefix + subStr, ServerLog.MessageType.ServerMessage); -#endif - } -#endif + case LuaCsMessageOrigin.LuaCs: + LogError($"[{LogPrefix} ERROR] {message}"); + break; + case LuaCsMessageOrigin.LuaMod: + LogError($"[{LogPrefix} LUA ERROR] {message}"); + break; + case LuaCsMessageOrigin.CSharpMod: + LogError($"[{LogPrefix} CS ERROR] {message}"); + break; } + } + + public static void LogError(string message) + { + Log($"{message}", Color.Red, ServerLog.MessageType.Error); + } + + public static void LogMessage(string message, Color? serverColor = null, Color? clientColor = null) + { + if (serverColor == null) { serverColor = Color.MediumPurple; } + if (clientColor == null) { clientColor = Color.Purple; } #if SERVER - DebugConsole.NewMessage(message.ToString(), Color.MediumPurple); + Log(message, serverColor); #else - DebugConsole.NewMessage(message.ToString(), Color.Purple); + Log(message, clientColor); #endif } - private void PrintMessageBase(string prefix, object message, string empty) => MessageLogger?.Invoke(prefix, message ?? empty); - internal void PrintMessage(object message) => PrintMessageBase("[LuaCs] ", message, "nil"); + // This is used so its possible to call logging functions inside the serverLog + // hook without creating an infinite loop + private static bool lockLog = false; - // TODO: deprecate this (in an effort to get rid of as much global state as possible) - public static void PrintCsMessage(object message) => GameMain.LuaCs.PrintMessage(message); + public static void Log(string message, Color? color = null, ServerLog.MessageType messageType = ServerLog.MessageType.ServerMessage) + { + MessageLogger?.Invoke(message); + DebugConsole.NewMessage(message, color); + +#if SERVER + void broadcastMessage(string m) + { + foreach (var client in GameMain.Server.ConnectedClients) + { + //if (client.ChatMsgQueue.Count > NetMaxMessages) + //{ + // If there's an error or message happening many times per second (inside Update loop for example) + // we will need to discart some messages so the client doesn't get overloaded by all + // those net messages. + // continue; + //} + + ChatMessage consoleMessage = ChatMessage.Create("", m, ChatMessageType.Console, null, textColor: color); + GameMain.Server.SendDirectChatMessage(consoleMessage, client); + + if (!GameMain.Server.ServerSettings.SaveServerLogs || !client.HasPermission(ClientPermissions.ServerLog)) + { + continue; + } + + ChatMessage logMessage = ChatMessage.Create(messageType.ToString(), "[LuaCs] " + m, ChatMessageType.ServerLog, null); + GameMain.Server.SendDirectChatMessage(logMessage, client); + } + } + + if (GameMain.Server != null) + { + if (GameMain.Server.ServerSettings.SaveServerLogs) + { + string logMessage = "[LuaCs] " + message; + GameMain.Server.ServerSettings.ServerLog.WriteLine(logMessage, messageType, false); + + if (!lockLog) + { + lockLog = true; + GameMain.LuaCs?.Hook?.Call("serverLog", logMessage, messageType); + lockLog = false; + } + } + + for (int i = 0; i < message.Length; i += NetMaxLength) + { + string subStr = message.Substring(i, Math.Min(1024, message.Length - i)); + + broadcastMessage(subStr); + } + } +#endif + } + + partial class LuaCsSetup + { + // Compatibility with cs mods that use this method. + public void PrintLuaError(string message) => LuaCsLogger.LogError(message, LuaCsMessageOrigin.LuaMod); + public void PrintCsError(string message) => LuaCsLogger.LogError(message, LuaCsMessageOrigin.CSharpMod); + public void PrintGenericError(string message) => LuaCsLogger.LogError(message, LuaCsMessageOrigin.LuaCs); + + internal void PrintMessage(string message) => LuaCsLogger.LogMessage(message); + + public static void PrintCsMessage(string message) => LuaCsLogger.LogMessage(message); + + internal void HandleException(Exception ex, LuaCsMessageOrigin origin) => LuaCsLogger.HandleException(ex, origin); + } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsModStore.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsModStore.cs index 759f8e69e..cdd77e17d 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsModStore.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsModStore.cs @@ -1,4 +1,4 @@ -using MoonSharp.Interpreter; +using MoonSharp.Interpreter; using MoonSharp.Interpreter.Interop; using System; using System.Collections.Generic; @@ -73,7 +73,7 @@ namespace Barotrauma { if (luaModInterface.Any(i => i.Equals(modName))) { - GameMain.LuaCs.HandleException(new ArgumentException($"'{modName}' entry already registered"), LuaCsMessageOrigin.LuaMod); + LuaCsLogger.HandleException(new ArgumentException($"'{modName}' entry already registered"), LuaCsMessageOrigin.LuaMod); return null; } @@ -86,7 +86,7 @@ namespace Barotrauma { if (csModInterface.Any(i => i.Equals(mod))) { - GameMain.LuaCs.HandleException(new ArgumentException($"'{mod.GetType().FullName}' entry already registered"), LuaCsMessageOrigin.CSharpMod); + LuaCsLogger.HandleException(new ArgumentException($"'{mod.GetType().FullName}' entry already registered"), LuaCsMessageOrigin.CSharpMod); return null; } @@ -111,4 +111,4 @@ namespace Barotrauma protected LuaModStore GetLuaStore(string modName) => luaModInterface.Where(i => i.Name == modName).FirstOrDefault(); } } -} \ No newline at end of file +} diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsNetworking.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsNetworking.cs index 781cab4b9..0796f511c 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsNetworking.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsNetworking.cs @@ -96,8 +96,8 @@ namespace Barotrauma catch (Exception e) { // TODO: make LuaCsNetworking hold a reference to LuaCsSetup instead of using this global - GameMain.LuaCs.PrintError($"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsMessageOrigin.Unknown); - GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.Unknown); + LuaCsLogger.LogError($"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsMessageOrigin.Unknown); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.Unknown); } } } @@ -122,8 +122,8 @@ namespace Barotrauma } catch (Exception e) { - GameMain.LuaCs.PrintError($"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsMessageOrigin.Unknown); - GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.Unknown); + LuaCsLogger.LogError($"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsMessageOrigin.Unknown); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.Unknown); } } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs index 6e495524b..ea7fa0a33 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs @@ -21,6 +21,10 @@ namespace Barotrauma public LuaCsSetupConfig() { } } + internal delegate void LuaCsMessageLogger(string message); + internal delegate void LuaCsErrorHandler(Exception ex, LuaCsMessageOrigin origin); + internal delegate void LuaCsExceptionHandler(Exception ex, LuaCsMessageOrigin origin); + partial class LuaCsSetup { public const string LuaSetupFile = "Lua/LuaSetup.lua"; @@ -59,14 +63,8 @@ namespace Barotrauma public CsScriptLoader CsScriptLoader { get; private set; } public LuaCsSetupConfig Config { get; private set; } - internal LuaCsExceptionHandler ExceptionHandler { get; set; } - internal LuaCsMessageLogger MessageLogger { get; set; } - public LuaCsSetup() { - MessageLogger = DefaultMessageLogger; - ExceptionHandler = DefaultExceptionHandler; - Hook = new LuaCsHook(this); ModStore = new LuaCsModStore(); @@ -136,11 +134,6 @@ namespace Barotrauma return null; } - internal void HandleException(Exception ex, LuaCsMessageOrigin origin) - { - this.ExceptionHandler?.Invoke(ex, origin); - } - private DynValue DoFile(string file, Table globalContext = null, string codeStringFriendly = null) { if (!LuaCsFile.CanReadFromPath(file)) @@ -185,7 +178,7 @@ namespace Barotrauma } catch (Exception e) { - HandleException(e, LuaCsMessageOrigin.LuaMod); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.LuaMod); } return null; } @@ -257,7 +250,7 @@ namespace Barotrauma { Stop(); - PrintMessage("Lua! Version " + AssemblyInfo.GitRevision); + LuaCsLogger.LogMessage("Lua! Version " + AssemblyInfo.GitRevision); if (File.Exists(configFileName)) { @@ -277,7 +270,7 @@ namespace Barotrauma RegisterLuaConverters(); Lua = new Script(CoreModules.Preset_SoftSandbox | CoreModules.Debug); - Lua.Options.DebugPrint = PrintMessage; + Lua.Options.DebugPrint = (o) => { LuaCsLogger.LogMessage(o); }; Lua.Options.ScriptLoader = LuaScriptLoader; Lua.Options.CheckThreadAccess = false; Script.GlobalOptions.ShouldPCallCatchException = (Exception ex) => { return true; }; @@ -309,7 +302,7 @@ namespace Barotrauma UserData.RegisterType(); UserData.RegisterType(); - Lua.Globals["printerror"] = (Action)PrintLuaError; + Lua.Globals["printerror"] = (DynValue o) => { LuaCsLogger.LogError(o.ToString(), LuaCsMessageOrigin.LuaMod); }; Lua.Globals["setmodulepaths"] = (Action)SetModulePaths; @@ -339,7 +332,7 @@ namespace Barotrauma if (csActive) { - PrintMessage("Cs! Version " + AssemblyInfo.GitRevision); + LuaCsLogger.LogMessage("Cs! Version " + AssemblyInfo.GitRevision); if (Config.FirstTimeCsWarning) { @@ -366,15 +359,15 @@ namespace Barotrauma } catch (Exception ex) { - HandleException(ex, LuaCsMessageOrigin.CSharpMod); + LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.CSharpMod); } }); compilationTime.Stop(); - PrintCsMessage($"Took {compilationTime.ElapsedMilliseconds}ms to compile and run Cs Scripts."); + LuaCsLogger.LogMessage($"Took {compilationTime.ElapsedMilliseconds}ms to compile and run Cs Scripts."); } catch (Exception ex) { - HandleException(ex, LuaCsMessageOrigin.CSharpMod); + LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.CSharpMod); } } @@ -385,7 +378,7 @@ namespace Barotrauma if (File.Exists(LuaSetupFile)) { - PrintMessage("Using LuaSetup.lua from the Barotrauma Lua/ folder."); + LuaCsLogger.LogMessage("Using LuaSetup.lua from the Barotrauma Lua/ folder."); try { @@ -394,12 +387,12 @@ namespace Barotrauma } catch (Exception e) { - HandleException(e, LuaCsMessageOrigin.LuaMod); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.LuaMod); } } else if (luaPackage != null) { - PrintMessage("Using LuaSetup.lua from the content package."); + LuaCsLogger.LogMessage("Using LuaSetup.lua from the content package."); string path = Path.GetDirectoryName(luaPackage.Path); @@ -410,12 +403,12 @@ namespace Barotrauma } catch (Exception e) { - HandleException(e, LuaCsMessageOrigin.LuaMod); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.LuaMod); } } else { - PrintLuaError("LuaSetup.lua not found! Lua/LuaSetup.lua, no Lua scripts will be executed or work."); + LuaCsLogger.LogError("LuaSetup.lua not found! Lua/LuaSetup.lua, no Lua scripts will be executed or work.", LuaCsMessageOrigin.LuaMod); } executionNumber++; diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsTimer.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsTimer.cs index 058bcc311..5e29172d5 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsTimer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsTimer.cs @@ -81,7 +81,7 @@ namespace Barotrauma } catch (Exception e) { - GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.CSharpMod); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.CSharpMod); } timedActionsToRemove.Add(timedAction); @@ -99,8 +99,8 @@ namespace Barotrauma } catch (NullReferenceException e) { - GameMain.LuaCs.PrintError("Error while executing timers... This shouldn't happen... Why do we a NRE here???", LuaCsMessageOrigin.Unknown); - GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.Unknown); + LuaCsLogger.LogError("Error while executing timers... This shouldn't happen... Why do we a NRE here???", LuaCsMessageOrigin.Unknown); + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.Unknown); } } diff --git a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs index fcc0bed07..dc48989a0 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/Networking/ServerLog.cs @@ -106,14 +106,17 @@ namespace Barotrauma.Networking } } - public void WriteLine(string line, MessageType messageType) + public void WriteLine(string line, MessageType messageType, bool logToConsole = true) { //string logLine = "[" + DateTime.Now.ToLongTimeString() + "] " + line; var newText = new LogMessage(line, messageType); #if SERVER - DebugConsole.NewMessage(newText.Text.SanitizedValue, messageColor[messageType]); //TODO: REMOVE + if (logToConsole) + { + DebugConsole.NewMessage(newText.Text.SanitizedValue, messageColor[messageType]); //TODO: REMOVE + } #endif lines.Enqueue(newText); diff --git a/Barotrauma/BarotraumaTest/LuaCs/HookPatchTests.cs b/Barotrauma/BarotraumaTest/LuaCs/HookPatchTests.cs index de2169909..652ee758d 100644 --- a/Barotrauma/BarotraumaTest/LuaCs/HookPatchTests.cs +++ b/Barotrauma/BarotraumaTest/LuaCs/HookPatchTests.cs @@ -18,10 +18,9 @@ namespace TestProject.LuaCs // same methods, otherwise we get script ownership exceptions. luaCs = luaCsFixture.LuaCs; - luaCs.MessageLogger = (prefix, o) => + LuaCsLogger.MessageLogger = (o) => { - o ??= "null"; - output?.WriteLine(prefix + o); + output?.WriteLine($"{o}"); }; UserData.RegisterType(); diff --git a/Barotrauma/BarotraumaTest/LuaCs/LuaCsFixture.cs b/Barotrauma/BarotraumaTest/LuaCs/LuaCsFixture.cs index 28a0dd9f2..67fb8d402 100644 --- a/Barotrauma/BarotraumaTest/LuaCs/LuaCsFixture.cs +++ b/Barotrauma/BarotraumaTest/LuaCs/LuaCsFixture.cs @@ -15,7 +15,7 @@ namespace TestProject.LuaCs { public LuaCsFixture() { - LuaCs.ExceptionHandler = (ex, _) => + LuaCsLogger.ExceptionHandler = (ex, _) => { // Pretend we never caught the exception in the first place // (this allows us to preserve the stack trace)