AI Core
Grundlagenai-weathersync

ai-weathersync für Entwickler

Die Server-Exports von ai-weathersync (der Vertrag von qb-weathersync) und die GlobalState-Schlüssel, die es veröffentlicht.

Deine eigenen Skripte sollten ai-weathersync nicht direkt aufrufen. Nutze stattdessen den Zeit- und Wetter-Layer von AI Core: world der Lib in TypeScript (world.setWeather, world.setTime...) oder aiLib.world in Lua, dokumentiert in der Lib-Referenz. Dieser Layer funktioniert mit dem Wetterskript, das der Server gerade nutzt, sodass der Betreiber ai-weathersync ersetzen kann, ohne dein Skript kaputt zu machen. Die Exports unten sind für Skripte, die für qb-weathersync geschrieben wurden, und für Sonderfälle.

Exports

Jeder Export läuft serverseitig und antwortet unter zwei Namen: exports['ai-weathersync'] und exports['qb-weathersync'] (ai-weathersync providet qb-weathersync). Keiner davon wartet. Sie sind nicht in @aicore-fivem/shared typisiert; aus TypeScript rufst du sie mit callExport("ai-weathersync", name, ...args) der Lib auf.

Änderungen über setBlackout, setTimeFreeze und setDynamicWeather gelten, bis der Betreiber diese Panel-Einstellung ändert oder die Ressource neu startet.

setWeather

Ändert das Wetter der Welt sofort. Wetterregionen bleiben unberührt.

Seite: Server · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

boolean: true, wenn sich das Wetter geändert hat. false, wenn type kein bekannter Wettername ist.

Beispiel

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

// Ein Gewitter für ein Event; der Wetterzyklus des Panels läuft von hier aus weiter.
const ok = callExport("ai-weathersync", "setWeather", "THUNDER") === true;
if (!ok) console.log("unknown weather");

Mit eingeschaltetem Changing weather kommt der nächste Wechsel trotzdem nach dem Timer des Panels, ab der Position des neuen Wetters in der Liste (oder ab dem ersten Eintrag, wenn das neue Wetter nicht in der Liste steht).

setTime

Stellt die Uhr der Welt. Die Uhr läuft ab der neuen Zeit mit der Geschwindigkeit aus dem Panel weiter.

Seite: Server · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

boolean: true, wenn die Uhr gestellt wurde. false, wenn hour keine Zahl ist.

Beispiel

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

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

setBlackout

Schaltet den Stromausfall an oder aus: Die Lichter der Stadt gehen aus, Fahrzeuglichter bleiben.

Seite: Server · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

boolean: immer true.

setTimeFreeze

Hält die Uhr bei der aktuellen Zeit an oder startet sie.

Seite: Server · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

boolean: immer true.

setDynamicWeather

Schaltet die automatischen Wetterwechsel an oder aus.

Seite: Server · Wartet: nein

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

Parameter

Prop

Type

Rückgabewert

boolean: immer true.

nextWeatherStage

Setzt das Wetter der Welt sofort auf den nächsten Eintrag der Panel-Liste (nach dem letzten zurück zum ersten).

Seite: Server · Wartet: nein

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

Rückgabewert

boolean: immer true.

Getter

Jeder liest den aktuellen Zustand und wartet nicht.

ExportRückgabe
getWeatherState(): stringDer aktuelle Wettername der Welt, zum Beispiel "CLEAR". Regionen sind nicht enthalten.
getTime(): { hour: number, minute: number }Die aktuelle Spielzeit. In Lua eine Tabelle mit hour und minute.
getBlackoutState(): booleanOb der Stromausfall an ist (der Wert des Exports, sonst der des Panels).
getTimeFreezeState(): booleanOb die Uhr angehalten ist.
getDynamicWeather(): booleanOb das Wetter von selbst wechselt.
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 antwortet mit einer Tabelle ({ hour, minute }), während das Original qb-weathersync zwei Werte zurückgibt (hour, minute). Ein für qb-weathersync geschriebenes Lua-Skript, das local h, m = exports['qb-weathersync']:getTime() macht, bekommt die Tabelle in h. Der eigene Export GetTime von AI Core und world.getTime() der Lib lesen beide Formen und antworten immer mit { hour, minute }.

GlobalState-Schlüssel

ai-weathersync veröffentlicht seinen Zustand als GlobalState, vom Server nur geschrieben, wenn sich etwas ändert. Lies sie; schreibe sie nie.

SchlüsselWertWann er sich ändert
ai:clock{ base: number, at: number, scale: number, frozen: boolean }: die Spielminute des Tages (base, 0-1439) zur Serverzeit at (ms, Date.now()), die um scale Spielminuten pro echter Minute vorrückt oder stillsteht, solange frozen.Panel-Änderung, setTime, setTimeFreeze.
ai:weather{ type: string, blackout: boolean }: das Wetter und der Stromausfall der Welt.Jeder Wetterwechsel und setBlackout.
ai:rweather:<regionId>string: das aktuelle Wetter einer Region. Wird entfernt, wenn die Region gelöscht wird.Nach dem eigenen Timer der Region.

Die Zeit wird nicht jede Minute gesendet: Jeder Client berechnet sie aus ai:clock und seiner eigenen Uhr (Abweichung einmal vom Server übernommen).

Events

ai-weathersync hat keine Events für andere Skripte. Um die Synchronisation auf einem Client zu pausieren (ein Innenraum, eine Zwischensequenz), nutze die Client-Exports PauseWorldSync / ResumeWorldSync von AI Core oder world.pauseSync(reason) / resumeSync(reason) der Lib (siehe Client-Exports von ai-core). ai-weathersync hört nur auf die Pause von AI Core.

Auf dieser Seite