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.
import { CORE, type CharacterInfo } from "@aicore-fivem/shared";
on(CORE.playerLoadedEvent, (src: number, character: CharacterInfo) => {
console.log(`${character.firstname} joined as ${src}`);
});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.
| Event | Konstante | Payload |
|---|---|---|
ai-core:playerLoaded | CORE.playerLoadedEvent | (src, character: CharacterInfo) nachdem ein Charakter geladen und gespawnt ist. |
ai-core:playerUnloaded | CORE.playerUnloadedEvent | (src, charId, reason: "dropped" | "switch") bevor der Zustand eines Charakters verworfen wird. |
ai-core:moneyChanged | CORE.moneyChangedEvent | (src, account: string, balance: number, delta: number, reason: string) |
ai-core:jobsChanged | CORE.jobsChangedEvent | (src, jobs: JobMembership[]) |
ai-core:dutyChanged | CORE.dutyChangedEvent | (src, job: string | null) |
ai-core:gangsChanged | CORE.gangsChangedEvent | (src, gangs: GangMembership[]) |
ai-core:activeGangChanged | CORE.activeGangChangedEvent | (src, gang: string | null) |
ai-core:metaChanged | CORE.metaChangedEvent | (src, key, value | null) ein Metadaten-Wert hat sich geändert. |
ai-core:definitionsChanged | CORE.definitionsChangedEvent | (file: "jobs" | "gangs", name) ein Job oder eine Gang wurde im Panel geändert. |
ai-core:characterScreen | CORE.characterScreenEvent | (src, charIds: number[]) der Charakterbildschirm lädt; ein Kleidungsskript kann mit Porträts antworten. |
ai-core:inventoryChanged | CORE.inventoryChangedEvent | (resource: string | null) das Inventar hinter der Inventarebene hat gewechselt. |
ai-core:itemUsed | CORE.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:playerDied | CORE.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:owners | VEHICLES_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
| Event | Konstante | Payload |
|---|---|---|
ai-core:client:playerLoaded | CORE.clientPlayerLoadedEvent | (data: AiPlayerData) der lokale Charakter ist geladen. |
ai-core:client:playerUnloaded | CORE.clientPlayerUnloadedEvent | () |
ai-core:client:dead | CORE.clientDeadEvent | (dead: boolean) der lokale Spieler ging zu Boden oder stand auf, in jedem Todesskript. |
ai-core:client:cache | CORE.clientCacheEvent | (key, value) ein gecachter Wert hat sich geändert: ped, vehicle, seat, weapon. |
ai-core:client:hudVisible | CORE.clientHudVisibleEvent | (visible: boolean) HUDs werden ein- oder ausgeblendet. |
ai-core:client:worldSync | CORE.clientWorldSyncEvent | (paused: boolean) der Wetter- und Zeit-Sync ist pausiert oder läuft wieder. |
ai-core:client:definitions | CORE.clientDefinitionsEvent | (file: "jobs" | "gangs", name, definition | null) |
ai-core:client:characterPortrait | CORE.clientCharacterPortraitEvent | (charId: number, url: string) ein Porträt für den Charakterbildschirm. |
ai-core:client:keyHints | KEY_HINTS.changedEvent | (hints: KeyHintView[]) die Tastenhinweise, die HUDs gerade zeigen. |
ai-smallresources:seatbelt | SEATBELT_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).
| Event | Konstante | Payload |
|---|---|---|
ai-lib:client:menuResult | MENU_EVENTS.menuResult | (resource, requestId, itemId | null) eine Auswahl oder ein Schließen (Menüs, Item-Auswahl, Minispiele). |
ai-lib:client:menuHover | MENU_EVENTS.menuHover | (resource, requestId, itemId) der Eintrag unter dem Zeiger. |
ai-lib:client:menuToggle | MENU_EVENTS.menuToggle | (resource, requestId, itemId, checked) eine Schalterzeile wurde umgelegt. |
ai-lib:client:inputResult | MENU_EVENTS.inputResult | (resource, requestId, values | null) der Eingabedialog wurde bestätigt oder geschlossen. |
ai-lib:client:promptPressed | LIB_UI.promptPressedEvent | (resource, id) die Interaktionstaste wurde beim Prompt dieser Ressource gedrückt. |
ai-lib:client:cancelProgress | LIB_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üssel | Wo | Wert |
|---|---|---|
ai:duty:<job> | GlobalState | Wie viele Spieler in einem Job im Dienst sind (dutyCountKey(job)). |
ai:inventory | GlobalState | Ressourcenname des aktiven Inventars. |
ai:vehicleKeys | GlobalState | Ressourcenname des aktiven Schlüsselsystems. |
ai:appearance | GlobalState | Ressourcenname des aktiven Kleidungsskripts. |
ai:medical | GlobalState | Ressourcenname des aktiven Todesskripts. |
ai:interaction | GlobalState | "prompt" oder "target": wie Lib-Points Spieler interagieren lassen. |
ai:pvp | GlobalState | Ob Spieler sich gegenseitig verletzen können. |
ai:clock, ai:weather | GlobalState | Uhr und Wetter von ai-weathersync. |
door:<id> | GlobalState | ai-doorlock: ob eine Tür verschlossen ist. |
dead | Spieler | true, solange am Boden (ai-death). |
cuffed | Spieler | true, solange in Handschellen (ai-police). |
proximity | Spieler | Sprachreichweite { index, distance, mode } (ai-voice). |
radioChannel, callChannel, callSpeaker, muted, submix | Spieler | Funk-, Anruf- und Stummschaltungszustand von ai-voice. |
ai:owned, ai:vid | Fahrzeug | Ein Fahrzeug in Besitz und seine ID in ai-vehicles. |
ai:props, ai:setup | Fahrzeug | Das Aussehen, das ai-core auf dem Besitzer-Client anwendet. |
fuel | Fahrzeug | 0-100, gepflegt vom Spritskript. |
siren:lx, siren:manu, siren:lightbar | Fahrzeug | Lichter, 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.
| Seite | QB / Qbox | ESX |
|---|---|---|
| Server | QBCore:Server:PlayerLoaded, QBCore:Server:OnPlayerUnload, QBCore:Server:OnMoneyChange, QBCore:Server:OnJobUpdate, QBCore:Server:OnGangUpdate | esx:playerLoaded, esx:playerDropped, esx:playerLogout, esx:setJob |
| Client | QBCore:Client:OnPlayerLoaded, QBCore:Client:OnPlayerUnload, QBCore:Player:SetPlayerData, QBCore:Client:OnJobUpdate, QBCore:Client:SetDuty, QBCore:Client:OnGangUpdate, QBCore:Client:OnMoneyChange | esx:playerLoaded, esx:onPlayerLogout, esx:setAccountMoney, esx:setJob |
Events anderer Skripte, die AI Core beantwortet:
| Event | Beantwortet von |
|---|---|
QBCore:GetObject, esx:getSharedObject | Der Brücke: das Core-Objekt. |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | Der Brücke: Framework-Callbacks. |
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotification | Der Brücke: die Benachrichtigung oder der Prompt von AI Core. |
police:server:policeAlert | ai-core: Client (text), Server (text, camId, playerSource), an das aktive Alarmsystem gesendet. |
hospital:client:Revive | ai-death: belebt den Spieler wieder. |
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggle | ai-core: als Pausengründe des Welt-Syncs gezählt. |