Decompiled source of System error v8.0.0

Plugins/System Error/ExtraSettings.dll

Decompiled 3 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text.Json;
using AIGraph;
using AK;
using Agents;
using AssetShards;
using BepInEx;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using BepInEx.Unity.IL2CPP.UnityEngine;
using BepInEx.Unity.IL2CPP.Utils;
using CellMenu;
using ChainedPuzzles;
using Enemies;
using Expedition;
using ExtraSetting.Managers;
using ExtraSettings.ConfigFiles;
using ExtraSettings.GameScripts;
using ExtraSettings.Managers;
using ExtraSettings.Patches;
using ExtraSettings.PluginInfo;
using ExtraSettings.StructFiles;
using FX_EffectSystem;
using GTFO.API;
using GameData;
using Gear;
using HarmonyLib;
using Il2CppInterop.Runtime;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using LevelGeneration;
using Localization;
using MTFO.Managers;
using Player;
using ReactorLightsOff.GameScripts;
using ReactorLightsOff.Patches;
using SNetwork;
using TMPro;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.SceneManagement;
using UnityEngine.Video;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("ExtraSettings")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ExtraSettings")]
[assembly: AssemblyTitle("ExtraSettings")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace ExtraSetting.StructFiles
{
	public static class OpenDoorEventSync
	{
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct OpenDoorSycnEvent
		{
			public LG_SecurityDoor TargetedSecurityDoor;
		}
	}
}
namespace ExtraSetting.Managers
{
	public static class SyncingManager
	{
		public static List<TimedUnlockDoorsListCollection> TimedDoorsCollection = new List<TimedUnlockDoorsListCollection>();

		public static List<PortalCommandTerminalCollection> PortalTerminalCollection = new List<PortalCommandTerminalCollection>();

		public static List<LG_SecurityDoor_Locks> OpenDoorOnScanCompleteCollection = new List<LG_SecurityDoor_Locks>();

		public static List<HackSecurityDoorCollection> HackDoorCollection = new List<HackSecurityDoorCollection>();

		public static List<ReactorBackDoorListCollection> ReactorBackdoorTerminalsCollection = new List<ReactorBackDoorListCollection>();

		public static List<TerminalAlarmDoorListCollection> TerminalAlarmCollection = new List<TerminalAlarmDoorListCollection>();

		public static List<LightsOffObjectiveCollection> LightsOffObjectiveCollection = new List<LightsOffObjectiveCollection>();

		public static List<CorruptedReactorTerminalCollection> CorruptedReactorTerminalCollections = new List<CorruptedReactorTerminalCollection>();

		public static List<UplinkReactorTerminalCollection> uplinkReactorTerminalCollections = new List<UplinkReactorTerminalCollection>();

		public static List<TerminalLatePaswords> TerminalsNeedingPasswords = new List<TerminalLatePaswords>();

		public static void GetSyncedRandomNumber(ulong x, int MaxNumber)
		{
		}

		public static void SyncElevator(ulong x, PublicStructClass.ElevatorSync Packet)
		{
			GetBackToElevatorController.Current.OnClientReceived(x, Packet);
		}

		public static void SyncElevatorComplete(ulong x, PublicStructClass.DummyStruct Packet)
		{
			GetBackToElevatorController.Current.CompleteExpedition(x, Packet);
		}

		public static void SynElevatorCountdownTimer(ulong x, PublicStructClass.TimeSync Packet)
		{
			GetBackToElevatorController.Current.UpdateGUIClient(x, Packet);
		}

		public static void SpawnElevator(ulong x, PublicStructClass.DummyStruct Packet)
		{
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			GetBackToElevatorController component = ((Component)ElevatorRide.Cage).gameObject.GetComponent<GetBackToElevatorController>();
			((Component)ElevatorRide.Cage).gameObject.SetActive(true);
			ElevatorRide.Cage.ActivateWinCondition();
			if (component.m_ConnectedData.IsForwardExtract)
			{
				((Component)ElevatorRide.Cage).gameObject.transform.position = component.m_ConnectedData.ElevatorPositionForForwardExtract;
				((Component)ElevatorRide.Cage).gameObject.transform.eulerAngles = component.m_ConnectedData.ElevatorRotationForForwardExtract;
			}
			else
			{
				((Component)ElevatorRide.Cage).gameObject.transform.position = new Vector3(0f, -0.3527f, 5.7345f);
			}
			ElevatorRide.Cage.m_animator.Play("ElevatorLanding_Dropoff");
			PluginSetup.logSource.LogDebug((object)"SPAWN ELEVATOR RECEIVED");
		}

		public static void ConvertAndTriggerEvent(WardenEventDataConfig ConfigSettings, WardenEventGenericWave WaveSettings)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: 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_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: 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_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: 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_0061: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0101: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_015a: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_016d: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0187: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b8: Expected O, but got Unknown
			//IL_01ba: Expected O, but got Unknown
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Expected O, but got Unknown
			WardenObjectiveEventData val = new WardenObjectiveEventData
			{
				WorldEventObjectFilter = ConfigSettings.WorldEventObjectFilter,
				Condition = ConfigSettings.Condition,
				Trigger = ConfigSettings.Trigger,
				Type = ConfigSettings.Type,
				DimensionIndex = ConfigSettings.DimensionIndex,
				Layer = ConfigSettings.Layer,
				LocalIndex = ConfigSettings.LocalIndex,
				CustomSubObjectiveHeader = LocalizedText.op_Implicit(ConfigSettings.CustomSubObjectiveHeader),
				CustomSubObjective = LocalizedText.op_Implicit(ConfigSettings.CustomSubObjective),
				Delay = ConfigSettings.Delay,
				Duration = ConfigSettings.Duration,
				ClearDimension = ConfigSettings.ClearDimension,
				SoundID = ConfigSettings.SoundID,
				SoundSubtitle = LocalizedText.op_Implicit(ConfigSettings.SoundSubtitle),
				DialogueID = ConfigSettings.DialogueID,
				FogSetting = ConfigSettings.FogSetting,
				FogTransitionDuration = ConfigSettings.FogTransitionDuration,
				EnemyID = ConfigSettings.EnemyID,
				Position = ConfigSettings.Position,
				Count = ConfigSettings.Count,
				Enabled = ConfigSettings.Enabled,
				ChainPuzzle = ConfigSettings.ChainPuzzle,
				UseStaticBioscanPoints = ConfigSettings.UseStaticBioscanPoints,
				TerminalCommand = ConfigSettings.TerminalCommand,
				TerminalCommandRule = ConfigSettings.TerminalCommandRule,
				EnemyWaveData = new GenericEnemyWaveData
				{
					WaveSettings = WaveSettings.WaveSettings,
					WavePopulation = WaveSettings.WavePopulation,
					AreaDistance = WaveSettings.AreaDistance,
					SpawnDelay = WaveSettings.SpawnDelay,
					TriggerAlarm = WaveSettings.TriggerAlarm,
					IntelMessage = LocalizedText.op_Implicit(WaveSettings.IntelMessage)
				}
			};
			if (ConfigSettings.WardenIntel != 0)
			{
				val.WardenIntel = LocalizedText.op_Implicit(ConfigSettings.WardenIntel);
			}
			else
			{
				val.WardenIntel = new LocalizedText
				{
					UntranslatedText = ConfigSettings.WardenIntelString
				};
			}
			WardenObjectiveManager.CheckAndExecuteEventsOnTrigger(val, (eWardenObjectiveEventTrigger)0, true, 0f);
		}

		public static string GetGameObjectPath(Transform transform)
		{
			string text = ((Object)transform).name;
			while ((Object)(object)transform.parent != (Object)null)
			{
				transform = transform.parent;
				text = ((Object)transform).name + "/" + text;
			}
			return text;
		}

		public static void SyncBoostersWithOthers(int CharacterIndex, int BoosterEffectModifier, float amount)
		{
			if ((Object)(object)PlayerManager.PlayerAgentsInLevel[CharacterIndex] != (Object)(object)PlayerManager.GetLocalPlayerAgent())
			{
				AgentModifierManager.AddModifierValue((Agent)(object)PlayerManager.PlayerAgentsInLevel[CharacterIndex], (AgentModifier)BoosterEffectModifier, amount, 0f);
				PluginSetup.logSource.LogDebug((object)$"Syncing Booster Effect with player agent: {PlayerManager.PlayerAgentsInLevel[CharacterIndex].PlayerName} || With effect: {(object)(AgentModifier)BoosterEffectModifier} || Amount: {amount} || Relative Percentage {AgentModifierManager.DecimalPercantageToTraitPercentage(amount)} ");
			}
		}

		public static void ReloadModdedContentOnCheckpointLoad()
		{
			Il2CppArrayBase<CustomFogSphereHandler> val = Object.FindObjectsOfType<CustomFogSphereHandler>();
			Il2CppArrayBase<RandomTerminalUplinkScript> val2 = Object.FindObjectsOfType<RandomTerminalUplinkScript>();
			if (val.Length > 0)
			{
				foreach (CustomFogSphereHandler item in val)
				{
					item.OnCheckPointReload();
				}
			}
			if (val2.Length > 0)
			{
				foreach (RandomTerminalUplinkScript item2 in val2)
				{
					item2.OnCheckPointReset();
				}
			}
			if (Object.op_Implicit((Object)(object)((Component)ElevatorRide.Cage).gameObject.GetComponent<GetBackToElevatorController>()))
			{
				((Component)ElevatorRide.Cage).gameObject.GetComponent<GetBackToElevatorController>().OnCheckPointReset();
			}
			if (TimedDoorsCollection.Count > 0)
			{
				for (int i = 0; i < TimedDoorsCollection.Count; i++)
				{
					((Component)TimedDoorsCollection[i].TimedUnlockDoorTerminal).gameObject.GetComponent<TimedDoorUnlock>().ResetOnCheckPoint(TimedDoorsCollection[i].TimedDoorTimer);
					PluginSetup.logSource.LogDebug((object)"Detected TimedDoor: Setting it back up again!");
				}
			}
			if (PortalTerminalCollection.Count > 0)
			{
				for (int j = 0; j < PortalTerminalCollection.Count; j++)
				{
					((Component)PortalTerminalCollection[j].CommandTerminal).gameObject.GetComponent<TerminalCommandTeleporter>().OnCheckPointReload();
					PluginSetup.logSource.LogDebug((object)"Detected PortalCommand: Setting it back up again!");
				}
			}
			if (HackDoorCollection.Count > 0)
			{
				for (int k = 0; k < HackDoorCollection.Count; k++)
				{
					((Component)HackDoorCollection[k].HackSecurityDoorLock.m_door).gameObject.GetComponent<HackSecurityDoorScript>().OnCheckPointReload();
					PluginSetup.logSource.LogDebug((object)"Detected a HackSecurityDoor: Setting it up again!");
				}
			}
			if (TerminalAlarmCollection.Count > 0)
			{
				for (int l = 0; l < TerminalAlarmCollection.Count; l++)
				{
					((Component)TerminalAlarmCollection[l].TerminalAlarmMainTerminal).gameObject.GetComponent<TerminalAlarm>().OnCheckPointReload();
					PluginSetup.logSource.LogDebug((object)"Detected a TerminalAlarm: Setting it up again!");
				}
			}
			if (LightsOffObjectiveCollection.Count > 0)
			{
				for (int m = 0; m < LightsOffObjectiveCollection.Count; m++)
				{
					((Component)LightsOffObjectiveCollection[m].LightsOffTerminal).gameObject.GetComponent<LightsOnTerminalScript>().OnCheckPointReset();
					PluginSetup.logSource.LogDebug((object)"Detected a LightsOffObjeciveTerminal: Setting it up again!");
				}
			}
			if (uplinkReactorTerminalCollections.Count > 0)
			{
				for (int n = 0; n < uplinkReactorTerminalCollections.Count; n++)
				{
					((Component)uplinkReactorTerminalCollections[n].UplinkTerminal).gameObject.GetComponent<UplinkTerminalReactorScript>().OnCheckPointReload();
					PluginSetup.logSource.LogDebug((object)"Detected a UplinkReactorTerminalEvent: Setting it up again!");
				}
			}
			if (CorruptedReactorTerminalCollections.Count > 0)
			{
				for (int num = 0; num < CorruptedReactorTerminalCollections.Count; num++)
				{
					((Component)CorruptedReactorTerminalCollections[num].CorruptedTerminal).gameObject.GetComponent<CorruptedTerminalDummyScript>().OnCheckPointLoaded();
					PluginSetup.logSource.LogDebug((object)"Detected a CorruptedReactorTerminalEvent: Setting it up again!");
				}
			}
		}

		public static void UnlockDoor(LG_SecurityDoor DoorToUnlock)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Invalid comparison between Unknown and I4
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			if ((int)DoorToUnlock.LastStatus != 10 || (int)DoorToUnlock.LastStatus != 16)
			{
				DoorToUnlock.m_sync.AttemptDoorInteraction((eDoorInteractionType)5, 0f, 0f, default(Vector3), (Agent)null);
			}
		}

		public static void OpenDoor(LG_SecurityDoor DoorToOpen)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Invalid comparison between Unknown and I4
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			if ((int)DoorToOpen.LastStatus != 10 || (int)DoorToOpen.LastStatus != 16)
			{
				DoorToOpen.m_sync.AttemptDoorInteraction((eDoorInteractionType)0, 0f, 0f, default(Vector3), (Agent)null);
			}
		}

		public static void IncreaseEnemyObjectiveCount(ulong x, EnemyCounterSync.EnemySync Packet)
		{
			//IL_0236: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_024d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0252: Unknown result type (might be due to invalid IL or missing references)
			//IL_0254: Unknown result type (might be due to invalid IL or missing references)
			//IL_025b: Unknown result type (might be due to invalid IL or missing references)
			ES_Dead_CommonEnter_Postfix.NumberOfEnemiesKilled = Packet.CounterBeforeIncrease;
			ES_Dead_CommonEnter_Postfix.NumberOfEnemiesKilled++;
			if (HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].ShowWardenIntel)
			{
				GuiManager.PlayerLayer.m_wardenIntel.ShowSubObjectiveMessage("", $"<color=red>ENEMY KILLED: NUMBER KILLED: </color><color=orange>{ES_Dead_CommonEnter_Postfix.NumberOfEnemiesKilled}</color><color=red>: NUMBER OF KILLS NEEDED: </color><color=orange>{HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].numberOfKillsNeeded}</color>", false, 200f, 5f, (Action)null);
			}
			if (HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].showCustomProgressionMessage)
			{
				GuiManager.PlayerLayer.WardenObjectives.SetCustomSubText((Func<string>)(object)Object.op_Implicit("Hunting Objective"), (Func<string>)(object)Object.op_Implicit($"{HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].ProgressionMessage}: <color=orange>{ES_Dead_CommonEnter_Postfix.NumberOfEnemiesKilled}</color>/{HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].numberOfKillsNeeded}"));
			}
			if (HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].UseEventsOnKills && HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].EventsOnKills.Count > 0)
			{
				for (int i = 0; i < HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].EventsOnKills.Count; i++)
				{
					if (ES_Dead_CommonEnter_Postfix.NumberOfEnemiesKilled != HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].EventsOnKills[i].KillRequirement)
					{
						continue;
					}
					foreach (WardenEventDataConfig item in HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].EventsOnKills[i].EventsInfo)
					{
						ConvertAndTriggerEvent(item, item.EnemyWaveData);
					}
				}
			}
			if (ES_Dead_CommonEnter_Postfix.NumberOfEnemiesKilled >= HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].numberOfKillsNeeded && HunterEnemyObjectiveSetup.HuntedEnemiesInfo[EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic].CompleteObjective)
			{
				pWardenObjectiveInteraction val = default(pWardenObjectiveInteraction);
				val.type = (eWardenObjectiveInteractionType)2;
				val.inLayer = (LG_LayerType)(byte)Packet.LG_Layer;
				pWardenObjectiveInteraction val2 = val;
				WardenObjectiveManager.Current.AttemptInteract(val2);
			}
			PluginSetup.logSource.LogDebug((object)$"SYNCINGMANAGER: IncreaseEnemyObjectiveCount: NumberKilled: {ES_Dead_CommonEnter_Postfix.NumberOfEnemiesKilled}");
		}

		public static void IncreaseTerminalPowerZoneIndex(ulong x, PublicStructClass.LightsOnTerminalObjectiveStruct Packet)
		{
			//IL_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			if (CustomLightsOnObjectiveConfigSetup.LightsOnInfo[Builder_BuildDone_Postfix.LightsOffStaticIndex].IsObjective)
			{
				Builder_BuildDone_Postfix.NumberOfLightsOffObjective++;
				GuiManager.PlayerLayer.m_wardenIntel.ShowSubObjectiveMessage("", $"<color=red>ZONE REPAIRED! NUMBER OF ZONES REPAIRED: </color><color=orange>{Builder_BuildDone_Postfix.NumberOfLightsOffObjective}</color>/<color=orange>{CustomLightsOnObjectiveConfigSetup.LightsOnInfo[Builder_BuildDone_Postfix.LightsOffStaticIndex].ObjectiveAmountNeeded}</color>", false, 200f, 5f, (Action)null);
				if (CustomLightsOnObjectiveConfigSetup.LightsOnInfo[Builder_BuildDone_Postfix.LightsOffStaticIndex].HaveCustomProgressionMessage)
				{
					GuiManager.PlayerLayer.WardenObjectives.SetCustomSubText((Func<string>)(object)Object.op_Implicit(""), (Func<string>)(object)Object.op_Implicit($"{CustomLightsOnObjectiveConfigSetup.LightsOnInfo[Builder_BuildDone_Postfix.LightsOffStaticIndex].CustomProgressionMessage} <color=orange>{Builder_BuildDone_Postfix.NumberOfLightsOffObjective}</color> / <color=orange>{CustomLightsOnObjectiveConfigSetup.LightsOnInfo[Builder_BuildDone_Postfix.LightsOffStaticIndex].ObjectiveAmountNeeded}</color>"));
				}
				if (Builder_BuildDone_Postfix.NumberOfLightsOffObjective >= CustomLightsOnObjectiveConfigSetup.LightsOnInfo[Builder_BuildDone_Postfix.LightsOffStaticIndex].ObjectiveAmountNeeded)
				{
					pWardenObjectiveInteraction val = default(pWardenObjectiveInteraction);
					val.type = (eWardenObjectiveInteractionType)2;
					val.inLayer = (LG_LayerType)(byte)Packet.TargetedLayer;
					pWardenObjectiveInteraction val2 = val;
					WardenObjectiveManager.Current.AttemptInteract(val2);
				}
				PluginSetup.logSource.LogDebug((object)"SYNCINGMANAGER: INCREASELIGHTSONTERMINALOBJECTIVE");
			}
			else
			{
				PluginSetup.logSource.LogWarning((object)"WARNING: SYNCINGMANAGER INCREASELIGHTSONTERMINALOBJECTIVE HAS BEEN CALLED BUT IS NOT COUNTED! IS THIS INTENTIONAL? IF NOT, SET 'IsObjective' TO TRUE");
			}
		}

		public static void RandomTerminalSync(ulong x, PublicStructClass.RandomTerminalAlarmSync Packet)
		{
			LG_Zone val = default(LG_Zone);
			Builder.CurrentFloor.TryGetZoneByLocalIndex((eDimensionIndex)Packet.TerminalDimension, (LG_LayerType)(byte)Packet.TerminalLayerType, (eLocalZoneIndex)Packet.TerminalZoneIndex, ref val);
			LG_Zone val2 = default(LG_Zone);
			Builder.CurrentFloor.TryGetZoneByLocalIndex((eDimensionIndex)Packet.VerificationTerminalDimension, (LG_LayerType)(byte)Packet.VerificationTerminalLayerType, (eLocalZoneIndex)Packet.TerminalZoneIndex, ref val2);
			LG_Zone val3 = default(LG_Zone);
			Builder.CurrentFloor.TryGetZoneByLocalIndex((eDimensionIndex)Packet.DoorDimension, (LG_LayerType)(byte)Packet.DoorLayerType, (eLocalZoneIndex)Packet.DoorZoneIndex, ref val3);
			PluginSetup.logSource.LogDebug((object)"SYNCINGMANAGER: Syncing TerminalAlarm Selection");
		}

		public static void SyncTerminalOutput(ulong x, PublicStructClass.OutputSyncStruct Packet)
		{
			LG_Zone val = default(LG_Zone);
			Builder.CurrentFloor.TryGetZoneByLocalIndex((eDimensionIndex)Packet.TerminalDimension, (LG_LayerType)(byte)Packet.TerminalLayer, (eLocalZoneIndex)Packet.TerminalZoneIndex, ref val);
			if (Object.op_Implicit((Object)(object)((Component)val.TerminalsSpawnedInZone[Packet.TerminalIndex]).gameObject.GetComponent<TerminalAlarm>()) && Packet.isTerminalAlarm)
			{
				((Component)val.TerminalsSpawnedInZone[Packet.TerminalIndex]).gameObject.GetComponent<TerminalAlarm>().SyncOutput();
			}
			if (Object.op_Implicit((Object)(object)((Component)val.TerminalsSpawnedInZone[Packet.TerminalIndex]).gameObject.GetComponent<TimedDoorUnlock>()) && Packet.isTimedDoorUnlock)
			{
				((Component)val.TerminalsSpawnedInZone[Packet.TerminalIndex]).gameObject.GetComponent<TimedDoorUnlock>().SyncOutput();
			}
			if (Object.op_Implicit((Object)(object)((Component)val.TerminalsSpawnedInZone[Packet.TerminalIndex]).gameObject.GetComponent<LightsOnTerminalScript>()) && Packet.isLightsOnObjective)
			{
				if (Packet.isVerificationOutput)
				{
					((Component)val.TerminalsSpawnedInZone[Packet.TerminalIndex]).gameObject.GetComponent<LightsOnTerminalScript>().SyncVerifyOutput();
				}
				else
				{
					((Component)val.TerminalsSpawnedInZone[Packet.TerminalIndex]).gameObject.GetComponent<LightsOnTerminalScript>().SyncOutput();
				}
			}
		}
	}
}
namespace ReactorLightsOff.Patches
{
	public static class GameStateManager_Update_Postfix
	{
		public static List<SNet_Player> PlayersInLobby = new List<SNet_Player>();

