aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL/misccommands.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'NorthstarDLL/misccommands.cpp')
-rw-r--r--NorthstarDLL/misccommands.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/NorthstarDLL/misccommands.cpp b/NorthstarDLL/misccommands.cpp
new file mode 100644
index 00000000..df2f4a3d
--- /dev/null
+++ b/NorthstarDLL/misccommands.cpp
@@ -0,0 +1,60 @@
+#include "pch.h"
+#include "misccommands.h"
+#include "concommand.h"
+#include "gameutils.h"
+#include "masterserver.h"
+#include "serverauthentication.h"
+#include "squirrel.h"
+
+void AddMiscConCommands()
+{
+ MAKE_CONCMD(
+ "force_newgame",
+ "forces a map load through directly setting g_pHostState->m_iNextState to HS_NEW_GAME",
+ FCVAR_NONE,
+ [](const CCommand& arg)
+ {
+ if (arg.ArgC() < 2)
+ return;
+
+ g_pHostState->m_iNextState = HS_NEW_GAME;
+ strncpy(g_pHostState->m_levelName, arg.Arg(1), sizeof(g_pHostState->m_levelName));
+ });
+
+ MAKE_CONCMD(
+ "ns_start_reauth_and_leave_to_lobby",
+ "called by the server, used to reauth and return the player to lobby when leaving a game",
+ FCVAR_SERVER_CAN_EXECUTE,
+ [](const CCommand& arg)
+ {
+ // hack for special case where we're on a local server, so we erase our own newly created auth data on disconnect
+ g_MasterServerManager->m_bNewgameAfterSelfAuth = true;
+ g_MasterServerManager->AuthenticateWithOwnServer(g_LocalPlayerUserID, g_MasterServerManager->m_ownClientAuthToken);
+ });
+
+ // this is a concommand because we make a deferred call to it from another thread
+ MAKE_CONCMD(
+ "ns_end_reauth_and_leave_to_lobby",
+ "",
+ FCVAR_NONE,
+ [](const CCommand& arg)
+ {
+ Cbuf_AddText(
+ Cbuf_GetCurrentPlayer(),
+ fmt::format("serverfilter {}", g_ServerAuthenticationManager->m_authData.begin()->first).c_str(),
+ cmd_source_t::kCommandSrcCode);
+ Cbuf_Execute();
+
+ // weird way of checking, but check if client script vm is initialised, mainly just to allow players to cancel this
+ if (g_ClientSquirrelManager->sqvm)
+ {
+ g_ServerAuthenticationManager->m_bNeedLocalAuthForNewgame = true;
+
+ // this won't set playlist correctly on remote clients, don't think they can set playlist until they've left which sorta
+ // fucks things should maybe set this in HostState_NewGame?
+ SetCurrentPlaylist("tdm");
+ strcpy(g_pHostState->m_levelName, "mp_lobby");
+ g_pHostState->m_iNextState = HS_NEW_GAME;
+ }
+ });
+} \ No newline at end of file