Difference between revisions of "RemoveItem - ObjectReference"

From the CreationKit Wiki
Jump to navigation Jump to search
imported>Fg109
(added note)
imported>B1gBadDaddy
(→‎Notes: Removed - can remove self ref objects from containers, tested and not working.)
 
(9 intermediate revisions by 5 users not shown)
Line 11: Line 11:


== Parameters ==
== Parameters ==
*akItemToRemove: The item (or base form) to remove from this reference's inventory. If a reference is passed, the reference is deleted once it's removed.
*akItemToRemove: The item (or other form) to remove from this reference's inventory. Different form types yield different behaviors:
**'''Item base form:''' ''aiCount'' of the item will be removed.
**'''FormList:''' ''aiCount'' of each base form in the FormList will be removed. However, if the FormList is empty, a Papyrus error will occur.
**'''ObjectReference:''' The reference will be removed from the inventory and then deleted.
*aiCount: How many references to remove.
*aiCount: How many references to remove.
**'''Default:''' 1
**'''Default:''' 1
Line 35: Line 38:
==Notes==
==Notes==
*The function accepts a form object, however you can't make a property to a form object, you need to create a property to another type of object that extends form. Most often a MiscObject, or Weapon, etc.
*The function accepts a form object, however you can't make a property to a form object, you need to create a property to another type of object that extends form. Most often a MiscObject, or Weapon, etc.
*If you pass in a form list, it will remove aiCount of each item in the form list from the container. If there isn't aiCount of a particular item in the container, it will remove all of them.
*If you pass in a form list, it will remove aiCount of each item in the form list from the container. If there isn't aiCount of a particular item in the container, it will remove all of them. If you wish to remove X amount of objects from a container, by checking against a form list, use the following script (the script uses PlayerREF as the ObjectReference to remove items from):
<source lang="papyrus">
Function SomeFunction()
 
;In this example, let's say you have 2 misc objects in your formlist.
;This script will remove 10 count of any quantity of those items.
;So it could be 5 of one, 5 of the other, or 9 of one and 1 of the other.
 
        int ListSize = myFormList.GetSize()
        int CurrentItems = 0
        int ItemsLeft = 10; remove 10 items, change this to whatever number you want to remove
 
        while CurrentItems <= ListSize && ItemsLeft > 0
                Form CurrentItem1 = myFormList.GetAt(CurrentItems)
                int ItemCount = PlayerREF.GetItemCount(CurrentItem1)
 
                PlayerREF.RemoveItem(CurrentItem1, ItemsLeft)
                ItemsLeft -= ItemCount
                CurrentItems += 1
        endwhile
 
endFunction
</source>
 
*The function seems to have a preference for equipped items.  Or if not equipped items then the first instance of the item that's in inventory (which is the same thing, since when you equip something, it's the first instance of the object in the inventory).
*The function seems to have a preference for equipped items.  Or if not equipped items then the first instance of the item that's in inventory (which is the same thing, since when you equip something, it's the first instance of the object in the inventory).
*The akItemToAdd argument of [[AddItem - ObjectReference]] can be a LeveledItem. A LeveledItem as akItemToRemove, however, won't work and the members of the LeveledItem must be passed individually as akItemToRemove.
*This function does not work on items pre-placed inside containers until that container is opened and its contents are finally loaded by the game.
**Solution for scenarios that need to remove such items:
***Use [[RemoveAllItems - ObjectReference]] to transfer the entire container's contents to a separate container
***Use the [[OnItemAdded - ObjectReference]] event on the second container to obtain the incoming items
***Finally use [[RemoveItem - ObjectReference]] to send all but the unwanted item(s) back to the first container
*The function does not work on object references that have only existed inside containers, for example an item the player has crafted. Even if you use the Self reference.


== See Also ==
== See Also ==

Latest revision as of 08:45, 24 May 2018

Member of: ObjectReference Script

Removes X of the specified item from this reference's inventory, possibly silently.

Syntax[edit | edit source]

Function RemoveItem(Form akItemToRemove, int aiCount = 1, bool abSilent = false, ObjectReference akOtherContainer = None) native

Parameters[edit | edit source]

  • akItemToRemove: The item (or other form) to remove from this reference's inventory. Different form types yield different behaviors:
    • Item base form: aiCount of the item will be removed.
    • FormList: aiCount of each base form in the FormList will be removed. However, if the FormList is empty, a Papyrus error will occur.
    • ObjectReference: The reference will be removed from the inventory and then deleted.
  • aiCount: How many references to remove.
    • Default: 1
  • abSilent: If true, no message will be printed to the screen
    • Default: false
  • akOtherContainer: If not None, the removed item(s) will be moved into this ref's inventory
    • Default: None

Return Value[edit | edit source]

None.

Examples[edit | edit source]

; Take away an apple
Chest.RemoveItem(Apple)


; Remove 50 gold from the player
Game.GetPlayer().RemoveItem(GoldBase, 50)

Notes[edit | edit source]

  • The function accepts a form object, however you can't make a property to a form object, you need to create a property to another type of object that extends form. Most often a MiscObject, or Weapon, etc.
  • If you pass in a form list, it will remove aiCount of each item in the form list from the container. If there isn't aiCount of a particular item in the container, it will remove all of them. If you wish to remove X amount of objects from a container, by checking against a form list, use the following script (the script uses PlayerREF as the ObjectReference to remove items from):
Function SomeFunction()

;In this example, let's say you have 2 misc objects in your formlist.
;This script will remove 10 count of any quantity of those items.
;So it could be 5 of one, 5 of the other, or 9 of one and 1 of the other.

        int ListSize = myFormList.GetSize()
        int CurrentItems = 0
        int ItemsLeft = 10; remove 10 items, change this to whatever number you want to remove

        while CurrentItems <= ListSize && ItemsLeft > 0
                Form CurrentItem1 = myFormList.GetAt(CurrentItems)
                int ItemCount = PlayerREF.GetItemCount(CurrentItem1)

                PlayerREF.RemoveItem(CurrentItem1, ItemsLeft)
                ItemsLeft -= ItemCount
                CurrentItems += 1
        endwhile

endFunction
  • The function seems to have a preference for equipped items. Or if not equipped items then the first instance of the item that's in inventory (which is the same thing, since when you equip something, it's the first instance of the object in the inventory).
  • The akItemToAdd argument of AddItem - ObjectReference can be a LeveledItem. A LeveledItem as akItemToRemove, however, won't work and the members of the LeveledItem must be passed individually as akItemToRemove.
  • This function does not work on items pre-placed inside containers until that container is opened and its contents are finally loaded by the game.
  • The function does not work on object references that have only existed inside containers, for example an item the player has crafted. Even if you use the Self reference.

See Also[edit | edit source]