aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDedicatedTest/playlist.cpp
diff options
context:
space:
mode:
authorBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2022-08-24 00:32:31 +0100
committerGeckoEidechse <gecko.eidechse+git@pm.me>2022-08-25 21:32:55 +0200
commit46bed8d09f32360377350d71816a76abdfbf2c7c (patch)
tree7feedae4910dbfe0e53d26ea1e00c4616d2c1850 /NorthstarDedicatedTest/playlist.cpp
parenta97f1f07bb5aa31629cd87023e09669eb4bf1fe9 (diff)
downloadNorthstarLauncher-46bed8d09f32360377350d71816a76abdfbf2c7c.tar.gz
NorthstarLauncher-46bed8d09f32360377350d71816a76abdfbf2c7c.zip
Adjust folder structure (#242)v1.9.5-rc1v1.9.5
* Adjust folder structure * change launcher directory name
Diffstat (limited to 'NorthstarDedicatedTest/playlist.cpp')
-rw-r--r--NorthstarDedicatedTest/playlist.cpp106
1 files changed, 0 insertions, 106 deletions
diff --git a/NorthstarDedicatedTest/playlist.cpp b/NorthstarDedicatedTest/playlist.cpp
deleted file mode 100644
index fdb23893..00000000
--- a/NorthstarDedicatedTest/playlist.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-#include "pch.h"
-#include "playlist.h"
-#include "concommand.h"
-#include "convar.h"
-#include "gameutils.h"
-#include "hookutils.h"
-#include "squirrel.h"
-
-typedef char (*Onclc_SetPlaylistVarOverrideType)(void* a1, void* a2);
-Onclc_SetPlaylistVarOverrideType Onclc_SetPlaylistVarOverride;
-
-typedef int (*GetCurrentGamemodeMaxPlayersType)();
-GetCurrentGamemodeMaxPlayersType GetCurrentGamemodeMaxPlayers;
-
-// function type defined in gameutils.h
-SetPlaylistVarOverrideType SetPlaylistVarOverrideOriginal;
-GetCurrentPlaylistVarType GetCurrentPlaylistVarOriginal;
-
-ConVar* Cvar_ns_use_clc_SetPlaylistVarOverride;
-
-void SetPlaylistCommand(const CCommand& args)
-{
- if (args.ArgC() < 2)
- return;
-
- SetCurrentPlaylist(args.Arg(1));
-}
-
-void SetPlaylistVarOverrideCommand(const CCommand& args)
-{
- if (args.ArgC() < 3)
- return;
-
- for (int i = 1; i < args.ArgC(); i += 2)
- SetPlaylistVarOverride(args.Arg(i), args.Arg(i + 1));
-}
-
-char Onclc_SetPlaylistVarOverrideHook(void* a1, void* a2)
-{
- // the private_match playlist is the only situation where there should be any legitimate sending of this netmessage
- // todo: check mp_lobby here too
- if (!Cvar_ns_use_clc_SetPlaylistVarOverride->GetBool() || strcmp(GetCurrentPlaylistName(), "private_match"))
- return 1;
-
- return Onclc_SetPlaylistVarOverride(a1, a2);
-}
-
-void SetPlaylistVarOverrideHook(const char* varName, const char* value)
-{
- if (strlen(value) >= 64)
- return;
-
- SetPlaylistVarOverrideOriginal(varName, value);
-}
-
-char* GetCurrentPlaylistVarHook(const char* varName, bool useOverrides)
-{
- if (!useOverrides && !strcmp(varName, "max_players"))
- useOverrides = true;
-
- return GetCurrentPlaylistVarOriginal(varName, useOverrides);
-}
-
-int GetCurrentGamemodeMaxPlayersHook()
-{
- char* maxPlayersStr = GetCurrentPlaylistVar("max_players", 0);
- if (!maxPlayersStr)
- return GetCurrentGamemodeMaxPlayers();
-
- int maxPlayers = atoi(maxPlayersStr);
- return maxPlayers;
-}
-
-#include "NSMem.h"
-void InitialisePlaylistHooks(HMODULE baseAddress)
-{
- RegisterConCommand("setplaylist", SetPlaylistCommand, "Sets the current playlist", FCVAR_NONE);
- RegisterConCommand("setplaylistvaroverrides", SetPlaylistVarOverrideCommand, "sets a playlist var override", FCVAR_NONE);
- // note: clc_SetPlaylistVarOverride is pretty insecure, since it allows for entirely arbitrary playlist var overrides to be sent to the
- // server this is somewhat restricted on custom servers to prevent it being done outside of private matches, but ideally it should be
- // disabled altogether, since the custom menus won't use it anyway this should only really be accepted if you want vanilla client
- // compatibility
- Cvar_ns_use_clc_SetPlaylistVarOverride = new ConVar(
- "ns_use_clc_SetPlaylistVarOverride", "0", FCVAR_GAMEDLL, "Whether the server should accept clc_SetPlaylistVarOverride messages");
-
- HookEnabler hook;
- ENABLER_CREATEHOOK(
- hook, (char*)baseAddress + 0x222180, &Onclc_SetPlaylistVarOverrideHook, reinterpret_cast<LPVOID*>(&Onclc_SetPlaylistVarOverride));
- ENABLER_CREATEHOOK(
- hook, (char*)baseAddress + 0x18ED00, &SetPlaylistVarOverrideHook, reinterpret_cast<LPVOID*>(&SetPlaylistVarOverrideOriginal));
- ENABLER_CREATEHOOK(
- hook, (char*)baseAddress + 0x18C680, &GetCurrentPlaylistVarHook, reinterpret_cast<LPVOID*>(&GetCurrentPlaylistVarOriginal));
- ENABLER_CREATEHOOK(
- hook, (char*)baseAddress + 0x18C430, &GetCurrentGamemodeMaxPlayersHook, reinterpret_cast<LPVOID*>(&GetCurrentGamemodeMaxPlayers));
-
- uintptr_t ba = (uintptr_t)baseAddress;
-
- // patch to prevent clc_SetPlaylistVarOverride from being able to crash servers if we reach max overrides due to a call to Error (why is
- // this possible respawn, wtf) todo: add a warning for this
- {
- NSMem::BytePatch(ba + 0x18ED8D, "C3");
- }
-
- // patch to allow setplaylistvaroverride to be called before map init on dedicated and private match launched through the game
- NSMem::NOP(ba + 0x18ED17, 6);
-} \ No newline at end of file