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

FREE AutoDoors : 3.1.2 3.1.2

Нет прав для скачивания
C#:
/*
TODO:
- Add separate command and option for gates/garages?
*/

using System;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Configuration;
using Oxide.Core.Libraries.Covalence;

namespace Oxide.Plugins
{
    [Info("AutoDoors", "", "3.1.2", ResourceId = 1924)]
    [Description("Automatically closes doors behind players after X seconds")]

    class AutoDoors : CovalencePlugin
    {
        // Do NOT edit this file, instead edit AutoDoors.json in oxide/config and AutoDoors.en.json in oxide/lang,
        // or create a language file for another language using the 'en' file as a default.#region Initialization

        readonly DynamicConfigFile dataFile = Interface.Oxide.DataFileSystem.GetFile("AutoDoors");
        Dictionary<string, int> playerPrefs = new Dictionary<string, int>();
        const string permAuto = "autodoors.allowed";

        void Init()
        {
            LoadDefaultConfig();
            LoadDefaultMessages();
            permission.RegisterPermission(permAuto, this);
            playerPrefs = dataFile.ReadObject<Dictionary<string, int>>();
        }

        #endregion

        #region Configuration

        bool cancelOnKill;
        int defaultDelay;
        int maximumDelay;
        int minimumDelay;
        bool usePermissions;

        protected override void LoadDefaultConfig()
        {
            //Config["AllowGates"] = allowGates = GetConfig("AllowGates", true);
            //Config["AllowGarages"] = allowGarages = GetConfig("AllowGarages", true);
            Config["CancelOnKill"] = cancelOnKill = GetConfig("CancelOnKill", false);
            Config["DefaultDelay"] = defaultDelay = GetConfig("DefaultDelay", 5);
            Config["MaximumDelay"] = maximumDelay = GetConfig("MaximumDelay", 30);
            Config["MinimumDelay"] = minimumDelay = GetConfig("MinimumDelay", 5);
            Config["UsePermissions"] = usePermissions = GetConfig("UsePermissions", false);
            SaveConfig();
        }

        #endregion

        #region Localization

        void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>            {
                ["DelayDisabled"] = "Automatic door closing is now disabled",
                ["DelaySet"] = "Automatic door closing delay set to {0}s",
                ["NotAllowed"] = "You are not allowed to use the '{0}' command",
                ["Usage"] = "/{0} to disable automatic doors\n /{0} # (a number between 5 and 30)"
            }, this);
        }

        #endregion

        #region Command

        [Command("ad", "autodoor", "autodoors")]
        void ChatCommand(IPlayer player, string command, string[] args)
        {
            if (usePermissions && !IsAllowed(player.Id, permAuto))
            {
                player.Reply(Lang("NotAllowed", player.Id, command));
                return;
            }

            int time;
            if (args == null || args.Length != 1 || !int.TryParse(args[0], out time)) time = 0;

            if (time > maximumDelay || time < minimumDelay && time != 0)
            {
                player.Reply(Lang("Usage", player.Id, command));
                return;
            }

            playerPrefs[player.Id] = time;
            dataFile.WriteObject(playerPrefs);

            player.Reply(time == 0 ? Lang("DelayDisabled", player.Id, time) : Lang("DelaySet", player.Id, time));
        }

        #endregion

        #region Door Closing

        #if HURTWORLD
        void OnSingleDoorUsed(DoorSingleServer door, PlayerSession session)
		{
		    if (door == null || !door.IsOpen) return;
            if (usePermissions && !IsAllowed(session.SteamId.ToString(), permAuto)) return;

            int time;
            if (!playerPrefs.TryGetValue(session.SteamId.ToString(), out time)) time = defaultDelay;
            if (time == 0) return;

            timer.Once(time, () =>
            {
                if (!door || !door.IsOpen) return;
                if (cancelOnKill && session.WorldPlayerEntity.GetComponent<PlayerStatManager>().Dead) return;

                door.DoorCollider.enabled = true;
                door.RPC("DOP", uLink.RPCMode.OthersBuffered, false);
                door.IsOpen = false;
            });
		}

        void OnDoubleDoorUsed(DoubleDoorServer door, PlayerSession session)
		{
		    if (door == null || !door.IsOpen) return;
            if (usePermissions && !IsAllowed(session.SteamId.ToString(), permAuto)) return;

            int time;
            if (!playerPrefs.TryGetValue(session.SteamId.ToString(), out time)) time = defaultDelay;
            if (time == 0) return;

            timer.Once(time, () =>
            {
                if (!door || !door.IsOpen) return;
                if (cancelOnKill && session.WorldPlayerEntity.GetComponent<PlayerStatManager>().Dead) return;

                door.DoorCollider.enabled = true;
                door.RPC("DOP", uLink.RPCMode.OthersBuffered, false);
                door.IsOpen = false;
            });
		}

        void OnGarageDoorUsed(GarageDoorServer door, PlayerSession session)
		{
            if (door == null || !door.IsOpen) return;
            if (usePermissions && !IsAllowed(session.SteamId.ToString(), permAuto)) return;

            int time;
            if (!playerPrefs.TryGetValue(session.SteamId.ToString(), out time)) time = defaultDelay;
            if (time == 0) return;

            timer.Once(time, () =>
            {
                if (!door || !door.IsOpen) return;
                if (cancelOnKill && session.WorldPlayerEntity.GetComponent<PlayerStatManager>().Dead) return;

                door.DoorCollider.enabled = true;
                door.RPC("DOP", uLink.RPCMode.OthersBuffered, false);
                door.IsOpen = false;
            });
        }
        #endif

        #if RUST
        void OnDoorOpened(Door door, BasePlayer player)
        {
            if (door == null || !door.IsOpen() || door.OwnerID == 0 || door.LookupPrefab().name.Contains("shutter")) return;
            if (usePermissions && !IsAllowed(player.UserIDString, permAuto)) return;

            int time;
            if (!playerPrefs.TryGetValue(player.UserIDString, out time)) time = defaultDelay;
            if (time == 0) return;

            timer.Once(time, () =>
            {
                if (!door || !door.IsOpen()) return;
                if (cancelOnKill && player.IsDead()) return;

                door.SetFlag(BaseEntity.Flags.Open, false);
                door.SendNetworkUpdateImmediate();
            });
        }
        #endif

        #endregion

        #region Helpers

        T GetConfig<T>(string name, T defaultValue) => Config[name] == null ? defaultValue : (T) Convert.ChangeType(Config[name], typeof (T));

        string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);

        bool IsAllowed(string id, string perm) => permission.UserHasPermission(id, perm);

        #endregion
    }
}

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

Другие ресурсы пользователя 15FPS

Сверху