106 lines
2.9 KiB
Plaintext
106 lines
2.9 KiB
Plaintext
|
Scriptname CarryActorScript extends ObjectReference
|
||
|
{Script for actors who carry items around}
|
||
|
|
||
|
MiscObject Property CarryItemMisc Auto
|
||
|
{item being carried - MiscObject}
|
||
|
|
||
|
int Property CarryItemMiscCount = 1 Auto
|
||
|
{how many items to drop when interrupted}
|
||
|
|
||
|
Potion Property CarryItemPotion Auto
|
||
|
{potion item being carried - Potion (food)}
|
||
|
|
||
|
int Property CarryItemPotionCount = 1 Auto
|
||
|
{how many items to drop when interrupted }
|
||
|
|
||
|
Ingredient Property CarryItemIngredient Auto
|
||
|
{ingredient item being carried - Ingredients (flowers etc.)}
|
||
|
|
||
|
int Property CarryItemIngredientCount = 1 Auto
|
||
|
{how many items to drop when interrupted }
|
||
|
|
||
|
Idle Property StopCarryingEvent Auto
|
||
|
{event to send when stopping carry}
|
||
|
|
||
|
;set to true when item is being carried}
|
||
|
bool bCarryFlag = false
|
||
|
|
||
|
; all state changes for this actor go through this function
|
||
|
; call begin in OnBegin package block
|
||
|
function ChangeCarryState(bool bBeginCarrying, bool bDropItem = false)
|
||
|
; ; debug.trace(self + " ChangeCarryState")
|
||
|
if bBeginCarrying
|
||
|
; ; debug.trace(self + " ChangeCarryState BEGIN")
|
||
|
bCarryFlag = 1
|
||
|
else
|
||
|
; if I'm currently carrying something, see if I should drop it
|
||
|
if bCarryFlag && bDropItem
|
||
|
; ; debug.trace(self + " ChangeCarryState: DROP")
|
||
|
|
||
|
; I was interrupted, drop the items
|
||
|
RemoveCarriedItems(bDrop = true)
|
||
|
else
|
||
|
; ; debug.trace(self + " ChangeCarryState: NO DROP")
|
||
|
; remove from inventory just to be safe
|
||
|
RemoveCarriedItems()
|
||
|
endif
|
||
|
; I'm not carrying anything any more
|
||
|
bCarryFlag = 0
|
||
|
; get rid of anim object
|
||
|
Actor selfActor = (self as ObjectReference) as Actor
|
||
|
selfActor.PlayIdle(StopCarryingEvent)
|
||
|
endif
|
||
|
endFunction
|
||
|
|
||
|
Event OnCombatStateChanged(Actor akTarget, int aeCombatState)
|
||
|
if bCarryFlag
|
||
|
; drop what I'm carrying
|
||
|
ChangeCarryState(false, true)
|
||
|
endif
|
||
|
endEvent
|
||
|
|
||
|
; adds carried items to inventory
|
||
|
function AddCarriedItems()
|
||
|
if CarryItemMisc
|
||
|
AddItem(CarryItemMisc, CarryItemMiscCount)
|
||
|
endif
|
||
|
if CarryItemPotion
|
||
|
AddItem(CarryItemPotion, CarryItemPotionCount)
|
||
|
endif
|
||
|
if CarryItemIngredient
|
||
|
AddItem(CarryItemIngredient, CarryItemIngredientCount)
|
||
|
endif
|
||
|
endFunction
|
||
|
|
||
|
; removes all carried items from inventory, optionally dropping them into the world
|
||
|
function RemoveCarriedItems(bool bDrop = false)
|
||
|
if bDrop
|
||
|
DropCarriedItems(CarryItemMisc, CarryItemMiscCount)
|
||
|
DropCarriedItems(CarryItemPotion, CarryItemPotionCount)
|
||
|
DropCarriedItems(CarryItemIngredient, CarryItemIngredientCount)
|
||
|
else
|
||
|
if CarryItemMisc
|
||
|
RemoveItem(CarryItemMisc, CarryItemMiscCount)
|
||
|
endif
|
||
|
if CarryItemPotion
|
||
|
RemoveItem(CarryItemPotion, CarryItemPotionCount)
|
||
|
endif
|
||
|
if CarryItemIngredient
|
||
|
RemoveItem(CarryItemIngredient, CarryItemIngredientCount)
|
||
|
endif
|
||
|
endif
|
||
|
endFunction
|
||
|
|
||
|
function DropCarriedItems(Form ItemToDrop, int iDropCount)
|
||
|
if iDropCount == 0 || ItemToDrop == None
|
||
|
return
|
||
|
endif
|
||
|
|
||
|
int itemsLeft = iDropCount
|
||
|
while itemsLeft > 0
|
||
|
DropObject(ItemToDrop, 1)
|
||
|
itemsLeft = itemsLeft - 1
|
||
|
endWhile
|
||
|
|
||
|
endFunction
|