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

FREE GatherContainers : 0.0.1 0.0.1

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

namespace Oxide.Plugins
{
    [Info("Gather Containers", "NoSoyLito", "0.0.1")]
    [Description("Server PVP Gamemode that randomly divides the server population in two factions")]
    public class GatherContainers : RustPlugin
    {
        #region "Fields"

        private PluginConfig config;
        private DynamicConfigFile dataFile;

        #endregion

        #region "Oxide Hooks"

        void Init()
        {
            config = Config.ReadObject<PluginConfig>();
        }

        void OnLootEntityEnd(BasePlayer player, BaseCombatEntity entity)
        {
            if (player != null)
            {
                LootContainer container = entity as LootContainer;
                if (container.inventory.itemList.Count == 0)
                {
                    GiveMaterialsForCrate(player, container);
                }
            }
        }

        object OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info)
        {
            if (IsPlayer(info))
            {
                if (IsLootContainer(entity))
                {
                    if (IsBreakableContainer(entity))
                    {
                        GiveMaterialsForBarrel(entity, info);
                    }
                }
            }
            return null;
        }

        #endregion

        #region "Plugin guts"

        private bool IsPlayer(HitInfo info)
        {
            if (info != null && info.Initiator != null && info.InitiatorPlayer != null && !info.InitiatorPlayer.IsNpc)
            {
                return true;
            }
            return false;
        }

        private bool IsLootContainer(BaseCombatEntity entity)
        {
            if (entity.GetType().Name.Equals("LootContainer"))
            {
                return true;
            }
            return false;
        }

        private bool IsBreakableContainer(BaseCombatEntity entity)
        {
            if (entity.ShortPrefabName.Contains("barrel"))
            {
                return true;
            }
            return false;
        }

        private void GiveMaterialsForBarrel(BaseCombatEntity entity, HitInfo info)
        {
            //Puts(info.damageProperties.name);
            //Puts(info.damageTypes.Total().ToString());
            float amount = config.ContainerGatheringMultiplier * info.damageTypes.Total();
            int maxAmount = (int)Math.Round(amount / 4.0);
            int minAmount = (int)Math.Round(maxAmount / 2.0);
            if (maxAmount < 1) { maxAmount = 1; minAmount = 1; }
            if (minAmount < 1) { minAmount = 1; }
            info.InitiatorPlayer.GiveItem(ItemManager.CreateByName("metal.fragments", Core.Random.Range(minAmount, maxAmount)));
        }

        private void GiveMaterialsForCrate(BasePlayer player, LootContainer container)
        {
            switch (container.ShortPrefabName)
            {
                case "crate_basic":
                    player.GiveItem(ItemManager.CreateByName("wood", 15 * config.ContainerGatheringMultiplier));
                    break;
                case "crate_tools":
                    player.GiveItem(ItemManager.CreateByName("metal.fragments", 25 * config.ContainerGatheringMultiplier));
                    player.GiveItem(ItemManager.CreateByName("metal.refined", 1 * config.ContainerGatheringMultiplier));
                    break;
                case "crate_mine":
                    player.GiveItem(ItemManager.CreateByName("wood", 50 * config.ContainerGatheringMultiplier));
                    break;
                case "crate_normal_2":
                    player.GiveItem(ItemManager.CreateByName("wood", 50 * config.ContainerGatheringMultiplier));
                    break;
                case "crate_normal_2_food":
                    player.GiveItem(ItemManager.CreateByName("wood", 50 * config.ContainerGatheringMultiplier));
                    break;
                case "crate_normal_2_medical":
                    player.GiveItem(ItemManager.CreateByName("wood", 50 * config.ContainerGatheringMultiplier));
                    break;
                case "crate_normal":
                    player.GiveItem(ItemManager.CreateByName("wood", 50 * config.ContainerGatheringMultiplier));
                    player.GiveItem(ItemManager.CreateByName("metal.fragments", 5 * config.ContainerGatheringMultiplier));
                    break;
                case "crate_elite":
                    player.GiveItem(ItemManager.CreateByName("metal.fragments", 100 * config.ContainerGatheringMultiplier));
                    player.GiveItem(ItemManager.CreateByName("metal.refined", 5 * config.ContainerGatheringMultiplier));
                    break;
            }
        }

        #endregion

        #region "Config logic"

        private class PluginConfig
        {
            public int ContainerGatheringMultiplier;
        }

        protected override void LoadDefaultConfig()
        {
            Config.WriteObject(GetDefaultConfig(), true);
        }

        private PluginConfig GetDefaultConfig()
        {
            return new PluginConfig
            {
                ContainerGatheringMultiplier = 1
            };
        }

        #endregion

        #region "Helpers"

        string ColorString(string text, string color)
        {
            return "<color=" + color + ">" + text + "</color>";
        }

        #endregion
    }
}

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