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

FREE BedsCooldowns : 1.0.0 1.0.0

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

namespace Oxide.Plugins
{
    [Info("Beds Cooldowns", "Orange", "1.0.0")]
    [Description("Allows to change cooldowns on bags and beds")]
    public class BedsCooldowns : RustPlugin
    {
        #region Config

        private static ConfigData config;
        
        private class ConfigData
        {    
            [JsonProperty(PropertyName = "Permission - Params")]
            public Dictionary<string, OInfo> lists = new Dictionary<string, OInfo>();

            public class OInfo
            {
                [JsonProperty(PropertyName = "Priority")]
                public int priority;
                
                [JsonProperty(PropertyName = "Sleeping bag cooldown")]
                public float bag;
                
                [JsonProperty(PropertyName = "Bed cooldown")]
                public float bed;
            }
        }
        
        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                lists = new Dictionary<string, ConfigData.OInfo>
                {
                    ["bedscooldowns.vip1"] = new ConfigData.OInfo
                    {
                        priority = 0,
                        bag = 100,
                        bed = 100
                    },
                    ["bedscooldowns.vip2"] = new ConfigData.OInfo
                    {
                        priority = 2,
                        bag = 50,
                        bed = 50
                    },
                    ["bedscooldowns.vip3"] = new ConfigData.OInfo
                    {
                        priority = 3,
                        bag = 0,
                        bed = 0
                    }
                }
            };
        }
        
        protected override void LoadConfig()
        {
            base.LoadConfig();
   
            try
            {
                config = Config.ReadObject<ConfigData>();
            }
            catch
            {
                LoadDefaultConfig();
            }

            SaveConfig();
        }

        protected override void LoadDefaultConfig()
        {
            PrintError("Configuration file is corrupt(or not exists), creating new one!");
            config = GetDefaultConfig();
        }

        protected override void SaveConfig()
        {
            Config.WriteObject(config);
        }

        #endregion

        #region Oxide Hooks

        private void Init()
        {
            foreach (var list in config.lists)
            {
                permission.RegisterPermission(list.Key, this);
            }
        }

        private void OnEntitySpawned(BaseNetworkable a)
        {
            CheckEntity(a);
        }

        private void OnPlayerInit(BasePlayer player)
        {
            CheckPlayer(player);
        }

        #endregion

        #region Helpers

        private void CheckEntity(BaseNetworkable a)
        {
            var entity = a.GetComponent<SleepingBag>();
            if (entity == null) {return;}
            if (!entity.OwnerID.IsSteamId()) {return;}
            var cfg = GetConfig(entity.OwnerID.ToString());
            if (cfg == null) {return;}
            SetCooldown(entity, cfg);
        }

        private void CheckPlayer(BasePlayer player)
        {
            var cfg = GetConfig(player.UserIDString);
            if (cfg == null) {return;}

            foreach (var entity in UnityEngine.Object.FindObjectsOfType<SleepingBag>())
            {
                if (entity.OwnerID.IsSteamId() && entity.OwnerID == player.userID)
                {
                    SetCooldown(entity, cfg);
                }
            }
        }
        
        private void SetCooldown(SleepingBag entity, ConfigData.OInfo info)
        {
            var value = entity.ShortPrefabName.Contains("bed") ? info.bed : info.bag;
            entity.secondsBetweenReuses = value;
            entity.SendNetworkUpdate();
        }

        private ConfigData.OInfo GetConfig(string id)
        {
            var i = -1;
            var info = (ConfigData.OInfo) null;

            foreach (var pair in config.lists)
            {
                var perm = pair.Key;
                var value = pair.Value;

                if (permission.UserHasPermission(id, perm))
                {
                    var priority = value.priority;
                    
                    if (priority > i)
                    {
                        i = priority;
                        info = value;
                    }
                }
            }

            return info;
        }

        #endregion
    }
}

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