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

FREE XIcyJackhammer : 1.0.9 1.0.9

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

namespace Oxide.Plugins
{
    [Info("XIcyJackhammer", "rustmods.ru", "1.0.9")]
	class XIcyJackhammer : RustPlugin
	{
		
		private void OnLootEntity(BasePlayer player, BaseEntity entity)
		{
			if (config.Settings.CrateJackhammer)
			{
				if (config.Settings.PermissionJackhammer)
					if (!permission.UserHasPermission(player.UserIDString, "xicyjackhammer.jackhammer")) return;
			
			    if (!(entity is LootContainer) || player == null || entity.OwnerID != 0) return;
			
			    var inventory = entity.GetComponent<LootContainer>().inventory;
			    var lootcontainer = entity.GetComponent<LootContainer>();
						
				foreach(var crate in config.Crate)
					if(crate.NameCrate == lootcontainer.ShortPrefabName)
						if (UnityEngine.Random.Range(0, 100) <= crate.ChanceDrop)
						{
							Item item = ItemManager.CreateByName("jackhammer", 1, config.Jackhammer.SkinIDJackhammer);
							item.name = config.Jackhammer.NameJackhammer;
								
							item.MoveToContainer(inventory);
							entity.OwnerID = player.userID;
						}
		   		 		  						  	   		  	  			  	 				  			 		  		  
			}
		}
		
				
		
