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

FREE AutoDoorCloser : 2.0.2 2.0.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Reflection;
using System.Collections.Generic;

using Oxide.Core;

namespace Oxide.Plugins
{
    [Info("AutoDoorCloser", "Bombardir", "2.0.2", ResourceId = 800)]
    class AutoDoorCloser : RustPlugin
    {
        const string DataFile = "AutoDoorCloserData";
        static readonly MethodInfo UpdateLayerMethod = typeof(BuildingBlock).GetMethod("UpdateLayer", (BindingFlags.Instance | BindingFlags.NonPublic));

        static Dictionary<Door, Timer> ActiveTimers = new Dictionary<Door, Timer>();
        static Dictionary<ulong, float> PlayersData;

        #region Logic

        void OnDoorOpened(Door door, BasePlayer player)
        {
            float time;
            if (!PlayersData.TryGetValue(player.userID, out time))
                time = DefaultTime;

            if (time <= 0)
                return;

            Timer ActiveTimer;
            if (ActiveTimers.TryGetValue(door, out ActiveTimer))
            {
                ActiveTimer.Destroy();
                ActiveTimers.Remove(door);
            }

            ActiveTimers[door] = timer.Once(time, () =>
            {
                ActiveTimers.Remove(door);
                if (door == null || !door.IsOpen())
                    return;

                door.SetFlag(BaseEntity.Flags.Open, false);
                UpdateLayerMethod.Invoke(door, null);
                door.SendNetworkUpdateImmediate(false);
            });
        }

        #endregion

        #region Chat cmds

        [ChatCommand("ad")]
        void ad(BasePlayer player, string command, string[] args)
        {
            if (args.Length == 0)
            {
                player.ChatMessage(Syntax);
                return;
            }

            string arg = args[0];
            float time = 0;

            if (arg != "off")
            {
                if (!float.TryParse(arg, out time))
                {
                    player.ChatMessage(Number);
                    return;
                }

                if (time > MaxTime || time < MinTime)
                {
                    player.ChatMessage(Time);
                    return;
                }

                player.ChatMessage(string.Format(Succes, time));
            }
            else
                player.ChatMessage(SuccesOff);

            PlayersData[player.userID] = time;
            Interface.Oxide.DataFileSystem.WriteObject(DataFile, PlayersData);
        }

        #endregion

        #region Config | Data load

        #region Config Vars

        static float DefaultTime = 3;
        static float MaxTime = 10;
        static float MinTime = 0.01f;

        static string Syntax = "Error! Syntax: /ad [time|off]";
        static string Number = "Error! Incorrect number!";
        static string Time = "Error! Your time should be between {0} and {1}!";
        static string Succes = "Your doors will close automatically after {0} sec.";
        static string SuccesOff = "You turn off the automatic closing doors!!";

        #endregion

        void LoadDefaultConfig() { }

        void Init()
        {
            CheckCfg<float>("Default close time", ref DefaultTime);
            CheckCfg<float>("Max close time", ref MaxTime);
            CheckCfg<float>("Min close time", ref MinTime);
            if (MinTime < 0)
                MinTime = 0.01f;

            CheckCfg<string>("Syntax error", ref Syntax);
            CheckCfg<string>("Number error", ref Number);
            CheckCfg<string>("Time error", ref Time);

            CheckCfg<string>("Succes msg", ref Succes);
            CheckCfg<string>("Succes off msg", ref SuccesOff);
            SaveConfig();

            Time = string.Format(Time, MinTime, MaxTime);

            try { PlayersData = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, float>>(DataFile); } catch { }
            if (PlayersData == null) PlayersData = new Dictionary<ulong, float>();
        }

        void CheckCfg<T>(string Key, ref T var)
        {
            if (Config[Key] == null)
                Config[Key] = var;
            else
                try { var = (T)Convert.ChangeType(Config[Key], typeof(T)); }
                catch { Config[Key] = var; }
        }

        #endregion
    }
}

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