From bb459ce135502ef262fe72db280b5343a167f79c Mon Sep 17 00:00:00 2001 From: Eddoursul Date: Thu, 4 Jul 2024 17:21:42 +0200 Subject: [PATCH] Added soul gems support --- src/EventListener.cpp | 25 +++++++++++++++---------- src/EventListener.h | 1 + 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/EventListener.cpp b/src/EventListener.cpp index 9c1184d..9dca5f5 100644 --- a/src/EventListener.cpp +++ b/src/EventListener.cpp @@ -14,6 +14,7 @@ inline std::map g_settings{ { "bPickupArrows", true }, { "bPickupFlora", true }, { "bPickupIngredients", true }, + { "bPickupSoulGems", true }, }; auto EventListener::GetSingleton() -> EventListener* @@ -45,30 +46,29 @@ auto EventListener::ProcessEvent( return RE::BSEventNotifyControl::kContinue; } - const auto itemType = baseObj->GetFormType(); - - if (!IsValidType(itemType)) { + if (!IsValidType(baseObj->GetFormType())) { return RE::BSEventNotifyControl::kContinue; } RE::TESBoundObject* produceItem = nullptr; bool bIsCoinPouch = IsCoinPouch(baseObj); - bool bIsGold = std::any_cast(g_settings["bPickupGold"]) && (bIsCoinPouch || baseObj->IsGold()); - bool bIsLockpick = std::any_cast(g_settings["bPickupLockpicks"]) && baseObj->IsLockpick(); + bool bIsGold = (bIsCoinPouch || baseObj->IsGold()) && std::any_cast(g_settings["bPickupGold"]); + bool bIsLockpick = baseObj->IsLockpick() && std::any_cast(g_settings["bPickupLockpicks"]); + bool bIsSoulGem = baseObj->IsSoulGem() && std::any_cast(g_settings["bPickupSoulGems"]); RE::BGSKeywordForm* keywordForm = (baseObj->Is(RE::FormType::Misc) && std::any_cast(g_settings["bPickupMaterials"])) ? baseObj->As() : nullptr; bool bIsGem = keywordForm && keywordForm->HasKeyword(keywordGem); bool bIsHide = keywordForm && keywordForm->HasKeyword(keywordHide); bool bIsIngot = keywordForm && keywordForm->HasKeyword(keywordIngot); - bool bIsAmmo = std::any_cast(g_settings["bPickupArrows"]) && (baseObj->IsAmmo() || baseObj->Is(RE::FormType::Projectile)) && baseObj->GetPlayable(); + bool bIsAmmo = (baseObj->IsAmmo() || baseObj->Is(RE::FormType::Projectile)) && baseObj->GetPlayable() && std::any_cast(g_settings["bPickupArrows"]); - bool bIsFlora = std::any_cast(g_settings["bPickupFlora"]) && !bIsCoinPouch && baseObj->Is(RE::FormType::Flora) && (produceItem = baseObj->As()->produceItem); - bool bIsTree = std::any_cast(g_settings["bPickupFlora"]) && baseObj->Is(RE::FormType::Tree) && (produceItem = baseObj->As()->produceItem); - bool bIsIngredient = std::any_cast(g_settings["bPickupIngredients"]) && baseObj->Is(RE::FormType::Ingredient); + bool bIsFlora = !bIsCoinPouch && baseObj->Is(RE::FormType::Flora) && std::any_cast(g_settings["bPickupFlora"]) && (produceItem = baseObj->As()->produceItem); + bool bIsTree = baseObj->Is(RE::FormType::Tree) && std::any_cast(g_settings["bPickupFlora"]) && (produceItem = baseObj->As()->produceItem); + bool bIsIngredient = baseObj->Is(RE::FormType::Ingredient) && std::any_cast(g_settings["bPickupIngredients"]); - if (!bIsGold && !bIsLockpick && !bIsGem && !bIsHide && !bIsIngot && !bIsAmmo && !bIsFlora && !bIsTree && !bIsIngredient) { + if (!bIsGold && !bIsLockpick && !bIsSoulGem && !bIsGem && !bIsHide && !bIsIngot && !bIsAmmo && !bIsFlora && !bIsTree && !bIsIngredient) { return RE::BSEventNotifyControl::kContinue; } @@ -109,6 +109,11 @@ auto EventListener::ProcessEvent( bAdd = true; } + } else if (bIsSoulGem) { + if (a_refBase->IsSoulGem()) { + bAdd = true; + } + } else if (bIsAmmo) { if ((a_refBase->IsAmmo() || a_refBase->Is(RE::FormType::Projectile)) && a_refBase->GetPlayable()) { bAdd = true; diff --git a/src/EventListener.h b/src/EventListener.h index b5d1a2a..ffdab5a 100644 --- a/src/EventListener.h +++ b/src/EventListener.h @@ -27,6 +27,7 @@ public: RE::FormType::Tree, RE::FormType::Ammo, RE::FormType::Ingredient, + RE::FormType::SoulGem, RE::FormType::Projectile, };