GetWornItem - Actor

Revision as of 11:46, 2 September 2019 by imported>Qazaaq (added notes)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

F4SE Member of: Actor Script
Requires F4SE version 0.2.0 or higher.

Obtains WornItem information about an actors Biped Slot.

SyntaxEdit

WornItem Function GetWornItem(int slotIndex, bool firstPerson = false) Native

ParametersEdit

  • slotIndex: The Biped Slot index to check.
  • firstPerson: Specifies whether first or third person information for the Biped Slot should be returned.

Return ValueEdit

The WornItem for the given Biped Slot index.

ExamplesEdit

Actor:WornItem wornItem= Game.GetPlayer().GetWornItem(34)
Debug.Trace("Item: " + wornItem.Item)
Debug.Trace("Model: " + wornItem.Model)
Debug.Trace("ModelName: " + wornItem.ModelName)
Debug.Trace("MaterialSwap: " + wornItem.MaterialSwap)
Debug.Trace("Texture: " + wornItem.Texture)
{For each biped slot}
Actor Player = Game.GetPlayer()
int index = 0
int end = 43 const

while (index < end)
    Actor:WornItem wornItem = Player.GetWornItem(index)
    Debug.Trace("Slot Index: " + index + ", " + wornItem)
    index += 1
EndWhile

Armor Slot PrecedenceEdit

There is a precedence to Armor slot ordering which is from head-to-toe. An Armor form only properly exists on the highest slot it covers, lower slots will return none. Armors will superfically flag the cover slots it covers as occupied.

For example a helmet with goggles that covers the HEAD + EYE slots will have to be accessed via the HEAD slot. On the other hand, a gas mask that covers the EYE + MOUTH slots will need to be accessed via the EYE slot. If for some reason there is a mask that covers the HEAD + EYES + MOUTH then it will need to be accessed via the HEAD slot because its the highest one.

Scriptname WornExample extends Quest

Actor Player
int BipedEyes = 17 const
bool ThirdPerson = false const

Event OnQuestInit()
	Player = Game.GetPlayer()
	Actor:WornItem worn = GetWorn()
	Debug.TraceSelf(self, "OnQuestInit", "Worn:"+worn)
EndEvent

Actor:WornItem Function GetWorn()
	{Scans down the highest slot of an eye slot armor.}
	int slot = 0
	While (slot <= BipedEyes)
		Actor:WornItem worn = Player.GetWornItem(slot, ThirdPerson)
		If (ItemFilter(worn.Item))
			return worn
		EndIf
		slot += 1
	EndWhile
	Debug.TraceSelf(self, "GetWorn", "No biped slot has a valid eyes armor.")
	return none
EndFunction

bool Function ItemFilter(Form item)
	Armor armo = item as Armor
	return armo && HasSlotMask(armo, kSlotMask47)
EndFunction

bool Function HasSlotMask(Armor armo, int value) Global
	return Math.LogicalAnd(armo.GetSlotMask(), value) == value
EndFunction

NotesEdit

  • Returns a none struct beyond index 43 as those are actually invalid.
  • Slots with empty forms are just empty slots.

See AlsoEdit