From 89165a96b43a7029965e58b42a68e9e8af617a74 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 29 Aug 2021 17:41:21 +0200 Subject: [PATCH 01/13] [Dvar] Use set raw method on dvars by default --- src/Components/Modules/Dedicated.cpp | 2 +- src/Components/Modules/Dvar.cpp | 27 +++++++++------------------ src/Components/Modules/Dvar.hpp | 5 +---- src/Components/Modules/IW4MVM.cpp | 2 +- src/Components/Modules/Maps.cpp | 4 ++-- src/Game/Structs.hpp | 1 + 6 files changed, 15 insertions(+), 26 deletions(-) diff --git a/src/Components/Modules/Dedicated.cpp b/src/Components/Modules/Dedicated.cpp index dade1ca7..8df55851 100644 --- a/src/Components/Modules/Dedicated.cpp +++ b/src/Components/Modules/Dedicated.cpp @@ -218,7 +218,7 @@ namespace Components { if (!Dedicated::IsEnabled() && Dvar::Var("sv_dontrotate").get()) { - Dvar::Var("sv_dontrotate").setRaw(0); + Dvar::Var("sv_dontrotate").set(0); return; } diff --git a/src/Components/Modules/Dvar.cpp b/src/Components/Modules/Dvar.cpp index f342c658..ead8e857 100644 --- a/src/Components/Modules/Dvar.cpp +++ b/src/Components/Modules/Dvar.cpp @@ -88,7 +88,7 @@ namespace Components { if (this->dvar && this->dvar->name) { - Game::Dvar_SetCommand(this->dvar->name, string); + this->dvar->current.string = string; } } void Dvar::Var::set(const std::string& string) @@ -99,32 +99,23 @@ namespace Components { if (this->dvar && this->dvar->name) { - Game::Dvar_SetCommand(this->dvar->name, Utils::String::VA("%i", integer)); + this->dvar->current.integer = integer; } } void Dvar::Var::set(float value) { if (this->dvar && this->dvar->name) - { - Game::Dvar_SetCommand(this->dvar->name, Utils::String::VA("%f", value)); - } - } - - void Dvar::Var::setRaw(int integer) - { - if (this->dvar) - { - this->dvar->current.integer = integer; - } - } - - void Dvar::Var::setRaw(float value) - { - if (this->dvar) { this->dvar->current.value = value; } } + void Dvar::Var::set(bool enabled) + { + if (this->dvar && this->dvar->name) + { + this->dvar->current.enabled = enabled; + } + } template<> static Dvar::Var Dvar::Register(const char* name, bool value, Dvar::Flag flag, const char* description) { diff --git a/src/Components/Modules/Dvar.hpp b/src/Components/Modules/Dvar.hpp index 4775b575..47cf8102 100644 --- a/src/Components/Modules/Dvar.hpp +++ b/src/Components/Modules/Dvar.hpp @@ -31,10 +31,7 @@ namespace Components void set(int integer); void set(float value); - - // TODO: Add others - void setRaw(int integer); - void setRaw(float value); + void set(bool enabled); private: Game::dvar_t* dvar; diff --git a/src/Components/Modules/IW4MVM.cpp b/src/Components/Modules/IW4MVM.cpp index 94fe685e..9b6b3fb8 100644 --- a/src/Components/Modules/IW4MVM.cpp +++ b/src/Components/Modules/IW4MVM.cpp @@ -22,7 +22,7 @@ namespace Components { if (!Game::CL_IsCgameInitialized()) { - Dvar::Var("com_timescale").setRaw(1.0f); + Dvar::Var("com_timescale").set(1.0f); } }); diff --git a/src/Components/Modules/Maps.cpp b/src/Components/Modules/Maps.cpp index 5ed5ba11..ee36600a 100644 --- a/src/Components/Modules/Maps.cpp +++ b/src/Components/Modules/Maps.cpp @@ -560,7 +560,7 @@ namespace Components } hasDlc.push_back(hasAllMaps); - Dvar::Var(Utils::String::VA("isDlcInstalled_%d", pack.index)).setRaw(hasAllMaps ? 1 : 0); + Dvar::Var(Utils::String::VA("isDlcInstalled_%d", pack.index)).set(hasAllMaps ? 1 : 0); } // Must have all of dlc 3 to 5 or it causes issues @@ -571,7 +571,7 @@ namespace Components sentMessage = true; } - Dvar::Var("isDlcInstalled_All").setRaw(hasAllDlcs ? 1 : 0); + Dvar::Var("isDlcInstalled_All").set(hasAllDlcs ? 1 : 0); } bool Maps::IsCustomMap() diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index e64e5d09..f0c00bed 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -90,6 +90,7 @@ namespace Game DVAR_FLAG_SERVERINFO = 0x400, //in the getstatus oob DVAR_FLAG_WRITEPROTECTED = 0x800, //write protected DVAR_FLAG_UNKNOWN1000 = 0x1000, //unknown + DVAR_FLAG_UNKNOWN1800 = 0x1800, //unknown DVAR_FLAG_READONLY = 0x2000, //read only (same as 0x800?) DVAR_FLAG_UNKNOWN4000 = 0x4000, //unknown DVAR_FLAG_UNKNOWN8000 = 0x8000, //unknown From 62cc1fff78e97205b1b2cc37e3df41ab7e00bc7f Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 29 Aug 2021 17:51:50 +0200 Subject: [PATCH 02/13] [Dvar] Make flag enum unsigned --- src/Game/Structs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index f0c00bed..d0f48d9a 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -74,7 +74,7 @@ namespace Game ASSET_TYPE_INVALID = -1, }; - typedef enum + typedef enum : unsigned int { DVAR_FLAG_NONE = 0x0, //no flags DVAR_FLAG_SAVED = 0x1, //saves in config_mp.cfg for clients From 9a1ab2c6607e077a1bfcef47699d53b2c7f3cc04 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 29 Aug 2021 22:09:45 +0200 Subject: [PATCH 03/13] Check for dvar type --- src/Components/Modules/Dvar.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Components/Modules/Dvar.cpp b/src/Components/Modules/Dvar.cpp index ead8e857..039ebaf1 100644 --- a/src/Components/Modules/Dvar.cpp +++ b/src/Components/Modules/Dvar.cpp @@ -86,7 +86,7 @@ namespace Components } void Dvar::Var::set(const char* string) { - if (this->dvar && this->dvar->name) + if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_STRING) { this->dvar->current.string = string; } @@ -97,21 +97,21 @@ namespace Components } void Dvar::Var::set(int integer) { - if (this->dvar && this->dvar->name) + if (this->dvar && this->dvar->name && this->dvar->type == Game::dvar_type::DVAR_TYPE_INT) { this->dvar->current.integer = integer; } } void Dvar::Var::set(float value) { - if (this->dvar && this->dvar->name) + if (this->dvar && this->dvar->name && this->dvar->type == Game::dvar_type::DVAR_TYPE_FLOAT) { this->dvar->current.value = value; } } void Dvar::Var::set(bool enabled) { - if (this->dvar && this->dvar->name) + if (this->dvar && this->dvar->name && this->dvar->type == Game::dvar_type::DVAR_TYPE_BOOL) { this->dvar->current.enabled = enabled; } From 5db5f707a9bf7753f3c6f753be34c3dba3efc83f Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 29 Aug 2021 22:13:03 +0200 Subject: [PATCH 04/13] Remove name check --- src/Components/Modules/Dvar.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Components/Modules/Dvar.cpp b/src/Components/Modules/Dvar.cpp index 039ebaf1..86062a41 100644 --- a/src/Components/Modules/Dvar.cpp +++ b/src/Components/Modules/Dvar.cpp @@ -97,21 +97,21 @@ namespace Components } void Dvar::Var::set(int integer) { - if (this->dvar && this->dvar->name && this->dvar->type == Game::dvar_type::DVAR_TYPE_INT) + if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_INT) { this->dvar->current.integer = integer; } } void Dvar::Var::set(float value) { - if (this->dvar && this->dvar->name && this->dvar->type == Game::dvar_type::DVAR_TYPE_FLOAT) + if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_FLOAT) { this->dvar->current.value = value; } } void Dvar::Var::set(bool enabled) { - if (this->dvar && this->dvar->name && this->dvar->type == Game::dvar_type::DVAR_TYPE_BOOL) + if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_BOOL) { this->dvar->current.enabled = enabled; } From 9ff6747c5aff29b8c12fe42a57f76d13e41db105 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 29 Aug 2021 22:40:55 +0200 Subject: [PATCH 05/13] Define dvar_type as a char --- src/Game/Structs.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index d0f48d9a..c5a96608 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -120,7 +120,7 @@ namespace Game DVAR_SOURCE_DEVGUI = 0x3, }; - typedef enum + typedef enum : char { DVAR_TYPE_BOOL = 0x0, DVAR_TYPE_FLOAT = 0x1, From 032667e91c27f2a3767d89cd588a923d4591bceb Mon Sep 17 00:00:00 2001 From: Diavolo Date: Tue, 31 Aug 2021 16:31:46 +0200 Subject: [PATCH 06/13] Fix setString --- src/Components/Modules/Dvar.cpp | 5 ++++- src/Game/Functions.cpp | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Components/Modules/Dvar.cpp b/src/Components/Modules/Dvar.cpp index 86062a41..1410616c 100644 --- a/src/Components/Modules/Dvar.cpp +++ b/src/Components/Modules/Dvar.cpp @@ -88,7 +88,7 @@ namespace Components { if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_STRING) { - this->dvar->current.string = string; + Game::Dvar_SetCommand(this->dvar->name, string); } } void Dvar::Var::set(const std::string& string) @@ -100,6 +100,7 @@ namespace Components if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_INT) { this->dvar->current.integer = integer; + this->dvar->latched.integer = integer; } } void Dvar::Var::set(float value) @@ -107,6 +108,7 @@ namespace Components if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_FLOAT) { this->dvar->current.value = value; + this->dvar->latched.value = value; } } void Dvar::Var::set(bool enabled) @@ -114,6 +116,7 @@ namespace Components if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_BOOL) { this->dvar->current.enabled = enabled; + this->dvar->latched.enabled = enabled; } } diff --git a/src/Game/Functions.cpp b/src/Game/Functions.cpp index 0ed7b3cc..8b46ac76 100644 --- a/src/Game/Functions.cpp +++ b/src/Game/Functions.cpp @@ -110,6 +110,9 @@ namespace Game Dvar_InfoString_Big_t Dvar_InfoString_Big = Dvar_InfoString_Big_t(0x4D98A0); Dvar_SetCommand_t Dvar_SetCommand = Dvar_SetCommand_t(0x4EE430); + Free_String_t Free_String = Free_String_t(0x470E80); + Copy_String_t Copy_String = Copy_String_t(0x4F3C80); + Encode_Init_t Encode_Init = Encode_Init_t(0x462AB0); Field_Clear_t Field_Clear = Field_Clear_t(0x437EB0); From 1bb3b20395eb8051921c5bbb2a4984c595d66ec7 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Tue, 31 Aug 2021 16:32:57 +0200 Subject: [PATCH 07/13] Fix setString --- src/Game/Functions.hpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Game/Functions.hpp b/src/Game/Functions.hpp index eaf3d6d1..f0945356 100644 --- a/src/Game/Functions.hpp +++ b/src/Game/Functions.hpp @@ -256,6 +256,12 @@ namespace Game typedef dvar_t* (__cdecl * Dvar_SetCommand_t)(const char* name, const char* value); extern Dvar_SetCommand_t Dvar_SetCommand; + typedef void (__cdecl* Free_String_t)(const char* string); + extern Free_String_t Free_String; + + typedef const char* (__cdecl* Copy_String_t)(const char* string); + extern Copy_String_t Copy_String; + typedef bool(__cdecl * Encode_Init_t)(const char* ); extern Encode_Init_t Encode_Init; From ff5bb1f264fafb0f66ed5f754686bfbb81d1e4e0 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Tue, 31 Aug 2021 18:12:25 +0200 Subject: [PATCH 08/13] Use Dvar_SetString --- src/Components/Modules/Dvar.cpp | 2 +- src/Game/Functions.cpp | 2 ++ src/Game/Functions.hpp | 9 ++++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Components/Modules/Dvar.cpp b/src/Components/Modules/Dvar.cpp index 1410616c..a5debd80 100644 --- a/src/Components/Modules/Dvar.cpp +++ b/src/Components/Modules/Dvar.cpp @@ -88,7 +88,7 @@ namespace Components { if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_STRING) { - Game::Dvar_SetCommand(this->dvar->name, string); + Game::Dvar_SetString(this->dvar, string); } } void Dvar::Var::set(const std::string& string) diff --git a/src/Game/Functions.cpp b/src/Game/Functions.cpp index 8b46ac76..265adc00 100644 --- a/src/Game/Functions.cpp +++ b/src/Game/Functions.cpp @@ -279,6 +279,8 @@ namespace Game Dvar_SetFromStringByName_t Dvar_SetFromStringByName = Dvar_SetFromStringByName_t(0x4F52E0); Dvar_SetFromStringByNameFromSource_t Dvar_SetFromStringByNameFromSource = Dvar_SetFromStringByNameFromSource_t(0x4FC770); Dvar_SetStringByName_t Dvar_SetStringByName = Dvar_SetStringByName_t(0x44F060); + Dvar_SetString_t Dvar_SetString = Dvar_SetString_t(0x4A9580); + SL_ConvertToString_t SL_ConvertToString = SL_ConvertToString_t(0x4EC1D0); SL_GetString_t SL_GetString = SL_GetString_t(0x4CDC10); diff --git a/src/Game/Functions.hpp b/src/Game/Functions.hpp index f0945356..04dbe436 100644 --- a/src/Game/Functions.hpp +++ b/src/Game/Functions.hpp @@ -235,15 +235,18 @@ namespace Game typedef dvar_t* (__cdecl * Dvar_RegisterColor_t)(const char* name, float r, float g, float b, float a, int flags, const char* description); extern Dvar_RegisterColor_t Dvar_RegisterColor; - typedef dvar_t*(__cdecl * Dvar_SetFromStringByName_t)(const char* cvar, const char* value); + typedef dvar_t* (__cdecl * Dvar_SetFromStringByName_t)(const char* cvar, const char* value); extern Dvar_SetFromStringByName_t Dvar_SetFromStringByName; - typedef dvar_t*(__cdecl * Dvar_SetFromStringByNameFromSource_t)(const char* cvar, const char* value, DvarSetSource source); + typedef dvar_t* (__cdecl * Dvar_SetFromStringByNameFromSource_t)(const char* cvar, const char* value, DvarSetSource source); extern Dvar_SetFromStringByNameFromSource_t Dvar_SetFromStringByNameFromSource; - typedef void(__cdecl * Dvar_SetStringByName_t)(const char* cvar, const char* value); + typedef void (__cdecl * Dvar_SetStringByName_t)(const char* cvar, const char* value); extern Dvar_SetStringByName_t Dvar_SetStringByName; + typedef void (__cdecl * Dvar_SetString_t)(dvar_t* cvar, const char* value); + extern Dvar_SetString_t Dvar_SetString; + typedef void(__cdecl * Dvar_GetUnpackedColorByName_t)(const char* name, float* color); extern Dvar_GetUnpackedColorByName_t Dvar_GetUnpackedColorByName; From dded312064defd8d4562c357d9fadd20d40f65d2 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Tue, 31 Aug 2021 18:24:40 +0200 Subject: [PATCH 09/13] Removed extra newline --- src/Game/Functions.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Game/Functions.cpp b/src/Game/Functions.cpp index 265adc00..ca558be0 100644 --- a/src/Game/Functions.cpp +++ b/src/Game/Functions.cpp @@ -281,7 +281,6 @@ namespace Game Dvar_SetStringByName_t Dvar_SetStringByName = Dvar_SetStringByName_t(0x44F060); Dvar_SetString_t Dvar_SetString = Dvar_SetString_t(0x4A9580); - SL_ConvertToString_t SL_ConvertToString = SL_ConvertToString_t(0x4EC1D0); SL_GetString_t SL_GetString = SL_GetString_t(0x4CDC10); From 36a025e1d05dd8384fd602054517ebf676150dcf Mon Sep 17 00:00:00 2001 From: Diavolo Date: Wed, 1 Sep 2021 23:19:44 +0200 Subject: [PATCH 10/13] Use game functions to safely change dvar value --- src/Components/Modules/Dvar.cpp | 21 +++++++++++---------- src/Game/Functions.cpp | 3 +++ src/Game/Functions.hpp | 9 +++++++++ src/Game/Structs.hpp | 3 +-- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/Components/Modules/Dvar.cpp b/src/Components/Modules/Dvar.cpp index a5debd80..d2d0bc93 100644 --- a/src/Components/Modules/Dvar.cpp +++ b/src/Components/Modules/Dvar.cpp @@ -86,7 +86,8 @@ namespace Components } void Dvar::Var::set(const char* string) { - if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_STRING) + assert(this->dvar->type == Game::DVAR_TYPE_STRING); + if (this->dvar) { Game::Dvar_SetString(this->dvar, string); } @@ -97,26 +98,26 @@ namespace Components } void Dvar::Var::set(int integer) { - if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_INT) + assert(this->dvar->type == Game::DVAR_TYPE_INT); + if (this->dvar) { - this->dvar->current.integer = integer; - this->dvar->latched.integer = integer; + Game::Dvar_SetInt(this->dvar, integer); } } void Dvar::Var::set(float value) { - if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_FLOAT) + assert(this->dvar->type == Game::DVAR_TYPE_FLOAT); + if (this->dvar) { - this->dvar->current.value = value; - this->dvar->latched.value = value; + Game::Dvar_SetFloat(this->dvar, value); } } void Dvar::Var::set(bool enabled) { - if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_BOOL) + assert(this->dvar->type == Game::DVAR_TYPE_BOOL); + if (this->dvar) { - this->dvar->current.enabled = enabled; - this->dvar->latched.enabled = enabled; + Game::Dvar_SetBool(this->dvar, enabled); } } diff --git a/src/Game/Functions.cpp b/src/Game/Functions.cpp index ca558be0..6d3586af 100644 --- a/src/Game/Functions.cpp +++ b/src/Game/Functions.cpp @@ -280,6 +280,9 @@ namespace Game Dvar_SetFromStringByNameFromSource_t Dvar_SetFromStringByNameFromSource = Dvar_SetFromStringByNameFromSource_t(0x4FC770); Dvar_SetStringByName_t Dvar_SetStringByName = Dvar_SetStringByName_t(0x44F060); Dvar_SetString_t Dvar_SetString = Dvar_SetString_t(0x4A9580); + Dvar_SetBool_t Dvar_SetBool = Dvar_SetBool_t(0x4A9510); + Dvar_SetFloat_t Dvar_SetFloat = Dvar_SetFloat_t(0x40BB20); + Dvar_SetInt_t Dvar_SetInt = Dvar_SetInt_t(0x421DA0); SL_ConvertToString_t SL_ConvertToString = SL_ConvertToString_t(0x4EC1D0); SL_GetString_t SL_GetString = SL_GetString_t(0x4CDC10); diff --git a/src/Game/Functions.hpp b/src/Game/Functions.hpp index 04dbe436..dc8d7986 100644 --- a/src/Game/Functions.hpp +++ b/src/Game/Functions.hpp @@ -247,6 +247,15 @@ namespace Game typedef void (__cdecl * Dvar_SetString_t)(dvar_t* cvar, const char* value); extern Dvar_SetString_t Dvar_SetString; + typedef void (__cdecl * Dvar_SetBool_t)(dvar_t* cvar, bool enabled); + extern Dvar_SetBool_t Dvar_SetBool; + + typedef void (__cdecl * Dvar_SetFloat_t)(dvar_t* cvar, float value); + extern Dvar_SetFloat_t Dvar_SetFloat; + + typedef void (__cdecl * Dvar_SetInt_t)(dvar_t* cvar, int integer); + extern Dvar_SetInt_t Dvar_SetInt; + typedef void(__cdecl * Dvar_GetUnpackedColorByName_t)(const char* name, float* color); extern Dvar_GetUnpackedColorByName_t Dvar_GetUnpackedColorByName; diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index c5a96608..8e6ae687 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -90,7 +90,6 @@ namespace Game DVAR_FLAG_SERVERINFO = 0x400, //in the getstatus oob DVAR_FLAG_WRITEPROTECTED = 0x800, //write protected DVAR_FLAG_UNKNOWN1000 = 0x1000, //unknown - DVAR_FLAG_UNKNOWN1800 = 0x1800, //unknown DVAR_FLAG_READONLY = 0x2000, //read only (same as 0x800?) DVAR_FLAG_UNKNOWN4000 = 0x4000, //unknown DVAR_FLAG_UNKNOWN8000 = 0x8000, //unknown @@ -2382,7 +2381,7 @@ namespace Game const char *name; const char *description; unsigned int flags; - char type; + dvar_type type; bool modified; DvarValue current; DvarValue latched; From 3cb8d31571e15672b671a7588dde15b0f49ab414 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Fri, 3 Sep 2021 10:41:23 +0200 Subject: [PATCH 11/13] Removed unused functions --- src/Game/Functions.cpp | 3 --- src/Game/Functions.hpp | 6 ------ 2 files changed, 9 deletions(-) diff --git a/src/Game/Functions.cpp b/src/Game/Functions.cpp index 6d3586af..34455097 100644 --- a/src/Game/Functions.cpp +++ b/src/Game/Functions.cpp @@ -110,9 +110,6 @@ namespace Game Dvar_InfoString_Big_t Dvar_InfoString_Big = Dvar_InfoString_Big_t(0x4D98A0); Dvar_SetCommand_t Dvar_SetCommand = Dvar_SetCommand_t(0x4EE430); - Free_String_t Free_String = Free_String_t(0x470E80); - Copy_String_t Copy_String = Copy_String_t(0x4F3C80); - Encode_Init_t Encode_Init = Encode_Init_t(0x462AB0); Field_Clear_t Field_Clear = Field_Clear_t(0x437EB0); diff --git a/src/Game/Functions.hpp b/src/Game/Functions.hpp index dc8d7986..3536a4b7 100644 --- a/src/Game/Functions.hpp +++ b/src/Game/Functions.hpp @@ -268,12 +268,6 @@ namespace Game typedef dvar_t* (__cdecl * Dvar_SetCommand_t)(const char* name, const char* value); extern Dvar_SetCommand_t Dvar_SetCommand; - typedef void (__cdecl* Free_String_t)(const char* string); - extern Free_String_t Free_String; - - typedef const char* (__cdecl* Copy_String_t)(const char* string); - extern Copy_String_t Copy_String; - typedef bool(__cdecl * Encode_Init_t)(const char* ); extern Encode_Init_t Encode_Init; From 3838cd478ef3e45041cb489784126c99386f5c5c Mon Sep 17 00:00:00 2001 From: Diavolo Date: Sun, 5 Sep 2021 21:53:56 +0200 Subject: [PATCH 12/13] [Structs] Updated Client_t --- src/Game/Structs.hpp | 50 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index 8e6ae687..afe5f26b 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -4215,6 +4215,25 @@ namespace Game char ipx[10]; }; + struct netchan_t + { + int outgoingSequence; + int sock; + int dropped; + int incomingSequence; + netadr_t remoteAddress; + int qport; + int fragmentSequence; + int fragmentLength; + uint8_t* fragmentBuffer; + int fragmentBufferSize; + int unsentFragments; + int unsentFragmentStart; + int unsentLength; + uint8_t* unsentBuffer; + int unsentBufferSize; + }; + struct FxEditorElemAtlas { int behavior; @@ -4624,47 +4643,56 @@ namespace Game // 0 clientstate_t state; // 4 - char _pad[4]; + char __pad0[4]; // 8 int deltaMessage; // 12 - char __pad[12]; + char __pad1[12]; // 24 int outgoingSequence; // 28 - char pad[12]; + char __pad2[12]; // 40 netadr_t addr; // 60 - char pad1[1568]; + char __pad3[1568]; // 1628 char connectInfoString[1024]; // 2652 - char pad2[133192]; + char __pad4[132096]; + // 134748 + int reliableSequence; + // 134752 + int reliableAcknowledge; + // 134756 + int reliableSent; + // 134760 + char __pad5[1084]; // 135844 char name[16]; // 135860 - char pad3[12]; + char __pad6[12]; // 135872 int snapNum; // 135876 - int pad4; + int __pad7; // 135880 short ping; // 135882 - //char pad5[142390]; - char pad5[133158]; + char __pad8[133158]; // 269040 int isBot; // 269044 - char pad6[9228]; + char __pad9[9228]; // 278272 unsigned __int64 steamid; // 278280 - char pad7[403592]; + char __pad10[403592]; } client_t; #pragma pack(pop) + static_assert(sizeof(client_t) == 681872); + struct CModelAllocData { void* mainArray; From 63bce435efff547f24737c942056c767d79dab21 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Wed, 8 Sep 2021 22:54:43 +0200 Subject: [PATCH 13/13] newline between funcs --- src/Components/Modules/Dvar.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Components/Modules/Dvar.cpp b/src/Components/Modules/Dvar.cpp index d2d0bc93..ad28175c 100644 --- a/src/Components/Modules/Dvar.cpp +++ b/src/Components/Modules/Dvar.cpp @@ -20,6 +20,7 @@ namespace Components { return this->dvar; } + template <> char* Dvar::Var::get() { if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_STRING && this->dvar->current.string) @@ -29,10 +30,12 @@ namespace Components return const_cast(""); } + template <> const char* Dvar::Var::get() { return this->get(); } + template <> int Dvar::Var::get() { if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_INT) @@ -42,10 +45,12 @@ namespace Components return 0; } + template <> unsigned int Dvar::Var::get() { return static_cast(this->get()); } + template <> float Dvar::Var::get() { if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_FLOAT) @@ -55,6 +60,7 @@ namespace Components return 0; } + template <> float* Dvar::Var::get() { static float val[4] = { 0 }; @@ -66,6 +72,7 @@ namespace Components return val; } + template <> bool Dvar::Var::get() { if (this->dvar && this->dvar->type == Game::dvar_type::DVAR_TYPE_BOOL) @@ -75,6 +82,7 @@ namespace Components return false; } + template <> std::string Dvar::Var::get() { return this->get(); @@ -84,6 +92,7 @@ namespace Components { this->set(const_cast(string)); } + void Dvar::Var::set(const char* string) { assert(this->dvar->type == Game::DVAR_TYPE_STRING); @@ -92,10 +101,12 @@ namespace Components Game::Dvar_SetString(this->dvar, string); } } + void Dvar::Var::set(const std::string& string) { this->set(string.data()); } + void Dvar::Var::set(int integer) { assert(this->dvar->type == Game::DVAR_TYPE_INT); @@ -104,6 +115,7 @@ namespace Components Game::Dvar_SetInt(this->dvar, integer); } } + void Dvar::Var::set(float value) { assert(this->dvar->type == Game::DVAR_TYPE_FLOAT); @@ -112,6 +124,7 @@ namespace Components Game::Dvar_SetFloat(this->dvar, value); } } + void Dvar::Var::set(bool enabled) { assert(this->dvar->type == Game::DVAR_TYPE_BOOL); @@ -125,14 +138,17 @@ namespace Components { return Game::Dvar_RegisterBool(name, value, flag.val, description); } + template<> static Dvar::Var Dvar::Register(const char* name, const char* value, Dvar::Flag flag, const char* description) { return Game::Dvar_RegisterString(name, value, flag.val, description); } + template<> static Dvar::Var Dvar::Register(const char* name, int value, int min, int max, Dvar::Flag flag, const char* description) { return Game::Dvar_RegisterInt(name, value, min, max, flag.val, description); } + template<> static Dvar::Var Dvar::Register(const char* name, float value, float min, float max, Dvar::Flag flag, const char* description) { return Game::Dvar_RegisterFloat(name, value, min, max, flag.val, description);