From 9c1efe20ad14e73a8bc86fc844e4d7fc60360a9e Mon Sep 17 00:00:00 2001
From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com>
Date: Fri, 18 Nov 2022 22:10:20 +0100
Subject: [PATCH] Remove ConVar and ConCommand singletons

Extraneous singletons.
---
 r5dev/core/init.cpp             |  2 +-
 r5dev/engine/host_state.cpp     |  2 +-
 r5dev/engine/sys_dll2.cpp       | 10 +++++-----
 r5dev/launcher/IApplication.cpp |  2 +-
 r5dev/tier1/IConVar.cpp         |  9 ++++-----
 r5dev/tier1/IConVar.h           | 26 ++++++++++++--------------
 r5dev/tier1/cmd.cpp             |  3 +--
 r5dev/tier1/cmd.h               |  8 +++-----
 8 files changed, 28 insertions(+), 34 deletions(-)

diff --git a/r5dev/core/init.cpp b/r5dev/core/init.cpp
index b55f3ebc..369779c0 100644
--- a/r5dev/core/init.cpp
+++ b/r5dev/core/init.cpp
@@ -251,7 +251,7 @@ void Systems_Init()
 	spdlog::info("Detour->Attach() '{:10.6f}' seconds ('{:12d}' clocks)\n", initTimer.GetDuration().GetSeconds(), initTimer.GetDuration().GetCycles());
 	spdlog::info("+-------------------------------------------------------------+\n");
 
-	g_pConVar->Init();
+	ConVar::Init();
 
 #ifdef DEDICATED
 	Dedicated_Init();
diff --git a/r5dev/engine/host_state.cpp b/r5dev/engine/host_state.cpp
index 559dcfc4..59bf93e2 100644
--- a/r5dev/engine/host_state.cpp
+++ b/r5dev/engine/host_state.cpp
@@ -211,7 +211,7 @@ FORCEINLINE void CHostState::Setup(void)
 #ifndef CLIENT_DLL
 	g_pBanSystem->Load();
 #endif // !CLIENT_DLL
-	g_pConVar->PurgeHostNames();
+	ConVar::PurgeHostNames();
 
 	net_usesocketsforloopback->SetValue(1);
 	if (net_useRandomKey->GetBool())
