diff --git a/Artifact Tracker.esp b/Artifact Tracker.esp index 9ac690e..8fbe08c 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 310e2c6..02f026b 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 1157206..99cf804 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 62ec248..185b203 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 9e83b59..16f38d8 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 670550f..993939b 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 856c028..9cd09ac 100644 --- a/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h +++ b/Source/ArtifactTrackerDLL/src/Functions/ArtifactTracker.h @@ -2,54 +2,6 @@ namespace Papyrus::ArtifactTracker { - inline bool is_excluded(RE::TESForm* a_form, RE::TESForm* a_excludeForm = NULL, bool nested = true) - { - if (!a_excludeForm) { - return false; - } - - const RE::BGSListForm* list = a_excludeForm->As(); - - if (list) { - if (list->HasForm(a_form)) { - return true; - } else if (nested) { - bool isExcluded = false; - - list->ForEachForm([&](RE::TESForm& a_exform) { - const auto exlist = a_exform.As(); - if (exlist) { - if (exlist->forms.size() > 0) { - if (exlist->forms[0]->Is(RE::FormType::Keyword) ? a_form->HasKeywordInList(exlist, false) : exlist->HasForm(a_form)) { - isExcluded = true; - return false; - } - } - } else { - const auto exkeyword = a_exform.As(); - if (exkeyword && a_form->As()->HasKeyword(exkeyword)) { - isExcluded = true; - return false; - } - } - return true; - }); - - return isExcluded; - } - } - - const RE::BGSKeyword* keyword = a_excludeForm->As(); - - if (keyword) { - if (a_form->As()->HasKeyword(keyword)) { - return true; - } - } - - return false; - } - inline bool is_artifact(RE::TESForm* a_form) { switch (a_form->GetFormType()) { @@ -69,8 +21,8 @@ namespace Papyrus::ArtifactTracker inline std::int32_t AddAllFormsToList(RE::StaticFunctionTag*, RE::BGSListForm* a_targetList, short a_formType, - RE::TESForm* a_excludeForm = NULL, - bool excludeNested = true) + RE::BGSListForm* a_storedList, + RE::BGSListForm* a_foundList) { const auto formType = static_cast(a_formType); @@ -78,7 +30,7 @@ namespace Papyrus::ArtifactTracker case RE::FormType::Book: for (auto const& item : BookCheck::GetBookList()) { - if (!a_excludeForm || !is_excluded(item.second, a_excludeForm, excludeNested)) { + if (!a_storedList->HasForm(item.second) && !a_foundList->HasForm(item.second)) { a_targetList->AddForm(item.second); } } @@ -86,7 +38,7 @@ namespace Papyrus::ArtifactTracker case RE::FormType::Misc: for (auto const& item : MiscCheck::GetMiscList()) { - if (!a_excludeForm || !is_excluded(item.second, a_excludeForm, excludeNested)) { + if (!a_storedList->HasForm(item.second) && !a_foundList->HasForm(item.second)) { a_targetList->AddForm(item.second); } } @@ -106,7 +58,7 @@ namespace Papyrus::ArtifactTracker if (!form || !form->GetPlayable()) { continue; } - if (a_excludeForm && is_excluded(form, a_excludeForm, excludeNested)) { + if (a_storedList->HasForm(form) || a_foundList->HasForm(form)) { continue; } a_targetList->AddForm(form); @@ -119,8 +71,7 @@ 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, - bool excludeNested = false) + RE::BGSListForm* a_excludeList = NULL) { if (!a_refOrList) { a_vm->TraceStack("a_refOrList in AddArtifactsToList is None", a_stackID); @@ -135,7 +86,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, nullptr, refrItem, a_targetList, a_excludeForm); + AddArtifactsToList(a_vm, a_stackID, nullptr, refrItem, a_targetList, a_excludeList); } return true; }); @@ -149,8 +100,8 @@ namespace Papyrus::ArtifactTracker return 0; } - auto inv = containerRef->GetInventory([&](RE::TESBoundObject& a_exform) { - return is_artifact(&a_exform) && !is_excluded(&a_exform, a_excludeForm, excludeNested); + const auto inv = containerRef->GetInventory([&](RE::TESBoundObject& a_exform) { + return is_artifact(&a_exform) && (!a_excludeList || !a_excludeList->HasForm(&a_exform)); }); for (const auto& item : inv) { @@ -198,8 +149,7 @@ namespace Papyrus::ArtifactTracker inline void SyncCellStorage(VM* a_vm, StackID a_stackID, RE::StaticFunctionTag*, RE::TESObjectREFR* a_cellStorage, - RE::BGSListForm* a_excludeContainers, - RE::TESForm* a_excludeForm = NULL) + RE::BGSListForm* a_excludeContainers) { if (!a_cellStorage) { return; @@ -226,7 +176,7 @@ namespace Papyrus::ArtifactTracker if (data.first > 0) { cellItems[item->formID] = true; if (inv.find(item) == inv.end()) { - if (is_artifact(item) && !is_excluded(item, a_excludeForm)) { + if (is_artifact(item)) { a_cellStorage->AddObjectToContainer(item, nullptr, 1, nullptr); } } @@ -251,9 +201,7 @@ namespace Papyrus::ArtifactTracker } if (inv.find(baseObj) == inv.end()) { - if (!a_excludeForm || !is_excluded(baseObj, a_excludeForm)) { - a_cellStorage->AddObjectToContainer(baseObj, nullptr, 1, nullptr); - } + a_cellStorage->AddObjectToContainer(baseObj, nullptr, 1, nullptr); } } @@ -285,12 +233,11 @@ namespace Papyrus::ArtifactTracker inline std::int32_t AddArtifactsFromFollowersToList(RE::StaticFunctionTag*, RE::BGSListForm* a_targetList, - RE::TESForm* a_excludeForm = NULL, - bool excludeNested = false) + RE::BGSListForm* a_excludeList = NULL) { 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, excludeNested); + const auto inv = actor->GetInventory([&](RE::TESBoundObject& a_exform) { + return is_artifact(&a_exform) && (!a_excludeList || !a_excludeList->HasForm(&a_exform)); }); for (const auto& item : inv) { diff --git a/Source/Scripts/ETR_Functions.psc b/Source/Scripts/ETR_Functions.psc index e97e9df..895589e 100644 --- a/Source/Scripts/ETR_Functions.psc +++ b/Source/Scripts/ETR_Functions.psc @@ -1,17 +1,17 @@ Scriptname ETR_Functions Hidden -int function AddAllFormsToList(FormList targetList, int formType, Form excludeForm = None, bool excludeNested = true) native global +int function AddAllFormsToList(FormList targetList, int formType, FormList storedList, FormList foundList) native global -int function AddArtifactsToList(Form refOrList, FormList targetList, Form excludeForm = None, bool excludeNested = false) native global +int function AddArtifactsToList(Form refOrList, FormList targetList, FormList excludeList = None) native global int function GetItemCountInList(FormList refList, Form baseForm) native global ObjectReference function GetCellStorage(ObjectReference ref, FormList refList, Form refToCreate, bool autoCreate = true) native global -function SyncCellStorage(ObjectReference cellStorage, FormList excludeContainers, Form excludeForm = None) native global +function SyncCellStorage(ObjectReference cellStorage, FormList excludeContainers) native global Actor[] function GetPlayerFollowers() native global bool function FollowersHaveItem(Form baseForm) native global -int function AddArtifactsFromFollowersToList(FormList targetList, Form excludeForm = None, bool excludeNested = false) native global +int function AddArtifactsFromFollowersToList(FormList targetList, FormList excludeList = None) native global diff --git a/Source/Scripts/ETR_TrackNewItems.psc b/Source/Scripts/ETR_TrackNewItems.psc index d99f7c6..e08e6f1 100644 --- a/Source/Scripts/ETR_TrackNewItems.psc +++ b/Source/Scripts/ETR_TrackNewItems.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_FoundAndStored Auto GlobalVariable Property ETR_NotifyNewArtifact Auto @@ -48,10 +47,10 @@ event OnPlayerLoadGame() ETR_Functions.AddArtifactsFromFollowersToList(ETR_ItemsFound, ETR_ItemsStored) ETR_ItemsNew.Revert() - 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) + ETR_Functions.AddAllFormsToList(ETR_ItemsNew, 41, ETR_ItemsStored, ETR_ItemsFound) + ETR_Functions.AddAllFormsToList(ETR_ItemsNew, 32, ETR_ItemsStored, ETR_ItemsFound) + ETR_Functions.AddAllFormsToList(ETR_ItemsNew, 27, ETR_ItemsStored, ETR_ItemsFound) + ETR_Functions.AddAllFormsToList(ETR_ItemsNew, 26, ETR_ItemsStored, ETR_ItemsFound) endevent