Comandos#
Shops Creator mantiene sus comandos al mínimo: las tiendas se construyen en el creador, y los jugadores llegan a cada tienda caminando hasta ella. Los comandos de abajo son todos los que hay.
Comando | Dónde | Descripción |
|---|---|---|
| En el juego | Abre el creador de tiendas. Solo administradores y los trabajos de |
| En el juego, solo en debug | Te da diez pilas aleatorias de los ítems que compra una tienda de venta, para que puedas probar la venta sin recolectarlos. Solo se registra mientras |
No hay ningún comando de jugador para abrir una tienda o su menú de jefe: ambos se abren en la propia tienda, con E o tu target. El punto del menú de jefe se coloca desde el creador, en el panel Ownership de la tienda.
Exports del servidor#
Para mover el stock de una tienda desde otro recurso — un trabajo de reparto que repone el 24/7, un atraco que vacía el Ammu-Nation, un script de cultivo que llena un mercado. Cada export funciona en los dos tipos de tienda: en una tienda cambia el stock del ítem; en una tienda de venta cambia cuántas unidades más va a comprar la tienda (su cantidad máxima).
shopId es el id de la tienda en la tabla qs_shops — las 29 tiendas predefinidas van de 1 a 29. Pásalo como número (1), no como string ('1'). Un stock de -1 significa ilimitado.
AddItemStock
Añade unidades a un ítem. En un ítem ilimitado no hace nada y aun así tiene éxito.
local ok, err = exports['qs-shops-creator']:AddItemStock(shopId, 'water', 10)
if not ok then
print('Restock failed:', err)
endamount debe ser un número entero mayor que cero. Todos los jugadores ven el nuevo stock al instante, y se guarda en la base de datos.
RemoveItemStock
Quita unidades de un ítem. El stock nunca baja de cero — quitar más de las que hay lo deja en 0.
local ok, err = exports['qs-shops-creator']:RemoveItemStock(shopId, 'water', 5)No se puede reducir un ítem ilimitado y devuelve false, 'unlimited_quantity'.
SetItemStock
Sobrescribe el stock de un ítem con un valor exacto. Pasa -1 para que sea ilimitado, o 0 para agotarlo.
local ok, err = exports['qs-shops-creator']:SetItemStock(shopId, 'water', 100)
exports['qs-shops-creator']:SetItemStock(shopId, 'bread', -1) -- unlimitedGetItemStock
Lee el stock actual de un ítem: un número, -1 si es ilimitado, o nil cuando la tienda o el ítem no existen.
local qty = exports['qs-shops-creator']:GetItemStock(shopId, 'water')
if qty == nil then
print('That shop does not sell water')
elseif qty == -1 or qty > 0 then
print('In stock')
endQué significan los errores#
AddItemStock, RemoveItemStock y SetItemStock devuelven true si tienen éxito, o false y una de estas claves:
Clave | Significado |
|---|---|
| Ninguna tienda tiene ese id. |
| El nombre del ítem está vacío o no es un string. |
| La tienda no incluye ese ítem. Añádelo primero en el creador — los exports cambian el stock, no añaden productos. |
| La tienda todavía no tiene ninguna lista de ítems. |
|
|
|
|
|
|
| El stock guardado para ese ítem está corrupto. Vuelve a guardar el ítem en el creador. |
Un ejemplo completo#
Un trabajo de reparto que repone una tienda cuando el conductor entrega la caja, y se niega cuando la tienda ya está llena:
-- server.lua of your delivery resource
local SHOP_ID = 1 -- 24/7 Supermarket
local MAX_STOCK = 200
RegisterNetEvent('delivery:dropOff', function(item, amount)
local src = source
local current = exports['qs-shops-creator']:GetItemStock(SHOP_ID, item)
if current == nil then
return print(('Shop %s does not sell %s'):format(SHOP_ID, item))
end
if current == -1 or current >= MAX_STOCK then
return TriggerClientEvent('ox_lib:notify', src, { type = 'error', description = 'The shop is full' })
end
local toAdd = math.min(amount, MAX_STOCK - current)
local ok, err = exports['qs-shops-creator']:AddItemStock(SHOP_ID, item, toAdd)
if ok then
TriggerClientEvent('ox_lib:notify', src, { type = 'success', description = ('Delivered %s x%d'):format(item, toAdd) })
else
print('AddItemStock failed:', err)
end
end)Funciones personalizables#
En lugar de exports, los hooks del lado del cliente que un dueño de servidor suele querer cambiar son funciones normales en custom/client.lua, fuera del código cifrado:
Función | Qué poner en ella |
|---|---|
| Tu recurso de notificaciones. |
| Tu interfaz de texto, si no usas ni |
| Tu barra de progreso. Debe devolver |
| Oculta y muestra tu HUD mientras hay una tienda o un menú abierto. |
En el servidor, Notification(source, msg, type) en custom/server.lua envía cada mensaje a la función de cliente de arriba.



