diff --git a/src/EventListener.cpp b/src/EventListener.cpp index 9d0cbef..b27d063 100644 --- a/src/EventListener.cpp +++ b/src/EventListener.cpp @@ -7,6 +7,8 @@ RE::TESEffectShader* EventListener::regularBookShader; RE::TESEffectShader* EventListener::spellBookShader; RE::TESEffectShader* EventListener::skillBookShader; +bool EventListener::bEnderalMode = false; + auto EventListener::GetSingleton() -> EventListener* { static EventListener singleton{}; @@ -24,8 +26,8 @@ void EventListener::Install() std::map settings{ { "sRegularBookShader", "Skyrim.esm@C723A" }, - { "sSpellBookShader", "Skyrim.esm@B6BF9" }, - { "sSkillBookShader", "Skyrim.esm@B6BFA" }, + { "sSpellBookShader", "Skyrim.esm@B6BFA" }, + { "sSkillBookShader", "Skyrim.esm@B6BF9" }, }; LoadINI(&settings, std::format("Data/SKSE/Plugins/{}.ini", SKSE::PluginDeclaration::GetSingleton()->GetName()).c_str()); @@ -35,6 +37,10 @@ void EventListener::Install() EventListener::regularBookShader = retrieveFormByString(std::any_cast(settings["sRegularBookShader"]), defaultShader)->As(); EventListener::spellBookShader = retrieveFormByString(std::any_cast(settings["sSpellBookShader"]), defaultShader)->As(); EventListener::skillBookShader = retrieveFormByString(std::any_cast(settings["sSkillBookShader"]), defaultShader)->As(); + + if (EventListener::bEnderalMode = RE::TESDataHandler::GetSingleton()->GetModIndex("Enderal - Forgotten Stories.esm") != std::nullopt) { + logger::info("Detected Enderal SE, learning books will be highlighted as well"); + } } auto EventListener::ProcessEvent( diff --git a/src/EventListener.h b/src/EventListener.h index 58298bc..04dc137 100644 --- a/src/EventListener.h +++ b/src/EventListener.h @@ -24,6 +24,8 @@ public: RE::BSTEventSource* a_eventSource) -> RE::BSEventNotifyControl override; + static bool bEnderalMode; + static RE::TESEffectShader* regularBookShader; static RE::TESEffectShader* skillBookShader; static RE::TESEffectShader* spellBookShader; diff --git a/src/Util.h b/src/Util.h index 0c55974..b98aa6d 100644 --- a/src/Util.h +++ b/src/Util.h @@ -8,22 +8,34 @@ inline void TryAddBookRefShader(RE::TESObjectREFR* a_ref) return; } - if (const auto baseObj = a_ref->GetBaseObject(); baseObj->IsBook()) { - if (const auto bookObj = baseObj->As()) { - if (!bookObj->IsRead()) { - auto shader = EventListener::regularBookShader; + if (const auto baseObj = a_ref->GetBaseObject()) { + if (baseObj->IsBook()) { + if (const auto bookObj = baseObj->As()) { + if (!bookObj->IsRead()) { + auto shader = EventListener::regularBookShader; - if (bookObj->TeachesSpell()) { - shader = EventListener::spellBookShader; - } else if (bookObj->TeachesSkill()) { - shader = EventListener::skillBookShader; - } - - SKSE::GetTaskInterface()->AddTask([a_ref, shader]() { - if (a_ref) { - a_ref->ApplyEffectShader(shader); + if (bookObj->TeachesSpell()) { + shader = EventListener::spellBookShader; + } else if (bookObj->TeachesSkill()) { + shader = EventListener::skillBookShader; } - }); + + SKSE::GetTaskInterface()->AddTask([a_ref, shader]() { + if (a_ref) { + a_ref->ApplyEffectShader(shader); + } + }); + } + } + } else if (EventListener::bEnderalMode && baseObj->Is(RE::FormType::AlchemyItem)) { + if (const auto alchObj = baseObj->As()) { + if (alchObj->data.consumptionSound && alchObj->data.consumptionSound->formID == 0x7ea3a) { + SKSE::GetTaskInterface()->AddTask([a_ref]() { + if (a_ref) { + a_ref->ApplyEffectShader(EventListener::skillBookShader); + } + }); + } } } }