Decompiled source of Vikings Summoner v1.3.8

plugins/Vikings_Summoner.dll

Decompiled 4 days ago
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.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