ai-vehiclekeys para desarrolladores
Los exports de servidor de ai-vehiclekeys, la API de qbx_vehiclekeys a la que responde y sus eventos.
Para dar, quitar o comprobar llaves desde tu propio script, usa vehicleKeys.give(source, vehicle, purpose), vehicleKeys.remove y vehicleKeys.has de la lib (servidor). Pasan por la capa de llaves de ai-core y funcionan con el script de llaves que use el servidor. Los exports de abajo son los que llama esa capa mientras ai-vehiclekeys es el sistema de llaves activo.
Todos los exports están en el servidor, son síncronos y responden bajo ai-vehiclekeys y qbx_vehiclekeys. Un vehículo es un handle de entidad de servidor (número) o una matrícula (texto). Las matrículas se comparan normalizadas (no importan los espacios ni las mayúsculas).
import { resourceExport, callExport } from "@aicore-fivem/lib/server";
const keys = resourceExport("ai-vehiclekeys"); // tipados: HasKeys, GiveKeys, RemoveKeys
// SetLockState e IsPlayerNearVehicle no están tipados: callExport("ai-vehiclekeys", "SetLockState", vehicle, "lock")Exports de servidor
HasKeys
Si un jugador tiene la llave de un vehículo: como dueño, como miembro del trabajo o banda propietarios, o mediante una llave dada en esta sesión.
Lado: Servidor · Espera: no
HasKeys(source: number, vehicle: number | string): booleanlocal has = exports['ai-vehiclekeys']:HasKeys(source, vehicle)Parámetros
Prop
Type
Devuelve
true cuando el jugador tiene la llave. false en otro caso, también para una entidad que no existe.
Ejemplo
import { resourceExport } from "@aicore-fivem/lib/server";
const keys = resourceExport("ai-vehiclekeys");
onNet("myscript:openTrunk", (netId: number) => {
const source = globalThis.source;
const vehicle = NetworkGetEntityFromNetworkId(netId);
if (!keys.HasKeys(source, vehicle)) return;
// ... abrir el maletero
});GiveKeys
Da a un jugador una llave para esta sesión. El jugador la conserva hasta que sale del servidor o cambia de personaje. Dar una llave que el jugador ya tiene no hace nada.
Lado: Servidor · Espera: no
GiveKeys(source: number, vehicle: number | string): voidexports['ai-vehiclekeys']:GiveKeys(source, vehicle)Parámetros
Prop
Type
Devuelve
Nada. Si el jugador está sentado en ese vehículo ahora mismo, se avisa a su cliente (ai-vehiclekeys:client:granted): termina el bloqueo del motor y el motor arranca.
RemoveKeys
Quita a un jugador una llave de sesión. Las llaves por propiedad (dueño, flota de trabajo o banda) no se pueden quitar: siguen al dueño del vehículo.
Lado: Servidor · Espera: no
RemoveKeys(source: number, vehicle: number | string): voidexports['ai-vehiclekeys']:RemoveKeys(source, vehicle)Devuelve
Nada.
SetLockState
Cierra o abre un vehículo en el servidor, sin comprobar llaves.
Lado: Servidor · Espera: no
SetLockState(vehicle: number, state: "lock" | "unlock" | boolean | number): voidexports['ai-vehiclekeys']:SetLockState(vehicle, 'lock')Parámetros
Prop
Type
Devuelve
Nada. Una entidad que no existe no hace nada.
IsPlayerNearVehicle
Si un jugador está a menos de 5 m de un vehículo.
Lado: Servidor · Espera: no
IsPlayerNearVehicle(source: number, vehicle: number): booleanlocal near = exports['ai-vehiclekeys']:IsPlayerNearVehicle(source, vehicle)Devuelve
true a menos de 5 m. false si está más lejos, o cuando alguno de los argumentos no es un número.
Eventos
Los eventos propios de ai-vehiclekeys son internos (callbacks de cliente entre su cliente y su servidor). No los llames desde otros scripts.
| Nombre | Tipo | Qué hace |
|---|---|---|
ai-vehiclekeys:check | callback de cliente | (netId) -> boolean: si el jugador tiene una llave, se pregunta cuando ocupa un asiento. |
ai-vehiclekeys:toggleLock | callback de cliente | (netId) -> { ok, locked? }: la tecla de cierre. |
ai-vehiclekeys:giveNearest | callback de cliente | (netId) -> { ok }: dar las llaves al jugador más cercano. |
ai-vehiclekeys:client:granted | servidor a cliente | (netId): llegó una llave estando sentado en ese vehículo; el motor puede arrancar. |
Objeto usable
lockpick se registra como objeto usable a través de la capa de inventario de ai-core. El objeto solo se gasta cuando se rompe.