Decompiled source of sunnfjordheimPieces v1.0.0
sunnfjordheimPieces.dll
Decompiled a day ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using PieceManager; using ServerSync; using TMPro; using UnityEngine; using UnityEngine.UI; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.BufferedDeserialization; using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("sunnfjordheimPieces")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyProduct("sunnfjordheimPieces")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: AssemblyFileVersion("1.0.0")] [assembly: AssemblyCompany("Azathoth")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<89c61d47-d0d7-4884-900b-332b43ff8f87>Embedded] internal sealed class <89c61d47-d0d7-4884-900b-332b43ff8f87>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<89c61d47-d0d7-4884-900b-332b43ff8f87>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <7be39be6-78f7-4110-a753-45fe8fe937de>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <7be39be6-78f7-4110-a753-45fe8fe937de>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <7be39be6-78f7-4110-a753-45fe8fe937de>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [<89c61d47-d0d7-4884-900b-332b43ff8f87>Embedded] internal sealed class <22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContextAttribute : Attribute { public readonly byte Flag; public <22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContextAttribute(byte P_0) { Flag = P_0; } } } namespace sunnfjordheimPieces { [HarmonyPatch(typeof(WearNTear), "HaveSupport")] [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)] [<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)] public static class PiecesPatchSupport { private static readonly string[] SunnforheimpiecesPrefabs = new string[93] { "WCP_DARKPORTAL", "WCP_TrollHut1", "WCP_TrollHut2", "WCP_TrollHut3", "WCP_TrollHut4", "WCP_TrollHut5", "WCP_uldum_dam", "WCP_watchtower", "WCP_ZIGURAT", "WCP_TrollGate", "WCP_TrollGate1", "WCP_TrollGate2", "WCP_TrollGate3", "WCP_TrollWall", "WCP_TrollWall1", "WCP_TrollWall2", "WCP_TrollWall3", "WCP_temple_of_the_damned", "WCP_shipyard", "WCP_Necropolis", "WCP_hunter_hall", "WCP_scourge_crypt", "WCP_dwarf_blacksmith", "WCP_dwarf_altar_of_kings", "WCP_altar_of_darkness", "WCP_naga_altar_of_the_depths", "WCP_dwarf_lumber_mill", "WCP_scourge_slaughterhouse", "WCP_altar_of_elders", "WCP_mercenary_camp", "WCP_dwarf_workshop", "WCP_dwarf_aviary", "WCP_chimera_roost", "WCP_dwarf_cannon_tower", "WCP_kaldorei_shipyard", "WCP_dranei_seers_den", "WCP_scourge_graveyard", "WCP_dwarf_tower", "WCP_goblin_shipyard", "WCP_barrow_den", "WCP_kaldorei_tower_1", "WCP_kaldorei_tower_2", "WCP_orc_altar", "WCP_fountain_of_power", "WCP_orc_forge", "WCP_orc_barracks", "WCP_orc_village1", "WCP_orc_village", "WCP_goldmine", "WCP_moonwell", "WCP_scourge_catapult", "WCP_loch_modan", "WCP_ironforge", "WCP_ironforgegate", "WCP_elf_fountain", "SUNP_Blacksmithg", "SUNP_Vikinghouse", "SUNP_wizard-table", "SUNP_Darkangel", "WCP_dwarf_wall", "WCP_dranei_haven", "WCP_dranei_barracks", "WCP_high_elf_house3", "WCP_elfgate2", "WCP_elven_barracks", "WCP_kaldorei_house", "WCP_elfgate1", "WCP_Market", "WCP_high_elf_house1", "WCP_elf_spire", "WCP_highelftower", "WCP_castle_human", "WCP_human_torre", "WCP_humanhero_statue", "WCP_barrack_human", "WCP_tower_humanmage", "WCP_orc_clanhousesmall", "WCP_orc_claninn", "WCP_orc_orcclans_barracks", "WCP_orc_orcclans_farm", "WCP_orc_orcclans_forge", "WCP_orc_orcclans_guardtower", "WCP_orc_orcclans_houselarge", "WCP_orc_orcclans_huts", "WCP_orc_orcclans_ritualpit", "WCP_orc_orcclans_spirithouse", "WCP_orc_orcclans_townhall", "WCP_orc_orcclans_wolfpen", "WCP_Murlocaltar", "WCP_Murlochut", "WCP_Murlochutcluster1", "WCP_Murlochutcluster2", "WCP_Murlocshiptower" }; private const float VerticalCheckDistance = 200f; private const float LateralCheckRadius = 4f; private static void Postfix(WearNTear __instance, ref bool __result) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) if (((Object)(object)__instance == (Object)null) | __result) { return; } Vector3 position = ((Component)__instance).transform.position; RaycastHit val = default(RaycastHit); if (Physics.Raycast(position + Vector3.up * 0.5f, Vector3.down, ref val, 200f)) { string prefabName = Utils.GetPrefabName(((Component)((Component)((RaycastHit)(ref val)).collider).transform.root).gameObject); if (SunnforheimpiecesPrefabs.Contains(prefabName)) { __result = true; return; } } Collider[] array = Physics.OverlapSphere(position, 4f); if (array == null || array.Length == 0) { return; } Collider[] array2 = array; foreach (Collider val2 in array2) { string prefabName2 = Utils.GetPrefabName(((Component)((Component)val2).transform.root).gameObject); if (SunnforheimpiecesPrefabs.Contains(prefabName2)) { __result = true; break; } } } } [BepInPlugin("Azathoth.sunnfjordheimPieces", "sunnfjordheimPieces", "1.0.0")] [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)] [<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)] public class sunnfjordheimPiecesPlugin : BaseUnityPlugin { [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(0)] public enum Toggle { On = 1, Off = 0 } [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order = null; [UsedImplicitly] public bool? Browsable = null; [<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(2)] [UsedImplicitly] public string Category = null; [UsedImplicitly] [<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(new byte[] { 2, 1 })] public Action<ConfigEntryBase> CustomDrawer = null; } [<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)] private class AcceptableShortcuts : AcceptableValueBase { public AcceptableShortcuts() : base(typeof(KeyboardShortcut)) { } public override object Clamp(object value) { return value; } public override bool IsValid(object value) { return true; } public override string ToDescriptionString() { return "# Acceptable values: " + string.Join(", ", UnityInput.Current.SupportedKeyCodes); } } internal const string ModName = "sunnfjordheimPieces"; internal const string ModVersion = "1.0.0"; internal const string Author = "Azathoth"; private const string ModGUID = "Azathoth.sunnfjordheimPieces"; private static string ConfigFileName = "Azathoth.sunnfjordheimPieces.cfg"; private static string ConfigFileFullPath; internal static string ConnectionError; private readonly Harmony _harmony = new Harmony("Azathoth.sunnfjordheimPieces"); public static readonly ManualLogSource sunnfjordheimPiecesLogger; private static readonly ConfigSync ConfigSync; private static ConfigEntry<Toggle> _serverConfigLocked; public void Awake() { Localizer.Load(); _serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only."); ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked); BuildPiece.ConfigurationEnabled = true; BuildPiece buildPiece = new BuildPiece("warcrafpieces", "WCP_DARKPORTAL"); buildPiece.Name.English("Dark Portal"); buildPiece.Description.English("A mysterious ancient portal from distant lands."); buildPiece.RequiredItems.Add("Wood", 200, recover: false); buildPiece.RequiredItems.Add("FineWood", 200, recover: false); buildPiece.RequiredItems.Add("Stone", 100, recover: false); buildPiece.RequiredItems.Add("Coal", 20, recover: false); buildPiece.Category.Set("Warcraft Pieces"); buildPiece.Crafting.Set(CraftingTable.Workbench); buildPiece.Tool.Add("Hammer"); buildPiece.SpecialProperties.NoConfig = false; buildPiece.SpecialProperties.AdminOnly = true; buildPiece.Snapshot(); BuildPiece buildPiece2 = new BuildPiece("warcrafpieces", "WCP_TrollHut1"); buildPiece2.Name.English("Troll Hut I"); buildPiece2.Description.English("A savage troll hut built of crude wood and bone."); buildPiece2.RequiredItems.Add("Wood", 200, recover: false); buildPiece2.RequiredItems.Add("FineWood", 200, recover: false); buildPiece2.RequiredItems.Add("Stone", 100, recover: false); buildPiece2.RequiredItems.Add("Coal", 20, recover: false); buildPiece2.Category.Set("Warcraft Pieces"); buildPiece2.Crafting.Set(CraftingTable.Workbench); buildPiece2.Tool.Add("Hammer"); buildPiece2.SpecialProperties.NoConfig = false; buildPiece2.SpecialProperties.AdminOnly = true; buildPiece2.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece2.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece3 = new BuildPiece("warcrafpieces", "WCP_TrollHut2"); buildPiece3.Name.English("Troll Hut II"); buildPiece3.Description.English("A reinforced hut crafted by forest trolls."); buildPiece3.RequiredItems.Add("Wood", 200, recover: false); buildPiece3.RequiredItems.Add("FineWood", 200, recover: false); buildPiece3.RequiredItems.Add("Stone", 100, recover: false); buildPiece3.RequiredItems.Add("Coal", 20, recover: false); buildPiece3.Category.Set("Warcraft Pieces"); buildPiece3.Crafting.Set(CraftingTable.Workbench); buildPiece3.Tool.Add("Hammer"); buildPiece3.SpecialProperties.NoConfig = false; buildPiece3.SpecialProperties.AdminOnly = true; buildPiece3.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece3.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece4 = new BuildPiece("warcrafpieces", "WCP_TrollHut3"); buildPiece4.Name.English("Troll Hut III"); buildPiece4.Description.English("A fortified troll shelter built for war."); buildPiece4.RequiredItems.Add("Wood", 200, recover: false); buildPiece4.RequiredItems.Add("FineWood", 200, recover: false); buildPiece4.RequiredItems.Add("Stone", 100, recover: false); buildPiece4.RequiredItems.Add("Coal", 20, recover: false); buildPiece4.Category.Set("Warcraft Pieces"); buildPiece4.Crafting.Set(CraftingTable.Workbench); buildPiece4.Tool.Add("Hammer"); buildPiece4.SpecialProperties.NoConfig = false; buildPiece4.SpecialProperties.AdminOnly = true; buildPiece4.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece4.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece5 = new BuildPiece("warcrafpieces", "WCP_TrollHut4"); buildPiece5.Name.English("Troll Hut IV"); buildPiece5.Description.English("A warlike troll hut decorated with tribal sigils."); buildPiece5.RequiredItems.Add("Wood", 200, recover: false); buildPiece5.RequiredItems.Add("FineWood", 200, recover: false); buildPiece5.RequiredItems.Add("Stone", 100, recover: false); buildPiece5.RequiredItems.Add("Coal", 20, recover: false); buildPiece5.Category.Set("Warcraft Pieces"); buildPiece5.Crafting.Set(CraftingTable.Workbench); buildPiece5.Tool.Add("Hammer"); buildPiece5.SpecialProperties.NoConfig = false; buildPiece5.SpecialProperties.AdminOnly = true; buildPiece5.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece5.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece6 = new BuildPiece("warcrafpieces", "WCP_TrollHut5"); buildPiece6.Name.English("Troll Hut V"); buildPiece6.Description.English("A formidable troll structure built for chieftains."); buildPiece6.RequiredItems.Add("Wood", 200, recover: false); buildPiece6.RequiredItems.Add("FineWood", 200, recover: false); buildPiece6.RequiredItems.Add("Stone", 100, recover: false); buildPiece6.RequiredItems.Add("Coal", 20, recover: false); buildPiece6.Category.Set("Warcraft Pieces"); buildPiece6.Crafting.Set(CraftingTable.Workbench); buildPiece6.Tool.Add("Hammer"); buildPiece6.SpecialProperties.NoConfig = false; buildPiece6.SpecialProperties.AdminOnly = true; buildPiece6.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece6.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece7 = new BuildPiece("warcrafpieces", "WCP_uldum_dam"); buildPiece7.Name.English("Uldum Dam"); buildPiece7.Description.English("A colossal ancient dam engineered by forgotten civilizations."); buildPiece7.RequiredItems.Add("Wood", 200, recover: false); buildPiece7.RequiredItems.Add("FineWood", 200, recover: false); buildPiece7.RequiredItems.Add("Stone", 100, recover: false); buildPiece7.RequiredItems.Add("Coal", 20, recover: false); buildPiece7.Category.Set("Warcraft Pieces"); buildPiece7.Crafting.Set(CraftingTable.Workbench); buildPiece7.Tool.Add("Hammer"); buildPiece7.SpecialProperties.NoConfig = false; buildPiece7.SpecialProperties.AdminOnly = true; buildPiece7.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece7.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece8 = new BuildPiece("warcrafpieces", "WCP_watchtower"); buildPiece8.Name.English("Watch Tower"); buildPiece8.Description.English("A watch tower used to scout foe movements."); buildPiece8.RequiredItems.Add("Wood", 200, recover: false); buildPiece8.RequiredItems.Add("FineWood", 200, recover: false); buildPiece8.RequiredItems.Add("Stone", 100, recover: false); buildPiece8.RequiredItems.Add("Coal", 20, recover: false); buildPiece8.Category.Set("Warcraft Pieces"); buildPiece8.Crafting.Set(CraftingTable.Workbench); buildPiece8.Tool.Add("Hammer"); buildPiece8.SpecialProperties.NoConfig = false; buildPiece8.SpecialProperties.AdminOnly = true; buildPiece8.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece8.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece9 = new BuildPiece("warcrafpieces", "WCP_high_elf_house2"); buildPiece9.Name.English("High Elf House II"); buildPiece9.Description.English("A refined high elven residence adorned with arcane motifs."); buildPiece9.RequiredItems.Add("Wood", 200, recover: false); buildPiece9.RequiredItems.Add("FineWood", 200, recover: false); buildPiece9.RequiredItems.Add("Stone", 100, recover: false); buildPiece9.RequiredItems.Add("Coal", 20, recover: false); buildPiece9.Category.Set("Warcraft Pieces"); buildPiece9.Crafting.Set(CraftingTable.Workbench); buildPiece9.Tool.Add("Hammer"); buildPiece9.SpecialProperties.NoConfig = false; buildPiece9.SpecialProperties.AdminOnly = true; buildPiece9.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece9.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece10 = new BuildPiece("warcrafpieces", "WCP_ZIGURAT"); buildPiece10.Name.English("Ziggurat"); buildPiece10.Description.English("An imposing necromantic fortress of war and ice."); buildPiece10.RequiredItems.Add("Wood", 200, recover: false); buildPiece10.RequiredItems.Add("FineWood", 200, recover: false); buildPiece10.RequiredItems.Add("Stone", 100, recover: false); buildPiece10.RequiredItems.Add("Coal", 20, recover: false); buildPiece10.Category.Set("Warcraft Pieces"); buildPiece10.Crafting.Set(CraftingTable.Workbench); buildPiece10.Tool.Add("Hammer"); buildPiece10.SpecialProperties.NoConfig = false; buildPiece10.SpecialProperties.AdminOnly = true; buildPiece10.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece10.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece11 = new BuildPiece("warcrafpieces", "WCP_TrollGate"); buildPiece11.Name.English("Troll Gate"); buildPiece11.Description.English("A primitive troll gate reinforced with crude wood."); buildPiece11.RequiredItems.Add("Wood", 200, recover: false); buildPiece11.RequiredItems.Add("FineWood", 200, recover: false); buildPiece11.RequiredItems.Add("Stone", 100, recover: false); buildPiece11.RequiredItems.Add("Coal", 20, recover: false); buildPiece11.Category.Set("Warcraft Pieces"); buildPiece11.Crafting.Set(CraftingTable.Workbench); buildPiece11.Tool.Add("Hammer"); buildPiece11.SpecialProperties.NoConfig = false; buildPiece11.SpecialProperties.AdminOnly = true; buildPiece11.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece11.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece12 = new BuildPiece("warcrafpieces", "WCP_TrollGate1"); buildPiece12.Name.English("Troll Gate I"); buildPiece12.Description.English("A wooden troll gate decorated with tribal markings."); buildPiece12.RequiredItems.Add("Wood", 200, recover: false); buildPiece12.RequiredItems.Add("FineWood", 200, recover: false); buildPiece12.RequiredItems.Add("Stone", 100, recover: false); buildPiece12.RequiredItems.Add("Coal", 20, recover: false); buildPiece12.Category.Set("Warcraft Pieces"); buildPiece12.Crafting.Set(CraftingTable.Workbench); buildPiece12.Tool.Add("Hammer"); buildPiece12.SpecialProperties.NoConfig = false; buildPiece12.SpecialProperties.AdminOnly = true; buildPiece12.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece12.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece13 = new BuildPiece("warcrafpieces", "WCP_TrollGate2"); buildPiece13.Name.English("Troll Gate II"); buildPiece13.Description.English("A reinforced troll gate built for war."); buildPiece13.RequiredItems.Add("Wood", 200, recover: false); buildPiece13.RequiredItems.Add("FineWood", 200, recover: false); buildPiece13.RequiredItems.Add("Stone", 100, recover: false); buildPiece13.RequiredItems.Add("Coal", 20, recover: false); buildPiece13.Category.Set("Warcraft Pieces"); buildPiece13.Crafting.Set(CraftingTable.Workbench); buildPiece13.Tool.Add("Hammer"); buildPiece13.SpecialProperties.NoConfig = false; buildPiece13.SpecialProperties.AdminOnly = true; buildPiece13.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece13.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece14 = new BuildPiece("warcrafpieces", "WCP_TrollGate3"); buildPiece14.Name.English("Troll Gate III"); buildPiece14.Description.English("A large tribal troll gate carved with ancient sigils."); buildPiece14.RequiredItems.Add("Wood", 200, recover: false); buildPiece14.RequiredItems.Add("FineWood", 200, recover: false); buildPiece14.RequiredItems.Add("Stone", 100, recover: false); buildPiece14.RequiredItems.Add("Coal", 20, recover: false); buildPiece14.Category.Set("Warcraft Pieces"); buildPiece14.Crafting.Set(CraftingTable.Workbench); buildPiece14.Tool.Add("Hammer"); buildPiece14.SpecialProperties.NoConfig = false; buildPiece14.SpecialProperties.AdminOnly = true; buildPiece14.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece14.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece15 = new BuildPiece("warcrafpieces", "WCP_TrollWall"); buildPiece15.Name.English("Troll Wall"); buildPiece15.Description.English("A crude troll wall built from thick wooden logs."); buildPiece15.RequiredItems.Add("Wood", 200, recover: false); buildPiece15.RequiredItems.Add("FineWood", 200, recover: false); buildPiece15.RequiredItems.Add("Stone", 100, recover: false); buildPiece15.RequiredItems.Add("Coal", 20, recover: false); buildPiece15.Category.Set("Warcraft Pieces"); buildPiece15.Crafting.Set(CraftingTable.Workbench); buildPiece15.Tool.Add("Hammer"); buildPiece15.SpecialProperties.NoConfig = false; buildPiece15.SpecialProperties.AdminOnly = true; buildPiece15.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece15.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece16 = new BuildPiece("warcrafpieces", "WCP_TrollWall1"); buildPiece16.Name.English("Troll Wall I"); buildPiece16.Description.English("A reinforced troll wall assembled from forest timber."); buildPiece16.RequiredItems.Add("Wood", 200, recover: false); buildPiece16.RequiredItems.Add("FineWood", 200, recover: false); buildPiece16.RequiredItems.Add("Stone", 100, recover: false); buildPiece16.RequiredItems.Add("Coal", 20, recover: false); buildPiece16.Category.Set("Warcraft Pieces"); buildPiece16.Crafting.Set(CraftingTable.Workbench); buildPiece16.Tool.Add("Hammer"); buildPiece16.SpecialProperties.NoConfig = false; buildPiece16.SpecialProperties.AdminOnly = true; buildPiece16.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece16.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece17 = new BuildPiece("warcrafpieces", "WCP_TrollWall2"); buildPiece17.Name.English("Troll Wall II"); buildPiece17.Description.English("A thick troll barricade prepared for tribal warfare."); buildPiece17.RequiredItems.Add("Wood", 200, recover: false); buildPiece17.RequiredItems.Add("FineWood", 200, recover: false); buildPiece17.RequiredItems.Add("Stone", 100, recover: false); buildPiece17.RequiredItems.Add("Coal", 20, recover: false); buildPiece17.Category.Set("Warcraft Pieces"); buildPiece17.Crafting.Set(CraftingTable.Workbench); buildPiece17.Tool.Add("Hammer"); buildPiece17.SpecialProperties.NoConfig = false; buildPiece17.SpecialProperties.AdminOnly = true; buildPiece17.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece17.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece18 = new BuildPiece("warcrafpieces", "WCP_TrollWall3"); buildPiece18.Name.English("Troll Wall III"); buildPiece18.Description.English("A massive troll wall fit to defend an entire tribe."); buildPiece18.RequiredItems.Add("Wood", 200, recover: false); buildPiece18.RequiredItems.Add("FineWood", 200, recover: false); buildPiece18.RequiredItems.Add("Stone", 100, recover: false); buildPiece18.RequiredItems.Add("Coal", 20, recover: false); buildPiece18.Category.Set("Warcraft Pieces"); buildPiece18.Crafting.Set(CraftingTable.Workbench); buildPiece18.Tool.Add("Hammer"); buildPiece18.SpecialProperties.NoConfig = false; buildPiece18.SpecialProperties.AdminOnly = true; buildPiece18.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece18.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece19 = new BuildPiece("warcrafpieces", "WCP_temple_of_the_damned"); buildPiece19.Name.English("Temple of the Damned"); buildPiece19.Description.English("A cursed temple infused with necromantic energy."); buildPiece19.RequiredItems.Add("Wood", 200, recover: false); buildPiece19.RequiredItems.Add("FineWood", 200, recover: false); buildPiece19.RequiredItems.Add("Stone", 100, recover: false); buildPiece19.RequiredItems.Add("Coal", 20, recover: false); buildPiece19.Category.Set("Warcraft Pieces"); buildPiece19.Crafting.Set(CraftingTable.Workbench); buildPiece19.Tool.Add("Hammer"); buildPiece19.SpecialProperties.NoConfig = false; buildPiece19.SpecialProperties.AdminOnly = true; buildPiece19.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece19.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece20 = new BuildPiece("warcrafpieces", "WCP_shipyard"); buildPiece20.Name.English("Shipyard"); buildPiece20.Description.English("A grand shipyard used to construct powerful warships."); buildPiece20.RequiredItems.Add("Wood", 200, recover: false); buildPiece20.RequiredItems.Add("FineWood", 200, recover: false); buildPiece20.RequiredItems.Add("Stone", 100, recover: false); buildPiece20.RequiredItems.Add("Coal", 20, recover: false); buildPiece20.Category.Set("Warcraft Pieces"); buildPiece20.Crafting.Set(CraftingTable.Workbench); buildPiece20.Tool.Add("Hammer"); buildPiece20.SpecialProperties.NoConfig = false; buildPiece20.SpecialProperties.AdminOnly = true; buildPiece20.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece20.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece21 = new BuildPiece("warcrafpieces", "WCP_Necropolis"); buildPiece21.Name.English("Necropolis"); buildPiece21.Description.English("A floating fortress of death and plague."); buildPiece21.RequiredItems.Add("Wood", 200, recover: false); buildPiece21.RequiredItems.Add("FineWood", 200, recover: false); buildPiece21.RequiredItems.Add("Stone", 100, recover: false); buildPiece21.RequiredItems.Add("Coal", 20, recover: false); buildPiece21.Category.Set("Warcraft Pieces"); buildPiece21.Crafting.Set(CraftingTable.Workbench); buildPiece21.Tool.Add("Hammer"); buildPiece21.SpecialProperties.NoConfig = false; buildPiece21.SpecialProperties.AdminOnly = true; buildPiece21.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece21.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece22 = new BuildPiece("warcrafpieces", "WCP_hunter_hall"); buildPiece22.Name.English("Hunter Hall"); buildPiece22.Description.English("A guild hall for expert trackers and hunters."); buildPiece22.RequiredItems.Add("Wood", 200, recover: false); buildPiece22.RequiredItems.Add("FineWood", 200, recover: false); buildPiece22.RequiredItems.Add("Stone", 100, recover: false); buildPiece22.RequiredItems.Add("Coal", 20, recover: false); buildPiece22.Category.Set("Warcraft Pieces"); buildPiece22.Crafting.Set(CraftingTable.Workbench); buildPiece22.Tool.Add("Hammer"); buildPiece22.SpecialProperties.NoConfig = false; buildPiece22.SpecialProperties.AdminOnly = true; buildPiece22.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece22.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece23 = new BuildPiece("warcrafpieces", "WCP_scourge_crypt"); buildPiece23.Name.English("Scourge Crypt"); buildPiece23.Description.English("A crypt entombing the soldiers of the undead scourge."); buildPiece23.RequiredItems.Add("Wood", 200, recover: false); buildPiece23.RequiredItems.Add("FineWood", 200, recover: false); buildPiece23.RequiredItems.Add("Stone", 100, recover: false); buildPiece23.RequiredItems.Add("Coal", 20, recover: false); buildPiece23.Category.Set("Warcraft Pieces"); buildPiece23.Crafting.Set(CraftingTable.Workbench); buildPiece23.Tool.Add("Hammer"); buildPiece23.SpecialProperties.NoConfig = false; buildPiece23.SpecialProperties.AdminOnly = true; buildPiece23.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece23.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece24 = new BuildPiece("warcrafpieces", "WCP_dwarf_blacksmith"); buildPiece24.Name.English("Dwarven Blacksmith"); buildPiece24.Description.English("A dwarven forge dedicated to crafting legendary arms."); buildPiece24.RequiredItems.Add("Wood", 200, recover: false); buildPiece24.RequiredItems.Add("FineWood", 200, recover: false); buildPiece24.RequiredItems.Add("Stone", 100, recover: false); buildPiece24.RequiredItems.Add("Coal", 20, recover: false); buildPiece24.Category.Set("Warcraft Pieces"); buildPiece24.Crafting.Set(CraftingTable.Workbench); buildPiece24.Tool.Add("Hammer"); buildPiece24.SpecialProperties.NoConfig = false; buildPiece24.SpecialProperties.AdminOnly = true; buildPiece24.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece24.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece25 = new BuildPiece("warcrafpieces", "WCP_dwarf_altar_of_kings"); buildPiece25.Name.English("Altar of Kings"); buildPiece25.Description.English("A sacred dwarven altar built to honor past monarchs."); buildPiece25.RequiredItems.Add("Wood", 200, recover: false); buildPiece25.RequiredItems.Add("FineWood", 200, recover: false); buildPiece25.RequiredItems.Add("Stone", 100, recover: false); buildPiece25.RequiredItems.Add("Coal", 20, recover: false); buildPiece25.Category.Set("Warcraft Pieces"); buildPiece25.Crafting.Set(CraftingTable.Workbench); buildPiece25.Tool.Add("Hammer"); buildPiece25.SpecialProperties.NoConfig = false; buildPiece25.SpecialProperties.AdminOnly = true; buildPiece25.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece25.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece26 = new BuildPiece("warcrafpieces", "WCP_altar_of_darkness"); buildPiece26.Name.English("Altar of Darkness"); buildPiece26.Description.English("An altar devoted to shadow magic and infernal rites."); buildPiece26.RequiredItems.Add("Wood", 200, recover: false); buildPiece26.RequiredItems.Add("FineWood", 200, recover: false); buildPiece26.RequiredItems.Add("Stone", 100, recover: false); buildPiece26.RequiredItems.Add("Coal", 20, recover: false); buildPiece26.Category.Set("Warcraft Pieces"); buildPiece26.Crafting.Set(CraftingTable.Workbench); buildPiece26.Tool.Add("Hammer"); buildPiece26.SpecialProperties.NoConfig = false; buildPiece26.SpecialProperties.AdminOnly = true; buildPiece26.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece26.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece27 = new BuildPiece("warcrafpieces", "WCP_naga_altar_of_the_depths"); buildPiece27.Name.English("Naga Altar of the Depths"); buildPiece27.Description.English("A deep sea altar devoted to ancient Naga magic."); buildPiece27.RequiredItems.Add("Wood", 200, recover: false); buildPiece27.RequiredItems.Add("FineWood", 200, recover: false); buildPiece27.RequiredItems.Add("Stone", 100, recover: false); buildPiece27.RequiredItems.Add("Coal", 20, recover: false); buildPiece27.Category.Set("Warcraft Pieces"); buildPiece27.Crafting.Set(CraftingTable.Workbench); buildPiece27.Tool.Add("Hammer"); buildPiece27.SpecialProperties.NoConfig = false; buildPiece27.SpecialProperties.AdminOnly = true; buildPiece27.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece27.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece28 = new BuildPiece("warcrafpieces", "WCP_dwarf_lumber_mill"); buildPiece28.Name.English("Dwarf Lumber Mill"); buildPiece28.Description.English("A stout dwarven mill for refining timber."); buildPiece28.RequiredItems.Add("Wood", 200, recover: false); buildPiece28.RequiredItems.Add("FineWood", 200, recover: false); buildPiece28.RequiredItems.Add("Stone", 100, recover: false); buildPiece28.RequiredItems.Add("Coal", 20, recover: false); buildPiece28.Category.Set("Warcraft Pieces"); buildPiece28.Crafting.Set(CraftingTable.Workbench); buildPiece28.Tool.Add("Hammer"); buildPiece28.SpecialProperties.NoConfig = false; buildPiece28.SpecialProperties.AdminOnly = true; buildPiece28.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece28.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece29 = new BuildPiece("warcrafpieces", "WCP_scourge_slaughterhouse"); buildPiece29.Name.English("Scourge Slaughterhouse"); buildPiece29.Description.English("A grim slaughterhouse used by the undead scourge."); buildPiece29.RequiredItems.Add("Wood", 200, recover: false); buildPiece29.RequiredItems.Add("FineWood", 200, recover: false); buildPiece29.RequiredItems.Add("Stone", 100, recover: false); buildPiece29.RequiredItems.Add("Coal", 20, recover: false); buildPiece29.Category.Set("Warcraft Pieces"); buildPiece29.Crafting.Set(CraftingTable.Workbench); buildPiece29.Tool.Add("Hammer"); buildPiece29.SpecialProperties.NoConfig = false; buildPiece29.SpecialProperties.AdminOnly = true; buildPiece29.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece29.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece30 = new BuildPiece("warcrafpieces", "WCP_altar_of_elders"); buildPiece30.Name.English("Altar of Elders"); buildPiece30.Description.English("A sacred altar honoring ancient spirits of nature."); buildPiece30.RequiredItems.Add("Wood", 200, recover: false); buildPiece30.RequiredItems.Add("FineWood", 200, recover: false); buildPiece30.RequiredItems.Add("Stone", 100, recover: false); buildPiece30.RequiredItems.Add("Coal", 20, recover: false); buildPiece30.Category.Set("Warcraft Pieces"); buildPiece30.Crafting.Set(CraftingTable.Workbench); buildPiece30.Tool.Add("Hammer"); buildPiece30.SpecialProperties.NoConfig = false; buildPiece30.SpecialProperties.AdminOnly = true; buildPiece30.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece30.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece31 = new BuildPiece("warcrafpieces", "WCP_mercenary_camp"); buildPiece31.Name.English("Mercenary Camp"); buildPiece31.Description.English("A camp where battle-hardened mercenaries gather."); buildPiece31.RequiredItems.Add("Wood", 200, recover: false); buildPiece31.RequiredItems.Add("FineWood", 200, recover: false); buildPiece31.RequiredItems.Add("Stone", 100, recover: false); buildPiece31.RequiredItems.Add("Coal", 20, recover: false); buildPiece31.Category.Set("Warcraft Pieces"); buildPiece31.Crafting.Set(CraftingTable.Workbench); buildPiece31.Tool.Add("Hammer"); buildPiece31.SpecialProperties.NoConfig = false; buildPiece31.SpecialProperties.AdminOnly = true; buildPiece31.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece31.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece32 = new BuildPiece("warcrafpieces", "WCP_dwarf_workshop"); buildPiece32.Name.English("Dwarf Workshop"); buildPiece32.Description.English("A hardy dwarven workshop brimming with tools."); buildPiece32.RequiredItems.Add("Wood", 200, recover: false); buildPiece32.RequiredItems.Add("FineWood", 200, recover: false); buildPiece32.RequiredItems.Add("Stone", 100, recover: false); buildPiece32.RequiredItems.Add("Coal", 20, recover: false); buildPiece32.Category.Set("Warcraft Pieces"); buildPiece32.Crafting.Set(CraftingTable.Workbench); buildPiece32.Tool.Add("Hammer"); buildPiece32.SpecialProperties.NoConfig = false; buildPiece32.SpecialProperties.AdminOnly = true; buildPiece32.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece32.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece33 = new BuildPiece("warcrafpieces", "WCP_dwarf_aviary"); buildPiece33.Name.English("Dwarf Aviary"); buildPiece33.Description.English("A dwarven aviary housing armored gryphons."); buildPiece33.RequiredItems.Add("Wood", 200, recover: false); buildPiece33.RequiredItems.Add("FineWood", 200, recover: false); buildPiece33.RequiredItems.Add("Stone", 100, recover: false); buildPiece33.RequiredItems.Add("Coal", 20, recover: false); buildPiece33.Category.Set("Warcraft Pieces"); buildPiece33.Crafting.Set(CraftingTable.Workbench); buildPiece33.Tool.Add("Hammer"); buildPiece33.SpecialProperties.NoConfig = false; buildPiece33.SpecialProperties.AdminOnly = true; buildPiece33.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece33.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece34 = new BuildPiece("warcrafpieces", "WCP_chimera_roost"); buildPiece34.Name.English("Chimera Roost"); buildPiece34.Description.English("A mystical roost for powerful chimeras."); buildPiece34.RequiredItems.Add("Wood", 200, recover: false); buildPiece34.RequiredItems.Add("FineWood", 200, recover: false); buildPiece34.RequiredItems.Add("Stone", 100, recover: false); buildPiece34.RequiredItems.Add("Coal", 20, recover: false); buildPiece34.Category.Set("Warcraft Pieces"); buildPiece34.Crafting.Set(CraftingTable.Workbench); buildPiece34.Tool.Add("Hammer"); buildPiece34.SpecialProperties.NoConfig = false; buildPiece34.SpecialProperties.AdminOnly = true; buildPiece34.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece34.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece35 = new BuildPiece("warcrafpieces", "WCP_dwarf_cannon_tower"); buildPiece35.Name.English("Dwarf Cannon Tower"); buildPiece35.Description.English("A dwarven tower equipped with heavy cannons."); buildPiece35.RequiredItems.Add("Wood", 200, recover: false); buildPiece35.RequiredItems.Add("FineWood", 200, recover: false); buildPiece35.RequiredItems.Add("Stone", 100, recover: false); buildPiece35.RequiredItems.Add("Coal", 20, recover: false); buildPiece35.Category.Set("Warcraft Pieces"); buildPiece35.Crafting.Set(CraftingTable.Workbench); buildPiece35.Tool.Add("Hammer"); buildPiece35.SpecialProperties.NoConfig = false; buildPiece35.SpecialProperties.AdminOnly = true; buildPiece35.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece35.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece36 = new BuildPiece("warcrafpieces", "WCP_kaldorei_shipyard"); buildPiece36.Name.English("Kaldorei Shipyard"); buildPiece36.Description.English("A moonlit shipyard built by the ancient Kaldorei."); buildPiece36.RequiredItems.Add("Wood", 200, recover: false); buildPiece36.RequiredItems.Add("FineWood", 200, recover: false); buildPiece36.RequiredItems.Add("Stone", 100, recover: false); buildPiece36.RequiredItems.Add("Coal", 20, recover: false); buildPiece36.Category.Set("Warcraft Pieces"); buildPiece36.Crafting.Set(CraftingTable.Workbench); buildPiece36.Tool.Add("Hammer"); buildPiece36.SpecialProperties.NoConfig = false; buildPiece36.SpecialProperties.AdminOnly = true; buildPiece36.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece36.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece37 = new BuildPiece("warcrafpieces", "WCP_dranei_seers_den"); buildPiece37.Name.English("Draenei Seer's Den"); buildPiece37.Description.English("A sanctum for wise Draenei seers."); buildPiece37.RequiredItems.Add("Wood", 200, recover: false); buildPiece37.RequiredItems.Add("FineWood", 200, recover: false); buildPiece37.RequiredItems.Add("Stone", 100, recover: false); buildPiece37.RequiredItems.Add("Coal", 20, recover: false); buildPiece37.Category.Set("Warcraft Pieces"); buildPiece37.Crafting.Set(CraftingTable.Workbench); buildPiece37.Tool.Add("Hammer"); buildPiece37.SpecialProperties.NoConfig = false; buildPiece37.SpecialProperties.AdminOnly = true; buildPiece37.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece37.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece38 = new BuildPiece("warcrafpieces", "WCP_scourge_graveyard"); buildPiece38.Name.English("Scourge Graveyard"); buildPiece38.Description.English("A haunting graveyard controlled by the scourge."); buildPiece38.RequiredItems.Add("Wood", 200, recover: false); buildPiece38.RequiredItems.Add("FineWood", 200, recover: false); buildPiece38.RequiredItems.Add("Stone", 100, recover: false); buildPiece38.RequiredItems.Add("Coal", 20, recover: false); buildPiece38.Category.Set("Warcraft Pieces"); buildPiece38.Crafting.Set(CraftingTable.Workbench); buildPiece38.Tool.Add("Hammer"); buildPiece38.SpecialProperties.NoConfig = false; buildPiece38.SpecialProperties.AdminOnly = true; buildPiece38.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece38.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece39 = new BuildPiece("warcrafpieces", "WCP_dwarf_tower"); buildPiece39.Name.English("Dwarf Tower"); buildPiece39.Description.English("A commanding dwarven tower overseeing vast lands."); buildPiece39.RequiredItems.Add("Wood", 200, recover: false); buildPiece39.RequiredItems.Add("FineWood", 200, recover: false); buildPiece39.RequiredItems.Add("Stone", 100, recover: false); buildPiece39.RequiredItems.Add("Coal", 20, recover: false); buildPiece39.Category.Set("Warcraft Pieces"); buildPiece39.Crafting.Set(CraftingTable.Workbench); buildPiece39.Tool.Add("Hammer"); buildPiece39.SpecialProperties.NoConfig = false; buildPiece39.SpecialProperties.AdminOnly = true; buildPiece39.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece39.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece40 = new BuildPiece("warcrafpieces", "WCP_goblin_shipyard"); buildPiece40.Name.English("Goblin Shipyard"); buildPiece40.Description.English("An explosive shipyard built with questionable engineering."); buildPiece40.RequiredItems.Add("Wood", 200, recover: false); buildPiece40.RequiredItems.Add("FineWood", 200, recover: false); buildPiece40.RequiredItems.Add("Stone", 100, recover: false); buildPiece40.RequiredItems.Add("Coal", 20, recover: false); buildPiece40.Category.Set("Warcraft Pieces"); buildPiece40.Crafting.Set(CraftingTable.Workbench); buildPiece40.Tool.Add("Hammer"); buildPiece40.SpecialProperties.NoConfig = false; buildPiece40.SpecialProperties.AdminOnly = true; buildPiece40.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece40.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece41 = new BuildPiece("warcrafpieces", "WCP_barrow_den"); buildPiece41.Name.English("Barrow Den"); buildPiece41.Description.English("An ancient den tied to druidic and kaldorei magic."); buildPiece41.RequiredItems.Add("Wood", 200, recover: false); buildPiece41.RequiredItems.Add("FineWood", 200, recover: false); buildPiece41.RequiredItems.Add("Stone", 100, recover: false); buildPiece41.RequiredItems.Add("Coal", 20, recover: false); buildPiece41.Category.Set("Warcraft Pieces"); buildPiece41.Crafting.Set(CraftingTable.Workbench); buildPiece41.Tool.Add("Hammer"); buildPiece41.SpecialProperties.NoConfig = false; buildPiece41.SpecialProperties.AdminOnly = true; buildPiece41.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece41.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece42 = new BuildPiece("warcrafpieces", "WCP_kaldorei_tower_1"); buildPiece42.Name.English("Kaldorei Tower I"); buildPiece42.Description.English("A moonlit defensive tower of the Kaldorei."); buildPiece42.RequiredItems.Add("Wood", 200, recover: false); buildPiece42.RequiredItems.Add("FineWood", 200, recover: false); buildPiece42.RequiredItems.Add("Stone", 100, recover: false); buildPiece42.RequiredItems.Add("Coal", 20, recover: false); buildPiece42.Category.Set("Warcraft Pieces"); buildPiece42.Crafting.Set(CraftingTable.Workbench); buildPiece42.Tool.Add("Hammer"); buildPiece42.SpecialProperties.NoConfig = false; buildPiece42.SpecialProperties.AdminOnly = true; buildPiece42.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece42.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece43 = new BuildPiece("warcrafpieces", "WCP_kaldorei_tower_2"); buildPiece43.Name.English("Kaldorei Tower II"); buildPiece43.Description.English("An advanced defensive tower of the Kaldorei."); buildPiece43.RequiredItems.Add("Wood", 200, recover: false); buildPiece43.RequiredItems.Add("FineWood", 200, recover: false); buildPiece43.RequiredItems.Add("Stone", 100, recover: false); buildPiece43.RequiredItems.Add("Coal", 20, recover: false); buildPiece43.Category.Set("Warcraft Pieces"); buildPiece43.Crafting.Set(CraftingTable.Workbench); buildPiece43.Tool.Add("Hammer"); buildPiece43.SpecialProperties.NoConfig = false; buildPiece43.SpecialProperties.AdminOnly = true; buildPiece43.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece43.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece44 = new BuildPiece("warcrafpieces", "WCP_orc_altar"); buildPiece44.Name.English("Orc Altar"); buildPiece44.Description.English("A brutal altar honoring the spirits of the Horde."); buildPiece44.RequiredItems.Add("Wood", 200, recover: false); buildPiece44.RequiredItems.Add("FineWood", 200, recover: false); buildPiece44.RequiredItems.Add("Stone", 100, recover: false); buildPiece44.RequiredItems.Add("Coal", 20, recover: false); buildPiece44.Category.Set("Warcraft Pieces"); buildPiece44.Crafting.Set(CraftingTable.Workbench); buildPiece44.Tool.Add("Hammer"); buildPiece44.SpecialProperties.NoConfig = false; buildPiece44.SpecialProperties.AdminOnly = true; buildPiece44.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece44.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece45 = new BuildPiece("warcrafpieces", "WCP_fountain_of_power"); buildPiece45.Name.English("Fountain of Power"); buildPiece45.Description.English("A mystical fountain radiating raw magical energy."); buildPiece45.RequiredItems.Add("Wood", 200, recover: false); buildPiece45.RequiredItems.Add("FineWood", 200, recover: false); buildPiece45.RequiredItems.Add("Stone", 100, recover: false); buildPiece45.RequiredItems.Add("Coal", 20, recover: false); buildPiece45.Category.Set("Warcraft Pieces"); buildPiece45.Crafting.Set(CraftingTable.Workbench); buildPiece45.Tool.Add("Hammer"); buildPiece45.SpecialProperties.NoConfig = false; buildPiece45.SpecialProperties.AdminOnly = true; buildPiece45.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece45.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece46 = new BuildPiece("warcrafpieces", "WCP_orc_forge"); buildPiece46.Name.English("Orc Forge"); buildPiece46.Description.English("A crude but powerful forge of the Orc clans."); buildPiece46.RequiredItems.Add("Wood", 200, recover: false); buildPiece46.RequiredItems.Add("FineWood", 200, recover: false); buildPiece46.RequiredItems.Add("Stone", 100, recover: false); buildPiece46.RequiredItems.Add("Coal", 20, recover: false); buildPiece46.Category.Set("Warcraft Pieces"); buildPiece46.Crafting.Set(CraftingTable.Workbench); buildPiece46.Tool.Add("Hammer"); buildPiece46.SpecialProperties.NoConfig = false; buildPiece46.SpecialProperties.AdminOnly = true; buildPiece46.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece46.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece47 = new BuildPiece("warcrafpieces", "WCP_orc_barracks"); buildPiece47.Name.English("Orc Barracks"); buildPiece47.Description.English("A barracks used to train fierce Orc warriors."); buildPiece47.RequiredItems.Add("Wood", 200, recover: false); buildPiece47.RequiredItems.Add("FineWood", 200, recover: false); buildPiece47.RequiredItems.Add("Stone", 100, recover: false); buildPiece47.RequiredItems.Add("Coal", 20, recover: false); buildPiece47.Category.Set("Warcraft Pieces"); buildPiece47.Crafting.Set(CraftingTable.Workbench); buildPiece47.Tool.Add("Hammer"); buildPiece47.SpecialProperties.NoConfig = false; buildPiece47.SpecialProperties.AdminOnly = true; buildPiece47.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece47.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece48 = new BuildPiece("warcrafpieces", "WCP_orc_village1"); buildPiece48.Name.English("Orc Village I"); buildPiece48.Description.English("A small settlement of Orc clans."); buildPiece48.RequiredItems.Add("Wood", 200, recover: false); buildPiece48.RequiredItems.Add("FineWood", 200, recover: false); buildPiece48.RequiredItems.Add("Stone", 100, recover: false); buildPiece48.RequiredItems.Add("Coal", 20, recover: false); buildPiece48.Category.Set("Warcraft Pieces"); buildPiece48.Crafting.Set(CraftingTable.Workbench); buildPiece48.Tool.Add("Hammer"); buildPiece48.SpecialProperties.NoConfig = false; buildPiece48.SpecialProperties.AdminOnly = true; buildPiece48.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece48.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece49 = new BuildPiece("warcrafpieces", "WCP_orc_village"); buildPiece49.Name.English("Orc Village"); buildPiece49.Description.English("A large Orc village bustling with warriors."); buildPiece49.RequiredItems.Add("Wood", 200, recover: false); buildPiece49.RequiredItems.Add("FineWood", 200, recover: false); buildPiece49.RequiredItems.Add("Stone", 100, recover: false); buildPiece49.RequiredItems.Add("Coal", 20, recover: false); buildPiece49.Category.Set("Warcraft Pieces"); buildPiece49.Crafting.Set(CraftingTable.Workbench); buildPiece49.Tool.Add("Hammer"); buildPiece49.SpecialProperties.NoConfig = false; buildPiece49.SpecialProperties.AdminOnly = true; buildPiece49.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece49.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece50 = new BuildPiece("warcrafpieces", "WCP_goldmine"); buildPiece50.Name.English("Gold Mine"); buildPiece50.Description.English("A rich mine extracting valuable gold."); buildPiece50.RequiredItems.Add("Wood", 200, recover: false); buildPiece50.RequiredItems.Add("FineWood", 200, recover: false); buildPiece50.RequiredItems.Add("Stone", 100, recover: false); buildPiece50.RequiredItems.Add("Coal", 20, recover: false); buildPiece50.Category.Set("Warcraft Pieces"); buildPiece50.Crafting.Set(CraftingTable.Workbench); buildPiece50.Tool.Add("Hammer"); buildPiece50.SpecialProperties.NoConfig = false; buildPiece50.SpecialProperties.AdminOnly = true; buildPiece50.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece50.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece51 = new BuildPiece("warcrafpieces", "WCP_moonwell"); buildPiece51.Name.English("Moonwell"); buildPiece51.Description.English("A sacred well blessed by Elune."); buildPiece51.RequiredItems.Add("Wood", 200, recover: false); buildPiece51.RequiredItems.Add("FineWood", 200, recover: false); buildPiece51.RequiredItems.Add("Stone", 100, recover: false); buildPiece51.RequiredItems.Add("Coal", 20, recover: false); buildPiece51.Category.Set("Warcraft Pieces"); buildPiece51.Crafting.Set(CraftingTable.Workbench); buildPiece51.Tool.Add("Hammer"); buildPiece51.SpecialProperties.NoConfig = false; buildPiece51.SpecialProperties.AdminOnly = true; buildPiece51.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece51.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece52 = new BuildPiece("warcrafpieces", "WCP_scourge_catapult"); buildPiece52.Name.English("Scourge Catapult"); buildPiece52.Description.English("A catapult designed to spread plague and death."); buildPiece52.RequiredItems.Add("Wood", 200, recover: false); buildPiece52.RequiredItems.Add("FineWood", 200, recover: false); buildPiece52.RequiredItems.Add("Stone", 100, recover: false); buildPiece52.RequiredItems.Add("Coal", 20, recover: false); buildPiece52.Category.Set("Warcraft Pieces"); buildPiece52.Crafting.Set(CraftingTable.Workbench); buildPiece52.Tool.Add("Hammer"); buildPiece52.SpecialProperties.NoConfig = false; buildPiece52.SpecialProperties.AdminOnly = true; buildPiece52.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece52.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece53 = new BuildPiece("warcrafpieces", "WCP_loch_modan"); buildPiece53.Name.English("Loch Modan"); buildPiece53.Description.English("A massive dwarven stronghold carved in stone."); buildPiece53.RequiredItems.Add("Wood", 200, recover: false); buildPiece53.RequiredItems.Add("FineWood", 200, recover: false); buildPiece53.RequiredItems.Add("Stone", 100, recover: false); buildPiece53.RequiredItems.Add("Coal", 20, recover: false); buildPiece53.Category.Set("Warcraft Pieces"); buildPiece53.Crafting.Set(CraftingTable.Workbench); buildPiece53.Tool.Add("Hammer"); buildPiece53.SpecialProperties.NoConfig = false; buildPiece53.SpecialProperties.AdminOnly = true; buildPiece53.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece53.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece54 = new BuildPiece("warcrafpieces", "WCP_ironforge"); buildPiece54.Name.English("Ironforge"); buildPiece54.Description.English("The legendary capital city of the Dwarves."); buildPiece54.RequiredItems.Add("Wood", 200, recover: false); buildPiece54.RequiredItems.Add("FineWood", 200, recover: false); buildPiece54.RequiredItems.Add("Stone", 100, recover: false); buildPiece54.RequiredItems.Add("Coal", 20, recover: false); buildPiece54.Category.Set("Warcraft Pieces"); buildPiece54.Crafting.Set(CraftingTable.Workbench); buildPiece54.Tool.Add("Hammer"); buildPiece54.SpecialProperties.NoConfig = false; buildPiece54.SpecialProperties.AdminOnly = true; buildPiece54.Snapshot(); BuildPiece buildPiece55 = new BuildPiece("warcrafpieces", "WCP_ironforgegate"); buildPiece55.Name.English("Ironforge Gate"); buildPiece55.Description.English("The massive gates protecting Ironforge."); buildPiece55.RequiredItems.Add("Wood", 200, recover: false); buildPiece55.RequiredItems.Add("FineWood", 200, recover: false); buildPiece55.RequiredItems.Add("Stone", 100, recover: false); buildPiece55.RequiredItems.Add("Coal", 20, recover: false); buildPiece55.Category.Set("Warcraft Pieces"); buildPiece55.Crafting.Set(CraftingTable.Workbench); buildPiece55.Tool.Add("Hammer"); buildPiece55.SpecialProperties.NoConfig = false; buildPiece55.SpecialProperties.AdminOnly = true; buildPiece55.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece55.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece56 = new BuildPiece("warcrafpieces", "WCP_elf_fountain"); buildPiece56.Name.English("Elven Fountain"); buildPiece56.Description.English("A graceful fountain infused with elven magic."); buildPiece56.RequiredItems.Add("Wood", 200, recover: false); buildPiece56.RequiredItems.Add("FineWood", 200, recover: false); buildPiece56.RequiredItems.Add("Stone", 100, recover: false); buildPiece56.RequiredItems.Add("Coal", 20, recover: false); buildPiece56.Category.Set("Warcraft Pieces"); buildPiece56.Crafting.Set(CraftingTable.Workbench); buildPiece56.Tool.Add("Hammer"); buildPiece56.SpecialProperties.NoConfig = false; buildPiece56.SpecialProperties.AdminOnly = true; buildPiece56.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece56.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece57 = new BuildPiece("sunnpiece", "SUNP_Blacksmithg"); buildPiece57.Name.English("Blacksmith"); buildPiece57.Description.English("A sturdy blacksmith building for forging weapons and armor."); buildPiece57.RequiredItems.Add("Wood", 200, recover: false); buildPiece57.RequiredItems.Add("FineWood", 200, recover: false); buildPiece57.RequiredItems.Add("Stone", 100, recover: false); buildPiece57.RequiredItems.Add("Coal", 20, recover: false); buildPiece57.Category.Set("Medieval and fantasy pieces"); buildPiece57.Crafting.Set(CraftingTable.Workbench); buildPiece57.Tool.Add("Hammer"); buildPiece57.SpecialProperties.NoConfig = false; buildPiece57.SpecialProperties.AdminOnly = true; buildPiece57.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece57.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece58 = new BuildPiece("sunnpiece", "SUNP_Vikinghouse"); buildPiece58.Name.English("Viking House"); buildPiece58.Description.English("A traditional viking-style house built for harsh northern lands."); buildPiece58.RequiredItems.Add("Wood", 200, recover: false); buildPiece58.RequiredItems.Add("FineWood", 200, recover: false); buildPiece58.RequiredItems.Add("Stone", 100, recover: false); buildPiece58.RequiredItems.Add("Coal", 20, recover: false); buildPiece58.Category.Set("Medieval and fantasy pieces"); buildPiece58.Crafting.Set(CraftingTable.Workbench); buildPiece58.Tool.Add("Hammer"); buildPiece58.SpecialProperties.NoConfig = false; buildPiece58.SpecialProperties.AdminOnly = true; buildPiece58.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece58.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece59 = new BuildPiece("sunnpiece", "SUNP_wizard-table"); buildPiece59.Name.English("Wizard Table"); buildPiece59.Description.English("An arcane table used by wizards to study spells and artifacts."); buildPiece59.RequiredItems.Add("Wood", 200, recover: false); buildPiece59.RequiredItems.Add("FineWood", 200, recover: false); buildPiece59.RequiredItems.Add("Stone", 100, recover: false); buildPiece59.RequiredItems.Add("Coal", 20, recover: false); buildPiece59.Category.Set("Medieval and fantasy pieces"); buildPiece59.Crafting.Set(CraftingTable.Workbench); buildPiece59.Tool.Add("Hammer"); buildPiece59.SpecialProperties.NoConfig = false; buildPiece59.SpecialProperties.AdminOnly = true; buildPiece59.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece59.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece60 = new BuildPiece("sunnpiece", "SUNP_Darkangel"); buildPiece60.Name.English("Dark Angel Statue"); buildPiece60.Description.English("A dark angel statue radiating ominous and ancient power."); buildPiece60.RequiredItems.Add("Wood", 200, recover: false); buildPiece60.RequiredItems.Add("FineWood", 200, recover: false); buildPiece60.RequiredItems.Add("Stone", 100, recover: false); buildPiece60.RequiredItems.Add("Coal", 20, recover: false); buildPiece60.Category.Set("Medieval and fantasy pieces"); buildPiece60.Crafting.Set(CraftingTable.Workbench); buildPiece60.Tool.Add("Hammer"); buildPiece60.SpecialProperties.NoConfig = false; buildPiece60.SpecialProperties.AdminOnly = true; buildPiece60.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece60.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece61 = new BuildPiece("warcrafpieces", "WCP_dwarf_wall"); buildPiece61.Name.English("Dwarven Wall"); buildPiece61.Description.English("A sturdy stone wall crafted by dwarven masons."); buildPiece61.RequiredItems.Add("Wood", 200, recover: false); buildPiece61.RequiredItems.Add("FineWood", 200, recover: false); buildPiece61.RequiredItems.Add("Stone", 100, recover: false); buildPiece61.RequiredItems.Add("Coal", 20, recover: false); buildPiece61.Category.Set("Warcraft Pieces"); buildPiece61.Crafting.Set(CraftingTable.Workbench); buildPiece61.Tool.Add("Hammer"); buildPiece61.SpecialProperties.NoConfig = false; buildPiece61.SpecialProperties.AdminOnly = true; buildPiece61.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece61.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece62 = new BuildPiece("warcrafpieces", "WCP_dranei_haven"); buildPiece62.Name.English("Draenei Haven"); buildPiece62.Description.English("A serene haven imbued with Draenei crystal magic."); buildPiece62.RequiredItems.Add("Wood", 200, recover: false); buildPiece62.RequiredItems.Add("FineWood", 200, recover: false); buildPiece62.RequiredItems.Add("Stone", 100, recover: false); buildPiece62.RequiredItems.Add("Coal", 20, recover: false); buildPiece62.Category.Set("Warcraft Pieces"); buildPiece62.Crafting.Set(CraftingTable.Workbench); buildPiece62.Tool.Add("Hammer"); buildPiece62.SpecialProperties.NoConfig = false; buildPiece62.SpecialProperties.AdminOnly = true; buildPiece62.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece62.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece63 = new BuildPiece("warcrafpieces", "WCP_dranei_barracks"); buildPiece63.Name.English("Draenei Barracks"); buildPiece63.Description.English("Barracks housing disciplined Draenei warriors."); buildPiece63.RequiredItems.Add("Wood", 200, recover: false); buildPiece63.RequiredItems.Add("FineWood", 200, recover: false); buildPiece63.RequiredItems.Add("Stone", 100, recover: false); buildPiece63.RequiredItems.Add("Coal", 20, recover: false); buildPiece63.Category.Set("Warcraft Pieces"); buildPiece63.Crafting.Set(CraftingTable.Workbench); buildPiece63.Tool.Add("Hammer"); buildPiece63.SpecialProperties.NoConfig = false; buildPiece63.SpecialProperties.AdminOnly = true; buildPiece63.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece63.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece64 = new BuildPiece("warcrafpieces", "WCP_high_elf_house3"); buildPiece64.Name.English("High Elf House III"); buildPiece64.Description.English("An elegant high elven residence with ornate details."); buildPiece64.RequiredItems.Add("Wood", 200, recover: false); buildPiece64.RequiredItems.Add("FineWood", 200, recover: false); buildPiece64.RequiredItems.Add("Stone", 100, recover: false); buildPiece64.RequiredItems.Add("Coal", 20, recover: false); buildPiece64.Category.Set("Warcraft Pieces"); buildPiece64.Crafting.Set(CraftingTable.Workbench); buildPiece64.Tool.Add("Hammer"); buildPiece64.SpecialProperties.NoConfig = false; buildPiece64.SpecialProperties.AdminOnly = true; buildPiece64.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece64.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece65 = new BuildPiece("warcrafpieces", "WCP_elfgate2"); buildPiece65.Name.English("Elven Gate II"); buildPiece65.Description.English("A graceful elven gate guarding ancient paths."); buildPiece65.RequiredItems.Add("Wood", 200, recover: false); buildPiece65.RequiredItems.Add("FineWood", 200, recover: false); buildPiece65.RequiredItems.Add("Stone", 100, recover: false); buildPiece65.RequiredItems.Add("Coal", 20, recover: false); buildPiece65.Category.Set("Warcraft Pieces"); buildPiece65.Crafting.Set(CraftingTable.Workbench); buildPiece65.Tool.Add("Hammer"); buildPiece65.SpecialProperties.NoConfig = false; buildPiece65.SpecialProperties.AdminOnly = true; buildPiece65.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece65.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece66 = new BuildPiece("warcrafpieces", "WCP_elven_barracks"); buildPiece66.Name.English("Elven Barracks"); buildPiece66.Description.English("Barracks for disciplined and agile elven soldiers."); buildPiece66.RequiredItems.Add("Wood", 200, recover: false); buildPiece66.RequiredItems.Add("FineWood", 200, recover: false); buildPiece66.RequiredItems.Add("Stone", 100, recover: false); buildPiece66.RequiredItems.Add("Coal", 20, recover: false); buildPiece66.Category.Set("Warcraft Pieces"); buildPiece66.Crafting.Set(CraftingTable.Workbench); buildPiece66.Tool.Add("Hammer"); buildPiece66.SpecialProperties.NoConfig = false; buildPiece66.SpecialProperties.AdminOnly = true; buildPiece66.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece66.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece67 = new BuildPiece("warcrafpieces", "WCP_kaldorei_house"); buildPiece67.Name.English("Kaldorei House"); buildPiece67.Description.English("A mystical house of the ancient Kaldorei."); buildPiece67.RequiredItems.Add("Wood", 200, recover: false); buildPiece67.RequiredItems.Add("FineWood", 200, recover: false); buildPiece67.RequiredItems.Add("Stone", 100, recover: false); buildPiece67.RequiredItems.Add("Coal", 20, recover: false); buildPiece67.Category.Set("Warcraft Pieces"); buildPiece67.Crafting.Set(CraftingTable.Workbench); buildPiece67.Tool.Add("Hammer"); buildPiece67.SpecialProperties.NoConfig = false; buildPiece67.SpecialProperties.AdminOnly = true; buildPiece67.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece67.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece68 = new BuildPiece("warcrafpieces", "WCP_elfgate1"); buildPiece68.Name.English("Elven Gate I"); buildPiece68.Description.English("A smaller elven gate adorned with glowing runes."); buildPiece68.RequiredItems.Add("Wood", 200, recover: false); buildPiece68.RequiredItems.Add("FineWood", 200, recover: false); buildPiece68.RequiredItems.Add("Stone", 100, recover: false); buildPiece68.RequiredItems.Add("Coal", 20, recover: false); buildPiece68.Category.Set("Warcraft Pieces"); buildPiece68.Crafting.Set(CraftingTable.Workbench); buildPiece68.Tool.Add("Hammer"); buildPiece68.SpecialProperties.NoConfig = false; buildPiece68.SpecialProperties.AdminOnly = true; buildPiece68.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece68.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece69 = new BuildPiece("warcrafpieces", "WCP_Market"); buildPiece69.Name.English("Elven Market"); buildPiece69.Description.English("A lively market filled with exotic elven goods."); buildPiece69.RequiredItems.Add("Wood", 200, recover: false); buildPiece69.RequiredItems.Add("FineWood", 200, recover: false); buildPiece69.RequiredItems.Add("Stone", 100, recover: false); buildPiece69.RequiredItems.Add("Coal", 20, recover: false); buildPiece69.Category.Set("Warcraft Pieces"); buildPiece69.Crafting.Set(CraftingTable.Workbench); buildPiece69.Tool.Add("Hammer"); buildPiece69.SpecialProperties.NoConfig = false; buildPiece69.SpecialProperties.AdminOnly = true; buildPiece69.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece69.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece70 = new BuildPiece("warcrafpieces", "WCP_high_elf_house1"); buildPiece70.Name.English("High Elf House I"); buildPiece70.Description.English("A refined high elven dwelling bathed in arcane light."); buildPiece70.RequiredItems.Add("Wood", 200, recover: false); buildPiece70.RequiredItems.Add("FineWood", 200, recover: false); buildPiece70.RequiredItems.Add("Stone", 100, recover: false); buildPiece70.RequiredItems.Add("Coal", 20, recover: false); buildPiece70.Category.Set("Warcraft Pieces"); buildPiece70.Crafting.Set(CraftingTable.Workbench); buildPiece70.Tool.Add("Hammer"); buildPiece70.SpecialProperties.NoConfig = false; buildPiece70.SpecialProperties.AdminOnly = true; buildPiece70.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece70.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece71 = new BuildPiece("warcrafpieces", "WCP_elf_spire"); buildPiece71.Name.English("Elven Spire"); buildPiece71.Description.English("A towering elven spire reaching toward the skies."); buildPiece71.RequiredItems.Add("Wood", 200, recover: false); buildPiece71.RequiredItems.Add("FineWood", 200, recover: false); buildPiece71.RequiredItems.Add("Stone", 100, recover: false); buildPiece71.RequiredItems.Add("Coal", 20, recover: false); buildPiece71.Category.Set("Warcraft Pieces"); buildPiece71.Crafting.Set(CraftingTable.Workbench); buildPiece71.Tool.Add("Hammer"); buildPiece71.SpecialProperties.NoConfig = false; buildPiece71.SpecialProperties.AdminOnly = true; buildPiece71.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece71.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece72 = new BuildPiece("warcrafpieces", "WCP_highelftower"); buildPiece72.Name.English("High Elf Tower"); buildPiece72.Description.English("A majestic tower crafted by skilled high elven architects."); buildPiece72.RequiredItems.Add("Wood", 200, recover: false); buildPiece72.RequiredItems.Add("FineWood", 200, recover: false); buildPiece72.RequiredItems.Add("Stone", 100, recover: false); buildPiece72.RequiredItems.Add("Coal", 20, recover: false); buildPiece72.Category.Set("Warcraft Pieces"); buildPiece72.Crafting.Set(CraftingTable.Workbench); buildPiece72.Tool.Add("Hammer"); buildPiece72.SpecialProperties.NoConfig = false; buildPiece72.SpecialProperties.AdminOnly = true; buildPiece72.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece72.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece73 = new BuildPiece("warcrafpieces", "WCP_castle_human"); buildPiece73.Name.English("Human Castle"); buildPiece73.Description.English("A fortified human castle built for war and diplomacy."); buildPiece73.RequiredItems.Add("Wood", 200, recover: false); buildPiece73.RequiredItems.Add("FineWood", 200, recover: false); buildPiece73.RequiredItems.Add("Stone", 100, recover: false); buildPiece73.RequiredItems.Add("Coal", 20, recover: false); buildPiece73.Category.Set("Warcraft Pieces"); buildPiece73.Crafting.Set(CraftingTable.Workbench); buildPiece73.Tool.Add("Hammer"); buildPiece73.SpecialProperties.NoConfig = false; buildPiece73.SpecialProperties.AdminOnly = true; buildPiece73.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece73.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece74 = new BuildPiece("warcrafpieces", "WCP_human_torre"); buildPiece74.Name.English("Human Tower"); buildPiece74.Description.English("A defensive tower operated by human soldiers."); buildPiece74.RequiredItems.Add("Wood", 200, recover: false); buildPiece74.RequiredItems.Add("FineWood", 200, recover: false); buildPiece74.RequiredItems.Add("Stone", 100, recover: false); buildPiece74.RequiredItems.Add("Coal", 20, recover: false); buildPiece74.Category.Set("Warcraft Pieces"); buildPiece74.Crafting.Set(CraftingTable.Workbench); buildPiece74.Tool.Add("Hammer"); buildPiece74.SpecialProperties.NoConfig = false; buildPiece74.SpecialProperties.AdminOnly = true; buildPiece74.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece74.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece75 = new BuildPiece("warcrafpieces", "WCP_humanhero_statue"); buildPiece75.Name.English("Human Hero Statue"); buildPiece75.Description.English("A heroic statue commemorating a human champion."); buildPiece75.RequiredItems.Add("Wood", 200, recover: false); buildPiece75.RequiredItems.Add("FineWood", 200, recover: false); buildPiece75.RequiredItems.Add("Stone", 100, recover: false); buildPiece75.RequiredItems.Add("Coal", 20, recover: false); buildPiece75.Category.Set("Warcraft Pieces"); buildPiece75.Crafting.Set(CraftingTable.Workbench); buildPiece75.Tool.Add("Hammer"); buildPiece75.SpecialProperties.NoConfig = false; buildPiece75.SpecialProperties.AdminOnly = true; buildPiece75.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece75.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece76 = new BuildPiece("warcrafpieces", "WCP_barrack_human"); buildPiece76.Name.English("Human Barracks"); buildPiece76.Description.English("Barracks housing trained human soldiers."); buildPiece76.RequiredItems.Add("Wood", 200, recover: false); buildPiece76.RequiredItems.Add("FineWood", 200, recover: false); buildPiece76.RequiredItems.Add("Stone", 100, recover: false); buildPiece76.RequiredItems.Add("Coal", 20, recover: false); buildPiece76.Category.Set("Warcraft Pieces"); buildPiece76.Crafting.Set(CraftingTable.Workbench); buildPiece76.Tool.Add("Hammer"); buildPiece76.SpecialProperties.NoConfig = false; buildPiece76.SpecialProperties.AdminOnly = true; buildPiece76.Snapshot(); BuildPiece buildPiece77 = new BuildPiece("warcrafpieces", "WCP_tower_humanmage"); buildPiece77.Name.English("Mage Tower"); buildPiece77.Description.English("A towering arcane bastion for master wizards."); buildPiece77.RequiredItems.Add("Wood", 200, recover: false); buildPiece77.RequiredItems.Add("FineWood", 200, recover: false); buildPiece77.RequiredItems.Add("Stone", 100, recover: false); buildPiece77.RequiredItems.Add("Coal", 20, recover: false); buildPiece77.Category.Set("Warcraft Pieces"); buildPiece77.Crafting.Set(CraftingTable.Workbench); buildPiece77.Tool.Add("Hammer"); buildPiece77.SpecialProperties.NoConfig = false; buildPiece77.SpecialProperties.AdminOnly = true; buildPiece77.Snapshot(); BuildPiece buildPiece78 = new BuildPiece("warcrafpieces", "WCP_orc_clanhousesmall"); buildPiece78.Name.English("Orc Clan House (Small)"); buildPiece78.Description.English("A small dwelling belonging to an Orc clan."); buildPiece78.RequiredItems.Add("Wood", 200, recover: false); buildPiece78.RequiredItems.Add("FineWood", 200, recover: false); buildPiece78.RequiredItems.Add("Stone", 100, recover: false); buildPiece78.RequiredItems.Add("Coal", 20, recover: false); buildPiece78.Category.Set("Warcraft Pieces"); buildPiece78.Crafting.Set(CraftingTable.Workbench); buildPiece78.Tool.Add("Hammer"); buildPiece78.SpecialProperties.NoConfig = false; buildPiece78.SpecialProperties.AdminOnly = true; buildPiece78.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece78.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece79 = new BuildPiece("warcrafpieces", "WCP_orc_claninn"); buildPiece79.Name.English("Orc Clan Inn"); buildPiece79.Description.English("A rowdy inn that serves as the heart of clan gatherings."); buildPiece79.RequiredItems.Add("Wood", 200, recover: false); buildPiece79.RequiredItems.Add("FineWood", 200, recover: false); buildPiece79.RequiredItems.Add("Stone", 100, recover: false); buildPiece79.RequiredItems.Add("Coal", 20, recover: false); buildPiece79.Category.Set("Warcraft Pieces"); buildPiece79.Crafting.Set(CraftingTable.Workbench); buildPiece79.Tool.Add("Hammer"); buildPiece79.SpecialProperties.NoConfig = false; buildPiece79.SpecialProperties.AdminOnly = true; buildPiece79.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece79.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece80 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_barracks"); buildPiece80.Name.English("Orc Clan Barracks"); buildPiece80.Description.English("Barracks for training Orc clan warriors."); buildPiece80.RequiredItems.Add("Wood", 200, recover: false); buildPiece80.RequiredItems.Add("FineWood", 200, recover: false); buildPiece80.RequiredItems.Add("Stone", 100, recover: false); buildPiece80.RequiredItems.Add("Coal", 20, recover: false); buildPiece80.Category.Set("Warcraft Pieces"); buildPiece80.Crafting.Set(CraftingTable.Workbench); buildPiece80.Tool.Add("Hammer"); buildPiece80.SpecialProperties.NoConfig = false; buildPiece80.SpecialProperties.AdminOnly = true; buildPiece80.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece80.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece81 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_farm"); buildPiece81.Name.English("Orc Clan Farm"); buildPiece81.Description.English("A rough farm that provides food for the Orc clans."); buildPiece81.RequiredItems.Add("Wood", 200, recover: false); buildPiece81.RequiredItems.Add("FineWood", 200, recover: false); buildPiece81.RequiredItems.Add("Stone", 100, recover: false); buildPiece81.RequiredItems.Add("Coal", 20, recover: false); buildPiece81.Category.Set("Warcraft Pieces"); buildPiece81.Crafting.Set(CraftingTable.Workbench); buildPiece81.Tool.Add("Hammer"); buildPiece81.SpecialProperties.NoConfig = false; buildPiece81.SpecialProperties.AdminOnly = true; buildPiece81.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece81.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece82 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_forge"); buildPiece82.Name.English("Orc Clan Forge"); buildPiece82.Description.English("A brutal forge used to craft Orcish weaponry."); buildPiece82.RequiredItems.Add("Wood", 200, recover: false); buildPiece82.RequiredItems.Add("FineWood", 200, recover: false); buildPiece82.RequiredItems.Add("Stone", 100, recover: false); buildPiece82.RequiredItems.Add("Coal", 20, recover: false); buildPiece82.Category.Set("Warcraft Pieces"); buildPiece82.Crafting.Set(CraftingTable.Workbench); buildPiece82.Tool.Add("Hammer"); buildPiece82.SpecialProperties.NoConfig = false; buildPiece82.SpecialProperties.AdminOnly = true; buildPiece82.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece82.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece83 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_guardtower"); buildPiece83.Name.English("Orc Clan Guard Tower"); buildPiece83.Description.English("A guard tower overlooking the Orc clan lands."); buildPiece83.RequiredItems.Add("Wood", 200, recover: false); buildPiece83.RequiredItems.Add("FineWood", 200, recover: false); buildPiece83.RequiredItems.Add("Stone", 100, recover: false); buildPiece83.RequiredItems.Add("Coal", 20, recover: false); buildPiece83.Category.Set("Warcraft Pieces"); buildPiece83.Crafting.Set(CraftingTable.Workbench); buildPiece83.Tool.Add("Hammer"); buildPiece83.SpecialProperties.NoConfig = false; buildPiece83.SpecialProperties.AdminOnly = true; buildPiece83.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece83.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece84 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_houselarge"); buildPiece84.Name.English("Orc Clan House (Large)"); buildPiece84.Description.English("A large house for powerful Orc clan leaders."); buildPiece84.RequiredItems.Add("Wood", 200, recover: false); buildPiece84.RequiredItems.Add("FineWood", 200, recover: false); buildPiece84.RequiredItems.Add("Stone", 100, recover: false); buildPiece84.RequiredItems.Add("Coal", 20, recover: false); buildPiece84.Category.Set("Warcraft Pieces"); buildPiece84.Crafting.Set(CraftingTable.Workbench); buildPiece84.Tool.Add("Hammer"); buildPiece84.SpecialProperties.NoConfig = false; buildPiece84.SpecialProperties.AdminOnly = true; buildPiece84.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece84.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece85 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_huts"); buildPiece85.Name.English("Orc Clan Huts"); buildPiece85.Description.English("A small cluster of rugged Orc clan huts."); buildPiece85.RequiredItems.Add("Wood", 200, recover: false); buildPiece85.RequiredItems.Add("FineWood", 200, recover: false); buildPiece85.RequiredItems.Add("Stone", 100, recover: false); buildPiece85.RequiredItems.Add("Coal", 20, recover: false); buildPiece85.Category.Set("Warcraft Pieces"); buildPiece85.Crafting.Set(CraftingTable.Workbench); buildPiece85.Tool.Add("Hammer"); buildPiece85.SpecialProperties.NoConfig = false; buildPiece85.SpecialProperties.AdminOnly = true; buildPiece85.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece85.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece86 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_ritualpit"); buildPiece86.Name.English("Orc Clan Ritual Pit"); buildPiece86.Description.English("A ritual pit used for dark Orcish ceremonies."); buildPiece86.RequiredItems.Add("Wood", 200, recover: false); buildPiece86.RequiredItems.Add("FineWood", 200, recover: false); buildPiece86.RequiredItems.Add("Stone", 100, recover: false); buildPiece86.RequiredItems.Add("Coal", 20, recover: false); buildPiece86.Category.Set("Warcraft Pieces"); buildPiece86.Crafting.Set(CraftingTable.Workbench); buildPiece86.Tool.Add("Hammer"); buildPiece86.SpecialProperties.NoConfig = false; buildPiece86.SpecialProperties.AdminOnly = true; buildPiece86.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece86.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece87 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_spirithouse"); buildPiece87.Name.English("Orc Clan Spirit House"); buildPiece87.Description.English("A sacred house honoring the ancestral spirits of the clan."); buildPiece87.RequiredItems.Add("Wood", 200, recover: false); buildPiece87.RequiredItems.Add("FineWood", 200, recover: false); buildPiece87.RequiredItems.Add("Stone", 100, recover: false); buildPiece87.RequiredItems.Add("Coal", 20, recover: false); buildPiece87.Category.Set("Warcraft Pieces"); buildPiece87.Crafting.Set(CraftingTable.Workbench); buildPiece87.Tool.Add("Hammer"); buildPiece87.SpecialProperties.NoConfig = false; buildPiece87.SpecialProperties.AdminOnly = true; buildPiece87.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece87.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece88 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_townhall"); buildPiece88.Name.English("Orc Clan Town Hall"); buildPiece88.Description.English("The central hall of the Orc clan's settlement."); buildPiece88.RequiredItems.Add("Wood", 200, recover: false); buildPiece88.RequiredItems.Add("FineWood", 200, recover: false); buildPiece88.RequiredItems.Add("Stone", 100, recover: false); buildPiece88.RequiredItems.Add("Coal", 20, recover: false); buildPiece88.Category.Set("Warcraft Pieces"); buildPiece88.Crafting.Set(CraftingTable.Workbench); buildPiece88.Tool.Add("Hammer"); buildPiece88.SpecialProperties.NoConfig = false; buildPiece88.SpecialProperties.AdminOnly = true; buildPiece88.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece88.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece89 = new BuildPiece("warcrafpieces", "WCP_orc_orcclans_wolfpen"); buildPiece89.Name.English("Orc Clan Wolf Pen"); buildPiece89.Description.English("A pen used to house the clan's fearsome war wolves."); buildPiece89.RequiredItems.Add("Wood", 200, recover: false); buildPiece89.RequiredItems.Add("FineWood", 200, recover: false); buildPiece89.RequiredItems.Add("Stone", 100, recover: false); buildPiece89.RequiredItems.Add("Coal", 20, recover: false); buildPiece89.Category.Set("Warcraft Pieces"); buildPiece89.Crafting.Set(CraftingTable.Workbench); buildPiece89.Tool.Add("Hammer"); buildPiece89.SpecialProperties.NoConfig = false; buildPiece89.SpecialProperties.AdminOnly = true; buildPiece89.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece89.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece90 = new BuildPiece("warcrafpieces", "WCP_Murlocaltar"); buildPiece90.Name.English("Murloc Altar"); buildPiece90.Description.English("A strange altar dedicated to mysterious Murloc deities."); buildPiece90.RequiredItems.Add("Wood", 200, recover: false); buildPiece90.RequiredItems.Add("FineWood", 200, recover: false); buildPiece90.RequiredItems.Add("Stone", 100, recover: false); buildPiece90.RequiredItems.Add("Coal", 20, recover: false); buildPiece90.Category.Set("Warcraft Pieces"); buildPiece90.Crafting.Set(CraftingTable.Workbench); buildPiece90.Tool.Add("Hammer"); buildPiece90.SpecialProperties.NoConfig = false; buildPiece90.SpecialProperties.AdminOnly = true; buildPiece90.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece90.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece91 = new BuildPiece("warcrafpieces", "WCP_Murlochut"); buildPiece91.Name.English("Murloc Hut"); buildPiece91.Description.English("A crude hut used by coastal Murloc tribes."); buildPiece91.RequiredItems.Add("Wood", 200, recover: false); buildPiece91.RequiredItems.Add("FineWood", 200, recover: false); buildPiece91.RequiredItems.Add("Stone", 100, recover: false); buildPiece91.RequiredItems.Add("Coal", 20, recover: false); buildPiece91.Category.Set("Warcraft Pieces"); buildPiece91.Crafting.Set(CraftingTable.Workbench); buildPiece91.Tool.Add("Hammer"); buildPiece91.SpecialProperties.NoConfig = false; buildPiece91.SpecialProperties.AdminOnly = true; buildPiece91.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece91.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece92 = new BuildPiece("warcrafpieces", "WCP_Murlochutcluster1"); buildPiece92.Name.English("Murloc Hut Cluster I"); buildPiece92.Description.English("A small cluster of coastal Murloc huts."); buildPiece92.RequiredItems.Add("Wood", 200, recover: false); buildPiece92.RequiredItems.Add("FineWood", 200, recover: false); buildPiece92.RequiredItems.Add("Stone", 100, recover: false); buildPiece92.RequiredItems.Add("Coal", 20, recover: false); buildPiece92.Category.Set("Warcraft Pieces"); buildPiece92.Crafting.Set(CraftingTable.Workbench); buildPiece92.Tool.Add("Hammer"); buildPiece92.SpecialProperties.NoConfig = false; buildPiece92.SpecialProperties.AdminOnly = true; buildPiece92.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece92.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece93 = new BuildPiece("warcrafpieces", "WCP_Murlochutcluster2"); buildPiece93.Name.English("Murloc Hut Cluster II"); buildPiece93.Description.English("A larger cluster of ramshackle Murloc huts."); buildPiece93.RequiredItems.Add("Wood", 200, recover: false); buildPiece93.RequiredItems.Add("FineWood", 200, recover: false); buildPiece93.RequiredItems.Add("Stone", 100, recover: false); buildPiece93.RequiredItems.Add("Coal", 20, recover: false); buildPiece93.Category.Set("Warcraft Pieces"); buildPiece93.Crafting.Set(CraftingTable.Workbench); buildPiece93.Tool.Add("Hammer"); buildPiece93.SpecialProperties.NoConfig = false; buildPiece93.SpecialProperties.AdminOnly = true; buildPiece93.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece93.Prefab, MaterialReplacer.ShaderType.PieceShader); BuildPiece buildPiece94 = new BuildPiece("warcrafpieces", "WCP_Murlocshiptower"); buildPiece94.Name.English("Murloc Ship Tower"); buildPiece94.Description.English("A rickety tower rising above Murloc docks."); buildPiece94.RequiredItems.Add("Wood", 200, recover: false); buildPiece94.RequiredItems.Add("FineWood", 200, recover: false); buildPiece94.RequiredItems.Add("Stone", 100, recover: false); buildPiece94.RequiredItems.Add("Coal", 20, recover: false); buildPiece94.Category.Set("Warcraft Pieces"); buildPiece94.Crafting.Set(CraftingTable.Workbench); buildPiece94.Tool.Add("Hammer"); buildPiece94.SpecialProperties.NoConfig = false; buildPiece94.SpecialProperties.AdminOnly = true; buildPiece94.Snapshot(); MaterialReplacer.RegisterGameObjectForShaderSwap(buildPiece94.Prefab, MaterialReplacer.ShaderType.PieceShader); Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); SetupWatcher(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { sunnfjordheimPiecesLogger.LogDebug((object)"ReadConfigValues called"); ((BaseUnityPlugin)this).Config.Reload(); } catch { sunnfjordheimPiecesLogger.LogError((object)("There was an issue loading your " + ConfigFileName)); sunnfjordheimPiecesLogger.LogError((object)"Please check your config entries for spelling and format!"); } } private ConfigEntry<T> config<[<7be39be6-78f7-4110-a753-45fe8fe937de>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<[<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting); } static sunnfjordheimPiecesPlugin() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; ConnectionError = ""; sunnfjordheimPiecesLogger = Logger.CreateLogSource("sunnfjordheimPieces"); ConfigSync = new ConfigSync("Azathoth.sunnfjordheimPieces") { DisplayName = "sunnfjordheimPieces", CurrentVersion = "1.0.0", MinimumRequiredVersion = "1.0.0" }; _serverConfigLocked = null; } } public static class KeyboardExtensions { public static bool IsKeyDown(this KeyboardShortcut shortcut) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) return (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKeyDown(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey); } public static bool IsKeyHeld(this KeyboardShortcut shortcut) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) return (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKey(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey); } } [HarmonyPatch(typeof(ZNet), "OnNewConnection")] public static class RegisterAndCheckVersion { [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogDebug((object)"Registering version RPC handler"); peer.m_rpc.Register<ZPackage>("sunnfjordheimPieces_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_sunnfjordheimPieces_Version); sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)"Invoking version check"); ZPackage val = new ZPackage(); val.Write("1.0.0"); peer.m_rpc.Invoke("sunnfjordheimPieces_VersionCheck", new object[1] { val }); } } [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)] [<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)] [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] public static class VerifyClient { private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance) { if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc)) { return true; } sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting")); rpc.Invoke("Error", new object[1] { 3 }); return false; } private static void Postfix(ZNet __instance) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "sunnfjordheimPiecesRequestAdminSync", new object[1] { (object)new ZPackage() }); } } [HarmonyPatch(typeof(FejdStartup), "ShowConnectError")] public class ShowConnectionError { [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)] private static void Postfix(FejdStartup __instance) { if (__instance.m_connectionFailedPanel.activeSelf) { __instance.m_connectionFailedError.fontSizeMax = 25f; __instance.m_connectionFailedError.fontSizeMin = 15f; TMP_Text connectionFailedError = __instance.m_connectionFailedError; connectionFailedError.text = connectionFailedError.text + "\n" + sunnfjordheimPiecesPlugin.ConnectionError; } } } [HarmonyPatch(typeof(ZNet), "Disconnect")] public static class RemoveDisconnectedPeerFromVerified { [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { if (__instance.IsServer()) { sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list")); RpcHandlers.ValidatedPeers.Remove(peer.m_rpc); } } } [<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)] [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)] public static class RpcHandlers { public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>(); public static void RPC_sunnfjordheimPieces_Version(ZRpc rpc, ZPackage pkg) { string text = pkg.ReadString(); sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)("Version check, local: 1.0.0, remote: " + text)); if (text != "1.0.0") { sunnfjordheimPiecesPlugin.ConnectionError = "sunnfjordheimPieces Installed: 1.0.0\n Needed: " + text; if (ZNet.instance.IsServer()) { sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting...")); rpc.Invoke("Error", new object[1] { 3 }); } } else if (!ZNet.instance.IsServer()) { sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)"Received same version from server!"); } else { sunnfjordheimPiecesPlugin.sunnfjordheimPiecesLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list")); ValidatedPeers.Add(rpc); } } } } namespace PieceManager { [PublicAPI] [<7be39be6-78f7-4110-a753-45fe8fe937de>Nullable(0)] [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>NullableContext(1)] public static class MaterialReplacer { [<22cdbdc7-6fe8-4f2b-8326-120f858dd6bb>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, bo