diff --git a/Artifact Tracker.esp b/Artifact Tracker.esp index ad77c02..7c6c843 100644 Binary files a/Artifact Tracker.esp and b/Artifact Tracker.esp differ diff --git a/SKSE/Plugins/ArtifactTrackerFunctions.dll b/SKSE/Plugins/ArtifactTrackerFunctions.dll index 0c96306..a9681ab 100644 Binary files a/SKSE/Plugins/ArtifactTrackerFunctions.dll and b/SKSE/Plugins/ArtifactTrackerFunctions.dll differ diff --git a/Scripts/ETR_Functions.pex b/Scripts/ETR_Functions.pex index d9138a3..114a6a7 100644 Binary files a/Scripts/ETR_Functions.pex and b/Scripts/ETR_Functions.pex differ diff --git a/Scripts/ETR_TrackFoundItems.pex b/Scripts/ETR_TrackFoundItems.pex index 3434ca1..2e9d5a1 100644 Binary files a/Scripts/ETR_TrackFoundItems.pex and b/Scripts/ETR_TrackFoundItems.pex differ diff --git a/Scripts/ETR_TrackNewItems.pex b/Scripts/ETR_TrackNewItems.pex index 6335202..70f7841 100644 Binary files a/Scripts/ETR_TrackNewItems.pex and b/Scripts/ETR_TrackNewItems.pex differ diff --git a/Scripts/ETR_TrackStoredItems.pex b/Scripts/ETR_TrackStoredItems.pex index 8d737cb..4ef2ffc 100644 Binary files a/Scripts/ETR_TrackStoredItems.pex and b/Scripts/ETR_TrackStoredItems.pex differ diff --git a/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h b/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h index 317e91a..4ad0a59 100644 --- a/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h +++ b/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h @@ -2,7 +2,7 @@ namespace Papyrus::ArtifactTracker { - inline bool is_excluded(RE::TESForm* a_form, RE::TESForm* a_excludeForm = NULL) + inline bool is_excluded(RE::TESForm* a_form, RE::TESForm* a_excludeForm = NULL, bool nested = true) { if (!a_excludeForm) { return false; @@ -13,7 +13,7 @@ namespace Papyrus::ArtifactTracker if (list) { if (list->HasForm(a_form)) { return true; - } else { + } else if (nested) { bool isExcluded = false; list->ForEachForm([&](RE::TESForm& a_exform) { @@ -69,7 +69,8 @@ namespace Papyrus::ArtifactTracker inline std::int32_t AddAllFormsToList(RE::StaticFunctionTag*, RE::BGSListForm* a_targetList, short a_formType, - RE::TESForm* a_excludeForm = NULL) + RE::TESForm* a_excludeForm = NULL, + bool excludeNested = true) { const auto formType = static_cast(a_formType); @@ -77,7 +78,7 @@ namespace Papyrus::ArtifactTracker case RE::FormType::Book: for (auto const& item : BookCheck::GetBookList()) { - if (!a_excludeForm || !is_excluded(item.second, a_excludeForm)) { + if (!a_excludeForm || !is_excluded(item.second, a_excludeForm, excludeNested)) { a_targetList->AddForm(item.second); } } @@ -85,7 +86,7 @@ namespace Papyrus::ArtifactTracker case RE::FormType::Misc: for (auto const& item : MiscCheck::GetMiscList()) { - if (!a_excludeForm || !is_excluded(item.second, a_excludeForm)) { + if (!a_excludeForm || !is_excluded(item.second, a_excludeForm, excludeNested)) { a_targetList->AddForm(item.second); } } @@ -105,7 +106,7 @@ namespace Papyrus::ArtifactTracker if (!form || !form->GetPlayable()) { continue; } - if (a_excludeForm && is_excluded(form, a_excludeForm)) { + if (a_excludeForm && is_excluded(form, a_excludeForm, excludeNested)) { continue; } a_targetList->AddForm(form); @@ -118,7 +119,8 @@ namespace Papyrus::ArtifactTracker inline std::int32_t AddArtifactsToList(VM* a_vm, StackID a_stackID, RE::StaticFunctionTag*, RE::TESForm* a_refOrList, RE::BGSListForm* a_targetList, - RE::TESForm* a_excludeForm = NULL) + RE::TESForm* a_excludeForm = NULL, + bool excludeNested = false) { if (!a_refOrList) { a_vm->TraceStack("a_refOrList in AddArtifactsToList is None", a_stackID); @@ -133,7 +135,7 @@ namespace Papyrus::ArtifactTracker a_refOrList->As()->ForEachForm([&](RE::TESForm& a_exform) { const auto refrItem = a_exform.As(); if (refrItem) { - AddArtifactsToList(a_vm, a_stackID, {}, refrItem, a_targetList, a_excludeForm); + AddArtifactsToList(a_vm, a_stackID, nullptr, refrItem, a_targetList, a_excludeForm); } return true; }); @@ -148,7 +150,7 @@ namespace Papyrus::ArtifactTracker } auto inv = containerRef->GetInventory([&](RE::TESBoundObject& a_exform) { - return is_artifact(&a_exform) && !is_excluded(&a_exform, a_excludeForm); + return is_artifact(&a_exform) && !is_excluded(&a_exform, a_excludeForm, excludeNested); }); for (const auto& item : inv) { @@ -283,11 +285,12 @@ namespace Papyrus::ArtifactTracker inline std::int32_t AddArtifactsFromFollowersToList(RE::StaticFunctionTag*, RE::BGSListForm* a_targetList, - RE::TESForm* a_excludeForm = NULL) + RE::TESForm* a_excludeForm = NULL, + bool excludeNested = false) { for (const auto& actor : GetPlayerFollowers(nullptr)) { auto inv = actor->GetInventory([&](RE::TESBoundObject& a_exform) { - return is_artifact(&a_exform) && !is_excluded(&a_exform, a_excludeForm); + return is_artifact(&a_exform) && !is_excluded(&a_exform, a_excludeForm, excludeNested); }); for (const auto& item : inv) { diff --git a/Source/Scripts/ETR_Functions.psc b/Source/Scripts/ETR_Functions.psc index fd237fc..8d86a91 100644 --- a/Source/Scripts/ETR_Functions.psc +++ b/Source/Scripts/ETR_Functions.psc @@ -1,8 +1,8 @@ Scriptname ETR_Functions Hidden -int function AddAllFormsToList(FormList targetList, int formType, Form excludeForm = None) native global +int function AddAllFormsToList(FormList targetList, int formType, Form excludeForm = None, bool excludeNested = true) native global -int function AddArtifactsToList(Form refOrList, FormList targetList, Form excludeForm = None) native global +int function AddArtifactsToList(Form refOrList, FormList targetList, Form excludeForm = None, bool excludeNested = false) native global int function GetItemCountInList(FormList refList, Form baseForm) native global @@ -14,4 +14,4 @@ Actor[] function GetPlayerFollowers() native global bool function FollowersHaveItem(Form baseForm) native global -int function AddArtifactsFromFollowersToList(FormList targetList, Form excludeForm = None) native global +int function AddArtifactsFromFollowersToList(FormList targetList, Form excludeForm = None, bool excludeNested = false) native global diff --git a/Source/Scripts/ETR_TrackFoundItems.psc b/Source/Scripts/ETR_TrackFoundItems.psc index 35e7197..9350538 100644 --- a/Source/Scripts/ETR_TrackFoundItems.psc +++ b/Source/Scripts/ETR_TrackFoundItems.psc @@ -6,7 +6,6 @@ FormList Property ETR_ItemsNew Auto FormList Property ETR_ItemsFound Auto FormList Property ETR_ItemsStored Auto FormList Property ETR_PersistentStorageList Auto -FormList Property ETR_ExcludeMisc Auto Container Property ETR_CellStorageContainer Auto @@ -52,7 +51,7 @@ Event OnLocationChange(Location akOldLoc, Location akNewLoc) iFollowerIndex = iCurrentFollowers bRescanHome = false bRescanPersistent = false - RegisterForSingleUpdate(3.0) ; wait until followers load into the location + RegisterForSingleUpdate(5.0) ; wait until followers load into the location endif endEvent @@ -133,10 +132,12 @@ event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemRefe ETR_ItemsFound.RemoveAddedForm(akBaseItem) ETR_ItemsNew.AddForm(akBaseItem) endif + elseif bAtHome && akItemReference ETR_ItemsFound.RemoveAddedForm(akBaseItem) ETR_ItemsStored.AddForm(akBaseItem) ETR_Functions.GetCellStorage(PlayerRef, ETR_PersistentStorageList, ETR_CellStorageContainer).AddItem(akBaseItem, 1, true) + elseif PlayerRef.GetItemCount(akBaseItem) == 0 && ! ETR_Functions.FollowersHaveItem(akBaseItem) ETR_ItemsFound.RemoveAddedForm(akBaseItem) ETR_ItemsNew.AddForm(akBaseItem) diff --git a/Source/Scripts/ETR_TrackNewItems.psc b/Source/Scripts/ETR_TrackNewItems.psc index 2db7ace..3ab3ab1 100644 --- a/Source/Scripts/ETR_TrackNewItems.psc +++ b/Source/Scripts/ETR_TrackNewItems.psc @@ -5,9 +5,7 @@ Actor Property PlayerRef Auto FormList Property ETR_ItemsNew Auto FormList Property ETR_ItemsFound Auto FormList Property ETR_ItemsStored Auto -FormList Property ETR_ExcludeFromNew Auto FormList Property ETR_PersistentStorageList Auto -FormList Property ETR_ExcludeMisc Auto FormList Property ETR_FoundAndStored Auto @@ -48,10 +46,10 @@ event OnPlayerLoadGame() ETR_Functions.AddArtifactsFromFollowersToList(ETR_ItemsFound, ETR_ItemsStored) ETR_ItemsNew.Revert() - ETR_Functions.AddAllFormsToList(ETR_ItemsNew, 26, ETR_FoundAndStored) ETR_Functions.AddAllFormsToList(ETR_ItemsNew, 41, ETR_FoundAndStored) ETR_Functions.AddAllFormsToList(ETR_ItemsNew, 32, ETR_FoundAndStored) ETR_Functions.AddAllFormsToList(ETR_ItemsNew, 27, ETR_FoundAndStored) + ETR_Functions.AddAllFormsToList(ETR_ItemsNew, 26, ETR_FoundAndStored) endevent diff --git a/Source/Scripts/ETR_TrackStoredItems.psc b/Source/Scripts/ETR_TrackStoredItems.psc index 61f7b11..9281ce2 100644 --- a/Source/Scripts/ETR_TrackStoredItems.psc +++ b/Source/Scripts/ETR_TrackStoredItems.psc @@ -6,8 +6,6 @@ FormList Property ETR_ItemsNew Auto FormList Property ETR_ItemsFound Auto FormList Property ETR_ItemsStored Auto FormList Property ETR_PersistentStorageList Auto -FormList Property ETR_ExcludeFromNew Auto -FormList Property ETR_ExcludeMisc Auto Container Property ETR_CellStorageContainer Auto