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.
| Cel | Kiedy |
|---|---|
purchase | Gracz jest teraz właścicielem pojazdu (dealer, nadanie przez admina): nowy klucz, starsze kopie przestają działać. |
garage | Posiadany pojazd wyjęty z garażu: właściciel ma już klucz. |
job | Pojazd służbowy na czas zmiany. |
rental | Wypożyczony pojazd na czas wypożyczenia. |
temporary | Wszystko 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)
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): voidexports['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
RemoveVehicleKeys(source: number, vehicle: number | string): voidexports['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
HasVehicleKeys(source: number, vehicle: number | string): booleanlocal 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 };
});