		[HarmonyPatch(typeof(GameStateManager), "Update")]
		public static void Postfix()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Invalid comparison between Unknown and I4
			if ((int)GameStateManager.CurrentStateName == 5)
			{
				if (PlayersInLobby.Count > 0)
				{
					PlayersInLobby.Clear();
					PluginSetup.logSource.LogDebug((object)$"Removing players | Count: {PlayersInLobby.Count}");
				}
				LG_SecurityDoor_Locks_SetupForChainedPuzzle_Postfix.HackDoorOpenActive = false;
				LG_SecurityDoor_Locks_SetupForChainedPuzzle_Postfix.OpenDoorOnScanComplete = false;
				LG_DimensionPortal_Setup_Postfix.CanAddTerminal = false;
				Builder_BuildDone_Postfix.TimedUnlockActive = false;
				GS_InLevel_Enter_Postfix.IntervalActive = false;
				LG_PowerGenerator_Core_Setup_Postfix.ReactorActive = false;
				LG_WardenObjective_OnBuildDone_Postfix.ShowTimer = false;
				LG_WardenObjective_OnBuildDone_Postfix.StartMalfunction = false;
				LG_WardenObjective_OnBuildDone_Postfix.CreateLightCollection = false;
				Builder_Build_Postfix.MovableScansActive = false;
				Builder_Build_Postfix.RandomizedScansActive = false;
				Builder_Build_Postfix.TerminalAlarmActive = false;
				Builder_Build_Postfix.CustomReactorPlacementActive = false;
				Builder_BuildDone_Postfix.TemperatureZoneActive = false;
				LG_SecurityDoor_Locks_SetupForChainedPuzzle_Postfix.ChangeExtractionScan = false;
				MWS_Charge_Enter_Postfix.MeleeSlowedDown = false;
				BulletWeapon_Update_Postfix.ReloadSlowedDown = false;
				ResetManager.HasCheckpointBeenCalledGlobal = false;
				Builder_BuildDone_Postfix.LightsOffObjectiveActive = false;
				LG_PopulateFunctionMarkersInZoneJob_TriggerFunctionBuilder_Postfix.IsFirstTime = true;
				Builder_Build_Postfix.CustomPrefabsActive = false;
				Builder_Build_Postfix.CustomReactorActive = false;
				Builder_Build_Postfix.RandomTerminalUplinksActive = false;
				LG_Distribute_WardenObjective_Build_Prefix.IsFirstTime = true;
				LG_PopulateFunctionMarkersInZoneJob_TriggerFunctionBuilder_Postfix.isFirstTimeHiding = true;
				LG_WardenObjective_OnBuildDone_Postfix.BackupMalfunctionTimer = 0f;
				ES_Dead_CommonEnter_Postfix.NumberOfEnemiesKilled = 0;
				EnemyAgent_Setup_Postfix.HuntedEnemyIndexStatic = 0;
				LG_WardenObjective_OnBuildDone_Postfix.ReactorIndexStatic = 0;
				LG_WardenObjective_Reactor_Update_Postfix.NumberOfGeneratorsDone = 0;
				LG_WardenObjective_Reactor_Update_Postfix.NumberOfTerminalsDone = 0;
				LG_WardenObjective_Reactor_Update_Postfix.ReactorWaveIndexStatic = 0;
				Builder_Build_Postfix.MovableScanIndexStatic = 0;
				Builder_Build_Postfix.RandomizedScansStaticIndex = 0;
				Builder_Build_Postfix.TerminalAlarmStaticIndex = 0;
				Builder_Build_Postfix.CustomReactorStaticIndex = 0;
				Builder_BuildDone_Postfix.TemperatureZoneStaticIndex = 0;
				LG_WardenObjective_Reactor_Update_Postfix.NumberOfTerminalGathersDone = 0;
				LG_WardenObjective_Reactor_Update_Postfix.ReactorWaveTerminalGatherIndexStatic = 0;
				LG_WardenObjective_Reactor_Update_Postfix.ReactorWaveCorruptedUplinkIndexStatic = 0;
				BulletWeapon_Update_Postfix.SavedMultiplierSlowDown = 0f;
				MWS_Charge_Enter_Postfix.SlowedDownMeleeMultiplier = 0f;
				LG_WardenObjective_Reactor_Update_Postfix.NumberOfCorruptedTerminalsDone = 0;
				Builder_BuildDone_Postfix.NumberOfLightsOffObjective = 0;
				Builder_BuildDone_Postfix.LightsOffStaticIndex = 0;
				ChainedPuzzleInstance_SetupMovement_Postfix.ScanCreationIndex = 0;
				LG_WardenObjective_Reactor_Update_Postfix.NumberOfHSUInsertsDone = 0;
				LG_WardenObjective_Reactor_Update_Postfix.ReactorHSUInstertStaticIndex = 0;
				Builder_Build_Postfix.CustomPrefabStaticIndex = 0;
				Builder_Build_Postfix.CustomDisinfectStationIndex = 0;
				Builder_Build_Postfix.CustomReactorIndex = 0;
				Builder_Build_Postfix.RandomTerminalUplinkIndex = 0;
				LG_SecurityDoor_Locks_SetupForChainedPuzzle_Postfix.NewExtractionScan = null;
				LG_SecurityDoor_Locks_SetupForChainedPuzzle_Postfix.NewExtractionMarker = null;
				if (SyncingManager.TerminalsNeedingPasswords.Count > 0)
				{
					SyncingManager.TerminalsNeedingPasswords.Clear();
				}
				if (EnemyAgent_Setup_Postfix.AllEnemies.Count > 0)
				{
					EnemyAgent_Setup_Postfix.AllEnemies.Clear();
				}
				if (LG_PowerGenerator_Core_Setup_Postfix.PowerGeneratorsInLevel.Count > 0)
				{
					LG_PowerGenerator_Core_Setup_Postfix.PowerGeneratorsInLevel.Clear();
				}
				if (SyncingManager.TimedDoorsCollection.Count > 0)
				{
					SyncingManager.TimedDoorsCollection.Clear();
				}
				if (SyncingManager.PortalTerminalCollection.Count > 0)
				{
					SyncingManager.PortalTerminalCollection.Clear();
				}
				if (SyncingManager.HackDoorCollection.Count > 0)
				{
					SyncingManager.HackDoorCollection.Clear();
				}
				if (SyncingManager.TerminalAlarmCollection.Count > 0)
				{
					SyncingManager.TerminalAlarmCollection.Clear();
				}
				if (SyncingManager.LightsOffObjectiveCollection.Count > 0)
				{
					SyncingManager.LightsOffObjectiveCollection.Clear();
				}
				if (SyncingManager.ReactorBackdoorTerminalsCollection.Count > 0)
				{
					SyncingManager.ReactorBackdoorTerminalsCollection.Clear();
				}
				if (SyncingManager.uplinkReactorTerminalCollections.Count > 0)
				{
					SyncingManager.uplinkReactorTerminalCollections.Clear();
				}
				if (SyncingManager.CorruptedReactorTerminalCollections.Count > 0)
				{
					SyncingManager.CorruptedReactorTerminalCollections.Clear();
				}
			}
		}
	}
	public static class LG_DimensionPortal_Setup_Postfix
	{
		public static int TerminalPortalIndexStatic;

		public static bool CanAddTerminal;

		[HarmonyPatch(typeof(LG_DimensionPortal), "Setup")]
		public static void Postfix(LG_DimensionPortal __instance)
		{
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_029b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < TerminalPortalCommandConfigSetup.PortalInfo.Count; i++)
			{
				if (TerminalPortalCommandConfigSetup.PortalInfo[i].internalEnabled && TerminalPortalCommandConfigSetup.PortalInfo[i].LevelID == RundownManager.ActiveExpedition.LevelLayoutData)
				{
					TerminalPortalIndexStatic = i;
					CanAddTerminal = true;
				}
			}
			LG_Zone val = default(LG_Zone);
			for (int j = 0; j < TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo.Count; j++)
			{
				if (CanAddTerminal && __instance.SpawnNode.m_zone.LocalIndex == TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].PortalZoneIndex && __instance.SpawnNode.m_zone.Layer.m_type == TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].PortalLayerType && __instance.SpawnNode.m_dimension.DimensionIndex == TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].PortalDimensionIndex)
				{
					Builder.Current.m_currentFloor.TryGetZoneByLocalIndex(TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].TerminalDimensionIndex, TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].TerminalLayer, TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].TerminalZoneIndex, ref val);
					((Component)val.TerminalsSpawnedInZone[TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].TerminalIndex]).gameObject.AddComponent<TerminalCommandTeleporter>().Setup(__instance, val.TerminalsSpawnedInZone[TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].TerminalIndex], TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].TerminalCommand, TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].TerminalDescription, TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].ChainedPuzzleID, TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].AddTerminalCommand, TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].TargetedDimensionIndex, TerminalPortalCommandConfigSetup.PortalInfo[TerminalPortalIndexStatic].PortalInfo[j].TargetedDimensionZoneIndex);
				}
			}
			PluginSetup.logSource.LogDebug((object)$"Portal_{__instance.m_serialNumber} is being setup");
		}
	}
}
namespace ReactorLightsOff.GameScripts
{
	public class TerminalCommandTeleporter : MonoBehaviour
	{
		public LG_ComputerTerminal Terminal;

		public LG_DimensionPortal Portal;

		public List<WardenObjectiveEventData> WardenEvents;

		public ChainedPuzzleInstance chainedPuzzleToActivate;

		public ChainedPuzzleDataBlock ChainedPuzzleData;

		public bool IsFirstTime;

		public bool noChainedPuzzle;

		public bool HasBeenReset;

		public bool AddedTerminalCommand;

		public void Setup(LG_DimensionPortal ConnectedPortal, LG_ComputerTerminal ConnectedTerminal, string Command, string CommandDescription, uint ChainedPuzzleID, bool AddTerminalCommand, eDimensionIndex TargetedDimensionIndex = 1, eLocalZoneIndex TargetedDimensionZone = 0)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: 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_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Expected O, but got Unknown
			Portal = ConnectedPortal;
			Terminal = ConnectedTerminal;
			HasBeenReset = false;
			AddedTerminalCommand = AddTerminalCommand;
			Portal.m_targetDimension = TargetedDimensionIndex;
			Portal.m_targetZone = TargetedDimensionZone;
			if (!AddTerminalCommand)
			{
				return;
			}
			SyncingManager.PortalTerminalCollection.Add(new PortalCommandTerminalCollection
			{
				CommandChainedPuzzleID = ChainedPuzzleID,
				CommandPortal = ConnectedPortal,
				CommandTerminal = ConnectedTerminal,
				TerminalCommand = Command,
				TerminalCommandDescription = CommandDescription
			});
			PluginSetup.logSource.LogDebug((object)$"Adding to the PortalCommandCollection: Count: {SyncingManager.PortalTerminalCollection.Count}");
			if (ChainedPuzzleID != 0)
			{
				ChainedPuzzleData = GameDataBlockBase<ChainedPuzzleDataBlock>.GetBlock(ChainedPuzzleID);
				chainedPuzzleToActivate = ChainedPuzzleManager.CreatePuzzleInstance(ChainedPuzzleData, Terminal.SpawnNode.m_area, Terminal.m_wardenObjectiveSecurityScanAlign.position, ((Component)Terminal).transform);
				chainedPuzzleToActivate.OnPuzzleSolved += Action.op_Implicit((Action)delegate
				{
					//IL_0075: Unknown result type (might be due to invalid IL or missing references)
					//IL_007a: Unknown result type (might be due to invalid IL or missing references)
					//IL_008f: Unknown result type (might be due to invalid IL or missing references)
					//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
					GuiManager.PlayerLayer.m_wardenIntel.ShowSubObjectiveMessage("", $"<color=orange>PORTAL_{Portal.m_serialNumber}</color><color=red> IS STARTING UP IN </color><color=orange>ZONE_{Portal.SpawnNode.m_zone.NavInfo.Number}</color>", false, 200f, 4.5f, (Action)null);
					pDimensionPortalState state = Portal.m_stateReplicator.State;
					state.isSequenceIncomplete = false;
					Portal.m_targetDimension = TargetedDimensionIndex;
					Portal.m_targetZone = TargetedDimensionZone;
					Portal.PortalKeyInsertSequenceDone();
					Debug.Log(Object.op_Implicit("Starting portal insert sequence"));
				});
				noChainedPuzzle = false;
			}
			else if (ChainedPuzzleID == 0)
			{
				noChainedPuzzle = true;
			}
			Terminal.m_command.AddCommand((TERM_Command)42, Command, new LocalizedText
			{
				UntranslatedText = CommandDescription
			}, (TERM_CommandRule)0);
			IsFirstTime = true;
			Terminal.AddLine($"<color=yellow>MAINTENANCE TERMINAL FOR PORTAL_{Portal.m_serialNumber}</color>", true);
			Debug.LogError(Object.op_Implicit($"Setting up Terminal_{ConnectedTerminal.m_serialNumber}: Portal - {ConnectedPortal.PublicName}_{ConnectedPortal.m_serialNumber}: Command - {Command}: Command Description - {CommandDescription}: ChainedPuzzleID - {ChainedPuzzleID}: IsFirstTime - {IsFirstTime}: noChainedPuzzle - {noChainedPuzzle}"));
		}

