106 lines
2.9 KiB
Plaintext
106 lines
2.9 KiB
Plaintext
Scriptname CarryActorScript extends Actor
|
|
{Script for actors who carry items around}
|
|
;USKP 2.0.1 - Yes. So explain why it was extending ObjectReference instead. No? Don't even want to try? I thought not.
|
|
|
|
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
|
|
Self.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
|