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

FREE OreBonus : 3.0.9 3.0.9

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("OreBonus", "DezLife", "3.0.9")]
    [Description("Добавляет новую руду в камни")]
    public class OreBonus : RustPlugin {
        public static OreBonus instance;
        public Dictionary<ulong, string> ToOres = new Dictionary<ulong, string>();
        bool furnacec = false;
#region CFG
        public class CustomItem {
            [JsonProperty("Отображаемое имя")]
            public string DisplayName;
            [JsonProperty("Название предмета который он будет заменять")]
            public string ReplaceShortName;
            [JsonProperty("Что он получит после переплавки")]
            public string Shortnames;
            [JsonProperty("Количевство радиации каторое будет даваться каждый тик")]
            public float Radiations;
            [JsonProperty("Радиус радиации в метрах (От печки)")]
            public float RadiationsRadius;
            [JsonProperty("Минимальное выпадения переплавленой руды в печках")]
            public int mincount;
            [JsonProperty("Максимальное выпадения переплавленой руды в печках")]
            public int maxcount;
            [JsonProperty("Шанс выпадения")]
            public int DropChance;
            [JsonProperty("Максимальное количевство выпадения радиактивной руды")]
            public int DropAmount;
            [JsonProperty("Скин ID предмета")]
            public ulong ReplaceID;
            public int GetItemId() => ItemManager.FindItemDefinition(ReplaceShortName).itemid;
            public int GetItemAmount(BasePlayer player) => player.inventory.GetAmount(GetItemId());
            public Item Copy(int amount) {
                Item x = ItemManager.CreateByPartialName(ReplaceShortName, amount);
                x.skin = ReplaceID;
                x.name = DisplayName;
                return x;
            }
            public void CreateItem(BasePlayer player, int amount) {
                Item x = ItemManager.CreateByPartialName(ReplaceShortName, amount);
                x.skin = ReplaceID;
                x.name = DisplayName;
                if (player != null) {
                    if (player.inventory.containerMain.itemList.Count < 24) x.MoveToContainer(player.inventory.containerMain);
                    else x.Drop(player.transform.position, Vector3.zero);
                    return;
                }
            }
        }
        private class Configuration {
            [JsonProperty("Настройка руды")]
            public Dictionary<string, CustomItem> CustomItems = new Dictionary<string, CustomItem> {
                ["sulfur.ore"]
                = new CustomItem {
                    DisplayName = "Радиактивная сера", ReplaceShortName = "glue", Shortnames = "sulfur", DropChance = 7, DropAmount = 2, ReplaceID = 1681986132, Radiations = 10f, RadiationsRadius = 15f, mincount = 100, maxcount = 1000,
                }
                , ["metal.ore"] = new CustomItem {
                    DisplayName = "Радиактивный металл", ReplaceShortName = "ducttape", Shortnames = "metal.fragments", DropChance = 11, DropAmount = 3, ReplaceID = 1681987157, Radiations = 10f, RadiationsRadius = 10f, mincount = 300, maxcount = 1500,
                }
                , ["stones"] = new CustomItem {
                    DisplayName = "Радиактивный камень", ReplaceShortName = "bleach", Shortnames = "stones", DropChance = 14, DropAmount = 4, ReplaceID = 1681987635, Radiations = 10f, RadiationsRadius = 10f, mincount = 500, maxcount = 2500,
                }
                ,
            }
            ;
        }
        private static Configuration Settings = new Configuration();
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                Settings = Config.ReadObject<Configuration>();
                if (Settings?.CustomItems == null) LoadDefaultConfig();
            }
            catch {
                PrintWarning("Ошибка #331 чтения конфигурации 'oxide/config/', создаём новую конфигурацию!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        protected override void LoadDefaultConfig() => Settings = new Configuration();
        protected override void SaveConfig() => Config.WriteObject(Settings);
#endregion
#region Hooks
        [ChatCommand("ore.give")]
        void CmdChatDebugOreSpawn(BasePlayer player, string command, string[] args) {
            if (!player.IsAdmin) return;
            foreach (var check in Settings.CustomItems) {
                var item = check.Value.Copy(100);
                item.MoveToContainer(player.inventory.containerMain);
            }
        }
        void OnServerInitialized() {
            instance = this;
            furnacec = true;
            foreach (var skkinid in Settings.CustomItems) {
                ToOres.Add(skkinid.Value.ReplaceID, skkinid.Key);
            }
            List<BaseOven> baseOvens = UnityEngine.Object.FindObjectsOfType<BaseOven>().ToList();
            baseOvens.ForEach(baseOven => {
                if (!(baseOven is BaseFuelLightSource)) {
                    OnEntitySpawned(baseOven);
                }
            }
            );
        }
        void OnEntitySpawned(BaseNetworkable entity) {
            if (!furnacec) return;
            if (entity == null) return;
            if (entity is BaseOven && !(entity is BaseFuelLightSource)) {
                BaseOven baseOven = entity as BaseOven;
                if (baseOven == null) return;
                FurnaceBurn fBurn = new FurnaceBurn();
            }
        }
        object OnDispenserBonus(ResourceDispenser dispenser, BasePlayer player, Item item) {
            if (player == null) return null;
            if (Settings.CustomItems.ContainsKey(item.info.shortname)) {
                var items = Settings.CustomItems["sulfur.ore"];
                bool goodChance = UnityEngine.Random.Range(0, 100) >= (100 - items.DropChance);
                if (goodChance) {
                    Item RadSulfur = ItemManager.CreateByName(items.ReplaceShortName, UnityEngine.Random.Range(1, items.DropAmount), items.ReplaceID);
                    RadSulfur.name = items.DisplayName;
                    player?.GiveItem(RadSulfur);
                }
            }
            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 Metod
        public class FurnaceBurn {
            BaseOven oven;
            StorageContainer storageContainer;
            Timer timer;
            void timertick() {
                if (timer == null) {
                    timer = instance.timer.Once(5f, CheckRadOres);
                }
                else {
                    timer.Destroy();
                    timer = instance.timer.Once(5f, CheckRadOres);
                }
            }
            void CheckRadOres() {
                if (oven == null) {
                    timer.Destroy();
                    return;
                }
                if (oven.IsOn()) {
                    foreach (var item in storageContainer.inventory.itemList) {
                        if (instance.ToOres.ContainsKey(item.skin)) {
                            instance.NextTick(() => {
                                List<BasePlayer> players = new List<BasePlayer>();
                                Vis.Entities<BasePlayer>(oven.transform.position, Settings.CustomItems[instance.ToOres[item.skin]].RadiationsRadius, players);
                                players.ForEach(p => p.metabolism.radiation_poison.value += Settings.CustomItems[instance.ToOres[item.skin]].Radiations);
                                if (item.amount > 1) item.amount--;
                                else item.RemoveFromContainer();
                                Item newItem = ItemManager.CreateByName(Settings.CustomItems[instance.ToOres[item.skin]].Shortnames, UnityEngine.Random.Range(Settings.CustomItems[instance.ToOres[item.skin]].mincount, Settings.CustomItems[instance.ToOres[item.skin]].maxcount));
                                if (!newItem.MoveToContainer(storageContainer.inventory)) {
                                    newItem.Drop(oven.transform.position, Vector3.up);
                                }
                            }
                            );
                        }
                    }
                }
                timertick();
            }
        }
#endregion
    }
}

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

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

Сверху