Lokalny gracz
Zapamiętany ped, pojazd, miejsce i broń, obiekt player (pozycja, teleport, animacje), wygaszanie ekranu, pedy innych graczy i najbliższy gracz.
Wszystko o graczu siedzącym przy tym komputerze. Czytaj wartości z cache zamiast wywoływać PlayerPedId() w pętlach: ai-core trzyma jednego obserwatora dla wszystkich zasobów i wypycha zmiany, więc żaden skrypt ich nie odpytuje.
cache
Najczęściej czytane wartości lokalnego gracza, utrzymywane aktualne przez jednego obserwatora ai-core. Jak cache w ox_lib: czytaj cache.ped zamiast wywoływać PlayerPedId() i cache.vehicle zamiast GetVehiclePedIsIn co klatkę. Odczyt klucza to zwykły odczyt z pamięci, bezpieczny w pętlach i kodzie co klatkę.
Strona: Klient · Czeka: nie
const cache: PlayerCache // tylko do odczytulocal ped = aiLib.cache.pedKlucze
Prop
Type
Typ to PlayerCache.
Przykład
import { cache, every } from "@aicore-fivem/lib/client";
// Prędkość pokazywana w czasie jazdy, czytana z cache co 200 ms.
every(200, () => {
if (cache.vehicle === false || cache.seat !== -1) return;
const kmh = GetEntitySpeed(cache.vehicle) * 3.6;
SendNUIMessage({ action: "speed", data: Math.round(kmh) });
});cache.ped spóźnia się za zmianą modelu do 100 ms. Zaraz po zmianie modelu (SetPlayerModel) wywołaj raz PlayerPedId(). Akcje player niżej już czytają peda na świeżo.
onCache
Uruchamia handler za każdym razem, gdy zmieni się jedna zapamiętana wartość: gracz wsiadł do pojazdu albo z niego wysiadł, zmienił miejsce, wyjął albo schował broń lub dostał nowego peda. Używaj go zamiast sprawdzać wartość na timerze.
Strona: Klient · Czeka: nie
onCache<K extends keyof PlayerCache>(key: K, handler: (value: PlayerCache[K], old: PlayerCache[K]) => void): voidaiLib.cache.onChange(key, function(value, old) end)Parametry
Prop
Type
Zwracana wartość
void. Nie da się usunąć handlera; trzymaj jeden na funkcję na górze pliku.
Przykład
import { onCache, inventory, Points } from "@aicore-fivem/lib/client";
const points = new Points();
// Punkty, których canShow czyta cache.vehicle, są sprawdzane ponownie.
onCache("vehicle", () => points.refresh());
// Przedmiot broni w ręku, czytany tylko przy zmianie broni.
onCache("weapon", (weapon) => {
const item = weapon === false ? null : inventory.currentWeapon();
SendNUIMessage({ action: "weapon", data: item });
});readPlayerState
Czyta pojazd, miejsce i broń peda w tej chwili, bez cache. Używa jej obserwator ai-core; potrzebujesz jej tylko dla peda, który nie jest lokalny, albo żeby ręcznie porównać z cache.
Strona: Klient · Czeka: nie
readPlayerState(ped: number): { vehicle: number | false; seat: number | false; weapon: number | false }Brak odpowiednika w Lua.
Parametry
Prop
Type
Zwracana wartość
Obiekt z vehicle (uchwyt pojazdu, false pieszo), seat (-1 kierowca i wyżej, false pieszo) i weapon (hash w ręku, false bez broni).
Przykład
import { playerPed, readPlayerState } from "@aicore-fivem/lib/client";
const ped = playerPed(12);
if (ped !== 0 && readPlayerState(ped).seat === -1) console.log("player 12 is driving");readWeapon
Broń w ręku peda w tej chwili, false bez broni.
Strona: Klient · Czeka: nie
readWeapon(ped: number): number | falseBrak odpowiednika w Lua.
Parametry
Prop
Type
Zwracana wartość
number | false: hash broni albo false, gdy ped trzyma WEAPON_UNARMED.
Przykład
import { nearestPlayer, playerPed, readWeapon } from "@aicore-fivem/lib/client";
const id = nearestPlayer(5);
if (id !== null && readWeapon(playerPed(id)) !== false) console.log("the player next to you is armed");player
Jeden obiekt dla lokalnego peda: gdzie jest, przemieszczanie, animacje. Odczyty używają cache.ped; akcje czytają peda na świeżo, więc działają też zaraz po zmianie modelu.
player.ped
Uchwyt lokalnego peda (ta sama wartość co cache.ped).
Strona: Klient · Czeka: nie
player.ped: number // właściwość tylko do odczytuBrak odpowiednika w Lua: użyj aiLib.cache.ped.
Zwracana wartość
number: uchwyt peda.
Przykład
import { player } from "@aicore-fivem/lib/client";
SetPedArmour(player.ped, 100);player.coords
Pozycja peda w tej chwili.
Strona: Klient · Czeka: nie
player.coords(): Vec3local coords = aiLib.player.coords() -- vector3Zwracana wartość
Vec3 { x, y, z } w TypeScript (z to korzeń peda, około 1 m nad podłogą). Lua zwraca vector3.
Przykład
import { locationName, player } from "@aicore-fivem/lib/client";
const here = player.coords();
console.log(`${locationName(here).street} at ${here.x.toFixed(1)}, ${here.y.toFixed(1)}`);player.heading
Kierunek, w którym patrzy ped, w stopniach (0-360, 0 = północ).
Strona: Klient · Czeka: nie
player.heading(): numberlocal heading = aiLib.player.heading()Zwracana wartość
number: kierunek w stopniach.
Przykład
import { player } from "@aicore-fivem/lib/client";
// Zapisz miejsce i kierunek dla rekordu panelu.
const spot = { ...player.coords(), heading: player.heading() };player.distanceTo
Odległość w linii prostej od peda do punktu, w metrach.
Strona: Klient · Czeka: nie
player.distanceTo(point: Vec3): numberlocal metres = aiLib.player.distanceTo(point) -- vector3 albo { x, y, z }Parametry
Prop
Type
Zwracana wartość
number: metry, mierzone w 3D.
Przykład
import { notify, player } from "@aicore-fivem/lib/client";
const counter = { x: 25.7, y: -1347.3, z: 29.5 };
if (player.distanceTo(counter) > 3) notify("Walk to the counter first", "error");player.freeze
Zamraża peda w miejscu albo pozwala mu znowu się ruszać.
Strona: Klient · Czeka: nie
player.freeze(state: boolean): voidaiLib.player.freeze(frozen)Parametry
Prop
Type
Zwracana wartość
void.
Przykład
import { player } from "@aicore-fivem/lib/client";
player.freeze(true);
setTimeout(() => player.freeze(false), 5000);player.teleport
Przenosi gracza i czeka, aż świat wokół nowego miejsca się wczyta, za czarnym wygaszeniem ekranu. Bez z (albo z ground: "find") szuka ziemi pod x i y: używaj tego dla punktu nawigacji na mapie.
Strona: Klient · Czeka: tak (Promise w TypeScript, w Lua wstrzymuje wątek)
player.teleport(to: { x: number; y: number; z?: number }, options?: TeleportOptions): Promise<void>aiLib.player.teleport(to, options) -- wywołuj wewnątrz wątkuParametry
Prop
Type
TeleportOptions
Prop
Type
Zwracana wartość
Promise<void>, który się rozwiązuje, gdy gracz stoi w nowym miejscu i kolizja tam się wczytała (albo po 5 sekundach bez niej). Lua nic nie zwraca.
Przykład
import { notify, player, waypoint } from "@aicore-fivem/lib/client";
RegisterCommand(
"tpm",
async () => {
const target = waypoint();
if (!target) return notify("Set a waypoint first", "error");
await player.teleport(target, { keepVehicle: true }); // bez z: ląduje na ziemi
},
false,
);Wyszukiwanie ziemi w TypeScript stawia zamrożonego peda na rosnących wysokościach, na każdej czeka na kolizję i pomija powierzchnie wewnątrz wnętrz MLO albo IPL, więc nigdy nie ląduje na dachu ani w budynku nad ulicą. Wersja Lua bierze pierwszą znalezioną ziemię i czeka na kolizję najwyżej 3 sekundy.
player.playAnim
Odtwarza animację na pedzie. Najpierw wczytuje słownik animacji.
Strona: Klient · Czeka: tak w TypeScript (rozwiązuje się, gdy animacja się zaczęła); w Lua wstrzymuje wątek, dopóki słownik się wczytuje
player.playAnim(dict: string, clip: string, options?: AnimOptions): Promise<void>aiLib.player.playAnim(dict, clip, options) -- wywołuj wewnątrz wątkuParametry
Prop
Type
AnimOptions
Prop
Type
Zwracana wartość
Promise<void>, który się rozwiązuje, gdy animacja się zaczęła. Odrzuca się, gdy słownik nie istnieje albo nie wczyta się w ciągu 10 sekund. Lua nic nie zwraca i nic nie robi, gdy słownik się nie wczyta.
Przykład
import { player } from "@aicore-fivem/lib/client";
export async function handOver(): Promise<void> {
await player.playAnim("mp_common", "givetake1_a", { flag: 48, duration: 1500 });
}player.stopAnim
Zatrzymuje wszystko, co robi ped (ClearPedTasks): animacje i scenariusze.
Strona: Klient · Czeka: nie
player.stopAnim(): voidaiLib.player.stopAnim()Zwracana wartość
void.
Przykład
import { player } from "@aicore-fivem/lib/client";
export async function readClipboard(): Promise<void> {
await player.playAnim("amb@world_human_clipboard@male@idle_a", "idle_c");
setTimeout(() => player.stopAnim(), 4000);
}player.holdAnim
Utrzymuje odtwarzanie animacji, dopóki jej nie zatrzymasz, i przywraca ją, gdy przerwie ją upadek albo potrącenie. Opisana razem z propami na stronie Pedy, blipy i propy.
Wygaszanie ekranu i inni gracze
fadeOut
Wygasza ekran do czerni i czeka, aż będzie całkiem czarny. Używaj go, żeby ukryć teleport, zmianę modelu albo zmianę sceny.
Strona: Klient · Czeka: tak (Promise w TypeScript, w Lua wstrzymuje wątek)
fadeOut(ms?: number): Promise<void>aiLib.fadeOut(ms) -- wywołuj wewnątrz wątkuParametry
Prop
Type
Zwracana wartość
Promise<void>, który się rozwiązuje, gdy ekran jest czarny, najpóźniej po ms + 2 sekundach. Nigdy się nie odrzuca.
Przykład
import { fadeIn, fadeOut } from "@aicore-fivem/lib/client";
export async function moveToSquare(): Promise<void> {
await fadeOut();
SetEntityCoords(PlayerPedId(), -269.4, -955.3, 31.2, false, false, false, false);
await fadeIn();
}fadeIn
Rozjaśnia ekran z powrotem i czeka, aż będzie czysty. Para dla fadeOut.
Strona: Klient · Czeka: tak (Promise w TypeScript, w Lua wstrzymuje wątek)
fadeIn(ms?: number): Promise<void>aiLib.fadeIn(ms) -- wywołuj wewnątrz wątkuParametry
Prop
Type
Zwracana wartość
Promise<void>, który się rozwiązuje, gdy ekran jest czysty, najpóźniej po ms + 2 sekundach. Nigdy się nie odrzuca.
Przykład
Zobacz fadeOut: oba zawsze są używane razem.
playerPed
Ped gracza według id serwerowego. Dla lokalnego gracza zwraca cache.ped; dla innego gracza zwraca 0, gdy ten gracz nie jest na tyle blisko, żeby był strumieniowany do tego klienta.
Strona: Klient · Czeka: nie
playerPed(serverId: number): numberlocal ped = aiLib.playerPed(serverId)Parametry
Prop
Type
Zwracana wartość
number: uchwyt peda albo 0, gdy gracz nie jest w zasięgu tego klienta.
Przykład
import { onServerEvent, playerPed } from "@aicore-fivem/lib/client";
// Serwer mówi wszystkim w pobliżu, że gracz został skuty.
onServerEvent(
"myscript:cuffed",
{ args: ([id]) => (typeof id === "number" ? [id] : null) },
(id) => {
const ped = playerPed(id);
if (ped !== 0) SetEnableHandcuffs(ped, true);
},
);Nigdy nie używaj ręcznie GetPlayerPed(-1) ani GetPlayerPed(GetPlayerFromServerId(id)): nieznane id daje -1, a GetPlayerPed(-1) to lokalny ped, więc akcja trafia w złego gracza.
nearestPlayer
Najbliższy inny gracz w danej odległości, jako id serwerowe. Przechodzi tylko po graczach strumieniowanych do tego klienta. Używaj go, żeby wybrać cel akcji dawania, przeszukania, skucia albo powalenia, potem wyślij to id do serwera, który ponownie sprawdzi odległość.
Strona: Klient · Czeka: nie
nearestPlayer(metres: number, options?: { from?: Vec3; filter?: (serverId: number, ped: number) => boolean }): number | nulllocal serverId = aiLib.nearestPlayer(metres, options) -- integer albo nilParametry
Prop
Type
Opcje
Prop
Type
Zwracana wartość
number | null: id serwerowe najbliższego gracza, który przeszedł filter, albo null (nil w Lua), gdy nikogo nie ma w odległości metres. Lokalny gracz nigdy nie jest zwracany.
Przykład
import { callAction, nearestPlayer, notify } from "@aicore-fivem/lib/client";
RegisterCommand(
"givecash",
async (_src: number, args: string[]) => {
const target = nearestPlayer(3, { filter: (_id, ped) => !IsPedInAnyVehicle(ped, false) });
if (target === null) return notify("Nobody is close enough", "error");
await callAction("myscript:give", [target, Number(args[0])], { fallback: "GIVE_FAILED" });
},
false,
);Rozmowa z serwerem
Pytanie serwera i czekanie na odpowiedź, akcje serwera z przetłumaczonymi odmowami, nasłuchiwanie zdarzeń serwera i odpowiadanie na callbacki serwera.
Punkty interakcji
Points - każde miejsce, z którego korzysta gracz (lady, sklepy, drzwi, NPC, bankomaty, bagażniki pojazdów), jako prompt albo opcja targetu, z pedami, blipami i punktami budowanymi z rekordów panelu.