Zdarzenia i stan
Zdarzenia, które wysyłają ai-core i skrypty ai-*, z ładunkami, state bagi, które zapisują, oraz zdarzenia ESX / QB wysyłane przez most.
Nazwy zdarzeń to stałe w @aicore-fivem/shared (CORE, KEY_HINTS, MENU_EVENTS, LIB_UI, VEHICLES_EVENTS, SEATBELT_EVENT), więc kod TypeScript nigdy nie wpisuje ich ręcznie.
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)Dla całego życia postaci (wczytanie, zwolnienie, postacie wczytane przed restartem) używaj onCharacter z liba (aiLib.onCharacter w Lua) zamiast ręcznie tych dwóch zdarzeń.
Lokalne zdarzenia serwera
Wysyłane przez TriggerEvent na serwerze; inne zasoby i most odtwarzają z nich stan graczy.
| Zdarzenie | Stała | Ładunek |
|---|---|---|
ai-core:playerLoaded | CORE.playerLoadedEvent | (src, character: CharacterInfo) po wczytaniu i pojawieniu się postaci. |
ai-core:playerUnloaded | CORE.playerUnloadedEvent | (src, charId, reason: "dropped" | "switch") przed usunięciem stanu postaci. |
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) zmieniła się wartość metadanych. |
ai-core:definitionsChanged | CORE.definitionsChangedEvent | (file: "jobs" | "gangs", name) praca lub gang zmienione w panelu. |
ai-core:characterScreen | CORE.characterScreenEvent | (src, charIds: number[]) wczytuje się ekran postaci; skrypt ubrań może odpowiedzieć portretami. |
ai-core:inventoryChanged | CORE.inventoryChangedEvent | (resource: string | null) zmienił się ekwipunek za warstwą ekwipunku. |
ai-core:itemUsed | CORE.itemUsedEvent | (src, name: string, status: Record<string, number> | null) gracz użył przedmiotu; status = potrzeby, które daje (głód, pragnienie, stres). |
ai-core:playerDied | CORE.playerDiedEvent | (src, killer: number | null, weaponHash: number) zginął gracz z wczytaną postacią. |
ai-inventory:usedItem | (source, name, slot, metadata, status) po każdym użyciu w ai-inventory. Inne skrypty słuchają ai-core:itemUsed. | |
ai-vehicles:owners | VEHICLES_EVENTS.owners | (puts: [plate, ownerType, ownerId][], removes: plate[]) zmienili się właściciele pojazdów w pamięci (jedna paczka na tick). |
chatMessage | (source, author, text) zanim ai-chat dostarczy wiadomość; CancelEvent() ją odrzuca. |
Lokalne zdarzenia klienta
| Zdarzenie | Stała | Ładunek |
|---|---|---|
ai-core:client:playerLoaded | CORE.clientPlayerLoadedEvent | (data: AiPlayerData) lokalna postać jest wczytana. |
ai-core:client:playerUnloaded | CORE.clientPlayerUnloadedEvent | () |
ai-core:client:dead | CORE.clientDeadEvent | (dead: boolean) lokalny gracz upadł albo wstał, w dowolnym skrypcie śmierci. |
ai-core:client:cache | CORE.clientCacheEvent | (key, value) zmieniła się zapamiętana wartość: ped, vehicle, seat, weapon. |
ai-core:client:hudVisible | CORE.clientHudVisibleEvent | (visible: boolean) HUD-y się pokazują lub chowają. |
ai-core:client:worldSync | CORE.clientWorldSyncEvent | (paused: boolean) synchronizacja pogody i czasu wstrzymana albo znowu działa. |
ai-core:client:definitions | CORE.clientDefinitionsEvent | (file: "jobs" | "gangs", name, definition | null) |
ai-core:client:characterPortrait | CORE.clientCharacterPortraitEvent | (charId: number, url: string) portret dla ekranu postaci. |
ai-core:client:keyHints | KEY_HINTS.changedEvent | (hints: KeyHintView[]) podpowiedzi klawiszy, które HUD-y teraz pokazują. |
ai-smallresources:seatbelt | SEATBELT_EVENT | (worn: boolean | null) zmienił się pas bezpieczeństwa. |
Odpowiedzi interfejsu ai-lib
Potrzebne tylko wtedy, gdy sam wywołujesz eksporty ai-lib (menu, input, skillCheck i prompty z liba słuchają za ciebie).
| Zdarzenie | Stała | Ładunek |
|---|---|---|
ai-lib:client:menuResult | MENU_EVENTS.menuResult | (resource, requestId, itemId | null) wybór albo zamknięcie (menu, wybór przedmiotów, minigry). |
ai-lib:client:menuHover | MENU_EVENTS.menuHover | (resource, requestId, itemId) element pod wskaźnikiem. |
ai-lib:client:menuToggle | MENU_EVENTS.menuToggle | (resource, requestId, itemId, checked) przełączono wiersz z przełącznikiem. |
ai-lib:client:inputResult | MENU_EVENTS.inputResult | (resource, requestId, values | null) okno wprowadzania zatwierdzone albo zamknięte. |
ai-lib:client:promptPressed | LIB_UI.promptPressedEvent | (resource, id) naciśnięto klawisz interakcji na prompcie tego zasobu. |
ai-lib:client:cancelProgress | LIB_UI.cancelProgressEvent | () naciśnięto klawisz anulowania podczas paska postępu. |
State bagi
Czytaj je klasami stanu z liba (GlobalKey, PlayerState, EntityState, GlobalGroup) albo przez GlobalState[...], Player(src).state[...], Entity(e).state[...] w Lua. Zapisuje tylko zasób, który jest ich właścicielem.
| Klucz | Gdzie | Wartość |
|---|---|---|
ai:duty:<job> | GlobalState | Ilu graczy jest na służbie w pracy (dutyCountKey(job)). |
ai:inventory | GlobalState | Nazwa zasobu aktywnego ekwipunku. |
ai:vehicleKeys | GlobalState | Nazwa zasobu aktywnego systemu kluczy. |
ai:appearance | GlobalState | Nazwa zasobu aktywnego skryptu ubrań. |
ai:medical | GlobalState | Nazwa zasobu aktywnego skryptu śmierci. |
ai:interaction | GlobalState | "prompt" albo "target": jak Points z liba pozwalają na interakcję. |
ai:pvp | GlobalState | Czy gracze mogą się nawzajem ranić. |
ai:clock, ai:weather | GlobalState | Zegar i pogoda ai-weathersync. |
door:<id> | GlobalState | ai-doorlock: czy drzwi są zamknięte. |
dead | Gracz | true podczas powalenia (ai-death). |
cuffed | Gracz | true w kajdankach (ai-police). |
proximity | Gracz | Zasięg głosu { index, distance, mode } (ai-voice). |
radioChannel, callChannel, callSpeaker, muted, submix | Gracz | Stan radia, połączeń i wyciszenia ai-voice. |
ai:owned, ai:vid | Pojazd | Pojazd z właścicielem i jego id w ai-vehicles. |
ai:props, ai:setup | Pojazd | Wygląd, który ai-core nakłada na kliencie-właścicielu. |
fuel | Pojazd | 0-100, utrzymywane przez skrypt paliwa. |
siren:lx, siren:manu, siren:lightbar | Pojazd | Światła, ręczny ton i belka świetlna ai-sirens. |
Zdarzenia frameworków (most)
Most ai-core wysyła zdarzenia ESX i QB z tymi samymi argumentami, więc skrypty napisane pod te frameworki je słyszą.
| Strona | QB / Qbox | ESX |
|---|---|---|
| Serwer | QBCore:Server:PlayerLoaded, QBCore:Server:OnPlayerUnload, QBCore:Server:OnMoneyChange, QBCore:Server:OnJobUpdate, QBCore:Server:OnGangUpdate | esx:playerLoaded, esx:playerDropped, esx:playerLogout, esx:setJob |
| Klient | 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 |
Zdarzenia innych skryptów, na które odpowiada AI Core:
| Zdarzenie | Kto odpowiada |
|---|---|
QBCore:GetObject, esx:getSharedObject | Most: obiekt core. |
QBCore:Server:TriggerCallback, esx:triggerServerCallback | Most: callbacki frameworka. |
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotification | Most: powiadomienie lub prompt AI Core. |
police:server:policeAlert | ai-core: klient (text), serwer (text, camId, playerSource), wysyłane do aktywnego systemu alertów. |
hospital:client:Revive | ai-death: podnosi gracza. |
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggle | ai-core: liczone jako powody wstrzymania synchronizacji świata. |