Geliştiriciler için ai-weathersync
ai-weathersync’in server export’ları (qb-weathersync sözleşmesi) ve yayımladığı GlobalState anahtarları.
Kendi script’lerin ai-weathersync’i doğrudan çağırmamalı. Bunun yerine AI Core’un saat ve hava katmanını kullan: TypeScript’te lib world (world.setWeather, world.setTime...) veya Lua’da aiLib.world, lib başvurusunda belgelenmiştir. Bu katman sunucuda hangi hava script’i çalışıyorsa onunla çalışır, böylece sunucu sahibi script’ini bozmadan ai-weathersync’in yerine başkasını koyabilir. Aşağıdaki export’lar qb-weathersync için yazılmış script’ler ve özel durumlar içindir.
Export’lar
Her export server tarafındadır ve iki ad altında cevap verir: exports['ai-weathersync'] ve exports['qb-weathersync'] (ai-weathersync qb-weathersync’i provide eder). Hiçbiri beklemez. @aicore-fivem/shared içinde tiplenmemişlerdir; TypeScript’ten lib callExport("ai-weathersync", name, ...args) ile çağır.
setBlackout, setTimeFreeze ve setDynamicWeather ile yapılan değişiklikler, sunucu sahibi o panel ayarını değiştirene veya resource yeniden başlayana kadar sürer.
setWeather
Dünyanın havasını hemen değiştirir. Hava bölgelerine dokunmaz.
Taraf: Server · Bekler: hayır
setWeather(type: string): booleanlocal ok = exports['ai-weathersync']:setWeather('RAIN')Parametreler
Prop
Type
Dönüş değeri
boolean: hava değiştiyse true. type bilinen bir hava adı değilse false.
Örnek
import { callExport } from "@aicore-fivem/lib/server";
// Bir etkinlik için fırtına; panelin hava döngüsü buradan devam eder.
const ok = callExport("ai-weathersync", "setWeather", "THUNDER") === true;
if (!ok) console.log("unknown weather");Changing weather açıkken bir sonraki değişim yine panelin zamanlayıcısıyla, yeni havanın listedeki konumundan (yeni hava listede yoksa ilk girdiden) gelir.
setTime
Dünya saatini ayarlar. Saat yeni zamandan itibaren panelin hızında işlemeye devam eder.
Taraf: Server · Bekler: hayır
setTime(hour: number, minute?: number): booleanlocal ok = exports['ai-weathersync']:setTime(22, 30)Parametreler
Prop
Type
Dönüş değeri
boolean: saat ayarlandıysa true. hour sayı değilse false.
Örnek
import { callExport } from "@aicore-fivem/lib/server";
callExport("ai-weathersync", "setTime", 22, 30);setBlackout
Elektrik kesintisini açar veya kapatır: şehir ışıkları söner, araç ışıkları kalır.
Taraf: Server · Bekler: hayır
setBlackout(on: boolean): booleanexports['ai-weathersync']:setBlackout(true)Parametreler
Prop
Type
Dönüş değeri
boolean: her zaman true.
setTimeFreeze
Saati mevcut zamanda durdurur veya başlatır.
Taraf: Server · Bekler: hayır
setTimeFreeze(on: boolean): booleanexports['ai-weathersync']:setTimeFreeze(true)Parametreler
Prop
Type
Dönüş değeri
boolean: her zaman true.
setDynamicWeather
Otomatik hava değişimlerini açar veya kapatır.
Taraf: Server · Bekler: hayır
setDynamicWeather(on: boolean): booleanexports['ai-weathersync']:setDynamicWeather(false)Parametreler
Prop
Type
Dönüş değeri
boolean: her zaman true.
nextWeatherStage
Dünyanın havasını hemen panel listesinin bir sonraki girdisine geçirir (sonuncudan sonra ilkine döner).
Taraf: Server · Bekler: hayır
nextWeatherStage(): booleanexports['ai-weathersync']:nextWeatherStage()Dönüş değeri
boolean: her zaman true.
Getter’lar
Her biri mevcut durumu okur ve beklemez.
| Export | Dönüş |
|---|---|
getWeatherState(): string | Dünyanın mevcut hava adı, örneğin "CLEAR". Bölgeler dahil değildir. |
getTime(): { hour: number, minute: number } | Mevcut oyun saati. Lua’da hour ve minute içeren bir tablo. |
getBlackoutState(): boolean | Elektrik kesintisinin açık olup olmadığı (export’un değeri, yoksa panelinki). |
getTimeFreezeState(): boolean | Saatin durdurulmuş olup olmadığı. |
getDynamicWeather(): boolean | Havanın kendiliğinden değişip değişmediği. |
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 bir tablo ({ hour, minute }) döner, orijinal qb-weathersync ise iki değer (hour, minute) döner. qb-weathersync için yazılmış ve local h, m = exports['qb-weathersync']:getTime() yapan bir Lua script’i tabloyu h içinde alır. AI Core’un kendi GetTime export’u ve lib world.getTime() iki yapıyı da okur ve her zaman { hour, minute } döner.
GlobalState anahtarları
ai-weathersync durumunu GlobalState olarak yayımlar; server bunları sadece bir şey değiştiğinde yazar. Onları oku; asla yazma.
| Anahtar | Değer | Ne zaman değişir |
|---|---|---|
ai:clock | { base: number, at: number, scale: number, frozen: boolean }: server zamanı at (ms, Date.now()) anındaki günün oyun dakikası (base, 0-1439); gerçek dakika başına scale oyun dakikası ilerler, frozen iken durur. | Panel değişikliği, setTime, setTimeFreeze. |
ai:weather | { type: string, blackout: boolean }: dünyanın havası ve elektrik kesintisi. | Her hava değişimi ve setBlackout. |
ai:rweather:<regionId> | string: bir bölgenin mevcut havası. Bölge silindiğinde kaldırılır. | Bölgenin kendi zamanlayıcısıyla. |
Saat her dakika gönderilmez: her client onu ai:clock değerinden ve kendi saatinden (fark server’dan bir kez alınır) hesaplar.
Event’ler
ai-weathersync’in diğer script’ler için event’i yoktur. Bir client’ta senkronu duraklatmak için (bir iç mekân, bir ara sahne) AI Core’un PauseWorldSync / ResumeWorldSync client export’larını veya lib world.pauseSync(reason) / resumeSync(reason) kullan (bkz. ai-core client export’ları). ai-weathersync sadece AI Core’un duraklatmasını dinler.