Consulta las centrales de abastos desde tus propios recursos, reacciona a los cambios de stock y a las cestas sin pagar, y ejecuta tu código cuando se cobra una partida. Todo es de servidor. Cuxial Abastecimiento no tiene exports de cliente.
Los exports del mercado solo ven las centrales activas. Las incluidas vienen desactivadas, así que GetCentrals() devuelve una lista vacía hasta que el staff active alguna en el editor.
Exports de servidor
GetCentrals
Lista las centrales activas.
exports.cuxial_supply:GetCentrals()Devuelve: { id: string, label: string, area: 'city'|'county' }[].
GetProducts
Lista todos los productos activos.
exports.cuxial_supply:GetProducts()Devuelve: { id, label, category, unit, item, units, origin }[]. item es el ítem del inventario y units las unidades por caja.
GetStock
Devuelve las cajas de un producto que guarda una central.
exports.cuxial_supply:GetStock(central, product)| Parámetro | Tipo | Descripción |
|---|---|---|
central | string | Id de la central. |
product | string | Id del producto. |
Devuelve: number, o nil si la central no guarda ese producto o no está lista.
GetPrice
Devuelve los precios actuales de una caja.
exports.cuxial_supply:GetPrice(central, product)Devuelve: { buy, sell, wholesale, retail }, o nil. buy es lo que paga la central por una caja ahora, sell lo que cobra, wholesale y retail los precios en su terminal para los trabajos mayoristas y en las tiendas.
GetPrices
Devuelve los precios y el stock de todos los productos de una central.
exports.cuxial_supply:GetPrices(central)Devuelve: table<string, { buy, sell, wholesale, retail, stock, cap }> por id de producto, o nil.
local prices = exports.cuxial_supply:GetPrices('paleto')
if prices and prices.eggs then
print(('Huevos: %d cajas, se pagan a $%d'):format(prices.eggs.stock, prices.eggs.buy))
endPurchase
Saca cajas del stock de una central a su precio de venta, caja a caja, y registra la venta. No cobra al jugador ni da ítems: eso lo hace tu recurso con el coste que devuelve.
exports.cuxial_supply:Purchase(central, product, amount, meta)| Parámetro | Tipo | Descripción |
|---|---|---|
central | string | Id de la central. |
product | string | Id del producto. |
amount | number | Cajas, de 1 a 10000. |
meta | table? | { citizenid, name } opcional que se escribe en el libro de movimientos. |
Devuelve: true, coste si sale bien, o false, motivo ('payload', 'error_not_ready', 'error_stock').
local ok, cost = exports.cuxial_supply:Purchase('paleto', 'flour', 2, { citizenid = cid, name = name })
if ok then
-- cobra `cost` al comprador y entrégale la mercancía
endAddStock
Añade cajas a una central, hasta su tope.
exports.cuxial_supply:AddStock(central, product, amount, reason)| Parámetro | Tipo | Descripción |
|---|---|---|
central | string | Id de la central. |
product | string | Id del producto. |
amount | number | Cajas, de 1 a 100000. |
reason | string? | Texto que se escribe en el libro de movimientos. |
Devuelve: true, stock con el stock nuevo, o false, motivo.
Eventos de servidor
Eventos locales de servidor, que se escuchan con AddEventHandler.
cuxial_supply:server:StockChanged
Se lanza cada vez que cambia el stock de un producto en una central.
| Parámetro | Tipo | Descripción |
|---|---|---|
central | string | Id de la central. |
product | string | Id del producto. |
stock | number | Stock nuevo. |
delta | number | Cambio, positivo o negativo. |
reason | string | 'deliver', 'purchase', 'admin', 'add', 'consume' o 'restock'. |
AddEventHandler('cuxial_supply:server:StockChanged', function(central, product, stock, delta, reason)
if stock == 0 then
print(('%s se ha quedado sin %s'):format(central, product))
end
end)cuxial_supply:server:BasketUnpaid
Se lanza cuando un cliente sale de un supermercado con la cesta sin pagar.
| Parámetro | Tipo | Descripción |
|---|---|---|
src | number | Id de servidor del jugador. |
store | string | Id del supermercado. |
data.units | number | Unidades de la cesta. |
data.total | number | Valor de la cesta. |
data.lost | number | Unidades que no pudieron volver a una balda. |
data.restocked | boolean | Si los productos se devolvieron a las baldas. |
AddEventHandler('cuxial_supply:server:BasketUnpaid', function(src, store, data)
-- manda un aviso a la policía, sube el nivel de búsqueda...
end)Gancho: onFinish
server/hooks.lua es un archivo abierto. Su función onFinish se ejecuta una vez por cada miembro de la tripulación que cobra al terminar una partida. Escribe tu código dentro.
function CuxialSupply.hooks.onFinish(src, data)
-- tu código
end| Parámetro | Tipo | Descripción |
|---|---|---|
src | number | Id de servidor del jugador que ha cobrado. |
data.runId | number | Id de la partida en cuxial_jobs_runs. 0 si no se pudo guardar. |
data.region | number | id de la línea en data/regions.lua. |
data.score | number | Tareas hechas por este jugador. |
data.money | number | Dinero pagado a este jugador. |
data.xp | number | XP dada a este jugador. |
data.owner | string | Identificador de personaje del dueño de la tripulación. |
Un error dentro del gancho se captura y se muestra en la consola del servidor. El pago no se ve afectado.
Base de datos
Las consultas de solo lectura son seguras en estas tablas. Las filas de este trabajo en las tablas cuxial_jobs_* tienen job = 'supply'.
| Tabla | Contenido |
|---|---|
cuxial_jobs_players | Una fila por personaje: level, xp, progreso diario. |
cuxial_jobs_runs | Partidas terminadas: region, owner, crew_size, outcome, hora de inicio y de fin. |
cuxial_jobs_run_members | Qué hizo y qué ganó cada miembro en una partida. |
cuxial_supply_stock | Stock por central y producto. |
cuxial_supply_ledger | Libro de entregas, compras y cambios de stock. |
cuxial_supply_history | Historial de precios de las centrales. |
