Decompiled source of Vikings Summoner v1.0.2
plugins/Vikings_Summoner.dll
Decompiled 2 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using CreatureManager; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using Microsoft.CodeAnalysis; using PieceManager; using ServerSync; using SoftReferenceableAssets; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Vikings_Summoner")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyProduct("Vikings_Summoner")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("E74EB49A-461D-48EA-85BC-F462D60C98C4")] [assembly: AssemblyFileVersion("1.0.2")] [assembly: AssemblyCompany("Radamanto")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<f34946e6-a4c1-4142-8710-68edeb87ab72>Embedded] internal sealed class <f34946e6-a4c1-4142-8710-68edeb87ab72>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<f34946e6-a4c1-4142-8710-68edeb87ab72>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <4de37a4e-9b9e-4b55-8dbb-00d542153042>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <4de37a4e-9b9e-4b55-8dbb-00d542153042>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <4de37a4e-9b9e-4b55-8dbb-00d542153042>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [<f34946e6-a4c1-4142-8710-68edeb87ab72>Embedded] [CompilerGenerated] internal sealed class <b1566b7d-b925-482c-8958-c5aabdac715f>NullableContextAttribute : Attribute { public readonly byte Flag; public <b1566b7d-b925-482c-8958-c5aabdac715f>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace Vikings_Summoner { [BepInPlugin("radamanto.Vikings_Summoner", "Vikings_Summoner", "1.0.2")] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(1)] public class Vikings_SummonerPlugin : BaseUnityPlugin { [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] private class ConfigurationManagerAttributes { public bool? Browsable = false; } internal const string ModName = "Vikings_Summoner"; internal const string ModVersion = "1.0.2"; internal const string Author = "radamanto"; private const string ModGUID = "radamanto.Vikings_Summoner"; private static string ConfigFileName = "radamanto.Vikings_Summoner.cfg"; private static string ConfigFileFullPath; private readonly Harmony _harmony = new Harmony("radamanto.Vikings_Summoner"); private static readonly ConfigSync ConfigSync; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] private static ConfigEntry<bool> _serverConfigLocked; public void Awake() { _serverConfigLocked = config("General", "Force Server Config", value: true, "Force Server Config"); ConfigSync.AddLockingConfigEntry<bool>(_serverConfigLocked); GameObject val = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_backstab_rd_armor"); GameObject val2 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_crit_rd_armor"); GameObject val3 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_climb_rd_armor"); GameObject val4 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_jog_rd_armor"); GameObject val5 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_mud_jog_rd_armor"); GameObject val6 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_mud_run_rd_armor"); GameObject val7 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_snow_jog_rd_armor"); GameObject val8 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_snow_run_rd_armor"); GameObject val9 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_water_rd_armor"); GameObject val10 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_skeleton_pet_rd_armor"); GameObject val11 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_block_camshake_rd_armor"); GameObject val12 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_hit_camshake_rd_armor"); GameObject val13 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_swing_camshake_rd_armor"); GameObject val14 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_footstep_run_rd_armor"); GameObject val15 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_charred_death_rd_armor"); GameObject val16 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_fireskeleton_nova_rd_armor"); GameObject val17 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_charred_hit_rd_armor"); GameObject val18 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_efeito_mao_rd_armor"); GameObject val19 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_summon_spawn_efeito_solo_rd_armor"); GameObject val20 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_footstep_sneak_rd_armor"); GameObject val21 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_footstep_swim_rd_armor"); GameObject val22 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_hit_rd_armor"); GameObject val23 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_metal_blocked_rd_armor"); GameObject val24 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_sword_hit_rd_armor"); GameObject val25 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_sword_swing_rd_armor"); GameObject val26 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_wood_blocked_rd_armor"); GameObject val27 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_big_death_rd_armor"); GameObject val28 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_club_swing_rd_armor"); GameObject val29 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_axe_swing_rd_armor"); GameObject val30 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_attack_rd_armor"); GameObject val31 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_mace_hit_rd_armor"); GameObject val32 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_alerted_rd_armor"); GameObject val33 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_skeleton_idle_rd_armor"); GameObject val34 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_death_rd_armor"); GameObject val35 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_arrow_hit_rd_armor"); GameObject val36 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_hit_rd_armor"); GameObject val37 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_bow_draw_rd_armor"); GameObject val38 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_bow_fire_rd_armor"); GameObject val39 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_alerted_rd_armor"); GameObject val40 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_draugr_idle_rd_armor"); GameObject val41 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_firestaff_launch_rd_armor"); GameObject val42 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_bomb_throw_rd_armor"); GameObject val43 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_death_rd_armor"); GameObject val44 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_alert_rd_armor"); GameObject val45 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_idle_rd_armor"); GameObject val46 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_bow_draw_rd_armor"); GameObject val47 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_bow_release_rd_armor"); GameObject val48 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_volley_draw_rd_armor"); GameObject val49 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_archer_volley_release_rd_armor"); GameObject val50 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_hurt_rd_armor"); GameObject val51 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_melee_attack_lift_rd_armor"); GameObject val52 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_melee_attack_swing_rd_armor"); GameObject val53 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_melee_attack_stab_rd_armor"); GameObject val54 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_footstep_rd_armor"); GameObject val55 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_wood_destroyed_rd_armor"); GameObject val56 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_build_hammer_wood_rd_armor"); GameObject val57 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_gui_craftitem_workbench_rd_armor"); GameObject val58 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_gui_craftitem_workbench_end_rd_armor"); GameObject val59 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_gui_repairitem_workbench_rd_armor"); GameObject val60 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_creature_soothed_rd_armor"); GameObject val61 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_death_rd_armor"); GameObject val62 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_hit_rd_armor"); GameObject val63 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_water_surface_rd_armor"); GameObject val64 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_blocked_rd_armor"); GameObject val65 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_HitSparks_rd_armor"); GameObject val66 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_big_death_rd_armor"); GameObject val67 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_clubhit_rd_armor"); GameObject val68 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_mace_hit_rd_armor"); GameObject val69 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_arrowhit_rd_armor"); GameObject val70 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_corpse_destruction_small_rd_armor"); GameObject val71 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_skeleton_fire_death_rd_armor"); GameObject val72 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_draugr_hit_rd_armor"); GameObject val73 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_draugr_death_rd_armor"); GameObject val74 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_SawDust_rd_armor"); GameObject val75 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_Place_workbench_rd_armor"); GameObject val76 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "vfx_ExtensionConnection_rd_armor"); GameObject val77 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_idle_rd_armor_male_ptbr"); GameObject val78 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_charred_idle_rd_armor_female_ptbr"); GameObject val79 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_plains_idle_rd_armor_male_ptbr"); GameObject val80 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_bflorest"); GameObject val81 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_pantano"); GameObject val82 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_meadows"); GameObject val83 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_hit_mountain"); GameObject val84 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_mistlands"); GameObject val85 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_inv_launch_mountain_launch"); GameObject val86 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_inv_launch_plains_launch"); GameObject val87 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "fx_inv_projectile_explosion_ashlands"); GameObject val88 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_meadows"); GameObject val89 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_bflorest"); GameObject val90 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_swamp"); GameObject val91 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_mountain_start"); GameObject val92 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_plains"); GameObject val93 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_mistlands"); GameObject val94 = ItemManager.PrefabManager.RegisterPrefab("rd_armor", "sfx_inv_launch_ashlands"); Item item = new Item("rd_armor", "RD_inv_staff_meadows"); item.Name.English("Funeral Dawn Staff"); item.Name.Portuguese_Brazilian("Cajado Alvorada Fúnebre"); item.Description.English("An ancient staff of unknown origin, seemingly a witness to forgotten eras. Its surface is etched with cryptic symbols, and its presence radiates a sense of silent and inevitable power. Consumes eitr and life."); item.Description.Portuguese_Brazilian("Um cajado antigo, de origem desconhecida, que parece ter testemunhado eras esquecidas. Sua superfície é marcada por símbolos enigmáticos e sua presença transmite uma sensação de poder silencioso e inevitável. Consome eitr e vida."); item.Crafting.Add("RD_necromancer_table", 1); item.RequiredItems.Add("TrophyBoar", 1); item.RequiredItems.Add("Wood", 16); item.RequiredItems.Add("GreydwarfEye", 10); item.RequiredItems.Add("Flint", 10); item.RequiredUpgradeItems.Add("Wood", 8); item.RequiredUpgradeItems.Add("GreydwarfEye", 4); item.RequiredUpgradeItems.Add("Flint", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item2 = new Item("rd_armor", "RD_inv_staff_bflorest"); item2.Name.English("Fallen Spirit Staff"); item2.Name.Portuguese_Brazilian("Cajado Espírito Caído"); item2.Description.English("A conduit between the world of the living and the realm of the dead. The Spiritbound Staff resonates with ancestral whispers and trembles at the touch of unseen presences. Consumes eitr and life."); item2.Description.Portuguese_Brazilian("Canal de comunhão entre o mundo dos vivos e o domínio dos mortos. O cajado ressoa com sussurros ancestrais e vibra ao toque de presenças invisíveis. Consome eitr e vida."); item2.Crafting.Add("RD_necromancer_table", 2); item2.RequiredItems.Add("TrophySkeleton", 1); item2.RequiredItems.Add("RoundLog", 12); item2.RequiredItems.Add("SurtlingCore", 5); item2.RequiredItems.Add("Copper", 6); item2.RequiredUpgradeItems.Add("RoundLog", 8); item2.RequiredUpgradeItems.Add("SurtlingCore", 5); item2.RequiredUpgradeItems.Add("Copper", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item3 = new Item("rd_armor", "RD_inv_staff_swamp"); item3.Name.English("Unholy Swamp Staff"); item3.Name.Portuguese_Brazilian("Cajado Pântano Profano"); item3.Description.English("An ancient artifact, its twisted wood and carved markings hinting that it has passed through countless hands over the centuries. Its presence commands respect and evokes a sense of restrained power. Consumes eitr and life."); item3.Description.Portuguese_Brazilian("Um artefato antigo, cuja madeira retorcida e marcas gravadas indicam que já passou por incontáveis mãos ao longo dos séculos. Sua presença impõe respeito e desperta uma sensação de poder contido. Consome eitr e vida."); item3.Crafting.Add("RD_necromancer_table", 3); item3.RequiredItems.Add("YmirRemains", 5); item3.RequiredItems.Add("Guck", 16); item3.RequiredItems.Add("Iron", 20); item3.RequiredItems.Add("ElderBark", 14); item3.RequiredUpgradeItems.Add("Guck", 8); item3.RequiredUpgradeItems.Add("Iron", 10); item3.RequiredUpgradeItems.Add("TrophySkeleton", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item4 = new Item("rd_armor", "RD_inv_staff_mountain"); item4.Name.English("Glacial Shadow Staff"); item4.Name.Portuguese_Brazilian("Cajado Sombra Glacial"); item4.Description.English("A staff shrouded in mystery, with details that reveal craftsmanship long lost to time. It radiates a subtle energy, as if holding secrets from forgotten ages. Consumes eitr and life."); item4.Description.Portuguese_Brazilian("Um cajado envolto em mistério, com detalhes que revelam um artesanato há muito perdido no tempo. Ele emite uma energia sutil, como se guardasse segredos de eras esquecidas. Consome eitr e vida."); item4.Crafting.Add("RD_necromancer_table", 4); item4.RequiredItems.Add("DragonTear", 2); item4.RequiredItems.Add("ElderBark", 22); item4.RequiredItems.Add("FreezeGland", 16); item4.RequiredItems.Add("Silver", 14); item4.RequiredUpgradeItems.Add("ElderBark", 11); item4.RequiredUpgradeItems.Add("FreezeGland", 8); item4.RequiredUpgradeItems.Add("Silver", 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item5 = new Item("rd_armor", "RD_inv_staff_plains"); item5.Name.English("Cursed Moon Staff"); item5.Name.Portuguese_Brazilian("Cajado Lua Amaldiçoada"); item5.Description.English("An ancient staff, bearing signs of use in long-forgotten rituals. Its faint glow gives the impression that it holds stories that were never meant to be told. Consumes eitr and life."); item5.Description.Portuguese_Brazilian("Um cajado antigo, marcado por sinais de uso em rituais há muito esquecidos. Seu brilho discreto transmite a sensação de que guarda histórias que jamais deveriam ser reveladas. Consome eitr e vida."); item5.Crafting.Add("RD_necromancer_table", 5); item5.RequiredItems.Add("GoblinTotem", 2); item5.RequiredItems.Add("LoxPelt", 22); item5.RequiredItems.Add("RoundLog", 16); item5.RequiredItems.Add("BlackMetal", 20); item5.RequiredUpgradeItems.Add("LoxPelt", 11); item5.RequiredUpgradeItems.Add("RoundLog", 8); item5.RequiredUpgradeItems.Add("BlackMetal", 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item6 = new Item("rd_armor", "RD_inv_staff_mistlands"); item6.Name.English("Spectral Veil Staff"); item6.Name.Portuguese_Brazilian("Cajado Véu Espectral"); item6.Description.English("This staff exudes an ethereal aura, as if intertwined with unseen forces. Its delicate form conceals a subtle power, capable of influencing that which escapes the common eye. Consumes eitr and life."); item6.Description.Portuguese_Brazilian("Este cajado exala uma aura etérea, como se estivesse entrelaçado com forças invisíveis. Sua forma delicada esconde um poder sutil, capaz de influenciar aquilo que escapa aos olhos comuns. Consome eitr e vida."); item6.Crafting.Add("RD_necromancer_table", 6); item6.RequiredItems.Add("BlackCore", 2); item6.RequiredItems.Add("YggdrasilWood", 22); item6.RequiredItems.Add("Eitr", 14); item6.RequiredItems.Add("GiantBloodSack", 4); item6.RequiredUpgradeItems.Add("YggdrasilWood", 11); item6.RequiredUpgradeItems.Add("Eitr", 6); item6.RequiredUpgradeItems.Add("GiantBloodSack", 1); MaterialReplacer.RegisterGameObjectForShaderSwap(item6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item7 = new Item("rd_armor", "RD_inv_staff_ashlands"); item7.Name.English("Profane Furnace Staff"); item7.Name.Portuguese_Brazilian("Cajado Fornalha Profana"); item7.Description.English("Forged in a fire not of this world, this staff pulses with an incandescent and forbidden energy. Its invisible flames seem to consume everything around. Consumes eitr and life."); item7.Description.Portuguese_Brazilian("Forjado em um fogo que não pertence a este mundo, este cajado pulsa com uma energia incandescente e proibida. Suas chamas invisíveis parecem consumir tudo ao redor. Consome eitr e vida."); item7.Crafting.Add("RD_necromancer_table", 6); item7.RequiredItems.Add("ShieldCore", 2); item7.RequiredItems.Add("YggdrasilWood", 24); item7.RequiredItems.Add("FlametalNew", 12); item7.RequiredItems.Add("CharredBone", 12); item7.RequiredUpgradeItems.Add("YggdrasilWood", 11); item7.RequiredUpgradeItems.Add("FlametalNew", 6); item7.RequiredUpgradeItems.Add("CharredBone", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item7.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item8 = new Item("rd_armor", "RD_inv_chest_meadows"); item8.Name.English("Chest Reborn"); item8.Name.Portuguese_Brazilian("Peitoral Renascido"); item8.Description.English("Chest created from the life essence of small animals."); item8.Description.Portuguese_Brazilian("Peitoral criado a partir da essência de vida de pequenos animais."); item8.Crafting.Add("RD_necromancer_table", 1); item8.RequiredItems.Add("DeerHide", 10); item8.RequiredItems.Add("LeatherScraps", 10); item8.RequiredUpgradeItems.Add("DeerHide", 2); item8.RequiredUpgradeItems.Add("LeatherScraps", 2); item8.RequiredUpgradeItems.Add("BoneFragments", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item8.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item9 = new Item("rd_armor", "RD_inv_helmet_meadows"); item9.Name.English("Hat Reborn"); item9.Name.Portuguese_Brazilian("Chapéu Renascido"); item9.Description.English("Hat created from the life essence of small animals."); item9.Description.Portuguese_Brazilian("Chapéu criado a partir da essência de vida de pequenos animais."); item9.Crafting.Add("RD_necromancer_table", 1); item9.RequiredItems.Add("DeerHide", 4); item9.RequiredItems.Add("LeatherScraps", 4); item9.RequiredUpgradeItems.Add("DeerHide", 2); item9.RequiredUpgradeItems.Add("LeatherScraps", 2); item9.RequiredUpgradeItems.Add("BoneFragments", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item9.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item10 = new Item("rd_armor", "RD_inv_legs_meadows"); item10.Name.English("Legs Reborn"); item10.Name.Portuguese_Brazilian("Calça Renascido"); item10.Description.English("Legs created from the life essence of small animals."); item10.Description.Portuguese_Brazilian("Calça criada a partir da essência de vida de pequenos animais."); item10.Crafting.Add("RD_necromancer_table", 1); item10.RequiredItems.Add("DeerHide", 8); item10.RequiredItems.Add("LeatherScraps", 8); item10.RequiredUpgradeItems.Add("DeerHide", 2); item10.RequiredUpgradeItems.Add("LeatherScraps", 2); item10.RequiredUpgradeItems.Add("BoneFragments", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item10.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item11 = new Item("rd_armor", "RD_inv_cape_meadows"); item11.Name.English("Cape Reborn"); item11.Name.Portuguese_Brazilian("Capa Renascido"); item11.Description.English("Cape created from the life essence of small animals."); item11.Description.Portuguese_Brazilian("Capa criada a partir da essência de vida de pequenos animais."); item11.Crafting.Add("RD_necromancer_table", 1); item11.RequiredItems.Add("DeerHide", 6); item11.RequiredItems.Add("LeatherScraps", 6); item11.RequiredUpgradeItems.Add("DeerHide", 2); item11.RequiredUpgradeItems.Add("LeatherScraps", 2); item11.RequiredUpgradeItems.Add("BoneFragments", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item11.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item12 = new Item("rd_armor", "RD_inv_helmet_bflorest"); item12.Name.English("Bone Helmet"); item12.Name.Portuguese_Brazilian("Elmo Ósseo"); item12.Description.English("Helmet crafted using the essence of long-forgotten skeletons."); item12.Description.Portuguese_Brazilian("Elmo produzido usando a essência de esqueletos há muito esquecidos."); item12.Crafting.Add("RD_necromancer_table", 2); item12.RequiredItems.Add("TrollHide", 4); item12.RequiredItems.Add("BoneFragments", 6); item12.RequiredItems.Add("Bronze", 5); item12.RequiredUpgradeItems.Add("TrollHide", 1); item12.RequiredUpgradeItems.Add("BoneFragments", 2); item12.RequiredUpgradeItems.Add("Bronze", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item12.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item13 = new Item("rd_armor", "RD_inv_chest_bflorest"); item13.Name.English("Bone Chest"); item13.Name.Portuguese_Brazilian("Peitoral Ósseo"); item13.Description.English("Chest crafted using the essence of long-forgotten skeletons."); item13.Description.Portuguese_Brazilian("Peitoral produzido usando a essência de esqueletos há muito esquecidos."); item13.Crafting.Add("RD_necromancer_table", 2); item13.RequiredItems.Add("TrollHide", 4); item13.RequiredItems.Add("BoneFragments", 8); item13.RequiredItems.Add("Bronze", 5); item13.RequiredUpgradeItems.Add("TrollHide", 1); item13.RequiredUpgradeItems.Add("BoneFragments", 3); item13.RequiredUpgradeItems.Add("Bronze", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item13.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item14 = new Item("rd_armor", "RD_inv_legs_bflorest"); item14.Name.English("Bone Legs"); item14.Name.Portuguese_Brazilian("Calça Óssea"); item14.Description.English("Legs crafted using the essence of long-forgotten skeletons."); item14.Description.Portuguese_Brazilian("Calça produzida usando a essência de esqueletos há muito esquecidos."); item14.Crafting.Add("RD_necromancer_table", 2); item14.RequiredItems.Add("TrollHide", 4); item14.RequiredItems.Add("BoneFragments", 6); item14.RequiredItems.Add("Bronze", 5); item14.RequiredUpgradeItems.Add("TrollHide", 1); item14.RequiredUpgradeItems.Add("BoneFragments", 4); item14.RequiredUpgradeItems.Add("Bronze", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item14.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item15 = new Item("rd_armor", "RD_inv_cape_bflorest"); item15.Name.English("Bone Cape"); item15.Name.Portuguese_Brazilian("Capa Óssea"); item15.Description.English("Cape crafted using the essence of long-forgotten skeletons."); item15.Description.Portuguese_Brazilian("Capa produzida usando a essência de esqueletos há muito esquecidos."); item15.Crafting.Add("RD_necromancer_table", 2); item15.RequiredItems.Add("TrollHide", 2); item15.RequiredItems.Add("BoneFragments", 4); item15.RequiredItems.Add("Bronze", 2); item15.RequiredUpgradeItems.Add("TrollHide", 1); item15.RequiredUpgradeItems.Add("BoneFragments", 2); item15.RequiredUpgradeItems.Add("Bronze", 1); MaterialReplacer.RegisterGameObjectForShaderSwap(item15.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item16 = new Item("rd_armor", "RD_inv_helmet_swamp"); item16.Name.English("Sanguine Helm"); item16.Name.Portuguese_Brazilian("Elmo Sanguíneo"); item16.Description.English("Produced using life energy from the entrails of the undead."); item16.Description.Portuguese_Brazilian("Produzido usando energia vital das entranhas de mortos vivos."); item16.Crafting.Add("RD_necromancer_table", 3); item16.RequiredItems.Add("Iron", 10); item16.RequiredItems.Add("ElderBark", 10); item16.RequiredItems.Add("Entrails", 6); item16.RequiredUpgradeItems.Add("Iron", 2); item16.RequiredUpgradeItems.Add("ElderBark", 6); item16.RequiredUpgradeItems.Add("Entrails", 3); MaterialReplacer.RegisterGameObjectForShaderSwap(item16.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item17 = new Item("rd_armor", "RD_inv_chest_swamp"); item17.Name.English("Sanguine Chest"); item17.Name.Portuguese_Brazilian("Peitoral Sanguíneo"); item17.Description.English("Produced using life energy from the entrails of the undead."); item17.Description.Portuguese_Brazilian("Produzido usando energia vital das entranhas de mortos vivos."); item17.Crafting.Add("RD_necromancer_table", 3); item17.RequiredItems.Add("Iron", 12); item17.RequiredItems.Add("ElderBark", 8); item17.RequiredItems.Add("Entrails", 8); item17.RequiredUpgradeItems.Add("Iron", 3); item17.RequiredUpgradeItems.Add("ElderBark", 4); item17.RequiredUpgradeItems.Add("Entrails", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item17.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item18 = new Item("rd_armor", "RD_inv_legs_swamp"); item18.Name.English("Sanguine Legs"); item18.Name.Portuguese_Brazilian("Calça Sanguínea"); item18.Description.English("Produced using life energy from the entrails of the undead."); item18.Description.Portuguese_Brazilian("Produzido usando energia vital das entranhas de mortos vivos."); item18.Crafting.Add("RD_necromancer_table", 3); item18.RequiredItems.Add("Iron", 12); item18.RequiredItems.Add("ElderBark", 8); item18.RequiredItems.Add("Entrails", 8); item18.RequiredUpgradeItems.Add("Iron", 3); item18.RequiredUpgradeItems.Add("ElderBark", 4); item18.RequiredUpgradeItems.Add("Entrails", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item18.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item19 = new Item("rd_armor", "RD_inv_cape_swamp"); item19.Name.English("Sanguine Cape"); item19.Name.Portuguese_Brazilian("Capa Sanguínea"); item19.Description.English("Produced using life energy from the entrails of the undead"); item19.Description.Portuguese_Brazilian("Produzido usando energia vital das entranhas de mortos vivos."); item19.Crafting.Add("RD_necromancer_table", 3); item19.RequiredItems.Add("ElderBark", 4); item19.RequiredItems.Add("Entrails", 6); item19.RequiredUpgradeItems.Add("ElderBark", 2); item19.RequiredUpgradeItems.Add("Entrails", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item19.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item20 = new Item("rd_armor", "RD_inv_helmet_mountain"); item20.Name.English("Pale Helmet"); item20.Name.Portuguese_Brazilian("Elmo Pálido"); item20.Description.English("Helmet made with materials from the cold mountains."); item20.Description.Portuguese_Brazilian("Elmo produzido com materiais das montanhas frias."); item20.Crafting.Add("RD_necromancer_table", 4); item20.RequiredItems.Add("WolfFang", 3); item20.RequiredItems.Add("WolfPelt", 10); item20.RequiredItems.Add("FreezeGland", 6); item20.RequiredItems.Add("TrollHide", 6); item20.RequiredUpgradeItems.Add("WolfPelt", 6); item20.RequiredUpgradeItems.Add("FreezeGland", 2); item20.RequiredUpgradeItems.Add("TrollHide", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item20.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item21 = new Item("rd_armor", "RD_inv_chest_mountain"); item21.Name.English("Pale Chest"); item21.Name.Portuguese_Brazilian("Peitoral Pálido"); item21.Description.English("Chest made with materials from the cold mountains."); item21.Description.Portuguese_Brazilian("Peitoral produzido com materiais das montanhas frias."); item21.Crafting.Add("RD_necromancer_table", 4); item21.RequiredItems.Add("WolfClaw", 3); item21.RequiredItems.Add("WolfPelt", 14); item21.RequiredItems.Add("Silver", 18); item21.RequiredItems.Add("DeerHide", 12); item21.RequiredUpgradeItems.Add("WolfPelt", 6); item21.RequiredUpgradeItems.Add("Silver", 8); item21.RequiredUpgradeItems.Add("DeerHide", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item21.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item22 = new Item("rd_armor", "RD_inv_legs_mountain"); item22.Name.English("Pale Legs"); item22.Name.Portuguese_Brazilian("Calça Pálida"); item22.Description.English("Legs made with materials from the cold mountains."); item22.Description.Portuguese_Brazilian("Calça produzida com materiais das montanhas frias."); item22.Crafting.Add("RD_necromancer_table", 4); item22.RequiredItems.Add("WolfClaw", 3); item22.RequiredItems.Add("WolfPelt", 12); item22.RequiredItems.Add("Silver", 24); item22.RequiredItems.Add("DeerHide", 16); item22.RequiredUpgradeItems.Add("WolfPelt", 6); item22.RequiredUpgradeItems.Add("Silver", 12); item22.RequiredUpgradeItems.Add("DeerHide", 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item22.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item23 = new Item("rd_armor", "RD_inv_cape_mountain"); item23.Name.English("Pale Cape"); item23.Name.Portuguese_Brazilian("Capa Pálida"); item23.Description.English("Cape made with materials from the cold mountains."); item23.Description.Portuguese_Brazilian("Capa produzida com materiais das montanhas frias."); item23.Crafting.Add("RD_necromancer_table", 4); item23.RequiredItems.Add("WolfPelt", 12); item23.RequiredItems.Add("Silver", 6); item23.RequiredItems.Add("FreezeGland", 6); item23.RequiredUpgradeItems.Add("WolfPelt", 6); item23.RequiredUpgradeItems.Add("Silver", 4); item23.RequiredUpgradeItems.Add("FreezeGland", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item23.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item24 = new Item("rd_armor", "RD_inv_helmet_plains"); item24.Name.English("Decrepit Helmet"); item24.Name.Portuguese_Brazilian("Elmo Decrepto"); item24.Description.English("Helmet imbued with decay and the dark aura of ancient rituals."); item24.Description.Portuguese_Brazilian("Elmo impregnado pela podridão e pela aura sombria de antigos rituais."); item24.Crafting.Add("RD_necromancer_table", 5); item24.RequiredItems.Add("BlackMetal", 16); item24.RequiredItems.Add("LoxPelt", 8); item24.RequiredItems.Add("LinenThread", 6); item24.RequiredItems.Add("JuteRed", 4); item24.RequiredUpgradeItems.Add("BlackMetal", 8); item24.RequiredUpgradeItems.Add("LoxPelt", 4); item24.RequiredUpgradeItems.Add("LinenThread", 3); item24.RequiredUpgradeItems.Add("JuteRed", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item24.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item25 = new Item("rd_armor", "RD_inv_chest_plains"); item25.Name.English("Decrepit Chest"); item25.Name.Portuguese_Brazilian("Peitoral Decrepto"); item25.Description.English("Chest imbued with decay and the dark aura of ancient rituals."); item25.Description.Portuguese_Brazilian("Peitoral impregnado pela podridão e pela aura sombria de antigos rituais."); item25.Crafting.Add("RD_necromancer_table", 5); item25.RequiredItems.Add("BlackMetal", 24); item25.RequiredItems.Add("LoxPelt", 12); item25.RequiredItems.Add("LinenThread", 12); item25.RequiredItems.Add("JuteRed", 4); item25.RequiredUpgradeItems.Add("BlackMetal", 12); item25.RequiredUpgradeItems.Add("LoxPelt", 6); item25.RequiredUpgradeItems.Add("LinenThread", 6); item25.RequiredUpgradeItems.Add("JuteRed", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item25.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item26 = new Item("rd_armor", "RD_inv_legs_plains"); item26.Name.English("Decrepit Legs"); item26.Name.Portuguese_Brazilian("Calça Decrepta"); item26.Description.English("Legs imbued with decay and the dark aura of ancient rituals."); item26.Description.Portuguese_Brazilian("Calça impregnada pela podridão e pela aura sombria de antigos rituais."); item26.Crafting.Add("RD_necromancer_table", 5); item26.RequiredItems.Add("BlackMetal", 24); item26.RequiredItems.Add("LoxPelt", 12); item26.RequiredItems.Add("LinenThread", 12); item26.RequiredItems.Add("JuteRed", 4); item26.RequiredUpgradeItems.Add("BlackMetal", 12); item26.RequiredUpgradeItems.Add("LoxPelt", 6); item26.RequiredUpgradeItems.Add("LinenThread", 6); item26.RequiredUpgradeItems.Add("JuteRed", 2); MaterialReplacer.RegisterGameObjectForShaderSwap(item26.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item27 = new Item("rd_armor", "RD_inv_cape_plains"); item27.Name.English("Decrepit Cape"); item27.Name.Portuguese_Brazilian("Capa Decrepta"); item27.Description.English("Cape imbued with decay and the dark aura of ancient rituals."); item27.Description.Portuguese_Brazilian("Capa impregnada pela podridão e pela aura sombria de antigos rituais."); item27.Crafting.Add("RD_necromancer_table", 5); item27.RequiredItems.Add("BlackMetal", 8); item27.RequiredItems.Add("LoxPelt", 6); item27.RequiredItems.Add("LinenThread", 8); item27.RequiredItems.Add("JuteRed", 2); item27.RequiredUpgradeItems.Add("BlackMetal", 4); item27.RequiredUpgradeItems.Add("LoxPelt", 2); item27.RequiredUpgradeItems.Add("LinenThread", 4); item27.RequiredUpgradeItems.Add("JuteRed", 1); MaterialReplacer.RegisterGameObjectForShaderSwap(item27.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item28 = new Item("rd_armor", "RD_inv_helmet_mistlands"); item28.Name.English("Helm of Mist"); item28.Name.Portuguese_Brazilian("Elmo da Névoa"); item28.Description.English("Helmet enveloped in eternal mists, protecting its bearer beneath the enigmatic veil of the shrouded lands."); item28.Description.Portuguese_Brazilian("Elmo envolto em névoas eternas, protegendo o portador sob o véu enigmático das terras enevoadas."); item28.Crafting.Add("RD_necromancer_table", 6); item28.RequiredItems.Add("LinenThread", 16); item28.RequiredItems.Add("ScaleHide", 12); item28.RequiredItems.Add("Carapace", 8); item28.RequiredItems.Add("Eitr", 14); item28.RequiredUpgradeItems.Add("ScaleHide", 6); item28.RequiredUpgradeItems.Add("Carapace", 4); item28.RequiredUpgradeItems.Add("Eitr", 8); MaterialReplacer.RegisterGameObjectForShaderSwap(item28.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item29 = new Item("rd_armor", "RD_inv_chest_mistlands"); item29.Name.English("Chest of Mist"); item29.Name.Portuguese_Brazilian("Peitoral da Névoa"); item29.Description.English("Chest enveloped in eternal mists, protecting its bearer beneath the enigmatic veil of the shrouded lands."); item29.Description.Portuguese_Brazilian("Peitoral envolto em névoas eternas, protegendo o portador sob o véu enigmático das terras enevoadas."); item29.Crafting.Add("RD_necromancer_table", 6); item29.RequiredItems.Add("Mandible", 8); item29.RequiredItems.Add("ScaleHide", 18); item29.RequiredItems.Add("Carapace", 16); item29.RequiredItems.Add("Eitr", 22); item29.RequiredUpgradeItems.Add("ScaleHide", 9); item29.RequiredUpgradeItems.Add("Carapace", 8); item29.RequiredUpgradeItems.Add("Eitr", 11); MaterialReplacer.RegisterGameObjectForShaderSwap(item29.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item30 = new Item("rd_armor", "RD_inv_legs_mistlands"); item30.Name.English("Legs of Mist"); item30.Name.Portuguese_Brazilian("Calça da Névoa"); item30.Description.English("Legs enveloped in eternal mists, protecting its bearer beneath the enigmatic veil of the shrouded lands."); item30.Description.Portuguese_Brazilian("Calça envolta em névoas eternas, protegendo o portador sob o véu enigmático das terras enevoadas."); item30.Crafting.Add("RD_necromancer_table", 6); item30.RequiredItems.Add("Mandible", 8); item30.RequiredItems.Add("ScaleHide", 18); item30.RequiredItems.Add("Carapace", 16); item30.RequiredItems.Add("Eitr", 22); item30.RequiredUpgradeItems.Add("ScaleHide", 9); item30.RequiredUpgradeItems.Add("Carapace", 8); item30.RequiredUpgradeItems.Add("Eitr", 11); MaterialReplacer.RegisterGameObjectForShaderSwap(item30.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item31 = new Item("rd_armor", "RD_inv_cape_mistlands"); item31.Name.English("Cape of Mist"); item31.Name.Portuguese_Brazilian("Capa da Névoa"); item31.Description.English("Cape enveloped in eternal mists, protecting its bearer beneath the enigmatic veil of the shrouded lands."); item31.Description.Portuguese_Brazilian("Capa envolta em névoas eternas, protegendo o portador sob o véu enigmático das terras enevoadas."); item31.Crafting.Add("RD_necromancer_table", 6); item31.RequiredItems.Add("Mandible", 2); item31.RequiredItems.Add("ScaleHide", 8); item31.RequiredItems.Add("Carapace", 8); item31.RequiredItems.Add("Eitr", 12); item31.RequiredUpgradeItems.Add("ScaleHide", 4); item31.RequiredUpgradeItems.Add("Carapace", 4); item31.RequiredUpgradeItems.Add("Eitr", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item31.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item32 = new Item("rd_armor", "RD_inv_helmet_ashlands"); item32.Name.English("Profane Flame Helm"); item32.Name.Portuguese_Brazilian("Elmo Chama Profana"); item32.Description.English("Helmet consumed by profane flames, burning with the fury of forbidden rituals."); item32.Description.Portuguese_Brazilian("Elmo tomado por chamas profanas, ardendo com a fúria de rituais proibidos."); item32.Crafting.Add("RD_necromancer_table", 6); item32.RequiredItems.Add("GemstoneRed", 1); item32.RequiredItems.Add("AskHide", 8); item32.RequiredItems.Add("CelestialFeather", 4); item32.RequiredItems.Add("FlametalNew", 8); item32.RequiredUpgradeItems.Add("AskHide", 4); item32.RequiredUpgradeItems.Add("CelestialFeather", 2); item32.RequiredUpgradeItems.Add("FlametalNew", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item32.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item33 = new Item("rd_armor", "RD_inv_chest_ashlands"); item33.Name.English("Profane Flame Cloak"); item33.Name.Portuguese_Brazilian("Manto Chama Profana"); item33.Description.English("Cloak consumed by profane flames, burning with the fury of forbidden rituals."); item33.Description.Portuguese_Brazilian("Manto tomado por chamas profanas, ardendo com a fúria de rituais proibidos."); item33.Crafting.Add("RD_necromancer_table", 6); item33.RequiredItems.Add("GemstoneRed", 1); item33.RequiredItems.Add("AskHide", 28); item33.RequiredItems.Add("CharredBone", 16); item33.RequiredItems.Add("FlametalNew", 26); item33.RequiredUpgradeItems.Add("AskHide", 14); item33.RequiredUpgradeItems.Add("CharredBone", 8); item33.RequiredUpgradeItems.Add("FlametalNew", 14); MaterialReplacer.RegisterGameObjectForShaderSwap(item33.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item34 = new Item("rd_armor", "RD_inv_legs_ashlands"); item34.Name.English("Profane Flame Legs"); item34.Name.Portuguese_Brazilian("Calça Chama Profana"); item34.Description.English("Legs consumed by profane flames, burning with the fury of forbidden rituals."); item34.Description.Portuguese_Brazilian("Calça tomada por chamas profanas, ardendo com a fúria de rituais proibidos."); item34.Crafting.Add("RD_necromancer_table", 6); item34.RequiredItems.Add("GemstoneRed", 1); item34.RequiredItems.Add("AskHide", 28); item34.RequiredItems.Add("CharredBone", 16); item34.RequiredItems.Add("FlametalNew", 26); item34.RequiredUpgradeItems.Add("AskHide", 14); item34.RequiredUpgradeItems.Add("CharredBone", 8); item34.RequiredUpgradeItems.Add("FlametalNew", 14); MaterialReplacer.RegisterGameObjectForShaderSwap(item34.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item35 = new Item("rd_armor", "RD_inv_cape_ashlands"); item35.Name.English("Profane Flame Cape"); item35.Name.Portuguese_Brazilian("Capa Chama Profana"); item35.Description.English("Cape consumed by profane flames, burning with the fury of forbidden rituals."); item35.Description.Portuguese_Brazilian("Capa tomada por chamas profanas, ardendo com a fúria de rituais proibidos."); item35.Crafting.Add("RD_necromancer_table", 6); item35.RequiredItems.Add("GemstoneRed", 1); item35.RequiredItems.Add("AskHide", 6); item35.RequiredItems.Add("CelestialFeather", 6); item35.RequiredItems.Add("FlametalNew", 12); item35.RequiredUpgradeItems.Add("AskHide", 3); item35.RequiredUpgradeItems.Add("CelestialFeather", 4); item35.RequiredUpgradeItems.Add("FlametalNew", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item35.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item36 = new Item("rd_armor", "RD_totem_inv_prado"); item36.Name.English("Totem Skull"); item36.Name.Portuguese_Brazilian("Totem Crânio"); item36.Description.English("A plain skull, used in basic summoning rites. It still holds traces of a bound soul."); item36.Description.Portuguese_Brazilian("Um crânio comum, usado em rituais básicos de invocação. Ainda carrega traços de alma aprisionada."); item36.Crafting.Add("RD_necromancer_table", 1); item36.RequiredItems.Add("TrophySkeleton", 2); item36.RequiredItems.Add("LeatherScraps", 20); item36.RequiredItems.Add("BoneFragments", 20); item36.RequiredUpgradeItems.Add("TrophySkeleton", 1); item36.RequiredUpgradeItems.Add("LeatherScraps", 5); item36.RequiredUpgradeItems.Add("BoneFragments", 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item36.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item37 = new Item("rd_armor", "RD_skeleton_woodshield_inv"); item37.Name.English("Wood shield"); item37.Name.Portuguese_Brazilian("Wood shield"); item37.Description.English("Wood shield"); item37.Description.Portuguese_Brazilian("Wood shield"); MaterialReplacer.RegisterGameObjectForShaderSwap(item37.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item38 = new Item("rd_armor", "RD_skeleton_bronzesword_inv"); item38.Name.English("Bronze Sword"); item38.Name.Portuguese_Brazilian("Bronze Sword"); item38.Description.English("Bronze Sword"); item38.Description.Portuguese_Brazilian("Bronze Sword"); MaterialReplacer.RegisterGameObjectForShaderSwap(item38.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item39 = new Item("rd_armor", "RD_skeleton_woodbow_inv"); item39.Name.English("Wood bow"); item39.Name.Portuguese_Brazilian("Wood bow"); item39.Description.English("Wood bow"); item39.Description.Portuguese_Brazilian("Wood bow"); MaterialReplacer.RegisterGameObjectForShaderSwap(item39.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Creature creature = new Creature("rd_armor", "RD_inv_esqueleto_prado") { CanSpawn = false, CanBeTamed = false, SpawnChance = 0f, AttackImmediately = true }; creature.Localize().Portuguese_Brazilian("Esqueleto").English("Esqueleto"); Item item40 = new Item("rd_armor", "RD_totem_inv_bflorest"); item40.Name.English("Totem Rotting Skull"); item40.Name.Portuguese_Brazilian("Totem Crânio Putrefato"); item40.Description.English("A rotting skull, saturated with necromantic energy. Its stench heralds the death that follows."); item40.Description.Portuguese_Brazilian("Um crânio apodrecido, saturado de energia necromântica. Seu fedor é o prenúncio da morte que caminha."); item40.Crafting.Add("RD_necromancer_table", 2); item40.RequiredItems.Add("TrophySkeletonPoison", 1); item40.RequiredItems.Add("LeatherScraps", 25); item40.RequiredItems.Add("Bronze", 20); item40.RequiredItems.Add("BoneFragments", 20); item40.RequiredUpgradeItems.Add("TrophySkeletonPoison", 1); item40.RequiredUpgradeItems.Add("LeatherScraps", 7); item40.RequiredUpgradeItems.Add("Bronze", 5); item40.RequiredUpgradeItems.Add("BoneFragments", 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item40.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item41 = new Item("rd_armor", "RD_skeleton_mace_inv"); item41.Name.English("Draugr axe"); item41.Name.Portuguese_Brazilian("Draugr axe"); item41.Description.English("Draugr axe"); item41.Description.Portuguese_Brazilian("Draugr axe"); MaterialReplacer.RegisterGameObjectForShaderSwap(item41.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Creature creature2 = new Creature("rd_armor", "RD_inv_esqueleto_floresta_negra") { CanSpawn = false, CanBeTamed = false, SpawnChance = 0f, AttackImmediately = true }; creature2.Localize().Portuguese_Brazilian("Carcaça Rancorosa").English("Spiteful Carcass"); Item item42 = new Item("rd_armor", "RD_totem_inv_pantano"); item42.Name.English("Totem Bleeding Heart"); item42.Name.Portuguese_Brazilian("Totem Coração Sangrento"); item42.Description.English("A heart soaked in ancient blood, pulsing with cursed energy. Essential for the most brutal necromantic rites."); item42.Description.Portuguese_Brazilian("Um coração encharcado de sangue antigo, pulsando com energia maldita. Essencial nos rituais mais cruéis da necromancia."); item42.Crafting.Add("RD_necromancer_table", 3); item42.RequiredItems.Add("TrophyDraugr", 1); item42.RequiredItems.Add("Root", 6); item42.RequiredItems.Add("Iron", 20); item42.RequiredItems.Add("BoneFragments", 20); item42.RequiredUpgradeItems.Add("TrophyDraugr", 1); item42.RequiredUpgradeItems.Add("Root", 2); item42.RequiredUpgradeItems.Add("Iron", 5); item42.RequiredUpgradeItems.Add("BoneFragments", 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item42.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item43 = new Item("rd_armor", "RD_draugr_bow_inv"); item43.Name.English("Draugr Bow"); item43.Name.Portuguese_Brazilian("Draugr Bow"); item43.Description.English("Draugr Bow"); item43.Description.Portuguese_Brazilian("Draugr Bow"); MaterialReplacer.RegisterGameObjectForShaderSwap(item43.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Creature creature3 = new Creature("rd_armor", "RD_inv_draugr_archer_pantano") { CanSpawn = false, CanBeTamed = false, SpawnChance = 0f, AttackImmediately = true }; creature3.Localize().Portuguese_Brazilian("Arqueira Sangrenta").English("Bloody Archer"); Item item44 = new Item("rd_armor", "RD_totem_inv_montanha"); item44.Name.English("Frost Head Totem"); item44.Name.Portuguese_Brazilian("Totem Cabeça Elite"); item44.Description.English("A head eternally cold, preserved by death’s icy grasp. It radiates a cutting silence that unsettles even the strongest of souls."); item44.Description.Portuguese_Brazilian("Uma cabeça eternamente fria, preservada pelo toque gélido da morte. Emana um silêncio cortante que perturba até as almas mais resistentes."); item44.Crafting.Add("RD_necromancer_table", 4); item44.RequiredItems.Add("TrophyDraugrElite", 1); item44.RequiredItems.Add("FreezeGland", 8); item44.RequiredItems.Add("Silver", 20); item44.RequiredItems.Add("WolfFang", 10); item44.RequiredUpgradeItems.Add("TrophyDraugrElite", 1); item44.RequiredUpgradeItems.Add("FreezeGland", 2); item44.RequiredUpgradeItems.Add("Silver", 5); item44.RequiredUpgradeItems.Add("WolfFang", 4); MaterialReplacer.RegisterGameObjectForShaderSwap(item44.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item45 = new Item("rd_armor", "RD_draugrelite_sword_inv"); item45.Name.English("Draugr Sword"); item45.Name.Portuguese_Brazilian("Draugr Sword"); item45.Description.English("Draugr Sword"); item45.Description.Portuguese_Brazilian("Draugr Sword"); MaterialReplacer.RegisterGameObjectForShaderSwap(item45.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Creature creature4 = new Creature("rd_armor", "RD_inv_draugr_elite_montanha") { CanSpawn = false, CanBeTamed = false, SpawnChance = 0f, AttackImmediately = true }; creature4.Localize().Portuguese_Brazilian("Draugr Congelado").English("Frozen Draugr"); Item item46 = new Item("rd_armor", "RD_totem_inv_planicie"); item46.Name.English("Ancestral Skull Totem"); item46.Name.Portuguese_Brazilian("Totem Crânio Ancestral"); item46.Description.English("The skull of an ancient death-lord, preserved through the ages as a sacred relic. Its cracks echo with the dark wisdom of necromancy’s earliest days."); item46.Description.Portuguese_Brazilian("O crânio de um antigo senhor da morte, preservado através dos séculos como relíquia sagrada. Suas fissuras ressoam com a sabedoria sombria dos primórdios da necromancia."); item46.Crafting.Add("RD_necromancer_table", 5); item46.RequiredItems.Add("TrophySkeletonHildir", 1); item46.RequiredItems.Add("GoblinTotem", 4); item46.RequiredItems.Add("BlackMetal", 20); item46.RequiredItems.Add("BoneFragments", 20); item46.RequiredUpgradeItems.Add("GoblinTotem", 1); item46.RequiredUpgradeItems.Add("BlackMetal", 5); item46.RequiredUpgradeItems.Add("BoneFragments", 5); MaterialReplacer.RegisterGameObjectForShaderSwap(item46.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item47 = new Item("rd_armor", "RD_skeleton_hildir_firenova_rd_armor"); item47.Name.English("Esqueleto Firenova"); item47.Name.Portuguese_Brazilian("Esqueleto Firenova"); item47.Description.English("Esqueleto Firenova"); item47.Description.Portuguese_Brazilian("Esqueleto Firenova"); MaterialReplacer.RegisterGameObjectForShaderSwap(item47.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item48 = new Item("rd_armor", "RD_skeleton_hildir_sword_rd_armor"); item48.Name.English("Esqueleto FireSword"); item48.Name.Portuguese_Brazilian("Esqueleto FireSword"); item48.Description.English("Esqueleto FireSword"); item48.Description.Portuguese_Brazilian("Esqueleto FireSword"); MaterialReplacer.RegisterGameObjectForShaderSwap(item48.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Creature creature5 = new Creature("rd_armor", "RD_inv_skeleton_Hildir_planicie") { CanSpawn = false, CanBeTamed = false, SpawnChance = 0f, AttackImmediately = true }; creature5.Localize().Portuguese_Brazilian("Esqueleto Ancestral").English("Ancestral Skeleton"); Item item49 = new Item("rd_armor", "RD_totem_inv_mistlands"); item49.Name.English("Memorial Archer Totem"); item49.Name.Portuguese_Brazilian("Totem Arqueiro Memorial"); item49.Description.English("An ancestral skull etched with extinct runes, preserved as a symbol of forgotten pacts. Its presence distorts the air and makes the living tremble. Few dare remain near it for long."); item49.Description.Portuguese_Brazilian("Um crânio ancestral gravado com runas extintas, preservado como símbolo de pactos esquecidos. Sua presença distorce o ar e faz os vivos estremecerem. Poucos ousam permanecer próximos por muito tempo."); item49.Crafting.Add("RD_necromancer_table", 6); item49.RequiredItems.Add("BlackCore", 2); item49.RequiredItems.Add("YggdrasilWood", 22); item49.RequiredItems.Add("Eitr", 14); item49.RequiredItems.Add("GiantBloodSack", 4); item49.RequiredUpgradeItems.Add("YggdrasilWood", 11); item49.RequiredUpgradeItems.Add("Eitr", 6); item49.RequiredUpgradeItems.Add("GiantBloodSack", 1); MaterialReplacer.RegisterGameObjectForShaderSwap(item49.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item50 = new Item("rd_armor", "Charred_Breastplate_archer"); item50.Name.English("Breastplate charred"); item50.Name.Portuguese_Brazilian("Breastplate charred"); item50.Description.English("Breastplate charred"); item50.Description.Portuguese_Brazilian("Breastplate charred"); MaterialReplacer.RegisterGameObjectForShaderSwap(item50.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item51 = new Item("rd_armor", "Charred_Helmet_archer"); item51.Name.English("Charred Helmet"); item51.Name.Portuguese_Brazilian("Charred Helmet"); item51.Description.English("Charred Helmet"); item51.Description.Portuguese_Brazilian("Charred Helmet"); MaterialReplacer.RegisterGameObjectForShaderSwap(item51.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item52 = new Item("rd_armor", "Charred_HipCloth_archer"); item52.Name.English("Charred HipCloth"); item52.Name.Portuguese_Brazilian("Charred HipCloth"); item52.Description.English("Charred HipCloth"); item52.Description.Portuguese_Brazilian("Charred HipCloth"); MaterialReplacer.RegisterGameObjectForShaderSwap(item52.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item53 = new Item("rd_armor", "charred_bow_rd_armor"); item53.Name.English("Charred Bow"); item53.Name.Portuguese_Brazilian("Charred Bow"); item53.Description.English("Charred Bow"); item53.Description.Portuguese_Brazilian("Charred Bow"); MaterialReplacer.RegisterGameObjectForShaderSwap(item53.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item54 = new Item("rd_armor", "charred_bow_volley_rd_armor"); item54.Name.English("Charred Bow Volley"); item54.Name.Portuguese_Brazilian("Charred Bow Volley"); item54.Description.English("Charred Bow Volley"); item54.Description.Portuguese_Brazilian("Charred Bow Volley"); MaterialReplacer.RegisterGameObjectForShaderSwap(item54.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Creature creature6 = new Creature("rd_armor", "RD_inv_charred_archer_mistlands") { CanSpawn = false, CanBeTamed = false, SpawnChance = 0f, AttackImmediately = true }; creature6.Localize().Portuguese_Brazilian("Arqueira Memorial").English("Memorial Archer"); Item item55 = new Item("rd_armor", "RD_totem_inv_ashlands"); item55.Name.English("Memorial Guerreiro Totem"); item55.Name.Portuguese_Brazilian("Totem Guerreiro Memorial"); item55.Description.English("A skull reduced to charcoal, still infused with the essence of dark rites. From the ashes that consume it, an ancient and vengeful heat emanates."); item55.Description.Portuguese_Brazilian("Um crânio reduzido a carvão, ainda impregnado pela essência de rituais obscuros. Das cinzas que o consomem, emana um calor antigo e vingativo."); item55.Crafting.Add("RD_necromancer_table", 6); item55.RequiredItems.Add("ShieldCore", 2); item55.RequiredItems.Add("YggdrasilWood", 24); item55.RequiredItems.Add("FlametalNew", 12); item55.RequiredItems.Add("CharredBone", 12); item55.RequiredUpgradeItems.Add("YggdrasilWood", 11); item55.RequiredUpgradeItems.Add("FlametalNew", 6); item55.RequiredUpgradeItems.Add("CharredBone", 6); MaterialReplacer.RegisterGameObjectForShaderSwap(item55.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item56 = new Item("rd_armor", "Charred_Breastplate_melee"); item56.Name.English("Breastplate charred1"); item56.Name.Portuguese_Brazilian("Breastplate charred1"); item56.Description.English("Breastplate charred1"); item56.Description.Portuguese_Brazilian("Breastplate charred1"); MaterialReplacer.RegisterGameObjectForShaderSwap(item56.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item57 = new Item("rd_armor", "Charred_Helmet_melee"); item57.Name.English("Charred Helmet1"); item57.Name.Portuguese_Brazilian("Charred Helmet1"); item57.Description.English("Charred Helmet1"); item57.Description.Portuguese_Brazilian("Charred Helmet1"); MaterialReplacer.RegisterGameObjectForShaderSwap(item57.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item58 = new Item("rd_armor", "Charred_HipCloth_melee"); item58.Name.English("Charred HipCloth1"); item58.Name.Portuguese_Brazilian("Charred HipCloth1"); item58.Description.English("Charred HipCloth1"); item58.Description.Portuguese_Brazilian("Charred HipCloth1"); MaterialReplacer.RegisterGameObjectForShaderSwap(item58.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item59 = new Item("rd_armor", "charred_greatsword_feint_melee"); item59.Name.English("Charred greatsword"); item59.Name.Portuguese_Brazilian("Charred greatsword"); item59.Description.English("Charred greatsword"); item59.Description.Portuguese_Brazilian("Charred greatsword"); MaterialReplacer.RegisterGameObjectForShaderSwap(item59.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item60 = new Item("rd_armor", "charred_greatsword_swing_melee"); item60.Name.English("Charred swing"); item60.Name.Portuguese_Brazilian("Charred swing"); item60.Description.English("Charred swing"); item60.Description.Portuguese_Brazilian("Charred swing"); MaterialReplacer.RegisterGameObjectForShaderSwap(item60.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item61 = new Item("rd_armor", "charred_greatsword_thrust_melee"); item61.Name.English("Charred thrust"); item61.Name.Portuguese_Brazilian("Charred thrust"); item61.Description.English("Charred thrust"); item61.Description.Portuguese_Brazilian("Charred thrust"); MaterialReplacer.RegisterGameObjectForShaderSwap(item61.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Item item62 = new Item("rd_armor", "charred_greatsword_thrustfeint_melee"); item62.Name.English("Charred thrustfeint"); item62.Name.Portuguese_Brazilian("Charred thrustfeint"); item62.Description.English("Charred thrustfeint"); item62.Description.Portuguese_Brazilian("Charred thrustfeint"); MaterialReplacer.RegisterGameObjectForShaderSwap(item62.Prefab, MaterialReplacer.ShaderType.UseUnityShader); Creature creature7 = new Creature("rd_armor", "RD_inv_charred_melee_ashlands") { CanSpawn = false, CanBeTamed = false, SpawnChance = 0f, AttackImmediately = true }; creature7.Localize().Portuguese_Brazilian("Guerreiro Memorial").English("Memorial Warrior"); BuildPiece buildPiece = new BuildPiece("rd_armor", "RD_necromancer_table"); buildPiece.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece.Category.Set("Necromancer"); buildPiece.SpecialProperties.AdminOnly = false; buildPiece.Name.Portuguese_Brazilian("Mesa de Necromancia"); buildPiece.Name.English("Necromancy Table"); buildPiece.Description.Portuguese_Brazilian("Aqui é onde um Necromancer pode produzir todos os seus artefatos."); buildPiece.Description.English("This is where a Necromancer can produce all of his artifacts."); buildPiece.RequiredItems.Add("Resin", 10, recover: true); buildPiece.RequiredItems.Add("Wood", 20, recover: true); buildPiece.RequiredItems.Add("Coal", 20, recover: true); buildPiece.RequiredItems.Add("DeerHide", 10, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece2 = new BuildPiece("rd_armor", "RD_necromancer_table_ext_01"); buildPiece2.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece2.Category.Set("Necromancer"); buildPiece2.SpecialProperties.AdminOnly = false; buildPiece2.Name.Portuguese_Brazilian("Livro Amaldiçoado"); buildPiece2.Name.English("Cursed Book"); buildPiece2.Description.Portuguese_Brazilian("Melhoria para a mesa de Necromancia."); buildPiece2.Description.English("Improvement to the Necromancy table."); buildPiece2.RequiredItems.Add("Bronze", 10, recover: true); buildPiece2.RequiredItems.Add("FineWood", 10, recover: true); buildPiece2.RequiredItems.Add("Coal", 5, recover: true); buildPiece2.RequiredItems.Add("Feathers", 5, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece2.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece3 = new BuildPiece("rd_armor", "RD_necromancer_table_ext_02"); buildPiece3.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece3.Category.Set("Necromancer"); buildPiece3.SpecialProperties.AdminOnly = false; buildPiece3.Name.Portuguese_Brazilian("Essência de Morte"); buildPiece3.Name.English("Essence of Death"); buildPiece3.Description.Portuguese_Brazilian("Melhoria para a mesa de Necromancia."); buildPiece3.Description.English("Improvement to the Necromancy table."); buildPiece3.RequiredItems.Add("Iron", 10, recover: true); buildPiece3.RequiredItems.Add("ElderBark", 15, recover: true); buildPiece3.RequiredItems.Add("Coal", 10, recover: true); buildPiece3.RequiredItems.Add("Entrails", 10, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece3.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece4 = new BuildPiece("rd_armor", "RD_necromancer_table_ext_03"); buildPiece4.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece4.Category.Set("Necromancer"); buildPiece4.SpecialProperties.AdminOnly = false; buildPiece4.Name.Portuguese_Brazilian("Pentagrama de invocação"); buildPiece4.Name.English("Invoking Pentagram"); buildPiece4.Description.Portuguese_Brazilian("Melhoria para a mesa de Necromancia."); buildPiece4.Description.English("Improvement to the Necromancy table."); buildPiece4.RequiredItems.Add("Silver", 10, recover: true); buildPiece4.RequiredItems.Add("FineWood", 10, recover: true); buildPiece4.RequiredItems.Add("FreezeGland", 6, recover: true); buildPiece4.RequiredItems.Add("Obsidian", 10, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece4.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece5 = new BuildPiece("rd_armor", "RD_necromancer_table_ext_04"); buildPiece5.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece5.Category.Set("Necromancer"); buildPiece5.SpecialProperties.AdminOnly = false; buildPiece5.Name.Portuguese_Brazilian("Mão Amaldiçoada"); buildPiece5.Name.English("Cursed Hand"); buildPiece5.Description.Portuguese_Brazilian("Melhoria para a mesa de Necromancia."); buildPiece5.Description.English("Improvement to the Necromancy table."); buildPiece5.RequiredItems.Add("BlackMetal", 10, recover: true); buildPiece5.RequiredItems.Add("FineWood", 10, recover: true); buildPiece5.RequiredItems.Add("GoblinTotem", 2, recover: true); buildPiece5.RequiredItems.Add("LinenThread", 10, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece5.Prefab, MaterialReplacer.ShaderType.UseUnityShader); BuildPiece buildPiece6 = new BuildPiece("rd_armor", "RD_necromancer_table_ext_05"); buildPiece6.Crafting.Set(PieceManager.CraftingTable.Workbench); buildPiece6.Category.Set("Necromancer"); buildPiece6.SpecialProperties.AdminOnly = false; buildPiece6.Name.Portuguese_Brazilian("Altar de Sangue"); buildPiece6.Name.English("Blood Altar"); buildPiece6.Description.Portuguese_Brazilian("Melhoria para a mesa de Necromancia."); buildPiece6.Description.English("Improvement to the Necromancy table."); buildPiece6.RequiredItems.Add("Eitr", 10, recover: true); buildPiece6.RequiredItems.Add("FineWood", 10, recover: true); buildPiece6.RequiredItems.Add("BlackCore", 2, recover: true); buildPiece6.RequiredItems.Add("ScaleHide", 6, recover: true); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece6.Prefab, MaterialReplacer.ShaderType.UseUnityShader); SetupWatcher(); _harmony.PatchAll(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private ConfigEntry<T> config<[<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown ConfigDescription val = new ConfigDescription(description.Description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags); ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val); SyncedConfigEntry<T> syncedConfigEntry = ConfigSync.AddConfigEntry<T>(val2); syncedConfigEntry.SynchronizedConfig = synchronizedSetting; return val2; } private ConfigEntry<T> config<[<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting); } private static int GetZDO(int prefabHash) { int num = 0; List<ZDO>[] objectsBySector = ZDOMan.instance.m_objectsBySector; foreach (List<ZDO> list in objectsBySector) { if (list == null) { continue; } for (int j = 0; j < list.Count; j++) { ZDO val = list[j]; if (val.GetPrefab() == prefabHash) { num++; } } } return num; } private static int GetPrefabCount(int prefabHash) { int num = 0; List<ZDO>[] objectsBySector = ZDOMan.instance.m_objectsBySector; foreach (List<ZDO> list in objectsBySector) { if (list == null) { continue; } for (int j = 0; j < list.Count; j++) { ZDO val = list[j]; if (val.GetPrefab() == prefabHash) { num++; } } } return num; } static Vikings_SummonerPlugin() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; ConfigSync = new ConfigSync("radamanto.Vikings_Summoner") { DisplayName = "Vikings_Summoner", CurrentVersion = "1.0.2", MinimumRequiredVersion = "1.0.2" }; } } } namespace PieceManager { [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(1)] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] [PublicAPI] public static class MaterialReplacer { [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] public enum ShaderType { PieceShader, VegetationShader, RockShader, RugShader, GrassShader, CustomCreature, UseUnityShader } private static readonly Dictionary<GameObject, bool> ObjectToSwap; private static readonly Dictionary<string, Material> OriginalMaterials; private static readonly Dictionary<GameObject, ShaderType> ObjectsForShaderReplace; private static readonly HashSet<Shader> CachedShaders; private static bool hasRun; static MaterialReplacer() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown CachedShaders = new HashSet<Shader>(); hasRun = false; OriginalMaterials = new Dictionary<string, Material>(); ObjectToSwap = new Dictionary<GameObject, bool>(); ObjectsForShaderReplace = new Dictionary<GameObject, ShaderType>(); Harmony val = new Harmony("org.bepinex.helpers.PieceManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZoneSystem), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(MaterialReplacer), "ReplaceAllMaterialsWithOriginal", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static void RegisterGameObjectForShaderSwap(GameObject go, ShaderType type) { if (!ObjectsForShaderReplace.ContainsKey(go)) { ObjectsForShaderReplace.Add(go, type); } } public static void RegisterGameObjectForMatSwap(GameObject go, bool isJotunnMock = false) { if (!ObjectToSwap.ContainsKey(go)) { ObjectToSwap.Add(go, isJotunnMock); } } private static void GetAllMaterials() { Material[] array = Resources.FindObjectsOfTypeAll<Material>(); foreach (Material val in array) { OriginalMaterials[((Object)val).name] = val; } } [HarmonyPriority(700)] private static void ReplaceAllMaterialsWithOriginal() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 if ((int)SystemInfo.graphicsDeviceType == 4 || hasRun) { return; } if (OriginalMaterials.Count == 0) { GetAllMaterials(); } foreach (KeyValuePair<GameObject, bool> item in ObjectToSwap) { GameObject key = item.Key; bool value = item.Value; ProcessGameObjectMaterials(key, value); } AssetBundle[] array = Resources.FindObjectsOfTypeAll<AssetBundle>(); AssetBundle[] array2 = array; foreach (AssetBundle val in array2) { IEnumerable<Shader> enumerable3; try { IEnumerable<Shader> enumerable2; if (!val.isStreamedSceneAssetBundle || !Object.op_Implicit((Object)(object)val)) { IEnumerable<Shader> enumerable = val.LoadAllAssets<Shader>(); enumerable2 = enumerable; } else { enumerable2 = from shader in ((IEnumerable<string>)val.GetAllAssetNames()).Select((Func<string, Shader>)val.LoadAsset<Shader>) where (Object)(object)shader != (Object)null select shader; } enumerable3 = enumerable2; } catch (Exception) { continue; } if (enumerable3 == null) { continue; } foreach (Shader item2 in enumerable3) { CachedShaders.Add(item2); } } foreach (KeyValuePair<GameObject, ShaderType> item3 in ObjectsForShaderReplace) { GameObject key2 = item3.Key; ShaderType value2 = item3.Value; ProcessGameObjectShaders(key2, value2); } hasRun = true; } private static void ProcessGameObjectMaterials(GameObject go, bool isJotunnMock) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { Material[] sharedMaterials = val.sharedMaterials.Select([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (Material material) => ReplaceMaterial(material, isJotunnMock)).ToArray(); val.sharedMaterials = sharedMaterials; } } private static Material ReplaceMaterial(Material originalMaterial, bool isJotunnMock) { string text = (isJotunnMock ? "JVLmock_" : "_REPLACE_"); if (!((Object)originalMaterial).name.StartsWith(text, StringComparison.Ordinal)) { return originalMaterial; } string text2 = ((Object)originalMaterial).name.Replace(" (Instance)", "").Replace(text, ""); if (OriginalMaterials.TryGetValue(text2, out var value)) { return value; } Debug.LogWarning((object)("No suitable material found to replace: " + text2)); return originalMaterial; } private static void ProcessGameObjectShaders(GameObject go, ShaderType shaderType) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { Material[] sharedMaterials = val.sharedMaterials; foreach (Material val2 in sharedMaterials) { if ((Object)(object)val2 != (Object)null) { val2.shader = GetShaderForType(val2.shader, shaderType, ((Object)val2.shader).name); } } } } private static Shader GetShaderForType(Shader orig, ShaderType shaderType, string originalShaderName) { return (Shader)(shaderType switch { ShaderType.PieceShader => FindShaderWithName(orig, "Custom/Piece"), ShaderType.VegetationShader => FindShaderWithName(orig, "Custom/Vegetation"), ShaderType.RockShader => FindShaderWithName(orig, "Custom/StaticRock"), ShaderType.RugShader => FindShaderWithName(orig, "Custom/Rug"), ShaderType.GrassShader => FindShaderWithName(orig, "Custom/Grass"), ShaderType.CustomCreature => FindShaderWithName(orig, "Custom/Creature"), ShaderType.UseUnityShader => FindShaderWithName(orig, ((Object)(object)FindShaderWithName(orig, originalShaderName) != (Object)null) ? originalShaderName : "ToonDeferredShading2017"), _ => FindShaderWithName(orig, "Standard"), }); } public static Shader FindShaderWithName(Shader origShader, string name) { foreach (Shader cachedShader in CachedShaders) { if (((Object)cachedShader).name == name) { return cachedShader; } } return origShader; } } [PublicAPI] public enum CraftingTable { None, [InternalName("piece_workbench")] Workbench, [InternalName("piece_cauldron")] Cauldron, [InternalName("forge")] Forge, [InternalName("piece_artisanstation")] ArtisanTable, [InternalName("piece_stonecutter")] StoneCutter, [InternalName("piece_magetable")] MageTable, [InternalName("blackforge")] BlackForge, [InternalName("piece_preptable")] FoodPreparationTable, [InternalName("piece_MeadCauldron")] MeadKetill, Custom } [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(1)] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] public class InternalName : Attribute { public readonly string internalName; public InternalName(string internalName) { this.internalName = internalName; } } [PublicAPI] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] [<b1566b7d-b925-482c-8958-c5aabdac715f>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; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] public string custom; } [PublicAPI] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(1)] 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; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] public string custom; } [PublicAPI] public enum BuildPieceCategory { Misc = 0, Crafting = 1, BuildingWorkbench = 2, BuildingStonecutter = 3, Furniture = 4, All = 100, Custom = 99 } [PublicAPI] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(1)] 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 { [<4de37a4e-9b9e-4b55-8dbb-00d542153042>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; } [PublicAPI] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(1)] 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; } } [PublicAPI] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(1)] public class PieceTool { public readonly HashSet<string> Tools = new HashSet<string>(); public void Add(string tool) { Tools.Add(tool); } } [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(1)] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] [PublicAPI] public class BuildPiece { [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(0)] internal class PieceConfig { public ConfigEntry<string> craft = null; public ConfigEntry<BuildPieceCategory> category = null; public ConfigEntry<string> customCategory = null; public ConfigEntry<string> tools = null; public ConfigEntry<CraftingTable> extensionTable = null; public ConfigEntry<string> customExtentionTable = null; public ConfigEntry<float> maxStationDistance = null; public ConfigEntry<CraftingTable> table = null; public ConfigEntry<string> customTable = null; } [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order; [UsedImplicitly] public bool? Browsable; [UsedImplicitly] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] public string Category; [UsedImplicitly] [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(new byte[] { 2, 1 })] public Action<ConfigEntryBase> CustomDrawer; } [<4de37a4e-9b9e-4b55-8dbb-00d542153042>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([<b1566b7d-b925-482c-8958-c5aabdac715f>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([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (Requirement r) => $"{r.itemName}:{r.amount}:{r.recover}")); } [return: <4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] public static ItemDrop fetchByName(ObjectDB objectDB, string name) { GameObject itemPrefab = objectDB.GetItemPrefab(name); ItemDrop val = ((itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)(((!string.IsNullOrWhiteSpace(((Object)plugin).name)) ? ("[" + ((Object)plugin).name + "]") : "") + " The required item '" + name + "' does not exist.")); } return val; } public static Requirement[] toPieceReqs(SerializedRequirements craft) { Dictionary<string, Requirement> dictionary = craft.Reqs.Where((Requirement r) => r.itemName != "").ToDictionary((Func<Requirement, string>)([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (Requirement r) => r.itemName), (Func<Requirement, Requirement>)([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (Requirement r) => { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) ItemDrop val = ResItem(r); return (val == null) ? ((Requirement)null) : new Requirement { m_amount = r.amount, m_resItem = val, m_recover = r.recover }; })); return dictionary.Values.Where([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (Requirement v) => v != null).ToArray(); [<b1566b7d-b925-482c-8958-c5aabdac715f>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; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] [Description("Specifies a config entry which toggles whether a recipe is active.")] public ConfigEntryBase RecipeIsActive = null; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] private LocalizeKey _name; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] private LocalizeKey _description; internal string[] activeTools = null; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] private static object configManager; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] private static Localization _english; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] internal static BaseUnityPlugin _plugin = null; private static bool hasConfigSync = true; [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] private static object _configSync; public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } Piece component = Prefab.GetComponent<Piece>(); if (component.m_name.StartsWith("$")) { _name = new LocalizeKey(component.m_name); } else { string text = "$piece_" + ((Object)Prefab).name.Replace(" ", "_"); _name = new LocalizeKey(text).English(component.m_name); component.m_name = text; } return _name; } } public LocalizeKey Description { get { LocalizeKey description = _description; if (description != null) { return description; } Piece component = Prefab.GetComponent<Piece>(); if (component.m_description.StartsWith("$")) { _description = new LocalizeKey(component.m_description); } else { string text = "$piece_" + ((Object)Prefab).name.Replace(" ", "_") + "_description"; _description = new LocalizeKey(text).English(component.m_description); component.m_description = text; } return _description; } } private static Localization english => _english ?? (_english = LocalizationCache.ForLanguage("English")); internal static BaseUnityPlugin plugin { get { //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Expected O, but got Unknown if (_plugin != null) { return _plugin; } IEnumerable<TypeInfo> source; try { source = Assembly.GetExecutingAssembly().DefinedTypes.ToList(); } catch (ReflectionTypeLoadException ex) { source = from t in ex.Types where t != null select t.GetTypeInfo(); } _plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); return _plugin; } } [<4de37a4e-9b9e-4b55-8dbb-00d542153042>Nullable(2)] private static object configSync { [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(2)] get { if (_configSync != null || !hasConfigSync) { return _configSync; } Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " PieceManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } return _configSync; } } public BuildPiece(string assetBundleFileName, string prefabName, string folderName = "assets") : this(PiecePrefabManager.RegisterAssetBundle(assetBundleFileName, folderName), prefabName) { } public BuildPiece(AssetBundle bundle, string prefabName) { Prefab = PiecePrefabManager.RegisterPrefab(bundle, prefabName); registeredPieces.Add(this); } internal static void Patch_FejdStartup(FejdStartup __instance) { //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Expected O, but got Unknown //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Expected O, but got Unknown //IL_0431: Unknown result type (might be due to invalid IL or missing references) //IL_040b: Unknown result type (might be due to invalid IL or missing references) //IL_0410: Unknown result type (might be due to invalid IL or missing references) //IL_048c: Unknown result type (might be due to invalid IL or missing references) //IL_0496: Expected O, but got Unknown //IL_0606: Unknown result type (might be due to invalid IL or missing references) //IL_0610: Expected O, but got Unknown //IL_08ea: Unknown result type (might be due to invalid IL or missing references) //IL_08f4: Expected O, but got Unknown //IL_067b: Unknown result type (might be due to invalid IL or missing references) //IL_0685: Expected O, but got Unknown //IL_0721: Unknown result type (might be due to invalid IL or missing references) //IL_072b: Expected O, but got Unknown //IL_095f: Unknown result type (might be due to invalid IL or missing references) //IL_0969: Expected O, but got Unknown //IL_0b7e: Unknown result type (might be due to invalid IL or missing references) //IL_0b88: Expected O, but got Unknown //IL_0c18: Unknown result type (might be due to invalid IL or missing references) //IL_0c22: Expected O, but got Unknown Type configManagerType = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (Assembly a) => a.GetName().Name == "ConfigurationManager")?.GetType("ConfigurationManager.ConfigurationManager"); configManager = ((configManagerType == null) ? null : Chainloader.ManagerObject.GetComponent(configManagerType)); foreach (BuildPiece registeredPiece in registeredPieces) { registeredPiece.activeTools = registeredPiece.Tool.Tools.DefaultIfEmpty("Hammer").ToArray(); if (registeredPiece.Category.Category != BuildPieceCategory.Custom) { registeredPiece.Prefab.GetComponent<Piece>().m_category = (PieceCategory)registeredPiece.Category.Category; } else { registeredPiece.Prefab.GetComponent<Piece>().m_category = PiecePrefabManager.GetCategory(registeredPiece.Category.custom); } } if (!ConfigurationEnabled) { return; } bool saveOnConfigSet = plugin.Config.SaveOnConfigSet; plugin.Config.SaveOnConfigSet = false; foreach (BuildPiece registeredPiece2 in registeredPieces) { BuildPiece piece = registeredPiece2; if (piece.SpecialProperties.NoConfig) { continue; } PieceConfig pieceConfig2 = (pieceConfigs[piece] = new PieceConfig()); PieceConfig cfg = pieceConfig2; Piece piecePrefab2 = piece.Prefab.GetComponent<Piece>(); string pieceName = piecePrefab2.m_name; string englishName = new Regex("[=\\n\\t\\\\\"\\'\\[\\]]*").Replace(english.Localize(pieceName), "").Trim(); string localizedName = Localization.instance.Localize(pieceName).Trim(); int order = 0; cfg.category = config(englishName, "Build Table Category", piece.Category.Category, new ConfigDescription("Build Category where " + localizedName + " is available.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = (order -= 1), Category = localizedName } })); ConfigurationManagerAttributes customTableAttributes = new ConfigurationManagerAttributes { Order = (order -= 1), Browsable = (cfg.category.Value == BuildPieceCategory.Custom), Category = localizedName }; cfg.customCategory = config(englishName, "Custom Build Category", piece.Category.custom, new ConfigDescription("", (AcceptableValueBase)null, new object[1] { customTableAttributes })); cfg.category.SettingChanged += BuildTableConfigChanged; cfg.customCategory.SettingChanged += BuildTableConfigChanged; if (cfg.category.Value == BuildPieceCategory.Custom) { piecePrefab2.m_category = PiecePrefabManager.GetCategory(cfg.customCategory.Value); } else { piecePrefab2.m_category = (PieceCategory)cfg.category.Value; } cfg.tools = config(englishName, "Tools", string.Join(", ", piece.activeTools), new ConfigDescription("Comma separated list of tools where " + localizedName + " is available.", (AcceptableValueBase)null, new object[1] { customTableAttributes })); piece.activeTools = (from s in cfg.tools.Value.Split(new char[1] { ',' }) select s.Trim()).ToArray(); cfg.tools.SettingChanged += [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (object _, EventArgs _) => { Inventory[] source = (from c in Player.s_players.Select([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (Player p) => ((Humanoid)p).GetInventory()).Concat(from c in Object.FindObjectsOfType<Container>() select c.GetInventory()) where c != null select c).ToArray(); Dictionary<string, List<PieceTable>> dictionary = (from kv in (from i in (from p in ObjectDB.instance.m_items select p.GetComponent<ItemDrop>() into c where Object.op_Implicit((Object)(object)c) && Object.op_Implicit((Object)(object)((Component)c).GetComponent<ZNetView>()) select c).Concat(ItemDrop.s_instances) select new KeyValuePair<string, ItemData>(Utils.GetPrefabName(((Component)i).gameObject), i.m_itemData)).Concat(from i in source.SelectMany([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (Inventory i) => i.GetAllItems()) select new KeyValuePair<string, ItemData>(((Object)i.m_dropPrefab).name, i)) where Object.op_Implicit((Object)(object)kv.Value.m_shared.m_buildPieces) group kv by kv.Key).ToDictionary([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (IGrouping<string, KeyValuePair<string, ItemData>> g) => g.Key, [<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (IGrouping<string, KeyValuePair<string, ItemData>> g) => g.Select([<b1566b7d-b925-482c-8958-c5aabdac715f>NullableContext(0)] (KeyValuePair<string, ItemData> kv) => kv.Value.m_shared.m_buildPieces).Distinct().ToList()); string[] array5 = piece.activeTools; foreach (string key in array5) { if (dictionary.TryGetValue(key, out var value3)) { foreach (PieceTable item3 in value3) { item3.m_pieces.Remove(piece.Prefab); } } } piece.activeTools = (from s in cfg.tools.Value.Split(new char[1] { ',' }) select s.Trim()).ToArray(); if (Object.op_Implicit((Object)(object)ObjectDB.instance)) { string[] array6 = piece.activeTools; foreach (string key2 in array6) { if (dictionary.TryGetValue(key2, out var value4)) { foreach (PieceTable item4 in value4) { if (!item4.m_pieces.Contains(piece.Prefab)) { item4.m_pieces.Add(piece.Prefab); } } } } if (Object.op_Implicit((Object)(object)Player.m_localPlayer) && Object.op_Implicit((Object)(object)Player.m_localPlayer.m_buildPieces)) { PiecePrefabManager.CategoryRefreshNeeded = true; ((Humanoid)Player.m_localPlayer).SetPlaceMode(Player.m_localPlayer.m_buildPieces); } } }; StationExtension pieceExtensionComp; List<ConfigurationManagerAttributes> hideWhenNoneAttributes2; if (piece.Extension.ExtensionStations.Count > 0) { pieceExtensionComp = piece.Prefab.GetOrAddComponent<StationExtension>(); PieceConfig pieceConfig3 = cfg; string group = englishName; CraftingTable table = piece.Extension.ExtensionStations.First().Table; string text = "Crafting station that " + localizedName + " extends."; object[] array = new object[1]; ConfigurationManagerAttributes configurationManagerAttributes = new ConfigurationManagerAttributes(); int num = order - 1; order = num; configurationManagerAttributes.Order = num; array[0] = configurationManagerAttributes; pieceConfig3.extensionTable = config(group, "Extends Station", table, new ConfigDescription(text, (AcceptableValueBase)null, array)); cfg.customExtentionTable = config(englishName, "Custom Extend Station", piece.Extension.ExtensionStations.First().custom ?? "", new ConfigDescription("", (AcceptableValueBase)null, new object[1] { customTableAttributes })); PieceConfig pieceConfig4 = cfg; string group2 = englishName; float maxStationDistance = piece.Extension.ExtensionStations.First().maxStationDistance; string text2 = "Distance from the station that " + localizedName + " can be placed."; object[] array2 = new object[1]; ConfigurationManagerAttributes configurationManagerAttributes2 = new ConfigurationManagerAttributes(); num = order - 1; order = num; configurationManagerAttributes2.Order = num; array2[0] = configurationManagerAttributes2; pieceConfig4.maxStationDistance = config(group2, "Max Station Distance", maxStationDistance, new ConfigDescription(text2, (AcceptableValueBase)null, array2)); hideWhenNoneAttributes2 = new List<ConfigurationManagerAttributes>(); cfg.extensionTable.SettingChanged += ExtensionTableConfigChanged; cfg.customExtentionTable.SettingChanged += ExtensionTableConfigChanged; cfg.maxStationDistance.SettingChanged += ExtensionTableConfigChanged; ConfigurationManagerAttributes configurationManagerAttributes3 = new Conf