Decompiled source of Magic Supremacy v2.0.9
plugins/Magic_Supremacy.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using 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.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.BufferedDeserialization; using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Magic_Supremacy")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyProduct("Magic_Supremacy")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("4358610B-F3F4-4843-B7AF-98B7BC60DCDE")] [assembly: AssemblyFileVersion("2.0.9")] [assembly: AssemblyCompany("Dreanegade")] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.0.9.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<98c5c92b-6880-4410-a4aa-d6d95da9d3f2>Embedded] internal sealed class <98c5c92b-6880-4410-a4aa-d6d95da9d3f2>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] [CompilerGenerated] [<98c5c92b-6880-4410-a4aa-d6d95da9d3f2>Embedded] internal sealed class <7f23a885-3caf-4432-9701-7c0fbde3b32f>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <7f23a885-3caf-4432-9701-7c0fbde3b32f>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <7f23a885-3caf-4432-9701-7c0fbde3b32f>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [<98c5c92b-6880-4410-a4aa-d6d95da9d3f2>Embedded] [CompilerGenerated] internal sealed class <3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContextAttribute : Attribute { public readonly byte Flag; public <3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace SharedTools { [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] public static class ZDOCleanup { [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] [HarmonyPatch(typeof(ZNetScene), "Awake")] public static class ZDOCleanupPatch { private static void Postfix(ZNetScene __instance) { ((MonoBehaviour)__instance).StartCoroutine(DelayedCleanup()); } private static IEnumerator DelayedCleanup() { yield return (object)new WaitForSeconds(1f); RunCleanup(); } } private static readonly string[] _oldProjectilePrefabs = new string[3] { "projectile_stormcaller_staff_sphere_DO", "projectile_frostcaller_staff_shard_DO", "projectile_lightcaller_staff_sphere_DO" }; public static void RunCleanup() { if ((Object)(object)ZNetScene.instance == (Object)null || ZDOMan.instance == null) { return; } int num = 0; int num2 = 0; foreach (ZDO item in ZDOMan.instance.m_objectsByID.Values.ToList()) { GameObject prefab = ZNetScene.instance.GetPrefab(item.m_prefab); if ((Object)(object)prefab == (Object)null) { ZDOMan.instance.DestroyZDO(item); num2++; } else if (_oldProjectilePrefabs.Contains(((Object)prefab).name)) { ZDOMan.instance.DestroyZDO(item); num++; } } if (num > 0 || num2 > 0) { ZLog.Log((object)$"ZDOCleanup: Cleaned {num} old projectiles and {num2} orphan ZDO(s)."); } else { ZLog.Log((object)"ZDOCleanup: No old or orphan ZDOs found."); } } } } namespace Magic_Supremacy { [BepInPlugin("Dreanegade.Magic_Supremacy", "Magic_Supremacy", "2.0.9")] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] public class Magic_SupremacyPlugin : BaseUnityPlugin { [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] public enum Toggle { On = 1, Off = 0 } [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order; [UsedImplicitly] public bool? Browsable; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] [UsedImplicitly] public string Category; [UsedImplicitly] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(new byte[] { 2, 1 })] public Action<ConfigEntryBase> CustomDrawer; } internal const string ModName = "Magic_Supremacy"; internal const string ModVersion = "2.0.9"; internal const string Author = "Dreanegade"; private const string ModGUID = "Dreanegade.Magic_Supremacy"; private static string ConfigFileName = "Dreanegade.Magic_Supremacy.cfg"; private static string ConfigFileFullPath; internal static string ConnectionError; private readonly Harmony _harmony = new Harmony("Dreanegade.Magic_Supremacy"); public static readonly ManualLogSource Magic_SupremacyLogger; private static readonly ConfigSync ConfigSync; private static ConfigEntry<Toggle> _serverConfigLocked; private static ConfigEntry<Toggle> _recipeIsActiveConfig; public void Awake() { Localizer.Load(); _serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only."); ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked); AssetBundle assets = PrefabManager.RegisterAssetBundle("magic_supremacy"); BuildPiece.ConfigurationEnabled = true; PrefabManager.RegisterPrefab(assets, "fx_lightcaller_staff_heal_start_DO"); PrefabManager.RegisterPrefab(assets, "vfx_lightcaller_staff_heal_swirl_DO"); PrefabManager.RegisterPrefab(assets, "fx_lightcaller_staff_sun_start_DO"); PrefabManager.RegisterPrefab(assets, "aoe_lightcaller_staff_sun_DO"); PrefabManager.RegisterPrefab(assets, "projectile_lightcaller_staff_sun_DO"); PrefabManager.RegisterPrefab(assets, "projectile_lightcaller_staff_sphere_DO"); PrefabManager.RegisterPrefab(assets, "sfx_lightcaller_staff_sphere_fire_DO"); PrefabManager.RegisterPrefab(assets, "fx_lightcaller_staff_sphere_hit_DO"); PrefabManager.RegisterPrefab(assets, "projectile_deathcaller_staff_poison_DO"); PrefabManager.RegisterPrefab(assets, "sfx_deathcaller_staff_poison_DO"); PrefabManager.RegisterPrefab(assets, "projectile_deathcaller_staff_blaster_DO"); PrefabManager.RegisterPrefab(assets, "sfx_deathcaller_staff_blaster_DO"); PrefabManager.RegisterPrefab(assets, "projectile_frostcaller_staff_shard_DO"); PrefabManager.RegisterPrefab(assets, "sfx_frostcaller_staff_shotgun_DO"); PrefabManager.RegisterPrefab(assets, "vfx_ice_shotgun_fire"); PrefabManager.RegisterPrefab(assets, "fx_frostcaller_staff_shard_hit_DO"); PrefabManager.RegisterPrefab(assets, "fx_frostcaller_bow_shot_DO"); PrefabManager.RegisterPrefab(assets, "aoe_firecaller_staff_ring_DO"); PrefabManager.RegisterPrefab(assets, "fx_firecaller_staff_ring_summon_DO"); PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_ring_metal_hit_DO"); PrefabManager.RegisterPrefab(assets, "projectile_firecaller_staff_shard_DO"); PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_shard_fire_DO"); PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_shard_knife_DO"); PrefabManager.RegisterPrefab(assets, "projectile_firecaller_staff_blaster_DO"); PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_blaster_shot_DO"); PrefabManager.RegisterPrefab(assets, "fx_firecallercaller_staff_blaster_hit_DO"); PrefabManager.RegisterPrefab(assets, "projectile_firecaller_staff_thrower_DO"); PrefabManager.RegisterPrefab(assets, "sfx_firecaller_staff_thrower_DO"); PrefabManager.RegisterPrefab(assets, "vfx_stormcaller_staff_shock_DO"); PrefabManager.RegisterPrefab(assets, "sfx_stormcaller_staff_shock_DO"); PrefabManager.RegisterPrefab(assets, "projectile_stormcaller_staff_sphere_DO"); PrefabManager.RegisterPrefab(assets, "sfx_stormcaller_staff_sphere_DO"); PrefabManager.RegisterPrefab(assets, "fx_stormcaller_staff_sphere_hit_DO"); PrefabManager.RegisterPrefab(assets, "aoe_totemcaller_staff_buff_DO"); PrefabManager.RegisterPrefab(assets, "vfx_totemcaller_staff_buff_head_DO"); PrefabManager.RegisterPrefab(assets, "fx_totemcaller_staff_buff_start_DO"); PrefabManager.RegisterPrefab(assets, "sfx_totemcaller_staff_buff_wave_DO"); PrefabManager.RegisterPrefab(assets, "projectile_totemcaller_staff_buff_DO"); PrefabManager.RegisterPrefab(assets, "aoe_totemcaller_staff_pull_DO"); PrefabManager.RegisterPrefab(assets, "fx_totemcaller_staff_pull_start_DO"); PrefabManager.RegisterPrefab(assets, "sfx_totemcaller_staff_pull_wave_DO"); PrefabManager.RegisterPrefab(assets, "projectile_totemcaller_staff_pull_DO"); PrefabManager.RegisterPrefab(assets, "projectile_totemcaller_boomerang_DO"); PrefabManager.RegisterPrefab(assets, "vfx_totemcaller_boomerang_hit_DO"); PrefabManager.RegisterPrefab(assets, "sfx_totemcaller_boomerang_fire_DO"); PrefabManager.RegisterPrefab(assets, "fx_windcaller_staff_feather_start_DO"); PrefabManager.RegisterPrefab(assets, "vfx_windcaller_staff_feather_back_DO"); PrefabManager.RegisterPrefab(assets, "fx_windcaller_staff_shield_start_DO"); PrefabManager.RegisterPrefab(assets, "vfx_windcaller_staff_shield_sphere_DO"); PrefabManager.RegisterPrefab(assets, "fx_windcaller_staff_shield_hit_DO"); PrefabManager.RegisterPrefab(assets, "sfx_windcaller_staff_shield_break_DO"); BuildPiece buildPiece = new BuildPiece("magic_supremacy", "MagicWeaverDO"); buildPiece.RequiredItems.Add("Bronze", 6, recover: true); buildPiece.RequiredItems.Add("CrystalRoseheartDO", 1, recover: true); buildPiece.RequiredItems.Add("DimEitrRemnantDO", 1, recover: true); buildPiece.RequiredItems.Add("Dandelion", 10, recover: true); buildPiece.Category.Set("Distant Origins"); buildPiece.Crafting.Set(PieceManager.CraftingTable.Forge); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece2 = new BuildPiece("magic_supremacy", "EssenceCauldronDO"); buildPiece2.RequiredItems.Add("Bronze", 6, recover: true); buildPiece2.RequiredItems.Add("Ruby", 2, recover: true); buildPiece2.RequiredItems.Add("DimEitrDO", 2, recover: true); buildPiece2.Category.Set("Distant Origins"); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece3 = new BuildPiece("magic_supremacy", "MagicWeaverExt1DO"); buildPiece3.RequiredItems.Add("SpiritLightDO", 3, recover: true); buildPiece3.RequiredItems.Add("Bronze", 5, recover: true); buildPiece3.RequiredItems.Add("DimEitrDO", 2, recover: true); buildPiece3.Category.Set("Distant Origins"); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece4 = new BuildPiece("magic_supremacy", "MagicWeaverExt2DO"); buildPiece4.RequiredItems.Add("SpiritDeathDO", 3, recover: true); buildPiece4.RequiredItems.Add("Iron", 5, recover: true); buildPiece4.RequiredItems.Add("DimEitrDO", 4, recover: true); buildPiece4.Category.Set("Distant Origins"); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece5 = new BuildPiece("magic_supremacy", "MagicWeaverExt3DO"); buildPiece5.RequiredItems.Add("SpiritFrostDO", 3, recover: true); buildPiece5.RequiredItems.Add("Silver", 5, recover: true); buildPiece5.RequiredItems.Add("DimEitrDO", 6, recover: true); buildPiece5.Category.Set("Distant Origins"); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece6 = new BuildPiece("magic_supremacy", "MagicWeaverExt4DO"); buildPiece6.RequiredItems.Add("SpiritFireDO", 3, recover: true); buildPiece6.RequiredItems.Add("BlackMetal", 5, recover: true); buildPiece6.RequiredItems.Add("DimEitrDO", 8, recover: true); buildPiece6.Category.Set("Distant Origins"); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece7 = new BuildPiece("magic_supremacy", "MagicWeaverExt5DO"); buildPiece7.RequiredItems.Add("SpiritStormDO", 3, recover: true); buildPiece7.RequiredItems.Add("Iron", 10, recover: true); buildPiece7.RequiredItems.Add("Eitr", 8, recover: true); buildPiece7.Category.Set("Distant Origins"); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece7.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece8 = new BuildPiece("magic_supremacy", "MagicWeaverExt1aDO"); buildPiece8.RequiredItems.Add("SpiritAncestorsDO", 3, recover: true); buildPiece8.RequiredItems.Add("Bronze", 5, recover: true); buildPiece8.RequiredItems.Add("DimEitrDO", 2, recover: true); buildPiece8.Category.Set("Distant Origins"); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece8.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece9 = new BuildPiece("magic_supremacy", "MagicWeaverExt3aDO"); buildPiece9.RequiredItems.Add("SpiritWindDO", 3, recover: true); buildPiece9.RequiredItems.Add("Silver", 5, recover: true); buildPiece9.RequiredItems.Add("DimEitrDO", 6, recover: true); buildPiece9.Category.Set("Distant Origins"); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece9.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item = new Item("magic_supremacy", "SpiritLightDO"); item.DropsFrom.Add("Neck", 0.05f, 1, 1); item.DropsFrom.Add("Boar", 0.05f, 1, 1); item.DropsFrom.Add("Deer", 0.05f, 1, 2); item.DropsFrom.Add("Greyling", 0.05f, 1, 1); item.DropsFrom.Add("Eikthyr", 1f, 4, 8); item.DropsFrom.Add("Greydwarf", 0.1f, 1, 2); item.DropsFrom.Add("Greydwarf_Elite", 0.3f, 1, 3); item.DropsFrom.Add("Greydwarf_Shaman", 0.3f, 1, 3); item.DropsFrom.Add("Troll", 0.4f, 1, 5); item.DropsFrom.Add("gd_king", 1f, 4, 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Spirit of Light", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item2 = new Item("magic_supremacy", "SpiritDeathDO"); item2.DropsFrom.Add("Draugr", 0.1f, 1, 2); item2.DropsFrom.Add("Draugr_Ranged", 0.1f, 1, 2); item2.DropsFrom.Add("Draugr_Elite", 0.3f, 2, 3); item2.DropsFrom.Add("Blob", 0.15f, 1, 1); item2.DropsFrom.Add("BlobElite", 0.2f, 1, 2); item2.DropsFrom.Add("Leech", 0.05f, 1, 1); item2.DropsFrom.Add("Wraith", 0.4f, 1, 3); item2.DropsFrom.Add("Abomination", 0.5f, 1, 5); item2.DropsFrom.Add("Bonemass", 1f, 5, 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Spirit of Death", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item2.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item3 = new Item("magic_supremacy", "SpiritFrostDO"); item3.DropsFrom.Add("Bat", 0.05f, 1, 1); item3.DropsFrom.Add("Wolf", 0.1f, 1, 2); item3.DropsFrom.Add("Hatchling", 0.2f, 1, 2); item3.DropsFrom.Add("Fenring", 0.3f, 1, 3); item3.DropsFrom.Add("Fenring_Cultist", 0.3f, 1, 3); item3.DropsFrom.Add("Ulv", 0.3f, 1, 3); item3.DropsFrom.Add("StoneGolem", 0.5f, 1, 5); item3.DropsFrom.Add("Dragon", 1f, 5, 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Spirit of Frost", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item3.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item4 = new Item("magic_supremacy", "SpiritFireDO"); item4.DropsFrom.Add("Lox", 0.15f, 1, 2); item4.DropsFrom.Add("Deathsquito", 0.1f, 1, 2); item4.DropsFrom.Add("Goblin", 0.1f, 1, 2); item4.DropsFrom.Add("GoblinArcher", 0.1f, 1, 2); item4.DropsFrom.Add("GoblinBrute", 0.3f, 2, 3); item4.DropsFrom.Add("GoblinShaman", 0.3f, 2, 3); item4.DropsFrom.Add("BlobTar", 0.25f, 1, 3); item4.DropsFrom.Add("Yagluth", 1f, 5, 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Spirit of Fire", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item4.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item5 = new Item("magic_supremacy", "SpiritStormDO"); item5.DropsFrom.Add("Tick", 0.1f, 1, 1); item5.DropsFrom.Add("Seeker", 0.15f, 1, 1); item5.DropsFrom.Add("Seeker_Brood", 0.1f, 1, 1); item5.DropsFrom.Add("SeekerBrute", 0.3f, 1, 2); item5.DropsFrom.Add("Gjall", 0.6f, 2, 6); item5.DropsFrom.Add("SeekerQueen", 1f, 5, 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Spirit of Storm", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item5.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item6 = new Item("magic_supremacy", "SpiritAncestorsDO"); item6.DropsFrom.Add("Neck", 0.05f, 1, 1); item6.DropsFrom.Add("Boar", 0.05f, 1, 1); item6.DropsFrom.Add("Deer", 0.05f, 1, 2); item6.DropsFrom.Add("Greyling", 0.05f, 1, 1); item6.DropsFrom.Add("Eikthyr", 1f, 4, 8); item6.DropsFrom.Add("Greydwarf", 0.1f, 1, 2); item6.DropsFrom.Add("Greydwarf_Elite", 0.3f, 1, 3); item6.DropsFrom.Add("Greydwarf_Shaman", 0.3f, 1, 3); item6.DropsFrom.Add("Troll", 0.6f, 1, 5); item6.DropsFrom.Add("gd_king", 1f, 4, 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Spirit of Ancestors", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item6.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item7 = new Item("magic_supremacy", "SpiritWindDO"); item7.DropsFrom.Add("Bat", 0.05f, 1, 1); item7.DropsFrom.Add("Wolf", 0.1f, 1, 2); item7.DropsFrom.Add("Hatchling", 0.2f, 1, 2); item7.DropsFrom.Add("Fenring", 0.3f, 1, 3); item7.DropsFrom.Add("Fenring_Cultist", 0.3f, 1, 3); item7.DropsFrom.Add("Ulv", 0.3f, 1, 3); item7.DropsFrom.Add("StoneGolem", 0.5f, 1, 5); item7.DropsFrom.Add("Dragon", 1f, 5, 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item7.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Spirit of Wind", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item7.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item8 = new Item("magic_supremacy", "DimEitrDO"); item8.Crafting.Add("MagicWeaverDO", 1); item8.RequiredItems.Add("DimEitrRemnantDO", 1); item8.RequiredItems.Add("SurtlingCore", 1); item8.RequiredItems.Add("GreydwarfEye", 3); item8.CraftAmount = 2; MaterialReplacer.RegisterGameObjectForShaderSwap(item8.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Dim Eitr", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item8.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item9 = new Item("magic_supremacy", "DimEitrRemnantDO"); item9.DropsFrom.Add("Greyling", 0.05f, 1, 2); item9.DropsFrom.Add("Boar", 0.05f, 1, 2); item9.DropsFrom.Add("Deer", 0.05f, 1, 1); item9.DropsFrom.Add("Neck", 0.07f, 1, 2); item9.DropsFrom.Add("Skeleton", 0.05f, 1, 2); item9.DropsFrom.Add("Skeleton_Poison", 0.4f, 1, 4); item9.DropsFrom.Add("Ghost", 0.1f, 1, 3); item9.DropsFrom.Add("Greydwarf", 0.05f, 1, 2); item9.DropsFrom.Add("Greydwarf_Elite", 0.15f, 1, 3); item9.DropsFrom.Add("Greydwarf_Shaman", 0.15f, 1, 3); item9.DropsFrom.Add("Troll", 0.25f, 1, 3); item9.DropsFrom.Add("Leech", 0.05f, 1, 1); item9.DropsFrom.Add("Blob", 0.08f, 1, 1); item9.DropsFrom.Add("BlobElite", 0.1f, 1, 2); item9.DropsFrom.Add("Draugr", 0.07f, 1, 1); item9.DropsFrom.Add("Draugr_Ranged", 0.07f, 1, 1); item9.DropsFrom.Add("Draugr_Elite", 0.15f, 1, 2); item9.DropsFrom.Add("Surtling", 0.02f, 1, 1); item9.DropsFrom.Add("Wraith", 0.2f, 1, 2); item9.DropsFrom.Add("Abomination", 0.4f, 2, 4); item9.DropsFrom.Add("Bat", 0.03f, 1, 1); item9.DropsFrom.Add("Wolf", 0.09f, 1, 2); item9.DropsFrom.Add("Hatchling", 0.11f, 1, 1); item9.DropsFrom.Add("Fenring", 0.15f, 1, 2); item9.DropsFrom.Add("Fenring_Cultist", 0.2f, 1, 2); item9.DropsFrom.Add("Ulv", 0.2f, 1, 2); item9.DropsFrom.Add("StoneGolem", 0.4f, 3, 5); item9.DropsFrom.Add("Lox", 0.12f, 1, 2); item9.DropsFrom.Add("Deathsquito", 0.06f, 1, 2); item9.DropsFrom.Add("Goblin", 0.07f, 1, 2); item9.DropsFrom.Add("GoblinArcher", 0.08f, 1, 2); item9.DropsFrom.Add("GoblinBrute", 0.25f, 2, 3); item9.DropsFrom.Add("GoblinShaman", 0.25f, 2, 3); item9.DropsFrom.Add("BlobTar", 0.15f, 1, 3); item9.DropsFrom.Add("Skeleton_Hildir", 1f, 2, 4); item9.DropsFrom.Add("Fenring_Cultist_Hildir", 1f, 3, 5); item9.DropsFrom.Add("GoblinBruteBros", 1f, 3, 7); item9.DropsFrom.Add("GoblinBrute_Hildir", 1f, 3, 7); item9.DropsFrom.Add("GoblinShaman_Hildir", 1f, 3, 7); item9.DropsFrom.Add("Eikthyr", 0.6f, 2, 5); item9.DropsFrom.Add("gd_king", 0.7f, 3, 6); item9.DropsFrom.Add("Bonemass", 0.8f, 4, 7); item9.DropsFrom.Add("Dragon", 0.9f, 5, 8); item9.DropsFrom.Add("Yagluth", 1f, 6, 10); MaterialReplacer.RegisterGameObjectForShaderSwap(item9.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Dim Eitr Remnant", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item9.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item10 = new Item("magic_supremacy", "CrystalRoseheartDO"); item10.DropsFrom.Add("Eikthyr", 1f, 1, 1); MaterialReplacer.RegisterGameObjectForShaderSwap(item10.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Roseheart Crystal", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item10.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item11 = new Item("magic_supremacy", "PageArcaneDO"); item11.Trade.RequiredGlobalKey = "defeated_eikthyr"; item11.Trade.Trader = Trader.Haldor; item11.Trade.Price = 100u; item11.CraftAmount = 1; item11.DropsFrom.Add("Greyling", 0.001f, 1, 2); item11.DropsFrom.Add("Boar", 0.01f, 1, 2); item11.DropsFrom.Add("Deer", 0.01f, 1, 2); item11.DropsFrom.Add("Neck", 0.01f, 1, 2); item11.DropsFrom.Add("Skeleton", 0.005f, 1, 2); item11.DropsFrom.Add("Skeleton_Poison", 0.02f, 1, 2); item11.DropsFrom.Add("Ghost", 0.02f, 1, 2); item11.DropsFrom.Add("Greydwarf", 0.005f, 1, 2); item11.DropsFrom.Add("Greydwarf_Elite", 0.005f, 1, 2); item11.DropsFrom.Add("Greydwarf_Shaman", 0.005f, 1, 2); item11.DropsFrom.Add("Troll", 0.08f, 1, 2); item11.DropsFrom.Add("Leech", 0.01f, 1, 2); item11.DropsFrom.Add("Blob", 0.01f, 1, 2); item11.DropsFrom.Add("BlobElite", 0.03f, 1, 2); item11.DropsFrom.Add("Draugr", 0.001f, 1, 2); item11.DropsFrom.Add("Draugr_Ranged", 0.001f, 1, 2); item11.DropsFrom.Add("Draugr_Elite", 0.01f, 1, 2); item11.DropsFrom.Add("Surtling", 0.001f, 1, 2); item11.DropsFrom.Add("Wraith", 0.03f, 1, 2); item11.DropsFrom.Add("Abomination", 0.1f, 1, 2); item11.DropsFrom.Add("Bat", 0.001f, 1, 2); item11.DropsFrom.Add("Wolf", 0.015f, 1, 2); item11.DropsFrom.Add("Hatchling", 0.02f, 1, 2); item11.DropsFrom.Add("Fenring", 0.03f, 1, 2); item11.DropsFrom.Add("Fenring_Cultist", 0.04f, 1, 2); item11.DropsFrom.Add("Ulv", 0.04f, 1, 2); item11.DropsFrom.Add("StoneGolem", 0.1f, 1, 2); item11.DropsFrom.Add("Lox", 0.03f, 1, 2); item11.DropsFrom.Add("Deathsquito", 0.01f, 1, 2); item11.DropsFrom.Add("Goblin", 0.01f, 1, 2); item11.DropsFrom.Add("GoblinArcher", 0.01f, 1, 2); item11.DropsFrom.Add("GoblinBrute", 0.05f, 1, 2); item11.DropsFrom.Add("GoblinShaman", 0.1f, 1, 2); item11.DropsFrom.Add("BlobTar", 0.03f, 1, 2); item11.DropsFrom.Add("Tick", 0.01f, 1, 2); item11.DropsFrom.Add("Seeker", 0.03f, 1, 2); item11.DropsFrom.Add("Seeker_Brood", 0.005f, 1, 2); item11.DropsFrom.Add("SeekerBrute", 0.1f, 1, 2); item11.DropsFrom.Add("Gjall", 0.2f, 1, 2); item11.DropsFrom.Add("Volture", 0.01f, 1, 2); item11.DropsFrom.Add("BlobLava", 0.01f, 1, 2); item11.DropsFrom.Add("Charred_Twitcher", 0.02f, 1, 2); item11.DropsFrom.Add("Charred_Melee", 0.02f, 1, 2); item11.DropsFrom.Add("Charred_Archer", 0.02f, 1, 2); item11.DropsFrom.Add("Charred_Mage", 0.1f, 1, 2); item11.DropsFrom.Add("Asksvin", 0.02f, 1, 2); item11.DropsFrom.Add("BonemawSerpent", 0.15f, 1, 2); item11.DropsFrom.Add("Morgen", 0.1f, 1, 2); item11.DropsFrom.Add("FallenValkyrie", 0.15f, 1, 2); item11.DropsFrom.Add("Skeleton_Hildir", 0.2f, 1, 3); item11.DropsFrom.Add("Fenring_Cultist_Hildir", 0.2f, 1, 3); item11.DropsFrom.Add("GoblinBruteBros", 0.2f, 1, 3); item11.DropsFrom.Add("GoblinBrute_Hildir", 0.2f, 1, 3); item11.DropsFrom.Add("GoblinShaman_Hildir", 0.2f, 1, 3); item11.DropsFrom.Add("Eikthyr", 0.15f, 1, 3); item11.DropsFrom.Add("gd_king", 0.2f, 1, 3); item11.DropsFrom.Add("Bonemass", 0.2f, 1, 3); item11.DropsFrom.Add("Dragon", 0.3f, 1, 4); item11.DropsFrom.Add("GoblinKing", 0.3f, 1, 4); item11.DropsFrom.Add("SeekerQueen", 0.4f, 1, 5); item11.DropsFrom.Add("Fader", 0.4f, 1, 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item11.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Arcane Page", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item11.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item12 = new Item("magic_supremacy", "FoodEitrBlackForestDessertDO"); item12.Crafting.Add("EssenceCauldronDO", 1); item12.RequiredItems.Add("Blueberries", 5); item12.RequiredItems.Add("Honey", 3); item12.RequiredItems.Add("Carrot", 4); item12.CraftAmount = 2; MaterialReplacer.RegisterGameObjectForShaderSwap(item12.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Food Eitr Black Forest Dessert", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item12.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item13 = new Item("magic_supremacy", "FoodEitrBlackForestDrinkDO"); item13.Crafting.Add("EssenceCauldronDO", 1); item13.RequiredItems.Add("Blueberries", 4); item13.RequiredItems.Add("Thistle", 3); item13.RequiredItems.Add("MushroomYellow", 4); item13.CraftAmount = 2; MaterialReplacer.RegisterGameObjectForShaderSwap(item13.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Food Eitr Black Forest Drink", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item13.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item14 = new Item("magic_supremacy", "FoodEitrSwampDessertDO"); item14.Crafting.Add("EssenceCauldronDO", 1); item14.RequiredItems.Add("Ooze", 4); item14.RequiredItems.Add("Honey", 5); item14.RequiredItems.Add("Turnip", 4); item14.CraftAmount = 2; MaterialReplacer.RegisterGameObjectForShaderSwap(item14.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Food Eitr Swamp Dessert", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item14.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item15 = new Item("magic_supremacy", "FoodEitrSwampDrinkDO"); item15.Crafting.Add("EssenceCauldronDO", 1); item15.RequiredItems.Add("Ooze", 5); item15.RequiredItems.Add("Guck", 3); item15.RequiredItems.Add("Entrails", 7); item15.CraftAmount = 2; MaterialReplacer.RegisterGameObjectForShaderSwap(item15.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Food Eitr Swamp Drink", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item15.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item16 = new Item("magic_supremacy", "FoodEitrMountainDessertDO"); item16.Crafting.Add("EssenceCauldronDO", 1); item16.RequiredItems.Add("FreezeGland", 3); item16.RequiredItems.Add("Honey", 5); item16.RequiredItems.Add("Onion", 3); item16.CraftAmount = 2; MaterialReplacer.RegisterGameObjectForShaderSwap(item16.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Food Eitr Mountain Dessert", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item16.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item17 = new Item("magic_supremacy", "FoodEitrMountainDrinkDO"); item17.Crafting.Add("EssenceCauldronDO", 1); item17.RequiredItems.Add("FreezeGland", 2); item17.RequiredItems.Add("Crystal", 3); item17.RequiredItems.Add("GreydwarfEye", 3); item17.CraftAmount = 2; MaterialReplacer.RegisterGameObjectForShaderSwap(item17.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Food Eitr Mountain Drink", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item17.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item18 = new Item("magic_supremacy", "FoodEitrPlainsDessertDO"); item18.Crafting.Add("EssenceCauldronDO", 1); item18.RequiredItems.Add("Cloudberry", 10); item18.RequiredItems.Add("Honey", 5); item18.RequiredItems.Add("BarleyFlour", 3); item18.CraftAmount = 2; MaterialReplacer.RegisterGameObjectForShaderSwap(item18.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Food Eitr Plains Dessert", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item18.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item19 = new Item("magic_supremacy", "FoodEitrPlainsDrinkDO"); item19.Crafting.Add("EssenceCauldronDO", 1); item19.RequiredItems.Add("Cloudberry", 12); item19.RequiredItems.Add("Tar", 3); item19.RequiredItems.Add("Flax", 8); item19.CraftAmount = 2; MaterialReplacer.RegisterGameObjectForShaderSwap(item19.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Food Eitr Plains Drink", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item19.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item20 = new Item("magic_supremacy", "PotionEitrBlackForestDO"); item20.Crafting.Add("EssenceCauldronDO", 1); item20.RequiredItems.Add("SpiritLightDO", 2); item20.RequiredItems.Add("Honey", 10); item20.RequiredItems.Add("MushroomYellow", 10); item20.RequiredItems.Add("GreydwarfEye", 3); item20.CraftAmount = 6; MaterialReplacer.RegisterGameObjectForShaderSwap(item20.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Potion Eitr Black Forest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item20.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item21 = new Item("magic_supremacy", "PotionEitrSwampDO"); item21.Crafting.Add("EssenceCauldronDO", 1); item21.RequiredItems.Add("SpiritDeathDO", 2); item21.RequiredItems.Add("Honey", 10); item21.RequiredItems.Add("Guck", 5); item21.RequiredItems.Add("Thistle", 5); item21.CraftAmount = 6; MaterialReplacer.RegisterGameObjectForShaderSwap(item21.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Potion Eitr Swamp", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item21.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item22 = new Item("magic_supremacy", "PotionEitrMountainDO"); item22.Crafting.Add("EssenceCauldronDO", 1); item22.RequiredItems.Add("SpiritFrostDO", 2); item22.RequiredItems.Add("Honey", 10); item22.RequiredItems.Add("Crystal", 5); item22.RequiredItems.Add("WolfFang", 1); item22.CraftAmount = 6; MaterialReplacer.RegisterGameObjectForShaderSwap(item22.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Potion Eitr Mountain", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item22.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item23 = new Item("magic_supremacy", "PotionEitrPlainsDO"); item23.Crafting.Add("EssenceCauldronDO", 1); item23.RequiredItems.Add("SpiritFireDO", 2); item23.RequiredItems.Add("Honey", 10); item23.RequiredItems.Add("Tar", 5); item23.RequiredItems.Add("Needle", 2); item23.CraftAmount = 6; MaterialReplacer.RegisterGameObjectForShaderSwap(item23.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Potion Eitr Plains", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item23.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item24 = new Item("magic_supremacy", "ArmorLightcallerChestDO"); item24.Crafting.Add("MagicWeaverDO", 1); item24.RequiredItems.Add("Bronze", 4); item24.RequiredItems.Add("SpiritLightDO", 6); item24.RequiredItems.Add("DimEitrDO", 4); item24.RequiredItems.Add("TrollHide", 6); item24.RequiredUpgradeItems.Add("SpiritLightDO", 3); item24.RequiredUpgradeItems.Add("DimEitrDO", 2); item24.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item24.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Lightcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item24.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item25 = new Item("magic_supremacy", "ArmorLightcallerLegsDO"); item25.Crafting.Add("MagicWeaverDO", 1); item25.RequiredItems.Add("Bronze", 5); item25.RequiredItems.Add("SpiritLightDO", 6); item25.RequiredItems.Add("DimEitrDO", 4); item25.RequiredItems.Add("TrollHide", 6); item25.RequiredUpgradeItems.Add("SpiritLightDO", 3); item25.RequiredUpgradeItems.Add("DimEitrDO", 2); item25.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item25.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Lightcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item25.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item26 = new Item("magic_supremacy", "ArmorLightcallerHelmetDO"); item26.Crafting.Add("MagicWeaverDO", 1); item26.RequiredItems.Add("Bronze", 5); item26.RequiredItems.Add("SpiritLightDO", 6); item26.RequiredItems.Add("DimEitrDO", 4); item26.RequiredItems.Add("TrollHide", 6); item26.RequiredUpgradeItems.Add("SpiritLightDO", 3); item26.RequiredUpgradeItems.Add("DimEitrDO", 2); item26.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item26.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Lightcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item26.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item27 = new Item("magic_supremacy", "ArmorLightcallerCapeDO"); item27.Crafting.Add("MagicWeaverDO", 1); item27.RequiredItems.Add("Bronze", 6); item27.RequiredItems.Add("SpiritLightDO", 6); item27.RequiredItems.Add("DimEitrDO", 4); item27.RequiredUpgradeItems.Add("SpiritLightDO", 3); item27.RequiredUpgradeItems.Add("DimEitrDO", 2); item27.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item27.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Lightcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item27.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item28 = new Item("magic_supremacy", "ArmorLightcallerBeltDO"); item28.Crafting.Add("MagicWeaverDO", 1); item28.RequiredItems.Add("PageArcaneDO", 10); item28.RequiredItems.Add("SpiritLightDO", 4); item28.RequiredItems.Add("DimEitrDO", 4); item28.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item28.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Lightcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item28.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item29 = new Item("magic_supremacy", "ArmorDeathcallerChestDO"); item29.Crafting.Add("MagicWeaverDO", 2); item29.RequiredItems.Add("Iron", 6); item29.RequiredItems.Add("SpiritDeathDO", 6); item29.RequiredItems.Add("DimEitrDO", 4); item29.RequiredItems.Add("Chain", 1); item29.RequiredUpgradeItems.Add("SpiritDeathDO", 3); item29.RequiredUpgradeItems.Add("DimEitrDO", 2); item29.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item29.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Deathcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item29.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item30 = new Item("magic_supremacy", "ArmorDeathcallerLegsDO"); item30.Crafting.Add("MagicWeaverDO", 2); item30.RequiredItems.Add("Iron", 6); item30.RequiredItems.Add("SpiritDeathDO", 6); item30.RequiredItems.Add("DimEitrDO", 4); item30.RequiredItems.Add("Chain", 1); item30.RequiredUpgradeItems.Add("SpiritDeathDO", 3); item30.RequiredUpgradeItems.Add("DimEitrDO", 2); item30.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item30.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Deathcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item30.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item31 = new Item("magic_supremacy", "ArmorDeathcallerHelmetDO"); item31.Crafting.Add("MagicWeaverDO", 2); item31.RequiredItems.Add("Iron", 6); item31.RequiredItems.Add("SpiritDeathDO", 6); item31.RequiredItems.Add("DimEitrDO", 4); item31.RequiredItems.Add("Chain", 1); item31.RequiredUpgradeItems.Add("SpiritDeathDO", 3); item31.RequiredUpgradeItems.Add("DimEitrDO", 2); item31.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item31.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Deathcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item31.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item32 = new Item("magic_supremacy", "ArmorDeathcallerCapeDO"); item32.Crafting.Add("MagicWeaverDO", 2); item32.RequiredItems.Add("Iron", 6); item32.RequiredItems.Add("SpiritDeathDO", 6); item32.RequiredItems.Add("DimEitrDO", 4); item32.RequiredUpgradeItems.Add("SpiritDeathDO", 3); item32.RequiredUpgradeItems.Add("DimEitrDO", 2); item32.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item32.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Deathcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item32.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item33 = new Item("magic_supremacy", "ArmorDeathcallerBeltDO"); item33.Crafting.Add("MagicWeaverDO", 2); item33.RequiredItems.Add("PageArcaneDO", 10); item33.RequiredItems.Add("SpiritDeathDO", 6); item33.RequiredItems.Add("DimEitrDO", 4); item33.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item33.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Deathcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item33.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item34 = new Item("magic_supremacy", "ArmorFrostcallerChestDO"); item34.Crafting.Add("MagicWeaverDO", 3); item34.RequiredItems.Add("Silver", 8); item34.RequiredItems.Add("SpiritFrostDO", 6); item34.RequiredItems.Add("DimEitrDO", 4); item34.RequiredItems.Add("WolfHairBundle", 5); item34.RequiredUpgradeItems.Add("SpiritFrostDO", 3); item34.RequiredUpgradeItems.Add("DimEitrDO", 2); item34.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item34.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Frostcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item34.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item35 = new Item("magic_supremacy", "ArmorFrostcallerLegsDO"); item35.Crafting.Add("MagicWeaverDO", 3); item35.RequiredItems.Add("Silver", 8); item35.RequiredItems.Add("SpiritFrostDO", 6); item35.RequiredItems.Add("DimEitrDO", 4); item35.RequiredItems.Add("WolfHairBundle", 5); item35.RequiredUpgradeItems.Add("SpiritFrostDO", 3); item35.RequiredUpgradeItems.Add("DimEitrDO", 2); item35.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item35.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Frostcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item35.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item36 = new Item("magic_supremacy", "ArmorFrostcallerHelmetDO"); item36.Crafting.Add("MagicWeaverDO", 3); item36.RequiredItems.Add("Silver", 8); item36.RequiredItems.Add("SpiritFrostDO", 6); item36.RequiredItems.Add("DimEitrDO", 4); item36.RequiredItems.Add("WolfHairBundle", 5); item36.RequiredUpgradeItems.Add("SpiritFrostDO", 3); item36.RequiredUpgradeItems.Add("DimEitrDO", 2); item36.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item36.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Frostcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item36.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item37 = new Item("magic_supremacy", "ArmorFrostcallerCapeDO"); item37.Crafting.Add("MagicWeaverDO", 3); item37.RequiredItems.Add("Crystal", 10); item37.RequiredItems.Add("SpiritFrostDO", 6); item37.RequiredItems.Add("DimEitrDO", 4); item37.RequiredUpgradeItems.Add("SpiritFrostDO", 3); item37.RequiredUpgradeItems.Add("DimEitrDO", 2); item37.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item37.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Frostcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item37.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item38 = new Item("magic_supremacy", "ArmorFrostcallerBeltDO"); item38.Crafting.Add("MagicWeaverDO", 3); item38.RequiredItems.Add("PageArcaneDO", 10); item38.RequiredItems.Add("SpiritFrostDO", 6); item38.RequiredItems.Add("DimEitrDO", 4); item38.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item38.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Frostcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item38.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item39 = new Item("magic_supremacy", "ArmorFirecallerChestDO"); item39.Crafting.Add("MagicWeaverDO", 5); item39.RequiredItems.Add("BlackMetal", 10); item39.RequiredItems.Add("SpiritFireDO", 8); item39.RequiredItems.Add("DimEitrDO", 4); item39.RequiredItems.Add("LinenThread", 20); item39.RequiredUpgradeItems.Add("SpiritFireDO", 4); item39.RequiredUpgradeItems.Add("DimEitrDO", 2); item39.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item39.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Firecaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item39.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item40 = new Item("magic_supremacy", "ArmorFirecallerLegsDO"); item40.Crafting.Add("MagicWeaverDO", 5); item40.RequiredItems.Add("BlackMetal", 10); item40.RequiredItems.Add("SpiritFireDO", 8); item40.RequiredItems.Add("DimEitrDO", 4); item40.RequiredItems.Add("LinenThread", 20); item40.RequiredUpgradeItems.Add("SpiritFireDO", 4); item40.RequiredUpgradeItems.Add("DimEitrDO", 2); item40.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item40.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Firecaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item40.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item41 = new Item("magic_supremacy", "ArmorFirecallerHelmetDO"); item41.Crafting.Add("MagicWeaverDO", 5); item41.RequiredItems.Add("BlackMetal", 10); item41.RequiredItems.Add("SpiritFireDO", 8); item41.RequiredItems.Add("DimEitrDO", 4); item41.RequiredItems.Add("LinenThread", 20); item41.RequiredUpgradeItems.Add("SpiritFireDO", 4); item41.RequiredUpgradeItems.Add("DimEitrDO", 2); item41.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item41.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Firecaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item41.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item42 = new Item("magic_supremacy", "ArmorFirecallerCapeDO"); item42.Crafting.Add("MagicWeaverDO", 5); item42.RequiredItems.Add("BlackMetal", 10); item42.RequiredItems.Add("SpiritFireDO", 8); item42.RequiredItems.Add("DimEitrDO", 4); item42.RequiredItems.Add("Tar", 10); item42.RequiredUpgradeItems.Add("SpiritFireDO", 4); item42.RequiredUpgradeItems.Add("DimEitrDO", 2); item42.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item42.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Firecaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item42.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item43 = new Item("magic_supremacy", "ArmorFirecallerBeltDO"); item43.Crafting.Add("MagicWeaverDO", 5); item43.RequiredItems.Add("PageArcaneDO", 10); item43.RequiredItems.Add("SpiritFireDO", 6); item43.RequiredItems.Add("DimEitrDO", 4); item43.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item43.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Firecaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item43.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item44 = new Item("magic_supremacy", "ArmorStormcallerChestDO"); item44.Crafting.Add("MagicWeaverDO", 6); item44.RequiredItems.Add("Carapace", 10); item44.RequiredItems.Add("SpiritStormDO", 8); item44.RequiredItems.Add("Eitr", 6); item44.RequiredItems.Add("Mandible", 1); item44.RequiredUpgradeItems.Add("SpiritStormDO", 4); item44.RequiredUpgradeItems.Add("Eitr", 3); item44.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item44.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Stormcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item44.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item45 = new Item("magic_supremacy", "ArmorStormcallerLegsDO"); item45.Crafting.Add("MagicWeaverDO", 6); item45.RequiredItems.Add("Carapace", 10); item45.RequiredItems.Add("SpiritStormDO", 8); item45.RequiredItems.Add("Eitr", 6); item45.RequiredItems.Add("Mandible", 1); item45.RequiredUpgradeItems.Add("SpiritStormDO", 4); item45.RequiredUpgradeItems.Add("Eitr", 3); item45.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item45.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Stormcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item45.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item46 = new Item("magic_supremacy", "ArmorStormcallerHelmetDO"); item46.Crafting.Add("MagicWeaverDO", 6); item46.RequiredItems.Add("Carapace", 10); item46.RequiredItems.Add("SpiritStormDO", 8); item46.RequiredItems.Add("Eitr", 6); item46.RequiredItems.Add("Mandible", 2); item46.RequiredUpgradeItems.Add("SpiritStormDO", 4); item46.RequiredUpgradeItems.Add("Eitr", 3); item46.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item46.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Stormcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item46.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item47 = new Item("magic_supremacy", "ArmorStormcallerCapeDO"); item47.Crafting.Add("MagicWeaverDO", 6); item47.RequiredItems.Add("Carapace", 10); item47.RequiredItems.Add("SpiritStormDO", 8); item47.RequiredItems.Add("Eitr", 6); item47.RequiredItems.Add("Mandible", 1); item47.RequiredUpgradeItems.Add("SpiritStormDO", 4); item47.RequiredUpgradeItems.Add("Eitr", 3); item47.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item47.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Stormcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item47.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item48 = new Item("magic_supremacy", "ArmorStormcallerBeltDO"); item48.Crafting.Add("MagicWeaverDO", 6); item48.RequiredItems.Add("PageArcaneDO", 10); item48.RequiredItems.Add("SpiritStormDO", 6); item48.RequiredItems.Add("Eitr", 6); item48.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item48.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Stormcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item48.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item49 = new Item("magic_supremacy", "ArmorTotemcallerChestDO"); item49.Crafting.Add("MagicWeaverDO", 1); item49.RequiredItems.Add("RoundLog", 6); item49.RequiredItems.Add("SpiritAncestorsDO", 4); item49.RequiredItems.Add("DimEitrDO", 2); item49.RequiredItems.Add("LeatherScraps", 4); item49.RequiredUpgradeItems.Add("SpiritAncestorsDO", 1); item49.RequiredUpgradeItems.Add("DimEitrDO", 2); item49.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item49.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Totemcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item49.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item50 = new Item("magic_supremacy", "ArmorTotemcallerLegsDO"); item50.Crafting.Add("MagicWeaverDO", 1); item50.RequiredItems.Add("RoundLog", 6); item50.RequiredItems.Add("SpiritAncestorsDO", 4); item50.RequiredItems.Add("DimEitrDO", 2); item50.RequiredItems.Add("LeatherScraps", 4); item50.RequiredUpgradeItems.Add("SpiritAncestorsDO", 1); item50.RequiredUpgradeItems.Add("DimEitrDO", 2); item50.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item50.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Totemcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item50.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item51 = new Item("magic_supremacy", "ArmorTotemcallerHelmetDO"); item51.Crafting.Add("MagicWeaverDO", 1); item51.RequiredItems.Add("RoundLog", 6); item51.RequiredItems.Add("SpiritAncestorsDO", 4); item51.RequiredItems.Add("DimEitrDO", 2); item51.RequiredItems.Add("LeatherScraps", 4); item51.RequiredUpgradeItems.Add("SpiritAncestorsDO", 1); item51.RequiredUpgradeItems.Add("DimEitrDO", 2); item51.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item51.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Totemcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item51.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item52 = new Item("magic_supremacy", "ArmorTotemcallerCapeDO"); item52.Crafting.Add("MagicWeaverDO", 1); item52.RequiredItems.Add("Dandelion", 8); item52.RequiredItems.Add("SpiritAncestorsDO", 4); item52.RequiredItems.Add("DimEitrDO", 2); item52.RequiredItems.Add("LeatherScraps", 4); item52.RequiredUpgradeItems.Add("SpiritAncestorsDO", 1); item52.RequiredUpgradeItems.Add("DimEitrDO", 2); item52.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item52.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Totemcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item52.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item53 = new Item("magic_supremacy", "ArmorTotemcallerBeltDO"); item53.Crafting.Add("MagicWeaverDO", 1); item53.RequiredItems.Add("AncientSeed", 10); item53.RequiredItems.Add("SpiritAncestorsDO", 4); item53.RequiredItems.Add("DimEitrDO", 2); item53.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item53.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Totemcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item53.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item54 = new Item("magic_supremacy", "ArmorWindcallerChestDO"); item54.Crafting.Add("MagicWeaverDO", 3); item54.RequiredItems.Add("JuteRed", 6); item54.RequiredItems.Add("SpiritWindDO", 6); item54.RequiredItems.Add("DimEitrDO", 4); item54.RequiredItems.Add("WolfPelt", 5); item54.RequiredUpgradeItems.Add("SpiritWindDO", 3); item54.RequiredUpgradeItems.Add("DimEitrDO", 2); item54.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item54.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Windcaller Chest", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item54.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item55 = new Item("magic_supremacy", "ArmorWindcallerLegsDO"); item55.Crafting.Add("MagicWeaverDO", 3); item55.RequiredItems.Add("JuteRed", 6); item55.RequiredItems.Add("SpiritWindDO", 6); item55.RequiredItems.Add("DimEitrDO", 4); item55.RequiredItems.Add("WolfPelt", 5); item55.RequiredUpgradeItems.Add("SpiritWindDO", 3); item55.RequiredUpgradeItems.Add("DimEitrDO", 2); item55.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item55.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Windcaller Legs", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item55.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item56 = new Item("magic_supremacy", "ArmorWindcallerHelmetDO"); item56.Crafting.Add("MagicWeaverDO", 3); item56.RequiredItems.Add("JuteRed", 6); item56.RequiredItems.Add("SpiritWindDO", 6); item56.RequiredItems.Add("DimEitrDO", 4); item56.RequiredItems.Add("WolfPelt", 5); item56.RequiredUpgradeItems.Add("SpiritWindDO", 3); item56.RequiredUpgradeItems.Add("DimEitrDO", 2); item56.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item56.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Windcaller Helmet", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item56.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item57 = new Item("magic_supremacy", "ArmorWindcallerCapeDO"); item57.Crafting.Add("MagicWeaverDO", 3); item57.RequiredItems.Add("Crystal", 4); item57.RequiredItems.Add("SpiritWindDO", 6); item57.RequiredItems.Add("DimEitrDO", 4); item57.RequiredItems.Add("WolfFang", 1); item57.RequiredUpgradeItems.Add("SpiritWindDO", 3); item57.RequiredUpgradeItems.Add("DimEitrDO", 2); item57.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item57.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Windcaller Cape", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item57.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item58 = new Item("magic_supremacy", "ArmorWindcallerBeltDO"); item58.Crafting.Add("MagicWeaverDO", 3); item58.RequiredItems.Add("DragonTear", 8); item58.RequiredItems.Add("SpiritWindDO", 6); item58.RequiredItems.Add("DimEitrDO", 4); item58.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item58.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Windcaller Belt", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item58.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item59 = new Item("magic_supremacy", "StaffLightcallerLightDO"); item59.Crafting.Add("MagicWeaverDO", 1); item59.RequiredItems.Add("TrophyDeer", 3); item59.RequiredItems.Add("SpiritLightDO", 8); item59.RequiredItems.Add("DimEitrDO", 4); item59.RequiredItems.Add("Bronze", 4); item59.RequiredUpgradeItems.Add("SpiritLightDO", 4); item59.RequiredUpgradeItems.Add("DimEitrDO", 2); item59.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item59.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Lightcaller Daystar", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item59.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item60 = new Item("magic_supremacy", "StaffLightcallerHealDO"); item60.Crafting.Add("MagicWeaverDO", 1); item60.RequiredItems.Add("TrophyGreydwarfShaman", 1); item60.RequiredItems.Add("SpiritLightDO", 8); item60.RequiredItems.Add("DimEitrDO", 4); item60.RequiredItems.Add("Bronze", 4); item60.RequiredUpgradeItems.Add("SpiritLightDO", 4); item60.RequiredUpgradeItems.Add("DimEitrDO", 2); item60.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item60.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Lightcaller Candle of Vital Light", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item60.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item61 = new Item("magic_supremacy", "StaffLightcallerSphereDO"); item61.Crafting.Add("MagicWeaverDO", 1); item61.RequiredItems.Add("TrophyGreydwarfBrute", 1); item61.RequiredItems.Add("SpiritLightDO", 8); item61.RequiredItems.Add("DimEitrDO", 4); item61.RequiredItems.Add("Bronze", 4); item61.RequiredUpgradeItems.Add("SpiritLightDO", 4); item61.RequiredUpgradeItems.Add("DimEitrDO", 2); item61.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item61.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Lightcaller Luminaris", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item61.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item62 = new Item("magic_supremacy", "StaffDeathcallerPoisonDO"); item62.Crafting.Add("MagicWeaverDO", 2); item62.RequiredItems.Add("TrophyLeech", 3); item62.RequiredItems.Add("SpiritDeathDO", 8); item62.RequiredItems.Add("DimEitrDO", 4); item62.RequiredItems.Add("WitheredBone", 2); item62.RequiredUpgradeItems.Add("SpiritDeathDO", 4); item62.RequiredUpgradeItems.Add("DimEitrDO", 2); item62.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item62.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Deathcaller Carrion Breath", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item62.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item63 = new Item("magic_supremacy", "StaffDeathcallerBlasterDO"); item63.Crafting.Add("MagicWeaverDO", 2); item63.RequiredItems.Add("TrophyDraugrElite", 1); item63.RequiredItems.Add("SpiritDeathDO", 8); item63.RequiredItems.Add("DimEitrDO", 4); item63.RequiredItems.Add("WitheredBone", 2); item63.RequiredUpgradeItems.Add("SpiritDeathDO", 4); item63.RequiredUpgradeItems.Add("DimEitrDO", 2); item63.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item63.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Deathcaller Graveblight", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item63.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item64 = new Item("magic_supremacy", "BowFrostcallerIceDO"); item64.Crafting.Add("MagicWeaverDO", 3); item64.RequiredItems.Add("TrophyHatchling", 3); item64.RequiredItems.Add("SpiritFrostDO", 8); item64.RequiredItems.Add("DimEitrDO", 4); item64.RequiredItems.Add("Crystal", 10); item64.RequiredUpgradeItems.Add("SpiritFrostDO", 4); item64.RequiredUpgradeItems.Add("DimEitrDO", 2); item64.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item64.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Bow Frostcaller Crystaldraw", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item64.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item65 = new Item("magic_supremacy", "StaffFrostcallerShotgunDO"); item65.Crafting.Add("MagicWeaverDO", 3); item65.RequiredItems.Add("TrophySGolem", 1); item65.RequiredItems.Add("SpiritFrostDO", 8); item65.RequiredItems.Add("DimEitrDO", 4); item65.RequiredItems.Add("Silver", 8); item65.RequiredUpgradeItems.Add("SpiritFrostDO", 4); item65.RequiredUpgradeItems.Add("DimEitrDO", 2); item65.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item65.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Frostcaller Frostspike", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item65.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item66 = new Item("magic_supremacy", "StaffFirecallerThrowerDO"); item66.Crafting.Add("MagicWeaverDO", 5); item66.RequiredItems.Add("TrophyGrowth", 1); item66.RequiredItems.Add("SpiritFireDO", 8); item66.RequiredItems.Add("DimEitrDO", 4); item66.RequiredItems.Add("BlackMetal", 10); item66.RequiredUpgradeItems.Add("SpiritFireDO", 4); item66.RequiredUpgradeItems.Add("DimEitrDO", 2); item66.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item66.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Firecaller Flamebreath", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item66.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item67 = new Item("magic_supremacy", "StaffFirecallerShardsDO"); item67.Crafting.Add("MagicWeaverDO", 5); item67.RequiredItems.Add("TrophyDeathsquito", 3); item67.RequiredItems.Add("SpiritFireDO", 8); item67.RequiredItems.Add("DimEitrDO", 4); item67.RequiredItems.Add("Tar", 10); item67.RequiredUpgradeItems.Add("SpiritFireDO", 4); item67.RequiredUpgradeItems.Add("DimEitrDO", 2); item67.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item67.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Firecaller Ember Shards", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item67.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item68 = new Item("magic_supremacy", "StaffFirecallerBlasterDO"); item68.Crafting.Add("MagicWeaverDO", 5); item68.RequiredItems.Add("TrophyGoblinBrute", 1); item68.RequiredItems.Add("SpiritFireDO", 8); item68.RequiredItems.Add("DimEitrDO", 4); item68.RequiredItems.Add("BlackMetal", 10); item68.RequiredUpgradeItems.Add("SpiritFireDO", 4); item68.RequiredUpgradeItems.Add("DimEitrDO", 2); item68.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item68.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Firecaller Blazing Ray", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item68.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item69 = new Item("magic_supremacy", "StaffFirecallerRingDO"); item69.Crafting.Add("MagicWeaverDO", 5); item69.RequiredItems.Add("TrophyGoblinShaman", 1); item69.RequiredItems.Add("SpiritFireDO", 8); item69.RequiredItems.Add("DimEitrDO", 4); item69.RequiredItems.Add("BlackMetal", 10); item69.RequiredUpgradeItems.Add("SpiritFireDO", 4); item69.RequiredUpgradeItems.Add("DimEitrDO", 2); item69.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item69.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Firecaller Orbit of Embers", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item69.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item70 = new Item("magic_supremacy", "StaffStormcallerSphereDO"); item70.Crafting.Add("MagicWeaverDO", 6); item70.RequiredItems.Add("TrophyGjall", 1); item70.RequiredItems.Add("SpiritStormDO", 8); item70.RequiredItems.Add("Eitr", 6); item70.RequiredItems.Add("Iron", 10); item70.RequiredUpgradeItems.Add("SpiritStormDO", 4); item70.RequiredUpgradeItems.Add("Eitr", 3); item70.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item70.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Stormcaller Tempest Eye", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item70.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item71 = new Item("magic_supremacy", "StaffStormcallerShockerDO"); item71.Crafting.Add("MagicWeaverDO", 6); item71.RequiredItems.Add("TrophySeekerBrute", 1); item71.RequiredItems.Add("SpiritStormDO", 8); item71.RequiredItems.Add("Eitr", 6); item71.RequiredItems.Add("Iron", 10); item71.RequiredUpgradeItems.Add("SpiritStormDO", 4); item71.RequiredUpgradeItems.Add("Eitr", 3); item71.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item71.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Stormcaller Thundersurge", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item71.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item72 = new Item("magic_supremacy", "StaffTotemcallerPullDO"); item72.Crafting.Add("MagicWeaverDO", 1); item72.RequiredItems.Add("TrophyFrostTroll", 1); item72.RequiredItems.Add("SpiritAncestorsDO", 8); item72.RequiredItems.Add("DimEitrDO", 4); item72.RequiredItems.Add("RoundLog", 8); item72.RequiredUpgradeItems.Add("SpiritAncestorsDO", 4); item72.RequiredUpgradeItems.Add("DimEitrDO", 2); item72.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item72.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Totemcaller Earthquake Totem", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item72.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item73 = new Item("magic_supremacy", "StaffTotemcallerBuffDO"); item73.Crafting.Add("MagicWeaverDO", 1); item73.RequiredItems.Add("TrophySkeleton", 3); item73.RequiredItems.Add("SpiritAncestorsDO", 8); item73.RequiredItems.Add("DimEitrDO", 4); item73.RequiredItems.Add("RoundLog", 8); item73.RequiredUpgradeItems.Add("SpiritAncestorsDO", 4); item73.RequiredUpgradeItems.Add("DimEitrDO", 2); item73.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item73.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Totemcaller Wardkeeper Totem", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item73.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item74 = new Item("magic_supremacy", "StaffTotemcallerBoomerangDO"); item74.Crafting.Add("MagicWeaverDO", 1); item74.RequiredItems.Add("TrophyGreydwarf", 3); item74.RequiredItems.Add("SpiritAncestorsDO", 8); item74.RequiredItems.Add("DimEitrDO", 4); item74.RequiredItems.Add("RoundLog", 8); item74.RequiredUpgradeItems.Add("SpiritAncestorsDO", 4); item74.RequiredUpgradeItems.Add("DimEitrDO", 2); item74.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item74.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Totemcaller Boomerang", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item74.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item75 = new Item("magic_supremacy", "StaffWindcallerFeatherDO"); item75.Crafting.Add("MagicWeaverDO", 3); item75.RequiredItems.Add("TrophyFenring", 1); item75.RequiredItems.Add("SpiritWindDO", 8); item75.RequiredItems.Add("DimEitrDO", 4); item75.RequiredItems.Add("Feathers", 8); item75.RequiredUpgradeItems.Add("SpiritWindDO", 4); item75.RequiredUpgradeItems.Add("DimEitrDO", 2); item75.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item75.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Windcaller Windplume", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item75.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Item item76 = new Item("magic_supremacy", "StaffWindcallerShieldDO"); item76.Crafting.Add("MagicWeaverDO", 3); item76.RequiredItems.Add("TrophyCultist", 1); item76.RequiredItems.Add("SpiritWindDO", 8); item76.RequiredItems.Add("DimEitrDO", 4); item76.RequiredItems.Add("Silver", 10); item76.RequiredUpgradeItems.Add("SpiritWindDO", 4); item76.RequiredUpgradeItems.Add("DimEitrDO", 2); item76.CraftAmount = 1; MaterialReplacer.RegisterGameObjectForShaderSwap(item76.Prefab, MaterialReplacer.ShaderType.UseUnityShader); _recipeIsActiveConfig = config("Staff Windcaller Windguard", "IsRecipeEnabled", Toggle.On, "Determines if the recipe is enabled for this prefab"); item76.RecipeIsActive = (ConfigEntryBase)(object)_recipeIsActiveConfig; Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); SetupWatcher(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { Magic_SupremacyLogger.LogDebug((object)"ReadConfigValues called"); ((BaseUnityPlugin)this).Config.Reload(); } catch { Magic_SupremacyLogger.LogError((object)("There was an issue loading your " + ConfigFileName)); Magic_SupremacyLogger.LogError((object)"Please check your config entries for spelling and format!"); } } private ConfigEntry<T> config<[<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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); ConfigSync.AddConfigEntry<T>(val2).SynchronizedConfig = synchronizedSetting; return val2; } private ConfigEntry<T> config<[<7f23a885-3caf-4432-9701-7c0fbde3b32f>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); } static Magic_SupremacyPlugin() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; ConnectionError = ""; Magic_SupremacyLogger = Logger.CreateLogSource("Magic_Supremacy"); ConfigSync = new ConfigSync("Dreanegade.Magic_Supremacy") { DisplayName = "Magic_Supremacy", CurrentVersion = "2.0.9", MinimumRequiredVersion = "2.0.9" }; _serverConfigLocked = null; _recipeIsActiveConfig = null; } } public static class KeyboardExtensions { public static bool IsKeyDown(this KeyboardShortcut shortcut) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) if ((int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKeyDown(((KeyboardShortcut)(ref shortcut)).MainKey)) { return ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey); } return false; } public static bool IsKeyHeld(this KeyboardShortcut shortcut) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) if ((int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKey(((KeyboardShortcut)(ref shortcut)).MainKey)) { return ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey); } return false; } } [HarmonyPatch(typeof(ZNet), "OnNewConnection")] public static class RegisterAndCheckVersion { [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown Magic_SupremacyPlugin.Magic_SupremacyLogger.LogDebug((object)"Registering version RPC handler"); peer.m_rpc.Register<ZPackage>("Magic_Supremacy_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_Magic_Supremacy_Version); Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)"Invoking version check"); ZPackage val = new ZPackage(); val.Write("2.0.9"); peer.m_rpc.Invoke("Magic_Supremacy_VersionCheck", new object[1] { val }); } } [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] public static class VerifyClient { private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance) { if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc)) { return true; } Magic_SupremacyPlugin.Magic_SupremacyLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting")); rpc.Invoke("Error", new object[1] { 3 }); return false; } private static void Postfix(ZNet __instance) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "Magic_SupremacyRequestAdminSync", new object[1] { (object)new ZPackage() }); } } [HarmonyPatch(typeof(FejdStartup), "ShowConnectError")] public class ShowConnectionError { [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] private static void Postfix(FejdStartup __instance) { if (__instance.m_connectionFailedPanel.activeSelf) { __instance.m_connectionFailedError.fontSizeMax = 25f; __instance.m_connectionFailedError.fontSizeMin = 15f; TMP_Text connectionFailedError = __instance.m_connectionFailedError; connectionFailedError.text = connectionFailedError.text + "\n" + Magic_SupremacyPlugin.ConnectionError; } } } [HarmonyPatch(typeof(ZNet), "Disconnect")] public static class RemoveDisconnectedPeerFromVerified { [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { if (__instance.IsServer()) { Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list")); RpcHandlers.ValidatedPeers.Remove(peer.m_rpc); } } } [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] public static class RpcHandlers { public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>(); public static void RPC_Magic_Supremacy_Version(ZRpc rpc, ZPackage pkg) { string text = pkg.ReadString(); Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)("Version check, local: 2.0.9, remote: " + text)); if (text != "2.0.9") { Magic_SupremacyPlugin.ConnectionError = "Magic_Supremacy Installed: 2.0.9\n Needed: " + text; if (ZNet.instance.IsServer()) { Magic_SupremacyPlugin.Magic_SupremacyLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting...")); rpc.Invoke("Error", new object[1] { 3 }); } } else if (!ZNet.instance.IsServer()) { Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)"Received same version from server!"); } else { Magic_SupremacyPlugin.Magic_SupremacyLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list")); ValidatedPeers.Add(rpc); } } public static string ComputeHashForMod() { using SHA256 sHA = SHA256.Create(); byte[] array = sHA.ComputeHash(File.ReadAllBytes(Assembly.GetExecutingAssembly().Location)); StringBuilder stringBuilder = new StringBuilder(); byte[] array2 = array; foreach (byte b in array2) { stringBuilder.Append(b.ToString("X2")); } return stringBuilder.ToString(); } } } namespace StationLevelFix { [HarmonyPatch(typeof(CraftingStation), "GetLevel")] public static class UnlimitedStationLevel { [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] private static void Postfix(CraftingStation __instance, ref int __result) { } } [HarmonyPatch(typeof(InventoryGui), "CanRepair")] public static class UnlimitedRepairFix { [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] private static void Postfix(ItemData item, ref bool __result) { if (!__result && (Object)(object)Player.m_localPlayer != (Object)null) { CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation(); if ((Object)(object)currentCraftingStation != (Object)null && currentCraftingStation.GetLevel(true) > 4) { __result = true; } } } } } namespace PieceManager { [PublicAPI] [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] public static class MaterialReplacer { [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] public enum ShaderType { PieceShader, VegetationShader, RockShader, RugShader, GrassShader, CustomCreature, UseUnityShader } private static readonly Dictionary<GameObject, bool> ObjectToSwap; private static readonly Dictionary<string, Material> OriginalMaterials; private static readonly Dictionary<GameObject, ShaderType> ObjectsForShaderReplace; private static readonly HashSet<Shader> CachedShaders; private static bool hasRun; static MaterialReplacer() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown CachedShaders = new HashSet<Shader>(); hasRun = false; OriginalMaterials = new Dictionary<string, Material>(); ObjectToSwap = new Dictionary<GameObject, bool>(); ObjectsForShaderReplace = new Dictionary<GameObject, ShaderType>(); new Harmony("org.bepinex.helpers.PieceManager").Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZoneSystem), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(MaterialReplacer), "ReplaceAllMaterialsWithOriginal", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static void RegisterGameObjectForShaderSwap(GameObject go, ShaderType type) { if (!ObjectsForShaderReplace.ContainsKey(go)) { ObjectsForShaderReplace.Add(go, type); } } public static void RegisterGameObjectForMatSwap(GameObject go, bool isJotunnMock = false) { if (!ObjectToSwap.ContainsKey(go)) { ObjectToSwap.Add(go, isJotunnMock); } } private static void GetAllMaterials() { Material[] array = Resources.FindObjectsOfTypeAll<Material>(); foreach (Material val in array) { OriginalMaterials[((Object)val).name] = val; } } [HarmonyPriority(700)] private static void ReplaceAllMaterialsWithOriginal() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Invalid comparison between Unknown and I4 if ((int)SystemInfo.graphicsDeviceType == 4 || hasRun) { return; } if (OriginalMaterials.Count == 0) { GetAllMaterials(); } foreach (KeyValuePair<GameObject, bool> item in ObjectToSwap) { GameObject key = item.Key; bool value = item.Value; ProcessGameObjectMaterials(key, value); } AssetBundle[] array = Resources.FindObjectsOfTypeAll<AssetBundle>(); foreach (AssetBundle val in array) { IEnumerable<Shader> enumerable3; try { IEnumerable<Shader> enumerable2; if (!val.isStreamedSceneAssetBundle || !Object.op_Implicit((Object)(object)val)) { IEnumerable<Shader> enumerable = val.LoadAllAssets<Shader>(); enumerable2 = enumerable; } else { enumerable2 = from shader in ((IEnumerable<string>)val.GetAllAssetNames()).Select((Func<string, Shader>)val.LoadAsset<Shader>) where (Object)(object)shader != (Object)null select shader; } enumerable3 = enumerable2; } catch (Exception) { continue; } if (enumerable3 == null) { continue; } foreach (Shader item2 in enumerable3) { CachedShaders.Add(item2); } } foreach (KeyValuePair<GameObject, ShaderType> item3 in ObjectsForShaderReplace) { GameObject key2 = item3.Key; ShaderType value2 = item3.Value; ProcessGameObjectShaders(key2, value2); } hasRun = true; } private static void ProcessGameObjectMaterials(GameObject go, bool isJotunnMock) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); foreach (Renderer obj in componentsInChildren) { Material[] sharedMaterials = obj.sharedMaterials.Select([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Material material) => ReplaceMaterial(material, isJotunnMock)).ToArray(); obj.sharedMaterials = sharedMaterials; } } private static Material ReplaceMaterial(Material originalMaterial, bool isJotunnMock) { string text = (isJotunnMock ? "JVLmock_" : "_REPLACE_"); if (!((Object)originalMaterial).name.StartsWith(text, StringComparison.Ordinal)) { return originalMaterial; } string text2 = ((Object)originalMaterial).name.Replace(" (Instance)", "").Replace(text, ""); if (OriginalMaterials.TryGetValue(text2, out var value)) { return value; } Debug.LogWarning((object)("No suitable material found to replace: " + text2)); return originalMaterial; } private static void ProcessGameObjectShaders(GameObject go, ShaderType shaderType) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); for (int i = 0; i < componentsInChildren.Length; i++) { Material[] sharedMaterials = componentsInChildren[i].sharedMaterials; foreach (Material val in sharedMaterials) { if ((Object)(object)val != (Object)null) { val.shader = GetShaderForType(val.shader, shaderType, ((Object)val.shader).name); } } } } private static Shader GetShaderForType(Shader orig, ShaderType shaderType, string originalShaderName) { return (Shader)(shaderType switch { ShaderType.PieceShader => FindShaderWithName(orig, "Custom/Piece"), ShaderType.VegetationShader => FindShaderWithName(orig, "Custom/Vegetation"), ShaderType.RockShader => FindShaderWithName(orig, "Custom/StaticRock"), ShaderType.RugShader => FindShaderWithName(orig, "Custom/Rug"), ShaderType.GrassShader => FindShaderWithName(orig, "Custom/Grass"), ShaderType.CustomCreature => FindShaderWithName(orig, "Custom/Creature"), ShaderType.UseUnityShader => FindShaderWithName(orig, ((Object)(object)FindShaderWithName(orig, originalShaderName) != (Object)null) ? originalShaderName : "ToonDeferredShading2017"), _ => FindShaderWithName(orig, "Standard"), }); } public static Shader FindShaderWithName(Shader origShader, string name) { foreach (Shader cachedShader in CachedShaders) { if (((Object)cachedShader).name == name) { return cachedShader; } } return origShader; } } [PublicAPI] public enum CraftingTable { None, [InternalName("piece_workbench")] Workbench, [InternalName("piece_cauldron")] Cauldron, [InternalName("forge")] Forge, [InternalName("piece_artisanstation")] ArtisanTable, [InternalName("piece_stonecutter")] StoneCutter, [InternalName("piece_magetable")] MageTable, [InternalName("blackforge")] BlackForge, [InternalName("piece_preptable")] FoodPreparationTable, [InternalName("piece_MeadCauldron")] MeadKetill, Custom } [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] public class InternalName : Attribute { public readonly string internalName; public InternalName(string internalName) { this.internalName = internalName; } } [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] [PublicAPI] [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] public class ExtensionList { public readonly List<ExtensionConfig> ExtensionStations = new List<ExtensionConfig>(); public void Set(CraftingTable table, int maxStationDistance = 5) { ExtensionStations.Add(new ExtensionConfig { Table = table, maxStationDistance = maxStationDistance }); } public void Set(string customTable, int maxStationDistance = 5) { ExtensionStations.Add(new ExtensionConfig { Table = CraftingTable.Custom, custom = customTable, maxStationDistance = maxStationDistance }); } } public struct ExtensionConfig { public CraftingTable Table; public float maxStationDistance; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] public string custom; } [PublicAPI] [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] public class CraftingStationList { public readonly List<CraftingStationConfig> Stations = new List<CraftingStationConfig>(); public void Set(CraftingTable table) { Stations.Add(new CraftingStationConfig { Table = table }); } public void Set(string customTable) { Stations.Add(new CraftingStationConfig { Table = CraftingTable.Custom, custom = customTable }); } } public struct CraftingStationConfig { public CraftingTable Table; public int level; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] public string custom; } [PublicAPI] public enum BuildPieceCategory { Misc = 0, Crafting = 1, BuildingWorkbench = 2, BuildingStonecutter = 3, Furniture = 4, All = 100, Custom = 99 } [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] [PublicAPI] public class RequiredResourcesList { public readonly List<Requirement> Requirements = new List<Requirement>(); public void Add(string item, int amount, bool recover) { Requirements.Add(new Requirement { itemName = item, amount = amount, recover = recover }); } } public struct Requirement { [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(1)] public string itemName; public int amount; public bool recover; } public struct SpecialProperties { [Description("Admins should be the only ones that can build this piece.")] public bool AdminOnly; [Description("Turns off generating a config for this build piece.")] public bool NoConfig; } [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] [PublicAPI] public class BuildingPieceCategory { public BuildPieceCategory Category; public string custom = ""; public void Set(BuildPieceCategory category) { Category = category; } public void Set(string customCategory) { Category = BuildPieceCategory.Custom; custom = customCategory; } } [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] [PublicAPI] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] public class PieceTool { public readonly HashSet<string> Tools = new HashSet<string>(); public void Add(string tool) { Tools.Add(tool); } } [PublicAPI] [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(1)] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] public class BuildPiece { [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] internal class PieceConfig { public ConfigEntry<string> craft; public ConfigEntry<BuildPieceCategory> category; public ConfigEntry<string> customCategory; public ConfigEntry<string> tools; public ConfigEntry<CraftingTable> extensionTable; public ConfigEntry<string> customExtentionTable; public ConfigEntry<float> maxStationDistance; public ConfigEntry<CraftingTable> table; public ConfigEntry<string> customTable; } [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order; [UsedImplicitly] public bool? Browsable; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] [UsedImplicitly] public string Category; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(new byte[] { 2, 1 })] [UsedImplicitly] public Action<ConfigEntryBase> CustomDrawer; } [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(0)] private class SerializedRequirements { public readonly List<Requirement> Reqs; public SerializedRequirements(List<Requirement> reqs) { Reqs = reqs; } public SerializedRequirements(string reqs) { Reqs = reqs.Split(new char[1] { ',' }).Select([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (string r) => { string[] array = r.Split(new char[1] { ':' }); Requirement result = default(Requirement); result.itemName = array[0]; result.amount = ((array.Length <= 1 || !int.TryParse(array[1], out var result2)) ? 1 : result2); bool result3 = default(bool); result.recover = array.Length <= 2 || !bool.TryParse(array[2], out result3) || result3; return result; }).ToList(); } public override string ToString() { return string.Join(",", Reqs.Select([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Requirement r) => $"{r.itemName}:{r.amount}:{r.recover}")); } [return: <7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] public static ItemDrop fetchByName(ObjectDB objectDB, string name) { GameObject itemPrefab = objectDB.GetItemPrefab(name); ItemDrop obj = ((itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null); if ((Object)(object)obj == (Object)null) { Debug.LogWarning((object)(((!string.IsNullOrWhiteSpace(((Object)plugin).name)) ? ("[" + ((Object)plugin).name + "]") : "") + " The required item '" + name + "' does not exist.")); } return obj; } public static Requirement[] toPieceReqs(SerializedRequirements craft) { return craft.Reqs.Where((Requirement r) => r.itemName != "").ToDictionary((Func<Requirement, string>)([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Requirement r) => r.itemName), (Func<Requirement, Requirement>)([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Requirement r) => { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown ItemDrop val = ResItem(r); return (val != null) ? new Requirement { m_amount = r.amount, m_resItem = val, m_recover = r.recover } : ((Requirement)null); })).Values.Where([<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(0)] (Requirement v) => v != null).ToArray(); [<3c88b04a-068f-4025-8e1d-5e2454c80f4c>NullableContext(2)] static ItemDrop ResItem(Requirement r) { return fetchByName(ObjectDB.instance, r.itemName); } } } internal static readonly List<BuildPiece> registeredPieces = new List<BuildPiece>(); private static readonly Dictionary<Piece, BuildPiece> pieceMap = new Dictionary<Piece, BuildPiece>(); internal static Dictionary<BuildPiece, PieceConfig> pieceConfigs = new Dictionary<BuildPiece, PieceConfig>(); internal List<Conversion> Conversions = new List<Conversion>(); internal List<ItemConversion> conversions = new List<ItemConversion>(); [Description("Disables generation of the configs for your pieces. This is global, this turns it off for all pieces in your mod.")] public static bool ConfigurationEnabled = true; public readonly GameObject Prefab; [Description("Specifies the resources needed to craft the piece.\nUse .Add to add resources with their internal ID and an amount.\nUse one .Add for each resource type the building piece should need.")] public readonly RequiredResourcesList RequiredItems = new RequiredResourcesList(); [Description("Sets the category for the building piece.")] public readonly BuildingPieceCategory Category = new BuildingPieceCategory(); [Description("Specifies the tool needed to build your piece.\nUse .Add to add a tool.")] public readonly PieceTool Tool = new PieceTool(); [Description("Specifies the crafting station needed to build your piece.\nUse .Add to add a crafting station, using the CraftingTable enum and a minimum level for the crafting station.")] public CraftingStationList Crafting = new CraftingStationList(); [Description("Makes this piece a station extension")] public ExtensionList Extension = new ExtensionList(); [Description("Change the extended/special properties of your build piece.")] public SpecialProperties SpecialProperties; [Description("Specifies a config entry which toggles whether a recipe is active.")] [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] public ConfigEntryBase RecipeIsActive; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] private LocalizeKey _name; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] private LocalizeKey _description; internal string[] activeTools; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] private static object configManager; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] private static Localization _english; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] internal static BaseUnityPlugin _plugin = null; private static bool hasConfigSync = true; [<7f23a885-3caf-4432-9701-7c0fbde3b32f>Nullable(2)] private static object _configSync; public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } Piece component = Prefab.GetComponent<Piece>(); if (component.m_name.StartsWith("$")) { _name = new LocalizeKey(component.m_name); } else { string text = "$piece_" + ((Object)Prefab).name.Replace(" ", "_"); _name = new LocalizeKey