enderalse/source/scripts/defaultdisplayuniqueitemscript.psc

85 lines
2.5 KiB
Plaintext
Raw Normal View History

scriptname defaultDisplayUniqueItemScript extends ObjectReference
Actor property PlayerRef auto
Armor property optArmorToDisplay auto
{ Choose one 'opt' property to fill. The Armor to display. }
Weapon property optWeaponToDisplay auto
{ Choose one 'opt' property to fill. The Weapon to display. }
MiscObject property optMiscObjectToDisplay auto
{ Choose one 'opt' property to fill. The MiscObject to display. }
Book property optBookToDisplay auto
{ Choose one 'opt' property to fill. The Book to display. }
Message property ItemNotInInventoryMessage auto
{ The message to display if the item is not in the player's inventory. }
Keyword property LinkedMarkerKeyword auto
{ The keyword of the linked marker reference. }
Event OnActivate(ObjectReference akActionRef)
if akActionRef == PlayerRef
Form itemToDisplay = GetDisplayItem()
if PlayerRef.GetItemCount(itemToDisplay) > 0
; If the player has the item, place it.
DisplayItem(itemToDisplay)
else
; If the player doesn't have the item, and
; it's not already on display, show an error.
if !IsItemOnDisplay(itemToDisplay)
ItemNotInInventoryMessage.Show()
endif
endif
endif
EndEvent
function DisplayItem(Form akItem)
ObjectReference theItem = PlayerRef.DropObject(akItem)
theItem.BlockActivation()
PositionItemAndDisablePhysics(theItem)
theItem.BlockActivation(false)
endFunction
function PositionItemAndDisablePhysics(ObjectReference akItemOnDisplayRef)
if akItemOnDisplayRef
while !akItemOnDisplayRef.Is3DLoaded()
Utility.Wait(0.1)
endWhile
akItemOnDisplayRef.SetMotionType(Motion_Keyframed, false)
ObjectReference triggerMarker = GetLinkedRef(LinkedMarkerKeyword)
akItemOnDisplayRef.MoveTo(triggerMarker)
endif
endFunction
Form function GetDisplayItem()
if optArmorToDisplay
return optArmorToDisplay
elseif optWeaponToDisplay
return optWeaponToDisplay
elseif optMiscObjectToDisplay
return optMiscObjectToDisplay
elseif optBookToDisplay
return optBookToDisplay
endif
endFunction
bool function IsItemOnDisplay(Form akItem)
return Game.FindClosestReferenceOfTypeFromRef(akItem, GetLinkedRef(LinkedMarkerKeyword), 32.0)
endFunction
;USSEP 4.1.7 Bug #25561 - Added event
Event OnCellAttach()
Form itemToDisplay = GetDisplayItem()
If !IsItemOnDisplay(itemToDisplay)
ObjectReference fallenItem = Game.FindClosestReferenceOfTypeFromRef(itemToDisplay, GetLinkedRef(LinkedMarkerKeyword), 1000.0)
If fallenItem != None
fallenItem.BlockActivation()
PositionItemAndDisablePhysics(fallenItem)
fallenItem.BlockActivation(false)
EndIf
EndIf
EndEvent