Decompiled source of Sector 11 v3.0.6
Plugins/ExtraSettings.dll
Decompiled 3 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.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/Sector 11/ExtraSettings.dll
Decompiled 3 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.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