Exports de servidor de ai-core
Cada export de servidor de ai-core - firma y qué hace, agrupados por área.
Tipados como AiCoreServerExports en @aicore-fivem/shared (exports.ts). En TypeScript toma un handle por archivo; en Lua llama directamente a exports['ai-core'].
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");Tipos usados abajo: CharacterInfo, AiPlayerData, JobMembership ({ job, grade }), GangMembership ({ gang, grade }), InventoryRef (el id de servidor de un jugador o el id de otro inventario: nombre de stash, matrícula), KeyPurpose (purchase, garage, job, rental, temporary), todos en @aicore-fivem/shared.
Personajes y jugadores
| Export | Qué |
|---|---|
GetPlayerData(src: number): AiPlayerData | null | Todo lo que ai-core guarda de un jugador cargado: personaje, dinero, trabajos, servicio, bandas, metadatos. |
GetCharacter(src: number): CharacterInfo | null | El personaje cargado (id, citizenid, nombres, fecha de nacimiento, sexo, nacionalidad). |
GetSourceByCharId(charId: number): number | null | Id de servidor del jugador que usa ese personaje. |
GetSourceByCitizenId(citizenid: string): number | null | Lo mismo por citizen id. |
GetLoadedSources(): number[] | Ids de servidor de todos los jugadores con un personaje cargado. |
GetFivemId(src: number): string | null | El identificador FiveM del jugador. |
SwitchCharacter(src: number): boolean | Devuelve al jugador a la pantalla de personajes. |
SetOfflinePosition(charId: number, position: { x, y, z, heading? }): boolean | Mueve el punto de aparición de un personaje guardado (no cargado); false mientras está cargado. |
GetPlayersInScope(source: number): number[] | Jugadores en el scope OneSync de un jugador (unos 424 m). |
const character = core.GetCharacter(source);
if (character) console.log(character.firstname, character.lastname);local character = exports['ai-core']:GetCharacter(source)
if character then print(character.firstname, character.lastname) endDinero
Las cuentas son las de la lista Accounts del panel (cash, bank por defecto). reason va al libro de movimientos.
| Export | Qué |
|---|---|
GetMoney(src: number, account: string): number | null | El saldo de un jugador. |
AddMoney(src: number, account: string, amount: number, reason?: string): boolean | Añade dinero. |
RemoveMoney(src: number, account: string, amount: number, reason?: string): boolean | Quita dinero; false cuando la cuenta no puede pagar. |
SetMoney(src: number, account: string, amount: number, reason?: string): boolean | Fija un saldo. |
GetSharedMoney(ownerType: "job" | "gang", ownerId: string, account: string): number | null | La cuenta compartida de un trabajo o banda. |
AddSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): boolean | Añade a una cuenta compartida. |
RemoveSharedMoney(ownerType, ownerId, account, amount: number, reason?: string): boolean | Quita de una cuenta compartida. |
TransferMoney(from: MoneyRef, to: MoneyRef, amount: number, reason?: string, fee?: number): boolean | Mueve dinero entre dos cuentas en una transacción con ambas filas del libro; from paga también fee. |
GetAccountTypes(): Record<string, AccountTypeDefinition> | La lista de cuentas (label, start, allowNegative). |
MoneyRef es { source, account } para un jugador cargado o { owner: "job" \| "gang", id, account } para una cuenta compartida.
if (core.RemoveMoney(source, "bank", 500, "fine")) {
core.AddSharedMoney("job", "police", "bank", 500, "fine");
}if exports['ai-core']:RemoveMoney(source, 'bank', 500, 'fine') then
exports['ai-core']:AddSharedMoney('job', 'police', 'bank', 500, 'fine')
endTrabajos y bandas
Un personaje puede tener varios trabajos y bandas, con como mucho un trabajo de servicio y una banda activa.
| Export | Qué |
|---|---|
GetJobs(src: number): JobMembership[] | null | Todos los trabajos. |
GetCurrentJob(src: number): JobMembership | null | El trabajo que los demás scripts ven como "el" trabajo: de servicio, si no el último de servicio, si no el primero. |
GetDutyJob(src: number): string | null | El trabajo en el que el jugador está de servicio. |
SetDuty(src: number, job: string | null): boolean | Pone al jugador de servicio en un trabajo, o fuera de servicio (null). |
SetJob(src: number, job: string, grade: number): boolean | Añade un trabajo o cambia su rango. |
RemoveJob(src: number, job: string): boolean | Quita un trabajo. |
GetOnDutyCount(job: string): number | Cuántos jugadores están de servicio en un trabajo. |
IsPrimeTime(job?: string): boolean | Horario punta de un trabajo (las horas de tgiann-policealert mientras está en marcha, si no las del panel). |
GetGangs(src: number): GangMembership[] | null | Todas las bandas. |
GetActiveGang(src: number): string | null | La banda activa. |
SetGang(src: number, gang: string, grade: number): boolean | Añade una banda o cambia su rango. |
RemoveGang(src: number, gang: string): boolean | Quita una banda. |
SetActiveGang(src: number, gang: string | null): boolean | Elige la banda activa. |
GetJobDefinitions(): Record<string, JobDefinition> | Todas las definiciones de trabajos (una copia: para lecturas poco frecuentes). |
GetJobDefinition(job: string): JobDefinition | null | Un trabajo: label, type, defaultDuty, listed?, grades (label, salary, boss). |
GetGangDefinitions(): Record<string, GangDefinition> | Todas las definiciones de bandas. |
GetGangDefinition(gang: string): GangDefinition | null | Una banda: label, grades. |
if (core.GetDutyJob(source) === "police") {
const officers = core.GetOnDutyCount("police");
}if exports['ai-core']:GetDutyJob(source) == 'police' then
local officers = exports['ai-core']:GetOnDutyCount('police')
endMetadatos y ajustes del servidor
| Export | Qué |
|---|---|
GetMeta(src: number, key: string): unknown | Un valor de la bolsa de metadatos del personaje. |
SetMeta(src: number, key: string, value: unknown): boolean | Fija un valor de metadatos. |
GetBranding(): Branding | El nombre, subtítulo, lemas y fondo del servidor de los ajustes General del panel. |
GetUpdates(): UpdateInfo[] | Scripts con una release de GitHub más nueva que la versión en marcha. |
Objetos
La capa de inventario de ai-core: responde el inventario activo (false, 0 o vacío mientras no hay ninguno).
| Export | Qué |
|---|---|
AddItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean | Añade objetos. |
RemoveItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata, slot?: number): boolean | Quita objetos. |
GetItemCount(inv: InventoryRef, item: string, metadata?: ItemMetadata): number | Cuántos hay de un objeto. |
HasItem(inv: InventoryRef, item: string, count?: number): boolean | Si el inventario tiene al menos count. |
CanCarryItem(inv: InventoryRef, item: string, count?: number, metadata?: ItemMetadata): boolean | Si los objetos caben. |
GetItems(inv: InventoryRef): InventoryStack[] | Cada pila (name, label, count, slot, metadata). |
ClearInventory(inv: InventoryRef): void | Vacía un inventario. |
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[]): void | Un stash; se guarda y se registra de nuevo en cada inventario que pasa a estar activo. |
OpenInventory(source: number, inv: InventoryRef): boolean | Abre un stash u otro inventario en la pantalla del jugador. |
RegisterUsableItem(name: string, handler: UsableItemHandler): void | handler(source, item) se ejecuta al usarlo; devolver false conserva el objeto. Se mantiene aunque el inventario se reinicie. |
GetItemDefinition(name: string): ItemDefinition | null | Un objeto (name, label, weight, unique, close, description, image?). |
GetItemDefinitions(): Record<string, ItemDefinition> | Todos los objetos. |
UseItem(source: number, name: string, item?: unknown): unknown | Ejecuta el handler registrado (lo llama el puente). |
IsUsableItem(name: string): boolean | Si hay un handler registrado. |
core.RegisterUsableItem("bandage", (source, item) => {
// heal, then let the inventory take the item
});
if (core.CanCarryItem(source, "water", 2)) core.AddItem(source, "water", 2);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)
endLlaves de vehículos
Un vehículo es un handle de entidad del servidor o una matrícula; purpose es temporary por defecto.
| Export | Qué |
|---|---|
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): void | Da llaves a través del sistema de llaves activo. |
RemoveVehicleKeys(source: number, vehicle: number | string): void | Quita las llaves. |
HasVehicleKeys(source: number, vehicle: number | string): boolean | Si el jugador tiene las llaves. |
exports['ai-core']:GiveVehicleKeys(source, 'AB12CDE', 'rental')Médico
| Export | Qué |
|---|---|
GetMedicalSystem(): string | null | El script de muerte al que reenvía ai-core. |
RevivePlayer(source: number): boolean | Levanta a un jugador abatido donde está; false si no está abatido o no hay script de muerte. |
HealPlayer(source: number): boolean | Salud completa para un jugador que no está abatido. |
IsPlayerDead(source: number): boolean | Si el jugador está abatido. |
Aspecto
| Export | Qué |
|---|---|
GetAppearanceSystem(): string | null | El script de ropa del que ai-core lee los aspectos. |
GetCharacterAppearance(charId: number, done: (look: CharacterAppearance | null) => void): void | El aspecto guardado de un personaje (cargado o no); done recibe { model, data } o null. |
exports['ai-core']:GetCharacterAppearance(charId, function(look)
if look then TriggerClientEvent('myscript:dress', source, look) end
end)Teléfono
Responde el script de teléfono que esté en marcha (ninguno: null o false).
| Export | Qué |
|---|---|
GetPhoneNumber(source: number): string | null | El número del jugador. |
GetSourceByPhone(number: string): number | null | El jugador con ese número. |
HasPhone(source: number): boolean | Si el jugador tiene teléfono. |
SendPhoneMail(to: number | string, mail: PhoneMail): boolean | Un correo (sender, subject, message) a un jugador o número. |
SendPhoneMessage(from: string, to: number | string, text: string): boolean | Un mensaje de texto. |
PhoneNotify(source: number, notification: PhoneNotification): boolean | Una notificación del teléfono (title, message, app?). |
Despacho
| Export | Qué |
|---|---|
SendDispatchAlert(alert: DispatchAlert): boolean | Muestra una alerta a los miembros de servicio de jobs a través del sistema de alertas activo; false si no hay ninguno. |
DispatchAlert: title, y opcionales code, message, coords, jobs, source (el sospechoso), blip (sprite, color?, scale?), duration (segundos), icon, priority (normal o high). Los textos ya vienen traducidos.
core.SendDispatchAlert({
code: "10-90",
title: "Store robbery",
jobs: ["police"],
source,
priority: "high",
});exports['ai-core']:SendDispatchAlert({
code = '10-90', title = 'Store robbery', jobs = { 'police' }, source = source, priority = 'high',
})Prisión
| Export | Qué |
|---|---|
JailPlayer(source: number, minutes: number, by?: number): boolean | Encarcela a un jugador a través del script de prisión en marcha. |
ReleasePlayer(source: number): boolean | Libera a un jugador. |
GetJailTime(source: number): number | Minutos restantes. |
Hora y clima
El contrato de qb-weathersync del script de clima que esté en marcha (null o false mientras no hay ninguno).
| Export | Qué |
|---|---|
GetWeather(): string | null | El tipo de clima actual. |
SetWeather(type: string): boolean | Fija el clima (EXTRASUNNY, RAIN...). |
GetTime(): { hour, minute } | null | La hora del juego. |
SetTime(hour: number, minute?: number): boolean | Fija la hora del juego. |
SetBlackout(on: boolean): boolean | Apagón sí o no. |
FreezeTime(on: boolean): boolean | Congela o descongela el reloj. |
Routing buckets
| Export | Qué |
|---|---|
AcquireBucket(tag: string): number | Un routing bucket libre para el recurso que llama (sin población, lockdown estricto); se libera cuando se detiene. |
ReleaseBucket(id: number): boolean | Devuelve un bucket (solo el recurso que lo tomó); saca antes a sus jugadores. |
Logs
| Export | Qué |
|---|---|
Log(channel: string, message: string, options?: LogOptions): void | Envía un log del recurso que llama a cada proveedor activado (Discord, Fivemanage, FiveM Stats, consola). options: level, source, target, metadata. |
LogChannels(channels: Record<string, LogChannel>): void | Describe los canales del recurso que llama (dataset, active); llámalo una vez al iniciar. |
exports['ai-core']:Log('sales', 'Sold a car', { source = source, metadata = { price = 25000 } })Conexión
| Export | Qué |
|---|---|
AddConnectionCheck(id: string, check: (source, identifiers) => string | null | undefined): void | Una comprobación que pasa cada jugador al conectarse: devuelve un texto de rechazo, o null para dejarlo entrar. |
RegisterReplacement(remove: string | string[], keep?: string): void | Declara que keep (por defecto: quien llama) hace innecesario remove: un aviso en consola y entradas rechazadas mientras ambos estén en marcha. |
GetConflicts(): { keep, remove, running, from }[] | Scripts instalados junto al que los sustituye. |
Panel de administración y comandos
| Export | Qué |
|---|---|
RegisterAdminPanel(resource: string): void | Un recurso con panel se anuncia (lo hace el AdminPanel de la lib). |
AdminPanelChanged(delta: AdminDelta): void | Un recurso con panel cambió un registro; ai-core lo reenvía a los admins con el panel abierto. |
RegisterCommands(resource: string, commands: CommandInfo[]): void | El addCommand de la lib lista los comandos de un recurso en la pestaña Commands. |
GetLookupValues(source: LookupSource): string[] | Valores de una lista de búsqueda (item, job, gang, account...) para la validación del panel. |
RegisterExternalPanel(panel: { id?, label, icon?, description?, command?, url? }): void | Lista la pantalla de ajustes propia de otro script en el panel principal (se abre con command o con una url incrustada). |
exports['ai-core']:RegisterExternalPanel({
label = 'My script', icon = 'gear', description = 'Its own settings', command = 'myscriptconfig',
})