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

FREE CKit : 3.0 3.0

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

namespace Oxide.Plugins
{
	[Info("CKit", "Crazy", 3.0)]
	[Description("Give Kit")]
	class CKit : RustPlugin
	{
		#region CONFIG

		#region GENERAL
		private cConfig c;
		private class cConfig
		{
			[JsonProperty("KITS")]
			public List<KitList> kit;
			public class KitList
			{
				[JsonProperty("1. Name")]
				public string name;

				[JsonProperty("2. Chat Command")]
				public string command;

				[JsonProperty("3. Short Desc")]
				public string description;

				[JsonProperty("4. Oxide group or permission")]
				public string groupe;

				[JsonProperty("5. Kit default")]
				public bool isDefault;

				[JsonProperty("6. Kit active")]
				public bool isActive;

				[JsonProperty("7. Start")]
				public List<DateList> start;

				[JsonProperty("8. End")]
				public List<DateList> end;

				[JsonProperty("9. Belt")]
				public List<KInventory> belt;

				[JsonProperty("10. Main")]
				public List<KInventory> main;

				[JsonProperty("11. Wear")]
				public List<KInventory> wear;

			}
			public static cConfig GetDefaultConfig()
			{
				return new cConfig
				{
					kit = new List<KitList>
					{
						new KitList
						{
							name = "Default",
							command = null,
							description = "Kits give when a player respawn",
							groupe = null,
							isDefault = true,
							isActive = true,
							start = new List<DateList> { },
							end = new List<DateList> { },
							belt = new List<KInventory>
							{
								new KInventory
								{
									shortName = "rock",
									skin = 804791902,
									amount = 1,
									condition = 100,
									ammo = 0,
									ammotype = null,
									instanceData = null,
									contents = null
								},
								new KInventory
								{
									shortName = "torch",
									skin = 0,
									amount = 1,
									condition = 50,
									ammo = 0,
									ammotype = null,
									instanceData = null,
									contents = null
								}
							},
							main = new List<KInventory> { },
							wear = new List<KInventory>
							{
								new KInventory
								{
									shortName = "tshirt",
									skin = 0,
									amount = 1,
									condition = 0,
									ammo = 0,
									ammotype = null,
									instanceData = null,
									contents = null
								}
							}
						}
					}
				};
			}
		}
		#endregion
		
		#region OBJECT
		public class KInventory
		{
			[JsonProperty("SHORT NAME")]
			public string shortName;

			[JsonProperty("SKIN ID")]
			public ulong skin;

			[JsonProperty("AMOUNT")]
			public int amount;

			[JsonProperty("CONDITION")]
			public float condition;

			[JsonProperty("AMMO")]
			public int ammo;

			[JsonProperty("AMMO TYPE")]
			public string ammotype;

			[JsonProperty("INSTANCE DATA")]
			public ProtoBuf.Item.InstanceData instanceData;

			[JsonProperty("CONTENTS")]
			public KInventory[] contents;
		}
		public class DateList
		{
			[JsonProperty("DAY")]
			public string day;

			[JsonProperty("MONTH")]
			public string month;

			[JsonProperty("YEAR")]
			public string year;

			[JsonProperty("TIME / H24 / 08:00")]
			public string time;
		}
		#endregion

		#region LOAD / SAVE
		protected override void LoadConfig() { base.LoadConfig(); c = Config.ReadObject<cConfig>(); }
		protected override void LoadDefaultConfig() => c = cConfig.GetDefaultConfig();
		protected override void SaveConfig() => Config.WriteObject(c);
		#endregion

		#endregion

		#region DICTIONARY
		public Dictionary<string, string> Lang = new Dictionary<string, string>{
			{"SyntaxError", "Syntax error : <color=#87ceeb>/kit <name></color>"},
			{"SyntaxClearError", "Syntax error : <br><br>"
								+"<color=#87ceeb>/clear all</color> : Delete all inventories<br>"
								+"<color=#87ceeb>/clear main</color> : Delete main inventory<br>"
								+"<color=#87ceeb>/clear wear</color> : Delete the clothing inventory<br>"
								+"<color=#87ceeb>/clear belt</color> : Delete quick Inventorye"},
			{"NotExist", "Kit <color=#87ceeb>{name}</color> does not exists"},
			{"IsInactive", "The kit is currently inactive"},
			{"NotPerm", "You do not have the required permissions"},
			{"NotStart", "The kit <color=#87ceeb>{name}</color> is currently not activated. It will be activated on the <color=#87ceeb>{start}</color>"},
			{"IsEnd", "The kit <color=#87ceeb>{name}</color> is no longer available"},
		};
		#endregion
		
