Decompiled source of Endless Service Shaft v1.0.0

Endless_Service_Shaft/EndlessServiceShaft.dll

Decompiled a day ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
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 EndlessServiceShaft.Hooks;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("EndlessServiceShaft")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Endless Service Shaft")]
[assembly: AssemblyTitle("EndlessServiceShaft")]
[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 EndlessServiceShaft
{
	[BepInPlugin("me.ssar.endless-service-shaft", "Endless Service Shaft", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		internal static ManualLogSource Logger;

		public static M_Gamemode endlessServiceShaftGamemode;

		private void Awake()
		{
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Expected O, but got Unknown
			Logger = ((BaseUnityPlugin)this).Logger;
			Logger.LogInfo((object)"Endless Service Shaft has loaded!");
			Harmony val = new Harmony("me.ssar.endless-service-shaft");
			val.PatchAll(typeof(DatabaseModifier));
			val.PatchAll(typeof(AddGamemode));
		}
	}
	public static class PluginInfo
	{
		public const string GUID = "me.ssar.endless-service-shaft";

		public const string Name = "Endless Service Shaft";

		public const string Version = "1.0.0";
	}
}
namespace EndlessServiceShaft.Hooks
{
	public static class AddGamemode
	{
		[HarmonyPatch(typeof(UI_PlayPane), "Start")]
		[HarmonyPrefix]
		public static void PlayPaneStart(ref UI_PlayPane __instance)
		{
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Expected O, but got Unknown
			GameObject val = Object.FindObjectsOfType<GameObject>(true).First((GameObject x) => ((Object)x).name == "Other Endless 02" && ((Object)x.transform.parent.parent.parent).name == "Play Pane - Scroll View Tab - Endless Variant");
			GameObject val2 = Object.Instantiate<GameObject>(val);
			((Object)val2).name = "Other Endless 03";
			val2.transform.SetParent(val.transform.parent);
			Transform child = val2.transform.GetChild(0);
			for (int i = 0; i < val2.transform.childCount; i++)
			{
				if (i != 0)
				{
					Object.Destroy((Object)(object)((Component)val2.transform.GetChild(i)).gameObject);
				}
			}
			GameObject gameObject = ((Component)child).gameObject;
			((Object)gameObject).name = "Mode Selection Button - Service Shaft";
			((UnityEventBase)gameObject.GetComponent<Button>().onClick).RemoveAllListeners();
			gameObject.GetComponent<UI_CapsuleButton>().unlockAchievement = Plugin.endlessServiceShaftGamemode.unlockAchievement;
			gameObject.GetComponent<UI_Gamemode_Button>().gamemode = Plugin.endlessServiceShaftGamemode;
			gameObject.GetComponent<UI_Gamemode_Button>().Initialize();
			val2.transform.localScale = Vector3.one;
			ContentSizeFitter csf = ((Component)val2.transform.parent).GetComponent<ContentSizeFitter>();
			UI_TabGroup component = ((Component)val2.transform.parent.parent.parent.parent.parent.Find("Tabs")).GetComponent<UI_TabGroup>();
			component.EventOnChangeTab.AddListener((UnityAction)delegate
			{
				((MonoBehaviour)csf).Invoke("SetLayoutHorizontal", 0.05f);
			});
		}
	}
	public static class DatabaseModifier
	{
		private static bool added;

		private static LevelAssetHolder GetLevelAsset(string name, WKAssetDatabase database)
		{
			foreach (LevelAssetHolder levelAsset in database.levelAssets)
			{
				if (levelAsset.id.ToLower() == name.ToLower())
				{
					return levelAsset;
				}
			}
			Plugin.Logger.LogError((object)(name.ToLower() + " not found!"));
			return null;
		}

		[HarmonyPatch(typeof(CL_Initializer), "Awake")]
		[HarmonyPrefix]
		public static void InitializerAwake(ref CL_Initializer __instance)
		{
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Expected O, but got Unknown
			//IL_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_0167: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Expected O, but got Unknown
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0184: Unknown result type (might be due to invalid IL or missing references)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0204: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: Unknown result type (might be due to invalid IL or missing references)
			//IL_022c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0233: Unknown result type (might be due to invalid IL or missing references)
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: Expected O, but got Unknown
			//IL_0309: Expected O, but got Unknown
			//IL_030f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0317: Unknown result type (might be due to invalid IL or missing references)
			//IL_031c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0327: Unknown result type (might be due to invalid IL or missing references)
			//IL_034b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0379: Expected O, but got Unknown
			//IL_037f: Unknown result type (might be due to invalid IL or missing references)
			//IL_038f: Expected O, but got Unknown
			//IL_0391: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03be: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0405: Unknown result type (might be due to invalid IL or missing references)
			//IL_0410: Unknown result type (might be due to invalid IL or missing references)
			//IL_041b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0422: Unknown result type (might be due to invalid IL or missing references)
			//IL_0429: Unknown result type (might be due to invalid IL or missing references)
			//IL_042b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0430: Unknown result type (might be due to invalid IL or missing references)
			//IL_0454: Unknown result type (might be due to invalid IL or missing references)
			//IL_0464: Expected O, but got Unknown
			//IL_046f: Expected O, but got Unknown
			//IL_0475: Unknown result type (might be due to invalid IL or missing references)
			//IL_047d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0482: Unknown result type (might be due to invalid IL or missing references)
			//IL_048d: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_04df: Expected O, but got Unknown
			//IL_04e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f5: Expected O, but got Unknown
			//IL_0575: Unknown result type (might be due to invalid IL or missing references)
			//IL_057a: Unknown result type (might be due to invalid IL or missing references)
			if (!added)
			{
				M_Gamemode val = __instance.baseDatabase.gamemodeAssets.First((M_Gamemode x) => ((Object)x).name == "GM_Endless_Pipeworks");
				M_Gamemode val2 = __instance.baseDatabase.gamemodeAssets.First((M_Gamemode x) => ((Object)x).name == "GM_Endless_Habitation");
				M_Gamemode val3 = ScriptableObject.CreateInstance<M_Gamemode>();
				val3.allowAchievements = false;
				val3.allowCheatedScores = false;
				val3.allowCheats = true;
				val3.allowLeaderboardScoring = false;
				val3.steamLeaderboardName = "";
				val3.allowHeightAchievements = true;
				val3.baseGamemode = true;
				val3.useGamemodeSettings = true;
				val3.modeType = (GameType)0;
				val3.capsuleName = "";
				val3.capsuleArt = val2.capsuleArt;
				val3.gamemodeName = "Endless Service Shaft";
				val3.introText = "ONLY SERVICE SHAFT";
				val3.isEndless = true;
				val3.hasPerks = true;
				val3.hasRevives = false;
				((Object)val3).name = "GM_Endless_ServiceShaft";
				val3.newGameText = "Start Run";
				val3.startItems = new List<SpawnItem>(2)
				{
					new SpawnItem
					{
						itemid = "Item_Hammer",
						position = new Vector2(-0.4f, 0f)
					},
					new SpawnItem
					{
						itemid = "Item_Flashlight",
						position = new Vector2(0.4f, 0f)
					}
				};
				val3.regions = new List<M_Region>(2)
				{
					new M_Region
					{
						regionName = "Service Shaft",
						startLevelReferences = new List<LevelAssetHolder>(1) { GetLevelAsset("M3_Habitation_Shaft_Intro", __instance.baseDatabase) },
						regionOrder = (RegionOrder)1,
						useRegionHeight = false,
						subregionGroups = new List<SubregionGroup>(1)
						{
							new SubregionGroup
							{
								subregions = new List<M_Subregion>(1)
								{
									new M_Subregion
									{
										subregionName = "ServiceShaft",
										name = "ServiceShaft",
										subregionHeight = 150f,
										useLevelCount = true,
										announcementGroups = new List<AnnouncementGroup>(),
										flagBlacklist = new List<string>(),
										flagWhitelist = new List<string>(),
										subregionMaxLength = 5,
										subregionMinLength = 3,
										subregionOrder = (SubregionOrder)0,
										levelReferences = new List<LevelAssetHolder>(7)
										{
											GetLevelAsset("M3_Habitation_Shaft_01", __instance.baseDatabase),
											GetLevelAsset("M3_Habitation_Shaft_02", __instance.baseDatabase),
											GetLevelAsset("M3_Habitation_Shaft_03", __instance.baseDatabase),
											GetLevelAsset("M3_Habitation_Shaft_04", __instance.baseDatabase),
											GetLevelAsset("M3_Habitation_Shaft_05", __instance.baseDatabase),
											GetLevelAsset("M3_Habitation_Shaft_06", __instance.baseDatabase),
											GetLevelAsset("M3_Habitation_Shaft_07", __instance.baseDatabase)
										},
										sessionEventLists = new List<SessionEventList>()
									}
								}
							}
						},
						transitionLevels = new List<TransitionLevels>(1)
						{
							new TransitionLevels
							{
								fromRegion = "Breakroom",
								levelReferences = new List<LevelAssetHolder>(1) { GetLevelAsset("M3_Habitation_Endless_Shaft_Start", __instance.baseDatabase) },
								levels = new List<M_Level>(1) { GetLevelAsset("M3_Habitation_Endless_Shaft_Start", __instance.baseDatabase).level }
							}
						},
						sessionEventLists = new List<SessionEventList>()
					},
					new M_Region
					{
						regionName = "Breakroom",
						startLevelReferences = new List<LevelAssetHolder>(),
						regionOrder = (RegionOrder)1,
						regionHeight = 1f,
						subregionGroups = new List<SubregionGroup>(1)
						{
							new SubregionGroup
							{
								subregions = new List<M_Subregion>(1)
								{
									new M_Subregion
									{
										subregionName = "Breakroom",
										name = "Breakroom",
										subregionHeight = 150f,
										announcementGroups = new List<AnnouncementGroup>(),
										flagBlacklist = new List<string>(),
										flagWhitelist = new List<string>(),
										subregionMaxLength = 5,
										subregionMinLength = 3,
										subregionOrder = (SubregionOrder)1,
										levelReferences = new List<LevelAssetHolder>(1) { GetLevelAsset("M3_Habitation_Endless_Breakroom_01", __instance.baseDatabase) },
										sessionEventLists = new List<SessionEventList>()
									}
								}
							}
						},
						transitionLevels = new List<TransitionLevels>(1)
						{
							new TransitionLevels
							{
								fromRegion = "Service Shaft",
								levelReferences = new List<LevelAssetHolder>(1) { GetLevelAsset("M3_Habitation_Endless_Shaft_End", __instance.baseDatabase) },
								levels = new List<M_Level>(1) { GetLevelAsset("M3_Habitation_Endless_Shaft_End", __instance.baseDatabase).level }
							}
						},
						sessionEventLists = new List<SessionEventList>()
					}
				};
				val3.gamemodeScene = val.gamemodeScene;
				val3.roachBankID = val.roachBankID;
				val3.gamemodePanel = val.gamemodePanel;
				val3.loseScreen = val.loseScreen;
				val3.winScreen = val.winScreen;
				val3.modeTags = val.modeTags;
				val3.unlockAchievement = val.unlockAchievement;
				val3.gamemodeModule = val.gamemodeModule;
				val3.levelsToGenerate = val.levelsToGenerate;
				val3.availableTrinkets = val.availableTrinkets;
				val3.gamemodeColor = val.gamemodeColor;
				val3.gamemodeSettings = val.gamemodeSettings;
				val3.playlistLevelAssets = val.playlistLevelAssets;
				val3.playlistLevels = val.playlistLevels;
				val3.roachEndSprite = val.roachEndSprite;
				val3.screenArt = val2.screenArt;
				val3.gamemodeObjects = val.gamemodeObjects;
				val3.unlockHint = val.unlockHint;
				__instance.baseDatabase.gamemodeAssets.Add(val3);
				Plugin.endlessServiceShaftGamemode = val3;
				added = true;
			}
		}
	}
}