Metadata
Item metadata is a very powerful tool that can be used to create multiple different items out of a single item.
In this guide well use pokemon cards as an example, but you can find an already integrated example in the inventory with the garbage item.
Creating the base item
First of all we need to create a base item that well use to apply metadata to.
['pokemon_card'] = {
label = 'Pokemon card',
weight = 10,
consume = 0,
server = {
export = 'pokemon.pokemon_card'
}
}In this case we define the label and the weight as well since we are going to have all the cards weigh the same, but if you do not want them all to weigh the same you can leave it out and apply weight through metadata.
We'll also make the item usable by calling the pokemon_card export in the pokemon resource.
exports('pokemon_card', function(event, item, inventory, slot, data)
if event == 'usingItem' then
local itemSlot = exports.ox_inventory:GetSlot(inventory.id, slot)
print(json.encode(itemSlot.metadata, {indent=true}))
end
end)Special metadata properties
You can define any metadata property with any value you want it to have, but there are a couple metadata properties that have special use cases.
These properties are:
label:
stringDisplay name of the item
weight:
numberAmount the item will weigh
description:
stringDescription of the item that will be displayed in the tooltip
image:
stringImage inside the image path that the item will use
imageurl:
stringUrl to the image that the item will use
type:
anyItem type that is displayed in top right of the tooltip
We'll use these properties to create our pokemon cards out of the pokemon_card item that we created earlier.
Creating metadata items
We can easily create metadata items by defining a hook using createItem and adding it to a shop as well.
inventory = {
{name = 'pokemon_card', price = 300, metadata = {
label = 'Charizard',
description = 'It is said that Charizard’s fire burns hotter if it has experienced harsh battles.',
image = 'panties',
type = 'Fire',
hp = 78,
attack = 84,
defense = 78
}}
}local pokemonMetadata = {
charizard = {
label = 'Charizard',
description = 'It is said that Charizard’s fire burns hotter if it has experienced harsh battles.',
image = 'panties',
type = 'Fire',
hp = 78,
attack = 84,
defense = 78
}
}
local hookId = exports.ox_inventory:registerHook('createItem', function(payload)
local pokemon = pokemonMetadata[payload.metadata.type]
if not pokemon then return end
return pokemon
end, {
itemFilter = {
pokemon_card = true
}
})As seen above when our item is usable, the metadata properties are all there and accessible through the slot.
Displaying custom metadata properties
We can display our custom metadata we set on our charizard card by either using string concatenation and adding them to the description or by using the displayMetadata client function.
exports.ox_inventory:displayMetadata({
hp = 'HP',
attack = 'ATK',
defense = 'DEF'
})Last updated