using System; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ChimneyButAwesome")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Chimney but awesome!")] [assembly: AssemblyTitle("ChimneyButAwesome")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace ChimneyButAwesome { public class Patches { private static string gamemodeName = "Chimney (but awesome)"; [HarmonyPatch(typeof(M_Level), "OnSpawn")] [HarmonyPrefix] private static void LevelOnSpawn(M_Level __instance) { string levelName = __instance.levelName; if (!(levelName == "MX_Chimney_Interlude_01")) { if (levelName == "MX_Chimney_LoopRoom_01") { PatchLevel(__instance, "CHIMNEY_1", "UPG_Recycler_1", "Entities (1)/Props/Prop_UpgradeConsole_Main_PerkOnly/OS_Computer"); } } else { PatchLevel(__instance, "CHIMNEY_0", "UPG_Recycler_0", "Prop_UpgradeConsole_NoDisk Variant/OS_Computer"); } } private static void PatchLevel(M_Level instance, string facilityID, string prefabName, string osPath) { //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Expected O, but got Unknown Plugin.Logger.LogInfo((object)(instance.levelName + " loading, inserting prefabs...")); Object.Instantiate(Plugin.bundle.LoadAsset(prefabName), ((Component)instance).transform); Plugin.Logger.LogInfo((object)"Inserted prefabs!"); Plugin.Logger.LogInfo((object)"Finding OS_Computer_Interface..."); OS_Computer_Interface component = ((Component)((Component)instance).transform.Find(osPath)).GetComponent(); component.facilityID = facilityID; OS_FileDataAsset upgradeApp = Plugin.bundle.LoadAsset("App_FacilityUpgrades_File"); if (!component.desktopData.files.Any((FileInfo x) => x.fileDataAsset == upgradeApp)) { FileInfo val = new FileInfo(); val.fileDataAsset = upgradeApp; val.fileDataAsset.fileInfo.windowAsset = Resources.FindObjectsOfTypeAll().First((GameObject x) => ((Object)x).name == "App_FacilityUpgrades").GetComponent(); component.desktopData.files.Add(val); } Plugin.Logger.LogInfo((object)"Facility upgrades added!"); } [HarmonyPatch(typeof(CL_Initializer), "Awake")] [HarmonyPostfix] private static void InitializerAwake() { WKAssetDatabase val = Plugin.bundle.LoadAsset("AssetDatabase"); CL_AssetManager.AddNewDatabase(val.id, val); M_Gamemode gamemodeAsset = CL_AssetManager.GetGamemodeAsset("GM_Chimney_Endless", ""); if (!(gamemodeAsset.gamemodeName == gamemodeName)) { gamemodeAsset.gamemodeName = gamemodeName; gamemodeAsset.capsuleName = "Chimney\n(but awesome)"; gamemodeAsset.allowLeaderboardScoring = false; gamemodeAsset.steamLeaderboardName = ""; gamemodeAsset.useGlobalSteamLeaderboardVersion = false; gamemodeAsset.scoreLeaderboardScore = false; gamemodeAsset.scoreLeaderboardHard = false; gamemodeAsset.scoreLeaderboardIronKnuckle = false; gamemodeAsset.gamemodeSettings.Add(Resources.FindObjectsOfTypeAll().First((GamemodeSetting x) => ((Object)x).name == "Setting_Unlimited")); } } [HarmonyPatch(typeof(Item_Object), "Start")] [HarmonyPrefix] private static void ItemStart(Item_Object __instance) { if (!((Object)(object)CL_GameManager.gamemode == (Object)null) && !(CL_GameManager.gamemode.gamemodeName != gamemodeName) && !(__instance.itemData.itemName != "cryogun")) { __instance.itemData.worth = 10; } } } [BepInPlugin("ChimneyButAwesome", "Chimney but awesome!", "1.0.0")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Logger; public static AssetBundle bundle; private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Harmony.CreateAndPatchAll(typeof(Patches), (string)null); bundle = AssetBundle.LoadFromFile(Directory.GetFiles(Paths.PluginPath, "chimney_but_awesome", SearchOption.AllDirectories)[0]); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "ChimneyButAwesome"; public const string PLUGIN_NAME = "Chimney but awesome!"; public const string PLUGIN_VERSION = "1.0.0"; } }