AI Core
Dokumentacja API

Eksporty skryptów

Eksporty każdego skryptu ai-* oraz API innych skryptów, które zastępują.

Skrypty ai-* nigdy nie wywołują się nawzajem dla wspólnego zadania: przedmioty, klucze, alerty, więzienie, leczenie, wygląd, elementy menu radialnego i pogoda idą przez ai-core (lib), który wywołuje eksporty poniżej. Wywołuj je sam tylko dla tego, co jest specyficzne dla danego skryptu. Eksporty typowane w @aicore-fivem/shared działają z resourceExport("ai-..."); pozostałe przez callExport(resource, name, ...args) albo zwykłe wywołanie exports[...].

Gdy skrypt zastępuje inny (provide), nazwy eksportów tamtego skryptu też odpowiadają, więc exports.ox_inventory:AddItem(...) trafia do ai-inventory.

ai-lib

Wspólny interfejs gracza. Eksporty klienckie, typowane AiLibClientExports; notify, progress, showPrompt, menu, input, skillCheck i lockpick z liba wywołują je za ciebie.

EksportCo
Notify(notification: Notification): voidKarta powiadomienia (text, title?, kind, duration?).
ShowProgress(label: string, duration: number): voidPokazuje pasek postępu przez duration ms (akcję prowadzi wywołujący).
HideProgress(): voidUkrywa go.
ShowPrompt(id: string, text: string, at?: { x, y, z }): voidPokazuje lub aktualizuje prompt wywołującego; at rysuje go nad punktem w świecie.
HidePrompt(id: string): voidUkrywa prompt.
OpenMenu(requestId: number, request: MenuRequest): voidMenu; wybór przychodzi jako MENU_EVENTS.menuResult.
OpenInput(requestId: number, request: InputRequest): voidOkno wprowadzania; wartości przychodzą jako MENU_EVENTS.inputResult.
OpenMinigame(requestId: number, request: MinigameRequest): voidTest umiejętności lub wytrych; wynik przychodzi jako MENU_EVENTS.menuResult.
CloseDialog(): voidZamyka otwarte menu lub okno wprowadzania wywołującego (odpowiedź null).

Zdarzenie serwerowe ai-lib:client:notify (LIB_UI.notifyEvent) z Notification pokazuje kartę na ekranie tego gracza.

ai-inventory

Eksporty serwerowe (własne): inne skrypty ai-* docierają do nich przez warstwę ekwipunku ai-core.

EksportCo
AddItem(inv: number | string, item: string, count: number, metadata?, slot?): booleanDodaje przedmioty.
RemoveItem(inv: number | string, item: string, count: number, metadata?, slot?): booleanUsuwa przedmioty.
GetItemCount(inv: number | string, item: string, metadata?): numberIle sztuk.
GetItems(inv: number | string): { name, label, count, slot, metadata }[]Każdy stos z nazwą.
CanCarryItem(inv: number | string, item: string, count: number, metadata?): booleanCzy się zmieści.
RegisterUsableItem(name: string, handler: (source, item) => unknown): voidhandler zwracający false zostawia przedmiot; inaczej zabierana jest jego ilość consume.
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[], personal?: boolean): voidSchowek.
OpenInventory(source: number, inv: number | string): booleanOtwiera ekwipunek na ekranie gracza.
ClearInventory(inv: number | string): voidOpróżnia go.
Items(name?: string): unknownJedna definicja przedmiotu (kształt ox) albo wszystkie.
GetWeight(inv: number | string): { weight, maxWeight } | nullNiesiona waga i limit w gramach.

Eksporty klienckie: OpenInventory(type, data), CloseInventory(), OpenSelf() (własny ekwipunek z ziemią, bagażnikiem lub schowkiem obok), GetItemCount(item), HasItem(items: string \| string[] \| Record<string, number>, amount?), GetPlayerItems().

Lokalne zdarzenie serwera ai-inventory:usedItem (source, name, slot, metadata, status).

API ox_inventory

ai-inventory robi provide dla ox_inventory i odpowiada na jego eksporty (ox_inventory 2.44). Ekwipunki nazywa się jak w ox: source gracza, nazwa schowka, { id, owner } dla schowków osobistych, tablica dla bagażników.

  • Serwer: AddItem (zwraca success, response, wywołuje cb), RemoveItem, GetItem, GetItemCount, Search (count / slots), CanCarryItem, CanCarryWeight, CanCarryAmount, GetInventory, GetInventoryItems, GetSlot, GetSlotWithItem, GetSlotsWithItem, GetSlotIdWithItem, GetSlotIdsWithItem, GetEmptySlot, SetMetadata, SetDurability, SetMaxWeight, RegisterStash, ClearInventory, Items, ItemList, forceOpenInventory (schowek, gracz, sklep), CreateTemporaryStash, CustomDrop, RemoveInventory, SwapSlots.
  • Klient: openInventory, closeInventory, Search, GetItemCount, GetPlayerItems, GetPlayerWeight, GetPlayerMaxWeight, Items, useSlot, getCurrentWeapon / GetCurrentWeapon; displayMetadata, weaponWheel, setStashTarget są przyjmowane i nic nie robią.
  • Bez odpowiedzi: hooki (registerHook, removeHooks), UpdateVehicle, ConfiscateInventory / ReturnInventory, GetContainerFromSlot, RegisterShop (sklepy pochodzą z panelu).

