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

FREE WipeCountdown : 1.0.2 1.0.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Core.Configuration;
using Oxide.Core.Libraries.Covalence;
using System;
using System.Linq;
using System.Collections.Generic;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("WipeCountdown", "David", "1.0.2")]
    [Description("Simple Wipe Countdown with API")]

    public class WipeCountdown : RustPlugin
    { 
        #region [Fields]

        private long lastbroadcast;

        #endregion

        #region [Hooks]
        
        private void OnServerInitialized()
        {       
            LoadConfig();  
            LoadTimer(); 
            StartCount();  
        }

        
        private void OnNewSave(string filename)
        {   
            LoadConfig(); 
            LoadTimer();
            if(config.generalSettings._onNewSave)
            {
                ClearTimer();
                SaveTimer(); 
                StartCount();    
            }  
        }
        
        private object OnUserChat(IPlayer player, string message)
        {   
            if (!config.generalSettings._bcEnabled) return null;
            //message
            string _message = message.ToLower();
            string _getCountdown = GetCountdownFormated_API();
            string _getBroadcastMsg = config.generalSettings._bcText.Replace("{countdown}", _getCountdown);
            //cooldown
            long timeNow = DateTimeOffset.Now.ToUnixTimeSeconds();
            long calCd = timeNow - lastbroadcast;

            if (calCd == 0)
            {   
                if (_message.Contains($"{config.generalSettings._keyword}"))
                {   
                    Server.Broadcast(_getBroadcastMsg, config.generalSettings._bcIcon);
                    lastbroadcast = DateTimeOffset.Now.ToUnixTimeSeconds();
                    return null;
                }
            }
            if (calCd < config.generalSettings._bcCd)
            {   
                return null;
            }
            if (_message.Contains($"{config.generalSettings._keyword}"))
            {   
                Server.Broadcast(_getBroadcastMsg, config.generalSettings._bcIcon);
                lastbroadcast = DateTimeOffset.Now.ToUnixTimeSeconds();
                
            }
            return null;
        }

        #endregion

        #region [Commands]
        
        [ChatCommand("wipe")]
        private void wipecount_timeleft(BasePlayer player)
        {   
            string _getCountdown = GetCountdownFormated_API();
            string _getBroadcastMsg = config.generalSettings._bcText.Replace("{countdown}", _getCountdown);
            SendReply(player, _getBroadcastMsg);
             
        }
        
        [ConsoleCommand("countdown_reset")]
        private void wipecount_timereset(ConsoleSystem.Arg arg)
        {   
            ClearTimer();
            StartCount();
        }
       
        #endregion 

        #region [Time Data]

        private void LoadTimer()
        {
            if (Interface.Oxide.DataFileSystem.ExistsDatafile($"{Name}/Timer"))
            {
                _timerLoader = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, TimeLoader>>($"{Name}/Timer");
            }
            else
            {
                _timerLoader = new Dictionary<string, TimeLoader>();
                SaveTimer();
            }
        }

        private void SaveTimer()
        {
            if (_timerLoader != null)
                Interface.Oxide.DataFileSystem.WriteObject($"{Name}/Timer", _timerLoader);
        }

        private Dictionary<string, TimeLoader> _timerLoader;

        private class TimeLoader
        {
            public long _timeLeft;
        }


        private void ClearTimer()
        {
            _timerLoader.Clear();
            SaveTimer();
        }

        private void StartCount()
        {
            int count = _timerLoader.Count();
            if (count == 0)
            {   
                long timeNow = DateTimeOffset.Now.ToUnixTimeSeconds();
                long wipeLenght = config.generalSettings._wipeCd;
                _timerLoader.Add("wipeTimer", new TimeLoader());
                _timerLoader["wipeTimer"]._timeLeft = timeNow + wipeLenght;
                Puts($"No countdown saved.Starting new one.");
                SaveTimer();
            } else {

                long timeleft = TimeLeftLong();
                TimeSpan countdownFormated = TimeSpan.FromSeconds(timeleft); 
                Puts($"Countdown continues at {countdownFormated}.");
            }
        }

        private long TimeLeftLong()
        {
            long timeNow = DateTimeOffset.Now.ToUnixTimeSeconds();
            long timeDif = timeNow - _timerLoader["wipeTimer"]._timeLeft;
            long converted = ~timeDif + 1;
            return converted;
        }

        #endregion
       
        #region [Config] 

        private Configuration config;
        protected override void LoadConfig()
        {
            base.LoadConfig();
            config = Config.ReadObject<Configuration>();
            SaveConfig();
        }

        protected override void LoadDefaultConfig()
        {
            config = Configuration.CreateConfig();
        }

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

        

        class Configuration
        {   

            [JsonProperty(PropertyName = "General Settings")]
            public GeneralSettings generalSettings { get; set; }

            public class GeneralSettings
            {   
                [JsonProperty("Countdown (seconds)")]
                public long _wipeCd { get; set; }

                [JsonProperty("Global Response Enabled")]
                public bool _bcEnabled { get; set; }

                [JsonProperty("Global Response Text")]
                public string _bcText { get; set; }

                [JsonProperty("Global Response Icon")]
                public ulong _bcIcon { get; set; }

                [JsonProperty("Global Response Cooldown")]
                public long _bcCd { get; set; }

                [JsonProperty("Keyword To Trigger Response")]
                public string _keyword { get; set; }

                [JsonProperty("Reset Countdown on Map Change")]
                public bool _onNewSave { get; set; }

 
            } 

            public static Configuration CreateConfig()
            {
                return new Configuration
                {   

                    generalSettings = new WipeCountdown.Configuration.GeneralSettings
                    {   
                       _wipeCd = 604800,
                       _bcEnabled = false,
                       _bcText = "<size=20><color=#FF5733>RUSTDOME</color>.NET</size> \n Next map wipe will be in <color=#FFE49B>{countdown}</color>",
                       _bcIcon = 76561199136807947,
                       _bcCd = 3600,
                       _keyword = "wipe",
                       _onNewSave = true,
                    },
                };
            }
        }

        #endregion

        #region [API]

        private string GetCountdownFormated_API()
        {   
            long timeleft = TimeLeftLong();
            TimeSpan countdownFormated = TimeSpan.FromSeconds(timeleft);
            if (timeleft < 86400)
            {   
                string countDownText = string.Format("{0:D2} HOURS {1:D2} MINUTES", countdownFormated.Hours, countdownFormated.Minutes);
                return countDownText;
            }   else    {    
                            string countDownText = string.Format("{0:D1} DAYS {1:D2} HOURS {2:D2} MINUTES", countdownFormated.Days, countdownFormated.Hours, countdownFormated.Minutes);
                            return countDownText;
                        }
        }

        private long GetCountdownSeconds_API()
        {
            long timeleft = TimeLeftLong();
            return timeleft;
        }

        #endregion
        
    }
}

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