AI Core
API-Referenz

Server-Exports von ai-core

Jeder Server-Export von ai-core - Signatur und was er tut, nach Bereich gruppiert.

Typisiert als AiCoreServerExports in @aicore-fivem/shared (exports.ts). In TypeScript nimmst du ein Handle pro Datei; in Lua rufst du exports['ai-core'] direkt auf.

TypeScript
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");

Unten verwendete Typen: CharacterInfo, AiPlayerData, JobMembership ({ job, grade }), GangMembership ({ gang, grade }), InventoryRef (die Server-ID eines Spielers oder die ID eines anderen Inventars: Lagername, Kennzeichen), KeyPurpose (purchase, garage, job, rental, temporary), alle in @aicore-fivem/shared.

Charaktere und Spieler

ExportWas
GetPlayerData(src: number): AiPlayerData | nullAlles, was ai-core für einen geladenen Spieler hält: Charakter, Geld, Jobs, Dienst, Gangs, Metadaten.
GetCharacter(src: number): CharacterInfo | nullDer geladene Charakter (ID, citizenid, Namen, Geburtsdatum, Geschlecht, Nationalität).
GetSourceByCharId(charId: number): number | nullServer-ID des Spielers, der diesen Charakter spielt.
GetSourceByCitizenId(citizenid: string): number | nullDasselbe über die citizen id.
GetLoadedSources(): number[]Server-IDs aller Spieler mit geladenem Charakter.
GetFivemId(src: number): string | nullDie FiveM-Kennung des Spielers.
SwitchCharacter(src: number): booleanSchickt den Spieler zurück zum Charakterbildschirm.
SetOfflinePosition(charId: number, position: { x, y, z, heading? }): booleanVerschiebt den Spawnpunkt eines gespeicherten (nicht geladenen) Charakters; false, solange er geladen ist.
GetPlayersInScope(source: number): number[]Spieler im OneSync-Scope eines Spielers (etwa 424 m).
TypeScript
const character = core.GetCharacter(source);
if (character) console.log(character.firstname, character.lastname);
Lua
local character = exports['ai-core']:GetCharacter(source)
if character then print(character.firstname, character.lastname) end

Geld

Konten sind die aus der Kontenliste des Panels (standardmäßig cash, bank). reason landet im Kontobuch.

ExportWas
GetMoney(src: number, account: string): number | nullDer Kontostand eines Spielers.
AddMoney(src: number, account: string, amount: number, reason?: string): booleanFügt Geld hinzu.
RemoveMoney(src: number, account: string, amount: number, reason?: string): booleanNimmt Geld; false, wenn das Konto nicht zahlen kann.
SetMoney(src: number, account: string, amount: number, reason?: string): booleanSetzt einen Kontostand.
GetSharedMoney(ownerType: "job" | "gang", ownerId: string, account: string): number | nullDas gemeinsame Konto eines Jobs oder einer Gang.
AddSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): booleanZahlt auf ein gemeinsames Konto ein.
RemoveSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): booleanNimmt von einem gemeinsamen Konto.
TransferMoney(from: MoneyRef, to: MoneyRef, amount: number, reason?: string, fee?: number): booleanBewegt Geld zwischen zwei Konten in einer Transaktion mit beiden Buchungszeilen; from zahlt auch fee.
GetAccountTypes(): Record<string, AccountTypeDefinition>Die Kontenliste (label, start, allowNegative).

MoneyRef ist { source, account } für einen geladenen Spieler oder { owner: "job" \| "gang", id, account } für ein gemeinsames Konto.

TypeScript
if (core.RemoveMoney(source, "bank", 500, "fine")) {
  core.AddSharedMoney("job", "police", "bank", 500, "fine");
}
Lua
if exports['ai-core']:RemoveMoney(source, 'bank', 500, 'fine') then
  exports['ai-core']:AddSharedMoney('job', 'police', 'bank', 500, 'fine')
end

Jobs und Gangs

Ein Charakter kann mehrere Jobs und Gangs haben, mit höchstens einem Job im Dienst und einer aktiven Gang.

