tweak(game): better cbuf execution

not the best but efficient
This commit is contained in:
Skull 2025-03-22 02:51:28 +03:00
parent b491b03dfc
commit 9bce3c24b3
5 changed files with 66 additions and 10 deletions

View File

@ -5,30 +5,55 @@
#include <utils/flags.hpp>
#include <utils/string.hpp>
#include <utils/io.hpp>
#include <utils/nt.hpp>
#include <utils/json.hpp>
namespace game
{
uint64_t base_address;
uint64_t base_address = (uint64_t)GetModuleHandleA(0);;
cmd_text* cmd_textArray = (cmd_text*)0x14BD83728;
auto* const cmd_textArray = reinterpret_cast<cmd_text*>(0x14BD83728);
void Cbuf_AddText(int localClientNum, const char* text)
{
Sys_EnterCriticalSection(193);
cmd_text* cmd_text_array = &cmd_textArray[localClientNum];
auto* cmd_texts = &cmd_textArray[localClientNum];
auto text_length = static_cast<int>(strlen(text));
int v4 = strlen(text);
int v5 = cmd_text_array->cmdsize;
if ((int)v5 + v4 < cmd_text_array->maxsize)
if (cmd_texts->cmdsize + text_length < cmd_texts->maxsize)
{
memcpy(&cmd_text_array->data[v5], text, v4 + 1);
cmd_text_array->cmdsize += v4;
memcpy(&cmd_texts->data[cmd_texts->cmdsize], text, text_length + 1);
cmd_texts->cmdsize += text_length;
}
Sys_LeaveCriticalSection(193);
}
const auto list_json = utils::nt::load_resource(DVAR_LIST);
const auto list = nlohmann::json::parse(list_json);
void command_execute(int localClientNum, std::string text)
{
if (!list.is_array()) return;
for (const auto& dvar_info : list)
{
if (dvar_info.is_array() && dvar_info.size() == 2)
{
const auto name = dvar_info[1].get<std::string>(); // name
const auto dvar_id = dvar_info[0].get<std::string>(); // id
if (!name.empty() && !dvar_id.empty())
{
text = utils::string::replace(utils::string::to_lower(text), name, dvar_id);
}
}
}
Cbuf_AddText(localClientNum, utils::string::va("%s \n", text.data()));
}
int Cmd_Argc()
{
return cmd_args->argc[cmd_args->nesting];

View File

@ -10,6 +10,7 @@ namespace game
extern uint64_t base_address;
void Cbuf_AddText(int localClientNum, const char* text);
void command_execute(int localClientNum, std::string text);
namespace environment
{

View File

@ -10,6 +10,8 @@
#define MENU_MAIN 304
#define TLS_DLL 305
#define DVAR_LIST 305
#define ICON_IMAGE 306
#define TLS_DLL 306
#define ICON_IMAGE 307

View File

@ -109,6 +109,8 @@ TLS_DLL RCDATA "../../build/bin/x64/Debug/tlsdll.dll"
TLS_DLL RCDATA "../../build/bin/x64/Release/tlsdll.dll"
#endif
DVAR_LIST RCDATA "resources/dvar_list.json"
ICON_IMAGE RCDATA "resources/icon.png"
#endif // English (United States) resources

View File

@ -0,0 +1,26 @@
[
[
"2562",
"cg_draw2d"
],
[
"1762",
"cg_drawgun"
],
[
"2377",
"cg_drawfps"
],
[
"5401",
"timescale"
],
[
"1673",
"mapname"
],
[
"2757",
"snd_musicdisabled"
]
]