AI Core
API-Referenz

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.

Event-Namen sind Konstanten in @aicore-fivem/shared (CORE, KEY_HINTS, MENU_EVENTS, LIB_UI, VEHICLES_EVENTS, SEATBELT_EVENT), sodass TypeScript-Code den String nie selbst tippt.

TypeScript
import { CORE, type CharacterInfo } from "@aicore-fivem/shared";

on(CORE.playerLoadedEvent, (src: number, character: CharacterInfo) => {
  console.log(`${character.firstname} joined as ${src}`);
});
Lua
AddEventHandler('ai-core:playerLoaded', function(src, character)
  print(('%s joined as %d'):format(character.firstname, src))
end)

Für das ganze Leben eines Charakters (Laden, Entladen, schon vor einem Neustart geladen) nutze onCharacter der Lib (aiLib.onCharacter in Lua), statt diese beiden Events von Hand zu verarbeiten.

Lokale Server-Events

Mit TriggerEvent auf dem Server ausgelöst; andere Ressourcen und die Brücke spiegeln daraus den Spielerzustand.

EventKonstantePayload
ai-core:playerLoadedCORE.playerLoadedEvent(src, character: CharacterInfo) nachdem ein Charakter geladen und gespawnt ist.
ai-core:playerUnloadedCORE.playerUnloadedEvent(src, charId, reason: "dropped" | "switch") bevor der Zustand eines Charakters verworfen wird.
ai-core:moneyChangedCORE.moneyChangedEvent(src, account: string, balance: number, delta: number, reason: string)
ai-core:jobsChangedCORE.jobsChangedEvent(src, jobs: JobMembership[])
ai-core:dutyChangedCORE.dutyChangedEvent(src, job: string | null)
ai-core:gangsChangedCORE.gangsChangedEvent(src, gangs: GangMembership[])
ai-core:activeGangChangedCORE.activeGangChangedEvent(src, gang: string | null)
ai-core:metaChangedCORE.metaChangedEvent(src, key, value | null) ein Metadaten-Wert hat sich geändert.
ai-core:definitionsChangedCORE.definitionsChangedEvent(file: "jobs" | "gangs", name) ein Job oder eine Gang wurde im Panel geändert.
ai-core:characterScreenCORE.characterScreenEvent(src, charIds: number[]) der Charakterbildschirm lädt; ein Kleidungsskript kann mit Porträts antworten.
ai-core:inventoryChangedCORE.inventoryChangedEvent(resource: string | null) das Inventar hinter der Inventarebene hat gewechselt.
ai-core:itemUsedCORE.itemUsedEvent(src, name: string, status: Record<string, number> | null) ein Spieler hat ein Item benutzt; status = die Bedürfnisse, die es gibt (Hunger, Durst, Stress).
ai-core:playerDiedCORE.playerDiedEvent(src, killer: number | null, weaponHash: number) ein Spieler mit geladenem Charakter ist gestorben.
ai-inventory:usedItem(source, name, slot, metadata, status) nach jeder Benutzung in ai-inventory. Andere Skripte hören auf ai-core:itemUsed.
ai-vehicles:ownersVEHICLES_EVENTS.owners(puts: [plate, ownerType, ownerId][], removes: plate[]) Besitzer von Fahrzeugen im Speicher haben sich geändert (ein Paket pro Tick).
chatMessage(source, author, text) bevor ai-chat eine Nachricht zustellt; CancelEvent() verwirft sie.

Lokale Client-Events

EventKonstantePayload
ai-core:client:playerLoadedCORE.clientPlayerLoadedEvent(data: AiPlayerData) der lokale Charakter ist geladen.
ai-core:client:playerUnloadedCORE.clientPlayerUnloadedEvent()
ai-core:client:deadCORE.clientDeadEvent(dead: boolean) der lokale Spieler ging zu Boden oder stand auf, in jedem Todesskript.
ai-core:client:cacheCORE.clientCacheEvent(key, value) ein gecachter Wert hat sich geändert: ped, vehicle, seat, weapon.
ai-core:client:hudVisibleCORE.clientHudVisibleEvent(visible: boolean) HUDs werden ein- oder ausgeblendet.
ai-core:client:worldSyncCORE.clientWorldSyncEvent(paused: boolean) der Wetter- und Zeit-Sync ist pausiert oder läuft wieder.
ai-core:client:definitionsCORE.clientDefinitionsEvent(file: "jobs" | "gangs", name, definition | null)
ai-core:client:characterPortraitCORE.clientCharacterPortraitEvent(charId: number, url: string) ein Porträt für den Charakterbildschirm.
ai-core:client:keyHintsKEY_HINTS.changedEvent(hints: KeyHintView[]) die Tastenhinweise, die HUDs gerade zeigen.
ai-smallresources:seatbeltSEATBELT_EVENT(worn: boolean | null) der Sicherheitsgurt hat sich geändert.

