AI Core
API-Referenz

Lib: Client

@aicore-fivem/lib/client - jeder Client-Helfer mit seiner Signatur und dem Lua-Gegenstück auf aiLib, wo es eines gibt.

TypeScript
import { Points, notify, progress, cache } from "@aicore-fivem/lib/client";

Der Client-Einstieg exportiert auch die /fivem-Helfer weiter (every, ByResource, Reasons, caller, onStop, plateOf, Export- und Locale-Helfer, State-Bag-Klassen): siehe Lib: shared und fivem. Die letzte Spalte nennt das Lua-Gegenstück auf aiLib (Lib für Lua).

Mit dem Server sprechen

HelferWasLua
triggerServerCallback(name, args = [], timeoutMs?): Promise<unknown>Fragt den Server (dort onClientCallback); parse die Antwort.triggerServerCallback
onServerCallback(name, handler: (...args) => unknown): voidBeantwortet triggerClientCallback des Servers.onServerCallback
onServerEvent(name, handler) / onServerEvent(name, { args }, handler)Ein Net-Event vom Server; Emits, die nicht vom Server kommen, werden verworfen. args parst den Payload.onServerEvent
fromServer(): booleanOb das gerade verarbeitete Event vom Server kam.
callAction(name, args = [], { fallback, timeout?, silent? })Führt eine Server-Aktion aus, zeigt die übersetzte Ablehnung selbst an, liefert die ok-Antwort oder null.callAction
isActionOk(reply), replyError(reply, fallback)Ein ActionResult von Hand lesen.
TypeScript
const reply = await callAction("buy", [itemId], { fallback: "BUY_FAILED" });
if (reply) notify(t("BOUGHT"), "success");

Der lokale Spieler

HelferWasLua
cacheped, playerId, serverId, vehicle, seat, weapon (false = keins), gepflegt von dem einen Watcher von ai-core.cache
onCache(key, handler: (value, old) => void): voidLäuft, wenn sich ein gecachter Wert ändert.cache.onChange
readPlayerState(ped), readWeapon(ped)Fahrzeug, Sitz und Waffe eines Peds in diesem Moment.
player.coords(), player.heading(), player.distanceTo(point), player.ped()Positionswerte (aus dem Cache).player
player.freeze(state: boolean)Friert den Ped ein.player.freeze
player.teleport(to: { x, y, z? }, { heading?, ground?, fade?, keepVehicle? }): Promise<void>Teleport hinter einer Abblende mit Laden der Kollision; ohne z landet man auf dem Boden.player.teleport
player.playAnim(dict, clip, options?): Promise<void>, player.stopAnim()Spielt oder stoppt eine Animation.player.playAnim, player.stopAnim
player.holdAnim(dict, clip, { ...options, while? })Hält eine Animation am Laufen, bis stop() oder while() false ist.
fadeOut(ms = 300), fadeIn(ms = 400)Bildschirm abblenden; beide lösen auf, wenn fertig.fadeOut, fadeIn
getPlayerData(key), onPlayerData(key, handler): () => void, seedPlayerData(data)Die Spielerdaten von ai-core (character, money, jobs, duty, job, gangs, activeGang, metadata).playerData.get, playerData.onChange
hasJob(jobs, minGrade = 0), inGang(gangs, minGrade = 0), onDutyIn(jobs)Mitgliedschaftsprüfungen (eine leere Liste = alle).
onMembershipChange(fn)Jobs, Dienst oder Gangs haben sich geändert.
allows(rule: AccessRule): booleanOb der Spieler einen Ort nutzen darf (online.allows auf dem Server entscheidet dasselbe).
playerPed(serverId): numberDer Ped eines Spielers nach Server-ID, 0 außerhalb des Scopes.playerPed
nearestPlayer(metres, { from?, filter? }): number | nullDie Server-ID des nächsten anderen Spielers.nearestPlayer

Orte und die Welt

