using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AIGraph;
using AK;
using Agents;
using BepInEx;
using BepInEx.Unity.IL2CPP;
using ChainedPuzzles;
using EOSExt.ExtraDoor.Config;
using Enemies;
using Expedition;
using ExtraObjectiveSetup;
using ExtraObjectiveSetup.BaseClasses;
using ExtraObjectiveSetup.ExtendedWardenEvents;
using ExtraObjectiveSetup.Utils;
using GTFO.API;
using GTFO.API.Extensions;
using GameData;
using HarmonyLib;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using LevelGeneration;
using Localization;
using Microsoft.CodeAnalysis;
using SNetwork;
using UnityEngine;
using XXHashing;
[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 = ".NET 6.0")]
[assembly: AssemblyCompany("Inas07.EOSExt.ExtraDoor")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+3b93e6ace64e6a9a93039d59cb8a0c53714a338c")]
[assembly: AssemblyProduct("Inas07.EOSExt.ExtraDoor")]
[assembly: AssemblyTitle("Inas07.EOSExt.ExtraDoor")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace EOSExt.ExtraDoor
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("Inas.EOSExt.ExtraDoor", "EOSExt.ExtraDoor", "1.0.1")]
public class EntryPoint : BasePlugin
{
public const string AUTHOR = "Inas";
public const string PLUGIN_NAME = "EOSExt.ExtraDoor";
public const string VERSION = "1.0.1";
private Harmony m_Harmony;
public override void Load()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
SetupManagers();
m_Harmony = new Harmony("EOSExt.ExtraDoor");
m_Harmony.PatchAll();
EOSLogger.Log("ExtraObjectiveSetup.ExtraDoor loaded.");
}
private void SetupManagers()
{
((GenericExpeditionDefinitionManager<ForceConnectCfg>)ForceConnectManager.Current).Init();
}
}
internal static class ForceConnectDoorUtils
{
public static ForceConnect? GetFC(this LG_SecurityDoor fcdoor)
{
return ((Component)fcdoor).gameObject.GetComponentInParent<ForceConnect>();
}
public static List<(LG_ZoneExpander fromExp, LG_ZoneExpander toExp)> GetExpandersBetween(LG_Area fromArea, LG_Area toAreaB)
{
//IL_0044: 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_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
List<(LG_ZoneExpander, LG_ZoneExpander)> list = new List<(LG_ZoneExpander, LG_ZoneExpander)>();
Enumerator<LG_ZoneExpander> enumerator = fromArea.m_zoneExpanders.GetEnumerator();
Vector2 val = default(Vector2);
Vector2 val2 = default(Vector2);
while (enumerator.MoveNext())
{
LG_ZoneExpander current = enumerator.Current;
Enumerator<LG_ZoneExpander> enumerator2 = toAreaB.m_zoneExpanders.GetEnumerator();
while (enumerator2.MoveNext())
{
LG_ZoneExpander current2 = enumerator2.Current;
((Vector2)(ref val))..ctor(((Component)current).transform.position.x, ((Component)current).transform.position.z);
((Vector2)(ref val2))..ctor(((Component)current2).transform.position.x, ((Component)current2).transform.position.z);
if (Vector2.Distance(val, val2) <= 0.1f)
{
list.Add((current, current2));
}
}
}
return list;
}
public static void FCOnDoorOpenStarted(this LG_SecurityDoor fcdoor)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: 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_002a: Expected I4, but got Unknown
if ((int)fcdoor.m_securityDoorType == 2)
{
LG_LayerType linksToLayerType = fcdoor.LinksToLayerType;
LG_LayerType val = linksToLayerType;
switch ((int)val)
{
case 0:
fcdoor.m_sound.Post(EVENTS.BULKHEAD_ENTRANCE_THREAT_HIGH_LOOP, true);
break;
case 1:
fcdoor.m_sound.Post(EVENTS.BULKHEAD_ENTRANCE_THREAT_EXTREME_LOOP, true);
break;
case 2:
fcdoor.m_sound.Post(EVENTS.BULKHEAD_ENTRANCE_THREAT_OVERLOAD_LOOP, true);
break;
}
}
}
public static void FCOnDoorIsOpen(this LG_SecurityDoor fcdoor)
{
ForceConnect fC = fcdoor.GetFC();
EOSLogger.Log($"OnDoorIsOpened: ForceConnect: {fcdoor.LinkedToZoneData}");
if (!((Object)(object)fC != (Object)null))
{
return;
}
List<LevelEventData> eventsOnEnter = fC.Cfg.Setting.EventsOnEnter;
EOSLogger.Log("OnDoorIsOpened, FC.EventsOnEnter");
if (eventsOnEnter != null && eventsOnEnter.Count > 0)
{
eventsOnEnter.ForEach(delegate(LevelEventData e)
{
((MonoBehaviour)fcdoor).StartCoroutine(fcdoor.TriggerLevelEventWithDelay(e));
});
}
WardenObjectiveManager.CheckAndExecuteEventsOnTrigger(ListExtensions.ToIl2Cpp<WardenObjectiveEventData>(fC.Cfg.Setting.EventsOnOpenDoor), (eWardenObjectiveEventTrigger)0, true, 0f, (Il2CppStructArray<eWardenObjectiveEventType>)null);
}
public static void FCOnSyncDoorStatusChange(this LG_SecurityDoor fcdoor, pDoorState state, bool isRecall)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Invalid comparison between Unknown and I4
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_0178: Expected I4, but got Unknown
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: 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_017d: Unknown result type (might be due to invalid IL or missing references)
//IL_017e: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Invalid comparison between Unknown and I4
//IL_0304: Unknown result type (might be due to invalid IL or missing references)
//IL_0309: Unknown result type (might be due to invalid IL or missing references)
//IL_030f: Invalid comparison between Unknown and I4
//IL_0653: Unknown result type (might be due to invalid IL or missing references)
//IL_0654: Unknown result type (might be due to invalid IL or missing references)
//IL_0660: Unknown result type (might be due to invalid IL or missing references)
//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
//IL_01f6: Invalid comparison between Unknown and I4
//IL_0624: Unknown result type (might be due to invalid IL or missing references)
//IL_062a: Unknown result type (might be due to invalid IL or missing references)
//IL_0259: Unknown result type (might be due to invalid IL or missing references)
//IL_025a: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Invalid comparison between Unknown and I4
//IL_026d: Unknown result type (might be due to invalid IL or missing references)
//IL_0272: Unknown result type (might be due to invalid IL or missing references)
//IL_0278: Invalid comparison between Unknown and I4
//IL_0263: Unknown result type (might be due to invalid IL or missing references)
//IL_0264: Unknown result type (might be due to invalid IL or missing references)
//IL_026a: Invalid comparison between Unknown and I4
//IL_03f3: Unknown result type (might be due to invalid IL or missing references)
//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
//IL_040b: Unknown result type (might be due to invalid IL or missing references)
//IL_043d: Unknown result type (might be due to invalid IL or missing references)
//IL_0448: Unknown result type (might be due to invalid IL or missing references)
//IL_0452: Unknown result type (might be due to invalid IL or missing references)
//IL_0457: Unknown result type (might be due to invalid IL or missing references)
//IL_045c: Unknown result type (might be due to invalid IL or missing references)
//IL_0466: Unknown result type (might be due to invalid IL or missing references)
//IL_046b: Unknown result type (might be due to invalid IL or missing references)
//IL_0470: Unknown result type (might be due to invalid IL or missing references)
//IL_0478: Unknown result type (might be due to invalid IL or missing references)
//IL_047d: Unknown result type (might be due to invalid IL or missing references)
//IL_04f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0500: Unknown result type (might be due to invalid IL or missing references)
//IL_0588: Unknown result type (might be due to invalid IL or missing references)
//IL_0597: Unknown result type (might be due to invalid IL or missing references)
//IL_059d: Unknown result type (might be due to invalid IL or missing references)
ForceConnect fC = fcdoor.GetFC();
EOSLogger.Log($"OnSyncDoorStatusChange: m_lastState.hasBeenApproached: {fcdoor.m_lastState.hasBeenApproached}, state.hasBeenApproached: {state.hasBeenApproached}, ForceConnect: {fC}");
if (fcdoor.m_lastState.hasBeenApproached != state.hasBeenApproached && state.hasBeenApproached && (Object)(object)fC != (Object)null && !isRecall)
{
WardenObjectiveManager.CheckAndExecuteEventsOnTrigger(ListExtensions.ToIl2Cpp<WardenObjectiveEventData>(fC.Cfg.Setting.EventsOnApproachDoor), (eWardenObjectiveEventTrigger)0, true, 0f, (Il2CppStructArray<eWardenObjectiveEventType>)null);
fcdoor.LastStatus = state.status;
fcdoor.m_lastState = state;
return;
}
fcdoor.Gate.HasBeenOpenedDuringPlay = state.hasBeenOpenedDuringGame;
fcdoor.m_graphics.OnDoorState(state, isRecall);
fcdoor.m_anim.OnDoorState(state, isRecall);
fcdoor.m_locks.OnDoorState(state, isRecall);
bool flag = (int)fcdoor.m_securityDoorType == 2;
eDoorStatus status = state.status;
eDoorStatus val = status;
switch (val - 1)
{
case 0:
case 1:
case 4:
case 5:
case 6:
case 7:
case 8:
if ((int)state.status == 8 && fcdoor.OnChainPuzzleActivate != null)
{
WardenObjectiveManager.CheckAndExecuteEventsOnTrigger(ListExtensions.ToIl2Cpp<WardenObjectiveEventData>(fC.Cfg.Setting.EventsOnDoorScanStart), (eWardenObjectiveEventTrigger)0, true, 0f, (Il2CppStructArray<eWardenObjectiveEventType>)null);
if (fcdoor.LinkedToZoneData.PlayScannerVoiceAudio)
{
fcdoor.m_sound.Post(EVENTS.TTS_PLEASE_STEP_INTO_THE_BIOSCAN, true);
}
fcdoor.OnChainPuzzleActivate.Invoke();
}
if ((int)state.status == 9 && fcdoor.OnChainPuzzleActivate != null)
{
WardenObjectiveManager.CheckAndExecuteEventsOnTrigger(ListExtensions.ToIl2Cpp<WardenObjectiveEventData>(fC.Cfg.Setting.EventsOnDoorScanDone), (eWardenObjectiveEventTrigger)0, true, 0f, (Il2CppStructArray<eWardenObjectiveEventType>)null);
if (fC.Cfg.Setting.PlayScannerVoiceAudio)
{
fcdoor.m_sound.Post(EVENTS.TTS_BIOSCAN_SEQUENCE_COMPLETED, true);
}
}
if (((int)state.status == 9 || (int)state.status == 5) && (int)fcdoor.m_lastState.status == 3)
{
WardenObjectiveManager.CheckAndExecuteEventsOnTrigger(ListExtensions.ToIl2Cpp<WardenObjectiveEventData>(fC.Cfg.Setting.EventsOnUnlockDoor), (eWardenObjectiveEventTrigger)0, true, 0f, (Il2CppStructArray<eWardenObjectiveEventType>)null);
}
fcdoor.m_mapLookatRevealer.SetLocalGUIObjStatus((eCM_GuiObjectStatus)(flag ? 11 : 7));
fcdoor.CheckSetNavmarkerForBulkheadDoors();
break;
case 2:
{
fcdoor.m_mapLookatRevealer.SetLocalGUIObjStatus((eCM_GuiObjectStatus)(flag ? 11 : 8));
PlaceNavMarkerOnGO navMarkerPlacer2 = fcdoor.m_navMarkerPlacer;
if ((Object)(object)navMarkerPlacer2 != (Object)null)
{
navMarkerPlacer2.SetMarkerVisible(false);
}
break;
}
case 3:
if ((int)fcdoor.m_lastState.status == 3)
{
WardenObjectiveManager.CheckAndExecuteEventsOnTrigger(ListExtensions.ToIl2Cpp<WardenObjectiveEventData>(fC.Cfg.Setting.EventsOnUnlockDoor), (eWardenObjectiveEventTrigger)0, true, 0f, (Il2CppStructArray<eWardenObjectiveEventType>)null);
}
fcdoor.m_mapLookatRevealer.SetLocalGUIObjStatus((eCM_GuiObjectStatus)(flag ? 11 : 9));
fcdoor.CheckSetNavmarkerForBulkheadDoors();
break;
case 9:
{
PlaceNavMarkerOnGO navMarkerPlacer = fcdoor.m_navMarkerPlacer;
if ((Object)(object)navMarkerPlacer != (Object)null)
{
navMarkerPlacer.SetMarkerVisible(false);
}
fcdoor.m_mapLookatRevealer.SetLocalGUIObjStatus((eCM_GuiObjectStatus)(flag ? 12 : 6));
ActiveEnemyWaveData activeEnemyWave = fC.Cfg.Setting.ActiveEnemyWave;
if (activeEnemyWave == null || !activeEnemyWave.HasActiveEnemyWave)
{
break;
}
fcdoor.m_sound.Post(EVENTS.MONSTER_RUCKUS_FROM_BEHIND_SECURITY_DOOR_LOOP_STOP, true);
if (isRecall || !SNet.IsMaster)
{
break;
}
ForceConnectCfg cfg = fC.Cfg;
LG_Zone val2 = default(LG_Zone);
Builder.CurrentFloor.TryGetZoneByLocalIndex(cfg.DimensionIndex, cfg.To.Layer, cfg.To.LocalIndex, ref val2);
AIG_CourseNode courseNode = val2.m_areas[cfg.To.AreaIndex].m_courseNode;
Vector3 val3 = ((Component)fcdoor).transform.position + ((Component)fcdoor).transform.forward * -1.5f + Vector3.up * 0.3f;
Vector3 gateCrossingVec = fcdoor.Gate.GetGateCrossingVec();
if (activeEnemyWave.EnemyGroupInfrontOfDoor != 0)
{
EnemyGroupDataBlock block = GameDataBlockBase<EnemyGroupDataBlock>.GetBlock(activeEnemyWave.EnemyGroupInfrontOfDoor);
if (block == null)
{
EOSLogger.Error($"Can not spawn group. EnemyGroupDataBlock.GetBlock(ActiveEnemyWaveData.EnemyGroupInfrontOfDoor = {activeEnemyWave.EnemyGroupInfrontOfDoor}) returned null.");
}
else
{
Mastermind.Current.SpawnGroup(val3, courseNode, (EnemyGroupType)2, (eEnemyGroupSpawnType)3, block, -1f, gateCrossingVec, (IReplicator)null);
}
}
if (activeEnemyWave.EnemyGroupInArea == 0)
{
break;
}
EnemyGroupDataBlock block2 = GameDataBlockBase<EnemyGroupDataBlock>.GetBlock(activeEnemyWave.EnemyGroupInArea);
if (block2 == null)
{
EOSLogger.Error($"Can not spawn groups.EnemyGroupDataBlock.GetBlock(ActiveEnemyWaveData.EnemyGroupInArea = {activeEnemyWave.EnemyGroupInArea} ) returned null.");
}
else
{
for (int i = 0; i < activeEnemyWave.EnemyGroupsInArea; i++)
{
Mastermind.Current.SpawnGroup(val3, courseNode, (EnemyGroupType)2, (eEnemyGroupSpawnType)0, block2, -1f, default(Vector3), (IReplicator)null);
}
}
break;
}
case 14:
{
fcdoor.m_mapLookatRevealer.SetLocalGUIObjStatus((eCM_GuiObjectStatus)(flag ? 11 : 7));
PlaceNavMarkerOnGO navMarkerPlacer3 = fcdoor.m_navMarkerPlacer;
if ((Object)(object)navMarkerPlacer3 != (Object)null)
{
navMarkerPlacer3.SetMarkerVisible(false);
}
break;
}
case 15:
if (isRecall && SNet.IsMaster)
{
fcdoor.m_sync.AttemptDoorInteraction((eDoorInteractionType)0, 0f, 0f, default(Vector3), (Agent)null);
}
else if (SNet.IsMaster)
{
fcdoor.m_checkpointPuzzle.AttemptInteract((eChainedPuzzleInteraction)0);
}
break;
}
fcdoor.LastStatus = state.status;
fcdoor.m_lastState = state;
}
}
public class ForceConnect : MonoBehaviour
{
internal bool ShouldFlipDoor;
private bool _IsDynamicPortalSetup;
private AIG_CourseNode _FromNode;
private AIG_CourseNode _ToNode;
private AIG_CoursePortal _Portal;
private bool _PortalEnabled = true;
public LG_SecurityDoor LinkedSecDoor { get; internal set; }
public ForceConnectCfg Cfg { get; internal set; }
private void Update()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Invalid comparison between Unknown and I4
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Invalid comparison between Unknown and I4
if (!_IsDynamicPortalSetup && (Object)(object)LinkedSecDoor != (Object)null && (int)GameStateManager.CurrentStateName == 10)
{
LG_Gate gate = LinkedSecDoor.Gate;
_Portal = ((LG_ZoneExpander)gate).CoursePortal;
_FromNode = ((LG_ZoneExpander)gate).m_linksFrom.m_courseNode;
_ToNode = ((LG_ZoneExpander)gate).m_linksTo.m_courseNode;
_IsDynamicPortalSetup = true;
}
else if (_IsDynamicPortalSetup)
{
eDoorStatus status = LinkedSecDoor.m_sync.GetCurrentSyncState().status;
eDoorStatus val = status;
if ((int)val != 10)
{
SetPortalEnabled(enabled: false);
}
else
{
SetPortalEnabled(enabled: true);
}
}
}
private void SetPortalEnabled(bool enabled)
{
if (enabled && !_PortalEnabled)
{
_FromNode.m_portals.Add(_Portal);
_ToNode.m_portals.Add(_Portal);
_PortalEnabled = true;
}
else if (!enabled && _PortalEnabled)
{
RemoveItem(_FromNode.m_portals, _Portal);
RemoveItem(_ToNode.m_portals, _Portal);
_PortalEnabled = false;
}
}
private void RemoveItem(List<AIG_CoursePortal> portals, AIG_CoursePortal portal)
{
for (int i = 0; i < portals.Count; i++)
{
if (((Il2CppObjectBase)portals[i]).Pointer == ((Il2CppObjectBase)portal).Pointer)
{
portals.RemoveAt(i);
break;
}
}
}
static ForceConnect()
{
ClassInjector.RegisterTypeInIl2Cpp<ForceConnect>();
}
}
public class ForceConnectManager : GenericExpeditionDefinitionManager<ForceConnectCfg>
{
public enum FCDoorEventType
{
OpenFCDoor = 900,
UnlockFCDoor,
CloseFCDoor,
LockFCDoor
}
private Dictionary<string, LG_SecurityDoor> m_doorLookup = new Dictionary<string, LG_SecurityDoor>();
public static ForceConnectManager Current { get; } = new ForceConnectManager();
protected override string DEFINITION_NAME => "ExtraDoor";
public void BuildCfg(ForceConnectCfg cfg)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: 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_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: 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_0121: 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_012d: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: 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)
//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
//IL_01f1: Unknown result type (might be due to invalid IL or missing references)
//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0233: Unknown result type (might be due to invalid IL or missing references)
//IL_0239: 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_0312: Unknown result type (might be due to invalid IL or missing references)
//IL_0318: Unknown result type (might be due to invalid IL or missing references)
//IL_031e: Unknown result type (might be due to invalid IL or missing references)
//IL_035a: Unknown result type (might be due to invalid IL or missing references)
//IL_0360: Unknown result type (might be due to invalid IL or missing references)
//IL_0366: Unknown result type (might be due to invalid IL or missing references)
eDimensionIndex dimensionIndex = cfg.DimensionIndex;
Door from = cfg.From;
Door to = cfg.To;
LG_Zone val = default(LG_Zone);
LG_Zone val2 = default(LG_Zone);
if (!Builder.CurrentFloor.TryGetZoneByLocalIndex(dimensionIndex, from.Layer, from.LocalIndex, ref val) || 0 > from.AreaIndex || from.AreaIndex >= val.m_areas.Count || !Builder.CurrentFloor.TryGetZoneByLocalIndex(dimensionIndex, to.Layer, to.LocalIndex, ref val2) || 0 > to.AreaIndex || to.AreaIndex >= val2.m_areas.Count)
{
EOSLogger.Error($"CircularZones Build: Cannot find Zone 'From' or 'To'!\nFrom:({(cfg.DimensionIndex, from.Layer, from.LocalIndex, (char)(65 + from.AreaIndex))})To:({(cfg.DimensionIndex, to.Layer, to.LocalIndex, (char)(65 + to.AreaIndex))})");
return;
}
LG_Area fromArea = val.m_areas[from.AreaIndex];
LG_Area toArea = val2.m_areas[to.AreaIndex];
List<(LG_ZoneExpander, LG_ZoneExpander)> expandersBetween = ForceConnectDoorUtils.GetExpandersBetween(fromArea, toArea);
if (expandersBetween.Count < 1)
{
EOSLogger.Error($"ExtraDoor: cannot find gate / plug! From:({(cfg.DimensionIndex, from.Layer, from.LocalIndex, (char)(65 + from.AreaIndex))})To:({(cfg.DimensionIndex, to.Layer, to.LocalIndex, (char)(65 + to.AreaIndex))})");
}
else if (cfg.FromDoorIndex < 0 || cfg.FromDoorIndex >= expandersBetween.Count)
{
EOSLogger.Error($"ExtraDoor: FromDoorIndex ({cfg.FromDoorIndex}) is out of range [0, {expandersBetween.Count})From:({(cfg.DimensionIndex, from.Layer, from.LocalIndex, (char)(65 + from.AreaIndex))})To:({(cfg.DimensionIndex, to.Layer, to.LocalIndex, (char)(65 + to.AreaIndex))})");
}
else
{
Setup(expandersBetween[cfg.FromDoorIndex].Item1, expandersBetween[cfg.FromDoorIndex].Item2);
}
void Setup(LG_ZoneExpander expandFrom, LG_ZoneExpander expandTo)
{
LG_Plug val3 = ((Il2CppObjectBase)expandFrom).TryCast<LG_Plug>();
LG_Plug val4 = ((Il2CppObjectBase)expandTo).TryCast<LG_Plug>();
if ((Object)(object)val3 != (Object)null && (Object)(object)val4 != (Object)null)
{
val3.m_pariedWith = val4;
val4.m_pariedWith = val3;
((LG_ZoneExpander)val3).m_isZoneSource = true;
expandFrom.ExpanderStatus = (LG_ZoneExpanderStatus)1;
expandTo.ExpanderStatus = (LG_ZoneExpanderStatus)1;
expandFrom.m_linksTo = expandTo.m_linksFrom;
expandTo.m_linksTo = expandFrom.m_linksFrom;
GameObject gameObject = ((Component)val3).gameObject;
((Object)gameObject).name = ((Object)gameObject).name + "FORCE PAIR";
((Component)val3).gameObject.AddComponent<ForceConnect>().Cfg = cfg;
}
else
{
LG_Gate gate = expandFrom.GetGate();
switch (cfg.Setting.SecurityGateToEnter)
{
case GateType.Security:
gate.ForceSecurityGate = true;
break;
case GateType.Apex:
gate.ForceApexGate = true;
break;
case GateType.Bulkhead:
case GateType.Bulkhead_Main:
gate.ForceSecurityGate = true;
gate.ForceBulkheadGate = true;
break;
}
if (((Il2CppObjectBase)fromArea.m_zone).Pointer != ((Il2CppObjectBase)toArea.m_zone).Pointer)
{
expandFrom.m_isZoneSource = true;
expandFrom.ExpanderStatus = (LG_ZoneExpanderStatus)1;
expandTo.ExpanderStatus = (LG_ZoneExpanderStatus)1;
}
GameObject gameObject2 = ((Component)gate).gameObject;
((Object)gameObject2).name = ((Object)gameObject2).name + "FORCE PAIR";
((Component)gate).gameObject.AddComponent<ForceConnect>().Cfg = cfg;
}
}
}
private void Build()
{
if (base.definitions.TryGetValue(base.CurrentMainLevelLayout, out var value))
{
value.Definitions.ForEach(BuildCfg);
}
}
private void BuildProgressionPuzzle()
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
//IL_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_0158: 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_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0171: Expected I4, but got Unknown
//IL_018b: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Expected O, but got Unknown
//IL_023c: Unknown result type (might be due to invalid IL or missing references)
//IL_0241: Unknown result type (might be due to invalid IL or missing references)
//IL_0250: Expected O, but got Unknown
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0202: Unknown result type (might be due to invalid IL or missing references)
//IL_0284: Unknown result type (might be due to invalid IL or missing references)
//IL_028b: Expected O, but got Unknown
//IL_039e: Unknown result type (might be due to invalid IL or missing references)
//IL_02d7: Unknown result type (might be due to invalid IL or missing references)
//IL_040a: Unknown result type (might be due to invalid IL or missing references)
//IL_0416: Unknown result type (might be due to invalid IL or missing references)
//IL_041d: Unknown result type (might be due to invalid IL or missing references)
//IL_042d: Unknown result type (might be due to invalid IL or missing references)
//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
//IL_033d: Unknown result type (might be due to invalid IL or missing references)
//IL_0359: Unknown result type (might be due to invalid IL or missing references)
//IL_02f1: Unknown result type (might be due to invalid IL or missing references)
//IL_0306: Unknown result type (might be due to invalid IL or missing references)
LG_Zone val = default(LG_Zone);
LG_Zone val2 = default(LG_Zone);
foreach (KeyValuePair<string, LG_SecurityDoor> item in m_doorLookup)
{
LG_SecurityDoor value = item.Value;
ForceConnect fC = value.GetFC();
Door from = fC.Cfg.From;
Door to = fC.Cfg.To;
if (!Builder.CurrentFloor.TryGetZoneByLocalIndex(fC.Cfg.DimensionIndex, from.Layer, from.LocalIndex, ref val) || 0 > from.AreaIndex || from.AreaIndex >= val.m_areas.Count || !Builder.CurrentFloor.TryGetZoneByLocalIndex(fC.Cfg.DimensionIndex, to.Layer, to.LocalIndex, ref val2) || 0 > to.AreaIndex || to.AreaIndex >= val2.m_areas.Count || val2.ID <= 0)
{
continue;
}
if ((Object)(object)val2.m_sourceExpander == (Object)null)
{
EOSLogger.Error("Found zone without sourceGate AND ID over 0, id: " + val.ID);
continue;
}
FCProgressionPuzzleToEnter progressionPuzzleToEnter = fC.Cfg.Setting.ProgressionPuzzleToEnter;
LG_Layer layer = val2.Layer;
eProgressionPuzzleType puzzleType = progressionPuzzleToEnter.PuzzleType;
eProgressionPuzzleType val3 = puzzleType;
switch (val3 - 1)
{
case 0:
{
GateKeyItem randomKey = Builder.CurrentFloor.GetRandomKey(Builder.SessionSeedRandom);
LG_Factory.InjectJob((LG_FactoryJob)new LG_BuildKeyItemLockJob(value, randomKey), (BatchName)43);
if (progressionPuzzleToEnter.ZonePlacementData.Count > 0)
{
LG_Zone val8 = CreateKeyItemDistribution(randomKey, progressionPuzzleToEnter.ZonePlacementData[Builder.SessionSeedRandom.Range(0, progressionPuzzleToEnter.ZonePlacementData.Count, "NO_TAG")], layer);
ProgressionObjectivesManager.RegisterProgressionObjective(val2.DimensionIndex, val2.Layer.m_type, val2.LocalIndex, ((Il2CppObjectBase)new ProgressionObjective_KeyCard(randomKey, val2, val8)).Cast<IProgressionObjective>());
}
break;
}
case 1:
{
AIG_CourseNode courseNode = val.m_areas[from.AreaIndex].m_courseNode;
LG_DistributeItem val4 = new LG_DistributeItem((ExpeditionFunction)6, 1f, courseNode, (LG_Gate)null)
{
m_assignedGate = value.Gate
};
courseNode.m_zone.DistributionData.GenericFunctionItems.Enqueue(val4);
LG_Zone val5 = null;
for (int i = 0; i < progressionPuzzleToEnter.PlacementCount; i++)
{
LG_Zone val6 = layer.m_zones[0];
ZonePlacementWeights val7 = new ZonePlacementWeights();
if (progressionPuzzleToEnter.ZonePlacementData.Count > 0)
{
FCZonePlacementData fCZonePlacementData = progressionPuzzleToEnter.ZonePlacementData[Builder.SessionSeedRandom.Range(0, progressionPuzzleToEnter.ZonePlacementData.Count, "NO_TAG")];
if (layer.m_zonesByLocalIndex.ContainsKey(((GlobalZoneIndex)fCZonePlacementData).LocalIndex))
{
val6 = layer.m_zonesByLocalIndex[((GlobalZoneIndex)fCZonePlacementData).LocalIndex];
val5 = layer.m_zonesByLocalIndex[((GlobalZoneIndex)fCZonePlacementData).LocalIndex];
val7 = fCZonePlacementData.Weights;
}
else
{
EOSLogger.Error($"ProgressionPuzzleToEnter, Could NOT find zone with LocalIndex {((GlobalZoneIndex)fCZonePlacementData).LocalIndex} to place powerCell in to enter Zone {val2.LocalIndex}. Faulty zone specified!? DEFAULTING TO THE FIRST ZONE");
}
}
else
{
EOSLogger.Error($"ProgressionPuzzleToEnter has NO placement data for power cell going into {layer.m_type} lg_Zone.LocalIndex");
}
((LG_FactoryJob)new LG_Distribute_PickupItemsPerZone(val6, 1f, (ePickupItemType)3, 131u, val7)).Build();
}
if ((Object)(object)val5 != (Object)null)
{
ProgressionObjectivesManager.RegisterProgressionObjective(val2.DimensionIndex, val2.Layer.m_type, val2.LocalIndex, ((Il2CppObjectBase)new ProgressionObjective_GeneratorCell(val2, val5, courseNode.m_zone)).Cast<IProgressionObjective>());
}
break;
}
case 2:
value.SetupAsLockedNoKey(progressionPuzzleToEnter.CustomText);
break;
}
}
}
private LG_Zone CreateKeyItemDistribution(GateKeyItem keyItem, FCZonePlacementData placementData, LG_Layer doorLayer)
{
//IL_0058: 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_00d4: 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_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Expected O, but got Unknown
//IL_0230: Unknown result type (might be due to invalid IL or missing references)
//IL_0237: Expected O, but got Unknown
EOSLogger.Log($"CreateKeyItemDistribution, keyItem: {keyItem}, placementData: {placementData}");
LG_Zone val = doorLayer.m_zones[0];
if (doorLayer.m_zonesByLocalIndex.ContainsKey(((GlobalZoneIndex)placementData).LocalIndex))
{
val = doorLayer.m_zonesByLocalIndex[((GlobalZoneIndex)placementData).LocalIndex];
}
else
{
EOSLogger.Error($"LG_Distribute_ProgressionPuzzles.CreateKeyItemDistribution, Could NOT find zone with LocalIndex {((GlobalZoneIndex)placementData).LocalIndex} to place keycard in to enter Zone {val.LocalIndex} Faulty zone specified!? Dim: {doorLayer.m_dimension.DimensionIndex} | DEFAULTING TO THE FIRST ZONE");
}
ResourceContainerSpawnData val2 = new ResourceContainerSpawnData
{
m_type = (eResourceContainerSpawnType)7,
m_keyItem = keyItem
};
float num = Builder.BuildSeedRandom.Value("LG_Distribute_ProgressionPuzzles.CreateKeyItemDistribution_" + keyItem.PublicName);
AIG_CourseNode val3 = null;
LG_DistributeItem val4 = default(LG_DistributeItem);
if (LG_DistributionJobUtils.TryGetExistingZoneFunctionDistribution(val, (ExpeditionFunction)10, Builder.SessionSeedRandom.Value("LG_Distribute_ProgressionPuzzles.CreateKeyItemDistribution_TryGetZoneFunctionDistribution"), placementData.Weights, ref val4, ref val3, true, "FindContainerFor " + (object)keyItem))
{
LG_DistributeResourceContainer val5 = ((Il2CppObjectBase)val4).Cast<LG_DistributeResourceContainer>();
if (val5 != null)
{
val5.m_packs.Add(val2);
val5.m_locked = true;
}
else
{
EOSLogger.Error("LG_Distribute_ProgressionPuzzles.CreateKeyItemDistribution could not cast distItem as LG_DistributeResourceContainer!!");
}
}
else
{
val3 = LG_DistributionJobUtils.GetRandomNodeFromZoneForFunction(val, (ExpeditionFunction)10, num, 1f);
LG_DistributeResourceContainer val6 = new LG_DistributeResourceContainer((ExpeditionFunction)10, val2, false, val3, Builder.BuildSeedRandom.Range(0, int.MaxValue, "LG_Distribute_ProgressionPuzzles_New_LG_DistributeResourceContainer"), Builder.BuildSeedRandom.Value("LG_Distribute_ProgressionPuzzles_New_LG_DistributeResourceContainer_Lock"), Builder.BuildSeedRandom.Range(2, 4, "LG_Distribute_ProgressionPuzzles_New_LG_DistributeResourceContainer_StoragePotential"));
val3.m_zone.DistributionData.ResourceContainerItems.Enqueue(val6);
EOSLogger.Error("LG_Distribute_ProgressionPuzzles.CreateKeyItemDistribution Had to create a new resourceContainer!!");
}
iLG_SpawnedInNodeHandler component = ((Component)keyItem.SpawnedItem).GetComponent<iLG_SpawnedInNodeHandler>();
if (component != null)
{
component.SpawnNode = val3;
}
return val;
}
public void RegisterFCDoor(LG_SecurityDoor fcdoor)
{
ForceConnect fC = fcdoor.GetFC();
if ((Object)(object)fC == (Object)null)
{
EOSLogger.Error("ExtraDoor: Registering non-forceconnect door");
return;
}
if (m_doorLookup.ContainsKey(fC.Cfg.WorldEventObjectFilter))
{
EOSLogger.Error("ExtraDoor: Duplicate ExtraDoor '" + fC.Cfg.WorldEventObjectFilter + "'");
}
m_doorLookup[fC.Cfg.WorldEventObjectFilter] = fcdoor;
}
public LG_SecurityDoor GetFCDoor(string worldEventObjectFilter)
{
LG_SecurityDoor value;
return m_doorLookup.TryGetValue(worldEventObjectFilter, out value) ? value : null;
}
private void Cleanup()
{
m_doorLookup.Clear();
}
private void OnEnterLevel()
{
}
private ForceConnectManager()
{
BatchBuildManager.Current.Add_OnBatchDone((BatchName)5, (Action)Build);
BatchBuildManager.Current.Add_OnBatchDone((BatchName)16, (Action)BuildProgressionPuzzle);
EOSWardenEventManager.Current.AddEventDefinition(FCDoorEventType.OpenFCDoor.ToString(), 900u, (Action<WardenObjectiveEventData>)OpenFCDoor);
EOSWardenEventManager.Current.AddEventDefinition(FCDoorEventType.UnlockFCDoor.ToString(), 901u, (Action<WardenObjectiveEventData>)UnlockFCDoor);
EOSWardenEventManager.Current.AddEventDefinition(FCDoorEventType.CloseFCDoor.ToString(), 902u, (Action<WardenObjectiveEventData>)CloseFCDoor);
EOSWardenEventManager.Current.AddEventDefinition(FCDoorEventType.LockFCDoor.ToString(), 903u, (Action<WardenObjectiveEventData>)LockFCDoor);
LevelAPI.OnEnterLevel += OnEnterLevel;
LevelAPI.OnLevelCleanup += Cleanup;
}
private static void OpenFCDoor(WardenObjectiveEventData e)
{
if (SNet.IsMaster)
{
LG_SecurityDoor fCDoor = Current.GetFCDoor(e.WorldEventObjectFilter);
if ((Object)(object)fCDoor == (Object)null)
{
EOSLogger.Error("OpenFCDoor: Cannot find FC door with '" + e.WorldEventObjectFilter + "'");
}
else
{
fCDoor.ForceOpenSecurityDoor();
}
}
}
private static void UnlockFCDoor(WardenObjectiveEventData e)
{
if (SNet.IsMaster)
{
LG_SecurityDoor fCDoor = Current.GetFCDoor(e.WorldEventObjectFilter);
if ((Object)(object)fCDoor == (Object)null)
{
EOSLogger.Error("UnlockFCDoor: Cannot find FC door with '" + e.WorldEventObjectFilter + "'");
}
else
{
fCDoor.UseChainedPuzzleOrUnlock(SNet.Master);
}
}
}
private static void CloseFCDoor(WardenObjectiveEventData e)
{
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Invalid comparison between Unknown and I4
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Invalid comparison between Unknown and I4
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
if (!SNet.IsMaster)
{
return;
}
LG_SecurityDoor fCDoor = Current.GetFCDoor(e.WorldEventObjectFilter);
if ((Object)(object)fCDoor == (Object)null)
{
EOSLogger.Error("UnlockFCDoor: Cannot find FC door with '" + e.WorldEventObjectFilter + "'");
return;
}
pDoorState currentSyncState = fCDoor.m_sync.GetCurrentSyncState();
if ((int)currentSyncState.status != 10 && (int)currentSyncState.status != 16)
{
return;
}
LG_Door_Sync val = ((Il2CppObjectBase)fCDoor.m_sync).TryCast<LG_Door_Sync>();
if (!((Object)(object)val == (Object)null))
{
pDoorState currentSyncState2 = val.GetCurrentSyncState();
currentSyncState2.status = (eDoorStatus)1;
currentSyncState2.hasBeenOpenedDuringGame = false;
pDoorState state = currentSyncState2;
val.m_stateReplicator.State = state;
LG_Gate gate = fCDoor.Gate;
gate.HasBeenOpenedDuringPlay = false;
gate.IsTraversable = false;
ForceConnect fC = fCDoor.GetFC();
DoorSetting setting = fC.Cfg.Setting;
if (setting.ActiveEnemyWave != null && setting.ActiveEnemyWave.HasActiveEnemyWave)
{
fCDoor.m_sound.Post(EVENTS.MONSTER_RUCKUS_FROM_BEHIND_SECURITY_DOOR_LOOP_START, true);
}
EOSLogger.Debug("Door Closed!");
}
}
private static void LockFCDoor(WardenObjectiveEventData e)
{
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
if (!SNet.IsMaster)
{
return;
}
LG_SecurityDoor fCDoor = Current.GetFCDoor(e.WorldEventObjectFilter);
if ((Object)(object)fCDoor == (Object)null)
{
EOSLogger.Error("UnlockFCDoor: Cannot find FC door with '" + e.WorldEventObjectFilter + "'");
return;
}
LG_Door_Sync val = ((Il2CppObjectBase)fCDoor.m_sync).TryCast<LG_Door_Sync>();
if (!((Object)(object)val == (Object)null))
{
pDoorState currentSyncState = val.GetCurrentSyncState();
currentSyncState.status = (eDoorStatus)7;
pDoorState state = currentSyncState;
val.m_stateReplicator.State = state;
EOSLogger.Debug("Door Locked!");
}
}
}
}
namespace EOSExt.ExtraDoor.Patches
{
[HarmonyPatch]
internal static class CheckDoorFlip
{
[HarmonyPrefix]
[HarmonyWrapSafe]
[HarmonyPatch(typeof(LG_BuildSecurityDoorLockJob), "CheckFlip")]
private static bool Pre_(LG_BuildSecurityDoorLockJob __instance)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
ForceConnect fC = __instance.m_door.GetFC();
if ((Object)(object)fC == (Object)null)
{
return true;
}
LG_SecurityDoor door = __instance.m_door;
Vector3 forward = ((Component)door).transform.forward;
ForceConnectCfg cfg = fC.Cfg;
Door from = cfg.From;
LG_Zone val = default(LG_Zone);
Builder.CurrentFloor.TryGetZoneByLocalIndex(cfg.DimensionIndex, from.Layer, from.LocalIndex, ref val);
LG_Area val2 = val.m_areas[from.AreaIndex];
LG_Area linksFrom = ((LG_ZoneExpander)door.Gate).m_linksFrom;
Door to = cfg.To;
EOSLogger.Warning($"CheckFilp!\nOri: {((Object)linksFrom).name} -> {((Object)((LG_ZoneExpander)door.Gate).m_linksTo).name}\nShould be: {(cfg.DimensionIndex, from.Layer, from.LocalIndex, (char)(65 + from.AreaIndex))} -> {(cfg.DimensionIndex, to.Layer, to.LocalIndex, (char)(65 + to.AreaIndex))}");
if (door.FlippedForProgresion)
{
EOSLogger.Error("Door already flipped, skipped ....");
return false;
}
if (((Il2CppObjectBase)val2).Pointer == ((Il2CppObjectBase)linksFrom).Pointer)
{
EOSLogger.Error("Flipped!");
door.FlippedForProgresion = true;
((Component)door).transform.rotation = Quaternion.LookRotation(((Component)door).transform.forward * -1f, ((Component)door).transform.up);
}
return false;
}
}
[HarmonyPatch]
internal static class OnSecurityDoorSetup
{
[HarmonyPostfix]
[HarmonyPatch(typeof(LG_SecurityDoor), "Setup")]
private static void Postfix(LG_SecurityDoor __instance)
{
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
ForceConnect fC = __instance.GetFC();
if (!((Object)(object)fC != (Object)null))
{
return;
}
ForceConnectCfg cfg = fC.Cfg;
Door from = cfg.From;
Door to = cfg.To;
EOSLogger.Debug($"ForceConnect: {cfg.DimensionIndex}, ({from.Layer}, {from.LocalIndex}, {(ushort)(65 + from.AreaIndex)}) <-> ({to.Layer}, {to.LocalIndex}, {(ushort)(65 + to.AreaIndex)})\nWorldEventObjectFilter: '{cfg.WorldEventObjectFilter}', FromDoorIndex: {cfg.FromDoorIndex}");
ForceConnectManager.Current.RegisterFCDoor(__instance);
fC.LinkedSecDoor = __instance;
__instance.LinksToLayerType = to.Layer;
LG_Door_Sync val = ((Il2CppObjectBase)__instance.m_sync).Cast<LG_Door_Sync>();
val.OnDoorStateChange = Action<pDoorState, bool>.op_Implicit((Action<pDoorState, bool>)__instance.FCOnSyncDoorStatusChange);
LG_SecurityDoor_Anim val2 = ((Il2CppObjectBase)__instance.m_anim).TryCast<LG_SecurityDoor_Anim>();
if ((Object)(object)val2 != (Object)null)
{
val2.OnDoorOpenStarted = Action.op_Implicit((Action)__instance.FCOnDoorOpenStarted);
val2.OnDoorIsOpen = Action.op_Implicit((Action)__instance.FCOnDoorIsOpen);
return;
}
LG_ApexDoor_Anim val3 = ((Il2CppObjectBase)__instance.m_anim).TryCast<LG_ApexDoor_Anim>();
if ((Object)(object)val3 != (Object)null)
{
val3.OnDoorOpenStarted = Action.op_Implicit((Action)__instance.FCOnDoorOpenStarted);
val3.OnDoorIsOpen = Action.op_Implicit((Action)__instance.FCOnDoorIsOpen);
}
else
{
EOSLogger.Error("LG_SecurityDoor: Cannot cast iLG_Door_Anim");
}
}
}
}
namespace EOSExt.ExtraDoor.Patches.SetupFCDoor
{
[HarmonyPatch]
internal static class BuildGate
{
[HarmonyPrefix]
[HarmonyWrapSafe]
[HarmonyPatch(typeof(LG_BuildGateJob), "Build")]
private static bool Pre_(LG_BuildGateJob __instance, ref bool __result)
{
//IL_00b1: 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_0160: Invalid comparison between Unknown and I4
//IL_0184: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_018b: Unknown result type (might be due to invalid IL or missing references)
//IL_018d: Unknown result type (might be due to invalid IL or missing references)
//IL_018f: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Expected I4, but got Unknown
//IL_0818: Unknown result type (might be due to invalid IL or missing references)
//IL_081e: Invalid comparison between Unknown and I4
//IL_07a9: Unknown result type (might be due to invalid IL or missing references)
//IL_07b5: Expected O, but got Unknown
//IL_084f: Unknown result type (might be due to invalid IL or missing references)
//IL_085b: Expected O, but got Unknown
//IL_0327: Unknown result type (might be due to invalid IL or missing references)
//IL_0332: Unknown result type (might be due to invalid IL or missing references)
//IL_0337: Unknown result type (might be due to invalid IL or missing references)
//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02e2: 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_0259: Unknown result type (might be due to invalid IL or missing references)
//IL_027f: Unknown result type (might be due to invalid IL or missing references)
//IL_037b: Unknown result type (might be due to invalid IL or missing references)
//IL_0386: Unknown result type (might be due to invalid IL or missing references)
//IL_038b: Unknown result type (might be due to invalid IL or missing references)
//IL_0609: Unknown result type (might be due to invalid IL or missing references)
//IL_060e: Unknown result type (might be due to invalid IL or missing references)
//IL_02b3: Unknown result type (might be due to invalid IL or missing references)
//IL_05cc: Unknown result type (might be due to invalid IL or missing references)
//IL_05d7: Unknown result type (might be due to invalid IL or missing references)
//IL_05dc: Unknown result type (might be due to invalid IL or missing references)
//IL_061e: Unknown result type (might be due to invalid IL or missing references)
//IL_0624: Invalid comparison between Unknown and I4
//IL_0404: Unknown result type (might be due to invalid IL or missing references)
//IL_040f: Unknown result type (might be due to invalid IL or missing references)
//IL_0414: Unknown result type (might be due to invalid IL or missing references)
//IL_0465: Unknown result type (might be due to invalid IL or missing references)
//IL_0470: Unknown result type (might be due to invalid IL or missing references)
//IL_0475: Unknown result type (might be due to invalid IL or missing references)
//IL_0672: Unknown result type (might be due to invalid IL or missing references)
//IL_0677: Unknown result type (might be due to invalid IL or missing references)
//IL_063b: Unknown result type (might be due to invalid IL or missing references)
//IL_0645: Unknown result type (might be due to invalid IL or missing references)
//IL_064a: Unknown result type (might be due to invalid IL or missing references)
//IL_064f: Unknown result type (might be due to invalid IL or missing references)
//IL_0654: Unknown result type (might be due to invalid IL or missing references)
//IL_04b3: Unknown result type (might be due to invalid IL or missing references)
//IL_04be: Unknown result type (might be due to invalid IL or missing references)
//IL_04c3: Unknown result type (might be due to invalid IL or missing references)
//IL_0689: Unknown result type (might be due to invalid IL or missing references)
//IL_068b: Unknown result type (might be due to invalid IL or missing references)
//IL_06dc: Unknown result type (might be due to invalid IL or missing references)
//IL_06ec: Unknown result type (might be due to invalid IL or missing references)
//IL_0705: Unknown result type (might be due to invalid IL or missing references)
//IL_0721: Unknown result type (might be due to invalid IL or missing references)
//IL_0731: Unknown result type (might be due to invalid IL or missing references)
//IL_074a: Unknown result type (might be due to invalid IL or missing references)
//IL_0762: Unknown result type (might be due to invalid IL or missing references)
//IL_076e: Unknown result type (might be due to invalid IL or missing references)
//IL_0778: Unknown result type (might be due to invalid IL or missing references)
//IL_0791: Unknown result type (might be due to invalid IL or missing references)
//IL_0589: Unknown result type (might be due to invalid IL or missing references)
//IL_0594: Unknown result type (might be due to invalid IL or missing references)
//IL_0599: Unknown result type (might be due to invalid IL or missing references)
//IL_050b: Unknown result type (might be due to invalid IL or missing references)
//IL_0510: Unknown result type (might be due to invalid IL or missing references)
//IL_0536: Unknown result type (might be due to invalid IL or missing references)
//IL_056a: Unknown result type (might be due to invalid IL or missing references)
ForceConnect forceConnect = null;
forceConnect = ((!((Object)(object)__instance.m_plug != (Object)null)) ? ((Component)__instance.m_gate).gameObject.GetComponent<ForceConnect>() : ((Component)__instance.m_plug).gameObject.GetComponent<ForceConnect>());
if ((Object)(object)forceConnect == (Object)null)
{
return true;
}
try
{
if (((LG_ZoneExpander)__instance.m_gate).m_wasProcessed)
{
__result = true;
return false;
}
((LG_ZoneExpander)__instance.m_gate).m_wasProcessed = true;
if ((Object)(object)__instance.m_plug != (Object)null)
{
((LG_ZoneExpander)__instance.m_gate).m_linksFrom = ((LG_ZoneExpander)__instance.m_plug).m_linksFrom;
((LG_ZoneExpander)__instance.m_gate).ExpanderStatus = ((LG_ZoneExpander)__instance.m_plug).ExpanderStatus;
if (((LG_ZoneExpander)__instance.m_plug).CoursePortal != null)
{
((LG_ZoneExpander)__instance.m_gate).CoursePortal = ((LG_ZoneExpander)__instance.m_plug).CoursePortal;
((LG_ZoneExpander)__instance.m_gate).CoursePortal.Gate = __instance.m_gate;
__instance.m_gate.m_needsBorderLinks = true;
((LG_ZoneExpander)__instance.m_gate).m_linksTo = ((LG_ZoneExpander)__instance.m_plug).m_linksTo;
}
}
else if (((LG_ZoneExpander)__instance.m_gate).CoursePortal != null)
{
((LG_ZoneExpander)__instance.m_gate).CoursePortal.Gate = __instance.m_gate;
}
if ((int)((LG_ZoneExpander)__instance.m_gate).ExpanderStatus == 2)
{
__instance.SetupCappedGate();
}
else
{
__instance.CalcOpenAtStart();
LG_GateType type = __instance.m_gate.Type;
LG_GateType val = type;
switch ((int)val)
{
case 0:
case 1:
case 2:
__instance.CalcOpenAtStart();
if (__instance.m_gate.m_isTraversableFromStart && __instance.m_gate.HasGateWallRemover && Builder.BuildSeedRandom.Value("LG_BuildGateJob") < RundownManager.ActiveExpeditionBalanceData.WeakDoorOpenChanceForWallRemoverUsed)
{
__instance.m_gate.EnableGateWallRemover(RandomExtensions.NextSubSeed(__instance.m_rnd.Random));
}
else
{
GameObject val2 = null;
XXHashSeed seed;
if (__instance.m_gate.ForceBulkheadGate)
{
if (forceConnect.Cfg.Setting.SecurityGateToEnter == GateType.Bulkhead_Main)
{
seed = __instance.m_rnd.Seed;
uint num = ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random));
val2 = Builder.ComplexResourceSetBlock.GetMainPathBulkheadGate(__instance.m_gate.Type, num, (SubComplex)5);
if ((Object)(object)val2 == (Object)null)
{
EOSLogger.Error("Could not get main path bulkhead door prefab: defaulting back to a normal bulkhead door! (You're Complex Resource Set probably don't have the main path bulkhead door references set).");
val2 = Builder.ComplexResourceSetBlock.GetBulkheadGate(__instance.m_gate.Type, num, (SubComplex)5);
}
}
else
{
ComplexResourceSetDataBlock complexResourceSetBlock = Builder.ComplexResourceSetBlock;
LG_GateType type2 = __instance.m_gate.Type;
seed = __instance.m_rnd.Seed;
val2 = complexResourceSetBlock.GetBulkheadGate(type2, ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random)), (SubComplex)5);
}
}
else if (__instance.m_gate.ForceApexGate)
{
ComplexResourceSetDataBlock complexResourceSetBlock2 = Builder.ComplexResourceSetBlock;
LG_GateType type3 = __instance.m_gate.Type;
seed = __instance.m_rnd.Seed;
val2 = complexResourceSetBlock2.GetApexGate(type3, ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random)), (SubComplex)5);
}
else if (__instance.m_gate.ForceSecurityGate)
{
ComplexResourceSetDataBlock complexResourceSetBlock3 = Builder.ComplexResourceSetBlock;
LG_GateType type4 = __instance.m_gate.Type;
seed = __instance.m_rnd.Seed;
val2 = complexResourceSetBlock3.GetSecurityGate(type4, ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random)), (SubComplex)5);
}
else if (((LG_ZoneExpander)__instance.m_gate).m_isZoneSource)
{
__instance.m_gate.IsCheckpointDoor = forceConnect.Cfg.Setting.IsCheckpointDoor;
LG_Layer val3 = default(LG_Layer);
LG_Layer val4 = default(LG_Layer);
if (((LG_ZoneExpander)__instance.m_gate).IsLayerSource(ref val3, ref val4))
{
ComplexResourceSetDataBlock complexResourceSetBlock4 = Builder.ComplexResourceSetBlock;
LG_GateType type5 = __instance.m_gate.Type;
seed = __instance.m_rnd.Seed;
val2 = complexResourceSetBlock4.GetBulkheadGate(type5, ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random)), (SubComplex)5);
}
else
{
switch (forceConnect.Cfg.Setting.SecurityGateToEnter)
{
case GateType.Apex:
{
ComplexResourceSetDataBlock complexResourceSetBlock7 = Builder.ComplexResourceSetBlock;
LG_GateType type8 = __instance.m_gate.Type;
seed = __instance.m_rnd.Seed;
val2 = complexResourceSetBlock7.GetApexGate(type8, ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random)), (SubComplex)5);
break;
}
case GateType.Security:
{
ComplexResourceSetDataBlock complexResourceSetBlock6 = Builder.ComplexResourceSetBlock;
LG_GateType type7 = __instance.m_gate.Type;
seed = __instance.m_rnd.Seed;
val2 = complexResourceSetBlock6.GetSecurityGate(type7, ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random)), (SubComplex)5);
break;
}
default:
if (forceConnect.Cfg.Setting.SecurityGateToEnter == GateType.Bulkhead_Main)
{
seed = __instance.m_rnd.Seed;
uint num2 = ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random));
val2 = Builder.ComplexResourceSetBlock.GetMainPathBulkheadGate(__instance.m_gate.Type, num2, (SubComplex)5);
if ((Object)(object)val2 == (Object)null)
{
EOSLogger.Error("Could not get main path bulkhead door prefab: defaulting back to a normal bulkhead door! (You're Complex Resource Set probably don't have the main path bulkhead door references set).");
val2 = Builder.ComplexResourceSetBlock.GetBulkheadGate(__instance.m_gate.Type, num2, (SubComplex)5);
}
}
else
{
ComplexResourceSetDataBlock complexResourceSetBlock5 = Builder.ComplexResourceSetBlock;
LG_GateType type6 = __instance.m_gate.Type;
seed = __instance.m_rnd.Seed;
val2 = complexResourceSetBlock5.GetBulkheadGate(type6, ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random)), (SubComplex)5);
}
break;
}
}
}
else
{
ComplexResourceSetDataBlock complexResourceSetBlock8 = Builder.ComplexResourceSetBlock;
LG_GateType type9 = __instance.m_gate.Type;
seed = __instance.m_rnd.Seed;
val2 = complexResourceSetBlock8.GetWeakGate(type9, ((XXHashSeed)(ref seed)).SubSeed(RandomExtensions.NextSubSeed(__instance.m_rnd.Random)), (SubComplex)5);
}
Vector3 position = ((Component)__instance.m_gate).transform.position;
Quaternion val5;
if (__instance.m_plugWasFlipped || (int)((LG_ZoneExpander)__instance.m_gate).ExpanderRotation == 3)
{
val5 = Quaternion.LookRotation(((Component)__instance.m_gate).transform.forward * -1f, Vector3.up);
__instance.m_gate.m_hasBeenFlipped = true;
}
else
{
val5 = ((Component)__instance.m_gate).transform.rotation;
__instance.m_gate.m_hasBeenFlipped = false;
}
GameObject val6 = Object.Instantiate<GameObject>(val2, position, val5, ((Component)__instance.m_gate).transform);
__instance.m_gate.SpawnedDoor = SetupDoor(__instance, val6, forceConnect);
__instance.SetupSpawners(val6);
__instance.ProcessDivider(val6, __instance.m_gate.m_hasBeenFlipped);
Debug.DrawLine(((Component)__instance.m_gate).transform.position, ((LG_ZoneExpander)__instance.m_gate).m_linksFrom.Position, new Color(0f, 0.5f, 1f, 1f), 10000f, false);
Debug.DrawLine(((Component)__instance.m_gate).transform.position, ((LG_ZoneExpander)__instance.m_gate).m_linksTo.Position, new Color(0f, 1f, 0.5f, 0.25f), 10000f, false);
Debug.DrawRay(val6.transform.position, val6.transform.forward * 10f, new Color(0f, 1f, 0f, 1f), 10000f, false);
}
LG_Factory.InjectJob((LG_FactoryJob)new LG_LinkAIGateJob(__instance.m_gate), (BatchName)29);
break;
case 3:
Debug.LogError(Object.op_Implicit("ERROR : Do we need to use this anymore?"));
break;
case 5:
{
__instance.m_gate.m_isTraversableFromStart = true;
((LG_ZoneExpander)__instance.m_gate).m_wasProcessed = true;
LG_Gate gate = __instance.m_gate;
((Object)gate).name = ((Object)gate).name + " freePassage!";
if (__instance.m_plugWasFlipped || (int)((LG_ZoneExpander)__instance.m_gate).ExpanderRotation == 3)
{
__instance.m_gate.m_hasBeenFlipped = true;
}
else
{
__instance.m_gate.m_hasBeenFlipped = false;
}
LG_Factory.InjectJob((LG_FactoryJob)new LG_LinkAIGateJob(__instance.m_gate), (BatchName)29);
break;
}
}
}
__result = true;
return false;
}
catch (Exception value)
{
EOSLogger.Error($"Exception occurred when building Gate: {value}");
EOSLogger.Error("Falling back to vanilla");
((LG_ZoneExpander)__instance.m_gate).m_wasProcessed = false;
return true;
}
}
private static iLG_Door_Core SetupDoor(LG_BuildGateJob __instance, GameObject doorGO, ForceConnect fc)
{
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Expected O, but got Unknown
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Expected O, but got Unknown
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Expected O, but got Unknown
iLG_Door_Core val = __instance.SetupDoor(doorGO);
if (__instance.m_gate.ForceSecurityGate || __instance.m_gate.ForceApexGate || ((LG_ZoneExpander)__instance.m_gate).m_isZoneSource)
{
LG_SecurityDoor val2 = ((Il2CppObjectBase)val).Cast<LG_SecurityDoor>();
if (((LG_ZoneExpander)__instance.m_gate).m_linksTo.m_zone.m_settings.m_zoneData.ChainedPuzzleToEnter == 0)
{
uint chainedPuzzleToEnter = fc.Cfg.Setting.ChainedPuzzleToEnter;
if (chainedPuzzleToEnter != 0)
{
LG_Factory.InjectJob((LG_FactoryJob)new LG_BuildChainedPuzzleDoorLockJob(val2, chainedPuzzleToEnter), (BatchName)43);
}
else
{
LG_Factory.InjectJob((LG_FactoryJob)new LG_SimpleDoorLockJob(val2), (BatchName)43);
}
}
if (fc.Cfg.Setting.IsCheckpointDoor)
{
LG_Factory.InjectJob((LG_FactoryJob)new LG_CheckpointScannerJob(val2), (BatchName)43);
}
if (fc.Cfg.Setting.ActiveEnemyWave.HasActiveEnemyWave)
{
val2.SetupActiveEnemyWaveData(fc.Cfg.Setting.ActiveEnemyWave);
}
}
return val;
}
}
}
namespace EOSExt.ExtraDoor.Patches.SetupDoor
{
[HarmonyPatch]
internal static class ChainedPuzzles
{
[HarmonyPrefix]
[HarmonyWrapSafe]
[HarmonyPatch(typeof(LG_BuildChainedPuzzleDoorLockJob), "Build")]
private static bool Pre_(LG_BuildChainedPuzzleDoorLockJob __instance, ref bool __result)
{
try
{
LG_SecurityDoor door = ((LG_BuildSecurityDoorLockJob)__instance).m_door;
ForceConnect fC = ((LG_BuildSecurityDoorLockJob)__instance).m_door.GetFC();
if ((Object)(object)fC == (Object)null)
{
return true;
}
((LG_BuildSecurityDoorLockJob)__instance).CheckFlip();
((Object)door).name = ((Object)door).name + "_ChainedPuzzleLock";
uint chainedPuzzleToEnter = fC.Cfg.Setting.ChainedPuzzleToEnter;
if (chainedPuzzleToEnter != 0)
{
door.SetupChainedPuzzleLock(chainedPuzzleToEnter);
}
__result = true;
return false;
}
catch (Exception value)
{
EOSLogger.Error($"Exception occurred when building ChainedPuzzleDoorLock: {value}");
EOSLogger.Error("Falling back to vanilla");
return true;
}
}
[HarmonyPrefix]
[HarmonyWrapSafe]
[HarmonyPatch(typeof(LG_SecurityDoor), "SetupChainedPuzzleLock")]
private static bool Pre_SetupCPLock(LG_SecurityDoor __instance, uint puzzleDataId)
{
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: 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_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
ForceConnect fC = __instance.GetFC();
if ((Object)(object)fC == (Object)null)
{
return true;
}
ChainedPuzzleDataBlock block = GameDataBlockBase<ChainedPuzzleDataBlock>.GetBlock(puzzleDataId);
Vector3 val = default(Vector3);
if (__instance.GetChainedPuzzleStartPosition(ref val))
{
ChainedPuzzleInstance val2 = ChainedPuzzleManager.CreatePuzzleInstance(block, ((LG_ZoneExpander)__instance.Gate).m_linksFrom, ((LG_ZoneExpander)__instance.Gate).m_linksTo, val, ((Component)__instance).transform, false);
eDoorStatus status = __instance.m_locks.SetupForChainedPuzzle(val2);
__instance.m_sync.SetStateUnsynced(new pDoorState
{
status = status,
damageTaken = 0f
});
if (block.ChainedPuzzle.Count == 0)
{
__instance.SetupInstantOpeningDoor();
}
if (block.TriggerAlarmOnActivate)
{
__instance.m_graphics.OnDoorState(new pDoorState
{
status = (eDoorStatus)4
}, false);
__instance.m_mapLookatRevealer.SetLocalGUIObjStatus((eCM_GuiObjectStatus)9);
return false;
}
__instance.m_graphics.OnDoorState(new pDoorState
{
status = (eDoorStatus)5
}, false);
}
return false;
}
}
}
namespace EOSExt.ExtraDoor.Patches.DisableAlarmShutdownOnTerminal
{
[HarmonyPatch]
internal static class BuildJob_AlarmShutdownOnTerminalJob
{
[HarmonyPrefix]
[HarmonyPatch(typeof(LG_AlarmShutdownOnTerminalJob), "Build")]
private static bool Pre_(LG_AlarmShutdownOnTerminalJob __instance)
{
return (Object)(object)__instance.m_securityDoor.GetFC() == (Object)null;
}
}
[HarmonyPatch]
internal static class DoorLock_OnDoorState
{
[HarmonyPrefix]
[HarmonyWrapSafe]
[HarmonyPatch(typeof(LG_SecurityDoor_Locks), "OnDoorState")]
private static bool Pre_(LG_SecurityDoor_Locks __instance, pDoorState state)
{
//IL_000f: 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: Invalid comparison between Unknown and I4
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)__instance.m_door == (Object)null || (int)state.status != 4)
{
return true;
}
ForceConnect fC = __instance.m_door.GetFC();
if ((Object)(object)fC == (Object)null)
{
return true;
}
((Interact_Base)__instance.m_intUseKeyItem).SetActive(false);
((Interact_Base)__instance.m_intHack).SetActive(false);
((Interact_Base)__instance.m_intOpenDoor).SetActive(true);
__instance.m_intOpenDoor.InteractionMessage = Text.Format(840u, (Object[])(object)new Object[1] { Object.op_Implicit(__instance.ChainedPuzzleToSolve.Data.PublicAlarmName) });
((Interact_Base)__instance.m_intCustomMessage).SetActive(false);
__instance.m_lastStatus = state.status;
return false;
}
}
}
namespace EOSExt.ExtraDoor.Config
{
public class Door
{
public LG_LayerType Layer { get; set; }
public eLocalZoneIndex LocalIndex { get; set; }
public int AreaIndex { get; set; } = 0;
}
public class DoorSetting
{
public GateType SecurityGateToEnter { get; set; }
public List<LevelEventData> EventsOnEnter { get; set; } = new List<LevelEventData>();
public List<WardenObjectiveEventData> EventsOnApproachDoor { get; set; } = new List<WardenObjectiveEventData>();
public List<WardenObjectiveEventData> EventsOnUnlockDoor { get; set; } = new List<WardenObjectiveEventData>();
public List<WardenObjectiveEventData> EventsOnOpenDoor { get; set; } = new List<WardenObjectiveEventData>();
public List<WardenObjectiveEventData> EventsOnDoorScanStart { get; set; } = new List<WardenObjectiveEventData>();
public List<WardenObjectiveEventData> EventsOnDoorScanDone { get; set; } = new List<WardenObjectiveEventData>();
public FCProgressionPuzzleToEnter ProgressionPuzzleToEnter { get; set; } = new FCProgressionPuzzleToEnter();
public uint ChainedPuzzleToEnter { get; set; }
public bool IsCheckpointDoor { get; set; } = false;
public bool PlayScannerVoiceAudio { get; set; } = true;
public ActiveEnemyWaveData ActiveEnemyWave { get; set; } = new ActiveEnemyWaveData();
}
public class FCZonePlacementData : GlobalZoneIndex
{
public ZonePlacementWeights Weights { get; set; } = new ZonePlacementWeights();
}
public class FCProgressionPuzzleToEnter
{
public eProgressionPuzzleType PuzzleType { get; set; }
public LocalizedText CustomText { get; set; } = null;
public int PlacementCount { get; set; } = 1;
public List<FCZonePlacementData> ZonePlacementData { get; set; } = new List<FCZonePlacementData>
{
new FCZonePlacementData()
};
}
public enum GateType
{
Security,
Apex,
Bulkhead,
Bulkhead_Main
}
public class ForceConnectCfg
{
public string WorldEventObjectFilter { get; set; } = string.Empty;
public eDimensionIndex DimensionIndex { get; set; }
public Door From { get; set; } = new Door();
public int FromDoorIndex { get; set; } = 0;
public Door To { get; set; } = new Door();
public DoorSetting Setting { get; set; } = new DoorSetting();
}
}