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

FREE QuickBarrel : 1.2.0 1.2.0

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

namespace Oxide.Plugins
{
    [Info("QuickBarrel", "Mercury", "1.2.0")]
    [Description("QuickBarrel")]
    public class QuickBarrel : RustPlugin
    {
        protected override void SaveConfig() => Config.WriteObject(config);
        
        
                
        private void OnPluginLoaded(Plugin plugin)
        {
            if (plugin == null)
                return;
            
            NextTick(ToggleHooks);
        }
        public class Configuration
        {
            [JsonProperty("Допустимая дистанция между игроком и бочкой, для работы функций плагина")]
            public Single DistanceUse;
            
            public static Configuration GetNewConfiguration()
            {
                return new Configuration
                {
                    OneHitUse = false,
                    DistanceUse = 10f,
                };
            }
            [JsonProperty("Использовать функцию 1 удара (бочки и дорожные знаки будут ломаться с 1 удара)")]
            public Boolean OneHitUse;
        }

        void OnContainerDropItems(ItemContainer container)
        {
            if (container == null) return;

            LootContainer lootContainer = container.entityOwner as LootContainer;
            if (lootContainer == null) return;
            if (!IsValidContainer(lootContainer)) return;

            BasePlayer player = lootContainer.lastAttacker as BasePlayer;
            if (player == null) return;

            if (Vector3.Distance(player.transform.position, lootContainer.transform.position) >
                config.DistanceUse) return;

            List<Item> casheList = Facepunch.Pool.GetList<Item>();
            foreach (Item item in lootContainer.inventory.itemList)
                casheList.Add(item);

            foreach (Item item in casheList)
                player.GiveItem(item);
            
            Facepunch.Pool.FreeList(ref casheList);
        }
        
        private void OnBonusItemDropped(Item item, BasePlayer player)
        {
            if(item.GetRootContainer() != null) return;
            
            if (Vector3.Distance(player.transform.position, item.GetWorldEntity().transform.position) >
                config.DistanceUse) return;
            
            player.GiveItem(item);
        }
		   		 		  						  	   		  	  			  	   		  	  			  				
        private object OnEntityTakeDamage(LootContainer container, HitInfo hitInfo)
        {
            if (container == null) return null;
            BasePlayer player = hitInfo.InitiatorPlayer;
            if (player == null) return true;
            if (!IsValidContainer(container)) return null;
            hitInfo.damageTypes.ScaleAll(1000f);
            return null;
        }
        //- Исправлен перенос скрапа из бочек в инвентарь умноженный с помощью чая
        
                private static Configuration config = new Configuration();

        
                private Boolean IsValidContainer(LootContainer lootContainer) =>
            lootContainer.ShortPrefabName.Contains("barrel") ||
            lootContainer.ShortPrefabName.Contains("roadsign");

        protected override void LoadDefaultConfig() => config = Configuration.GetNewConfiguration();
        
        private void Init()
        {
            if(!config.OneHitUse)
                Unsubscribe(nameof(OnEntityTakeDamage));
        }
        
        private void ToggleHooks()
        {
            if (config.OneHitUse)
            {
                Unsubscribe(nameof(OnEntityTakeDamage));
                Subscribe(nameof(OnEntityTakeDamage));
            }
            
            Unsubscribe(nameof(OnContainerDropItems));
            Subscribe(nameof(OnContainerDropItems));
            
            Unsubscribe(nameof(OnBonusItemDropped));
            Subscribe(nameof(OnBonusItemDropped));
        }
		   		 		  						  	   		  	  			  	   		  	  			  				
        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                config = Config.ReadObject<Configuration>();
                if (config == null) LoadDefaultConfig();

                if (config.DistanceUse == 0f)
                    config.DistanceUse = 10f;
            }
            catch
            {
                PrintWarning($"Ошибка чтения конфигурации #93 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }

            NextTick(SaveConfig);
        }
            }
}

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