From 49514e98cd60eb68cf9cafd86428e11961d91ea4 Mon Sep 17 00:00:00 2001 From: Zzyxzz Date: Sat, 18 Apr 2026 20:50:49 +0200 Subject: [PATCH 1/8] Added: AddKeyword & RemoveKeyword --- include/RE/B/BGSKeywordForm.h | 5 +++-- src/RE/B/BGSKeywordForm.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/include/RE/B/BGSKeywordForm.h b/include/RE/B/BGSKeywordForm.h index 35642933..b2313a46 100644 --- a/include/RE/B/BGSKeywordForm.h +++ b/include/RE/B/BGSKeywordForm.h @@ -23,12 +23,13 @@ namespace RE void InitializeDataComponent() override; // 02 - { return; } // add - virtual BGSKeyword* GetDefaultKeyword() const; // 0B - + virtual BGSKeyword* GetDefaultKeyword() const; // 0B + bool AddKeyword(RE::BGSKeyword* keyword); [[nodiscard]] bool ContainsKeywordString(std::string_view a_editorID); void ForEachKeyword(std::function a_callback); [[nodiscard]] std::uint32_t GetNumKeywords() const; [[nodiscard]] bool HasKeywordString(std::string_view a_editorID); + bool RemoveKeyword(RE::BGSKeyword* keyword); // members BSTArray formFolderKeywordLists; // 10 diff --git a/src/RE/B/BGSKeywordForm.cpp b/src/RE/B/BGSKeywordForm.cpp index c62ecc19..e769ef94 100644 --- a/src/RE/B/BGSKeywordForm.cpp +++ b/src/RE/B/BGSKeywordForm.cpp @@ -4,6 +4,22 @@ namespace RE { + bool RE::BGSKeywordForm::AddKeyword(RE::BGSKeyword* keyword) + { + if (!keyword) { + return false; + } + + for (const auto& existing : keywords) { + if (existing == keyword) { + return false; + } + } + + keywords.push_back(keyword); + return true; + } + bool BGSKeywordForm::ContainsKeywordString(std::string_view a_editorID) { bool result{}; @@ -50,4 +66,20 @@ namespace RE }); return result; } + + bool RE::BGSKeywordForm::RemoveKeyword(RE::BGSKeyword* keyword) + { + if (!keyword) { + return false; + } + + for (auto it = keywords.begin(); it != keywords.end(); ++it) { + if (*it == keyword) { + keywords.erase(it); + return true; + } + } + + return false; + } } From 891ef4d936cde788ba80861586f19cf5a206900a Mon Sep 17 00:00:00 2001 From: Zzyxzz Date: Sat, 18 Apr 2026 20:55:54 +0200 Subject: [PATCH 2/8] fix(BSTArray): add missing return *this in copy/move assignment operators Fixes compiler error C4716 ("must return a value") when BSTArray operator= is instantiated. --- include/RE/B/BSTArray.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/RE/B/BSTArray.h b/include/RE/B/BSTArray.h index ae7514db..b2ed6708 100644 --- a/include/RE/B/BSTArray.h +++ b/include/RE/B/BSTArray.h @@ -182,6 +182,7 @@ namespace RE for (const auto& i : a_rhs) { emplace_back(i); } + return *this; } BSTArray& operator=(BSTArray&& a_rhs) From c0bd2817ac2474c96709d81ab7de2fb346708fd9 Mon Sep 17 00:00:00 2001 From: Zzyxzz Date: Sat, 18 Apr 2026 21:04:39 +0200 Subject: [PATCH 3/8] added: HasKeyword --- include/RE/B/BGSKeywordForm.h | 1 + src/RE/B/BGSKeywordForm.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/RE/B/BGSKeywordForm.h b/include/RE/B/BGSKeywordForm.h index b2313a46..33fb4bc9 100644 --- a/include/RE/B/BGSKeywordForm.h +++ b/include/RE/B/BGSKeywordForm.h @@ -28,6 +28,7 @@ namespace RE [[nodiscard]] bool ContainsKeywordString(std::string_view a_editorID); void ForEachKeyword(std::function a_callback); [[nodiscard]] std::uint32_t GetNumKeywords() const; + [[nodiscard]] bool HasKeyword(BGSKeyword* keyword) const; [[nodiscard]] bool HasKeywordString(std::string_view a_editorID); bool RemoveKeyword(RE::BGSKeyword* keyword); diff --git a/src/RE/B/BGSKeywordForm.cpp b/src/RE/B/BGSKeywordForm.cpp index e769ef94..20eca9b6 100644 --- a/src/RE/B/BGSKeywordForm.cpp +++ b/src/RE/B/BGSKeywordForm.cpp @@ -55,6 +55,33 @@ namespace RE return keywords.size(); } + bool RE::BGSKeywordForm::HasKeyword(BGSKeyword* keyword) const + { + if (!keyword) { + return false; + } + + for (const auto& existing : keywords) { + if (existing == keyword) { + return true; + } + } + + for (const auto& formFolderKeywordList : formFolderKeywordLists) { + if (!formFolderKeywordList) { + continue; + } + + for (const auto& existing : formFolderKeywordList->keywords) { + if (existing == keyword) { + return true; + } + } + } + + return false; + } + bool BGSKeywordForm::HasKeywordString(std::string_view a_editorID) { bool result{}; From e25326ac2ec3069d734bc8ec3eb9b78ee13f8cf8 Mon Sep 17 00:00:00 2001 From: Zzyxz <33715692+Zzyxz@users.noreply.github.com> Date: Sat, 18 Apr 2026 21:12:44 +0200 Subject: [PATCH 4/8] Update src/RE/B/BGSKeywordForm.cpp Co-authored-by: qudix <17361645+qudix@users.noreply.github.com> --- src/RE/B/BGSKeywordForm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/RE/B/BGSKeywordForm.cpp b/src/RE/B/BGSKeywordForm.cpp index 20eca9b6..28a686ec 100644 --- a/src/RE/B/BGSKeywordForm.cpp +++ b/src/RE/B/BGSKeywordForm.cpp @@ -4,7 +4,7 @@ namespace RE { - bool RE::BGSKeywordForm::AddKeyword(RE::BGSKeyword* keyword) + bool BGSKeywordForm::AddKeyword(RE::BGSKeyword* keyword) { if (!keyword) { return false; From bdda682d0f1ab41e9e5ffc45c2a6a90bff274715 Mon Sep 17 00:00:00 2001 From: Zzyxz <33715692+Zzyxz@users.noreply.github.com> Date: Sat, 18 Apr 2026 21:12:51 +0200 Subject: [PATCH 5/8] Update src/RE/B/BGSKeywordForm.cpp Co-authored-by: qudix <17361645+qudix@users.noreply.github.com> --- src/RE/B/BGSKeywordForm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/RE/B/BGSKeywordForm.cpp b/src/RE/B/BGSKeywordForm.cpp index 28a686ec..02451dab 100644 --- a/src/RE/B/BGSKeywordForm.cpp +++ b/src/RE/B/BGSKeywordForm.cpp @@ -55,7 +55,7 @@ namespace RE return keywords.size(); } - bool RE::BGSKeywordForm::HasKeyword(BGSKeyword* keyword) const + bool BGSKeywordForm::HasKeyword(BGSKeyword* keyword) const { if (!keyword) { return false; From 81bd93fe4bf671324ebf129a7672e6f03b5d9ce6 Mon Sep 17 00:00:00 2001 From: Zzyxz <33715692+Zzyxz@users.noreply.github.com> Date: Sat, 18 Apr 2026 21:13:00 +0200 Subject: [PATCH 6/8] Update src/RE/B/BGSKeywordForm.cpp Co-authored-by: qudix <17361645+qudix@users.noreply.github.com> --- src/RE/B/BGSKeywordForm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/RE/B/BGSKeywordForm.cpp b/src/RE/B/BGSKeywordForm.cpp index 02451dab..c91ff28f 100644 --- a/src/RE/B/BGSKeywordForm.cpp +++ b/src/RE/B/BGSKeywordForm.cpp @@ -94,7 +94,7 @@ namespace RE return result; } - bool RE::BGSKeywordForm::RemoveKeyword(RE::BGSKeyword* keyword) + bool BGSKeywordForm::RemoveKeyword(RE::BGSKeyword* keyword) { if (!keyword) { return false; From 2669ac0f8c4bb0de35ae2115ae46b7217975e281 Mon Sep 17 00:00:00 2001 From: Zzyxz <33715692+Zzyxz@users.noreply.github.com> Date: Sat, 18 Apr 2026 21:13:08 +0200 Subject: [PATCH 7/8] Update include/RE/B/BGSKeywordForm.h Co-authored-by: qudix <17361645+qudix@users.noreply.github.com> --- include/RE/B/BGSKeywordForm.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/RE/B/BGSKeywordForm.h b/include/RE/B/BGSKeywordForm.h index 33fb4bc9..8c4c9c90 100644 --- a/include/RE/B/BGSKeywordForm.h +++ b/include/RE/B/BGSKeywordForm.h @@ -23,7 +23,8 @@ namespace RE void InitializeDataComponent() override; // 02 - { return; } // add - virtual BGSKeyword* GetDefaultKeyword() const; // 0B + virtual BGSKeyword* GetDefaultKeyword() const; // 0B + bool AddKeyword(RE::BGSKeyword* keyword); [[nodiscard]] bool ContainsKeywordString(std::string_view a_editorID); void ForEachKeyword(std::function a_callback); From 3bcc623947bcf384f77c6d92fc488f80e70b1889 Mon Sep 17 00:00:00 2001 From: Zzyxzz Date: Sat, 18 Apr 2026 21:39:07 +0200 Subject: [PATCH 8/8] Removed RE:: --- include/RE/B/BGSKeywordForm.h | 4 ++-- src/RE/B/BGSKeywordForm.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/RE/B/BGSKeywordForm.h b/include/RE/B/BGSKeywordForm.h index 33fb4bc9..66168e8e 100644 --- a/include/RE/B/BGSKeywordForm.h +++ b/include/RE/B/BGSKeywordForm.h @@ -24,13 +24,13 @@ namespace RE // add virtual BGSKeyword* GetDefaultKeyword() const; // 0B - bool AddKeyword(RE::BGSKeyword* keyword); + bool AddKeyword(BGSKeyword* keyword); [[nodiscard]] bool ContainsKeywordString(std::string_view a_editorID); void ForEachKeyword(std::function a_callback); [[nodiscard]] std::uint32_t GetNumKeywords() const; [[nodiscard]] bool HasKeyword(BGSKeyword* keyword) const; [[nodiscard]] bool HasKeywordString(std::string_view a_editorID); - bool RemoveKeyword(RE::BGSKeyword* keyword); + bool RemoveKeyword(BGSKeyword* keyword); // members BSTArray formFolderKeywordLists; // 10 diff --git a/src/RE/B/BGSKeywordForm.cpp b/src/RE/B/BGSKeywordForm.cpp index 20eca9b6..64a95eba 100644 --- a/src/RE/B/BGSKeywordForm.cpp +++ b/src/RE/B/BGSKeywordForm.cpp @@ -4,7 +4,7 @@ namespace RE { - bool RE::BGSKeywordForm::AddKeyword(RE::BGSKeyword* keyword) + bool BGSKeywordForm::AddKeyword(BGSKeyword* keyword) { if (!keyword) { return false; @@ -55,7 +55,7 @@ namespace RE return keywords.size(); } - bool RE::BGSKeywordForm::HasKeyword(BGSKeyword* keyword) const + bool BGSKeywordForm::HasKeyword(BGSKeyword* keyword) const { if (!keyword) { return false; @@ -94,7 +94,7 @@ namespace RE return result; } - bool RE::BGSKeywordForm::RemoveKeyword(RE::BGSKeyword* keyword) + bool BGSKeywordForm::RemoveKeyword(BGSKeyword* keyword) { if (!keyword) { return false;