		public void OnCheckPointReload()
		{
			IsFirstTime = true;
			HasBeenReset = true;
			PluginSetup.logSource.LogDebug((object)"ONCHECKPOINTRELOAD: PORTAL RESET:");
		}

		public void Update()
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Invalid comparison between Unknown and I4
			if (HasBeenReset && (int)GameStateManager.CurrentStateName == 10 && AddedTerminalCommand)
			{
				Terminal.AddLine($"<color=yellow>PORTAL MAINTENANCE TERMINAL FOR PORTAL_{Portal.m_serialNumber}</color>", true);
				PluginSetup.logSource.LogDebug((object)"ONCHECKPOINTLOADED: PORTAL LATE SETUP");
				HasBeenReset = false;
			}
			if (!AddedTerminalCommand || !Terminal.CommandIsUsed((TERM_Command)42) || !Terminal.m_hasInteractingPlayer || !IsFirstTime)
			{
				return;
			}
			Terminal.m_command.AddOutput((TerminalLineType)4, "Processing Command...", 3.5f, (TerminalSoundType)0, (TerminalSoundType)0);
			if (!noChainedPuzzle)
			{
				Terminal.m_command.AddOutput((TerminalLineType)4, "<color=yellow>Biometric Scan Required</color>", 3.5f, (TerminalSoundType)0, (TerminalSoundType)0);
				Terminal.m_command.AddOutputEmptyLine(0f);
				Terminal.m_command.OnEndOfQueue = Action.op_Implicit((Action)delegate
				{
					chainedPuzzleToActivate.AttemptInteract((eChainedPuzzleInteraction)0);
					Debug.Log(Object.op_Implicit("Starting chainedpuzzle"));
				});
			}
			else if (noChainedPuzzle)
			{
				Terminal.m_command.AddOutput((TerminalLineType)4, "Preparing Portal For Startup", 3.5f, (TerminalSoundType)0, (TerminalSoundType)0);
				Terminal.m_command.AddOutputEmptyLine(0f);
				Terminal.m_command.OnEndOfQueue = Action.op_Implicit((Action)delegate
				{
					GuiManager.PlayerLayer.m_wardenIntel.ShowSubObjectiveMessage("", $"<color=yellow>PORTAL_{Portal.m_serialNumber}</color><color=red> IS STARTING UP IN </color><color=yellow>ZONE_{Portal.SpawnNode.m_zone.NavInfo.Number}</color>", false, 200f, 4.5f, (Action)null);
					Portal.PortalKeyInsertSequenceDone();
					Debug.Log(Object.op_Implicit("Starting portal insert sequence"));
				});
			}
			IsFirstTime = false;
		}
	}
}
namespace ExtraSettings.StructFiles
{
	public static class EnemyCounterSync
	{
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct EnemySync
		{
			public int CounterBeforeIncrease;

			public int LG_Layer;
		}
	}
	public static class PublicStructClass
	{
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct DoorChangeStruct
		{
			public int ChainedPuzzleID;

			public bool CheckPointChanged;

			public int CheckPointID;

			public int DoorZoneIndex;

			public int DoorLayerType;

			public int DoorDimensionIndex;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct DummyStruct
		{
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct ElevatorSync
		{
			public bool TimerStarted;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct SecurityTokenStruct
		{
			public int DoorZoneIndex;

			public int DoorLayer;

			public int DoorDimensionIndex;

			public int CurrentCount;

			public int CurrentLayout;

			public int CollectedOrbIndex;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct CodeSyncTerminalAlarm
		{
			public string VerificationCode;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct TimeSync
		{
			public float Time;

			public bool TimerActive;

			public int Minutes;

			public int Seconds;

			public bool KillAll;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct BoosterSync
		{
			public int BoosterEffectModifierInt;

			public int CharacterIndex;

			public float BoosterEffectAmount;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct RandomTerminalSyncReactor
		{
			public int TerminalIndex;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct LightsOnTerminalObjectiveStruct
		{
			public int TargetedLayer;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct SyncingNumber
		{
			public int SyncingNumberReturned;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct OutputSyncStruct
		{
			public int TerminalZoneIndex;

			public int TerminalLayer;

			public int TerminalDimension;

			public int TerminalIndex;

			public bool isTerminalAlarm;

			public bool isTimedDoorUnlock;

			public bool isLightsOnObjective;

			public bool isVerificationOutput;
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct RandomTerminalAlarmSync
		{
			public int TerminalIndex;

			public int TerminalZoneIndex;

			public int TerminalLayerType;

			public int TerminalDimension;

			public int VerificationTerminalZoneIndex;

			public int VerificationTerminalLayerType;

			public int VerificationTerminalDimension;

			public int VerificationTerminalIndex;

			public int DoorZoneIndex;

			public int DoorLayerType;

			public int DoorDimension;

			public int LoopFirstIndex;

			public int LoopSecondIndex;
		}
	}
}
namespace ExtraSettings.PluginInfo
{
	[BepInPlugin("com.Breezy.ExtraSettings", "ExtraSettings", "1.0.0")]
	[BepInProcess("GTFO.exe")]
	public class PluginSetup : BasePlugin
	{
		public static bool m_RepairGeomorph = true;

		public static ManualLogSource logSource;

		public override void Load()
		{
			logSource = ((BasePlugin)this).Log;
			if (!Directory.Exists(Path.Combine(ConfigManager.CustomPath, "ExtraSettings")))
			{
				Directory.CreateDirectory(Path.Combine(ConfigManager.CustomPath, "ExtraSettings"));
			}
			HackDoorConfigSetup.Load();
			OpenDoorOnScanCompleteConfigSetup.Load();
			TerminalPortalCommandConfigSetup.Load();
			CustomReactorEventsConfigSetup.Load();
			EnemyPlayerHearBeatConfigSetup.Load();
			TimedUnlockDoorsConfigSetup.Load();
			HunterEnemyObjectiveSetup.Load();
			CustomMovableScanPositions.Load();
			RandomAlarmConfigSetup.Load();
			TerminalAlarmConfigSetup.Load();
			CustomReactorPlacementConfigSetup.Load();
			TemperatureZoneConfigSetup.Load();
			CustomLightsOnObjectiveConfigSetup.Load();
			CustomEnemySpawnPositionsConfigSetup.Load();
			TimedExpeditionConfigSetup.Load();
			CustomPrefabsConfigSetup.Load();
			RandomTerminalUplinksConfigSetup.Load();
			SpecializedCharactersConfigSetup.Load();
			ReactorInAnyZoneConfigSetup.Load();
			CustomGearConfigSetup.Load();
			CustomSpawnCapSetup.Load();
			CustomSpawnPointSetup.Load();
			CustomExtractionSetup.Load();
			TokenConfigSetup.Load();
			CustomPouncerDataSetup.Load();
			GetBackToElevatorConfigSetup.Load();
			OxygenEnvironmentSetup.Load();
			AssetShardManager.OnStartupAssetsLoaded += Action.op_Implicit((Action)delegate
			{
				RepairGeomorph(ignoreSetup: true, SetupGondola: false);
			});
			Harmony.CreateAndPatchAll(typeof(StartGame_Awake_Postfix), (string)null);
		}

		public static void RepairGeomorph(bool ignoreSetup, bool SetupGondola)
		{
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			if (m_RepairGeomorph && !ignoreSetup)
			{
				AssetShardManager.LoadShardAsync((AssetBundleName)3, (AssetBundleShard)18, (Action<AsyncOperation>)null, (LoadSceneMode)1);
				GameObject val = ((Il2CppObjectBase)AssetAPI.GetLoadedAsset("Assets/MyPrefabs/Geomorphs/ServiceGeos/Gardens_Hub_MC_01_Activator.prefab")).TryCast<GameObject>();
				logSource.LogError((object)((Object)val).name);
				Transform val2 = val.transform.FindChild("AreaA/EnvProps/ActivatorPlatform/ActivatorAlign");
				logSource.LogError((object)((Object)val2).name);
				string text = "DataExtractorDevice_DataSphere";
				LG_HSUActivator_Core[] array = ((IEnumerable<Object>)Object.FindObjectsOfTypeAll(Il2CppType.From(typeof(LG_HSUActivator_Core)))).Select((Object x) => ((Il2CppObjectBase)x).Cast<LG_HSUActivator_Core>()).ToArray();
				logSource.LogError((object)array.Length);
				LG_HSUActivator_Core[] array2 = array;
				foreach (LG_HSUActivator_Core val3 in array2)
				{
					if (((Object)val3).name == text)
					{
						LG_HSUActivator_Core val4 = Object.Instantiate<LG_HSUActivator_Core>(val3);
						((Component)val4).gameObject.transform.parent = val2;
						((Component)val4).gameObject.transform.position = val2.position;
						((Component)val4).gameObject.transform.eulerAngles = val2.eulerAngles;
						logSource.LogDebug((object)"Fixing Activator Geo");
					}
				}
				m_RepairGeomorph = false;
			}
			if (ignoreSetup)
			{
				AssetShardManager.LoadShardAsync((AssetBundleName)3, (AssetBundleShard)18, (Action<AsyncOperation>)null, (LoadSceneMode)1);
				logSource.LogError((object)"Ignoring setup, just loading shard!");
			}
			if (SetupGondola)
			{
				GameObject val5 = ((Il2CppObjectBase)AssetAPI.GetLoadedAsset("Assets/MyPrefabs/Geomorphs/TechGeomorphs/Tech_I_MC_Gondola.prefab")).TryCast<GameObject>();
				((Component)val5.transform.FindChild("Anim_Gondola/Gondola/Trigger")).gameObject.AddComponent<MovingPlatformScript>();
			}
		}

		public static void OnStartupAssetsLoad()
		{
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
			string text = "assets/bundledassets/testbundle/introclip.mp4";
			logSource.LogError((object)LoadBNK(File.ReadAllBytes(ConfigManager.CustomPath + "\\HopeSound.bnk"), out var bnkID));
			logSource.LogError((object)bnkID);
			ClassInjector.RegisterTypeInIl2Cpp<AudioPlayerOnStartup>();
			MainMenuGuiLayer.Current.PageIntro.m_step = (CM_IntroStep)1;
			MainMenuGuiLayer.Current.PageIntro.m_bgScare1.clip = ((Il2CppObjectBase)AssetAPI.GetLoadedAsset(text)).TryCast<VideoClip>();
			((Component)MainMenuGuiLayer.Current.PageIntro.m_bgScare1).gameObject.active = true;
			((Component)MainMenuGuiLayer.Current.PageIntro.m_bgScare1).gameObject.transform.localPosition = new Vector3(0f, 0f, 0f);
			((Component)MainMenuGuiLayer.Current.PageIntro.m_bgScare1).transform.localScale = new Vector3(1.6f, 1.35f, 1f);
			MainMenuGuiLayer.Current.PageIntro.m_bgScare1.loopPointReached = PluginSetup.AddListener<EventHandler, Action<VideoPlayer>>(MainMenuGuiLayer.Current.PageIntro.m_bgScare1.loopPointReached, (Action<VideoPlayer>)onVideoEnd);
			MainMenuGuiLayer.Current.PageIntro.m_bgScare1.Play();
			((Component)MainMenuGuiLayer.Current.PageIntro.m_bgScare1).gameObject.AddComponent<AudioPlayerOnStartup>().StartAudio();
		}

		public static bool LoadBNK(byte[] bytes, out uint bnkID)
		{
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Invalid comparison between Unknown and I4
			try
			{
				uint num = (uint)bytes.Length;
				GCHandle gCHandle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
				IntPtr intPtr = gCHandle.AddrOfPinnedObject();
				if ((intPtr.ToInt64() & 0xF) != 0)
				{
					byte[] array = new byte[(long)bytes.Length + 16L];
					IntPtr intPtr2 = GCHandle.Alloc(array, GCHandleType.Pinned).AddrOfPinnedObject();
					int destinationIndex = 0;
					if ((intPtr2.ToInt64() & 0xF) != 0)
					{
						long num2 = (intPtr2.ToInt64() + 15) & -16;
						destinationIndex = (int)(num2 - intPtr2.ToInt64());
						intPtr2 = new IntPtr(num2);
					}
					Array.Copy(bytes, 0, array, destinationIndex, bytes.Length);
					intPtr = intPtr2;
					gCHandle.Free();
				}
				return (int)AkSoundEngine.LoadBank(intPtr, num, ref bnkID) == 1;
			}
			catch (Exception)
			{
				bnkID = 0u;
				return false;
			}
		}

		public static void onVideoEnd(VideoPlayer player)
		{
			CM_PageBase.s_sound.Stop();
			((Component)player).gameObject.active = false;
			MainMenuGuiLayer.Current.PageIntro.OnSkip();
		}

		public static T1 AddListener<T1, T2>(T1 orig, T2 newDelegate) where T1 : Delegate where T2 : Delegate
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Expected O, but got Unknown
			return ((Delegate)(object)orig == (Delegate)null) ? DelegateSupport.ConvertDelegate<T1>((Delegate)newDelegate) : ((Il2CppObjectBase)Delegate.Combine((Delegate)(object)orig, (Delegate)DelegateSupport.ConvertDelegate<T1>((Delegate)newDelegate))).TryCast<T1>();
		}
	}
	public static class HackDoorConfigSetup
	{
		public static List<HackSecurityDoorConfig> SecurityInfo;

		public static string name { get; } = "HackSecurityDoor.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				SecurityInfo = JsonSerializer.Deserialize<List<HackSecurityDoorConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				SecurityInfo = new List<HackSecurityDoorConfig>();
				SecurityInfo.Add(new HackSecurityDoorConfig());
				string contents = JsonSerializer.Serialize(SecurityInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class OpenDoorOnScanCompleteConfigSetup
	{
		public static List<OpenDoorOnScanCompleteConfig> SecurityDoorInfo;

		public static string name { get; } = "OpenSecurityDoor.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				SecurityDoorInfo = JsonSerializer.Deserialize<List<OpenDoorOnScanCompleteConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				SecurityDoorInfo = new List<OpenDoorOnScanCompleteConfig>();
				SecurityDoorInfo.Add(new OpenDoorOnScanCompleteConfig());
				string contents = JsonSerializer.Serialize(SecurityDoorInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class TerminalPortalCommandConfigSetup
	{
		public static List<TerminalPortalConfigMain> PortalInfo;

		public static string name { get; } = "PortalTerminalCommand.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				PortalInfo = JsonSerializer.Deserialize<List<TerminalPortalConfigMain>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				PortalInfo = new List<TerminalPortalConfigMain>();
				PortalInfo.Add(new TerminalPortalConfigMain());
				string contents = JsonSerializer.Serialize(PortalInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class EnemyPlayerHearBeatConfigSetup
	{
		public static List<EnemyStaminaProximityConfig> EnemyInfo;

		public static string name { get; } = "EnemyProximity.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				EnemyInfo = JsonSerializer.Deserialize<List<EnemyStaminaProximityConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				EnemyInfo = new List<EnemyStaminaProximityConfig>();
				EnemyInfo.Add(new EnemyStaminaProximityConfig());
				string contents = JsonSerializer.Serialize(EnemyInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class TimedUnlockDoorsConfigSetup
	{
		public static List<TimedDoorUnlockConfig> TimedDoorsInfo;

		public static string name { get; } = "TimedUnlockDoors.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				TimedDoorsInfo = JsonSerializer.Deserialize<List<TimedDoorUnlockConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				TimedDoorsInfo = new List<TimedDoorUnlockConfig>();
				TimedDoorsInfo.Add(new TimedDoorUnlockConfig());
				string contents = JsonSerializer.Serialize(TimedDoorsInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomReactorEventsConfigSetup
	{
		public static List<CustomReactorEventsConfig> ReactorInfo;

		public static string name { get; } = "ReactorEvents.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				ReactorInfo = JsonSerializer.Deserialize<List<CustomReactorEventsConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				ReactorInfo = new List<CustomReactorEventsConfig>();
				ReactorInfo.Add(new CustomReactorEventsConfig());
				string contents = JsonSerializer.Serialize(ReactorInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class HunterEnemyObjectiveSetup
	{
		public static List<HunterMainConfig> HuntedEnemiesInfo;

		public static string name { get; } = "HuntingEnemyObjective.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				HuntedEnemiesInfo = JsonSerializer.Deserialize<List<HunterMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				HuntedEnemiesInfo = new List<HunterMainConfig>();
				HuntedEnemiesInfo.Add(new HunterMainConfig());
				string contents = JsonSerializer.Serialize(HuntedEnemiesInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomMovableScanPositions
	{
		public static List<CustomScanPositionsMainConfig> ChainedPuzzleInfo;

		public static string name { get; } = "MovableScans.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				ChainedPuzzleInfo = JsonSerializer.Deserialize<List<CustomScanPositionsMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				ChainedPuzzleInfo = new List<CustomScanPositionsMainConfig>();
				ChainedPuzzleInfo.Add(new CustomScanPositionsMainConfig());
				string contents = JsonSerializer.Serialize(ChainedPuzzleInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomLightsOnObjectiveConfigSetup
	{
		public static List<LightsOnObjectiveMainConfig> LightsOnInfo;

		public static string name { get; } = "PowerAllZones.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				LightsOnInfo = JsonSerializer.Deserialize<List<LightsOnObjectiveMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				LightsOnInfo = new List<LightsOnObjectiveMainConfig>();
				LightsOnInfo.Add(new LightsOnObjectiveMainConfig());
				string contents = JsonSerializer.Serialize(LightsOnInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class RandomAlarmConfigSetup
	{
		public static List<RandomAlarmMainConfig> RandomizedDoorsInfo;

		public static string name { get; } = "RandomChainedPuzzles.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				RandomizedDoorsInfo = JsonSerializer.Deserialize<List<RandomAlarmMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				RandomizedDoorsInfo = new List<RandomAlarmMainConfig>();
				RandomizedDoorsInfo.Add(new RandomAlarmMainConfig());
				string contents = JsonSerializer.Serialize(RandomizedDoorsInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class TerminalAlarmConfigSetup
	{
		public static List<TerminalAlarmMainConfig> TerminalAlarmsInfo;

		public static string name { get; } = "TerminalAlarm.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				TerminalAlarmsInfo = JsonSerializer.Deserialize<List<TerminalAlarmMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				TerminalAlarmsInfo = new List<TerminalAlarmMainConfig>();
				TerminalAlarmsInfo.Add(new TerminalAlarmMainConfig());
				string contents = JsonSerializer.Serialize(TerminalAlarmsInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomReactorPlacementConfigSetup
	{
		public static List<CustomReactorsMainConfig> CustomReactorInfo;

		public static string name { get; } = "ReactorPlacements.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				CustomReactorInfo = JsonSerializer.Deserialize<List<CustomReactorsMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				CustomReactorInfo = new List<CustomReactorsMainConfig>();
				CustomReactorInfo.Add(new CustomReactorsMainConfig());
				string contents = JsonSerializer.Serialize(CustomReactorInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class TemperatureZoneConfigSetup
	{
		public static List<TemperatureZoneMainConfig> TemperatureInfo;

		public static string name { get; } = "Temperature.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				TemperatureInfo = JsonSerializer.Deserialize<List<TemperatureZoneMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				TemperatureInfo = new List<TemperatureZoneMainConfig>();
				TemperatureInfo.Add(new TemperatureZoneMainConfig());
				string contents = JsonSerializer.Serialize(TemperatureInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomEnemySpawnPositionsConfigSetup
	{
		public static List<CustomEnemySpawnPositionsMain> EnemySpawnPositions;

		public static string name { get; } = "CustomEnemySpawns.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				EnemySpawnPositions = JsonSerializer.Deserialize<List<CustomEnemySpawnPositionsMain>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				EnemySpawnPositions = new List<CustomEnemySpawnPositionsMain>();
				EnemySpawnPositions.Add(new CustomEnemySpawnPositionsMain());
				string contents = JsonSerializer.Serialize(EnemySpawnPositions, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class TimedExpeditionConfigSetup
	{
		public static List<TimedExpeditionMainConfig> TimerSettingsMain;

		public static string name { get; } = "TimedExpeditions.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				TimerSettingsMain = JsonSerializer.Deserialize<List<TimedExpeditionMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				TimerSettingsMain = new List<TimedExpeditionMainConfig>();
				TimerSettingsMain.Add(new TimedExpeditionMainConfig());
				string contents = JsonSerializer.Serialize(TimerSettingsMain, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomPrefabsConfigSetup
	{
		public static List<CustomPrefabConfigMain> CustomPrefabInfo;

		public static string name { get; } = "CustomPrefabs.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				CustomPrefabInfo = JsonSerializer.Deserialize<List<CustomPrefabConfigMain>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				CustomPrefabInfo = new List<CustomPrefabConfigMain>();
				CustomPrefabInfo.Add(new CustomPrefabConfigMain());
				string contents = JsonSerializer.Serialize(CustomPrefabInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class RandomTerminalUplinksConfigSetup
	{
		public static List<RandomTerminalUplinksMainConfig> TerminalUplinksInfo;

		public static string name { get; } = "RandomUplinks.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				TerminalUplinksInfo = JsonSerializer.Deserialize<List<RandomTerminalUplinksMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				TerminalUplinksInfo = new List<RandomTerminalUplinksMainConfig>();
				TerminalUplinksInfo.Add(new RandomTerminalUplinksMainConfig());
				string contents = JsonSerializer.Serialize(TerminalUplinksInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class SpecializedCharactersConfigSetup
	{
		public static List<SpecializedCharacters> CharacterInfos;

		public static string name { get; } = "SpecializedCharacters.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				CharacterInfos = JsonSerializer.Deserialize<List<SpecializedCharacters>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
		}
	}
	public static class ReactorInAnyZoneConfigSetup
	{
		public static List<ReactorCustomZone> CustomReactors;

		public static string name { get; } = "ReactorAnyZone.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				CustomReactors = JsonSerializer.Deserialize<List<ReactorCustomZone>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				CustomReactors = new List<ReactorCustomZone>();
				CustomReactors.Add(new ReactorCustomZone());
				string contents = JsonSerializer.Serialize(CustomReactors, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomGearConfigSetup
	{
		public static List<PublicGearModifier> GearInfos;

		public static string name { get; } = "CustomGear.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				GearInfos = JsonSerializer.Deserialize<List<PublicGearModifier>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				GearInfos = new List<PublicGearModifier>();
				GearInfos.Add(new PublicGearModifier());
				string contents = JsonSerializer.Serialize(GearInfos, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomSpawnCapSetup
	{
		public static List<CustomEnemySpawnCap> SpawnCapInfo;

		public static string name { get; } = "EnemyCost.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				SpawnCapInfo = JsonSerializer.Deserialize<List<CustomEnemySpawnCap>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				SpawnCapInfo = new List<CustomEnemySpawnCap>();
				SpawnCapInfo.Add(new CustomEnemySpawnCap());
				string contents = JsonSerializer.Serialize(SpawnCapInfo, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomSpawnPointSetup
	{
		public static List<CharacterSpawnPointMain> CharacterSpawnInfos;

		public static string name { get; } = "CustomSpawnPoints.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				CharacterSpawnInfos = JsonSerializer.Deserialize<List<CharacterSpawnPointMain>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				CharacterSpawnInfos = new List<CharacterSpawnPointMain>();
				CharacterSpawnInfos.Add(new CharacterSpawnPointMain());
				string contents = JsonSerializer.Serialize(CharacterSpawnInfos, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomExtractionSetup
	{
		public static List<ExitSpawnPointOverride> ExtractionPoints;

		public static string name { get; } = "ExtractionPoint.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				ExtractionPoints = JsonSerializer.Deserialize<List<ExitSpawnPointOverride>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				ExtractionPoints = new List<ExitSpawnPointOverride>();
				ExtractionPoints.Add(new ExitSpawnPointOverride());
				string contents = JsonSerializer.Serialize(ExtractionPoints, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class TokenConfigSetup
	{
		public static List<TriggersTokensMain> TokenInfos;

		public static string name { get; } = "ExtraSecurityScans.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				TokenInfos = JsonSerializer.Deserialize<List<TriggersTokensMain>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				TokenInfos = new List<TriggersTokensMain>();
				TokenInfos.Add(new TriggersTokensMain());
				string contents = JsonSerializer.Serialize(TokenInfos, new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(path, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class CustomPouncerDataSetup
	{
		public static List<PouncerConfigData> PouncerInfos;

		public static string name { get; } = "PouncerCustom.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				PouncerInfos = JsonSerializer.Deserialize<List<PouncerConfigData>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
		}
	}
	public static class GetBackToElevatorConfigSetup
	{
		public static List<BackToElevatorMainConfig> ElevatorInfos;

		public static string name { get; } = "Elevator.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				ElevatorInfos = JsonSerializer.Deserialize<List<BackToElevatorMainConfig>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
		}
	}
	public static class OxygenEnvironmentSetup
	{
		public static List<OxygenConfigMain> OxygenSettings;

		public static string name { get; } = "Oxygen.json";


		public static void Load()
		{
			string path = Path.Combine(ConfigManager.CustomPath, "ExtraSettings", name);
			if (File.Exists(path))
			{
				OxygenSettings = JsonSerializer.Deserialize<List<OxygenConfigMain>>(File.ReadAllText(path), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogDebug((object)(name + " Has Loaded Successfully!"));
			}
		}
	}
	public static class StartGame_Awake_Postfix
	{
		public static Dictionary<string, Shader> ShaderDictionary = new Dictionary<string, Shader>();

		public static Dictionary<uint, PouncerDataContainer> PouncerDataDictionary = new Dictionary<uint, PouncerDataContainer>();

		public static void FindPouncerData()
		{
			//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0205: Unknown result type (might be due to invalid IL or missing references)
			//IL_026d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_033f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0349: Unknown result type (might be due to invalid IL or missing references)
			//IL_034e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0493: Unknown result type (might be due to invalid IL or missing references)
			foreach (EnemyDataBlock allBlock in GameDataBlockBase<EnemyDataBlock>.GetAllBlocks())
			{
				if (CustomPouncerDataSetup.PouncerInfos.Count <= 0)
				{
					continue;
				}
				foreach (PouncerConfigData pouncerInfo in CustomPouncerDataSetup.PouncerInfos)
				{
					if (pouncerInfo.EnemyId == ((GameDataBlockBase<EnemyDataBlock>)(object)allBlock).persistentID && pouncerInfo.internalEnabled && !PouncerDataDictionary.ContainsKey(pouncerInfo.EnemyId))
					{
						PouncerDataContainer val = ((Il2CppObjectBase)ScriptableObject.CreateInstance(typeof(PouncerDataContainer).ToString())).TryCast<PouncerDataContainer>();
						((Object)val).name = $"{((GameDataBlockBase<EnemyDataBlock>)(object)allBlock).name}_{pouncerInfo.EnemyId}";
						val.m_DashCooldown = new Vector2(pouncerInfo.PouncerData.DashCoolDown.Min, pouncerInfo.PouncerData.DashCoolDown.Max);
						val.DashMaxTime = pouncerInfo.PouncerData.DashMaxTime;
						val.ChargeDuration = pouncerInfo.PouncerData.ChargeDuration;
						val.ConsumeDuration = pouncerInfo.PouncerData.ConsumeDuration;
						val.DashEndPhaseDistance = 6f;
						val.DashEndAnimationLength = 1f;
						val.ChargeStaggerDamageThreshold = pouncerInfo.PouncerData.ChargeStaggerDamageThreshold;
						val.DashStaggerDamageThreshold = pouncerInfo.PouncerData.DashStaggerDamageThreshold;
						val.StaggerDuration = pouncerInfo.PouncerData.StaggerDuration;
						val.FaceToTargetDuringProwlingDistance = 16.5f;
						val.StaggerLeadsToAfterHeld = true;
						val.EnableOffMeshLinkDash = false;
						val.LOSRequiredForDash = pouncerInfo.PouncerData.LOSRequiredForDash;
						val.DashStaggerUsesHeavyHitreaction = true;
						val.Enable1PConsumeVFX = true;
						val.Enable3PConsumeVFX = true;
						DamageShapeData damageShapeData = default(DamageShapeData);
						damageShapeData.Radius = 6.6f;
						damageShapeData.Angle = 210.1f;
						val.DamageShapeData = damageShapeData;
						PouncerSoundData pouncerSoundData = default(PouncerSoundData);
						pouncerSoundData.AttackCharge = 2040824805u;
						pouncerSoundData.AttackHit = 1034385728u;
						pouncerSoundData.AttackMiss = 1149851817u;
						pouncerSoundData.DashStart = 3726964003u;
						pouncerSoundData.HeldIdle = 376939216u;
						pouncerSoundData.HeldSpitOut = 2870456237u;
						pouncerSoundData.IdleGrowl = 3799706438u;
						pouncerSoundData.TentacleLoop = 3217748688u;
						val.PouncerSoundData = pouncerSoundData;
						MovementModificationData dashMovementModifier = val.DashMovementModifier;
						dashMovementModifier.SpeedModifier = pouncerInfo.PouncerData.DashMovementModifier.SpeedModifier;
						dashMovementModifier.AccelerationModifier = pouncerInfo.PouncerData.DashMovementModifier.AccelerationModifier;
						val.DashMovementModifier = dashMovementModifier;
						HeldPathingData combatStatePathingData = val.CombatStatePathingData;
						combatStatePathingData.RecursiveReachableNodeSearch = true;
						combatStatePathingData.DstChangeRate = pouncerInfo.PouncerData.CombatPathing.DistanceChangeRate;
						combatStatePathingData.TryToKeepDistance = pouncerInfo.PouncerData.CombatPathing.TryToKeepDistance;
						combatStatePathingData.MovementModifier.AccelerationModifier = pouncerInfo.PouncerData.CombatPathing.SpeedModificationData.AccelerationModifier;
						combatStatePathingData.MovementModifier.SpeedModifier = pouncerInfo.PouncerData.CombatPathing.SpeedModificationData.SpeedModifier;
						val.CombatStatePathingData = combatStatePathingData;
						HeldStateData heldStateData = val.HeldStateData;
						heldStateData.ValidatePlayerDimension = true;
						heldStateData.PathingData.RecursiveReachableNodeSearch = true;
						heldStateData.AfterHeldRunAwayDuration = pouncerInfo.PouncerData.HeldData.AfterHeldRunAwayDuration;
						heldStateData.DamageOnStartHolding = pouncerInfo.PouncerData.HeldData.DamageOnStartHolding;
						heldStateData.DamageToPlayerPerSecond = pouncerInfo.PouncerData.HeldData.DamageToPlayerPerSecond;
						heldStateData.HeldStartAnimationDuration = pouncerInfo.PouncerData.HeldData.HeldStartAnimationDuration;
						heldStateData.MaxHeldDuration = pouncerInfo.PouncerData.HeldData.MaxHeldDuration;
						heldStateData.SpitOutStateDuration = pouncerInfo.PouncerData.HeldData.SpitOutStateDuration;
						heldStateData.PathingData.DstChangeRate = pouncerInfo.PouncerData.HeldData.PathingData.DistanceChangeRate;
						heldStateData.PathingData.TryToKeepDistance = pouncerInfo.PouncerData.HeldData.PathingData.TryToKeepDistance;
						heldStateData.PathingData.MovementModifier.AccelerationModifier = pouncerInfo.PouncerData.HeldData.PathingData.SpeedModificationData.AccelerationModifier;
						heldStateData.PathingData.MovementModifier.SpeedModifier = pouncerInfo.PouncerData.HeldData.PathingData.SpeedModificationData.SpeedModifier;
						val.HeldStateData = heldStateData;
						PouncerDataDictionary.Add(pouncerInfo.EnemyId, val);
						PluginSetup.logSource.LogDebug((object)$"Creating a data container for custom pouncer ID {pouncerInfo.EnemyId}");
					}
				}
			}
		}

		public static void AttachShadersToObject()
		{
			//IL_0bcc: Unknown result type (might be due to invalid IL or missing references)
			//IL_06bc: Unknown result type (might be due to invalid IL or missing references)
			for (int i = 0; i < CustomPrefabsConfigSetup.CustomPrefabInfo.Count; i++)
			{
				if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].ShaderPathsForDictionary.Count > 0)
				{
					foreach (ShaderDictionaryFind item in CustomPrefabsConfigSetup.CustomPrefabInfo[i].ShaderPathsForDictionary)
					{
						ShaderDictionary.Add(item.KeyWord, Shader.Find(item.ShaderPath));
						PluginSetup.logSource.LogDebug((object)("Adding Shader: " + item.ShaderPath + " With keyword: " + item.KeyWord));
					}
				}
				if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart.Count <= 0)
				{
					continue;
				}
				for (int j = 0; j < CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart.Count; j++)
				{
					GameObject val = ((Il2CppObjectBase)AssetAPI.GetLoadedAsset(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].PrefabPath)).TryCast<GameObject>();
					val.layer = CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].LayerType;
					if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].AutomateShaders)
					{
						foreach (Renderer componentsInChild in val.GetComponentsInChildren<Renderer>())
						{
							foreach (Material item2 in (Il2CppArrayBase<Material>)(object)componentsInChild.materials)
							{
								if (!CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].NamesToExludeFromAutomation.Contains(((Object)item2.shader).name))
								{
									item2.shader = Shader.Find(((Object)item2.shader).name);
									PluginSetup.logSource.LogDebug((object)("Adding shader with name: " + ((Object)item2.shader).name + " to " + ((Object)((Component)componentsInChild).gameObject).name));
								}
							}
						}
					}
					if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo.Count > 0)
					{
						for (int k = 0; k < CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo.Count; k++)
						{
							ShaderDictionary.TryGetValue(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ShaderName, out var value);
							if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ApplyToAll)
							{
								foreach (Renderer componentsInChild2 in ((Component)val.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ChildPath)).GetComponentsInChildren<Renderer>())
								{
									if (!CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].NamesToExlude.Contains(((Object)((Component)componentsInChild2).gameObject).name))
									{
										((Il2CppArrayBase<Material>)(object)componentsInChild2.materials)[CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].MaterialIndex].shader = value;
										PluginSetup.logSource.LogDebug((object)("Adding shader with name: " + ((Object)value).name + " to " + ((Object)((Component)componentsInChild2).gameObject).name));
									}
									else
									{
										PluginSetup.logSource.LogDebug((object)("Detecting that the object is excluded! Object Name: " + ((Object)((Component)componentsInChild2).gameObject).name));
									}
								}
							}
							else if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].UsingMeshRenderer)
							{
								((Il2CppArrayBase<Material>)(object)((Renderer)((Component)val.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ChildPath)).gameObject.GetComponent<MeshRenderer>()).materials)[CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].MaterialIndex].shader = value;
								PluginSetup.logSource.LogDebug((object)("Adding shader with name: " + ((Object)value).name + " To Child: " + CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ChildPath + " Attached to CreatedPrefab: " + ((Object)val).name));
							}
							if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].PropertyEdits.Count <= 0)
							{
								continue;
							}
							foreach (ShaderPropertiesEdit propertyEdit in CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].PropertyEdits)
							{
								if (propertyEdit.IsColor && ((Il2CppArrayBase<Material>)(object)((Renderer)((Component)val.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ChildPath)).gameObject.GetComponent<MeshRenderer>()).materials)[CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].MaterialIndex].HasProperty(propertyEdit.PropertyToEdit))
								{
									((Il2CppArrayBase<Material>)(object)((Renderer)((Component)val.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ChildPath)).gameObject.GetComponent<MeshRenderer>()).materials)[CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].MaterialIndex].SetColor(propertyEdit.PropertyToEdit, propertyEdit.ColorValue);
									PluginSetup.logSource.LogDebug((object)("Overriding color property: " + propertyEdit.PropertyToEdit));
								}
								if (propertyEdit.IsFloat && ((Il2CppArrayBase<Material>)(object)((Renderer)((Component)val.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ChildPath)).gameObject.GetComponent<MeshRenderer>()).materials)[CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].MaterialIndex].HasProperty(propertyEdit.PropertyToEdit))
								{
									((Il2CppArrayBase<Material>)(object)((Renderer)((Component)val.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ChildPath)).gameObject.GetComponent<MeshRenderer>()).materials)[CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].MaterialIndex].SetFloat(propertyEdit.PropertyToEdit, propertyEdit.FloatValue);
									PluginSetup.logSource.LogDebug((object)("Overriding float property: " + propertyEdit.PropertyToEdit));
								}
								if (propertyEdit.IsBool && ((Il2CppArrayBase<Material>)(object)((Renderer)((Component)val.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ChildPath)).gameObject.GetComponent<MeshRenderer>()).materials)[CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].MaterialIndex].HasProperty(propertyEdit.PropertyToEdit))
								{
									MaterialExtensions.SetKeywordEnabled(((Il2CppArrayBase<Material>)(object)((Renderer)((Component)val.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].ChildPath)).gameObject.GetComponent<MeshRenderer>()).materials)[CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].ShaderInfo[k].MaterialIndex], propertyEdit.PropertyToEdit, propertyEdit.BoolValue);
									PluginSetup.logSource.LogDebug((object)("Overriding bool property: " + propertyEdit.PropertyToEdit));
								}
							}
						}
					}
					if (!CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].isGeomorph)
					{
						continue;
					}
					if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].AddGeomorphComponent)
					{
						LG_Geomorph val2 = val.AddComponent<LG_Geomorph>();
						val2.m_geoPrefab = val;
						val2.m_goShapeType = (LG_GeomorphShapeType)0;
						val2.m_plugs = new List<LG_Plug>();
						val2.m_prefabSpawners = new Il2CppReferenceArray<LG_PrefabSpawner>(0L);
						val2.m_areas = new Il2CppReferenceArray<LG_Area>(0L);
						val2.m_randomSelectors = new Il2CppReferenceArray<LG_RandomSelectorBase>(0L);
						PluginSetup.logSource.LogWarning((object)("Attaching geomorph and geomorphnodevolume to GameObject: " + ((Object)val).name));
					}
					for (int l = 0; l < CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas.Count; l++)
					{
						GameObject gameObject = ((Component)val.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].ChildPathForArea)).gameObject;
						if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].AddAreaComponent)
						{
							gameObject.gameObject.AddComponent<LG_Area>();
						}
						((Component)gameObject.gameObject.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].AIGraphSourcePath)).gameObject.AddComponent<LG_AreaAIGraphSource>();
						if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].GatePaths.Length != 0)
						{
							for (int m = 0; m < CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].GatePaths.Length; m++)
							{
								LG_Plug val3 = ((Component)gameObject.gameObject.transform.FindChild(CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].GatePaths[m])).gameObject.AddComponent<LG_Plug>();
								((LG_ZoneExpander)val3).m_subComplex = CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].SubComplexTypeForGates;
								PluginSetup.logSource.LogWarning((object)("Adding gate to ChildPath: " + CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].GatePaths[m]));
							}
						}
						if (CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].Markers.Count <= 0)
						{
							continue;
						}
						foreach (MarkerInfo marker in CustomPrefabsConfigSetup.CustomPrefabInfo[i].OnGameStart[j].Areas[l].Markers)
						{
							switch (marker.MarkerType)
							{
							case 1:
							{
								MiningRefineryMarkerProducer val6 = ((Component)gameObject.gameObject.transform.FindChild(marker.MarkerPath)).gameObject.AddComponent<MiningRefineryMarkerProducer>();
								val6.m_markerDataBlockID = marker.MarkerPersistentID;
								PluginSetup.logSource.LogWarning((object)"Adding MiningRefineryMarker");
								break;
							}
							case 2:
							{
								TechDataCenterMarkerProducer val5 = ((Component)gameObject.gameObject.transform.FindChild(marker.MarkerPath)).gameObject.AddComponent<TechDataCenterMarkerProducer>();
								val5.m_markerDataBlockID = marker.MarkerPersistentID;
								PluginSetup.logSource.LogWarning((object)"Adding TechDataCenterMarker");
								break;
							}
							case 3:
							{
								ServiceFloodwaysMarkerProducer val4 = ((Component)gameObject.gameObject.transform.FindChild(marker.MarkerPath)).gameObject.AddComponent<ServiceFloodwaysMarkerProducer>();
								val4.m_markerDataBlockID = marker.MarkerPersistentID;
								PluginSetup.logSource.LogWarning((object)"Adding ServiceFloodwaysMarker");
								break;
							}
							}
						}
					}
				}
			}
		}

		[HarmonyPatch(typeof(StartMainGame), "Awake")]
		public static void Postfix()
		{
			AssetAPI.OnAssetBundlesLoaded += delegate
			{
				AttachShadersToObject();
			};
			AssetShardManager.OnEnemyAssetsLoaded += Action.op_Implicit((Action)delegate
			{
				FindPouncerData();
			});
			Harmony.CreateAndPatchAll(typeof(LG_SecurityDoor_Locks_SetupForChainedPuzzle_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(LG_DimensionPortal_Setup_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(Builder_BuildDone_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(LG_WardenObjective_OnBuildDone_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(LG_WardenObjective_Reactor_Update_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(LG_PowerGenerator_Core_Setup_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(LG_PowerGenerator_Core_SyncStatusChanged_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(ES_Dead_CommonEnter_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(PlayerAgent_Update_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(ChainedPuzzleInstance_SetupMovement_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(Builder_Build_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(EnemyAgent_Setup_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(ResetManager), (string)null);
			Harmony.CreateAndPatchAll(typeof(CP_BasicMovable_UpdateMovementRoutine_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(CP_PlayerScanner_StopScan_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(GS_InLevel_Enter_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(GameStateManager_Update_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(LG_ComputerTerminalCommandInterpreter_ReceiveCommand_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(BulletWeapon_UnWield_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(BulletWeapon_Update_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(MWS_Charge_Exit_Postifx), (string)null);
			Harmony.CreateAndPatchAll(typeof(MWS_Charge_Enter_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(ElevatorShaftLanding_OnBuildDone_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(OnCheckPointSavedManager), (string)null);
			Harmony.CreateAndPatchAll(typeof(LG_PopulateFunctionMarkersInZoneJob_TriggerFunctionBuilder_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(LG_Distribute_WardenObjective_Build_Prefix), (string)null);
			Harmony.CreateAndPatchAll(typeof(BioGearSetup), (string)null);
			Harmony.CreateAndPatchAll(typeof(BulletWeapon_UpdateAmmoStatus_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(BulletWeapon_Fire_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(Snet_SessionHub_OnJoin_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(Snet_SessionHub_OnLeave_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(LG_WardenObjective_Reactor_Start_Postfix), (string)null);
			Harmony.CreateAndPatchAll(typeof(PlayerAgent_Setup_Postfix), (string)null);
			Harmony.Cr

Plugins/System Error/GTFlow.Core.dll

Decompiled 3 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text;
using AssetShards;
using BepInEx;
using BepInEx.IL2CPP;
using BepInEx.Logging;
using GTFlow.Core.Managers;
using GTFlow.Core.Utilities;
using HarmonyLib;
using Il2CppSystem;
using UnhollowerBaseLib;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("GTFlow.Core")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("0.0.1.0")]
[assembly: AssemblyInformationalVersion("0.0.1")]
[assembly: AssemblyProduct("GTFlow.Core")]
[assembly: AssemblyTitle("GTFlow.Core")]
[assembly: AssemblyVersion("0.0.1.0")]
namespace GTFlow
{
	[GeneratedCode("GTFlow.VersionInfo", "0.1")]
	[CompilerGenerated]
	public static class VersionInfo
	{
		public const string Version = "0.0.1";

		public const uint GameRevision = 21989u;
	}
}
namespace GTFlow.Utilities
{
	public static class FileUtils
	{
		public static bool TryReadAllText(string path, out string text, out Exception exception)
		{
			try
			{
				text = File.ReadAllText(path);
				exception = null;
				return true;
			}
			catch (Exception ex)
			{
				exception = ex;
				text = null;
				return false;
			}
		}
	}
}
namespace GTFlow.Core
{
	[BepInPlugin("com.lorttexwolf.GTFlow", "GTFlow", "0.0.1")]
	public class Entry : BasePlugin
	{
		public const string MODNAME = "GTFlow";

		public const string AUTHOR = "lorttexwolf";

		public const string GUID = "com.lorttexwolf.GTFlow";

		public const string VERSION = "0.0.1";

		public static ManualLogSource Log { get; private set; }

		public static uint GameRevision { get; private set; }

		public override void Load()
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Expected O, but got Unknown
			Log = ((BasePlugin)this).Log;
			if ((GameRevision = GetGameRevision()) != 21989)
			{
				Log.LogWarning((object)$"Game revision {GameRevision} does not match target revision {21989u}! Things may break!");
			}
			Harmony val = new Harmony("com.lorttexwolf.GTFlow");
			val.PatchAll(Assembly.GetExecutingAssembly());
			AssetShardManager.OnStartupAssetsLoaded += Action.op_Implicit((Action)OnStartupAssetsLoaded);
		}

		private void OnStartupAssetsLoaded()
		{
			Log.LogDebug((object)"Startup assets loaded!");
			if (Directory.Exists(Paths.AssetBundles))
			{
				Log.LogDebug((object)"Found AssetBundles Folder!");
				string[] files = Directory.GetFiles(Paths.AssetBundles);
				string[] array = files;
				foreach (string text in array)
				{
					if (!AssetBundleUtils.TryLoadFromFile(text, out var bundle))
					{
						Log.LogError((object)("Failed loading AssetBundle at " + text));
					}
					else
					{
						Log.LogDebug((object)("Loaded " + bundle.ToString()));
					}
				}
			}
			if (Directory.Exists(Paths.SoundBanks))
			{
				Log.LogDebug((object)"Found SoundBanks Folder!");
				SoundBankUtils.LoadBanksInDir(Paths.SoundBanks);
			}
		}

		private static uint GetGameRevision()
		{
			if (!File.Exists(Paths.GameRevision))
			{
				return 0u;
			}
			string s = File.ReadAllText(Paths.GameRevision);
			if (!uint.TryParse(s, out var result))
			{
				return 0u;
			}
			return result;
		}
	}
	public static class Paths
	{
		public static string GTFlow = Path.Combine(Paths.ConfigPath, "GTFlow");

		public static string AssetBundles = Path.Combine(GTFlow, "AssetBundles");

		public static string SoundBanks = Path.Combine(GTFlow, "SoundBanks");

		public static string GameRevision = Path.Combine(Paths.GameRootPath, "revision.txt");
	}
}
namespace GTFlow.Core.Utilities
{
	public static class AssetBundleUtils
	{
		public static string ToString(this AssetBundle bundle)
		{
			string[] array = Il2CppArrayBase<string>.op_Implicit((Il2CppArrayBase<string>)(object)bundle.AllAssetNames());
			StringBuilder stringBuilder = new StringBuilder($"AssetBundle {((Object)bundle).name}[{array.Length}]");
			int i = 0;
			for (int num = array.Length; i < num; i++)
			{
				stringBuilder.Append(Environment.NewLine + "| " + array[i]);
			}
			return stringBuilder.ToString();
		}

		public static bool TryLoadFromFile(string path, out AssetBundle bundle)
		{
			return (Object)(object)(bundle = AssetBundle.LoadFromFile(path)) != (Object)null;
		}

		public static bool TryLoadAsset(this AssetBundle bundle, string fullName, out Object asset)
		{
			return (asset = bundle.LoadAsset(fullName)) != (Object)null;
		}
	}
	public static class Il2CppObjectUtils
	{
		public static bool TryCast<T>(this Object obj, out T castedObject) where T : Object
		{
			try
			{
				castedObject = ((Il2CppObjectBase)obj).Cast<T>();
				return true;
			}
			catch (Exception)
			{
				castedObject = default(T);
				return false;
			}
		}
	}
	public static class MethodInfoUtils
	{
		public static string ToString(this MethodInfo methodInfo)
		{
			StringBuilder stringBuilder = new StringBuilder("| " + methodInfo.ReturnType.FullName + " " + methodInfo.Name);
			if (methodInfo.ContainsGenericParameters)
			{
				stringBuilder.Append('<');
				Type[] genericArguments = methodInfo.GetGenericArguments();
				Type[] array = genericArguments;
				foreach (Type type in array)
				{
					stringBuilder.Append(type.Name + ",");
				}
				stringBuilder.Append('>');
			}
			ParameterInfo[] parameters = methodInfo.GetParameters();
			if (parameters.Length != 0)
			{
				stringBuilder.Append('(');
				ParameterInfo[] array2 = parameters;
				foreach (ParameterInfo parameterInfo in array2)
				{
					stringBuilder.Append(parameterInfo.ParameterType.FullName ?? "");
					if (parameterInfo.IsOptional)
					{
						stringBuilder.Append('?');
					}
					stringBuilder.Append(" " + parameterInfo.Name + ", ");
				}
				stringBuilder.Append(")");
			}
			return stringBuilder.ToString();
		}
	}
	public static class SoundBankUtils
	{
		public static void LoadBanksInDir(string dirPath)
		{
			string[] array = FindBanksInDir(dirPath);
			string[] array2 = array;
			foreach (string text in array2)
			{
				if (!LoadFromFile(text, out var _))
				{
					Entry.Log.LogError((object)("Failed to load SoundBank " + text));
				}
			}
		}

		public static string[] FindBanksInDir(string dirPath)
		{
			return Directory.GetFiles(dirPath, "*.bnk");
		}

		public static bool LoadFromFile(string path, out uint bankId)
		{
			bankId = 0u;
			if (!File.Exists(path))
			{
				return false;
			}
			byte[] bytes = File.ReadAllBytes(path);
			return LoadFromBytes(bytes, out bankId);
		}

		public static bool LoadFromBytes(byte[] bytes, out uint bankId)
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Invalid comparison between Unknown and I4
			bankId = 0u;
			if (!GetMemoryPtr(bytes, out var ptr, out var size))
			{
				return false;
			}
			return (int)AkSoundEngine.LoadBank(ptr, size, ref bankId) == 1;
		}

		public static bool GetMemoryPtr(byte[] bytes, out IntPtr ptr, out uint size)
		{
			try
			{
				size = 0u;
				GCHandle gCHandle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
				IntPtr intPtr = gCHandle.AddrOfPinnedObject();
				size = (uint)bytes.Length;
				if ((intPtr.ToInt64() & 0xF) != 0)
				{
					byte[] array = new byte[(long)bytes.Length + 16L];
					GCHandle gCHandle2 = GCHandle.Alloc(array, GCHandleType.Pinned);
					IntPtr intPtr2 = gCHandle2.AddrOfPinnedObject();
					int destinationIndex = 0;
					if ((intPtr2.ToInt64() & 0xF) != 0)
					{
						long num = (intPtr2.ToInt64() + 15) & -16;
						destinationIndex = (int)(num - intPtr2.ToInt64());
						intPtr2 = new IntPtr(num);
					}
					Array.Copy(bytes, 0, array, destinationIndex, bytes.Length);
					intPtr = intPtr2;
					gCHandle.Free();
					gCHandle = gCHandle2;
				}
				ptr = intPtr;
				return true;
			}
			catch (Exception)
			{
				size = 0u;
				ptr = default(IntPtr);
				return false;
			}
		}
	}
}
namespace GTFlow.Core.Patches
{
	[HarmonyPatch(typeof(AssetShardManager))]
	internal static class Patch_AssetShardManager
	{
		[HarmonyPatch("Setup")]
		[HarmonyPostfix]
		internal static void SetupPostfix()
		{
			if (!Directory.Exists(Paths.AssetBundles))
			{
				return;
			}
			string[] files = Directory.GetFiles(Paths.AssetBundles);
			string[] array = files;
			foreach (string path in array)
			{
				if (!AssetBundleUtils.TryLoadFromFile(path, out var bundle))
				{
					Entry.Log.LogError((object)("Failed to load AssetBundle " + Path.GetFileNameWithoutExtension(path) + "!"));
					continue;
				}
				Entry.Log.LogDebug((object)bundle.ToString());
				CustomAssetManager.LoadAssetsFromBundle(bundle);
			}
		}
	}
	[HarmonyPatch(typeof(Resources))]
	internal static class Patch_Resources
	{
		[HarmonyPatch("Load", new Type[]
		{
			typeof(string),
			typeof(Type)
		})]
		internal static bool LoadPrefix(ref Object __result, string path, Type systemTypeInstance)
		{
			if (!CustomAssetManager.TryGetAsset(path, out var asset))
			{
				return true;
			}
			Entry.Log.LogMessage((object)("Replaced " + path + " with custom asset"));
			__result = asset;
			return false;
		}
	}
}
namespace GTFlow.Core.Managers
{
	public static class CustomAssetManager
	{
		private static readonly Dictionary<string, Object> Assets = new Dictionary<string, Object>();

		public static string[] AssetNames => Assets.Keys.ToArray();

		public static bool AddAsset(string fullName, Object asset)
		{
			if (Assets.TryAdd(fullName?.ToLower(), asset))
			{
				AssetShardManager.s_loadedAssetsLookup.TryAdd(fullName?.ToUpper(), asset);
				Entry.Log.LogDebug((object)("Added custom asset " + fullName?.ToLower()));
				return true;
			}
			return false;
		}

		public static Object GetAsset(string fullName)
		{
			if (Assets.TryGetValue(fullName.ToLower(), out var value))
			{
				return value;
			}
			return null;
		}

		public static T GetAsset<T>(string fullName) where T : Object
		{
			if (!TryGetAsset(fullName, out var asset) || !((Object)(object)asset).TryCast<T>(out T castedObject))
			{
				return default(T);
			}
			return castedObject;
		}

		public static IEnumerable<string> AssetUnion(IEnumerable<string> names)
		{
			return names.Union(AssetNames).ToArray();
		}

		public static bool TryGetAsset(string fullName, out Object asset)
		{
			return Assets.TryGetValue(fullName.ToLower(), out asset);
		}

		public static bool TryGetAsset<T>(string fullName, out T asset) where T : Object
		{
			return TryGetAsset(fullName, out asset) || !((Object)(object)asset).TryCast<T>(out asset);
		}

		public static bool HasAsset(string fullName)
		{
			return Assets.ContainsKey(fullName?.ToLower());
		}

		public static void LoadAssetsFromBundle(AssetBundle bundle)
		{
			Il2CppStringArray allAssetNames = bundle.GetAllAssetNames();
			int i = 0;
			for (int count = ((Il2CppArrayBase<string>)(object)allAssetNames).Count; i < count; i++)
			{
				string text = ((Il2CppArrayBase<string>)(object)allAssetNames)[i];
				Object asset;
				if (HasAsset(text))
				{
					Entry.Log.LogError((object)("Skipped asset " + text + " since it already exists!"));
				}
				else if (!bundle.TryLoadAsset(text, out asset))
				{
					Entry.Log.LogError((object)$"Failed to load asset {text} {bundle}");
				}
				else if (!AddAsset(text, asset))
				{
					Entry.Log.LogError((object)$"Failed to load asset {text} {bundle} ???");
				}
			}
		}
	}
}

Plugins/System Error/RundownProgression.dll

Decompiled 3 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Text.Json;
using BepInEx;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using CellMenu;
using ExtraSettings.PluginInfo;
using GTFO.API;
using GameData;
using HarmonyLib;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using LevelGeneration;
using Localization;
using MTFO.Managers;
using RundownProgression.ConfigFiles;
using RundownProgression.GameScripts;
using RundownProgression.Patches;
using RundownProgression.PluginInfo;
using SNetwork;
using TMPro;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("RundownProgression")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("RundownProgression")]
[assembly: AssemblyTitle("RundownProgression")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace ExtraSettings.PluginInfo
{
	[BepInPlugin("com.Breezy.RundownProgression", "RundownProgression", "1.0.0")]
	[BepInProcess("GTFO.exe")]
	public class PluginSetup : BasePlugin
	{
		public static ManualLogSource logSource;

		public override void Load()
		{
			logSource = ((BasePlugin)this).Log;
			RundownProgressionSetup.Load();
			Harmony.CreateAndPatchAll(typeof(StartGame_Awake_Postfix), (string)null);
		}
	}
	public static class RundownProgressionSetup
	{
		public static List<MainConfig> ProgInfo;

		public static string jsonPath = Path.Combine(ConfigManager.CustomPath, name);

		public static string name { get; } = "RundownProgression.json";


		public static void Load()
		{
			if (File.Exists(jsonPath))
			{
				ProgInfo = JsonSerializer.Deserialize<List<MainConfig>>(File.ReadAllText(jsonPath), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					AllowTrailingCommas = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogWarning((object)(name + " Has Loaded Successfully!"));
			}
		}
	}
	public static class ClearTrackingFileSetup
	{
		public static ClearJsonFile ClearData;

		public static string DirectoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "GTFO-Modding", "MCProgression_Rundowns");

		public static string jsonPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "GTFO-Modding", "MCProgression_Rundowns", name);

		public static string name { get; } = "Clears_" + RundownProgressionSetup.ProgInfo[0].RundownName + ".json";


		public static void Load()
		{
			if (File.Exists(jsonPath))
			{
				ClearData = JsonSerializer.Deserialize<ClearJsonFile>(File.ReadAllText(jsonPath), new JsonSerializerOptions
				{
					ReadCommentHandling = JsonCommentHandling.Skip,
					PropertyNameCaseInsensitive = true,
					AllowTrailingCommas = true,
					IncludeFields = true
				});
				PluginSetup.logSource.LogWarning((object)(name + " Has Loaded Successfully!"));
			}
			else
			{
				Directory.CreateDirectory(DirectoryPath);
				string contents = JsonSerializer.Serialize(ClearData = new ClearJsonFile(), new JsonSerializerOptions
				{
					IncludeFields = true,
					WriteIndented = true,
					AllowTrailingCommas = true,
					ReadCommentHandling = JsonCommentHandling.Skip
				});
				File.WriteAllText(jsonPath, contents);
				PluginSetup.logSource.LogWarning((object)(name + " Has Been Created Successfully!"));
			}
		}
	}
	public static class StartGame_Awake_Postfix
	{
		[HarmonyPatch(typeof(StartMainGame), "Awake")]
		public static void Postfix()
		{
			Harmony.CreateAndPatchAll(typeof(PageRundown_UpdateExpProg), (string)null);
			Harmony.CreateAndPatchAll(typeof(CM_PageSuccess_Enable), (string)null);
			Harmony.CreateAndPatchAll(typeof(PageRundown_Update), (string)null);
			Harmony.CreateAndPatchAll(typeof(GS_InLevel_Enter), (string)null);
			Harmony.CreateAndPatchAll(typeof(ExpeditionWindow), (string)null);
			ClassInjector.RegisterTypeInIl2Cpp<CM_IconScript>();
			ClassInjector.RegisterTypeInIl2Cpp<TierMarkerScript>();
			NetworkAPI.RegisterEvent<StructClassInfo.SecurityTokenStruct>("Sync_Door_Change", (Action<ulong, StructClassInfo.SecurityTokenStruct>)SyncingManager.SyncDoorLock);
		}

		[HarmonyPatch(typeof(CM_PageRundown_New), "Setup")]
		public static void Postfix(CM_PageRundown_New __instance)
		{
			ClearTrackingFileSetup.Load();
		}
	}
}
namespace RundownProgression.PluginInfo
{
	public static class StructClassInfo
	{
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
		public struct SecurityTokenStruct
		{
			public int DoorZoneIndex { get; set; }

			public int DoorLayer { get; set; }

			public int DoorDimensionIndex { get; set; }
		}
	}
	public static class SyncingManager
	{
		public static void SyncDoorLock(ulong x, StructClassInfo.SecurityTokenStruct Packet)
		{
			LG_Zone val = default(LG_Zone);
			Builder.CurrentFloor.TryGetZoneByLocalIndex((eDimensionIndex)Packet.DoorDimensionIndex, (LG_LayerType)(byte)Packet.DoorLayer, (eLocalZoneIndex)Packet.DoorZoneIndex, ref val);
			LG_SecurityDoor TargetDoor = ((Il2CppObjectBase)val.m_sourceGate.SpawnedDoor).TryCast<LG_SecurityDoor>();
			TargetDoor.m_locks.DoorCanInteract -= Func<bool>.op_Implicit((Func<bool>)(() => TargetDoor.InteractionAllowed));
			TargetDoor.m_locks.DoorCanInteract += Func<bool>.op_Implicit((Func<bool>)(() => false));
			PluginSetup.logSource.LogDebug((object)"Removing Interaction on door");
		}
	}
}
namespace RundownProgression.Patches
{
	public static class CM_PageSuccess_Enable
	{
		[HarmonyPatch(typeof(CM_PageExpeditionSuccess), "OnEnable")]
		public static void Postfix(CM_PageExpeditionSuccess __instance)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Invalid comparison between Unknown and I4
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Invalid comparison between Unknown and I4
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Invalid comparison between Unknown and I4
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_007c: Expected I4, but got Unknown
			if (!GameStateManager.IsInExpedition)
			{
				return;
			}
			bool flag = (int)WardenObjectiveManager.CurrentState.main_status == 40;
			bool flag2 = (int)WardenObjectiveManager.CurrentState.second_status == 40;
			bool flag3 = (int)WardenObjectiveManager.CurrentState.third_status == 40;
			bool flag4 = flag && flag2 && flag3;
			CustomExpeditionData customExpeditionData = null;
			ClearData clearData = null;
			pActiveExpedition activeExpeditionData = RundownManager.GetActiveExpeditionData();
			eRundownTier tier = RundownManager.GetActiveExpeditionData().tier;
			eRundownTier val = tier;
			switch (val - 1)
			{
			case 0:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierAExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierAClearData[activeExpeditionData.expeditionIndex];
				break;
			case 1:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierBExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierBClearData[activeExpeditionData.expeditionIndex];
				break;
			case 2:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierCExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierCClearData[activeExpeditionData.expeditionIndex];
				break;
			case 3:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierDExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierDClearData[activeExpeditionData.expeditionIndex];
				break;
			case 4:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierEExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierEClearData[activeExpeditionData.expeditionIndex];
				break;
			}
			bool flag5 = clearData.HighClears == 0;
			bool flag6 = clearData.SecondaryClears == 0;
			bool flag7 = clearData.OverloadClears == 0;
			bool flag8 = clearData.PEClears == 0;
			if (flag)
			{
				if (flag5)
				{
					ClearTrackingFileSetup.ClearData.AllClearsInRundown.HighClears++;
				}
				clearData.HighClears++;
			}
			if (flag2)
			{
				if (flag6)
				{
					ClearTrackingFileSetup.ClearData.AllClearsInRundown.SecondaryClears++;
				}
				clearData.SecondaryClears++;
			}
			if (flag3)
			{
				if (flag7)
				{
					ClearTrackingFileSetup.ClearData.AllClearsInRundown.OverloadClears++;
				}
				clearData.OverloadClears++;
			}
			if (flag4)
			{
				if (flag8)
				{
					ClearTrackingFileSetup.ClearData.AllClearsInRundown.PEClears++;
				}
				clearData.PEClears++;
			}
			string contents = JsonSerializer.Serialize(ClearTrackingFileSetup.ClearData, new JsonSerializerOptions
			{
				IncludeFields = true,
				WriteIndented = true,
				AllowTrailingCommas = true,
				ReadCommentHandling = JsonCommentHandling.Skip
			});
			File.WriteAllText(ClearTrackingFileSetup.jsonPath, contents);
		}
	}
	public static class GS_InLevel_Enter
	{
		[HarmonyPatch(typeof(GS_InLevel), "Enter")]
		public static void Postfix()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: 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_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Expected I4, but got Unknown
			//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cd: Expected I4, but got Unknown
			//IL_057d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0582: Unknown result type (might be due to invalid IL or missing references)
			//IL_0584: Unknown result type (might be due to invalid IL or missing references)
			//IL_0586: Unknown result type (might be due to invalid IL or missing references)
			//IL_0588: Unknown result type (might be due to invalid IL or missing references)
			//IL_058b: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a5: Expected I4, but got Unknown
			//IL_0788: Unknown result type (might be due to invalid IL or missing references)
			//IL_078f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0796: Unknown result type (might be due to invalid IL or missing references)
			//IL_07a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_07aa: Expected O, but got Unknown
			//IL_07d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_07e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0805: Unknown result type (might be due to invalid IL or missing references)
			//IL_0818: Unknown result type (might be due to invalid IL or missing references)
			//IL_082b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0839: Expected O, but got Unknown
			//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03be: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0468: Unknown result type (might be due to invalid IL or missing references)
			//IL_0472: Expected I4, but got Unknown
			//IL_0477: Unknown result type (might be due to invalid IL or missing references)
			//IL_0481: Expected I4, but got Unknown
			//IL_0486: Unknown result type (might be due to invalid IL or missing references)
			//IL_0490: Expected I4, but got Unknown
			CustomExpeditionData customExpeditionData = null;
			ClearData clearData = null;
			pActiveExpedition activeExpeditionData = RundownManager.GetActiveExpeditionData();
			eRundownTier tier = activeExpeditionData.tier;
			eRundownTier val = tier;
			switch (val - 1)
			{
			case 0:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierAExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierAClearData[activeExpeditionData.expeditionIndex];
				break;
			case 1:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierBExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierBClearData[activeExpeditionData.expeditionIndex];
				break;
			case 2:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierCExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierCClearData[activeExpeditionData.expeditionIndex];
				break;
			case 3:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierDExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierDClearData[activeExpeditionData.expeditionIndex];
				break;
			case 4:
				customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierEExpeditions[activeExpeditionData.expeditionIndex];
				clearData = ClearTrackingFileSetup.ClearData.TierEClearData[activeExpeditionData.expeditionIndex];
				break;
			}
			if (customExpeditionData.DoorsToEdit.Count > 0)
			{
				LG_Zone val3 = default(LG_Zone);
				foreach (DoorData item in customExpeditionData.DoorsToEdit)
				{
					List<bool> list = new List<bool>();
					foreach (ExpeditionFinder requirement in item.Requirements)
					{
						CustomExpeditionData customExpeditionData2 = null;
						ClearData clearData2 = null;
						eRundownTier tier2 = requirement.Tier;
						eRundownTier val2 = tier2;
						switch (val2 - 1)
						{
						case 0:
							customExpeditionData2 = RundownProgressionSetup.ProgInfo[0].TierAExpeditions[requirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierAClearData[requirement.ExpeditionIndex];
							break;
						case 1:
							customExpeditionData2 = RundownProgressionSetup.ProgInfo[0].TierBExpeditions[requirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierBClearData[requirement.ExpeditionIndex];
							break;
						case 2:
							customExpeditionData2 = RundownProgressionSetup.ProgInfo[0].TierCExpeditions[requirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierCClearData[requirement.ExpeditionIndex];
							break;
						case 3:
							customExpeditionData2 = RundownProgressionSetup.ProgInfo[0].TierDExpeditions[requirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierDClearData[requirement.ExpeditionIndex];
							break;
						case 4:
							customExpeditionData2 = RundownProgressionSetup.ProgInfo[0].TierEExpeditions[requirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierEClearData[requirement.ExpeditionIndex];
							break;
						}
						if (clearData2.HighClears >= requirement.HighClearsReq && clearData2.SecondaryClears >= requirement.SecondaryClearsReq && clearData2.OverloadClears >= requirement.OverClearsReq && clearData2.PEClears >= requirement.PEClearsReq)
						{
							list.Add(item: true);
							PluginSetup.logSource.LogDebug((object)"Requirement Met!");
						}
						else
						{
							list.Add(item: false);
							PluginSetup.logSource.LogDebug((object)"Requirement Not Met!");
						}
					}
					if (list.Contains(item: false) || !SNet.IsMaster)
					{
						continue;
					}
					Builder.CurrentFloor.TryGetZoneByLocalIndex(item.ZoneDimension, item.ZoneLayer, item.ZoneIndex, ref val3);
					if (item.RemoveInteraction)
					{
						LG_SecurityDoor SecDoor = ((Il2CppObjectBase)val3.m_sourceGate.SpawnedDoor).TryCast<LG_SecurityDoor>();
						SecDoor.m_locks.DoorCanInteract -= Func<bool>.op_Implicit((Func<bool>)(() => SecDoor.InteractionAllowed));
						SecDoor.m_locks.DoorCanInteract += Func<bool>.op_Implicit((Func<bool>)(() => false));
						StructClassInfo.SecurityTokenStruct securityTokenStruct = default(StructClassInfo.SecurityTokenStruct);
						securityTokenStruct.DoorDimensionIndex = (int)item.ZoneDimension;
						securityTokenStruct.DoorLayer = (int)item.ZoneLayer;
						securityTokenStruct.DoorZoneIndex = (int)item.ZoneIndex;
						StructClassInfo.SecurityTokenStruct securityTokenStruct2 = securityTokenStruct;
						NetworkAPI.InvokeEvent<StructClassInfo.SecurityTokenStruct>("Sync_Door_Change", securityTokenStruct2, (SNet_ChannelType)2);
						PluginSetup.logSource.LogDebug((object)"Removing Interaction on door");
					}
					else
					{
						val3.m_sourceGate.SpawnedDoor.AttemptOpenCloseInteraction(item.OnlyUnlock);
						PluginSetup.logSource.LogDebug((object)("Unlocking zone door for ZONE_" + val3.NavInfo.Number));
					}
				}
			}
			if (customExpeditionData.TerminalLogsToAdd.Count <= 0)
			{
				return;
			}
			LG_Zone val5 = default(LG_Zone);
			foreach (TerminalLogData item2 in customExpeditionData.TerminalLogsToAdd)
			{
				List<bool> list2 = new List<bool>();
				foreach (ExpeditionFinder item3 in item2.Requirement)
				{
					CustomExpeditionData customExpeditionData3 = null;
					ClearData clearData3 = null;
					eRundownTier tier3 = item3.Tier;
					eRundownTier val4 = tier3;
					switch (val4 - 1)
					{
					case 0:
						customExpeditionData3 = RundownProgressionSetup.ProgInfo[0].TierAExpeditions[item3.ExpeditionIndex];
						clearData3 = ClearTrackingFileSetup.ClearData.TierAClearData[item3.ExpeditionIndex];
						break;
					case 1:
						customExpeditionData3 = RundownProgressionSetup.ProgInfo[0].TierBExpeditions[item3.ExpeditionIndex];
						clearData3 = ClearTrackingFileSetup.ClearData.TierBClearData[item3.ExpeditionIndex];
						break;
					case 2:
						customExpeditionData3 = RundownProgressionSetup.ProgInfo[0].TierCExpeditions[item3.ExpeditionIndex];
						clearData3 = ClearTrackingFileSetup.ClearData.TierCClearData[item3.ExpeditionIndex];
						break;
					case 3:
						customExpeditionData3 = RundownProgressionSetup.ProgInfo[0].TierDExpeditions[item3.ExpeditionIndex];
						clearData3 = ClearTrackingFileSetup.ClearData.TierDClearData[item3.ExpeditionIndex];
						break;
					case 4:
						customExpeditionData3 = RundownProgressionSetup.ProgInfo[0].TierEExpeditions[item3.ExpeditionIndex];
						clearData3 = ClearTrackingFileSetup.ClearData.TierEClearData[item3.ExpeditionIndex];
						break;
					}
					if (clearData3.HighClears >= item3.HighClearsReq && clearData3.SecondaryClears >= item3.SecondaryClearsReq && clearData3.OverloadClears >= item3.OverClearsReq && clearData3.PEClears >= item3.PEClearsReq)
					{
						list2.Add(item: true);
						PluginSetup.logSource.LogDebug((object)"Requirement Met!");
					}
					else
					{
						list2.Add(item: false);
						PluginSetup.logSource.LogDebug((object)"Requirement Not Met!");
					}
				}
				if (!list2.Contains(item: false))
				{
					Builder.CurrentFloor.TryGetZoneByLocalIndex(item2.TerminalDimension, item2.TerminalLayer, item2.TerminalZone, ref val5);
					LocalizedText val6 = new LocalizedText();
					val6.UntranslatedText = item2.LogData.FileContent;
					val5.TerminalsSpawnedInZone[item2.TerminalIndex].AddLocalLog(new TerminalLogFileData
					{
						FileName = item2.LogData.FileName,
						FileContent = val6,
						AttachedAudioByteSize = item2.LogData.AttachedAudioByteSize,
						AttachedAudioFile = item2.LogData.AttachedAudioFile,
						PlayerDialogToTriggerAfterAudio = item2.LogData.PlayerDialogToTriggerAfterAudio,
						FileContentOriginalLanguage = (Language)1
					}, true);
					PluginSetup.logSource.LogDebug((object)("Adding log with name " + item2.LogData.FileName + " to " + val5.TerminalsSpawnedInZone[item2.TerminalIndex].PublicName));
				}
			}
		}
	}
	public static class PageRundown_Update
	{
		public static bool FirstTime = true;

		[HarmonyPatch(typeof(CM_PageRundown_New), "Update")]
		public static void Postfix(CM_PageRundown_New __instance)
		{
			if (__instance.m_rundownIsRevealed && !RundownProgressionSetup.ProgInfo[0].HideTierMarkers && FirstTime)
			{
				if (!((Behaviour)__instance.m_tierMarker1).isActiveAndEnabled)
				{
					__instance.m_tierMarker1.SetVisible(true, 0f);
				}
				if (!((Behaviour)__instance.m_tierMarker2).isActiveAndEnabled)
				{
					__instance.m_tierMarker2.SetVisible(true, 0f);
				}
				if (!((Behaviour)__instance.m_tierMarker3).isActiveAndEnabled)
				{
					__instance.m_tierMarker3.SetVisible(true, 0f);
				}
				if (!((Behaviour)__instance.m_tierMarker4).isActiveAndEnabled)
				{
					__instance.m_tierMarker4.SetVisible(true, 0f);
				}
				if (!((Behaviour)__instance.m_tierMarker5).isActiveAndEnabled)
				{
					__instance.m_tierMarker5.SetVisible(true, 0f);
				}
				FirstTime = false;
			}
		}
	}
	public static class ExpeditionWindow
	{
		[HarmonyPatch(typeof(CM_ExpeditionSectorIcon), "Setup")]
		public static void Postfix(LG_LayerType type, Transform root, bool visible, bool cleared)
		{
		}
	}
	public static class PageRundown_UpdateExpProg
	{
		public static ClearData AllTotalClearData;

		public static List<CM_ExpeditionIcon_New> TierA = new List<CM_ExpeditionIcon_New>();

		public static List<CM_ExpeditionIcon_New> TierB = new List<CM_ExpeditionIcon_New>();

		public static List<CM_ExpeditionIcon_New> TierC = new List<CM_ExpeditionIcon_New>();

		public static List<CM_ExpeditionIcon_New> TierD = new List<CM_ExpeditionIcon_New>();

		public static List<CM_ExpeditionIcon_New> TierE = new List<CM_ExpeditionIcon_New>();

		public static CM_PageRundown_New PageRundown;

		public static RundownDataBlock RundownData;

		[HarmonyPatch(typeof(CM_PageRundown_New), "UpdateExpeditionIconProgression")]
		public static void Postfix(CM_PageRundown_New __instance)
		{
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_033a: Unknown result type (might be due to invalid IL or missing references)
			//IL_036f: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_040b: Unknown result type (might be due to invalid IL or missing references)
			//IL_040d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0415: Unknown result type (might be due to invalid IL or missing references)
			//IL_0417: Unknown result type (might be due to invalid IL or missing references)
			//IL_041c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0438: Unknown result type (might be due to invalid IL or missing references)
			//IL_0454: Unknown result type (might be due to invalid IL or missing references)
			//IL_0470: Unknown result type (might be due to invalid IL or missing references)
			//IL_0491: Expected O, but got Unknown
			//IL_0498: Unknown result type (might be due to invalid IL or missing references)
			//IL_049a: Unknown result type (might be due to invalid IL or missing references)
			//IL_049f: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0514: Expected O, but got Unknown
			//IL_051b: Unknown result type (might be due to invalid IL or missing references)
			//IL_051d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0522: Unknown result type (might be due to invalid IL or missing references)
			//IL_053e: Unknown result type (might be due to invalid IL or missing references)
			//IL_055a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0576: Unknown result type (might be due to invalid IL or missing references)
			//IL_0597: Expected O, but got Unknown
			//IL_059e: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_05dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_061a: Expected O, but got Unknown
			//IL_0621: Unknown result type (might be due to invalid IL or missing references)
			//IL_0623: Unknown result type (might be due to invalid IL or missing references)
			//IL_0628: Unknown result type (might be due to invalid IL or missing references)
			//IL_0644: Unknown result type (might be due to invalid IL or missing references)
			//IL_0660: Unknown result type (might be due to invalid IL or missing references)
			//IL_067c: Unknown result type (might be due to invalid IL or missing references)
			//IL_069d: Expected O, but got Unknown
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e9: Expected I4, but got Unknown
			PageRundown = __instance;
			TierA = __instance.m_expIconsTier1;
			TierB = __instance.m_expIconsTier2;
			TierC = __instance.m_expIconsTier3;
			TierD = __instance.m_expIconsTier4;
			TierE = __instance.m_expIconsTier5;
			if (!((Object)(object)__instance.m_tierMarkerSectorSummary != (Object)null))
			{
				return;
			}
			uint blockID = GameDataBlockBase<RundownDataBlock>.GetBlockID(RundownProgressionSetup.ProgInfo[0].RundownName);
			RundownDataBlock val = (RundownData = GameDataBlockBase<RundownDataBlock>.GetBlock(blockID));
			AllTotalClearData = ClearTrackingFileSetup.ClearData.AllClearsInRundown;
			Enumerator<CM_ExpeditionIcon_New> enumerator = __instance.m_expIconsAll.GetEnumerator();
			while (enumerator.MoveNext())
			{
				CM_ExpeditionIcon_New current = enumerator.Current;
				if (!Object.op_Implicit((Object)(object)((Component)current).gameObject.GetComponent<CM_IconScript>()))
				{
					eRundownTier tier = current.Tier;
					eRundownTier val2 = tier;
					switch (val2 - 1)
					{
					case 0:
						((Component)current).gameObject.AddComponent<CM_IconScript>().Setup(RundownProgressionSetup.ProgInfo[0].TierAExpeditions[current.ExpIndex], RundownProgressionSetup.ProgInfo[0].ReqForATier, current, val, ClearTrackingFileSetup.ClearData.TierAClearData[current.ExpIndex]);
						break;
					case 1:
						((Component)current).gameObject.AddComponent<CM_IconScript>().Setup(RundownProgressionSetup.ProgInfo[0].TierBExpeditions[current.ExpIndex], RundownProgressionSetup.ProgInfo[0].ReqForBTier, current, val, ClearTrackingFileSetup.ClearData.TierBClearData[current.ExpIndex]);
						break;
					case 2:
						((Component)current).gameObject.AddComponent<CM_IconScript>().Setup(RundownProgressionSetup.ProgInfo[0].TierCExpeditions[current.ExpIndex], RundownProgressionSetup.ProgInfo[0].ReqForCTier, current, val, ClearTrackingFileSetup.ClearData.TierCClearData[current.ExpIndex]);
						break;
					case 3:
						((Component)current).gameObject.AddComponent<CM_IconScript>().Setup(RundownProgressionSetup.ProgInfo[0].TierDExpeditions[current.ExpIndex], RundownProgressionSetup.ProgInfo[0].ReqForDTier, current, val, ClearTrackingFileSetup.ClearData.TierDClearData[current.ExpIndex]);
						break;
					case 4:
						((Component)current).gameObject.AddComponent<CM_IconScript>().Setup(RundownProgressionSetup.ProgInfo[0].TierEExpeditions[current.ExpIndex], RundownProgressionSetup.ProgInfo[0].ReqForETier, current, val, ClearTrackingFileSetup.ClearData.TierEClearData[current.ExpIndex]);
						break;
					}
				}
				PluginSetup.logSource.LogDebug((object)$"{current.ExpIndex}");
			}
			RundownProgData val3 = default(RundownProgData);
			RundownManager.TryGetAggregatedProgressionDataForCurrentRundown(ref val3);
			__instance.m_tierMarkerSectorSummary.SetSectorIconTextForMain($"{AllTotalClearData.HighClears}<size=50%>/{val3.totalMain}</size>", "#FFFFFFCC");
			__instance.m_tierMarkerSectorSummary.SetSectorIconTextForSecondary($"{AllTotalClearData.SecondaryClears}<size=50%>/{val3.totalSecondary}</size>", "#CCCCCCCC");
			__instance.m_tierMarkerSectorSummary.SetSectorIconTextForThird($"{AllTotalClearData.OverloadClears}<size=50%>/{val3.totalThird}</size>", "#CCCCCCCC");
			__instance.m_tierMarkerSectorSummary.SetSectorIconTextForAllCleared($"{AllTotalClearData.PEClears}<size=50%>/{val3.totalAllClear}</size>", "#CCCCCCCC");
			RundownProgData val4 = default(RundownProgData);
			val4.clearedMain = AllTotalClearData.HighClears;
			val4.clearedSecondary = AllTotalClearData.SecondaryClears;
			val4.clearedThird = AllTotalClearData.OverloadClears;
			val4.clearedAllClear = AllTotalClearData.PEClears;
			RundownProgData val5 = val4;
			__instance.m_tierMarker1.SetProgression(val5, new RundownTierProgressionData
			{
				MainSectors = RundownProgressionSetup.ProgInfo[0].ReqForATier.HighClears,
				SecondarySectors = RundownProgressionSetup.ProgInfo[0].ReqForATier.SecondaryClears,
				ThirdSectors = RundownProgressionSetup.ProgInfo[0].ReqForATier.OverloadClears,
				AllClearedSectors = RundownProgressionSetup.ProgInfo[0].ReqForATier.PEClears
			});
			__instance.m_tierMarker2.SetProgression(val5, new RundownTierProgressionData
			{
				MainSectors = RundownProgressionSetup.ProgInfo[0].ReqForBTier.HighClears,
				SecondarySectors = RundownProgressionSetup.ProgInfo[0].ReqForBTier.SecondaryClears,
				ThirdSectors = RundownProgressionSetup.ProgInfo[0].ReqForBTier.OverloadClears,
				AllClearedSectors = RundownProgressionSetup.ProgInfo[0].ReqForBTier.PEClears
			});
			__instance.m_tierMarker3.SetProgression(val5, new RundownTierProgressionData
			{
				MainSectors = RundownProgressionSetup.ProgInfo[0].ReqForCTier.HighClears,
				SecondarySectors = RundownProgressionSetup.ProgInfo[0].ReqForCTier.SecondaryClears,
				ThirdSectors = RundownProgressionSetup.ProgInfo[0].ReqForCTier.OverloadClears,
				AllClearedSectors = RundownProgressionSetup.ProgInfo[0].ReqForCTier.PEClears
			});
			__instance.m_tierMarker4.SetProgression(val5, new RundownTierProgressionData
			{
				MainSectors = RundownProgressionSetup.ProgInfo[0].ReqForDTier.HighClears,
				SecondarySectors = RundownProgressionSetup.ProgInfo[0].ReqForDTier.SecondaryClears,
				ThirdSectors = RundownProgressionSetup.ProgInfo[0].ReqForDTier.OverloadClears,
				AllClearedSectors = RundownProgressionSetup.ProgInfo[0].ReqForDTier.PEClears
			});
			__instance.m_tierMarker5.SetProgression(val5, new RundownTierProgressionData
			{
				MainSectors = RundownProgressionSetup.ProgInfo[0].ReqForETier.HighClears,
				SecondarySectors = RundownProgressionSetup.ProgInfo[0].ReqForETier.SecondaryClears,
				ThirdSectors = RundownProgressionSetup.ProgInfo[0].ReqForETier.OverloadClears,
				AllClearedSectors = RundownProgressionSetup.ProgInfo[0].ReqForETier.PEClears
			});
			PluginSetup.logSource.LogDebug((object)((GameDataBlockBase<RundownDataBlock>)(object)val).name);
			Enumerator<CM_ExpeditionIcon_New> enumerator2 = __instance.m_expIconsAll.GetEnumerator();
			while (enumerator2.MoveNext())
			{
				CM_ExpeditionIcon_New current2 = enumerator2.Current;
				EditIcon(current2, val);
			}
		}

		public static void EditIcon(CM_ExpeditionIcon_New IconToEdit, RundownDataBlock RundownData)
		{
			//IL_05d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0535: Unknown result type (might be due to invalid IL or missing references)
			//IL_0540: Unknown result type (might be due to invalid IL or missing references)
			//IL_0548: Unknown result type (might be due to invalid IL or missing references)
			//IL_0553: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0141: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0145: Unknown result type (might be due to invalid IL or missing references)
			//IL_0148: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Expected I4, but got Unknown
			//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0303: Unknown result type (might be due to invalid IL or missing references)
			CM_IconScript component = ((Component)IconToEdit).gameObject.GetComponent<CM_IconScript>();
			CustomExpeditionData connectedData = component.m_ConnectedData;
			ClearData tierData = component.m_TierData;
			string text = connectedData.LockData.ExpeditionText;
			List<bool> list = new List<bool>();
			ClearData clearData = component.m_ClearData;
			string text2 = clearData.HighClears.ToString();
			string text3 = "-";
			string text4 = "-";
			string text5 = "-";
			if (RundownManager.HasSecondaryLayer(IconToEdit.DataBlock))
			{
				text3 = clearData.SecondaryClears.ToString();
			}
			if (RundownManager.HasThirdLayer(IconToEdit.DataBlock))
			{
				text4 = clearData.OverloadClears.ToString();
			}
			if (RundownManager.HasAllCompletetionPossibility(IconToEdit.DataBlock))
			{
				text5 = clearData.PEClears.ToString();
			}
			if (connectedData.LockData.CustomLock)
			{
				if (connectedData.LockData.HideExpedition)
				{
					component.m_HideExpedition = true;
				}
				if (connectedData.LockData.ExpeditionRequirements.Count > 0)
				{
					foreach (ExpeditionFinder expeditionRequirement in connectedData.LockData.ExpeditionRequirements)
					{
						CustomExpeditionData customExpeditionData = null;
						ClearData clearData2 = null;
						eRundownTier tier = expeditionRequirement.Tier;
						eRundownTier val = tier;
						switch (val - 1)
						{
						case 0:
							customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierAExpeditions[expeditionRequirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierAClearData[expeditionRequirement.ExpeditionIndex];
							break;
						case 1:
							customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierBExpeditions[expeditionRequirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierBClearData[expeditionRequirement.ExpeditionIndex];
							break;
						case 2:
							customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierCExpeditions[expeditionRequirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierCClearData[expeditionRequirement.ExpeditionIndex];
							break;
						case 3:
							customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierDExpeditions[expeditionRequirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierDClearData[expeditionRequirement.ExpeditionIndex];
							break;
						case 4:
							customExpeditionData = RundownProgressionSetup.ProgInfo[0].TierEExpeditions[expeditionRequirement.ExpeditionIndex];
							clearData2 = ClearTrackingFileSetup.ClearData.TierEClearData[expeditionRequirement.ExpeditionIndex];
							break;
						}
						if (clearData2.HighClears >= expeditionRequirement.HighClearsReq && clearData2.SecondaryClears >= expeditionRequirement.SecondaryClearsReq && clearData2.OverloadClears >= expeditionRequirement.OverClearsReq && clearData2.PEClears >= expeditionRequirement.PEClearsReq)
						{
							if (expeditionRequirement.ChangeExpeditionAccessebility)
							{
								IconToEdit.SetStatus(expeditionRequirement.NewExpeditionStatus, text2, text3, text4, text5, 1f);
								IconToEdit.Accessibility = expeditionRequirement.NewExpeditionAccessibility;
							}
							if (expeditionRequirement.ChangeText)
							{
								text = expeditionRequirement.NewTextString;
							}
							if (expeditionRequirement.MakeExpeditionVisible)
							{
								component.m_HideExpedition = false;
							}
							if (expeditionRequirement.MakeExpeditionInvisible)
							{
								component.m_HideExpedition = true;
							}
							if (expeditionRequirement.UnlockExpeditionFromDecryptedText)
							{
								if (component.TierData.Descriptive.SkipExpNumberInName)
								{
									IconToEdit.SetShortName(component.TierData.Descriptive.Prefix);
								}
								else
								{
									IconToEdit.SetShortName(component.TierData.Descriptive.Prefix + (IconToEdit.ExpIndex + 1));
								}
								IconToEdit.SetPublicName(component.TierData.Descriptive.PublicName + (component.TierData.Descriptive.IsExtraExpedition ? "<color=orange><size=80%>://EXT</size></color>" : ""));
								IconToEdit.SetFullName(IconToEdit.ShortName + " : " + component.TierData.Descriptive.PublicName);
							}
							list.Add(item: true);
							PluginSetup.logSource.LogDebug((object)"Requirement Met!");
						}
						else
						{
							list.Add(item: false);
							PluginSetup.logSource.LogDebug((object)"Requirement Not Met!");
						}
					}
					if (list.Contains(item: false) && connectedData.LockData.UnlockFromOtherExpeditions)
					{
						text = connectedData.LockData.TextForLock;
						IconToEdit.SetStatus((eExpeditionIconStatus)0, "-", "-", "-", "-", 1f);
						IconToEdit.Accessibility = (eExpeditionAccessibility)1;
					}
					else if (connectedData.LockData.UnlockFromOtherExpeditions)
					{
						component.m_HideExpedition = false;
						IconToEdit.SetStatus((eExpeditionIconStatus)4, text2, text3, text4, text5, 1f);
						IconToEdit.Accessibility = (eExpeditionAccessibility)2;
					}
				}
			}
			else
			{
				CalculateExpedition(tierData, connectedData, IconToEdit, component.m_ClearData);
			}
			if (connectedData.LockData.ChangeDecryptionText)
			{
				if (connectedData.LockData.DisableDecryptionTextOnUnlock && IconToEdit.Status == connectedData.LockData.IconStatusToDisableTextOn && IconToEdit.Accessibility == connectedData.LockData.AccessibilityToDisableTextOn)
				{
					((Component)IconToEdit.m_decryptErrorText).gameObject.SetActive(false);
				}
				else
				{
					((TMP_Text)IconToEdit.m_decryptErrorText).SetText(text, true);
					((Component)IconToEdit.m_decryptErrorText).gameObject.SetActive(true);
				}
			}
			else
			{
				((Component)IconToEdit.m_decryptErrorText).gameObject.SetActive(false);
			}
			((Component)IconToEdit.m_statusText).gameObject.transform.position = ((Component)IconToEdit.m_artifactHeatText).gameObject.transform.position;
			((Component)IconToEdit.m_artifactHeatText).gameObject.SetActive(false);
		}

		public static void CalculateExpedition(ClearData TierProgression, CustomExpeditionData CustomexpeditionData, CM_ExpeditionIcon_New IconToEdit, ClearData ExpeditionClearData)
		{
			if ((AllTotalClearData.HighClears >= TierProgression.HighClears && AllTotalClearData.SecondaryClears >= TierProgression.SecondaryClears && AllTotalClearData.OverloadClears >= TierProgression.OverloadClears && AllTotalClearData.PEClears >= TierProgression.PEClears) || CustomexpeditionData.LockData.AlwaysUnlocked)
			{
				string text = ExpeditionClearData.HighClears.ToString();
				string text2 = "-";
				string text3 = "-";
				string text4 = "-";
				if (RundownManager.HasSecondaryLayer(IconToEdit.DataBlock))
				{
					text2 = ExpeditionClearData.SecondaryClears.ToString();
				}
				if (RundownManager.HasThirdLayer(IconToEdit.DataBlock))
				{
					text3 = ExpeditionClearData.OverloadClears.ToString();
				}
				if (RundownManager.HasAllCompletetionPossibility(IconToEdit.DataBlock))
				{
					text4 = ExpeditionClearData.PEClears.ToString();
				}
				IconToEdit.SetStatus((eExpeditionIconStatus)4, text, text2, text3, text4, 1f);
				IconToEdit.Accessibility = (eExpeditionAccessibility)2;
			}
			else
			{
				IconToEdit.SetStatus((eExpeditionIconStatus)0, "-", "-", "-", "-", 1f);
				IconToEdit.Accessibility = (eExpeditionAccessibility)1;
			}
		}
	}
}
namespace RundownProgression.GameScripts
{
	public class CM_IconScript : MonoBehaviour
	{
		public CustomExpeditionData m_ConnectedData;

		public ClearData m_TierData;

		public bool m_HideExpedition;

		public ExpeditionInTierData TierData;

		public string rundownKey;

		public eRundownTier tierID;

		public int expIndex;

		public Color tierColor;

		public Transform Root;

		public CM_ExpeditionIcon_New m_ConnectedIcon;

		public Transform m_RootHide;

		public BoxCollider2D m_BoxCollider2D;

		public ClearData m_ClearData;

		public void Setup(CustomExpeditionData ConnectedData, ClearData tierProgressionData, CM_ExpeditionIcon_New Icon, RundownDataBlock block, ClearData ExpeditionClears)
		{
			//IL_0037: 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_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: 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_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Expected I4, but got Unknown
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			m_ConnectedIcon = Icon;
			m_ConnectedData = ConnectedData;
			m_TierData = tierProgressionData;
			m_HideExpedition = false;
			TierData = Icon.DataBlock;
			rundownKey = Icon.RundownKey;
			tierID = Icon.Tier;
			expIndex = Icon.ExpIndex;
			m_ClearData = ExpeditionClears;
			m_RootHide = ((Component)this).gameObject.transform.FindChild("Root");
			m_BoxCollider2D = ((Component)this).gameObject.GetComponent<BoxCollider2D>();
			eRundownTier tier = Icon.Tier;
			eRundownTier val = tier;
			switch (val - 1)
			{
			case 0:
				tierColor = block.StorytellingData.Visuals.TierAVisuals.Color;
				break;
			case 1:
				tierColor = block.StorytellingData.Visuals.TierBVisuals.Color;
				break;
			case 2:
				tierColor = block.StorytellingData.Visuals.TierCVisuals.Color;
				break;
			case 3:
				tierColor = block.StorytellingData.Visuals.TierDVisuals.Color;
				break;
			case 4:
				tierColor = block.StorytellingData.Visuals.TierEVisuals.Color;
				break;
			}
			Root = ((Component)Icon).transform.parent;
			DeleteChild();
			PluginSetup.logSource.LogDebug((object)"Adding script to icon");
		}

		public void DeleteChild()
		{
			if ((Object)(object)((Component)this).transform.FindChild("Activate All Buttons") != (Object)null)
			{
				Object.Destroy((Object)(object)((Component)this).transform.FindChild("Activate All Buttons"));
				PluginSetup.logSource.LogDebug((object)"Destroying extra button!");
			}
		}

		public void Update()
		{
			if (m_HideExpedition)
			{
				((Component)m_RootHide).gameObject.SetActive(false);
				((Behaviour)m_BoxCollider2D).enabled = false;
			}
			if (!m_HideExpedition)
			{
				((Component)m_RootHide).gameObject.SetActive(true);
				((Behaviour)m_BoxCollider2D).enabled = true;
			}
		}

		public void UpdateText()
		{
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			string text = m_ClearData.HighClears.ToString();
			string text2 = "-";
			string text3 = "-";
			string text4 = "-";
			if (RundownManager.HasSecondaryLayer(m_ConnectedIcon.DataBlock))
			{
				text2 = m_ClearData.SecondaryClears.ToString();
			}
			if (RundownManager.HasThirdLayer(m_ConnectedIcon.DataBlock))
			{
				text3 = m_ClearData.OverloadClears.ToString();
			}
			if (RundownManager.HasAllCompletetionPossibility(m_ConnectedIcon.DataBlock))
			{
				text4 = m_ClearData.PEClears.ToString();
			}
			m_ConnectedIcon.SetStatus(m_ConnectedIcon.Status, text, text2, text3, text4, 1f);
		}
	}
	public class TierMarkerScript : MonoBehaviour
	{
		public CM_PageRundown_New Rundown;

		public bool m_permanent;

		public void Setup(CM_PageRundown_New NewRundown)
		{
			Rundown = NewRundown;
			m_permanent = false;
		}

		public void Update()
		{
			m_permanent = !Rundown.m_rundownIsRevealed;
			if (Rundown.m_rundownIsRevealed)
			{
				((Component)this).gameObject.SetActive(true);
				m_permanent = true;
			}
			if (m_permanent)
			{
				((Component)this).gameObject.SetActive(true);
			}
		}
	}
}
namespace RundownProgression.ConfigFiles
{
	public class ClearData
	{
		public int HighClears { get; set; }

		public int SecondaryClears { get; set; }

		public int OverloadClears { get; set; }

		public int PEClears { get; set; }

		public ClearData()
		{
			HighClears = 0;
			SecondaryClears = 0;
			OverloadClears = 0;
			PEClears = 0;
		}
	}
	public class ClearJsonFile
	{
		public List<ClearData> TierAClearData = new List<ClearData>();

		public List<ClearData> TierBClearData = new List<ClearData>();

		public List<ClearData> TierCClearData = new List<ClearData>();

		public List<ClearData> TierDClearData = new List<ClearData>();

		public List<ClearData> TierEClearData = new List<ClearData>();

		public ClearData AllClearsInRundown { get; set; }

		public ClearJsonFile()
		{
			TierAClearData = new List<ClearData>();
			TierBClearData = new List<ClearData>();
			TierCClearData = new List<ClearData>();
			TierDClearData = new List<ClearData>();
			TierEClearData = new List<ClearData>();
			AllClearsInRundown = new ClearData();
			uint blockID = GameDataBlockBase<RundownDataBlock>.GetBlockID(RundownProgressionSetup.ProgInfo[0].RundownName);
			RundownDataBlock block = GameDataBlockBase<RundownDataBlock>.GetBlock(blockID);
			Enumerator<ExpeditionInTierData> enumerator = block.TierA.GetEnumerator();
			while (enumerator.MoveNext())
			{
				ExpeditionInTierData current = enumerator.Current;
				TierAClearData.Add(new ClearData());
			}
			Enumerator<ExpeditionInTierData> enumerator2 = block.TierB.GetEnumerator();
			while (enumerator2.MoveNext())
			{
				ExpeditionInTierData current2 = enumerator2.Current;
				TierBClearData.Add(new ClearData());
			}
			Enumerator<ExpeditionInTierData> enumerator3 = block.TierC.GetEnumerator();
			while (enumerator3.MoveNext())
			{
				ExpeditionInTierData current3 = enumerator3.Current;
				TierCClearData.Add(new ClearData());
			}
			Enumerator<ExpeditionInTierData> enumerator4 = block.TierD.GetEnumerator();
			while (enumerator4.MoveNext())
			{
				ExpeditionInTierData current4 = enumerator4.Current;
				TierDClearData.Add(new ClearData());
			}
			Enumerator<ExpeditionInTierData> enumerator5 = block.TierE.GetEnumerator();
			while (enumerator5.MoveNext())
			{
				ExpeditionInTierData current5 = enumerator5.Current;
				TierEClearData.Add(new ClearData());
			}
		}
	}
	public class CustomExpeditionData
	{
		public List<TerminalLogData> TerminalLogsToAdd = new List<TerminalLogData>();

		public List<DoorData> DoorsToEdit = new List<DoorData>();

		public ExpeditionLockData LockData { get; set; }
	}
	public class DoorData
	{
		public List<ExpeditionFinder> Requirements = new List<ExpeditionFinder>();

		public eLocalZoneIndex ZoneIndex { get; set; }

		public LG_LayerType ZoneLayer { get; set; }

		public eDimensionIndex ZoneDimension { get; set; }

		public bool OnlyUnlock { get; set; }

		public bool RemoveInteraction { get; set; }
	}
	public class ExpeditionFinder
	{
		public bool ChangeText { get; set; }

		public string NewTextString { get; set; }

		public bool ChangeExpeditionAccessebility { get; set; }

		public eExpeditionIconStatus NewExpeditionStatus { get; set; }

		public eExpeditionAccessibility NewExpeditionAccessibility { get; set; }

		public bool UnlockExpeditionFromDecryptedText { get; set; }

		public bool MakeExpeditionVisible { get; set; }

		public bool MakeExpeditionInvisible { get; set; }

		public eRundownTier Tier { get; set; }

		public int ExpeditionIndex { get; set; }

		public int HighClearsReq { get; set; }

		public int SecondaryClearsReq { get; set; }

		public int OverClearsReq { get; set; }

		public int PEClearsReq { get; set; }
	}
	public class ExpeditionLockData
	{
		public List<ExpeditionFinder> ExpeditionRequirements = new List<ExpeditionFinder>();

		public bool CustomLock { get; set; }

		public bool AlwaysUnlocked { get; set; }

		public bool UnlockFromOtherExpeditions { get; set; }

		public string TextForLock { get; set; }

		public bool HideExpedition { get; set; }

		public bool ChangeDecryptionText { get; set; }

		public bool DisableDecryptionTextOnUnlock { get; set; }

		public eExpeditionAccessibility AccessibilityToDisableTextOn { get; set; }

		public eExpeditionIconStatus IconStatusToDisableTextOn { get; set; }

		public string ExpeditionText { get; set; }
	}
	public class MainConfig
	{
		public List<CustomExpeditionData> TierAExpeditions = new List<CustomExpeditionData>();

		public List<CustomExpeditionData> TierBExpeditions = new List<CustomExpeditionData>();

		public List<CustomExpeditionData> TierCExpeditions = new List<CustomExpeditionData>();

		public List<CustomExpeditionData> TierDExpeditions = new List<CustomExpeditionData>();

		public List<CustomExpeditionData> TierEExpeditions = new List<CustomExpeditionData>();

		public ClearData ReqForATier { get; set; }

		public ClearData ReqForBTier { get; set; }

		public ClearData ReqForCTier { get; set; }

		public ClearData ReqForDTier { get; set; }

		public ClearData ReqForETier { get; set; }

		public bool HideTierMarkers { get; set; }

		public string RundownName { get; set; }
	}
	public class TerminalLogData
	{
		public List<ExpeditionFinder> Requirement = new List<ExpeditionFinder>();

		public MakeShiftLogData LogData { get; set; }

		public eLocalZoneIndex TerminalZone { get; set; }

		public LG_LayerType TerminalLayer { get; set; }

		public eDimensionIndex TerminalDimension { get; set; }

		public int TerminalIndex { get; set; }
	}
	public class MakeShiftLogData
	{
		public string FileName { get; set; }

		public string FileContent { get; set; }

		public uint AttachedAudioFile { get; set; }

		public int AttachedAudioByteSize { get; set; }

		public uint PlayerDialogToTriggerAfterAudio { get; set; }
	}
}