92 lines
2.1 KiB
Plaintext
92 lines
2.1 KiB
Plaintext
|
Scriptname _00E_RentRoomScript extends Actor Conditional
|
||
|
{script for anyone who rents a room}
|
||
|
|
||
|
ObjectReference Property Bed Auto
|
||
|
{bed to rent}
|
||
|
|
||
|
ObjectReference Property RoomDoor Auto
|
||
|
{door to unlock}
|
||
|
|
||
|
Worldspace Property Akropolis Auto
|
||
|
|
||
|
MiscObject Property Gold001 Auto
|
||
|
|
||
|
Actor Property PlayerREF Auto
|
||
|
|
||
|
bool DoorHasToClean
|
||
|
|
||
|
; rent room or clear rental
|
||
|
function RentRoom(int iGoldvalue)
|
||
|
RegisterForSingleUpdateGameTime(24.0)
|
||
|
|
||
|
; used to conditionalize innkeeper dialogue
|
||
|
SetActorValue("Variable09", 1.0)
|
||
|
If PlayerREF == None
|
||
|
PlayerREF = Game.GetPlayer()
|
||
|
EndIf
|
||
|
Bed.SetActorOwner(PlayerREF.GetActorBase())
|
||
|
PlayerREF.RemoveItem(Gold001, iGoldvalue)
|
||
|
|
||
|
RoomDoor.Lock(False)
|
||
|
RoomDoor.SetOpen(true)
|
||
|
DoorHasToClean = False
|
||
|
endFunction
|
||
|
|
||
|
function ClearRoom()
|
||
|
; debug.trace(self + " ClearRoom called on RentRoomScript - room rental expired")
|
||
|
; clear ownership - either rental expired or I died
|
||
|
Bed.SetActorOwner((self as Actor).GetActorBase())
|
||
|
UnregisterForUpdateGameTime()
|
||
|
; used to conditionalize innkeeper dialogue
|
||
|
SetActorValue("Variable09", 0.0)
|
||
|
ClearRoomDoor()
|
||
|
endFunction
|
||
|
|
||
|
; Wait for the player to leave the inn and the meditation cell (he/she could be meditating in the inn)
|
||
|
; After that the door is free to be locked.
|
||
|
function ClearRoomDoor()
|
||
|
Cell playerCell = PlayerREF.GetParentCell()
|
||
|
Worldspace playerWorldspace = PlayerREF.GetWorldSpace()
|
||
|
if playerCell != GetParentCell() && playerWorldspace != Akropolis
|
||
|
DoorHasToClean = true
|
||
|
else
|
||
|
RegisterForSingleUpdate(5.0)
|
||
|
endIf
|
||
|
endFunction
|
||
|
|
||
|
Event OnUpdate()
|
||
|
; The room has been rented again between updates?
|
||
|
If GetActorValue("Variable09") > 0.0
|
||
|
Return
|
||
|
EndIf
|
||
|
|
||
|
ClearRoomDoor()
|
||
|
endEvent
|
||
|
|
||
|
; when this is called, reset the ownership on the bed
|
||
|
event OnUpdateGameTime()
|
||
|
ClearRoom()
|
||
|
endEvent
|
||
|
|
||
|
; if I die, clear the room rental as well, to stop the timer
|
||
|
Event OnDeath(Actor akKiller)
|
||
|
ClearRoom()
|
||
|
endEvent
|
||
|
|
||
|
function LockRoomDoor()
|
||
|
if DoorHasToClean == true
|
||
|
DoorHasToClean = false
|
||
|
RoomDoor.Lock(True)
|
||
|
endif
|
||
|
endFunction
|
||
|
|
||
|
Event OnCellAttach()
|
||
|
If RoomDoor.Is3DLoaded()
|
||
|
LockRoomDoor()
|
||
|
EndIf
|
||
|
EndEvent
|
||
|
|
||
|
Event OnCellLoad()
|
||
|
LockRoomDoor()
|
||
|
EndEvent
|