From 14ea69a35454dfa9000774bd807e0f5ab6c0287a Mon Sep 17 00:00:00 2001 From: Eddoursul Date: Sat, 6 Jul 2024 04:03:01 +0200 Subject: [PATCH] Use different shaders for spell and skill tomes --- src/EventListener.cpp | 17 +++++++++++++---- src/Util.h | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/EventListener.cpp b/src/EventListener.cpp index 9999772..234644f 100644 --- a/src/EventListener.cpp +++ b/src/EventListener.cpp @@ -21,9 +21,9 @@ void EventListener::Install() RE::UI::GetSingleton()->AddEventSink(EventListener::GetSingleton()); std::map settings{ - { "sRegularBookShader", "Skyrim.esm@C5EF7" }, + { "sRegularBookShader", "Skyrim.esm@D2057" }, { "sSpellBookShader", "Skyrim.esm@C5EF7" }, - { "sSkillBookShader", "Skyrim.esm@C5EF7" }, + { "sSkillBookShader", "Skyrim.esm@C34B1" }, }; LoadINI(&settings, std::format("Data/SKSE/Plugins/{}.ini", SKSE::PluginDeclaration::GetSingleton()->GetName()).c_str()); @@ -56,9 +56,18 @@ auto EventListener::ProcessEvent( if (const auto bookObj = baseObj->As()) { if (!bookObj->IsRead()) { RE::TESObjectREFR* ref = a_event->reference.get(); - SKSE::GetTaskInterface()->AddTask([ref]() { + + auto shader = EventListener::regularBookShader; + + if (bookObj->TeachesSpell()) { + shader = EventListener::spellBookShader; + } else if (bookObj->TeachesSkill()) { + shader = EventListener::skillBookShader; + } + + SKSE::GetTaskInterface()->AddTask([ref, shader]() { if (ref) { - ref->ApplyEffectShader(EventListener::regularBookShader); + ref->ApplyEffectShader(shader); } }); } diff --git a/src/Util.h b/src/Util.h index 2523d3d..b0e765c 100644 --- a/src/Util.h +++ b/src/Util.h @@ -6,7 +6,7 @@ inline void ClearOldShaders() { if (const auto processLists = RE::ProcessLists::GetSingleton()) { processLists->ForEachShaderEffect([&](RE::ShaderReferenceEffect* a_shaderEffect) -> RE::BSContainer::ForEachResult { - if (a_shaderEffect && a_shaderEffect->effectData == EventListener::regularBookShader && a_shaderEffect->target) { + if (a_shaderEffect && (a_shaderEffect->effectData == EventListener::regularBookShader || a_shaderEffect->effectData == EventListener::spellBookShader || a_shaderEffect->effectData == EventListener::skillBookShader) && a_shaderEffect->target) { if (const auto targetRef = a_shaderEffect->target.get()) { if (const auto baseObj = targetRef->GetBaseObject(); baseObj->IsBook()) { if (baseObj->As()->IsRead()) {