ai-weathersync dla deweloperów
Eksporty serwera ai-weathersync (kontrakt qb-weathersync) i klucze GlobalState, które publikuje.
Twoje własne skrypty nie powinny wywoływać ai-weathersync bezpośrednio. Zamiast tego używaj warstwy czasu i pogody AI Core: world z biblioteki w TypeScript (world.setWeather, world.setTime...) lub aiLib.world w Lua, opisanej w dokumentacji biblioteki. Ta warstwa działa z każdym skryptem pogody, którego używa serwer, więc właściciel może zastąpić ai-weathersync bez psucia twojego skryptu. Poniższe eksporty są dla skryptów napisanych dla qb-weathersync i do szczególnych przypadków.
Eksporty
Każdy eksport działa po stronie serwera i odpowiada pod dwiema nazwami: exports['ai-weathersync'] i exports['qb-weathersync'] (ai-weathersync robi provide dla qb-weathersync). Żaden z nich nie czeka. Nie są typowane w @aicore-fivem/shared; z TypeScript wywołuj je przez callExport("ai-weathersync", name, ...args) z biblioteki.
Zmiany wprowadzone przez setBlackout, setTimeFreeze i setDynamicWeather trwają, dopóki właściciel nie zmieni tego ustawienia w panelu lub zasób się nie zrestartuje.
setWeather
Od razu zmienia pogodę w świecie. Nie dotyka regionów pogodowych.
Strona: serwer · Czeka: nie
setWeather(type: string): booleanlocal ok = exports['ai-weathersync']:setWeather('RAIN')Parametry
Prop
Type
Zwraca
boolean: true, gdy pogoda się zmieniła. false, gdy type nie jest znaną nazwą pogody.
Przykład
import { callExport } from "@aicore-fivem/lib/server";
// Burza na wydarzenie; cykl pogody z panelu toczy się dalej od tego miejsca.
const ok = callExport("ai-weathersync", "setWeather", "THUNDER") === true;
if (!ok) console.log("unknown weather");Przy włączonym Changing weather następna zmiana i tak przychodzi według timera z panelu, od pozycji nowej pogody na liście (albo od pierwszego wpisu, gdy nowej pogody nie ma na liście).
setTime
Ustawia zegar świata. Zegar biegnie dalej z prędkością z panelu od nowej godziny.
Strona: serwer · Czeka: nie
setTime(hour: number, minute?: number): booleanlocal ok = exports['ai-weathersync']:setTime(22, 30)Parametry
Prop
Type
Zwraca
boolean: true, gdy zegar został ustawiony. false, gdy hour nie jest liczbą.
Przykład
import { callExport } from "@aicore-fivem/lib/server";
callExport("ai-weathersync", "setTime", 22, 30);setBlackout
Włącza lub wyłącza blackout: światła miasta gasną, światła pojazdów zostają.
Strona: serwer · Czeka: nie
setBlackout(on: boolean): booleanexports['ai-weathersync']:setBlackout(true)Parametry
Prop
Type
Zwraca
boolean: zawsze true.
setTimeFreeze
Zatrzymuje lub uruchamia zegar na bieżącej godzinie.
Strona: serwer · Czeka: nie
setTimeFreeze(on: boolean): booleanexports['ai-weathersync']:setTimeFreeze(true)Parametry
Prop
Type
Zwraca
boolean: zawsze true.
setDynamicWeather
Włącza lub wyłącza automatyczne zmiany pogody.
Strona: serwer · Czeka: nie
setDynamicWeather(on: boolean): booleanexports['ai-weathersync']:setDynamicWeather(false)Parametry
Prop
Type
Zwraca
boolean: zawsze true.
nextWeatherStage
Od razu przestawia pogodę w świecie na następny wpis z listy w panelu (po ostatnim wraca do pierwszego).
Strona: serwer · Czeka: nie
nextWeatherStage(): booleanexports['ai-weathersync']:nextWeatherStage()Zwraca
boolean: zawsze true.
Gettery
Każdy odczytuje bieżący stan i nie czeka.
| Eksport | Zwraca |
|---|---|
getWeatherState(): string | Nazwa bieżącej pogody w świecie, na przykład "CLEAR". Regiony nie są uwzględniane. |
getTime(): { hour: number, minute: number } | Bieżący czas gry. W Lua tabela z hour i minute. |
getBlackoutState(): boolean | Czy blackout jest włączony (wartość z eksportu, w przeciwnym razie z panelu). |
getTimeFreezeState(): boolean | Czy zegar jest zatrzymany. |
getDynamicWeather(): boolean | Czy pogoda zmienia się sama. |
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 odpowiada tabelą ({ hour, minute }), a oryginalny qb-weathersync odpowiada dwiema wartościami (hour, minute). Skrypt Lua napisany dla qb-weathersync, który robi local h, m = exports['qb-weathersync']:getTime(), dostaje tabelę w h. Własny eksport GetTime AI Core i world.getTime() z biblioteki czytają oba kształty i zawsze odpowiadają { hour, minute }.
Klucze GlobalState
ai-weathersync publikuje swój stan jako GlobalState, zapisywany przez serwer tylko wtedy, gdy coś się zmienia. Czytaj je; nigdy ich nie zapisuj.
| Klucz | Wartość | Kiedy się zmienia |
|---|---|---|
ai:clock | { base: number, at: number, scale: number, frozen: boolean }: minuta gry w ciągu dnia (base, 0-1439) w czasie serwera at (ms, Date.now()), przesuwająca się o scale minut gry na prawdziwą minutę albo stojąca w miejscu, gdy frozen. | Zmiana w panelu, setTime, setTimeFreeze. |
ai:weather | { type: string, blackout: boolean }: pogoda i blackout w świecie. | Każda zmiana pogody i setBlackout. |
ai:rweather:<regionId> | string: bieżąca pogoda jednego regionu. Usuwany, gdy region zostanie usunięty. | Według własnego timera regionu. |
Czas nie jest wysyłany co minutę: każdy klient wylicza go z ai:clock i własnego zegara (przesunięcie pobierane raz z serwera).
Zdarzenia
ai-weathersync nie ma zdarzeń dla innych skryptów. Aby wstrzymać synchronizację na kliencie (wnętrze, przerywnik), używaj eksportów klienta AI Core PauseWorldSync / ResumeWorldSync lub world.pauseSync(reason) / resumeSync(reason) z biblioteki (zobacz eksporty klienta ai-core). ai-weathersync nasłuchuje tylko wstrzymania z AI Core.