Ebenen über ai-core
medical, appearance, gestures, seatbelt, fuel, mdt, radial, world und inventory - Client-Aufrufe, die das Death-, Kleidungs-, Emote-, Gurt-, Sprit-, MDT-, Radial-, Wetter- oder Inventar-Skript erreichen, das der Server betreibt.
Diese Objekte sprechen nie mit einem bestimmten Skript. Sie fragen ai-core, und ai-core leitet an das Skript weiter, das der Server für diese Aufgabe betreibt: ai-death oder ein anderes Death-Skript, ai-appearance oder tgiann-clothing, jedes unterstützte Emote- oder Radial-Skript. Dein Skript funktioniert weiter, wenn der Betreiber eins austauscht. Wie die Ebenen funktionieren, steht unter Ebenen und die Brücke.
Wenn kein Skript dieser Art läuft, antworten die Aufrufe mit false, null oder dem eigenen Wert des Spiels, wie jeder Eintrag sagt.
medical
medical.isDead
Ob der lokale Spieler am Boden ist (tot oder im Last Stand), in dem Death-Skript, das gerade läuft. Death-Skripte halten einen bewusstlosen Ped am Leben, um ihn zu animieren, daher übersieht IsEntityDead allein sie. Nach dem ersten Aufruf ein Speicherzugriff.
Seite: Client · Wartet: nein
medical.isDead(): booleanKein Lua-Zwilling: Rufe exports['ai-core']:IsDead() auf und höre auf das lokale Event ai-core:client:dead (dead).
Rückgabewert
boolean: true, wenn die Medical-Ebene von ai-core sagt, dass der Spieler am Boden ist, oder der Ped für das Spiel tot ist.
Beispiel
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
Führt einen Handler aus, wenn der lokale Spieler zu Boden geht oder aufsteht.
Seite: Client · Wartet: nein
medical.onChange(fn: (dead: boolean) => void): voidKein Lua-Zwilling: AddEventHandler('ai-core:client:dead', function(dead) end).
Parameter
Prop
Type
Rückgabewert
void.
Beispiel
import { medical, Points } from "@aicore-fivem/lib/client";
const points = new Points();
medical.onChange(() => points.refresh()); // Punkte, deren canShow medical.isDead() liestappearance
Aussehen auf Peds über die Aussehens-Ebene von ai-core, egal welches Kleidungs-Skript läuft.
appearance.apply
Legt ein gespeichertes Aussehen auf einen Ped mit dem Modell des Aussehens. Hole das Aussehen auf dem Server mit appearance.get(charId), erstelle den Ped mit look.model und wende es dann an. Auf dem eigenen Ped des Spielers ändert es seine Kleidung.
Seite: Client · Wartet: nein
appearance.apply(ped: number, look: CharacterAppearance): booleanlocal ok = aiLib.appearance.apply(ped, look)Parameter
Prop
Type
Der Typ ist CharacterAppearance.
Rückgabewert
boolean: false, wenn der Ped verschwunden ist, das Modell abweicht oder kein Kleidungs-Skript läuft.
Beispiel
import { appearance, LocalPed, triggerServerCallback } from "@aicore-fivem/lib/client";
import type { CharacterAppearance } from "@aicore-fivem/shared";
// Eine schlafende Kopie eines Charakters, gekleidet wie er.
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),
});
}Prüfe, was der Server sendet, bevor du es castest. Ein Ped, der mit einem anderen Modell als look.model erstellt wurde, kann das Aussehen nicht übernehmen: apply antwortet mit false.
appearance.read
Das Aussehen, das ein Ped gerade trägt.
Seite: Client · Wartet: nein
appearance.read(ped: number): CharacterAppearance | nulllocal look = aiLib.appearance.read(ped) -- table oder nilParameter
Prop
Type
Rückgabewert
CharacterAppearance | null: das Aussehen, oder null (nil in Lua), wenn das Kleidungs-Skript es nicht sagen kann oder keins läuft.
Beispiel
import { appearance, cache } from "@aicore-fivem/lib/client";
const before = appearance.read(cache.ped); // später mit appearance.apply wiederherstellenappearance.openMenu
Öffnet den Kleidungsladen, den Friseur oder die gespeicherten Outfits des Kleidungs-Skripts für den Spieler.
Seite: Client · Wartet: nein
appearance.openMenu(menu: ClothingMenu): booleanlocal ok = aiLib.appearance.openMenu(menu)Parameter
Prop
Type
Der Typ ist ClothingMenu.
Rückgabewert
boolean: false, wenn das Kleidungs-Skript kein solches Menü hat oder keins läuft.
Beispiel
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
Legt dem Spieler ein Job-Outfit (eine Uniform) an, bis reloadSkin. Es wird nicht gespeichert: Ein Reconnect oder reloadSkin gibt dem Spieler seine eigene Kleidung zurück. Nur die aufgeführten Teile ändern sich.
Seite: Client · Wartet: nein
appearance.wearOutfit(outfit: JobOutfit): booleanlocal ok = aiLib.appearance.wearOutfit(outfit)Parameter
Prop
Type
Die Typen sind JobOutfit und OutfitPiece.
Rückgabewert
boolean: false, wenn es nicht geht (kein Kleidungs-Skript, ein Modell, das es nicht unterstützt).
Beispiel
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
Legt dem Spieler wieder sein gespeichertes Aussehen an (zieht ein Job-Outfit aus).
Seite: Client · Wartet: nein
appearance.reloadSkin(): booleanlocal ok = aiLib.appearance.reloadSkin()Rückgabewert
boolean: false ohne Kleidungs-Skript.
Beispiel
import { appearance } from "@aicore-fivem/lib/client";
RegisterCommand("offduty", () => appearance.reloadSkin(), false);gestures
Hände hoch, Zeigen und Emotes des jeweils laufenden Emote-Skripts, über ai-core.
gestures.isHandsUp
Ob der lokale Spieler die Hände oben hat.
Seite: Client · Wartet: nein
gestures.isHandsUp(): booleanlocal up = aiLib.gestures.isHandsUp()Rückgabewert
boolean: true, solange die Hände im laufenden Emote-Skript oben sind.
Beispiel
import { gestures, onServerCallback } from "@aicore-fivem/lib/client";
// Der Server fragt vor einem Raub, ob sich das Opfer ergeben hat.
onServerCallback("myrob:surrendered", () => gestures.isHandsUp());gestures.isPointing
Ob der lokale Spieler zeigt.
Seite: Client · Wartet: nein
gestures.isPointing(): booleanlocal pointing = aiLib.gestures.isPointing()Rückgabewert
boolean: true, solange er zeigt.
Beispiel
if (gestures.isPointing()) return; // kein Emote über das Zeigen startengestures.provider
Das Emote-Skript, das Hände hoch und Zeigen beantwortet.
Seite: Client · Wartet: nein
gestures.provider(): string | nulllocal name = aiLib.gestures.provider()Rückgabewert
string | null: sein Ressourcenname, oder null (nil), wenn keins läuft.
Beispiel
console.log(`hands up from ${gestures.provider() ?? "nothing"}`);gestures.playEmote
Spielt ein Emote nach seinem Befehlsnamen (was Spieler nach e eingeben) im laufenden Emote-Skript ab.
Seite: Client · Wartet: nein
gestures.playEmote(name: string): booleanlocal ok = aiLib.gestures.playEmote(name)Parameter
Prop
Type
Rückgabewert
boolean: false ohne Emote-Skript.
Beispiel
import { gestures } from "@aicore-fivem/lib/client";
RegisterCommand("hi", () => gestures.playEmote("wave"), false);gestures.cancelEmote
Stoppt das Emote, das der Spieler abspielt (gefesselt, niedergeschlagen).
Seite: Client · Wartet: nein
gestures.cancelEmote(): booleanlocal ok = aiLib.gestures.cancelEmote()Rückgabewert
boolean: false ohne Emote-Skript.
Beispiel
onServerEvent("mypolice:cuffed", () => gestures.cancelEmote());gestures.emoteProvider
Das Emote-Skript, das Emotes abspielt (es kann sich von dem unterscheiden, das Hände hoch beantwortet).
Seite: Client · Wartet: nein
gestures.emoteProvider(): string | nulllocal name = aiLib.gestures.emoteProvider()Rückgabewert
string | null: sein Ressourcenname, oder null (nil), wenn keins läuft.
Beispiel
if (gestures.emoteProvider() === null) console.log("no emote script: skipping the emote");seatbelt
Der Sicherheitsgurt des lokalen Spielers über ai-core, egal welches Gurt-Skript läuft.
seatbelt.isOn
Ob der Gurt angelegt ist. Frage bei Bedarf, nicht in jedem Frame.
Seite: Client · Wartet: nein
seatbelt.isOn(): boolean | nulllocal worn = aiLib.seatbelt.isOn() -- boolean oder nilRückgabewert
boolean | null: true oder false; null (nil), wenn kein Gurt-Skript antwortet.
Beispiel
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
Führt einen Handler aus, wenn sich der Gurt ändert. Nur Gurt-Skripte, die Änderungen melden, lösen ihn aus.
Seite: Client · Wartet: nein
seatbelt.onChange(fn: (worn: boolean | null) => void): voidaiLib.seatbelt.onChange(function(worn) end)Parameter
Prop
Type
Rückgabewert
void.
Beispiel
seatbelt.onChange((worn) => SendNUIMessage({ action: "belt", data: worn === true }));seatbelt.provider
Das Gurt-Skript, das antwortet.
Seite: Client · Wartet: nein
seatbelt.provider(): string | nulllocal name = aiLib.seatbelt.provider()Rückgabewert
string | null: sein Ressourcenname, oder null (nil), wenn keins antwortet.
Beispiel
if (seatbelt.provider() === null) console.log("no seat belt script runs");fuel
fuel.get
Der Spritstand eines Fahrzeugs. Der Server hält für jedes Fahrzeug einen State Bag fuel, egal welches Sprit-Skript läuft, daher ist dies ein Speicherzugriff; ohne diesen Bag ist es der Tankstand des Spiels.
Seite: Client · Wartet: nein
fuel.get(vehicle: number): numberKein Lua-Zwilling: Lies Entity(vehicle).state.fuel. Sprit setzen geht nur auf dem Server (fuel.set auf Fahrzeuge).
Parameter
Prop
Type
Rückgabewert
number: 0-100.
Beispiel
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
Öffnet das aktive Polizei-MDT für den lokalen Spieler. Das MDT prüft den Job selbst.
Seite: Client · Wartet: nein
mdt.open(): booleanlocal ok = aiLib.mdt.open()Rückgabewert
boolean: false, wenn kein MDT läuft oder es nicht von außen geöffnet werden kann.
Beispiel
import { mdt, notify } from "@aicore-fivem/lib/client";
RegisterCommand("mdt", () => {
if (!mdt.open()) notify("No MDT available", "error");
}, false);radial
Einträge im jeweils laufenden Radialmenü (ai-radialmenu, oder ein anderes über die Radial-Ebene von ai-core). ai-core behält sie über Neustarts des Radialmenüs hinweg und entfernt sie, wenn deine Ressource stoppt: einmal beim Start hinzufügen.
radial.add
Fügt dem Rad einen Eintrag hinzu oder ersetzt den Eintrag mit derselben ID.
Seite: Client · Wartet: nein
radial.add(item: RadialItem): voidaiLib.radial.add(item)Parameter
Prop
Type
RadialItem
Prop
Type
Der Typ ist RadialItem.
Rückgabewert
void.
Beispiel
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
Entfernt einen deiner Einträge. Eine unbekannte ID tut nichts.
Seite: Client · Wartet: nein
radial.remove(id: string): voidaiLib.radial.remove(id)Parameter
Prop
Type
Rückgabewert
void.
Beispiel
radial.remove("myscript:engine");radial.refresh
Liest jedes canShow eines offenen Rads erneut. Rufe es auf, nachdem sich etwas geändert hat, das sie lesen, während das Rad offen sein könnte.
Seite: Client · Wartet: nein
radial.refresh(): voidaiLib.radial.refresh()Rückgabewert
void.
Beispiel
onMembershipChange(() => radial.refresh());world
Die Wetter- und Zeitsynchronisation des jeweils laufenden Wetter-Skripts, pausiert, solange ein Grund besteht.
world.pauseSync
Pausiert die Wetter- und Zeitsynchronisation aus einem Grund: in einem Interieur, während einer Szene oder während dein Skript sein eigenes Wetter setzt.
Seite: Client · Wartet: nein
world.pauseSync(reason: string): voidaiLib.world.pauseSync(reason)Parameter
Prop
Type
Rückgabewert
void.
Beispiel
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
Entfernt einen Pausengrund; die Synchronisation läuft wieder, wenn kein Grund übrig ist.
Seite: Client · Wartet: nein
world.resumeSync(reason: string): voidaiLib.world.resumeSync(reason)Parameter
Prop
Type
Rückgabewert
void. Siehe das Beispiel bei world.pauseSync.
inventory
Das Inventar des lokalen Spielers über die Inventar-Ebene von ai-core: Das Inventar, das der Server gewählt hat, antwortet. Items geben und nehmen geht nur auf dem Server (Items).
inventory.openInventory
Öffnet den eigenen Inventarbildschirm des Spielers.
Seite: Client · Wartet: nein
inventory.openInventory(): voidaiLib.inventory.openInventory()Rückgabewert
void.
Beispiel
import { inventory } from "@aicore-fivem/lib/client";
RegisterCommand("bag", () => inventory.openInventory(), false);inventory.hasItem
Ob der Spieler mindestens count Stück eines Items hat. Nutze es in canShow, damit der Spieler nur sieht, was er tun kann; der Server prüft erneut.
Seite: Client · Wartet: nein
inventory.hasItem(item: string, count?: number): booleanlocal has = aiLib.inventory.hasItem(item, count)Parameter
Prop
Type
Rückgabewert
boolean: true, wenn der Spieler genug hat.
Beispiel
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
Das Waffen-Item in der Hand des Spielers: sein Name, Label und Bild.
Seite: Client · Wartet: nein
inventory.currentWeapon(): HeldWeapon | nulllocal weapon = aiLib.inventory.currentWeapon() -- table oder nilRückgabewert
HeldWeapon { name: string; label: string; image?: string } (name wie WEAPON_PISTOL, image eine nui://-URL, wenn das Inventar eine hat), oder null (nil), wenn die Hand leer ist.
Beispiel
import { inventory, onCache } from "@aicore-fivem/lib/client";
// Lies es, wenn sich die Waffe ändert, nie in jedem Frame.
onCache("weapon", () => SendNUIMessage({ action: "weapon", data: inventory.currentWeapon() }));Keybinds
Keybind - eine Taste, die der Spieler in den GTA-Einstellungen neu belegen kann und deren Standardtaste der Serverbetreiber im Admin-Panel von ai-core ändern kann.
Fahrzeuge und Entities
nearestVehicle, drivenVehicle, waitForEntity, entityFromNetId und die Helfer für Fahrzeug-Props - Fahrzeuge und Entities auf dem Client finden und das Aussehen eines Fahrzeugs lesen oder anwenden.