AI Core
Dokumentacja APIAI Core: eksporty serwerowe

Klucze pojazdów

Dawaj, zabieraj i sprawdzaj klucze pojazdów przez skrypt kluczy, którego używa serwer.

Każde wywołanie kluczy przechodzi przez ai-core, nigdy przez własne eksporty skryptu kluczy (łącznie z ai-vehiclekeys). ai-core przekazuje je do aktywnego systemu kluczy: tego, który wybiera ustawienie Key script w panelu, albo pierwszego działającego. Gdy nie działa żaden skrypt kluczy, każdy gracz liczy się jako mający każdy klucz.

Pojazd podaje się albo jako serwerowy uchwyt encji (liczba, którą zwraca CreateVehicleServerSetter lub spawnVehicle), albo jako tekst tablicy rejestracyjnej. Tablica jest najpierw przycinana i zamieniana na wielkie litery, więc " ab12cde " i "AB12CDE" to ten sam klucz.

Każdy klucz ma cel, który mówi systemowi kluczy, dlaczego gracz go dostaje. Niektóre systemy kluczy traktują cele inaczej (kupiony pojazd dostaje nowy przedmiot klucza, pojazd służbowy klucz zamocowany w stacyjce). Zobacz KeyPurpose.

CelKiedy
purchaseGracz jest teraz właścicielem pojazdu (dealer, nadanie przez admina): nowy klucz, starsze kopie przestają działać.
garagePosiadany pojazd wyjęty z garażu: właściciel ma już klucz.
jobPojazd służbowy na czas zmiany.
rentalWypożyczony pojazd na czas wypożyczenia.
temporaryWszystko inne krótkotrwałe (spawn admina, jazda próbna, pojazd z napadu). Domyślne.

GiveVehicleKeys

Daje graczowi klucze pojazdu.

Strona: Serwer · Czeka: nie · Lib: vehicleKeys.give (a spawnVehicle({ keysTo, purpose }) daje je za ciebie)

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

Parametry

Prop

Type

Zwraca

Nic. Wywołanie nic nie robi, gdy encja pojazdu nie istnieje, tablica jest pusta, source nie jest liczbą albo nie działa żaden system kluczy. Błąd systemu kluczy jest zapisywany w logu, nie rzucany.

Przykład

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

Świeżo utworzony pojazd nie ma na serwerze tablicy, dopóki klient właściciela jej nie zsynchronizuje. Przekazuj encję, a nie tablicę odczytaną zaraz po utworzeniu; spawnVehicle z liba czeka na tablicę i może sam dać klucze (keysTo, purpose).

RemoveVehicleKeys

Zabiera graczowi klucze pojazdu.

Strona: Serwer · Czeka: nie · Lib: vehicleKeys.remove

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

Parametry

Prop

Type

Zwraca

Nic. Te same ciche przypadki co w GiveVehicleKeys.

Przykład

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

Zabierz klucze przed usunięciem pojazdu. Niektóre systemy kluczy czytają tablicę z encji, co zawodzi, gdy jej już nie ma.

HasVehicleKeys

Czy gracz ma klucze pojazdu.

Strona: Serwer · Czeka: nie · Lib: vehicleKeys.has

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

Parametry

Prop

Type

Zwraca

boolean: true, gdy gracz ma klucze. Także true, gdy nie działa żaden system kluczy, gdy system kluczy nie umie odpowiedzieć na to pytanie albo gdy zawodzi, więc brak skryptu kluczy nigdy nie blokuje graczy. false, gdy gracz nie ma klucza, encja pojazdu nie istnieje, tablica jest pusta albo source nie jest liczbą.

Przykład

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

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

// Otwarcie bagażnika samochodu obok gracza wymaga jego kluczy.
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 };
});

Na tej stronie