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ósito | Quando |
|---|---|
purchase | O jogador agora é dono do veículo (concessionária, admin deu): uma chave nova, cópias antigas param de funcionar. |
garage | Um veículo próprio tirado da garagem: o dono já tem a chave. |
job | Um veículo de trabalho para o turno. |
rental | Um veículo alugado pelo tempo do aluguel. |
temporary | Qualquer 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ê)
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): voidexports['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
RemoveVehicleKeys(source: number, vehicle: number | string): voidexports['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
HasVehicleKeys(source: number, vehicle: number | string): booleanlocal 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 };
});