Decompiled source of SouthsilArmor v3.0.5
SouthsilArmor.dll
Decompiled 3 weeks 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.Cryptography; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using Microsoft.CodeAnalysis; using ServerSync; using TMPro; using UnityEngine; 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: ComVisible(false)] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyFileVersion("3.0.5")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("southsil")] [assembly: AssemblyProduct("SouthsilArmor")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyTrademark("")] [assembly: AssemblyTitle("SouthsilArmor")] [assembly: AssemblyDescription("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("3.0.5.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<51302ac4-f547-4e29-8426-9eb886d2a713>Embedded] internal sealed class <51302ac4-f547-4e29-8426-9eb886d2a713>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [<51302ac4-f547-4e29-8426-9eb886d2a713>Embedded] [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <10264979-2fb9-4d3b-b32a-7de7f80d3c29>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <10264979-2fb9-4d3b-b32a-7de7f80d3c29>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <10264979-2fb9-4d3b-b32a-7de7f80d3c29>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [<51302ac4-f547-4e29-8426-9eb886d2a713>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class <57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContextAttribute : Attribute { public readonly byte Flag; public <57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace SouthsilArmor { [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(0)] [BepInPlugin("southsil.SouthsilArmor", "SouthsilArmor", "3.0.5")] [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(1)] public class SouthsilArmor : BaseUnityPlugin { [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(0)] public enum Toggle { On = 1, Off = 0 } [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order = null; [UsedImplicitly] public bool? Browsable = null; [UsedImplicitly] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] public string Category = null; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(new byte[] { 2, 1 })] [UsedImplicitly] public Action<ConfigEntryBase> CustomDrawer = null; } [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>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.0.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.BlackForge, 1); 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.BlackForge, 1); 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.BlackForge, 1); 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", 2); 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("obswolfhelm", "obswolfhelm"); item49.Name.English("Heavy Fenrir Helm"); item49.Description.English("An infused obsidian mask, resembling a great wolf. You are the hunter now."); item49.Crafting.Add(CraftingTable.BlackForge, 1); item49.MaximumRequiredStationLevel = 7; item49.RequiredItems.Add("BlackMetal", 30); item49.RequiredItems.Add("Obsidian", 30); item49.RequiredItems.Add("TrophyUlv", 5); item49.RequiredItems.Add("Ruby", 1); item49.RequiredUpgradeItems.Add("BlackMetal", 10); item49.RequiredUpgradeItems.Add("Obsidian", 10); item49.RequiredUpgradeItems.Add("WolfHairBundle", 5); item49.CraftAmount = 1; Item item50 = new Item("obswolfchest", "obswolfchest"); item50.Name.English("Heavy Fenrir Armor"); item50.Description.English("A beastial set of armor made from blood infused obsidian and thick, shaggy fur."); item50.Crafting.Add(CraftingTable.BlackForge, 1); item50.MaximumRequiredStationLevel = 7; item50.RequiredItems.Add("BlackMetal", 30); item50.RequiredItems.Add("Obsidian", 30); item50.RequiredItems.Add("WolfHairBundle", 20); item50.RequiredItems.Add("SilverNecklace", 1); item50.RequiredUpgradeItems.Add("BlackMetal", 10); item50.RequiredUpgradeItems.Add("Obsidian", 10); item50.RequiredUpgradeItems.Add("WolfHairBundle", 5); item50.CraftAmount = 1; Item item51 = new Item("obswolflegs", "obswolflegs"); item51.Name.English("Heavy Fenrir Boots"); item51.Description.English("The blood of Fulings strengthens obsidian, but also dulls its glow in the moonlight. Sneaky sneak."); item51.Crafting.Add(CraftingTable.BlackForge, 1); item51.MaximumRequiredStationLevel = 7; item51.RequiredItems.Add("BlackMetal", 30); item51.RequiredItems.Add("Obsidian", 30); item51.RequiredItems.Add("WolfHairBundle", 20); item51.RequiredItems.Add("JuteBlue", 10); item51.RequiredUpgradeItems.Add("BlackMetal", 10); item51.RequiredUpgradeItems.Add("Obsidian", 10); item51.CraftAmount = 1; Item item52 = new Item("heavycarhelm", "heavycarhelm"); item52.Name.English("Twelve-eyed Helm"); item52.Description.English("An insectoid husk which refracts and enhances your vision."); item52.Crafting.Add(CraftingTable.BlackForge, 1); item52.MaximumRequiredStationLevel = 7; item52.RequiredItems.Add("Carapace", 20); item52.RequiredItems.Add("Iron", 25); item52.RequiredItems.Add("TrophyGjall", 3); item52.RequiredItems.Add("Mandible", 4); item52.RequiredUpgradeItems.Add("Mandible", 10); item52.RequiredUpgradeItems.Add("TrophyGjall", 1); item52.CraftAmount = 1; Item item53 = new Item("heavycarchest", "heavycarchest"); item53.Name.English("Gjall-hunter Harness"); item53.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."); item53.Crafting.Add(CraftingTable.BlackForge, 1); item53.MaximumRequiredStationLevel = 7; item53.RequiredItems.Add("Carapace", 20); item53.RequiredItems.Add("Iron", 30); item53.RequiredItems.Add("TrophySkeleton", 1); item53.RequiredItems.Add("Mandible", 15); item53.RequiredUpgradeItems.Add("Carapace", 10); item53.RequiredUpgradeItems.Add("Mandible", 5); item53.CraftAmount = 1; Item item54 = new Item("heavycarlegs", "heavycarlegs"); item54.Name.English("Gjall-hunter Legguards"); item54.Description.English("Chainmail leggings have been further strengthened with thick carapace shells and mandibles, cut from your many foes."); item54.Crafting.Add(CraftingTable.BlackForge, 1); item54.MaximumRequiredStationLevel = 7; item54.RequiredItems.Add("Carapace", 20); item54.RequiredItems.Add("Iron", 20); item54.RequiredItems.Add("TrophySkeleton", 1); item54.RequiredItems.Add("Mandible", 10); item54.RequiredUpgradeItems.Add("Carapace", 10); item54.RequiredUpgradeItems.Add("Mandible", 5); item54.CraftAmount = 1; Item item55 = new Item("frostmagehelm", "frostmagehelm"); item55.Name.English("Crystalline Mask"); item55.Description.English("A hooded mask of frozen crystal."); item55.Crafting.Add(CraftingTable.MageTable, 1); item55.MaximumRequiredStationLevel = 7; item55.RequiredItems.Add("Crystal", 30); item55.RequiredItems.Add("Eitr", 20); item55.RequiredItems.Add("JuteBlue", 20); item55.RequiredItems.Add("Feathers", 20); item55.RequiredUpgradeItems.Add("Crystal", 10); item55.RequiredUpgradeItems.Add("Eitr", 10); item55.CraftAmount = 1; Item item56 = new Item("frostmagechest", "frostmagechest"); item56.Name.English("Hrímþurs Robe"); item56.Description.English("Embroided blue robes and a gem-set necklace. Wonderful stuff, except your right hand has succumbed to frost magic..."); item56.Crafting.Add(CraftingTable.MageTable, 1); item56.MaximumRequiredStationLevel = 7; item56.RequiredItems.Add("Crystal", 30); item56.RequiredItems.Add("Eitr", 20); item56.RequiredItems.Add("JuteBlue", 20); item56.RequiredItems.Add("Feathers", 20); item56.RequiredUpgradeItems.Add("Crystal", 10); item56.RequiredUpgradeItems.Add("Eitr", 10); item56.CraftAmount = 1; Item item57 = new Item("frostmagelegs", "frostmagelegs"); item57.Name.English("Hrímþurs Trousers"); item57.Description.English("Sturdy boots with golden trim."); item57.Crafting.Add(CraftingTable.MageTable, 1); item57.MaximumRequiredStationLevel = 7; item57.RequiredItems.Add("Crystal", 30); item57.RequiredItems.Add("Eitr", 20); item57.RequiredItems.Add("JuteBlue", 20); item57.RequiredItems.Add("Feathers", 20); item57.RequiredUpgradeItems.Add("Crystal", 10); item57.RequiredUpgradeItems.Add("Eitr", 10); item57.CraftAmount = 1; Item item58 = new Item("druidhelm", "druidhelm"); item58.Name.English("Crown of the Forest"); item58.Description.English("A silver mask adorned by great horns of beast and twigs of Yggdrasil."); item58.Crafting.Add(CraftingTable.MageTable, 1); item58.MaximumRequiredStationLevel = 7; item58.RequiredItems.Add("Silver", 30); item58.RequiredItems.Add("WitheredBone", 20); item58.RequiredItems.Add("Sap", 20); item58.RequiredItems.Add("YggdrasilWood", 20); item58.RequiredUpgradeItems.Add("Silver", 10); item58.RequiredUpgradeItems.Add("Sap", 5); item58.CraftAmount = 1; Item item59 = new Item("druidchest", "druidchest"); item59.Name.English("Druid Furs"); item59.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."); item59.Crafting.Add(CraftingTable.MageTable, 1); item59.MaximumRequiredStationLevel = 7; item59.RequiredItems.Add("Iron", 30); item59.RequiredItems.Add("LoxPelt", 40); item59.RequiredItems.Add("ScaleHide", 30); item59.RequiredItems.Add("LinenThread", 20); item59.RequiredUpgradeItems.Add("Iron", 10); item59.RequiredUpgradeItems.Add("LoxPelt", 10); item59.CraftAmount = 1; Item item60 = new Item("druidlegs", "druidlegs"); item60.Name.English("Druid Leggings"); item60.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."); item60.Crafting.Add(CraftingTable.MageTable, 1); item60.MaximumRequiredStationLevel = 7; item60.RequiredItems.Add("LeatherScraps", 40); item60.RequiredItems.Add("LoxPelt", 10); item60.RequiredItems.Add("ScaleHide", 20); item60.RequiredItems.Add("LinenThread", 20); item60.RequiredUpgradeItems.Add("ScaleHide", 10); item60.RequiredUpgradeItems.Add("LinenThread", 10); item60.CraftAmount = 1; Item item61 = new Item("runeknighthelm", "runeknighthelm"); item61.Name.English("Rune Knight Helm"); item61.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."); item61.Crafting.Add(CraftingTable.BlackForge, 1); item61.MaximumRequiredStationLevel = 7; item61.RequiredItems.Add("knighthelm", 1); item61.RequiredItems.Add("BlackMetal", 30); item61.RequiredItems.Add("Eitr", 30); item61.RequiredItems.Add("BlackCore", 2); item61.RequiredUpgradeItems.Add("BlackMetal", 15); item61.RequiredUpgradeItems.Add("Eitr", 10); item61.CraftAmount = 1; Item item62 = new Item("runeknightchest", "runeknightchest"); item62.Name.English("Rune Knight Armor"); item62.Description.English("Fissures of blue Eitr course across this wretched platemail, coalescing in places to form runes of protection."); item62.Crafting.Add(CraftingTable.BlackForge, 1); item62.MaximumRequiredStationLevel = 7; item62.RequiredItems.Add("knightchest", 1); item62.RequiredItems.Add("BlackMetal", 30); item62.RequiredItems.Add("Eitr", 30); item62.RequiredItems.Add("BlackCore", 2); item62.RequiredUpgradeItems.Add("BlackMetal", 15); item62.RequiredUpgradeItems.Add("Eitr", 10); item62.CraftAmount = 1; Item item63 = new Item("runeknightlegs", "runeknightlegs"); item63.Name.English("Rune Knight Legplates"); item63.Description.English("The plate metal is charred black by Eitr, which still flickers through it."); item63.Crafting.Add(CraftingTable.BlackForge, 1); item63.MaximumRequiredStationLevel = 7; item63.RequiredItems.Add("knightlegs", 1); item63.RequiredItems.Add("BlackMetal", 30); item63.RequiredItems.Add("Eitr", 30); item63.RequiredItems.Add("BlackCore", 2); item63.RequiredUpgradeItems.Add("BlackMetal", 15); item63.RequiredUpgradeItems.Add("Eitr", 10); item63.CraftAmount = 1; Item item64 = new Item("bearhelm2", "bearhelm2"); item64.Name.English("Jötunn-Bone Casque"); item64.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."); item64.Crafting.Add(CraftingTable.BlackForge, 1); item64.MaximumRequiredStationLevel = 7; item64.RequiredItems.Add("bearhelm", 1); item64.RequiredItems.Add("BlackMarble", 20); item64.RequiredItems.Add("JuteBlue", 10); item64.RequiredItems.Add("TrophySeekerBrute", 1); item64.RequiredUpgradeItems.Add("JuteBlue", 5); item64.RequiredUpgradeItems.Add("BlackMarble", 10); item64.CraftAmount = 1; Item item65 = new Item("bearchest2", "bearchest2"); item65.Name.English("Jötunn-Bone Armor"); item65.Description.English("Exceptionally heavy and massive armor. You do not go places quickly, but when you get there your foes sure know about it."); item65.Crafting.Add(CraftingTable.BlackForge, 1); item65.MaximumRequiredStationLevel = 7; item65.RequiredItems.Add("bearchest", 1); item65.RequiredItems.Add("BlackMarble", 20); item65.RequiredItems.Add("Chain", 20); item65.RequiredUpgradeItems.Add("Chain", 5); item65.RequiredUpgradeItems.Add("BlackMarble", 10); item65.CraftAmount = 1; Item item66 = new Item("bearlegs2", "bearlegs2"); item66.Name.English("Jötunn-Bone Boots"); item66.Description.English("What is stronger than Dwarven Steel? The bones of the Jötunn, that's what."); item66.Crafting.Add(CraftingTable.BlackForge, 1); item66.MaximumRequiredStationLevel = 7; item66.RequiredItems.Add("bearlegs", 1); item66.RequiredItems.Add("BlackMarble", 20); item66.RequiredItems.Add("JuteBlue", 10); item66.RequiredUpgradeItems.Add("JuteBlue", 5); item66.RequiredUpgradeItems.Add("BlackMarble", 10); item66.CraftAmount = 1; Item item67 = new Item("valkhelm", "valkhelm"); item67.Name.English("Aesir Helm"); item67.Description.English("A golden crown for the Forsaken slayer. Whose realm is this, again?"); item67.Crafting.Add(CraftingTable.BlackForge, 1); item67.MaximumRequiredStationLevel = 7; item67.RequiredItems.Add("BlackMetal", 30); item67.RequiredItems.Add("DvergrKeyFragment", 5); item67.RequiredItems.Add("Eitr", 30); item67.RequiredItems.Add("TrophySeekerQueen", 1); item67.RequiredUpgradeItems.Add("BlackMetal", 15); item67.RequiredUpgradeItems.Add("Eitr", 10); item67.CraftAmount = 1; Item item68 = new Item("valkchest", "valkchest"); item68.Name.English("Aesir Chestplate"); item68.Description.English("A splendid, winged and golden breastplate, worn by great leaders."); item68.Crafting.Add(CraftingTable.BlackForge, 1); item68.MaximumRequiredStationLevel = 7; item68.RequiredItems.Add("BlackMetal", 30); item68.RequiredItems.Add("DvergrKeyFragment", 5); item68.RequiredItems.Add("Eitr", 30); item68.RequiredItems.Add("TrophyGoblinKing", 1); item68.RequiredUpgradeItems.Add("BlackMetal", 15); item68.RequiredUpgradeItems.Add("Eitr", 10); item68.CraftAmount = 1; Item item69 = new Item("valklegs", "valklegs"); item69.Name.English("Aesir Legplates"); item69.Description.English("Winged boots and a scaled skirt, fit for those who walk on clouds."); item69.Crafting.Add(CraftingTable.BlackForge, 1); item69.MaximumRequiredStationLevel = 7; item69.RequiredItems.Add("BlackMetal", 30); item69.RequiredItems.Add("DvergrKeyFragment", 5); item69.RequiredItems.Add("Eitr", 30); item69.RequiredItems.Add("ScaleHide", 20); item69.RequiredUpgradeItems.Add("BlackMetal", 15); item69.RequiredUpgradeItems.Add("Eitr", 10); item69.CraftAmount = 1; Item item70 = new Item("warlordhelm", "warlordhelm"); item70.Name.English("Warlord's Greathelm"); item70.Description.English("A horned greathelm clasps your skull, and your eyes burn."); item70.Crafting.Add(CraftingTable.BlackForge, 1); item70.MaximumRequiredStationLevel = 7; item70.RequiredItems.Add("Flametal", 10); item70.RequiredItems.Add("BlackMarble", 15); item70.RequiredItems.Add("Softtissue", 15); item70.RequiredItems.Add("TrophyGreydwarfBrute", 1); item70.RequiredUpgradeItems.Add("Flametal", 5); item70.RequiredUpgradeItems.Add("BlackMarble", 10); item70.CraftAmount = 1; Item item71 = new Item("warlordchest", "warlordchest"); item71.Name.English("Warlord's Spaulder"); item71.Description.English("The blueish metal is wicked and twisted, seething as if alive. Great bone horns adorn the armor."); item71.Crafting.Add(CraftingTable.BlackForge, 1); item71.MaximumRequiredStationLevel = 7; item71.RequiredItems.Add("Flametal", 10); item71.RequiredItems.Add("BlackMarble", 15); item71.RequiredItems.Add("Softtissue", 15); item71.RequiredItems.Add("Chain", 15); item71.RequiredUpgradeItems.Add("Flametal", 5); item71.RequiredUpgradeItems.Add("BlackMarble", 10); item71.CraftAmount = 1; Item item72 = new Item("warlordlegs", "warlordlegs"); item72.Name.English("Warlord's Battleboots"); item72.Description.English("Vertebrae and jawbones cling to you, offering a gruesome protection."); item72.Crafting.Add(CraftingTable.BlackForge, 1); item72.MaximumRequiredStationLevel = 7; item72.RequiredItems.Add("Flametal", 5); item72.RequiredItems.Add("BlackMarble", 15); item72.RequiredItems.Add("Softtissue", 15); item72.RequiredItems.Add("LoxPelt", 15); item72.RequiredUpgradeItems.Add("Flametal", 5); item72.RequiredUpgradeItems.Add("BlackMarble", 10); item72.CraftAmount = 1; Item item73 = new Item("stjudehelm", "stjudehelm"); item73.Name.English("Finned Greathelm of St. Jude"); item73.Description.English("Another imposing greathelm, adorned by mighty fins."); item73.Crafting.Add(CraftingTable.BlackForge, 1); item73.MaximumRequiredStationLevel = 7; item73.RequiredItems.Add("bphelm", 1); item73.RequiredItems.Add("Flametal", 8); item73.RequiredItems.Add("Eitr", 15); item73.RequiredItems.Add("TrophySerpent", 1); item73.RequiredUpgradeItems.Add("Flametal", 5); item73.RequiredUpgradeItems.Add("Eitr", 5); item73.CraftAmount = 1; Item item74 = new Item("stjudechest", "stjudechest"); item74.Name.English("St. Jude Armor"); item74.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."); item74.Crafting.Add(CraftingTable.BlackForge, 1); item74.MaximumRequiredStationLevel = 7; item74.RequiredItems.Add("bpchest", 1); item74.RequiredItems.Add("Flametal", 8); item74.RequiredItems.Add("Eitr", 15); item74.RequiredItems.Add("LinenThread", 20); item74.RequiredUpgradeItems.Add("Flametal", 5); item74.RequiredUpgradeItems.Add("Eitr", 5); item74.RequiredUpgradeItems.Add("LinenThread", 5); item74.CraftAmount = 1; Item item75 = new Item("stjudelegs", "stjudelegs"); item75.Name.English("St. Jude Legguards"); item75.Description.English("The heat of Flametal has purified the blackmetal, giving it a blue-ish tinge. Its strength is unparalleled."); item75.Crafting.Add(CraftingTable.BlackForge, 1); item75.MaximumRequiredStationLevel = 7; item75.RequiredItems.Add("bplegs", 1); item75.RequiredItems.Add("Flametal", 8); item75.RequiredItems.Add("Eitr", 15); item75.RequiredItems.Add("LinenThread", 20); item75.RequiredUpgradeItems.Add("Flametal", 5); item75.RequiredUpgradeItems.Add("Eitr", 5); item75.RequiredUpgradeItems.Add("LinenThread", 5); item75.CraftAmount = 1; Item item76 = new Item("heavybearhelm", "heavybearhelm"); item76.Name.English("The Unspoken Fear"); item76.Description.English("A ferocious helmet, styled to represent a massive, terrible beast of fear, power and might."); item76.Crafting.Add(CraftingTable.BlackForge, 1); item76.MaximumRequiredStationLevel = 7; item76.RequiredItems.Add("BlackMetal", 30); item76.RequiredItems.Add("Flametal", 8); item76.RequiredItems.Add("LoxPelt", 15); item76.RequiredItems.Add("TrophySeekerBrute", 2); item76.RequiredUpgradeItems.Add("Silver", 10); item76.RequiredUpgradeItems.Add("Flametal", 5); item76.CraftAmount = 1; Item item77 = new Item("heavybearchest", "heavybearchest"); item77.Name.English("Ódr Furs"); item77.Description.English("A hulking shawl of thick furs and heavy plated armor adorned with tusks. The fury emanates from within."); item77.Crafting.Add(CraftingTable.BlackForge, 1); item77.MaximumRequiredStationLevel = 7; item77.RequiredItems.Add("BlackMetal", 30); item77.RequiredItems.Add("Flametal", 8); item77.RequiredItems.Add("LoxPelt", 15); item77.RequiredItems.Add("THSwordKrom", 1); item77.RequiredUpgradeItems.Add("BlackMetal", 10); item77.RequiredUpgradeItems.Add("Flametal", 5); item77.CraftAmount = 1; Item item78 = new Item("heavybearlegs", "heavybearlegs"); item78.Name.English("Ódr Skirt"); item78.Description.English("A heavy skirt and belts, with an arsenal of weapons and a great hunting horn hanging from them."); item78.Crafting.Add(CraftingTable.BlackForge, 1); item78.MaximumRequiredStationLevel = 7; item78.RequiredItems.Add("BlackMetal", 30); item78.RequiredItems.Add("Flametal", 8); item78.RequiredItems.Add("LoxPelt", 15); item78.RequiredItems.Add("SwordIron", 2); item78.RequiredUpgradeItems.Add("BlackMetal", 10); item78.RequiredUpgradeItems.Add("Flametal", 5); item78.CraftAmount = 1; Item item79 = new Item("lagihelmalt", "lagihelmalt"); item79.Name.English("Flame Drake Helm"); item79.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."); item79.Crafting.Add(CraftingTable.BlackForge, 1); item79.MaximumRequiredStationLevel = 7; item79.RequiredItems.Add("TrophyDragonQueen", 1); item79.RequiredItems.Add("Flametal", 20); item79.RequiredItems.Add("BlackMetal", 20); item79.RequiredUpgradeItems.Add("Flametal", 5); item79.RequiredUpgradeItems.Add("BlackMetal", 10); item79.CraftAmount = 1; Item item80 = new Item("lagichest", "lagichest"); item80.Name.English("Flame Drake Chestpiece"); item80.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."); item80.Crafting.Add(CraftingTable.BlackForge, 1); item80.MaximumRequiredStationLevel = 7; item80.RequiredItems.Add("BlackMetal", 30); item80.RequiredItems.Add("Flametal", 30); item80.RequiredItems.Add("DragonEgg", 5); item80.RequiredUpgradeItems.Add("Flametal", 5); item80.RequiredUpgradeItems.Add("BlackMetal", 10); item80.CraftAmount = 1; Item item81 = new Item("lagipants", "lagipants"); item81.Name.English("Flame Drake Leg Armor"); item81.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."); item81.Crafting.Add(CraftingTable.BlackForge, 1); item81.MaximumRequiredStationLevel = 7; item81.RequiredItems.Add("BlackMetal", 30); item81.RequiredItems.Add("Flametal", 30); item81.RequiredItems.Add("DragonEgg", 5); item81.RequiredUpgradeItems.Add("Flametal", 5); item81.RequiredUpgradeItems.Add("BlackMetal", 10); item81.CraftAmount = 1; Item item82 = new Item("trueskoghelm", "trueskoghelm"); item82.Name.English("Deep North Helm"); item82.Description.English("An ancient, mystical helmet. This is the real deal."); item82.Crafting.Add(CraftingTable.BlackForge, 1); item82.MaximumRequiredStationLevel = 7; item82.RequiredItems.Add("skoghelm", 1); item82.RequiredItems.Add("BlackMarble", 20); item82.RequiredItems.Add("Eitr", 20); item82.RequiredItems.Add("TrophySGolem", 1); item82.RequiredUpgradeItems.Add("BlackMarble", 15); item82.RequiredUpgradeItems.Add("Eitr", 10); item82.CraftAmount = 1; Item item83 = new Item("trueskogchest", "trueskogchest"); item83.Name.English("Deep North Chest"); item83.Description.English("Moss has grown through the strange, enchanted stone-metal alloy."); item83.Crafting.Add(CraftingTable.BlackForge, 1); item83.MaximumRequiredStationLevel = 7; item83.RequiredItems.Add("skogchest", 1); item83.RequiredItems.Add("BlackMarble", 20); item83.RequiredItems.Add("Eitr", 20); item83.RequiredItems.Add("TrophySGolem", 2); item83.RequiredUpgradeItems.Add("BlackMarble", 15); item83.RequiredUpgradeItems.Add("Eitr", 10); item83.CraftAmount = 1; Item item84 = new Item("trueskoglegs", "trueskoglegs"); item84.Name.English("Deep North Legguards"); item84.Description.English("The sinewy strength and fevor of the Brute still courses through these leggings, propelling their wearer towards battle."); item84.Crafting.Add(CraftingTable.BlackForge, 1); item84.MaximumRequiredStationLevel = 7; item84.RequiredItems.Add("skoglegs", 1); item84.RequiredItems.Add("BlackMarble", 20); item84.RequiredItems.Add("Eitr", 20); item84.RequiredItems.Add("TrophyGoblinBrute", 1); item84.RequiredUpgradeItems.Add("BlackMarble", 15); item84.RequiredUpgradeItems.Add("Eitr", 10); item84.CraftAmount = 1; Item item85 = new Item("sven2", "sven2"); item85.Name.English("Dragon Champion Greathelm (eyepatch)"); item85.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."); item85.Crafting.Add(CraftingTable.Forge, 4); item85.MaximumRequiredStationLevel = 7; item85.RequiredItems.Add("sven", 1); item85.RequiredItems.Add("BlackMetal", 30); item85.RequiredItems.Add("TrophyHatchling", 5); item85.RequiredItems.Add("TrophySerpent", 1); item85.RequiredUpgradeItems.Add("BlackMetal", 10); item85.RequiredUpgradeItems.Add("TrophyHatchling", 1); item85.CraftAmount = 1; Item item86 = new Item("sven3", "sven3"); item86.Name.English("Dragon Champion Greathelm"); item86.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."); item86.Crafting.Add(CraftingTable.Forge, 4); item86.MaximumRequiredStationLevel = 7; item86.RequiredItems.Add("sven", 1); item86.RequiredItems.Add("BlackMetal", 30); item86.RequiredItems.Add("TrophyHatchling", 5); item86.RequiredItems.Add("TrophySerpent", 1); item86.RequiredUpgradeItems.Add("BlackMetal", 10); item86.RequiredUpgradeItems.Add("TrophyHatchling", 1); item86.CraftAmount = 1; Item item87 = new Item("sven2chest", "sven2chest"); item87.Name.English("Ornate Black Platemail"); item87.Description.English("Redclaw, the greatest of all smiths, took up Sven's silver armor. \"Strong,\" he muttered, \"but it could be stronger still.\" "); item87.Crafting.Add(CraftingTable.Forge, 4); item87.MaximumRequiredStationLevel = 7; item87.RequiredItems.Add("svenchest", 1); item87.RequiredItems.Add("BlackMetal", 30); item87.RequiredItems.Add("WolfPelt", 20); item87.RequiredUpgradeItems.Add("BlackMetal", 10); item87.RequiredUpgradeItems.Add("WolfPelt", 10); item87.CraftAmount = 1; Item item88 = new Item("sven2legs", "sven2legs"); item88.Name.English("Ancestral Kilt"); item88.Description.English("Blackmetal and serpent scales have empowered these leggaurds with the power of the sea. Warm wolf fur lines the ancestral kilt."); item88.Crafting.Add(CraftingTable.Forge, 4); item88.MaximumRequiredStationLevel = 7; item88.RequiredItems.Add("svenlegs", 1); item88.RequiredItems.Add("BlackMetal", 30); item88.RequiredItems.Add("WolfPelt", 20); item88.RequiredItems.Add("SerpentScale", 15); item88.RequiredUpgradeItems.Add("BlackMetal", 10); item88.RequiredUpgradeItems.Add("SerpentScale", 5); item88.CraftAmount = 1; Item item89 = new Item("wshelm", "wshelm"); item89.Name.English("World Serpent Casque"); item89.Description.English("A magnificent casque, both angelic and draconic."); item89.Crafting.Add(CraftingTable.Forge, 4); item89.MaximumRequiredStationLevel = 7; item89.RequiredItems.Add("lagihelmalt", 1); item89.RequiredItems.Add("valkhelm", 1); item89.RequiredItems.Add("sven", 1); item89.RequiredItems.Add("Eitr", 20); item89.RequiredUpgradeItems.Add("Silver", 15); item89.RequiredUpgradeItems.Add("Eitr", 10); item89.CraftAmount = 1; Item item90 = new Item("wschest", "wschest"); item90.Name.English("World Serpent Cuirass"); item90.Description.English("An Aesir and a Dragon walk into a tavern... You are wearing the punchline."); item90.Crafting.Add(CraftingTable.Forge, 4); item90.MaximumRequiredStationLevel = 7; item90.RequiredItems.Add("lagichest", 1); item90.RequiredItems.Add("valkchest", 1); item90.RequiredItems.Add("svenchest", 1); item90.RequiredItems.Add("Eitr", 20); item90.RequiredUpgradeItems.Add("Silver", 15); item90.RequiredUpgradeItems.Add("Eitr", 10); item90.CraftAmount = 1; Item item91 = new Item("wslegs", "wslegs"); item91.Name.English("World Serpent Greaves"); item91.Description.English("Plate mail armor of an other-wordly pearlescent material; metal fused with dragon scale."); item91.Crafting.Add(CraftingTable.Forge, 4); item91.MaximumRequiredStationLevel = 7; item91.RequiredItems.Add("lagipants", 1); item91.RequiredItems.Add("valklegs", 1); item91.RequiredItems.Add("svenlegs", 1); item91.RequiredItems.Add("Eitr", 20); item91.RequiredUpgradeItems.Add("Silver", 15); item90.RequiredUpgradeItems.Add("Eitr", 10); item90.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<[<10264979-2fb9-4d3b-b32a-7de7f80d3c29>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<[<10264979-2fb9-4d3b-b32a-7de7f80d3c29>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 SouthsilArmor() { 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.0.5", MinimumRequiredVersion = "3.0.5" }; _serverConfigLocked = null; } } [HarmonyPatch(typeof(ZNet), "OnNewConnection")] public static class RegisterAndCheckVersion { [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>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 SouthsilArmor.AllManagersModTemplateLogger.LogDebug((object)"Registering version RPC handler"); peer.m_rpc.Register<ZPackage>("SouthsilArmor_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_AllManagersModTemplate_Version); SouthsilArmor.AllManagersModTemplateLogger.LogDebug((object)"Invoking version check"); ZPackage val = new ZPackage(); val.Write("3.0.5"); val.Write(RpcHandlers.ComputeHashForMod().Replace("-", "")); peer.m_rpc.Invoke("SouthsilArmor_VersionCheck", new object[1] { val }); } } [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(1)] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(0)] [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] public static class VerifyClient { private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance) { if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc)) { return true; } SouthsilArmor.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 { [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>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" + SouthsilArmor.ConnectionError; } } } [HarmonyPatch(typeof(ZNet), "Disconnect")] public static class RemoveDisconnectedPeerFromVerified { [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { if (__instance.IsServer()) { SouthsilArmor.AllManagersModTemplateLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list")); RpcHandlers.ValidatedPeers.Remove(peer.m_rpc); } } } [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(1)] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>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(); string text2 = pkg.ReadString(); string text3 = ComputeHashForMod().Replace("-", ""); SouthsilArmor.AllManagersModTemplateLogger.LogInfo((object)("Version check, local: 3.0.5, remote: " + text)); if (text2 != text3 || text != "3.0.5") { SouthsilArmor.ConnectionError = "SouthsilArmor Installed: 3.0.5 " + text3 + "\n Needed: " + text + " " + text2; if (ZNet.instance.IsServer()) { SouthsilArmor.AllManagersModTemplateLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting...")); rpc.Invoke("Error", new object[1] { 3 }); } } else if (!ZNet.instance.IsServer()) { SouthsilArmor.AllManagersModTemplateLogger.LogInfo((object)"Received same version from server!"); } else { SouthsilArmor.AllManagersModTemplateLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list")); ValidatedPeers.Add(rpc); } } public static string ComputeHashForMod() { using SHA256 sHA = SHA256.Create(); byte[] array = sHA.ComputeHash(File.ReadAllBytes(Assembly.GetExecutingAssembly().Location)); StringBuilder stringBuilder = new StringBuilder(); byte[] array2 = array; foreach (byte b in array2) { stringBuilder.Append(b.ToString("X2")); } return stringBuilder.ToString(); } } } namespace StatusEffectManager { [Description("The ItemDrop effect to apply the status effect")] [PublicAPI] public enum EffectType { Equip, Attack, Consume, Set } public struct SE_Item { [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(1)] public StatusEffect Effect; public EffectType Type; } [PublicAPI] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(0)] [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(1)] public class CustomSE { private static readonly List<CustomSE> RegisteredEffects = new List<CustomSE>(); private static readonly Dictionary<StatusEffect, CustomSE> CustomEffectMap = new Dictionary<StatusEffect, CustomSE>(); internal static readonly List<StatusEffect> CustomSEs = new List<StatusEffect>(); internal static readonly Dictionary<SE_Item, string> AddToPrefabs = new Dictionary<SE_Item, string>(); [Description("Instance of the StatusEffect.")] public readonly StatusEffect Effect; public EffectType Type; private string _folderName = "icons"; private AssetBundle _assetBundle = null; [Description("Sets the icon for the StatusEffect. Must be 64x64")] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] public Sprite IconSprite = null; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private string IconName = null; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private LocalizeKey _name; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private static Localization _english; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync = true; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private static object _configSync; [Description("Sets the icon for the StatusEffect. Must be 64x64")] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] public string Icon { [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(2)] get { return IconName; } [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(2)] set { IconName = value; IconSprite = ((IconName == null) ? null : loadSprite(IconName)); Effect.m_icon = IconSprite; } } [Description("Sets the in-game name for the StatusEffect")] public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } StatusEffect effect = Effect; if (effect.m_name.StartsWith("$")) { _name = new LocalizeKey(effect.m_name); } else { string text = "$statuseffect_" + ((Object)Effect).name.Replace(" ", "_"); _name = new LocalizeKey(text).English(effect.m_name); effect.m_name = text; } return _name; } } private static Localization english { get { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (_english == null) { _english = new Localization(); _english.SetupLanguage("English"); } return _english; } } private static BaseUnityPlugin plugin { get { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown if (_plugin == null) { IEnumerable<TypeInfo> source; try { source = Assembly.GetExecutingAssembly().DefinedTypes.ToList(); } catch (ReflectionTypeLoadException ex) { source = from t in ex.Types where t != null select t.GetTypeInfo(); } _plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); } return _plugin; } } [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private static object configSync { [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " ItemManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } public CustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") : this(EffectManager.RegisterAssetBundle(assetBundleFileName, folderName), customEffectName) { } public CustomSE(AssetBundle bundle, string customEffectName) { Effect = EffectManager.RegisterCustomSE(bundle, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } public CustomSE(string customEffectName) { Effect = ScriptableObject.CreateInstance<StatusEffect>(); EffectManager.RegisterCustomSE(Effect, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } [return: <10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private byte[] ReadEmbeddedFileBytes(string name) { using MemoryStream memoryStream = new MemoryStream(); Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ((_folderName == "") ? "" : ".") + _folderName + "." + name); if (manifestResourceStream == null) { return null; } manifestResourceStream.CopyTo(memoryStream); return memoryStream.ToArray(); } [return: <10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private Texture2D loadTexture(string name) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown byte[] array = ReadEmbeddedFileBytes(name); if (array != null) { Texture2D val = new Texture2D(0, 0); ImageConversion.LoadImage(val, array); return val; } return null; } private Sprite loadSprite(string name) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) Texture2D val = loadTexture(name); if (val != null) { return Sprite.Create(val, new Rect(0f, 0f, 64f, 64f), Vector2.zero); } AssetBundle assetBundle = _assetBundle; Sprite val2 = ((assetBundle != null) ? assetBundle.LoadAsset<Sprite>(name) : null); if (val2 != null) { return val2; } throw new FileNotFoundException("Could not find a file named " + name + " for the effect icon"); } public void AddSEToPrefab(CustomSE customSE, string prefabName) { SE_Item sE_Item = default(SE_Item); sE_Item.Effect = customSE.Effect; sE_Item.Type = customSE.Type; SE_Item key = sE_Item; AddToPrefabs.Add(key, prefabName); } private static ConfigEntry<T> config<[<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] T>(string group, string name, T value, ConfigDescription description) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); configSync?.GetType().GetMethod("AddConfigEntry").MakeGenericMethod(typeof(T)) .Invoke(configSync, new object[1] { val }); return val; } private static ConfigEntry<T> config<[<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] T>(string group, string name, T value, string description) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); } } [PublicAPI] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(0)] [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(1)] public class LocalizeKey { public readonly string Key; public LocalizeKey(string key) { Key = key.Replace("$", ""); } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } return this; } } [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(1)] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(0)] public static class EffectManager { [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(0)] private struct BundleId { [UsedImplicitly] public string assetBundleFileName; [UsedImplicitly] public string folderName; } private static readonly Dictionary<BundleId, AssetBundle> bundleCache; static EffectManager() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown bundleCache = new Dictionary<BundleId, AssetBundle>(); Harmony val = new Harmony("org.bepinex.helpers.StatusEffectManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ObjectDB), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ObjectDBInit", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZNetScene), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ZNetSceneAwake", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static AssetBundle RegisterAssetBundle(string assetBundleFileName, string folderName = "assets") { BundleId bundleId = default(BundleId); bundleId.assetBundleFileName = assetBundleFileName; bundleId.folderName = folderName; BundleId key = bundleId; if (!bundleCache.TryGetValue(key, out var value)) { Dictionary<BundleId, AssetBundle> dictionary = bundleCache; AssetBundle? obj = ((IEnumerable<AssetBundle>)Resources.FindObjectsOfTypeAll<AssetBundle>()).FirstOrDefault((Func<AssetBundle, bool>)([<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(0)] (AssetBundle a) => ((Object)a).name == assetBundleFileName)) ?? AssetBundle.LoadFromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ((folderName == "") ? "" : ".") + folderName + "." + assetBundleFileName)); AssetBundle result = obj; dictionary[key] = obj; return result; } return value; } public static StatusEffect RegisterCustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") { return RegisterCustomSE(RegisterAssetBundle(assetBundleFileName, folderName), customEffectName); } public static StatusEffect RegisterCustomSE(AssetBundle assets, string customEffectName) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown StatusEffect val = (StatusEffect)assets.LoadAsset<ScriptableObject>(customEffectName); CustomSE.CustomSEs.Add(val); return val; } public static StatusEffect RegisterCustomSE(StatusEffect customSE, string customEffectName) { ((Object)customSE).name = customEffectName; CustomSE.CustomSEs.Add(customSE); return customSE; } [HarmonyPriority(700)] private static void Patch_ObjectDBInit(ObjectDB __instance) { foreach (StatusEffect customSE in CustomSE.CustomSEs) { if (!__instance.m_StatusEffects.Contains(customSE)) { __instance.m_StatusEffects.Add(customSE); } } __instance.UpdateItemHashes(); } [HarmonyPriority(700)] private static void Patch_ZNetSceneAwake(ZNetScene __instance) { foreach (KeyValuePair<SE_Item, string> addToPrefab in CustomSE.AddToPrefabs) { try { GameObject prefab = __instance.GetPrefab(addToPrefab.Value); ItemDrop val = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<ItemDrop>() : prefab.GetComponentInChildren<ItemDrop>()); Aoe val2 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<Aoe>() : prefab.GetComponentInChildren<Aoe>()); EffectArea val3 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<EffectArea>() : prefab.GetComponentInChildren<EffectArea>()); if (Object.op_Implicit((Object)(object)val)) { switch (addToPrefab.Key.Type) { case EffectType.Equip: val.m_itemData.m_shared.m_equipStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Attack: val.m_itemData.m_shared.m_attackStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Consume: val.m_itemData.m_shared.m_consumeStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Set: val.m_itemData.m_shared.m_setSize = 1; val.m_itemData.m_shared.m_setName = ((Object)addToPrefab.Key.Effect).name; val.m_itemData.m_shared.m_setStatusEffect = addToPrefab.Key.Effect; break; default: throw new ArgumentOutOfRangeException(); } } else if (Object.op_Implicit((Object)(object)val2)) { val2.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else if (Object.op_Implicit((Object)(object)val3)) { val3.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else { Debug.LogWarning((object)("The prefab '" + ((Object)prefab).name + "' does not have an ItemDrop, AOE, or EffectArea component. Cannot add the StatusEffect to the prefab.")); } } catch (Exception arg) { Debug.LogWarning((object)$"BROKE : {arg}"); } } } } } namespace SkillManager { [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(1)] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(0)] [PublicAPI] public class Skill { [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(0)] public static class LocalizationCache { private static readonly Dictionary<string, Localization> localizations = new Dictionary<string, Localization>(); internal static void LocalizationPostfix(Localization __instance, string language) { string key = localizations.FirstOrDefault([<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(0)] (KeyValuePair<string, Localization> l) => l.Value == __instance).Key; if (key != null) { localizations.Remove(key); } if (!localizations.ContainsKey(language)) { localizations.Add(language, __instance); } } public static Localization ForLanguage([<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] string language = null) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown if (localizations.TryGetValue(language ?? PlayerPrefs.GetString("language", "English"), out var value)) { return value; } value = new Localization(); if (language != null) { value.SetupLanguage(language); } return value; } } [PublicAPI] [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(0)] public class LocalizeKey { private static readonly List<LocalizeKey> keys = new List<LocalizeKey>(); public readonly string Key; public readonly Dictionary<string, string> Localizations = new Dictionary<string, string>(); public LocalizeKey(string key) { Key = key.Replace("$", ""); } public void Alias(string alias) { Localizations.Clear(); if (!alias.Contains("$")) { alias = "$" + alias; } Localizations["alias"] = alias; Localization.instance.AddWord(Key, Localization.instance.Localize(alias)); } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { Localizations[lang] = value; if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } return this; } [HarmonyPriority(300)] internal static void AddLocalizedKeys(Localization __instance, string language) { foreach (LocalizeKey key in keys) { string value2; if (key.Localizations.TryGetValue(language, out var value) || key.Localizations.TryGetValue("English", out value)) { __instance.AddWord(key.Key, value); } else if (key.Localizations.TryGetValue("alias", out value2)) { Localization.instance.AddWord(key.Key, Localization.instance.Localize(value2)); } } } } [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(0)] private class ConfigurationManagerAttributes { [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] [UsedImplicitly] public string Category; } [HarmonyPatch(typeof(Skills), "IsSkillValid")] [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(0)] private static class Patch_Skills_IsSkillValid { private static void Postfix(SkillType type, ref bool __result) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!__result && skills.ContainsKey(type)) { __result = true; } } } private static readonly Dictionary<SkillType, Skill> skills; internal static readonly Dictionary<string, Skill> skillByName; private readonly string skillName; private readonly string internalSkillName; private readonly SkillDef skillDef; public readonly LocalizeKey Name; public readonly LocalizeKey Description; private float skillEffectFactor = 1f; public bool Configurable = false; private static bool InitializedTerminal; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private static Localization _english; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private static object _configSync; public float SkillGainFactor { get { return skillDef.m_increseStep; } set { skillDef.m_increseStep = value; this.SkillGainFactorChanged?.Invoke(value); } } public float SkillEffectFactor { get { return skillEffectFactor; } set { skillEffectFactor = value; this.SkillEffectFactorChanged?.Invoke(value); } } private static Localization english => _english ?? (_english = LocalizationCache.ForLanguage("English")); private static BaseUnityPlugin plugin { get { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown object obj = _plugin; if (obj == null) { BaseUnityPlugin val = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)Assembly.GetExecutingAssembly().DefinedTypes.First([<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); _plugin = val; obj = (object)val; } return (BaseUnityPlugin)obj; } } [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] private static object configSync { [<57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " SkillManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] [method: <57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(2)] [field: <10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] public event Action<float> SkillGainFactorChanged; [<10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] [method: <57d730c9-f52d-41c7-a7ef-75e98939fa1e>NullableContext(2)] [field: <10264979-2fb9-4d3b-b32a-7de7f80d3c29>Nullable(2)] public event Action<float> SkillEffectFactorChanged; public Skill(string englishName, string icon) : this(englishName, loadSprite(icon, 64, 64)) { } public Skill(string englishName, Sprite icon) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown SkillType val = fromName(englishName); string text = new Regex("[^a-zA-Z]").Replace(englishName, "_"); skills[val] = this; skillByName[englishName] = this; skillDef = new SkillDef { m_description = "$skilldesc_" + text, m_icon = icon, m_increseStep = 1f, m_skill = val }; internalSkillName = text; skillName = englishName; Name = new LocalizeKey("skill_" + ((object)(SkillType)(ref val)).ToString()).English(englishName); Description = new LocalizeKey("skilldesc_" + text); } public static SkillType fromName(string englishName) { return (SkillType)Math.Abs(StringExtensionMethods.GetStableHashCode(englishName)); } static Skill() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Expected O, but got Unknown //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Expected O, but got Unknown //IL_01ad: Expected O, but got Unknown //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Expected O, but got Unknown skills = new Dictionary<SkillType, Skill>(); skillByName = new Dictionary<string, Skill>(); InitializedTerminal = false; hasConfigSync = true; Harmony val = new Harmony("org.bepinex.helpers.skillmanager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_FejdStartup", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "GetSkillDef", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_GetSkillDef", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatRaiseSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatRaiseskill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatResetSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatResetSkill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "LoadCSV", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(LocalizeKey), "AddLocalizedKeys", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Terminal), "InitTerminal", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_InitTerminal_Prefix", (Type[])null, (Type[])null)), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_