From 4737d589a2c81e8dfb36893008f1093df3653000 Mon Sep 17 00:00:00 2001 From: Eddoursul Date: Thu, 28 Jul 2022 21:59:29 +0200 Subject: [PATCH] _00E_Theriantrophist_AlchemyControl: unregister potions on game load instead of in OnItemAdded, do not unregister potions in the secure chest --- ... optimization and graceful degradation.esp | Bin 4587 -> 4676 bytes .../_00e_theriantrophist_alchemycontrol.pex | Bin 19262 -> 18147 bytes .../_00e_theriantrophist_alchemycontrol.psc | 166 +++++------------- 3 files changed, 47 insertions(+), 119 deletions(-) diff --git a/TheriantrophistControlQuest optimization and graceful degradation.esp b/TheriantrophistControlQuest optimization and graceful degradation.esp index 9ef667e276a379fc6c0a020935a1a36cc21cb286..93d33f0bd16d387d55546f65cc42d3f0a0714900 100644 GIT binary patch delta 1081 zcmZuwOH30{6n%5sX=mE$k5Z+S{tJGnQt+1$qfBT~6Cgk-Mx#QlRfu4<9TFFY#D!a9 zy)p3@bz$Pd1uGXCH8H`2C9Ku3Rs2NbMiYqMH`5vx&f?B{Z|*(k%(?e{jxQv{(M)#t z{i+!C%rr9AJE#swES>37bN!>$R6??|+{H6_tysO}tq$$(IWjmpW@Z9o?9fPV=!S=} z;aqls;*7wwfZT$$F&(lk{8#lGVPX4 zaf&HN7(YN0KuoWBD|!Kf*kf+QMKdjvdU;5SG=stl8?+c?Ty!(fZpao&v*mL|CWWc18a5XQjn*hQ(@|Z*i0& z5C&{fd@V)sgdD@LJ&Zr>0eoN!qoM@xlDmzV*Q6GFB(>wJZI2Mty_$D>n#d1zx-dCX ztV~t3zNvDpZL4@tAwc;6t}1bwmR-Dysw<95E+=6*9C18u524=~5~4a*yW7_ct_@h( z$x`9G@snRxaX%$rw#RTz2?++!btea!S9~}pN6D6b^*I@K(sXR&WDQv@KQnb9Z=f8$ z&%Ng}vF`BH{Tup5{=ISY3$P}KaX}%k={-R-_1pk`Takiz#TFCz4979);?3-FB|Pc; zOujy;-5c?h+7()){uo8K^`d1br&8S=+abutQ>n~&wpf@g7kek^QjQ-kRWyAylIb%< RcfAoA{&L@;qMM#$e*x+oAJPB- delta 1121 zcmZuwOH30{6n*dY$F%cn3sR6$N{f&{Bg#(}$hU|_2&MRqiK%5O4VA%R2*H@JGbSz+ z@5;C_#zalj4RPa25_Ij-xL~OQ#uz_KgZIr8sfm-!o%_zYpZDH9vmW1$xh9k8_QHxQ z>Lq1_4371WQnJz&U%A%Wactt$_+>vKsZ;4mQu6S17vlVRd7n}KZNWD=bbP1|DrwYp zdbEEi1PVP#DO{kPXo0qlh$O4enucCTEok#5#k`#zp6@5gs|)!#?TR*QrcK?*T-I#z zF_IoKoW3}gI&{c}-hE~iK6t`MFzbwFXp4Fwm!8!!GnhDMhy4D;s7%fv(QleY{?dY} z&F|HNO;;=K=cYSO6L5z`;E6MY>)Wi$vI*Z|J9Zs=BbpG~?DZR5H(^38oOP9BXv)ox zHN#?PGoA`~;!@G;@$mHrccX>=-C;YtAQz@ z0g}Q&2zo1ERf|WJyL#S($t%wP2K0j{`=Z&J;wzeEZDP;_OSEbuq zuFjwDCWx707rYv!odlTF%}}IU(Rw8ezj1gK05_ zVvE2JDa6IVWp+i~zvueJqAbV1mVmyZHd6?~Q#`&XALb(Hld+m4Ta%2#QB~pdRXeSD zBIQdIFQ9kVru>uvwJ;je(+mD`_%;mIf@&9f9iLHBm UO;(3Wcq>QHOZo4i-S(gR1Fq>b;s5{u diff --git a/scripts/_00e_theriantrophist_alchemycontrol.pex b/scripts/_00e_theriantrophist_alchemycontrol.pex index e7509653123841dd86bc346a10e359c625ea9046..b3c0ba48d696b1004aad66ebb9d9fff9ace05751 100644 GIT binary patch literal 18147 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

?rYWvlk>a`S7-wNnuLGX(rzSNaRG}SM9 zacn@H;CPN?R$ShMB#IIDY_Op^Mc89UOW30aZAlN4_24oC49;HUNm*kH42}Wa;5@H9 z2_C%9dB@E;Hd%9)3~rdI{y@+yhjc$L@= z+vc+Zm90DMSZ1zl7Cc4JQEnDusTP(9SgxOnrAAoHLlVuxuD%V*%pcd#AH| {K!e zi>TX?3-Hvdj!?ZiidR3g)G@>#o`uzM^qxQj4&ZYKeOARx6fVSkjwy9J{D`yg7z}!r z4dVK7P`ZwDlaun0QgNlEiT!-M_!7Dij3+D(MKLttm>7$cW5G~8@R=}xe+cIR?)HnG r6OcndR{BS;=_o#AzCZEx0&B*cT1p2f>su|G( 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 diff --git a/source/scripts/_00e_theriantrophist_alchemycontrol.psc b/source/scripts/_00e_theriantrophist_alchemycontrol.psc index 0f80ad4b..ef052b29 100644 --- a/source/scripts/_00e_theriantrophist_alchemycontrol.psc +++ b/source/scripts/_00e_theriantrophist_alchemycontrol.psc @@ -66,6 +66,8 @@ MagicEffect Property AlchRestoreStamina Auto FormList Property _00E_EmptyFormlist Auto +ObjectReference Property _00E_SecureChest_HostChestREF Auto + Int Property GreyAlchemist2PotionDurationLimitInSeconds = 180 Autoreadonly Hidden {The potion duration of all werewolf potions is limited to this amount if the player has the first and second perk grey alchemist} Int Property GreyAlchemist1PotionDurationLimitInSeconds = 120 Autoreadonly Hidden @@ -101,7 +103,7 @@ bool bDoneDarkBlood = false bool bDoneChymikum = false Int curScriptVersion = 0 -Int Property LATEST_SCRIPT_VERSION = 4 AutoReadOnly +Int Property LATEST_SCRIPT_VERSION = 5 AutoReadOnly bool bHasJContainers = false @@ -120,8 +122,6 @@ Function _UpdatePotion(Potion item, Int count) If bIsTheriantrophistPotion && EnderalLib.IsDLLLoaded() ; FRESHLY BREWN THERIANTROPHIST POTION - Debug.Notification("Replacing theriantrophist potion") - PlayerREF.removeItem(item, count, abSilent = true) Bool bRemoveTheriantrophistEffects = False @@ -156,7 +156,7 @@ Function _UpdatePotion(Potion item, Int count) EndIf Else Int maxDuration = NoAlchemistPotionDurationLimitInSeconds - Int durationBonus = PlayerREF.GetAV("Variable02") as Int + Int durationBonus = PlayerREF.GetActorValue("Variable02") as Int If PlayerREF.hasPerk(_00E_Class_Theriantrophist_P03_GreyAlchemist_03) maxDuration = -1 ; no duration mali are required @@ -225,7 +225,6 @@ Function _UpdatePotion(Potion item, Int count) EndFunction Function _RenamePotion(Potion p, MagicEffect[] potionEffects, Int nPotionEffects, Bool bCommonPotion) - Debug.Notification("Renaming potion") String name = "" If bCommonPotion @@ -335,16 +334,16 @@ Function _UpdateNQ11(Potion newPotion) Bool bUpdateNQ11 = False - If newPotion.HasKeyword(_00E_Theriantrophist_ChymikumLife) && FS_NQ11.GetStage() >= 10 && !bDoneChymikum + If newPotion.HasKeyword(_00E_Theriantrophist_ChymikumLife) && FS_NQ11.GetCurrentStageID() >= 10 && !bDoneChymikum bDoneChymikum = True bUpdateNQ11 = True EndIf - If newPotion.HasKeyword(_00E_Theriantrophist_DarkBloodEffect) && FS_NQ11.GetStage() >= 10 && !bDoneDarkBlood + If newPotion.HasKeyword(_00E_Theriantrophist_DarkBloodEffect) && FS_NQ11.GetCurrentStageID() >= 10 && !bDoneDarkBlood bDoneDarkBlood = True bUpdateNQ11 = True EndIf - If bUpdateNQ11 && FS_NQ11.GetStage() < 17 + If bUpdateNQ11 && FS_NQ11.GetCurrentStageID() < 17 FS_NQ11.ShowTutorial(2) If bDoneChymikum && bDoneDarkBlood @@ -358,71 +357,29 @@ Function _UpdateNQ11(Potion newPotion) EndFunction Function _SetNewStageNQ11(Int newStage) - If newStage > FS_NQ11.GetStage() - FS_NQ11.SetStage(newStage) + If newStage > FS_NQ11.GetCurrentStageID() + FS_NQ11.SetCurrentStageID(newStage) EndIf EndFunction -Function _UpdateInventoryFilters() - - RemoveAllInventoryEventFilters() - - AddInventoryEventFilter(_00E_EmptyFormlist) - - Int potionNames = RenamedPotions - Form k = JFormMap.nextKey(potionNames, previousKey = None, endKey = None) - while k != None - AddInventoryEventFilter(k) - k = JFormMap.nextKey(potionNames, k, endKey = None) - endwhile - -EndFunction - -Function _RestorePotionAttributes() - Debug.Notification("Restoring potion names") - - Potion k - - Int potionNames = RenamedPotions - k = JFormMap.nextKey(potionNames, previousKey = None, endKey = None) as Potion - while k != None - k.setName(JFormMap.getStr(potionNames, k)) - k = JFormMap.nextKey(potionNames, k, endKey = None) as Potion - endwhile - - Int potionModels = ModelChangedPotions - k = JFormMap.nextKey(potionModels, previousKey = None, endKey = None) as Potion - while k != None - k.SetWorldModelPath(JFormMap.getStr(potionModels, k)) - k = JFormMap.nextKey(potionModels, k, endKey = None) as Potion - endwhile - -EndFunction - Function _InitAchemyControl() - ;Debug.Notification("AchemyControl init") - GoToState("") int iSKSEVer = SKSE.GetVersion() if iSKSEVer < 2 - RemoveAllInventoryEventFilters() bHasJContainers = false - ;Debug.Notification("SKSE is not loaded") Debug.Trace("SKSE is not loaded, _00E_Theriantrophist_AlchemyControl is disabled") return endif - bHasJContainers = ( (SKSE.GetPluginVersion("JContainers64") != -1) || (SKSE.GetPluginVersion("JContainersVR") != -1) ) + bHasJContainers = ( (SKSE.GetPluginVersion("JContainers64") != -1) || (SKSE.GetPluginVersion("JContainersVR") != -1) ) && JContainers.isInstalled() if ! bHasJContainers && ! EnderalLib.IsDLLLoaded() ; Both required components are missing, do not update version and disable everything - RemoveAllInventoryEventFilters() UnregisterForAllMenus() Debug.Trace("JContainers and fs.dll are not loaded, _00E_Theriantrophist_AlchemyControl is disabled.") - ;Debug.Notification("JContainers and fs.dll are not loaded") return endif @@ -431,64 +388,66 @@ Function _InitAchemyControl() Int oldScriptVersion = curScriptVersion curScriptVersion = LATEST_SCRIPT_VERSION - If oldScriptVersion < 4 - ;Debug.Notification("Updating AlchemyControl") + If oldScriptVersion < 5 + RemoveAllInventoryEventFilters() + UnregisterForAllMenus() UnregisterForUpdate() EndIf EndIf - ; Re-initialize everything to stay resilient to co-save deletion or corruption - - if bHasJContainers - RegisterForMenu("ContainerMenu") - RegisterForMenu("InventoryMenu") - RegisterForMenu("FavoritesMenu") - ;Debug.Trace("JContainers is loaded, hooking to menus") - else - RemoveAllInventoryEventFilters() - UnregisterForAllMenus() - Debug.Notification("JContainers is not loaded") + if ! bHasJContainers Debug.Trace("JContainers is not loaded, renaming and changing potion models is disabled") endif + ; Re-register menu listener to stay resilient to co-save deletion or corruption RegisterForMenu("Crafting Menu") EndFunction +Function _OnGameLoadJContainers() + + Potion k + Potion previousKey + + Int potionNames = RenamedPotions + k = JFormMap.nextKey(potionNames, previousKey = None, endKey = None) as Potion + while k != None + ; Forget items that are no longer in the inventory + if PlayerREF.GetItemCount(k) == 0 && _00E_SecureChest_HostChestREF.GetItemCount(k) == 0 + JFormMap.removeKey(RenamedPotions, k) + JFormMap.removeKey(ModelChangedPotions, k) + k = JFormMap.nextKey(potionNames, previousKey, endKey = None) as Potion + else + previousKey = k + k.setName(JFormMap.getStr(potionNames, k)) + k = JFormMap.nextKey(potionNames, k, endKey = None) as Potion + endif + endwhile + + Int potionModels = ModelChangedPotions + k = JFormMap.nextKey(potionModels, previousKey = None, endKey = None) as Potion + while k != None + k.SetWorldModelPath(JFormMap.getStr(potionModels, k)) + k = JFormMap.nextKey(potionModels, k, endKey = None) as Potion + endwhile + +EndFunction + + ;===================================================================================== ; EVENTS ;===================================================================================== Event OnMenuOpen(String MenuName) - - If menuName == "Crafting Menu" - GoToState("InCrafting") - return - endif - - if bHasJContainers - Debug.Notification("InInventory") - GoToState("InInventory") - endif - + GoToState("InCrafting") EndEvent Event OnMenuClose(String MenuName) - GoToState("") - EndEvent State InCrafting - Event OnBeginState() - ;Debug.Notification("RemoveAllInventoryEventFilters") - RemoveAllInventoryEventFilters() - EndEvent - Event OnItemAdded(Form baseItem, int count, ObjectReference itemRef, ObjectReference source) - - Debug.Notification("Added " + baseItem.GetName()) - Potion item = baseItem as Potion If item ; Ignore not-custom potions (with FormID not starting with 0xFF) or already registered potions @@ -496,35 +455,6 @@ State InCrafting _UpdatePotion(item, count) EndIf EndIf - - EndEvent - - Event OnEndState() - if bHasJContainers && UI.IsMenuOpen("Crafting Menu") == false - Debug.Notification("_UpdateInventoryFilters") - _UpdateInventoryFilters() - endif - EndEvent -EndState - -State InInventory - Event OnItemRemoved(Form baseItem, int count, ObjectReference itemRef, ObjectReference dest) - if dest != None - return - endif - Debug.Notification("Removed " + baseItem.GetName()) - ; Probably a potion is consumed - Potion item = baseItem as Potion - if item - ; we want to prevent that all potions that have been brewed are collected in this list - ; and cause performance issues. So we risk that we loose track of them by removing them - ; from this list. In this case, the name will be the old vanilla skyrim one - if (PlayerREF.getItemCount(item) == 0) - JFormMap.removeKey(RenamedPotions, item) - JFormMap.removeKey(ModelChangedPotions, item) - RemoveInventoryEventFilter(baseItem) - Endif - Endif EndEvent EndState @@ -535,9 +465,7 @@ EndEvent Event OnPlayerLoadGame() _InitAchemyControl() - if bHasJContainers - _RestorePotionAttributes() - _UpdateInventoryFilters() + _OnGameLoadJContainers() endif EndEvent