Antworten der ai-lib-UI

Nur nötig, wenn du die Exports von ai-lib selbst aufrufst (menu, input, skillCheck und die Prompts der Lib hören für dich zu).

EventKonstantePayload
ai-lib:client:menuResultMENU_EVENTS.menuResult(resource, requestId, itemId | null) eine Auswahl oder ein Schließen (Menüs, Item-Auswahl, Minispiele).
ai-lib:client:menuHoverMENU_EVENTS.menuHover(resource, requestId, itemId) der Eintrag unter dem Zeiger.
ai-lib:client:menuToggleMENU_EVENTS.menuToggle(resource, requestId, itemId, checked) eine Schalterzeile wurde umgelegt.
ai-lib:client:inputResultMENU_EVENTS.inputResult(resource, requestId, values | null) der Eingabedialog wurde bestätigt oder geschlossen.
ai-lib:client:promptPressedLIB_UI.promptPressedEvent(resource, id) die Interaktionstaste wurde beim Prompt dieser Ressource gedrückt.
ai-lib:client:cancelProgressLIB_UI.cancelProgressEvent() die Abbruchtaste wurde während eines Fortschrittsbalkens gedrückt.

State Bags

Lies sie mit den State-Klassen der Lib (GlobalKey, PlayerState, EntityState, GlobalGroup) oder in Lua mit GlobalState[...], Player(src).state[...], Entity(e).state[...]. Nur die besitzende Ressource schreibt.

SchlüsselWoWert
ai:duty:<job>GlobalStateWie viele Spieler in einem Job im Dienst sind (dutyCountKey(job)).
ai:inventoryGlobalStateRessourcenname des aktiven Inventars.
ai:vehicleKeysGlobalStateRessourcenname des aktiven Schlüsselsystems.
ai:appearanceGlobalStateRessourcenname des aktiven Kleidungsskripts.
ai:medicalGlobalStateRessourcenname des aktiven Todesskripts.
ai:interactionGlobalState"prompt" oder "target": wie Lib-Points Spieler interagieren lassen.
ai:pvpGlobalStateOb Spieler sich gegenseitig verletzen können.
ai:clock, ai:weatherGlobalStateUhr und Wetter von ai-weathersync.
door:<id>GlobalStateai-doorlock: ob eine Tür verschlossen ist.
deadSpielertrue, solange am Boden (ai-death).
cuffedSpielertrue, solange in Handschellen (ai-police).
proximitySpielerSprachreichweite { index, distance, mode } (ai-voice).
radioChannel, callChannel, callSpeaker, muted, submixSpielerFunk-, Anruf- und Stummschaltungszustand von ai-voice.
ai:owned, ai:vidFahrzeugEin Fahrzeug in Besitz und seine ID in ai-vehicles.
ai:props, ai:setupFahrzeugDas Aussehen, das ai-core auf dem Besitzer-Client anwendet.
fuelFahrzeug0-100, gepflegt vom Spritskript.
siren:lx, siren:manu, siren:lightbarFahrzeugLichter, manueller Ton und Lichtbalken von ai-sirens.

Framework-Events (Brücke)

Die Brücke von ai-core löst die ESX- und QB-Events mit denselben Argumenten aus, sodass Skripte für diese Frameworks sie hören.

SeiteQB / QboxESX
ServerQBCore:Server:PlayerLoaded, QBCore:Server:OnPlayerUnload, QBCore:Server:OnMoneyChange, QBCore:Server:OnJobUpdate, QBCore:Server:OnGangUpdateesx:playerLoaded, esx:playerDropped, esx:playerLogout, esx:setJob
ClientQBCore:Client:OnPlayerLoaded, QBCore:Client:OnPlayerUnload, QBCore:Player:SetPlayerData, QBCore:Client:OnJobUpdate, QBCore:Client:SetDuty, QBCore:Client:OnGangUpdate, QBCore:Client:OnMoneyChangeesx:playerLoaded, esx:onPlayerLogout, esx:setAccountMoney, esx:setJob

Events anderer Skripte, die AI Core beantwortet:

EventBeantwortet von
QBCore:GetObject, esx:getSharedObjectDer Brücke: das Core-Objekt.
QBCore:Server:TriggerCallback, esx:triggerServerCallbackDer Brücke: Framework-Callbacks.
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotificationDer Brücke: die Benachrichtigung oder der Prompt von AI Core.
police:server:policeAlertai-core: Client (text), Server (text, camId, playerSource), an das aktive Alarmsystem gesendet.
hospital:client:Reviveai-death: belebt den Spieler wieder.
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggleai-core: als Pausengründe des Welt-Syncs gezählt.

Auf dieser Seite