ExportWas
GetJobs(src: number): JobMembership[] | nullJede Job-Mitgliedschaft.
GetCurrentJob(src: number): JobMembership | nullDer Job, den andere Skripte als „den“ Job sehen: im Dienst, sonst zuletzt im Dienst, sonst der erste.
GetDutyJob(src: number): string | nullDer Job, für den der Spieler im Dienst ist.
SetDuty(src: number, job: string | null): booleanSetzt den Spieler für einen Job in den Dienst oder außer Dienst (null).
SetJob(src: number, job: string, grade: number): booleanFügt einen Job hinzu oder ändert seinen Rang.
RemoveJob(src: number, job: string): booleanEntfernt eine Job-Mitgliedschaft.
GetOnDutyCount(job: string): numberWie viele Spieler in einem Job im Dienst sind.
IsPrimeTime(job?: string): booleanPrime Time für einen Job (die Zeiten von tgiann-policealert, solange es läuft, sonst die des Panels).
GetGangs(src: number): GangMembership[] | nullJede Gang-Mitgliedschaft.
GetActiveGang(src: number): string | nullDie aktive Gang.
SetGang(src: number, gang: string, grade: number): booleanFügt eine Gang hinzu oder ändert ihren Rang.
RemoveGang(src: number, gang: string): booleanEntfernt eine Gang-Mitgliedschaft.
SetActiveGang(src: number, gang: string | null): booleanWählt die aktive Gang.
GetJobDefinitions(): Record<string, JobDefinition>Jede Job-Definition (eine Kopie: für seltene Lesezugriffe).
GetJobDefinition(job: string): JobDefinition | nullEin Job: label, type, defaultDuty, listed?, grades (label, salary, boss).
GetGangDefinitions(): Record<string, GangDefinition>Jede Gang-Definition.
GetGangDefinition(gang: string): GangDefinition | nullEine Gang: label, grades.
TypeScript
if (core.GetDutyJob(source) === "police") {
  const officers = core.GetOnDutyCount("police");
}
Lua
if exports['ai-core']:GetDutyJob(source) == 'police' then
  local officers = exports['ai-core']:GetOnDutyCount('police')
end

Metadaten und Servereinstellungen

ExportWas
GetMeta(src: number, key: string): unknownEin Wert aus den Metadaten des Charakters.
SetMeta(src: number, key: string, value: unknown): booleanSetzt einen Metadaten-Wert.
GetBranding(): BrandingName, Untertitel, Slogans und Hintergrund des Servers aus den allgemeinen Einstellungen des Panels.
GetUpdates(): UpdateInfo[]Skripte mit einem neueren GitHub-Release als der laufenden Version.

Items

Die Inventarebene von ai-core: Das aktive Inventar antwortet (false, 0 oder leer, solange keins läuft).

ExportWas
AddItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanFügt Items hinzu.
RemoveItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): booleanEntfernt Items.
GetItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): numberWie viele von einem Item.
HasItem(inv: InventoryRef, item: string, count?: number): booleanOb das Inventar mindestens count enthält.
CanCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): booleanOb die Items passen.
GetItems(inv: InventoryRef): InventoryStack[]Jeder Stapel (name, label, count, slot, metadata).
ClearInventory(inv: InventoryRef): voidLeert ein Inventar.
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): voidEin Lager; wird behalten und bei jedem Inventar, das aktiv wird, erneut registriert.
OpenInventory(source: number, inv: InventoryRef): booleanÖffnet ein Lager oder ein anderes Inventar auf dem Bildschirm des Spielers.
RegisterUsableItem(name: string, handler: UsableItemHandler): voidhandler(source, item) läuft bei Benutzung; gibt er false zurück, bleibt das Item. Übersteht Neustarts des Inventars.
GetItemDefinition(name: string): ItemDefinition | nullEin Item (name, label, weight, unique, close, description, image?).
GetItemDefinitions(): Record<string, ItemDefinition>Jedes Item.
UseItem(source: number, name: string, item?: unknown): unknownFührt den registrierten Handler aus (die Brücke ruft es auf).
IsUsableItem(name: string): booleanOb ein Handler registriert ist.
TypeScript
core.RegisterUsableItem("bandage", (source, item) => {
  // heal, then let the inventory take the item
});
if (core.CanCarryItem(source, "water", 2)) core.AddItem(source, "water", 2);
Lua
exports['ai-core']:RegisterUsableItem('bandage', function(source, item)
  -- heal, then let the inventory take the item
end)
if exports['ai-core']:CanCarryItem(source, 'water', 2) then
  exports['ai-core']:AddItem(source, 'water', 2)
end

Fahrzeugschlüssel

Ein Fahrzeug ist ein Server-Entity-Handle oder ein Kennzeichen; purpose ist standardmäßig temporary.

ExportWas
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): voidGibt Schlüssel über das aktive Schlüsselsystem.
RemoveVehicleKeys(source: number, vehicle: number | string): voidNimmt Schlüssel weg.
HasVehicleKeys(source: number, vehicle: number | string): booleanOb der Spieler die Schlüssel hat.
Lua
exports['ai-core']:GiveVehicleKeys(source, 'AB12CDE', 'rental')

Medizin

ExportWas
GetMedicalSystem(): string | nullDas Todesskript, an das ai-core weiterleitet.
RevivePlayer(source: number): booleanBringt einen niedergestreckten Spieler dort auf die Beine, wo er liegt; false, wenn er nicht am Boden ist oder kein Todesskript läuft.
HealPlayer(source: number): booleanVolle Gesundheit für einen Spieler, der nicht am Boden ist.
IsPlayerDead(source: number): booleanOb der Spieler am Boden ist.

Aussehen

ExportWas
GetAppearanceSystem(): string | nullDas Kleidungsskript, aus dem ai-core das Aussehen liest.
GetCharacterAppearance(charId: number, done: (look: CharacterAppearance | null) => void): voidDas gespeicherte Aussehen eines Charakters (geladen oder nicht); done bekommt { model, data } oder null.
Lua
exports['ai-core']:GetCharacterAppearance(charId, function(look)
  if look then TriggerClientEvent('myscript:dress', source, look) end
end)

