Decompiled source of WildWeapons v2.9.99

WildWeapons.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using ItemManager;
using JetBrains.Annotations;
using LocalizationManager;
using Microsoft.CodeAnalysis;
using ServerSync;
using TMPro;
using UnityEngine;
using UnityEngine.Audio;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Core.Tokens;
using YamlDotNet.Helpers;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.BufferedDeserialization;
using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators;
using YamlDotNet.Serialization.Converters;
using YamlDotNet.Serialization.EventEmitters;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization.NodeDeserializers;
using YamlDotNet.Serialization.NodeTypeResolvers;
using YamlDotNet.Serialization.ObjectFactories;
using YamlDotNet.Serialization.ObjectGraphTraversalStrategies;
using YamlDotNet.Serialization.ObjectGraphVisitors;
using YamlDotNet.Serialization.Schemas;
using YamlDotNet.Serialization.TypeInspectors;
using YamlDotNet.Serialization.TypeResolvers;
using YamlDotNet.Serialization.Utilities;
using YamlDotNet.Serialization.ValueDeserializers;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("WildWeapons")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("WildWeapons")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4358610B-F3F4-4843-B7AF-98B7BC60DCDE")]
[assembly: AssemblyFileVersion("2.9.99")]
[assembly: AssemblyCompany("catharis")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.9.99.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[<01431363-8bcf-4073-8d9c-704082050b37>Embedded]
	internal sealed class <01431363-8bcf-4073-8d9c-704082050b37>EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[<01431363-8bcf-4073-8d9c-704082050b37>Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	[CompilerGenerated]
	internal sealed class <201e8df1-40d9-4fae-8a71-e1a1cf1b5561>NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public <201e8df1-40d9-4fae-8a71-e1a1cf1b5561>NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public <201e8df1-40d9-4fae-8a71-e1a1cf1b5561>NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[<01431363-8bcf-4073-8d9c-704082050b37>Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class <80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public <80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
}
namespace WildWeapons
{
	[BepInPlugin("catharis.WildWeapons", "WildWeapons", "2.9.99")]
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	public class WildWeaponsPlugin : BaseUnityPlugin
	{
		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)]
		public enum Toggle
		{
			On = 1,
			Off = 0
		}

		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)]
		private class ConfigurationManagerAttributes
		{
			[UsedImplicitly]
			public int? Order;

			[UsedImplicitly]
			public bool? Browsable;

			[UsedImplicitly]
			[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
			public string Category;

			[UsedImplicitly]
			[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(new byte[] { 2, 1 })]
			public Action<ConfigEntryBase> CustomDrawer;
		}

		internal const string ModName = "WildWeapons";

		internal const string ModVersion = "2.9.99";

		internal const string Author = "catharis";

		private const string ModGUID = "catharis.WildWeapons";

		private static string ConfigFileName = "catharis.WildWeapons.cfg";

		private static string ConfigFileFullPath;

		internal static string ConnectionError;

		private readonly Harmony _harmony = new Harmony("catharis.WildWeapons");

		public static readonly ManualLogSource WildWeaponsLogger;

		private static readonly ConfigSync ConfigSync;

		private static ConfigEntry<Toggle> _detailedConfig;

		private static ConfigEntry<Toggle> _serverConfigLocked;

		private static ConfigEntry<Toggle> _recipeIsActiveConfig;

		public void Awake()
		{
			Localizer.Load();
			_serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only.");
			ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked);
			_detailedConfig = config("1 - General", "Enable Detailed Configuration", Toggle.Off, "If on, unlocks detailed per-item crafting/drop/stat settings in the config file. Restart the game for this to take effect.");
			Item.DefaultConfigurability = ((_detailedConfig.Value == Toggle.On) ? Configurability.Full : Configurability.Disabled);
			Item item = new Item("wildweapons", "OrcSword_CAH");
			item.Name.English("Flintbone Greatsword");
			item.Description.English("A brutish crude sword, something an orc would use.");
			item.Crafting.Add(CraftingTable.Workbench, 1);
			item.RequiredItems.Add("AlloyFlintbone_CAH", 20);
			item.RequiredUpgradeItems.Add("Flint", 2);
			item.RequiredUpgradeItems.Add("BoneFragments", 1);
			item.CraftAmount = 1;
			item.Trade.Price = 0u;
			item.Trade.Stack = 0u;
			item.Trade.RequiredGlobalKey = "defeated_bonemass";
			item.Trade.Trader = Trader.None;
			Item item2 = new Item("wildweapons", "OrcBattleaxe_CAH");
			item2.Name.English("Flintbone Battleaxe");
			item2.Description.English("A hefty brutish axe, something an orc would use.");
			item2.Crafting.Add(CraftingTable.Workbench, 1);
			item2.RequiredItems.Add("AlloyFlintbone_CAH", 20);
			item2.RequiredUpgradeItems.Add("Flint", 2);
			item2.RequiredUpgradeItems.Add("BoneFragments", 1);
			item2.CraftAmount = 1;
			item2.Trade.Price = 0u;
			item2.Trade.Stack = 0u;
			item2.Trade.RequiredGlobalKey = "defeated_bonemass";
			item2.Trade.Trader = Trader.None;
			Item item3 = new Item("wildweapons", "OrcMace_CAH");
			item3.Name.English("Flintbone Mace");
			item3.Description.English("A sturdy brutal mace, something an orc would use.");
			item3.Crafting.Add(CraftingTable.Workbench, 1);
			item3.RequiredItems.Add("AlloyFlintbone_CAH", 10);
			item3.RequiredUpgradeItems.Add("Flint", 1);
			item3.RequiredUpgradeItems.Add("BoneFragments", 1);
			item3.CraftAmount = 1;
			item3.Trade.Price = 0u;
			item3.Trade.Stack = 0u;
			item3.Trade.RequiredGlobalKey = "defeated_bonemass";
			item3.Trade.Trader = Trader.None;
			Item item4 = new Item("wildweapons", "OrcDagger_CAH");
			item4.Name.English("Flintbone Dagger");
			item4.Description.English("A crude jagged dagger, something an orc would use.");
			item4.Crafting.Add(CraftingTable.Workbench, 1);
			item4.RequiredItems.Add("AlloyFlintbone_CAH", 10);
			item4.RequiredUpgradeItems.Add("Flint", 1);
			item4.RequiredUpgradeItems.Add("BoneFragments", 1);
			item4.CraftAmount = 1;
			item4.Trade.Price = 0u;
			item4.Trade.Stack = 0u;
			item4.Trade.RequiredGlobalKey = "defeated_bonemass";
			item4.Trade.Trader = Trader.None;
			Item item5 = new Item("wildweapons", "OrcSpear_CAH");
			item5.Name.English("Flintbone Spear");
			item5.Description.English("A rough spear for hunting, something an orc would use.");
			item5.Crafting.Add(CraftingTable.Workbench, 1);
			item5.RequiredItems.Add("AlloyFlintbone_CAH", 10);
			item5.RequiredUpgradeItems.Add("Flint", 1);
			item5.RequiredUpgradeItems.Add("BoneFragments", 1);
			item5.CraftAmount = 1;
			item5.Trade.Price = 0u;
			item5.Trade.Stack = 0u;
			item5.Trade.RequiredGlobalKey = "defeated_bonemass";
			item5.Trade.Trader = Trader.None;
			Item item6 = new Item("wildweapons", "OrcAtgeir_CAH");
			item6.Name.English("Flintbone Atgeir");
			item6.Description.English("A jutting polearm, something an orc would use.");
			item6.Crafting.Add(CraftingTable.Workbench, 1);
			item6.RequiredItems.Add("AlloyFlintbone_CAH", 20);
			item6.RequiredUpgradeItems.Add("Flint", 2);
			item6.RequiredUpgradeItems.Add("BoneFragments", 1);
			item6.CraftAmount = 1;
			item6.Trade.Price = 0u;
			item6.Trade.Stack = 0u;
			item6.Trade.RequiredGlobalKey = "defeated_bonemass";
			item6.Trade.Trader = Trader.None;
			Item item7 = new Item("wildweapons", "OrcFists_CAH");
			item7.Name.English("Flintbone Battlegloves");
			item7.Description.English("Two Brutish gloves, covered in blades, something an orc would use.");
			item7.Crafting.Add(CraftingTable.Workbench, 1);
			item7.RequiredItems.Add("AlloyFlintbone_CAH", 20);
			item7.RequiredUpgradeItems.Add("Flint", 2);
			item7.RequiredUpgradeItems.Add("BoneFragments", 2);
			item7.CraftAmount = 1;
			item7.Trade.Price = 0u;
			item7.Trade.Stack = 0u;
			item7.Trade.RequiredGlobalKey = "defeated_bonemass";
			item7.Trade.Trader = Trader.None;
			Item item8 = new Item("wildweapons", "OrcBow_CAH");
			item8.Name.English("Flintbone Bow");
			item8.Description.English("A rough bow used for hunting, something an orc would use.");
			item8.Crafting.Add(CraftingTable.Workbench, 1);
			item8.RequiredItems.Add("AlloyFlintbone_CAH", 10);
			item8.RequiredUpgradeItems.Add("Flint", 1);
			item8.RequiredUpgradeItems.Add("BoneFragments", 5);
			item8.CraftAmount = 1;
			item8.Trade.Price = 0u;
			item8.Trade.Stack = 0u;
			item8.Trade.RequiredGlobalKey = "defeated_bonemass";
			item8.Trade.Trader = Trader.None;
			Item item9 = new Item("wildweapons", "OrcStaff_CAH");
			item9.Name.English("Flintbone Magestaff");
			item9.Description.English("A rough magical implement, something an orc would use.");
			item9.Crafting.Add(CraftingTable.Workbench, 1);
			item9.RequiredItems.Add("AlloyFlintbone_CAH", 10);
			item9.RequiredItems.Add("SurtlingCore", 1);
			item9.RequiredUpgradeItems.Add("Flint", 2);
			item9.RequiredUpgradeItems.Add("BoneFragments", 1);
			item9.CraftAmount = 1;
			item9.Trade.Price = 0u;
			item9.Trade.Stack = 0u;
			item9.Trade.RequiredGlobalKey = "defeated_bonemass";
			item9.Trade.Trader = Trader.None;
			Item item10 = new Item("wildweapons", "OrcShield_CAH");
			item10.Name.English("Flintbone Shield");
			item10.Description.English("A solid pointy shield, something an orc would use.");
			item10.Crafting.Add(CraftingTable.Workbench, 1);
			item10.RequiredItems.Add("AlloyFlintbone_CAH", 10);
			item10.RequiredUpgradeItems.Add("Flint", 2);
			item10.RequiredUpgradeItems.Add("BoneFragments", 2);
			item10.CraftAmount = 1;
			item10.Trade.Price = 0u;
			item10.Trade.Stack = 0u;
			item10.Trade.RequiredGlobalKey = "defeated_bonemass";
			item10.Trade.Trader = Trader.None;
			Item item11 = new Item("wildweapons", "ForestGreatsword_CAH");
			item11.Name.English("Eldersteel Greatsword");
			item11.Description.English("A dangerously sharp greatsword forged of eldersteel.");
			item11.Crafting.Add(CraftingTable.Forge, 1);
			item11.RequiredItems.Add("BarElderSteel_CAH", 20);
			item11.RequiredUpgradeItems.Add("Dandelion", 3);
			item11.RequiredUpgradeItems.Add("Tin", 2);
			item11.CraftAmount = 1;
			item11.Trade.Price = 0u;
			item11.Trade.Stack = 0u;
			item11.Trade.RequiredGlobalKey = "defeated_bonemass";
			item11.Trade.Trader = Trader.None;
			Item item12 = new Item("wildweapons", "ForestGreataxe_CAH");
			item12.Name.English("Eldersteel Greataxe");
			item12.Description.English("A hefty and heavy greataxe forged of eldersteel.");
			item12.Crafting.Add(CraftingTable.Forge, 1);
			item12.RequiredItems.Add("BarElderSteel_CAH", 20);
			item12.RequiredUpgradeItems.Add("Dandelion", 3);
			item12.RequiredUpgradeItems.Add("Tin", 2);
			item12.CraftAmount = 1;
			item12.Trade.Price = 0u;
			item12.Trade.Stack = 0u;
			item12.Trade.RequiredGlobalKey = "defeated_bonemass";
			item12.Trade.Trader = Trader.None;
			Item item13 = new Item("wildweapons", "ForestMace_CAH");
			item13.Name.English("Eldersteel Mace");
			item13.Description.English("A blunt and deadly mace forged of eldersteel.");
			item13.Crafting.Add(CraftingTable.Forge, 1);
			item13.RequiredItems.Add("BarElderSteel_CAH", 15);
			item13.RequiredUpgradeItems.Add("Dandelion", 2);
			item13.RequiredUpgradeItems.Add("Tin", 1);
			item13.CraftAmount = 1;
			item13.Trade.Price = 0u;
			item13.Trade.Stack = 0u;
			item13.Trade.RequiredGlobalKey = "defeated_bonemass";
			item13.Trade.Trader = Trader.None;
			Item item14 = new Item("wildweapons", "ForestDagger_CAH");
			item14.Name.English("Eldersteel Dagger");
			item14.Description.English("A lethal and delicate dagger forged of eldersteel.");
			item14.Crafting.Add(CraftingTable.Forge, 1);
			item14.RequiredItems.Add("BarElderSteel_CAH", 10);
			item14.RequiredUpgradeItems.Add("Dandelion", 1);
			item14.RequiredUpgradeItems.Add("Tin", 1);
			item14.CraftAmount = 1;
			item14.Trade.Price = 0u;
			item14.Trade.Stack = 0u;
			item14.Trade.RequiredGlobalKey = "defeated_bonemass";
			item14.Trade.Trader = Trader.None;
			Item item15 = new Item("wildweapons", "ForestSpear_CAH");
			item15.Name.English("Eldersteel Spear");
			item15.Description.English("A lightweight and easy to use spear forged of eldersteel.");
			item15.Crafting.Add(CraftingTable.Forge, 1);
			item15.RequiredItems.Add("BarElderSteel_CAH", 15);
			item15.RequiredUpgradeItems.Add("Dandelion", 2);
			item15.RequiredUpgradeItems.Add("Tin", 1);
			item15.CraftAmount = 1;
			item15.Trade.Price = 0u;
			item15.Trade.Stack = 0u;
			item15.Trade.RequiredGlobalKey = "defeated_bonemass";
			item15.Trade.Trader = Trader.None;
			Item item16 = new Item("wildweapons", "ForestScythe_CAH");
			item16.Name.English("Eldersteel Scythe");
			item16.Description.English("A long deadly scythe forged of eldersteel.");
			item16.Crafting.Add(CraftingTable.Forge, 1);
			item16.RequiredItems.Add("BarElderSteel_CAH", 20);
			item16.RequiredUpgradeItems.Add("Dandelion", 2);
			item16.RequiredUpgradeItems.Add("Tin", 2);
			item16.CraftAmount = 1;
			item16.Trade.Price = 0u;
			item16.Trade.Stack = 0u;
			item16.Trade.RequiredGlobalKey = "defeated_bonemass";
			item16.Trade.Trader = Trader.None;
			Item item17 = new Item("wildweapons", "ForestFists_CAH");
			item17.Name.English("Eldersteel Battlegloves");
			item17.Description.English("Deadly refined spearlike battlegloves forged of eldersteel.");
			item17.Crafting.Add(CraftingTable.Forge, 1);
			item17.RequiredItems.Add("BarElderSteel_CAH", 20);
			item17.RequiredUpgradeItems.Add("Dandelion", 2);
			item17.RequiredUpgradeItems.Add("Tin", 2);
			item17.CraftAmount = 1;
			item17.Trade.Price = 0u;
			item17.Trade.Stack = 0u;
			item17.Trade.RequiredGlobalKey = "defeated_bonemass";
			item17.Trade.Trader = Trader.None;
			Item item18 = new Item("wildweapons", "ForestBow_CAH");
			item18.Name.English("Eldersteel Bow");
			item18.Description.English("A flexible yet rigid bow forged of eldersteel.");
			item18.Crafting.Add(CraftingTable.Forge, 1);
			item18.RequiredItems.Add("BarElderSteel_CAH", 15);
			item18.RequiredUpgradeItems.Add("Dandelion", 3);
			item18.RequiredUpgradeItems.Add("Tin", 3);
			item18.CraftAmount = 1;
			item18.Trade.Price = 0u;
			item18.Trade.Stack = 0u;
			item18.Trade.RequiredGlobalKey = "defeated_bonemass";
			item18.Trade.Trader = Trader.None;
			Item item19 = new Item("wildweapons", "ForestShield_CAH");
			item19.Name.English("Eldersteel Shield");
			item19.Description.English("A durable and versatile shield forged of eldersteel.");
			item19.Crafting.Add(CraftingTable.Forge, 1);
			item19.RequiredItems.Add("BarElderSteel_CAH", 25);
			item19.RequiredUpgradeItems.Add("Dandelion", 3);
			item19.RequiredUpgradeItems.Add("Tin", 3);
			item19.CraftAmount = 1;
			item19.Trade.Price = 0u;
			item19.Trade.Stack = 0u;
			item19.Trade.RequiredGlobalKey = "defeated_bonemass";
			item19.Trade.Trader = Trader.None;
			Item item20 = new Item("wildweapons", "ForestChakram_CAH");
			item20.Name.English("Eldersteel Chakram");
			item20.Description.English("A versatile throwing weapon forged of eldersteel.");
			item20.Crafting.Add(CraftingTable.Forge, 1);
			item20.RequiredItems.Add("BarElderSteel_CAH", 10);
			item20.RequiredUpgradeItems.Add("Dandelion", 1);
			item20.RequiredUpgradeItems.Add("Tin", 1);
			item20.CraftAmount = 1;
			item20.Trade.Price = 0u;
			item20.Trade.Stack = 0u;
			item20.Trade.RequiredGlobalKey = "defeated_bonemass";
			item20.Trade.Trader = Trader.None;
			Item item21 = new Item("wildweapons", "BloodstoneSword_CAH");
			item21.Name.English("Bloodstone Sword");
			item21.Description.English("A heavy one handed sword, carved out of sinister bloodstone.");
			item21.Crafting.Add(CraftingTable.Forge, 1);
			item21.RequiredItems.Add("OreBloodstone_CAH", 15);
			item21.RequiredUpgradeItems.Add("Bloodbag", 2);
			item21.RequiredUpgradeItems.Add("Stone", 5);
			item21.CraftAmount = 1;
			item21.Trade.Price = 0u;
			item21.Trade.Stack = 0u;
			item21.Trade.RequiredGlobalKey = "defeated_bonemass";
			item21.Trade.Trader = Trader.None;
			Item item22 = new Item("wildweapons", "BloodstoneAxe_CAH");
			item22.Name.English("Bloodstone Axe");
			item22.Description.English("A fearsome looking axe, carved out of sinister bloodstone.");
			item22.Crafting.Add(CraftingTable.Forge, 1);
			item22.RequiredItems.Add("OreBloodstone_CAH", 15);
			item22.RequiredUpgradeItems.Add("Bloodbag", 2);
			item22.RequiredUpgradeItems.Add("Stone", 5);
			item22.CraftAmount = 1;
			item22.Trade.Price = 0u;
			item22.Trade.Stack = 0u;
			item22.Trade.RequiredGlobalKey = "defeated_bonemass";
			item22.Trade.Trader = Trader.None;
			Item item23 = new Item("wildweapons", "BloodstoneMaul_CAH");
			item23.Name.English("Bloodstone Maul");
			item23.Description.English("A weighty and dangerous maul, carved out of sinister bloodstone.");
			item23.Crafting.Add(CraftingTable.Forge, 1);
			item23.RequiredItems.Add("OreBloodstone_CAH", 25);
			item23.RequiredUpgradeItems.Add("Bloodbag", 3);
			item23.RequiredUpgradeItems.Add("Stone", 6);
			item23.CraftAmount = 1;
			item23.Trade.Price = 0u;
			item23.Trade.Stack = 0u;
			item23.Trade.RequiredGlobalKey = "defeated_bonemass";
			item23.Trade.Trader = Trader.None;
			Item item24 = new Item("wildweapons", "BloodstoneDaggers_CAH");
			item24.Name.English("Bloodstone Reavers");
			item24.Description.English("A pair of dangerous daggers, carved out of sinister bloodstone.");
			item24.Crafting.Add(CraftingTable.Forge, 1);
			item24.RequiredItems.Add("OreBloodstone_CAH", 20);
			item24.RequiredUpgradeItems.Add("Bloodbag", 2);
			item24.RequiredUpgradeItems.Add("Stone", 4);
			item24.CraftAmount = 1;
			item24.Trade.Price = 0u;
			item24.Trade.Stack = 0u;
			item24.Trade.RequiredGlobalKey = "defeated_bonemass";
			item24.Trade.Trader = Trader.None;
			Item item25 = new Item("wildweapons", "BloodstonePike_CAH");
			item25.Name.English("Bloodstone Pike");
			item25.Description.English("A decently long rugged spear, carved out of sinister bloodstone.");
			item25.Crafting.Add(CraftingTable.Forge, 1);
			item25.RequiredItems.Add("OreBloodstone_CAH", 25);
			item25.RequiredUpgradeItems.Add("Bloodbag", 3);
			item25.RequiredUpgradeItems.Add("Stone", 6);
			item25.CraftAmount = 1;
			item25.Trade.Price = 0u;
			item25.Trade.Stack = 0u;
			item25.Trade.RequiredGlobalKey = "defeated_bonemass";
			item25.Trade.Trader = Trader.None;
			Item item26 = new Item("wildweapons", "BloodstoneClaws_CAH");
			item26.Name.English("Bloodstone Claws");
			item26.Description.English("A pair of large jutting claws, carved out of sinister bloodstone.");
			item26.Crafting.Add(CraftingTable.Forge, 1);
			item26.RequiredItems.Add("OreBloodstone_CAH", 20);
			item26.RequiredUpgradeItems.Add("Bloodbag", 2);
			item26.RequiredUpgradeItems.Add("Stone", 4);
			item26.CraftAmount = 1;
			item26.Trade.Price = 0u;
			item26.Trade.Stack = 0u;
			item26.Trade.RequiredGlobalKey = "defeated_bonemass";
			item26.Trade.Trader = Trader.None;
			Item item27 = new Item("wildweapons", "BloodstoneBow_CAH");
			item27.Name.English("Bloodstone Bow");
			item27.Description.English("A pointy looking bow, carved out of sinister bloodstone. ");
			item27.Crafting.Add(CraftingTable.Forge, 1);
			item27.RequiredItems.Add("OreBloodstone_CAH", 20);
			item27.RequiredUpgradeItems.Add("Bloodbag", 1);
			item27.RequiredUpgradeItems.Add("Stone", 3);
			item27.CraftAmount = 1;
			item27.Trade.Price = 0u;
			item27.Trade.Stack = 0u;
			item27.Trade.RequiredGlobalKey = "defeated_bonemass";
			item27.Trade.Trader = Trader.None;
			Item item28 = new Item("wildweapons", "BloodstoneStaff_CAH");
			item28.Name.English("Bloodstone Lobber");
			item28.Description.English("A sinister magic staff, carved out of sinister bloodstone.");
			item28.Crafting.Add(CraftingTable.Forge, 1);
			item28.RequiredItems.Add("OreBloodstone_CAH", 25);
			item28.RequiredUpgradeItems.Add("Bloodbag", 4);
			item28.RequiredUpgradeItems.Add("Stone", 5);
			item28.CraftAmount = 1;
			item28.Trade.Price = 0u;
			item28.Trade.Stack = 0u;
			item28.Trade.RequiredGlobalKey = "defeated_bonemass";
			item28.Trade.Trader = Trader.None;
			Item item29 = new Item("wildweapons", "BloodstoneShield_CAH");
			item29.Name.English("Bloodstone Shield");
			item29.Description.English("A very sturdy shield, carved out of sinister bloodstone.");
			item29.Crafting.Add(CraftingTable.Forge, 1);
			item29.RequiredItems.Add("OreBloodstone_CAH", 30);
			item29.RequiredUpgradeItems.Add("Bloodbag", 2);
			item29.RequiredUpgradeItems.Add("Stone", 4);
			item29.CraftAmount = 1;
			item29.Trade.Price = 0u;
			item29.Trade.Stack = 0u;
			item29.Trade.RequiredGlobalKey = "defeated_bonemass";
			item29.Trade.Trader = Trader.None;
			Item item30 = new Item("wildweapons", "SilvercrystalGreatsword_CAH");
			item30.Name.English("Silvercrystal Greatsword");
			item30.Description.English("A large lengthy silver greatsword, enhanced and strengthened by crystal.");
			item30.Crafting.Add(CraftingTable.Forge, 1);
			item30.RequiredItems.Add("BarCrystalSteel_CAH", 25);
			item30.RequiredUpgradeItems.Add("FreezeGland", 3);
			item30.RequiredUpgradeItems.Add("Crystal", 5);
			item30.CraftAmount = 1;
			item30.Trade.Price = 0u;
			item30.Trade.Stack = 0u;
			item30.Trade.RequiredGlobalKey = "defeated_bonemass";
			item30.Trade.Trader = Trader.None;
			Item item31 = new Item("wildweapons", "SilvercrystalAxes_CAH");
			item31.Name.English("Silvercrystal Dualaxes");
			item31.Description.English("A pair of deadly frozen axes, enhanced and strengthened by crystal.");
			item31.Crafting.Add(CraftingTable.Forge, 1);
			item31.RequiredItems.Add("BarCrystalSteel_CAH", 20);
			item31.RequiredUpgradeItems.Add("FreezeGland", 3);
			item31.RequiredUpgradeItems.Add("Crystal", 5);
			item31.CraftAmount = 1;
			item31.Trade.Price = 0u;
			item31.Trade.Stack = 0u;
			item31.Trade.RequiredGlobalKey = "defeated_bonemass";
			item31.Trade.Trader = Trader.None;
			Item item32 = new Item("wildweapons", "SilvercrystalHammer_CAH");
			item32.Name.English("Silvercrystal Greatmace");
			item32.Description.English("A massive hulking silver mace, enhanced and strengthened by crystal.");
			item32.Crafting.Add(CraftingTable.Forge, 1);
			item32.RequiredItems.Add("BarCrystalSteel_CAH", 30);
			item32.RequiredUpgradeItems.Add("FreezeGland", 3);
			item32.RequiredUpgradeItems.Add("Crystal", 5);
			item32.CraftAmount = 1;
			item32.Trade.Price = 0u;
			item32.Trade.Stack = 0u;
			item32.Trade.RequiredGlobalKey = "defeated_bonemass";
			item32.Trade.Trader = Trader.None;
			Item item33 = new Item("wildweapons", "SilvercrystalDagger_CAH");
			item33.Name.English("Silvercrystal Dagger");
			item33.Description.English("An almost completely frosted over silver dagger, enhanced and strengthened by crystal.");
			item33.Crafting.Add(CraftingTable.Forge, 1);
			item33.RequiredItems.Add("BarCrystalSteel_CAH", 10);
			item33.RequiredUpgradeItems.Add("FreezeGland", 1);
			item33.RequiredUpgradeItems.Add("Crystal", 1);
			item33.CraftAmount = 1;
			item33.Trade.Price = 0u;
			item33.Trade.Stack = 0u;
			item33.Trade.RequiredGlobalKey = "defeated_bonemass";
			item33.Trade.Trader = Trader.None;
			Item item34 = new Item("wildweapons", "SilvercrystalSpear_CAH");
			item34.Name.English("Silvercrystal Spear");
			item34.Description.English("A versatile silver spear, enhanced and strengthened by crystal.");
			item34.Crafting.Add(CraftingTable.Forge, 1);
			item34.RequiredItems.Add("BarCrystalSteel_CAH", 10);
			item34.RequiredUpgradeItems.Add("FreezeGland", 2);
			item34.RequiredUpgradeItems.Add("Crystal", 2);
			item34.CraftAmount = 1;
			item34.Trade.Price = 0u;
			item34.Trade.Stack = 0u;
			item34.Trade.RequiredGlobalKey = "defeated_bonemass";
			item34.Trade.Trader = Trader.None;
			Item item35 = new Item("wildweapons", "SilvercrystalAtgeir_CAH");
			item35.Name.English("Silvercrystal Atgeir");
			item35.Description.English("A long threatening silver polearm, enhanced and strengthened by crystal.");
			item35.Crafting.Add(CraftingTable.Forge, 1);
			item35.RequiredItems.Add("BarCrystalSteel_CAH", 25);
			item35.RequiredUpgradeItems.Add("FreezeGland", 3);
			item35.RequiredUpgradeItems.Add("Crystal", 3);
			item35.CraftAmount = 1;
			item35.Trade.Price = 0u;
			item35.Trade.Stack = 0u;
			item35.Trade.RequiredGlobalKey = "defeated_bonemass";
			item35.Trade.Trader = Trader.None;
			Item item36 = new Item("wildweapons", "SilvercrystalKatars_CAH");
			item36.Name.English("Silvercrystal Katars");
			item36.Description.English("A pair of frosted silver katars, enhanced and strengthened by crystal.");
			item36.Crafting.Add(CraftingTable.Forge, 1);
			item36.RequiredItems.Add("BarCrystalSteel_CAH", 20);
			item36.RequiredUpgradeItems.Add("FreezeGland", 3);
			item36.RequiredUpgradeItems.Add("Crystal", 3);
			item36.CraftAmount = 1;
			item36.Trade.Price = 0u;
			item36.Trade.Stack = 0u;
			item36.Trade.RequiredGlobalKey = "defeated_bonemass";
			item36.Trade.Trader = Trader.None;
			Item item37 = new Item("wildweapons", "SilvercrystalBow_CAH");
			item37.Name.English("Silvercrystal Bow");
			item37.Description.English("A flexible silver bow, enhanced and strengthened by crystal.");
			item37.Crafting.Add(CraftingTable.Forge, 1);
			item37.RequiredItems.Add("BarCrystalSteel_CAH", 15);
			item37.RequiredUpgradeItems.Add("FreezeGland", 3);
			item37.RequiredUpgradeItems.Add("Crystal", 2);
			item37.CraftAmount = 1;
			item37.Trade.Price = 0u;
			item37.Trade.Stack = 0u;
			item37.Trade.RequiredGlobalKey = "defeated_bonemass";
			item37.Trade.Trader = Trader.None;
			Item item38 = new Item("wildweapons", "SilvercrystalStaff_CAH");
			item38.Name.English("Silvercrystal Staff");
			item38.Description.English("A frigid magical silver staff, enhanced and strengthened by crystal.");
			item38.Crafting.Add(CraftingTable.Forge, 1);
			item38.RequiredItems.Add("BarCrystalSteel_CAH", 20);
			item38.RequiredUpgradeItems.Add("FreezeGland", 2);
			item38.RequiredUpgradeItems.Add("Crystal", 2);
			item38.CraftAmount = 1;
			item38.Trade.Price = 0u;
			item38.Trade.Stack = 0u;
			item38.Trade.RequiredGlobalKey = "defeated_bonemass";
			item38.Trade.Trader = Trader.None;
			Item item39 = new Item("wildweapons", "SilvercrystalShield_CAH");
			item39.Name.English("Silvercrystal Greatshield");
			item39.Description.English("A sturdy and rigid silver greatshield, enhanced and strengthened by crystal.");
			item39.Crafting.Add(CraftingTable.Forge, 1);
			item39.RequiredItems.Add("BarCrystalSteel_CAH", 30);
			item39.RequiredUpgradeItems.Add("FreezeGland", 2);
			item39.RequiredUpgradeItems.Add("Crystal", 5);
			item39.CraftAmount = 1;
			item39.Trade.Price = 0u;
			item39.Trade.Stack = 0u;
			item39.Trade.RequiredGlobalKey = "defeated_bonemass";
			item39.Trade.Trader = Trader.None;
			Item item40 = new Item("wildweapons", "SoulburnDualblades_CAH");
			item40.Name.English("Aehm and Vehm");
			item40.Description.English("In life, they were sisters, always trying to help people, in death, cursed to be eternally bound to these blades...");
			item40.Crafting.Add(CraftingTable.Forge, 1);
			item40.RequiredItems.Add("BarBloodSteel_CAH", 20);
			item40.RequiredUpgradeItems.Add("JuteRed", 4);
			item40.RequiredUpgradeItems.Add("BlackMetal", 4);
			item40.CraftAmount = 1;
			item40.Trade.Price = 0u;
			item40.Trade.Stack = 0u;
			item40.Trade.RequiredGlobalKey = "defeated_bonemass";
			item40.Trade.Trader = Trader.None;
			Item item41 = new Item("wildweapons", "SoulburnGreatsword_CAH");
			item41.Name.English("Zehtfreid");
			item41.Description.English("A brother to Aehm and Vehm, in life, he was a caretaker, in death, a deadly killer...");
			item41.Crafting.Add(CraftingTable.Forge, 1);
			item41.RequiredItems.Add("BarBloodSteel_CAH", 25);
			item41.RequiredUpgradeItems.Add("JuteRed", 3);
			item41.RequiredUpgradeItems.Add("BlackMetal", 3);
			item41.CraftAmount = 1;
			item41.Trade.Price = 0u;
			item41.Trade.Stack = 0u;
			item41.Trade.RequiredGlobalKey = "defeated_bonemass";
			item41.Trade.Trader = Trader.None;
			Item item42 = new Item("wildweapons", "SoulburnAxe_CAH");
			item42.Name.English("Vilgreed");
			item42.Description.English("In life, a greedy noble bastard, leeching off of people, in death, he does the same...");
			item42.Crafting.Add(CraftingTable.Forge, 1);
			item42.RequiredItems.Add("BarBloodSteel_CAH", 15);
			item42.RequiredUpgradeItems.Add("JuteRed", 2);
			item42.RequiredUpgradeItems.Add("BlackMetal", 2);
			item42.CraftAmount = 1;
			item42.Trade.Price = 0u;
			item42.Trade.Stack = 0u;
			item42.Trade.RequiredGlobalKey = "defeated_bonemass";
			item42.Trade.Trader = Trader.None;
			Item item43 = new Item("wildweapons", "SoulburnGreathammer_CAH");
			item43.Name.English("Xephrell");
			item43.Description.English("In life, a dreaded warrior, unbound by duty, in death, his wrath has not subsided...");
			item43.Crafting.Add(CraftingTable.Forge, 1);
			item43.RequiredItems.Add("BarBloodSteel_CAH", 30);
			item43.RequiredUpgradeItems.Add("JuteRed", 5);
			item43.RequiredUpgradeItems.Add("BlackMetal", 5);
			item43.CraftAmount = 1;
			item43.Trade.Price = 0u;
			item43.Trade.Stack = 0u;
			item43.Trade.RequiredGlobalKey = "defeated_bonemass";
			item43.Trade.Trader = Trader.None;
			Item item44 = new Item("wildweapons", "SoulburnDaggers_CAH");
			item44.Name.English("Nilvein");
			item44.Description.English("In life, a pair of twins, conjoined forever, in death, split apart, begging to be complete...");
			item44.Crafting.Add(CraftingTable.Forge, 1);
			item44.RequiredItems.Add("BarBloodSteel_CAH", 20);
			item44.RequiredUpgradeItems.Add("JuteRed", 4);
			item44.RequiredUpgradeItems.Add("BlackMetal", 4);
			item44.CraftAmount = 1;
			item44.Trade.Price = 0u;
			item44.Trade.Stack = 0u;
			item44.Trade.RequiredGlobalKey = "defeated_bonemass";
			item44.Trade.Trader = Trader.None;
			Item item45 = new Item("wildweapons", "SoulburnSpear_CAH");
			item45.Name.English("Narkava");
			item45.Description.English("In life, a sinister woman, deceiving all, and in death, her poignant attitude remains...");
			item45.Crafting.Add(CraftingTable.Forge, 1);
			item45.RequiredItems.Add("BarBloodSteel_CAH", 15);
			item45.RequiredUpgradeItems.Add("JuteRed", 3);
			item45.RequiredUpgradeItems.Add("BlackMetal", 3);
			item45.CraftAmount = 1;
			item45.Trade.Price = 0u;
			item45.Trade.Stack = 0u;
			item45.Trade.RequiredGlobalKey = "defeated_bonemass";
			item45.Trade.Trader = Trader.None;
			Item item46 = new Item("wildweapons", "SoulburnScythe_CAH");
			item46.Name.English("Ravnus");
			item46.Description.English("In life, she was an executioner, a lawful judge, in death, still judging sinners...");
			item46.Crafting.Add(CraftingTable.Forge, 1);
			item46.RequiredItems.Add("BarBloodSteel_CAH", 30);
			item46.RequiredUpgradeItems.Add("JuteRed", 5);
			item46.RequiredUpgradeItems.Add("BlackMetal", 5);
			item46.CraftAmount = 1;
			item46.Trade.Price = 0u;
			item46.Trade.Stack = 0u;
			item46.Trade.RequiredGlobalKey = "defeated_bonemass";
			item46.Trade.Trader = Trader.None;
			Item item47 = new Item("wildweapons", "SoulburnBow_CAH");
			item47.Name.English("Rellugon");
			item47.Description.English("In life, she hunted for a living, challenging ever fearsome beasts, in death, she is nothing more than a beast...");
			item47.Crafting.Add(CraftingTable.Forge, 1);
			item47.RequiredItems.Add("BarBloodSteel_CAH", 15);
			item47.RequiredUpgradeItems.Add("JuteRed", 3);
			item47.RequiredUpgradeItems.Add("BlackMetal", 3);
			item47.CraftAmount = 1;
			item47.Trade.Price = 0u;
			item47.Trade.Stack = 0u;
			item47.Trade.RequiredGlobalKey = "defeated_bonemass";
			item47.Trade.Trader = Trader.None;
			Item item48 = new Item("wildweapons", "SoulburnCrossbow_CAH");
			item48.Name.English("Kazarax");
			item48.Description.English("In life, he was a sniper, assassinating foes from afar, in death, he shoots, no longer in control... ");
			item48.Crafting.Add(CraftingTable.Forge, 1);
			item48.RequiredItems.Add("BarBloodSteel_CAH", 25);
			item48.RequiredUpgradeItems.Add("JuteRed", 3);
			item48.RequiredUpgradeItems.Add("BlackMetal", 3);
			item48.CraftAmount = 1;
			item48.Trade.Price = 0u;
			item48.Trade.Stack = 0u;
			item48.Trade.RequiredGlobalKey = "defeated_bonemass";
			item48.Trade.Trader = Trader.None;
			Item item49 = new Item("wildweapons", "SoulburnShield_CAH");
			item49.Name.English("Lidruvix");
			item49.Description.English("In life, he was a war hero, feared by all as the bloody vanguard, in death, nothing but a tool...");
			item49.Crafting.Add(CraftingTable.Forge, 1);
			item49.RequiredItems.Add("BarBloodSteel_CAH", 30);
			item49.RequiredUpgradeItems.Add("JuteRed", 5);
			item49.RequiredUpgradeItems.Add("BlackMetal", 5);
			item49.CraftAmount = 1;
			item49.Trade.Price = 0u;
			item49.Trade.Stack = 0u;
			item49.Trade.RequiredGlobalKey = "defeated_bonemass";
			item49.Trade.Trader = Trader.None;
			Item item50 = new Item("wildweapons", "SuccubineKatana_CAH");
			item50.Name.English("Succubine Katana");
			item50.Description.English("A demonic and terrifying katana, forged from a sinister and malefic steel...");
			item50.Crafting.Add(CraftingTable.BlackForge, 1);
			item50.RequiredItems.Add("BarSuccubineSteel_CAH", 30);
			item50.RequiredUpgradeItems.Add("Eitr", 5);
			item50.RequiredUpgradeItems.Add("BlackMetal", 5);
			item50.CraftAmount = 1;
			item50.Trade.Price = 0u;
			item50.Trade.Stack = 0u;
			item50.Trade.RequiredGlobalKey = "defeated_bonemass";
			item50.Trade.Trader = Trader.None;
			Item item51 = new Item("wildweapons", "SuccubineGreatsword_CAH");
			item51.Name.English("Succubine Greatsword");
			item51.Description.English("A fearsome deadly greatsword forged from a sinister and malefic steel...");
			item51.Crafting.Add(CraftingTable.BlackForge, 1);
			item51.RequiredItems.Add("BarSuccubineSteel_CAH", 30);
			item51.RequiredUpgradeItems.Add("Eitr", 5);
			item51.RequiredUpgradeItems.Add("BlackMetal", 5);
			item51.CraftAmount = 1;
			item51.Trade.Price = 0u;
			item51.Trade.Stack = 0u;
			item51.Trade.RequiredGlobalKey = "defeated_bonemass";
			item51.Trade.Trader = Trader.None;
			Item item52 = new Item("wildweapons", "SuccubineGreataxe_CAH");
			item52.Name.English("Succubine Greataxe");
			item52.Description.English("A hefty and vile greataxe, forged from a sinister and malefic steel...");
			item52.Crafting.Add(CraftingTable.BlackForge, 1);
			item52.RequiredItems.Add("BarSuccubineSteel_CAH", 30);
			item52.RequiredUpgradeItems.Add("Eitr", 5);
			item52.RequiredUpgradeItems.Add("BlackMetal", 5);
			item52.CraftAmount = 1;
			item52.Trade.Price = 0u;
			item52.Trade.Stack = 0u;
			item52.Trade.RequiredGlobalKey = "defeated_bonemass";
			item52.Trade.Trader = Trader.None;
			Item item53 = new Item("wildweapons", "SuccubineMace_CAH");
			item53.Name.English("Succubine Mace");
			item53.Description.English("A lightweight, yet dangerously tough mace, forged from a sinister and malefic steel...");
			item53.Crafting.Add(CraftingTable.BlackForge, 1);
			item53.RequiredItems.Add("BarSuccubineSteel_CAH", 15);
			item53.RequiredUpgradeItems.Add("Eitr", 2);
			item53.RequiredUpgradeItems.Add("BlackMetal", 4);
			item53.CraftAmount = 1;
			item53.Trade.Price = 0u;
			item53.Trade.Stack = 0u;
			item53.Trade.RequiredGlobalKey = "defeated_bonemass";
			item53.Trade.Trader = Trader.None;
			Item item54 = new Item("wildweapons", "SuccubineDagger_CAH");
			item54.Name.English("Succubine Dagger");
			item54.Description.English("A sleek, yet slighty demonic dagger, forged from a sinister and malefic steel...");
			item54.Crafting.Add(CraftingTable.BlackForge, 1);
			item54.RequiredItems.Add("BarSuccubineSteel_CAH", 10);
			item54.RequiredUpgradeItems.Add("Eitr", 2);
			item54.RequiredUpgradeItems.Add("BlackMetal", 2);
			item54.CraftAmount = 1;
			item54.Trade.Price = 0u;
			item54.Trade.Stack = 0u;
			item54.Trade.RequiredGlobalKey = "defeated_bonemass";
			item54.Trade.Trader = Trader.None;
			Item item55 = new Item("wildweapons", "SuccubineSpear_CAH");
			item55.Name.English("Succubine Spear");
			item55.Description.English("An eerie and frightful spear, forged from a sinister and malefic steel...");
			item55.Crafting.Add(CraftingTable.BlackForge, 1);
			item55.RequiredItems.Add("BarSuccubineSteel_CAH", 15);
			item55.RequiredUpgradeItems.Add("Eitr", 2);
			item55.RequiredUpgradeItems.Add("BlackMetal", 2);
			item55.CraftAmount = 1;
			item55.Trade.Price = 0u;
			item55.Trade.Stack = 0u;
			item55.Trade.RequiredGlobalKey = "defeated_bonemass";
			item55.Trade.Trader = Trader.None;
			Item item56 = new Item("wildweapons", "SuccubineScythe_CAH");
			item56.Name.English("Succubine Scythe");
			item56.Description.English("A wicked and deadly scythe,  forged from a sinister and malefic steel...");
			item56.Crafting.Add(CraftingTable.BlackForge, 1);
			item56.RequiredItems.Add("BarSuccubineSteel_CAH", 25);
			item56.RequiredUpgradeItems.Add("Eitr", 3);
			item56.RequiredUpgradeItems.Add("BlackMetal", 3);
			item56.CraftAmount = 1;
			item56.Trade.Price = 0u;
			item56.Trade.Stack = 0u;
			item56.Trade.RequiredGlobalKey = "defeated_bonemass";
			item56.Trade.Trader = Trader.None;
			Item item57 = new Item("wildweapons", "SuccubineSlicers_CAH");
			item57.Name.English("Succubine Slicers");
			item57.Description.English("A pair of dangerous wristblades, forged from a sinister and malefic steel...");
			item57.Crafting.Add(CraftingTable.BlackForge, 1);
			item57.RequiredItems.Add("BarSuccubineSteel_CAH", 20);
			item57.RequiredUpgradeItems.Add("Eitr", 5);
			item57.RequiredUpgradeItems.Add("BlackMetal", 5);
			item57.CraftAmount = 1;
			item57.Trade.Price = 0u;
			item57.Trade.Stack = 0u;
			item57.Trade.RequiredGlobalKey = "defeated_bonemass";
			item57.Trade.Trader = Trader.None;
			Item item58 = new Item("wildweapons", "SuccubineBow_CAH");
			item58.Name.English("Succubine Greatbow");
			item58.Description.English("A deadly and precise bow, forged from a sinister and malefic steel...");
			item58.Crafting.Add(CraftingTable.BlackForge, 1);
			item58.RequiredItems.Add("BarSuccubineSteel_CAH", 25);
			item58.RequiredUpgradeItems.Add("Eitr", 3);
			item58.RequiredUpgradeItems.Add("BlackMetal", 3);
			item58.CraftAmount = 1;
			item58.Trade.Price = 0u;
			item58.Trade.Stack = 0u;
			item58.Trade.RequiredGlobalKey = "defeated_bonemass";
			item58.Trade.Trader = Trader.None;
			Item item59 = new Item("wildweapons", "SuccubineRifle_CAH");
			item59.Name.English("Succubine Rifle");
			item59.Description.English("A sleek magitech rifle, forged from a sinister and malefic steel...");
			item59.Crafting.Add(CraftingTable.BlackForge, 1);
			item59.RequiredItems.Add("BarSuccubineSteel_CAH", 20);
			item59.RequiredUpgradeItems.Add("Eitr", 5);
			item59.RequiredUpgradeItems.Add("BlackMetal", 2);
			item59.CraftAmount = 1;
			item59.Trade.Price = 0u;
			item59.Trade.Stack = 0u;
			item59.Trade.RequiredGlobalKey = "defeated_bonemass";
			item59.Trade.Trader = Trader.None;
			Item item60 = new Item("wildweapons", "SuccubineShield_CAH");
			item60.Name.English("Succubine Shield");
			item60.Description.English("An extremely sturdy shield, forged from a sinister and malefic steel...");
			item60.Crafting.Add(CraftingTable.BlackForge, 1);
			item60.RequiredItems.Add("BarSuccubineSteel_CAH", 25);
			item60.RequiredUpgradeItems.Add("Eitr", 3);
			item60.RequiredUpgradeItems.Add("BlackMetal", 5);
			item60.CraftAmount = 1;
			item60.Trade.Price = 0u;
			item60.Trade.Stack = 0u;
			item60.Trade.RequiredGlobalKey = "defeated_bonemass";
			item60.Trade.Trader = Trader.None;
			Item item61 = new Item("wildweapons", "VolcanoKatana_CAH");
			item61.Name.English("Volcanic Katana");
			item61.Description.English("A sleek and versatile katana, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item61.Crafting.Add(CraftingTable.BlackForge, 1);
			item61.RequiredItems.Add("BarVolcanicSteel_CAH", 15);
			item61.RequiredUpgradeItems.Add("CharredBone", 3);
			item61.RequiredUpgradeItems.Add("ProustitePowder", 3);
			item61.CraftAmount = 1;
			item61.Trade.Price = 0u;
			item61.Trade.Stack = 0u;
			item61.Trade.RequiredGlobalKey = "defeated_bonemass";
			item61.Trade.Trader = Trader.None;
			Item item62 = new Item("wildweapons", "VolcanoGreatsword_CAH");
			item62.Name.English("Volcanic Greatblade");
			item62.Description.English("A massive greatblade, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item62.Crafting.Add(CraftingTable.BlackForge, 1);
			item62.RequiredItems.Add("BarVolcanicSteel_CAH", 35);
			item62.RequiredUpgradeItems.Add("CharredBone", 5);
			item62.RequiredUpgradeItems.Add("ProustitePowder", 5);
			item62.CraftAmount = 1;
			item62.Trade.Price = 0u;
			item62.Trade.Stack = 0u;
			item62.Trade.RequiredGlobalKey = "defeated_bonemass";
			item62.Trade.Trader = Trader.None;
			Item item63 = new Item("wildweapons", "VolcanoGreataxe_CAH");
			item63.Name.English("Volcanic Greataxe");
			item63.Description.English("A massive cleaving greataxe, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item63.Crafting.Add(CraftingTable.BlackForge, 1);
			item63.RequiredItems.Add("BarVolcanicSteel_CAH", 30);
			item63.RequiredUpgradeItems.Add("CharredBone", 5);
			item63.RequiredUpgradeItems.Add("ProustitePowder", 5);
			item63.CraftAmount = 1;
			item63.Trade.Price = 0u;
			item63.Trade.Stack = 0u;
			item63.Trade.RequiredGlobalKey = "defeated_bonemass";
			item63.Trade.Trader = Trader.None;
			Item item64 = new Item("wildweapons", "VolcanoGreathammer_CAH");
			item64.Name.English("Volcanic Greathammer");
			item64.Description.English("A massive deadly greathammer, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item64.Crafting.Add(CraftingTable.BlackForge, 1);
			item64.RequiredItems.Add("BarVolcanicSteel_CAH", 35);
			item64.RequiredUpgradeItems.Add("CharredBone", 5);
			item64.RequiredUpgradeItems.Add("ProustitePowder", 5);
			item64.CraftAmount = 1;
			item64.Trade.Price = 0u;
			item64.Trade.Stack = 0u;
			item64.Trade.RequiredGlobalKey = "defeated_bonemass";
			item64.Trade.Trader = Trader.None;
			Item item65 = new Item("wildweapons", "VolcanoDagger_CAH");
			item65.Name.English("Volcanic Dagger");
			item65.Description.English("A spiny boned dagger, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item65.Crafting.Add(CraftingTable.BlackForge, 1);
			item65.RequiredItems.Add("BarVolcanicSteel_CAH", 10);
			item65.RequiredUpgradeItems.Add("CharredBone", 2);
			item65.RequiredUpgradeItems.Add("ProustitePowder", 2);
			item65.CraftAmount = 1;
			item65.Trade.Price = 0u;
			item65.Trade.Stack = 0u;
			item65.Trade.RequiredGlobalKey = "defeated_bonemass";
			item65.Trade.Trader = Trader.None;
			Item item66 = new Item("wildweapons", "VolcanoCleavers_CAH");
			item66.Name.English("Volcanic Cleavers");
			item66.Description.English("A rough pair of explosive cleavers, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item66.Crafting.Add(CraftingTable.BlackForge, 1);
			item66.RequiredItems.Add("BarVolcanicSteel_CAH", 20);
			item66.RequiredUpgradeItems.Add("CharredBone", 5);
			item66.RequiredUpgradeItems.Add("ProustitePowder", 5);
			item66.CraftAmount = 1;
			item66.Trade.Price = 0u;
			item66.Trade.Stack = 0u;
			item66.Trade.RequiredGlobalKey = "defeated_bonemass";
			item66.Trade.Trader = Trader.None;
			Item item67 = new Item("wildweapons", "VolcanoPike_CAH");
			item67.Name.English("Volcanic Pike");
			item67.Description.English("A lethal pronged pike, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item67.Crafting.Add(CraftingTable.BlackForge, 1);
			item67.RequiredItems.Add("BarVolcanicSteel_CAH", 25);
			item67.RequiredUpgradeItems.Add("CharredBone", 3);
			item67.RequiredUpgradeItems.Add("ProustitePowder", 3);
			item67.CraftAmount = 1;
			item67.Trade.Price = 0u;
			item67.Trade.Stack = 0u;
			item67.Trade.RequiredGlobalKey = "defeated_bonemass";
			item67.Trade.Trader = Trader.None;
			Item item68 = new Item("wildweapons", "VolcanoGuantlets_CAH");
			item68.Name.English("Volcanic Gauntlets");
			item68.Description.English("A pair of brutal molten gauntlets, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item68.Crafting.Add(CraftingTable.BlackForge, 1);
			item68.RequiredItems.Add("BarVolcanicSteel_CAH", 20);
			item68.RequiredUpgradeItems.Add("CharredBone", 4);
			item68.RequiredUpgradeItems.Add("ProustitePowder", 4);
			item68.CraftAmount = 1;
			item68.Trade.Price = 0u;
			item68.Trade.Stack = 0u;
			item68.Trade.RequiredGlobalKey = "defeated_bonemass";
			item68.Trade.Trader = Trader.None;
			Item item69 = new Item("wildweapons", "VolcanicBow_CAH");
			item69.Name.English("Volcanic Greatbow");
			item69.Description.English("A primal molten bow, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item69.Crafting.Add(CraftingTable.BlackForge, 1);
			item69.RequiredItems.Add("BarVolcanicSteel_CAH", 25);
			item69.RequiredUpgradeItems.Add("CharredBone", 5);
			item69.RequiredUpgradeItems.Add("ProustitePowder", 5);
			item69.CraftAmount = 1;
			item69.Trade.Price = 0u;
			item69.Trade.Stack = 0u;
			item69.Trade.RequiredGlobalKey = "defeated_bonemass";
			item69.Trade.Trader = Trader.None;
			Item item70 = new Item("wildweapons", "VolcanoLauncher_CAH");
			item70.Name.English("Volcanic Launcher");
			item70.Description.English("A fearsome lava blasting launcher, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item70.Crafting.Add(CraftingTable.BlackForge, 1);
			item70.RequiredItems.Add("BarVolcanicSteel_CAH", 25);
			item70.RequiredUpgradeItems.Add("CharredBone", 5);
			item70.RequiredUpgradeItems.Add("ProustitePowder", 5);
			item70.CraftAmount = 1;
			item70.Trade.Price = 0u;
			item70.Trade.Stack = 0u;
			item70.Trade.RequiredGlobalKey = "defeated_bonemass";
			item70.Trade.Trader = Trader.None;
			Item item71 = new Item("wildweapons", "VolcanoBuckler_CAH");
			item71.Name.English("Volcanic Buckler");
			item71.Description.English("A slim and versatile buckler, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item71.Crafting.Add(CraftingTable.BlackForge, 1);
			item71.RequiredItems.Add("BarVolcanicSteel_CAH", 10);
			item71.RequiredUpgradeItems.Add("CharredBone", 2);
			item71.RequiredUpgradeItems.Add("ProustitePowder", 2);
			item71.CraftAmount = 1;
			item71.Trade.Price = 0u;
			item71.Trade.Stack = 0u;
			item71.Trade.RequiredGlobalKey = "defeated_bonemass";
			item71.Trade.Trader = Trader.None;
			Item item72 = new Item("wildweapons", "VolcanoShield_CAH");
			item72.Name.English("Volcanic Shield");
			item72.Description.English("A bulky and robust shield, forged from malleable and tough magmatic alloy, its warm to the touch...");
			item72.Crafting.Add(CraftingTable.BlackForge, 1);
			item72.RequiredItems.Add("BarVolcanicSteel_CAH", 20);
			item72.RequiredUpgradeItems.Add("CharredBone", 4);
			item72.RequiredUpgradeItems.Add("ProustitePowder", 4);
			item72.CraftAmount = 1;
			item72.Trade.Price = 0u;
			item72.Trade.Stack = 0u;
			item72.Trade.RequiredGlobalKey = "defeated_bonemass";
			item72.Trade.Trader = Trader.None;
			Item item73 = new Item("wildweapons", "AlloyFlintbone_CAH");
			item73.Name.English("Flintbone Alloy");
			item73.Description.English("A solid alloy made from flint and bone, easy to work with using only primitive tools.");
			item73.Crafting.Add(CraftingTable.Workbench, 1);
			item73.RequiredItems.Add("BoneFragments", 5);
			item73.RequiredItems.Add("Flint", 5);
			item73.CraftAmount = 10;
			item73.Trade.Price = 0u;
			item73.Trade.Stack = 0u;
			item73.Trade.RequiredGlobalKey = "defeated_bonemass";
			item73.Trade.Trader = Trader.None;
			Item item74 = new Item("wildweapons", "BarElderSteel_CAH");
			item74.Name.English("Eldersteel");
			item74.Description.English("A tough and versatile steel forged from forest energy and primitive metals, requires a bit more finesse to use.");
			item74.Crafting.Add(CraftingTable.Forge, 1);
			item74.RequiredItems.Add("AncientSeed", 1);
			item74.RequiredItems.Add("Tin", 5);
			item74.CraftAmount = 10;
			item74.Trade.Price = 0u;
			item74.Trade.Stack = 0u;
			item74.Trade.RequiredGlobalKey = "defeated_bonemass";
			item74.Trade.Trader = Trader.None;
			Item item75 = new Item("wildweapons", "BarCrystalSteel_CAH");
			item75.Name.English("Crystalsilver");
			item75.Description.English("A refined silver alloy, with the crystals holding it all together, it becomes a frigid and potent steel, ready to forge.");
			item75.Trade.Price = 0u;
			item75.Trade.Stack = 0u;
			item75.Trade.RequiredGlobalKey = "defeated_bonemass";
			item75.Trade.Trader = Trader.None;
			new Conversion(item75)
			{
				Input = "OreSilvercrystal_CAH",
				Piece = ConversionPiece.Smelter
			};
			Item item76 = new Item("wildweapons", "BarBloodSteel_CAH");
			item76.Name.English("Bloodsteel");
			item76.Description.English("An extremely dense and tensile steel, very difficult to work with, and requires extreme firepower to even create, it radiates with a deadly energy...");
			item76.Trade.Price = 0u;
			item76.Trade.Stack = 0u;
			item76.Trade.RequiredGlobalKey = "defeated_bonemass";
			item76.Trade.Trader = Trader.None;
			new Conversion(item76)
			{
				Input = "OreBloodstone_CAH",
				Piece = ConversionPiece.BlastFurnace
			};
			Item item77 = new Item("wildweapons", "BarSuccubineSteel_CAH");
			item77.Name.English("Succubine Steel");
			item77.Description.English("A demonic steel in nature, straight from the hells, capable of forging at levels never before seen, its strength, flexibility, and durability are nearly unmatched.");
			item77.Crafting.Add(CraftingTable.BlackForge, 1);
			item77.RequiredItems.Add("BarBloodSteel_CAH", 10);
			item77.RequiredItems.Add("Eitr", 10);
			item77.RequiredItems.Add("BlackCore", 1);
			item77.CraftAmount = 40;
			item77.Trade.Price = 0u;
			item77.Trade.Stack = 0u;
			item77.Trade.RequiredGlobalKey = "defeated_bonemass";
			item77.Trade.Trader = Trader.None;
			Item item78 = new Item("wildweapons", "BarVolcanicSteel_CAH");
			item78.Name.English("Magmatic Alloy");
			item78.Description.English("A material quite literally forged from a volcano, its not only tough, but when beaten or battered, it simply melts back into shape...");
			item78.Crafting.Add(CraftingTable.BlackForge, 1);
			item78.RequiredItems.Add("MoltenCore", 1);
			item78.RequiredItems.Add("Grausten", 50);
			item78.RequiredItems.Add("CharredBone", 50);
			item78.CraftAmount = 50;
			item78.Trade.Price = 0u;
			item78.Trade.Stack = 0u;
			item78.Trade.RequiredGlobalKey = "defeated_bonemass";
			item78.Trade.Trader = Trader.None;
			Item item79 = new Item("wildweapons", "BarRoyalSteel_CAH");
			item79.Name.English("Regal Steel");
			item79.Description.English("The pinnacle of steels, unrivaled and absolute, anything forged of regal steel is sure to be the absolute strongest.");
			item79.Crafting.Add(CraftingTable.BlackForge, 1);
			item79.RequiredItems.Add("SwordCheat", 1);
			item79.CraftAmount = 10;
			item79.Trade.Price = 0u;
			item79.Trade.Stack = 0u;
			item79.Trade.RequiredGlobalKey = "defeated_bonemass";
			item79.Trade.Trader = Trader.None;
			Item item80 = new Item("wildweapons", "OreBloodstone_CAH");
			item80.Name.English("Raw Bloodstone Ore");
			item80.Description.English("A very durable mixture of materials, with even a little skill, you could carve out a potent weapon");
			item80.Crafting.Add(CraftingTable.Forge, 1);
			item80.RequiredItems.Add("Stone", 10);
			item80.RequiredItems.Add("IronScrap", 2);
			item80.RequiredItems.Add("Bloodbag", 2);
			item80.CraftAmount = 5;
			item80.Trade.Price = 0u;
			item80.Trade.Stack = 0u;
			item80.Trade.RequiredGlobalKey = "defeated_bonemass";
			item80.Trade.Trader = Trader.None;
			Item item81 = new Item("wildweapons", "OreSilvercrystal_CAH");
			item81.Name.English("Raw Silvercrystal Ore");
			item81.Description.English("An experimental alloy made by mixing together silver and crystal, it needs to be further refined to be of use.");
			item81.Crafting.Add(CraftingTable.Forge, 1);
			item81.RequiredItems.Add("SilverOre", 10);
			item81.RequiredItems.Add("Crystal", 5);
			item81.CraftAmount = 20;
			item81.Trade.Price = 0u;
			item81.Trade.Stack = 0u;
			item81.Trade.RequiredGlobalKey = "defeated_bonemass";
			item81.Trade.Trader = Trader.None;
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_OrcSpear");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_OrcStaffFlame");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_ForestSpear");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_ForestChakram");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_BloodstoneStaffClumps");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_SilverCrystalSpear");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_CrystalStaffIce");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_Soulburn");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_Narkava");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_Succubine");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_SuccubineSpear");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Projectile_VolcanoLauncher");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Block_Silver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Block_GreenSilver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Block_RedSilver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Block_BlueSilver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Block_Soulburn");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Block_PinkPurple");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Block_Volcano");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "DOT_OrcBlood");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "DOT_ElderCurse");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "DOT_Bloodstone");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "DOT_CrystalSilver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "DOT_SoulBurn");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "DOT_Succubine");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "DOT_VolcanoFlame");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Shot_Silver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Shot_GreenSilver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Shot_RedSilver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Shot_BlueSilver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Shot_Soulburn");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Shot_Succubine");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Shot_Volcano");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Hit_Silver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Hit_GreenSilver");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Hit_Bloodstone");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Hit_Silvercrystal");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Hit_Soulburn");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Hit_Succubine");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Hit_Volcano");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Magic_Fireboom");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Magic_Iceboom");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Magic_SoulburnExplosion");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Magic_FireboomVolcano");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "Magic_VolcanoExplosion");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_Soulstrike");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_Grenade_Launch");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_Basic_Explosion");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_crossbow_fire");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_gun_fire");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_arrow_hit");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_atgeir_attack");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_axe_hit");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_battleaxe_swing_wosh");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_bomb_throw");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_bow_draw");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_bow_shot");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_claw_swing");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_club_hit");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_club_swing");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_firestaff_launch");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_knife_swing");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_kromsword_swing");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_metal_blocked");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_metal_shield_blocked");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_spear_hit");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_spear_poke");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_spear_throw");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_sword_hit");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_sword_swing");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_unarmed_swing");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_wood_blocked");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_silvermace_hit");
			PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("wildweapons"), "WW_axe_swing");
			Assembly executingAssembly = Assembly.GetExecutingAssembly();
			_harmony.PatchAll(executingAssembly);
			SetupWatcher();
		}

		private void OnDestroy()
		{
			((BaseUnityPlugin)this).Config.Save();
		}

		private void SetupWatcher()
		{
			FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName);
			fileSystemWatcher.Changed += ReadConfigValues;
			fileSystemWatcher.Created += ReadConfigValues;
			fileSystemWatcher.Renamed += ReadConfigValues;
			fileSystemWatcher.IncludeSubdirectories = true;
			fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject;
			fileSystemWatcher.EnableRaisingEvents = true;
		}

		private void ReadConfigValues(object sender, FileSystemEventArgs e)
		{
			if (!File.Exists(ConfigFileFullPath))
			{
				return;
			}
			try
			{
				WildWeaponsLogger.LogDebug((object)"ReadConfigValues called");
				((BaseUnityPlugin)this).Config.Reload();
			}
			catch
			{
				WildWeaponsLogger.LogError((object)("There was an issue loading your " + ConfigFileName));
				WildWeaponsLogger.LogError((object)"Please check your config entries for spelling and format!");
			}
		}

		private ConfigEntry<T> config<[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			ConfigDescription val = new ConfigDescription(description.Description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags);
			ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val);
			SyncedConfigEntry<T> syncedConfigEntry = ConfigSync.AddConfigEntry<T>(val2);
			syncedConfigEntry.SynchronizedConfig = synchronizedSetting;
			return val2;
		}

		private ConfigEntry<T> config<[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Expected O, but got Unknown
			return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting);
		}

		static WildWeaponsPlugin()
		{
			string configPath = Paths.ConfigPath;
			char directorySeparatorChar = Path.DirectorySeparatorChar;
			ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName;
			ConnectionError = "";
			WildWeaponsLogger = Logger.CreateLogSource("WildWeapons");
			ConfigSync = new ConfigSync("catharis.WildWeapons")
			{
				DisplayName = "WildWeapons",
				CurrentVersion = "2.9.99",
				MinimumRequiredVersion = "2.9.99"
			};
			_detailedConfig = null;
			_serverConfigLocked = null;
			_recipeIsActiveConfig = null;
		}
	}
	public static class KeyboardExtensions
	{
		public static bool IsKeyDown(this KeyboardShortcut shortcut)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			return (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKeyDown(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
		}

		public static bool IsKeyHeld(this KeyboardShortcut shortcut)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			return (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKey(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
		}
	}
	[HarmonyPatch(typeof(ZNet), "OnNewConnection")]
	public static class RegisterAndCheckVersion
	{
		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
		private static void Prefix(ZNetPeer peer, ref ZNet __instance)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			WildWeaponsPlugin.WildWeaponsLogger.LogDebug((object)"Registering version RPC handler");
			peer.m_rpc.Register<ZPackage>("WildWeapons_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_ItemManagerModTemplate_Version);
			WildWeaponsPlugin.WildWeaponsLogger.LogInfo((object)"Invoking version check");
			ZPackage val = new ZPackage();
			val.Write("2.9.99");
			peer.m_rpc.Invoke("WildWeapons_VersionCheck", new object[1] { val });
		}
	}
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	[HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")]
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	public static class VerifyClient
	{
		private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance)
		{
			if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc))
			{
				return true;
			}
			WildWeaponsPlugin.WildWeaponsLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting"));
			rpc.Invoke("Error", new object[1] { 3 });
			return false;
		}

		private static void Postfix(ZNet __instance)
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "WildWeaponsRequestAdminSync", new object[1] { (object)new ZPackage() });
		}
	}
	[HarmonyPatch(typeof(FejdStartup), "ShowConnectError")]
	public class ShowConnectionError
	{
		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
		private static void Postfix(FejdStartup __instance)
		{
			if (__instance.m_connectionFailedPanel.activeSelf)
			{
				__instance.m_connectionFailedError.fontSizeMax = 25f;
				__instance.m_connectionFailedError.fontSizeMin = 15f;
				TMP_Text connectionFailedError = __instance.m_connectionFailedError;
				connectionFailedError.text = connectionFailedError.text + "\n" + WildWeaponsPlugin.ConnectionError;
			}
		}
	}
	[HarmonyPatch(typeof(ZNet), "Disconnect")]
	public static class RemoveDisconnectedPeerFromVerified
	{
		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
		private static void Prefix(ZNetPeer peer, ref ZNet __instance)
		{
			if (__instance.IsServer())
			{
				WildWeaponsPlugin.WildWeaponsLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list"));
				RpcHandlers.ValidatedPeers.Remove(peer.m_rpc);
			}
		}
	}
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	public static class RpcHandlers
	{
		public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>();

		public static void RPC_ItemManagerModTemplate_Version(ZRpc rpc, ZPackage pkg)
		{
			string text = pkg.ReadString();
			WildWeaponsPlugin.WildWeaponsLogger.LogInfo((object)("Version check, local: 2.9.99,  remote: " + text));
			if (text != "2.9.99")
			{
				WildWeaponsPlugin.ConnectionError = "WildWeapons Installed: 2.9.99\n Needed: " + text;
				if (ZNet.instance.IsServer())
				{
					WildWeaponsPlugin.WildWeaponsLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting..."));
					rpc.Invoke("Error", new object[1] { 3 });
				}
			}
			else if (!ZNet.instance.IsServer())
			{
				WildWeaponsPlugin.WildWeaponsLogger.LogInfo((object)"Received same version from server!");
			}
			else
			{
				WildWeaponsPlugin.WildWeaponsLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list"));
				ValidatedPeers.Add(rpc);
			}
		}

		public static string ComputeHashForMod()
		{
			using SHA256 sHA = SHA256.Create();
			byte[] array = sHA.ComputeHash(File.ReadAllBytes(Assembly.GetExecutingAssembly().Location));
			StringBuilder stringBuilder = new StringBuilder();
			byte[] array2 = array;
			foreach (byte b in array2)
			{
				stringBuilder.Append(b.ToString("X2"));
			}
			return stringBuilder.ToString();
		}
	}
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	[HarmonyPatch(typeof(ZNetScene), "Awake")]
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	internal static class FixCustomAudioRouting
	{
		private static readonly string[] CustomAudioPrefabs = new string[34]
		{
			"WW_arrow_hit", "WW_atgeir_attack", "WW_axe_hit", "WW_axe_swing", "WW_Basic_Explosion", "WW_battleaxe_swing_wosh", "WW_bomb_throw", "WW_bow_draw", "WW_bow_shot", "WW_club_hit",
			"WW_claw_swing", "WW_club_swing", "WW_crossbow_fire", "WW_firestaff_launch", "WW_Grenade_Launch", "WW_gun_fire", "WW_knife_swing", "WW_kromsword_swing", "WW_metal_blocked", "WW_silvermace_hit",
			"WW_metal_shield_blocked", "WW_Soulstrike", "WW_spear_hit", "WW_spear_poke", "WW_spear_throw", "WW_sword_hit", "WW_sword_swing", "WW_unarmed_swing", "WW_wood_blocked", "Magic_Fireboom",
			"Magic_FireboomVolcano", "Magic_Iceboom", "Magic_SoulburnExplosion", "Magic_VolcanoExplosion"
		};

		private static void Postfix(ZNetScene __instance)
		{
			AudioMixerGroup val = null;
			string text = null;
			foreach (string prefabName in __instance.GetPrefabNames())
			{
				GameObject prefab = __instance.GetPrefab(prefabName);
				AudioSource val2 = ((prefab != null) ? prefab.GetComponentInChildren<AudioSource>(true) : null);
				if ((Object)(object)val2 != (Object)null && (Object)(object)val2.outputAudioMixerGroup != (Object)null)
				{
					val = val2.outputAudioMixerGroup;
					text = prefabName;
					break;
				}
			}
			if ((Object)(object)val == (Object)null)
			{
				Debug.LogWarning((object)"[WildWeapons] AudioMixerFix: could not find any valid live AudioMixerGroup reference.");
				return;
			}
			Debug.Log((object)("[WildWeapons] AudioMixerFix: using live mixer group found on '" + text + "'."));
			string[] customAudioPrefabs = CustomAudioPrefabs;
			foreach (string text2 in customAudioPrefabs)
			{
				GameObject prefab2 = __instance.GetPrefab(text2);
				if (!((Object)(object)prefab2 == (Object)null))
				{
					AudioSource[] componentsInChildren = prefab2.GetComponentsInChildren<AudioSource>(true);
					foreach (AudioSource val3 in componentsInChildren)
					{
						val3.outputAudioMixerGroup = val;
					}
				}
			}
		}
	}
}
namespace LocalizationManager
{
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	[PublicAPI]
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	public class Localizer
	{
		private static readonly Dictionary<string, Dictionary<string, Func<string>>> PlaceholderProcessors;

		private static readonly Dictionary<string, Dictionary<string, string>> loadedTexts;

		private static readonly ConditionalWeakTable<Localization, string> localizationLanguage;

		private static readonly List<WeakReference<Localization>> localizationObjects;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		private static BaseUnityPlugin _plugin;

		private static readonly List<string> fileExtensions;

		private static BaseUnityPlugin plugin
		{
			get
			{
				//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b2: Expected O, but got Unknown
				if (_plugin == null)
				{
					IEnumerable<TypeInfo> source;
					try
					{
						source = Assembly.GetExecutingAssembly().DefinedTypes.ToList();
					}
					catch (ReflectionTypeLoadException ex)
					{
						source = from t in ex.Types
							where t != null
							select t.GetTypeInfo();
					}
					_plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t)));
				}
				return _plugin;
			}
		}

		private static void UpdatePlaceholderText(Localization localization, string key)
		{
			localizationLanguage.TryGetValue(localization, out var value);
			string text = loadedTexts[value][key];
			if (PlaceholderProcessors.TryGetValue(key, out var value2))
			{
				text = value2.Aggregate(text, [<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (string current, KeyValuePair<string, Func<string>> kv) => current.Replace("{" + kv.Key + "}", kv.Value()));
			}
			localization.AddWord(key, text);
		}

		public static void AddPlaceholder<T>(string key, string placeholder, ConfigEntry<T> config, [<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(new byte[] { 2, 1, 1 })] Func<T, string> convertConfigValue = null)
		{
			if (convertConfigValue == null)
			{
				convertConfigValue = (T val) => val.ToString();
			}
			if (!PlaceholderProcessors.ContainsKey(key))
			{
				PlaceholderProcessors[key] = new Dictionary<string, Func<string>>();
			}
			config.SettingChanged += [<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (object _, EventArgs _) =>
			{
				UpdatePlaceholder();
			};
			if (loadedTexts.ContainsKey(Localization.instance.GetSelectedLanguage()))
			{
				UpdatePlaceholder();
			}
			void UpdatePlaceholder()
			{
				PlaceholderProcessors[key][placeholder] = () => convertConfigValue(config.Value);
				UpdatePlaceholderText(Localization.instance, key);
			}
		}

		public static void AddText(string key, string text)
		{
			List<WeakReference<Localization>> list = new List<WeakReference<Localization>>();
			foreach (WeakReference<Localization> localizationObject in localizationObjects)
			{
				if (localizationObject.TryGetTarget(out var target))
				{
					Dictionary<string, string> dictionary = loadedTexts[localizationLanguage.GetOrCreateValue(target)];
					if (!target.m_translations.ContainsKey(key))
					{
						dictionary[key] = text;
						target.AddWord(key, text);
					}
				}
				else
				{
					list.Add(localizationObject);
				}
			}
			foreach (WeakReference<Localization> item in list)
			{
				localizationObjects.Remove(item);
			}
		}

		public static void Load()
		{
			LoadLocalization(Localization.instance, Localization.instance.GetSelectedLanguage());
		}

		private static void LoadLocalization(Localization __instance, string language)
		{
			if (!localizationLanguage.Remove(__instance))
			{
				localizationObjects.Add(new WeakReference<Localization>(__instance));
			}
			localizationLanguage.Add(__instance, language);
			Dictionary<string, string> dictionary = new Dictionary<string, string>();
			foreach (string item in from f in Directory.GetFiles(Path.GetDirectoryName(Paths.PluginPath), plugin.Info.Metadata.Name + ".*", SearchOption.AllDirectories)
				where fileExtensions.IndexOf(Path.GetExtension(f)) >= 0
				select f)
			{
				string text = Path.GetFileNameWithoutExtension(item).Split(new char[1] { '.' })[1];
				if (dictionary.ContainsKey(text))
				{
					Debug.LogWarning((object)("Duplicate key " + text + " found for " + plugin.Info.Metadata.Name + ". The duplicate file found at " + item + " will be skipped."));
				}
				else
				{
					dictionary[text] = item;
				}
			}
			byte[] array = LoadTranslationFromAssembly("English");
			if (array == null)
			{
				throw new Exception("Found no English localizations in mod " + plugin.Info.Metadata.Name + ". Expected an embedded resource translations/English.json or translations/English.yml.");
			}
			Dictionary<string, string> dictionary2 = new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(Encoding.UTF8.GetString(array));
			if (dictionary2 == null)
			{
				throw new Exception("Localization for mod " + plugin.Info.Metadata.Name + " failed: Localization file was empty.");
			}
			string text2 = null;
			if (language != "English")
			{
				if (dictionary.ContainsKey(language))
				{
					text2 = File.ReadAllText(dictionary[language]);
				}
				else
				{
					byte[] array2 = LoadTranslationFromAssembly(language);
					if (array2 != null)
					{
						text2 = Encoding.UTF8.GetString(array2);
					}
				}
			}
			if (text2 == null && dictionary.ContainsKey("English"))
			{
				text2 = File.ReadAllText(dictionary["English"]);
			}
			if (text2 != null)
			{
				foreach (KeyValuePair<string, string> item2 in new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(text2) ?? new Dictionary<string, string>())
				{
					dictionary2[item2.Key] = item2.Value;
				}
			}
			loadedTexts[language] = dictionary2;
			foreach (KeyValuePair<string, string> item3 in dictionary2)
			{
				UpdatePlaceholderText(__instance, item3.Key);
			}
		}

		static Localizer()
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Expected O, but got Unknown
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Expected O, but got Unknown
			PlaceholderProcessors = new Dictionary<string, Dictionary<string, Func<string>>>();
			loadedTexts = new Dictionary<string, Dictionary<string, string>>();
			localizationLanguage = new ConditionalWeakTable<Localization, string>();
			localizationObjects = new List<WeakReference<Localization>>();
			fileExtensions = new List<string> { ".json", ".yml" };
			Harmony val = new Harmony("org.bepinex.helpers.LocalizationManager");
			val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "LoadCSV", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "LoadLocalization", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
		}

		[return: <201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		private static byte[] LoadTranslationFromAssembly(string language)
		{
			foreach (string fileExtension in fileExtensions)
			{
				byte[] array = ReadEmbeddedFileBytes("translations." + language + fileExtension);
				if (array != null)
				{
					return array;
				}
			}
			return null;
		}

		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(2)]
		public static byte[] ReadEmbeddedFileBytes([<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(1)] string resourceFileName, Assembly containingAssembly = null)
		{
			using MemoryStream memoryStream = new MemoryStream();
			if ((object)containingAssembly == null)
			{
				containingAssembly = Assembly.GetCallingAssembly();
			}
			string text = containingAssembly.GetManifestResourceNames().FirstOrDefault([<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (string str) => str.EndsWith(resourceFileName, StringComparison.Ordinal));
			if (text != null)
			{
				containingAssembly.GetManifestResourceStream(text)?.CopyTo(memoryStream);
			}
			return (memoryStream.Length == 0L) ? null : memoryStream.ToArray();
		}
	}
}
namespace ItemManager
{
	[PublicAPI]
	public enum CraftingTable
	{
		Disabled,
		Inventory,
		[InternalName("piece_workbench")]
		Workbench,
		[InternalName("piece_cauldron")]
		Cauldron,
		[InternalName("piece_MeadCauldron")]
		MeadCauldron,
		[InternalName("forge")]
		Forge,
		[InternalName("piece_artisanstation")]
		ArtisanTable,
		[InternalName("piece_stonecutter")]
		StoneCutter,
		[InternalName("piece_magetable")]
		MageTable,
		[InternalName("piece_preptable")]
		PrepTable,
		[InternalName("blackforge")]
		BlackForge,
		Custom
	}
	[PublicAPI]
	public enum ConversionPiece
	{
		Disabled,
		[InternalName("smelter")]
		Smelter,
		[InternalName("charcoal_kiln")]
		CharcoalKiln,
		[InternalName("blastfurnace")]
		BlastFurnace,
		[InternalName("windmill")]
		Windmill,
		[InternalName("piece_spinningwheel")]
		SpinningWheel,
		[InternalName("eitrrefinery")]
		EitrRefinery,
		Custom
	}
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	public class InternalName : Attribute
	{
		public readonly string internalName;

		public InternalName(string internalName)
		{
			this.internalName = internalName;
		}
	}
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	[PublicAPI]
	public class RequiredResourceList
	{
		public readonly List<Requirement> Requirements = new List<Requirement>();