HelferWasLua
new Points()Jeder Ort, den ein Spieler nutzt: Prompt oder Target (die Wahl des Betreibers), NPC, Blip.Points.new()
points.add(id, { coords, label, icon?, radius?, height?, canShow?, onPressed, onEnter?, onExit?, ped?, blip?, world?, promptOnly?, preferTarget? })Fügt einen Punkt hinzu; label darf eine Funktion sein.points:add
points.addModel(id, { models, label, icon?, radius?, canShow?(entity), onPressed(entity), vehicles?, inVehicle? })Ein Punkt auf jedem Objekt bestimmter Modelle (Geldautomaten, Stühle).points:addModel
points.addVehicle(id, { label, icon?, radius?, canShow?(vehicle), onPressed(vehicle) })Ein Punkt auf jedem vernetzten Fahrzeug.points:addVehicle
points.remove(id), clear(), refresh(id?), isInside(id)Punkte verwalten; refresh liest canShow erneut.
new Zones(): add(id, options), remove, clear, isInside, sizeBereiche ohne Interaktion.Zones.new()
new LocalPed({ model, coords, ... }): entity, removeEin Ped, den nur dieser Client sieht, erzeugt in der Nähe des Spielers.LocalPed.new()
new Blips(): add(id, options), get, remove, clear; createBlip(options)Benannte Blips.Blips.new(), Blips.create()
showPrompt(id, text, at?), hidePrompt(id), onPromptPressed(handler)Der Prompt von ai-lib von Hand (Points nutzt ihn).showPrompt, hidePrompt, onPromptPressed
new AdminWorld(files): get, onChange, view, recordsDie Client-Kopie der sync: "all"-Panel-Dateien eines Skripts.
TypeScript
const points = new Points();
points.add("shop", {
  coords: { x: 25.7, y: -1347.3, z: 29.5 },
  label: t("OPEN_SHOP"),
  icon: "basket-shopping",
  blip: { sprite: 52, color: 2, scale: 0.8, label: t("SHOP") },
  onPressed: () => openShop(),
});

UI

HelferWasLua
notify(text, kind = "info", duration?)Eine Benachrichtigungskarte.notify
progress({ label, duration, anim?, scenario?, face?, allowVehicle?, canCancel?, whileDead?, freeze?, disable? }): Promise<boolean>Eine zeitgesteuerte Aktion mit dem Balken von ai-lib; false bei Abbruch.progress
cancelProgress(), isProgressRunning()Den Balken dieser Ressource stoppen oder prüfen.progress.cancel(), progress.isRunning()
menu(request, onHover? | { onHover, onToggle }): Promise<string | null>Das Menü von ai-lib; liefert die gewählte ID.menu.show
input(request): Promise<Record<string, string | number> | null>Der Eingabedialog von ai-lib.input
itemPicker({ title, target? }): Promise<PickedItem[] | null>Admin-Werkzeuge: das Item-Raster von ai-core.itemPicker
skillCheck(difficulty | difficulty[], keys = ["e"]): Promise<boolean>Skill-Check ("easy" | "medium" | "hard" oder { areaSize, speedMultiplier }).skillCheck
lockpick({ difficulty?, pins?, picks? }): Promise<"opened" | "broken" | "cancelled">Minispiel Schlossknacken.lockpick
new NuiScreen(name, { cursor?, onClose?, closeCallback? }): open, close, send, on, isOpenEin Vollbild-NUI: Fokus, ausgeblendete HUDs, Schließen-Nachricht, Callbacks.
hud.hide(reason), hud.show(reason), hud.visible(), hud.onChange(fn)HUDs rund um eine Vollbild-UI ausblenden.hud
keyHints.show(id, { label, keybind?, key?, icon? }), keyHints.hide(id)Eine Tastenhilfe-Zeile im HUD.keyHints
radial.add(item), radial.remove(id), radial.refresh()Einträge im laufenden Radialmenü.radial
controls.disable(reason, controls, group?), controls.enable(reason), controls.disableAll(reason, except?)Deaktivierte Steuerungen, ein Job pro Frame.controls
new Keybind({ name, description, defaultKey, defaultMapper, hint?, icon?, hintLabel?, onPressed, onReleased })Eine umbelegbare Taste; das Panel kann ihre Vorgabe setzen. isPressed(), currentKey(), disable(state).Keybind.new()
TypeScript
const done = await progress({
  label: t("REPAIRING"),
  duration: 8000,
  anim: { dict: "mini@repair", clip: "fixing_a_player" },
  canCancel: true,
});

