Warstwy przez ai-core
medical, appearance, gestures, seatbelt, fuel, mdt, radial, world i inventory - wywołania klienta, które docierają do dowolnego skryptu śmierci, ubrań, emotek, pasów, paliwa, MDT, menu radialnego, pogody albo ekwipunku, którego używa serwer.
Te obiekty nigdy nie rozmawiają z konkretnym skryptem. Pytają ai-core, a ai-core przekazuje wywołanie do skryptu, którego serwer używa do tego zadania: ai-death albo inny skrypt śmierci, ai-appearance albo tgiann-clothing, dowolny obsługiwany skrypt emotek albo menu radialnego. Twój skrypt działa dalej, gdy właściciel któryś wymieni. Jak działają warstwy, opisuje strona Warstwy i most.
Gdy nie działa żaden skrypt danego rodzaju, wywołania odpowiadają false, null albo własną wartością gry, jak mówi każdy wpis.
medical
medical.isDead
Czy lokalny gracz jest powalony (martwy albo w last stand), w dowolnym działającym skrypcie śmierci. Skrypty śmierci trzymają powalonego peda przy życiu, żeby go animować, więc samo IsEntityDead ich nie wykrywa. Po pierwszym wywołaniu to odczyt z pamięci.
Strona: Klient · Czeka: nie
medical.isDead(): booleanBrak odpowiednika w Lua: wywołaj exports['ai-core']:IsDead() i nasłuchuj lokalnego zdarzenia ai-core:client:dead (dead).
Zwracana wartość
boolean: true, gdy warstwa medyczna ai-core mówi, że gracz jest powalony, albo ped jest martwy dla gry.
Przykład
import { medical, notify } from "@aicore-fivem/lib/client";
RegisterCommand(
"phone",
() => {
if (medical.isDead()) return notify("You cannot use the phone now", "error");
SetNuiFocus(true, true);
},
false,
);medical.onChange
Uruchamia handler, gdy lokalny gracz zostanie powalony albo wstanie.
Strona: Klient · Czeka: nie
medical.onChange(fn: (dead: boolean) => void): voidBrak odpowiednika w Lua: AddEventHandler('ai-core:client:dead', function(dead) end).
Parametry
Prop
Type
Zwracana wartość
void.
Przykład
import { medical, Points } from "@aicore-fivem/lib/client";
const points = new Points();
medical.onChange(() => points.refresh()); // punkty, których canShow czyta medical.isDead()appearance
Wygląd pedów przez warstwę wyglądu ai-core, niezależnie od tego, jaki skrypt ubrań działa.
appearance.apply
Nakłada zapisany wygląd na peda o modelu tego wyglądu. Pobierz wygląd na serwerze przez appearance.get(charId), utwórz peda z look.model, potem nałóż. Na własnym pedzie gracza zmienia jego ubrania.
Strona: Klient · Czeka: nie
appearance.apply(ped: number, look: CharacterAppearance): booleanlocal ok = aiLib.appearance.apply(ped, look)Parametry
Prop
Type
Typ to CharacterAppearance.
Zwracana wartość
boolean: false, gdy peda już nie ma, model się różni albo nie działa żaden skrypt ubrań.
Przykład
import { appearance, LocalPed, triggerServerCallback } from "@aicore-fivem/lib/client";
import type { CharacterAppearance } from "@aicore-fivem/shared";
// Śpiąca kopia postaci, ubrana jak ona.
export async function showSleeper(charId: number): Promise<void> {
const look = (await triggerServerCallback("mysleep:look", [charId]).catch(() => null)) as CharacterAppearance | null;
if (!look) return;
new LocalPed({
model: look.model,
coords: { x: 151.2, y: -1004.6, z: 29.4, heading: 90 },
onSpawn: (ped) => appearance.apply(ped, look),
});
}Sprawdź, co wysyła serwer, zanim to rzutujesz. Ped utworzony z innym modelem niż look.model nie może przyjąć wyglądu: apply odpowiada false.
appearance.read
Wygląd, który ped nosi teraz.
Strona: Klient · Czeka: nie
appearance.read(ped: number): CharacterAppearance | nulllocal look = aiLib.appearance.read(ped) -- tabela albo nilParametry
Prop
Type
Zwracana wartość
CharacterAppearance | null: wygląd albo null (nil w Lua), gdy skrypt ubrań nie potrafi tego stwierdzić albo żaden nie działa.
Przykład
import { appearance, cache } from "@aicore-fivem/lib/client";
const before = appearance.read(cache.ped); // załóż go z powrotem później przez appearance.applyappearance.openMenu
Otwiera sklep z ubraniami, fryzjera albo zapisane stroje skryptu ubrań dla gracza.
Strona: Klient · Czeka: nie
appearance.openMenu(menu: ClothingMenu): booleanlocal ok = aiLib.appearance.openMenu(menu)Parametry
Prop
Type
Typ to ClothingMenu.
Zwracana wartość
boolean: false, gdy skrypt ubrań nie ma takiego menu albo żaden nie działa.
Przykład
import { appearance, Points } from "@aicore-fivem/lib/client";
const points = new Points();
points.add("barber", {
coords: { x: -814.3, y: -183.8, z: 37.6 },
label: "Barber",
onPressed: () => appearance.openMenu("barber"),
});appearance.wearOutfit
Zakłada graczowi strój pracy (mundur) aż do reloadSkin. Nie jest zapisywany: ponowne połączenie albo reloadSkin przywraca graczowi jego ubrania. Zmieniają się tylko wymienione części.
Strona: Klient · Czeka: nie
appearance.wearOutfit(outfit: JobOutfit): booleanlocal ok = aiLib.appearance.wearOutfit(outfit)Parametry
Prop
Type
Typy to JobOutfit i OutfitPiece.
Zwracana wartość
boolean: false, gdy nie może (brak skryptu ubrań, model, którego nie obsługuje).
Przykład
import { appearance } from "@aicore-fivem/lib/client";
appearance.wearOutfit({
components: [
{ id: 11, collection: "", index: 55, texture: 0 },
{ id: 4, collection: "", index: 35, texture: 0 },
],
props: [{ id: 0, collection: "", index: -1, texture: 0 }],
});appearance.reloadSkin
Zakłada graczowi z powrotem jego zapisany wygląd (zdejmuje strój pracy).
Strona: Klient · Czeka: nie
appearance.reloadSkin(): booleanlocal ok = aiLib.appearance.reloadSkin()Zwracana wartość
boolean: false bez skryptu ubrań.
Przykład
import { appearance } from "@aicore-fivem/lib/client";
RegisterCommand("offduty", () => appearance.reloadSkin(), false);gestures
Ręce w górze, wskazywanie i emotki dowolnego działającego skryptu emotek, przez ai-core.
gestures.isHandsUp
Czy lokalny gracz ma ręce w górze.
Strona: Klient · Czeka: nie
gestures.isHandsUp(): booleanlocal up = aiLib.gestures.isHandsUp()Zwracana wartość
boolean: true, dopóki ręce są w górze w działającym skrypcie emotek.
Przykład
import { gestures, onServerCallback } from "@aicore-fivem/lib/client";
// Serwer pyta przed napadem, czy ofiara się poddała.
onServerCallback("myrob:surrendered", () => gestures.isHandsUp());gestures.isPointing
Czy lokalny gracz wskazuje.
Strona: Klient · Czeka: nie
gestures.isPointing(): booleanlocal pointing = aiLib.gestures.isPointing()Zwracana wartość
boolean: true, dopóki wskazuje.
Przykład
if (gestures.isPointing()) return; // nie zaczynaj emotki w trakcie wskazywaniagestures.provider
Skrypt emotek, który odpowiada na ręce w górze i wskazywanie.
Strona: Klient · Czeka: nie
gestures.provider(): string | nulllocal name = aiLib.gestures.provider()Zwracana wartość
string | null: nazwa jego zasobu albo null (nil), gdy żaden nie działa.
Przykład
console.log(`hands up from ${gestures.provider() ?? "nothing"}`);gestures.playEmote
Odtwarza emotkę według nazwy komendy (tego, co gracze wpisują po e) w działającym skrypcie emotek.
Strona: Klient · Czeka: nie
gestures.playEmote(name: string): booleanlocal ok = aiLib.gestures.playEmote(name)Parametry
Prop
Type
Zwracana wartość
boolean: false bez skryptu emotek.
Przykład
import { gestures } from "@aicore-fivem/lib/client";
RegisterCommand("hi", () => gestures.playEmote("wave"), false);gestures.cancelEmote
Zatrzymuje emotkę, którą odtwarza gracz (skuty, powalony).
Strona: Klient · Czeka: nie
gestures.cancelEmote(): booleanlocal ok = aiLib.gestures.cancelEmote()Zwracana wartość
boolean: false bez skryptu emotek.
Przykład
onServerEvent("mypolice:cuffed", () => gestures.cancelEmote());gestures.emoteProvider
Skrypt emotek, który odtwarza emotki (może się różnić od tego, który odpowiada na ręce w górze).
Strona: Klient · Czeka: nie
gestures.emoteProvider(): string | nulllocal name = aiLib.gestures.emoteProvider()Zwracana wartość
string | null: nazwa jego zasobu albo null (nil), gdy żaden nie działa.
Przykład
if (gestures.emoteProvider() === null) console.log("no emote script: skipping the emote");seatbelt
Pas bezpieczeństwa lokalnego gracza przez ai-core, niezależnie od tego, jaki skrypt pasów działa.
seatbelt.isOn
Czy pas jest zapięty. Pytaj na żądanie, nie co klatkę.
Strona: Klient · Czeka: nie
seatbelt.isOn(): boolean | nulllocal worn = aiLib.seatbelt.isOn() -- boolean albo nilZwracana wartość
boolean | null: true albo false; null (nil), gdy nie odpowiada żaden skrypt pasów.
Przykład
import { cache, notify, onCache, seatbelt } from "@aicore-fivem/lib/client";
onCache("vehicle", (vehicle) => {
if (vehicle !== false && seatbelt.isOn() === false) notify("Buckle up", "warning");
});seatbelt.onChange
Uruchamia handler, gdy zmieni się pas. Wyzwalają go tylko skrypty pasów, które zgłaszają zmiany.
Strona: Klient · Czeka: nie
seatbelt.onChange(fn: (worn: boolean | null) => void): voidaiLib.seatbelt.onChange(function(worn) end)Parametry
Prop
Type
Zwracana wartość
void.
Przykład
seatbelt.onChange((worn) => SendNUIMessage({ action: "belt", data: worn === true }));seatbelt.provider
Skrypt pasów, który odpowiada.
Strona: Klient · Czeka: nie
seatbelt.provider(): string | nulllocal name = aiLib.seatbelt.provider()Zwracana wartość
string | null: nazwa jego zasobu albo null (nil), gdy żaden nie odpowiada.
Przykład
if (seatbelt.provider() === null) console.log("no seat belt script runs");fuel
fuel.get
Poziom paliwa pojazdu. Serwer trzyma state bag fuel dla każdego pojazdu niezależnie od skryptu paliwa, więc to odczyt z pamięci; bez tego bagu to poziom zbiornika z gry.
Strona: Klient · Czeka: nie
fuel.get(vehicle: number): numberBrak odpowiednika w Lua: czytaj Entity(vehicle).state.fuel. Ustawianie paliwa jest tylko na serwerze (fuel.set na stronie Pojazdy).
Parametry
Prop
Type
Zwracana wartość
number: 0-100.
Przykład
import { cache, every, fuel } from "@aicore-fivem/lib/client";
every(1000, () => {
if (cache.vehicle !== false) SendNUIMessage({ action: "fuel", data: Math.round(fuel.get(cache.vehicle)) });
});mdt
mdt.open
Otwiera aktywne policyjne MDT dla lokalnego gracza. MDT samo sprawdza pracę.
Strona: Klient · Czeka: nie
mdt.open(): booleanlocal ok = aiLib.mdt.open()Zwracana wartość
boolean: false, gdy nie działa żadne MDT albo nie da się go otworzyć z zewnątrz.
Przykład
import { mdt, notify } from "@aicore-fivem/lib/client";
RegisterCommand("mdt", () => {
if (!mdt.open()) notify("No MDT available", "error");
}, false);radial
Pozycje w dowolnym działającym menu radialnym (ai-radialmenu albo inne przez warstwę radialną ai-core). ai-core trzyma je przez restarty menu radialnego i usuwa, gdy twój zasób się zatrzyma: dodaj raz przy starcie.
radial.add
Dodaje pozycję do koła albo zastępuje pozycję o tym samym id.
Strona: Klient · Czeka: nie
radial.add(item: RadialItem): voidaiLib.radial.add(item)Parametry
Prop
Type
RadialItem
Prop
Type
Typ to RadialItem.
Zwracana wartość
void.
Przykład
import { cache, createLocale, hasJob, radial } from "@aicore-fivem/lib/client";
import { RADIAL_VEHICLE } from "@aicore-fivem/shared";
const Locale = createLocale<typeof import("../../locales/en.json")>();
radial.add({
id: "myscript:engine",
label: Locale("ENGINE"),
icon: "power-off",
parent: RADIAL_VEHICLE,
keepOpen: true,
canShow: () => cache.seat === -1,
onPressed: () => {
if (cache.vehicle === false) return;
SetVehicleEngineOn(cache.vehicle, !GetIsVehicleEngineRunning(cache.vehicle), false, true);
},
});
radial.add({
id: "myscript:police",
label: Locale("POLICE"),
icon: "shield-halved",
canShow: () => hasJob(["police"]),
items: [
{ id: "myscript:cuff", label: Locale("CUFF"), icon: "handcuffs", onPressed: () => emitNet("mypolice:cuff") },
],
});radial.remove
Usuwa jedną z twoich pozycji. Nieznane id nic nie robi.
Strona: Klient · Czeka: nie
radial.remove(id: string): voidaiLib.radial.remove(id)Parametry
Prop
Type
Zwracana wartość
void.
Przykład
radial.remove("myscript:engine");radial.refresh
Ponownie czyta każde canShow otwartego koła. Wywołaj ją po zmianie czegoś, co czytają, gdy koło może być otwarte.
Strona: Klient · Czeka: nie
radial.refresh(): voidaiLib.radial.refresh()Zwracana wartość
void.
Przykład
onMembershipChange(() => radial.refresh());world
Synchronizacja pogody i czasu dowolnego działającego skryptu pogody, wstrzymywana, dopóki obowiązuje powód.
world.pauseSync
Wstrzymuje synchronizację pogody i czasu z powodu: wewnątrz wnętrza, w czasie sceny albo gdy twój skrypt ustawia własną pogodę.
Strona: Klient · Czeka: nie
world.pauseSync(reason: string): voidaiLib.world.pauseSync(reason)Parametry
Prop
Type
Zwracana wartość
void.
Przykład
import { world } from "@aicore-fivem/lib/client";
export function enterApartment(): void {
world.pauseSync("apartment");
NetworkOverrideClockTime(12, 0, 0);
SetWeatherTypeNowPersist("EXTRASUNNY");
}
export function leaveApartment(): void {
world.resumeSync("apartment");
}world.resumeSync
Usuwa jeden powód wstrzymania; synchronizacja znów działa, gdy nie zostaje żaden powód.
Strona: Klient · Czeka: nie
world.resumeSync(reason: string): voidaiLib.world.resumeSync(reason)Parametry
Prop
Type
Zwracana wartość
void. Zobacz przykład world.pauseSync.
inventory
Ekwipunek lokalnego gracza przez warstwę ekwipunku ai-core: odpowiada ekwipunek wybrany przez serwer. Dawanie i zabieranie przedmiotów jest tylko na serwerze (Przedmioty).
inventory.openInventory
Otwiera ekran własnego ekwipunku gracza.
Strona: Klient · Czeka: nie
inventory.openInventory(): voidaiLib.inventory.openInventory()Zwracana wartość
void.
Przykład
import { inventory } from "@aicore-fivem/lib/client";
RegisterCommand("bag", () => inventory.openInventory(), false);inventory.hasItem
Czy gracz ma co najmniej count sztuk przedmiotu. Używaj jej w canShow, żeby gracz widział tylko to, co może zrobić; serwer sprawdza ponownie.
Strona: Klient · Czeka: nie
inventory.hasItem(item: string, count?: number): booleanlocal has = aiLib.inventory.hasItem(item, count)Parametry
Prop
Type
Zwracana wartość
boolean: true, gdy gracz ma wystarczająco.
Przykład
import { inventory, Points } from "@aicore-fivem/lib/client";
const points = new Points();
points.addVehicle("lockpick", {
label: "Lockpick",
icon: "unlock",
canShow: (vehicle) => GetVehicleDoorLockStatus(vehicle) >= 2 && inventory.hasItem("lockpick"),
onPressed: (vehicle) => emitNet("mykeys:lockpick", NetworkGetNetworkIdFromEntity(vehicle)),
});inventory.currentWeapon
Przedmiot broni w ręku gracza: jego nazwa, etykieta i obrazek.
Strona: Klient · Czeka: nie
inventory.currentWeapon(): HeldWeapon | nulllocal weapon = aiLib.inventory.currentWeapon() -- tabela albo nilZwracana wartość
HeldWeapon { name: string; label: string; image?: string } (name jak WEAPON_PISTOL, image to adres nui://, gdy ekwipunek go ma) albo null (nil), gdy ręka jest pusta.
Przykład
import { inventory, onCache } from "@aicore-fivem/lib/client";
// Czytaj ją, gdy zmienia się broń, nigdy co klatkę.
onCache("weapon", () => SendNUIMessage({ action: "weapon", data: inventory.currentWeapon() }));Klawisze
Keybind - klawisz, który gracz może przypisać na nowo w ustawieniach GTA, a którego domyślny klawisz właściciel serwera może zmienić w panelu administratora ai-core.
Pojazdy i encje
nearestVehicle, drivenVehicle, waitForEntity, entityFromNetId i funkcje właściwości pojazdów - szukanie pojazdów i encji na kliencie oraz odczyt albo nakładanie wyglądu pojazdu.