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.
| Eksport | Co |
|---|---|
Notify(notification: Notification): void | Karta powiadomienia (text, title?, kind, duration?). |
ShowProgress(label: string, duration: number): void | Pokazuje pasek postępu przez duration ms (akcję prowadzi wywołujący). |
HideProgress(): void | Ukrywa go. |
ShowPrompt(id: string, text: string, at?: { x, y, z }): void | Pokazuje lub aktualizuje prompt wywołującego; at rysuje go nad punktem w świecie. |
HidePrompt(id: string): void | Ukrywa prompt. |
OpenMenu(requestId: number, request: MenuRequest): void | Menu; wybór przychodzi jako MENU_EVENTS.menuResult. |
OpenInput(requestId: number, request: InputRequest): void | Okno wprowadzania; wartości przychodzą jako MENU_EVENTS.inputResult. |
OpenMinigame(requestId: number, request: MinigameRequest): void | Test umiejętności lub wytrych; wynik przychodzi jako MENU_EVENTS.menuResult. |
CloseDialog(): void | Zamyka 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.
| Eksport | Co |
|---|---|
AddItem(inv: number | string, item: string, count: number, metadata?, slot?): boolean | Dodaje przedmioty. |
RemoveItem(inv: number | string, item: string, count: number, metadata?, slot?): boolean | Usuwa przedmioty. |
GetItemCount(inv: number | string, item: string, metadata?): number | Ile sztuk. |
GetItems(inv: number | string): { name, label, count, slot, metadata }[] | Każdy stos z nazwą. |
CanCarryItem(inv: number | string, item: string, count: number, metadata?): boolean | Czy się zmieści. |
RegisterUsableItem(name: string, handler: (source, item) => unknown): void | handler zwracający false zostawia przedmiot; inaczej zabierana jest jego ilość consume. |
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[], personal?: boolean): void | Schowek. |
OpenInventory(source: number, inv: number | string): boolean | Otwiera ekwipunek na ekranie gracza. |
ClearInventory(inv: number | string): void | Opróżnia go. |
Items(name?: string): unknown | Jedna definicja przedmiotu (kształt ox) albo wszystkie. |
GetWeight(inv: number | string): { weight, maxWeight } | null | Niesiona 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(zwracasuccess, response, wywołujecb),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,setStashTargetsą 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 }.
| Eksport | Co |
|---|---|
CreateVehicle(owner: VehicleOwner, model: string, garage: string | null, props?): { id, plate } | null | Rejestruje nowy pojazd z właścicielem. |
GetVehicle(ref: number | string): OwnedVehicle | null | Pojazd według id lub tablicy. |
GetVehicles(owner: VehicleOwner): OwnedVehicle[] | Pojazdy postaci online albo flota pracy lub gangu. |
IsOwnedPlate(plate: string): boolean | Czy tablica należy do pojazdu z właścicielem. |
GetVehicleIdByEntity(entity: number): number | null | Id 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 | null | Encja pojazdu na mapie. |
SaveVehicle(id: number, change: { props?, fuel?, engine?, body?, state?, garage? }): void | Zapisuje stan i wygląd; zapisany tuning zostaje. |
SaveTuning(id: number, props: unknown): void | Zapisuje pełne właściwości z tuningiem (tylko warsztaty tuningowe). |
StoreVehicle(id: number, garage: string | null, state?: VehicleState): void | Odstawia pojazd do garażu (garage, out, impound). |
SetOwner(id: number, owner: VehicleOwner): void | Zmienia właściciela. |
DeleteVehicle(id: number): void | Usuwa pojazd. |
SpawnVehicle(id: number, at: { x, y, z, heading }, asker: number, cb: (netId: number | null) => void, purpose?: KeyPurpose, setup?): void | Tworzy 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
| Eksport | Co |
|---|---|
GetCatalogPrice(model: string): number | null | Cena 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.
| Eksport | Co |
|---|---|
HasKeys(source: number, vehicle: number | string): boolean | Czy gracz ma klucze. |
GiveKeys(source: number, vehicle: number | string): void | Daje klucze. |
RemoveKeys(source: number, vehicle: number | string): void | Odbiera 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).
| Eksport | Co |
|---|---|
Revive(source: number): boolean | Podnosi powalonego gracza; false, gdy nie jest powalony. |
IsDead(source: number): boolean | Czy gracz jest powalony. |
Heal(source: number): void | Peł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).
| Eksport | Co |
|---|---|
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
| Eksport | Co |
|---|---|
DispatchAlert(alert: DispatchAlert): void | Pokazuje 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.
| Eksport | Co |
|---|---|
SetDoorState(id: string, locked: boolean): void | Zamyka lub otwiera drzwi. |
IsLocked(id: string): boolean | Czy 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.
| Eksport | Co |
|---|---|
GetAccountBalance(job) | Saldo bankowe konta pracy. |
AddMoney(job, amount, reason) | Dodaje do niego. |
RemoveMoney(job, amount, reason) | Zabiera z niego. |
ai-hud
| Eksport | Strona | Co |
|---|---|---|
OpenSettings() | Klient | Otwiera ustawienia HUD-a. |
SetMinimapAlways(on: boolean) | Klient | Własny przełącznik administratora: minimapa także pieszo, niezależnie od panelu. |
GetMinimapAlways(): boolean | Klient | Czy jest włączony. |
GetNeeds(source) | Serwer | hunger, thirst, stress gracza albo null. |
SetNeed(source, need, value) | Serwer | Ustawia jedną potrzebę. |
AddNeed(source, need, delta) | Serwer | Zmienia jedną potrzebę o delta. |
ai-smallresources
Eksporty klienckie.
| Eksport | Co |
|---|---|
GetSeatbelt(): boolean | null | Czy gracz ma zapięty pas; null pieszo albo przy wyłączonych pasach. Zmiany przychodzą jako ai-smallresources:seatbelt. |
IsHandsUp(): boolean | Ręce w górze (skrypty używają lib gestures). |
IsPointing(): boolean | Wskazywanie. |
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.
| Eksport | Co |
|---|---|
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
| Eksport | Strona | Co |
|---|---|---|
AddCreateCheck(id, fn(source, charId, coords) => boolean) | Serwer | Zwróć false, żeby nie zostawiać śpiącego ciała (mieszkanie, strefa eventu); usuwane, gdy zasób, który je dodał, się zatrzyma. |
PlayerLoaded() | Klient | Budzi postać, gdy tryb budzenia to „export”. |
SetHidden(reason, hidden) | Klient | Ukrywa każde śpiące ciało na tym kliencie, dopóki trwa jakikolwiek powód (wnętrza, shelle). |
SetCarryBlocked(reason, blocked) | Klient | Ukrywa opcję noszenia, dopóki trwa jakikolwiek powód. |
ai-appearance
Eksporty klienckie, typowane AiAppearanceClientExports; skrypty używają lib appearance.
| Eksport | Co |
|---|---|
ApplyAppearance(ped: number, appearance: unknown): boolean | Nakłada wygląd ai-appearance na peda jego modelu. |
GetPedAppearance(ped: number): unknown | Wyglą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...) orazaddRadioDisableBit/removeRadioDisableBit,registerCustomSubmix,setEffectSubmix; własneaddRadioChannel/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; serwerpma-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); zdarzeniachat: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); zdarzeniechatMessage (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.