Garagens
Apreenda e guarde veículos, abra um menu de garagem e liste os veículos guardados de um jogador pelo script de garagem que o servidor roda.
As chamadas de garagem passam pelo ai-core, nunca pelos exports ou eventos próprios de um script de garagem (ai-garages incluído). O ai-core encaminha cada chamada ao script de garagem ativo: o que a configuração Garage script do painel escolhe, ou o primeiro que estiver rodando (ai-garages, jg-advancedgarages, tgiann-realparking e os outros da lista de compatibilidade). Cada script responde só às ações que realmente tem, então qualquer ação pode responder false ou null com um script e funcionar com outro.
Um veículo é um handle de entidade do servidor.
GetGarageSystem
O nome do recurso do script de garagem para o qual o ai-core encaminha.
Lado: Servidor · Espera: não · Lib: garages.provider()
GetGarageSystem(): string | nulllocal system = exports['ai-core']:GetGarageSystem() -- string ou nilParâmetros
Nenhum.
Retorno
string | null: o nome do recurso do script de garagem. null quando nenhum está rodando.
Exemplo
import { addCommand, resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
addCommand("garagesystem", { help: "Shows the garage script in use", restricted: true }, () => {
console.log(core.GetGarageSystem() ?? "none");
});ImpoundVehicle
Manda um veículo do mundo para o pátio de apreensão. Com scripts de garagem que só têm um formulário de apreensão na tela do jogador, abre esse formulário para o jogador em by.
Lado: Servidor · Espera: não · Lib: garages.impound
ImpoundVehicle(vehicle: number, by?: number): booleanlocal taken = exports['ai-core']:ImpoundVehicle(vehicle, source)Parâmetros
Prop
Type
Retorno
boolean: true quando o script de garagem assumiu o veículo (ou abriu o formulário). false quando nada o assumiu: nenhum script de garagem está rodando, ele não tem apreensão, o veículo não é um que ele conhece ou vehicle não é um veículo existente. Com false o veículo continua no mundo: apague-o você mesmo se ele precisar sumir.
Exemplo
import { onClientCallback, resourceExport, vehicleNearPlayer } from "@aicore-fivem/lib/server";
import { fail, oneArg, readId } from "@aicore-fivem/lib/shared";
const core = resourceExport("ai-core");
onClientCallback("myscript:impound", { args: oneArg(readId) }, (source, netId) => {
if (core.GetDutyJob(source) !== "police") return fail("NOT_POLICE");
const vehicle = vehicleNearPlayer(source, netId, { metres: 5 });
if (!vehicle) return fail("TOO_FAR");
if (!core.ImpoundVehicle(vehicle, source)) DeleteEntity(vehicle);
return { ok: true };
});StoreVehicleInGarage
Coloca um veículo do mundo numa garagem, com o estado dele.
Lado: Servidor · Espera: não · Lib: garages.store
StoreVehicleInGarage(vehicle: number, garage?: string | null, by?: number): booleanlocal stored = exports['ai-core']:StoreVehicleInGarage(vehicle, 'legion', source)Parâmetros
Prop
Type
Retorno
boolean: true quando o script de garagem aceitou o veículo. false quando nada o aceitou (nenhum script de garagem, nenhuma ação de guardar, garagem desconhecida, um veículo que o script não possui) ou vehicle não é um veículo existente.
Exemplo
import { onClientCallback, resourceExport, vehicleOf } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
const core = resourceExport("ai-core");
// Um manobrista guarda o carro que o jogador dirige na garagem mais próxima.
onClientCallback("myscript:valetStore", (source) => {
const vehicle = vehicleOf(source, { driver: true });
if (!vehicle) return fail("NOT_DRIVING");
return core.StoreVehicleInGarage(vehicle, null, source) ? { ok: true } : fail("STORE_FAILED");
});OpenGarage
Abre o menu de garagem do script de garagem ativo para um jogador.
Lado: Servidor · Espera: não · Lib: garages.open
OpenGarage(source: number, garage?: string | null): booleanlocal opened = exports['ai-core']:OpenGarage(source, 'legion')Parâmetros
Prop
Type
Retorno
boolean: true quando o menu abriu. false quando o jogador não está online, nenhum script de garagem está rodando ou ele não tem um menu que possa ser aberto de fora.
Exemplo
import { onClientCallback, resourceExport, near } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
const core = resourceExport("ai-core");
const MOTEL_GARAGE = { x: 273.1, y: -343.9, z: 44.9 };
onClientCallback("myscript:motelGarage", { guards: [near(MOTEL_GARAGE, 3)] }, (source) =>
core.OpenGarage(source, "motel") ? { ok: true } : fail("GARAGE_FAILED"),
);GetGaragedVehicles
Os veículos de um jogador guardados pelo script de garagem: numa garagem ou no pátio de apreensão.
Lado: Servidor · Espera: não (responde por done) · Lib: garages.stored(source) retorna uma Promise
GetGaragedVehicles(source: number, done: (vehicles: GaragedVehicle[] | null) => void): voidexports['ai-core']:GetGaragedVehicles(source, function(vehicles) end) -- lista ou nilParâmetros
Prop
Type
Retorno
Nada. done recebe uma entrada por veículo com plate, model (ou null), garage (ou null) e impounded (GaragedVehicle), ou null quando o jogador não está online, nenhum script de garagem está rodando, ele não consegue listar veículos ou falhou. Sem uma função como done a chamada não faz nada.
Exemplo
import { onClientCallback, resourceExport } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
import type { GaragedVehicle } from "@aicore-fivem/shared";
const core = resourceExport("ai-core");
// O balcão do pátio de apreensão lista os carros apreendidos do jogador.
onClientCallback("myscript:impoundList", async (source) => {
const list = await new Promise<GaragedVehicle[] | null>((resolve) => core.GetGaragedVehicles(source, resolve));
if (!list) return fail("GARAGE_UNKNOWN");
return { ok: true, plates: list.filter((v) => v.impounded).map((v) => v.plate) };
});