dvar dump command

This commit is contained in:
FutureRave 2022-10-06 23:15:25 +01:00
parent 036443c9ea
commit e2b6c69b79
No known key found for this signature in database
GPG Key ID: 22F9079C86CFAB31
4 changed files with 49 additions and 3 deletions

View File

@ -19,6 +19,8 @@ namespace game
Dvar_SetFromStringByName_t Dvar_SetFromStringByName; Dvar_SetFromStringByName_t Dvar_SetFromStringByName;
Dvar_SetString_t Dvar_SetString; Dvar_SetString_t Dvar_SetString;
Dvar_DisplayableValue_t Dvar_DisplayableValue;
G_RunFrame_t G_RunFrame; G_RunFrame_t G_RunFrame;
G_GetWeaponForName_t G_GetWeaponForName; G_GetWeaponForName_t G_GetWeaponForName;
@ -122,6 +124,9 @@ namespace game
int* sys_timeBase; int* sys_timeBase;
unsigned __int64* sys_counterBase; unsigned __int64* sys_counterBase;
int* dvarCount;
dvar_t** sortedDvars;
namespace mp namespace mp
{ {
SV_GetGuid_t SV_GetGuid; SV_GetGuid_t SV_GetGuid;
@ -983,6 +988,8 @@ namespace game
SELECT_VALUE(0x4DD090, 0x5BF740, 0x518DF0)); SELECT_VALUE(0x4DD090, 0x5BF740, 0x518DF0));
native::Dvar_SetString = native::Dvar_SetString_t(SELECT_VALUE(0x540570, 0x5BF3E0, 0x0)); native::Dvar_SetString = native::Dvar_SetString_t(SELECT_VALUE(0x540570, 0x5BF3E0, 0x0));
native::Dvar_DisplayableValue = native::Dvar_DisplayableValue_t(SELECT_VALUE(0x4AB1D0, 0x5BD260, 0x0));
native::G_RunFrame = native::G_RunFrame_t(SELECT_VALUE(0x52EAA0, 0x50CB70, 0x48AD60)); native::G_RunFrame = native::G_RunFrame_t(SELECT_VALUE(0x52EAA0, 0x50CB70, 0x48AD60));
native::G_GetWeaponForName = native::G_GetWeaponForName_t(SELECT_VALUE(0x495E40, 0x531070, 0x0)); native::G_GetWeaponForName = native::G_GetWeaponForName_t(SELECT_VALUE(0x495E40, 0x531070, 0x0));
@ -1107,5 +1114,8 @@ namespace game
native::initialized_0 = reinterpret_cast<int*>(SELECT_VALUE(0x1CE1CA0, 0x5AA3058, 0x62F4F9C)); native::initialized_0 = reinterpret_cast<int*>(SELECT_VALUE(0x1CE1CA0, 0x5AA3058, 0x62F4F9C));
native::sys_timeBase = reinterpret_cast<int*>(SELECT_VALUE(0x1CE1C98, 0x5AA3050, 0x5950CE4)); native::sys_timeBase = reinterpret_cast<int*>(SELECT_VALUE(0x1CE1C98, 0x5AA3050, 0x5950CE4));
native::sys_counterBase = reinterpret_cast<unsigned __int64*>(SELECT_VALUE(0x1CE1C90, 0x5AA3048, 0x5950CE8)); native::sys_counterBase = reinterpret_cast<unsigned __int64*>(SELECT_VALUE(0x1CE1C90, 0x5AA3048, 0x5950CE8));
native::dvarCount = reinterpret_cast<int*>(SELECT_VALUE(0x1C42398, 0x59CCDD8, 0x5879644));
native::sortedDvars = reinterpret_cast<native::dvar_t**>(SELECT_VALUE(0x1C423C0, 0x59CCE00, 0x587C5D8));
} }
} }

View File

@ -40,6 +40,9 @@ namespace game
typedef void (*Dvar_SetString_t)(const dvar_t* dvar, const char* value); typedef void (*Dvar_SetString_t)(const dvar_t* dvar, const char* value);
extern Dvar_SetString_t Dvar_SetString; extern Dvar_SetString_t Dvar_SetString;
typedef const char* (*Dvar_DisplayableValue_t)(const dvar_t* dvar);
extern Dvar_DisplayableValue_t Dvar_DisplayableValue;
typedef int (*G_RunFrame_t)(int, int); typedef int (*G_RunFrame_t)(int, int);
extern G_RunFrame_t G_RunFrame; extern G_RunFrame_t G_RunFrame;
@ -196,6 +199,9 @@ namespace game
extern int* sys_timeBase; extern int* sys_timeBase;
extern unsigned __int64* sys_counterBase; extern unsigned __int64* sys_counterBase;
extern int* dvarCount;
extern dvar_t** sortedDvars;
// Global Definitions & Functions // Global Definitions & Functions
constexpr auto JUMP_LAND_SLOWDOWN_TIME = 1800; constexpr auto JUMP_LAND_SLOWDOWN_TIME = 1800;

View File

@ -1,11 +1,14 @@
#include <std_include.hpp> #include <std_include.hpp>
#include <loader/module_loader.hpp> #include <loader/module_loader.hpp>
#include <utils/string.hpp>
#include <utils/hook.hpp>
#include "game/game.hpp" #include "game/game.hpp"
#include <utils/string.hpp>
#include <utils/hook.hpp>
#include <utils/io.hpp>
#include "command.hpp" #include "command.hpp"
#include "log_file.hpp"
utils::memory::allocator command::allocator_; utils::memory::allocator command::allocator_;
std::unordered_map<std::string, std::function<void(const command::params&)>> command::handlers; std::unordered_map<std::string, std::function<void(const command::params&)>> command::handlers;
@ -366,6 +369,33 @@ void command::post_load()
} }
add("quit", game::native::Com_Quit_f); add("quit", game::native::Com_Quit_f);
add("dvarDump", [](const params& params)
{
if (params.size() < 2)
{
return;
}
std::string file_name = "userraw/";
file_name.append(params.get(1));
if (!file_name.ends_with(".txt"))
{
file_name.append(".txt");
}
for (auto i = 0; i < *game::native::dvarCount; ++i)
{
const auto* dvar = game::native::sortedDvars[i];
if (dvar != nullptr)
{
const auto* line = utils::string::va("%s \"%s\"\r\n", dvar->name, game::native::Dvar_DisplayableValue(dvar));
utils::io::write_file(file_name, line, i != 0);
}
}
log_file::info("%i dvars\n", *game::native::dvarCount);
});
if (game::is_mp()) if (game::is_mp())
{ {

Binary file not shown.