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:

lua
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 inventory deve existir em data/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:

lua
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, e black_money é uma alternativa comum.
  • license pede um item de licença antes de o jogador poder comprar.
  • grade restringe um item a um nível de trabalho mínimo, quando a loja usa groups.

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:

lua
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:

lua
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:

lua
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:

lua
-- 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:

lua
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:

lua
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 }).

Scripts sem esse problema

Shop CreatorMonte uma loja em menos de um minuto — donos, funcionários, cofres e assaltos inclusos.Ver script →Item Creator V2Crie itens usáveis com animações, props, efeitos e muito mais — sem escrever código.Ver script →

Continue lendo