API qb-inventory

ai-inventory robi provide dla qb-inventory (API 2.0). Zwracane przedmioty mają oba kształty: count / metadata i amount / info.

  • Serwer: AddItem(identifier, item, amount, slot, info), RemoveItem, HasItem (nazwa, lista albo { name = amount }), GetItemCount, GetItemByName, GetItemsByName, GetItemBySlot, CanAddItem, GetFreeWeight, GetSlots, ClearInventory, SetItemData, CreateInventory, OpenInventory, OpenInventoryById, RemoveInventory, CloseInventory.
  • Klient: HasItem, CloseInventory.
  • Bez odpowiedzi: hooki i listenery, CreateShop / OpenShop, SetInventory, GetInventory, SaveInventory, LoadInventory, UseItem, GetFirstSlotByItem, GetSlotsByItem, GetTotalWeight.

ai-vehicles

Pojazdy z właścicielem. Eksporty serwerowe, typowane AiVehiclesServerExports. VehicleOwner to { type: "character" \| "job" \| "gang" \| "resource", id }.

EksportCo
CreateVehicle(owner: VehicleOwner, model: string, garage: string | null, props?): { id, plate } | nullRejestruje nowy pojazd z właścicielem.
GetVehicle(ref: number | string): OwnedVehicle | nullPojazd według id lub tablicy.
GetVehicles(owner: VehicleOwner): OwnedVehicle[]Pojazdy postaci online albo flota pracy lub gangu.
IsOwnedPlate(plate: string): booleanCzy tablica należy do pojazdu z właścicielem.
GetVehicleIdByEntity(entity: number): number | nullId pojazdu z właścicielem, który jest na mapie.
GetPlateOwners(): [plate, type, id][]Każdy pojazd z właścicielem w pamięci (potem śledź ai-vehicles:owners).
GetEntity(id: number): number | nullEncja pojazdu na mapie.
SaveVehicle(id: number, change: { props?, fuel?, engine?, body?, state?, garage? }): voidZapisuje stan i wygląd; zapisany tuning zostaje.
SaveTuning(id: number, props: unknown): voidZapisuje pełne właściwości z tuningiem (tylko warsztaty tuningowe).
StoreVehicle(id: number, garage: string | null, state?: VehicleState): voidOdstawia pojazd do garażu (garage, out, impound).
SetOwner(id: number, owner: VehicleOwner): voidZmienia właściciela.
DeleteVehicle(id: number): voidUsuwa pojazd.
SpawnVehicle(id: number, at: { x, y, z, heading }, asker: number, cb: (netId: number | null) => void, purpose?: KeyPurpose, setup?): voidTworzy encję; cb dostaje jej net id.

ai-vehicles robi provide dla qbx_vehicles: GetPlayerVehicles(filters), GetPlayerVehicle(id), CreatePlayerVehicle(request), SetPlayerVehicleOwner(id, citizenid), DeletePlayerVehicles(idType, idValue), GetVehicleIdByPlate(plate), DoesPlayerVehiclePlateExist(plate), SaveVehicle(entity, options) (filtry citizenid wymagają, by właściciel był online).

ai-vehicleshop

EksportCo
GetCatalogPrice(model: string): number | nullCena modelu w katalogu (serwer).

ai-vehiclekeys

Eksporty serwerowe, także pod qbx_vehiclekeys. Pojazd to encja albo tablica. Skrypty dają klucze przez ai-core (GiveVehicleKeys, lib vehicleKeys), który wywołuje te eksporty, gdy ai-vehiclekeys jest aktywnym systemem kluczy.

EksportCo
HasKeys(source: number, vehicle: number | string): booleanCzy gracz ma klucze.
GiveKeys(source: number, vehicle: number | string): voidDaje klucze.
RemoveKeys(source: number, vehicle: number | string): voidOdbiera klucze.
SetLockState(vehicle, state)Zamyka ("lock", true, 2) albo otwiera encję pojazdu.
IsPlayerNearVehicle(source, vehicle)Czy gracz stoi przy pojeździe.

ai-death

