Иконка ресурса

FREE MorningFog : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// SPDX-License-Identifier: GPL-3.0-only
// Copyright (C) 2026 PenguinzTech <https://penguintech.io>
using System;
using Oxide.Core;

namespace Oxide.Plugins
{
    [Info("MorningFog", "PenguinzPlays", "1.0.0")]
    [Description("Applies a Gaussian bell-curve fog from 05:00–10:00 server time, peaking at 08:00")]
    class MorningFog : RustPlugin
    {
        private PluginConfig _config;
        private Timer _fogTimer;

        #region Configuration

        private class PluginConfig
        {
            public float WindowStart        = 5.0f;
            public float WindowEnd          = 10.0f;
            public float PeakHour           = 8.0f;
            public float MaxDensity         = 1.0f;
            public float Sigma              = 1.0f;
            public int   CheckInterval      = 60;
            public float RandomFogHour      = 11.0f;
            public float RandomFogMaxDensity = 0.13f;
        }

        protected override void LoadDefaultConfig()
        {
            _config = new PluginConfig();
            SaveConfig();
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            _config = Config.ReadObject<PluginConfig>();
        }

        protected override void SaveConfig() => Config.WriteObject(_config);

        #endregion

        void OnServerInitialized()
        {
            Puts("MorningFog active — fog window 05:00–10:00, peak 08:00");
            CheckAndApplyFog();
        }

        void Unload()
        {
            timer.Destroy(ref _fogTimer);
            SetFogDensity(0f);
        }

        private static readonly System.Random _rng = new System.Random();

        private void CheckAndApplyFog()
        {
            float hour = GetCurrentHour();
            float intensity;
            if (hour >= _config.WindowStart && hour <= _config.WindowEnd)
                intensity = ComputeIntensity(hour);
            else if (hour >= _config.RandomFogHour && hour < _config.RandomFogHour + 1f)
                intensity = GetRandomDensity(_config.RandomFogMaxDensity);
            else
                intensity = 0f;
            SetFogDensity(intensity);
            _fogTimer = timer.Once(_config.CheckInterval, CheckAndApplyFog);
        }

        private float ComputeIntensity(float hour)
        {
            float diff = hour - _config.PeakHour;
            return _config.MaxDensity * (float)Math.Exp(-(diff * diff) / (2f * _config.Sigma * _config.Sigma));
        }

        protected virtual float GetRandomDensity(float maxDensity)
            => (float)(_rng.NextDouble() * maxDensity);

        protected virtual float GetCurrentHour()
            => TOD_Sky.Instance.Cycle.Hour;

        protected virtual void SetFogDensity(float density)
            => ConsoleSystem.Run(ConsoleSystem.Option.Server.Quiet(), "weather.fog", density.ToString("F3"));
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху