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

FREE QuarryNearNoBuild : 1.2.0 1.2.0

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

namespace Oxide.Plugins
{
    [Info("Quarry Near No Build", "Arainrr", "1.2.0")]
    [Description("Prevent building near automatically spawned quarries.")]
    internal class QuarryNearNoBuild : RustPlugin
    {
        private const string PERMISSION_IGNORE = "quarrynearnobuild.ignore";
        private readonly List<QuarryInfo> quarryInfos = new List<QuarryInfo>();

        private void Init() => permission.RegisterPermission(PERMISSION_IGNORE, this);

        private void OnServerInitialized() => FindMiningQuarry();

        private class QuarryInfo
        {
            public Vector3 position;
            public float radius;
        }

        private enum QuarryType
        {
            SulfurQuarry,
            StoneQuarry,
            HQMQuarry,
        }

        private void FindMiningQuarry()
        {
            foreach (var monumentInfo in TerrainMeta.Path.Monuments)
            {
                switch (monumentInfo.name)
                {
                    case "assets/bundled/prefabs/autospawn/monument/small/mining_quarry_a.prefab":
                        if (configData.blockRadius[QuarryType.SulfurQuarry] > 0)
                            quarryInfos.Add(new QuarryInfo { position = monumentInfo.transform.position, radius = configData.blockRadius[QuarryType.SulfurQuarry] });
                        continue;

                    case "assets/bundled/prefabs/autospawn/monument/small/mining_quarry_b.prefab":
                        if (configData.blockRadius[QuarryType.StoneQuarry] > 0)
                            quarryInfos.Add(new QuarryInfo { position = monumentInfo.transform.position, radius = configData.blockRadius[QuarryType.StoneQuarry] });
                        continue;

                    case "assets/bundled/prefabs/autospawn/monument/small/mining_quarry_c.prefab":
                        if (configData.blockRadius[QuarryType.HQMQuarry] > 0)
                            quarryInfos.Add(new QuarryInfo { position = monumentInfo.transform.position, radius = configData.blockRadius[QuarryType.HQMQuarry] });
                        continue;

                    default: continue;
                }
            }
        }

        private object CanBuild(Planner planner, Construction prefab, Construction.Target target)
        {
            var player = planner?.GetOwnerPlayer();
            if (player == null) return null;
            if (permission.UserHasPermission(player.UserIDString, PERMISSION_IGNORE)) return null;
            Vector3 position = target.entity?.CenterPoint() ?? target.position;
            foreach (var quarryInfo in quarryInfos)
            {
                if (quarryInfo.radius >= Vector3.Distance(quarryInfo.position, position))
                {
                    Print(player, Lang("CantBulid", player.UserIDString));
                    return false;
                }
            }
            return null;
        }

        #region ConfigurationFile

        private ConfigData configData;

        private class ConfigData
        {
            [JsonProperty(PropertyName = "Block Radius")]
            public Dictionary<QuarryType, float> blockRadius = new Dictionary<QuarryType, float>()
            {
                [QuarryType.SulfurQuarry] = 60f,
                [QuarryType.StoneQuarry] = 60f,
                [QuarryType.HQMQuarry] = 60f,
            };

            [JsonProperty(PropertyName = "Chat Prefix")]
            public string prefix = "[QuarryNotBuild]: ";

            [JsonProperty(PropertyName = "Chat Prefix Color")]
            public string prefixColor = "#00FFFF";

            [JsonProperty(PropertyName = "Chat SteamID Icon")]
            public ulong steamIDIcon = 0;
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                configData = Config.ReadObject<ConfigData>();
                if (configData == null)
                    LoadDefaultConfig();
            }
            catch
            {
                PrintError("The configuration file is corrupted");
                LoadDefaultConfig();
            }
            SaveConfig();
        }

        protected override void LoadDefaultConfig()
        {
            PrintWarning("Creating a new configuration file");
            configData = new ConfigData();
        }

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

        #endregion ConfigurationFile

        #region LanguageFile

        private void Print(BasePlayer player, string message) => Player.Message(player, message, $"<color={configData.prefixColor}>{configData.prefix}</color>", configData.steamIDIcon);

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

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["CantBulid"] = "Prevent building near this quarry"
            }, this);
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["CantBulid"] = "您不能在系统矿机附近建造"
            }, this, "zh-CN");
        }

        #endregion LanguageFile
    }
}

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