diff --git a/r5dev/engine/sys_dll2.cpp b/r5dev/engine/sys_dll2.cpp
index 740fb998..7097d19b 100644
--- a/r5dev/engine/sys_dll2.cpp
+++ b/r5dev/engine/sys_dll2.cpp
@@ -80,10 +80,10 @@ static void InitVPKSystem()
 //-----------------------------------------------------------------------------
 bool CEngineAPI::VModInit(CEngineAPI* pEngineAPI, const char* pModName, const char* pGameDir)
 {
-	g_pConCommand->InitShipped();
-	g_pConCommand->PurgeShipped();
-	g_pConVar->InitShipped();
-	g_pConVar->PurgeShipped();
+	ConCommand::InitShipped();
+	ConCommand::PurgeShipped();
+	ConVar::InitShipped();
+	ConVar::PurgeShipped();
 
 	bool results = CEngineAPI_ModInit(pEngineAPI, pModName, pGameDir);
 	if (!IsValveMod(pModName) && !IsRespawnMod(pModName))
@@ -149,5 +149,5 @@ void SysDll2_Attach()
 void SysDll2_Detach()
 {
 	DetourDetach((LPVOID*)&CEngineAPI_ModInit, &CEngineAPI::VModInit);
-    DetourDetach((LPVOID*)&v_CEngineAPI_SetStartupInfo, &CEngineAPI::VSetStartupInfo);
+	DetourDetach((LPVOID*)&v_CEngineAPI_SetStartupInfo, &CEngineAPI::VSetStartupInfo);
 }
\ No newline at end of file
diff --git a/r5dev/launcher/IApplication.cpp b/r5dev/launcher/IApplication.cpp
index 8e7a5fe5..ad731665 100644
--- a/r5dev/launcher/IApplication.cpp
+++ b/r5dev/launcher/IApplication.cpp
@@ -56,11 +56,11 @@ int CModAppSystemGroup::Main(CModAppSystemGroup* pModAppSystemGroup)
 //-----------------------------------------------------------------------------
 bool CModAppSystemGroup::Create(CModAppSystemGroup* pModAppSystemGroup)
 {
+	ConCommand::Init();
 #ifdef DEDICATED
 	pModAppSystemGroup->SetServerOnly();
 	*g_bDedicated = true;
 #endif // DEDICATED
-	g_pConCommand->Init();
 	g_pFactory->GetFactoriesFromRegister();
 	g_pFactory->AddFactory(FACTORY_INTERFACE_VERSION, g_pFactory);
 	g_pFactory->AddFactory(INTERFACEVERSION_PLUGINSYSTEM, g_pPluginSystem);
diff --git a/r5dev/tier1/IConVar.cpp b/r5dev/tier1/IConVar.cpp
index 1ffb4d2f..dfe2d83d 100644
--- a/r5dev/tier1/IConVar.cpp
+++ b/r5dev/tier1/IConVar.cpp
@@ -61,7 +61,7 @@ ConVar::~ConVar(void)
 //-----------------------------------------------------------------------------
 // Purpose: initialize ConVar's
 //-----------------------------------------------------------------------------
-void ConVar::Init(void) const
+void ConVar::Init(void)
 {
 	//-------------------------------------------------------------------------
 	// ENGINE                                                                 |
@@ -227,7 +227,7 @@ void ConVar::Init(void) const
 //-----------------------------------------------------------------------------
 // Purpose: initialize shipped ConVar's
 //-----------------------------------------------------------------------------
-void ConVar::InitShipped(void) const
+void ConVar::InitShipped(void)
 {
 #ifndef CLIENT_DLL
 	ai_script_nodes_draw             = g_pCVar->FindVar("ai_script_nodes_draw");
@@ -284,7 +284,7 @@ void ConVar::InitShipped(void) const
 //-----------------------------------------------------------------------------
 // Purpose: unregister/disable extraneous ConVar's.
 //-----------------------------------------------------------------------------
-void ConVar::PurgeShipped(void) const
+void ConVar::PurgeShipped(void)
 {
 #ifdef DEDICATED
 	const char* pszToPurge[] =
@@ -311,7 +311,7 @@ void ConVar::PurgeShipped(void) const
 //-----------------------------------------------------------------------------
 // Purpose: clear all hostname ConVar's.
 //-----------------------------------------------------------------------------
-void ConVar::PurgeHostNames(void) const
+void ConVar::PurgeHostNames(void)
 {
 	const char* pszHostNames[] =
 	{
@@ -1075,4 +1075,3 @@ void IConVar_Detach()
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-ConVar* g_pConVar = new ConVar();
diff --git a/r5dev/tier1/IConVar.h b/r5dev/tier1/IConVar.h
index e9002f6c..f5938c58 100644
--- a/r5dev/tier1/IConVar.h
+++ b/r5dev/tier1/IConVar.h
@@ -15,11 +15,11 @@ public:
 	ConVar(void);
 	~ConVar(void);
 
-	void Init(void) const;
-	void InitShipped(void) const;
+	static void Init(void);
+	static void InitShipped(void);
 
-	void PurgeShipped(void) const;
-	void PurgeHostNames(void) const;
+	static void PurgeShipped(void);
+	static void PurgeHostNames(void);
 
 	void AddFlags(int nFlags);
 	void RemoveFlags(int nFlags);
@@ -81,14 +81,14 @@ public:
 		int        m_nValue;
 	};
 
-	IConVar*       m_pIConVarVFTable{}; //0x0040
-	ConVar*        m_pParent        {}; //0x0048
-	const char*    m_pszDefaultValue{}; //0x0050
-	CVValue_t      m_Value          {}; //0c0058
-	bool           m_bHasMin        {}; //0x0070
-	float          m_fMinVal        {}; //0x0074
-	bool           m_bHasMax        {}; //0x0078
-	float          m_fMaxVal        {}; //0x007C
+	IConVar*       m_pIConVarVFTable; //0x0040
+	ConVar*        m_pParent        ; //0x0048
+	const char*    m_pszDefaultValue; //0x0050
+	CVValue_t      m_Value          ; //0c0058
+	bool           m_bHasMin        ; //0x0070
+	float          m_fMinVal        ; //0x0074
+	bool           m_bHasMax        ; //0x0078
+	float          m_fMaxVal        ; //0x007C
 	CUtlVector<FnChangeCallback_t> m_fnChangeCallbacks; //0x0080
 }; //Size: 0x00A0
 static_assert(sizeof(ConVar) == 0xA0);
@@ -112,8 +112,6 @@ void IConVar_Detach();
 
 void ConVar_PrintDescription(ConCommandBase* pVar);
 
-extern ConVar* g_pConVar;
-
 ///////////////////////////////////////////////////////////////////////////////
 class VConVar : public IDetour
 {
diff --git a/r5dev/tier1/cmd.cpp b/r5dev/tier1/cmd.cpp
index e932cee5..928677f0 100644
--- a/r5dev/tier1/cmd.cpp
+++ b/r5dev/tier1/cmd.cpp
@@ -458,7 +458,7 @@ void ConCommand::InitShipped(void)
 //-----------------------------------------------------------------------------
 // Purpose: unregister extraneous ConCommand's.
 //-----------------------------------------------------------------------------
-void ConCommand::PurgeShipped(void) const
+void ConCommand::PurgeShipped(void)
 {
 #ifdef DEDICATED
 	const char* pszCommandToRemove[] =
@@ -731,4 +731,3 @@ void ConCommand_Detach()
 	DetourDetach((LPVOID*)&ConCommandBase_IsFlagSet, &ConCommandBase::IsFlagSetInternal);
 	DetourDetach((LPVOID*)&v_Cmd_ForwardToServer, &Cmd_ForwardToServer);
 }
-ConCommand* g_pConCommand = new ConCommand();
diff --git a/r5dev/tier1/cmd.h b/r5dev/tier1/cmd.h
index 1ec86a4e..e93f2ee3 100644
--- a/r5dev/tier1/cmd.h
+++ b/r5dev/tier1/cmd.h
@@ -131,9 +131,9 @@ public:
 	ConCommand(void);
 	~ConCommand(void);
 
-	void Init(void);
-	void InitShipped(void);
-	void PurgeShipped(void) const;
+	static void Init(void);
+	static void InitShipped(void);
+	static void PurgeShipped(void);
 	bool IsCommand(void) const;
 
 	void*          m_nNullCallBack; //0x0040
@@ -185,8 +185,6 @@ ECommandTarget_t Cbuf_GetCurrentPlayer(void);
 void ConCommand_Attach();
 void ConCommand_Detach();
 
-extern ConCommand* g_pConCommand;
-
 ///////////////////////////////////////////////////////////////////////////////
 class VConCommand : public IDetour
 {