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

FREE RecyclerHome : 1.0.1 1.0.1

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

namespace Oxide.Plugins
{
    [Info("RecyclerHome", "LAGZYA","1.0.1")]
    [Description("Глобальный LAGZYA")] 
    public class RecyclerHome : RustPlugin
    {
        #region Cfg

        private static ConfigData cfg { get; set; }

        private class ConfigData
        {
            [JsonProperty("Название переработчика")] public string RecyclerName = "Домашний переработчик";
            [JsonProperty("Пермишен для крафта")] public string Perm = "recyclerhome.craft";
            [JsonProperty("Пермишен для выдачи")] public string Perm2 = "recyclerhome.give";
            [JsonProperty("Разрешить поднимать чужой переработчик?")] public bool canupnotowner = true;
            [JsonProperty("Разрешить подбирать переработчик в зоне запрета строительства?")] public bool canupbuildingblock = true;
            [JsonProperty("Разрешить ставить переработчик на землю?")] public bool ter = true;
            [JsonProperty("Предметы для крафта")] public Dictionary<string, int> needCraft = new Dictionary<string, int>();
            public static ConfigData GetNewConf()
            {
                var newConfig = new ConfigData
                {
                    needCraft = new Dictionary<string, int>()
                    {
                        ["wood"] = 100,
                        ["stones"] = 500,
                    }
                };
                return newConfig;
            }
        }
        protected override void LoadDefaultConfig()
        {
            cfg = ConfigData.GetNewConf();
        }

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

        protected override void LoadConfig()
        {
            base.LoadConfig(); try { cfg = Config.ReadObject<ConfigData>(); }catch { LoadDefaultConfig(); } NextTick(SaveConfig);
        }
        private void OnServerInitialized()
        {
            if(!permission.PermissionExists(cfg.Perm))
                permission.RegisterPermission(cfg.Perm, this);
            if(!permission.PermissionExists(cfg.Perm2))
                permission.RegisterPermission(cfg.Perm2, this);
        }
        #endregion
        [ConsoleCommand("giverecycler")]
        private void GiveRecycler(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player != null && !permission.UserHasPermission(player.UserIDString, cfg.Perm2))
            {
                SendReply(player, "Нет прав!");
                return;
            }
            if (arg?.Args == null)
            {
                if (player != null)
                    SendReply(player, "Вы делаете что-то не так!");
                else
                    Puts("Вы делаете что-то не так!");
                return;
            }
            
            
            var targetPlayer = BasePlayer.Find(arg.Args[0]);
            if (targetPlayer == null)
            {
                if (player != null)
                    SendReply(player, "Игрок не найден!");
                else
                    Puts("Игрок не найден!");
                return;
            }
            var item = ItemManager.CreateByName("box.wooden.large", 1,1797067639);
            item.name = cfg.RecyclerName;
            if (!targetPlayer.inventory.GiveItem(item))
                item.Drop(targetPlayer.inventory.containerMain.dropPosition, targetPlayer.inventory.containerMain.dropVelocity);
        }

        private object CanBuild(Planner planner, Construction prefab, Construction.Target target)
        {
            if (planner == null || prefab == null || target.player == null) return null;
            if (!prefab.fullName.Contains("box.wooden.large") || planner.skinID != 1797067639) return null;
            if (cfg.ter) return null;
            RaycastHit rHit;
            if (Physics.Raycast(new Vector3(target.position.x,target.position.y+1, target.position.z), Vector3.down, out rHit, 2f, LayerMask.GetMask(new string[] {"Construction"})) && rHit.GetEntity() != null) return null;
            SendReply(target.player, "Нельзя ставить на землю!");
            return false;
        }

        private void OnEntitySpawned(BaseEntity entity)
        {
            if (entity.ShortPrefabName == "box.wooden.large" && entity.skinID == 1797067639)
            {
                var gameObject = GameManager.server.CreateEntity("assets/bundled/prefabs/static/recycler_static.prefab", entity.transform.position, entity.transform.rotation);
                gameObject.OwnerID = entity.OwnerID;
                gameObject.Spawn();
                entity.Kill();
            }
        }
        [ChatCommand("craftrecycler")]
        private void CraftRecycler(BasePlayer player)
        {
            if(!permission.UserHasPermission(player.UserIDString, cfg.Perm))
            {
                SendReply(player, "Нет прав!");
                return;
            }
            var text = "<size=18><color=green>НЕДОСТАТОЧНО РЕСУРСОВ</color></size>\n";
            var count = 0;
            foreach (var sp in cfg.needCraft)
            {
                var findItem = player.inventory.AllItems().ToList().Find(p => p.info.shortname == sp.Key);
                if (findItem?.amount >= sp.Value)
                    count++;
                else
                    if(findItem == null)
                        text += $"Недостаточно {sp.Key}, еще нужно {sp.Value}\n";
                    else
                        text += $"Недостаточно {sp.Key}, еще нужно {sp.Value-findItem.amount}\n";
            }
            if (count == cfg.needCraft.Count)
            {
                foreach (var sp in cfg.needCraft)
                    player.inventory.Take(null, ItemManager.FindItemDefinition(sp.Key).itemid, sp.Value);
                var item = ItemManager.CreateByName("box.wooden.large", 1,1797067639);
                item.name = cfg.RecyclerName;
                if (!player.inventory.GiveItem(item))
                {
                    SendReply(player, "Инвентарь был полон переработчик выпал на земелю!");
                    item.Drop(player.inventory.containerMain.dropPosition, player.inventory.containerMain.dropVelocity);
                }
                else
                    SendReply(player, "Вы скрафтили переработчик!"); 
            }
            else
                SendReply(player, text);
        }
        object OnHammerHit(BasePlayer player, HitInfo info)
        {
            if (info?.HitEntity?.OwnerID != 0 && info.HitEntity.ShortPrefabName == "recycler_static")
            {
                if (player.IsBuildingBlocked() && !cfg.canupbuildingblock)                 
                {
                    SendReply(player, "Вы в зоне запрета строительства!");
                    return null;
                }
                if (info.HitEntity.OwnerID != player.userID && !cfg.canupnotowner)
                {
                    SendReply(player, "Вы не владелец переработчика");
                    return null;
                }
                info.HitEntity.Kill();
                var item = ItemManager.CreateByName("box.wooden.large", 1,1797067639);
                item.name = cfg.RecyclerName;
                if (!player.inventory.GiveItem(item))
                {
                    SendReply(player, "Инвентарь был полон переработчик выпал на земелю!");
                    item.Drop(player.inventory.containerMain.dropPosition, player.inventory.containerMain.dropVelocity);
                }
                else
                    SendReply(player, "Вы подобрали переработчик!");
            }
            return null;
        }
    }
}

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

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

Сверху