		#region MESSAGE
		private void MessageReply(IPlayer player, string m) => player.Reply("<color=#f1c40f><size=15>SERVER </size></color><color=white><size=15>: " + m + "</size></color>");
		private void Message(string m) => Server.Command("say " + m);
		private string Translate(string msg, Dictionary<string, string> parameters = null)
		{
			if (string.IsNullOrEmpty(msg))
				return string.Empty;
			if (parameters != null)
			{
				foreach (var lekey in parameters)
				{
					if (msg.Contains("{" + lekey.Key + "}"))
						msg = msg.Replace("{" + lekey.Key + "}", lekey.Value);
				}
			}
			return msg;
		}
		#endregion

		#region SERVER
		private void OnPlayerRespawned(BasePlayer player)
		{
			LoadConfig();
			var def = GetKitDefaultName();
			if (def == null)
				return;

			GiveKits(player, def);
		}
		#endregion

		#region EFFECT
		private void SendEffect(BasePlayer player, string sound)
		{
			var effect = new Effect(sound, player, 0, Vector3.zero, Vector3.forward);
			EffectNetwork.Send(effect, player.net.connection);
		}
		#endregion

		#region FUNCTIONS
		public bool CheckKitExist(string args) => c.kit.Any(x => x.name == args);
		public bool CheckKitActive(string args) => c.kit.Single(x => x.command == args).isActive;
		public bool CheckKitState(string state, string args)
		{
			string[] ret = GetKitDate(state, args);
			if (ret.Count() == 0)
				return true;

			string date = $"{ret[0]}/{ret[1]}/{ret[2]} {ret[3]}";

			if (state == "start")
			{
				if (DateTime.ParseExact(date, "dd/MM/yyyy HH:mm", System.Globalization.CultureInfo.InvariantCulture) <= DateTime.Now)
					return true;
			}
			if (state == "end")
			{
				if (DateTime.ParseExact(date, "dd/MM/yyyy HH:mm", System.Globalization.CultureInfo.InvariantCulture) >= DateTime.Now)
					return true;
			}

			return false;
		}
		public bool CheckHasPerms(BasePlayer player, string args) => c.kit.Single(x => x.command == args).groupe == null ? true : permission.UserHasGroup(player.IPlayer.Id, c.kit.Single(x => x.command == args).groupe);
		public bool CheckCommandExist(string args) => c.kit.Any(x => x.command == args);
		public string GetKitDefaultName()
		{
			if (!c.kit.Any(x => x.isDefault))
				return null;

			return c.kit.Single(x => x.isDefault).name;
		}
		public string GetKitName(string args) => c.kit.Single(x => x.command == args).name;
		private string[] GetKitDate(string state, string args)
		{
			string[] ret = new string[] {};
			switch (state) 
			{
				case "start":
					try
					{
						var cmd = c.kit.Single(x => x.command == args);
						var d = cmd.start[0].day;
						var m = cmd.start[0].month;
						var y = cmd.start[0].year;
						var t = cmd.start[0].time;
						ret = new string[] { d, m, y, t };
						return ret;
					}
					catch 
					{
						return ret;
					}
				case "end":
					try
					{
						var cmd = c.kit.Single(x => x.command == args);
						var d = cmd.end[0].day;
						var m = cmd.end[0].month;
						var y = cmd.end[0].year;
						var t = cmd.end[0].time;
						ret = new string[] { d, m, y, t };
						return ret;
					}
					catch
					{
						return ret;
					}
				default:
					return ret;
			}
		}
		#endregion

