diff --git a/src/client/game/game.cpp b/src/client/game/game.cpp index 571f43a4..c5fb718b 100644 --- a/src/client/game/game.cpp +++ b/src/client/game/game.cpp @@ -5,30 +5,55 @@ #include #include #include +#include +#include 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(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(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(); // name + const auto dvar_id = dvar_info[0].get(); // 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]; diff --git a/src/client/game/game.hpp b/src/client/game/game.hpp index 771dbdca..491d7c41 100644 --- a/src/client/game/game.hpp +++ b/src/client/game/game.hpp @@ -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 { diff --git a/src/client/resource.hpp b/src/client/resource.hpp index d2c6772e..d95ecc44 100644 --- a/src/client/resource.hpp +++ b/src/client/resource.hpp @@ -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 diff --git a/src/client/resource.rc b/src/client/resource.rc index 8b389970..22c26f73 100644 --- a/src/client/resource.rc +++ b/src/client/resource.rc @@ -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 diff --git a/src/client/resources/dvar_list.json b/src/client/resources/dvar_list.json new file mode 100644 index 00000000..b50abe0d --- /dev/null +++ b/src/client/resources/dvar_list.json @@ -0,0 +1,26 @@ +[ + [ + "2562", + "cg_draw2d" + ], + [ + "1762", + "cg_drawgun" + ], + [ + "2377", + "cg_drawfps" + ], + [ + "5401", + "timescale" + ], + [ + "1673", + "mapname" + ], + [ + "2757", + "snd_musicdisabled" + ] +] \ No newline at end of file