Decompiled source of ForgePlanner v1.0.1

plugins/Forgeplan.dll

Decompiled 4 days ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Forgeplan.Ui;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("assembly_valheim")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("Forgeplan")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.1.0")]
[assembly: AssemblyInformationalVersion("1.0.1+431670f883f8d8da129d8bb2dbece6311b9f111d")]
[assembly: AssemblyProduct("Forgeplan")]
[assembly: AssemblyTitle("Forgeplan")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace Forgeplan
{
	[BepInPlugin("dev.forgeplanner.forgeplan", "Forgeplan", "1.0.1")]
	[BepInProcess("valheim.exe")]
	public class ForgeplanPlugin : BaseUnityPlugin
	{
		public const string Guid = "dev.forgeplanner.forgeplan";

		public const string Version = "1.0.1";

		internal static ManualLogSource Log;

		internal static readonly PlannerPanel Panel = new PlannerPanel();

		private ConfigEntry<KeyboardShortcut> _hotkey;

		private ConfigEntry<float> _chestRadius;

		private ConfigEntry<bool> _includeChests;

		private ConfigEntry<bool> _selfTest;

		private ConfigEntry<bool> _russian;

		private ConfigEntry<bool> _noSpoilers;

		private ConfigEntry<bool> _stationButton;

		private ConfigEntry<float> _stationX;

		private ConfigEntry<float> _stationY;

		private ConfigEntry<StationButton.Corner> _stationCorner;

		private Harmony _harmony;

		internal static int OpenRequest;

		internal static bool SpoofGui = true;

		private void Awake()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0246: Expected O, but got Unknown
			Log = ((BaseUnityPlugin)this).Logger;
			_hotkey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("General", "Open", new KeyboardShortcut((KeyCode)288, Array.Empty<KeyCode>()), "Hotkey that opens the planner.");
			_includeChests = ((BaseUnityPlugin)this).Config.Bind<bool>("Stock", "CountChests", true, "Count nearby chests, not just your backpack.");
			_chestRadius = ((BaseUnityPlugin)this).Config.Bind<float>("Stock", "Radius", 20f, "How far a chest counts as yours, in metres.");
			_russian = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Russian", false, "Window labels in Russian. Also toggled by the button in the header.");
			L.Ru = _russian.Value;
			_noSpoilers = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "HideUnreached", true, "Lock biomes whose boss is still alive. Meadows, Black Forest and Ocean are always open. Also toggled in the Settings window.");
			Progress.Enabled = _noSpoilers.Value;
			_stationButton = ((BaseUnityPlugin)this).Config.Bind<bool>("Station", "Button", true, "Show the ForgePlanner button on the crafting panel.");
			_stationCorner = ((BaseUnityPlugin)this).Config.Bind<StationButton.Corner>("Station", "Corner", StationButton.Corner.BottomRight, "Which side of the panel the button's shelf sits on. The shelf is always below the panel, so this reads as left or right.");
			_stationX = ((BaseUnityPlugin)this).Config.Bind<float>("Station", "OffsetX", 14f, "Shelf offset from the panel edge, in points.");
			_stationY = ((BaseUnityPlugin)this).Config.Bind<float>("Station", "DropDown", 0f, "How far below the panel edge to drop the shelf, in points. 0 keeps it flush with the panel.");
			StationButton.Enabled = _stationButton.Value;
			StationButton.Where = _stationCorner.Value;
			StationButton.Offset = new Vector2(_stationX.Value, _stationY.Value);
			_selfTest = ((BaseUnityPlugin)this).Config.Bind<bool>("Debug", "SelfTest", false, "On entering a world, build the catalogue and dump the conversion table and a few calculated orders to the log. Used to check the mod against the website after a game update.");
			UiKit.Verbose = _selfTest.Value;
			Panel.OnLanguageChanged = delegate(bool ru)
			{
				_russian.Value = ru;
			};
			Panel.OnSpoilersChanged = delegate(bool on)
			{
				_noSpoilers.Value = on;
			};
			Panel.OnChestsChanged = delegate(bool on)
			{
				_includeChests.Value = on;
			};
			Panel.Chests = _includeChests.Value;
			_harmony = new Harmony("dev.forgeplanner.forgeplan");
			_harmony.PatchAll();
			Log.LogInfo((object)"Форджплан 1.0.1 загружен");
		}

		private void OnDestroy()
		{
			if (_harmony != null)
			{
				_harmony.UnpatchSelf();
			}
		}

		private void Update()
		{
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			if (_selfTest.Value && !SelfTest.Done && GameData.Build())
			{
				SelfTest.Run();
			}
			if (Panel.Visible)
			{
				Stock.IncludeChests = Panel.Chests;
			}
			if (Panel.Visible)
			{
				if (GameGuiReallyOpen())
				{
					Panel.Hide();
				}
				else if (Input.GetKeyDown((KeyCode)27))
				{
					Panel.Hide();
				}
				else
				{
					Panel.Tick();
				}
			}
			if (OpenRequest > 0)
			{
				OpenRequest--;
				if (!Panel.Visible && !IsGameBusy())
				{
					OpenRequest = 0;
					OpenPanel();
				}
			}
			KeyboardShortcut value = _hotkey.Value;
			if (((KeyboardShortcut)(ref value)).IsDown() && (Panel.Visible || !IsGameBusy()))
			{
				OpenPanel();
			}
		}

		private void OpenPanel()
		{
			Panel.Chests = _includeChests.Value;
			Stock.ChestRadius = _chestRadius.Value;
			Panel.Toggle();
			if (!Panel.Visible && (Object)(object)GameCamera.instance != (Object)null)
			{
				GameCamera.instance.UpdateMouseCapture();
			}
		}

		private void LateUpdate()
		{
			if (Panel.Visible)
			{
				Cursor.visible = true;
				Cursor.lockState = (CursorLockMode)0;
			}
		}

		internal static bool BlockFor(Player p)
		{
			if (Panel.Visible && (Object)(object)p != (Object)null)
			{
				return (Object)(object)p == (Object)(object)Player.m_localPlayer;
			}
			return false;
		}

		private static bool GameGuiReallyOpen()
		{
			SpoofGui = false;
			try
			{
				return Menu.IsVisible() || InventoryGui.IsVisible();
			}
			finally
			{
				SpoofGui = true;
			}
		}

		private static bool IsGameBusy()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Invalid comparison between Unknown and I4
			if ((Object)(object)Player.m_localPlayer == (Object)null)
			{
				return true;
			}
			if ((Object)(object)Minimap.instance != (Object)null && (int)Minimap.instance.m_mode == 2)
			{
				return true;
			}
			if (GameGuiReallyOpen() || Console.IsVisible())
			{
				return true;
			}
			if ((Object)(object)TextViewer.instance != (Object)null && TextViewer.instance.IsVisible())
			{
				return true;
			}
			return false;
		}
	}
	[HarmonyPatch(typeof(ZNetScene), "Shutdown")]
	internal static class ResetOnLeave
	{
		private static void Postfix()
		{
			ForgeplanPlugin.Panel.Drop();
			ForgeplanPlugin.Panel.ResetFilters();
			GameData.Reset();
			Trade.Reset();
			Progress.Reset();
			Planner.Cart.Clear();
			SelfTest.Done = false;
		}
	}
	[HarmonyPatch(typeof(InventoryGui), "IsVisible")]
	internal static class PretendGuiOpen
	{
		private static void Postfix(ref bool __result)
		{
			if (ForgeplanPlugin.SpoofGui && ForgeplanPlugin.Panel.Visible)
			{
				__result = true;
			}
		}
	}
	[HarmonyPatch(typeof(Player), "PlayerAttackInput")]
	internal static class NoAttacksWhileOpen
	{
		private static bool Prefix(Player __instance)
		{
			return !ForgeplanPlugin.BlockFor(__instance);
		}
	}
	[HarmonyPatch(typeof(Player), "UpdatePlacement")]
	internal static class NoBuildingWhileOpen
	{
		private static void Prefix(Player __instance, ref bool takeInput)
		{
			if (ForgeplanPlugin.BlockFor(__instance))
			{
				takeInput = false;
			}
		}
	}
	[HarmonyPatch(typeof(Player), "UseHotbarItem")]
	internal static class NoHotbarWhileOpen
	{
		private static bool Prefix(Player __instance)
		{
			return !ForgeplanPlugin.BlockFor(__instance);
		}
	}
	[HarmonyPatch(typeof(Player), "UpdateCrouch")]
	internal static class NoCrouchWhileOpen
	{
		private static bool Prefix(Player __instance)
		{
			return !ForgeplanPlugin.BlockFor(__instance);
		}
	}
	[HarmonyPatch(typeof(Player), "StartGuardianPower")]
	internal static class NoGuardianPowerWhileOpen
	{
		private static bool Prefix(Player __instance, ref bool __result)
		{
			if (!ForgeplanPlugin.BlockFor(__instance))
			{
				return true;
			}
			__result = false;
			return false;
		}
	}
	[HarmonyPatch(typeof(Player), "SetControls")]
	internal static class BlockControlsWhileOpen
	{
		private static void Prefix(ref Vector3 movedir, ref bool attack, ref bool attackHold, ref bool secondaryAttack, ref bool secondaryAttackHold, ref bool block, ref bool blockHold, ref bool jump, ref bool crouch, ref bool run, ref bool autoRun, ref bool dodge)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			if (ForgeplanPlugin.Panel.Visible)
			{
				movedir = Vector3.zero;
				attack = (attackHold = (secondaryAttack = (secondaryAttackHold = false)));
				block = (blockHold = (jump = (crouch = (run = (autoRun = (dodge = false))))));
			}
		}
	}
	[HarmonyPatch(typeof(GameCamera), "UpdateCamera")]
	internal static class FreezeCameraWhileOpen
	{
		private static bool Prefix()
		{
			return !ForgeplanPlugin.Panel.Visible;
		}
	}
	[HarmonyPatch(typeof(GameCamera), "UpdateMouseCapture")]
	internal static class FreeCursorWhileOpen
	{
		private static bool Prefix()
		{
			return !ForgeplanPlugin.Panel.Visible;
		}
	}
	public class ItemDef
	{
		public string Id;

		public string Name;

		public Sprite Icon;

		public int Out = 1;

		public string Station = "";

		public int MinStationLevel = 1;

		public int MaxQuality = 1;

		public List<Dictionary<string, int>> Levels = new List<Dictionary<string, int>>();

		public bool IsMaterial;

		public Kind Group = Kind.Other;

		public int Tier = -1;

		public string Haystack = "";

		public string Ru;

		public string En;

		public bool FromConversion;

		public bool HasRecipe => Levels.Count > 0;

		public string Shown
		{
			get
			{
				string text = (L.Ru ? Ru : En);
				if (!string.IsNullOrEmpty(text))
				{
					return text;
				}
				if (!string.IsNullOrEmpty(Name) && Name[0] != '[')
				{
					return Name;
				}
				string text2 = (L.Ru ? En : Ru);
				if (!string.IsNullOrEmpty(text2))
				{
					return text2;
				}
				return Name;
			}
		}
	}
	public enum Kind
	{
		Weapon,
		Armor,
		Tool,
		Food,
		Material,
		Piece,
		Other
	}
	public class Rule
	{
		public Dictionary<string, int> Mats = new Dictionary<string, int>();

		public string Station = "";

		public int Out = 1;

		public int Sec;

		public int Cap;

		public int Slots = 1;
	}
	public static class GameData
	{
		public static readonly Dictionary<string, ItemDef> Items = new Dictionary<string, ItemDef>();

		public static readonly Dictionary<string, Rule> Convert = new Dictionary<string, Rule>();

		public static readonly Dictionary<string, string> StationNames = new Dictionary<string, string>();

		public static readonly Dictionary<string, Sprite> StationIcons = new Dictionary<string, Sprite>();

		public static readonly List<string> Shadowed = new List<string>();

		public static int Mirrored;

		public static int SkippedUpgraders;

		public static int Pieces;

		public static readonly Dictionary<string, List<int>> RecipeAmounts = new Dictionary<string, List<int>>();

		private static readonly Dictionary<string, int> TierMemo = new Dictionary<string, int>();

		public static Rule KilnRule;

		private static readonly HashSet<string> SkipTools = new HashSet<string> { "cultivator" };

		public static int SkippedPlanting;

		public static int SkippedServings;

		private static readonly Dictionary<string, string> Prefer = new Dictionary<string, string>
		{
			{ "iron", "ironscrap" },
			{ "copper", "copperore" }
		};

		public static bool Ready { get; private set; }

		public static Sprite StationIcon(string id)
		{
			if (!StationIcons.TryGetValue(id, out var value))
			{
				return null;
			}
			return value;
		}

		public static string StationName(string id)
		{
			if (string.IsNullOrEmpty(id))
			{
				return id;
			}
			string text = Names.Get(L.Ru ? Names.StationRu : Names.StationEn, id);
			if (!string.IsNullOrEmpty(text))
			{
				return text;
			}
			if (!StationNames.TryGetValue(id, out var value))
			{
				return id;
			}
			return value;
		}

		public static string Slug(string prefab)
		{
			if (string.IsNullOrEmpty(prefab))
			{
				return "";
			}
			StringBuilder stringBuilder = new StringBuilder(prefab.Length);
			bool flag = false;
			for (int i = 0; i < prefab.Length; i++)
			{
				char c = char.ToLowerInvariant(prefab[i]);
				if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
				{
					if (flag && stringBuilder.Length > 0)
					{
						stringBuilder.Append('_');
					}
					flag = false;
					stringBuilder.Append(c);
				}
				else
				{
					flag = true;
				}
			}
			return stringBuilder.ToString();
		}

		public static ItemDef Get(string id)
		{
			if (!Items.TryGetValue(id, out var value))
			{
				return null;
			}
			return value;
		}

		public static string NameOf(string id)
		{
			ItemDef itemDef = Get(id);
			if (itemDef != null)
			{
				return itemDef.Shown;
			}
			string text = Names.Get(L.Ru ? Names.Ru : Names.En, id);
			if (!string.IsNullOrEmpty(text))
			{
				return text;
			}
			return id;
		}

		public static void Reset()
		{
			Items.Clear();
			Convert.Clear();
			StationNames.Clear();
			Shadowed.Clear();
			StationIcons.Clear();
			TierMemo.Clear();
			RecipeAmounts.Clear();
			KilnRule = null;
			Mirrored = 0;
			SkippedUpgraders = 0;
			Pieces = 0;
			Ready = false;
			SkippedPlanting = 0;
			SkippedServings = 0;
		}

		public static int TierOf(ItemDef it)
		{
			return TierOf(it, 0);
		}

		private static int TierOf(ItemDef it, int depth)
		{
			if (it == null || it.Levels.Count == 0)
			{
				return -1;
			}
			int num = -1;
			foreach (string key in it.Levels[0].Keys)
			{
				int num2 = MatTier(key, 0);
				if (num2 > num)
				{
					num = num2;
				}
			}
			if (depth < 4 && !string.IsNullOrEmpty(it.Station))
			{
				ItemDef itemDef = Get(PieceId(it.Station));
				if (itemDef != null && itemDef != it)
				{
					int num3 = TierOf(itemDef, depth + 1);
					if (num3 > num)
					{
						num = num3;
					}
				}
			}
			return num;
		}

		private static int MatTier(string id, int depth)
		{
			if (TierMemo.TryGetValue(id, out var value))
			{
				return value;
			}
			if (depth > 8)
			{
				return -1;
			}
			TierMemo[id] = -1;
			if (Tiers.OfMaterial.TryGetValue(id, out value))
			{
				TierMemo[id] = value;
				return value;
			}
			int num = -1;
			if (Convert.TryGetValue(id, out var value2))
			{
				foreach (string key in value2.Mats.Keys)
				{
					int num2 = MatTier(key, depth + 1);
					if (num2 > num)
					{
						num = num2;
					}
				}
			}
			else
			{
				ItemDef itemDef = Get(id);
				if (itemDef != null && itemDef.Levels.Count > 0)
				{
					foreach (string key2 in itemDef.Levels[0].Keys)
					{
						int num3 = MatTier(key2, depth + 1);
						if (num3 > num)
						{
							num = num3;
						}
					}
				}
			}
			TierMemo[id] = num;
			return num;
		}

		public static bool Build()
		{
			if (Ready)
			{
				return true;
			}
			if ((Object)(object)ObjectDB.instance == (Object)null || ObjectDB.instance.m_items.Count == 0)
			{
				return false;
			}
			if ((Object)(object)ZNetScene.instance == (Object)null)
			{
				return false;
			}
			Stopwatch stopwatch = Stopwatch.StartNew();
			Reset();
			IndexItems();
			IndexRecipes();
			IndexConversions();
			DropShadowed();
			LiftKiln();
			MirrorConversions();
			IndexPieces();
			foreach (ItemDef value in Items.Values)
			{
				value.Tier = TierOf(value);
				string text = (value.Id.StartsWith("piece:") ? value.Id.Substring(6) : value.Id);
				value.Ru = Names.Get(Names.Ru, text);
				value.En = Names.Get(Names.En, text);
				value.Haystack = (value.Name + " " + text + " " + value.Ru + " " + value.En).ToLowerInvariant();
			}
			Ready = true;
			ForgeplanPlugin.Log.LogInfo((object)$"каталог собран за {stopwatch.ElapsedMilliseconds} мс: {Items.Count} предметов, из них {Pieces} построек; отброшено: посадок {SkippedPlanting}, подач на стол {SkippedServings}");
			return true;
		}

		private static void DropShadowed()
		{
			foreach (KeyValuePair<string, Rule> item in Convert)
			{
				ItemDef itemDef = Get(item.Key);
				if (itemDef != null && itemDef.HasRecipe)
				{
					Shadowed.Add(item.Key);
				}
			}
			foreach (string item2 in Shadowed)
			{
				Convert.Remove(item2);
			}
		}

		private static void MirrorConversions()
		{
			foreach (KeyValuePair<string, Rule> item in Convert)
			{
				ItemDef itemDef = Get(item.Key);
				if (itemDef != null && !itemDef.HasRecipe)
				{
					itemDef.Levels.Add(new Dictionary<string, int>(item.Value.Mats));
					itemDef.Out = Mathf.Max(1, item.Value.Out);
					itemDef.Station = item.Value.Station;
					itemDef.MinStationLevel = 1;
					itemDef.FromConversion = true;
					Mirrored++;
				}
			}
		}

		private static void LiftKiln()
		{
			if (Convert.TryGetValue("coal", out var value))
			{
				KilnRule = value;
				Convert.Remove("coal");
			}
		}

		private static void IndexItems()
		{
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Invalid comparison between Unknown and I4
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			foreach (GameObject item in ObjectDB.instance.m_items)
			{
				if ((Object)(object)item == (Object)null)
				{
					continue;
				}
				ItemDrop component = item.GetComponent<ItemDrop>();
				if (!((Object)(object)component == (Object)null) && component.m_itemData != null)
				{
					SharedData shared = component.m_itemData.m_shared;
					string text = Slug(((Object)item).name);
					if (!Items.ContainsKey(text))
					{
						Items[text] = new ItemDef
						{
							Id = text,
							Name = Localization.instance.Localize(shared.m_name),
							Icon = ((shared.m_icons != null && shared.m_icons.Length != 0) ? shared.m_icons[0] : null),
							MaxQuality = Mathf.Max(1, shared.m_maxQuality),
							IsMaterial = ((int)shared.m_itemType == 1),
							Group = GroupOf(shared.m_itemType)
						};
					}
				}
			}
		}

		private static Kind GroupOf(ItemType t)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Expected I4, but got Unknown
			switch (t - 1)
			{
			case 2:
			case 3:
			case 8:
			case 13:
			case 19:
			case 21:
			case 22:
				return Kind.Weapon;
			case 4:
			case 5:
			case 6:
			case 10:
			case 11:
			case 16:
			case 17:
			case 23:
				return Kind.Armor;
			case 14:
			case 18:
				return Kind.Tool;
			case 1:
				return Kind.Food;
			case 0:
				return Kind.Material;
			default:
				return Kind.Other;
			}
		}

		public static string PieceId(string prefab)
		{
			return "piece:" + Slug(prefab);
		}

		private static HashSet<GameObject> Buildable()
		{
			HashSet<GameObject> hashSet = new HashSet<GameObject>();
			HashSet<GameObject> hashSet2 = new HashSet<GameObject>();
			foreach (GameObject item in ObjectDB.instance.m_items)
			{
				if ((Object)(object)item == (Object)null)
				{
					continue;
				}
				ItemDrop component = item.GetComponent<ItemDrop>();
				if ((Object)(object)component == (Object)null || component.m_itemData == null || component.m_itemData.m_shared == null)
				{
					continue;
				}
				PieceTable buildPieces = component.m_itemData.m_shared.m_buildPieces;
				if ((Object)(object)buildPieces == (Object)null || buildPieces.m_pieces == null)
				{
					continue;
				}
				HashSet<GameObject> hashSet3 = (SkipTools.Contains(Slug(((Object)item).name)) ? hashSet2 : hashSet);
				foreach (GameObject piece in buildPieces.m_pieces)
				{
					if ((Object)(object)piece != (Object)null)
					{
						hashSet3.Add(piece);
					}
				}
			}
			hashSet2.ExceptWith(hashSet);
			SkippedPlanting = hashSet2.Count;
			return hashSet;
		}

		private static void IndexPieces()
		{
			HashSet<GameObject> hashSet = Buildable();
			foreach (GameObject prefab in ZNetScene.instance.m_prefabs)
			{
				if ((Object)(object)prefab == (Object)null || !hashSet.Contains(prefab))
				{
					continue;
				}
				Piece component = prefab.GetComponent<Piece>();
				if ((Object)(object)component == (Object)null || !component.m_enabled || component.m_resources == null || component.m_resources.Length == 0)
				{
					continue;
				}
				string text = PieceId(((Object)prefab).name);
				if (Items.ContainsKey(text))
				{
					continue;
				}
				Dictionary<string, int> dictionary = new Dictionary<string, int>();
				ItemDrop single = null;
				Requirement[] resources = component.m_resources;
				foreach (Requirement val in resources)
				{
					if (val != null && !((Object)(object)val.m_resItem == (Object)null) && val.m_amount > 0)
					{
						dictionary[Slug(((Object)((Component)val.m_resItem).gameObject).name)] = val.m_amount;
						single = val.m_resItem;
					}
				}
				if (dictionary.Count == 0)
				{
					continue;
				}
				string name = Localization.instance.Localize(component.m_name);
				if (IsServing(dictionary, single, name))
				{
					SkippedServings++;
					continue;
				}
				string station = (((Object)(object)component.m_craftingStation != (Object)null) ? Slug(((Object)((Component)component.m_craftingStation).gameObject).name) : "");
				ItemDef itemDef = new ItemDef
				{
					Id = text,
					Name = name,
					Icon = component.m_icon,
					MaxQuality = 1,
					Out = 1,
					Station = station,
					MinStationLevel = 1,
					Group = Kind.Piece
				};
				itemDef.Levels.Add(dictionary);
				Items[text] = itemDef;
				if ((Object)(object)component.m_craftingStation != (Object)null)
				{
					Remember(station, component.m_craftingStation.m_name);
				}
				Pieces++;
			}
		}

		private static bool IsServing(Dictionary<string, int> cost, ItemDrop single, string name)
		{
			if (cost.Count != 1 || (Object)(object)single == (Object)null || string.IsNullOrEmpty(name))
			{
				return false;
			}
			foreach (KeyValuePair<string, int> item in cost)
			{
				if (item.Value != 1)
				{
					return false;
				}
			}
			if (single.m_itemData == null || single.m_itemData.m_shared == null)
			{
				return false;
			}
			return Localization.instance.Localize(single.m_itemData.m_shared.m_name) == name;
		}

		private static void IndexRecipes()
		{
			foreach (Recipe recipe in ObjectDB.instance.m_recipes)
			{
				if ((Object)(object)recipe == (Object)null || (Object)(object)recipe.m_item == (Object)null || !recipe.m_enabled)
				{
					continue;
				}
				string text = Slug(((Object)((Component)recipe.m_item).gameObject).name);
				ItemDef itemDef = Get(text);
				if (itemDef == null)
				{
					continue;
				}
				int num = Mathf.Max(1, recipe.m_amount);
				if (!RecipeAmounts.TryGetValue(text, out var value))
				{
					value = (RecipeAmounts[text] = new List<int>());
				}
				value.Add(num);
				if (itemDef.HasRecipe && num >= itemDef.Out)
				{
					continue;
				}
				itemDef.Out = num;
				itemDef.Station = (((Object)(object)recipe.m_craftingStation != (Object)null) ? Slug(((Object)((Component)recipe.m_craftingStation).gameObject).name) : "");
				itemDef.MinStationLevel = Mathf.Max(1, recipe.m_minStationLevel);
				if ((Object)(object)recipe.m_craftingStation != (Object)null)
				{
					Remember(itemDef.Station, recipe.m_craftingStation.m_name, ((Component)recipe.m_craftingStation).gameObject);
				}
				itemDef.Levels.Clear();
				for (int i = 1; i <= itemDef.MaxQuality; i++)
				{
					Dictionary<string, int> dictionary = new Dictionary<string, int>();
					Requirement[] resources = recipe.m_resources;
					foreach (Requirement val in resources)
					{
						if (val == null || (Object)(object)val.m_resItem == (Object)null)
						{
							continue;
						}
						if (val.m_upgraderResource)
						{
							if (i == 1)
							{
								SkippedUpgraders++;
							}
							continue;
						}
						int amount = val.GetAmount(i);
						if (amount > 0)
						{
							dictionary[Slug(((Object)((Component)val.m_resItem).gameObject).name)] = amount;
						}
					}
					itemDef.Levels.Add(dictionary);
				}
			}
		}

		private static void IndexConversions()
		{
			foreach (GameObject prefab in ZNetScene.instance.m_prefabs)
			{
				if ((Object)(object)prefab == (Object)null)
				{
					continue;
				}
				string station = Slug(((Object)prefab).name);
				Smelter component = prefab.GetComponent<Smelter>();
				if ((Object)(object)component != (Object)null)
				{
					Remember(station, PieceName(prefab, component.m_name), prefab);
					foreach (ItemConversion item in component.m_conversion)
					{
						if (item != null && !((Object)(object)item.m_from == (Object)null) && !((Object)(object)item.m_to == (Object)null))
						{
							Rule rule = new Rule
							{
								Station = station,
								Out = 1,
								Sec = Mathf.RoundToInt(component.m_secPerProduct),
								Cap = component.m_maxOre,
								Slots = 1
							};
							rule.Mats[Slug(((Object)((Component)item.m_from).gameObject).name)] = 1;
							if ((Object)(object)component.m_fuelItem != (Object)null && component.m_fuelPerProduct > 0)
							{
								rule.Mats[Slug(((Object)((Component)component.m_fuelItem).gameObject).name)] = component.m_fuelPerProduct;
							}
							Put(Slug(((Object)((Component)item.m_to).gameObject).name), rule);
						}
					}
				}
				Fermenter component2 = prefab.GetComponent<Fermenter>();
				if ((Object)(object)component2 != (Object)null)
				{
					Remember(station, PieceName(prefab, component2.m_name), prefab);
					foreach (ItemConversion item2 in component2.m_conversion)
					{
						if (item2 != null && !((Object)(object)item2.m_from == (Object)null) && !((Object)(object)item2.m_to == (Object)null))
						{
							Rule rule2 = new Rule
							{
								Station = station,
								Out = Mathf.Max(1, item2.m_producedItems),
								Sec = Mathf.RoundToInt(component2.m_fermentationDuration),
								Slots = 1
							};
							rule2.Mats[Slug(((Object)((Component)item2.m_from).gameObject).name)] = 1;
							Put(Slug(((Object)((Component)item2.m_to).gameObject).name), rule2);
						}
					}
				}
				CookingStation component3 = prefab.GetComponent<CookingStation>();
				if (!((Object)(object)component3 != (Object)null))
				{
					continue;
				}
				Remember(station, PieceName(prefab, component3.m_name), prefab);
				int num = ((component3.m_slots == null) ? 1 : component3.m_slots.Length);
				foreach (ItemConversion item3 in component3.m_conversion)
				{
					if (item3 != null && !((Object)(object)item3.m_from == (Object)null) && !((Object)(object)item3.m_to == (Object)null))
					{
						Rule rule3 = new Rule
						{
							Station = station,
							Out = 1,
							Sec = Mathf.RoundToInt(item3.m_cookTime),
							Slots = Mathf.Max(1, num)
						};
						rule3.Mats[Slug(((Object)((Component)item3.m_from).gameObject).name)] = 1;
						Put(Slug(((Object)((Component)item3.m_to).gameObject).name), rule3);
					}
				}
			}
		}

		private static void Put(string to, Rule rule)
		{
			if (!string.IsNullOrEmpty(to))
			{
				string value;
				bool flag = Prefer.TryGetValue(to, out value) && rule.Mats.ContainsKey(value);
				if (!Convert.ContainsKey(to) || flag)
				{
					Convert[to] = rule;
				}
			}
		}

		private static string PieceName(GameObject prefab, string fallback)
		{
			Piece component = prefab.GetComponent<Piece>();
			if (!((Object)(object)component != (Object)null) || string.IsNullOrEmpty(component.m_name))
			{
				return fallback;
			}
			return component.m_name;
		}

		private static void Remember(string station, string token, GameObject prefab = null)
		{
			if (string.IsNullOrEmpty(station))
			{
				return;
			}
			if ((Object)(object)prefab != (Object)null && !StationIcons.ContainsKey(station))
			{
				Piece component = prefab.GetComponent<Piece>();
				if ((Object)(object)component != (Object)null && (Object)(object)component.m_icon != (Object)null)
				{
					StationIcons[station] = component.m_icon;
				}
			}
			if (!string.IsNullOrEmpty(token) && !StationNames.ContainsKey(station))
			{
				StationNames[station] = Localization.instance.Localize(token);
			}
		}
	}
	public static class Names
	{
		public static readonly Dictionary<string, string> Ru = new Dictionary<string, string>(1569)
		{
			{ "acorn", "Желуди" },
			{ "amber", "Янтарь" },
			{ "amberpearl", "Янтарная жемчужина" },
			{ "ancientcoin", "Древняя монета" },
			{ "ancientgemstoneblack", "Драумикс" },
			{ "ancientgemstonegreen", "Гримварн" },
			{ "ancientgemstoneorange", "Солрит" },
			{ "ancientgemstonepurple", "Вейдрис" },
			{ "ancientseed", "Древнее семя" },
			{ "armorashlandsmediumchest", "Кираса Аска" },
			{ "armorashlandsmediumlegs", "Штаны Аска" },
			{ "armorberserkerchest", "Медвежьи узоры" },
			{ "armorberserkerlegs", "Медвежья повязка" },
			{ "armorberserkerundeadchest", "Гнилокостная нагрудная клетка" },
			{ "armorberserkerundeadlegs", "Гнилокостный набедренник" },
			{ "armorbronzechest", "Бронзовая кираса" },
			{ "armorbronzelegs", "Бронзовые наголенники" },
			{ "armorcarapacechest", "Панцирный нагрудник" },
			{ "armorcarapacelegs", "Панцирные поножи" },
			{ "armordeepnorthheavychest", "Нагрудник защитника" },
			{ "armordeepnorthheavylegs", "Штаны защитника" },
			{ "armordeepnorthmagechest", "Одеяние призывателя" },
			{ "armordeepnorthmagelegs", "Штаны призывателя" },
			{ "armordeepnorthmediumchest", "Нагрудник авангарда" },
			{ "armordeepnorthmediumlegs", "Штаны авангарда" },
			{ "armordress1", "Простое коричневое платье" },
			{ "armordress10", "Простое платье" },
			{ "armordress2", "Коричневое платье с шалью" },
			{ "armordress3", "Коричневое платье в бусинах" },
			{ "armordress4", "Простое синее платье" },
			{ "armordress5", "Синее платье с шалью" },
			{ "armordress6", "Синее платье в бусинах" },
			{ "armordress7", "Простое желтое платье" },
			{ "armordress8", "Желтое платье с шалью" },
			{ "armordress9", "Желтое платье в бусинах" },
			{ "armorfenringchest", "Облачение Фенриса" },
			{ "armorfenringlegs", "Поножи Фенриса" },
			{ "armorflametalchest", "Огнеметаллическая кираса" },
			{ "armorflametallegs", "Огнеметаллические поножи" },
			{ "armorgoldheavychestuncooked", "Заготовка: нагрудник защитника" },
			{ "armorgoldheavyhelmetuncooked", "Заготовка: шлем защитника" },
			{ "armorgoldheavylegsuncooked", "Заготовка: штаны защитника" },
			{ "armorgoldmagechestuncooked", "Заготовка: одеяние призывателя" },
			{ "armorgoldmagehelmetuncooked", "Заготовка: головной убор призывателя" },
			{ "armorgoldmagelegsuncooked", "Заготовка: штаны призывателя" },
			{ "armorgoldmediumchestuncooked", "Заготовка: нагрудник авангарда" },
			{ "armorgoldmediumhelmetuncooked", "Заготовка: капюшон авангарда" },
			{ "armorgoldmediumlegsuncooked", "Заготовка: штаны авангарда" },
			{ "armorharvester1", "Туника урожая" },
			{ "armorharvester2", "Одежда урожая" },
			{ "armorironchest", "Чешуйчатый железный доспех" },
			{ "armorironlegs", "Железные наголенники" },
			{ "armorleatherchest", "Кожаная туника" },
			{ "armorleatherlegs", "Кожаные штаны" },
			{ "armorloxchest", "Куртка из меха локса" },
			{ "armorloxlegs", "Штаны из меха локса" },
			{ "armormagechest", "Сшитое из эйтра одеяние" },
			{ "armormagechest_ashlands", "Одежды Эмблы" },
			{ "armormagelegs", "Сшитые из эйтра штаны" },
			{ "armormagelegs_ashlands", "Штаны Эмблы" },
			{ "armorpaddedcuirass", "Обитая кираса" },
			{ "armorpaddedgreaves", "Обитые наголенники" },
			{ "armorragschest", "Холщовая туника" },
			{ "armorragslegs", "Холщовые штаны" },
			{ "armorrootchest", "Корневой нагрудник" },
			{ "armorrootlegs", "Корневые поножи" },
			{ "armorstand", "Стойка для брони" },
			{ "armorstand_female", "Стойка для брони" },
			{ "armortrollleatherchest", "Туника из кожи тролля" },
			{ "armortrollleatherlegs", "Штаны из кожи тролля" },
			{ "armortunic1", "Простая синяя туника" },
			{ "armortunic10", "Простая туника" },
			{ "armortunic2", "Синяя туника с капюшоном" },
			{ "armortunic3", "Синяя туника в бусинах" },
			{ "armortunic4", "Простая красная туника" },
			{ "armortunic5", "Красная туника с капюшоном" },
			{ "armortunic6", "Красная туника в бусинах" },
			{ "armortunic7", "Простая желтая туника" },
			{ "armortunic8", "Желтая туника с капюшоном" },
			{ "armortunic9", "Желтая туника в бусинах" },
			{ "armorwolfchest", "Волчий нагрудник" },
			{ "armorwolflegs", "Волчья защита для ног" },
			{ "arrowbloodgold", "Стрела из кровавого золота" },
			{ "arrowbronze", "Стрела с бронзовым наконечником" },
			{ "arrowcarapace", "Панцирная стрела" },
			{ "arrowcharred", "Обугленная стрела" },
			{ "arrowfire", "Огненная стрела" },
			{ "arrowflint", "Стрела с кремниевым наконечником" },
			{ "arrowfrost", "Ледяная стрела" },
			{ "arrowiron", "Стрела с железным наконечником" },
			{ "arrowneedle", "Игольная стрела" },
			{ "arrowobsidian", "Обсидиановая стрела" },
			{ "arrowpoison", "Отравленная стрела" },
			{ "arrowsilver", "Серебряная стрела" },
			{ "arrowwood", "Деревянная стрела" },
			{ "artisan_ext1", "Ремесленный пресс" },
			{ "ashlands_arch1", "Каменная стена 1x1" },
			{ "ashlands_arch2", "Каменная стена 1x1" },
			{ "ashlands_wallblock_1x2x2", "Каменная стена 1x1" },
			{ "ashlands_wallblock_base", "Каменная стена 1x1" },
			{ "ashwood_arch_big", "Арка из пепельного дерева" },
			{ "ashwood_arch_bottom", "Нижняя арка из пепельного дерева" },
			{ "ashwood_arch_top", "Верхняя арка из пепельного дерева" },
			{ "ashwood_beam_1m", "Брус из пепельного дерева (1 м)" },
			{ "ashwood_beam_2m", "Брус из пепельного дерева (2 м)" },
			{ "ashwood_bed", "Кровать из пепельного дерева" },
			{ "ashwood_deco_floor", "Декоративный пол из пепельного дерева" },
			{ "ashwood_decowall_2x2", "Декоративная стена из пепельного дерева" },
			{ "ashwood_decowall_divider", "Разделитель из пепельного дерева" },
			{ "ashwood_decowall_tree", "Декоративное окно из пепельного дерева" },
			{ "ashwood_door", "Дверь из пепельного дерева" },
			{ "ashwood_floor_1x1", "Пол из пепельного дерева 1x1" },
			{ "ashwood_floor_2x2", "Пол из пепельного дерева 2x2" },
			{ "ashwood_halfwall_1x2", "Полустена из пепельного дерева" },
			{ "ashwood_pole_1m", "Столб из пепельного дерева (1 м)" },
			{ "ashwood_pole_2m", "Столб из пепельного дерева (2 м)" },
			{ "ashwood_quarterwall_1x1", "Четверть стены из пепельного дерева" },
			{ "ashwood_stair", "Лестница из пепельного дерева" },
			{ "ashwood_wall_2x2", "Стена из пепельного дерева" },
			{ "ashwood_wall_arch", "Арочная стена из пепельного дерева" },
			{ "ashwood_wall_beam_26", "Брус из пепельного дерева (26°)" },
			{ "ashwood_wall_beam_26_alt", "Брус из пепельного дерева (26°)" },
			{ "ashwood_wall_beam_45", "Брус из пепельного дерева (45°)" },
			{ "ashwood_wall_beam_45_alt", "Брус из пепельного дерева (45°)" },
			{ "ashwood_wall_beam_67", "Брус из пепельного дерева 67°" },
			{ "ashwood_wall_cross_26", "Перекладина из пепельного дерева (26°)" },
			{ "ashwood_wall_cross_26_alt", "Перекладина из пепельного дерева (26°)" },
			{ "ashwood_wall_cross_45", "Перекладина из пепельного дерева (45°)" },
			{ "ashwood_wall_cross_45_alt", "Перекладина из пепельного дерева (45°)" },
			{ "ashwood_wall_cross_67", "Перекладина из пепельного дерева 67°" },
			{ "ashwood_wall_roof_26", "Стена из пепельного дерева (26°)" },
			{ "ashwood_wall_roof_26_upsidedown", "Обратная стена из пепельного дерева (26°)" },
			{ "ashwood_wall_roof_45", "Стена из пепельного дерева (45°)" },
			{ "ashwood_wall_roof_45_upsidedown", "Обратная стена из пепельного дерева (45°)" },
			{ "ashwood_wall_roof_67_a", "Стена из пепельного дерева 67°" },
			{ "ashwood_wall_roof_67_upsidedown", "Стена из пепельного дерева 67° (обратная)" },
			{ "askbladder", "Мочевой пузырь пеплозавра" },
			{ "askhide", "Шкура пеплозавра" },
			{ "asksvincarrionneck", "Шея пеплозавра" },
			{ "asksvincarrionpelvic", "Таз пеплозавра" },
			{ "asksvincarrionribcage", "Ребра пеплозавра" },
			{ "asksvincarrionskull", "Череп пеплозавра" },
			{ "asksvinegg", "Яйцо пеплозавра" },
			{ "asksvinmeat", "Хвост пеплозавра" },
			{ "atgeirblackmetal", "Алебарда из черного металла" },
			{ "atgeirbronze", "Бронзовая алебарда" },
			{ "atgeirgold", "Нордская алебарда" },
			{ "atgeirgold_bloodlightning", "Алебарда громовой крови" },
			{ "atgeirgold_frostfire", "Алебарда льда и огня" },
			{ "atgeirgolduncooked", "Заготовка: нордская алебарда" },
			{ "atgeirhimminafl", "Химминафль" },
			{ "atgeiriron", "Железная алебарда" },
			{ "atgeirwood", "Деревянная алебарда" },
			{ "axeberzerkr", "Топоры берсеркира" },
			{ "axeberzerkrblood", "Кровоточащие топоры берсеркира" },
			{ "axeberzerkrlightning", "Громовые топоры берсеркира" },
			{ "axeberzerkrnature", "Первобытные топоры берсеркира" },
			{ "axeblackmetal", "Топор из черного металла" },
			{ "axebronze", "Бронзовый топор" },
			{ "axeearly", "Древние топоры" },
			{ "axeflint", "Кремневый топор" },
			{ "axegold", "Нордский топор" },
			{ "axegold_bloodlightning", "Топор громовой крови" },
			{ "axegold_frostfire", "Топор льда и огня" },
			{ "axegolduncooked", "Заготовка: нордский топор" },
			{ "axehead1", "Необычное лезвие топора" },
			{ "axehead2", "Загадочное лезвие топора" },
			{ "axeiron", "Железный топор" },
			{ "axejotunbane", "Погибель йотунов" },
			{ "axestone", "Каменный топор" },
			{ "axewood", "Деревянный топор" },
			{ "bakedpoteitr", "Запеченный картофэйтр" },
			{ "bakedpoteitruncooked", "Сырой картофейтр" },
			{ "bar_blackmetal_stack", "Стопка черного металла" },
			{ "bar_bronze_stack", "Стопка бронзы" },
			{ "bar_copper_stack", "Стопка меди" },
			{ "bar_flametal_stack", "Стопка огнеметалла" },
			{ "bar_gold_stack", "Стопка кровавого золота" },
			{ "bar_iron_stack", "Стопка железа" },
			{ "bar_silver_stack", "Стопка серебра" },
			{ "bar_tin_stack", "Стопка олова" },
			{ "barberkit", "Набор цирюльника" },
			{ "barkabranch", "Замерзшая ветвь" },
			{ "barley", "Ячмень" },
			{ "barleyflour", "Ячменная мука" },
			{ "barleywine", "Огненное ячменное вино" },
			{ "barleywinebase", "Основа ячменного вина: огнестойкость" },
			{ "barrelrings", "Обручи для бочек" },
			{ "batteringram", "Таран" },
			{ "battleaxe", "Боевой топор" },
			{ "battleaxeblackmetal", "Боевой топор из черного металла" },
			{ "battleaxecrystal", "Кристальный боевой топор" },
			{ "battleaxegold", "Нордская секира" },
			{ "battleaxegold_bloodlightning", "Секира громовой крови" },
			{ "battleaxegold_frostfire", "Секира льда и огня" },
			{ "battleaxegolduncooked", "Заготовка: нордская секира" },
			{ "battleaxeskullsplittur", "Крушитель черепов" },
			{ "battleaxewood", "Деревянный боевой топор" },
			{ "beard1", "Длинная 1" },
			{ "beard10", "Заплетенная\u00a04" },
			{ "beard11", "Густая 2" },
			{ "beard12", "Королевская 1" },
			{ "beard13", "Королевская 2" },
			{ "beard14", "Заплетенная 5" },
			{ "beard15", "Короткая 4" },
			{ "beard16", "Каменная" },
			{ "beard17", "Уложенная" },
			{ "beard18", "Королевская 3" },
			{ "beard19", "Густая" },
			{ "beard2", "Длинная 2" },
			{ "beard20", "Острая" },
			{ "beard21", "Короткая 5" },
			{ "beard22", "Усы" },
			{ "beard23", "Ловец крошек" },
			{ "beard24", "Вощеные" },
			{ "beard25", "Подстриженный" },
			{ "beard26", "Рулевые усы" },
			{ "beard3", "Короткая 1" },
			{ "beard4", "Короткая 2" },
			{ "beard5", "Заплетенная 1" },
			{ "beard6", "Заплетенная 2" },
			{ "beard7", "Короткая\u00a03" },
			{ "beard8", "Густая\u00a01" },
			{ "beard9", "Заплетенная\u00a03" },
			{ "beardnone", "Без бороды" },
			{ "bed", "Кровать" },
			{ "beech_sapling", "Саженец бука" },
			{ "beechseeds", "Семена бука" },
			{ "bell", "Колокол" },
			{ "bellfragment", "Фрагмент колокола" },
			{ "beltstrength", "Мегингьорд" },
			{ "bilebag", "Желчный мешок" },
			{ "birch_sapling", "Саженец березы" },
			{ "birchseeds", "Семена березы" },
			{ "bjornhide", "Медвежья шкура" },
			{ "bjornmeat", "Медвежье мясо" },
			{ "bjornpaw", "Медвежья лапа" },
			{ "blackcore", "Черное ядро" },
			{ "blackforge", "Чёрная кузница" },
			{ "blackforge_ext1", "Охладитель черной кузницы" },
			{ "blackforge_ext2_vise", "Тиски" },
			{ "blackforge_ext3_metalcutter", "Резак по металлу" },
			{ "blackforge_ext4_gemcutter", "Резак для самоцветов" },
			{ "blackforge_ext5_apron", "Фартуки кузнеца" },
			{ "blackmarble", "Черный мрамор" },
			{ "blackmarble_1x1", "Черный мрамор 1x1x1" },
			{ "blackmarble_2x1x1", "Черный мрамор 2x1x1" },
			{ "blackmarble_2x2_enforced", "Усиленный черный мрамор" },
			{ "blackmarble_2x2x1", "Черный мрамор 2x2x1" },
			{ "blackmarble_2x2x2", "Черный мрамор 2x2x2" },
			{ "blackmarble_arch", "Арка из черного мрамора" },
			{ "blackmarble_base_1", "Постамент из черного мрамора" },
			{ "blackmarble_base_2", "Широкий постамент из черного мрамора" },
			{ "blackmarble_basecorner", "Угловой постамент из черного мрамора" },
			{ "blackmarble_column_1", "Маленькая колонна из черного мрамора" },
			{ "blackmarble_column_2", "Широкая колонна из черного мрамора" },
			{ "blackmarble_column_3", "Высокая колонна из черного мрамора" },
			{ "blackmarble_creep_4x1x1", "Черный мрамор 2x2x1" },
			{ "blackmarble_creep_4x2x1", "Черный мрамор 2x2x1" },
			{ "blackmarble_creep_slope_inverted_1x1x2", "Карниз из черного мрамора" },
			{ "blackmarble_creep_slope_inverted_2x2x1", "Карниз из черного мрамора" },
			{ "blackmarble_creep_stair", "Лестница из черного мрамора" },
			{ "blackmarble_floor", "Пол из черного мрамора" },
			{ "blackmarble_floor_large", "Пол из черного мрамора 4x4" },
			{ "blackmarble_floor_triangle", "Треугольный пол из черного мрамора" },
			{ "blackmarble_head01", "Голова 1 из черного мрамора" },
			{ "blackmarble_head02", "Голова 2 из черного мрамора" },
			{ "blackmarble_head_big01", "Большая голова 1 из черного мрамора" },
			{ "blackmarble_head_big02", "Большая голова 2 из черного мрамора" },
			{ "blackmarble_out_1", "Карниз из черного мрамора" },
			{ "blackmarble_out_2", "Широкий карниз из черного мрамора" },
			{ "blackmarble_outcorner", "Угловой карниз из черного мрамора" },
			{ "blackmarble_pile", "Груда черного мрамора" },
			{ "blackmarble_slope_1x2", "Склон из черного мрамора" },
			{ "blackmarble_slope_inverted_1x2", "Перевернутый склон из черного мрамора" },
			{ "blackmarble_stair", "Лестница из черного мрамора" },
			{ "blackmarble_stair_corner", "Лестница направо из черного мрамора" },
			{ "blackmarble_stair_corner_left", "Лестница налево из черного мрамора" },
			{ "blackmarble_tile_floor_1x1", "Малая напольная плитка из черного мрамора" },
			{ "blackmarble_tile_floor_2x2", "Большая напольная плитка из черного мрамора" },
			{ "blackmarble_tile_wall_1x1", "Малая настенная плитка из черного мрамора" },
			{ "blackmarble_tile_wall_2x2", "Большая настенная плитка из черного мрамора" },
			{ "blackmarble_tile_wall_2x4", "Высокая настенная плитка из черного мрамора" },
			{ "blackmarble_tip", "Четверть шпиля из черного мрамора" },
			{ "blackmetal", "Черный металл" },
			{ "blackmetalscrap", "Кусок черного металла" },
			{ "blacksoup", "Черный суп" },
			{ "blackwood", "Пепельная древесина" },
			{ "blackwood_stack", "Стопка пепельной древесины" },
			{ "blastfurnace", "Доменная печь" },
			{ "blobvial", "Флакон с пробкой" },
			{ "bloodbag", "Туша" },
			{ "bloodgoldkey", "Сложный ключ" },
			{ "bloodpudding", "Кровяная колбаса" },
			{ "blueberries", "Черника" },
			{ "boarjerky", "Вяленая кабанина" },
			{ "bogwitch_fire_pit", "Костер" },
			{ "boltblackmetal", "Болт из черного металла" },
			{ "boltbloodgold", "Болт из кровавого золота" },
			{ "boltbone", "Костяной болт" },
			{ "boltcarapace", "Панцирный болт" },
			{ "boltcharred", "Обугленный болт" },
			{ "boltiron", "Железный болт" },
			{ "bombbile", "Желчная бомба" },
			{ "bombblob_frost", "Сгустень-бомба: Лед" },
			{ "bombblob_lava", "Сгустень-бомба: Лава" },
			{ "bombblob_morkhalla", "Сгустень-бомба: масса" },
			{ "bombblob_poison", "Сгустень-бомба: Яд" },
			{ "bombblob_poisonelite", "Сгустень-бомба: Элитный яд" },
			{ "bombblob_tar", "Сгустень-бомба: Деготь" },
			{ "bombdynamite", "Угольный заряд" },
			{ "bomblava", "Базальтовая бомба" },
			{ "bombooze", "Гнилостная бомба" },
			{ "bombsiege", "Взрывной снаряд" },
			{ "bombsmoke", "Дымовая шашка" },
			{ "bone_stack", "Груда костей" },
			{ "bonefragments", "Обломки костей" },
			{ "bonemawserpentmeat", "Мясо Костепасти" },
			{ "bonemawserpentscale", "Чешуя Костепасти" },
			{ "bonemawserpenttooth", "Зуб Костепасти" },
			{ "bonfire", "Большой костер" },
			{ "bow", "Грубый лук" },
			{ "bowashlands", "Пепельный клык" },
			{ "bowashlandsblood", "Кровавый клык" },
			{ "bowashlandsroot", "Корневой клык" },
			{ "bowashlandsstorm", "Штормовой клык" },
			{ "bowdraugrfang", "Клык Драугра" },
			{ "bowfinewood", "Хороший лук" },
			{ "bowgold", "Нордский лук" },
			{ "bowgold_bloodlightning", "Лук громовой крови" },
			{ "bowgold_frostfire", "Лук льда и огня" },
			{ "bowgolduncooked", "Заготовка: нордский лук" },
			{ "bowhuntsman", "Охотничий лук" },
			{ "bowspinesnap", "Хребтолом" },
			{ "bread", "Хлеб" },
			{ "breaddough", "Тесто для хлеба" },
			{ "bronze", "Бронза" },
			{ "bronzenails", "Бронзовые гвозди" },
			{ "bronzescrap", "Бронзовый металлолом" },
			{ "bugmeat", "Мясо искателя" },
			{ "candle_resin", "Смоляная свеча" },
			{ "candle_resin_bogwitch", "Смоляная свеча" },
			{ "candlewick", "Свечной фитиль" },
			{ "capeash", "Пепельный плащ" },
			{ "capeasksvin", "Плащ из шкуры пеплозавра" },
			{ "capedeepnorth", "Плащ из шкуры лося" },
			{ "capedeepnorthmage", "Плащ призывателя" },
			{ "capedeerhide", "Плащ из шкуры оленя" },
			{ "capefeather", "Накидка из перьев" },
			{ "capelinen", "Льняной плащ" },
			{ "capelox", "Плащ из шкуры быкоящера" },
			{ "capeodin", "Плащ Одина" },
			{ "capetrollhide", "Плащ из шкуры тролля" },
			{ "capewolf", "Плащ из шкуры волка" },
			{ "carapace", "Панцирь" },
			{ "carrot", "Морковь" },
			{ "carrotseeds", "Семена моркови" },
			{ "carrotsoup", "Морковный суп" },
			{ "cart", "Повозка" },
			{ "catapult", "Катапульта" },
			{ "catapult_ammo", "Снаряд из серокамня" },
			{ "catapult_ammo_bloodgold", "Катапультный снаряд из кровавого золота" },
			{ "cauldron_ext1_spice", "Сушилка для трав" },
			{ "cauldron_ext3_butchertable", "Мясницкий стол" },
			{ "cauldron_ext4_pots", "Кухонная утварь" },
			{ "cauldron_ext5_mortarandpestle", "Ступка и пестик" },
			{ "cauldron_ext6_rollingpins", "Скалки и разделочные доски" },
			{ "cauldron_ext7_smoker", "Коптильня" },
			{ "celestialfeather", "Небесное перо" },
			{ "ceramicplate", "Керамическая пластина" },
			{ "chain", "Цепь" },
			{ "charcoal_kiln", "Углевыжигательная печь" },
			{ "charcoalresin", "Угольная смола" },
			{ "charred_shieldgenerator", "Генератор щита" },
			{ "charredbone", "Обугленная кость" },
			{ "charredcogwheel", "Обгорелая шестерня" },
			{ "charredskull", "Обугленный череп" },
			{ "chest_hildir1", "Медный сундук Хильдир" },
			{ "chest_hildir2", "Серебряный сундук Хильдир" },
			{ "chest_hildir3", "Бронзовый сундук Хильдир" },
			{ "chickenegg", "Яйцо" },
			{ "chickenmeat", "Курятина" },
			{ "chitin", "Хитин" },
			{ "cloudberry", "Морошка" },
			{ "club", "Дубина" },
			{ "coal", "Уголь" },
			{ "coal_pile", "Груда угля" },
			{ "coins", "Монеты" },
			{ "cookedasksvinmeat", "Жареный хвост пеплозавра" },
			{ "cookedbjornmeat", "Приготовленное медвежье мясо" },
			{ "cookedbonemawserpentmeat", "Приготовленное мясо Костепасти" },
			{ "cookedbugmeat", "Приготовленное мясо искателя" },
			{ "cookedchickenmeat", "Приготовленная курятина" },
			{ "cookeddeermeat", "Приготовленная оленина" },
			{ "cookedegg", "Приготовленное яйцо" },
			{ "cookedharemeat", "Приготовленная зайчатина" },
			{ "cookedloxmeat", "Приготовленное мясо быкоящера" },
			{ "cookedmeat", "Приготовленная кабанина" },
			{ "cookedmoosemeat", "Приготовленное мясо лося" },
			{ "cookedsealblubber", "Приготовленный тюлений жир" },
			{ "cookedvolturemeat", "Приготовленное мясо стервулканника" },
			{ "cookedwolfmeat", "Приготовленная волчатина" },
			{ "copper", "Медь" },
			{ "copperore", "Медная руда" },
			{ "copperscrap", "Медный металлолом" },
			{ "crossbowarbalest", "Арбалет" },
			{ "crossbowgold", "Нордский арбалет" },
			{ "crossbowgold_bloodlightning", "Арбалет громовой крови" },
			{ "crossbowgold_frostfire", "Арбалет льда и огня" },
			{ "crossbowgolduncooked", "Заготовка: нордский арбалет" },
			{ "crossbowripper", "Разрыватель" },
			{ "crossbowripperblood", "Ранящий разрыватель" },
			{ "crossbowripperlightning", "Штормовой разрыватель" },
			{ "crossbowrippernature", "Корневой разрыватель" },
			{ "crownjewel", "Жемчужина короны" },
			{ "cryptkey", "Болотный ключ" },
			{ "crystal", "Кристалл" },
			{ "crystal_wall_1x1", "Кристальная стена 1х1" },
			{ "cultivator", "Пропашник" },
			{ "curedsquirrelhamstring", "Дубленые беличьи сухожилия" },
			{ "dandelion", "Одуванчик" },
			{ "darkwood_arch", "Арка из темного дерева" },
			{ "darkwood_beam", "Брус из темного дерева 2\u00a0м" },
			{ "darkwood_beam4x4", "Брус из темного дерева 4\u00a0м" },
			{ "darkwood_beam_26", "Брус из темного дерева 26°" },
			{ "darkwood_beam_45", "Брус из темного дерева 45°" },
			{ "darkwood_decowall", "Резная перегородка из темного дерева" },
			{ "darkwood_gate", "Ворота из темного дерева" },
			{ "darkwood_pole", "Столб из темного дерева 2\u00a0м" },
			{ "darkwood_pole4", "Столб из темного дерева 4\u00a0м" },
			{ "darkwood_raven", "Ворон (украшение)" },
			{ "darkwood_roof", "Шиферная крыша 26°" },
			{ "darkwood_roof_45", "Шиферная крыша 45°" },
			{ "darkwood_roof_67", "Шиферная крыша 67°" },
			{ "darkwood_roof_icorner", "Внутренний угол шиферной крыши 26°" },
			{ "darkwood_roof_icorner_45", "Внутренний угол шиферной крыши 45°" },
			{ "darkwood_roof_icorner_67", "Внутренний угол шиферной крыши 67°" },
			{ "darkwood_roof_ocorner", "Внешний угол шиферной крыши 26°" },
			{ "darkwood_roof_ocorner_45", "Внешний угол шиферной крыши 45°" },
			{ "darkwood_roof_ocorner_67", "Внешний угол шиферной крыши 67°" },
			{ "darkwood_roof_top", "Конек шиферной крыши 26°" },
			{ "darkwood_roof_top_45", "Конек шиферной крыши 45°" },
			{ "darkwood_roof_top_67", "Конек шиферной крыши 67°" },
			{ "darkwood_wolf", "Волк (украшение)" },
			{ "deerhide", "Шкура оленя" },
			{ "deermeat", "Оленина" },
			{ "deerstew", "Рагу из оленины" },
			{ "demister", "Свет светлячка" },
			{ "dragonegg", "Яйцо дракона" },
			{ "dragontear", "Драконья слеза" },
			{ "dverger_guardstone", "Оберег" },
			{ "dvergerarbalest", "Арбалет" },
			{ "dvergerarbalest_shoot", "Арбалет" },
			{ "dvergerarbalest_shootashlands", "Арбалет" },
			{ "dvergerarbalest_shootdeepnorth", "Арбалет" },
			{ "dvergrkey", "Разрушитель печатей" },
			{ "dvergrkeyfragment", "Фрагмент разрушителя печатей" },
			{ "dvergrneedle", "Экстрактор двергов" },
			{ "dvergrprops_wood_floor", "Деревянный пол 2x2" },
			{ "dvergrprops_wood_stair", "Деревянная лестница" },
			{ "dyrnwynbladefragment", "Лезвие Дирнвина" },
			{ "dyrnwynhiltfragment", "Рукоять Дирнвина" },
			{ "dyrnwyntipfragment", "Острие Дирнвина" },
			{ "ectoplasm", "Эктоплазма" },
			{ "eitr", "Переработанный эйтр" },
			{ "eitrrefinery", "Машина для переработки эйтра" },
			{ "elakinghairbundle", "Клок шерсти элакинга" },
			{ "elderbark", "Древняя кора" },
			{ "entrails", "Потроха" },
			{ "eyescream", "Глазированное мороженое" },
			{ "faderdrop", "Реликвия Прародителя" },
			{ "faderember", "Искры" },
			{ "feastashlands", "Пир из Пепельных земель" },
			{ "feastashlands_material", "Пир из Пепельных земель" },
			{ "feastblackforest", "Деликатесы Черного леса" },
			{ "feastblackforest_material", "Деликатесы Черного леса" },
			{ "feastdeepnorth", "Северный завтрак" },
			{ "feastdeepnorth_material", "Северный завтрак" },
			{ "feaster", "Поднос для подачи" },
			{ "feastmeadows", "Луговой кабан на вертеле" },
			{ "feastmeadows_material", "Луговой кабан на вертеле" },
			{ "feastmistlands", "Грибное ассорти из Туманных земель" },
			{ "feastmistlands_material", "Грибное ассорти из Туманных земель" },
			{ "feastmountains", "Сытное жаркое горного лесоруба" },
			{ "feastmountains_material", "Сытное жаркое горного лесоруба" },
			{ "feastoceans", "Добыча моряка" },
			{ "feastoceans_material", "Добыча моряка" },
			{ "feastplains", "Равнинный пикник с пирогом" },
			{ "feastplains_material", "Равнинный пикник с пирогом" },
			{ "feastswamps", "Лакомство болотного жителя" },
			{ "feastswamps_material", "Лакомство болотного жителя" },
			{ "feathers", "Перья" },
			{ "fermenter", "Бродильная бочка" },
			{ "fiddleheadfern", "Рахис" },
			{ "fierysvinstew", "Огненное тушеное рагу" },
			{ "finewood", "Качественная древесина" },
			{ "fircone", "Пихтовая шишка" },
			{ "firconefrost", "Шишка северной ели" },
			{ "fire_pit", "Костер" },
			{ "fire_pit_haldor", "Костер" },
			{ "fire_pit_hildir", "Костер" },
			{ "fire_pit_iron", "Железная костровая чаша" },
			{ "fireworksrocket_blue", "Синий фейерверк" },
			{ "fireworksrocket_cyan", "Бирюзовый фейерверк" },
			{ "fireworksrocket_green", "Зеленый фейерверк" },
			{ "fireworksrocket_purple", "Фиолетовый фейерверк" },
			{ "fireworksrocket_red", "Красный фейерверк" },
			{ "fireworksrocket_white", "Обычный фейерверк" },
			{ "fireworksrocket_yellow", "Желтый фейерверк" },
			{ "firtree_big_sapling", "Саженец северной ели" },
			{ "firtree_sapling", "Саженец пихты" },
			{ "fish1", "Окунь" },
			{ "fish10", "Северный лосось" },
			{ "fish11", "Магмарыбка" },
			{ "fish12", "Иглобрюх" },
			{ "fish2", "Щука" },
			{ "fish3", "Тунец" },
			{ "fish4_cave", "Тетра" },
			{ "fish5", "Тролль-рыба" },
			{ "fish6", "Гигантская сельдь" },
			{ "fish7", "Групер" },
			{ "fish8", "Коралловая треска" },
			{ "fish9", "Удильщик" },
			{ "fishandbread", "Рыба с хлебом" },
			{ "fishandbreaduncooked", "Сырая рыба с хлебом" },
			{ "fishanglerraw", "Сырая рыба" },
			{ "fishcooked", "Приготовленная рыба" },
			{ "fishingbait", "Наживка" },
			{ "fishingbaitashlands", "Горячая наживка для рыбалки" },
			{ "fishingbaitcave", "Холодная наживка для рыбалки" },
			{ "fishingbaitdeepnorth", "Ледяная наживка для рыбалки" },
			{ "fishingbaitforest", "Мшистая наживка для рыбалки" },
			{ "fishingbaitmistlands", "Туманная наживка для рыбалки" },
			{ "fishingbaitocean", "Тяжелая наживка для рыбалки" },
			{ "fishingbaitplains", "Скупая наживка для рыбалки" },
			{ "fishingbaitswamp", "Липкая наживка для рыбалки" },
			{ "fishingrod", "Удочка" },
			{ "fishraw", "Сырая рыба" },
			{ "fishsoup", "Рыбный суп" },
			{ "fishwraps", "Рыбные рулетики" },
			{ "fistbjornclaw", "Медвежьи лапы" },
			{ "fistbjornundeadclaw", "Гнилокостные когти" },
			{ "fistfenrirclaw", "Потрошители плоти" },
			{ "fistgold", "Нордские цепные кастеты" },
			{ "fistgold_bloodlightning", "Цепные кастеты громовой крови" },
			{ "fistgold_frostfire", "Цепные кастеты льда и огня" },
			{ "fistgolduncooked", "Заготовка: нордские цепные кастеты" },
			{ "flametal", "Древний металл" },
			{ "flametal_gate", "Огнеметаллические ворота" },
			{ "flametalnew", "Огнеметалл" },
			{ "flametalore", "Светящаяся металлическая руда" },
			{ "flametalorenew", "Огнеметаллическая руда" },
			{ "flax", "Лен" },
			{ "flint", "Кремень" },
			{ "flint_pile", "Куча кремня" },
			{ "forge", "Кузница" },
			{ "forge_delete", "Кузница" },
			{ "forge_ext1", "Кузнечные меха" },
			{ "forge_ext2", "Наковальни" },
			{ "forge_ext3", "Шлифовальный круг" },
			{ "forge_ext4", "Большая наковальня" },
			{ "forge_ext5", "Кузнечный охладитель" },
			{ "forge_ext6", "Стойка для инструментов" },
			{ "fragrantbundle", "Ароматный букет" },
			{ "freezegland", "Морозная железа" },
			{ "freshseaweed", "Свежие водоросли" },
			{ "frostcore", "Морозное ядро" },
			{ "frostwood", "Древесина северной ели" },
			{ "frozenfuel", "Жидкий лед" },
			{ "frozenkingdrop", "Жертвенная кровь" },
			{ "fuling_trap", "Капкан" },
			{ "fuling_turret", "Баллиста" },
			{ "fw_armorbronzechest", "Бронзовая кираса" },
			{ "fw_armorbronzelegs", "Бронзовые наголенники" },
			{ "fw_armorfenringchest", "Облачение Фенриса" },
			{ "fw_armorfenringlegs", "Поножи Фенриса" },
			{ "fw_armormagechest", "Сшитое из эйтра одеяние" },
			{ "fw_armormagechest_ashlands", "Одежды Эмблы" },
			{ "fw_armormagelegs", "Сшитые из эйтра штаны" },
			{ "fw_armormagelegs_ashlands", "Штаны Эмблы" },
			{ "fw_armorpaddedcuirass", "Обитая кираса" },
			{ "fw_armorpaddedgreaves", "Обитые наголенники" },
			{ "fw_armortrollleatherchest", "Туника из кожи тролля" },
			{ "fw_armortrollleatherlegs", "Штаны из кожи тролля" },
			{ "fw_axebronze", "Бронзовый топор" },
			{ "fw_battleaxecrystal", "Кристальный боевой топор" },
			{ "fw_bowdraugrfang", "Клык Драугра" },
			{ "fw_capelinen", "Льняной плащ" },
			{ "fw_capetrollhide", "Плащ из шкуры тролля" },
			{ "fw_capewolf", "Плащ из шкуры волка" },
			{ "fw_helmetbronze", "Бронзовый шлем" },
			{ "fw_knifesilver", "Серебряный нож" },
			{ "fw_knifeskollandhati", "Сколль и Хати" },
			{ "fw_shieldblackmetaltower", "Башенный щит из черного металла" },
			{ "fw_stafffireball", "Посох огня" },
			{ "fw_stafflightning", "Дундр" },
			{ "fw_swordblackmetal", "Меч из черного металла" },
			{ "gemstoneblue", "Иолит" },
			{ "gemstonegreen", "Нефрит" },
			{ "gemstonered", "Кровавый камень" },
			{ "giantbloodsack", "Кровавый сгусток" },
			{ "glowworm", "Светящаяся личинка" },
			{ "goblintotem", "Тотем фулинга" },
			{ "gold", "Кровавое золото" },
			{ "goldore", "Окаменевшие ткани" },
			{ "grapplinghook", "Крюк-кошка" },
			{ "grausten", "Серокамень" },
			{ "grausten_pile", "Груда серокамня" },
			{ "greydwarfeye", "Глаз грейдворфа" },
			{ "guard_stone", "Оберег" },
			{ "guck", "Слизь" },
			{ "hair1", "Хвост 1" },
			{ "hair10", "Набок\u00a02" },
			{ "hair10_2", "Длинные\u00a01" },
			{ "hair11", "Заплетенные\u00a02" },
			{ "hair11_2", "Длинные\u00a01" },
			{ "hair11_3", "Длинные\u00a01" },
			{ "hair12", "Заплетенные\u00a03" },
			{ "hair12_2", "Длинные\u00a01" },
			{ "hair13", "Заплетенные\u00a04" },
			{ "hair13_2", "Длинные\u00a01" },
			{ "hair13_3", "Длинные\u00a01" },
			{ "hair14", "Набок\u00a03" },
			{ "hair14_2", "Длинные\u00a01" },
			{ "hair15", "Убранные назад локоны" },
			{ "hair15_2", "Длинные\u00a01" },
			{ "hair15_3", "Длинные\u00a01" },
			{ "hair16", "Собранные косы" },
			{ "hair16_2", "Длинные\u00a01" },
			{ "hair17", "Аккуратные косы" },
			{ "hair17_2", "Длинные\u00a01" },
			{ "hair18", "Королевские косички" },
			{ "hair18_2", "Длинные\u00a01" },
			{ "hair19", "Кудри 1" },
			{ "hair2", "Хвост 2" },
			{ "hair20", "Кудри 2" },
			{ "hair21", "Двойной пучок" },
			{ "hair21_2", "Длинные\u00a01" },
			{ "hair22", "Пучок" },
			{ "hair22_2", "Длинные\u00a01" },
			{ "hair23", "Короткие кудри" },
			{ "hair24", "Выбриты и заплетены" },
			{ "hair24_2", "Длинные\u00a01" },
			{ "hair24_3", "Длинные\u00a01" },
			{ "hair25", "Пучок 2" },
			{ "hair26", "Короткие дреды" },
			{ "hair27", "Косы воина" },
			{ "hair27_2", "Длинные\u00a01" },
			{ "hair27_3", "Длинные\u00a01" },
			{ "hair28", "Коса торговца" },
			{ "hair28_2", "Длинные\u00a01" },
			{ "hair28_3", "Длинные\u00a01" },
			{ "hair29", "Распущенные 2" },
			{ "hair29_2", "Длинные\u00a01" },
			{ "hair3", "Косы 1" },
			{ "hair30", "Распущенные 3" },
			{ "hair30_2", "Длинные\u00a01" },
			{ "hair30_3", "Длинные\u00a01" },
			{ "hair31", "Собранные дреды" },
			{ "hair31_2", "Длинные\u00a01" },
			{ "hair31_3", "Длинные\u00a01" },
			{ "hair32", "Маллет" },
			{ "hair32_2", "Длинные\u00a01" },
			{ "hair32_3", "Длинные\u00a01" },
			{ "hair33", "Винландская стрижка" },
			{ "hair33_2", "Длинные\u00a01" },
			{ "hair34", "Кастелян" },
			{ "hair34_2", "Длинные\u00a01" },
			{ "hair34_3", "Длинные\u00a01" },
			{ "hair35", "Победитель" },
			{ "hair35_2", "Длинные\u00a01" },
			{ "hair35_3", "Длинные\u00a01" },
			{ "hair36", "Летописец" },
			{ "hair36_2", "Длинные\u00a01" },
			{ "hair36_3", "Длинные\u00a01" },
			{ "hair37", "Солнценосец" },
			{ "hair37_2", "Длинные\u00a01" },
			{ "hair37_3", "Длинные\u00a01" },
			{ "hair38", "Мужская" },
			{ "hair38_2", "Длинные\u00a01" },
			{ "hair38_3", "Длинные\u00a01" },
			{ "hair3_2", "Косы 1" },
			{ "hair3_3", "Косы 1" },
			{ "hair4", "Хвост 3" },
			{ "hair4_2", "Косы 1" },
			{ "hair4_3", "Косы 1" },
			{ "hair5", "Короткие\u00a01" },
			{ "hair5_2", "Косы 1" },
			{ "hair6", "Длинные\u00a01" },
			{ "hair6_2", "Длинные\u00a01" },
			{ "hair6_3", "Длинные\u00a01" },
			{ "hair7", "Хвост\u00a04" },
			{ "hair7_2", "Длинные\u00a01" },
			{ "hair8", "Короткие\u00a02" },
			{ "hair8_2", "Длинные\u00a01" },
			{ "hair9", "Набок\u00a01" },
			{ "hair9_2", "Длинные\u00a01" },
			{ "hairnone", "Без волос" },
			{ "hammer", "Молот" },
			{ "hardantler", "Твердый рог" },
			{ "haremeat", "Зайчатина" },
			{ "hatefulblood", "Злобная кровь" },
			{ "hearth", "Очаг" },
			{ "helmetashlandsmediumhood", "Капюшон Аска" },
			{ "helmetberserkerhood", "Медвежий головной убор" },
			{ "helmetberserkerundead", "Гнилокостная маска" },
			{ "helmetbronze", "Бронзовый шлем" },
			{ "helmetcarapace", "Панцирный шлем" },
			{ "helmetcelebration", "Праздничная шапка" },
			{ "helmetcrownofvalheim", "Корона Вальхейма" },
			{ "helmetdnheavy", "Шлем защитника" },
			{ "helmetdnmage", "Головной убор призывателя" },
			{ "helmetdnmediumhood", "Капюшон авангарда" },
			{ "helmetdrake", "Драконий шлем" },
			{ "helmetdverger", "Венец Двергов" },
			{ "helmetfenring", "Капюшон Фенриса" },
			{ "helmetfishinghat", "Рыбацкая шляпа" },
			{ "helmetflametal", "Огнеметаллический шлем" },
			{ "helmethat1", "Синий платок" },
			{ "helmethat10", "Простая фиолетовая шапка" },
			{ "helmethat2", "Зеленый скрученный платок" },
			{ "helmethat3", "Коричневая меховая шапка" },
			{ "helmethat4", "Причудливая зеленая шапка" },
			{ "helmethat5", "Простая красная шапка" },
			{ "helmethat6", "Желтый платок" },
			{ "helmethat7", "Красный скрученный платок" },
			{ "helmethat8", "Серая меховая шапка" },
			{ "helmethat9", "Причудливая оранжевая шапка" },
			{ "helmetiron", "Железный шлем" },
			{ "helmetleather", "Кожаный шлем" },
			{ "helmetlox", "Капюшон из меха локса" },
			{ "helmetmage", "Сшитый из эйтра капюшон" },
			{ "helmetmage_ashlands", "Капюшон Эмблы" },
			{ "helmetmidsummercrown", "Корона летнего солнцестояния" },
			{ "helmetodin", "Шлем Одина" },
			{ "helmetpadded", "Обитый шлем" },
			{ "helmetpointyhat", "Ведьмовская шляпа" },
			{ "helmetroot", "Корневая маска" },
			{ "helmetrootcrown", "Корона из корней" },
			{ "helmetstrawhat", "Соломенная шляпа" },
			{ "helmetsweatband", "Повязка на голову" },
			{ "helmettrollleather", "Шлем из кожи тролля" },
			{ "helmetyule", "Праздничный колпак" },
			{ "hildirkey_forestcrypt", "Медный ключ Хильдир" },
			{ "hildirkey_mountaincave", "Серебряный ключ Хильдир" },
			{ "hildirkey_plainsfortress", "Бронзовый ключ Хильдир" },
			{ "hoe", "Мотыга" },
			{ "honey", "Мед" },
			{ "honeyglazedchicken", "Курятина в медовой глазури" },
			{ "honeyglazedchickenuncooked", "Неприготовленная курятина в медовой глазури" },
			{ "hook", "Крюк" },
			{ "ice", "Лед" },
			{ "incinerator", "Мусоросжигатель" },
			{ "iron", "Железо" },
			{ "iron_floor_1x1", "Решетчатый пол 1x1" },
			{ "iron_floor_1x1_v2", "Решетчатый пол 1x1" },
			{ "iron_floor_2x2", "Решетчатый пол 2x2" },
			{ "iron_grate", "Железные ворота" },
			{ "iron_wall_1x1", "Решетчатая стена 1х1" },
			{ "iron_wall_1x1_rusty", "Решетчатая стена 1х1" },
			{ "iron_wall_2x2", "Решетчатая стена 2x2" },
			{ "ironnails", "Железные гвозди" },
			{ "ironore", "Железная руда" },
			{ "ironpit", "Железная чаша" },
			{ "ironscrap", "Металлолом" },
			{ "itemstand", "Стойка для предмета" },
			{ "itemstandh", "Стойка для предмета" },
			{ "jute_carpet", "Коврик из красного джута" },
			{ "jute_carpet_blue", "Коврик из голубого джута" },
			{ "juteblue", "Голубой джут" },
			{ "jutered", "Красный джут" },
			{ "kale", "Кале" },
			{ "kalechips", "Чипсы из листьев кале" },
			{ "kalechipsuncooked", "Сырые листья кале для чипсов" },
			{ "kaleseeds", "Семена кале" },
			{ "karve", "Карви" },
			{ "keysgolduncooked", "Заготовка: сложный ключ" },
			{ "knifeblackmetal", "Нож из черного металла" },
			{ "knifebutcher", "Мясницкий нож" },
			{ "knifechitin", "Глубинное лезвие" },
			{ "knifecopper", "Медный нож" },
			{ "knifeflint", "Кремневый нож" },
			{ "knifegold", "Нордский кинжал" },
			{ "knifegold_bloodlightning", "Кинжал громовой крови" },
			{ "knifegold_frostfire", "Кинжал льда и огня" },
			{ "knifegolduncooked", "Заготовка: нордский кинжал" },
			{ "knifesilver", "Серебряный нож" },
			{ "knifeskollandhati", "Сколль и Хати" },
			{ "knifevoid", "Призыватель Пустоты" },
			{ "knifewood", "Деревянный нож" },
			{ "lantern", "Светильник двергов" },
			{ "lantern_dn", "Спасенный фонарь" },
			{ "lantern_hooded", "Фонарь с колпаком" },
			{ "leatherscraps", "Кожаные обрывки" },
			{ "leatherstraps", "Кожаные ремни" },
			{ "linenthread", "Льняная нить" },
			{ "lingonberry", "Брусника" },
			{ "lingondricka", "Брусничный сок" },
			{ "loot_deepnorth_granary", "Бочка" },
			{ "loot_deepnorth_timberhall", "Бочка" },
			{ "loxmeat", "Мясо быкоящера" },
			{ "loxpelt", "Шкура быкоящера" },
			{ "loxpie", "Пирог из мяса быкоящера" },
			{ "loxpieuncooked", "Сырой пирог из быкоящера" },
			{ "macebronze", "Бронзовая булава" },
			{ "maceeldner", "Огнеметаллическая булава" },
			{ "maceeldnerblood", "Кровавая булава" },
			{ "maceeldnerlightning", "Штормовая звезда" },
			{ "maceeldnernature", "Клоссен" },
			{ "macegold", "Нордская булава" },
			{ "macegold_bloodlightning", "Булава громовой крови" },
			{ "macegold_frostfire", "Булава льда и огня" },
			{ "macegolduncooked", "Заготовка: нордская булава" },
			{ "maceiron", "Железная булава" },
			{ "maceneedle", "Дикобраз" },
			{ "macesilver", "Ледомор" },
			{ "macewood", "Деревянная булава" },
			{ "magicallystuffedshroom", "Фаршированный гриб" },
			{ "magicallystuffedshroomuncooked", "Сырой фаршированный гриб" },
			{ "mandible", "Мандибула" },
			{ "marinatedgreens", "Маринованные овощи" },
			{ "mashedmeat", "Отбивное мясо" },
			{ "meadbasebugrepellent", "Основа медовухи: средство от смертожалов" },
			{ "meadbasebzerker", "Основа медовухи: берсеркир" },
			{ "meadbaseeitrlingering", "Основа медовухи: мощный эйтр" },
			{ "meadbaseeitrminor", "Основа медовухи: малый эйтр" },
			{ "meadbasefrostresist", "Основа медовухи: сопротивление морозу" },
			{ "meadbasehasty", "Основа медовухи: Рататоск" },
			{ "meadbasehealthlingering", "Основа медовухи: мощное лечение" },
			{ "meadbasehealthmajor", "Основа медовухи: большое лечение" },
			{ "meadbasehealthmedium", "Основа медовухи: среднее лечение" },
			{ "meadbasehealthminor", "Основа медовухи: малое лечение" },
			{ "meadbaselightfoot", "Основа медовухи: Легкоступ" },
			{ "meadbasepoisonresist", "Основа медовухи: сопротивление яду" },
			{ "meadbasestaminalingering", "Основа медовухи: большая выносливость" },
			{ "meadbasestaminamedium", "Основа медовухи: средняя выносливость" },
			{ "meadbasestaminaminor", "Основа медовухи: малая выносливость" },
			{ "meadbasestrength", "Основа медовухи: сила тролля" },
			{ "meadbaseswimmer", "Основа медовухи: Вананидир" },
			{ "meadbasetamer", "Основа медовухи: звериный шепот" },
			{ "meadbasetasty", "Основа медовухи: вкусная" },
			{ "meadbugrepellent", "Средство от смертожалов" },
			{ "meadbzerker", "Медовуха берсеркира" },
			{ "meadeitrlingering", "Мощная медовуха эйтра" },
			{ "meadeitrminor", "Малая медовуха эйтра" },
			{ "meadfrostresist", "Морозоустойчивая медовуха" },
			{ "meadhasty", "Эликсир Рататоска" },
			{ "meadhealthlingering", "Мощная медовуха лечения" },
			{ "meadhealthmajor", "Большая медовуха лечения" },
			{ "meadhealthmedium", "Средняя медовуха лечения" },
			{ "meadhealthminor", "Малая медовуха лечения" },
			{ "meadlightfoot", "Медовуха Легкоступа" },
			{ "meadpoisonresist", "Медовуха-антидот" },
			{ "meadstaminalingering", "Большая медовуха выносливости" },
			{ "meadstaminamedium", "Средняя медовуха выносливости" },
			{ "meadstaminaminor", "Малая медовуха выносливости" },
			{ "meadstrength", "Медовуха силы тролля" },
			{ "meadswimmer", "Напиток Вананидир" },
			{ "meadtamer", "Отвар звериного шепота" },
			{ "meadtasty", "Вкусная медовуха" },
			{ "meadtrollpheromones", "Любовное зелье" },
			{ "meatballsmashedpoteitr", "Фрикадельки с картофэйтром" },
			{ "meatplatter", "Мясное ассорти" },
			{ "meatplatteruncooked", "Сырое ассорти из мяса" },
			{ "mechanicalspring", "Пружина" },
			{ "memorialcoal", "Уголь памяти" },
			{ "metalbar_1x2", "Черный мрамор 1x1x1" },
			{ "mincemeatsauce", "Соус с мясным фаршем" },
			{ "mistharesupreme", "Гуляш из зайчатины" },
			{ "mistharesupremeuncooked", "Сырой гуляш из зайчатины" },
			{ "moldarmorgoldchest", "Форма: нагрудник защитника" },
			{ "moldarmorgoldhelmet", "Форма: шлем защитника" },
			{ "moldarmorgoldlegs", "Форма: штаны защитника" },
			{ "moldarmormagechest", "Форма: одеяние призывателя" },
			{ "moldarmormagehelmet", "Форма: головной убор призывателя" },
			{ "moldarmormagelegs", "Форма: штаны призывателя" },
			{ "moldarmormediumchest", "Форма: нагрудник авангарда" },
			{ "moldarmormediumhelmet", "Форма: капюшон авангарда" },
			{ "moldarmormediumlegs", "Форма: штаны авангарда" },
			{ "moldatgeir", "Форма: нордская алебарда" },
			{ "moldaxe", "Форма: нордский топор" },
			{ "moldaxe2h", "Форма: нордская секира" },
			{ "moldbow", "Форма: нордский лук" },
			{ "moldcrossbow", "Форма: нордский арбалет" },
			{ "moldfistweapon", "Форма: нордские цепные кастеты" },
			{ "moldkeys", "Форма: сложный ключ" },
			{ "moldknife", "Форма: нордский кинжал" },
			{ "moldmace", "Форма: нордская булава" },
			{ "moldmace2h", "Форма: нордская кувалда" },
			{ "moldshieldbuckler", "Форма: нордский баклер" },
			{ "moldshieldround", "Форма: нордский щит" },
			{ "moldshieldtower", "Форма: нордский большой щит" },
			{ "moldspear", "Форма: Нордское копье" },
			{ "moldstafffrostorbs", "Форма: северная месть" },
			{ "moldstafforbofahri", "Форма: шип эха" },
			{ "moldstaffspiritcaller", "Форма: призыватель духов" },
			{ "moldstaffthunderblood", "Форма: удар молнии" },
			{ "moldsword", "Форма: нордский меч" },
			{ "moldsword2h", "Форма: нордский двуручник" },
			{ "moleclaws", "Длинные когти" },
			{ "moltencore", "Расплавленное ядро" },
			{ "moosehide", "Шкура лося" },
			{ "moosekebab", "Мясо в хлебе" },
			{ "moosemeat", "Мясо лося" },
			{ "moosesinew", "Жила лося" },
			{ "morgenheart", "Сердце моргена" },
			{ "morgensinew", "Сухожилие моргена" },
			{ "morkhalla_chestancient", "Древний сундук" },
			{ "morkhalla_firepit", "Костер" },
			{ "morkhalla_stonepile", "Груда черного мрамора" },
			{ "mushroom", "Гриб" },
			{ "mushroomblue", "Голубой гриб" },
			{ "mushroombzerker", "Поганка" },
			{ "mushroomjotunpuffs", "Гриб Йотунов" },
			{ "mushroommagecap", "Волшебный гриб" },
			{ "mushroomomelette", "Омлет с грибами" },
			{ "mushroomsmokepuff", "Дымчатый гриб" },
			{ "mushroomyellow", "Желтый гриб" },
			{ "necktail", "Хвост никса" },
			{ "necktailgrilled", "Жареный хвост никса" },
			{ "needle", "Игла" },
			{ "nornthread", "Нить Норн" },
			{ "oak_sapling", "Саженец дуба" },
			{ "oat", "Овсяная крупа" },
			{ "oatflour", "Овсяная мука" },
			{ "oatmeallingonberryjam", "Овсянка" },
			{ "oatmilk", "Овсяное молоко" },
			{ "oatseeds", "Семена овса" },
			{ "obsidian", "Обсидиан" },
			{ "obsidian_pile", "Куча обсидиана" },
			{ "onion", "Лук" },
			{ "onionseeds", "Семена лука" },
			{ "onionsoup", "Луковый суп" },
			{ "ooze", "Жижа" },
			{ "oozemork", "Мертвая масса" },
			{ "orbfrostfire", "Сущность льда и огня" },
			{ "orbthunderblood", "Сущность громовой крови" },
			{ "ovenpancake", "Запеченный блин" },
			{ "ovenpancakeuncooked", "Тесто для запеченного блина" },
			{ "pancakes", "Блины" },
			{ "paved_road", "Мощеная дорога" },
			{ "paved_road_v2", "Мощеная дорога" },
			{ "pickaxeantler", "Кирка из оленьего рога" },
			{ "pickaxeblackmetal", "Кирка из черного металла" },
			{ "pickaxebronze", "Бронзовая кирка" },
			{ "pickaxeiron", "Железная кирка" },
			{ "pickaxestone", "Каменная кирка" },
			{ "piece_archerytarget", "Мишень для стрельбы" },
			{ "piece_artisanstation", "Стол ремесленника" },
			{ "piece_asksvinskeleton", "Скелет пеплозавра" },
			{ "piece_banner01", "Черный флаг" },
			{ "piece_banner02", "Синий флаг" },
			{ "piece_banner03", "Бело-красный полосатый флаг" },
			{ "piece_banner04", "Красный флаг" },
			{ "piece_banner05", "Зеленый флаг" },
			{ "piece_banner06", "Сине-красно-белый флаг" },
			{ "piece_banner07", "Бело-синий полосатый флаг" },
			{ "piece_banner08", "Желтый флаг" },
			{ "piece_banner09", "Фиолетовый флаг" },
			{ "piece_banner10", "Оранжевый флаг" },
			{ "piece_banner11", "Белый флаг" },
			{ "piece_barber", "Цирюльня" },
			{ "piece_bathtub", "Ванна" },
			{ "piece_bed02", "Драконья кровать" },
			{ "piece_beehive", "Улей" },
			{ "piece_bench01", "Скамья" },
			{ "piece_bench_runed", "Резная скамья" },
			{ "piece_birdnest", "Птичье гнездо" },
			{ "piece_blackmarble_bench", "Скамья из черного мрамора" },
			{ "piece_blackmarble_table", "Стол из черного мрамора" },
			{ "piece_blackmarble_throne", "Трон из черного мрамора" },
			{ "piece_blackwood_bench", "Скамья" },
			{ "piece_blackwood_bench01", "Скамья из пепельной древесины" },
			{ "piece_bone_throne", "Костяной трон" },
			{ "piece_brazierceiling01", "Подвесной мангал" },
			{ "piece_brazierfloor01", "Жаровня" },
			{ "piece_brazierfloor02", "Жаровня с синим пламенем" },
			{ "piece_cartographytable", "Стол картографа" },
			{ "piece_cauldron", "Котёл" },
			{ "piece_celebrationgarland", "Цветочная гирлянда" },
			{ "piece_chair", "Табурет" },
			{ "piece_chair02", "Кресло" },
			{ "piece_chair03", "Кресло из темного дерева" },
			{ "piece_chair_runed", "Резной стул" },
			{ "piece_chest", "Армированный сундук" },
			{ "piece_chest_barrel", "Бочка" },
			{ "piece_chest_blackmetal", "Сундук из черного металла" },
			{ "piece_chest_grausten", "Сундук из граустена" },
			{ "piece_chest_private", "Личный сундук" },
			{ "piece_chest_treasure", "Сундук с сокровищами" },
			{ "piece_chest_warderobe", "Шкаф" },
			{ "piece_chest_wood", "Сундук" },
			{ "piece_cloth_hanging_door", "Штора из красного джута" },
			{ "piece_cloth_hanging_door_blue", "Портьеры из голубого джута" },
			{ "piece_cloth_hanging_door_blue2", "Занавеска из голубого джута" },
			{ "piece_cookingstation", "Стойка для готовки" },
			{ "piece_cookingstation_iron", "Железная стойка для готовки" },
			{ "piece_drawbridge", "Подъемный мост из северной ели" },
			{ "piece_drawbridge_log", "Подъемный мост в сельской местности" },
			{ "piece_dvergr_lantern", "Настенный светильник двергов" },
			{ "piece_dvergr_lantern_pole", "Фонарный столб двергов" },
			{ "piece_dvergr_metal_wall_2x2", "Металлическая стена двергов" },
			{ "piece_dvergr_pole", "Столб двергов" },
			{ "piece_dvergr_sharpstakes", "Острые колья двергов" },
			{ "piece_dvergr_spiralstair", "Винтовая (левая) лестница двергов" },
			{ "piece_dvergr_spiralstair_right", "Винтовая (правая) лестница двергов" },
			{ "piece_dvergr_stake_wall", "Частокол двергов" },
			{ "piece_dvergr_wood_door", "Дверь двергов" },
			{ "piece_dvergr_wood_wall", "Стена двергов" },
			{ "piece_eternalpyre", "Вечное пламя" },
			{ "piece_faderembers", "Вечное пламя" },
			{ "piece_fairylightgarland", "Волшебные огни" },
			{ "piece_flametal_beam", "Огнеметаллический брус" },
			{ "piece_flametal_pillar", "Огнеметаллический столб" },
			{ "piece_frostfoundry", "Морозная кузница" },
			{ "piece_frostkiln", "Ледяная печь" },
			{ "piece_gift1", "Йольский подарок" },
			{ "piece_gift2", "Йольский подарок" },
			{ "piece_gift3", "Йольский подарок" },
			{ "piece_grausten_floor_1x1", "Пол из серокамня 1x1" },
			{ "piece_grausten_floor_2x2", "Пол из серокамня 2x2" },
			{ "piece_grausten_floor_4x4", "Пол из серокамня 4x4" },
			{ "piece_grausten_pillar_arch", "Средняя арка из серокамня" },
			{ "piece_grausten_pillar_arch_small", "Малая арка из серокамня" },
			{ "piece_grausten_pillarbase_medium", "Средняя колонна из серокамня" },
			{ "piece_grausten_pillarbase_small", "Малая колонна из серокамня" },
			{ "piece_grausten_pillarbase_tapered", "Сужающаяся колонна из серокамня" },
			{ "piece_grausten_pillarbase_tapered_inverted", "Сужающаяся (обратная) колонна из серокамня" },
			{ "piece_grausten_pillarbeam_medium", "Средний брус из серокамня" },
			{ "piece_grausten_pillarbeam_small", "Малый брус из серокамня" },
			{ "piece_grausten_roof_45", "Крыша из серокамня" },
			{ "piece_grausten_roof_45_arch", "Арочная крыша из серокамня" },
			{ "piece_grausten_roof_45_arch_corner", "Угол арочной крыши из серокамня" },
			{ "piece_grausten_roof_45_arch_corner2", "Угол арочной крыши из серокамня" },
			{ "piece_grausten_roof_45_corner", "Угол крыши из серокамня" },
			{ "piece_grausten_roof_45_corner2", "Угол крыши из серокамня" },
			{ "piece_grausten_stone_ladder", "Крутая лестница из серокамня" },
			{ "piece_grausten_stonestair", "Лестница из серокамня" },
			{ "piece_grausten_wall_1x2", "Стена из серокамня 1x2" },
			{ "piece_grausten_wall_2x2", "Стена из серокамня 2x2" },
			{ "piece_grausten_wall_4x2", "Стена из серокамня 4x2" },
			{ "piece_grausten_wall_arch", "Арка в стене из серокамня" },
			{ "piece_grausten_wall_arch_inverted", "Арка в стене (обратная) из серокамня" },
			{ "piece_grausten_window_2x2", "Окно из серокамня 2x2" },
			{ "piece_grausten_window_4x2", "Окно из серокамня 4x2" },
			{ "piece_groundtorch", "Стоячий железный факел" },
			{ "piece_groundtorch_blue", "Стоячий железный факел с синим огнем" },
			{ "piece_groundtorch_green", "Стоячий железный факел с зеленым огнем" },
			{ "piece_groundtorch_mist", "Факел с магическим огоньком" },
			{ "piece_groundtorch_wood", "Стоячий деревянный факел" },
			{ "piece_hexagonal_door", "Шестиугольные ворота" },
			{ "piece_hoodedlantern", "Фонарь с колпаком" },
			{ "piece_icecube", "Ледяной блок" },
			{ "piece_jackoturnip", "Фонарь из репы" },
			{ "piece_lavalantern", "Лавовый светильник" },
			{ "piece_logbench01", "Бревно-скамейка" },
			{ "piece_magetable", "Стол гальдров" },
			{ "piece_magetable_ext", "Рунный стол" },
			{ "piece_magetable_ext2", "Незатухающие свечи" },
			{ "piece_magetable_ext3", "Венок из перьев" },
			{ "piece_magetable_ext4", "Вертикальный ткацкий станок" },
			{ "piece_maypole", "Майское дерево" },
			{ "piece_meadcauldron", "Котёл для медовух" },
			{ "piece_mistletoe", "Омела" },
			{ "piece_moose_throne", "Трон из оленьих рог" },
			{ "piece_oven", "Каменная печь" },
			{ "piece_pot1", "Средний зеленый горшок" },
			{ "piece_pot1_cracked", "Средний глиняный горшок" },
			{ "piece_pot1_red", "Средний красный горшок" },
			{ "piece_pot2", "Большой зеленый горшок" },
			{ "piece_pot2_cracked", "Большой глиняный горшок" },
			{ "piece_pot2_red", "Большой красный горшок" },
			{ "piece_pot3", "Малый зеленый горшок" },
			{ "piece_pot3_cracked", "Малый глиняный горшок" },
			{ "piece_pot3_red", "Малый красный горшок" },
			{ "piece_preptable", "Разделочный стол" },
			{ "piece_sapcollector", "Экстрактор живицы" },
			{ "piece_sharpstakes", "Острые колья" },
			{ "piece_shieldgenerator", "Генератор щита" },
			{ "piece_snowlantern", "Снежный фонарь" },
			{ "piece_spinningwheel", "Прялка" },
			{ "piece_stakewall_blackwood", "Острые колья из пепельной древесины" },
			{ "piece_stonecutter", "Камнерез" },
			{ "piece_table", "Стол" },
			{ "piece_table_oak", "Длинный тяжелый стол" },
			{ "piece_table_round", "Круглый стол" },
			{ "piece_table_runed", "Длинный резной стол" },
			{ "piece_table_runed_small", "Квадратный резной стол" },
			{ "piece_throne01", "Вороний трон" },
			{ "piece_throne02", "Каменный трон" },
			{ "piece_trainingdummy", "М.А.Н.Е.К.Е.Н." },
			{ "piece_trap_troll", "Капкан" },
			{ "piece_turret", "Баллиста" },
			{ "piece_walltorch", "Подсвечник" },
			{ "piece_wisplure", "Фонтан светлячков" },
			{ "piece_workbench", "Верстак" },
			{ "piece_workbench_ext1", "Колода для рубки" },
			{ "piece_workbench_ext2", "Дубильный станок" },
			{ "piece_workbench_ext3", "Тесло" },
			{ "piece_workbench_ext4", "Полка для инструментов" },
			{ "piece_xmascrown", "Йольский венок" },
			{ "piece_xmasgarland", "Йольская гирлянда" },
			{ "piece_xmastree", "Йольское дерево" },
			{ "pinecone", "Сосновая шишка" },
			{ "pinetree_sapling", "Саженец сосны" },
			{ "piquantpie", "Пряный пирог" },
			{ "piquantpieuncooked", "Неприготовленный пряный пирог" },
			{ "placeable_bigrock_01", "Валун с орнаментом" },
			{ "placeable_bigrock_02", "Декоративный валун" },
			{ "placeable_hardrock", "Загадочный камень" },
			{ "placeable_stone", "Камень" },
			{ "portal", "Портал" },
			{ "portal_stone", "Каменный портал" },
			{ "portal_wood", "Портал" },
			{ "pot_shard_green", "Осколок горшка" },
			{ "poteitr", "Картофэйтр" },
			{ "poteitrseeds", "Семя картофэйтра" },
			{ "powdereddragonegg", "Толченая драконья скорлупа" },
			{ "proustitepowder", "Пруститовый порошок" },
			{ "pukeberries", "Тошника" },
			{ "pulledbear", "Рваная медвежатина" },
			{ "pungentpebbles", "Вонючие камешки" },
			{ "queenbee", "Пчелиная матка" },
			{ "queendrop", "Королевский панцирь" },
			{ "queensjam", "Королевский джем" },
			{ "raft", "Плот" },
			{ "raise", "Поднять землю" },
			{ "raise_v2", "Поднять землю" },
			{ "raspberry", "Малина" },
			{ "rawmeat", "Кабанина" },
			{ "resin", "Смола" },
			{ "roastedcrustpie", "Пирог с поджаристой коркой" },
			{ "roastedcrustpieuncooked", "Неприготовленный пирог с поджаристой коркой" },
			{ "root", "Корень" },
			{ "rottenmeat", "Гнилое мясо" },
			{ "roundlog", "Цельная древесина" },
			{ "royaljelly", "Маточное молочко" },
			{ "ruby", "Рубин" },
			{ "rug_asksvin", "Коврик из шкуры пеплозавра" },
			{ "rug_bjorn", "Коврик из шкуры медведя" },
			{ "rug_deer", "Коврик из шкуры оленя" },
			{ "rug_fur", "Коврик из шкуры быкоящера" },
			{ "rug_hare", "Коврик из шкуры зайца" },
			{ "rug_moose", "Ковер из шкуры лося" },
			{ "rug_seal", "Ковер из кожи тюленя" },
			{ "rug_straw", "Солома" },
			{ "rug_wolf", "Коврик из шкуры волка" },
			{ "saddleasksvin", "Седло для пеплозавра" },
			{ "saddlelox", "Седло для быкоящера" },
			{ "saddlemoose", "Лосиное седло" },
			{ "salad", "Салат" },
			{