From 7330fca50a8d94491ba6b06228d3f3d5364f8a74 Mon Sep 17 00:00:00 2001 From: Eddoursul Date: Sat, 18 Jun 2022 13:17:10 +0200 Subject: [PATCH] Delayed processing of items moved to a container (WIP) --- Artifact Tracker.esp | Bin 4708 -> 4936 bytes Scripts/ETR_TrackFoundItems.pex | Bin 4465 -> 5353 bytes Source/Scripts/ETR_TrackFoundItems.psc | 147 +++++++++++++++---------- 3 files changed, 89 insertions(+), 58 deletions(-) diff --git a/Artifact Tracker.esp b/Artifact Tracker.esp index 43e9b3b8652ed7d5a929391d7e4b51dd5e3027d2..ead6179fe580493237440d3e266fbb8bcc0b919d 100644 GIT binary patch delta 435 zcmaE&azbr_600-=14G_K^>W5b6X&mFytLVqQIA_vm4$&JFf=#>D93O~2Sh^nUnfuC z(PR8Rc|VWQxx5=Hz&mq~;bgGBPmy|Iamf0iPCz*&q{~_$5FlOrFgD zRMMV_fx*oO)qNnokAjt%2m zE+WWI@=mQR&o4?TW|(|Yz)cUN%@nE)WEQeEL1b-i`9-W6G6X&mFytvtuQIA`ak%fUFFf=#>D93P72Sh^n7bj2P z(PO+kc|VWQWNTj4$=tlslM{H&CM)xcPX5RvHF+AZ3KItdSlF6Zee!I6naQ#IDwF;B z5K4~osROk_T)2$^Qi%Cg%w$P39Hc ZCFmX$8c+yyoR4#eAIOmxC%+I%00740JY@g? diff --git a/Scripts/ETR_TrackFoundItems.pex b/Scripts/ETR_TrackFoundItems.pex index a74755793f51116650a803f101a8376ea7731aeb..58cc78b6235327c69bd5cc966d2621955e0d49b6 100644 GIT binary patch literal 5353 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 prkF^R@jg{4tX{|M7SbckeB|78p{{gsX*8l(j 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