Über AI Core

HelferWasLua
inventory.openInventory(), inventory.hasItem(item, count = 1), inventory.currentWeapon()Das aktive Inventar.inventory
medical.isDead(), medical.onChange(fn)Der lokale Spieler ist am Boden, in jedem Todesskript.
gestures.isHandsUp(), isPointing(), provider()Hände hoch und Zeigen jedes Emote-Skripts.gestures
appearance.apply(ped, look), appearance.read(ped)Aussehen über das aktive Kleidungsskript.appearance
world.pauseSync(reason), world.resumeSync(reason)Den Wetter- und Zeit-Sync pausieren.world

Fahrzeuge und Entities

HelferWasLua
nearestVehicle(metres, { networked?, notOwn?, filter? }): numberDas nächste Fahrzeug.nearestVehicle
drivenVehicle(): number | falseDas Fahrzeug, das der Spieler fährt.
waitForEntity(netId, timeoutMs = 5000): Promise<number>Die Entity, sobald sie hier existiert, 0 nach dem Timeout.waitForEntity
entityFromNetId(netId, type?): numberDie Entity jetzt oder 0 (Typ 1 Ped, 2 Fahrzeug, 3 Objekt).
getVehicleProps(vehicle), setVehicleProps(vehicle, props), setVehicleSetup(vehicle, setup)Das Aussehen eines Fahrzeugs lesen und anwenden.
new PreviewVehicle(): show(model, at, setup?), clear()Ein lokales Ausstellungsfahrzeug.
vehicleLabel(model | hash | vehicle): stringAnzeigename eines Fahrzeugs.vehicleLabel

Abfragen, Streaming, Timing

HelferWasLua
raycast(from, to, { flags?, ignore?, options? }): RayHit | nullEine Linienabfrage: { coords, normal, entity }.raycast
groundZ(x, y, z = 1000): number | nullBodenhöhe, null, solange die Kollision nicht geladen ist.groundZ
locationName(coords?): { street, crossing?, zone }Straßen- und Zonennamen.locationName
waypoint(): { x, y } | nullDer Wegpunkt auf der Karte.waypoint
pedHeadshot(ped, transparent = false, timeoutMs = 5000)Headshot-Handle und Texturname eines Peds.pedHeadshot
onShot(handler: (weapon) => void): () => voidDer Frame, in dem der lokale Ped schießt.onShot
requestModel, requestAnimDict, requestAnimSet, requestPtfxAsset, requestTextureDict, requestWeaponAsset (name, timeoutMs = 10000)Ein Spiel-Asset laden.gleiche Namen
attachProp(model, { ped?, bone, offset?, rotation?, collision?, rotationOrder? }): Promise<number>Ein lokales Prop an einem Knochen eines Peds.
new TickLoop(onFrame, name?): set(active), runningEin Job pro Frame, nur eingeschaltet, solange er gebraucht wird.
new AreaFollower(event, cellSize = 64): start, stopMeldet die Rasterzelle des Spielers an einen Server-AreaStream.
new ScriptCamera(type?): start, move, glideTo, attach, pointAt, setFov, shake, blur, stopEine Skriptkamera, beim Stoppen an die Spielkamera zurückgegeben.

Auf dieser Seite