		public bool Free = false;

		public void Add(string itemName, int amount, int quality = 0)
		{
			Requirements.Add(new Requirement
			{
				itemName = itemName,
				amount = amount,
				quality = quality
			});
		}

		public void Add(string itemName, ConfigEntry<int> amountConfig, int quality = 0)
		{
			Requirements.Add(new Requirement
			{
				itemName = itemName,
				amountConfig = amountConfig,
				quality = quality
			});
		}
	}
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	[PublicAPI]
	public class CraftingStationList
	{
		public readonly List<CraftingStationConfig> Stations = new List<CraftingStationConfig>();

		public void Add(CraftingTable table, int level)
		{
			Stations.Add(new CraftingStationConfig
			{
				Table = table,
				level = level
			});
		}

		public void Add(string customTable, int level)
		{
			Stations.Add(new CraftingStationConfig
			{
				Table = CraftingTable.Custom,
				level = level,
				custom = customTable
			});
		}
	}
	[PublicAPI]
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	public class ItemRecipe
	{
		public readonly RequiredResourceList RequiredItems = new RequiredResourceList();

		public readonly RequiredResourceList RequiredUpgradeItems = new RequiredResourceList();

		public readonly CraftingStationList Crafting = new CraftingStationList();

		public int CraftAmount = 1;

		public bool RequireOnlyOneIngredient = false;

		public float QualityResultAmountMultiplier = 1f;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		public ConfigEntryBase RecipeIsActive = null;
	}
	[PublicAPI]
	public class Trade
	{
		public Trader Trader = Trader.None;