Handy

Das laufende Handy-Skript antwortet (keins: null oder false).

ExportWas
GetPhoneNumber(source: number): string | nullDie Nummer des Spielers.
GetSourceByPhone(number: string): number | nullDer Spieler mit dieser Nummer.
HasPhone(source: number): booleanOb der Spieler ein Handy hat.
SendPhoneMail(to: number | string, mail: PhoneMail): booleanEine Mail (sender, subject, message) an einen Spieler oder eine Nummer.
SendPhoneMessage(from: string, to: number | string, text: string): booleanEine Textnachricht.
PhoneNotify(source: number, notification: PhoneNotification): booleanEine Handy-Benachrichtigung (title, message, app?).

Dispatch

ExportWas
SendDispatchAlert(alert: DispatchAlert): booleanZeigt den Mitgliedern von jobs im Dienst einen Alarm über das aktive Alarmsystem; false, wenn keins läuft.

DispatchAlert: title und optional code, message, coords, jobs, source (der Verdächtige), blip (sprite, color?, scale?), duration (Sekunden), icon, priority (normal oder high). Die Texte sind bereits übersetzt.

TypeScript
core.SendDispatchAlert({
  code: "10-90",
  title: "Store robbery",
  jobs: ["police"],
  source,
  priority: "high",
});
Lua
exports['ai-core']:SendDispatchAlert({
  code = '10-90', title = 'Store robbery', jobs = { 'police' }, source = source, priority = 'high',
})

Gefängnis

ExportWas
JailPlayer(source: number, minutes: number, by?: number): booleanSperrt einen Spieler über das laufende Gefängnisskript ein.
ReleasePlayer(source: number): booleanLässt einen Spieler frei.
GetJailTime(source: number): numberVerbleibende Minuten.

Zeit und Wetter

Der qb-weathersync-Vertrag des laufenden Wetterskripts (null oder false, solange keins läuft).

ExportWas
GetWeather(): string | nullDer aktuelle Wettertyp.
SetWeather(type: string): booleanSetzt das Wetter (EXTRASUNNY, RAIN...).
GetTime(): { hour, minute } | nullDie Spielzeit.
SetTime(hour: number, minute?: number): booleanSetzt die Spielzeit.
SetBlackout(on: boolean): booleanStromausfall an oder aus.
FreezeTime(on: boolean): booleanFriert die Uhr ein oder lässt sie weiterlaufen.

Routing-Buckets

ExportWas
AcquireBucket(tag: string): numberEin freier Routing-Bucket für die aufrufende Ressource (keine Population, striktes Lockdown); freigegeben, wenn sie stoppt.
ReleaseBucket(id: number): booleanGibt einen Bucket zurück (nur die Ressource, die ihn genommen hat); bring seine Spieler vorher heraus.

Logs

ExportWas
Log(channel: string, message: string, options?: LogOptions): voidSendet ein Log der aufrufenden Ressource an jeden eingeschalteten Anbieter (Discord, Fivemanage, FiveM Stats, Konsole). options: level, source, target, metadata.
LogChannels(channels: Record<string, LogChannel>): voidBeschreibt die Kanäle der aufrufenden Ressource (dataset, active); einmal beim Start aufrufen.
Lua
exports['ai-core']:Log('sales', 'Sold a car', { source = source, metadata = { price = 25000 } })

Verbindung

ExportWas
AddConnectionCheck(id: string, check: (source, identifiers) => string | null | undefined): voidEine Prüfung, die jeder verbindende Spieler durchläuft: gib einen Ablehnungstext zurück oder null, um ihn hereinzulassen.
RegisterReplacement(remove: string | string[], keep?: string): voidErklärt, dass keep (standardmäßig der Aufrufer) remove überflüssig macht: eine Konsolenwarnung, Beitritte werden abgelehnt, solange beide laufen.
GetConflicts(): { keep, remove, running, from }[]Skripte, die neben dem installiert sind, das sie ersetzt.

Admin-Panel und Befehle

ExportWas
RegisterAdminPanel(resource: string): voidEine Ressource mit Panel meldet sich an (das AdminPanel der Lib erledigt das).
AdminPanelChanged(delta: AdminDelta): voidEine Panel-Ressource hat einen Datensatz geändert; ai-core leitet ihn an Admins mit offenem Panel weiter.
RegisterCommands(resource: string, commands: CommandInfo[]): voidaddCommand der Lib listet die Befehle einer Ressource im Befehle-Tab.
GetLookupValues(source: LookupSource): string[]Werte einer Lookup-Liste (item, job, gang, account...) für die Validierung im Panel.
RegisterExternalPanel(panel: { id?, label, icon?, description?, command?, url? }): voidListet den eigenen Einstellungsbildschirm eines anderen Skripts auf dem Dashboard (geöffnet per command oder eingebetteter url).
Lua
exports['ai-core']:RegisterExternalPanel({
  label = 'My script', icon = 'gear', description = 'Its own settings', command = 'myscriptconfig',
})

Auf dieser Seite