		#region GIVE
		public enum InventoryType { main, wear, belt };
		private void GiveKits(BasePlayer player, string name)
		{
			if (!CheckKitExist(name))
				return;

			player.inventory.Strip();
			GiveItems(player, name, InventoryType.belt);
			GiveItems(player, name, InventoryType.wear);
			GiveItems(player, name, InventoryType.main);
			SendEffect(player, "assets/prefabs/deployable/locker/sound/equip_zipper.prefab");
		}		
		private void GiveItems(BasePlayer player, string name, InventoryType type)
		{
			if (!CheckKitExist(name))
				return;
						
			ItemContainer container = type == InventoryType.belt ? player.inventory.containerBelt : type == InventoryType.wear ? player.inventory.containerWear : player.inventory.containerMain;
			var cmd = c.kit.Single(x => x.name == name);
			var list = type == InventoryType.belt ? cmd.belt : type == InventoryType.wear ? cmd.wear : cmd.main;
			
			foreach (var iSave in list)
			{
				var item = ItemManager.CreateByName(iSave.shortName, iSave.amount, iSave.skin);
				item.condition = iSave.condition;
				if (iSave.instanceData != null)
					item.instanceData = iSave.instanceData;
				var weapon = item.GetHeldEntity() as BaseProjectile;
				if (weapon != null)
				{
					if (!string.IsNullOrEmpty(iSave.ammotype))
						weapon.primaryMagazine.ammoType = ItemManager.FindItemDefinition(iSave.ammotype);
					weapon.primaryMagazine.contents = iSave.ammo;
				}
				if (iSave.contents != null)
				{
					foreach (var contentData in iSave.contents)
					{
						var newContent = ItemManager.CreateByName(contentData.shortName, contentData.amount);
						if (newContent != null)
						{
							newContent.condition = contentData.condition;
							newContent.MoveToContainer(item.contents);
						}
					}
				}
				item.MoveToContainer(container);
			}
		}
		#endregion

		#region COMMAND
		[ChatCommand("clear")]
		private void ClearInvCommand(BasePlayer player, string command, string[] args)
		{
			if (!player.IsAdmin)
			{
				MessageReply(player.IPlayer, Translate(Lang["NotPerm"]));
				return;
			}

			if (args.Count() == 0)
			{
				MessageReply(player.IPlayer, Translate(Lang["SyntaxClearError"]));				
				return;
			}
			switch (args[0].ToLower())
			{
				case "all":
					player.inventory.Strip();
					break;
				case "main":
					player.inventory.containerMain.Clear();
					break;
				case "wear":
					player.inventory.containerWear.Clear();
					break;
				case "belt":
					player.inventory.containerBelt.Clear();
					break;
				default:
					return;
			}

			}
		[ChatCommand("kit")]		
		private void KitCommand(BasePlayer player, string command, string[] args)
		{
			LoadConfig();

			if (args.Count() == 0)
			{
				MessageReply(player.IPlayer, Translate(Lang["SyntaxError"]));
				return;
			}

			if (!CheckCommandExist(args[0]))
			{ 
				MessageReply(player.IPlayer, Translate(Lang["NotExist"], new Dictionary<string, string> { { "name", args[0] } }));
				return;
			}

			if (!CheckKitActive(args[0]))
			{ 
				MessageReply(player.IPlayer, Translate(Lang["IsInactive"]));
				return;
			}

			if (!CheckHasPerms(player, args[0]))
			{ 
				MessageReply(player.IPlayer, Translate(Lang["NotPerm"]));
				return;
			}

			if (!CheckKitState("start", args[0]))
			{
				string[] ret = GetKitDate("start", args[0]);
				string date = $"{ret[0]}/{ret[1]}/{ret[2]} à {ret[3]}";
				MessageReply(player.IPlayer, Translate(Lang["NotStart"], new Dictionary<string, string> { { "name", GetKitName(args[0]) }, { "start", date } }));
				return;
			}

			if (!CheckKitState("end", args[0]))
			{
				MessageReply(player.IPlayer, Translate(Lang["IsEnd"], new Dictionary<string, string> { { "name", GetKitName(args[0]) }}));
				return;
			}

			GiveKits(player, GetKitName(args[0]));
		}
		#endregion
	}
}

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