AI Core
Основноеai-weathersync

ai-weathersync для разработчиков

Серверные экспорты ai-weathersync (контракт qb-weathersync) и ключи GlobalState, которые он публикует.

Ваши собственные скрипты не должны вызывать ai-weathersync напрямую. Используйте вместо этого слой времени и погоды AI Core: world из lib в TypeScript (world.setWeather, world.setTime...) или aiLib.world в Lua, описанные в справочнике lib. Этот слой работает с любым скриптом погоды, который запущен на сервере, поэтому владелец может заменить ai-weathersync, не сломав ваш скрипт. Экспорты ниже предназначены для скриптов, написанных для qb-weathersync, и для особых случаев.

Экспорты

Каждый экспорт серверный и отвечает под двумя именами: exports['ai-weathersync'] и exports['qb-weathersync'] (ai-weathersync делает provide для qb-weathersync). Ни один из них не ждёт. Они не типизированы в @aicore-fivem/shared; из TypeScript вызывайте их через callExport("ai-weathersync", name, ...args) из lib.

Изменения, сделанные через setBlackout, setTimeFreeze и setDynamicWeather, действуют, пока владелец не изменит эту настройку панели или ресурс не перезапустится.

setWeather

Сразу меняет погоду в мире. Погодные регионы не затрагивает.

Сторона: сервер · Ожидание: нет

Сигнатура
setWeather(type: string): boolean
Lua
local ok = exports['ai-weathersync']:setWeather('RAIN')

Параметры

Prop

Type

Возвращает

boolean: true, если погода изменилась. false, если type не является известным названием погоды.

Пример

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

// Шторм для мероприятия; цикл погоды из панели продолжается отсюда.
const ok = callExport("ai-weathersync", "setWeather", "THUNDER") === true;
if (!ok) console.log("unknown weather");

Если включено Changing weather, следующее изменение всё равно приходит по таймеру панели, с позиции новой погоды в списке (или с первой записи, если новой погоды нет в списке).

setTime

Устанавливает часы мира. Часы продолжают идти со скоростью из панели от нового времени.

Сторона: сервер · Ожидание: нет

Сигнатура
setTime(hour: number, minute?: number): boolean
Lua
local ok = exports['ai-weathersync']:setTime(22, 30)

Параметры

Prop

Type

Возвращает

boolean: true, если часы установлены. false, если hour не число.

Пример

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

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

setBlackout

Включает или выключает блэкаут: огни города гаснут, фары транспорта остаются.

Сторона: сервер · Ожидание: нет

Сигнатура
setBlackout(on: boolean): boolean
Lua
exports['ai-weathersync']:setBlackout(true)

Параметры

Prop

Type

Возвращает

boolean: всегда true.

setTimeFreeze

Останавливает или запускает часы на текущем времени.

Сторона: сервер · Ожидание: нет

Сигнатура
setTimeFreeze(on: boolean): boolean
Lua
exports['ai-weathersync']:setTimeFreeze(true)

Параметры

Prop

Type

Возвращает

boolean: всегда true.

setDynamicWeather

Включает или выключает автоматическую смену погоды.

Сторона: сервер · Ожидание: нет

Сигнатура
setDynamicWeather(on: boolean): boolean
Lua
exports['ai-weathersync']:setDynamicWeather(false)

Параметры

Prop

Type

Возвращает

boolean: всегда true.

nextWeatherStage

Сразу переводит погоду мира на следующую запись списка из панели (после последней снова на первую).

Сторона: сервер · Ожидание: нет

Сигнатура
nextWeatherStage(): boolean
Lua
exports['ai-weathersync']:nextWeatherStage()

Возвращает

boolean: всегда true.

Геттеры

Каждый читает текущее состояние и не ждёт.

ЭкспортВозвращает
getWeatherState(): stringТекущее название погоды в мире, например "CLEAR". Регионы не учитываются.
getTime(): { hour: number, minute: number }Текущее игровое время. В Lua таблица с hour и minute.
getBlackoutState(): booleanВключён ли блэкаут (значение экспорта, иначе панели).
getTimeFreezeState(): booleanОстановлены ли часы.
getDynamicWeather(): booleanМеняется ли погода сама.
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 отвечает таблицей ({ hour, minute }), тогда как оригинальный qb-weathersync отвечает двумя значениями (hour, minute). Скрипт на Lua, написанный для qb-weathersync, который делает local h, m = exports['qb-weathersync']:getTime(), получает таблицу в h. Собственный экспорт AI Core GetTime и world.getTime() из lib читают оба формата и всегда отвечают { hour, minute }.

Ключи GlobalState

ai-weathersync публикует своё состояние в GlobalState, сервер пишет его только когда что-то меняется. Читайте их; никогда не пишите в них.

КлючЗначениеКогда меняется
ai:clock{ base: number, at: number, scale: number, frozen: boolean }: игровая минута дня (base, 0-1439) во время сервера at (мс, Date.now()), которая продвигается на scale игровых минут за реальную минуту или стоит на месте, пока frozen.Изменение панели, setTime, setTimeFreeze.
ai:weather{ type: string, blackout: boolean }: погода и блэкаут в мире.Каждая смена погоды и setBlackout.
ai:rweather:<regionId>string: текущая погода одного региона. Удаляется, когда регион удаляют.По собственному таймеру региона.

Время не отправляется каждую минуту: каждый клиент вычисляет его из ai:clock и своих часов (смещение берётся один раз с сервера).

События

У ai-weathersync нет событий для других скриптов. Чтобы приостановить синхронизацию на клиенте (интерьер, катсцена), используйте клиентские экспорты AI Core PauseWorldSync / ResumeWorldSync или world.pauseSync(reason) / resumeSync(reason) из lib (см. клиентские экспорты ai-core). ai-weathersync слушает только паузу AI Core.

На этой странице