Lojas ox_inventory: data/shops.lua, RegisterShop e blips
Como criar uma loja em ox_inventory: a entrada data/shops.lua, preços e moeda, localizações e alvos, lojas bloqueadas por emprego, RegisterShop de outro recurso e blips.
Uma loja em ox_inventory é uma lista de itens com preços e um ou mais lugares onde os jogadores podem abri-la. Você pode editar um arquivo ou registrar a loja a partir de seu próprio recurso. Este artigo cobre ambos, além de preços, moedas, restrições de trabalho, ox_target e blips.
A entrada da loja em data/shops.lua
Abra ox_inventory/data/shops.lua. Cada loja é uma tabela associada por um tipo de loja:
return {
General = {
name = 'Shop',
inventory = {
{ name = 'burger', price = 10 },
{ name = 'water', price = 5, count = 50 },
{ name = 'lockpick', price = 150 },
},
locations = {
vec3(25.7, -1347.3, 29.5),
},
},
}A chave (General) é o tipo de loja. Os campos:
| Campo | Significado |
|---|---|
name |
Título mostrado no topo da loja |
inventory |
Os itens à venda |
locations |
Coordenadas onde os jogadores podem abrir a loja |
targets |
Mesma ideia, mas com caixas ox_target (veja abaixo) |
groups |
Empregos permitidos para usar a loja |
blip |
Configurações do blip do mapa |
Verifique as entradas padrão em sua cópia do arquivo: elas mostram os campos exatos que sua versão suporta, e a melhor maneira de começar é copiar uma e alterá-la.
Atenção: todo nome de item em
inventorydeve existir emdata/items.lua. Uma loja que lista um item faltando pode falhar em abrir ou imprimir erros. Veja adicionando itens a ox_inventory.
Itens, preços e moeda
Cada linha de inventory é uma pequena tabela:
inventory = {
{ name = 'water', price = 5 },
{ name = 'sandwich', price = 12, count = 20 },
{ name = 'lockpick', price = 150, currency = 'black_money' },
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },
},priceé o que uma unidade custa.counté o estoque. Sem isso o item é ilimitado, e com isso o estoque diminui conforme os jogadores compram.currencyé o item que paga por isso. Padrão para dinheiro, eblack_moneyé uma alternativa comum.licensepede um item de licença antes de o jogador poder comprar.graderestringe um item a um nível de trabalho mínimo, quando a loja usagroups.
Abrindo: localizações e alvos
Com locations, ox_inventory mostra uma interação nessas coordenadas. Com targets, cria caixas ox_target em vez disso, o que é melhor para um balcão ou uma janela:
targets = {
{
loc = vec3(25.7, -1347.3, 29.5),
length = 0.7,
width = 0.5,
heading = 0.0,
minZ = 29.0,
maxZ = 31.0,
distance = 1.5,
},
},ox_target deve estar em execução para isso funcionar, já que a loja depende dele. Se você quiser apenas um dos dois, remova a outra tabela.
Lojas bloqueadas por trabalho e blips
Restrinja uma loja a um trabalho com groups, usando nomes de trabalho e graus mínimos:
Police = {
name = 'Police armory',
groups = { police = 0 },
inventory = {
{ name = 'WEAPON_STUNGUN', price = 0 },
{ name = 'ammo-9', price = 0, count = 200 },
},
locations = { vec3(480.2, -996.5, 30.7) },
},Para um blip de mapa, adicione uma tabela blip à loja:
blip = { id = 59, colour = 69, scale = 0.8 },id é o número do sprite e colour o número da cor. Os números vêm das listas de blips do GTA, e a mesma ideia é explicada em criando blips em FiveM. Reinicie ox_inventory para aplicar mudanças de arquivo.
Registre uma loja de outro recurso
Quando uma loja é criada por seu próprio script, por exemplo por um negócio ou um recurso de trabalho, não edite data/shops.lua. Registre-a no servidor:
-- server.lua of your resource
exports.ox_inventory:RegisterShop('Bakery', {
name = 'Bakery',
inventory = {
{ name = 'bread', price = 4 },
{ name = 'croissant', price = 6, count = 30 },
},
locations = {
vec3(-1285.7, -1127.1, 6.8),
},
})RegisterShop(type, data) leva a string de tipo e a mesma tabela que no arquivo. Registre quando o recurso começar. Se ox_inventory reiniciar, seu recurso deve registrar a loja novamente, então registre em onServerResourceStart para ox_inventory também:
AddEventHandler('onServerResourceStart', function(resource)
if resource == 'ox_inventory' then
registerMyShops()
end
end)Abra uma loja do cliente
Se você não quer uma localização ou um alvo na loja, ou quer abri-la a partir de sua própria interface, use a exportação do cliente:
exports.ox_inventory:openInventory('shop', { type = 'General', id = 1 })type é a chave da loja. id é a posição da localização na lista locations (ou targets), começando em 1. Se uma loja tem uma localização, use id = 1. Uma loja sem localizações que foi registrada por código é aberta apenas com seu tipo, então teste sua versão se id é necessário.
Dica: o servidor ainda verifica a loja quando você a abre, então um cliente não pode comprar de uma loja de trabalho para a qual não tem trabalho.
Fazendo lojas sem editar código
Se você configurar muitas lojas, editar Lua fica repetitivo. Shop Creator permite que você crie lojas no jogo.
Shop CreatorMonte uma loja em menos de um minuto — donos, funcionários, cofres e assaltos inclusos.a partir de € 24,20Ver o script →
Lista de verificação
| Sintoma | Solução |
|---|---|
| Loja não aparece | Reinicie ox_inventory após editar data/shops.lua |
| Loja abre vazia ou com erros | Um item em inventory está faltando de data/items.lua |
| Não pode interagir com a loja | Verifique locations ou targets, e que ox_target funciona |
| Moeda errada | Defina currency na entrada do item |
| Loja de trabalho aberta para todos | Adicione groups = { job = grade } |
| Loja registrada perdida após reinicialização | Chame RegisterShop novamente quando ox_inventory começar |
Respostas rápidas
Onde adiciono uma loja em ox_inventory?
Em ox_inventory/data/shops.lua, como uma nova entrada com um nome, uma lista de inventory e uma ou mais locations ou targets. Reinicie ox_inventory depois.
Uma loja pode levar dinheiro negro em vez de dinheiro?
Sim. Defina currency = 'black_money' na entrada do item, e a loja cobra esse item em vez do dinheiro padrão.
Como crio uma loja a partir de meu próprio script?
Chame exports.ox_inventory:RegisterShop(type, data) no servidor, depois abra-a do cliente com exports.ox_inventory:openInventory('shop', { type = type }).
