AI Core
Referencia de la APIAI Core: exports de servidor

Llaves de vehículos

Da, quita y comprueba llaves de vehículos a través del script de llaves que tenga el servidor.

Cada llamada de llaves pasa por ai-core, nunca por los exports propios de un script de llaves (ai-vehiclekeys incluido). ai-core la reenvía al sistema de llaves activo: el que elige el ajuste Key script (script de llaves) del panel, o el primero que esté en marcha. Cuando no hay ningún script de llaves en marcha, cada jugador cuenta como si tuviera todas las llaves.

Un vehículo se da como handle de entidad del servidor (el número que devuelve CreateVehicleServerSetter o spawnVehicle) o como texto de matrícula. Antes se recortan los espacios de la matrícula y se pasa a mayúsculas, así que " ab12cde " y "AB12CDE" son la misma llave.

Cada llave tiene un propósito que le dice al sistema de llaves por qué la recibe el jugador. Algunos sistemas de llaves los tratan de forma distinta (un vehículo comprado recibe un objeto de llave nuevo, un vehículo de trabajo una llave fija en el contacto). Consulta KeyPurpose.

PropósitoCuándo
purchaseEl jugador ahora es dueño del vehículo (concesionario, entrega de un admin): una llave nueva, las copias anteriores dejan de funcionar.
garageUn vehículo en propiedad que sale del almacén: el dueño ya tiene la llave.
jobUn vehículo de trabajo para el turno.
rentalUn vehículo alquilado durante el tiempo de alquiler.
temporaryCualquier otra cosa de corta duración (aparición por un admin, prueba de conducción, vehículo de un robo). El valor por defecto.

GiveVehicleKeys

Da a un jugador las llaves de un vehículo.

Lado: Servidor · Espera: no · Lib: vehicleKeys.give (y spawnVehicle({ keysTo, purpose }) las da por ti)

Firma
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): void
Lua
exports['ai-core']:GiveVehicleKeys(source, vehicle, 'rental')

Parámetros

Prop

Type

Devuelve

Nada. La llamada no hace nada cuando la entidad del vehículo no existe, la matrícula está vacía, source no es un número o no hay ningún sistema de llaves en marcha. Un error del sistema de llaves queda en el log, no se lanza.

Ejemplo

import { onClientCallback, resourceExport, spawnVehicle } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";

const core = resourceExport("ai-core");
const SPAWN = { x: -1023.5, y: -2694.1, z: 13.9, heading: 150 };

onClientCallback("myscript:rentScooter", { lock: true }, async (source) => {
  if (!core.RemoveMoney(source, "cash", 100, "scooter_rental")) return fail("NOT_ENOUGH_MONEY");
  const vehicle = await spawnVehicle({ model: "faggio", coords: SPAWN, asker: source });
  if (!vehicle) {
    core.AddMoney(source, "cash", 100, "scooter_rental_refund");
    return fail("SPAWN_FAILED");
  }
  core.GiveVehicleKeys(source, vehicle, "rental");
  return { ok: true };
});

Un vehículo recién creado no tiene matrícula en el servidor hasta que el cliente de su dueño lo ha sincronizado. Pasa la entidad, no una matrícula que leas justo después de crearlo; el spawnVehicle de la lib espera a la matrícula y puede dar las llaves por sí mismo (keysTo, purpose).

RemoveVehicleKeys

Quita a un jugador las llaves de un vehículo.

Lado: Servidor · Espera: no · Lib: vehicleKeys.remove

Firma
RemoveVehicleKeys(source: number, vehicle: number | string): void
Lua
exports['ai-core']:RemoveVehicleKeys(source, 'AB12CDE')

Parámetros

Prop

Type

Devuelve

Nada. Los mismos casos silenciosos que GiveVehicleKeys.

Ejemplo

import { resourceExport } from "@aicore-fivem/lib/server";

const core = resourceExport("ai-core");

/** The rental ended: the keys go, then the scooter. */
export function endRental(source: number, vehicle: number): void {
  core.RemoveVehicleKeys(source, vehicle);
  if (DoesEntityExist(vehicle)) DeleteEntity(vehicle);
}

Quita las llaves antes de borrar el vehículo. Algunos sistemas de llaves leen la matrícula de la entidad, lo que falla cuando ya no existe.

HasVehicleKeys

Si un jugador tiene las llaves de un vehículo.

Lado: Servidor · Espera: no · Lib: vehicleKeys.has

Firma
HasVehicleKeys(source: number, vehicle: number | string): boolean
Lua
local has = exports['ai-core']:HasVehicleKeys(source, vehicle)

Parámetros

Prop

Type

Devuelve

boolean: true cuando el jugador tiene las llaves. También true cuando no hay ningún sistema de llaves en marcha, cuando el sistema de llaves no puede responder a esta pregunta o cuando falla, así que la falta de un script de llaves nunca deja fuera a los jugadores. false cuando el jugador no tiene llave, la entidad del vehículo no existe, la matrícula está vacía o source no es un número.

Ejemplo

import { onClientCallback, resourceExport, vehicleNearPlayer } from "@aicore-fivem/lib/server";
import { fail, oneArg, readId } from "@aicore-fivem/lib/shared";

const core = resourceExport("ai-core");

// Abrir el maletero de un coche que está junto al jugador necesita sus llaves.
onClientCallback("myscript:openTrunk", { args: oneArg(readId) }, (source, netId) => {
  const vehicle = vehicleNearPlayer(source, netId, { metres: 4 });
  if (!vehicle) return fail("TOO_FAR");
  if (!core.HasVehicleKeys(source, vehicle)) return fail("NO_KEYS");
  return { ok: true };
});

En esta página