AI Core
Dokumentacja API

Lib: klient

@aicore-fivem/lib/client - każda funkcja kliencka z sygnaturą oraz jej odpowiednik w Lua aiLib, jeśli istnieje.

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

Wejście klienckie eksportuje też funkcje /fivem (every, ByResource, Reasons, caller, onStop, plateOf, funkcje eksportów i tłumaczeń, klasy state bagów): zobacz Lib: shared i fivem. Ostatnia kolumna podaje odpowiednik w aiLib (Lib dla Lua).

Rozmowa z serwerem

FunkcjaCoLua
triggerServerCallback(name, args = [], timeoutMs?): Promise<unknown>Pyta serwer (tam onClientCallback); przeparsuj odpowiedź.triggerServerCallback
onServerCallback(name, handler: (...args) => unknown): voidOdpowiada na triggerClientCallback serwera.onServerCallback
onServerEvent(name, handler) / onServerEvent(name, { args }, handler)Zdarzenie sieciowe z serwera; wywołania, które nie przyszły z serwera, są odrzucane. args parsuje ładunek.onServerEvent
fromServer(): booleanCzy obsługiwane zdarzenie przyszło z serwera.
callAction(name, args = [], { fallback, timeout?, silent? })Uruchamia akcję na serwerze, sam pokazuje przetłumaczoną odmowę, zwraca odpowiedź ok albo null.callAction
isActionOk(reply), replyError(reply, fallback)Ręczne czytanie ActionResult.
TypeScript
const reply = await callAction("buy", [itemId], { fallback: "BUY_FAILED" });
if (reply) notify(t("BOUGHT"), "success");

Lokalny gracz

FunkcjaCoLua
cacheped, playerId, serverId, vehicle, seat, weapon (false = brak), utrzymywane przez jeden obserwator ai-core.cache
onCache(key, handler: (value, old) => void): voidDziała, gdy zmienia się zapamiętana wartość.cache.onChange
readPlayerState(ped), readWeapon(ped)Pojazd, miejsce i broń peda w tej chwili.
player.coords(), player.heading(), player.distanceTo(point), player.ped()Odczyty pozycji (z pamięci podręcznej).player
player.freeze(state: boolean)Zamraża peda.player.freeze
player.teleport(to: { x, y, z? }, { heading?, ground?, fade?, keepVehicle? }): Promise<void>Teleport za wygaszeniem ekranu z wczytaniem kolizji; bez z ląduje na ziemi.player.teleport
player.playAnim(dict, clip, options?): Promise<void>, player.stopAnim()Odtwarza lub zatrzymuje animację.player.playAnim, player.stopAnim
player.holdAnim(dict, clip, { ...options, while? })Utrzymuje animację do stop() albo dopóki while() nie zwróci false.
fadeOut(ms = 300), fadeIn(ms = 400)Wygaszanie ekranu; każde kończy się, gdy gotowe.fadeOut, fadeIn
getPlayerData(key), onPlayerData(key, handler): () => void, seedPlayerData(data)Dane gracza z ai-core (character, money, jobs, duty, job, gangs, activeGang, metadata).playerData.get, playerData.onChange
hasJob(jobs, minGrade = 0), inGang(gangs, minGrade = 0), onDutyIn(jobs)Sprawdzanie członkostwa (pusta lista = wszyscy).
onMembershipChange(fn)Zmieniły się prace, służba lub gangi.
allows(rule: AccessRule): booleanCzy gracz może użyć miejsca (online.allows na serwerze decyduje tak samo).
playerPed(serverId): numberPed gracza według id serwerowego, 0 poza zasięgiem.playerPed
nearestPlayer(metres, { from?, filter? }): number | nullId serwerowe najbliższego innego gracza.nearestPlayer

Miejsca i świat

FunkcjaCoLua
new Points()Każde miejsce, z którego korzysta gracz: prompt albo target (wybór właściciela), NPC, blip.Points.new()
points.add(id, { coords, label, icon?, radius?, height?, canShow?, onPressed, onEnter?, onExit?, ped?, blip?, world?, promptOnly?, preferTarget? })Dodaje punkt; label może być funkcją.points:add
points.addModel(id, { models, label, icon?, radius?, canShow?(entity), onPressed(entity), vehicles?, inVehicle? })Punkt na każdym obiekcie danych modeli (bankomaty, krzesła).points:addModel
points.addVehicle(id, { label, icon?, radius?, canShow?(vehicle), onPressed(vehicle) })Punkt na każdym pojeździe sieciowym.points:addVehicle
points.remove(id), clear(), refresh(id?), isInside(id)Zarządzanie punktami; refresh ponownie czyta canShow.
new Zones(): add(id, options), remove, clear, isInside, sizeObszary bez interakcji.Zones.new()
new LocalPed({ model, coords, ... }): entity, removePed widoczny tylko dla tego klienta, tworzony w pobliżu gracza.LocalPed.new()
new Blips(): add(id, options), get, remove, clear; createBlip(options)Nazwane blipy.Blips.new(), Blips.create()
showPrompt(id, text, at?), hidePrompt(id), onPromptPressed(handler)Prompt ai-lib ręcznie (Points go używa).showPrompt, hidePrompt, onPromptPressed
new AdminWorld(files): get, onChange, view, recordsKopia kliencka plików panelu skryptu z sync: "all".
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(),
});

