diff --git a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs index 0bb7715..ee24add 100644 --- a/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs +++ b/TerrariaServerAPI/TerrariaApi.Server/Hooking/NetHooks.cs @@ -1,6 +1,7 @@ using OTAPI; using System; using Terraria; +using Terraria.Localization; using Terraria.Net; namespace TerrariaApi.Server.Hooking; @@ -190,9 +191,13 @@ static void OnConnectionAccepted(object? sender, HookEvents.Terraria.Netplay.OnC Netplay.Clients[slot].Reset(); Netplay.Clients[slot].Socket = args.client; } - if (FindNextOpenClientSlot() == -1) + else { - Netplay.TcpListener?.StopListening(); + lock (Netplay.fullBuffer) + { + Netplay.KickClient(args.client, NetworkText.FromKey("CLI.ServerIsFull")); + } + args.client.Close(); } } @@ -202,7 +207,7 @@ static int FindNextOpenClientSlot() { for (int i = 0; i < Main.maxNetPlayers; i++) { - if (!Netplay.Clients[i].IsConnected()) + if (!Netplay.Clients[i].IsConnected() && !Netplay.Clients[i].IsActive && !Netplay.Clients[i].PendingTermination) { return i; }