AI Core
Dokumentacja API

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.

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)

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.

ZdarzenieStałaŁadunek
ai-core:playerLoadedCORE.playerLoadedEvent(src, character: CharacterInfo) po wczytaniu i pojawieniu się postaci.
ai-core:playerUnloadedCORE.playerUnloadedEvent(src, charId, reason: "dropped" | "switch") przed usunięciem stanu postaci.
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) zmieniła się wartość metadanych.
ai-core:definitionsChangedCORE.definitionsChangedEvent(file: "jobs" | "gangs", name) praca lub gang zmienione w panelu.
ai-core:characterScreenCORE.characterScreenEvent(src, charIds: number[]) wczytuje się ekran postaci; skrypt ubrań może odpowiedzieć portretami.
ai-core:inventoryChangedCORE.inventoryChangedEvent(resource: string | null) zmienił się ekwipunek za warstwą ekwipunku.
ai-core:itemUsedCORE.itemUsedEvent(src, name: string, status: Record<string, number> | null) gracz użył przedmiotu; status = potrzeby, które daje (głód, pragnienie, stres).
ai-core:playerDiedCORE.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:ownersVEHICLES_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

ZdarzenieStałaŁadunek
ai-core:client:playerLoadedCORE.clientPlayerLoadedEvent(data: AiPlayerData) lokalna postać jest wczytana.
ai-core:client:playerUnloadedCORE.clientPlayerUnloadedEvent()
ai-core:client:deadCORE.clientDeadEvent(dead: boolean) lokalny gracz upadł albo wstał, w dowolnym skrypcie śmierci.
ai-core:client:cacheCORE.clientCacheEvent(key, value) zmieniła się zapamiętana wartość: ped, vehicle, seat, weapon.
ai-core:client:hudVisibleCORE.clientHudVisibleEvent(visible: boolean) HUD-y się pokazują lub chowają.
ai-core:client:worldSyncCORE.clientWorldSyncEvent(paused: boolean) synchronizacja pogody i czasu wstrzymana albo znowu działa.
ai-core:client:definitionsCORE.clientDefinitionsEvent(file: "jobs" | "gangs", name, definition | null)
ai-core:client:characterPortraitCORE.clientCharacterPortraitEvent(charId: number, url: string) portret dla ekranu postaci.
ai-core:client:keyHintsKEY_HINTS.changedEvent(hints: KeyHintView[]) podpowiedzi klawiszy, które HUD-y teraz pokazują.
ai-smallresources:seatbeltSEATBELT_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).

ZdarzenieStałaŁadunek
ai-lib:client:menuResultMENU_EVENTS.menuResult(resource, requestId, itemId | null) wybór albo zamknięcie (menu, wybór przedmiotów, minigry).
ai-lib:client:menuHoverMENU_EVENTS.menuHover(resource, requestId, itemId) element pod wskaźnikiem.
ai-lib:client:menuToggleMENU_EVENTS.menuToggle(resource, requestId, itemId, checked) przełączono wiersz z przełącznikiem.
ai-lib:client:inputResultMENU_EVENTS.inputResult(resource, requestId, values | null) okno wprowadzania zatwierdzone albo zamknięte.
ai-lib:client:promptPressedLIB_UI.promptPressedEvent(resource, id) naciśnięto klawisz interakcji na prompcie tego zasobu.
ai-lib:client:cancelProgressLIB_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.

KluczGdzieWartość
ai:duty:<job>GlobalStateIlu graczy jest na służbie w pracy (dutyCountKey(job)).
ai:inventoryGlobalStateNazwa zasobu aktywnego ekwipunku.
ai:vehicleKeysGlobalStateNazwa zasobu aktywnego systemu kluczy.
ai:appearanceGlobalStateNazwa zasobu aktywnego skryptu ubrań.
ai:medicalGlobalStateNazwa zasobu aktywnego skryptu śmierci.
ai:interactionGlobalState"prompt" albo "target": jak Points z liba pozwalają na interakcję.
ai:pvpGlobalStateCzy gracze mogą się nawzajem ranić.
ai:clock, ai:weatherGlobalStateZegar i pogoda ai-weathersync.
door:<id>GlobalStateai-doorlock: czy drzwi są zamknięte.
deadGracztrue podczas powalenia (ai-death).
cuffedGracztrue w kajdankach (ai-police).
proximityGraczZasięg głosu { index, distance, mode } (ai-voice).
radioChannel, callChannel, callSpeaker, muted, submixGraczStan radia, połączeń i wyciszenia ai-voice.
ai:owned, ai:vidPojazdPojazd z właścicielem i jego id w ai-vehicles.
ai:props, ai:setupPojazdWygląd, który ai-core nakłada na kliencie-właścicielu.
fuelPojazd0-100, utrzymywane przez skrypt paliwa.
siren:lx, siren:manu, siren:lightbarPojazdŚ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ą.

StronaQB / QboxESX
SerwerQBCore:Server:PlayerLoaded, QBCore:Server:OnPlayerUnload, QBCore:Server:OnMoneyChange, QBCore:Server:OnJobUpdate, QBCore:Server:OnGangUpdateesx:playerLoaded, esx:playerDropped, esx:playerLogout, esx:setJob
KlientQBCore: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

Zdarzenia innych skryptów, na które odpowiada AI Core:

ZdarzenieKto odpowiada
QBCore:GetObject, esx:getSharedObjectMost: obiekt core.
QBCore:Server:TriggerCallback, esx:triggerServerCallbackMost: callbacki frameworka.
QBCore:Notify, esx:showNotification, esx:showAdvancedNotification, esx:showHelpNotificationMost: powiadomienie lub prompt AI Core.
police:server:policeAlertai-core: klient (text), serwer (text, camId, playerSource), wysyłane do aktywnego systemu alertów.
hospital:client:Reviveai-death: podnosi gracza.
qb-weathersync:client:DisableSync / EnableSync, cd_easytime:PauseSync, vSync:toggleai-core: liczone jako powody wstrzymania synchronizacji świata.

Na tej stronie