diff --git a/SKSE/Plugins/ArtifactTracker.dll b/SKSE/Plugins/ArtifactTracker.dll index 09492a9..30e53a8 100644 Binary files a/SKSE/Plugins/ArtifactTracker.dll and b/SKSE/Plugins/ArtifactTracker.dll differ diff --git a/Scripts/ArtifactTrackerPlayer.pex b/Scripts/ArtifactTrackerPlayer.pex index 87eb9b8..c7e1911 100644 Binary files a/Scripts/ArtifactTrackerPlayer.pex and b/Scripts/ArtifactTrackerPlayer.pex differ diff --git a/Source/ArtifactTrackerDLL/src/ArtifactTracker.cpp b/Source/ArtifactTrackerDLL/src/ArtifactTracker.cpp index 9edb7a1..2a53ec0 100644 --- a/Source/ArtifactTrackerDLL/src/ArtifactTracker.cpp +++ b/Source/ArtifactTrackerDLL/src/ArtifactTracker.cpp @@ -467,7 +467,7 @@ namespace ArtifactTracker } // NB: During OnContainerChanged, InventoryChanges do not have the current change included yet - if ((GetItemCount(RE::PlayerCharacter::GetSingleton(), form->formID) - a_event->itemCount <= 0) && !FollowersHaveItem(form)) { + if ((GetItemCount(RE::PlayerCharacter::GetSingleton(), form) - a_event->itemCount <= 0) && !FollowersHaveItem(form)) { ListRemoveItem(g_listFound, form); ListRemoveItem(g_listNew, form); g_listNew->AddForm(form); @@ -506,7 +506,7 @@ namespace ArtifactTracker } // NB: During OnContainerChanged, InventoryChanges do not have the current change included yet - } else if (g_listFound->HasForm(form) && (GetItemCount(RE::PlayerCharacter::GetSingleton(), form->formID) - a_event->itemCount <= 0) && !FollowersHaveItem(form)) { + } else if (g_listFound->HasForm(form) && (GetItemCount(RE::PlayerCharacter::GetSingleton(), form) - a_event->itemCount <= 0) && !FollowersHaveItem(form)) { ListRemoveItem(g_listFound, form); g_listNew->AddForm(form); } diff --git a/Source/ArtifactTrackerDLL/src/PapyrusFunctions.h b/Source/ArtifactTrackerDLL/src/PapyrusFunctions.h index 4ddfc66..6df33f5 100644 --- a/Source/ArtifactTrackerDLL/src/PapyrusFunctions.h +++ b/Source/ArtifactTrackerDLL/src/PapyrusFunctions.h @@ -20,6 +20,11 @@ namespace Papyrus::PapyrusFunctions ArtifactTracker::SyncCellStorage(); } + inline std::uint32_t GetArtifactCount(RE::StaticFunctionTag*) + { + return (ArtifactTracker::g_artifactMap).size(); + } + // From po3's Papyrus Extender inline std::vector GetPlayerFollowers(RE::StaticFunctionTag*) { @@ -72,6 +77,8 @@ namespace Papyrus::PapyrusFunctions { BIND(IsLoaded); logger::info("Registered IsLoaded"sv); + BIND(GetArtifactCount); + logger::info("Registered GetArtifactCount"sv); BIND(RescanStoredArtifacts); logger::info("Registered RescanStoredArtifacts"sv); BIND(RescanFoundArtifacts); diff --git a/Source/Scripts/ArtifactTrackerPlayer.psc b/Source/Scripts/ArtifactTrackerPlayer.psc index 2a30faf..99e3595 100644 --- a/Source/Scripts/ArtifactTrackerPlayer.psc +++ b/Source/Scripts/ArtifactTrackerPlayer.psc @@ -9,8 +9,9 @@ Keyword Property LocTypePlayerHouse Auto Perk Property ETR_PickupPerk Auto bool bAtHome = false -int iFollowerIndex ObjectReference bookShelf = None +int iFollowerIndex = 0 +int iArtifactCount = 0 event OnInit() @@ -51,6 +52,13 @@ Event OnPlayerLoadGame() QuickLootEE.RegisterFoundItemsList(ETR_ItemsFound) endif + int iNewArtifactCount = GetArtifactCount() + if iNewArtifactCount != iArtifactCount + iArtifactCount = iNewArtifactCount + Debug.Notification("Artifact list changed, rebuilding the list") + ETR_ItemsNew.Revert() ; rebuild the list + endif + ; Rebuild all lists to avoid discrepancies, stale data, and broken records RescanStoredArtifacts() RescanFoundArtifacts() @@ -159,6 +167,8 @@ endstate bool function IsLoaded() native global +int function GetArtifactCount() native global + function RescanStoredArtifacts() native global function RescanFoundArtifacts() native global