If you use itmSetData
or objSetItemData
to set data (other than nil) on an item, Tinkers will refuse to use it for fabrication purposes.
The game checks the player's inventory by creating a plain copy of the component and seeing if the player has it or its damaged version. An item with data on it is not the same as an item of the same type with different data.
(availableComponents
(map theComponents theComponent
(block (countAvailable)
(setq countAvailable 0)
; Add the number of non-damaged items we have
(setq countAvailable (add countAvailable
(objHasItem (or theSource gPlayerShip) theComponent 1)
))
; Now add damaged items
(setq countAvailable (add countAvailable
(objHasItem (or theSource gPlayerShip) (itmSetProperty theComponent 'damaged True) 1)
))
; Compose entry
{ item: theComponent
available: countAvailable
}
)
)
)
It looks like there needs to be a check for type involved somewhere, probably before the above code even gets run.
I guess items that get ionized by ion disruptor or the like would be similarly tainted too?
In 1.8 Beta 3 we ignore charges, data, and disruption when looking for a matching item. This should work for both Tinkers and foundries (in Part II).