AI Core
Référence de l’APILib : serveur

Monde

L’heure et la météo via le script météo qui tourne, les routing buckets de l’allocateur d’ai-core, le verrouillage des portes et les points d’apparition des personnages enregistrés.

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

world

L’heure et la météo via ai-core, quel que soit le script météo qui tourne (Renewed-Weathersync, av_weather, cd_easytime, qb-weathersync). Tant qu’aucun ne tourne, les lectures répondent null et les changements répondent false.

world.getWeather

Côté : serveur · Attend : non

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

Retour le type de météo actuel tel que le script météo le rapporte (CLEAR, RAIN...), ou null tant qu’aucun ne tourne.

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

world.setWeather

Change la météo.

Côté : serveur · Attend : non

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

Prop

Type

Retour true quand elle est appliquée, false tant qu’aucun script météo ne tourne ou si la valeur n’est pas une chaîne.

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

Côté : serveur · Attend : non

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

Retour l’heure en jeu, ou null tant qu’aucun script météo ne tourne.

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

world.setTime

Change l’heure en jeu.

Côté : serveur · Attend : non

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

Prop

Type

Retour true quand elle est appliquée, false tant qu’aucun script météo ne tourne.

world.setTime(12, 30);

world.setBlackout

Active ou désactive la panne de courant de la ville.

Côté : serveur · Attend : non

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

Retour true quand elle est appliquée, false tant qu’aucun script météo ne tourne ou s’il ne gère pas la panne de courant.

world.setBlackout(true); // la centrale électrique a été sabotée

world.freezeTime

Arrête ou relance l’horloge du jeu.

Côté : serveur · Attend : non

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

Retour true quand c’est appliqué, false tant qu’aucun script météo ne tourne ou s’il ne peut pas figer le temps.

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

buckets

Les routing buckets (des mondes séparés : l’intérieur d’un appartement, une instance) de l’allocateur d’ai-core, pour que deux scripts n’en partagent jamais un. Ne choisissez jamais vous-même les numéros de bucket (1000 + n). Pas d’équivalent Lua : appelez les exports d’ai-core AcquireBucket(tag) / ReleaseBucket(id).

buckets.acquire

Prend un bucket libre pour cette ressource. Il n’a aucune population (pas de peds ni de voitures ambiants) et un verrouillage strict des entités.

Côté : serveur · Attend : non

Signature
buckets.acquire(tag: string): number

Prop

Type

Retour l’id du bucket.

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

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

buckets.release

Rend un bucket une fois ses joueurs sortis.

Côté : serveur · Attend : non

Signature
buckets.release(id: number): boolean

Retour true quand il est rendu. Tous les buckets d’une ressource arrêtée sont rendus d’eux-mêmes.

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

doors

Le verrouillage des portes via la couche de verrouillage de portes d’ai-core, par l’id de porte propre au script de verrouillage. Pas d’équivalent Lua : appelez les exports d’ai-core SetDoorLocked, IsDoorLocked.

doors.setLocked

Verrouille ou déverrouille une porte.

Côté : serveur · Attend : non

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

Prop

Type

Retour true quand un script de portes l’a pris en compte, false sinon.

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

doors.isLocked

Côté : serveur · Attend : non

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

Retour true ou false, ou null quand c’est inconnu (pas de verrouillage de portes, porte inexistante, ou le script ne peut pas le dire côté serveur).

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

doors.provider

Côté : serveur · Attend : non

Signature
doors.provider(): string | null

Retour le script de verrouillage de portes qui répond, ou null quand aucun ne tourne.

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

characters

Les personnages enregistrés via ai-core. Les personnages chargés passent par online et les exports joueur d’ai-core.

characters.setOfflinePosition

Déplace le point d’apparition d’un personnage enregistré (non chargé), par exemple un corps endormi qui a été emporté. ai-core l’écrit dès qu’aucune sauvegarde de chargement ou de déchargement ne retient le personnage.

Côté : serveur · Attend : non

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

Pas d’équivalent Lua : appelez l’export d’ai-core SetOfflinePosition(charId, position).

Prop

Type

Retour true quand c’est accepté. false quand le personnage est chargé ou que les valeurs sont incorrectes.

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

Sur cette page