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;
}
}
}
}