From d2613faf2756080c5c36bcbdc19f271c71fbed91 Mon Sep 17 00:00:00 2001 From: McCade Cortez Date: Tue, 16 Jan 2024 16:34:46 -0600 Subject: [PATCH] Added `Kick` function for kicking players. Ex: `Ext.Net.Kick(userID, "kickMessage")` --- BG3Extender/Extender/Server/ServerNetworking.cpp | 16 ++++++++++++++++ BG3Extender/Extender/Server/ServerNetworking.h | 1 + BG3Extender/Lua/Libs/ServerNet.inl | 12 ++++++++++++ 3 files changed, 29 insertions(+) diff --git a/BG3Extender/Extender/Server/ServerNetworking.cpp b/BG3Extender/Extender/Server/ServerNetworking.cpp index 5941ad358..b003c12ac 100644 --- a/BG3Extender/Extender/Server/ServerNetworking.cpp +++ b/BG3Extender/Extender/Server/ServerNetworking.cpp @@ -149,6 +149,22 @@ void NetworkManager::Send(net::ExtenderMessage * msg, UserId userId) } } +void NetworkManager::Kick(UserId userId, const char* kickText) +{ + auto server = GetServer(); + + if (server != nullptr) { + auto kickMsg = GetFreeMessage(); + auto kick = kickMsg->GetMessage().mutable_s2c_kick(); + + if (kickText != nullptr) { + kick->set_message(kickText); + } + + server->SendMessageSingleRecipient(userId.Id, kickMsg); + } +} + void NetworkManager::Broadcast(net::ExtenderMessage * msg, UserId excludeUserId, bool excludeLocalPeer) { auto server = GetServer(); diff --git a/BG3Extender/Extender/Server/ServerNetworking.h b/BG3Extender/Extender/Server/ServerNetworking.h index 44959b144..edbfa6790 100644 --- a/BG3Extender/Extender/Server/ServerNetworking.h +++ b/BG3Extender/Extender/Server/ServerNetworking.h @@ -32,6 +32,7 @@ class NetworkManager net::GameServer* GetServer() const; void Send(net::ExtenderMessage * msg, UserId userId); + void Kick(UserId userId, const char* kickText); void Broadcast(net::ExtenderMessage * msg, UserId excludeUserId, bool excludeLocalPeer = false); void BroadcastToConnectedPeers(net::ExtenderMessage* msg, UserId excludeUserId, bool excludeLocalPeer = false); diff --git a/BG3Extender/Lua/Libs/ServerNet.inl b/BG3Extender/Lua/Libs/ServerNet.inl index 2251edda0..1cc170ee2 100644 --- a/BG3Extender/Lua/Libs/ServerNet.inl +++ b/BG3Extender/Lua/Libs/ServerNet.inl @@ -67,6 +67,17 @@ std::optional PlayerHasExtender(lua_State* L, Guid characterGuid) return networkMgr.CanSendExtenderMessages(character->UserID.GetPeerId()); } +void Kick(int userId, const char* kickText) +{ + if (UserId(userId) == ReservedUserId) { + OsiError("Attempted to send message to reserved user ID!"); + return; + } + + auto& networkMgr = gExtender->GetServer().GetNetworkManager(); + networkMgr.Kick(UserId(userId), kickText); +} + void RegisterNetLib() { DECLARE_MODULE(Net, Server) @@ -75,6 +86,7 @@ void RegisterNetLib() MODULE_FUNCTION(PostMessageToClient) MODULE_FUNCTION(PostMessageToUser) MODULE_FUNCTION(PlayerHasExtender) + MODULE_FUNCTION(Kick) END_MODULE() }