Creating Items
Definindo dados do item
Antes de poder ver ou usar um item no jogo, ele deve primeiro ser definido.
Todos os itens são definidos no arquivo /data/items.lua com pares chave-valor. A chave é o nome (não o label) de um item e o valor é uma tabela contendo as opções do item.
- Opções do item:
tabela- label:
string - weight?:
number - stack?:
boolean- Se definido como false, o item não poderá ser empilhado.
- degrade?:
number- Quantidade de tempo em minutos após a qual o item irá degradar.
- decay?:
boolean- Se true, o item será deletado quando a durabilidade chegar a 0 (não é instantâneo para itens degradados).
- close?:
boolean- Se definido como false, não fecha o inventário ao usar o item.
- description?:
string- Descrição do item que será exibida na dica (tooltip).
- consume?:
number- Quantidade de itens necessária e removida ao usar.
- Padrão: 1
- Se definido como valor decimal, consumirá durabilidade em vez disso (0.2 = 20%).
- allowArmed?:
boolean- Se definido como true, permite usar o item enquanto estiver armado com uma arma.
- server?:
tabela- export?:
string
- export?:
- client?:
tabela- export?:
string- Export a ser acionado após o uso do item.
- event?:
string- Evento a ser acionado após o uso do item.
- status?:
tabela- Ajusta valores do esx_status após o uso.
- anim?:
tabela- Animação que será reproduzida durante a barra de progresso.
- dict:
string - clip:
string
- prop?:
tabela- Prop anexado que será exibido durante a barra de progresso.
- model:
stringouhash - pos:
tabela(x, y, z) - rot:
tabela(x, y, z) - bone?:
number - rotOrder?:
number
- disable?:
tabela- Ações a serem desabilitadas durante a barra de progresso.
- move?:
boolean - car?:
boolean - combat?:
boolean - mouse?:
boolean - sprint?:
boolean
- usetime?:
number - cancel?:
boolean- Se definido como true, o jogador pode cancelar o uso do item.
- add?:
function(total:number)- Função que é acionada ao receber um item.
- Retorna a quantidade total do item como
total.
- remove?:
function(total:number)- Função que é acionada ao remover um item.
- Retorna a quantidade total do item como
total.
- export?:
- buttons?:
tabela- label:
string - action:
function(slot:number)- Função de retorno (callback) quando o botão é clicado no menu de contexto, retorna o slot do item.
- label:
- label:
Exemplos
['burger'] = {
label = 'Burger',
weight = 220,
stack = true,
close = true,
client = {
status = { hunger = 200000 },
anim = { dict = 'mp_player_inteat@burger', clip = 'mp_player_int_eat_burger_fp' },
prop = {
model = 'prop_cs_burger_01',
pos = { x = 0.02, y = 0.02, y = -0.02},
rot = { x = 0.0, y = 0.0, y = 0.0}
},
usetime = 2500,
}
}Um item burger modificado que inclui uma descrição.
['burger'] = {
label = 'Burger',
description = 'Just what is the secret formula?'
weight = 220,
stack = true,
close = true,
client = {
status = { hunger = 200000 },
anim = { dict = 'mp_player_inteat@burger', clip = 'mp_player_int_eat_burger_fp' },
prop = {
model = 'prop_cs_burger_01',
pos = { x = 0.02, y = 0.02, y = -0.02},
rot = { x = 0.0, y = 0.0, y = 0.0}
},
usetime = 2500,
}
}Um item burger modificado que envia notificações nos argumentos add e remove.
['burger'] = {
label = 'Burger',
weight = 220,
stack = true,
consume = 0,
client = {
add = function(total)
if total > 0 then
lib.notify({description = 'Nice burger you got there!'})
end
end,
remove = function(total)
if total < 1 then
lib.notify({description = 'You lost all of your burgers!'})
end
end
}
}Tornando o item utilizável
- Se você estiver usando ESX, pode continuar usando
ESX.RegisterUsableItem. - Se você estiver usando QBox, pode continuar usando
exports.qbx_core:CreateUseableItem.
Usar o sistema integrado é mais seguro e oferece muito mais funcionalidades.
Callbacks do cliente
Callbacks de item podem ser adicionados definindo um export (recomendado), ou adicionando-o em items/client.lua.
Ao definir os dados do item, adicionar client.export acionará um evento ao usar o item.
A formatação correta é export = resourceName.exportName.
exports('bandage', function(data, slot)
local playerPed = PlayerPedId()
local maxHealth = GetEntityMaxHealth(playerPed)
local health = GetEntityHealth(playerPed)
-- O ped precisa de cura? Podemos cancelar o uso do item.
if health < maxHealth then
-- Aciona o código interno para usar itens corretamente.
-- Isso adiciona segurança, remove o item ao usar, adiciona suporte à barra de progresso e é necessário para callbacks do servidor.
exports.ox_inventory:useItem(data, function(data)
-- O servidor verificou que o item pode ser usado.
if data then
SetEntityHealth(playerPed, math.min(maxHealth, math.floor(health + maxHealth / 16)))
lib.notify({description = 'You feel better already'})
end
end)
else
-- Não usar o item
lib.notify({type = 'error', description = 'You don\'t need a bandage right now'})
end
end)Criando itens de contêiner
Assim como outros itens, o item deve primeiro ser registrado.
Quando registrado, você pode definir o item como um contêiner em /modules/items/containers.lua ou usando o export de servidor setContainerProperties.
A chave do contêiner é o name que você deu ao registrar o item.
Você também pode definir o número de slots, o peso máximo, itens na blacklist e na whitelist.
- itemName:
string - properties:
table- slots:
number- Número de slots disponíveis no contêiner.
- maxWeight:
number- Peso máximo que o contêiner pode conter.
- whitelist?:
table<string, true> | string[]- Tabela com os nomes dos itens permitidos no contêiner.
- Se não informado, todos os itens são permitidos, exceto os da blacklist.
- blacklist?:
table<string, true> | string[]- Tabela com os nomes dos itens que não são permitidos no contêiner.
- Se não informado, nenhum item é bloqueado, a menos que uma whitelist seja informada.
- slots:
Exemplo
['pizzabox'] = {
label = 'Pizza Box',
weight = 50,
stack = false,
close = false,
consume = 0,
},setContainerProperties('pizzabox', {
slots = 1,
maxWeight = 1000,
whitelist = { 'pizza' },
})