Da y comprueba llaves de vehículo, abre un garaje de casa, incauta un vehículo o inicia una limpieza desde tus propios recursos. Los recursos escritos para qbx_vehiclekeys no necesitan cambios.
Los exports de llaves solo existen con enabled = true en data/keys.lua, y los de limpieza solo con enabled = true en data/carwipe.lua.
Exports de servidor
GiveKeys
Da a un jugador la llave de una matrícula. No hace nada si el jugador ya la tiene.
exports.cuxial_garages:GiveKeys(source, plate)| Parámetro | Tipo | Descripción |
|---|---|---|
source | number | Id de servidor del jugador. |
plate | string | Matrícula del vehículo. Se ignoran los espacios de los extremos y se pasa a mayúsculas. |
Devuelve: boolean. true cuando el jugador acaba con la llave.
exports.cuxial_garages:GiveKeys(source, 'ABC12345')HasKeys
Indica si un jugador lleva la llave de una matrícula.
local has = exports.cuxial_garages:HasKeys(source, plate)| Parámetro | Tipo | Descripción |
|---|---|---|
source | number | Id de servidor del jugador. |
plate | string | Matrícula del vehículo. |
Devuelve: boolean.
if not exports.cuxial_garages:HasKeys(source, plate) then return endRemoveKeys
Retira del inventario del jugador todas las llaves de esa matrícula.
exports.cuxial_garages:RemoveKeys(source, plate)| Parámetro | Tipo | Descripción |
|---|---|---|
source | number | Id de servidor del jugador. |
plate | string | Matrícula del vehículo. |
Devuelve: boolean. true cuando se ha retirado al menos una llave.
exports.cuxial_garages:RemoveKeys(source, plate)ImpoundStoredVehicle
Envía un vehículo al depósito a partir de su id en la base de datos, sin agente. Pensado para vehículos guardados: no retira un vehículo que esté fuera, en el mundo.
local result = exports.cuxial_garages:ImpoundStoredVehicle(data)| Parámetro | Tipo | Descripción |
|---|---|---|
data.id | number | Id del vehículo en la tabla de vehículos. Obligatorio. |
data.cost | number | Tasa para retirarlo. Por defecto defaultPrice de data/impound.lua. |
data.reason | string | Motivo que ve el dueño. Hasta 255 caracteres. |
data.sentBy | string | Nombre que aparece como quien lo incautó. Hasta 100 caracteres. |
data.job | string | Trabajo que queda registrado como origen de la incautación. |
data.depot | string | Id del depósito que lo retiene. Sin él, el vehículo se puede retirar en cualquier depósito. |
data.fromState | number | Estado en el que debe estar el vehículo. Por defecto guardado (1). |
Devuelve: table. Si sale bien, { ok = true, cost, depot, depotLabel }. Si falla, { ok = false, reason }, donde reason es 'bad_request', 'no_vehicle' o 'not_stored'.
local result = exports.cuxial_garages:ImpoundStoredVehicle({
id = vehicleId,
cost = 2500,
reason = 'Embargado por orden judicial',
sentBy = 'Departamento de Justicia',
job = 'police',
})
if result.ok then print('Incautado por $' .. result.cost) endGetVehicleMdtInfo
Devuelve el apodo y la ficha de incautación de una matrícula. Pensado para tablets policiales.
local info = exports.cuxial_garages:GetVehicleMdtInfo(plate)| Parámetro | Tipo | Descripción |
|---|---|---|
plate | string | Matrícula de un vehículo con dueño. |
Devuelve: table, o nil cuando la matrícula no tiene dueño.
| Campo | Tipo | Descripción |
|---|---|---|
nickname | string | nil | Apodo puesto por el dueño. |
impound | table | nil | nil cuando el vehículo no está incautado. Si lo está: depot, cost, reason, selfRetrievable, sentBy, authorizedBy y date (tiempo Unix). |
local info = exports.cuxial_garages:GetVehicleMdtInfo('ABC12345')
if info and info.impound then
print(('Incautado por %s: %s'):format(info.impound.sentBy, info.impound.reason or '-'))
endStartCarWipe
Inicia una limpieza de vehículos tras una cuenta atrás que ven todos los jugadores.
local ok, message = exports.cuxial_garages:StartCarWipe(seconds)| Parámetro | Tipo | Descripción |
|---|---|---|
seconds | number | Cuenta atrás en segundos. Opcional; por defecto countdown de data/carwipe.lua. |
Devuelve: boolean, string. false cuando ya hay una limpieza en curso. El texto es el mensaje a mostrar.
local ok, message = exports.cuxial_garages:StartCarWipe(90)
print(message)CancelCarWipe
Cancela la limpieza en curso.
local ok, message = exports.cuxial_garages:CancelCarWipe()Devuelve: boolean, string. false cuando no hay ninguna limpieza en curso.
IsWipeInProgress
Indica si hay una cuenta atrás de limpieza en marcha.
local running = exports.cuxial_garages:IsWipeInProgress()Devuelve: boolean.
Exports de cliente
GiveKeys
Pide al servidor la llave de una matrícula para el jugador local. El servidor solo la concede cuando el jugador es dueño del vehículo o la matrícula no tiene dueño.
exports.cuxial_garages:GiveKeys(plate, vehicleEntity)| Parámetro | Tipo | Descripción |
|---|---|---|
plate | string | Matrícula del vehículo. |
vehicleEntity | number | Handle del vehículo. Opcional. Si se indica, el jugador puede usar ese vehículo al momento, sin esperar al ítem. Úsalo con vehículos que generes tú, como pruebas de conducción. |
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
exports.cuxial_garages:GiveKeys(GetVehicleNumberPlateText(vehicle), vehicle)HasKeys
Indica si el jugador local lleva la llave de una matrícula. Consulta al servidor, así que llámalo desde un hilo.
local has = exports.cuxial_garages:HasKeys(plate)Devuelve: boolean.
RemoveKeys
Retira al jugador local la llave de una matrícula.
exports.cuxial_garages:RemoveKeys(plate)IsVehicleAccessible
Indica si el jugador local puede usar un vehículo: con su llave, o por las llaves compartidas de su trabajo. Consulta al servidor, así que llámalo desde un hilo.
local allowed = exports.cuxial_garages:IsVehicleAccessible(vehicle)| Parámetro | Tipo | Descripción |
|---|---|---|
vehicle | number | Handle del vehículo. |
Devuelve: boolean.
if not exports.cuxial_garages:IsVehicleAccessible(cache.vehicle) then return endOpenGarage
Abre un garaje de casa en una posición que da tu recurso de propiedades. El garaje no se guarda en la base de datos ni dibuja marcador: tu recurso gestiona el punto de interacción.
exports.cuxial_garages:OpenGarage(id, opts)| Parámetro | Tipo | Descripción |
|---|---|---|
id | string | Id único del garaje, hasta 64 caracteres. Los vehículos guardados ahí quedan ligados a este id. |
opts.coords | vector4 | Posición de acceso, que también se usa como plaza cuando no se dan spawns. Obligatorio. |
opts.category | string | 'car', 'motorcycle', 'air' o 'sea'. Opcional; por defecto todas las categorías. |
opts.label | string | Nombre que se ve en la interfaz. Opcional, hasta 48 caracteres. |
opts.capacity | number | Vehículos por jugador, de 1 a 100. Opcional. Solo se aplica con capacity.enabled = true. |
opts.spawns | table[] | Plazas como { x, y, z, h }. Opcional, hasta 16, cada una a menos de 30 metros de coords. |
exports.cuxial_garages:OpenGarage('house:' .. property.id, {
coords = vector4(x, y, z, heading),
category = 'car',
label = 'Garaje de casa',
capacity = 4,
})StoreVehicle
Guarda en un garaje de casa el vehículo que conduce el jugador local. No hace nada si el jugador no es el conductor.
exports.cuxial_garages:StoreVehicle(id, opts)| Parámetro | Tipo | Descripción |
|---|---|---|
id | string | Id del garaje, el mismo que se usa con OpenGarage. |
opts | table | Opcional. Los mismos campos que OpenGarage. Sin coords, se usa la posición del jugador. |
exports.cuxial_garages:StoreVehicle('house:' .. property.id, { category = 'car' })OpenGarage y StoreVehicle solo funcionan con externalGarages = true en shared/config.lua. El servidor comprueba además que el jugador esté a menos de interactDistance (8 metros por defecto) de coords, y acepta hasta 25 garajes de casa por jugador y sesión.
OpenImpound
Abre el formulario de incautación del vehículo más cercano al jugador local, igual que /impound. El jugador sigue necesitando un trabajo con permiso para incautar.
exports.cuxial_garages:OpenImpound()Compatibilidad con qbx_vehiclekeys
Cuxial Garages responde a estas llamadas con el nombre de qbx_vehiclekeys, así que los recursos que las usan siguen funcionando:
| Llamada | Comportamiento |
|---|---|
exports.qbx_vehiclekeys:GiveKeys(source, vehicle) | Servidor. vehicle es un handle de vehículo o una matrícula. |
exports.qbx_vehiclekeys:HasKeys(source, plate) | Servidor. Igual que HasKeys de arriba. |
exports.qbx_vehiclekeys:RemoveKeys(source, plate) | Servidor. Igual que RemoveKeys de arriba. |
lib.callback('qbx_vehiclekeys:server:giveKeys', false, cb, netId) | Se llama desde el cliente. Concede la llave de ese vehículo cuando el jugador es su dueño o no tiene dueño. |
exports.qbx_vehiclekeys:GiveKeys(source, vehicle)State bags
| State bag | En | Significado |
|---|---|---|
vehicleid | Vehículo | Id en la base de datos de un vehículo con dueño entregado por un garaje. Los vehículos que no lo tienen cuentan como sin dueño. |
doorslockstate | Vehículo | Estado de bloqueo de puertas que pone el sistema de llaves. Por encima de 1 = cerrado. |
ignoreLocks | Vehículo | Ponlo a true desde tu recurso para dejar un vehículo fuera del sistema de cierre. |
rentalcode | Vehículo | Código de ticket de un vehículo alquilado. |
Entity(vehicle).state:set('ignoreLocks', true, true)Eventos
Cuxial Garages no expone eventos públicos. Usa los exports de arriba.
Integraciones propias
Tres opciones apuntan a un recurso por su nombre. Para usar tu propio recurso en lugar del de por defecto, debe ofrecer estos exports de servidor:
| Opción | Exports que debe ofrecer tu recurso |
|---|---|
dispatch.resource en data/keys.lua | SendDispatchAlert(data) |
license.resource en data/rental.lua | GetAvailableCards() devuelve una lista de { type, label }. GetPlayerLicenses(citizenid) devuelve una lista de { type }. |
finance.resource en shared/config.lua | getPlayerFinancedVehicles(citizenid), getFinanceByPlate(plate) y makeFinancePayment(source, plate) |
El aviso de robo que recibe SendDispatchAlert:
{
title = 'Robo de vehículo', -- texto traducido
type = 'vehicle',
code = '10-72',
coords = { x = 0.0, y = 0.0, z = 0.0 },
vehicle = { plate = 'ABC12345' },
central = true,
}