AI Core
Referência da APILib: servidor

Mundo

Hora e clima pelo script de clima que estiver rodando, routing buckets do alocador do ai-core, trancas de portas e pontos de spawn de personagens salvos.

TypeScript
import { world, buckets, doors, characters } from "@aicore-fivem/lib/server";

world

Hora e clima pelo ai-core, qualquer que seja o script de clima rodando (Renewed-Weathersync, av_weather, cd_easytime, qb-weathersync). Enquanto nenhum está rodando, as leituras respondem null e as mudanças respondem false.

world.getWeather

Lado: Servidor · Espera: não

Signature
world.getWeather(): string | null
Lua
local weather = aiLib.world.getWeather()

Retorno o tipo de clima atual como o script de clima o informa (CLEAR, RAIN...), ou null enquanto nenhum está rodando.

const raining = ["RAIN", "THUNDER"].includes(world.getWeather() ?? "");

world.setWeather

Define o clima.

Lado: Servidor · Espera: não

Signature
world.setWeather(type: Weather): boolean
Lua
local ok = aiLib.world.setWeather(weather)

Prop

Type

Retorno true quando definido, false enquanto nenhum script de clima está rodando ou o valor não é uma string.

import { addCommand, world } from "@aicore-fivem/lib/server";
import { isWeather } from "@aicore-fivem/shared";

addCommand("weather", { restricted: true, params: [{ name: "type", type: "string" }] }, (_source, { type }) => {
  const upper = type.toUpperCase();
  if (isWeather(upper)) world.setWeather(upper);
});

world.getTime

Lado: Servidor · Espera: não

Signature
world.getTime(): { hour: number; minute: number } | null
Lua
local time = aiLib.world.getTime() -- { hour, minute } ou nil

Retorno a hora do jogo, ou null enquanto nenhum script de clima está rodando.

const time = world.getTime();
const night = time !== null && (time.hour >= 22 || time.hour < 6);

world.setTime

Define a hora do jogo.

Lado: Servidor · Espera: não

Signature
world.setTime(hour: number, minute?: number): boolean
Lua
local ok = aiLib.world.setTime(hour, minute)

Prop

Type

Retorno true quando definida, false enquanto nenhum script de clima está rodando.

world.setTime(12, 30);

world.setBlackout

Liga ou desliga o apagão da cidade.

Lado: Servidor · Espera: não

Signature
world.setBlackout(on: boolean): boolean
Lua
local ok = aiLib.world.setBlackout(on)

Retorno true quando aplicado, false enquanto nenhum script de clima está rodando ou ele não tem apagão.

world.setBlackout(true); // a usina foi sabotada

world.freezeTime

Para ou reinicia o relógio do jogo.

Lado: Servidor · Espera: não

Signature
world.freezeTime(on: boolean): boolean
Lua
local ok = aiLib.world.freezeTime(on)

Retorno true quando aplicado, false enquanto nenhum script de clima está rodando ou ele não consegue congelar o tempo.

world.setTime(20, 0);
world.freezeTime(true);

buckets

Routing buckets (mundos separados: o interior de um apartamento, uma instância) do alocador do ai-core, para que dois scripts nunca compartilhem um. Nunca escolha números de bucket você mesmo (1000 + n). Sem equivalente em Lua: chame os exports do ai-core AcquireBucket(tag) / ReleaseBucket(id).

buckets.acquire

Pega um bucket livre para este recurso. Ele não tem população (sem peds e carros ambientes) e tem lockdown estrito de entidades.

Lado: Servidor · Espera: não

Signature
buckets.acquire(tag: string): number

Prop

Type

Retorno o id do bucket.

import { buckets } from "@aicore-fivem/lib/server";

const bucket = buckets.acquire(`property:${propertyId}`);
SetPlayerRoutingBucket(String(source), bucket);

buckets.release

Devolve um bucket quando os jogadores dele já saíram.

Lado: Servidor · Espera: não

Signature
buckets.release(id: number): boolean

Retorno true quando liberado. Todo bucket de um recurso parado volta sozinho.

SetPlayerRoutingBucket(String(source), 0);
buckets.release(bucket);

doors

Trancas de portas pela camada de trancas do ai-core, pelo id de porta do próprio script de trancas. Sem equivalente em Lua: chame os exports do ai-core SetDoorLocked, IsDoorLocked.

doors.setLocked

Tranca ou destranca uma porta.

Lado: Servidor · Espera: não

Signature
doors.setLocked(id: string, locked: boolean, by?: number): boolean

Prop

Type

Retorno true quando um script de portas a aceitou, false caso contrário.

if (outcome === "won") doors.setLocked("bank_vault", false, source);

doors.isLocked

Lado: Servidor · Espera: não

Signature
doors.isLocked(id: string): boolean | null

Retorno true ou false, ou null quando desconhecido (sem tranca de portas, porta inexistente, ou o script não consegue informar no servidor).

if (doors.isLocked("bank_vault") === false) return fail("ALREADY_OPEN");

doors.provider

Lado: Servidor · Espera: não

Signature
doors.provider(): string | null

Retorno o script de trancas que responde, ou null quando nenhum está rodando.

console.log(`doors through ${doors.provider() ?? "nothing"}`);

characters

Personagens salvos pelo ai-core. Personagens carregados passam por online e pelos exports de jogador do ai-core.

characters.setOfflinePosition

Move o ponto de spawn de um personagem salvo (não carregado), por exemplo um corpo dormindo que foi carregado para longe. O ai-core o escreve assim que nenhum salvamento de carga ou descarga segura o personagem.

Lado: Servidor · Espera: não

Signature
characters.setOfflinePosition(charId: number, position: { x: number; y: number; z: number; heading?: number }): boolean

Sem equivalente em Lua: chame o export do ai-core SetOfflinePosition(charId, position).

Prop

Type

Retorno true quando aceito. false quando o personagem está carregado ou os valores estão errados.

characters.setOfflinePosition(sleeperCharId, { x: 340.2, y: -1396.7, z: 32.5, heading: 50 });

Nesta página