		public uint Price = 0u;

		public uint Stack = 1u;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		public string RequiredGlobalKey = null;
	}
	[PublicAPI]
	[Flags]
	public enum Trader
	{
		None = 0,
		Haldor = 1,
		Hildir = 2
	}
	public struct Requirement
	{
		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(1)]
		public string itemName;

		public int amount;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		public ConfigEntry<int> amountConfig;

		[Description("Set to a non-zero value to apply the requirement only for a specific quality")]
		public int quality;
	}
	public struct CraftingStationConfig
	{
		public CraftingTable Table;

		public int level;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		public string custom;
	}
	[Flags]
	public enum Configurability
	{
		Disabled = 0,
		Recipe = 1,
		Stats = 2,
		Drop = 4,
		Trader = 8,
		Full = 0xF
	}
	[PublicAPI]
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	public class DropTargets
	{
		public readonly List<DropTarget> Drops = new List<DropTarget>();

		public void Add(string creatureName, float chance, int min = 1, int? max = null, bool levelMultiplier = true)
		{
			Drops.Add(new DropTarget
			{
				creature = creatureName,
				chance = chance,
				min = min,
				max = (max ?? min),
				levelMultiplier = levelMultiplier
			});
		}
	}
	public struct DropTarget
	{
		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(1)]
		public string creature;

		public int min;

		public int max;

		public float chance;

		public bool levelMultiplier;
	}
	public enum Toggle
	{
		On = 1,
		Off = 0
	}
	[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
	[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(1)]
	[PublicAPI]
	public class Item
	{
		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
		private class ItemConfig
		{
			[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(new byte[] { 2, 1 })]
			public ConfigEntry<string> craft;

			[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(new byte[] { 2, 1 })]
			public ConfigEntry<string> upgrade;

			public ConfigEntry<CraftingTable> table = null;

			public ConfigEntry<int> tableLevel = null;

			public ConfigEntry<string> customTable = null;

			[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
			public ConfigEntry<int> maximumTableLevel;

			public ConfigEntry<Toggle> requireOneIngredient = null;

			public ConfigEntry<float> qualityResultAmountMultiplier = null;
		}

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
		private class TraderConfig
		{
			public ConfigEntry<Trader> trader = null;

			public ConfigEntry<uint> price = null;

			public ConfigEntry<uint> stack = null;

			public ConfigEntry<string> requiredGlobalKey = null;
		}

		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)]
		private class RequirementQuality
		{
			public int quality;
		}

		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(2)]
		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
		private class ConfigurationManagerAttributes
		{
			[UsedImplicitly]
			public int? Order;

			[UsedImplicitly]
			public bool? Browsable;

			[UsedImplicitly]
			public string Category;

			[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(new byte[] { 2, 1 })]
			[UsedImplicitly]
			public Action<ConfigEntryBase> CustomDrawer;

			public Func<bool> browsability;
		}

		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)]
		[PublicAPI]
		public enum DamageModifier
		{
			Normal,
			Resistant,
			SlightlyResistant,
			Weak,
			Immune,
			Ignore,
			VeryResistant,
			VeryWeak,
			None
		}

		[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)]
		private delegate void setDmgFunc(ref DamageTypes dmg, float value);

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
		private class SerializedRequirements
		{
			public readonly List<Requirement> Reqs;

			public SerializedRequirements(List<Requirement> reqs)
			{
				Reqs = reqs;
			}

			public SerializedRequirements(string reqs)
				: this(reqs.Split(new char[1] { ',' }).Select([<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (string r) =>
				{
					string[] array = r.Split(new char[1] { ':' });
					int result;
					int result2;
					return new Requirement
					{
						itemName = array[0],
						amount = ((array.Length <= 1 || !int.TryParse(array[1], out result)) ? 1 : result),
						quality = ((array.Length > 2 && int.TryParse(array[2], out result2)) ? result2 : 0)
					};
				}).ToList())
			{
			}

			public override string ToString()
			{
				return string.Join(",", Reqs.Select([<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (Requirement r) => $"{r.itemName}:{r.amount}" + ((r.quality > 0) ? $":{r.quality}" : "")));
			}

			[return: <201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
			public static ItemDrop fetchByName(ObjectDB objectDB, string name)
			{
				GameObject itemPrefab = objectDB.GetItemPrefab(name);
				ItemDrop val = ((itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null);
				if ((Object)(object)val == (Object)null)
				{
					Debug.LogWarning((object)("The required item '" + name + "' does not exist."));
				}
				return val;
			}

			public static Requirement[] toPieceReqs(ObjectDB objectDB, SerializedRequirements craft, SerializedRequirements upgrade)
			{
				//IL_0100: Unknown result type (might be due to invalid IL or missing references)
				//IL_0105: Unknown result type (might be due to invalid IL or missing references)
				//IL_010d: Unknown result type (might be due to invalid IL or missing references)
				//IL_019b: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_01af: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b2: Expected O, but got Unknown
				//IL_01b7: Expected O, but got Unknown
				//IL_012c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0135: Expected O, but got Unknown
				Dictionary<string, Requirement> dictionary = craft.Reqs.Where((Requirement r) => r.itemName != "").ToDictionary((Func<Requirement, string>)([<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (Requirement r) => r.itemName), (Func<Requirement, Requirement>)([<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (Requirement r) =>
				{
					//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)
					//IL_0030: Unknown result type (might be due to invalid IL or missing references)
					//IL_0037: Unknown result type (might be due to invalid IL or missing references)
					ItemDrop val6 = ResItem(r);
					return (val6 == null) ? ((Requirement)null) : new Requirement
					{
						m_amount = (r.amountConfig?.Value ?? r.amount),
						m_resItem = val6,
						m_amountPerLevel = 0
					};
				}));
				List<Requirement> list = dictionary.Values.Where([<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (Requirement v) => v != null).ToList();
				foreach (Requirement item in upgrade.Reqs.Where((Requirement r) => r.itemName != ""))
				{
					if (item.quality > 0)
					{
						ItemDrop val = ResItem(item);
						if (val != null)
						{
							Requirement val2 = new Requirement
							{
								m_resItem = val,
								m_amountPerLevel = (item.amountConfig?.Value ?? item.amount),
								m_amount = 0
							};
							list.Add(val2);
							requirementQuality.Add(val2, new RequirementQuality
							{
								quality = item.quality
							});
						}
						continue;
					}
					if (!dictionary.TryGetValue(item.itemName, out var value) || value == null)
					{
						ItemDrop val3 = ResItem(item);
						if (val3 != null)
						{
							string itemName = item.itemName;
							Requirement val4 = new Requirement
							{
								m_resItem = val3,
								m_amount = 0
							};
							Requirement val5 = val4;
							dictionary[itemName] = val4;
							value = val5;
							list.Add(value);
						}
					}
					if (value != null)
					{
						value.m_amountPerLevel = item.amountConfig?.Value ?? item.amount;
					}
				}
				return list.ToArray();
				[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(2)]
				ItemDrop ResItem(Requirement r)
				{
					return fetchByName(objectDB, r.itemName);
				}
			}
		}

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(0)]
		private class SerializedDrop
		{
			public readonly List<DropTarget> Drops;

			public SerializedDrop(List<DropTarget> drops)
			{
				Drops = drops;
			}

			public SerializedDrop(string drops)
			{
				Drops = ((drops == "") ? ((IEnumerable<string>)Array.Empty<string>()) : ((IEnumerable<string>)drops.Split(new char[1] { ',' }))).Select([<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (string r) =>
				{
					string[] array = r.Split(new char[1] { ':' });
					if (array.Length <= 2 || !int.TryParse(array[2], out var result))
					{
						result = 1;
					}
					if (array.Length <= 3 || !int.TryParse(array[3], out var result2))
					{
						result2 = result;
					}
					bool levelMultiplier = array.Length <= 4 || array[4] != "0";
					float result3;
					return new DropTarget
					{
						creature = array[0],
						chance = ((array.Length > 1 && float.TryParse(array[1], out result3)) ? result3 : 1f),
						min = result,
						max = result2,
						levelMultiplier = levelMultiplier
					};
				}).ToList();
			}

			public override string ToString()
			{
				return string.Join(",", Drops.Select([<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(0)] (DropTarget r) => $"{r.creature}:{r.chance.ToString(CultureInfo.InvariantCulture)}:{r.min}:" + ((r.min == r.max) ? "" : $"{r.max}") + (r.levelMultiplier ? "" : ":0")));
			}

			[return: <201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
			private static Character fetchByName(ZNetScene netScene, string name)
			{
				GameObject prefab = netScene.GetPrefab(name);
				Character val = ((prefab != null) ? prefab.GetComponent<Character>() : null);
				if ((Object)(object)val == (Object)null)
				{
					Debug.LogWarning((object)("The drop target character '" + name + "' does not exist."));
				}
				return val;
			}

			public Dictionary<Character, Drop> toCharacterDrops(ZNetScene netScene, GameObject item)
			{
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_0051: Unknown result type (might be due to invalid IL or missing references)
				//IL_005d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				//IL_007a: Expected O, but got Unknown
				Dictionary<Character, Drop> dictionary = new Dictionary<Character, Drop>();
				foreach (DropTarget drop in Drops)
				{
					Character val = fetchByName(netScene, drop.creature);
					if (val != null)
					{
						dictionary[val] = new Drop
						{
							m_prefab = item,
							m_amountMin = drop.min,
							m_amountMax = drop.max,
							m_chance = drop.chance,
							m_levelMultiplier = drop.levelMultiplier
						};
					}
				}
				return dictionary;
			}
		}

		private static readonly List<Item> registeredItems = new List<Item>();

		private static readonly Dictionary<ItemDrop, Item> itemDropMap = new Dictionary<ItemDrop, Item>();

		private static Dictionary<Item, Dictionary<string, List<Recipe>>> activeRecipes = new Dictionary<Item, Dictionary<string, List<Recipe>>>();

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(new byte[] { 1, 1, 2 })]
		private static Dictionary<Recipe, ConfigEntryBase> hiddenCraftRecipes = new Dictionary<Recipe, ConfigEntryBase>();

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(new byte[] { 1, 1, 2 })]
		private static Dictionary<Recipe, ConfigEntryBase> hiddenUpgradeRecipes = new Dictionary<Recipe, ConfigEntryBase>();

		private static Dictionary<Item, Dictionary<string, ItemConfig>> itemCraftConfigs = new Dictionary<Item, Dictionary<string, ItemConfig>>();

		private static Dictionary<Item, ConfigEntry<string>> itemDropConfigs = new Dictionary<Item, ConfigEntry<string>>();

		private Dictionary<CharacterDrop, Drop> characterDrops = new Dictionary<CharacterDrop, Drop>();

		private readonly Dictionary<ConfigEntryBase, Action> statsConfigs = new Dictionary<ConfigEntryBase, Action>();

		private static readonly ConditionalWeakTable<Requirement, RequirementQuality> requirementQuality = new ConditionalWeakTable<Requirement, RequirementQuality>();

		public static Configurability DefaultConfigurability = Configurability.Full;

		public Configurability? Configurable = null;

		private Configurability configurationVisible = Configurability.Full;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		private TraderConfig traderConfig;

		public readonly GameObject Prefab;

		[Description("Specifies the maximum required crafting station level to upgrade and repair the item.\nDefault is calculated from crafting station level and maximum quality.")]
		public int MaximumRequiredStationLevel = int.MaxValue;

		[Description("Assigns the item as a drop item to a creature.\nUses a creature name, a drop chance and a minimum and maximum amount.")]
		public readonly DropTargets DropsFrom = new DropTargets();

		[Description("Configures whether the item can be bought at the trader.\nDon't forget to set cost to something above 0 or the item will be sold for free.")]
		public readonly Trade Trade = new Trade();

		internal List<Conversion> Conversions = new List<Conversion>();

		internal List<ItemConversion> conversions = new List<ItemConversion>();

		public Dictionary<string, ItemRecipe> Recipes = new Dictionary<string, ItemRecipe>();

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		private LocalizeKey _name;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		private LocalizeKey _description;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		private static object configManager;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		private static Localization _english;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		private static BaseUnityPlugin _plugin;

		private static bool hasConfigSync = true;

		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		private static object _configSync;

		private Configurability configurability => Configurable ?? DefaultConfigurability;

		[Description("Specifies the resources needed to craft the item.\nUse .Add to add resources with their internal ID and an amount.\nUse one .Add for each resource type the item should need.")]
		public RequiredResourceList RequiredItems => this[""].RequiredItems;

		[Description("Specifies the resources needed to upgrade the item.\nUse .Add to add resources with their internal ID and an amount. This amount will be multipled by the item quality level.\nUse one .Add for each resource type the upgrade should need.")]
		public RequiredResourceList RequiredUpgradeItems => this[""].RequiredUpgradeItems;

		[Description("Specifies the crafting station needed to craft the item.\nUse .Add to add a crafting station, using the CraftingTable enum and a minimum level for the crafting station.\nUse one .Add for each crafting station.")]
		public CraftingStationList Crafting => this[""].Crafting;

		[Description("Specifies a config entry which toggles whether a recipe is active.")]
		[<201e8df1-40d9-4fae-8a71-e1a1cf1b5561>Nullable(2)]
		public ConfigEntryBase RecipeIsActive
		{
			[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(2)]
			get
			{
				return this[""].RecipeIsActive;
			}
			[<80069ce7-5834-4564-96a3-d77a937ed3c5>NullableContext(2)]
			set
			{
				this[""].RecipeIsActive = value;
			}
		}

		[Description("Specifies the number of items that should be given to the player with a single craft of the item.\nDefaults to 1.")]
		public int CraftAmount
		{
			get
			{
				return this[""].CraftAmount;
			}
			set
			{
				this[""].CraftAmount = value;
			}
		}

		public bool RequireOnlyOneIngredient
		{
			get
			{
				return this[""].RequireOnlyOneIngredient;
			}
			set
			{
				this[""].RequireOnlyOneIngredient = value;
			}
		}

		public float QualityResultAmountMultiplier
		{
			get
			{
				return this[""].QualityResultAmountMultiplier;
			}
			set
			{
				this[""].QualityResultAmountMultiplier = value;
			}
		}

		public ItemRecipe this[string name]
		{
			get
			{
				if (Recipes.TryGetValue(name, out var value))
				{
					return value;
				}
				return Recipes[name] = new ItemRecipe();
			}
		}

		public LocalizeKey Name
		{
			get
			{
				LocalizeKey name = _name;
				if (name != null)
				{
					return name;
				}
				SharedData shared = Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
				if (shared.m_name.StartsWith("$"))
				{
					_name = new LocalizeKey(shared.m_name);
				}
				else
				{
					string text = "$item_" + ((Object)Prefab).name.Replace(" ", "_");
					_name = new LocalizeKey(text).English(shared.m_name);
					shared.m_name = text;
				}
				return _name;
			}
		}

		public LocalizeKey Description
		{
			get
			{
				LocalizeKey description = _description;
				if (description != null)
				{
					return description;
				}
				SharedData shared = Prefab.GetComponent<ItemDrop>().m_itemData.m_shared;
				if (shared.m_description.StartsWith("$"))
				{
					_description = new LocalizeKey(shared.m_description);
				}
				e