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

FREE TimeSystem : 1.0.3 1.0.3

Нет прав для скачивания
C#:
using Oxide.Core.Plugins;
using Oxide.Core;
using System;
using System.Text;
using System.Collections.Generic;
using System.Globalization;
using UnityEngine;
using Newtonsoft.Json;

namespace Oxide.Plugins
{
    [Info("Time System", "https://topplugin.ru / https://discord.com/invite/5DPTsRmd3G", "1.0.3")]    
    public class TimeSystem : RustPlugin
    {
		
		#region Variables
		
		private bool Initialized;
		private int componentSearchAttempts = 0;
		private TOD_Time timeComponent = null;
		private bool activatedDay;							
		
		#endregion
		
		#region Hooks

		private void Init()
		{
			LoadVariables();
			Initialized = false;
		}

		private void Unload()
		{
			if (timeComponent == null || !Initialized) return;									
			timeComponent.OnSunrise -= OnSunrise;
            timeComponent.OnSunset -= OnSunset;			
			timeComponent.OnHour -= OnHour;
		}

		private void OnServerInitialized()
		{
			if (TOD_Sky.Instance == null)
            {
				componentSearchAttempts++;
                if (componentSearchAttempts < 100)
                    timer.Once(1f, OnServerInitialized);
                else
                    PrintWarning("Не найден нужный компонент времени, плагин не активен!");
                return;
            }
            timeComponent = TOD_Sky.Instance.Components.Time;
            if (timeComponent == null)
            {
                PrintWarning("Невозможно извлечь компонент времени, плагин не активен!");
                return;
            }			
			SetTimeComponent();			
		}
		
		private void OnServerCommand(ConsoleSystem.Arg arg)
        {
            if (arg == null || arg.cmd == null || string.IsNullOrEmpty(arg.cmd.FullName)) return;
			var command = arg.cmd.FullName;						
			if (!command.ToLower().Contains("env.")) return;						
			var player = arg.Player();
			if (player != null && !player.IsAdmin) return;
									
			timer.Once(0.5f, OnHour);
		}	

		#endregion
		
		#region Main
		
        private void SetTimeComponent()
        {
            timeComponent.ProgressTime = true;
            timeComponent.UseTimeCurve = false;									
            timeComponent.OnSunrise += OnSunrise;
			timeComponent.OnSunset += OnSunset;			
			timeComponent.OnHour += OnHour;
			Initialized = true;
			
            if (TOD_Sky.Instance.Cycle.Hour >= configData.DayStart && TOD_Sky.Instance.Cycle.Hour < configData.NightStart)
			{
				activatedDay = false;		
                OnSunrise();
			}	
            else
			{	
				activatedDay = true;
                OnSunset();					
			}	
        }				        						
		
        private void OnHour()
        {
			if (!Initialized) return;																		
			if (TOD_Sky.Instance.Cycle.Hour >= configData.DayStart && TOD_Sky.Instance.Cycle.Hour < configData.NightStart && !activatedDay)
			{				
				OnSunrise();				
				return;
			}
			if ((TOD_Sky.Instance.Cycle.Hour >= configData.NightStart || TOD_Sky.Instance.Cycle.Hour < configData.DayStart) && activatedDay)
			{			
				OnSunset();
				return;
			}
		}

        private void OnSunrise()
        {
			if (!Initialized) return;						
			if (!(TOD_Sky.Instance.Cycle.Hour >= configData.DayStart && TOD_Sky.Instance.Cycle.Hour < configData.NightStart && !activatedDay)) return;						
			
			timeComponent.DayLengthInMinutes = configData.DayLength * (24.0f / (configData.NightStart - configData.DayStart));
			if (!activatedDay)
				Interface.CallHook("OnTimeSunrise");
			activatedDay = true;
        }

        private void OnSunset()
        {
			if (!Initialized) return;						
			if (!((TOD_Sky.Instance.Cycle.Hour >= configData.NightStart || TOD_Sky.Instance.Cycle.Hour < configData.DayStart) && activatedDay)) return;						
			
			timeComponent.DayLengthInMinutes = configData.NightLength * (24.0f / (24.0f - (configData.NightStart - configData.DayStart)));
			if (activatedDay)
				Interface.CallHook("OnTimeSunset");
			activatedDay = false;
        }        
		
		#endregion
		
		#region Config        				
		
        private ConfigData configData;
		
        private class ConfigData
        {            						
			[JsonProperty(PropertyName = "Час когда начинается день (восход)")]
			public int DayStart;
			[JsonProperty(PropertyName = "Час когда начинается ночь (закат)")]
			public int NightStart;
			[JsonProperty(PropertyName = "Длительность дня (в минутах)")]
			public int DayLength;
			[JsonProperty(PropertyName = "Длительность ночи (в минутах)")]
			public int NightLength;
        }
		
        private void LoadVariables() => configData = Config.ReadObject<ConfigData>();        
		
        protected override void LoadDefaultConfig()
        {
            var config = new ConfigData
            {
				DayStart = 8,
				NightStart = 20,
                DayLength = 30,
				NightLength = 3
            };
            SaveConfig(config);
			timer.Once(0.1f, ()=>SaveConfig(config));
        }        
		
        private void SaveConfig(ConfigData config) => Config.WriteObject(config, true);
		
        #endregion

    }
}

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