diff --git a/SKSE/Plugins/ArtifactTrackerFunctions.dll b/SKSE/Plugins/ArtifactTrackerFunctions.dll index b2cdf1a..7f351c9 100644 Binary files a/SKSE/Plugins/ArtifactTrackerFunctions.dll and b/SKSE/Plugins/ArtifactTrackerFunctions.dll differ diff --git a/Source/ArtifactTrackerDLL/src/BookCheck.cpp b/Source/ArtifactTrackerDLL/src/BookCheck.cpp index b4e4def..5d8a598 100644 --- a/Source/ArtifactTrackerDLL/src/BookCheck.cpp +++ b/Source/ArtifactTrackerDLL/src/BookCheck.cpp @@ -3,7 +3,7 @@ // Mostly borrowed from Fix Note icon for SkyUI by 0xC0000005 namespace BookCheck { - std::vector validBooks; + std::unordered_map validBooks; void PreloadBookList() { @@ -20,12 +20,12 @@ namespace BookCheck continue; } if (form->HasKeyword(recipeKeyword) || IsBook(form)) { - validBooks.push_back(form); + validBooks[form->formID] = form; } } } - std::vector GetBookList() + std::unordered_map GetBookList() { return validBooks; } diff --git a/Source/ArtifactTrackerDLL/src/BookCheck.h b/Source/ArtifactTrackerDLL/src/BookCheck.h index 00d355d..475df3c 100644 --- a/Source/ArtifactTrackerDLL/src/BookCheck.h +++ b/Source/ArtifactTrackerDLL/src/BookCheck.h @@ -5,7 +5,7 @@ namespace BookCheck { void PreloadBookList(); - std::vector GetBookList(); + std::unordered_map GetBookList(); const char* ExtractFileName(const char* const path, size_t& fileNameLength); diff --git a/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h b/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h index 151c396..287d7f4 100644 --- a/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h +++ b/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h @@ -132,7 +132,7 @@ namespace Papyrus::ArtifactTracker a_exform.formType == RE::FormType::Armor || (a_exform.formType == RE::FormType::Weapon && a_exform.formID != 0x000001F4) || a_exform.formType == RE::FormType::Misc - || (a_exform.formType == RE::FormType::Book && !a_exform.As()->TeachesSpell() && (a_exform.As()->HasKeyword(recipeKeyword) || BookCheck::IsBook(a_exform.As()))) + || (a_exform.formType == RE::FormType::Book && BookCheck::GetBookList().contains(a_exform.formID)) ) && (excludeOnlyMisc ? (a_exform.formType != RE::FormType::Misc || !is_excluded(&a_exform, a_excludeForm)) : !is_excluded(&a_exform, a_excludeForm)); }); @@ -307,14 +307,14 @@ namespace Papyrus::ArtifactTracker } if (a_excludeForm) { - for (const auto& book : BookCheck::GetBookList()) { - if (!is_excluded(book, a_excludeForm)) { - a_targetList->AddForm(book); + for (auto const& item : BookCheck::GetBookList()) { + if (!is_excluded(item.second, a_excludeForm)) { + a_targetList->AddForm(item.second); } } } else { - for (const auto& book : BookCheck::GetBookList()) { - a_targetList->AddForm(book); + for (const auto& item : BookCheck::GetBookList()) { + a_targetList->AddForm(item.second); } } diff --git a/Source/ArtifactTrackerDLL/src/Main.cpp b/Source/ArtifactTrackerDLL/src/Main.cpp index 48ed215..11eb148 100644 --- a/Source/ArtifactTrackerDLL/src/Main.cpp +++ b/Source/ArtifactTrackerDLL/src/Main.cpp @@ -27,15 +27,11 @@ namespace { } void InitializeMessaging() { - if (!GetMessagingInterface()->RegisterListener([](MessagingInterface::Message* message) { - - if (message->type == MessagingInterface::kDataLoaded) { + GetMessagingInterface()->RegisterListener([](MessagingInterface::Message* message) { + if (message->type == MessagingInterface::kDataLoaded) { BookCheck::PreloadBookList(); - } - - })) { - stl::report_and_fail("Unable to register message listener."); - } + } + }); } }