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 RepoAdminMenu v1.0.15
RepoAdminMenu.dll
Decompiled 5 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.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using ExitGames.Client.Photon; using HarmonyLib; using MenuLib; using MenuLib.MonoBehaviors; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Photon.Pun; using Photon.Realtime; using REPOLib.Modules; using RepoAdminMenu.Patches; using RepoAdminMenu.Utils; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("RepoAdminMenu")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("proferabg")] [assembly: AssemblyProduct("RepoAdminMenu")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/proferabg/RepoAdminMenu")] [assembly: ComVisible(false)] [assembly: Guid("3ae48784-5268-4c13-9676-09db1348e95e")] [assembly: AssemblyFileVersion("1.0.15.0")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.15.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 RepoAdminMenu { internal class Configuration { public static ConfigEntry<bool> EnableCommands { get; private set; } public static ConfigEntry<bool> EnableHotkey { get; private set; } public static ConfigEntry<KeyCode> MenuHotkey { get; private set; } public static ConfigEntry<int> MaxUpgradeLevel { get; private set; } public static ConfigEntry<bool> ResetSettingsOnLobbyCreation { get; private set; } public static ConfigEntry<bool> CloseMenuOnSpawning { get; private set; } public static void Init(ConfigFile config) { EnableCommands = config.Bind<bool>("General", "EnableCommands", true, "Enables RepoAdminMenu commands"); EnableHotkey = config.Bind<bool>("General", "EnableHotkey", true, "Enables RepoAdminMenu menu"); MenuHotkey = config.Bind<KeyCode>("General", "MenuHotkey", (KeyCode)289, "Key to open or close the menu"); MaxUpgradeLevel = config.Bind<int>("General", "MaxUpgrade", 25, "Changes the slider max value for player upgrades"); ResetSettingsOnLobbyCreation = config.Bind<bool>("General", "ResetSettingsOnLobbyCreation", true, "Should menu settings and player toggles reset on new lobby creation"); CloseMenuOnSpawning = config.Bind<bool>("General", "CloseMenuOnSpawning", true, "Should the menu close when spawning an enemy"); } } internal class Menu { [CompilerGenerated] private sealed class <openPageInternal>d__17 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public string name; public REPOPopupPage page; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <openPageInternal>d__17(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(0.05f); <>1__state = 1; return true; case 1: <>1__state = -1; foreach (KeyValuePair<string, Action<string, REPOPopupPage>> menuPostCallback in menuPostCallbacks) { RepoAdminMenu.mls.LogInfo((object)("Running post-callback for '" + menuPostCallback.Key + "' on menu '" + name + "'")); menuPostCallback.Value(name, page); } RepoAdminMenu.mls.LogInfo((object)("Opening: " + ((Object)page.menuPage).name)); removeAllPagesMethod.Invoke(MenuManager.instance, new object[0]); page.OpenPage(false); currentMenu = page; currentMenuStr = name; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static string selectedPlayerId; private static REPOPopupPage currentMenu; private static string currentMenuStr = ""; private static Dictionary<string, Action> menus = new Dictionary<string, Action>(); private static MethodInfo removeAllPagesMethod = AccessTools.Method(typeof(MenuManager), "PageCloseAll", (Type[])null, (Type[])null); private static Dictionary<string, Action<string, REPOPopupPage>> menuPreCallbacks = new Dictionary<string, Action<string, REPOPopupPage>>(); private static Dictionary<string, Action<string, REPOPopupPage>> menuPostCallbacks = new Dictionary<string, Action<string, REPOPopupPage>>(); public static void Init() { registerMenu("playerList", openPlayerListMenu); registerMenu("player", openPlayerMenu); registerMenu("playerUpgrade", openPlayerUpgrades); registerMenu("spawn", openSpawnMenu); registerMenu("spawnItem", openSpawnItemsMenu); registerMenu("spawnEnemy", openSpawnEnemyMenu); registerMenu("spawnValuable", openSpawnValuablesMenu); registerMenu("spawnValuableTiny", openSpawnValuablesTinyMenu); registerMenu("spawnValuableSmall", openSpawnValuablesSmallMenu); registerMenu("spawnValuableMedium", openSpawnValuablesMediumMenu); registerMenu("spawnValuableBig", openSpawnValuablesBigMenu); registerMenu("spawnValuableWide", openSpawnValuablesWideMenu); registerMenu("spawnValuableTall", openSpawnValuablesTallMenu); registerMenu("spawnValuableVeryTall", openSpawnValuablesVeryTallMenu); registerMenu("map", openMapMenu); registerMenu("levelSelector", openLevelSelectorMenu); registerMenu("settings", openSettingsMenu); registerMenu("credits", openCreditsMenu); registerMenu("mainmenu", openMainMenu); } public static void registerMenu(string name, Action openAction) { menus.Add(name, openAction); } public static void addMenuPreCallback(string mod_name, Action<string, REPOPopupPage> action) { menuPreCallbacks.Add(mod_name, action); } public static void removeMenuPreCallback(string mod_name) { menuPreCallbacks.Remove(mod_name); } public static void addMenuPostCallback(string mod_name, Action<string, REPOPopupPage> action) { menuPostCallbacks.Add(mod_name, action); } public static void removeMenuPostCallback(string mod_name) { menuPostCallbacks.Remove(mod_name); } public static void toggleMenu() { if (menus.Count < 1) { Init(); } if (SemiFunc.MenuLevel()) { RepoAdminMenu.mls.LogInfo((object)"Repo Admin Menu can only be opened while in-game!"); return; } if (!SemiFunc.IsMasterClientOrSingleplayer()) { RepoAdminMenu.mls.LogInfo((object)"Repo Admin Menu can only be opened in single player or as host in multiplayer!"); return; } if ((Object)(object)currentMenu != (Object)null && ((Behaviour)currentMenu).isActiveAndEnabled) { closePage(currentMenu); return; } RepoAdminMenu.mls.LogInfo((object)"Opening menu"); menus.GetValueOrDefault(currentMenuStr, openMainMenu)(); } public static void closePage(REPOPopupPage page) { RepoAdminMenu.mls.LogInfo((object)("Closing: " + ((Object)page.menuPage).name)); removeAllPagesMethod.Invoke(MenuManager.instance, new object[0]); page.ClosePage(true); MenuManager.instance.PageRemove(page.menuPage); if ((Object)(object)currentMenu == (Object)(object)page) { currentMenu = null; } } public static void navigate(REPOPopupPage page, string menu) { closePage(page); menus.GetValueOrDefault(menu, delegate { RepoAdminMenu.mls.LogError((object)("Menu not found: " + menu)); })(); } public static void openPage(REPOPopupPage page, string name) { ((MonoBehaviour)MenuManager.instance).StartCoroutine(openPageInternal(page, name)); } [IteratorStateMachine(typeof(<openPageInternal>d__17))] private static IEnumerator openPageInternal(REPOPopupPage page, string name) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <openPageInternal>d__17(0) { page = page, name = name }; } public static REPOPopupPage createMenu(string title, string currentMenu, string parentMenu) { REPOPopupPage val = MenuAPI.CreateREPOPopupPage(title, (PresetSide)0, false, true, 0f); foreach (KeyValuePair<string, Action<string, REPOPopupPage>> menuPreCallback in menuPreCallbacks) { RepoAdminMenu.mls.LogInfo((object)("Running pre-callback for '" + menuPreCallback.Key + "' on menu '" + currentMenu + "'")); menuPreCallback.Value(currentMenu, val); } addBackButton(val, parentMenu); return val; } public static REPOPopupPage createMainMenu(string title) { REPOPopupPage val = MenuAPI.CreateREPOPopupPage(title, (PresetSide)0, false, true, 0f); foreach (KeyValuePair<string, Action<string, REPOPopupPage>> menuPreCallback in menuPreCallbacks) { RepoAdminMenu.mls.LogInfo((object)("Running pre-callback for '" + menuPreCallback.Key + "' on menu 'mainmenu'")); menuPreCallback.Value("mainmenu", val); } addCloseButton(val); return val; } public static void addButton(REPOPopupPage parent, string text, Action action) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown parent.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOButton(text, action, scrollView, default(Vector2))).rectTransform), 0f, 0f); } public static void addBackButton(REPOPopupPage parent, string parentMenu) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown parent.AddElement((BuilderDelegate)delegate(Transform transform) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) MenuAPI.CreateREPOButton("← Back", (Action)delegate { closePage(parent); menus.GetValueOrDefault(parentMenu, delegate { RepoAdminMenu.mls.LogError((object)("Menu not found: " + parentMenu)); })(); }, transform, new Vector2(250f, 20f)); }); } public static void addCloseButton(REPOPopupPage parent) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown parent.AddElement((BuilderDelegate)delegate(Transform transform) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) MenuAPI.CreateREPOButton("Close", (Action)delegate { closePage(parent); }, transform, new Vector2(270f, 20f)); }); } public static void addToggle(REPOPopupPage parent, string text, Action<bool> action, bool defaultValue, string[] buttonText = null) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown parent.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOToggle(text, action, scrollView, Vector2.zero, (buttonText == null || buttonText.Length < 2) ? "Off" : buttonText[0], (buttonText == null || buttonText.Length < 2) ? "On" : buttonText[1], !defaultValue)).rectTransform), 0f, 0f); } public static void addLabel(REPOPopupPage parent, string text) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown parent.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOLabel(text, scrollView, default(Vector2))).rectTransform), 0f, 0f); } public static void addIntSlider(REPOPopupPage parent, string text, string description, Action<int> action, int min, int max, int defaultValue) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown parent.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOSlider(text, description, action, scrollView, Vector2.zero, min, max, defaultValue, "", "", (BarBehavior)0)).rectTransform), 0f, 0f); } public static void addFloatSlider(REPOPopupPage parent, string text, string description, Action<float> action, float min, float max, int precision, float defaultValue) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown parent.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOSlider(text, description, action, scrollView, Vector2.zero, min, max, precision, defaultValue, "", "", (BarBehavior)0)).rectTransform), 0f, 0f); } public static void addStringSlider(REPOPopupPage parent, string text, string description, Action<string> action, string[] options, string defaultValue) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown parent.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOSlider(text, description, action, scrollView, options, defaultValue, Vector2.zero, "", "", (BarBehavior)0)).rectTransform), 0f, 0f); } public static void openMainMenu() { REPOPopupPage mainMenu = createMainMenu("R.E.P.O. Admin Menu"); addButton(mainMenu, "Players", delegate { navigate(mainMenu, "playerList"); }); addButton(mainMenu, "Spawn", delegate { navigate(mainMenu, "spawn"); }); addButton(mainMenu, "Map", delegate { navigate(mainMenu, "map"); }); addButton(mainMenu, "Settings", delegate { navigate(mainMenu, "settings"); }); addButton(mainMenu, "Credits", delegate { navigate(mainMenu, "credits"); }); addButton(mainMenu, "Report a Bug", delegate { Application.OpenURL("https://github.com/proferabg/RepoAdminMenu/issues/new?template=bug_report.md"); Application.OpenURL("file://" + Application.persistentDataPath + "/Player.log"); }); openPage(mainMenu, "mainmenu"); } private static void openPlayerListMenu() { REPOPopupPage playersMenu = createMenu("R.A.M. - Players", "playerList", "mainmenu"); foreach (PlayerAvatar player in SemiFunc.PlayerGetAll()) { addButton(playersMenu, SemiFunc.PlayerGetName(player), delegate { selectedPlayerId = SemiFunc.PlayerGetSteamID(player); navigate(playersMenu, "player"); }); } openPage(playersMenu, "playerList"); } private static void openPlayerMenu() { if (selectedPlayerId == null || (Object)(object)SemiFunc.PlayerGetFromSteamID(selectedPlayerId) == (Object)null) { RepoAdminMenu.mls.LogInfo((object)"No player selected"); openPlayerListMenu(); return; } PlayerAvatar avatar = SemiFunc.PlayerGetFromSteamID(selectedPlayerId); REPOPopupPage playerMenu = createMenu("R.A.M. - " + SemiFunc.PlayerGetName(avatar), "player", "playerList"); addToggle(playerMenu, "God Mode", delegate(bool b) { Settings.toggle(Settings.instance.godModePlayers, avatar.steamID, b); }, Settings.isGod(avatar)); addToggle(playerMenu, "No Death", delegate(bool b) { Settings.toggle(Settings.instance.noDeathPlayers, avatar.steamID, b); }, Settings.isNoDeath(avatar)); addToggle(playerMenu, "No Target", delegate(bool b) { Settings.toggle(Settings.instance.noTargetPlayers, avatar.steamID, b); }, Settings.isNoTarget(avatar)); addToggle(playerMenu, "No Tumble", delegate(bool b) { Settings.toggle(Settings.instance.noTumblePlayers, avatar.steamID, b); }, Settings.isNoTumble(avatar)); addToggle(playerMenu, "Infinite Stamina", delegate(bool b) { Settings.toggle(Settings.instance.infiniteStaminaPlayers, avatar.steamID, b); }, Settings.isInfiniteStamina(avatar)); addToggle(playerMenu, "Force Tumble", delegate(bool b) { Settings.toggleDictLong(Settings.instance.forcedTumble, avatar.steamID, b); }, Settings.isForceTumble(avatar)); addButton(playerMenu, "Upgrades", delegate { navigate(playerMenu, "playerUpgrade"); }); addButton(playerMenu, "Heal", delegate { PlayerUtil.healPlayer(avatar); }); addButton(playerMenu, "Kill", delegate { PlayerUtil.killPlayer(avatar); }); addButton(playerMenu, "Revive", delegate { PlayerUtil.revivePlayer(avatar); }); addButton(playerMenu, "Teleport To Player", delegate { PlayerUtil.teleportTo(avatar); }); addButton(playerMenu, "Summon", delegate { PlayerUtil.summon(avatar); }); addButton(playerMenu, "Return To Truck", delegate { PlayerUtil.returnToTruck(avatar); }); addButton(playerMenu, "Give Crown", delegate { PlayerUtil.giveCrown(avatar); }); addButton(playerMenu, "Kick Player", delegate { closePage(playerMenu); openConfirmMenu("player", "Kick: " + SemiFunc.PlayerGetName(avatar), new Dictionary<string, Action> { { "Yes", delegate { PlayerUtil.KickPlayer(avatar); } }, { "No", null } }); }); addButton(playerMenu, "Ban Player", delegate { closePage(playerMenu); openConfirmMenu("player", "Ban: " + SemiFunc.PlayerGetName(avatar), new Dictionary<string, Action> { { "Yes", delegate { PlayerUtil.BanPlayer(avatar); } }, { "No", null } }); }); openPage(playerMenu, "player"); } private static void openPlayerUpgrades() { if (selectedPlayerId == null || (Object)(object)SemiFunc.PlayerGetFromSteamID(selectedPlayerId) == (Object)null) { RepoAdminMenu.mls.LogInfo((object)"No player selected"); openPlayerListMenu(); return; } PlayerAvatar avatar = SemiFunc.PlayerGetFromSteamID(selectedPlayerId); REPOPopupPage val = createMenu("R.A.M. - " + SemiFunc.PlayerGetName(avatar) + " - Upgrades", "playerUpgrade", "player"); foreach (KeyValuePair<string, UpgradeUtil.GameUpgrade> upgradePair2 in UpgradeUtil.GetGameUpgrades()) { addIntSlider(val, upgradePair2.Value.GetName(), "", delegate(int v) { upgradePair2.Value.Upgrade(avatar, v); }, 0, Configuration.MaxUpgradeLevel.Value, upgradePair2.Value.GetPlayerLevel(avatar)); } foreach (KeyValuePair<string, PlayerUpgrade> upgradePair in UpgradeUtil.GetModUpgrades()) { addIntSlider(val, "(Mod) " + upgradePair.Key, "", delegate(int v) { UpgradeUtil.UpgradeLevel(upgradePair.Value, avatar, v); }, 0, Configuration.MaxUpgradeLevel.Value, upgradePair.Value.GetLevel(avatar)); } openPage(val, "playerUpgrade"); } private static void openSpawnMenu() { REPOPopupPage spawnerMenu = createMenu("R.A.M. - Spawn", "spawn", "mainmenu"); addButton(spawnerMenu, "Items", delegate { navigate(spawnerMenu, "spawnItem"); }); addButton(spawnerMenu, "Valuables", delegate { navigate(spawnerMenu, "spawnValuable"); }); addButton(spawnerMenu, "Enemies", delegate { navigate(spawnerMenu, "spawnEnemy"); }); openPage(spawnerMenu, "spawn"); } private static void openSpawnItemsMenu() { REPOPopupPage val = createMenu("R.A.M. - Spawn - Items", "spawnItem", "spawn"); foreach (KeyValuePair<string, Item> entry in ItemUtil.getItems()) { addButton(val, entry.Key, delegate { ItemUtil.spawnItem(entry.Value); }); } openPage(val, "spawnItem"); } private static void openSpawnValuablesMenu() { REPOPopupPage valuablesMenu = createMenu("R.A.M. - Spawn - Valuables", "spawnValuable", "spawn"); addButton(valuablesMenu, "Tiny", delegate { navigate(valuablesMenu, "spawnValuableTiny"); }); addButton(valuablesMenu, "Small", delegate { navigate(valuablesMenu, "spawnValuableSmall"); }); addButton(valuablesMenu, "Medium", delegate { navigate(valuablesMenu, "spawnValuableMedium"); }); addButton(valuablesMenu, "Big", delegate { navigate(valuablesMenu, "spawnValuableBig"); }); addButton(valuablesMenu, "Wide", delegate { navigate(valuablesMenu, "spawnValuableWide"); }); addButton(valuablesMenu, "Tall", delegate { navigate(valuablesMenu, "spawnValuableTall"); }); addButton(valuablesMenu, "Very Tall", delegate { navigate(valuablesMenu, "spawnValuableVeryTall"); }); openPage(valuablesMenu, "spawnValuable"); } private static void openSpawnValuablesTinyMenu() { REPOPopupPage val = createMenu("R.A.M. - Tiny Valuables", "spawnValuableTiny", "spawnValuable"); foreach (KeyValuePair<string, PrefabRef> entry in ValuableUtil.getTinyValuables()) { addButton(val, entry.Key, delegate { ValuableUtil.spawnValuable(entry.Value); }); } openPage(val, "spawnValuableTiny"); } private static void openSpawnValuablesSmallMenu() { REPOPopupPage val = createMenu("R.A.M. - Small Valuables", "spawnValuableSmall", "spawnValuable"); foreach (KeyValuePair<string, PrefabRef> entry in ValuableUtil.getSmallValuables()) { addButton(val, entry.Key, delegate { ValuableUtil.spawnValuable(entry.Value); }); } openPage(val, "spawnValuableSmall"); } private static void openSpawnValuablesMediumMenu() { REPOPopupPage val = createMenu("R.A.M. - Medium Valuables", "spawnValuableMedium", "spawnValuable"); foreach (KeyValuePair<string, PrefabRef> entry in ValuableUtil.getMediumValuables()) { addButton(val, entry.Key, delegate { ValuableUtil.spawnValuable(entry.Value); }); } openPage(val, "spawnValuableMedium"); } private static void openSpawnValuablesBigMenu() { REPOPopupPage val = createMenu("R.A.M. - Big Valuables", "spawnValuableBig", "spawnValuable"); foreach (KeyValuePair<string, PrefabRef> entry in ValuableUtil.getBigValuables()) { addButton(val, entry.Key, delegate { ValuableUtil.spawnValuable(entry.Value); }); } openPage(val, "spawnValuableBig"); } private static void openSpawnValuablesWideMenu() { REPOPopupPage val = createMenu("R.A.M. - Wide Valuables", "spawnValuableWide", "spawnValuable"); foreach (KeyValuePair<string, PrefabRef> entry in ValuableUtil.getWideValuables()) { addButton(val, entry.Key, delegate { ValuableUtil.spawnValuable(entry.Value); }); } openPage(val, "spawnValuableWide"); } private static void openSpawnValuablesTallMenu() { REPOPopupPage val = createMenu("R.A.M. - Tall Valuables", "spawnValuableTall", "spawnValuable"); foreach (KeyValuePair<string, PrefabRef> entry in ValuableUtil.getTallValuables()) { addButton(val, entry.Key, delegate { ValuableUtil.spawnValuable(entry.Value); }); } openPage(val, "spawnValuableTall"); } private static void openSpawnValuablesVeryTallMenu() { REPOPopupPage val = createMenu("R.A.M. - Very Tall Valuables", "spawnValuableVeryTall", "spawnValuable"); foreach (KeyValuePair<string, PrefabRef> entry in ValuableUtil.getVeryTallValuables()) { addButton(val, entry.Key, delegate { ValuableUtil.spawnValuable(entry.Value); }); } openPage(val, "spawnValuableVeryTall"); } private static void openSpawnEnemyMenu() { REPOPopupPage val = createMenu("R.A.M. - Spawn - Enemies", "spawnEnemy", "spawn"); foreach (string enemy in EnemyUtil.getEnemies().Keys) { addButton(val, enemy, delegate { EnemyUtil.spawnEnemy(enemy); }); } foreach (string enemy2 in EnemyUtil.getModEnemies().Keys) { addButton(val, "(Mod) " + enemy2, delegate { EnemyUtil.spawnEnemy(enemy2); }); } openPage(val, "spawnEnemy"); } private static void openMapMenu() { REPOPopupPage mapMenu = createMenu("R.A.M. - Map Settings", "map", "mainmenu"); foreach (KeyValuePair<string, Level> entry in MapUtil.getMaps()) { addToggle(mapMenu, entry.Key, delegate(bool b) { MapUtil.setMapEnabled(entry.Value, b); }, MapUtil.isMapEnabled(entry.Value)); } addIntSlider(mapMenu, "Current Level", "", delegate(int v) { RunManager.instance.levelsCompleted = v; }, 1, 500, RunManager.instance.levelsCompleted); addIntSlider(mapMenu, "Money", "", delegate(int v) { PunManager.instance.SetRunStatSet("currency", v); }, 0, 9999, StatsManager.instance.runStats["currency"]); addButton(mapMenu, "Map Selector", delegate { navigate(mapMenu, "levelSelector"); }); addButton(mapMenu, "Discover Extraction Point", ExtractionPointUtil.discoverNext); addButton(mapMenu, "Complete Extraction Point", ExtractionPointUtil.complete); openPage(mapMenu, "map"); } private static void openLevelSelectorMenu() { REPOPopupPage val = createMenu("R.A.M. - Map Selector", "levelSelector", "map"); foreach (KeyValuePair<string, Level> entry in MapUtil.getMaps()) { addButton(val, entry.Key, delegate { MapUtil.changeLevel(entry.Value); }); } addButton(val, "Arena", delegate { MapUtil.changeLevel(RunManager.instance.levelArena); }); addButton(val, "Lobby", delegate { MapUtil.changeLevel(RunManager.instance.levelLobby); }); addButton(val, "Shop", delegate { MapUtil.changeLevel(RunManager.instance.levelShop); }); openPage(val, "levelSelector"); } private static void openSettingsMenu() { REPOPopupPage obj = createMenu("R.A.M. - Settings", "settings", "mainmenu"); addToggle(obj, "Infinite Money", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.infiniteMoney, !b); Settings.UpdateClients(); }, Settings.instance.infiniteMoney); addToggle(obj, "No Break", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.noBreak, !b); }, Settings.instance.noBreak); addToggle(obj, "No Battery/Ammo Drain", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.noBatteryDrain, !b); }, Settings.instance.noBatteryDrain); addToggle(obj, "No Traps", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.noTraps, !b); }, Settings.instance.noTraps); addToggle(obj, "Weak Enemies", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.weakEnemies, !b); }, Settings.instance.weakEnemies); addToggle(obj, "Deaf Enemies", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.deafEnemies, !b); }, Settings.instance.deafEnemies); addToggle(obj, "Blind Enemies", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.blindEnemies, !b); }, Settings.instance.blindEnemies); addToggle(obj, "Boom Hammer", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.boomhammer, !b); }, Settings.instance.boomhammer); addToggle(obj, "Friendly Duck", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.friendlyDuck, !b); }, Settings.instance.friendlyDuck); addToggle(obj, "Upgrade In Shop", delegate(bool b) { Settings.UpdateOption(ref Settings.instance.useShopUpgrades, !b); }, Settings.instance.useShopUpgrades); openPage(obj, "settings"); } private static void openCreditsMenu() { REPOPopupPage obj = createMenu("R.A.M. - Credits", "credits", "mainmenu"); addLabel(obj, "Repo Admin Menu by"); addLabel(obj, " proferabg "); addLabel(obj, ""); addLabel(obj, "Special thanks to:"); addLabel(obj, " - REPOrium_Team"); addLabel(obj, " - nickklmao"); addLabel(obj, " - Godji"); addLabel(obj, " - Zehs"); addLabel(obj, ""); addLabel(obj, "Repo Admin Menu © 2025"); openPage(obj, "credits"); } private static void openConfirmMenu(string currentMenu, string message, Dictionary<string, Action> options) { REPOPopupPage confirmMenu = createMenu("R.A.M. - Confirm", "confirm", "player"); confirmMenu.closeMenuOnEscape = false; addLabel(confirmMenu, message); addLabel(confirmMenu, ""); foreach (KeyValuePair<string, Action> option in options) { addButton(confirmMenu, option.Key, delegate { if (option.Value != null) { option.Value(); } navigate(confirmMenu, currentMenu); }); } openPage(confirmMenu, "confirm"); } public static string getSelectedPlayer() { return selectedPlayerId; } } [HarmonyPatch(typeof(ChatManager))] internal class ChatManagerPatch { [HarmonyPatch("MessageSend")] [HarmonyPrefix] private static bool MessageSend_Prefix(ChatManager __instance, ref string ___chatMessage) { if (!Configuration.EnableCommands.Value || !SemiFunc.IsMasterClientOrSingleplayer()) { return true; } if (___chatMessage.Replace("<b>|</b>", string.Empty).ToLower().Split(' ')[0] == "!menu") { Menu.toggleMenu(); return false; } return true; } } [BepInPlugin("proferabg.REPO.RepoAdminMenu", "Repo Admin Menu", "1.0.15")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class RepoAdminMenu : BaseUnityPlugin { private const string mod_guid = "proferabg.REPO.RepoAdminMenu"; private const string mod_name = "Repo Admin Menu"; private const string mod_version = "1.0.15"; private static RepoAdminMenu _plugin; public static Harmony harmony = new Harmony("proferabg.REPO.RepoAdminMenu"); public static ManualLogSource mls; public void Awake() { if ((Object)(object)_plugin == (Object)null) { _plugin = this; } mls = Logger.CreateLogSource("Repo Admin Menu"); Configuration.Init(((BaseUnityPlugin)this).Config); Settings.Init(); harmony.PatchAll(); mls.LogInfo((object)"R.A.M. (1.0.15) has been allocated!"); } } internal class Settings { internal static Settings instance; public bool infiniteMoney; public bool noBreak; public bool noBatteryDrain; public bool noTraps; public bool weakEnemies; public bool deafEnemies; public bool blindEnemies; public bool boomhammer; public bool friendlyDuck; public bool useShopUpgrades; public List<string> godModePlayers = new List<string>(); public List<string> noDeathPlayers = new List<string>(); public List<string> infiniteStaminaPlayers = new List<string>(); public List<string> noTargetPlayers = new List<string>(); public List<string> noTumblePlayers = new List<string>(); public Dictionary<string, long> forcedTumble = new Dictionary<string, long>(); public Settings() { instance = this; } public static void Init() { if (instance == null) { new Settings(); } } public static void toggle(List<string> list, string steamId, bool value) { if (value) { list.Remove(steamId); } else { list.Add(steamId); } UpdateClients(); } public static void toggleDictLong(Dictionary<string, long> list, string steamId, bool value) { if (value) { list.Remove(steamId); } else { list.Add(steamId, 0L); } UpdateClients(); } public static bool isGod(PlayerAvatar avatar) { return instance.godModePlayers.Contains(SemiFunc.PlayerGetSteamID(avatar)); } public static bool isNoDeath(PlayerAvatar avatar) { return instance.noDeathPlayers.Contains(SemiFunc.PlayerGetSteamID(avatar)); } public static bool isInfiniteStamina(PlayerAvatar avatar) { return instance.infiniteStaminaPlayers.Contains(SemiFunc.PlayerGetSteamID(avatar)); } public static bool isNoTarget(PlayerAvatar avatar) { return instance.noTargetPlayers.Contains(SemiFunc.PlayerGetSteamID(avatar)); } public static bool isNoTumble(PlayerAvatar avatar) { return instance.noTumblePlayers.Contains(SemiFunc.PlayerGetSteamID(avatar)); } public static bool isForceTumble(PlayerAvatar avatar) { return instance.forcedTumble.ContainsKey(SemiFunc.PlayerGetSteamID(avatar)); } internal static long getLastForceTumble(PlayerAvatar avatar) { return instance.forcedTumble.GetValueOrDefault(SemiFunc.PlayerGetSteamID(avatar), 0L); } internal static long setLastForceTumble(PlayerAvatar avatar, long lastTumble) { return instance.forcedTumble[SemiFunc.PlayerGetSteamID(avatar)] = lastTumble; } public static void UpdateOption(ref bool option, bool value) { option = value; UpdateClients(); } public static void UpdateClients() { if (SemiFunc.IsMasterClient()) { RepoAdminMenu.mls.LogInfo((object)"Sending Settings Sync"); NetworkUtil.SendCommandString("SettingsSync", instance.toJson(), (ReceiverGroup)0); } } public string toJson() { return JsonConvert.SerializeObject((object)this); } public static void loadFromJson(string json) { instance = JsonConvert.DeserializeObject<Settings>(json); } internal void log() { RepoAdminMenu.mls.LogInfo((object)("\n\n\n" + instance.toJson() + "\n\n\n")); RepoAdminMenu.mls.LogInfo((object)("Current Settings:\n infiniteMoney - " + instance.infiniteMoney + "\n noBreak - " + instance.noBreak + "\n noBatteryDrain - " + instance.noBatteryDrain + "\n noTraps - " + instance.noTraps + "\n weakEnemies - " + instance.weakEnemies + "\n deafEnemies - " + instance.deafEnemies + "\n blindEnemies - " + instance.blindEnemies + "\n boomhammer - " + instance.boomhammer + "\n friendlyDuck - " + instance.friendlyDuck + "\n useShopUpgrades - " + instance.useShopUpgrades + "\n godMode: - " + string.Join(",", instance.godModePlayers.Select((string player) => SemiFunc.PlayerGetName(SemiFunc.PlayerGetFromSteamID(player)))) + "\n noDeathPlayers: - " + string.Join(",", instance.noDeathPlayers.Select((string player) => SemiFunc.PlayerGetName(SemiFunc.PlayerGetFromSteamID(player)))) + "\n infiniteStaminaPlayers: - " + string.Join(",", instance.infiniteStaminaPlayers.Select((string player) => SemiFunc.PlayerGetName(SemiFunc.PlayerGetFromSteamID(player)))) + "\n noTargetPlayers: - " + string.Join(",", instance.noTargetPlayers.Select((string player) => SemiFunc.PlayerGetName(SemiFunc.PlayerGetFromSteamID(player)))) + "\n noTumblePlayers: - " + string.Join(",", instance.noTumblePlayers.Select((string player) => SemiFunc.PlayerGetName(SemiFunc.PlayerGetFromSteamID(player)))) + "\n")); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "RepoAdminMenu"; public const string PLUGIN_NAME = "RepoAdminMenu"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace RepoAdminMenu.Utils { internal class EnemyUtil { [CompilerGenerated] private sealed class <SpawnEnemy>d__10 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public EnemySetup enemySetup; public Vector3 position; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SpawnEnemy>d__10(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(3f); <>1__state = 1; return true; case 1: <>1__state = -1; if (SemiFunc.IsMultiplayer()) { Enemies.SpawnEnemy(enemySetup, position, Quaternion.identity, false); } else { EnemyParentPatch.spawning = true; LevelGenerator.Instance.EnemiesSpawned = -1; GameObject val = Object.Instantiate<GameObject>(enemySetup.spawnObjects[0].Prefab, position, Quaternion.identity); EnemyParent component = val.GetComponent<EnemyParent>(); if ((Object)(object)component != (Object)null) { component.SetupDone = true; val.GetComponentInChildren<Enemy>().EnemyTeleported(position); EnemyDirector.instance.FirstSpawnPointAdd(component); EnemyDirector.instance.enemiesSpawned.Add(component); foreach (PlayerAvatar item in SemiFunc.PlayerGetAll()) { component.Enemy.PlayerAdded(item.photonView.ViewID); } } } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static readonly Dictionary<string, string> enemyDictionary = new Dictionary<string, string> { { "Animal", "Animal" }, { "Bang", "Bang" }, { "Beamer", "Clown" }, { "Birthday Boy", "Birthday Boy" }, { "Bomb Thrower", "Cleanup Crew" }, { "Bowtie", "Bowtie" }, { "Ceiling Eye", "Peeper" }, { "Duck", "Apex Predator" }, { "Elsa", "Elsa" }, { "Floater", "Mentalist" }, { "Gnome", "Gnome" }, { "Head", "Headman" }, { "Head Grabber", "Headgrab" }, { "Heart Hugger", "Heart Hugger" }, { "Hidden", "Hidden" }, { "Hunter", "Huntsman" }, { "Oogly", "Oogly" }, { "Robe", "Robe" }, { "Runner", "Reaper" }, { "Shadow", "Loom" }, { "Slow Mouth", "Spewer" }, { "Slow Walker", "Trudge" }, { "Spinny", "Gambit" }, { "Thin Man", "Shadow Child" }, { "Tick", "Tick" }, { "Tricycle", "Bella" }, { "Tumbler", "Chef" }, { "Upscream", "Upscream" }, { "Valuable Thrower", "Rugrat" } }; private static SortedDictionary<string, EnemySetup> enemySetups = new SortedDictionary<string, EnemySetup>(); private static SortedDictionary<string, EnemySetup> modEnemySetups = new SortedDictionary<string, EnemySetup>(); public static void Init() { enemySetups.Clear(); modEnemySetups.Clear(); List<EnemySetup> enemiesDifficulty = EnemyDirector.instance.enemiesDifficulty1; List<EnemySetup> enemiesDifficulty2 = EnemyDirector.instance.enemiesDifficulty2; List<EnemySetup> enemiesDifficulty3 = EnemyDirector.instance.enemiesDifficulty3; List<EnemySetup> list = new List<EnemySetup>(enemiesDifficulty.Count + enemiesDifficulty2.Count + enemiesDifficulty3.Count); list.AddRange(enemiesDifficulty); list.AddRange(enemiesDifficulty2); list.AddRange(enemiesDifficulty3); foreach (EnemySetup item in list) { if (((Object)item).name.StartsWith("Enemy Group")) { continue; } string text = ((Object)item).name.Replace("Enemy - ", string.Empty); try { if (enemyDictionary.TryGetValue(text, out var value)) { addEnemySetupSafe(value, item); } else { addModEnemySetupSafe(text, item); } } catch { RepoAdminMenu.mls.LogError((object)("Invalid enemy setup for name '" + ((Object)item).name + "'!")); } } } internal static void addEnemySetupSafe(string name, EnemySetup setup) { if (!enemySetups.ContainsKey(name)) { enemySetups.Add(name, setup); } } internal static void addModEnemySetupSafe(string name, EnemySetup setup) { if (!modEnemySetups.ContainsKey(name)) { modEnemySetups.Add(name, setup); } } public static SortedDictionary<string, EnemySetup> getEnemies() { return enemySetups; } public static SortedDictionary<string, EnemySetup> getModEnemies() { return modEnemySetups; } private static EnemySetup getEnemySetup(string name) { EnemySetup valueOrDefault = enemySetups.GetValueOrDefault(name, null); if ((Object)(object)valueOrDefault == (Object)null) { valueOrDefault = modEnemySetups.GetValueOrDefault(name, null); } return valueOrDefault; } public static void spawnEnemy(string enemy) { //IL_001c: 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_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) if (EnemyParentPatch.spawning) { MissionUI.instance.MissionText("Already spawning enemy '" + enemy + "'!", Color.red, Color.red, 3f); return; } EnemySetup enemySetup = getEnemySetup(enemy); if ((Object)(object)enemySetup != (Object)null) { Vector3 position = ((Component)PlayerAvatar.instance).transform.position; ((MonoBehaviour)EnemyDirector.instance).StartCoroutine(SpawnEnemy(enemySetup, position)); if (Configuration.CloseMenuOnSpawning.Value) { Menu.toggleMenu(); } MissionUI.instance.MissionText("Spawning '" + enemy + "'. Run...!", Color.red, Color.red, 3f); } else { MissionUI.instance.MissionText("Could not find enemy named '" + enemy + "'", Color.red, Color.red, 3f); } } [IteratorStateMachine(typeof(<SpawnEnemy>d__10))] private static IEnumerator SpawnEnemy(EnemySetup enemySetup, Vector3 position) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SpawnEnemy>d__10(0) { enemySetup = enemySetup, position = position }; } } internal class ExtractionPointUtil { public static void discoverNext() { if (RoundDirector.instance.extractionPointActive) { return; } foreach (GameObject extractionPoint in RoundDirector.instance.extractionPointList) { ExtractionPoint component = extractionPoint.GetComponent<ExtractionPoint>(); if ((Object)(object)component != (Object)null && component.StateIs((State)1)) { component.OnClick(); } } } public static void complete() { if (RoundDirector.instance.extractionPointActive) { RoundDirector.instance.extractionPointCurrent.isCompletedRightAway = true; RoundDirector.instance.extractionPointCurrent.StateSet((State)6); } } } internal class ItemUtil { private static SortedDictionary<string, Item> items = new SortedDictionary<string, Item>(); public static void Init() { items.Clear(); foreach (Item item in StatsManager.instance.itemDictionary.Values.ToList()) { string key = ((Object)item).name.Replace("Item ", string.Empty); if (!items.ContainsKey(key)) { items.Add(key, item); } } } public static SortedDictionary<string, Item> getItems() { return items; } public static void spawnItem(Item item) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)PlayerAvatar.instance).transform.position + new Vector3(0f, 1f, 0f) + ((Component)PlayerAvatar.instance).transform.forward * 1f; GameObject val2 = ((!SemiFunc.IsMultiplayer()) ? Object.Instantiate<GameObject>(item.prefab.Prefab, val, Quaternion.identity) : Items.SpawnItem(item, val, Quaternion.identity)); ItemBattery componentInParent = val2.GetComponentInParent<ItemBattery>(); if (Object.op_Implicit((Object)(object)componentInParent) && componentInParent.batteryBars < 6) { componentInParent.SetBatteryLife(100); } } } internal class MapUtil { private static SortedDictionary<string, Level> maps = new SortedDictionary<string, Level>(); private static Dictionary<Level, bool> mapToggles = new Dictionary<Level, bool>(); private static Level nextLevel = null; public static void Init() { if (maps.Count > 0) { return; } foreach (Level level in RunManager.instance.levels) { maps.Add(((Object)level).name.Replace("Level - ", string.Empty), level); mapToggles.Add(level, value: true); } } public static SortedDictionary<string, Level> getMaps() { return maps; } public static Dictionary<Level, bool> getMapToggles() { return mapToggles; } public static void setMapEnabled(Level level, bool enabled) { if (mapToggles.ContainsKey(level)) { mapToggles[level] = enabled; } } public static bool isMapEnabled(Level level) { return mapToggles.GetValueOrDefault(level, defaultValue: false); } public static int getEnabledCount() { int num = 0; foreach (bool value in mapToggles.Values) { if (value) { num++; } } return num; } public static void changeLevel(Level level) { nextLevel = level; RunManager.instance.ChangeLevel(true, false, (ChangeLevelType)1); } public static Level getNextLevel() { return nextLevel; } public static void clearNextLevel() { nextLevel = null; } public static void resetLevels() { foreach (KeyValuePair<Level, bool> mapToggle in mapToggles) { if (!isMapEnabled(mapToggle.Key)) { if (RunManager.instance.levels.Contains(mapToggle.Key)) { RunManager.instance.levels.Remove(mapToggle.Key); } } else if (!RunManager.instance.levels.Contains(mapToggle.Key)) { RunManager.instance.levels.Add(mapToggle.Key); } } } } internal class NetworkUtil : IOnEventCallback { internal bool registered; internal string clientRandomString = string.Empty; private static Random random = new Random(); internal const byte RAMEventCode = 180; internal static NetworkUtil instance { get; private set; } = null; public NetworkUtil() { instance = this; if (!registered) { RepoAdminMenu.mls.LogInfo((object)"Registering network event callbacks"); PhotonNetwork.AddCallbackTarget((object)this); registered = true; } } public static void Init() { if (instance == null) { new NetworkUtil(); } } private static string randomString(int length) { return new string((from s in Enumerable.Repeat("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%", length) select s[random.Next(s.Length)]).ToArray()); } internal static void SendCommandSteamIDString(string command, string steamId, string value, ReceiverGroup receiverGroup) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown PhotonNetwork.RaiseEvent((byte)180, (object)new object[3] { command, steamId, value }, new RaiseEventOptions { Receivers = receiverGroup }, SendOptions.SendReliable); } internal static void SendCommandSteamIDStringInt(string command, string steamId, string str, int num, ReceiverGroup receiverGroup) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown PhotonNetwork.RaiseEvent((byte)180, (object)new object[4] { command, steamId, str, num }, new RaiseEventOptions { Receivers = receiverGroup }, SendOptions.SendReliable); } internal static void SendCommandString(string command, string value, ReceiverGroup receiverGroup) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //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_0029: Expected O, but got Unknown PhotonNetwork.RaiseEvent((byte)180, (object)new object[2] { command, value }, new RaiseEventOptions { Receivers = receiverGroup }, SendOptions.SendReliable); } internal static void SendCommand(string command, ReceiverGroup receiverGroup) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown PhotonNetwork.RaiseEvent((byte)180, (object)new object[1] { command }, new RaiseEventOptions { Receivers = receiverGroup }, SendOptions.SendReliable); } public void OnEvent(EventData photonEvent) { if (photonEvent.Code != 180) { return; } object[] array = (object[])photonEvent.CustomData; if (array.Length == 1) { string text = array[0].ToString(); if (text == "NeedSettings") { Settings.UpdateClients(); } else { RepoAdminMenu.mls.LogWarning((object)("Network event: Unknown command(" + array.Length + "): " + text)); } } else if (array.Length == 2) { string text2 = array[0].ToString(); string json = array[1].ToString(); if (text2 == "SettingsSync") { if (!SemiFunc.IsMasterClient()) { RepoAdminMenu.mls.LogInfo((object)"Syncing settings with Master Client"); Settings.loadFromJson(json); } } else { RepoAdminMenu.mls.LogWarning((object)("Network event: Unknown command(" + array.Length + "): " + text2)); } } else if (array.Length == 3) { string text3 = array[0].ToString(); string text4 = array[1].ToString(); if ((Object)(object)SemiFunc.PlayerGetFromSteamID(text4) == (Object)null) { RepoAdminMenu.mls.LogWarning((object)("Network event: Invalid player: " + text4)); } else { RepoAdminMenu.mls.LogWarning((object)("Unknown command(" + array.Length + "): " + text3)); } } else if (array.Length == 4) { string text5 = array[0].ToString(); string text6 = array[1].ToString(); PlayerAvatar val = SemiFunc.PlayerGetFromSteamID(text6); if ((Object)(object)val == (Object)null) { RepoAdminMenu.mls.LogWarning((object)("Network event: Invalid player: " + text6)); } else if (text5 == "UpgradeSync") { UpgradeUtil.UpgradeSync(val, array[2].ToString(), (int)array[3]); } else { RepoAdminMenu.mls.LogWarning((object)("Unknown command(" + array.Length + "): " + text5)); } } else { RepoAdminMenu.mls.LogWarning((object)("Received network event with incorrect argument count: " + array.Length)); } } } internal class PlayerUtil { private DateTime lastSync = DateTime.Now; public static void killPlayer(PlayerAvatar avatar) { avatar.PlayerDeath(-1); RepoAdminMenu.mls.LogInfo((object)(SemiFunc.PlayerGetName(avatar) + " Killed!")); } public static void revivePlayer(PlayerAvatar avatar) { if (avatar.deadSet && (Object)(object)avatar.playerDeathHead != (Object)null) { PlayerDeathHead playerDeathHead = avatar.playerDeathHead; playerDeathHead.inExtractionPoint = true; avatar.Revive(false); playerDeathHead.inExtractionPoint = false; RepoAdminMenu.mls.LogInfo((object)(SemiFunc.PlayerGetName(avatar) + " Revived!")); } else { RepoAdminMenu.mls.LogInfo((object)(SemiFunc.PlayerGetName(avatar) + " is not dead. Cannot be revived!")); } } public static void healPlayer(PlayerAvatar avatar) { PlayerHealth playerHealth = avatar.playerHealth; avatar.playerHealth.HealOther(playerHealth.maxHealth, true); RepoAdminMenu.mls.LogInfo((object)(SemiFunc.PlayerGetName(avatar) + " Healed!")); } public static void giveCrown(PlayerAvatar avatar) { SessionManager.instance.crownedPlayerSteamID = SemiFunc.PlayerGetSteamID(avatar); SessionManager.instance.CrownPlayer(); } public static void teleportTo(PlayerAvatar avatar) { teleport(PlayerAvatar.instance, avatar); } public static void summon(PlayerAvatar avatar) { teleport(avatar, PlayerAvatar.instance); } public static void returnToTruck(PlayerAvatar avatar) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) teleport(avatar, ((Component)TruckSafetySpawnPoint.instance).transform.position, ((Component)TruckSafetySpawnPoint.instance).transform.rotation); } private static void teleport(PlayerAvatar from, PlayerAvatar to) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: 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_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)to).transform.position; Quaternion rotation = ((Component)to).transform.rotation; if (to.deadSet) { position = ((Component)to.playerDeathHead.physGrabObject).transform.position; rotation = ((Component)to.playerDeathHead.physGrabObject).transform.rotation; } teleport(from, position, rotation); } private static void teleport(PlayerAvatar from, Vector3 pos, Quaternion rot) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) if (!SemiFunc.IsMultiplayer()) { from.Spawn(pos, rot); } else if ((Object)(object)from.photonView != (Object)null) { if (from.deadSet) { from.playerDeathHead.physGrabObject.Teleport(pos, rot); return; } from.photonView.RPC("SpawnRPC", (RpcTarget)0, new object[2] { pos, rot }); } } public static void KickPlayer(PlayerAvatar avatar) { if (!((Object)(object)avatar == (Object)(object)PlayerAvatar.instance)) { RepoAdminMenu.mls.LogInfo((object)("Sending kick to: " + SemiFunc.PlayerGetName(avatar))); NetworkManager.instance.KickPlayer(avatar); } } public static void BanPlayer(PlayerAvatar avatar) { if (!((Object)(object)avatar == (Object)(object)PlayerAvatar.instance)) { RepoAdminMenu.mls.LogInfo((object)("Sending ban to: " + SemiFunc.PlayerGetName(avatar))); NetworkManager.instance.BanPlayer(avatar); } } } internal class UpgradeUtil { public class GameUpgrade { private string id; private string name; private Action<string, int> punManagerFunction; public GameUpgrade(string id, string name, Action<string, int> punManagerFunction) { this.id = id; this.name = name; this.punManagerFunction = punManagerFunction; } public string GetID() { return id; } public string GetName() { return name; } public int GetPlayerLevel(PlayerAvatar avatar) { return GetPlayerUpgradeLevel(id, avatar); } public void Upgrade(PlayerAvatar avatar, int level) { RepoAdminMenu.mls.LogInfo((object)("Upgrade: " + SemiFunc.PlayerGetName(avatar) + " - '" + id + "' -> " + level)); if (SemiFunc.IsMultiplayer()) { NetworkUtil.SendCommandSteamIDStringInt("UpgradeSync", avatar.steamID, id, level, (ReceiverGroup)1); } else { UpgradeSync(avatar, id, level); } } public void PunUpgrade(PlayerAvatar avatar, int level) { if (punManagerFunction != null) { string arg = SemiFunc.PlayerGetSteamID(avatar); punManagerFunction(arg, level); } } } private static SortedDictionary<string, PlayerUpgrade> modUpgrades = new SortedDictionary<string, PlayerUpgrade>(); private static SortedDictionary<string, GameUpgrade> gameUpgrades = new SortedDictionary<string, GameUpgrade> { { "playerUpgradeCrouchRest", new GameUpgrade("playerUpgradeCrouchRest", "Crouch Rest", (Action<string, int>)PunManager.instance.UpdateCrouchRestRightAway) }, { "playerUpgradeHealth", new GameUpgrade("playerUpgradeHealth", "Health", (Action<string, int>)PunManager.instance.UpdateCrouchRestRightAway) }, { "playerUpgradeExtraJump", new GameUpgrade("playerUpgradeExtraJump", "Jump", (Action<string, int>)PunManager.instance.UpdateExtraJumpRightAway) }, { "playerUpgradeLaunch", new GameUpgrade("playerUpgradeLaunch", "Launch", (Action<string, int>)PunManager.instance.UpdateTumbleLaunchRightAway) }, { "playerUpgradeMapPlayerCount", new GameUpgrade("playerUpgradeMapPlayerCount", "Map Player Count", (Action<string, int>)PunManager.instance.UpdateMapPlayerCountRightAway) }, { "playerUpgradeRange", new GameUpgrade("playerUpgradeRange", "Range", (Action<string, int>)PunManager.instance.UpdateGrabRangeRightAway) }, { "playerUpgradeSpeed", new GameUpgrade("playerUpgradeSpeed", "Speed", (Action<string, int>)PunManager.instance.UpdateSprintSpeedRightAway) }, { "playerUpgradeStamina", new GameUpgrade("playerUpgradeStamina", "Stamina", (Action<string, int>)PunManager.instance.UpdateEnergyRightAway) }, { "playerUpgradeStrength", new GameUpgrade("playerUpgradeStrength", "Strength", (Action<string, int>)PunManager.instance.UpdateGrabStrengthRightAway) }, { "playerUpgradeThrow", new GameUpgrade("playerUpgradeThrow", "Throw", (Action<string, int>)PunManager.instance.UpdateThrowStrengthRightAway) }, { "playerUpgradeTumbleWings", new GameUpgrade("playerUpgradeTumbleWings", "Tumble Wings", (Action<string, int>)PunManager.instance.UpdateTumbleWingsRightAway) }, { "playerUpgradeTumbleClimb", new GameUpgrade("playerUpgradeTumbleClimb", "Tumble Climb", (Action<string, int>)PunManager.instance.UpdateTumbleClimbRightAway) }, { "playerUpgradeDeathHeadBattery", new GameUpgrade("playerUpgradeDeathHeadBattery", "Death Head Battery", (Action<string, int>)PunManager.instance.UpdateDeathHeadBatteryRightAway) } }; public static void Init() { modUpgrades.Clear(); foreach (PlayerUpgrade item in Upgrades.PlayerUpgrades.ToList()) { string key = Regex.Replace(item.UpgradeId, "((?<=\\p{Ll})\\p{Lu})|((?!\\A)\\p{Lu}(?>\\p{Ll}))", " $0"); if (!modUpgrades.ContainsKey(key)) { modUpgrades.Add(key, item); } } } public static SortedDictionary<string, GameUpgrade> GetGameUpgrades() { return gameUpgrades; } public static SortedDictionary<string, PlayerUpgrade> GetModUpgrades() { return modUpgrades; } public static void UpgradeLevel(PlayerUpgrade upgrade, PlayerAvatar avatar, int level) { upgrade.SetLevel(avatar, level); RepoAdminMenu.mls.LogInfo((object)("Upgrade: " + SemiFunc.PlayerGetName(avatar) + " - '" + upgrade.UpgradeId + "' -> " + level)); } public static int GetPlayerUpgradeLevel(string type, PlayerAvatar avatar) { StatsManager instance = StatsManager.instance; string key = SemiFunc.PlayerGetSteamID(avatar); if ((Object)(object)instance != (Object)null && instance.dictionaryOfDictionaries.ContainsKey(type)) { Dictionary<string, int> dictionary = instance.dictionaryOfDictionaries[type]; if (dictionary != null && dictionary.ContainsKey(key)) { return dictionary[key]; } } return 0; } public static void UpgradeSync(PlayerAvatar avatar, string key, int level) { RepoAdminMenu.mls.LogInfo((object)("UpgradeSync: " + SemiFunc.PlayerGetName(avatar) + " - '" + key + "' -> " + level)); string key2 = SemiFunc.PlayerGetSteamID(avatar); Dictionary<string, Dictionary<string, int>> dictionaryOfDictionaries = StatsManager.instance.dictionaryOfDictionaries; if (!dictionaryOfDictionaries.ContainsKey(key)) { dictionaryOfDictionaries.Add(key, new Dictionary<string, int>()); } Dictionary<string, int> value = new Dictionary<string, int>(); if (dictionaryOfDictionaries.TryGetValue(key, out value)) { value[key2] = level; } if ((Object)(object)avatar == (Object)(object)PlayerAvatar.instance) { DoImmediateUpgrade(avatar, key, level); } } private static void DoImmediateUpgrade(PlayerAvatar avatar, string key, int level) { SemiFunc.PlayerGetSteamID(avatar); RepoAdminMenu.mls.LogInfo((object)("DoImmediateUpgrade: " + SemiFunc.PlayerGetName(avatar) + " - '" + key + "'")); try { if (gameUpgrades.TryGetValue(key, out var value)) { value.PunUpgrade(avatar, level); } } catch { } } } internal class ValuableUtil { private static SortedDictionary<string, PrefabRef> tinyValuables = new SortedDictionary<string, PrefabRef>(); private static SortedDictionary<string, PrefabRef> smallValuables = new SortedDictionary<string, PrefabRef>(); private static SortedDictionary<string, PrefabRef> mediumValuables = new SortedDictionary<string, PrefabRef>(); private static SortedDictionary<string, PrefabRef> bigValuables = new SortedDictionary<string, PrefabRef>(); private static SortedDictionary<string, PrefabRef> wideValuables = new SortedDictionary<string, PrefabRef>(); private static SortedDictionary<string, PrefabRef> tallValuables = new SortedDictionary<string, PrefabRef>(); private static SortedDictionary<string, PrefabRef> veryTallValuables = new SortedDictionary<string, PrefabRef>(); public static void Init() { tinyValuables.Clear(); smallValuables.Clear(); mediumValuables.Clear(); bigValuables.Clear(); wideValuables.Clear(); tallValuables.Clear(); veryTallValuables.Clear(); foreach (LevelValuables valuablePreset in RunManager.instance.levelCurrent.ValuablePresets) { foreach (PrefabRef item in valuablePreset.tiny) { string key = item.PrefabName.Replace("Valuable ", string.Empty); if (!tinyValuables.ContainsKey(key)) { tinyValuables.Add(key, item); } } foreach (PrefabRef item2 in valuablePreset.small) { string key2 = item2.PrefabName.Replace("Valuable ", string.Empty); if (!smallValuables.ContainsKey(key2)) { smallValuables.Add(key2, item2); } } foreach (PrefabRef item3 in valuablePreset.medium) { string key3 = item3.PrefabName.Replace("Valuable ", string.Empty); if (!mediumValuables.ContainsKey(key3)) { mediumValuables.Add(key3, item3); } } foreach (PrefabRef item4 in valuablePreset.big) { string key4 = item4.PrefabName.Replace("Valuable ", string.Empty); if (!bigValuables.ContainsKey(key4)) { bigValuables.Add(key4, item4); } } foreach (PrefabRef item5 in valuablePreset.wide) { string key5 = item5.PrefabName.Replace("Valuable ", string.Empty); if (!wideValuables.ContainsKey(key5)) { wideValuables.Add(key5, item5); } } foreach (PrefabRef item6 in valuablePreset.tall) { string key6 = item6.PrefabName.Replace("Valuable ", string.Empty); if (!tallValuables.ContainsKey(key6)) { tallValuables.Add(key6, item6); } } foreach (PrefabRef item7 in valuablePreset.veryTall) { string key7 = item7.PrefabName.Replace("Valuable ", string.Empty); if (!veryTallValuables.ContainsKey(key7)) { veryTallValuables.Add(key7, item7); } } } } public static SortedDictionary<string, PrefabRef> getTinyValuables() { return tinyValuables; } public static SortedDictionary<string, PrefabRef> getSmallValuables() { return smallValuables; } public static SortedDictionary<string, PrefabRef> getMediumValuables() { return mediumValuables; } public static SortedDictionary<string, PrefabRef> getBigValuables() { return bigValuables; } public static SortedDictionary<string, PrefabRef> getWideValuables() { return wideValuables; } public static SortedDictionary<string, PrefabRef> getTallValuables() { return tallValuables; } public static SortedDictionary<string, PrefabRef> getVeryTallValuables() { return veryTallValuables; } public static void spawnValuable(PrefabRef valuable) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0097: 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) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)PlayerAvatar.instance).transform.position + new Vector3(0f, 1f, 0f) + ((Component)PlayerAvatar.instance).transform.forward * 1f; if (SemiFunc.IsMultiplayer()) { ValuableObject val2 = default(ValuableObject); if (!valuable.Prefab.TryGetComponent<ValuableObject>(ref val2)) { ItemInfoExtraUI.instance.ItemInfoText("Could not spawn valuable '" + valuable.PrefabName + "'", Color.red); } else { Valuables.SpawnValuable(valuable, val, Quaternion.identity); } } else { Object.Instantiate<GameObject>(valuable.Prefab, val, Quaternion.identity); } } } } namespace RepoAdminMenu.Patches { [HarmonyPatch(typeof(EnemyDirector))] internal class EnemyDirectorPatch { [HarmonyPatch("SetInvestigate")] [HarmonyPrefix] private static bool SetInvestigate_Prefix(EnemyDirector __instance) { return !Settings.instance.deafEnemies; } } [HarmonyPatch(typeof(EnemyHealth))] internal class EnemyHealthPatch { [HarmonyPatch("Hurt")] [HarmonyPrefix] private static void Hurt_Prefix(ref int _damage, int ___healthCurrent) { if (Settings.instance.weakEnemies) { _damage = ___healthCurrent; if (___healthCurrent < 1) { _damage = 100; } } } } [HarmonyPatch(typeof(EnemyParent))] internal class EnemyParentPatch { public static bool spawning; [HarmonyPatch("Despawn")] [HarmonyPrefix] private static bool Despawn_Prefix(float ___SpawnedTimeMin, float ___SpawnedTimeMax, ref float ___SpawnedTimer) { if (spawning) { spawning = false; ___SpawnedTimer = Random.Range(___SpawnedTimeMin, ___SpawnedTimeMax); return false; } return true; } } [HarmonyPatch(typeof(EnemyVision))] internal class EnemyVisionPatch { [HarmonyPatch("VisionTrigger")] [HarmonyPrefix] private static bool VisionTrigger_Prefix(int playerID, PlayerAvatar player, EnemyVision __instance) { if (Settings.instance.blindEnemies || Settings.isNoTarget(player)) { __instance.VisionTriggered[playerID] = false; __instance.VisionsTriggered[playerID] = 0; return false; } return true; } } [HarmonyPatch(typeof(ExtractionPoint))] internal class ExtractionPointPatch { private static int previousMoney = -1; [HarmonyPatch("Update")] [HarmonyPrefix] private static void Update_Prefix(ExtractionPoint __instance, bool ___isShop) { if (!___isShop) { return; } if (Settings.instance.infiniteMoney) { if (previousMoney < 0) { previousMoney = StatsManager.instance.runStats["currency"]; } StatsManager.instance.runStats["currency"] = 9999; } else { if (previousMoney >= 0) { StatsManager.instance.runStats["currency"] = previousMoney; } previousMoney = -1; } } } [HarmonyPatch(typeof(ItemBattery))] internal class ItemBatteryPatch { [HarmonyPatch("Update")] [HarmonyPostfix] private static void Update_Postfix(ItemBattery __instance, ref int ___batteryLifeInt) { if (Settings.instance.noBatteryDrain) { __instance.batteryLife = 100f; ___batteryLifeInt = 6; } } } [HarmonyPatch(typeof(ItemMeleeInflatableHammer))] internal class ItemMeleeInflatableHammerPatch { [HarmonyPatch("OnHit")] [HarmonyPrefix] private static bool OnHit_Prefix(ItemMeleeInflatableHammer __instance, PhotonView ___photonView) { if (Settings.instance.boomhammer) { if (SemiFunc.IsMasterClientOrSingleplayer()) { __instance.ExplosionRPC(); return false; } if (SemiFunc.IsMasterClient()) { ___photonView.RPC("ExplosionRPC", (RpcTarget)1, new object[0]); return false; } } return true; } } [HarmonyPatch(typeof(ItemUpgrade))] internal class ItemUpgradePatch { [HarmonyPatch("Update")] [HarmonyPrefix] private static void Update_Prefix(ItemToggle ___itemToggle) { if (Settings.instance.useShopUpgrades) { ((Behaviour)___itemToggle).enabled = true; } } } [HarmonyPatch(typeof(NetworkConnect))] internal class NetworkConnectPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void Start_Postfix() { NetworkUtil.Init(); } [HarmonyPatch("OnCreatedRoom")] [HarmonyPostfix] private static void OnCreatedRoom_Postfix() { if (Configuration.ResetSettingsOnLobbyCreation.Value) { RepoAdminMenu.mls.LogInfo((object)"Resetting settings"); Settings.instance = new Settings(); } } [HarmonyPatch("OnJoinedRoom")] [HarmonyPostfix] private static void OnJoinedRoom_Postfix() { NetworkUtil.instance.clientRandomString = string.Empty; NetworkUtil.SendCommand("NeedSettings", (ReceiverGroup)2); } } [HarmonyPatch] internal class NoTargetPatches { [HarmonyPatch(typeof(SemiFunc), "PlayerGetAllPlayerAvatarWithinRange")] [HarmonyPostfix] private static void SemiFunc_PlayerGetAllPlayerAvatarWithinRange_Postfix(ref List<PlayerAvatar> __result) { List<PlayerAvatar> list = new List<PlayerAvatar>(); foreach (PlayerAvatar item in __result) { if (!Settings.isNoTarget(item)) { list.Add(item); } } __result = list; } [HarmonyPatch(typeof(Enemy), "SetChaseTarget")] [HarmonyPrefix] private static bool Enemy_SetChaseTarget_Prefix(PlayerAvatar playerAvatar) { return !Settings.isNoTarget(playerAvatar); } [HarmonyPatch(typeof(EnemyOnScreen), "GetOnScreen")] [HarmonyPrefix] private static bool EnemyOnScreen_GetOnScreen_Prefix(PlayerAvatar _playerAvatar) { return !Settings.isNoTarget(_playerAvatar); } [HarmonyPatch(typeof(Enemy), "Update")] [HarmonyPrefix] private static void Enemy_Update_Prefix(Enemy __instance, ref PlayerAvatar ___TargetPlayerAvatar) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___TargetPlayerAvatar != (Object)null && Settings.isNoTarget(___TargetPlayerAvatar)) { ___TargetPlayerAvatar = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyAnimal), "Update")] [HarmonyPrefix] private static void EnemyAnimal_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyBangDirector), "Update")] [HarmonyPrefix] private static void EnemyBangDirector_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyBeamer), "Update")] [HarmonyPrefix] private static void EnemyBeamer_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyBirthdayBoy), "Update")] [HarmonyPrefix] private static void EnemyBirthdayBoy_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyBombThrower), "Update")] [HarmonyPrefix] private static void EnemyBombThrower_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyBowtie), "Update")] [HarmonyPrefix] private static void EnemyBowtie_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyCeilingEye), "Update")] [HarmonyPrefix] private static void EnemyCeilingEye_Update_Prefix(Enemy __instance, ref PlayerAvatar ___targetPlayer) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___targetPlayer != (Object)null && Settings.isNoTarget(___targetPlayer)) { ___targetPlayer = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyElsa), "Update")] [HarmonyPrefix] private static void EnemyElsa_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyElsa), "OnHurt")] [HarmonyPrefix] private static bool EnemyElsa_OnHurt_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { if ((Object)(object)___playerTarget == (Object)null || Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; return false; } return true; } [HarmonyPatch(typeof(EnemyFloater), "Update")] [HarmonyPrefix] private static void EnemyFloater_Update_Prefix(Enemy __instance, ref PlayerAvatar ___targetPlayer) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___targetPlayer != (Object)null && Settings.isNoTarget(___targetPlayer)) { ___targetPlayer = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyGnomeDirector), "Update")] [HarmonyPrefix] private static void EnemyGnomeDirector_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyHeadGrabber), "Update")] [HarmonyPrefix] private static void EnemyHeadGrabber_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyHeartHugger), "Update")] [HarmonyPrefix] private static void EnemyHeartHugger_Update_Prefix(Enemy __instance, ref PlayerAvatar ___currentTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___currentTarget != (Object)null && Settings.isNoTarget(___currentTarget)) { ___currentTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyHidden), "Update")] [HarmonyPrefix] private static void EnemyHidden_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyHunter), "Update")] [HarmonyPrefix] private static void EnemyHunter_Update_Prefix(EnemyHunter __instance) { if ((Object)(object)__instance.enemy.Rigidbody != (Object)null) { EnemyRigidbody rigidbody = __instance.enemy.Rigidbody; if ((Object)(object)rigidbody.onTouchPlayerAvatar != (Object)null && Settings.isNoTarget(rigidbody.onTouchPlayerAvatar)) { rigidbody.onTouchPlayerAvatar = null; __instance.UpdateState((State)2); } if ((Object)(object)rigidbody.onGrabbedPlayerAvatar != (Object)null && Settings.isNoTarget(rigidbody.onGrabbedPlayerAvatar)) { rigidbody.onGrabbedPlayerAvatar = null; __instance.UpdateState((State)2); } } } [HarmonyPatch(typeof(EnemyHunter), "UpdateState")] [HarmonyPrefix] private static bool EnemyHunter_UpdateState_Prefix(EnemyHunter __instance, State _state) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Invalid comparison between Unknown and I4 //IL_006d: Unknown result type (might be due to invalid IL or missing references) if ((int)_state == 5) { foreach (PlayerAvatar item in SemiFunc.PlayerGetAll()) { if (Settings.isNoTarget(item) && (Object)(object)__instance.investigatePointTransform != (Object)null && (Object)(object)item.PlayerVisionTarget != (Object)null && (Object)(object)item.PlayerVisionTarget.VisionTransform != (Object)null && (Object)(object)__instance.investigatePointTransform == (Object)(object)item.PlayerVisionTarget.VisionTransform) { __instance.currentState = (State)2; return false; } } } return true; } [HarmonyPatch(typeof(EnemyOogly), "Update")] [HarmonyPrefix] private static void EnemyOogly_Update_Prefix(Enemy __instance, ref PlayerAvatar ___targetPlayer) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___targetPlayer != (Object)null && Settings.isNoTarget(___targetPlayer)) { ___targetPlayer = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyRobe), "Update")] [HarmonyPrefix] private static void EnemyRobe_Update_Prefix(Enemy __instance, ref PlayerAvatar ___targetPlayer) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___targetPlayer != (Object)null && Settings.isNoTarget(___targetPlayer)) { ___targetPlayer = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyRobe), "ChaseTimer")] [HarmonyPrefix] private static bool EnemyRobe_ChaseTimer_Prefix(Enemy __instance, ref PlayerAvatar ___targetPlayer) { if ((Object)(object)___targetPlayer == (Object)null || Settings.isNoTarget(___targetPlayer)) { ___targetPlayer = null; return false; } return true; } [HarmonyPatch(typeof(EnemyRunner), "Update")] [HarmonyPrefix] private static void EnemyRunner_Update_Prefix(Enemy __instance, ref PlayerAvatar ___targetPlayer) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___targetPlayer != (Object)null && Settings.isNoTarget(___targetPlayer)) { ___targetPlayer = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyShadow), "Update")] [HarmonyPrefix] private static void EnemyShadow_Update_Prefix(EnemyShadow __instance, ref PlayerAvatar ___playerTarget) { if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.UpdateState((State)1); } } [HarmonyPatch(typeof(EnemyShadow), "BendLogic")] [HarmonyPrefix] private static bool EnemyShadow_BendLogic_Prefix(EnemyShadow __instance, ref PlayerAvatar ___playerTarget) { if ((Object)(object)___playerTarget == (Object)null || Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; return false; } return true; } [HarmonyPatch(typeof(EnemySlowMouth), "Update")] [HarmonyPrefix] private static void EnemySlowMouth_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemySlowWalker), "Update")] [HarmonyPrefix] private static void EnemySlowWalker_Update_Prefix(Enemy __instance, ref PlayerAvatar ___targetPlayer) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___targetPlayer != (Object)null && Settings.isNoTarget(___targetPlayer)) { ___targetPlayer = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemySpinny), "Update")] [HarmonyPrefix] private static void EnemySpinny_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyThinMan), "Update")] [HarmonyPrefix] private static void EnemyThinMan_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyTick), "Update")] [HarmonyPrefix] private static void EnemyTick_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyTricycle), "Update")] [HarmonyPrefix] private static void EnemyTricycle_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyTricycle), "SetState")] [HarmonyPrefix] private static void EnemyTricycle_SetState_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget, ref PlayerAvatar ___isBlockedByPlayerAvatar, ref State newState) { if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; newState = (State)2; } if ((Object)(object)___isBlockedByPlayerAvatar != (Object)null && Settings.isNoTarget(___isBlockedByPlayerAvatar)) { ___isBlockedByPlayerAvatar = null; newState = (State)2; } } [HarmonyPatch(typeof(EnemyTricycle), "StateAttack")] [HarmonyPrefix] private static bool EnemyTricycle_StateAttack_Prefix(EnemyTricycle __instance, ref PlayerAvatar ___playerTarget) { if ((Object)(object)___playerTarget == (Object)null || Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.SetState((State)14); return false; } return true; } [HarmonyPatch(typeof(EnemyTricycle), "OnGrabbed")] [HarmonyPrefix] private static bool EnemyTricycle_OnGrabbed_Prefix(EnemyTricycle __instance) { if ((Object)(object)__instance.enemy.Rigidbody != (Object)null && (Object)(object)__instance.enemy.Rigidbody.onGrabbedPlayerAvatar != (Object)null && Settings.isNoTarget(__instance.enemy.Rigidbody.onGrabbedPlayerAvatar)) { return false; } return true; } [HarmonyPatch(typeof(EnemyTumbler), "Update")] [HarmonyPrefix] private static void EnemyTumbler_Update_Prefix(Enemy __instance, ref PlayerAvatar ___targetPlayer) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___targetPlayer != (Object)null && Settings.isNoTarget(___targetPlayer)) { ___targetPlayer = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyUpscream), "Update")] [HarmonyPrefix] private static void EnemyUpscream_Update_Prefix(Enemy __instance, ref PlayerAvatar ___targetPlayer) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___targetPlayer != (Object)null && Settings.isNoTarget(___targetPlayer)) { ___targetPlayer = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyValuableThrower), "Update")] [HarmonyPrefix] private static void EnemyValuableThrower_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyDuck), "Update")] [HarmonyPrefix] private static void EnemyDuck_Update_Prefix(Enemy __instance, ref PlayerAvatar ___playerTarget) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)___playerTarget != (Object)null && Settings.isNoTarget(___playerTarget)) { ___playerTarget = null; __instance.CurrentState = (EnemyState)2; __instance.DisableChase(1f); } } [HarmonyPatch(typeof(EnemyDuck), "OnGrabbed")] [HarmonyPrefix] private static bool EnemyDuck_OnGrabbed_Prefix(EnemyDuck __instance) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (Settings.instance.friendlyDuck) { __instance.currentState = (State)2; return false; } return true; } [HarmonyPatch(typeof(EnemyDuck), "UpdateState")] [HarmonyPrefix] private static void EnemyDuck_UpdateState_Prefix(ref State _state) { if (Settings.instance.friendlyDuck && (int)_state == 11) { _state = (State)2; } } } [HarmonyPatch(typeof(PhysGrabObjectImpactDetector))] internal class PhysGrabObjectImpactDetectorPatch { [HarmonyPatch("Break")] [HarmonyPrefix] private static bool Break_Prefix(bool ___isEnemy) { return !Settings.instance.noBreak || ___isEnemy; } } [HarmonyPatch(typeof(PlayerController))] internal class PlayerControllerPatch { [HarmonyPatch("Update")] [HarmonyPrefix] private static void Update_Prefix(PlayerController __instance, PlayerAvatar ___playerAvatarScript) { if ((Object)(object)___playerAvatarScript != (Object)null) { if (Settings.isInfiniteStamina(___playerAvatarScript)) { __instance.EnergyCurrent = __instance.EnergyStart; } __instance.DebugNoTumble = Settings.isNoTumble(___playerAvatarScript); } } } [HarmonyPatch(typeof(PlayerHealth))] internal class PlayerHealthPatch { [HarmonyPatch("Hurt")] [HarmonyPrefix] private static bool Hurt_Prefix(ref int damage, PlayerAvatar ___playerAvatar, int ___health) { if (Settings.isGod(___playerAvatar)) { return false; } if (Settings.isNoDeath(___playerAvatar)) { damage = Math.Min(damage, ___health - 1); if (damage == 0) { return false; } } return true; } } [HarmonyPatch(typeof(PlayerTumble))] internal class PlayerTumblePatch { [HarmonyPatch("Update")] [HarmonyPrefix] private static void Update_Prefix(PlayerTumble __instance, PlayerAvatar ___playerAvatar) { if ((Object)(object)__instance != (Object)null && (Object)(object)___playerAvatar != (Object)null && Settings.isForceTumble(___playerAvatar) && SemiFunc.IsMasterClient()) { long num = DateTime.Now.Ticks / 10000; if (Settings.getLastForceTumble(___playerAvatar) < num - 500) { __instance.TumbleRequest(true, false); Settings.setLastForceTumble(___playerAvatar, num); } } } } [HarmonyPatch(typeof(PunManager))] internal class PunManagerPatch { [HarmonyPatch("UpdateHealthRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateHealthRightAway(ref string _steamID) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(_steamID); if ((Object)(object)val == (Object)(object)SemiFunc.PlayerAvatarLocal()) { val.playerHealth.maxHealth = 100 + StatsManager.instance.playerUpgradeHealth[_steamID] * 20; val.playerHealth.health = val.playerHealth.maxHealth - 1; val.playerHealth.Heal(1, false); } return false; } [HarmonyPatch("UpdateEnergyRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateEnergyRightAway(ref string _steamID) { if ((Object)(object)SemiFunc.PlayerAvatarGetFromSteamID(_steamID) == (Object)(object)SemiFunc.PlayerAvatarLocal()) { PlayerController.instance.EnergyStart = 40f + (float)StatsManager.instance.playerUpgradeStamina[_steamID] * 10f; PlayerController.instance.EnergyCurrent = PlayerController.instance.EnergyStart; } return false; } [HarmonyPatch("UpdateExtraJumpRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateExtraJumpRightAway(ref string _steamID) { if ((Object)(object)SemiFunc.PlayerAvatarGetFromSteamID(_steamID) == (Object)(object)SemiFunc.PlayerAvatarLocal()) { PlayerController.instance.JumpExtra = StatsManager.instance.playerUpgradeExtraJump[_steamID]; } return false; } [HarmonyPatch("UpdateMapPlayerCountRightAway")] [HarmonyPrefix] private static bool UpdateMapPlayerCountRightAway(ref string _steamID) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(_steamID); if ((Object)(object)val == (Object)(object)SemiFunc.PlayerAvatarLocal()) { val.upgradeMapPlayerCount = StatsManager.instance.playerUpgradeMapPlayerCount[_steamID]; } return false; } [HarmonyPatch("UpdateTumbleLaunchRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateTumbleLaunchRightAway(ref string _steamID) { SemiFunc.PlayerAvatarGetFromSteamID(_steamID).tumble.tumbleLaunch = StatsManager.instance.playerUpgradeLaunch[_steamID]; return false; } [HarmonyPatch("UpdateSprintSpeedRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateSprintSpeedRightAway(ref string _steamID) { if ((Object)(object)SemiFunc.PlayerAvatarGetFromSteamID(_steamID) == (Object)(object)SemiFunc.PlayerAvatarLocal()) { PlayerController.instance.SprintSpeed = 5f + (float)StatsManager.instance.playerUpgradeSpeed[_steamID]; PlayerController.instance.SprintSpeedUpgrades = StatsManager.instance.playerUpgradeSpeed[_steamID]; } return false; } [HarmonyPatch("UpdateGrabStrengthRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateGrabStrengthRightAway(ref string _steamID) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(_steamID); if (Object.op_Implicit((Object)(object)val)) { val.physGrabber.grabStrength = 1f + (float)StatsManager.instance.playerUpgradeStrength[_steamID] * 0.2f; } return false; } [HarmonyPatch("UpdateThrowStrengthRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateThrowStrengthRightAway(ref string _steamID) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(_steamID); if (Object.op_Implicit((Object)(object)val)) { val.physGrabber.throwStrength = (float)StatsManager.instance.playerUpgradeThrow[_steamID] * 0.3f; } return false; } [HarmonyPatch("UpdateGrabRangeRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateGrabRangeRightAway(ref string _steamID) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(_steamID); if (Object.op_Implicit((Object)(object)val)) { val.physGrabber.grabRange = 4f + (float)StatsManager.instance.playerUpgradeRange[_steamID] * 1f; } return false; } [HarmonyPatch("UpdateCrouchRestRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateCrouchRestRightAway(ref string _steamID) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(_steamID); if (Object.op_Implicit((Object)(object)val)) { val.upgradeCrouchRest = StatsManager.instance.playerUpgradeCrouchRest[_steamID]; } return false; } [HarmonyPatch("UpdateTumbleWingsRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateTumbleWingsRightAway(ref string _steamID) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(_steamID); if (Object.op_Implicit((Object)(object)val)) { val.upgradeTumbleWings = StatsManager.instance.playerUpgradeTumbleWings[_steamID]; } return false; } [HarmonyPatch("UpdateDeathHeadBatteryRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateDeathHeadBatteryRightAway(ref string _steamID) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(_steamID); if (Object.op_Implicit((Object)(object)val)) { val.upgradeDeathHeadBattery = StatsManager.instance.playerUpgradeDeathHeadBattery[_steamID]; } return false; } [HarmonyPatch("UpdateTumbleClimbRightAway")] [HarmonyPrefix] private static bool Prefix_UpdateTumbleClimbRightAway(ref string _steamID) { PlayerAvatar val = SemiFunc.PlayerAvatarGetFromSteamID(_steamID); if (Object.op_Implicit((Object)(object)val)) { val.upgradeTumbleClimb = StatsManager.instance.playerUpgradeTumbleClimb[_steamID]; } return false; } } [HarmonyPatch(typeof(RunManager))] internal class RunManagerPatch { private static bool lastKeyState; [HarmonyPatch("Update")] [HarmonyPostfix] private static void Update_Postfix(RunManager __instance) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (Configuration.EnableHotkey.Value) { bool key = Input.GetKey(Configuration.MenuHotkey.Value); if (!lastKeyState && key) { Menu.toggleMenu(); lastKeyState = key; } else if (lastKeyState && !key) { lastKeyState = key; } } } [HarmonyPatch("ChangeLevel")] [HarmonyPostfix] private static void ChangeLevel_Postfix() { ItemUtil.Init(); ValuableUtil.Init(); EnemyUtil.Init(); MapUtil.Init(); UpgradeUtil.Init(); } [HarmonyPatch("SetRunLevel")] [HarmonyPrefix] private static bool SetRunLevel_Prefix(RunManager __instance, ref Level ___previousRunLevel, ref Level ___levelCurrent) { MapUtil.resetLevels(); if (__instance.levels.Count == 0) { MapUtil.setMapEnabled(MapUtil.getMaps().First().Value, enabled: true); MapUtil.resetLevels(); } if (MapUtil.getEnabledCount() == 1 || (Object)(object)MapUtil.getNextLevel() != (Object)null) { ___previousRunLevel = null; } if ((Object)(object)MapUtil.getNextLevel() != (Object)null) { ___levelCurrent = MapUtil.getNextLevel(); MapUtil.clearNextLevel(); return false; } return true; } } internal class TestingCode { } [HarmonyPatch(typeof(Trap))] internal class TrapPatch { [HarmonyPatch("Update")] [HarmonyPrefix] private static void Update_Prefix(ref bool ___trapStart, ref bool ___trapActive) { if (Settings.instance.noTraps) { ___trapActive = false; ___trapStart = false; } } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToA