AI Core
Essentielsai-weathersync

ai-weathersync pour les développeurs

Les exports serveur d’ai-weathersync (le contrat de qb-weathersync) et les clés GlobalState qu’il publie.

Vos propres scripts ne devraient pas appeler directement ai-weathersync. Utilisez plutôt la couche heure et météo d’AI Core : world de la lib en TypeScript (world.setWeather, world.setTime...) ou aiLib.world en Lua, documentés dans la référence de la lib. Cette couche fonctionne avec le script météo que fait tourner le serveur, quel qu’il soit, donc le propriétaire peut remplacer ai-weathersync sans casser votre script. Les exports ci-dessous sont destinés aux scripts écrits pour qb-weathersync et aux cas particuliers.

Exports

Chaque export est côté serveur et répond sous deux noms : exports['ai-weathersync'] et exports['qb-weathersync'] (ai-weathersync fait un provide de qb-weathersync). Aucun n’attend. Ils ne sont pas typés dans @aicore-fivem/shared ; depuis TypeScript, appelez-les avec callExport("ai-weathersync", name, ...args) de la lib.

Les changements faits via setBlackout, setTimeFreeze et setDynamicWeather durent jusqu’à ce que le propriétaire change ce réglage du panneau ou que la ressource redémarre.

setWeather

Change immédiatement la météo du monde. Il ne touche pas aux régions météo.

Côté : serveur · Attend : non

Signature
setWeather(type: string): boolean
Lua
local ok = exports['ai-weathersync']:setWeather('RAIN')

Paramètres

Prop

Type

Retour

boolean : true quand la météo a changé. false quand type n’est pas un nom de météo connu.

Exemple

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

// Un orage pour un événement ; le cycle météo du panneau reprend à partir d’ici.
const ok = callExport("ai-weathersync", "setWeather", "THUNDER") === true;
if (!ok) console.log("unknown weather");

Avec Changing weather activé, le changement suivant arrive quand même selon le minuteur du panneau, à partir de la position de la nouvelle météo dans la liste (ou de la première entrée quand la nouvelle météo n’est pas dans la liste).

setTime

Règle l’horloge du monde. L’horloge continue de tourner à la vitesse du panneau à partir de la nouvelle heure.

Côté : serveur · Attend : non

Signature
setTime(hour: number, minute?: number): boolean
Lua
local ok = exports['ai-weathersync']:setTime(22, 30)

Paramètres

Prop

Type

Retour

boolean : true quand l’horloge a été réglée. false quand hour n’est pas un nombre.

Exemple

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

callExport("ai-weathersync", "setTime", 22, 30);

setBlackout

Active ou désactive le blackout : les lumières de la ville s’éteignent, les phares des véhicules restent.

Côté : serveur · Attend : non

Signature
setBlackout(on: boolean): boolean
Lua
exports['ai-weathersync']:setBlackout(true)

Paramètres

Prop

Type

Retour

boolean : toujours true.

setTimeFreeze

Arrête ou redémarre l’horloge à l’heure actuelle.

Côté : serveur · Attend : non

Signature
setTimeFreeze(on: boolean): boolean
Lua
exports['ai-weathersync']:setTimeFreeze(true)

Paramètres

Prop

Type

Retour

boolean : toujours true.

setDynamicWeather

Active ou désactive les changements de météo automatiques.

Côté : serveur · Attend : non

Signature
setDynamicWeather(on: boolean): boolean
Lua
exports['ai-weathersync']:setDynamicWeather(false)

Paramètres

Prop

Type

Retour

boolean : toujours true.

nextWeatherStage

Fait passer immédiatement la météo du monde à l’entrée suivante de la liste du panneau (retour à la première après la dernière).

Côté : serveur · Attend : non

Signature
nextWeatherStage(): boolean
Lua
exports['ai-weathersync']:nextWeatherStage()

Retour

boolean : toujours true.

Getters

Chacun lit l’état actuel et n’attend pas.

ExportRenvoie
getWeatherState(): stringLe nom de la météo actuelle du monde, par exemple "CLEAR". Les régions ne sont pas incluses.
getTime(): { hour: number, minute: number }L’heure de jeu actuelle. En Lua, une table avec hour et minute.
getBlackoutState(): booleanIndique si le blackout est activé (la valeur de l’export, sinon celle du panneau).
getTimeFreezeState(): booleanIndique si l’horloge est arrêtée.
getDynamicWeather(): booleanIndique si la météo change d’elle-même.
import { callExport } from "@aicore-fivem/lib/server";

const time = callExport("ai-weathersync", "getTime") as { hour: number; minute: number };
const weather = callExport("ai-weathersync", "getWeatherState") as string;
console.log(`It is ${time.hour}:${String(time.minute).padStart(2, "0")}, weather ${weather}`);

getTime répond une table ({ hour, minute }), alors que le qb-weathersync d’origine répond deux valeurs (hour, minute). Un script Lua écrit pour qb-weathersync qui fait local h, m = exports['qb-weathersync']:getTime() reçoit la table dans h. L’export GetTime propre à AI Core et world.getTime() de la lib lisent les deux formes et répondent toujours { hour, minute }.

Clés GlobalState

ai-weathersync publie son état en GlobalState, écrit par le serveur uniquement quand quelque chose change. Lisez-les ; ne les écrivez jamais.

CléValeurQuand elle change
ai:clock{ base: number, at: number, scale: number, frozen: boolean } : la minute de jeu de la journée (base, 0-1439) à l’heure serveur at (ms, Date.now()), qui avance de scale minutes de jeu par minute réelle, ou reste fixe tant que frozen.Changement du panneau, setTime, setTimeFreeze.
ai:weather{ type: string, blackout: boolean } : la météo et le blackout du monde.Chaque changement de météo et setBlackout.
ai:rweather:<regionId>string : la météo actuelle d’une région. Retirée quand la région est supprimée.Selon le minuteur propre à la région.

L’heure n’est pas envoyée chaque minute : chaque client la calcule à partir de ai:clock et de sa propre horloge (décalage pris une fois auprès du serveur).

Events

ai-weathersync n’a pas d’events pour les autres scripts. Pour mettre la synchronisation en pause sur un client (un intérieur, une cinématique), utilisez les exports client PauseWorldSync / ResumeWorldSync d’AI Core ou world.pauseSync(reason) / resumeSync(reason) de la lib (voir les exports client d’ai-core). ai-weathersync n’écoute que la pause d’AI Core.

Sur cette page