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
setWeather(type: string): booleanlocal 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
setTime(hour: number, minute?: number): booleanlocal 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
setBlackout(on: boolean): booleanexports['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
setTimeFreeze(on: boolean): booleanexports['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
setDynamicWeather(on: boolean): booleanexports['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
nextWeatherStage(): booleanexports['ai-weathersync']:nextWeatherStage()Retour
boolean : toujours true.
Getters
Chacun lit l’état actuel et n’attend pas.
| Export | Renvoie |
|---|---|
getWeatherState(): string | Le 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(): boolean | Indique si le blackout est activé (la valeur de l’export, sinon celle du panneau). |
getTimeFreezeState(): boolean | Indique si l’horloge est arrêtée. |
getDynamicWeather(): boolean | Indique 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é | Valeur | Quand 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.