Eksporty serwerowe, typowane AiDeathServerExports; Revive i IsDead także pod qbx_medical. Skrypty używają zamiast tego warstwy leczenia ai-core (lib medical).

EksportCo
Revive(source: number): booleanPodnosi powalonego gracza; false, gdy nie jest powalony.
IsDead(source: number): booleanCzy gracz jest powalony.
Heal(source: number): voidPełne zdrowie dla gracza, który nie jest powalony.

Zdarzenie klienckie hospital:client:Revive wysłane z serwera podnosi gracza.

ai-prison

Eksporty serwerowe; wywołuje je warstwa więzienia ai-core (lib prison).

EksportCo
JailPlayer(source, minutes, by?)Wsadza gracza do więzienia; true, gdy się udało.
ReleasePlayer(source)Wypuszcza uwięzionego gracza.
GetJailTime(source)Pozostałe minuty (0, gdy wolny).

ai-policealert

EksportCo
DispatchAlert(alert: DispatchAlert): voidPokazuje kartę alertu; wywołuje go tylko warstwa dispatch ai-core (skrypty używają SendDispatchAlert / lib dispatch).

ai-doorlock

Eksporty serwerowe, typowane AiDoorlockServerExports; drzwi według id z panelu. Odpowiada też na setDoorState i getDoor z ox_doorlock.

EksportCo
SetDoorState(id: string, locked: boolean): voidZamyka lub otwiera drzwi.
IsLocked(id: string): booleanCzy drzwi są zamknięte.

ai-banking

Pieniądze firm dla skryptów QB (konto to nazwa pracy). Eksporty serwerowe, także pod qb-banking; getAccountMoney, addAccountMoney, removeAccountMoney z Renewed-Banking odpowiadają tak samo.

EksportCo
GetAccountBalance(job)Saldo bankowe konta pracy.
AddMoney(job, amount, reason)Dodaje do niego.
RemoveMoney(job, amount, reason)Zabiera z niego.

ai-hud

EksportStronaCo
OpenSettings()KlientOtwiera ustawienia HUD-a.
SetMinimapAlways(on: boolean)KlientWłasny przełącznik administratora: minimapa także pieszo, niezależnie od panelu.
GetMinimapAlways(): booleanKlientCzy jest włączony.
GetNeeds(source)Serwerhunger, thirst, stress gracza albo null.
SetNeed(source, need, value)SerwerUstawia jedną potrzebę.
AddNeed(source, need, delta)SerwerZmienia jedną potrzebę o delta.

ai-smallresources

Eksporty klienckie.

EksportCo
GetSeatbelt(): boolean | nullCzy gracz ma zapięty pas; null pieszo albo przy wyłączonych pasach. Zmiany przychodzą jako ai-smallresources:seatbelt.
IsHandsUp(): booleanRęce w górze (skrypty używają lib gestures).
IsPointing(): booleanWskazywanie.

ai-sirens

Eksporty klienckie dla pojazdów uprzywilejowanych; vehicle domyślnie to pojazd, w którym siedzi gracz. Zmiany stanu działają na kliencie kierowcy.

EksportCo
SetLights(vehicle, on)Włącza lub wyłącza światła.
ToggleLights(vehicle)Przełącza światła.
SetSirenTone(vehicle, tone)Ton 0-3 (0 = wyłączony).
ToggleSiren(vehicle)Włącza lub wyłącza syrenę.
CycleTone(vehicle)Następny ton.
GetSirenTone(vehicle)Obecny ton.
AreLightsOn(vehicle)Czy światła są włączone.
GetAirManuState(vehicle)Stan ręcznego tonu.
GetLightbarModel(vehicle)Model belki świetlnej albo null.

ai-exitsleeping

EksportStronaCo
AddCreateCheck(id, fn(source, charId, coords) => boolean)SerwerZwróć false, żeby nie zostawiać śpiącego ciała (mieszkanie, strefa eventu); usuwane, gdy zasób, który je dodał, się zatrzyma.
PlayerLoaded()KlientBudzi postać, gdy tryb budzenia to „export”.
SetHidden(reason, hidden)KlientUkrywa każde śpiące ciało na tym kliencie, dopóki trwa jakikolwiek powód (wnętrza, shelle).
SetCarryBlocked(reason, blocked)KlientUkrywa opcję noszenia, dopóki trwa jakikolwiek powód.

ai-appearance

Eksporty klienckie, typowane AiAppearanceClientExports; skrypty używają lib appearance.

EksportCo
ApplyAppearance(ped: number, appearance: unknown): booleanNakłada wygląd ai-appearance na peda jego modelu.
GetPedAppearance(ped: number): unknownWygląd lokalnego gracza, null dla innych pedów.

