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

FREE AnimalLoot : 0.0.5 0.0.5

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

namespace Oxide.Plugins
{
    [Info("AnimalLoot", "TopPlugin.ru", "0.0.5")]
    [Description("Полная настройка выпадаемого лута с животных ")]
    class AnimalLoot : RustPlugin
    {
        /// <summary>
        /// Обновление 0.0.4
        /// - Полностью переделан конфигурационный файл
        /// - Оптимизация кода
        /// - Добавлена поддержка кастомных предметов со своим именем и SkinID
        /// - Добавлен шанс на выпадение предмета (возможно устанавливать с плавающей точкой, пример : 10.5)
        /// - Если у вас не пересоздался конфигурационный файл вручную, удалите его и перезагрузите плагин
        /// Обновление 0.0.5
        /// - Поправил ошибку при добыче
        /// - Добавил возможность включить выпадение лута только после последних ударов
        /// </summary>

        #region Configuration

        private static Configuration config = new Configuration();
        private class Configuration
        {
            [JsonProperty("Настройка животных [животное] - {лут}")]
            public Dictionary<String, List<DropLootSettings>> AnimalSettings = new Dictionary<String, List<DropLootSettings>>();
            [JsonProperty("Включить(true) стандартный лут от животных(будет совмещен с вашим,из кфг) или отключить(false)")]
            public Boolean DefaultLoot;
            [JsonProperty("Включить(true) выпадение предметов ТОЛЬКО после последних ударах, вместо выпадения в течение добычи")]
            public Boolean BonusDrop;

            internal class DropLootSettings
            {
                [JsonProperty("Shortname")]
                public String Shortname;
                [JsonProperty("SkinID")]
                public UInt64 SkinID;
                [JsonProperty("Отображаемое имя")]
                public String DisplayName;
                [JsonProperty("Шанс выпадения")]
                public Single RareDrops;
                [JsonProperty("Минимальное количество выпадения")]
                public Int32 MinimumAmount;
                [JsonProperty("Максимальное количество выпадения")]
                public Int32 MaximumAmount;
            }

            public static Configuration GetNewConfiguration()
            {
                return new Configuration
                {
                    DefaultLoot = true,
                    BonusDrop = false,
                    AnimalSettings = new Dictionary<String, List<DropLootSettings>>
                    {
                        ["assets/rust.ai/agents/horse/horse.corpse.prefab"] = new List<DropLootSettings>
                        {
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "wood",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "stones",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "diesel_barrel",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                        },
                        ["assets/rust.ai/agents/boar/boar.corpse.prefab"] = new List<DropLootSettings>
                        {
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "wood",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "stones",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "diesel_barrel",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                        },
                        ["assets/rust.ai/agents/chicken/chicken.corpse.prefab"] = new List<DropLootSettings>
                        {
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "wood",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "stones",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "diesel_barrel",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                        },
                        ["assets/rust.ai/agents/stag/stag.corpse.prefab"] = new List<DropLootSettings>
                        {
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "wood",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "stones",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "diesel_barrel",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                        },
                        ["assets/rust.ai/agents/wolf/wolf.corpse.prefab"] = new List<DropLootSettings>
                        {
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "wood",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "stones",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "diesel_barrel",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                        },
                        ["assets/rust.ai/agents/bear/bear.corpse.prefab"] = new List<DropLootSettings>
                        {
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "wood",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "stones",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                           new DropLootSettings
                           {
                              RareDrops = 22.3f,
                              DisplayName = "",
                              Shortname = "diesel_barrel",
                              SkinID = 0,
                              MinimumAmount = 10,
                              MaximumAmount = 300,
                           },
                        },
                    }
                };
            }
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();
            }
            catch
            {
                PrintWarning("Ошибка #1915" + $"чтения конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }

            NextTick(SaveConfig);
        }

        protected override void LoadDefaultConfig() => config = Configuration.GetNewConfiguration();
        protected override void SaveConfig() => Config.WriteObject(config);

        #endregion

        #region Hooks
        object OnDispenserGather(ResourceDispenser dispenser, BaseEntity entity, Item item)
        {
            if (dispenser.gatherType != (ResourceDispenser.GatherType)2 || dispenser.name == "assets/prefabs/player/player_corpse.prefab") return null;
            if (!config.AnimalSettings.ContainsKey(dispenser.name)) return null;
            var player = (BasePlayer)entity;
            if (player == null) return null;
            if (config.BonusDrop)
            {
                Int32 RandomHealth = UnityEngine.Random.Range(5, 12);
                if (dispenser._baseEntity.Health() <= RandomHealth)
                    GiveItem(player, dispenser.name);

                if (!config.DefaultLoot)
                    return false;

                return null;
            }
            
            if (!config.DefaultLoot)
            {
                GiveItem(player, dispenser.name);
                return false;
            }
            GiveItem(player, dispenser.name);
            return null;
        }

        private Item OnItemSplit(Item item, int amount)
        {
            if (plugins.Find("Stacks") || plugins.Find("CustomSkinsStacksFix") || plugins.Find("SkinBox")) return null;
            if (item.skin == 0) return null;

            List<Configuration.DropLootSettings> ItemList = config.AnimalSettings.FirstOrDefault(x => x.Value.Where(i => (i.DisplayName == item.name && i.SkinID == item.skin && i.Shortname == item.info.shortname)).Any()).Value;
            if (ItemList == null) return null;
            foreach (var Item in ItemList.Where(i => i.DisplayName == item.name))
            {
                Item x = ItemManager.CreateByPartialName(Item.Shortname, amount);
                x.name = Item.DisplayName;
                x.skin = Item.SkinID;
                x.amount = amount;
                item.amount -= amount;
                return x;
            }
            return null;
        }

        object CanCombineDroppedItem(DroppedItem item, DroppedItem targetItem)
        {
            if (item.GetItem().skin != targetItem.GetItem().skin) return false;

            return null;
        }
        object CanStackItem(Item item, Item targetItem)
        {
            if (item.skin != targetItem.skin) return false;

            return null;
        }
        #endregion

        #region Metods

        public void GiveItem(BasePlayer player, String Animal)
        {
            var ItemList = config.AnimalSettings[Animal];
            var Item = ItemList.FirstOrDefault(i => IsRandomItem(i.RareDrops));
            if (Item == null) return;

            Item item = ItemManager.CreateByName(Item.Shortname, RandomAmount(Item.MinimumAmount, Item.MaximumAmount), Item.SkinID);
            if (!String.IsNullOrWhiteSpace(Item.DisplayName))
                item.name = Item.DisplayName;
            player.GiveItem(item); 
        }

        public Boolean IsRandomItem(Single Rare)
        {
            Boolean Result = UnityEngine.Random.Range(0, 100) >= 100 - Rare;
            return Result;
        }

        public Int32 RandomAmount(Int32 Min, Int32 Max)
        {
            Int32 Amount = UnityEngine.Random.Range(Min, Max);
            return Amount;
        }

        #endregion
    }
}

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