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

FREE StashBlocker : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("Stash Blocker", "Orange", "1.0.0")]
    [Description("Controls stashes placement")]
    public class StashBlocker : RustPlugin
    {
        #region Oxide Hooks

        private void Init()
        {
            lang.RegisterMessages(EN, this);
        }

        private object CanBuild(Planner planner, Construction prefab, Construction.Target target)
        {
            return CheckBuild(planner, prefab, target);
        }

        #endregion

        #region Configuration

        private static ConfigData config;

        private class ConfigData
        {
            [JsonProperty(PropertyName = "1.Block placing stashes (globally)")]
            public bool global;

            [JsonProperty(PropertyName = "2.Radius of allowed distance between stashes and any entities (set to 0 to disable)")]
            public float entities;
        }

        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                global = false,
                entities = 5f
            };
        }

        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 Language

        private Dictionary<string, string> EN = new Dictionary<string, string>
        {
            {"Global", "Stashes placing is blocked!"},
            {"Near Stashes", "You can't place entities near stashes!"},
            {"Near Entities", "You can't place stashes near buildings!"}
        };

        private void message(BasePlayer player, string key, params object[] args)
        {
            var message = string.Format(lang.GetMessage(key, this, player.UserIDString), args);
            player.ChatMessage(message);
        }

        #endregion

        #region Core

        private object CheckBuild(Planner planner, Construction prefab, Construction.Target target)
        {
            var player = planner.GetOwnerPlayer();
            if (player == null)
            {
                return null;
            }

            var name = prefab.fullName;
            var position = target.entity?.transform.position ?? target.position;
            var check = config.entities > 0.001f;
            
            if (IsStash(name))
            {
                if (config.global)
                {
                    message(player, "Global");
                    return false;
                }
                
                if (check && HasBuildingsNearby(position))
                {
                    message(player, "Near Entities");
                    return false;
                }
            }
            
            if (check && HasStashesNearby(position))
            {
                message(player, "Near Stashes");
                return false;
            }

            return null;
        }

        private bool IsStash(string name)
        {
            return name.ToLower().Contains("stash");
        }

        private bool HasStashesNearby(Vector3 position)
        {
            var list = new List<StashContainer>();
            Vis.Entities(position, config.entities, list);
            return list.Count > 0;
        }

        private bool HasBuildingsNearby(Vector3 position)
        {
            var list = new List<BuildingBlock>();
            Vis.Entities(position, 5f, list);
            return list.Count > 0;
        }

        #endregion
    }
}

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