AI Core
Referência da APIAI Core: exports de servidor

Chaves de veículos

Dê, remova e verifique chaves de veículos pelo script de chaves que o servidor roda.

Toda chamada de chave passa pelo ai-core, nunca pelos exports próprios de um script de chaves (ai-vehiclekeys incluído). O ai-core a encaminha ao sistema de chaves ativo: o que a configuração Key script do painel escolhe, ou o primeiro que estiver rodando. Quando nenhum script de chaves está rodando, todo jogador conta como tendo todas as chaves.

Um veículo é informado como um handle de entidade do servidor (o número que CreateVehicleServerSetter ou spawnVehicle retorna) ou como um texto de placa. Uma placa é aparada e passada para maiúsculas antes, então " ab12cde " e "AB12CDE" são a mesma chave.

Cada chave tem um propósito que diz ao sistema de chaves por que o jogador a recebe. Alguns sistemas de chaves os tratam de forma diferente (um veículo comprado recebe um item de chave novo, um veículo de emprego uma chave fixa na ignição). Veja KeyPurpose.

PropósitoQuando
purchaseO jogador agora é dono do veículo (concessionária, admin deu): uma chave nova, cópias antigas param de funcionar.
garageUm veículo próprio tirado da garagem: o dono já tem a chave.
jobUm veículo de trabalho para o turno.
rentalUm veículo alugado pelo tempo do aluguel.
temporaryQualquer outra coisa de curta duração (spawn de admin, test drive, veículo de assalto). O padrão.

GiveVehicleKeys

Dá a um jogador as chaves de um veículo.

Lado: Servidor · Espera: não · Lib: vehicleKeys.give (e spawnVehicle({ keysTo, purpose }) as dá por você)

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

Parâmetros

Prop

Type

Retorno

Nada. A chamada não faz nada quando a entidade do veículo não existe, a placa está vazia, source não é um número ou nenhum sistema de chaves está rodando. Um erro do sistema de chaves é registrado no log, não lançado.

Exemplo

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 };
});

Um veículo recém-criado não tem placa no servidor até o cliente dono dele sincronizá-lo. Passe a entidade, não uma placa que você leu logo depois de criá-lo; o spawnVehicle da lib espera a placa e pode dar as chaves ele mesmo (keysTo, purpose).

RemoveVehicleKeys

Tira de um jogador as chaves de um veículo.

Lado: Servidor · Espera: não · Lib: vehicleKeys.remove

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

Parâmetros

Prop

Type

Retorno

Nada. Os mesmos casos silenciosos de GiveVehicleKeys.

Exemplo

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);
}

Remova as chaves antes de apagar o veículo. Alguns sistemas de chaves leem a placa da entidade, o que falha depois que ela sumiu.

HasVehicleKeys

Se um jogador tem as chaves de um veículo.

Lado: Servidor · Espera: não · Lib: vehicleKeys.has

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

Parâmetros

Prop

Type

Retorno

boolean: true quando o jogador tem as chaves. Também true quando nenhum sistema de chaves está rodando, quando o sistema de chaves não sabe responder a essa pergunta ou quando ele falha, para que a falta de um script de chaves nunca tranque os jogadores para fora. false quando o jogador não tem chave, a entidade do veículo não existe, a placa está vazia ou source não é um número.

Exemplo

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

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

// Abrir o porta-malas de um carro ao lado do jogador exige as chaves dele.
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 };
});

Nesta página