Skript-Exports
Die Exports jedes ai-*-Skripts und die APIs anderer Skripte, die sie ersetzen.
ai-*-Skripte rufen sich für eine gemeinsame Aufgabe nie gegenseitig auf: Items, Schlüssel, Alarme, Gefängnis, Medizin, Aussehen, Radialeinträge und Wetter laufen über ai-core (die Lib), das die Exports unten aufruft. Ruf sie selbst nur für das auf, was diesem Skript eigen ist. In @aicore-fivem/shared typisierte Exports funktionieren mit resourceExport("ai-..."); die anderen mit callExport(resource, name, ...args) oder einem normalen exports[...]-Aufruf.
Wo ein Skript ein anderes ersetzt (provide), antworten auch die Export-Namen des anderen Skripts, sodass exports.ox_inventory:AddItem(...) bei ai-inventory ankommt.
ai-lib
Die gemeinsame Spieler-UI. Client-Exports, typisiert als AiLibClientExports; notify, progress, showPrompt, menu, input, skillCheck und lockpick der Lib rufen sie für dich auf.
| Export | Was |
|---|---|
Notify(notification: Notification): void | Eine Benachrichtigungskarte (text, title?, kind, duration?). |
ShowProgress(label: string, duration: number): void | Zeigt den Fortschrittsbalken für duration ms (der Aufrufer führt die Aktion aus). |
HideProgress(): void | Blendet ihn aus. |
ShowPrompt(id: string, text: string, at?: { x, y, z }): void | Zeigt oder aktualisiert den Prompt des Aufrufers; at zeichnet ihn über einen Punkt in der Welt. |
HidePrompt(id: string): void | Blendet einen Prompt aus. |
OpenMenu(requestId: number, request: MenuRequest): void | Ein Menü; die Auswahl kommt als MENU_EVENTS.menuResult. |
OpenInput(requestId: number, request: InputRequest): void | Ein Eingabedialog; die Werte kommen als MENU_EVENTS.inputResult. |
OpenMinigame(requestId: number, request: MinigameRequest): void | Ein Skill-Check oder Schlossknacken; das Ergebnis kommt als MENU_EVENTS.menuResult. |
CloseDialog(): void | Schließt das offene Menü oder die Eingabe des Aufrufers (mit null beantwortet). |
Das Server-Event ai-lib:client:notify (LIB_UI.notifyEvent) mit einer Notification zeigt eine Karte auf dem Bildschirm dieses Spielers.
ai-inventory
Server-Exports (eigene): Andere ai-*-Skripte erreichen sie über die Inventarebene von ai-core.
| Export | Was |
|---|---|
AddItem(inv: number | string, item: string, count: number, metadata?, slot?): boolean | Fügt Items hinzu. |
RemoveItem(inv: number | string, item: string, count: number, metadata?, slot?): boolean | Entfernt Items. |
GetItemCount(inv: number | string, item: string, metadata?): number | Wie viele. |
GetItems(inv: number | string): { name, label, count, slot, metadata }[] | Jeder Stapel mit seinem Label. |
CanCarryItem(inv: number | string, item: string, count: number, metadata?): boolean | Ob es passt. |
RegisterUsableItem(name: string, handler: (source, item) => unknown): void | Gibt handler false zurück, bleibt das Item; sonst wird seine consume-Menge genommen. |
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[], personal?: boolean): void | Ein Lager. |
OpenInventory(source: number, inv: number | string): boolean | Öffnet ein Inventar auf dem Bildschirm eines Spielers. |
ClearInventory(inv: number | string): void | Leert es. |
Items(name?: string): unknown | Eine Item-Definition (ox-Form) oder alle. |
GetWeight(inv: number | string): { weight, maxWeight } | null | Getragenes Gewicht und Limit in Gramm. |
Client-Exports: OpenInventory(type, data), CloseInventory(), OpenSelf() (eigenes Inventar mit Boden, Kofferraum oder Handschuhfach daneben), GetItemCount(item), HasItem(items: string \| string[] \| Record<string, number>, amount?), GetPlayerItems().
Lokales Server-Event ai-inventory:usedItem (source, name, slot, metadata, status).
ox_inventory-API
ai-inventory providet ox_inventory und beantwortet dessen Exports (ox_inventory 2.44). Inventare heißen wie in ox: eine Spieler-Source, ein Lagername, { id, owner } für persönliche Lager, ein Kennzeichen für Kofferräume.
- Server:
AddItem(gibtsuccess, responsezurück, ruftcbauf),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(Lager, Spieler, Shop),CreateTemporaryStash,CustomDrop,RemoveInventory,SwapSlots. - Client:
openInventory,closeInventory,Search,GetItemCount,GetPlayerItems,GetPlayerWeight,GetPlayerMaxWeight,Items,useSlot,getCurrentWeapon/GetCurrentWeapon;displayMetadata,weaponWheel,setStashTargetwerden angenommen und tun nichts. - Nicht beantwortet: Hooks (
registerHook,removeHooks),UpdateVehicle,ConfiscateInventory/ReturnInventory,GetContainerFromSlot,RegisterShop(Shops kommen aus dem Panel).
qb-inventory-API
ai-inventory providet qb-inventory (2.0-API). Zurückgegebene Items tragen beide Formen: count / metadata und amount / info.
- Server:
AddItem(identifier, item, amount, slot, info),RemoveItem,HasItem(Name, Liste oder{ name = amount }),GetItemCount,GetItemByName,GetItemsByName,GetItemBySlot,CanAddItem,GetFreeWeight,GetSlots,ClearInventory,SetItemData,CreateInventory,OpenInventory,OpenInventoryById,RemoveInventory,CloseInventory. - Client:
HasItem,CloseInventory. - Nicht beantwortet: Hooks und Listener,
CreateShop/OpenShop,SetInventory,GetInventory,SaveInventory,LoadInventory,UseItem,GetFirstSlotByItem,GetSlotsByItem,GetTotalWeight.
ai-vehicles
Fahrzeuge in Besitz. Server-Exports, typisiert als AiVehiclesServerExports. VehicleOwner ist { type: "character" \| "job" \| "gang" \| "resource", id }.
| Export | Was |
|---|---|
CreateVehicle(owner: VehicleOwner, model: string, garage: string | null, props?): { id, plate } | null | Registriert ein neues Fahrzeug in Besitz. |
GetVehicle(ref: number | string): OwnedVehicle | null | Ein Fahrzeug nach ID oder Kennzeichen. |
GetVehicles(owner: VehicleOwner): OwnedVehicle[] | Fahrzeuge eines Online-Charakters oder eine Job- oder Gang-Flotte. |
IsOwnedPlate(plate: string): boolean | Ob ein Kennzeichen zu einem Fahrzeug in Besitz gehört. |
GetVehicleIdByEntity(entity: number): number | null | Die ID eines gespawnten Fahrzeugs in Besitz. |
GetPlateOwners(): [plate, type, id][] | Jedes Fahrzeug in Besitz im Speicher (danach ai-vehicles:owners folgen). |
GetEntity(id: number): number | null | Die gespawnte Entity eines Fahrzeugs. |
SaveVehicle(id: number, change: { props?, fuel?, engine?, body?, state?, garage? }): void | Speichert Zustand und Aussehen; das gespeicherte Tuning bleibt. |
SaveTuning(id: number, props: unknown): void | Speichert die vollen Props mit Tuning (nur Tuning-Werkstätten). |
StoreVehicle(id: number, garage: string | null, state?: VehicleState): void | Stellt ein Fahrzeug in eine Garage (garage, out, impound). |
SetOwner(id: number, owner: VehicleOwner): void | Ändert den Besitzer. |
DeleteVehicle(id: number): void | Löscht ein Fahrzeug. |
SpawnVehicle(id: number, at: { x, y, z, heading }, asker: number, cb: (netId: number | null) => void, purpose?: KeyPurpose, setup?): void | Erzeugt die Entity; cb bekommt ihre Net-ID. |
ai-vehicles providet qbx_vehicles: GetPlayerVehicles(filters), GetPlayerVehicle(id), CreatePlayerVehicle(request), SetPlayerVehicleOwner(id, citizenid), DeletePlayerVehicles(idType, idValue), GetVehicleIdByPlate(plate), DoesPlayerVehiclePlateExist(plate), SaveVehicle(entity, options) (citizenid-Filter brauchen den Besitzer online).
ai-vehicleshop
| Export | Was |
|---|---|
GetCatalogPrice(model: string): number | null | Der Katalogpreis eines Modells (Server). |
ai-vehiclekeys
Server-Exports, auch unter qbx_vehiclekeys. Ein Fahrzeug ist eine Entity oder ein Kennzeichen. Skripte geben Schlüssel über ai-core (GiveVehicleKeys, Lib vehicleKeys), das diese aufruft, solange ai-vehiclekeys das aktive Schlüsselsystem ist.
| Export | Was |
|---|---|
HasKeys(source: number, vehicle: number | string): boolean | Ob der Spieler die Schlüssel hat. |
GiveKeys(source: number, vehicle: number | string): void | Gibt Schlüssel. |
RemoveKeys(source: number, vehicle: number | string): void | Nimmt Schlüssel. |
SetLockState(vehicle, state) | Verschließt ("lock", true, 2) oder öffnet eine Fahrzeug-Entity. |
IsPlayerNearVehicle(source, vehicle) | Ob der Spieler nahe am Fahrzeug steht. |
ai-death
Server-Exports, typisiert als AiDeathServerExports; Revive und IsDead auch unter qbx_medical. Skripte nutzen stattdessen die Medizinebene von ai-core (Lib medical).
| Export | Was |
|---|---|
Revive(source: number): boolean | Bringt einen niedergestreckten Spieler auf die Beine; false, wenn er nicht am Boden ist. |
IsDead(source: number): boolean | Ob der Spieler am Boden ist. |
Heal(source: number): void | Volle Gesundheit für einen Spieler, der nicht am Boden ist. |
Das Client-Event hospital:client:Revive vom Server belebt den Spieler wieder.
ai-prison
Server-Exports; die Gefängnisebene von ai-core (Lib prison) ruft sie auf.
| Export | Was |
|---|---|
JailPlayer(source, minutes, by?) | Sperrt einen Spieler ein; true, wenn es geklappt hat. |
ReleasePlayer(source) | Lässt einen eingesperrten Spieler frei. |
GetJailTime(source) | Verbleibende Minuten (0, wenn frei). |
ai-policealert
| Export | Was |
|---|---|
DispatchAlert(alert: DispatchAlert): void | Zeigt eine Alarmkarte; nur die Dispatch-Ebene von ai-core ruft es auf (Skripte nutzen SendDispatchAlert / Lib dispatch). |
ai-doorlock
Server-Exports, typisiert als AiDoorlockServerExports; Türen nach ihrer Panel-ID. Beantwortet auch setDoorState und getDoor von ox_doorlock.
| Export | Was |
|---|---|
SetDoorState(id: string, locked: boolean): void | Verschließt oder öffnet eine Tür. |
IsLocked(id: string): boolean | Ob eine Tür verschlossen ist. |
ai-banking
Firmengeld für QB-Skripte (ein Konto ist ein Job-Name). Server-Exports, auch unter qb-banking; getAccountMoney, addAccountMoney, removeAccountMoney von Renewed-Banking antworten genauso.
| Export | Was |
|---|---|
GetAccountBalance(job) | Der Bankstand eines Job-Kontos. |
AddMoney(job, amount, reason) | Zahlt darauf ein. |
RemoveMoney(job, amount, reason) | Nimmt davon. |
ai-hud
| Export | Seite | Was |
|---|---|---|
OpenSettings() | Client | Öffnet die HUD-Einstellungen. |
SetMinimapAlways(on: boolean) | Client | Der eigene Schalter eines Admins: die Minikarte zu Fuß, egal was das Panel sagt. |
GetMinimapAlways(): boolean | Client | Ob sie gehalten wird. |
GetNeeds(source) | Server | hunger, thirst, stress des Spielers oder null. |
SetNeed(source, need, value) | Server | Setzt ein Bedürfnis. |
AddNeed(source, need, delta) | Server | Ändert ein Bedürfnis um delta. |
ai-smallresources
Client-Exports.
| Export | Was |
|---|---|
GetSeatbelt(): boolean | null | Ob der Spieler angeschnallt ist; null zu Fuß oder bei ausgeschalteten Gurten. Änderungen kommen als ai-smallresources:seatbelt. |
IsHandsUp(): boolean | Hände hoch (Skripte nutzen Lib gestures). |
IsPointing(): boolean | Zeigen. |
ai-sirens
Client-Exports für Einsatzfahrzeuge; vehicle ist standardmäßig das, in dem der Spieler sitzt. Zustandsänderungen wirken auf dem Client des Fahrers.
| Export | Was |
|---|---|
SetLights(vehicle, on) | Lichter an oder aus. |
ToggleLights(vehicle) | Schaltet die Lichter um. |
SetSirenTone(vehicle, tone) | Ton 0-3 (0 = aus). |
ToggleSiren(vehicle) | Sirene an oder aus. |
CycleTone(vehicle) | Der nächste Ton. |
GetSirenTone(vehicle) | Der aktuelle Ton. |
AreLightsOn(vehicle) | Ob die Lichter an sind. |
GetAirManuState(vehicle) | Der Zustand des manuellen Tons. |
GetLightbarModel(vehicle) | Das Lichtbalken-Modell oder null. |
ai-exitsleeping
| Export | Seite | Was |
|---|---|---|
AddCreateCheck(id, fn(source, charId, coords) => boolean) | Server | Gib false zurück, um keinen schlafenden Körper zu hinterlassen (eine Wohnung, eine Eventzone); entfernt, wenn die hinzufügende Ressource stoppt. |
PlayerLoaded() | Client | Weckt den Charakter, wenn der Weckmodus „export“ ist. |
SetHidden(reason, hidden) | Client | Blendet jeden schlafenden Körper auf diesem Client aus, solange ein Grund besteht (Innenräume, Shells). |
SetCarryBlocked(reason, blocked) | Client | Blendet die Trage-Option aus, solange ein Grund besteht. |
ai-appearance
Client-Exports, typisiert als AiAppearanceClientExports; Skripte nutzen Lib appearance.
| Export | Was |
|---|---|
ApplyAppearance(ped: number, appearance: unknown): boolean | Legt ein ai-appearance-Aussehen auf einen Ped seines Modells. |
GetPedAppearance(ped: number): unknown | Das Aussehen des lokalen Spielers, null für andere Peds. |
ai-radialmenu
Eigene Client-Exports (typisiert als AiRadialClientExports): AddItem(item) (onSelect wird als onPressed angenommen), RemoveItem(id, parent?), Refresh(). Skripte nutzen Lib radial.
Es providet die APIs anderer Räder:
qb-radialmenu:AddOption(data, id?)gibt die ID zurück,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
Beantwortet die ox_target-Client-API unter ai-target und ox_target: addSphereZone, addBoxZone, addPolyZone, removeZone, zoneExists, addModel, removeModel, addEntity, removeEntity, addLocalEntity, removeLocalEntity, addGlobalPed / Vehicle / Object / Player und ihre removeGlobal*, disableTargeting, isActive. addGlobalOption wird nicht angeboten (es loggt eine Warnung). Skripte nutzen Lib Points, das nach der Einstellung des Betreibers Prompt oder Target wählt.
ai-voice
Ersetzt pma-voice 7.x (providet pma-voice, mumble-voip, tokovoip, toko-voip, tokovoip_script).
- Server, pma-voice-Namen:
setPlayerRadio,setPlayerCall,getPlayersInRadioChannel/GetPlayersInRadioChannel,addChannelCheck,overrideRadioNameGetter,isValidPlayer. - Server, eigene:
getBackend,setPlayerProximityMode(source, index),setPlayerRange(source, metres | null),getPlayerProximity(source),toggleMute(source, seconds?),addProximityCheck(fn(source, index, distance))(false lehnt ab),addPlayerRadioListen/removePlayerRadioListen/setPlayerRadioActive(source, channel),getPlayerRadioChannels(source)({ active, channels }),addCallCheck(fn(source, callId))(true erlaubt),setPlayerCallSpeaker(source, on)/getPlayerCallSpeaker(source),setPlayerSubmix(source, name | null). - Client: die Client-Exports von pma-voice (
setRadioChannel,setCallChannel,setRadioVolume,setCallVolume,setVoiceProperty,overrideProximityRange,toggleMutePlayer,toggleRadioAnim...) plusaddRadioDisableBit/removeRadioDisableBit,registerCustomSubmix,setEffectSubmix; eigeneaddRadioChannel/removeRadioChannel/setActiveRadioChannel/getRadioChannels,setCallSpeaker/getCallSpeaker,setRadioAnimDisabled,createSubmix(name, spec)/getSubmix/editSubmix/listSubmixes,cycleProximity,getBackend,isRadioTalking. - Lokale Events: Client
pma-voice:setTalkingMode,pma-voice:radioActive,pma-voice:toggleRadioAnim; Serverpma-voice:playerMuted.
ai-weathersync
Exports unter ai-weathersync und qb-weathersync (dessen ganzer Vertrag): setWeather, setTime, setBlackout, setTimeFreeze, setDynamicWeather, nextWeatherStage, getWeatherState, getTime, getBlackoutState, getTimeFreezeState, getDynamicWeather. Skripte nutzen GetWeather / SetWeather... von ai-core (Lib world), die mit jedem Wetterskript funktionieren.
ai-chat
Ersetzt die chat-Ressource von FiveM.
- Client: Exports
addMessage(message),addSuggestion(name, help, params); Eventschat:addMessage,chatMessage (author, color, text),chat:addSuggestion(s),chat:removeSuggestion,chat:addMode/chat:removeMode,chat:clear. - Server: Exports
addMessage(target, message),registerMessageHook(fn),registerMode(data); EventchatMessage (source, author, text)vor der Zustellung (abbrechen, um die Nachricht zu verwerfen).
ai-mysql
Ersetzt oxmysql: Exports unter ai-mysql und oxmysql: query, single, scalar, insert, update, prepare, rawExecute, transaction, startTransaction, store, isReady, awaitConnection, execute, fetch, jeweils auch als <name>_async / <name>Sync. Dazu die Namen von ghmattimysql (execute, scalar, transaction, store) und mysql-async (mysql_execute, mysql_insert, mysql_fetch_all, mysql_fetch_scalar, mysql_transaction, mysql_store); Events oxmysql:error, oxmysql:transaction-error. Siehe Datenbank.
Events und Zustand
Die Events, die ai-core und die ai-*-Skripte auslösen, mit Payloads, die State Bags, die sie schreiben, und die ESX- / QB-Events, die die Brücke auslöst.
Lib: Client
@aicore-fivem/lib/client - jeder Client-Helfer mit seiner Signatur und dem Lua-Gegenstück auf aiLib, wo es eines gibt.