-- скрипт weather.lua				 

math.randomseed(os.time()) -- Для генерации случайных чисел

local weatherIDs = {7, 12, 19, 6, 20, 15, 16, 8, 4} -- Получение случайного идентификатора погоды из списка
local initialWeather = math.random(1, #weatherIDs) -- Установка погоды при запуске сервера
outputServerLog("*** Server starts with weather ID: " .. weatherIDs[initialWeather]) -- Вывод информации о погоде при старте сервера в лог окна сервера
setWeather(weatherIDs[initialWeather]) -- Установка погоды при запуске сервера

-- Получение реального времени и установка его в игре
local realtime = getRealTime()
setTime(realtime.hour, realtime.minute)
setMinuteDuration(60000)
-- Установка дальности видимости
setFarClipDistance(1000)
setFogDistance(100)

-- Функция для обновления времени в игре каждую реальную минуту
function checkSetTime()
    local realtime = getRealTime()
    setTime(realtime.hour, realtime.minute)
    setMinuteDuration(60000)
end
setTimer(checkSetTime,60000,0)

-- Функция для случайного изменения погоды каждый час
function setWeather2()
    local weatherIDs = {7, 12, 8, 4}
    local number = math.random(1, #weatherIDs)
    setWeather(weatherIDs[number])
end
setTimer(setWeather2,3600000,0)
setWeather2()

-- Функция для установки градиента неба и дальности видимости в зависимости от времени суток
function setNight (hour,minutes)
    if hour == 21 then
        setSkyGradient(0, 100/minutes, 196/minutes, 136/minutes, 170/minutes, 212/minutes)
        setFarClipDistance(120+(880-minutes*14.6))
        setFogDistance(-150+(250-minutes*4.16))
    elseif hour == 7 then
        setSkyGradient( 0, 1.6*minutes, 196*3.26, 136*2.26, 170*2.83, 212*3.53 )
        setFarClipDistance(120+(minutes*14.6))
        setFogDistance(-150+(minutes*4.16))
    elseif (hour >= 22 and hour <= 23) or (hour >= 0 and hour <= 7) then
        setSkyGradient( 0, 0, 0, 0, 0, 0 )
        setFarClipDistance(120)
        setFogDistance(-150)
    else
        setSkyGradient(0, 100, 196, 136, 170, 212)
        setFarClipDistance(1000)
        setFogDistance(100)
    end
end

-- Функция для вызова функции setNight каждую минуту
function setNightTime()
	if not gameplayVariables["enablenight"] then return end
	local hour, minutes = getTime()
	setNight (hour,minutes)
end
setTimer(setNightTime,60000,0)
setNightTime()

-- Функция для изменения интенсивности освещения в зависимости от времени суток
function setDynamicLighting(hour)
    -- Рассчитываем интенсивность освещения в зависимости от текущего времени суток
    local lightingIntensity = 0
    if hour >= 6 and hour < 12 then
        -- Утро
        lightingIntensity = (hour - 6) / 6 -- Интенсивность увеличивается от 0 до 1 в течение утра
    elseif hour >= 12 and hour < 18 then
        -- День
        lightingIntensity = 1 -- Максимальная интенсивность в течение дня
    elseif hour >= 18 and hour < 24 then
        -- Вечер и ночь
        lightingIntensity = 1 - ((hour - 18) / 6) -- Интенсивность уменьшается от 1 до 0 в течение вечера и ночи
    else
        lightingIntensity = 0 -- Минимальная интенсивность в течение ночи
    end
    
    -- Установка интенсивности освещения
    setSunSize(lightingIntensity * 0.3) -- Размер солнца изменяется от 0 до 0.3
    setSunColor(255, 255, 255, lightingIntensity * 255) -- Цвет солнца меняется от белого до прозрачного в зависимости от интенсивности
end

-- Функция для обновления интенсивности освещения каждую минуту
function updateDynamicLighting()
    local hour, minutes = getTime()
    setDynamicLighting(hour)
end
setTimer(updateDynamicLighting, 60000, 0)
updateDynamicLighting() -- Вызываем функцию сразу для установки начального состояния освещения

Добавь в этот скрипт минимум 3 интересных кода согласно логике этого скрипта и покажи мне код этих нововведений для MTA SA на MTA API