Decompiled source of SouthsilArmor v3.1.5
SouthsilArmor.dll
Decompiled 2 months ago
The result has been truncated due to the large size, download it to view full contents!
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.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 Microsoft.CodeAnalysis; using ServerSync; using SoftReferenceableAssets; using TMPro; using UnityEngine; using UnityEngine.UI; 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("SouthsilArmor")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyProduct("SouthsilArmor")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: AssemblyFileVersion("3.1.5")] [assembly: AssemblyCompany("southsil")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("3.1.5.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<6dc0e91a-c861-4eca-9e7c-fb240ba1f0ca>Embedded] internal sealed class <6dc0e91a-c861-4eca-9e7c-fb240ba1f0ca>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<6dc0e91a-c861-4eca-9e7c-fb240ba1f0ca>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <f380f414-a560-4cd6-a8f1-1dbee40db4b4>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <f380f414-a560-4cd6-a8f1-1dbee40db4b4>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <f380f414-a560-4cd6-a8f1-1dbee40db4b4>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [<6dc0e91a-c861-4eca-9e7c-fb240ba1f0ca>Embedded] internal sealed class <ee38b520-fe95-4980-8290-a068ff522130>NullableContextAttribute : Attribute { public readonly byte Flag; public <ee38b520-fe95-4980-8290-a068ff522130>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace AllManagersModTemplate { [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] [BepInPlugin("southsil.SouthsilArmor", "SouthsilArmor", "3.1.5")] [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] public class AllManagersModTemplatePlugin : BaseUnityPlugin { [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] public enum Toggle { On = 1, Off = 0 } [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order = null; [UsedImplicitly] public bool? Browsable = null; [UsedImplicitly] [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] public string Category = null; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(new byte[] { 2, 1 })] [UsedImplicitly] public Action<ConfigEntryBase> CustomDrawer = null; } [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] private class AcceptableShortcuts : AcceptableValueBase { public AcceptableShortcuts() : base(typeof(KeyboardShortcut)) { } public override object Clamp(object value) { return value; } public override bool IsValid(object value) { return true; } public override string ToDescriptionString() { return "# Acceptable values: " + string.Join(", ", UnityInput.Current.SupportedKeyCodes); } } internal const string ModName = "SouthsilArmor"; internal const string ModVersion = "3.1.5"; internal const string Author = "southsil"; private const string ModGUID = "southsil.SouthsilArmor"; private static string ConfigFileName = "southsil.SouthsilArmor.cfg"; private static string ConfigFileFullPath; internal static string ConnectionError; private readonly Harmony _harmony = new Harmony("southsil.SouthsilArmor"); public static readonly ManualLogSource AllManagersModTemplateLogger; private static readonly ConfigSync ConfigSync; public Texture2D tex = null; private static ConfigEntry<Toggle> _serverConfigLocked; public void Awake() { _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); Item item = new Item("neckhelm", "neckhelm"); item.Name.English("Neck-King Crown"); item.Description.English("A crown of gems and boar tusks, denoting you as King of the Mighty Necks!"); item.Crafting.Add(CraftingTable.Workbench, 2); item.MaximumRequiredStationLevel = 7; item.RequiredItems.Add("DeerHide", 10); item.RequiredItems.Add("AmberPearl", 3); item.RequiredItems.Add("Ruby", 1); item.RequiredItems.Add("TrophyBoar", 2); item.RequiredUpgradeItems.Add("DeerHide", 5); item.RequiredUpgradeItems.Add("TrophyBoar", 1); item.CraftAmount = 1; Item item2 = new Item("neckchest", "neckchest"); item2.Name.English("Neck-King Armor"); item2.Description.English("Heavier and certainly more floral than standard leather armor."); item2.Crafting.Add(CraftingTable.Workbench, 2); item2.MaximumRequiredStationLevel = 7; item2.RequiredItems.Add("DeerHide", 10); item2.RequiredItems.Add("Dandelion", 8); item2.RequiredItems.Add("BoneFragments", 8); item2.RequiredItems.Add("TrophyNeck", 1); item2.RequiredUpgradeItems.Add("DeerHide", 5); item2.RequiredUpgradeItems.Add("BoneFragments", 5); item2.CraftAmount = 1; Item item3 = new Item("necklegs", "necklegs"); item3.Name.English("Skirt of Neck tails"); item3.Description.English("Who would have thought that Neck tails en-masse provided pretty reasonable, albeit slimy, protection..."); item3.Crafting.Add(CraftingTable.Workbench, 2); item3.MaximumRequiredStationLevel = 7; item3.RequiredItems.Add("DeerHide", 10); item3.RequiredItems.Add("NeckTail", 20); item3.RequiredItems.Add("BoneFragments", 8); item3.RequiredItems.Add("LeatherScraps", 10); item3.RequiredUpgradeItems.Add("DeerHide", 5); item3.RequiredUpgradeItems.Add("NeckTail", 10); item3.CraftAmount = 1; Item item4 = new Item("chiefhelmboar", "chiefhelmboar"); item4.Name.English("Chieftain Boar Headdress"); item4.Description.English("The hood of a great tribal chieftain. This one depicts a boar."); item4.Crafting.Add(CraftingTable.Workbench, 2); item4.MaximumRequiredStationLevel = 7; item4.RequiredItems.Add("DeerHide", 20); item4.RequiredItems.Add("LeatherScraps", 10); item4.RequiredItems.Add("SurtlingCore", 1); item4.RequiredItems.Add("TrophyBoar", 1); item4.RequiredUpgradeItems.Add("DeerHide", 10); item4.RequiredUpgradeItems.Add("TrophyBoar", 1); item4.CraftAmount = 1; Item item5 = new Item("chiefhelmdeer", "chiefhelmdeer"); item5.Name.English("Chieftain Deer Headdress"); item5.Description.English("The hood of a great tribal chieftain. This one depicts a deer."); item5.Crafting.Add(CraftingTable.Workbench, 2); item5.MaximumRequiredStationLevel = 7; item5.RequiredItems.Add("DeerHide", 20); item5.RequiredItems.Add("LeatherScraps", 10); item5.RequiredItems.Add("SurtlingCore", 1); item5.RequiredItems.Add("TrophyDeer", 1); item5.RequiredUpgradeItems.Add("DeerHide", 10); item5.RequiredUpgradeItems.Add("TrophyDeer", 1); item5.CraftAmount = 1; Item item6 = new Item("chiefchest", "chiefchest"); item6.Name.English("Chieftain's Chestguard"); item6.Description.English("Rune-etched flint wards give this armor an eerie protection."); item6.Crafting.Add(CraftingTable.Workbench, 2); item6.MaximumRequiredStationLevel = 7; item6.RequiredItems.Add("DeerHide", 20); item6.RequiredItems.Add("ShieldWood", 1); item6.RequiredItems.Add("SurtlingCore", 2); item6.RequiredItems.Add("TrophySkeleton", 2); item6.RequiredUpgradeItems.Add("DeerHide", 10); item6.RequiredUpgradeItems.Add("BoneFragments", 10); item6.CraftAmount = 1; Item item7 = new Item("chieflegs", "chieflegs"); item7.Name.English("Chieftain's Belt"); item7.Description.English("Ok, got your knives, got your axe... plus whatever you're holding... probably ready to enter the forest, now."); item7.Crafting.Add(CraftingTable.Workbench, 2); item7.MaximumRequiredStationLevel = 7; item7.RequiredItems.Add("DeerHide", 20); item7.RequiredItems.Add("KnifeFlint", 2); item7.RequiredItems.Add("SurtlingCore", 2); item7.RequiredItems.Add("TrophySkeleton", 2); item7.RequiredUpgradeItems.Add("DeerHide", 10); item7.RequiredUpgradeItems.Add("BoneFragments", 10); item7.CraftAmount = 1; Item item8 = new Item("bronzetrollhelm", "bronzetrollhelm"); item8.Name.English("Trollfighter Helm"); item8.Description.English("A heavy bronze helm with a small visor."); item8.Crafting.Add(CraftingTable.Forge, 2); item8.MaximumRequiredStationLevel = 7; item8.RequiredItems.Add("Bronze", 8); item8.RequiredItems.Add("Copper", 5); item8.RequiredItems.Add("BoneFragments", 5); item8.RequiredItems.Add("TrophyFrostTroll", 1); item8.RequiredUpgradeItems.Add("Bronze", 5); item8.RequiredUpgradeItems.Add("BoneFragments", 3); item8.CraftAmount = 1; Item item9 = new Item("trollchest", "trollchest"); item9.Name.English("Trollfighter Armor"); item9.Description.English("Heavy bronze armor with carefully placed spikes, used by wild-folk who wrestle trolls."); item9.Crafting.Add(CraftingTable.Forge, 2); item9.MaximumRequiredStationLevel = 7; item9.RequiredItems.Add("Bronze", 8); item9.RequiredItems.Add("Copper", 5); item9.RequiredItems.Add("BoneFragments", 5); item9.RequiredItems.Add("TrophyFrostTroll", 1); item9.RequiredUpgradeItems.Add("Bronze", 5); item9.RequiredUpgradeItems.Add("BoneFragments", 3); item9.CraftAmount = 1; Item item10 = new Item("trolllegs", "trolllegs"); item10.Name.English("Trollfighter Legs"); item10.Description.English("Heavy shinguards, with spikes too, make kicking the troll quite a viable option."); item10.Crafting.Add(CraftingTable.Forge, 2); item10.MaximumRequiredStationLevel = 7; item10.RequiredItems.Add("Bronze", 8); item10.RequiredItems.Add("Copper", 5); item10.RequiredItems.Add("BoneFragments", 5); item10.RequiredItems.Add("TrophyFrostTroll", 1); item10.RequiredUpgradeItems.Add("Bronze", 5); item10.RequiredUpgradeItems.Add("BoneFragments", 3); item10.CraftAmount = 1; Item item11 = new Item("heavybronzehelm", "heavybronzehelm"); item11.Name.English("Battleswine Helm"); item11.Description.English("A heavy bronze helmet with curved horns jutting forward."); item11.Crafting.Add(CraftingTable.Forge, 2); item11.MaximumRequiredStationLevel = 7; item11.RequiredItems.Add("Bronze", 20); item11.RequiredItems.Add("BoneFragments", 5); item11.RequiredItems.Add("TrophyGreydwarfBrute", 1); item11.RequiredUpgradeItems.Add("Bronze", 8); item11.RequiredUpgradeItems.Add("BoneFragments", 3); item11.CraftAmount = 1; Item item12 = new Item("heavybronzechest", "heavybronzechest"); item12.Name.English("Battleswine Pauldrons"); item12.Description.English("Thick bronze pauldrons, inspired by the might of the wild boar."); item12.Crafting.Add(CraftingTable.Forge, 2); item12.MaximumRequiredStationLevel = 7; item12.RequiredItems.Add("Bronze", 20); item12.RequiredItems.Add("BoneFragments", 5); item12.RequiredItems.Add("TrophyBoar", 1); item12.RequiredUpgradeItems.Add("Bronze", 8); item12.RequiredUpgradeItems.Add("BoneFragments", 3); item12.CraftAmount = 1; Item item13 = new Item("heavybronzelegs", "heavybronzelegs"); item13.Name.English("Battleswine Kilt"); item13.Description.English("A heavy skirt which is weighted down, and provides surprising protection."); item13.Crafting.Add(CraftingTable.Forge, 2); item13.MaximumRequiredStationLevel = 7; item13.RequiredItems.Add("Bronze", 20); item13.RequiredItems.Add("LeatherScraps", 10); item13.RequiredItems.Add("TrophyFrostTroll", 1); item13.RequiredUpgradeItems.Add("Bronze", 8); item13.RequiredUpgradeItems.Add("BoneFragments", 3); item13.CraftAmount = 1; Item item14 = new Item("ancienthelm", "ancienthelm"); item14.Name.English("Ancient Helm"); item14.Description.English("This helm is from an age even before yours. It speaks of authority."); item14.Crafting.Add(CraftingTable.Forge, 2); item14.MaximumRequiredStationLevel = 7; item14.RequiredItems.Add("Bronze", 20); item14.RequiredItems.Add("AncientSeed", 6); item14.RequiredItems.Add("TrophyGreydwarfShaman", 1); item14.RequiredUpgradeItems.Add("Bronze", 8); item14.RequiredUpgradeItems.Add("AncientSeed", 3); item14.CraftAmount = 1; Item item15 = new Item("ancientchest", "ancientchest"); item15.Name.English("Ancient Cuirass"); item15.Description.English("Keenly forged with techniques long forgotten, it is both light and strong."); item15.Crafting.Add(CraftingTable.Forge, 2); item15.MaximumRequiredStationLevel = 7; item15.RequiredItems.Add("Bronze", 20); item15.RequiredItems.Add("Tin", 10); item15.RequiredItems.Add("AncientSeed", 6); item15.RequiredItems.Add("LeatherScraps", 20); item15.RequiredUpgradeItems.Add("Bronze", 8); item15.RequiredUpgradeItems.Add("Tin", 3); item15.CraftAmount = 1; Item item16 = new Item("ancientlegs", "ancientlegs"); item16.Name.English("Ancient Legguards"); item16.Description.English("You could probably muster a fairly meme worthy kick whilst wearing these."); item16.Crafting.Add(CraftingTable.Forge, 2); item16.MaximumRequiredStationLevel = 7; item16.RequiredItems.Add("Bronze", 20); item16.RequiredItems.Add("Tin", 10); item16.RequiredItems.Add("AncientSeed", 6); item16.RequiredItems.Add("LeatherScraps", 20); item16.RequiredUpgradeItems.Add("Bronze", 8); item16.RequiredUpgradeItems.Add("Tin", 3); item16.CraftAmount = 1; Item item17 = new Item("trollhelm", "trollhelm"); item17.Name.English("Majestic Helm"); item17.Description.English("A famous viking's helmet, with massive horns from a Baphomet demon."); item17.Crafting.Add(CraftingTable.Forge, 2); item17.MaximumRequiredStationLevel = 7; item17.RequiredItems.Add("Bronze", 10); item17.RequiredItems.Add("Copper", 8); item17.RequiredItems.Add("BoneFragments", 8); item17.RequiredItems.Add("TrophyFrostTroll", 8); item17.RequiredUpgradeItems.Add("Bronze", 8); item17.RequiredUpgradeItems.Add("TrophyFrostTroll", 1); item17.CraftAmount = 1; Item item18 = new Item("knighthelm", "knighthelm"); item18.Name.English("Knight's Helm"); item18.Description.English("This knight's helmet is more intricate than you'd like, but it'll protect you a little while longer."); item18.Crafting.Add(CraftingTable.Forge, 3); item18.MaximumRequiredStationLevel = 7; item18.RequiredItems.Add("Iron", 25); item18.RequiredItems.Add("TrophySerpent", 1); item18.RequiredUpgradeItems.Add("Iron", 10); item18.CraftAmount = 1; Item item19 = new Item("knightchest", "knightchest"); item19.Name.English("Knight's Armor"); item19.Description.English("Thick leather, robust chainmail and plate metal. It's designed to keep you safe, so you can keep killing."); item19.Crafting.Add(CraftingTable.Forge, 3); item19.MaximumRequiredStationLevel = 7; item19.RequiredItems.Add("Chain", 5); item19.RequiredItems.Add("Iron", 25); item19.RequiredItems.Add("LeatherScraps", 30); item19.RequiredUpgradeItems.Add("Iron", 10); item19.RequiredUpgradeItems.Add("Chain", 3); item19.CraftAmount = 1; Item item20 = new Item("knightlegs", "knightlegs"); item20.Name.English("Knight's Leggings"); item20.Description.English("Well travelled breeches and finely crafted iron boots."); item20.Crafting.Add(CraftingTable.Forge, 3); item20.MaximumRequiredStationLevel = 7; item20.RequiredItems.Add("Chain", 5); item20.RequiredItems.Add("Iron", 25); item20.RequiredItems.Add("Guck", 10); item20.RequiredItems.Add("TrophyWraith", 1); item20.RequiredUpgradeItems.Add("Iron", 10); item20.RequiredUpgradeItems.Add("Chain", 3); item20.CraftAmount = 1; Item item21 = new Item("swamphelm", "swamphelm"); item21.Name.English("Abomination Helm"); item21.Description.English("An iron skullcap adorned by huge horns and bone. Teeth chatter... but are they yours?"); item21.Crafting.Add(CraftingTable.Forge, 3); item21.MaximumRequiredStationLevel = 7; item21.RequiredItems.Add("Iron", 20); item21.RequiredItems.Add("WitheredBone", 10); item21.RequiredItems.Add("TrophyBonemass", 1); item21.RequiredUpgradeItems.Add("Iron", 10); item21.RequiredUpgradeItems.Add("WitheredBone", 5); item21.CraftAmount = 1; Item item22 = new Item("swampchest", "swampchest"); item22.Name.English("Draugr Wraps"); item22.Description.English("Thick, mouldy linen with rusted iron plates. Very heavy, with good protection. You may be mistaken for a draugr. "); item22.Crafting.Add(CraftingTable.Forge, 3); item22.MaximumRequiredStationLevel = 7; item22.RequiredItems.Add("Iron", 25); item22.RequiredItems.Add("LeatherScraps", 20); item22.RequiredItems.Add("TrophyDraugrElite", 1); item22.RequiredUpgradeItems.Add("Iron", 10); item22.RequiredUpgradeItems.Add("LeatherScraps", 10); item22.CraftAmount = 1; Item item23 = new Item("swamplegs", "swamplegs"); item23.Name.English("Draugr Skullbelt"); item23.Description.English("Skulls and torn rags. They whisper to you in the depths of the swamp, and you find solace in what they say."); item23.Crafting.Add(CraftingTable.Forge, 3); item23.MaximumRequiredStationLevel = 7; item23.RequiredItems.Add("Iron", 20); item23.RequiredItems.Add("WitheredBone", 10); item23.RequiredItems.Add("TrophySkeleton", 4); item23.RequiredUpgradeItems.Add("Iron", 10); item23.RequiredUpgradeItems.Add("WitheredBone", 5); item23.CraftAmount = 1; Item item24 = new Item("ancientironhelm", "ancientironhelm"); item24.Name.English("Legionnaire's Helm"); item24.Description.English("A waving serpent fin crests this soldier's helmet, leading you to battle."); item24.Crafting.Add(CraftingTable.Forge, 3); item24.MaximumRequiredStationLevel = 7; item24.RequiredItems.Add("Iron", 25); item24.RequiredItems.Add("Silver", 30); item24.RequiredItems.Add("TrophySerpent", 1); item24.RequiredItems.Add("ancienthelm", 1); item24.RequiredUpgradeItems.Add("Iron", 10); item24.RequiredUpgradeItems.Add("Silver", 5); item24.CraftAmount = 1; Item item25 = new Item("ancientironchest", "ancientironchest"); item25.Name.English("Legionnaire's breastplate"); item25.Description.English("An iron breastplate with silver trim and serpent scale-mail. A thick red shawl which protects from the elements."); item25.Crafting.Add(CraftingTable.Forge, 3); item25.MaximumRequiredStationLevel = 7; item25.RequiredItems.Add("Iron", 25); item25.RequiredItems.Add("Silver", 30); item25.RequiredItems.Add("JuteRed", 10); item25.RequiredItems.Add("ancientchest", 1); item25.RequiredUpgradeItems.Add("Iron", 10); item25.RequiredUpgradeItems.Add("JuteRed", 5); item25.CraftAmount = 1; Item item26 = new Item("ancientironlegs", "ancientironlegs"); item26.Name.English("Legionnaire's skirt"); item26.Description.English("A leather skirt and iron boots, adorned by spiky teeth from a great serpent."); item26.Crafting.Add(CraftingTable.Forge, 3); item26.MaximumRequiredStationLevel = 7; item26.RequiredItems.Add("Iron", 25); item26.RequiredItems.Add("Silver", 30); item26.RequiredItems.Add("SerpentScale", 20); item26.RequiredItems.Add("ancientlegs", 1); item26.RequiredUpgradeItems.Add("Iron", 10); item26.RequiredUpgradeItems.Add("Silver", 5); item26.CraftAmount = 1; Item item27 = new Item("heavywolfhelm", "heavywolfhelm"); item27.Name.English("Helm of Hati"); item27.Description.English("On moonless nights a great white wolf prowls the mountains."); item27.Crafting.Add(CraftingTable.Forge, 3); item27.MaximumRequiredStationLevel = 7; item27.RequiredItems.Add("Silver", 30); item27.RequiredItems.Add("WolfHairBundle", 15); item27.RequiredItems.Add("TrophyCultist_Hildir", 1); item27.RequiredUpgradeItems.Add("Silver", 10); item27.RequiredUpgradeItems.Add("WolfHairBundle", 5); item27.CraftAmount = 1; Item item28 = new Item("heavywolfchest", "heavywolfchest"); item28.Name.English("Valdr Breastplate"); item28.Description.English("A heavy silver breastplate and thick shaggy pelts. This is the armor of a mighty hero."); item28.Crafting.Add(CraftingTable.Forge, 3); item28.MaximumRequiredStationLevel = 7; item28.RequiredItems.Add("Silver", 30); item28.RequiredItems.Add("WolfHairBundle", 15); item28.RequiredItems.Add("WolfClaw", 6); item28.RequiredUpgradeItems.Add("Silver", 10); item28.RequiredUpgradeItems.Add("WolfHairBundle", 5); item28.CraftAmount = 1; Item item29 = new Item("heavywolflegs", "heavywolflegs"); item29.Name.English("Valdr Legguards"); item29.Description.English("Silver boots worked to resemble great claws."); item29.Crafting.Add(CraftingTable.Forge, 3); item29.MaximumRequiredStationLevel = 7; item29.RequiredItems.Add("Silver", 30); item29.RequiredItems.Add("WolfHairBundle", 15); item29.RequiredItems.Add("WolfClaw", 6); item29.RequiredUpgradeItems.Add("Silver", 10); item29.RequiredUpgradeItems.Add("WolfHairBundle", 5); item29.CraftAmount = 1; Item item30 = new Item("skoghelm", "skoghelm"); item30.Name.English("Stone Golem Helm"); item30.Description.English("It is said that the famed viking, Skogafoss, hid his legendary helmet behind a waterfall in the deep north. This is only a replica."); item30.Crafting.Add(CraftingTable.Forge, 3); item30.MaximumRequiredStationLevel = 5; item30.RequiredItems.Add("Silver", 25); item30.RequiredItems.Add("TrophySGolem", 1); item30.RequiredItems.Add("TrophyEikthyr", 2); item30.RequiredUpgradeItems.Add("Crystal", 5); item30.RequiredUpgradeItems.Add("Silver", 10); item30.CraftAmount = 1; Item item31 = new Item("skogchest", "skogchest"); item31.Name.English("Stone Golem Chest"); item31.Description.English("An alloy of silver and enchanted stone, the same magic that animates the golems imbues this cuirass with incredible defence."); item31.Crafting.Add(CraftingTable.Forge, 3); item31.MaximumRequiredStationLevel = 5; item31.RequiredItems.Add("Silver", 25); item31.RequiredItems.Add("JuteRed", 15); item31.RequiredItems.Add("TrophySGolem", 2); item31.RequiredUpgradeItems.Add("Silver", 15); item31.RequiredUpgradeItems.Add("Crystal", 10); item31.CraftAmount = 1; Item item32 = new Item("skoglegs", "skoglegs"); item32.Name.English("Stone Golem Legs"); item32.Description.English("Slow and heavy but very protective."); item32.Crafting.Add(CraftingTable.Forge, 3); item32.MaximumRequiredStationLevel = 5; item32.RequiredItems.Add("Silver", 20); item32.RequiredItems.Add("JuteRed", 15); item32.RequiredItems.Add("WolfHairBundle", 15); item32.RequiredUpgradeItems.Add("Silver", 10); item32.RequiredUpgradeItems.Add("WolfHairBundle", 5); item32.CraftAmount = 1; Item item33 = new Item("norahchest", "norahchest"); item33.Name.English("Shieldmaiden's Surcoat"); item33.Description.English("Chainmail over thick dyed linen, with tooled leather belt and bracers."); item33.Crafting.Add(CraftingTable.Forge, 3); item33.MaximumRequiredStationLevel = 7; item33.RequiredItems.Add("Iron", 10); item33.RequiredItems.Add("LinenThread", 25); item33.RequiredItems.Add("Chain", 3); item33.RequiredUpgradeItems.Add("Iron", 5); item33.RequiredUpgradeItems.Add("Chain", 5); item33.CraftAmount = 1; Item item34 = new Item("norahlegs", "norahlegs"); item34.Name.English("Shieldmaiden's Skirt"); item34.Description.English("Leather boots and multiple layers of hardy linen skirts."); item34.Crafting.Add(CraftingTable.Forge, 3); item34.MaximumRequiredStationLevel = 7; item34.RequiredItems.Add("Iron", 10); item34.RequiredItems.Add("LinenThread", 25); item34.RequiredItems.Add("JuteRed", 5); item34.RequiredUpgradeItems.Add("Iron", 5); item34.RequiredUpgradeItems.Add("LeatherScraps", 5); item34.CraftAmount = 1; Item item35 = new Item("norahhelm", "norahhelm"); item35.Name.English("Shieldmaiden's Headdress"); item35.Description.English("There is some mysticism about these earrings and band, protecting the wearer."); item35.Crafting.Add(CraftingTable.Forge, 3); item35.MaximumRequiredStationLevel = 7; item35.RequiredItems.Add("Iron", 10); item35.RequiredItems.Add("LinenThread", 25); item35.RequiredItems.Add("Coins", 300); item35.RequiredUpgradeItems.Add("Iron", 5); item35.RequiredUpgradeItems.Add("Coins", 50); item35.CraftAmount = 1; Item item36 = new Item("norahhelmalt", "norahhelmalt"); item36.Name.English("Shieldmaiden's Hood"); item36.Description.English("A warm fur hood, from under which your eyes glow keenly."); item36.Crafting.Add(CraftingTable.Forge, 3); item36.MaximumRequiredStationLevel = 7; item36.RequiredItems.Add("WolfHairBundle", 10); item36.RequiredItems.Add("LinenThread", 25); item36.RequiredItems.Add("TrophyGreydwarfShaman", 5); item36.RequiredUpgradeItems.Add("Iron", 5); item36.RequiredUpgradeItems.Add("LinenThread", 5); item36.CraftAmount = 1; Item item37 = new Item("sven", "sven"); item37.Name.English("Sven's Helm"); item37.Description.English("Sven dedicated his life to the betterment of his kin. As a gift, the Dragon Queen looked on him with great favour."); item37.Crafting.Add(CraftingTable.Forge, 4); item37.MaximumRequiredStationLevel = 7; item37.RequiredItems.Add("DragonTear", 5); item37.RequiredItems.Add("Silver", 40); item37.RequiredItems.Add("Bronze", 30); item37.RequiredUpgradeItems.Add("Silver", 20); item37.RequiredUpgradeItems.Add("Bronze", 10); item37.CraftAmount = 1; Item item38 = new Item("svenchest", "svenchest"); item38.Name.English("Ornate Silver Armor"); item38.Description.English("It so beautifully made and light that it will not slow its wearer down, and will protect even an old viking from the vicious world."); item38.Crafting.Add(CraftingTable.Forge, 4); item38.MaximumRequiredStationLevel = 7; item38.RequiredItems.Add("LoxPelt", 10); item38.RequiredItems.Add("Silver", 40); item38.RequiredItems.Add("Bronze", 30); item38.RequiredUpgradeItems.Add("Silver", 20); item38.RequiredUpgradeItems.Add("Bronze", 10); item38.CraftAmount = 1; Item item39 = new Item("svenlegs", "svenlegs"); item39.Name.English("Kilted Silver Armor"); item39.Description.English("Silver plated leg guards. They were forged much later, in a style meant to compliment the helmet of a mythical hero."); item39.Crafting.Add(CraftingTable.Forge, 4); item39.MaximumRequiredStationLevel = 7; item39.RequiredItems.Add("LinenThread", 40); item39.RequiredItems.Add("Silver", 40); item39.RequiredItems.Add("Bronze", 30); item39.RequiredUpgradeItems.Add("Silver", 15); item39.RequiredUpgradeItems.Add("LinenThread", 5); item39.CraftAmount = 1; Item item40 = new Item("bphelm", "bphelm"); item40.Name.English("Blackmetal Greathelm"); item40.Description.English("A heavily visored greathelm adorned by large horns."); item40.Crafting.Add(CraftingTable.Forge, 4); item40.MaximumRequiredStationLevel = 7; item40.RequiredItems.Add("BlackMetal", 20); item40.RequiredItems.Add("TrophyGoblinBrute", 1); item40.RequiredItems.Add("WitheredBone", 5); item40.RequiredUpgradeItems.Add("WitheredBone", 3); item40.RequiredUpgradeItems.Add("BlackMetal", 5); item40.CraftAmount = 1; Item item41 = new Item("bpchest", "bpchest"); item41.Name.English("Blackmetal Breastplate"); item41.Description.English("Plate armor made of black metal. Somewhat crude in construction."); item41.Crafting.Add(CraftingTable.Forge, 4); item41.MaximumRequiredStationLevel = 7; item41.RequiredItems.Add("BlackMetal", 20); item41.RequiredItems.Add("Silver", 5); item41.RequiredItems.Add("JuteRed", 5); item41.RequiredUpgradeItems.Add("Silver", 3); item41.RequiredUpgradeItems.Add("BlackMetal", 5); item41.CraftAmount = 1; Item item42 = new Item("bplegs", "bplegs"); item42.Name.English("Blackmetal Legguards"); item42.Description.English("Black metal legguards, perfect for chasing down Fuling."); item42.Crafting.Add(CraftingTable.Forge, 4); item42.MaximumRequiredStationLevel = 7; item42.RequiredItems.Add("BlackMetal", 20); item42.RequiredItems.Add("Silver", 5); item42.RequiredItems.Add("JuteRed", 5); item42.RequiredUpgradeItems.Add("Silver", 3); item42.RequiredUpgradeItems.Add("BlackMetal", 5); item42.CraftAmount = 1; Item item43 = new Item("bearhelm", "bearhelm"); item43.Name.English("Dwarven Steel Casque"); item43.Description.English("What this casque lacks in visibility it makes up for by being essentially impenetrable."); item43.Crafting.Add(CraftingTable.Forge, 4); item43.MaximumRequiredStationLevel = 7; item43.RequiredItems.Add("BlackMetal", 30); item43.RequiredItems.Add("Copper", 20); item43.RequiredItems.Add("JuteRed", 5); item43.RequiredUpgradeItems.Add("Copper", 5); item43.RequiredUpgradeItems.Add("BlackMetal", 10); item43.CraftAmount = 1; Item item44 = new Item("bearchest", "bearchest"); item44.Name.English("Dwarven Steel Armor"); item44.Description.English("An enormous chainmail surcoat and hammered Dwarven Steel plates. Someone's been eating their veggies."); item44.Crafting.Add(CraftingTable.Forge, 4); item44.MaximumRequiredStationLevel = 7; item44.RequiredItems.Add("BlackMetal", 30); item44.RequiredItems.Add("Chain", 20); item44.RequiredItems.Add("Copper", 20); item44.RequiredUpgradeItems.Add("Copper", 5); item44.RequiredUpgradeItems.Add("BlackMetal", 10); item44.CraftAmount = 1; Item item45 = new Item("bearlegs", "bearlegs"); item45.Name.English("Dwarven Steel Boots"); item45.Description.English("The elusive Dwarf-folk somehow alloyed blackmetal and copper, making a metal stronger than most."); item45.Crafting.Add(CraftingTable.Forge, 4); item45.MaximumRequiredStationLevel = 7; item45.RequiredItems.Add("BlackMetal", 30); item45.RequiredItems.Add("Copper", 20); item45.RequiredItems.Add("JuteRed", 5); item45.RequiredUpgradeItems.Add("Copper", 5); item45.RequiredUpgradeItems.Add("BlackMetal", 10); item45.CraftAmount = 1; Item item46 = new Item("loxhunthelm", "loxhunthelm"); item46.Name.English("Golden Lox Mask"); item46.Description.English("Some creative liberties have been used here - not least the presence of two tongues - to strike fear into your enemies."); item46.Crafting.Add(CraftingTable.Forge, 4); item46.MaximumRequiredStationLevel = 7; item46.RequiredItems.Add("Coins", 950); item46.RequiredItems.Add("BlackMetal", 20); item46.RequiredItems.Add("TrophyLox", 2); item46.RequiredUpgradeItems.Add("Coins", 100); item46.RequiredUpgradeItems.Add("BlackMetal", 10); item46.CraftAmount = 1; Item item47 = new Item("loxhuntchest", "loxhuntchest"); item47.Name.English("Loxgol Armor"); item47.Description.English("Heavy armor embodying the bulk and power of the Lox, with an Eastern flare."); item47.Crafting.Add(CraftingTable.Forge, 4); item47.MaximumRequiredStationLevel = 7; item47.RequiredItems.Add("Coins", 950); item47.RequiredItems.Add("BlackMetal", 20); item47.RequiredItems.Add("JuteRed", 20); item47.RequiredItems.Add("TrophyGoblinShaman", 1); item47.RequiredUpgradeItems.Add("Coins", 100); item47.RequiredUpgradeItems.Add("BlackMetal", 10); item47.CraftAmount = 1; Item item48 = new Item("loxhuntlegs", "loxhuntlegs"); item48.Name.English("Loxgol Leggings"); item48.Description.English("Ornamental skirts and wicked black scale-mail."); item48.Crafting.Add(CraftingTable.Forge, 4); item48.MaximumRequiredStationLevel = 7; item48.RequiredItems.Add("Coins", 950); item48.RequiredItems.Add("BlackMetal", 20); item48.RequiredItems.Add("JuteRed", 20); item48.RequiredItems.Add("TrophyGoblinShaman", 1); item48.RequiredUpgradeItems.Add("Coins", 100); item48.RequiredUpgradeItems.Add("BlackMetal", 10); item48.CraftAmount = 1; Item item49 = new Item("ss_barbhelm", "ss_barbhelm"); item49.Name.English("Jawbone Casque"); item49.Description.English("The massive jaws of an enormous ogre stand out as testament to your battle prowess. "); item49.Crafting.Add(CraftingTable.Forge, 4); item49.MaximumRequiredStationLevel = 7; item49.RequiredItems.Add("Silver", 20); item49.RequiredItems.Add("BlackMetal", 20); item49.RequiredItems.Add("WolfFang", 2); item49.RequiredItems.Add("TrophyGoblinBruteBrosBrute", 1); item49.RequiredUpgradeItems.Add("Silver", 5); item49.RequiredUpgradeItems.Add("BlackMetal", 10); item49.CraftAmount = 1; Item item50 = new Item("ss_barbchest", "ss_barbchest"); item50.Name.English("Barbarian Pauldron"); item50.Description.English("A heavy blue shawl and single ornate pauldron sit lightly on your tattooed muscles. Less is more when the bloodmist descends."); item50.Crafting.Add(CraftingTable.Forge, 4); item50.MaximumRequiredStationLevel = 7; item50.RequiredItems.Add("Silver", 20); item50.RequiredItems.Add("BlackMetal", 20); item50.RequiredItems.Add("Tar", 15); item50.RequiredItems.Add("TrophyGoblinShaman", 1); item50.RequiredUpgradeItems.Add("Tar", 10); item50.RequiredUpgradeItems.Add("BlackMetal", 10); item50.CraftAmount = 1; Item item51 = new Item("ss_barblegs", "ss_barblegs"); item51.Name.English("Barbarian Belt"); item51.Description.English("A drake scale skirt and heavy metal belt. Light and cheerful boots."); item51.Crafting.Add(CraftingTable.Forge, 4); item51.MaximumRequiredStationLevel = 7; item51.RequiredItems.Add("Silver", 20); item51.RequiredItems.Add("BlackMetal", 20); item51.RequiredItems.Add("LoxPelt", 20); item51.RequiredItems.Add("TrophyHatchling", 5); item51.RequiredUpgradeItems.Add("LoxPelt", 100); item51.RequiredUpgradeItems.Add("BlackMetal", 10); item51.CraftAmount = 1; Item item52 = new Item("obswolfhelm", "obswolfhelm"); item52.Name.English("Heavy Fenrir Helm"); item52.Description.English("An infused obsidian mask, resembling a great wolf. You are the hunter now."); item52.Crafting.Add(CraftingTable.BlackForge, 1); item52.MaximumRequiredStationLevel = 7; item52.RequiredItems.Add("BlackMetal", 30); item52.RequiredItems.Add("Obsidian", 30); item52.RequiredItems.Add("TrophyUlv", 5); item52.RequiredItems.Add("Ruby", 1); item52.RequiredUpgradeItems.Add("BlackMetal", 10); item52.RequiredUpgradeItems.Add("Obsidian", 10); item52.RequiredUpgradeItems.Add("WolfHairBundle", 5); item52.CraftAmount = 1; Item item53 = new Item("obswolfchest", "obswolfchest"); item53.Name.English("Heavy Fenrir Armor"); item53.Description.English("A beastial set of armor made from blood infused obsidian and thick, shaggy fur."); item53.Crafting.Add(CraftingTable.BlackForge, 1); item53.MaximumRequiredStationLevel = 7; item53.RequiredItems.Add("BlackMetal", 30); item53.RequiredItems.Add("Obsidian", 30); item53.RequiredItems.Add("WolfHairBundle", 20); item53.RequiredItems.Add("SilverNecklace", 1); item53.RequiredUpgradeItems.Add("BlackMetal", 10); item53.RequiredUpgradeItems.Add("Obsidian", 10); item53.RequiredUpgradeItems.Add("WolfHairBundle", 5); item53.CraftAmount = 1; Item item54 = new Item("obswolflegs", "obswolflegs"); item54.Name.English("Heavy Fenrir Boots"); item54.Description.English("The blood of Fulings strengthens obsidian, but also dulls its glow in the moonlight. Sneaky sneak."); item54.Crafting.Add(CraftingTable.BlackForge, 1); item54.MaximumRequiredStationLevel = 7; item54.RequiredItems.Add("BlackMetal", 30); item54.RequiredItems.Add("Obsidian", 30); item54.RequiredItems.Add("WolfHairBundle", 20); item54.RequiredItems.Add("JuteBlue", 10); item54.RequiredUpgradeItems.Add("BlackMetal", 10); item54.RequiredUpgradeItems.Add("Obsidian", 10); item54.CraftAmount = 1; Item item55 = new Item("heavycarhelm", "heavycarhelm"); item55.Name.English("Twelve-eyed Helm"); item55.Description.English("An insectoid husk which refracts and enhances your vision."); item55.Crafting.Add(CraftingTable.BlackForge, 1); item55.MaximumRequiredStationLevel = 7; item55.RequiredItems.Add("Carapace", 20); item55.RequiredItems.Add("Iron", 25); item55.RequiredItems.Add("TrophyGjall", 3); item55.RequiredItems.Add("Mandible", 4); item55.RequiredUpgradeItems.Add("Mandible", 10); item55.RequiredUpgradeItems.Add("TrophyGjall", 1); item55.CraftAmount = 1; Item item56 = new Item("heavycarchest", "heavycarchest"); item56.Name.English("Gjall-hunter Harness"); item56.Description.English("Through countless days lost in the mist, you have adorned a simple iron breastplate with all manner of insectoid remains, creating an outlandish, alien armor. Massive mandible spikes give some protection from Gjall and Ticks from above."); item56.Crafting.Add(CraftingTable.BlackForge, 1); item56.MaximumRequiredStationLevel = 7; item56.RequiredItems.Add("Carapace", 20); item56.RequiredItems.Add("Iron", 30); item56.RequiredItems.Add("TrophySkeleton", 1); item56.RequiredItems.Add("Mandible", 15); item56.RequiredUpgradeItems.Add("Carapace", 10); item56.RequiredUpgradeItems.Add("Mandible", 5); item56.CraftAmount = 1; Item item57 = new Item("heavycarlegs", "heavycarlegs"); item57.Name.English("Gjall-hunter Legguards"); item57.Description.English("Chainmail leggings have been further strengthened with thick carapace shells and mandibles, cut from your many foes."); item57.Crafting.Add(CraftingTable.BlackForge, 1); item57.MaximumRequiredStationLevel = 7; item57.RequiredItems.Add("Carapace", 20); item57.RequiredItems.Add("Iron", 20); item57.RequiredItems.Add("TrophySkeleton", 1); item57.RequiredItems.Add("Mandible", 10); item57.RequiredUpgradeItems.Add("Carapace", 10); item57.RequiredUpgradeItems.Add("Mandible", 5); item57.CraftAmount = 1; Item item58 = new Item("frostmagehelm", "frostmagehelm"); item58.Name.English("Crystalline Mask"); item58.Description.English("A hooded mask of frozen crystal."); item58.Crafting.Add(CraftingTable.MageTable, 1); item58.MaximumRequiredStationLevel = 7; item58.RequiredItems.Add("Crystal", 30); item58.RequiredItems.Add("Eitr", 20); item58.RequiredItems.Add("JuteBlue", 20); item58.RequiredItems.Add("Feathers", 20); item58.RequiredUpgradeItems.Add("Crystal", 10); item58.RequiredUpgradeItems.Add("Eitr", 10); item58.CraftAmount = 1; Item item59 = new Item("frostmagechest", "frostmagechest"); item59.Name.English("Hrímþurs Robe"); item59.Description.English("Embroided blue robes and a gem-set necklace. Wonderful stuff, except your right hand has succumbed to frost magic..."); item59.Crafting.Add(CraftingTable.MageTable, 1); item59.MaximumRequiredStationLevel = 7; item59.RequiredItems.Add("Crystal", 30); item59.RequiredItems.Add("Eitr", 20); item59.RequiredItems.Add("JuteBlue", 20); item59.RequiredItems.Add("Feathers", 20); item59.RequiredUpgradeItems.Add("Crystal", 10); item59.RequiredUpgradeItems.Add("Eitr", 10); item59.CraftAmount = 1; Item item60 = new Item("frostmagelegs", "frostmagelegs"); item60.Name.English("Hrímþurs Trousers"); item60.Description.English("Sturdy boots with golden trim."); item60.Crafting.Add(CraftingTable.MageTable, 1); item60.MaximumRequiredStationLevel = 7; item60.RequiredItems.Add("Crystal", 30); item60.RequiredItems.Add("Eitr", 20); item60.RequiredItems.Add("JuteBlue", 20); item60.RequiredItems.Add("Feathers", 20); item60.RequiredUpgradeItems.Add("Crystal", 10); item60.RequiredUpgradeItems.Add("Eitr", 10); item60.CraftAmount = 1; Item item61 = new Item("druidhelm", "druidhelm"); item61.Name.English("Crown of the Forest"); item61.Description.English("A silver mask adorned by great horns of beast and twigs of Yggdrasil."); item61.Crafting.Add(CraftingTable.MageTable, 1); item61.MaximumRequiredStationLevel = 7; item61.RequiredItems.Add("Silver", 30); item61.RequiredItems.Add("WitheredBone", 20); item61.RequiredItems.Add("Sap", 20); item61.RequiredItems.Add("YggdrasilWood", 20); item61.RequiredUpgradeItems.Add("Silver", 10); item61.RequiredUpgradeItems.Add("Sap", 5); item61.CraftAmount = 1; Item item62 = new Item("druidchest", "druidchest"); item62.Name.English("Druid Furs"); item62.Description.English("A hulking shawl of lox fur and the skull of a great red wolf on your shoulders, overtop Hare scalemail and a green linen tabard. Carved rune-wood hanging from your belt, as well as inscribed in your buckles."); item62.Crafting.Add(CraftingTable.MageTable, 1); item62.MaximumRequiredStationLevel = 7; item62.RequiredItems.Add("Iron", 30); item62.RequiredItems.Add("LoxPelt", 40); item62.RequiredItems.Add("ScaleHide", 30); item62.RequiredItems.Add("LinenThread", 20); item62.RequiredUpgradeItems.Add("Iron", 10); item62.RequiredUpgradeItems.Add("LoxPelt", 10); item62.CraftAmount = 1; Item item63 = new Item("druidlegs", "druidlegs"); item63.Name.English("Druid Leggings"); item63.Description.English("Simple but finely crafted leather boots, made warmer by a lox fur lining. A hare scalemail skirt, and the lower part of your feathery-green tabard."); item63.Crafting.Add(CraftingTable.MageTable, 1); item63.MaximumRequiredStationLevel = 7; item63.RequiredItems.Add("LeatherScraps", 40); item63.RequiredItems.Add("LoxPelt", 10); item63.RequiredItems.Add("ScaleHide", 20); item63.RequiredItems.Add("LinenThread", 20); item63.RequiredUpgradeItems.Add("ScaleHide", 10); item63.RequiredUpgradeItems.Add("LinenThread", 10); item63.CraftAmount = 1; Item item64 = new Item("runeknighthelm", "runeknighthelm"); item64.Name.English("Rune Knight Helm"); item64.Description.English("Blue Eitr flames erupt from the visor and pulse through the metal. Your mortal eyes may have been blinded, but you see more now."); item64.Crafting.Add(CraftingTable.BlackForge, 1); item64.MaximumRequiredStationLevel = 7; item64.RequiredItems.Add("knighthelm", 1); item64.RequiredItems.Add("BlackMetal", 30); item64.RequiredItems.Add("Eitr", 30); item64.RequiredItems.Add("BlackCore", 2); item64.RequiredUpgradeItems.Add("BlackMetal", 15); item64.RequiredUpgradeItems.Add("Eitr", 10); item64.CraftAmount = 1; Item item65 = new Item("runeknightchest", "runeknightchest"); item65.Name.English("Rune Knight Armor"); item65.Description.English("Fissures of blue Eitr course across this wretched platemail, coalescing in places to form runes of protection."); item65.Crafting.Add(CraftingTable.BlackForge, 1); item65.MaximumRequiredStationLevel = 7; item65.RequiredItems.Add("knightchest", 1); item65.RequiredItems.Add("BlackMetal", 30); item65.RequiredItems.Add("Eitr", 30); item65.RequiredItems.Add("BlackCore", 2); item65.RequiredUpgradeItems.Add("BlackMetal", 15); item65.RequiredUpgradeItems.Add("Eitr", 10); item65.CraftAmount = 1; Item item66 = new Item("runeknightlegs", "runeknightlegs"); item66.Name.English("Rune Knight Legplates"); item66.Description.English("The plate metal is charred black by Eitr, which still flickers through it."); item66.Crafting.Add(CraftingTable.BlackForge, 1); item66.MaximumRequiredStationLevel = 7; item66.RequiredItems.Add("knightlegs", 1); item66.RequiredItems.Add("BlackMetal", 30); item66.RequiredItems.Add("Eitr", 30); item66.RequiredItems.Add("BlackCore", 2); item66.RequiredUpgradeItems.Add("BlackMetal", 15); item66.RequiredUpgradeItems.Add("Eitr", 10); item66.CraftAmount = 1; Item item67 = new Item("bearhelm2", "bearhelm2"); item67.Name.English("Jötunn-Bone Casque"); item67.Description.English("A vicious black war-casque, worn by those renowned for their tremendous and overwhelming strength. It denounces you as a harbinger of death."); item67.Crafting.Add(CraftingTable.BlackForge, 1); item67.MaximumRequiredStationLevel = 7; item67.RequiredItems.Add("bearhelm", 1); item67.RequiredItems.Add("BlackMarble", 20); item67.RequiredItems.Add("JuteBlue", 10); item67.RequiredItems.Add("TrophySeekerBrute", 1); item67.RequiredUpgradeItems.Add("JuteBlue", 5); item67.RequiredUpgradeItems.Add("BlackMarble", 10); item67.CraftAmount = 1; Item item68 = new Item("bearchest2", "bearchest2"); item68.Name.English("Jötunn-Bone Armor"); item68.Description.English("Exceptionally heavy and massive armor. You do not go places quickly, but when you get there your foes sure know about it."); item68.Crafting.Add(CraftingTable.BlackForge, 1); item68.MaximumRequiredStationLevel = 7; item68.RequiredItems.Add("bearchest", 1); item68.RequiredItems.Add("BlackMarble", 20); item68.RequiredItems.Add("Chain", 20); item68.RequiredUpgradeItems.Add("Chain", 5); item68.RequiredUpgradeItems.Add("BlackMarble", 10); item68.CraftAmount = 1; Item item69 = new Item("bearlegs2", "bearlegs2"); item69.Name.English("Jötunn-Bone Boots"); item69.Description.English("What is stronger than Dwarven Steel? The bones of the Jötunn, that's what."); item69.Crafting.Add(CraftingTable.BlackForge, 1); item69.MaximumRequiredStationLevel = 7; item69.RequiredItems.Add("bearlegs", 1); item69.RequiredItems.Add("BlackMarble", 20); item69.RequiredItems.Add("JuteBlue", 10); item69.RequiredUpgradeItems.Add("JuteBlue", 5); item69.RequiredUpgradeItems.Add("BlackMarble", 10); item69.CraftAmount = 1; Item item70 = new Item("samuraihelm", "samuraihelm"); item70.Name.English("Seekurai Mask"); item70.Description.English("The fanged and horned mask of a blademaster."); item70.Crafting.Add(CraftingTable.BlackForge, 2); item70.MaximumRequiredStationLevel = 7; item70.RequiredItems.Add("Copper", 30); item70.RequiredItems.Add("BlackMetal", 30); item70.RequiredItems.Add("YggdrasilWood", 30); item70.RequiredItems.Add("TrophySeekerBrute", 1); item70.RequiredUpgradeItems.Add("BlackMetal", 10); item70.RequiredUpgradeItems.Add("TrophySeekerBrute", 1); item70.CraftAmount = 1; Item item71 = new Item("samuraichest", "samuraichest"); item71.Name.English("Seekurai Wings"); item71.Description.English("Flexible and strong armor adorned by imposing Seeker wings."); item71.Crafting.Add(CraftingTable.BlackForge, 2); item71.MaximumRequiredStationLevel = 7; item71.RequiredItems.Add("Copper", 30); item71.RequiredItems.Add("BlackMetal", 30); item71.RequiredItems.Add("YggdrasilWood", 30); item71.RequiredItems.Add("TrophySeeker", 6); item71.RequiredUpgradeItems.Add("Blackmetal", 10); item71.RequiredUpgradeItems.Add("TrophySeeker", 1); item71.CraftAmount = 1; Item item72 = new Item("samurailegs", "samurailegs"); item72.Name.English("Seekurai Claws"); item72.Description.English("Lightweight and tensile materials aid your movement across difficult terrain."); item72.Crafting.Add(CraftingTable.BlackForge, 2); item72.MaximumRequiredStationLevel = 7; item72.RequiredItems.Add("Copper", 30); item72.RequiredItems.Add("BlackMetal", 30); item72.RequiredItems.Add("Yggdrasil", 30); item72.RequiredItems.Add("JuteBlue", 15); item72.RequiredUpgradeItems.Add("Blackmetal", 10); item72.RequiredUpgradeItems.Add("JuteBlue", 5); item72.CraftAmount = 1; Item item73 = new Item("valkhelm", "valkhelm"); item73.Name.English("Aesir Helm"); item73.Description.English("A golden crown for the Forsaken slayer. Whose realm is this, again?"); item73.Crafting.Add(CraftingTable.BlackForge, 1); item73.MaximumRequiredStationLevel = 7; item73.RequiredItems.Add("BlackMetal", 30); item73.RequiredItems.Add("DvergrKeyFragment", 5); item73.RequiredItems.Add("Eitr", 30); item73.RequiredItems.Add("TrophySeekerQueen", 1); item73.RequiredUpgradeItems.Add("BlackMetal", 15); item73.RequiredUpgradeItems.Add("Eitr", 10); item73.CraftAmount = 1; Item item74 = new Item("valkchest", "valkchest"); item74.Name.English("Aesir Chestplate"); item74.Description.English("A splendid, winged and golden breastplate, worn by great leaders."); item74.Crafting.Add(CraftingTable.BlackForge, 1); item74.MaximumRequiredStationLevel = 7; item74.RequiredItems.Add("BlackMetal", 30); item74.RequiredItems.Add("DvergrKeyFragment", 5); item74.RequiredItems.Add("Eitr", 30); item74.RequiredItems.Add("TrophyGoblinKing", 1); item74.RequiredUpgradeItems.Add("BlackMetal", 15); item74.RequiredUpgradeItems.Add("Eitr", 10); item74.CraftAmount = 1; Item item75 = new Item("valklegs", "valklegs"); item75.Name.English("Aesir Legplates"); item75.Description.English("Winged boots and a scaled skirt, fit for those who walk on clouds."); item75.Crafting.Add(CraftingTable.BlackForge, 1); item75.MaximumRequiredStationLevel = 7; item75.RequiredItems.Add("BlackMetal", 30); item75.RequiredItems.Add("DvergrKeyFragment", 5); item75.RequiredItems.Add("Eitr", 30); item75.RequiredItems.Add("ScaleHide", 20); item75.RequiredUpgradeItems.Add("BlackMetal", 15); item75.RequiredUpgradeItems.Add("Eitr", 10); item75.CraftAmount = 1; Item item76 = new Item("warlordhelm", "warlordhelm"); item76.Name.English("Warlord's Greathelm"); item76.Description.English("A horned greathelm clasps your skull, and your eyes burn."); item76.Crafting.Add(CraftingTable.BlackForge, 1); item76.MaximumRequiredStationLevel = 7; item76.RequiredItems.Add("FlametalNew", 15); item76.RequiredItems.Add("BlackMarble", 15); item76.RequiredItems.Add("Softtissue", 15); item76.RequiredItems.Add("TrophyGreydwarfBrute", 1); item76.RequiredUpgradeItems.Add("FlametalNew", 5); item76.RequiredUpgradeItems.Add("BlackMarble", 10); item76.CraftAmount = 1; Item item77 = new Item("warlordchest", "warlordchest"); item77.Name.English("Warlord's Spaulder"); item77.Description.English("The blueish metal is wicked and twisted, seething as if alive. Great bone horns adorn the armor."); item77.Crafting.Add(CraftingTable.BlackForge, 1); item77.MaximumRequiredStationLevel = 7; item77.RequiredItems.Add("FlametalNew", 15); item77.RequiredItems.Add("BlackMarble", 15); item77.RequiredItems.Add("Softtissue", 15); item77.RequiredItems.Add("Chain", 15); item77.RequiredUpgradeItems.Add("FlametalNew", 5); item77.RequiredUpgradeItems.Add("BlackMarble", 10); item77.CraftAmount = 1; Item item78 = new Item("warlordlegs", "warlordlegs"); item78.Name.English("Warlord's Battleboots"); item78.Description.English("Vertebrae and jawbones cling to you, offering a gruesome protection."); item78.Crafting.Add(CraftingTable.BlackForge, 1); item78.MaximumRequiredStationLevel = 7; item78.RequiredItems.Add("FlametalNew", 15); item78.RequiredItems.Add("BlackMarble", 15); item78.RequiredItems.Add("Softtissue", 15); item78.RequiredItems.Add("LoxPelt", 15); item78.RequiredUpgradeItems.Add("FlametalNew", 5); item78.RequiredUpgradeItems.Add("BlackMarble", 10); item78.CraftAmount = 1; Item item79 = new Item("ss_wraithhelm", "ss_wraithhelm"); item79.Name.English("Wraith Mask"); item79.Description.English("A metal coif and crown with an eerie skull mask."); item79.Crafting.Add(CraftingTable.BlackForge, 1); item79.MaximumRequiredStationLevel = 7; item79.RequiredItems.Add("FlametalNew", 10); item79.RequiredItems.Add("BlackMarble", 15); item79.RequiredItems.Add("Softtissue", 15); item79.RequiredItems.Add("TrophySkeletonHildir", 1); item79.RequiredUpgradeItems.Add("FlametalNew", 5); item79.RequiredUpgradeItems.Add("BlackMarble", 10); item79.CraftAmount = 1; Item item80 = new Item("ss_wraithchest", "ss_wraithchest"); item80.Name.English("Wraith Chest"); item80.Description.English("Cruel spikes on ornate black plate armor and a red tabard."); item80.Crafting.Add(CraftingTable.BlackForge, 1); item80.MaximumRequiredStationLevel = 7; item80.RequiredItems.Add("FlametalNew", 10); item80.RequiredItems.Add("BlackMarble", 15); item80.RequiredItems.Add("JuteRed", 15); item80.RequiredItems.Add("TrophyGoblinKing", 1); item80.RequiredUpgradeItems.Add("FlametalNew", 5); item80.RequiredUpgradeItems.Add("BlackMarble", 10); item80.CraftAmount = 1; Item item81 = new Item("ss_wraithlegs", "ss_wraithlegs"); item81.Name.English("Wraith Legs"); item81.Description.English("Spiked dark metal boots. Tamed blackcores hang from your belt, giving your magic a boon."); item81.Crafting.Add(CraftingTable.BlackForge, 1); item81.MaximumRequiredStationLevel = 7; item81.RequiredItems.Add("FlametalNew", 5); item81.RequiredItems.Add("BlackMarble", 15); item81.RequiredItems.Add("Softtissue", 15); item81.RequiredItems.Add("BlackCore", 2); item81.RequiredUpgradeItems.Add("FlametalNew", 5); item81.RequiredUpgradeItems.Add("BlackMarble", 10); item81.CraftAmount = 1; Item item82 = new Item("stjudehelm", "stjudehelm"); item82.Name.English("Finned Greathelm of St. Jude"); item82.Description.English("Another imposing greathelm, adorned by mighty fins."); item82.Crafting.Add(CraftingTable.BlackForge, 1); item82.MaximumRequiredStationLevel = 7; item82.RequiredItems.Add("bphelm", 1); item82.RequiredItems.Add("FlametalNew", 25); item82.RequiredItems.Add("Eitr", 15); item82.RequiredItems.Add("TrophySerpent", 1); item82.RequiredUpgradeItems.Add("FlametalNew", 5); item82.RequiredUpgradeItems.Add("Eitr", 5); item82.CraftAmount = 1; Item item83 = new Item("stjudechest", "stjudechest"); item83.Name.English("St. Jude Armor"); item83.Description.English("The smiths of Valheim did not know if their patron saint, Jude, would ever return. This beautiful armor was crafted to celebrate and show thanks."); item83.Crafting.Add(CraftingTable.BlackForge, 1); item83.MaximumRequiredStationLevel = 7; item83.RequiredItems.Add("bpchest", 1); item83.RequiredItems.Add("FlametalNew", 25); item83.RequiredItems.Add("Eitr", 15); item83.RequiredItems.Add("LinenThread", 20); item83.RequiredUpgradeItems.Add("FlametalNew", 5); item83.RequiredUpgradeItems.Add("Eitr", 5); item83.RequiredUpgradeItems.Add("LinenThread", 5); item83.CraftAmount = 1; Item item84 = new Item("stjudelegs", "stjudelegs"); item84.Name.English("St. Jude Legguards"); item84.Description.English("The heat of Flametal has purified the blackmetal, giving it a blue-ish tinge. Its strength is unparalleled."); item84.Crafting.Add(CraftingTable.BlackForge, 1); item84.MaximumRequiredStationLevel = 7; item84.RequiredItems.Add("bplegs", 1); item84.RequiredItems.Add("FlametalNew", 25); item84.RequiredItems.Add("Eitr", 15); item84.RequiredItems.Add("LinenThread", 20); item84.RequiredUpgradeItems.Add("FlametalNew", 5); item84.RequiredUpgradeItems.Add("Eitr", 5); item84.RequiredUpgradeItems.Add("LinenThread", 5); item84.CraftAmount = 1; Item item85 = new Item("heavybearhelm", "heavybearhelm"); item85.Name.English("The Unspoken Fear"); item85.Description.English("A ferocious helmet, styled to represent a massive, terrible beast of fear, power and might."); item85.Crafting.Add(CraftingTable.BlackForge, 1); item85.MaximumRequiredStationLevel = 7; item85.RequiredItems.Add("BlackMetal", 30); item85.RequiredItems.Add("FlametalNew", 20); item85.RequiredItems.Add("LoxPelt", 15); item85.RequiredItems.Add("TrophySeekerBrute", 2); item85.RequiredUpgradeItems.Add("Silver", 10); item85.RequiredUpgradeItems.Add("FlametalNew", 5); item85.CraftAmount = 1; Item item86 = new Item("heavybearchest", "heavybearchest"); item86.Name.English("Ódr Furs"); item86.Description.English("A hulking shawl of thick furs and heavy plated armor adorned with tusks. The fury emanates from within."); item86.Crafting.Add(CraftingTable.BlackForge, 1); item86.MaximumRequiredStationLevel = 7; item86.RequiredItems.Add("BlackMetal", 30); item86.RequiredItems.Add("FlametalNew", 20); item86.RequiredItems.Add("LoxPelt", 15); item86.RequiredItems.Add("THSwordKrom", 1); item86.RequiredUpgradeItems.Add("BlackMetal", 10); item86.RequiredUpgradeItems.Add("FlametalNew", 5); item86.CraftAmount = 1; Item item87 = new Item("heavybearlegs", "heavybearlegs"); item87.Name.English("Ódr Skirt"); item87.Description.English("A heavy skirt and belts, with an arsenal of weapons and a great hunting horn hanging from them."); item87.Crafting.Add(CraftingTable.BlackForge, 1); item87.MaximumRequiredStationLevel = 7; item87.RequiredItems.Add("BlackMetal", 30); item87.RequiredItems.Add("FlametalNew", 20); item87.RequiredItems.Add("LoxPelt", 15); item87.RequiredItems.Add("SwordIron", 2); item87.RequiredUpgradeItems.Add("BlackMetal", 10); item87.RequiredUpgradeItems.Add("FlametalNew", 5); item87.CraftAmount = 1; Item item88 = new Item("lagihelmalt", "lagihelmalt"); item88.Name.English("Flame Drake Helm"); item88.Description.English("You stole this metal from those who worship it, and fashioned it into the visage of a fire wyrm. It will never truly belong to you, though, as the metal itself remembers the Ash."); item88.Crafting.Add(CraftingTable.BlackForge, 1); item88.MaximumRequiredStationLevel = 7; item88.RequiredItems.Add("TrophyDragonQueen", 1); item88.RequiredItems.Add("FlametalNew", 30); item88.RequiredItems.Add("BlackMetal", 30); item88.RequiredUpgradeItems.Add("FlametalNew", 5); item88.RequiredUpgradeItems.Add("BlackMetal", 10); item88.CraftAmount = 1; Item item89 = new Item("lagichest", "lagichest"); item89.Name.English("Flame Drake Chestpiece"); item89.Description.English("Thick plates of glowing red metal seem to pulse with a life of their own. Nigh on impenetrable, but only the strongest of warriors can wear it, due to the immense weight."); item89.Crafting.Add(CraftingTable.BlackForge, 1); item89.MaximumRequiredStationLevel = 7; item89.RequiredItems.Add("BlackMetal", 30); item89.RequiredItems.Add("FlametalNew", 30); item89.RequiredItems.Add("DragonEgg", 5); item89.RequiredUpgradeItems.Add("FlametalNew", 5); item89.RequiredUpgradeItems.Add("BlackMetal", 10); item89.CraftAmount = 1; Item item90 = new Item("lagipants", "lagipants"); item90.Name.English("Flame Drake Leg Armor"); item90.Description.English("In millennia gone by, folk believed that the world would one day turn to Ash. If they are right, this armor would be useful to have."); item90.Crafting.Add(CraftingTable.BlackForge, 1); item90.MaximumRequiredStationLevel = 7; item90.RequiredItems.Add("BlackMetal", 30); item90.RequiredItems.Add("FlametalNew", 30); item90.RequiredItems.Add("DragonEgg", 5); item90.RequiredUpgradeItems.Add("FlametalNew", 5); item90.RequiredUpgradeItems.Add("BlackMetal", 10); item90.CraftAmount = 1; Item item91 = new Item("ss_korokhelm", "ss_korokhelm"); item91.Name.English("Onslaught Visor"); item91.Description.English("Korok the Barbarian was feared for his reckless ferocity. Legend says he fought in an unstoppable frenzy, and if he fell he would simply rise again, wilder and more dangerous than before."); item91.Crafting.Add(CraftingTable.BlackForge, 1); item91.MaximumRequiredStationLevel = 7; item91.RequiredItems.Add("TrophyDragonQueen", 1); item91.RequiredItems.Add("FlametalNew", 20); item91.RequiredItems.Add("BlackMetal", 20); item91.RequiredUpgradeItems.Add("FlametalNew", 5); item91.RequiredUpgradeItems.Add("BlackMetal", 10); item91.CraftAmount = 1; Item item92 = new Item("ss_korokchest", "ss_korokchest"); item92.Name.English("Onslaught Cuirass"); item92.Description.English("A colossal set of extremely heavy armor, with thick plates of metal that glide across one another in some places and are rivetted together in others."); item92.Crafting.Add(CraftingTable.BlackForge, 1); item92.MaximumRequiredStationLevel = 7; item92.RequiredItems.Add("BlackMetal", 30); item92.RequiredItems.Add("FlametalNew", 30); item92.RequiredItems.Add("DragonEgg", 5); item92.RequiredUpgradeItems.Add("FlametalNew", 5); item92.RequiredUpgradeItems.Add("BlackMetal", 10); item92.CraftAmount = 1; Item item93 = new Item("ss_koroklegs", "ss_koroklegs"); item93.Name.English("Onslaught Sabatons"); item93.Description.English("Heavy waist protection and even heavier metal boots. There is a deep red kilt akin to the mist descending across your vision. Rip and tear."); item93.Crafting.Add(CraftingTable.BlackForge, 1); item93.MaximumRequiredStationLevel = 7; item93.RequiredItems.Add("BlackMetal", 30); item93.RequiredItems.Add("FlametalNew", 30); item93.RequiredItems.Add("DragonEgg", 5); item93.RequiredUpgradeItems.Add("FlametalNew", 5); item93.RequiredUpgradeItems.Add("BlackMetal", 10); item93.CraftAmount = 1; Item item94 = new Item("trueskoghelm", "trueskoghelm"); item94.Name.English("Deep North Helm"); item94.Description.English("An ancient, mystical helmet. This is the real deal."); item94.Crafting.Add(CraftingTable.BlackForge, 1); item94.MaximumRequiredStationLevel = 7; item94.RequiredItems.Add("skoghelm", 1); item94.RequiredItems.Add("FlametalNew", 20); item94.RequiredItems.Add("Eitr", 20); item94.RequiredItems.Add("TrophySGolem", 1); item94.RequiredUpgradeItems.Add("FlametalNew", 15); item94.RequiredUpgradeItems.Add("Eitr", 10); item94.CraftAmount = 1; Item item95 = new Item("trueskogchest", "trueskogchest"); item95.Name.English("Deep North Chest"); item95.Description.English("Moss has grown through the strange, enchanted stone-metal alloy."); item95.Crafting.Add(CraftingTable.BlackForge, 1); item95.MaximumRequiredStationLevel = 7; item95.RequiredItems.Add("skogchest", 1); item95.RequiredItems.Add("FlametalNew", 20); item95.RequiredItems.Add("Eitr", 20); item95.RequiredItems.Add("TrophySGolem", 2); item95.RequiredUpgradeItems.Add("FlametalNew", 15); item95.RequiredUpgradeItems.Add("Eitr", 10); item95.CraftAmount = 1; Item item96 = new Item("trueskoglegs", "trueskoglegs"); item96.Name.English("Deep North Legguards"); item96.Description.English("The sinewy strength and fevor of the Brute still courses through these leggings, propelling their wearer towards battle."); item96.Crafting.Add(CraftingTable.BlackForge, 1); item96.MaximumRequiredStationLevel = 7; item96.RequiredItems.Add("skoglegs", 1); item96.RequiredItems.Add("FlametalNew", 20); item96.RequiredItems.Add("Eitr", 20); item96.RequiredItems.Add("TrophyGoblinBrute", 1); item96.RequiredUpgradeItems.Add("FlametalNew", 15); item96.RequiredUpgradeItems.Add("Eitr", 10); item96.CraftAmount = 1; Item item97 = new Item("sven2", "sven2"); item97.Name.English("Dragon Champion Greathelm (eyepatch)"); item97.Description.English("Sven's life was forever entwined in the sea and the mysteries it held. Many believe he rode a mighty serpent over waves as tall as mountains and found the very edge of this world."); item97.Crafting.Add(CraftingTable.BlackForge, 1); item97.MaximumRequiredStationLevel = 7; item97.RequiredItems.Add("sven", 1); item97.RequiredItems.Add("FlametalNew", 30); item97.RequiredItems.Add("TrophyHatchling", 5); item97.RequiredItems.Add("TrophySerpent", 1); item97.RequiredUpgradeItems.Add("FlametalNew", 10); item97.RequiredUpgradeItems.Add("TrophyHatchling", 1); item97.CraftAmount = 1; Item item98 = new Item("sven3", "sven3"); item98.Name.English("Dragon Champion Greathelm"); item98.Description.English("Sven's life was forever entwined in the sea and the mysteries it held. Many believe he rode a mighty serpent over waves as tall as mountains and found the very edge of this world."); item98.Crafting.Add(CraftingTable.BlackForge, 1); item98.MaximumRequiredStationLevel = 7; item98.RequiredItems.Add("sven", 1); item98.RequiredItems.Add("FlametalNew", 30); item98.RequiredItems.Add("TrophyHatchling", 5); item98.RequiredItems.Add("TrophySerpent", 1); item98.RequiredUpgradeItems.Add("FlametalNew", 10); item98.RequiredUpgradeItems.Add("TrophyHatchling", 1); item98.CraftAmount = 1; Item item99 = new Item("sven2chest", "sven2chest"); item99.Name.English("Ornate Black Platemail"); item99.Description.English("Redclaw, the greatest of all smiths, took up Sven's silver armor. \"Strong,\" he muttered, \"but it could be stronger still.\" "); item99.Crafting.Add(CraftingTable.BlackForge, 1); item99.MaximumRequiredStationLevel = 7; item99.RequiredItems.Add("svenchest", 1); item99.RequiredItems.Add("FlametalNew", 30); item99.RequiredItems.Add("WolfPelt", 20); item99.RequiredUpgradeItems.Add("FlametalNew", 10); item99.RequiredUpgradeItems.Add("WolfPelt", 10); item99.CraftAmount = 1; Item item100 = new Item("sven2legs", "sven2legs"); item100.Name.English("Ancestral Kilt"); item100.Description.English("Blackmetal and serpent scales have empowered these leggaurds with the power of the sea. Warm wolf fur lines the ancestral kilt."); item100.Crafting.Add(CraftingTable.BlackForge, 1); item100.MaximumRequiredStationLevel = 7; item100.RequiredItems.Add("svenlegs", 1); item100.RequiredItems.Add("FlametalNew", 30); item100.RequiredItems.Add("WolfPelt", 20); item100.RequiredItems.Add("SerpentScale", 15); item100.RequiredUpgradeItems.Add("FlametalNew", 10); item100.RequiredUpgradeItems.Add("SerpentScale", 5); item100.CraftAmount = 1; Item item101 = new Item("ss_frodehelm", "ss_frodehelm"); item101.Name.English("Greathelm of Thetis"); item101.Description.English("An ornate helmet, crested by a winged serpent. Said to have been worn by Frode, son of the Dragon and Champion of the Sea. "); item101.Crafting.Add(CraftingTable.BlackForge, 1); item101.MaximumRequiredStationLevel = 7; item101.RequiredItems.Add("ancientironhelm", 1); item101.RequiredItems.Add("sven2", 1); item101.RequiredItems.Add("FlametalNew", 10); item101.RequiredItems.Add("Eitr", 20); item101.RequiredUpgradeItems.Add("FlametalNew", 15); item101.RequiredUpgradeItems.Add("Eitr", 10); item101.CraftAmount = 1; Item item102 = new Item("ss_frodechest", "ss_frodechest"); item102.Name.English("Armor of Thetis"); item102.Description.English("Magnificently intricate armor, in places worked to look like mighty scales."); item102.Crafting.Add(CraftingTable.BlackForge, 1); item102.MaximumRequiredStationLevel = 7; item102.RequiredItems.Add("ancientironchest", 1); item102.RequiredItems.Add("sven2chest", 1); item102.RequiredItems.Add("FlametalNew", 10); item102.RequiredItems.Add("Eitr", 20); item102.RequiredUpgradeItems.Add("FlametalNew", 15); item102.RequiredUpgradeItems.Add("Eitr", 10); item102.CraftAmount = 1; Item item103 = new Item("ss_frodelegs", "ss_frodelegs"); item103.Name.English("Legguards of Thetis"); item103.Description.English("Glorious winged boots and a kilt with leather belts."); item103.Crafting.Add(CraftingTable.BlackForge, 1); item103.MaximumRequiredStationLevel = 7; item103.RequiredItems.Add("ancientironlegs", 1); item103.RequiredItems.Add("sven2legs", 1); item103.RequiredItems.Add("FlametalNew", 10); item103.RequiredItems.Add("Eitr", 20); item103.RequiredUpgradeItems.Add("FlametalNew", 15); item103.RequiredUpgradeItems.Add("Eitr", 10); item103.CraftAmount = 1; Item item104 = new Item("ss_storrhelm", "ss_storrhelm"); item104.Name.English("Last Hero's Helm"); item104.Description.English("A greathelm fixed with massive horns. Such a thing does not make sense in the age of mortals, but they are not who it was made for."); item104.Crafting.Add(CraftingTable.BlackForge, 1); item104.MaximumRequiredStationLevel = 7; item104.RequiredItems.Add("stjudehelm", 1); item104.RequiredItems.Add("bearhelm2", 1); item104.RequiredItems.Add("ss_korokhelm", 1); item104.RequiredItems.Add("Eitr", 20); item104.RequiredUpgradeItems.Add("FlametalNew", 15); item104.RequiredUpgradeItems.Add("Eitr", 10); item104.CraftAmount = 1; Item item105 = new Item("ss_storrchest", "ss_storrchest"); item105.Name.English("Last Hero's Cuirass"); item105.Description.English("Storr-Elgr, \"The Big Moose\", famously never used a shield, instead wielding huge and ferocious two-handed weapons. His strength was said to be that of ten men, because his heart was pure."); item105.Crafting.Add(CraftingTable.BlackForge, 1); item105.MaximumRequiredStationLevel = 7; item105.RequiredItems.Add("stjudechest", 1); item105.RequiredItems.Add("bearchest2", 1); item105.RequiredItems.Add("ss_korokchest", 1); item105.RequiredItems.Add("Eitr", 20); item105.RequiredUpgradeItems.Add("FlametalNew", 15); item105.RequiredUpgradeItems.Add("Eitr", 10); item105.CraftAmount = 1; Item item106 = new Item("ss_storrlegs", "ss_storrlegs"); item106.Name.English("Last Hero's Greaves"); item106.Description.English("Each thunderous footfall paralyzes your foes with fear, for your presence will turn the tide of any battle."); item106.Crafting.Add(CraftingTable.BlackForge, 1); item106.MaximumRequiredStationLevel = 7; item106.RequiredItems.Add("stjudelegs", 1); item106.RequiredItems.Add("bearlegs2", 1); item106.RequiredItems.Add("ss_koroklegs", 1); item106.RequiredItems.Add("Eitr", 20); item106.RequiredUpgradeItems.Add("FlametalNew", 15); item106.RequiredUpgradeItems.Add("Eitr", 10); item106.CraftAmount = 1; Item item107 = new Item("wshelm", "wshelm"); item107.Name.English("World Serpent Casque"); item107.Description.English("A magnificent casque, both angelic and draconic."); item107.Crafting.Add(CraftingTable.BlackForge, 1); item107.MaximumRequiredStationLevel = 7; item107.RequiredItems.Add("lagihelmalt", 1); item107.RequiredItems.Add("valkhelm", 1); item107.RequiredItems.Add("sven", 1); item107.RequiredItems.Add("Eitr", 20); item107.RequiredUpgradeItems.Add("FlametalNew", 15); item107.RequiredUpgradeItems.Add("Eitr", 10); item107.CraftAmount = 1; Item item108 = new Item("wschest", "wschest"); item108.Name.English("World Serpent Cuirass"); item108.Description.English("An Aesir and a Dragon walk into a tavern... You are wearing the punchline."); item108.Crafting.Add(CraftingTable.BlackForge, 1); item108.MaximumRequiredStationLevel = 7; item108.RequiredItems.Add("lagichest", 1); item108.RequiredItems.Add("valkchest", 1); item108.RequiredItems.Add("svenchest", 1); item108.RequiredItems.Add("Eitr", 20); item108.RequiredUpgradeItems.Add("FlametalNew", 15); item108.RequiredUpgradeItems.Add("Eitr", 10); item108.CraftAmount = 1; Item item109 = new Item("wslegs", "wslegs"); item109.Name.English("World Serpent Greaves"); item109.Description.English("Plate mail armor of an other-wordly pearlescent material; metal fused with dragon scale."); item109.Crafting.Add(CraftingTable.BlackForge, 1); item109.MaximumRequiredStationLevel = 7; item109.RequiredItems.Add("lagipants", 1); item109.RequiredItems.Add("valklegs", 1); item109.RequiredItems.Add("svenlegs", 1); item109.RequiredItems.Add("Eitr", 20); item109.RequiredUpgradeItems.Add("FlametalNew", 15); item109.RequiredUpgradeItems.Add("Eitr", 10); item109.CraftAmount = 1; Item item110 = new Item("ss_ashcape", "ss_ashcape"); item110.Name.English("Collarless Ashen Cape"); item110.Description.English("Thin metal threads are woven into this cape to create an intricate pattern, like a destiny woven by the Norns themselves."); item110.Crafting.Add(CraftingTable.BlackForge, 1); item110.MaximumRequiredStationLevel = 7; item110.RequiredItems.Add("AskHide", 6); item110.RequiredItems.Add("MorgenSinew", 2); item110.RequiredItems.Add("FlametalNew", 5); item110.RequiredUpgradeItems.Add("AskHide", 2); item110.CraftAmount = 1; Item item111 = new Item("ss_serpentcape", "ss_serpentcape"); item111.Name.English("Serpent Scale Cloak"); item111.Description.English("Large, glistening serpent scales protect from flame."); item111.Crafting.Add(CraftingTable.BlackForge, 1); item111.MaximumRequiredStationLevel = 7; item111.RequiredItems.Add("AskHide", 6); item111.RequiredItems.Add("Eitr", 30); item111.RequiredItems.Add("TrophySerpent", 1); item111.RequiredUpgradeItems.Add("AskHide", 2); item111.CraftAmount = 1; Item item112 = new Item("ss_storrcape", "ss_storrcape"); item112.Name.English("Heavy Lox Cape"); item112.Description.English("Extra fur for extra warmth, cutting either a ridiculous or imposing figure, depending on opinion. Smells faintly of blueberries."); item112.Crafting.Add(CraftingTable.BlackForge, 1); item112.MaximumRequiredStationLevel = 7; item112.RequiredItems.Add("AskHide", 6); item112.RequiredItems.Add("LoxPelt", 50); item112.RequiredItems.Add("FlametalNew", 8); item112.RequiredItems.Add("Blueberries", 5); item112.RequiredUpgradeItems.Add("AskHide", 2); item112.RequiredUpgradeItems.Add("LoxPelt", 10); item112.CraftAmount = 1; 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 { AllManagersModTemplateLogger.LogDebug((object)"ReadConfigValues called"); ((BaseUnityPlugin)this).Config.Reload(); } catch { AllManagersModTemplateLogger.LogError((object)("There was an issue loading your " + ConfigFileName)); AllManagersModTemplateLogger.LogError((object)"Please check your config entries for spelling and format!"); } } private ConfigEntry<T> config<[<f380f414-a560-4cd6-a8f1-1dbee40db4b4>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<[<f380f414-a560-4cd6-a8f1-1dbee40db4b4>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 AllManagersModTemplatePlugin() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; ConnectionError = ""; AllManagersModTemplateLogger = Logger.CreateLogSource("SouthsilArmor"); ConfigSync = new ConfigSync("southsil.SouthsilArmor") { DisplayName = "SouthsilArmor", CurrentVersion = "3.1.5", MinimumRequiredVersion = "3.1.5" }; _serverConfigLocked = 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 { [<ee38b520-fe95-4980-8290-a068ff522130>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 AllManagersModTemplatePlugin.AllManagersModTemplateLogger.LogDebug((object)"Registering version RPC handler"); peer.m_rpc.Register<ZPackage>("SouthsilArmor_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_AllManagersModTemplate_Version); AllManagersModTemplatePlugin.AllManagersModTemplateLogger.LogDebug((object)"Invoking version check"); ZPackage val = new ZPackage(); val.Write("3.1.5"); peer.m_rpc.Invoke("SouthsilArmor_VersionCheck", new object[1] { val }); } } [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] public static class VerifyClient { private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance) { if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc)) { return true; } AllManagersModTemplatePlugin.AllManagersModTemplateLogger.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(), "SouthsilArmorRequestAdminSync", new object[1] { (object)new ZPackage() }); } } [HarmonyPatch(typeof(FejdStartup), "ShowConnectError")] public class ShowConnectionError { [<ee38b520-fe95-4980-8290-a068ff522130>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" + AllManagersModTemplatePlugin.ConnectionError; } } } [HarmonyPatch(typeof(ZNet), "Disconnect")] public static class RemoveDisconnectedPeerFromVerified { [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { if (__instance.IsServer()) { AllManagersModTemplatePlugin.AllManagersModTemplateLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list")); RpcHandlers.ValidatedPeers.Remove(peer.m_rpc); } } } [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] public static class RpcHandlers { public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>(); public static void RPC_AllManagersModTemplate_Version(ZRpc rpc, ZPackage pkg) { string text = pkg.ReadString(); AllManagersModTemplatePlugin.AllManagersModTemplateLogger.LogInfo((object)("Version check, local: 3.1.5, remote: " + text)); if (text != "3.1.5") { AllManagersModTemplatePlugin.ConnectionError = "SouthsilArmor Installed: 3.1.5\n Needed: " + text; if (ZNet.instance.IsServer()) { AllManagersModTemplatePlugin.AllManagersModTemplateLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting...")); rpc.Invoke("Error", new object[1] { 3 }); } } else if (!ZNet.instance.IsServer()) { AllManagersModTemplatePlugin.AllManagersModTemplateLogger.LogInfo((object)"Received same version from server!"); } else { AllManagersModTemplatePlugin.AllManagersModTemplateLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list")); ValidatedPeers.Add(rpc); } } } } namespace PieceManager { [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] [PublicAPI] public static class MaterialReplacer { [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] public enum ShaderType { PieceShader, VegetationShader, RockShader, RugShader, GrassShader, CustomCreature, UseUnityShader } private static readonly Dictionary<GameObject, bool> ObjectToSwap; private static readonly Dictionary<string, Material> OriginalMaterials; private static readonly Dictionary<GameObject, ShaderType> ObjectsForShaderReplace; private static readonly HashSet<Shader> CachedShaders; private static bool hasRun; static MaterialReplacer() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown CachedShaders = new HashSet<Shader>(); hasRun = false; OriginalMaterials = new Dictionary<string, Material>(); ObjectToSwap = new Dictionary<GameObject, bool>(); ObjectsForShaderReplace = new Dictionary<GameObject, ShaderType>(); Harmony val = new Harmony("org.bepinex.helpers.PieceManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZoneSystem), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(MaterialReplacer), "ReplaceAllMaterialsWithOriginal", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static void RegisterGameObjectForShaderSwap(GameObject go, ShaderType type) { if (!ObjectsForShaderReplace.ContainsKey(go)) { ObjectsForShaderReplace.Add(go, type); } } public static void RegisterGameObjectForMatSwap(GameObject go, bool isJotunnMock = false) { if (!ObjectToSwap.ContainsKey(go)) { ObjectToSwap.Add(go, isJotunnMock); } } private static void GetAllMaterials() { Material[] array = Resources.FindObjectsOfTypeAll<Material>(); foreach (Material val in array) { OriginalMaterials[((Object)val).name] = val; } } [HarmonyPriority(700)] private static void ReplaceAllMaterialsWithOriginal() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 if ((int)SystemInfo.graphicsDeviceType == 4 || hasRun) { return; } if (OriginalMaterials.Count == 0) { GetAllMaterials(); } foreach (KeyValuePair<GameObject, bool> item in ObjectToSwap) { GameObject key = item.Key; bool value = item.Value; ProcessGameObjectMaterials(key, value); } AssetBundle[] array = Resources.FindObjectsOfTypeAll<AssetBundle>(); AssetBundle[] array2 = array; foreach (AssetBundle val in array2) { IEnumerable<Shader> enumerable3; try { IEnumerable<Shader> enumerable2; if (!val.isStreamedSceneAssetBundle || !Object.op_Implicit((Object)(object)val)) { IEnumerable<Shader> enumerable = val.LoadAllAssets<Shader>(); enumerable2 = enumerable; } else { enumerable2 = from shader in ((IEnumerable<string>)val.GetAllAssetNames()).Select((Func<string, Shader>)val.LoadAsset<Shader>) where (Object)(object)shader != (Object)null select shader; } enumerable3 = enumerable2; } catch (Exception) { continue; } if (enumerable3 == null) { continue; } foreach (Shader item2 in enumerable3) { CachedShaders.Add(item2); } } foreach (KeyValuePair<GameObject, ShaderType> item3 in ObjectsForShaderReplace) { GameObject key2 = item3.Key; ShaderType value2 = item3.Value; ProcessGameObjectShaders(key2, value2); } hasRun = true; } private static void ProcessGameObjectMaterials(GameObject go, bool isJotunnMock) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { Material[] sharedMaterials = val.sharedMaterials.Select([<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] (Material material) => ReplaceMaterial(material, isJotunnMock)).ToArray(); val.sharedMaterials = sharedMaterials; } } private static Material ReplaceMaterial(Material originalMaterial, bool isJotunnMock) { string text = (isJotunnMock ? "JVLmock_" : "_REPLACE_"); if (!((Object)originalMaterial).name.StartsWith(text, StringComparison.Ordinal)) { return originalMaterial; } string text2 = ((Object)originalMaterial).name.Replace(" (Instance)", "").Replace(text, ""); if (OriginalMaterials.TryGetValue(text2, out var value)) { return value; } Debug.LogWarning((object)("No suitable material found to replace: " + text2)); return originalMaterial; } private static void ProcessGameObjectShaders(GameObject go, ShaderType shaderType) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { Material[] sharedMaterials = val.sharedMaterials; foreach (Material val2 in sharedMaterials) { if ((Object)(object)val2 != (Object)null) { val2.shader = GetShaderForType(val2.shader, shaderType, ((Object)val2.shader).name); } } } } private static Shader GetShaderForType(Shader orig, ShaderType shaderType, string originalShaderName) { return (Shader)(shaderType switch { ShaderType.PieceShader => FindShaderWithName(orig, "Custom/Piece"), ShaderType.VegetationShader => FindShaderWithName(orig, "Custom/Vegetation"), ShaderType.RockShader => FindShaderWithName(orig, "Custom/StaticRock"), ShaderType.RugShader => FindShaderWithName(orig, "Custom/Rug"), ShaderType.GrassShader => FindShaderWithName(orig, "Custom/Grass"), ShaderType.CustomCreature => FindShaderWithName(orig, "Custom/Creature"), ShaderType.UseUnityShader => FindShaderWithName(orig, ((Object)(object)FindShaderWithName(orig, originalShaderName) != (Object)null) ? originalShaderName : "ToonDeferredShading2017"), _ => FindShaderWithName(orig, "Standard"), }); } public static Shader FindShaderWithName(Shader origShader, string name) { foreach (Shader cachedShader in CachedShaders) { if (((Object)cachedShader).name == name) { return cachedShader; } } return origShader; } } [PublicAPI] public enum CraftingTable { None, [InternalName("piece_workbench")] Workbench, [InternalName("piece_cauldron")] Cauldron, [InternalName("forge")] Forge, [InternalName("piece_artisanstation")] ArtisanTable, [InternalName("piece_stonecutter")] StoneCutter, [InternalName("piece_magetable")] MageTable, [InternalName("blackforge")] BlackForge, Custom } [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] public class InternalName : Attribute { public readonly string internalName; public InternalName(string internalName) { this.internalName = internalName; } } [PublicAPI] [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] public class ExtensionList { public readonly List<ExtensionConfig> ExtensionStations = new List<ExtensionConfig>(); public void Set(CraftingTable table, int maxStationDistance = 5) { ExtensionStations.Add(new ExtensionConfig { Table = table, maxStationDistance = maxStationDistance }); } public void Set(string customTable, int maxStationDistance = 5) { ExtensionStations.Add(new ExtensionConfig { Table = CraftingTable.Custom, custom = customTable, maxStationDistance = maxStationDistance }); } } public struct ExtensionConfig { public CraftingTable Table; public float maxStationDistance; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] public string custom; } [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] [PublicAPI] public class CraftingStationList { public readonly List<CraftingStationConfig> Stations = new List<CraftingStationConfig>(); public void Set(CraftingTable table) { Stations.Add(new CraftingStationConfig { Table = table }); } public void Set(string customTable) { Stations.Add(new CraftingStationConfig { Table = CraftingTable.Custom, custom = customTable }); } } public struct CraftingStationConfig { public CraftingTable Table; public int level; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] public string custom; } [PublicAPI] public enum BuildPieceCategory { Misc = 0, Crafting = 1, BuildingWorkbench = 2, BuildingStonecutter = 3, Furniture = 4, All = 100, Custom = 99 } [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] [PublicAPI] [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] public class RequiredResourcesList { public readonly List<Requirement> Requirements = new List<Requirement>(); public void Add(string item, int amount, bool recover) { Requirements.Add(new Requirement { itemName = item, amount = amount, recover = recover }); } } public struct Requirement { [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(1)] public string itemName; public int amount; public bool recover; } public struct SpecialProperties { [Description("Admins should be the only ones that can build this piece.")] public bool AdminOnly; [Description("Turns off generating a config for this build piece.")] public bool NoConfig; } [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] [PublicAPI] public class BuildingPieceCategory { public BuildPieceCategory Category; public string custom = ""; public void Set(BuildPieceCategory category) { Category = category; } public void Set(string customCategory) { Category = BuildPieceCategory.Custom; custom = customCategory; } } [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] [PublicAPI] public class PieceTool { public readonly HashSet<string> Tools = new HashSet<string>(); public void Add(string tool) { Tools.Add(tool); } } [PublicAPI] [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(1)] public class BuildPiece { [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] internal class PieceConfig { public ConfigEntry<string> craft = null; public ConfigEntry<BuildPieceCategory> category = null; public ConfigEntry<string> customCategory = null; public ConfigEntry<string> tools = null; public ConfigEntry<CraftingTable> extensionTable = null; public ConfigEntry<string> customExtentionTable = null; public ConfigEntry<float> maxStationDistance = null; public ConfigEntry<CraftingTable> table = null; public ConfigEntry<string> customTable = null; } [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order; [UsedImplicitly] public bool? Browsable; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] [UsedImplicitly] public string Category; [UsedImplicitly] [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(new byte[] { 2, 1 })] public Action<ConfigEntryBase> CustomDrawer; } [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(0)] private class SerializedRequirements { public readonly List<Requirement> Reqs; public SerializedRequirements(List<Requirement> reqs) { Reqs = reqs; } public SerializedRequirements(string reqs) { Reqs = reqs.Split(new char[1] { ',' }).Select([<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] (string r) => { string[] array = r.Split(new char[1] { ':' }); Requirement result = default(Requirement); result.itemName = array[0]; result.amount = ((array.Length <= 1 || !int.TryParse(array[1], out var result2)) ? 1 : result2); bool result3 = default(bool); result.recover = array.Length <= 2 || !bool.TryParse(array[2], out result3) || result3; return result; }).ToList(); } public override string ToString() { return string.Join(",", Reqs.Select([<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] (Requirement r) => $"{r.itemName}:{r.amount}:{r.recover}")); } [return: <f380f414-a560-4cd6-a8f1-1dbee40db4b4>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)(((!string.IsNullOrWhiteSpace(((Object)plugin).name)) ? ("[" + ((Object)plugin).name + "]") : "") + " The required item '" + name + "' does not exist.")); } return val; } public static Requirement[] toPieceReqs(SerializedRequirements craft) { Dictionary<string, Requirement> dictionary = craft.Reqs.Where((Requirement r) => r.itemName != "").ToDictionary((Func<Requirement, string>)([<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] (Requirement r) => r.itemName), (Func<Requirement, Requirement>)([<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] (Requirement r) => { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) ItemDrop val = ResItem(r); return (val == null) ? ((Requirement)null) : new Requirement { m_amount = r.amount, m_resItem = val, m_recover = r.recover }; })); return dictionary.Values.Where([<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(0)] (Requirement v) => v != null).ToArray(); [<ee38b520-fe95-4980-8290-a068ff522130>NullableContext(2)] static ItemDrop ResItem(Requirement r) { return fetchByName(ObjectDB.instance, r.itemName); } } } internal static readonly List<BuildPiece> registeredPieces = new List<BuildPiece>(); private static readonly Dictionary<Piece, BuildPiece> pieceMap = new Dictionary<Piece, BuildPiece>(); internal static Dictionary<BuildPiece, PieceConfig> pieceConfigs = new Dictionary<BuildPiece, PieceConfig>(); internal List<Conversion> Conversions = new List<Conversion>(); internal List<ItemConversion> conversions = new List<ItemConversion>(); [Description("Disables generation of the configs for your pieces. This is global, this turns it off for all pieces in your mod.")] public static bool ConfigurationEnabled = true; public readonly GameObject Prefab; [Description("Specifies the resources needed to craft the piece.\nUse .Add to add resources with their internal ID and an amount.\nUse one .Add for each resource type the building piece should need.")] public readonly RequiredResourcesList RequiredItems = new RequiredResourcesList(); [Description("Sets the category for the building piece.")] public readonly BuildingPieceCategory Category = new BuildingPieceCategory(); [Description("Specifies the tool needed to build your piece.\nUse .Add to add a tool.")] public readonly PieceTool Tool = new PieceTool(); [Description("Specifies the crafting station needed to build your piece.\nUse .Add to add a crafting station, using the CraftingTable enum and a minimum level for the crafting station.")] public CraftingStationList Crafting = new CraftingStationList(); [Description("Makes this piece a station extension")] public ExtensionList Extension = new ExtensionList(); [Description("Change the extended/special properties of your build piece.")] public SpecialProperties SpecialProperties; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] [Description("Specifies a config entry which toggles whether a recipe is active.")] public ConfigEntryBase RecipeIsActive = null; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] private LocalizeKey _name; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] private LocalizeKey _description; internal string[] activeTools = null; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] private static object configManager; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] private static Localization _english; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] internal static BaseUnityPlugin _plugin = null; private static bool hasConfigSync = true; [<f380f414-a560-4cd6-a8f1-1dbee40db4b4>Nullable(2)] private static object _configSync; public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } Piece component = Prefab.GetComponent<Piece>(); if (component.m_name.StartsWith("$")) { _name = new LocalizeKey(component.m_name); } else { string text = "$piece_" + ((Object)Prefab).name.Replace(" ", "_"); _name = new LocalizeKey(text).English(component.m_name); component.m_name = text; } return _name; } } public LocalizeKey Description { get { LocalizeKey description = _description; if (description != null) { return description; } Piece component = Prefab.GetComponent<Piece>(); if