101 lines
3.0 KiB
Plaintext
101 lines
3.0 KiB
Plaintext
Scriptname _00E_BlueprintCollectionItem extends ObjectReference Hidden
|
|
|
|
Event OnEquipped(Actor akActor)
|
|
|
|
If akActor != PlayerREF || ! (GetBaseObject() as MiscObject)
|
|
return
|
|
endif
|
|
|
|
bInventoryMenu = SKSE.GetVersion() > 0 && UI.IsMenuOpen("InventoryMenu")
|
|
_00E_FS_BlueprintContainerActorREF.SetPlayerTeammate(True, True)
|
|
|
|
Int iButton = _00E_FS_Blueprint_Message_SE.Show()
|
|
If iButton == 0
|
|
AddBlueprints()
|
|
ElseIf iButton == 1
|
|
StoreSingleCopy()
|
|
ElseIf iButton == 2
|
|
TakeBlueprints()
|
|
EndIf
|
|
|
|
EndEvent
|
|
|
|
Function AddBlueprints()
|
|
if bInventoryMenu
|
|
; The DisablePlayerControls method does not remember last inventory tab to return where we were
|
|
Input.TapKey(Input.GetMappedKey("Tween Menu"))
|
|
endif
|
|
Game.DisablePlayerControls(abMenu = true)
|
|
Game.EnablePlayerControls(abMenu = true)
|
|
Utility.Wait(0.05)
|
|
_00E_FS_BlueprintContainerActorREF.ShowGiftMenu(True, _00E_FS_BlueprintList, True, False)
|
|
if bInventoryMenu
|
|
Utility.wait(0.2)
|
|
Input.TapKey(Input.GetMappedKey("Quick Inventory"))
|
|
endif
|
|
EndFunction
|
|
|
|
function StoreSingleCopy()
|
|
;/ Too slow
|
|
int iItemsToStore = PlayerREF.GetItemCount(Blueprint) - _00E_FS_BlueprintContainerActorREF.GetItemCount(Blueprint)
|
|
bool bStoreSilently = iItemsToStore > 3
|
|
Int iFormIndex = PlayerREF.GetNumItems()
|
|
While iFormIndex > 0
|
|
iFormIndex -= 1
|
|
Form kForm = PlayerREF.GetNthForm(iFormIndex)
|
|
If kForm as MiscObject && kForm.HasKeyword(Blueprint) && _00E_FS_BlueprintContainerActorREF.GetItemCount(kForm) == 0
|
|
PlayerREF.RemoveItem(kForm, 1, bStoreSilently, _00E_FS_BlueprintContainerActorREF)
|
|
EndIf
|
|
EndWhile
|
|
if bStoreSilently
|
|
_00E_FS_BlueprintItemsStored.Show(iItemsToStore)
|
|
endif
|
|
/;
|
|
int iCount = EnderalFunctions.MoveItemsToCountByKeyword(PlayerREF, _00E_FS_BlueprintContainerActorREF, Blueprint, 1)
|
|
|
|
if iCount > 0
|
|
ITMBookClose.Play(PlayerREF)
|
|
|
|
; Moving items is fast, refreshing inventory is not
|
|
Utility.WaitMenuMode(0.5)
|
|
Form item = Game.GetForm(0x1FE82) ; non-playable Draugr Skin
|
|
PlayerREF.RemoveItem(item, 1, true)
|
|
|
|
if iCount > 150
|
|
Utility.WaitMenuMode(0.5)
|
|
PlayerREF.RemoveItem(item, 1, true) ; doing this twice seems to reliably refresh inventory
|
|
endif
|
|
endif
|
|
|
|
_00E_FS_BlueprintItemsStored.Show(iCount)
|
|
endfunction
|
|
|
|
Function TakeBlueprints()
|
|
if bInventoryMenu
|
|
; The DisablePlayerControls method does not remember last inventory tab to return where we were
|
|
Input.TapKey(Input.GetMappedKey("Tween Menu"))
|
|
endif
|
|
Game.DisablePlayerControls(abMenu = true)
|
|
Game.EnablePlayerControls(abMenu = true)
|
|
Utility.Wait(0.05)
|
|
_00E_FS_BlueprintContainerActorREF.ShowGiftMenu(False, _00E_FS_BlueprintList, True, False)
|
|
if bInventoryMenu
|
|
Utility.wait(0.2)
|
|
Input.TapKey(Input.GetMappedKey("Quick Inventory"))
|
|
endif
|
|
EndFunction
|
|
|
|
bool bInventoryMenu
|
|
|
|
Actor Property PlayerRef Auto
|
|
Actor Property _00E_FS_BlueprintContainerActorREF Auto
|
|
|
|
Message Property _00E_FS_Blueprint_Message_SE Auto
|
|
Message Property _00E_FS_BlueprintItemsStored Auto
|
|
|
|
FormList Property _00E_FS_BlueprintList Auto
|
|
|
|
Keyword Property Blueprint Auto
|
|
|
|
Sound Property ITMBookClose Auto
|