Cómo funcionan las integraciones#
Vehicle Keys llega a tu framework y a tu inventario a través de pequeños archivos puente, elegidos al iniciar según lo que ya está en ejecución. Nada más en el script nombra un framework, así que las mismas funciones funcionan en cualquier lugar donde exista un puente.
Capa | Compatibles | Sin ella |
|---|---|---|
Framework |
| Standalone: las llaves solo funcionan con ox_inventory y no hay vehículos con propietario — sin acceso del propietario, recuperación, lista de administración, cambios de matrícula guardados ni tienda de copias de pago. |
Inventario |
| No se pueden guardar llaves. La única capa que no puedes omitir. |
Target |
| Avisos y una tecla. Los rastreadores GPS no se pueden quitar. |
Avisos de texto |
| ox_lib, que de todos modos es una dependencia. |
Dispatch |
| Los trabajos policiales reciben una notificación y un blip intermitente. |
Sonidos |
| Solo los sonidos de puertas propios de GTA. |
Garajes |
| Los garajes entregan las llaves ellos mismos, con una sola llamada. |
Base de datos |
| Obligatoria. |
La detección solo ve los recursos que ya están iniciados. Todo lo que quieras que se detecte debe estar por encima de
ensure qs-vehiclekeysenserver.cfg.
Frameworks#
Qbox se detecta a partir de qbx_core y lo atiende el puente de QBCore, mediante la compatibilidad con qb-core que el propio Qbox proporciona.
ESX | QBCore · Qbox | Standalone | |
|---|---|---|---|
ID del jugador |
|
| El primer identificador del jugador |
Vehículos con propietario |
|
| Ninguno |
Administradores | Grupos | Permisos | El ace |
La tienda de copias cobra de |
|
| Nada — los servicios de pago se rechazan |
Trabajos | El trabajo de ESX | El trabajo de QBCore | Siempre |
Ítems usables |
|
| ox_inventory: |
Los scripts escritos para qb-vehiclekeys y qbx_vehiclekeys siguen funcionando gracias a una capa de compatibilidad siempre activa — Reemplazar otros scripts de llaves enumera cada evento y export que atiende.
Inventarios#
Cada llave, matrícula y rastreador es un ítem, y una llave solo vale lo que valen los metadatos que el inventario guarda en ella.
Inventario | Acceso mediante | Extra |
|---|---|---|
| Sus propios exports, directamente | Una matrícula creada sin número recibe uno al crearse. Los cambios de matrícula mueven los maleteros y guanteras de ox. Las matrículas, el GPS y los rastreadores se usan a través de |
| Las funciones de ítems del framework | Los cambios de matrícula mueven los maleteros y guanteras de qs-inventory. |
| Las funciones de ítems del framework | — |
El inventario predeterminado de ESX | — | No compatible: no guarda metadatos de ítems. |
En ox_inventory el script registra seis exports de cliente para client.export: useKey, useLockpick, useAdvancedLockpick, usePlate, useGps y useTracker. Ítems de inventario muestra qué necesita cada ítem.
Target#
Config.UseTarget = true activa las opciones de target mediante ox_target o qb-target, el que esté en ejecución:
Dónde | Opción | También necesita |
|---|---|---|
Tienda de copias | Open key copy menu |
|
Coche más cercano | Run vehicle diagnostic · Measure window tint |
|
Coches rastreados | Remove GPS tracker |
|
Sin target, la tienda de copias y el empleado de recuperación muestran un aviso y se abren con E, y la tableta de diagnóstico tiene /diagnostic. Quitar un rastreador no tiene alternativa — necesita ox_target.
Avisos de texto y notificaciones#
Config.TextUI elige cómo se dibujan los avisos — la pista para hacer un puente, el Press E del empleado —:
Valor | Aspecto |
|---|---|
| La interfaz de texto de ox_lib a la izquierda de la pantalla. La predeterminada. |
| El texto 3D de Quasar. Recurre a |
| Texto simple de GTA flotando sobre el punto. |
Las notificaciones pasan por ox_lib, con el título Vehicle Keys. Cada mensaje pasa por una única función en custom/client.lua — cámbiala para usar otro sistema:
-- custom/client.lua
function Notification(msg, kind) -- kind: 'info' | 'success' | 'error'
exports['okokNotify']:Alert('Vehicle Keys', msg, 5000, kind)
endDispatch policial#
Cuando un puente, una ganzúa o un robo activa su DispatchChance, la alerta sale a través de Config.Dispatch:
Valor | Qué ocurre |
|---|---|
| Cada jugador con un trabajo en |
| Una llamada de dispatch a los trabajos policiales, con el código, el texto y el blip de |
| Lanza el evento de servidor |
| Una alerta de origen_police a los trabajos policiales, de tipo |
Config.Dispatch = 'default' -- default | qs-dispatch | qs-smartphone | origen
Config.DispatchSettings = {
Default = {
Blip = { Sprite = 161, Colour = 1, Scale = 1.2, DurationMs = 20000 }
},
QsDispatch = {
Code = '10-42',
Snippet = 'Vehicle Theft',
Blip = { Sprite = 490, Scale = 1.5, Colour = 1, DurationMs = 3 * 60 * 1000 }
},
Origen = {
Type = 'GENERAL'
}
}¿Otro sistema de dispatch? server/custom/dispatch/main.lua es abierto: añade una rama a DispatchVehicleKeys que llame a tu recurso con el título, el mensaje y las coordenadas que recibe, y ajusta Config.Dispatch al nombre que elegiste.
Sonidos#
El pitido del mando y el ancla se reproducen mediante interact-sound, así que los archivos están en ese recurso, no en este. Colócalos en la carpeta client/html/sounds/ de interact-sound, con estos nombres:
Archivo | Se reproduce cuando |
|---|---|
| Se bloquea o desbloquea un coche. El nombre viene de |
| Se baja el ancla. |
| Se sube el ancla. |
Sin interact-sound, los sonidos de puertas propios de GTA siguen sonando — a menos que Config.SoundsDisableDefault los silencie.
Garajes, concesionarios y trabajos#
Un coche que otro script genera para un jugador — desde un garaje, en un concesionario, desde un depósito de trabajo — necesita que ese script le entregue su llave. Una sola llamada lo hace, en cualquiera de los dos lados:
-- after spawning the car for this player
local plate = GetVehicleNumberPlateText(vehicle)
exports['qs-vehiclekeys']:GiveServerKeys(source, plate, 'sultan', false)
-- a job van returned
exports['qs-vehiclekeys']:RemoveServerKeys(source, plate, 'sultan')local plate = GetVehicleNumberPlateText(vehicle)
local model = GetDisplayNameFromVehicleModel(GetEntityModel(vehicle))
exports['qs-vehiclekeys']:GiveKeys(plate, model, false)
-- a job van returned
exports['qs-vehiclekeys']:RemoveKeys(plate, model)El último argumento, false, omite la llave cuando el jugador ya tiene una para esa matrícula — saca el coche cada día y el inventario seguirá teniendo una sola llave. El export de cliente también permite al jugador conducir de inmediato, sin esperar a que llegue el ítem, para que a nadie se le pida hacer un puente a un coche que le acaban de dar.
Cambios de matrícula#
Cuando se cambia una matrícula, Vehicle Keys actualiza qs-advancedgarages por sí mismo y luego lanza un evento de servidor que cualquier otro script puede escuchar:
AddEventHandler('vehiclekeys:server:plateChanged', function(oldPlate, newPlate)
-- update your own tables here
end)Estado del bloqueo#
El servidor recuerda el último estado de bloqueo de cada coche por matrícula. Un garaje que vuelve a sacar un coche puede restaurarlo:
local state = lib.callback.await('vehiclekeys:server:getVehicleLockStateByPlate', false, plate)
if state then
SetVehicleDoorsLocked(vehicle, state)
endEditar los puentes#
Estas partes vienen abiertas, así que puedes cambiar cómo se comunica el script con el resto de tu servidor:
Ruta | Contiene |
|---|---|
| Todos los ajustes. |
| Todos los textos, en 41 idiomas. |
| Los puentes de framework: jugadores, trabajos, ítems, administradores, vehículos con propietario y matrículas. |
| Notificaciones, avisos de texto y el menú de interacción |
| El blip de dispatch, los exports de ítems de ox_inventory y las zonas de target. |
| Los proveedores de dispatch. |
| La lista de funciones que completa un puente de framework. |
Un puente de servidor proporciona estas funciones. Para admitir un framework propio, añádelo a la tabla frameworks al principio de config/main.lua, apuntando a un nombre de carpeta, luego copia el puente más parecido en custom/<that name>/ y cambia las llamadas de dentro.
Funciones | Se usa para |
|---|---|
| Quién es el jugador, su trabajo y si es staff. |
| Llaves, ganzúas, matrículas y rastreadores. |
| Acceso del propietario, recuperación de llaves y limpieza de llaves. |
| Cambios de matrícula y nuevos números de matrícula. |
| El panel de administración. |
Idiomas#
Se incluyen 41 traducciones en locales/: árabe (ar), búlgaro (bg), bengalí (bn), catalán (ca), checo (cs), danés (da), alemán (de), griego (el), inglés (en), español (es), estonio (et), persa (fa), finés (fi), francés (fr), hebreo (he), hindi (hi), croata (hr), húngaro (hu), indonesio (id), italiano (it), japonés (ja), coreano (ko), lituano (lt), letón (lv), malayo (ms), neerlandés (nl), noruego (no), polaco (pl), portugués (pt), rumano (ro), ruso (ru), eslovaco (sk), esloveno (sl), sueco (sv), suajili (sw), tailandés (th), turco (tr), ucraniano (uk), urdu (ur), vietnamita (vi) y chino (zh).
Ajusta Config.Locale al código. Para añadir un idioma, copia en.json con el nuevo código, tradúcelo y ajusta el locale — todo lo que falte recurre al inglés, y la interfaz usa el mismo archivo.