Interfejs

FunkcjaCoLua
notify(text, kind = "info", duration?)Karta powiadomienia.notify
progress({ label, duration, anim?, scenario?, face?, allowVehicle?, canCancel?, whileDead?, freeze?, disable? }): Promise<boolean>Akcja z czasem i paskiem ai-lib; false po anulowaniu.progress
cancelProgress(), isProgressRunning()Zatrzymanie lub sprawdzenie paska tego zasobu.progress.cancel(), progress.isRunning()
menu(request, onHover? | { onHover, onToggle }): Promise<string | null>Menu ai-lib; zwraca wybrane id.menu.show
input(request): Promise<Record<string, string | number> | null>Okno wprowadzania ai-lib.input
itemPicker({ title, target? }): Promise<PickedItem[] | null>Narzędzia administratora: siatka przedmiotów ai-core.itemPicker
skillCheck(difficulty | difficulty[], keys = ["e"]): Promise<boolean>Test umiejętności ("easy" | "medium" | "hard" albo { areaSize, speedMultiplier }).skillCheck
lockpick({ difficulty?, pins?, picks? }): Promise<"opened" | "broken" | "cancelled">Minigra z wytrychem.lockpick
new NuiScreen(name, { cursor?, onClose?, closeCallback? }): open, close, send, on, isOpenPełnoekranowy NUI: fokus, ukryte HUD-y, wiadomość zamknięcia, callbacki.
hud.hide(reason), hud.show(reason), hud.visible(), hud.onChange(fn)Ukrywanie HUD-ów wokół pełnoekranowego interfejsu.hud
keyHints.show(id, { label, keybind?, key?, icon? }), keyHints.hide(id)Linia pomocy klawisza na HUD-zie.keyHints
radial.add(item), radial.remove(id), radial.refresh()Elementy w tym menu radialnym, które działa.radial
controls.disable(reason, controls, group?), controls.enable(reason), controls.disableAll(reason, except?)Wyłączone sterowanie, jedno zadanie na klatkę.controls
new Keybind({ name, description, defaultKey, defaultMapper, hint?, icon?, hintLabel?, onPressed, onReleased })Klawisz do przypisania; panel może ustawić domyślny. 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,
});

Przez AI Core

FunkcjaCoLua
inventory.openInventory(), inventory.hasItem(item, count = 1), inventory.currentWeapon()Aktywny ekwipunek.inventory
medical.isDead(), medical.onChange(fn)Lokalny gracz jest powalony, w dowolnym skrypcie śmierci.
gestures.isHandsUp(), isPointing(), provider()Ręce w górze i wskazywanie w dowolnym skrypcie emotek.gestures
appearance.apply(ped, look), appearance.read(ped)Wygląd przez aktywny skrypt ubrań.appearance
world.pauseSync(reason), world.resumeSync(reason)Wstrzymanie synchronizacji pogody i czasu.world

Pojazdy i encje

FunkcjaCoLua
nearestVehicle(metres, { networked?, notOwn?, filter? }): numberNajbliższy pojazd.nearestVehicle
drivenVehicle(): number | falsePojazd, którym gracz kieruje.
waitForEntity(netId, timeoutMs = 5000): Promise<number>Encja, gdy pojawi się tutaj, 0 po upływie czasu.waitForEntity
entityFromNetId(netId, type?): numberEncja teraz albo 0 (typ 1 ped, 2 pojazd, 3 obiekt).
getVehicleProps(vehicle), setVehicleProps(vehicle, props), setVehicleSetup(vehicle, setup)Odczyt i nałożenie wyglądu pojazdu.
new PreviewVehicle(): show(model, at, setup?), clear()Lokalny pojazd salonowy.
vehicleLabel(model | hash | vehicle): stringWyświetlana nazwa pojazdu.vehicleLabel

Sondy, wczytywanie, czas

FunkcjaCoLua
raycast(from, to, { flags?, ignore?, options? }): RayHit | nullSonda liniowa: { coords, normal, entity }.raycast
groundZ(x, y, z = 1000): number | nullWysokość gruntu, null, gdy kolizja nie jest wczytana.groundZ
locationName(coords?): { street, crossing?, zone }Nazwy ulicy i strefy.locationName
waypoint(): { x, y } | nullPunkt nawigacji na mapie.waypoint
pedHeadshot(ped, transparent = false, timeoutMs = 5000)Uchwyt i nazwa tekstury zdjęcia twarzy peda.pedHeadshot
onShot(handler: (weapon) => void): () => voidKlatka, w której lokalny ped strzela.onShot
requestModel, requestAnimDict, requestAnimSet, requestPtfxAsset, requestTextureDict, requestWeaponAsset (name, timeoutMs = 10000)Wczytanie zasobu gry.te same nazwy
attachProp(model, { ped?, bone, offset?, rotation?, collision?, rotationOrder? }): Promise<number>Lokalny prop trzymany przy kości peda.
new TickLoop(onFrame, name?): set(active), runningZadanie na każdą klatkę, włączane tylko, gdy potrzebne.
new AreaFollower(event, cellSize = 64): start, stopZgłasza komórkę siatki gracza do serwerowego AreaStream.
new ScriptCamera(type?): start, move, glideTo, attach, pointAt, setFov, shake, blur, stopKamera skryptowa, oddawana kamerze gry po zatrzymaniu.

Na tej stronie