diff --git a/Artifact Tracker.esp b/Artifact Tracker.esp index 43e9b3b..ead6179 100644 Binary files a/Artifact Tracker.esp and b/Artifact Tracker.esp differ diff --git a/Scripts/ETR_TrackFoundItems.pex b/Scripts/ETR_TrackFoundItems.pex index a747557..58cc78b 100644 Binary files a/Scripts/ETR_TrackFoundItems.pex and b/Scripts/ETR_TrackFoundItems.pex differ diff --git a/Source/Scripts/ETR_TrackFoundItems.psc b/Source/Scripts/ETR_TrackFoundItems.psc index 666db5e..3c338d5 100644 --- a/Source/Scripts/ETR_TrackFoundItems.psc +++ b/Source/Scripts/ETR_TrackFoundItems.psc @@ -7,6 +7,7 @@ FormList Property ETR_ItemsFound Auto FormList Property ETR_ItemsStored Auto FormList Property ETR_PersistentStorageList Auto FormList Property ETR_ExcludeFromNew Auto +FormList Property ETR_ExcludeFromCellItems Auto Container Property ETR_CellStorageContainer Auto @@ -14,6 +15,9 @@ Keyword Property LocTypePlayerHouse Auto bool bAtHome = false int iFollowerIndex = 0 +bool bUpdateFollowers = false +bool bSyncStorage = false +bool bUpdateLists = false event OnInit() @@ -27,59 +31,107 @@ EndEvent Event OnLocationChange(Location akOldLoc, Location akNewLoc) - bAtHome = akNewLoc && akNewLoc.HasKeyword(LocTypePlayerHouse) - RegisterForSingleUpdate(3.0) ; wait until followers load into the location -endEvent - -Event OnUpdate() - - ;Debug.Notification("Follower index: " + iFollowerIndex) + bAtHome = akNewLoc && akNewLoc.HasKeyword(LocTypePlayerHouse) int iCurrentFollowers = 0; Actor[] aFollowers = Eddoursul_Functions.GetPlayerFollowers() int i = aFollowers.length while i > 0 i -= 1 - if ! aFollowers[i].IsDead() && ! aFollowers[i].IsDisabled() - iCurrentFollowers += aFollowers[i].GetFormID() - ;Debug.Notification("Follower ID: " + aFollowers[i].GetFormID()) - endif + iCurrentFollowers += aFollowers[i].GetFormID() endwhile - ;Debug.Notification("New follower index: " + iCurrentFollowers) + if iCurrentFollowers != iFollowerIndex + ; If the list of followers has changed, rebuild ETR_ItemsFound and ETR_ItemsNew + iFollowerIndex = iCurrentFollowers + bUpdateFollowers = true + RegisterForSingleUpdate(3.0) ; wait until followers load into the location + endif + +endEvent + + +Event OnUpdate() + + Actor[] aFollowers + int i + + if bUpdateLists + + if Utility.IsInMenuMode() + RegisterForSingleUpdate(1.0) + return + endif + + bUpdateLists = false + bUpdateFollowers = false + + if bSyncStorage + bSyncStorage = false + ObjectReference cellStorage = Eddoursul_Functions.GetCellStorage(PlayerRef, ETR_PersistentStorageList, ETR_CellStorageContainer) + Eddoursul_Functions.SyncCellStorage(cellStorage, ETR_ExcludeFromCellItems) + endif + + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(ETR_PersistentStorageList, ETR_ItemsStored, 26, None, ETR_ExcludeFromCellItems) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(ETR_PersistentStorageList, ETR_ItemsStored, 41, None, ETR_ExcludeFromCellItems) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(ETR_PersistentStorageList, ETR_ItemsStored, 27, None, ETR_ExcludeFromCellItems) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(ETR_PersistentStorageList, ETR_ItemsStored, 32, None, ETR_ExcludeFromCellItems) + + ETR_ItemsFound.Revert() + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 26, None, ETR_ExcludeFromNew, false, false, false) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 41, None, ETR_ExcludeFromNew, false, false, false) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 27, None, ETR_ExcludeFromNew, false, false, false) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 32, None, ETR_ExcludeFromNew, false, false, false) + + aFollowers = Eddoursul_Functions.GetPlayerFollowers() + i = aFollowers.length + while i > 0 + i -= 1 + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(aFollowers[i], ETR_ItemsFound, 26, None, ETR_ExcludeFromNew, false, false, false) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(aFollowers[i], ETR_ItemsFound, 41, None, ETR_ExcludeFromNew, false, false, false) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(aFollowers[i], ETR_ItemsFound, 27, None, ETR_ExcludeFromNew, false, false, false) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(aFollowers[i], ETR_ItemsFound, 32, None, ETR_ExcludeFromNew, false, false, false) + endwhile + + ETR_ItemsNew.Revert() + Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 26, None, ETR_ExcludeFromNew) ; armor + Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 41, None, ETR_ExcludeFromNew) ; weapons + Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 27, None, ETR_ExcludeFromNew) ; books + Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 32, None, ETR_ExcludeFromNew) ; misc items - if iCurrentFollowers == iFollowerIndex return + endif - ; If the list of followers has changed, rebuild ETR_ItemsFound and ETR_ItemsNew - iFollowerIndex = iCurrentFollowers + if bUpdateFollowers + bUpdateFollowers = false - Debug.Notification("Team changed, updating lists") + Debug.Notification("Team changed, updating lists") - ETR_ItemsFound.Revert() - Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 26, None, ETR_ExcludeFromNew, false, false, false) - Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 41, None, ETR_ExcludeFromNew, false, false, false) - Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 27, None, ETR_ExcludeFromNew, false, false, false) - Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 32, None, ETR_ExcludeFromNew, false, false, false) + ETR_ItemsFound.Revert() + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 26, None, ETR_ExcludeFromNew, false, false, false) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 41, None, ETR_ExcludeFromNew, false, false, false) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 27, None, ETR_ExcludeFromNew, false, false, false) + Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(PlayerRef, ETR_ItemsFound, 32, None, ETR_ExcludeFromNew, false, false, false) - i = aFollowers.length - while i > 0 - i -= 1 - if ! aFollowers[i].IsDead() && ! aFollowers[i].IsDisabled() + aFollowers = Eddoursul_Functions.GetPlayerFollowers() + i = aFollowers.length + while i > 0 + i -= 1 Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(aFollowers[i], ETR_ItemsFound, 26, None, ETR_ExcludeFromNew, false, false, false) Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(aFollowers[i], ETR_ItemsFound, 41, None, ETR_ExcludeFromNew, false, false, false) Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(aFollowers[i], ETR_ItemsFound, 27, None, ETR_ExcludeFromNew, false, false, false) Eddoursul_Functions.AddItemsOfTypeAndKeywordToList(aFollowers[i], ETR_ItemsFound, 32, None, ETR_ExcludeFromNew, false, false, false) - endif - endwhile + endwhile - ETR_ItemsNew.Revert() - Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 26, None, ETR_ExcludeFromNew) ; armor - Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 41, None, ETR_ExcludeFromNew) ; weapons - Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 27, None, ETR_ExcludeFromNew) ; books - Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 32, None, ETR_ExcludeFromNew) ; misc items + ETR_ItemsNew.Revert() + Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 26, None, ETR_ExcludeFromNew) ; armor + Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 41, None, ETR_ExcludeFromNew) ; weapons + Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 27, None, ETR_ExcludeFromNew) ; books + Eddoursul_Functions.AddAllFormsToList(ETR_ItemsNew, 32, None, ETR_ExcludeFromNew) ; misc items + + endif EndEvent @@ -87,37 +139,16 @@ EndEvent event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) if akDestContainer - if akDestContainer as Actor - if (akDestContainer as Actor).IsPlayerTeammate() - ; Keep follower items marked as found - return - endif - elseif ETR_PersistentStorageList.HasForm(akDestContainer) - ETR_ItemsFound.RemoveAddedForm(akBaseItem) - ETR_ItemsStored.AddForm(akBaseItem) - return - elseif bAtHome && akDestContainer.GetParentCell() != PlayerRef.GetParentCell() - return - endif - endif - - if bAtHome && (akDestContainer || Eddoursul_Functions.HasRefInCell(akBaseItem, None, true, ETR_PersistentStorageList)) - + bSyncStorage = bAtHome + bUpdateLists = true + RegisterForSingleUpdate(1.0) + elseif bAtHome && akItemReference ETR_ItemsFound.RemoveAddedForm(akBaseItem) ETR_ItemsStored.AddForm(akBaseItem) - - ObjectReference cellStorage = Eddoursul_Functions.GetCellStorage(PlayerRef, ETR_PersistentStorageList, ETR_CellStorageContainer) - - if cellStorage.GetItemCount(akBaseItem) == 0 - cellStorage.AddItem(akBaseItem, 1, true) - endif - + Eddoursul_Functions.GetCellStorage(PlayerRef, ETR_PersistentStorageList, ETR_CellStorageContainer).AddItem(akBaseItem, 1, true) elseif PlayerRef.GetItemCount(akBaseItem) == 0 && Eddoursul_Functions.GetItemCountInActors(Eddoursul_Functions.GetPlayerFollowers(), akBaseItem) == 0 - ETR_ItemsFound.RemoveAddedForm(akBaseItem) - ETR_ItemsStored.RemoveAddedForm(akBaseItem) ETR_ItemsNew.AddForm(akBaseItem) - endif endevent