diff --git a/TerrariaServerAPI/Program.cs b/TerrariaServerAPI/Program.cs index f5c2b56..8e2b78f 100644 --- a/TerrariaServerAPI/Program.cs +++ b/TerrariaServerAPI/Program.cs @@ -124,6 +124,7 @@ static void StartServer(string[] args) } Terraria.WindowsLaunch.Main(args); + Terraria.Netplay.Disconnect = true; } /// diff --git a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs index 0bb7715..1a5ed7a 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs @@ -1,7 +1,9 @@ using OTAPI; using System; using Terraria; +using Terraria.Localization; using Terraria.Net; +using Terraria.Testing; namespace TerrariaApi.Server.Hooking; @@ -24,6 +26,7 @@ public static void AttachTo(HookManager hookManager) HookEvents.Terraria.Chat.ChatHelper.BroadcastChatMessage += OnBroadcastChatMessage; HookEvents.Terraria.Net.NetManager.SendData += OnSendNetData; HookEvents.Terraria.Netplay.UpdateConnectedClients += OnUpdateConnectedClients; + HookEvents.Terraria.NetMessage.LogMessageError += OnLogMessageError; Hooks.NetMessage.SendData += OnSendData; Hooks.NetMessage.SendBytes += OnSendBytes; @@ -31,6 +34,14 @@ public static void AttachTo(HookManager hookManager) Hooks.MessageBuffer.NameCollision += OnNameCollision; } + static void OnLogMessageError(object? sender, HookEvents.Terraria.NetMessage.LogMessageErrorEventArgs args) + { + if (!args.ContinueExecution) return; + args.ContinueExecution = false; + RemoteClient client = Netplay.Clients[args.bufferIndex]; + Invariant.Assert(false, $"{Language.GetTextValue("Error.NetMessageError", args.id)} @{client.Socket?.GetRemoteAddress()}({client.Name}). {args.exception}"); + } + static void OnUpdateConnectedClients(object? sender, HookEvents.Terraria.Netplay.UpdateConnectedClientsEventArgs args) { if (!args.ContinueExecution) return;