Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of sunnfjordheimPieces v1.0.0
sunnfjordheimPieces.dll
Decompiled 4 months 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