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
setWeather(type: string): booleanlocal 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
setTime(hour: number, minute?: number): booleanlocal 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
setBlackout(on: boolean): booleanexports['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
setTimeFreeze(on: boolean): booleanexports['ai-weathersync']:setTimeFreeze(true)Parameter
Prop
Type
Rückgabewert
boolean: immer true.
setDynamicWeather
Schaltet die automatischen Wetterwechsel an oder aus.
Seite: Server · Wartet: nein
setDynamicWeather(on: boolean): booleanexports['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
nextWeatherStage(): booleanexports['ai-weathersync']:nextWeatherStage()Rückgabewert
boolean: immer true.
Getter
Jeder liest den aktuellen Zustand und wartet nicht.
| Export | Rückgabe |
|---|---|
getWeatherState(): string | Der 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(): boolean | Ob der Stromausfall an ist (der Wert des Exports, sonst der des Panels). |
getTimeFreezeState(): boolean | Ob die Uhr angehalten ist. |
getDynamicWeather(): boolean | Ob 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üssel | Wert | Wann 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.