diff options
author | Erlite <ys.aameziane@gmail.com> | 2022-12-22 20:07:08 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-22 20:07:08 +0100 |
commit | 743bd2427e112197724d91d432f92093e5982d84 (patch) | |
tree | a5f8a5294fc9549f05f76c5b60cafa9e92f815df /NorthstarDLL/scripts/server/miscserverscript.cpp | |
parent | ff889f16820430461dec797bb34eeab195b5e930 (diff) | |
download | NorthstarLauncher-743bd2427e112197724d91d432f92093e5982d84.tar.gz NorthstarLauncher-743bd2427e112197724d91d432f92093e5982d84.zip |
Add NSDisconnectPlayer() function. (#376)
* Add NSDisconnectPlayer() function.
* Formatting tweaks
Diffstat (limited to 'NorthstarDLL/scripts/server/miscserverscript.cpp')
-rw-r--r-- | NorthstarDLL/scripts/server/miscserverscript.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/NorthstarDLL/scripts/server/miscserverscript.cpp b/NorthstarDLL/scripts/server/miscserverscript.cpp index 0d865388..b58bdfda 100644 --- a/NorthstarDLL/scripts/server/miscserverscript.cpp +++ b/NorthstarDLL/scripts/server/miscserverscript.cpp @@ -58,3 +58,44 @@ ADD_SQFUNC("bool", NSIsDedicated, "", "", ScriptContext::SERVER) g_pSquirrel<context>->pushbool(sqvm, IsDedicatedServer()); return SQRESULT_NOTNULL; } + +ADD_SQFUNC( + "bool", + NSDisconnectPlayer, + "entity player, string reason", + "Disconnects the player from the server with the given reason", + ScriptContext::SERVER) +{ + const R2::CBasePlayer* pPlayer = g_pSquirrel<context>->getentity<R2::CBasePlayer>(sqvm, 1); + const char* reason = g_pSquirrel<context>->getstring(sqvm, 2); + + if (!pPlayer) + { + spdlog::warn("Attempted to call NSDisconnectPlayer() with null player."); + + g_pSquirrel<context>->pushbool(sqvm, false); + return SQRESULT_NOTNULL; + } + + // Shouldn't happen but I like sanity checks. + R2::CBaseClient* pClient = &R2::g_pClientArray[pPlayer->m_nPlayerIndex - 1]; + if (!pClient) + { + spdlog::warn("NSDisconnectPlayer(): player entity has null CBaseClient!"); + + g_pSquirrel<context>->pushbool(sqvm, false); + return SQRESULT_NOTNULL; + } + + if (reason) + { + R2::CBaseClient__Disconnect(pClient, 1, reason); + } + else + { + R2::CBaseClient__Disconnect(pClient, 1, "Disconnected by the server."); + } + + g_pSquirrel<context>->pushbool(sqvm, true); + return SQRESULT_NOTNULL; +} |