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

FREE RepairHammer : 1.0.0 1.0.0

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

namespace Oxide.Plugins
{
	[Info("RepairHammer", "Own3r/rostov114/BadMandarin", "1.0.0")]
	public class RepairHammer : RustPlugin
	{
		#region Class
		private class Resources
		{
			private Dictionary<string, int> _resource = new Dictionary<string, int>();

			public void Add(BuildingGrade.Enum grade, int amount)
			{
				string _grade = grade.ToString().ToLower();

				if (_grade == "twigs")
					_grade = "wood";

				if (!_resource.ContainsKey(_grade))
					_resource.Add(_grade, amount);
				else 
					_resource[_grade] += amount;
			}

			public Dictionary<string, int> Result()
			{
				return _resource;
			}
		}
		#endregion
		
		#region Language
		protected override void LoadDefaultMessages() 
		{
			lang.RegisterMessages(new Dictionary<string, string> 
			{
				["BuildingPrivlidgeNeed"] = "For a complete home repair you need a Building Privilege!",
				["Repaired"] = "You repaired {0} blocks by spending:",
				["wood"] = "Wood",
				["stone"] = "Stones",
				["metal"] = "Metal Fragments",
				["toptier"] = "HQM"
			}, this);

			lang.RegisterMessages(new Dictionary<string, string> 
			{
				["BuildingPrivlidgeNeed"] = "Для полной починки дома нужен шкаф!",
				["Repaired"] = "Вы отремонтировали {0} блоков потратив:",
				["wood"] = "Дерево",
				["stone"] = "Камни",
				["metal"] = "Фрагменты металла",
				["toptier"] = "МВК"
			}, this, "ru");
		}

		private string _(string key, BasePlayer player, params object[] args) 
		{
			return string.Format(lang.GetMessage(key, this, player.UserIDString), args);
		}
		#endregion

		#region Oxide Hooks
		private void Init()
		{
			permission.RegisterPermission("repairhammer.solo", this);
			permission.RegisterPermission("repairhammer.all", this);
		}

		private object OnStructureRepair(BaseCombatEntity entity, BasePlayer player)
		{
			if (!(entity is BuildingBlock))
				return null;

			if (!HasPermission(player, "repairhammer.solo") && !HasPermission(player, "repairhammer.all"))
				return null;

			if (entity.SecondsSinceAttacked <= 30f) // Делаем выход и ничего не пишем, да бы игроки не тупили, ибо я затупил, ну да хлэбушек там все дела :)
				return null;

			BuildingPrivlidge buildingprivlidge = (entity as DecayEntity).GetBuildingPrivilege();
			if(buildingprivlidge == null)
			{
				SendReply(player, _("BuildingPrivlidgeNeed", player));
				return null;
			}

			int repaired = 0;
			Resources resources = new Resources();

			if (HasPermission(player, "repairhammer.all"))
			{
				BuildingManager.Building building = buildingprivlidge.GetBuilding();
				if (building == null)
					return null;

				if (!building.HasBuildingBlocks())
					return null;

				foreach (BuildingBlock buildingBlock in building.buildingBlocks)
				{
					if (buildingBlock.health == buildingBlock.MaxHealth()) 
						continue;

					if (buildingBlock.SecondsSinceAttacked <= 30)
						continue;

					int resamount = 0;
					if (TakeResoures(player, buildingBlock, out resamount))
					{
						buildingBlock.health = buildingBlock.MaxHealth();
						resources.Add(buildingBlock.grade, resamount);

						repaired++;
					}
				}
			}

			if (HasPermission(player, "repairhammer.solo") && repaired == 0) // Условие на наличие привелегии и отсуствии починенных блоков, если например игроку выдали 2 привелегии
			{
				BuildingBlock block = entity as BuildingBlock;
				if (block == null)
					return null;

				if (block.health == block.MaxHealth()) 
					return false;

				int resamount = 0;
				if (TakeResoures(player, block, out resamount))
				{
					block.health = block.MaxHealth();
					resources.Add(block.grade, resamount);

					repaired++;
				}
			}

			if (repaired == 0)
				return null;

			string message = _("Repaired", player, repaired) + Environment.NewLine;
			foreach (var resource in resources.Result())
			{
				message += "  " + _(resource.Key, player) + $": {resource.Value}" + Environment.NewLine;
			}
			SendReply(player, message);

			return false;
		}
		#endregion

		#region Helpers
		private bool HasPermission(BasePlayer player, string _permission)
		{
			return permission.UserHasPermission(player.UserIDString, _permission);
		}

		private bool TakeResoures(BasePlayer player, BuildingBlock block, out int resamount)
		{
			resamount = 0;
			List<ItemAmount> itemsneed = block.RepairCost(1f - block.healthFraction);

			if (itemsneed == null || itemsneed.Count < 1) 
				return false;

			Item iteminfo = ItemManager.CreateByName(itemsneed[0].itemDef.shortname);
			float amount = 0;

			foreach (ItemAmount i in itemsneed)
				amount += i.amount;

			if (player.inventory.GetAmount(iteminfo.info.itemid) >= amount)
			{
				List<Item> list = new List<Item>();

				player.inventory.Take(list, itemsneed[0].itemid, (int)amount);
				player.Command(string.Concat(new object[]
				{
					"note.inv ",
					itemsneed[0].itemid,
					" ",
					amount * -1f
				}));

				foreach (Item item in list)
					item.Remove(0f);

				resamount = (int)amount;

				return true;
			}

			return false;
		}
		#endregion
	}
}

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

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

Сверху