        private void InitializeLang()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["ICE"] = "You have mined <color=#00BFFF>ice</color>!"					
            }, this);
		   		 		  						  	   		  	  			  	 				  			 		  		  
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["ICE"] = "Вы добыли <color=#00BFFF>глыбу льда</color>!"						
            }, this, "ru");
        }
		
				
				
		private Item OnItemSplit(Item item, int amount)
        {
			if (StackSizeController) return null;
			
            if (item.skin == config.Ice.SkinIDIce)
            {
                item.amount -= amount;
				
                var Item = ItemManager.Create(item.info, amount, item.skin);
					
                Item.name = item.name;
                Item.skin = item.skin;
                Item.amount = amount;
				item.MarkDirty();
				
                return Item;
            }
			
            return null;
        }
				
		[PluginReference] private Plugin StackSizeController;

        		
				
		[ConsoleCommand("j_give")]
        private void IceGive(ConsoleSystem.Arg args)
        {
			if (args.Player() == null || args.Player().IsAdmin)
			{
				BasePlayer player = BasePlayer.FindByID(ulong.Parse(args.Args[0]));
			
				if (player == null) return;
			
				switch (args.Args[1].ToLower())
				{
					case "jackhammer":
					{
						Item item = ItemManager.CreateByName("jackhammer", int.Parse(args.Args[2]), config.Jackhammer.SkinIDJackhammer);
						item.name = config.Jackhammer.NameJackhammer;
						player.GiveItem(item);
			
						break;
					}				
					case "ice":
					{
						Item item = ItemManager.CreateByName("sticks", int.Parse(args.Args[2]), config.Ice.SkinIDIce);
						item.name = config.Ice.NameIce;
						player.GiveItem(item);
					
						break;
					}
				}
			}
        }
		protected override void LoadDefaultConfig() => config = IceConfig.GetNewConfiguration();
		   		 		  						  	   		  	  			  	 				  			 		  		  
		protected override void LoadConfig()
        { 
            base.LoadConfig();
			
			try
			{
				config = Config.ReadObject<IceConfig>();
			}
			catch
			{
				PrintWarning("Ошибка чтения конфигурации! Создание дефолтной конфигурации!");
				LoadDefaultConfig();
			}
			
			SaveConfig();
        }
		
		private object CanCombineDroppedItem(DroppedItem item, DroppedItem targetItem)
		{
            if (item.GetItem().skin == config.Ice.SkinIDIce)
				if (!targetItem.GetItem().skin.Equals(item.GetItem().skin)) return false;
			
            if (targetItem.GetItem().skin == config.Ice.SkinIDIce)
				if (!item.GetItem().skin.Equals(targetItem.GetItem().skin)) return false; 

            return null;
		}

        private class IceConfig
        {		
			
			internal class JackhammerSetting
            {
                [JsonProperty("SkinID бура")] public ulong SkinIDJackhammer;
				[JsonProperty("Имя бура")] public string NameJackhammer;				
            }					
			[JsonProperty("Настройка шанса выпадения ледяного бура в ящиках")]
            public List<Crates> Crate = new List<Crates>();
			
			internal class Crates
			{
				[JsonProperty("Имя ящика")] public string NameCrate;				
				[JsonProperty("Шанс выпадения")] public float ChanceDrop;	
				
				public Crates(string namecrate, float chancedrop)
				{
					NameCrate = namecrate; ChanceDrop = chancedrop;
				}
			}
			
			internal class IceRecycler
            {
			    [JsonProperty("Shortname предмета")] public string ShortNameItem;
				[JsonProperty("Скин предмета")] public ulong SkinIDItem;	
				[JsonProperty("Кастомное имя предмета")] public string ItemNameItem;				
				[JsonProperty("Шанс выпасть при переработки льда. 100.0 - 100%")] public float ChanceItem;			    
				[JsonProperty("Минимальное количество предмета")] public int AmountMinItem;				
				[JsonProperty("Максимальное количество предмета")] public int AmountMaxItem;	
		   		 		  						  	   		  	  			  	 				  			 		  		  
				public IceRecycler(string shortnameitem, ulong skiniditem, string itemnameitem, float chanceitem, int amountminitem, int amountmaxitem)
				{
					ShortNameItem = shortnameitem; SkinIDItem = skiniditem; ItemNameItem = itemnameitem; ChanceItem = chanceitem; AmountMinItem = amountminitem; AmountMaxItem = amountmaxitem;
				}
            }
			
			internal class WorkSetting
            {				
				[JsonProperty("Включить выпадение ледяного бура из ящиков с определенным шансом")] public bool CrateJackhammer;				
				[JsonProperty("Включить добычу глыб льда только в зимнем биоме")] public bool GatherIce;				
				[JsonProperty("Использовать разрешение на шанс найти ледяной бур в ящиках: xicyjackhammer.jackhammer")] public bool PermissionJackhammer;				
				[JsonProperty("Использовать разрешение на шанс добыть глыбу льда: xicyjackhammer.ice")] public bool PermissionIce;				
				[JsonProperty("Ипользовать сообщение в чат при добыче глыбы льда")] public bool Message;		
			}
			[JsonProperty("Переработка")]
            public List<IceRecycler> Recycler = new List<IceRecycler>();
			internal class IceSetting
            {
                [JsonProperty("SkinID льда")] public ulong SkinIDIce;
				[JsonProperty("Имя льда")] public string NameIce;				
            }			
			[JsonProperty("Добыча льда")]
            public List<IceGather> Gather = new List<IceGather>();			
			
			internal class IceGather
            {
			    [JsonProperty("Ресурс вместе с каким будет выпадать лед")] public string TypeGather;			    
				[JsonProperty("Шанс выпасть льда при бонусной добыче")] public float ChanceGather;			    
				[JsonProperty("Минимальное количество льда")] public int AmountMinGather;				
				[JsonProperty("Максимальное количество льда")] public int AmountMaxGather;	

				public IceGather(string typegather, float chancegather, int amountmingather, int amountmaxgather)
				{
					TypeGather = typegather; ChanceGather = chancegather; AmountMinGather = amountmingather; AmountMaxGather = amountmaxgather;
				}
            }			
			[JsonProperty("Ледяной бур")]
            public JackhammerSetting Jackhammer = new JackhammerSetting();									
			[JsonProperty("Общее")]
            public WorkSetting Settings = new WorkSetting();			
            
			[JsonProperty("Глыба льда")]
            public IceSetting Ice = new IceSetting();			
			
			public static IceConfig GetNewConfiguration()
            {
                return new IceConfig
                {
					Ice = new IceSetting
					{
						SkinIDIce = 2215768109,
						NameIce = "ГЛЫБА ЛЬДА"
					},					
					Jackhammer = new JackhammerSetting
					{
						SkinIDJackhammer = 2215780465,
						NameJackhammer = "ЛЕДЯНОЙ БУР"
					},
					Settings = new WorkSetting
					{
						CrateJackhammer = false,
						GatherIce = false,
						PermissionJackhammer = false,
						PermissionIce = false,
						Message = false
					},
					Gather = new List<IceGather>
					{
						new IceGather("stones", 75.0f, 1, 3),
						new IceGather("sulfur.ore", 75.0f, 1, 3),
						new IceGather("metal.ore", 75.0f, 1, 3)
					},
					Recycler = new List<IceRecycler>
					{
						new IceRecycler("stones", 0, "", 50.0f, 5, 50),
						new IceRecycler("lowgradefuel", 0, "", 50.0f, 5, 50)
					},
                    Crate = new List<Crates>
					{
						new Crates("foodbox", 15.0f),
						new Crates("crate_normal_2", 5.0f)
					}
				};
			}
        }
		
				
				
		private void OnServerInitialized()
        {
			
			permission.RegisterPermission("xicyjackhammer.jackhammer", this);
			permission.RegisterPermission("xicyjackhammer.ice", this);
			
			InitializeLang();
        }
		
		private void OnDispenserBonus(ResourceDispenser dispenser, BasePlayer player, Item item)
		{
			Item tools = player?.GetActiveItem();
			
			if (dispenser == null || player == null || item == null || tools == null) return;
			
			if (config.Settings.PermissionIce)
				if (!permission.UserHasPermission(player.UserIDString, "xicyjackhammer.ice")) return;
			
			if (tools.skin == config.Jackhammer.SkinIDJackhammer)
			    for (int i = 0; i < config.Gather.Count(); i++)
			        if (item.info.shortname.Contains(config.Gather[i].TypeGather))
			        {
					    if (UnityEngine.Random.Range(0f, 100f) < config.Gather[i].ChanceGather)
					    {
							if (config.Settings.GatherIce)
							{
								if (TerrainMeta.BiomeMap.GetBiome(player.transform.position, TerrainBiome.ARCTIC) > 0.15f )
									GiveIce(player, Random.Range(config.Gather[i].AmountMinGather, config.Gather[i].AmountMaxGather));
							}
							else
								GiveIce(player, Random.Range(config.Gather[i].AmountMinGather, config.Gather[i].AmountMaxGather));
							
							if (config.Settings.Message) SendReply(player, lang.GetMessage("ICE", this, player.UserIDString));
					    }
			        }
		}
		
				
		
        private IceConfig config;
        protected override void SaveConfig() => Config.WriteObject(config);
		
		object OnItemRecycle(Recycler recycler, Item item)
        {
		    if (item.info.shortname.Equals("sticks") && item.skin.Equals(config.Ice.SkinIDIce))
            {
				recycler.inventory.Take(null, ItemManager.FindItemDefinition("sticks").itemid, 1);
				
				foreach(var i in config.Recycler)
					if (UnityEngine.Random.Range(0f, 100f) < i.ChanceItem)
					{
                        Item itemc = ItemManager.CreateByName(i.ShortNameItem, Random.Range(i.AmountMinItem, i.AmountMaxItem), i.SkinIDItem);
						itemc.name = i.ItemNameItem;
						
                        recycler.MoveItemToOutput(itemc);
					}
				
                return false;
            }
				
			return null;
        }
		
		private void GiveIce(BasePlayer player, int amount)
		{
			Item items = ItemManager.CreateByName("sticks", amount, config.Ice.SkinIDIce);
            items.name = config.Ice.NameIce;
            player.GiveItem(items);
		}

        	}
}

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