ai-radialmenu

Własne eksporty klienckie (typowane AiRadialClientExports): AddItem(item) (onSelect przyjmowane jako onPressed), RemoveItem(id, parent?), Refresh(). Skrypty używają lib radial.

Robi provide dla API innych kół:

  • qb-radialmenu: AddOption(data, id?) zwraca id, RemoveOption(id).
  • tgiann-radialmenu-target: AddMenuItem(item | items, parentId?), RemoveMenuItem(id, parentId?), ClearMenuItems(), RegisterSubMenu({ id, items }), RefreshMenu(), DisableMenu(state), IsMenuDisabled(), OpenMenu(), CloseMenu(), IsMenuOpen(), HasMenuItem(id), SetMenuItemHidden(id, state), IsMenuItemHidden(id), UpdateMenuItem(id, { label?, icon? }), ResetMenuItem(id).

ai-target

Odpowiada na klienckie API ox_target pod ai-target i ox_target: addSphereZone, addBoxZone, addPolyZone, removeZone, zoneExists, addModel, removeModel, addEntity, removeEntity, addLocalEntity, removeLocalEntity, addGlobalPed / Vehicle / Object / Player i ich removeGlobal*, disableTargeting, isActive. addGlobalOption nie jest oferowane (zapisuje ostrzeżenie). Skrypty używają Points z liba, które wybierają prompt albo target według ustawienia właściciela.

ai-voice

Zastępuje pma-voice 7.x (robi provide dla pma-voice, mumble-voip, tokovoip, toko-voip, tokovoip_script).

  • Serwer, nazwy pma-voice: setPlayerRadio, setPlayerCall, getPlayersInRadioChannel / GetPlayersInRadioChannel, addChannelCheck, overrideRadioNameGetter, isValidPlayer.
  • Serwer, własne: getBackend, setPlayerProximityMode(source, index), setPlayerRange(source, metres | null), getPlayerProximity(source), toggleMute(source, seconds?), addProximityCheck(fn(source, index, distance)) (false odmawia), addPlayerRadioListen / removePlayerRadioListen / setPlayerRadioActive(source, channel), getPlayerRadioChannels(source) ({ active, channels }), addCallCheck(fn(source, callId)) (true pozwala), setPlayerCallSpeaker(source, on) / getPlayerCallSpeaker(source), setPlayerSubmix(source, name | null).
  • Klient: eksporty klienckie pma-voice (setRadioChannel, setCallChannel, setRadioVolume, setCallVolume, setVoiceProperty, overrideProximityRange, toggleMutePlayer, toggleRadioAnim...) oraz addRadioDisableBit / removeRadioDisableBit, registerCustomSubmix, setEffectSubmix; własne addRadioChannel / removeRadioChannel / setActiveRadioChannel / getRadioChannels, setCallSpeaker / getCallSpeaker, setRadioAnimDisabled, createSubmix(name, spec) / getSubmix / editSubmix / listSubmixes, cycleProximity, getBackend, isRadioTalking.
  • Zdarzenia lokalne: klient pma-voice:setTalkingMode, pma-voice:radioActive, pma-voice:toggleRadioAnim; serwer pma-voice:playerMuted.

ai-weathersync

Eksporty pod ai-weathersync i qb-weathersync (cały jego kontrakt): setWeather, setTime, setBlackout, setTimeFreeze, setDynamicWeather, nextWeatherStage, getWeatherState, getTime, getBlackoutState, getTimeFreezeState, getDynamicWeather. Skrypty używają GetWeather / SetWeather... z ai-core (lib world), które działają z każdym skryptem pogody.

ai-chat

Zastępuje zasób chat FiveM.

  • Klient: eksporty addMessage(message), addSuggestion(name, help, params); zdarzenia chat:addMessage, chatMessage (author, color, text), chat:addSuggestion(s), chat:removeSuggestion, chat:addMode / chat:removeMode, chat:clear.
  • Serwer: eksporty addMessage(target, message), registerMessageHook(fn), registerMode(data); zdarzenie chatMessage (source, author, text) przed dostarczeniem (anuluj je, żeby odrzucić wiadomość).

ai-mysql

Zastępuje oxmysql: eksporty pod ai-mysql i oxmysql: query, single, scalar, insert, update, prepare, rawExecute, transaction, startTransaction, store, isReady, awaitConnection, execute, fetch, każdy także jako <name>_async / <name>Sync. Także nazwy ghmattimysql (execute, scalar, transaction, store) i mysql-async (mysql_execute, mysql_insert, mysql_fetch_all, mysql_fetch_scalar, mysql_transaction, mysql_store); zdarzenia oxmysql:error, oxmysql:transaction-error. Zobacz Baza danych.

Na tej stronie