294 lines
7.4 KiB
Plaintext
294 lines
7.4 KiB
Plaintext
Scriptname _00E_Playerhousing_MannequinControl extends Actor
|
|
|
|
import utility
|
|
|
|
Form Property ArmorSlot01 auto hidden
|
|
Form Property ArmorSlot02 auto hidden
|
|
Form Property ArmorSlot03 auto hidden
|
|
Form Property ArmorSlot04 auto hidden
|
|
Form Property ArmorSlot05 auto hidden
|
|
Form Property ArmorSlot06 auto hidden
|
|
Form Property ArmorSlot07 auto hidden
|
|
Form Property ArmorSlot08 auto hidden
|
|
Form Property ArmorSlot09 auto hidden
|
|
Form Property ArmorSlot10 auto hidden
|
|
|
|
Armor Property ArmorRefresh auto
|
|
|
|
Actor Property PlayerREF Auto
|
|
|
|
Form Property EmptySlot auto hidden
|
|
|
|
MiscObject Property _00E_Placeable_Mannequin Auto
|
|
|
|
Message Property _00E_MannequinInteractMSG Auto
|
|
|
|
;int Property CurrentPose = 1 Auto
|
|
{The pose the Mannequin starts in, and is currently in. DEFAULT = 1}
|
|
|
|
float forceX
|
|
float forceY
|
|
float forceZ
|
|
float forceAngleX
|
|
float forceAngleY
|
|
float forceAngleZ
|
|
|
|
;=====================================================================================
|
|
; EVENTS
|
|
;=====================================================================================
|
|
|
|
EVENT OnInit()
|
|
|
|
self.BlockActivation()
|
|
PrepareForcePosition()
|
|
|
|
EndEVENT
|
|
|
|
EVENT OnCellLoad()
|
|
|
|
If !(self.IsActivationBlocked())
|
|
self.BlockActivation()
|
|
EndIf
|
|
|
|
PrepareForcePosition()
|
|
|
|
EndEVENT
|
|
|
|
EVENT OnActivate(ObjectReference TriggerRef)
|
|
|
|
If self.IsActivationBlocked()
|
|
int iButton = _00E_MannequinInteractMSG.Show()
|
|
|
|
If iButton == 0
|
|
self.OpenInventory(true)
|
|
wait(0.1)
|
|
self.EnableAI(false)
|
|
Else
|
|
self.RemoveAllItems(PlayerREF)
|
|
Wait(0.5)
|
|
PlayerREF.addItem(_00E_Placeable_Mannequin, 1, true)
|
|
PlayerREF.DropObject(_00E_Placeable_Mannequin, 1)
|
|
self.disable()
|
|
self.delete()
|
|
EndIf
|
|
EndIf
|
|
|
|
EndEVENT
|
|
|
|
EVENT OnItemAdded(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akSourceContainer)
|
|
|
|
if (akBaseItem as Armor)
|
|
if akBaseItem != ArmorRefresh
|
|
AddToArmorSlot(akBaseItem)
|
|
self.EquipItem(akBaseItem)
|
|
endif
|
|
else
|
|
self.RemoveItem(akBaseItem, aiItemCount, true, PlayerREF)
|
|
endif
|
|
|
|
endEVENT
|
|
|
|
EVENT OnObjectUnequipped(Form akBaseObject, ObjectReference akReference)
|
|
if (akBaseObject as Armor)
|
|
RemoveFromArmorSlot(akBaseObject)
|
|
endif
|
|
endEVENT
|
|
|
|
;=====================================================================================
|
|
; FUNCTIONS
|
|
;=====================================================================================
|
|
|
|
function PrepareForcePosition()
|
|
|
|
wait(0.25)
|
|
self.BlockActivation(true)
|
|
ForcePosition()
|
|
|
|
Endfunction
|
|
|
|
function ForcePosition()
|
|
|
|
self.Enable()
|
|
self.EnableAI(false)
|
|
|
|
If forceX == 0 && forceY == 0 && forceZ == 0
|
|
forceX = PlayerREF.GetPositionX()
|
|
forceY = PlayerREF.GetPositionY()
|
|
forceZ = PlayerREF.GetPositionZ()
|
|
EndIf
|
|
|
|
wait(0.1)
|
|
self.setPosition(forceX, forceY, forceZ)
|
|
self.setAngle(forceAngleX,forceAngleY,forceAngleZ)
|
|
|
|
self.additem(ArmorRefresh, 1)
|
|
self.removeitem(ArmorRefresh, 1)
|
|
|
|
EquipCurrentArmor()
|
|
|
|
ENDfunction
|
|
|
|
function setForcePosition(float x, float y, float z, float angleX, float angleY, float angleZ)
|
|
forceX = x
|
|
forceY = y
|
|
forceZ = z
|
|
forceAngleX = angleX
|
|
forceAngleY = angleY
|
|
forceAngleZ = angleZ
|
|
Endfunction
|
|
|
|
Function EquipCurrentArmor()
|
|
if (ArmorSlot01 != EmptySlot)
|
|
self.EquipItem(ArmorSlot01)
|
|
endif
|
|
if (ArmorSlot02 != EmptySlot)
|
|
self.EquipItem(ArmorSlot02)
|
|
endif
|
|
if (ArmorSlot03 != EmptySlot)
|
|
self.EquipItem(ArmorSlot03)
|
|
endif
|
|
if (ArmorSlot04 != EmptySlot)
|
|
self.EquipItem(ArmorSlot04)
|
|
endif
|
|
if (ArmorSlot05 != EmptySlot)
|
|
self.EquipItem(ArmorSlot05)
|
|
endif
|
|
if (ArmorSlot06 != EmptySlot)
|
|
self.EquipItem(ArmorSlot06)
|
|
endif
|
|
if (ArmorSlot07 != EmptySlot)
|
|
self.EquipItem(ArmorSlot07)
|
|
endif
|
|
if (ArmorSlot08 != EmptySlot)
|
|
self.EquipItem(ArmorSlot08)
|
|
endif
|
|
if (ArmorSlot09 != EmptySlot)
|
|
self.EquipItem(ArmorSlot09)
|
|
endif
|
|
if (ArmorSlot10 != EmptySlot)
|
|
self.EquipItem(ArmorSlot10)
|
|
endif
|
|
endFunction
|
|
|
|
Function AddToArmorSlot(Form akBaseItem)
|
|
bool FoundEmptySlot = FALSE
|
|
|
|
if (ArmorSlot01 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot01 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot02 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot02 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot03 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot03 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot04 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot04 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot05 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot05 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot06 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot06 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot07 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot07 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot08 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot08 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot09 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot09 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot10 == EmptySlot) && (FoundEmptySlot == FALSE)
|
|
ArmorSlot10 = akBaseItem
|
|
FoundEmptySlot = TRUE
|
|
endif
|
|
FoundEmptySlot = FALSE
|
|
endFunction
|
|
|
|
Function RemoveFromArmorSlot(Form akBaseItem)
|
|
;Trace("DARYL - " + self + " Running the RemoveFromArmorSlot Function")
|
|
|
|
bool FoundMatchingSlot = FALSE
|
|
|
|
if (ArmorSlot01 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 01")
|
|
ArmorSlot01 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot02 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 02")
|
|
ArmorSlot02 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot03 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 03")
|
|
ArmorSlot03 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot04 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 04")
|
|
ArmorSlot04 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot05 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 05")
|
|
ArmorSlot05 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot06 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 06")
|
|
ArmorSlot06 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot07 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 07")
|
|
ArmorSlot07 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot08 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 08")
|
|
ArmorSlot08 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot09 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 09")
|
|
ArmorSlot09 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
if (ArmorSlot10 == akBaseItem) && (FoundMatchingSlot == FALSE)
|
|
;Trace("DARYL - " + self + " Match Found, Removing " + akBaseItem + " from armor slot 10")
|
|
ArmorSlot10 = EmptySlot
|
|
FoundMatchingSlot = TRUE
|
|
endif
|
|
|
|
endFunction
|