Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Vikings Summoner v1.3.8
plugins/Vikings_Summoner.dll
Decompiled 4 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using AzuEPI; using AzuEPI.Core.Slots; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using PieceManager; using ServerSync; using TMPro; using UnityEngine; using UnityEngine.UI; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.ObjectPool; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.BufferedDeserialization; using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; using YamlDotNet.Serialization.Callbacks; 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: Guid("E74EB49A-461D-48EA-85BC-F462D60C98C4")] [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyProduct("Vikings_Summoner")] [assembly: AssemblyCompany("Radamanto")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyDescription("")] [assembly: AssemblyTitle("Vikings_Summoner")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyFileVersion("1.3.8")] [assembly: AssemblyConfiguration("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.8.0")] [module: <c3c631f1-3a96-4a28-aad9-e3e5eb6c0dc6>RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<f5dbb5e8-42f4-4342-806c-50c1145d3451>Embedded] internal sealed class <f5dbb5e8-42f4-4342-806c-50c1145d3451>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<f5dbb5e8-42f4-4342-806c-50c1145d3451>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <a77f6960-136e-48f8-8814-290c32f94db7>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <a77f6960-136e-48f8-8814-290c32f94db7>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <a77f6960-136e-48f8-8814-290c32f94db7>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [<f5dbb5e8-42f4-4342-806c-50c1145d3451>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class <f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContextAttribute : Attribute { public readonly byte Flag; public <f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContextAttribute(byte P_0) { Flag = P_0; } } [<f5dbb5e8-42f4-4342-806c-50c1145d3451>Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] [CompilerGenerated] internal sealed class <c3c631f1-3a96-4a28-aad9-e3e5eb6c0dc6>RefSafetyRulesAttribute : Attribute { public readonly int Version; public <c3c631f1-3a96-4a28-aad9-e3e5eb6c0dc6>RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Vikings_Summoner { internal static class Registrations_Grimories { public static void RegisterGrimories() { Item item = new Item("rd_armor", "RD_grimoire_01"); item.Crafting.Add("RD_necromancer_table", 1); item.RequiredItems.Add("DeerHide", 20); item.RequiredItems.Add("LeatherScraps", 10); item.RequiredItems.Add("Feathers", 15); item.RequiredItems.Add("Coal", 15); MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item2 = new Item("rd_armor", "RD_grimoire_02"); item2.Crafting.Add("RD_necromancer_table", 2); item2.RequiredItems.Add("YmirRemains", 10); item2.RequiredItems.Add("DeerHide", 20); item2.RequiredItems.Add("ElderBark", 15); item2.RequiredItems.Add("Coal", 15); MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item3 = new Item("rd_armor", "RD_grimoire_03"); item3.Crafting.Add("RD_necromancer_table_02", 1); item3.RequiredItems.Add("YmirRemains", 10); item3.RequiredItems.Add("DeerHide", 20); item3.RequiredItems.Add("BlackCore", 5); item3.RequiredItems.Add("Eitr", 15); MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); } } internal static class Registrations_Armors { public static void RegisterArmors() { Item item = new Item("rd_armor", "RD_inv_chest_meadows"); item.Crafting.Add("RD_necromancer_table", 1); item.RequiredItems.Add("DeerHide", 10); item.RequiredItems.Add("LeatherScraps", 10); item.RequiredUpgradeItems.Add("DeerHide", 2); item.RequiredUpgradeItems.Add("LeatherScraps", 2); item.RequiredUpgradeItems.Add("BoneFragments", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item2 = new Item("rd_armor", "RD_inv_helmet_meadows"); item2.Crafting.Add("RD_necromancer_table", 1); item2.RequiredItems.Add("DeerHide", 4); item2.RequiredItems.Add("LeatherScraps", 4); item2.RequiredUpgradeItems.Add("DeerHide", 2); item2.RequiredUpgradeItems.Add("LeatherScraps", 2); item2.RequiredUpgradeItems.Add("BoneFragments", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item3 = new Item("rd_armor", "RD_inv_legs_meadows"); item3.Crafting.Add("RD_necromancer_table", 1); item3.RequiredItems.Add("DeerHide", 8); item3.RequiredItems.Add("LeatherScraps", 8); item3.RequiredUpgradeItems.Add("DeerHide", 2); item3.RequiredUpgradeItems.Add("LeatherScraps", 2); item3.RequiredUpgradeItems.Add("BoneFragments", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item4 = new Item("rd_armor", "RD_inv_cape_meadows"); item4.Crafting.Add("RD_necromancer_table", 1); item4.RequiredItems.Add("DeerHide", 6); item4.RequiredItems.Add("LeatherScraps", 6); item4.RequiredUpgradeItems.Add("DeerHide", 2); item4.RequiredUpgradeItems.Add("LeatherScraps", 2); item4.RequiredUpgradeItems.Add("BoneFragments", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item5 = new Item("rd_armor", "RD_inv_helmet_bforest"); item5.Crafting.Add("RD_necromancer_table", 1); item5.RequiredItems.Add("TrollHide", 4); item5.RequiredItems.Add("BoneFragments", 6); item5.RequiredItems.Add("Bronze", 5); item5.RequiredUpgradeItems.Add("TrollHide", 1); item5.RequiredUpgradeItems.Add("BoneFragments", 2); item5.RequiredUpgradeItems.Add("Bronze", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item6 = new Item("rd_armor", "RD_inv_chest_bforest"); item6.Crafting.Add("RD_necromancer_table", 1); item6.RequiredItems.Add("TrollHide", 4); item6.RequiredItems.Add("BoneFragments", 8); item6.RequiredItems.Add("Bronze", 5); item6.RequiredUpgradeItems.Add("TrollHide", 1); item6.RequiredUpgradeItems.Add("BoneFragments", 3); item6.RequiredUpgradeItems.Add("Bronze", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item7 = new Item("rd_armor", "RD_inv_legs_bforest"); item7.Crafting.Add("RD_necromancer_table", 1); item7.RequiredItems.Add("TrollHide", 4); item7.RequiredItems.Add("BoneFragments", 6); item7.RequiredItems.Add("Bronze", 5); item7.RequiredUpgradeItems.Add("TrollHide", 1); item7.RequiredUpgradeItems.Add("BoneFragments", 4); item7.RequiredUpgradeItems.Add("Bronze", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item7.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item8 = new Item("rd_armor", "RD_inv_cape_bforest"); item8.Crafting.Add("RD_necromancer_table", 1); item8.RequiredItems.Add("TrollHide", 2); item8.RequiredItems.Add("BoneFragments", 4); item8.RequiredItems.Add("Bronze", 2); item8.RequiredUpgradeItems.Add("TrollHide", 1); item8.RequiredUpgradeItems.Add("BoneFragments", 2); item8.RequiredUpgradeItems.Add("Bronze", 1); MaterialReplacer.RegisterGameObjectForShaderSwap(item8.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item9 = new Item("rd_armor", "RD_inv_helmet_swamp"); item9.Crafting.Add("RD_necromancer_table", 2); item9.RequiredItems.Add("Iron", 10); item9.RequiredItems.Add("ElderBark", 10); item9.RequiredItems.Add("Entrails", 6); item9.RequiredUpgradeItems.Add("Iron", 2); item9.RequiredUpgradeItems.Add("ElderBark", 6); item9.RequiredUpgradeItems.Add("Entrails", 3); MaterialReplacer.RegisterGameObjectForShaderSwap(item9.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item10 = new Item("rd_armor", "RD_inv_chest_swamp"); item10.Crafting.Add("RD_necromancer_table", 2); item10.RequiredItems.Add("Iron", 12); item10.RequiredItems.Add("ElderBark", 8); item10.RequiredItems.Add("Entrails", 8); item10.RequiredUpgradeItems.Add("Iron", 3); item10.RequiredUpgradeItems.Add("ElderBark", 4); item10.RequiredUpgradeItems.Add("Entrails", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item10.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item11 = new Item("rd_armor", "RD_inv_legs_swamp"); item11.Crafting.Add("RD_necromancer_table", 2); item11.RequiredItems.Add("Iron", 12); item11.RequiredItems.Add("ElderBark", 8); item11.RequiredItems.Add("Entrails", 8); item11.RequiredUpgradeItems.Add("Iron", 3); item11.RequiredUpgradeItems.Add("ElderBark", 4); item11.RequiredUpgradeItems.Add("Entrails", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item11.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item12 = new Item("rd_armor", "RD_inv_cape_swamp"); item12.Crafting.Add("RD_necromancer_table", 2); item12.RequiredItems.Add("ElderBark", 4); item12.RequiredItems.Add("Entrails", 6); item12.RequiredUpgradeItems.Add("ElderBark", 2); item12.RequiredUpgradeItems.Add("Entrails", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item12.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item13 = new Item("rd_armor", "RD_inv_helmet_mountain"); item13.Crafting.Add("RD_necromancer_table", 2); item13.RequiredItems.Add("WolfFang", 3); item13.RequiredItems.Add("WolfPelt", 10); item13.RequiredItems.Add("FreezeGland", 6); item13.RequiredItems.Add("TrollHide", 6); item13.RequiredUpgradeItems.Add("WolfPelt", 6); item13.RequiredUpgradeItems.Add("FreezeGland", 2); item13.RequiredUpgradeItems.Add("TrollHide", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item13.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item14 = new Item("rd_armor", "RD_inv_chest_mountain"); item14.Crafting.Add("RD_necromancer_table", 2); item14.RequiredItems.Add("WolfClaw", 3); item14.RequiredItems.Add("WolfPelt", 14); item14.RequiredItems.Add("Silver", 18); item14.RequiredItems.Add("DeerHide", 12); item14.RequiredUpgradeItems.Add("WolfPelt", 6); item14.RequiredUpgradeItems.Add("Silver", 8); item14.RequiredUpgradeItems.Add("DeerHide", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item14.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item15 = new Item("rd_armor", "RD_inv_legs_mountain"); item15.Crafting.Add("RD_necromancer_table", 2); item15.RequiredItems.Add("WolfClaw", 3); item15.RequiredItems.Add("WolfPelt", 12); item15.RequiredItems.Add("Silver", 24); item15.RequiredItems.Add("DeerHide", 16); item15.RequiredUpgradeItems.Add("WolfPelt", 6); item15.RequiredUpgradeItems.Add("Silver", 12); item15.RequiredUpgradeItems.Add("DeerHide", 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item15.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item16 = new Item("rd_armor", "RD_inv_cape_mountain"); item16.Crafting.Add("RD_necromancer_table", 2); item16.RequiredItems.Add("WolfPelt", 12); item16.RequiredItems.Add("Silver", 6); item16.RequiredItems.Add("FreezeGland", 6); item16.RequiredUpgradeItems.Add("WolfPelt", 6); item16.RequiredUpgradeItems.Add("Silver", 4); item16.RequiredUpgradeItems.Add("FreezeGland", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item16.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item17 = new Item("rd_armor", "RD_inv_helmet_plains"); item17.Crafting.Add("RD_necromancer_table_02", 1); item17.RequiredItems.Add("BlackMetal", 16); item17.RequiredItems.Add("LoxPelt", 8); item17.RequiredItems.Add("LinenThread", 6); item17.RequiredItems.Add("JuteRed", 4); item17.RequiredUpgradeItems.Add("BlackMetal", 8); item17.RequiredUpgradeItems.Add("LoxPelt", 4); item17.RequiredUpgradeItems.Add("LinenThread", 3); item17.RequiredUpgradeItems.Add("JuteRed", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item17.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item18 = new Item("rd_armor", "RD_inv_chest_plains"); item18.Crafting.Add("RD_necromancer_table_02", 1); item18.RequiredItems.Add("BlackMetal", 24); item18.RequiredItems.Add("LoxPelt", 12); item18.RequiredItems.Add("LinenThread", 12); item18.RequiredItems.Add("JuteRed", 4); item18.RequiredUpgradeItems.Add("BlackMetal", 12); item18.RequiredUpgradeItems.Add("LoxPelt", 6); item18.RequiredUpgradeItems.Add("LinenThread", 6); item18.RequiredUpgradeItems.Add("JuteRed", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item18.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item19 = new Item("rd_armor", "RD_inv_legs_plains"); item19.Crafting.Add("RD_necromancer_table_02", 1); item19.RequiredItems.Add("BlackMetal", 24); item19.RequiredItems.Add("LoxPelt", 12); item19.RequiredItems.Add("LinenThread", 12); item19.RequiredItems.Add("JuteRed", 4); item19.RequiredUpgradeItems.Add("BlackMetal", 12); item19.RequiredUpgradeItems.Add("LoxPelt", 6); item19.RequiredUpgradeItems.Add("LinenThread", 6); item19.RequiredUpgradeItems.Add("JuteRed", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item19.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item20 = new Item("rd_armor", "RD_inv_cape_plains"); item20.Crafting.Add("RD_necromancer_table_02", 1); item20.RequiredItems.Add("BlackMetal", 8); item20.RequiredItems.Add("LoxPelt", 6); item20.RequiredItems.Add("LinenThread", 8); item20.RequiredItems.Add("JuteRed", 2); item20.RequiredUpgradeItems.Add("BlackMetal", 4); item20.RequiredUpgradeItems.Add("LoxPelt", 2); item20.RequiredUpgradeItems.Add("LinenThread", 4); item20.RequiredUpgradeItems.Add("JuteRed", 1); MaterialReplacer.RegisterGameObjectForShaderSwap(item20.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item21 = new Item("rd_armor", "RD_inv_helmet_mistlands"); item21.Crafting.Add("RD_necromancer_table_02", 1); item21.RequiredItems.Add("LinenThread", 16); item21.RequiredItems.Add("ScaleHide", 12); item21.RequiredItems.Add("Carapace", 8); item21.RequiredItems.Add("Eitr", 14); item21.RequiredUpgradeItems.Add("ScaleHide", 6); item21.RequiredUpgradeItems.Add("Carapace", 4); item21.RequiredUpgradeItems.Add("Eitr", 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item21.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item22 = new Item("rd_armor", "RD_inv_chest_mistlands"); item22.Crafting.Add("RD_necromancer_table_02", 1); item22.RequiredItems.Add("Mandible", 8); item22.RequiredItems.Add("ScaleHide", 18); item22.RequiredItems.Add("Carapace", 16); item22.RequiredItems.Add("Eitr", 22); item22.RequiredUpgradeItems.Add("ScaleHide", 9); item22.RequiredUpgradeItems.Add("Carapace", 8); item22.RequiredUpgradeItems.Add("Eitr", 11); MaterialReplacer.RegisterGameObjectForShaderSwap(item22.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item23 = new Item("rd_armor", "RD_inv_legs_mistlands"); item23.Crafting.Add("RD_necromancer_table_02", 1); item23.RequiredItems.Add("Mandible", 8); item23.RequiredItems.Add("ScaleHide", 18); item23.RequiredItems.Add("Carapace", 16); item23.RequiredItems.Add("Eitr", 22); item23.RequiredUpgradeItems.Add("ScaleHide", 9); item23.RequiredUpgradeItems.Add("Carapace", 8); item23.RequiredUpgradeItems.Add("Eitr", 11); MaterialReplacer.RegisterGameObjectForShaderSwap(item23.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item24 = new Item("rd_armor", "RD_inv_cape_mistlands"); item24.Crafting.Add("RD_necromancer_table_02", 1); item24.RequiredItems.Add("Mandible", 2); item24.RequiredItems.Add("ScaleHide", 8); item24.RequiredItems.Add("Carapace", 8); item24.RequiredItems.Add("Eitr", 12); item24.RequiredUpgradeItems.Add("ScaleHide", 4); item24.RequiredUpgradeItems.Add("Carapace", 4); item24.RequiredUpgradeItems.Add("Eitr", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item24.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item25 = new Item("rd_armor", "RD_inv_helmet_ashlands"); item25.Crafting.Add("RD_necromancer_table_02", 1); item25.RequiredItems.Add("GemstoneRed", 1); item25.RequiredItems.Add("AskHide", 8); item25.RequiredItems.Add("CelestialFeather", 4); item25.RequiredItems.Add("FlametalNew", 8); item25.RequiredUpgradeItems.Add("AskHide", 4); item25.RequiredUpgradeItems.Add("CelestialFeather", 2); item25.RequiredUpgradeItems.Add("FlametalNew", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item25.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item26 = new Item("rd_armor", "RD_inv_chest_ashlands"); item26.Crafting.Add("RD_necromancer_table_02", 1); item26.RequiredItems.Add("GemstoneRed", 1); item26.RequiredItems.Add("AskHide", 28); item26.RequiredItems.Add("CharredBone", 16); item26.RequiredItems.Add("FlametalNew", 26); item26.RequiredUpgradeItems.Add("AskHide", 14); item26.RequiredUpgradeItems.Add("CharredBone", 8); item26.RequiredUpgradeItems.Add("FlametalNew", 14); MaterialReplacer.RegisterGameObjectForShaderSwap(item26.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item27 = new Item("rd_armor", "RD_inv_legs_ashlands"); item27.Crafting.Add("RD_necromancer_table_02", 1); item27.RequiredItems.Add("GemstoneRed", 1); item27.RequiredItems.Add("AskHide", 28); item27.RequiredItems.Add("CharredBone", 16); item27.RequiredItems.Add("FlametalNew", 26); item27.RequiredUpgradeItems.Add("AskHide", 14); item27.RequiredUpgradeItems.Add("CharredBone", 8); item27.RequiredUpgradeItems.Add("FlametalNew", 14); MaterialReplacer.RegisterGameObjectForShaderSwap(item27.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item28 = new Item("rd_armor", "RD_inv_cape_ashlands"); item28.Crafting.Add("RD_necromancer_table_02", 1); item28.RequiredItems.Add("GemstoneRed", 1); item28.RequiredItems.Add("AskHide", 6); item28.RequiredItems.Add("CelestialFeather", 6); item28.RequiredItems.Add("FlametalNew", 12); item28.RequiredUpgradeItems.Add("AskHide", 3); item28.RequiredUpgradeItems.Add("CelestialFeather", 4); item28.RequiredUpgradeItems.Add("FlametalNew", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item28.Prefab, MaterialReplacer.ShaderType.UseUnityShader); } } internal static class Registrations_Bench { public static void RegisterBench() { BuildPiece buildPiece = new BuildPiece("rd_armor", "RD_necromancer_table"); buildPiece.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece.Category.Set("Vikings Mastery"); buildPiece.SpecialProperties.AdminOnly = false; buildPiece.RequiredItems.Add("Resin", 10, recover: true); buildPiece.RequiredItems.Add("Wood", 20, recover: true); buildPiece.RequiredItems.Add("DeerHide", 10, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece2 = new BuildPiece("rd_armor", "RD_necromancer_table_ext_01"); buildPiece2.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece2.Category.Set("Vikings Mastery"); buildPiece2.SpecialProperties.AdminOnly = false; buildPiece2.RequiredItems.Add("GreydwarfEye", 10, recover: true); buildPiece2.RequiredItems.Add("Wood", 10, recover: true); buildPiece2.RequiredItems.Add("DeerHide", 5, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece3 = new BuildPiece("rd_armor", "RD_necromancer_table_ext_02"); buildPiece3.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece3.Category.Set("Vikings Mastery"); buildPiece3.SpecialProperties.AdminOnly = false; buildPiece3.RequiredItems.Add("Bronze", 10, recover: true); buildPiece3.RequiredItems.Add("FineWood", 10, recover: true); buildPiece3.RequiredItems.Add("Feathers", 5, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece4 = new BuildPiece("rd_armor", "RD_necromancer_table_ext_03"); buildPiece4.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece4.Category.Set("Vikings Mastery"); buildPiece4.SpecialProperties.AdminOnly = false; buildPiece4.RequiredItems.Add("Iron", 10, recover: true); buildPiece4.RequiredItems.Add("ElderBark", 15, recover: true); buildPiece4.RequiredItems.Add("Entrails", 10, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece5 = new BuildPiece("rd_armor", "RD_necromancer_table_ext_04"); buildPiece5.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece5.Category.Set("Vikings Mastery"); buildPiece5.SpecialProperties.AdminOnly = false; buildPiece5.RequiredItems.Add("Silver", 10, recover: true); buildPiece5.RequiredItems.Add("FineWood", 10, recover: true); buildPiece5.RequiredItems.Add("FreezeGland", 6, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece6 = new BuildPiece("rd_armor", "RD_necromancer_table_02"); buildPiece6.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece6.Category.Set("Vikings Mastery"); buildPiece6.SpecialProperties.AdminOnly = false; buildPiece6.RequiredItems.Add("BlackMetal", 20, recover: true); buildPiece6.RequiredItems.Add("FineWood", 20, recover: true); buildPiece6.RequiredItems.Add("GoblinTotem", 2, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece7 = new BuildPiece("rd_armor", "RD_necromancer_table_02_ext_01"); buildPiece7.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece7.Category.Set("Vikings Mastery"); buildPiece7.SpecialProperties.AdminOnly = false; buildPiece7.RequiredItems.Add("BlackMetal", 10, recover: true); buildPiece7.RequiredItems.Add("FineWood", 10, recover: true); buildPiece7.RequiredItems.Add("GoblinTotem", 1, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece7.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece8 = new BuildPiece("rd_armor", "RD_necromancer_table_02_ext_02"); buildPiece8.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece8.Category.Set("Vikings Mastery"); buildPiece8.SpecialProperties.AdminOnly = false; buildPiece8.RequiredItems.Add("Eitr", 10, recover: true); buildPiece8.RequiredItems.Add("FineWood", 10, recover: true); buildPiece8.RequiredItems.Add("BlackCore", 1, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece8.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece9 = new BuildPiece("rd_armor", "RD_necromancer_table_02_ext_03"); buildPiece9.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece9.Category.Set("Vikings Mastery"); buildPiece9.SpecialProperties.AdminOnly = false; buildPiece9.RequiredItems.Add("Eitr", 8, recover: true); buildPiece9.RequiredItems.Add("Blackwood", 10, recover: true); buildPiece9.RequiredItems.Add("FlametalNew", 10, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece9.Prefab, MaterialReplacer.ShaderType.UseUnityShader); } } internal static class Registrations_Effects { public static void RegisterEffects() { GameObject val = PrefabManager.RegisterPrefab("rd_armor", "fx_backstab_rd_armor"); GameObject val2 = PrefabManager.RegisterPrefab("rd_armor", "fx_crit_rd_armor"); GameObject val3 = PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_climb_rd_armor"); GameObject val4 = PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_jog_rd_armor"); GameObject val5 = PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_mud_jog_rd_armor"); GameObject val6 = PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_mud_run_rd_armor"); GameObject val7 = PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_snow_jog_rd_armor"); GameObject val8 = PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_snow_run_rd_armor"); GameObject val9 = PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_water_rd_armor"); GameObject val10 = PrefabManager.RegisterPrefab("rd_armor", "fx_skeleton_pet_rd_armor"); GameObject val11 = PrefabManager.RegisterPrefab("rd_armor", "fx_block_camshake_rd_armor"); GameObject val12 = PrefabManager.RegisterPrefab("rd_armor", "fx_hit_camshake_rd_armor"); GameObject val13 = PrefabManager.RegisterPrefab("rd_armor", "fx_swing_camshake_rd_armor"); GameObject val14 = PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_run_rd_armor"); GameObject val15 = PrefabManager.RegisterPrefab("rd_armor", "fx_charred_death_rd_armor"); GameObject val16 = PrefabManager.RegisterPrefab("rd_armor", "fx_fireskeleton_nova_rd_armor"); GameObject val17 = PrefabManager.RegisterPrefab("rd_armor", "fx_charred_hit_rd_armor"); GameObject val18 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_efeito_mao"); GameObject val19 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_solo_ashlands"); GameObject val20 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_solo_bforest"); GameObject val21 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_solo_meadows"); GameObject val22 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_solo_mistlands"); GameObject val23 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_solo_mountain"); GameObject val24 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_solo_plains"); GameObject val25 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_solo_swamp"); GameObject val26 = PrefabManager.RegisterPrefab("rd_armor", "sfx_footstep_sneak_rd_armor"); GameObject val27 = PrefabManager.RegisterPrefab("rd_armor", "sfx_footstep_swim_rd_armor"); GameObject val28 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_hit_rd_armor"); GameObject val29 = PrefabManager.RegisterPrefab("rd_armor", "sfx_metal_blocked_rd_armor"); GameObject val30 = PrefabManager.RegisterPrefab("rd_armor", "sfx_sword_hit_rd_armor"); GameObject val31 = PrefabManager.RegisterPrefab("rd_armor", "sfx_sword_swing_rd_armor"); GameObject val32 = PrefabManager.RegisterPrefab("rd_armor", "sfx_wood_blocked_rd_armor"); GameObject val33 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_big_death_rd_armor"); GameObject val34 = PrefabManager.RegisterPrefab("rd_armor", "sfx_club_swing_rd_armor"); GameObject val35 = PrefabManager.RegisterPrefab("rd_armor", "sfx_axe_swing_rd_armor"); GameObject val36 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_attack_rd_armor"); GameObject val37 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_mace_hit_rd_armor"); GameObject val38 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_alerted_rd_armor"); GameObject val39 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_idle_rd_armor"); GameObject val40 = PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_death_rd_armor"); GameObject val41 = PrefabManager.RegisterPrefab("rd_armor", "sfx_arrow_hit_rd_armor"); GameObject val42 = PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_hit_rd_armor"); GameObject val43 = PrefabManager.RegisterPrefab("rd_armor", "sfx_bow_draw_rd_armor"); GameObject val44 = PrefabManager.RegisterPrefab("rd_armor", "sfx_bow_fire_rd_armor"); GameObject val45 = PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_alerted_rd_armor"); GameObject val46 = PrefabManager.RegisterPrefab("rd_armor", "sfx_firestaff_launch_rd_armor"); GameObject val47 = PrefabManager.RegisterPrefab("rd_armor", "sfx_bomb_throw_rd_armor"); GameObject val48 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_death_rd_armor"); GameObject val49 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_alert_rd_armor"); GameObject val50 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_bow_draw_rd_armor"); GameObject val51 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_bow_release_rd_armor"); GameObject val52 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_volley_draw_rd_armor"); GameObject val53 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_volley_release_rd_armor"); GameObject val54 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_hurt_rd_armor"); GameObject val55 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_melee_attack_lift_rd_armor"); GameObject val56 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_melee_attack_swing_rd_armor"); GameObject val57 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_melee_attack_stab_rd_armor"); GameObject val58 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_footstep_rd_armor"); GameObject val59 = PrefabManager.RegisterPrefab("rd_armor", "sfx_wood_destroyed_rd_armor"); GameObject val60 = PrefabManager.RegisterPrefab("rd_armor", "sfx_build_hammer_wood_rd_armor"); GameObject val61 = PrefabManager.RegisterPrefab("rd_armor", "sfx_gui_craftitem_workbench_rd_armor"); GameObject val62 = PrefabManager.RegisterPrefab("rd_armor", "sfx_gui_craftitem_workbench_end_rd_armor"); GameObject val63 = PrefabManager.RegisterPrefab("rd_armor", "sfx_gui_repairitem_workbench_rd_armor"); GameObject val64 = PrefabManager.RegisterPrefab("rd_armor", "vfx_creature_soothed_rd_armor"); GameObject val65 = PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_death_rd_armor"); GameObject val66 = PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_hit_rd_armor"); GameObject val67 = PrefabManager.RegisterPrefab("rd_armor", "vfx_water_surface_rd_armor"); GameObject val68 = PrefabManager.RegisterPrefab("rd_armor", "vfx_blocked_rd_armor"); GameObject val69 = PrefabManager.RegisterPrefab("rd_armor", "vfx_HitSparks_rd_armor"); GameObject val70 = PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_big_death_rd_armor"); GameObject val71 = PrefabManager.RegisterPrefab("rd_armor", "vfx_clubhit_rd_armor"); GameObject val72 = PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_mace_hit_rd_armor"); GameObject val73 = PrefabManager.RegisterPrefab("rd_armor", "vfx_arrowhit_rd_armor"); GameObject val74 = PrefabManager.RegisterPrefab("rd_armor", "vfx_corpse_destruction_small_rd_armor"); GameObject val75 = PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_fire_death_rd_armor"); GameObject val76 = PrefabManager.RegisterPrefab("rd_armor", "vfx_draugr_hit_rd_armor"); GameObject val77 = PrefabManager.RegisterPrefab("rd_armor", "vfx_draugr_death_rd_armor"); GameObject val78 = PrefabManager.RegisterPrefab("rd_armor", "vfx_SawDust_rd_armor"); GameObject val79 = PrefabManager.RegisterPrefab("rd_armor", "vfx_Place_workbench_rd_armor"); GameObject val80 = PrefabManager.RegisterPrefab("rd_armor", "vfx_ExtensionConnection_rd_armor"); GameObject val81 = PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_bflorest"); GameObject val82 = PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_pantano"); GameObject val83 = PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_meadows"); GameObject val84 = PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_hit_mountain"); GameObject val85 = PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_mistlands"); GameObject val86 = PrefabManager.RegisterPrefab("rd_armor", "fx_inv_launch_mountain_launch"); GameObject val87 = PrefabManager.RegisterPrefab("rd_armor", "fx_inv_launch_plains_launch"); GameObject val88 = PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_ashlands"); GameObject val89 = PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_meadows"); GameObject val90 = PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_bflorest"); GameObject val91 = PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_swamp"); GameObject val92 = PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_mountain_start"); GameObject val93 = PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_plains"); GameObject val94 = PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_mistlands"); GameObject val95 = PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_ashlands"); GameObject val96 = PrefabManager.RegisterPrefab("rd_armor", "fx_FeastSmall_rd_armor"); GameObject val97 = PrefabManager.RegisterPrefab("rd_armor", "sfx_unarmed_hit_rd_armor"); GameObject val98 = PrefabManager.RegisterPrefab("rd_armor", "vfx_Place_wood_pole_rd_armor"); GameObject val99 = PrefabManager.RegisterPrefab("rd_armor", "fx_Eat_rd_armor"); GameObject val100 = PrefabManager.RegisterPrefab("rd_armor", "sfx_eat_rd_armor"); GameObject val101 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_bforest_idle_rd_armor"); GameObject val102 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_bforest_idle_rd_armor_en"); GameObject val103 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_bforest_idle_rd_armor_ptbr"); GameObject val104 = PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_archer_idle_rd_armor"); GameObject val105 = PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_archer_idle_rd_armor_en"); GameObject val106 = PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_archer_idle_rd_armor_ptbr"); GameObject val107 = PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_idle_rd_armor"); GameObject val108 = PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_idle_rd_armor_en"); GameObject val109 = PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_idle_rd_armor_ptbr"); GameObject val110 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_ildir_idle_rd_armor"); GameObject val111 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_ildir_idle_rd_armor_en"); GameObject val112 = PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_ildir_idle_rd_armor_ptbr"); GameObject val113 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_idle_rd_armor"); GameObject val114 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_idle_rd_armor_female_en"); GameObject val115 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_idle_rd_armor_female_ptbr"); GameObject val116 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_idle_rd_armor"); GameObject val117 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_idle_rd_armor_male_en"); GameObject val118 = PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_idle_rd_armor_male_ptbr"); GameObject val119 = PrefabManager.RegisterPrefab("rd_armor", "sfx_ghosts_idle_rd_armor"); GameObject val120 = PrefabManager.RegisterPrefab("rd_armor", "sfx_ghosts_idle_rd_armor_male_en"); GameObject val121 = PrefabManager.RegisterPrefab("rd_armor", "sfx_ghosts_idle_rd_armor_male_ptbr"); GameObject val122 = PrefabManager.RegisterPrefab("rd_armor", "fx_bjorn_hit_rd_armor"); GameObject val123 = PrefabManager.RegisterPrefab("rd_armor", "sfx_unbjorn_hurt_rd_armor"); GameObject val124 = PrefabManager.RegisterPrefab("rd_armor", "fx_bjorn_death_rd_armor"); GameObject val125 = PrefabManager.RegisterPrefab("rd_armor", "vfx_corpse_destruction_medium_rd_armor"); GameObject val126 = PrefabManager.RegisterPrefab("rd_armor", "sfx_unbjorn_idle_rd_armor"); GameObject val127 = PrefabManager.RegisterPrefab("rd_armor", "sfx_troll_rock_destroyed_rd_armor"); GameObject val128 = PrefabManager.RegisterPrefab("rd_armor", "vfx_bjorn_groundslam_rd_armor"); GameObject val129 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_solo_plains_unbjorn"); GameObject val130 = PrefabManager.RegisterPrefab("rd_armor", "sfx_unbjorn_claw_attack_rd_armor"); GameObject val131 = PrefabManager.RegisterPrefab("rd_armor", "sfx_unbjorn_claw_attack_slash_rd_armor"); GameObject val132 = PrefabManager.RegisterPrefab("rd_armor", "sfx_unbjorn_bite_attack_impact_rd_armor"); GameObject val133 = PrefabManager.RegisterPrefab("rd_armor", "sfx_unbjorn_bite_attack_rd_armor"); GameObject val134 = PrefabManager.RegisterPrefab("rd_armor", "vfx_unspawn_rd_armor"); GameObject val135 = PrefabManager.RegisterPrefab("rd_armor", "vfx_unspawn_big_rd_armor"); GameObject val136 = PrefabManager.RegisterPrefab("rd_armor", "sfx_unspawn_rd_armor"); GameObject val137 = PrefabManager.RegisterPrefab("rd_armor", "sfx_ghost_death_rd_armor"); GameObject val138 = PrefabManager.RegisterPrefab("rd_armor", "sfx_ghost_hurt_rd_armor"); GameObject val139 = PrefabManager.RegisterPrefab("rd_armor", "vfx_ghost_death_rd_armor"); GameObject val140 = PrefabManager.RegisterPrefab("rd_armor", "vfx_ghost_hit_rd_armor"); GameObject val141 = PrefabManager.RegisterPrefab("rd_armor", "sfx_ghosts_melee_attack_impact_rd_armor"); GameObject val142 = PrefabManager.RegisterPrefab("rd_armor", "sfx_ghosts_melee_attack_rd_armor"); GameObject val143 = PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_solo_bforest_ghost"); } } internal static class Registrations_Food { public static void RegisterFoods() { Item item = new Item("rd_armor", "RD_meat_patty"); item.Crafting.Add(ItemManager.CraftingTable.Inventory, 1); item.RequiredItems.Add("RawMeat", 2); item.RequiredItems.Add("Dandelion", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item2 = new Item("rd_armor", "RD_fruit_mead"); item2.Crafting.Add(ItemManager.CraftingTable.Inventory, 1); item2.RequiredItems.Add("Blueberries", 4); item2.RequiredItems.Add("Raspberry", 4); item2.RequiredItems.Add("Mushroom", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item3 = new Item("rd_armor", "RD_roast_meat"); item3.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item3.RequiredItems.Add("DeerMeat", 2); item3.RequiredItems.Add("Dandelion", 4); item3.RequiredItems.Add("Thistle", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item4 = new Item("rd_armor", "RD_blood_sausage"); item4.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item4.RequiredItems.Add("Entrails", 4); item4.RequiredItems.Add("RawMeat", 1); item4.RequiredItems.Add("Bloodbag", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item5 = new Item("rd_armor", "RD_meat_stew"); item5.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item5.RequiredItems.Add("WolfMeat", 6); item5.RequiredItems.Add("Onion", 4); item5.RequiredItems.Add("Carrot", 4); item5.RequiredItems.Add("MushroomYellow", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item6 = new Item("rd_armor", "RD_meatball"); item6.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item6.RequiredItems.Add("LoxMeat", 2); item6.RequiredItems.Add("BarleyFlour", 4); item6.RequiredItems.Add("Cloudberry", 2); item6.RequiredItems.Add("Raspberry", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); } } internal static class Registrations_MobsPrefab { public static void RegisterMobsPrefab() { Mob_Registry.Init(); foreach (Mob_Registry.SummonDef value in Mob_Registry.All.Values) { RegisterSummon(value); } } private static void RegisterSummon(Mob_Registry.SummonDef def) { GameObject val = PrefabManager.RegisterPrefab("rd_armor", def.Prefab); if (!((Object)(object)val == (Object)null)) { CharacterTimedDestruction val2 = val.GetComponent<CharacterTimedDestruction>() ?? val.AddComponent<CharacterTimedDestruction>(); val2.m_timeoutMax = (val2.m_timeoutMin = Vikings_SummonerPlugin.GetLifetimeCE(def.Prefab).Value); val2.m_triggerOnAwake = true; if (!Object.op_Implicit((Object)(object)val.GetComponent<VS_SummonLifetime>())) { val.AddComponent<VS_SummonLifetime>(); } } } } [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] internal static class Mob_Registry { [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] internal sealed class SummonDef { public string Prefab = null; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] public string IdlePrefix; public ConfigEntry<float> Lifetime => Vikings_SummonerPlugin.GetLifetimeCE(Prefab); public ConfigEntry<float> BloodMagic => Vikings_SummonerPlugin.GetBloodMagicCE(Prefab); } internal static readonly Dictionary<string, SummonDef> All = new Dictionary<string, SummonDef>(StringComparer.Ordinal); internal static void Init(Vikings_SummonerPlugin plugin) { Init(); } internal static void Init() { if (All.Count <= 0) { Add("RD_inv_skeleton_meadows"); Add("RD_inv_skeleton_bforest", "sfx_skeleton_bforest_idle_rd_armor"); Add("RD_inv_ghost_bforest", "sfx_ghosts_idle_rd_armor"); Add("RD_inv_draugr_swamp", "sfx_draugr_archer_idle_rd_armor"); Add("RD_inv_draugr_mountain", "sfx_draugr_idle_rd_armor"); Add("RD_inv_skeleton_plains", "sfx_skeleton_ildir_idle_rd_armor"); Add("RD_inv_unbjorn_plains"); Add("RD_inv_skeleton_mistlands", "sfx_charred_archer_idle_rd_armor"); Add("RD_inv_skeleton_ashlands", "sfx_charred_idle_rd_armor"); } } private static void Add(string prefab, [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] string idlePrefix = null) { SummonDef value = new SummonDef { Prefab = prefab, IdlePrefix = idlePrefix }; All[prefab] = value; } } internal static class Registrations_MobBloodmagicGate { internal static void RegisterBloodMagicGate() { Mob_Registry.Init(); } } internal static class VS_BloodmagicGate_Tokens { [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(1)] internal const string GateMsg = "vs_bm_gate_msg"; } internal static class VS_BloodmagicGate_Core { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] internal static bool BlockIfInsufficient(SpawnAbility sa, [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] Character owner) { if ((Object)(object)owner == (Object)null) { return false; } if ((Object)(object)sa == (Object)null || sa.m_spawnPrefab == null || sa.m_spawnPrefab.Length == 0) { return false; } float num = 0f; GameObject[] spawnPrefab = sa.m_spawnPrefab; foreach (GameObject val in spawnPrefab) { if (Object.op_Implicit((Object)(object)val) && Mob_Registry.All.TryGetValue(((Object)val).name, out var _)) { float value2 = Vikings_SummonerPlugin.GetBloodMagicCE(((Object)val).name).Value; if (value2 > num) { num = value2; } } } if (num <= 0f) { return false; } Skills skills = owner.GetSkills(); if ((Object)(object)skills == (Object)null) { return false; } float skillLevel = skills.GetSkillLevel((SkillType)10); if (skillLevel >= num) { return false; } Player val2 = (Player)(object)((owner is Player) ? owner : null); if (val2 != null) { int num2 = Mathf.FloorToInt(skillLevel); int num3 = Mathf.FloorToInt(num); string arg = $"<color=red><b>{num2}</b></color>"; string arg2 = $"<color=red><b>{num3}</b></color>"; string format = Localization.instance.Localize("$vs_bm_gate_msg"); string text = string.Format(format, arg, arg2); ((Character)val2).Message((MessageType)2, text, 0, (Sprite)null); } return true; } } [HarmonyPatch(typeof(SpawnAbility), "Setup")] internal static class VS_BloodmagicGate_Patch_Setup { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static bool Prefix(SpawnAbility __instance, Character owner) { return !VS_BloodmagicGate_Core.BlockIfInsufficient(__instance, owner); } } [HarmonyPatch(typeof(SpawnAbility), "Awake")] internal static class VS_BloodmagicGate_Patch_Awake { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static void Postfix(SpawnAbility __instance) { Character owner = default(Character); if (__instance.m_spawnOnAwake && ((Component)__instance).TryGetComponent<Character>(ref owner) && VS_BloodmagicGate_Core.BlockIfInsufficient(__instance, owner)) { ((MonoBehaviour)__instance).StopAllCoroutines(); } } } public sealed class VS_SummonMarker : MonoBehaviour { } [HarmonyPatch(typeof(Character), "GetHoverName")] internal static class Patch_Character_GetHoverName_EnemyLocalization { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static void Postfix(Character __instance, ref string __result) { if (Object.op_Implicit((Object)(object)__instance) && Object.op_Implicit((Object)(object)((Component)__instance).GetComponent<VS_SummonMarker>())) { string prefabName = Utils.GetPrefabName(((Component)__instance).gameObject); if (!string.IsNullOrEmpty(prefabName)) { __result = Localization.instance.Localize("$enemy_" + prefabName); } } } } [HarmonyPatch(typeof(ZNetScene), "Awake")] internal static class Registrations_Mob_Tamable { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static void Postfix(ZNetScene __instance) { Mob_Registry.Init(Vikings_SummonerPlugin.Instance); foreach (Mob_Registry.SummonDef value in Mob_Registry.All.Values) { GameObject prefab = __instance.GetPrefab(value.Prefab); if (Object.op_Implicit((Object)(object)prefab) && Object.op_Implicit((Object)(object)prefab.GetComponent<Character>()) && Object.op_Implicit((Object)(object)prefab.GetComponent<ZNetView>()) && Object.op_Implicit((Object)(object)prefab.GetComponent<MonsterAI>())) { if (!Object.op_Implicit((Object)(object)prefab.GetComponent<VS_SummonMarker>())) { prefab.AddComponent<VS_SummonMarker>(); } if (!Object.op_Implicit((Object)(object)prefab.GetComponent<VS_SummonTameable>())) { prefab.AddComponent<VS_SummonTameable>(); } if (!Object.op_Implicit((Object)(object)prefab.GetComponent<VS_SummonOwnerBinder>())) { prefab.AddComponent<VS_SummonOwnerBinder>(); } if (!Object.op_Implicit((Object)(object)prefab.GetComponent<VS_SummonLifetime>())) { prefab.AddComponent<VS_SummonLifetime>(); } } } } } [HarmonyPatch(typeof(Tameable), "GetHoverText")] internal static class Patch_Tameable_GetHoverText { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static bool Prefix(Tameable __instance, ref string __result) { if (Object.op_Implicit((Object)(object)((Component)__instance).GetComponent<VS_SummonMarker>())) { __result = string.Empty; return false; } return true; } } [HarmonyPatch(typeof(Tameable), "Interact")] internal static class Patch_Tameable_Interact { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static bool Prefix(Tameable __instance, Humanoid user, bool hold, bool alt, ref bool __result) { VS_SummonMarker vS_SummonMarker = default(VS_SummonMarker); if (!((Component)__instance).TryGetComponent<VS_SummonMarker>(ref vS_SummonMarker)) { return true; } VS_SummonTameable component = ((Component)__instance).GetComponent<VS_SummonTameable>(); if (!Object.op_Implicit((Object)(object)component)) { __result = false; return false; } __result = component.Interact(user, hold, alt); return false; } } [HarmonyPatch(typeof(Tameable), "UseItem")] internal static class Patch_Tameable_UseItem { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static bool Prefix(Tameable __instance, ref bool __result) { if (Object.op_Implicit((Object)(object)((Component)__instance).GetComponent<VS_SummonMarker>())) { __result = false; return false; } return true; } } [HarmonyPatch(typeof(Tameable), "Update")] internal static class Patch_Tameable_Update { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static bool Prefix(Tameable __instance) { return !Object.op_Implicit((Object)(object)((Component)__instance).GetComponent<VS_SummonMarker>()); } } [HarmonyPatch(typeof(Character), "GetHoverText")] internal static class Patch_Character_GetHoverText { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static void Postfix(Character __instance, ref string __result) { VS_SummonTameable component = ((Component)__instance).GetComponent<VS_SummonTameable>(); if (Object.op_Implicit((Object)(object)component)) { __result = component.AppendUnsummonToHover(__result); } } } public sealed class VS_SummonOwnerBinder : MonoBehaviour { [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(1)] private const string KeyOwner = "VS_OwnerID"; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] private ZNetView _nview; private float _delay = 0.25f; private bool _done; private void Awake() { _nview = ((Component)this).GetComponent<ZNetView>(); } private void Update() { //IL_00c0: Unknown result type (might be due to invalid IL or missing references) if (_done || !IsServer() || (Object)(object)_nview == (Object)null || !_nview.IsValid()) { return; } _delay -= Time.deltaTime; if (_delay > 0f) { return; } ZDO zDO = _nview.GetZDO(); if (zDO == null) { return; } long @long = zDO.GetLong("VS_OwnerID", 0L); if (@long != 0) { _done = true; ((Behaviour)this).enabled = false; return; } Player closestPlayer = Player.GetClosestPlayer(((Component)this).transform.position, 30f); if (!((Object)(object)closestPlayer == (Object)null)) { zDO.Set("VS_OwnerID", closestPlayer.GetPlayerID()); _done = true; ((Behaviour)this).enabled = false; } } private static bool IsServer() { return (Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer(); } } [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] public sealed class VS_SummonTameable : MonoBehaviour, Interactable, Hoverable { internal const string KeyOwner = "VS_OwnerID"; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] private ZNetView _nview; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] private Character _character; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] private MonsterAI _ai; private float _tick; private float _unsummonCd; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] private string _lastHover; private float _hoverTTL; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] private GameObject _lastFollowTarget; private void Awake() { _nview = ((Component)this).GetComponent<ZNetView>(); _character = ((Component)this).GetComponent<Character>(); _ai = ((Component)this).GetComponent<MonsterAI>(); if ((Object)(object)_character != (Object)null) { _character.m_tamed = true; } } private void Update() { if ((Object)(object)_character != (Object)null && _character.IsDead()) { ((Behaviour)this).enabled = false; } else if (IsServer()) { _tick -= Time.deltaTime; if (!(_tick > 0f)) { _tick = 1f; EnsureFollowOwner(); } } } public string GetHoverName() { if ((Object)(object)_character != (Object)null) { return _character.GetHoverName(); } return ((Object)((Component)this).gameObject).name; } public string GetHoverText() { Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return string.Empty; } string text = Localization.instance.Localize("$KEY_Use"); string text2 = Localization.instance.Localize("$vs_summon_unsummon"); return GetHoverName() + "\n[<color=yellow><b>" + text + "</b></color>] " + text2; } internal string AppendUnsummonToHover(string baseText) { _hoverTTL -= Time.deltaTime; if (_hoverTTL > 0f && _lastHover != null) { return _lastHover; } Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return baseText; } if (!IsOwner(localPlayer) && !((Character)localPlayer).IsDebugFlying()) { return baseText; } if (!string.IsNullOrEmpty(baseText)) { baseText = FilterHoverLines_NoSplit(baseText); } string text = Localization.instance.Localize("$KEY_Use"); string text2 = Localization.instance.Localize("$vs_summon_unsummon"); string text3 = "[<color=yellow><b>" + text + "</b></color>] " + text2; string result = (_lastHover = (string.IsNullOrEmpty(baseText) ? (GetHoverName() + "\n" + text3) : (baseText + "\n" + text3))); _hoverTTL = 0.35f; return result; } public bool Interact(Humanoid user, bool hold, bool alt) { if (hold) { return false; } if (Time.time < _unsummonCd) { return false; } _unsummonCd = Time.time + 0.5f; Player val = (Player)(object)((user is Player) ? user : null); if (val == null) { return false; } if (!IsOwner(val) && !((Character)val).IsDebugFlying()) { return false; } if ((Object)(object)_nview == (Object)null || !_nview.IsValid()) { return false; } Tameable component = ((Component)this).GetComponent<Tameable>(); if ((Object)(object)component != (Object)null && (Object)(object)component.m_nview != (Object)null && component.m_nview.IsValid()) { component.m_nview.InvokeRPC("RPC_UnSummon", Array.Empty<object>()); return true; } return false; } public bool UseItem(Humanoid user, ItemData item) { return false; } private void EnsureFollowOwner() { if ((Object)(object)_ai == (Object)null || (Object)(object)_nview == (Object)null || !_nview.IsValid()) { return; } ZDO zDO = _nview.GetZDO(); if (zDO == null) { return; } long @long = zDO.GetLong("VS_OwnerID", 0L); if (@long == 0) { return; } foreach (Player allPlayer in Player.GetAllPlayers()) { if (allPlayer.GetPlayerID() == @long) { GameObject gameObject = ((Component)allPlayer).gameObject; if ((Object)(object)_lastFollowTarget != (Object)(object)gameObject) { _ai.SetFollowTarget(gameObject); _lastFollowTarget = gameObject; } return; } } if ((Object)(object)_lastFollowTarget != (Object)null) { _ai.SetFollowTarget((GameObject)null); _lastFollowTarget = null; } } private static bool IsServer() { return (Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer(); } private bool IsOwner(Player p) { if ((Object)(object)_nview == (Object)null || !_nview.IsValid()) { return false; } ZDO zDO = _nview.GetZDO(); if (zDO == null) { return false; } long @long = zDO.GetLong("VS_OwnerID", 0L); if (@long != 0) { return p.GetPlayerID() == @long; } if ((Object)(object)_ai != (Object)null && (Object)(object)_ai.GetFollowTarget() == (Object)(object)((Component)p).gameObject) { return true; } if (_nview.IsOwner()) { return true; } return false; } private static string FilterHoverLines_NoSplit(string text) { if (string.IsNullOrEmpty(text)) { return text; } StringBuilder stringBuilder = new StringBuilder(text.Length); bool flag = true; int num = 0; int length = text.Length; while (num < length) { int num2 = num; int i; for (i = num; i < length && text[i] != '\n' && text[i] != '\r'; i++) { } int j; for (j = num2; j < i; j++) { char c = text[j]; if (c != ' ' && c != '\t') { break; } } if (!StartsWithIgnoreCase(text, j, i - j, "Follows") && !StartsWithIgnoreCase(text, j, i - j, "$hud_tame_followers")) { if (!flag) { stringBuilder.Append('\n'); } stringBuilder.Append(text, num2, i - num2); flag = false; } if (i < length && text[i] == '\r') { i++; } if (i < length && text[i] == '\n') { i++; } num = i; } return stringBuilder.ToString(); } private static bool StartsWithIgnoreCase(string s, int start, int availableLen, string prefix) { if (availableLen < prefix.Length) { return false; } for (int i = 0; i < prefix.Length; i++) { char c = s[start + i]; char c2 = prefix[i]; if (c != c2) { if (c >= 'A' && c <= 'Z') { c = (char)(c + 32); } if (c2 >= 'A' && c2 <= 'Z') { c2 = (char)(c2 + 32); } if (c != c2) { return false; } } } return true; } } internal static class Registrations_Staffs { public static void RegisterStaffs() { Item item = new Item("rd_armor", "RD_inv_staff_meadows"); item.Crafting.Add("RD_necromancer_table", 1); item.RequiredItems.Add("TrophyBoar", 1); item.RequiredItems.Add("Wood", 16); item.RequiredItems.Add("GreydwarfEye", 10); item.RequiredItems.Add("Flint", 10); item.RequiredUpgradeItems.Add("Wood", 8); item.RequiredUpgradeItems.Add("GreydwarfEye", 4); item.RequiredUpgradeItems.Add("Flint", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item2 = new Item("rd_armor", "RD_inv_staff_bforest"); item2.Crafting.Add("RD_necromancer_table", 2); item2.RequiredItems.Add("TrophySkeleton", 1); item2.RequiredItems.Add("RoundLog", 12); item2.RequiredItems.Add("SurtlingCore", 5); item2.RequiredItems.Add("Bronze", 6); item2.RequiredUpgradeItems.Add("RoundLog", 8); item2.RequiredUpgradeItems.Add("SurtlingCore", 5); item2.RequiredUpgradeItems.Add("Bronze", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item3 = new Item("rd_armor", "RD_inv_staff_swamp"); item3.Crafting.Add("RD_necromancer_table", 2); item3.RequiredItems.Add("YmirRemains", 5); item3.RequiredItems.Add("Guck", 16); item3.RequiredItems.Add("Iron", 20); item3.RequiredItems.Add("ElderBark", 14); item3.RequiredUpgradeItems.Add("Guck", 8); item3.RequiredUpgradeItems.Add("Iron", 10); item3.RequiredUpgradeItems.Add("TrophySkeleton", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item4 = new Item("rd_armor", "RD_inv_staff_mountain"); item4.Crafting.Add("RD_necromancer_table", 2); item4.RequiredItems.Add("DragonTear", 2); item4.RequiredItems.Add("ElderBark", 22); item4.RequiredItems.Add("FreezeGland", 16); item4.RequiredItems.Add("Silver", 14); item4.RequiredUpgradeItems.Add("ElderBark", 11); item4.RequiredUpgradeItems.Add("FreezeGland", 8); item4.RequiredUpgradeItems.Add("Silver", 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item5 = new Item("rd_armor", "RD_inv_staff_plains"); item5.Crafting.Add("RD_necromancer_table_02", 1); item5.RequiredItems.Add("GoblinTotem", 2); item5.RequiredItems.Add("LoxPelt", 22); item5.RequiredItems.Add("RoundLog", 16); item5.RequiredItems.Add("BlackMetal", 20); item5.RequiredUpgradeItems.Add("LoxPelt", 11); item5.RequiredUpgradeItems.Add("RoundLog", 8); item5.RequiredUpgradeItems.Add("BlackMetal", 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item6 = new Item("rd_armor", "RD_inv_staff_mistlands"); item6.Crafting.Add("RD_necromancer_table_02", 1); item6.RequiredItems.Add("BlackCore", 2); item6.RequiredItems.Add("YggdrasilWood", 22); item6.RequiredItems.Add("Eitr", 14); item6.RequiredItems.Add("GiantBloodSack", 4); item6.RequiredUpgradeItems.Add("YggdrasilWood", 11); item6.RequiredUpgradeItems.Add("Eitr", 6); item6.RequiredUpgradeItems.Add("GiantBloodSack", 1); MaterialReplacer.RegisterGameObjectForShaderSwap(item6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item7 = new Item("rd_armor", "RD_inv_staff_ashlands"); item7.Crafting.Add("RD_necromancer_table_02", 1); item7.RequiredItems.Add("ShieldCore", 2); item7.RequiredItems.Add("YggdrasilWood", 24); item7.RequiredItems.Add("FlametalNew", 12); item7.RequiredItems.Add("CharredBone", 12); item7.RequiredUpgradeItems.Add("YggdrasilWood", 11); item7.RequiredUpgradeItems.Add("FlametalNew", 6); item7.RequiredUpgradeItems.Add("CharredBone", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item7.Prefab, MaterialReplacer.ShaderType.UseUnityShader); } } internal static class Registrations_StaffsAttack { public static void RegisterStaffsAttack() { GameObject val = PrefabManager.RegisterPrefab("rd_armor", "RD_inv_projectile_meadows"); GameObject val2 = PrefabManager.RegisterPrefab("rd_armor", "RD_inv_projectile_bflorest"); GameObject val3 = PrefabManager.RegisterPrefab("rd_armor", "RD_inv_projectile_swamp"); GameObject val4 = PrefabManager.RegisterPrefab("rd_armor", "RD_inv_projectile_mountain"); GameObject val5 = PrefabManager.RegisterPrefab("rd_armor", "RD_inv_projectile_plains"); GameObject val6 = PrefabManager.RegisterPrefab("rd_armor", "RD_inv_projectile_mistlands"); GameObject val7 = PrefabManager.RegisterPrefab("rd_armor", "RD_inv_projectile_ashlands"); } } internal static class Registrations_SummonItems { public static void RegisterSummonItems() { Item item = new Item("rd_armor", "RD_skeleton_woodshield_inv"); item.Configurable = Configurability.Disabled; item.Name.English("RD_skeleton_woodshield_inv"); item.Name.Portuguese_Brazilian("RD_skeleton_woodshield_inv"); MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item2 = new Item("rd_armor", "RD_skeleton_bronzesword_inv"); item2.Configurable = Configurability.Disabled; item2.Name.English("RD_skeleton_bronzesword_inv"); item2.Name.Portuguese_Brazilian("RD_skeleton_bronzesword_inv"); MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item3 = new Item("rd_armor", "RD_skeleton_woodbow_inv"); item3.Configurable = Configurability.Disabled; item3.Name.English("RD_skeleton_woodbow_inv"); item3.Name.Portuguese_Brazilian("RD_skeleton_woodbow_inv"); MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item4 = new Item("rd_armor", "RD_skeleton_mace_inv"); item4.Configurable = Configurability.Disabled; item4.Name.English("RD_skeleton_mace_inv"); item4.Name.Portuguese_Brazilian("RD_skeleton_mace_inv"); MaterialReplacer.RegisterGameObjectForShaderSwap(item4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item5 = new Item("rd_armor", "RD_draugr_bow_inv"); item5.Configurable = Configurability.Disabled; item5.Name.English("RD_draugr_bow_inv"); item5.Name.Portuguese_Brazilian("RD_draugr_bow_inv"); MaterialReplacer.RegisterGameObjectForShaderSwap(item5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item6 = new Item("rd_armor", "RD_draugrelite_sword_inv"); item6.Configurable = Configurability.Disabled; item6.Name.English("RD_draugrelite_sword_inv"); item6.Name.Portuguese_Brazilian("RD_draugrelite_sword_inv"); MaterialReplacer.RegisterGameObjectForShaderSwap(item6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item7 = new Item("rd_armor", "RD_skeleton_hildir_firenova_rd_armor"); item7.Configurable = Configurability.Disabled; item7.Name.English("RD_skeleton_hildir_firenova_rd_armor"); item7.Name.Portuguese_Brazilian("RD_skeleton_hildir_firenova_rd_armor"); MaterialReplacer.RegisterGameObjectForShaderSwap(item7.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item8 = new Item("rd_armor", "RD_skeleton_hildir_sword_rd_armor"); item8.Configurable = Configurability.Disabled; item8.Name.English("RD_skeleton_hildir_sword_rd_armor"); item8.Name.Portuguese_Brazilian("RD_skeleton_hildir_sword_rd_armor"); MaterialReplacer.RegisterGameObjectForShaderSwap(item8.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item9 = new Item("rd_armor", "Charred_Breastplate_archer"); item9.Configurable = Configurability.Disabled; item9.Name.English("Charred_Breastplate_archer"); item9.Name.Portuguese_Brazilian("Charred_Breastplate_archer"); MaterialReplacer.RegisterGameObjectForShaderSwap(item9.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item10 = new Item("rd_armor", "Charred_Helmet_archer"); item10.Configurable = Configurability.Disabled; item10.Name.English("Charred_Helmet_archer"); item10.Name.Portuguese_Brazilian("Charred_Helmet_archer"); MaterialReplacer.RegisterGameObjectForShaderSwap(item10.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item11 = new Item("rd_armor", "Charred_HipCloth_archer"); item11.Configurable = Configurability.Disabled; item11.Name.English("Charred_HipCloth_archer"); item11.Name.Portuguese_Brazilian("Charred_HipCloth_archer"); MaterialReplacer.RegisterGameObjectForShaderSwap(item11.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item12 = new Item("rd_armor", "charred_bow_rd_armor"); item12.Configurable = Configurability.Disabled; item12.Name.English("charred_bow_rd_armor"); item12.Name.Portuguese_Brazilian("charred_bow_rd_armor"); MaterialReplacer.RegisterGameObjectForShaderSwap(item12.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item13 = new Item("rd_armor", "charred_bow_volley_rd_armor"); item13.Configurable = Configurability.Disabled; item13.Name.English("charred_bow_volley_rd_armor"); item13.Name.Portuguese_Brazilian("charred_bow_volley_rd_armor"); MaterialReplacer.RegisterGameObjectForShaderSwap(item13.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item14 = new Item("rd_armor", "Charred_Breastplate_melee"); item14.Configurable = Configurability.Disabled; item14.Name.English("Charred_Breastplate_melee"); item14.Name.Portuguese_Brazilian("Charred_Breastplate_melee"); MaterialReplacer.RegisterGameObjectForShaderSwap(item14.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item15 = new Item("rd_armor", "Charred_Helmet_melee"); item15.Configurable = Configurability.Disabled; item15.Name.English("Charred_Helmet_melee"); item15.Name.Portuguese_Brazilian("Charred_Helmet_melee"); MaterialReplacer.RegisterGameObjectForShaderSwap(item15.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item16 = new Item("rd_armor", "Charred_HipCloth_melee"); item16.Configurable = Configurability.Disabled; item16.Name.English("charred_greatsword_feint_melee"); item16.Name.Portuguese_Brazilian("charred_greatsword_feint_melee"); MaterialReplacer.RegisterGameObjectForShaderSwap(item16.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item17 = new Item("rd_armor", "charred_greatsword_feint_melee"); item17.Configurable = Configurability.Disabled; item17.Name.English("charred_greatsword_feint_melee"); item17.Name.Portuguese_Brazilian("charred_greatsword_feint_melee"); MaterialReplacer.RegisterGameObjectForShaderSwap(item17.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item18 = new Item("rd_armor", "charred_greatsword_swing_melee"); item18.Configurable = Configurability.Disabled; item18.Name.English("charred_greatsword_swing_melee"); item18.Name.Portuguese_Brazilian("charred_greatsword_swing_melee"); MaterialReplacer.RegisterGameObjectForShaderSwap(item18.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item19 = new Item("rd_armor", "charred_greatsword_thrust_melee"); item19.Configurable = Configurability.Disabled; item19.Name.English("charred_greatsword_thrust_melee"); item19.Name.Portuguese_Brazilian("charred_greatsword_thrust_melee"); MaterialReplacer.RegisterGameObjectForShaderSwap(item19.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item20 = new Item("rd_armor", "charred_greatsword_thrustfeint_melee"); item20.Configurable = Configurability.Disabled; item20.Name.English("charred_greatsword_thrustfeint_melee"); item20.Name.Portuguese_Brazilian("charred_greatsword_thrustfeint_melee"); MaterialReplacer.RegisterGameObjectForShaderSwap(item20.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item21 = new Item("rd_armor", "unbjorn_bite_plains"); item21.Configurable = Configurability.Disabled; item21.Name.English("unbjorn_bite_plains"); item21.Name.Portuguese_Brazilian("unbjorn_bite_plains"); MaterialReplacer.RegisterGameObjectForShaderSwap(item21.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item22 = new Item("rd_armor", "unbjorn_claws_plains"); item22.Configurable = Configurability.Disabled; item22.Name.English("unbjorn_claws_plains"); item22.Name.Portuguese_Brazilian("unbjorn_claws_plains"); MaterialReplacer.RegisterGameObjectForShaderSwap(item22.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item23 = new Item("rd_armor", "unbjorn_slam_plains"); item23.Configurable = Configurability.Disabled; item23.Name.English("unbjorn_slam_plains"); item23.Name.Portuguese_Brazilian("unbjorn_slam_plains"); MaterialReplacer.RegisterGameObjectForShaderSwap(item23.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item24 = new Item("rd_armor", "unbjorn_swipe_combo_plains"); item24.Configurable = Configurability.Disabled; item24.Name.English("unbjorn_swipe_combo_plains"); item24.Name.Portuguese_Brazilian("unbjorn_swipe_combo_plains"); MaterialReplacer.RegisterGameObjectForShaderSwap(item24.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item25 = new Item("rd_armor", "unbjorn_swipe_l_plains"); item25.Configurable = Configurability.Disabled; item25.Name.English("unbjorn_swipe_l_plains"); item25.Name.Portuguese_Brazilian("unbjorn_swipe_l_plains"); MaterialReplacer.RegisterGameObjectForShaderSwap(item25.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item26 = new Item("rd_armor", "unbjorn_swipe_r_plains"); item26.Configurable = Configurability.Disabled; item26.Name.English("unbjorn_swipe_r_plains"); item26.Name.Portuguese_Brazilian("unbjorn_swipe_r_plains"); MaterialReplacer.RegisterGameObjectForShaderSwap(item26.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item27 = new Item("rd_armor", "Ghost_attack_bforest"); item27.Configurable = Configurability.Disabled; item27.Name.English("Ghost_attack_bforest"); item27.Name.Portuguese_Brazilian("Ghost_attack_bforest"); MaterialReplacer.RegisterGameObjectForShaderSwap(item27.Prefab, MaterialReplacer.ShaderType.UseUnityShader); } } internal static class Registrations_Totems { public static void RegisterTotems() { Item item = new Item("rd_armor", "RD_totem_inv_meadows"); item.Crafting.Add("RD_necromancer_table", 1); item.RequiredItems.Add("TrophySkeleton", 1); item.RequiredItems.Add("LeatherScraps", 20); item.RequiredItems.Add("BoneFragments", 20); item.RequiredUpgradeItems.Add("LeatherScraps", 5); item.RequiredUpgradeItems.Add("BoneFragments", 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item2 = new Item("rd_armor", "RD_totem_inv_bforest"); item2.Crafting.Add("RD_necromancer_table", 2); item2.RequiredItems.Add("TrophySkeletonPoison", 1); item2.RequiredItems.Add("LeatherScraps", 25); item2.RequiredItems.Add("Bronze", 20); item2.RequiredItems.Add("BoneFragments", 20); item2.RequiredUpgradeItems.Add("LeatherScraps", 7); item2.RequiredUpgradeItems.Add("Bronze", 5); item2.RequiredUpgradeItems.Add("BoneFragments", 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item3 = new Item("rd_armor", "RD_totem_inv_bforest_ghost"); item3.Crafting.Add("RD_necromancer_table", 2); item3.RequiredItems.Add("TrophyGhost", 1); item3.RequiredItems.Add("DeerHide", 25); item3.RequiredItems.Add("Bronze", 20); item3.RequiredItems.Add("BoneFragments", 20); item3.RequiredUpgradeItems.Add("DeerHide", 7); item3.RequiredUpgradeItems.Add("Bronze", 5); item3.RequiredUpgradeItems.Add("BoneFragments", 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item4 = new Item("rd_armor", "RD_totem_inv_swamp"); item4.Crafting.Add("RD_necromancer_table", 2); item4.RequiredItems.Add("TrophyDraugr", 1); item4.RequiredItems.Add("Root", 6); item4.RequiredItems.Add("Iron", 20); item4.RequiredItems.Add("BoneFragments", 20); item4.RequiredUpgradeItems.Add("Root", 2); item4.RequiredUpgradeItems.Add("Iron", 5); item4.RequiredUpgradeItems.Add("BoneFragments", 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item5 = new Item("rd_armor", "RD_totem_inv_mountain"); item5.Crafting.Add("RD_necromancer_table", 2); item5.RequiredItems.Add("TrophyDraugrElite", 1); item5.RequiredItems.Add("FreezeGland", 8); item5.RequiredItems.Add("Silver", 20); item5.RequiredItems.Add("WolfFang", 10); item5.RequiredUpgradeItems.Add("FreezeGland", 2); item5.RequiredUpgradeItems.Add("Silver", 5); item5.RequiredUpgradeItems.Add("WolfFang", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item6 = new Item("rd_armor", "RD_totem_inv_plains"); item6.Crafting.Add("RD_necromancer_table_02", 1); item6.RequiredItems.Add("TrophySkeletonHildir", 1); item6.RequiredItems.Add("GoblinTotem", 4); item6.RequiredItems.Add("BlackMetal", 20); item6.RequiredItems.Add("BoneFragments", 20); item6.RequiredUpgradeItems.Add("GoblinTotem", 1); item6.RequiredUpgradeItems.Add("BlackMetal", 5); item6.RequiredUpgradeItems.Add("BoneFragments", 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item7 = new Item("rd_armor", "RD_totem_inv_plains_bear"); item7.Crafting.Add("RD_necromancer_table_02", 1); item7.RequiredItems.Add("TrophyBjornUndead", 1); item7.RequiredItems.Add("RottenMeat", 8); item7.RequiredItems.Add("BlackMetal", 20); item7.RequiredItems.Add("UndeadBjornRibcage", 6); item7.RequiredUpgradeItems.Add("RottenMeat", 2); item7.RequiredUpgradeItems.Add("BlackMetal", 5); item7.RequiredUpgradeItems.Add("UndeadBjornRibcage", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item7.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item8 = new Item("rd_armor", "RD_totem_inv_mistlands"); item8.Crafting.Add("RD_necromancer_table_02", 1); item8.RequiredItems.Add("BlackCore", 2); item8.RequiredItems.Add("YggdrasilWood", 22); item8.RequiredItems.Add("Eitr", 14); item8.RequiredItems.Add("GiantBloodSack", 4); item8.RequiredUpgradeItems.Add("YggdrasilWood", 11); item8.RequiredUpgradeItems.Add("Eitr", 6); item8.RequiredUpgradeItems.Add("GiantBloodSack", 1); MaterialReplacer.RegisterGameObjectForShaderSwap(item8.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item9 = new Item("rd_armor", "RD_totem_inv_ashlands"); item9.Crafting.Add("RD_necromancer_table_02", 1); item9.RequiredItems.Add("ShieldCore", 2); item9.RequiredItems.Add("YggdrasilWood", 24); item9.RequiredItems.Add("FlametalNew", 12); item9.RequiredItems.Add("CharredBone", 12); item9.RequiredUpgradeItems.Add("YggdrasilWood", 11); item9.RequiredUpgradeItems.Add("FlametalNew", 6); item9.RequiredUpgradeItems.Add("CharredBone", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item9.Prefab, MaterialReplacer.ShaderType.UseUnityShader); } } internal static class Registrations_MobsSound { public static void RegisterMobsSound() { Mob_Registry.Init(); Vikings_SummonerPlugin.Instance.SetupIdleSfxLanguage_PerMob(); } } internal enum VS_SfxLanguageMode { Auto, Portuguese_Brazilian, English } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("radamanto.Vikings_Summoner", "Vikings_Summoner", "1.3.8")] [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] public class Vikings_SummonerPlugin : BaseUnityPlugin { [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] internal struct VS_IdleSfxMobRule { public string MobPrefabName; public string IdleEffectPrefabPrefixToOverride; public VS_IdleSfxMobRule(string mob, string idleEffectPrefixToOverride) { MobPrefabName = mob; IdleEffectPrefabPrefixToOverride = idleEffectPrefixToOverride; } } [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(0)] private class ConfigurationManagerAttributes { public bool? Browsable = false; } [CompilerGenerated] private sealed class <ReloadConfigAfterQuietPeriod>d__50 : IEnumerator<object>, IDisposable, IEnumerator { private int <>1__state; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] private object <>2__current; public float quietSeconds; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] public Vikings_SummonerPlugin <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] [return: <a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] [return: <a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] get { return <>2__current; } } [DebuggerHidden] public <ReloadConfigAfterQuietPeriod>d__50(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if ((DateTime.UtcNow - <>4__this._lastCfgWriteUtc).TotalSeconds < (double)quietSeconds) { <>2__current = null; <>1__state = 1; return true; } try { if (<>4__this._configWatcher == null || !<>4__this._watcherReady) { return false; } <>4__this._configWatcher.EnableRaisingEvents = false; if ((Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer()) { ((BaseUnityPlugin)<>4__this).Config.Reload(); <>4__this._ignoreEventsUntilUtc = DateTime.UtcNow.AddSeconds(1.0); ((BaseUnityPlugin)<>4__this).Config.Save(); } } catch { } finally { if (<>4__this._configWatcher != null) { <>4__this._configWatcher.EnableRaisingEvents = true; } <>4__this._reloadScheduled = false; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } internal static readonly Dictionary<string, VS_IdleSfxMobRule> IdleSfxRulesByMob = new Dictionary<string, VS_IdleSfxMobRule>(StringComparer.Ordinal); internal const string ModName = "Vikings_Summoner"; internal const string ModVersion = "1.3.8"; internal const string Author = "radamanto"; private const string ModGUID = "radamanto.Vikings_Summoner"; internal static Vikings_SummonerPlugin Instance = null; private readonly Harmony _harmony = new Harmony("radamanto.Vikings_Summoner"); private static bool _bootstrapped; internal static ConfigEntry<bool> CE_IdleSfxOverrideEnabled = null; internal static ConfigEntry<VS_SfxLanguageMode> CE_IdleSfxLanguageMode = null; internal static ConfigEntry<float> CE_Lifetime_RD_inv_skeleton_meadows = null; internal static ConfigEntry<float> CE_Lifetime_RD_inv_skeleton_bforest = null; internal static ConfigEntry<float> CE_Lifetime_RD_inv_ghost_bforest = null; internal static ConfigEntry<float> CE_Lifetime_RD_inv_draugr_swamp = null; internal static ConfigEntry<float> CE_Lifetime_RD_inv_draugr_mountain = null; internal static ConfigEntry<float> CE_Lifetime_RD_inv_skeleton_plains = null; internal static ConfigEntry<float> CE_Lifetime_RD_inv_unbjorn_plains = null; internal static ConfigEntry<float> CE_Lifetime_RD_inv_skeleton_mistlands = null; internal static ConfigEntry<float> CE_Lifetime_RD_inv_skeleton_ashlands = null; internal static ConfigEntry<float> CE_BloodMagic_RD_inv_skeleton_meadows = null; internal static ConfigEntry<float> CE_BloodMagic_RD_inv_skeleton_bforest = null; internal static ConfigEntry<float> CE_BloodMagic_RD_inv_ghost_bforest = null; internal static ConfigEntry<float> CE_BloodMagic_RD_inv_draugr_swamp = null; internal static ConfigEntry<float> CE_BloodMagic_RD_inv_draugr_mountain = null; internal static ConfigEntry<float> CE_BloodMagic_RD_inv_skeleton_plains = null; internal static ConfigEntry<float> CE_BloodMagic_RD_inv_unbjorn_plains = null; internal static ConfigEntry<float> CE_BloodMagic_RD_inv_skeleton_mistlands = null; internal static ConfigEntry<float> CE_BloodMagic_RD_inv_skeleton_ashlands = null; internal static ConfigEntry<bool> CE_DisableCLLCAffixesOnSummons = null; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] internal static ConfigSync ConfigSync; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] private static ConfigEntry<bool> _serverConfigLocked; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] private FileSystemWatcher _configWatcher; private DateTime _lastCfgWriteUtc = DateTime.MinValue; private bool _reloadScheduled; private bool _watcherReady; private DateTime _ignoreEventsUntilUtc = DateTime.MinValue; [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] internal static ConfigEntry<bool> CE_TomeSlot_Enabled; internal void SetupIdleSfxLanguage_PerMob() { IdleSfxRulesByMob.Clear(); foreach (Mob_Registry.SummonDef value in Mob_Registry.All.Values) { if (!string.IsNullOrEmpty(value.IdlePrefix)) { IdleSfxRulesByMob[value.Prefab] = new VS_IdleSfxMobRule(value.Prefab, value.IdlePrefix); } } } internal static string ChooseIdleSfxPrefabName(string mobPrefab) { string text = ((CE_IdleSfxLanguageMode != null) ? CE_IdleSfxLanguageMode.Value : VS_SfxLanguageMode.Auto) switch { VS_SfxLanguageMode.English => "$vs_summon_idle_sfx_en_" + mobPrefab, VS_SfxLanguageMode.Portuguese_Brazilian => "$vs_summon_idle_sfx_ptbr_" + mobPrefab, _ => "$vs_summon_idle_sfx_" + mobPrefab, }; return Localization.instance.Localize(text); } [return: <a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] internal static GameObject GetPrefabByName(string name) { try { if ((Object)(object)ZNetScene.instance == (Object)null) { return null; } return ZNetScene.instance.GetPrefab(name); } catch { return null; } } private void Awake() { Localizer.Load(); Instance = this; if (!_bootstrapped) { _bootstrapped = true; SetupServerSyncAndWatcher(); Mob_Registry.Init(); SetupBinds(); Registrations_MobsPrefab.RegisterMobsPrefab(); Registrations_Effects.RegisterEffects(); Registrations_Staffs.RegisterStaffs(); Registrations_StaffsAttack.RegisterStaffsAttack(); Registrations_Armors.RegisterArmors(); Registrations_Totems.RegisterTotems(); Registrations_TotemsAttack.RegisterTotemsAttack(); Registrations_Bench.RegisterBench(); Registrations_SummonItems.RegisterSummonItems(); Registrations_MobBloodmagicGate.RegisterBloodMagicGate(); Registrations_Food.RegisterFoods(); Registrations_Grimories.RegisterGrimories(); Registrations_MobsSound.RegisterMobsSound(); Registrations_Bench.RegisterBench(); Registrations_TomeSlot.RegisterTomeSlot(this); _harmony.PatchAll(); } } private void OnDestroy() { _configWatcher?.Dispose(); _configWatcher = null; } private void SetupBinds() { CE_IdleSfxOverrideEnabled = config("03 - Summons Sounds", "IdleSfxOverrideEnabled", value: true, "Enable overriding idle voice SFX for summoned creatures. If disabled, summons will use the default idle SFX."); CE_IdleSfxLanguageMode = config("03 - Summons Sounds", "IdleSfxLanguage", VS_SfxLanguageMode.Auto, "Idle voice language used by summoned creatures. Auto: Uses LocalizationManager tokens. Portuguese_Brazilian: Forces PT-BR (token). English: Forces EN (token)."); CE_Lifetime_RD_inv_skeleton_meadows = config("04 - Summons Lifetime", "RD_inv_skeleton_meadows", 60f, "Lifetime (seconds) for RD_inv_skeleton_meadows."); CE_Lifetime_RD_inv_skeleton_bforest = config("04 - Summons Lifetime", "RD_inv_skeleton_bforest", 100f, "Lifetime (seconds) for RD_inv_skeleton_bforest."); CE_Lifetime_RD_inv_ghost_bforest = config("04 - Summons Lifetime", "RD_inv_ghost_bforest", 60f, "Lifetime (seconds) for RD_inv_ghost_bforest."); CE_Lifetime_RD_inv_draugr_swamp = config("04 - Summons Lifetime", "RD_inv_draugr_swamp", 140f, "Lifetime (seconds) for RD_inv_draugr_swamp."); CE_Lifetime_RD_inv_draugr_mountain = config("04 - Summons Lifetime", "RD_inv_draugr_mountain", 180f, "Lifetime (seconds) for RD_inv_draugr_mountain."); CE_Lifetime_RD_inv_skeleton_plains = config("04 - Summons Lifetime", "RD_inv_skeleton_plains", 220f, "Lifetime (seconds) for RD_inv_skeleton_plains."); CE_Lifetime_RD_inv_unbjorn_plains = config("04 - Summons Lifetime", "RD_inv_unbjorn_plains", 160f, "Lifetime (seconds) for RD_inv_unbjorn_plains."); CE_Lifetime_RD_inv_skeleton_mistlands = config("04 - Summons Lifetime", "RD_inv_skeleton_mistlands", 260f, "Lifetime (seconds) for RD_inv_skeleton_mistlands."); CE_Lifetime_RD_inv_skeleton_ashlands = config("04 - Summons Lifetime", "RD_inv_skeleton_ashlands", 300f, "Lifetime (seconds) for RD_inv_skeleton_ashlands."); CE_BloodMagic_RD_inv_skeleton_meadows = config("05 - Summons Blood Magic Gate", "RD_inv_skeleton_meadows", 10f, "Minimum Blood Magic required to summon 'RD_inv_skeleton_meadows'."); CE_BloodMagic_RD_inv_skeleton_bforest = config("05 - Summons Blood Magic Gate", "RD_inv_skeleton_bforest", 20f, "Minimum Blood Magic required to summon 'RD_inv_skeleton_bforest'."); CE_BloodMagic_RD_inv_ghost_bforest = config("05 - Summons Blood Magic Gate", "RD_inv_ghost_bforest", 30f, "Minimum Blood Magic required to summon 'RD_inv_ghost_bforest'."); CE_BloodMagic_RD_inv_draugr_swamp = config("05 - Summons Blood Magic Gate", "RD_inv_draugr_swamp", 30f, "Minimum Blood Magic required to summon 'RD_inv_draugr_swamp'."); CE_BloodMagic_RD_inv_draugr_mountain = config("05 - Summons Blood Magic Gate", "RD_inv_draugr_mountain", 40f, "Minimum Blood Magic required to summon 'RD_inv_draugr_mountain'."); CE_BloodMagic_RD_inv_skeleton_plains = config("05 - Summons Blood Magic Gate", "RD_inv_skeleton_plains", 50f, "Minimum Blood Magic required to summon 'RD_inv_skeleton_plains'."); CE_BloodMagic_RD_inv_unbjorn_plains = config("05 - Summons Blood Magic Gate", "RD_inv_unbjorn_plains", 50f, "Minimum Blood Magic required to summon 'RD_inv_unbjorn_plains'."); CE_BloodMagic_RD_inv_skeleton_mistlands = config("05 - Summons Blood Magic Gate", "RD_inv_skeleton_mistlands", 60f, "Minimum Blood Magic required to summon 'RD_inv_skeleton_mistlands'."); CE_BloodMagic_RD_inv_skeleton_ashlands = config("05 - Summons Blood Magic Gate", "RD_inv_skeleton_ashlands", 70f, "Minimum Blood Magic required to summon 'RD_inv_skeleton_ashlands'."); CE_DisableCLLCAffixesOnSummons = config("06 - Creature Level And Loot Control", "DisableCLLCAffixesOnSummons", value: true, "If enabled, summoned creatures will not receive CreatureLevelControl (CL&LC) affixes or infusions."); } internal static ConfigEntry<float> GetLifetimeCE(string prefab) { return (ConfigEntry<float>)(prefab switch { "RD_inv_skeleton_meadows" => CE_Lifetime_RD_inv_skeleton_meadows, "RD_inv_skeleton_bforest" => CE_Lifetime_RD_inv_skeleton_bforest, "RD_inv_ghost_bforest" => CE_Lifetime_RD_inv_ghost_bforest, "RD_inv_draugr_swamp" => CE_Lifetime_RD_inv_draugr_swamp, "RD_inv_draugr_mountain" => CE_Lifetime_RD_inv_draugr_mountain, "RD_inv_skeleton_plains" => CE_Lifetime_RD_inv_skeleton_plains, "RD_inv_unbjorn_plains" => CE_Lifetime_RD_inv_unbjorn_plains, "RD_inv_skeleton_mistlands" => CE_Lifetime_RD_inv_skeleton_mistlands, "RD_inv_skeleton_ashlands" => CE_Lifetime_RD_inv_skeleton_ashlands, _ => CE_Lifetime_RD_inv_skeleton_meadows, }); } internal static ConfigEntry<float> GetBloodMagicCE(string prefab) { return (ConfigEntry<float>)(prefab switch { "RD_inv_skeleton_meadows" => CE_BloodMagic_RD_inv_skeleton_meadows, "RD_inv_skeleton_bforest" => CE_BloodMagic_RD_inv_skeleton_bforest, "RD_inv_ghost_bforest" => CE_BloodMagic_RD_inv_ghost_bforest, "RD_inv_draugr_swamp" => CE_BloodMagic_RD_inv_draugr_swamp, "RD_inv_draugr_mountain" => CE_BloodMagic_RD_inv_draugr_mountain, "RD_inv_skeleton_plains" => CE_BloodMagic_RD_inv_skeleton_plains, "RD_inv_unbjorn_plains" => CE_BloodMagic_RD_inv_unbjorn_plains, "RD_inv_skeleton_mistlands" => CE_BloodMagic_RD_inv_skeleton_mistlands, "RD_inv_skeleton_ashlands" => CE_BloodMagic_RD_inv_skeleton_ashlands, _ => CE_BloodMagic_RD_inv_skeleton_meadows, }); } public void SetupServerSyncAndWatcher() { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown bool flag = false; try { ((BaseUnityPlugin)this).Config.SaveOnConfigSet = false; ConfigSync = new ConfigSync(((BaseUnityPlugin)this).Info.Metadata.GUID) { DisplayName = ((BaseUnityPlugin)this).Info.Metadata.Name, CurrentVersion = ((BaseUnityPlugin)this).Info.Metadata.Version.ToString(), MinimumRequiredVersion = ((BaseUnityPlugin)this).Info.Metadata.Version.ToString() }; _serverConfigLocked = ((BaseUnityPlugin)this).Config.Bind<bool>("01 - General", "LockConfiguration", true, new ConfigDescription("If true, the server locks synchronized configs.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Browsable = false } })); ConfigSync.AddLockingConfigEntry<bool>(_serverConfigLocked); SetupConfigWatcher(); flag = true; } catch { } finally { ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; if (flag && (Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer()) { ((BaseUnityPlugin)this).Config.Save(); } } } internal ConfigEntry<T> config<[<a77f6960-136e-48f8-8814-290c32f94db7>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); try { SyncedConfigEntry<T> syncedConfigEntry = ConfigSync?.AddConfigEntry<T>(val2); if (syncedConfigEntry != null) { syncedConfigEntry.SynchronizedConfig = synchronizedSetting; } } catch { } return val2; } internal ConfigEntry<T> config<[<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting); } private void SetupConfigWatcher() { try { _configWatcher?.Dispose(); string configPath = Paths.ConfigPath; string fileName = Path.GetFileName(((BaseUnityPlugin)this).Config.ConfigFilePath); _configWatcher = new FileSystemWatcher(configPath, fileName) { IncludeSubdirectories = false, NotifyFilter = (NotifyFilters.FileName | NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.CreationTime) }; FileSystemEventHandler onChanged = [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(0)] (object _, FileSystemEventArgs __) => { if (!(DateTime.UtcNow < _ignoreEventsUntilUtc)) { _lastCfgWriteUtc = DateTime.UtcNow; if (!_reloadScheduled) { _reloadScheduled = true; ((MonoBehaviour)this).StartCoroutine(ReloadConfigAfterQuietPeriod(0.75f)); } } }; _configWatcher.Changed += onChanged; _configWatcher.Created += onChanged; _configWatcher.Renamed += [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(0)] (object _, RenamedEventArgs __) => { onChanged(_, __); }; _configWatcher.EnableRaisingEvents = true; _watcherReady = true; } catch { } } [IteratorStateMachine(typeof(<ReloadConfigAfterQuietPeriod>d__50))] private IEnumerator ReloadConfigAfterQuietPeriod(float quietSeconds) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <ReloadConfigAfterQuietPeriod>d__50(0) { <>4__this = this, quietSeconds = quietSeconds }; } internal void InitializeTomeSlot() { try { CE_TomeSlot_Enabled = config("02 - Tome Slot", "EnableTomeSlot", value: true, "Enable custom Tome slot."); if (CE_TomeSlot_Enabled.Value && AzuEpiCompat.IsLoaded()) { AzuEpiCompat.AddSlot("Tome", (Player player) => TomeCustomSlotManager.GetEquippedTome(player) ?? null, (ItemData item) => TomeCustomSlotManager.IsTomeItem(item)); } } catch { } } } internal static class VS_PrefabName { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] internal static string GetPrefabNameSafe(Character ch) { try { ZNetView component = ((Component)ch).GetComponent<ZNetView>(); if (Object.op_Implicit((Object)(object)component) && component.IsValid()) { ZDO zDO = component.GetZDO(); if (zDO != null && (Object)(object)ZNetScene.instance != (Object)null) { int prefab = zDO.GetPrefab(); GameObject prefab2 = ZNetScene.instance.GetPrefab(prefab); if (Object.op_Implicit((Object)(object)prefab2)) { return ((Object)prefab2).name; } } } } catch { } try { return ((Object)((Component)ch).gameObject).name; } catch { return string.Empty; } } } [HarmonyPatch(typeof(BaseAI), "Awake")] internal static class VS_SummonIdleSfx_BaseAI_Awake_Patch { [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] private static void Postfix(BaseAI __instance) { try { VS_SummonMarker vS_SummonMarker = default(VS_SummonMarker); if (!Object.op_Implicit((Object)(object)__instance) || !((Component)__instance).TryGetComponent<VS_SummonMarker>(ref vS_SummonMarker) || (Vikings_SummonerPlugin.CE_IdleSfxOverrideEnabled != null && !Vikings_SummonerPlugin.CE_IdleSfxOverrideEnabled.Value)) { return; } Character component = ((Component)__instance).GetComponent<Character>(); if (!Object.op_Implicit((Object)(object)component)) { return; } string prefabNameSafe = VS_PrefabName.GetPrefabNameSafe(component); if (string.IsNullOrEmpty(prefabNameSafe) || !Vikings_SummonerPlugin.IdleSfxRulesByMob.TryGetValue(prefabNameSafe, out var value)) { return; } string text = Vikings_SummonerPlugin.ChooseIdleSfxPrefabName(prefabNameSafe); if (string.IsNullOrEmpty(text) || text[0] == '$') { return; } GameObject prefabByName = Vikings_SummonerPlugin.GetPrefabByName(text); if (!Object.op_Implicit((Object)(object)prefabByName)) { return; } EffectList idleSound = __instance.m_idleSound; EffectData[] effectPrefabs = idleSound.m_effectPrefabs; if (effectPrefabs == null || effectPrefabs.Length == 0) { return; } bool flag = false; EffectData[] array = (EffectData[])(object)new EffectData[effectPrefabs.Length]; for (int i = 0; i < effectPrefabs.Length; i++) { EffectData val = effectPrefabs[i]; GameObject prefab = val.m_prefab; if (Object.op_Implicit((Object)(object)prefab)) { string text2 = ((Object)prefab).name ?? string.Empty; if (text2.StartsWith(value.IdleEffectPrefabPrefixToOverride, StringComparison.OrdinalIgnoreCase)) { val.m_prefab = prefabByName; flag = true; } } array[i] = val; } if (flag) { idleSound.m_effectPrefabs = array; __instance.m_idleSound = idleSound; } } catch { } } } internal static class Registrations_TotemsAttack { public static void RegisterTotemsAttack() { GameObject val = PrefabManager.RegisterPrefab("rd_armor", "ataque_totem_inv_meadows"); GameObject val2 = PrefabManager.RegisterPrefab("rd_armor", "ataque_totem_inv_bforest"); GameObject val3 = PrefabManager.RegisterPrefab("rd_armor", "ataque_totem_inv_bforest_ghost"); GameObject val4 = PrefabManager.RegisterPrefab("rd_armor", "ataque_totem_inv_swamp"); GameObject val5 = PrefabManager.RegisterPrefab("rd_armor", "ataque_totem_inv_mountain"); GameObject val6 = PrefabManager.RegisterPrefab("rd_armor", "ataque_totem_inv_plains"); GameObject val7 = PrefabManager.RegisterPrefab("rd_armor", "ataque_totem_inv_plains_unbjorn"); GameObject val8 = PrefabManager.RegisterPrefab("rd_armor", "ataque_totem_inv_mistlands"); GameObject val9 = PrefabManager.RegisterPrefab("rd_armor", "ataque_totem_inv_ashlands"); } } internal static class Registrations_Mobs_Lifetime { internal static void Register() { Mob_Registry.Init(); } } [<a77f6960-136e-48f8-8814-290c32f94db7>Nullable(0)] [<f863a007-84cf-43b9-916e-8d6d2dfdbc2f>NullableContext(1)] internal static class VS_SummonLifetime_Offline { internal const string ZdoStartTicks = "vs_ctdStartTicks"; internal const string ZdoTimeoutSec = "vs_ctdTimeout"; int