Tiendas en ox_inventory: data/shops.lua, RegisterShop y blips
Cómo crear una tienda en ox_inventory: la entrada en data/shops.lua, precios y moneda, ubicaciones y objetivos, tiendas bloqueadas por trabajo, RegisterShop desde otro recurso, y blips.
Una tienda en ox_inventory es una lista de items con precios, y uno o más lugares donde los jugadores pueden abrirla. Puedes editar un archivo, o registrar la tienda desde tu propio recurso. Este artículo cubre ambos, más precios, monedas, restricciones de trabajo, ox_target y blips.
La entrada de tienda en data/shops.lua
Abre ox_inventory/data/shops.lua. Cada tienda es una tabla con clave su tipo de tienda:
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),
},
},
}La clave (General) es el tipo de tienda. Los campos:
| Campo | Significado |
|---|---|
name |
Título mostrado en la parte superior de la tienda |
inventory |
Los items a la venta |
locations |
Coordenadas donde los jugadores pueden abrir la tienda |
targets |
Misma idea, pero con cajas de ox_target (véase a continuación) |
groups |
Trabajos permitidos para usar la tienda |
blip |
Configuración del blip del mapa |
Verifica las entradas predeterminadas en tu copia del archivo: muestran los campos exactos que tu versión soporta, y la mejor manera de comenzar es copiar uno y cambiarlo.
Cuidado: cada nombre de item en
inventorydebe existir endata/items.lua. Una tienda que lista un item faltante puede no abrir o imprimir errores. Véase adding items to ox_inventory.
Items, precios y moneda
Cada línea de inventory es una pequeña tabla:
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' },
},pricees lo que cuesta una unidad.countes el stock. Sin él el item es ilimitado, y con él el stock baja según los jugadores compran.currencyes el item que lo paga. Por defecto es dinero, yblack_moneyes una alternativa común.licensepide un item de licencia antes de que el jugador pueda comprar.graderestringe un item a un grado de trabajo mínimo, cuando la tienda usagroups.
Abriendo: ubicaciones y objetivos
Con locations, ox_inventory muestra una interacción en esas coordenadas. Con targets, crea cajas de ox_target en su lugar, que es mejor para un mostrador o una ventana:
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 debe estar ejecutándose para que esto funcione, ya que la tienda depende de él. Si solo quieres una de las dos formas, elimina la otra tabla.
Tiendas bloqueadas por trabajo y blips
Restringe una tienda a un trabajo con groups, usando nombres de trabajo y grados 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 un blip del mapa, añade una tabla blip a la tienda:
blip = { id = 59, colour = 69, scale = 0.8 },id es el número de sprite y colour el número de color. Los números vienen de las listas de blips de GTA, y la misma idea se explica en creating blips in FiveM. Reinicia ox_inventory para aplicar cambios de archivo.
Registra una tienda desde otro recurso
Cuando una tienda es creada por tu propio script, por ejemplo por un negocio o un recurso de trabajo, no edites data/shops.lua. Registrala en el 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) toma la cadena de tipo y la misma tabla que en el archivo. Registrala cuando se inicia el recurso. Si ox_inventory se reinicia, tu recurso debe registrar la tienda de nuevo, así que registra en onServerResourceStart también para ox_inventory:
AddEventHandler('onServerResourceStart', function(resource)
if resource == 'ox_inventory' then
registerMyShops()
end
end)Abre una tienda desde el cliente
Si no quieres una ubicación o un objetivo en la tienda, o quieres abrirla desde tu propia interfaz, usa la exportación del cliente:
exports.ox_inventory:openInventory('shop', { type = 'General', id = 1 })type es la clave de tienda. id es la posición de la ubicación en la lista locations (o targets), comenzando en 1. Si una tienda tiene una ubicación, usa id = 1. Una tienda sin ubicaciones que fue registrada por código se abre con su tipo solamente, así que prueba tu versión si se necesita id.
Consejo: el servidor sigue verificando la tienda cuando la abres, así que un cliente no puede comprar desde una tienda de trabajo que no tiene trabajo para.
Crear tiendas sin editar código
Si configuras muchas tiendas, editar Lua se vuelve repetitivo. Shop Creator te permite crear tiendas en el juego.
Shop CreatorCrea una tienda en menos de un minuto — dueños, empleados, caja fuerte y atracos.desde 24,20 €Ver el script →
Lista de verificación
| Síntoma | Solución |
|---|---|
| La tienda no aparece | Reinicia ox_inventory después de editar data/shops.lua |
| La tienda se abre vacía o con errores | Un item en inventory falta en data/items.lua |
| No puedo interactuar con la tienda | Verifica locations o targets, y que ox_target se está ejecutando |
| Moneda incorrecta | Establece currency en la entrada del item |
| Tienda de trabajo abierta para todos | Añade groups = { job = grade } |
| Tienda registrada perdida después del reinicio | Llama a RegisterShop de nuevo cuando se inicia ox_inventory |
Respuestas rápidas
¿Dónde añado una tienda en ox_inventory?
En ox_inventory/data/shops.lua, como una nueva entrada con un nombre, una lista de inventory y una o más locations o targets. Reinicia ox_inventory después.
¿Puede una tienda tomar dinero negro en lugar de efectivo?
Sí. Establece currency = 'black_money' en la entrada del item, y la tienda cobra ese item en lugar del dinero predeterminado.
¿Cómo creo una tienda desde mi propio script?
Llama a exports.ox_inventory:RegisterShop(type, data) en el servidor, luego abrela desde el cliente con exports.ox_inventory:openInventory('shop', { type = type }).
