From 7057bebcd6da168d718bce54a0ba08de91f73d66 Mon Sep 17 00:00:00 2001 From: VDm Date: Sat, 9 Aug 2025 23:44:04 +0400 Subject: [PATCH 1/2] feat(gameui): implement CGUIBindings::LoadBindings --- src/gameui/CGGameUI.cpp | 2 +- src/gameui/CGUIBindings.cpp | 60 ++++++++++++++++++++++++++++++++++++- src/gameui/CGUIBindings.hpp | 4 ++- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/gameui/CGGameUI.cpp b/src/gameui/CGGameUI.cpp index b82d09f..fb7570c 100644 --- a/src/gameui/CGGameUI.cpp +++ b/src/gameui/CGGameUI.cpp @@ -163,7 +163,7 @@ void CGGameUI::Initialize() { //CGGameUI::SomeSavedAccountVariables((int)v23); //LoadAccountData(6, (int(__cdecl*)(int, int, int))sub_5183A0, 0); //CGGameUI::UpdateInitCounter(); - //CGUIBindings::LoadBindings(); + CGUIBindings::LoadBindings(); //CGUIMacros::Initialize(); //CGUIMacros::LoadMacros(); //CGChat::LoadChatSettings(); diff --git a/src/gameui/CGUIBindings.cpp b/src/gameui/CGUIBindings.cpp index 5e17020..bf9ebdd 100644 --- a/src/gameui/CGUIBindings.cpp +++ b/src/gameui/CGUIBindings.cpp @@ -13,6 +13,7 @@ static CStatus s_nullStatus; static uint16_t s_initRound = 0; +static uint32_t s_loadPendingMask = 0; CGUIBindings* CGUIBindings::s_bindings = nullptr; @@ -114,7 +115,7 @@ static bool ValidateKeyString(const char* key) { return true; } -void MODIFIEDCLICK::SetBinding(BINDING_SET a1, const char* binding) { +void MODIFIEDCLICK::SetBinding(BINDING_SET set, const char* binding) { } @@ -125,6 +126,63 @@ void CGUIBindings::Initialize() { } } +void CGUIBindings::LoadBindings() { + char* buffer = nullptr; + if (SFile::Load(nullptr, "WTF\\DefaultBindings.wtf", reinterpret_cast(&buffer), nullptr, 1, 1, nullptr)) { + CGUIBindings::LoadBindings(BINDING_DEFAULT, buffer); + SFile::Unload(buffer); + // TODO: LoadJoystickConfig + } + s_loadPendingMask = 6; + // TODO: LoadAccountData +} + +void CGUIBindings::LoadBindings(BINDING_SET set, const char* buffer) { + auto bindings = CGUIBindings::s_bindings; + + if (!CGUIBindings::s_bindings) { + return; + } + + if (set != BINDING_DEFAULT) { + // TODO: bindings->CopyBindings(BINDING_DEFAULT, set); + } + + BINDING_MODE mode = BINDING_MODE_0; + + while (*buffer) { + char token[1024]; + SStrTokenize(&buffer, token, sizeof(token), "\r\n", nullptr); + + char* line = token; + while (*line == ' ' || *line == '\t') { + ++line; + } + + if (!SStrCmpI(line, "BINDINGMODE ", 12)) { + auto value = SStrToInt(&line[12]); + if (value <= BINDING_MODE_3) { + mode = static_cast(value); + } + } else if (!SStrCmpI(line, "bind ", 5)) { + const char* command = &line[5]; + char keystring[32]; + SStrTokenize(&command, keystring, sizeof(keystring), " ", nullptr); + bindings->Bind(set, mode, keystring, command); + } else if (!SStrCmpI(line, "modifiedclick ", 14)) { + const char* command = &line[14]; + char keystring[32]; + SStrTokenize(&command, keystring, sizeof(keystring), " ", nullptr); + if (command) { + auto modifiedClick = bindings->m_modifiedClicks.Ptr(command); + if (modifiedClick) + modifiedClick->SetBinding(set, keystring); + } + } + } + +} + bool CGUIBindings::Load(const char* commandsFile, MD5_CTX* md5, CStatus* status) { if (!status) { status = &s_nullStatus; diff --git a/src/gameui/CGUIBindings.hpp b/src/gameui/CGUIBindings.hpp index b2b484f..e3402bd 100644 --- a/src/gameui/CGUIBindings.hpp +++ b/src/gameui/CGUIBindings.hpp @@ -43,7 +43,7 @@ class KEYCOMMAND : public TSHashObject { class MODIFIEDCLICK : public TSHashObject { public: - void SetBinding(BINDING_SET a1, const char* binding); + void SetBinding(BINDING_SET set, const char* binding); int32_t index; }; @@ -53,6 +53,8 @@ class CGUIBindings { static CGUIBindings* s_bindings; static void Initialize(); + static void LoadBindings(); + static void LoadBindings(BINDING_SET set, const char* buffer); CGUIBindings() = default; From 102fc51aef138f69b2a874eab8c6cf3a549d120b Mon Sep 17 00:00:00 2001 From: VDm Date: Sun, 10 Aug 2025 00:13:00 +0400 Subject: [PATCH 2/2] chore(gameui): set default values for CGUIBindings class --- src/gameui/CGUIBindings.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gameui/CGUIBindings.hpp b/src/gameui/CGUIBindings.hpp index e3402bd..675b383 100644 --- a/src/gameui/CGUIBindings.hpp +++ b/src/gameui/CGUIBindings.hpp @@ -68,9 +68,9 @@ class CGUIBindings { int32_t GetNumCommandKeys(BINDING_SET set, BINDING_MODE mode, const char* command); void AdjustCommandKeyIndices(BINDING_SET set, BINDING_MODE mode, const char* command, int32_t index); - int32_t m_numCommands; - int32_t m_numHiddenCommands; - int32_t m_numModifiedClicks; + int32_t m_numCommands = 0; + int32_t m_numHiddenCommands = 0; + int32_t m_numModifiedClicks = 0; TSHashTable m_bindings[4]; TSHashTable m_commands; TSHashTable m_modifiedClicks;