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.Versioning;
using System.Security;
using System.Security.Permissions;
using AIGraph;
using Agents;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using CellMenu;
using GTFO.API;
using GTFO.API.Utilities;
using GTFODoorMod.CustomWorldEvents;
using GTFODoorMod.Temperature;
using GameData;
using HarmonyLib;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem.Collections.Generic;
using LevelGeneration;
using Microsoft.CodeAnalysis;
using ModifierAPI;
using Player;
using SNetwork;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("GTFODoorMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("Giginss's first plugin, designed to modify door controls")]
[assembly: AssemblyFileVersion("0.0.1.0")]
[assembly: AssemblyInformationalVersion("0.0.1+ca5b1ddcc1b95e777b8d1ad8b2ba1642c13d9564")]
[assembly: AssemblyProduct("GTFODoorMod")]
[assembly: AssemblyTitle("GTFODoorMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[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 GTFODoorMod
{
public class AllowNegativeInfectionFogPatch
{
private static ManualLogSource logger;
public AllowNegativeInfectionFogPatch(Harmony harmony, ManualLogSource loggerParent)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Expected O, but got Unknown
logger = loggerParent;
MethodInfo method = typeof(LocalPlayerAgentSettings).GetMethod("UpdateBlendTowardsTargetFogSetting");
harmony.Patch((MethodBase)method, (HarmonyMethod)null, new HarmonyMethod(typeof(AllowNegativeInfectionFogPatch), "AllowBlendNegativeInfectionPlane", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
harmony.Patch((MethodBase)typeof(LocalPlayerAgentSettings).GetMethod("SetFogSettings"), (HarmonyMethod)null, new HarmonyMethod(typeof(AllowNegativeInfectionFogPatch), "AllowSetNegativeInfectionPlane", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
logger.LogInfo((object)"Patched infection plane functions!");
}
private static void AllowSetNegativeInfectionPlane(LocalPlayerAgentSettings __instance, ref FogSettingsDataBlock fogSettings)
{
if (fogSettings != null && (double)fogSettings.Infection < 0.0)
{
logger.LogInfo((object)"Set infection plane to one that has negative infection.");
((EffectVolume)LocalPlayerAgentSettings.Current.infectionPlane).invert = (double)fogSettings.DensityHeightMaxBoost > (double)fogSettings.FogDensity;
((EffectVolume)LocalPlayerAgentSettings.Current.infectionPlane).contents = (eEffectVolumeContents)2;
((EffectVolume)LocalPlayerAgentSettings.Current.infectionPlane).modification = (eEffectVolumeModification)0;
((EffectVolume)LocalPlayerAgentSettings.Current.infectionPlane).modificationScale = fogSettings.Infection;
LocalPlayerAgentSettings.Current.infectionPlane.lowestAltitude = fogSettings.DensityHeightAltitude;
LocalPlayerAgentSettings.Current.infectionPlane.highestAltitude = fogSettings.DensityHeightAltitude + fogSettings.DensityHeightRange;
EffectVolumeManager.RegisterVolume((EffectVolume)(object)LocalPlayerAgentSettings.Current.infectionPlane);
LocalPlayerAgentSettings.Current.isInfectionPlaneRegistered = true;
}
}
private static void AllowBlendNegativeInfectionPlane(LocalPlayerAgentSettings __instance, float amount)
{
float currentInfection = LocalPlayerAgentSettings.Current.currentInfection;
if ((double)currentInfection < 0.0 && !LocalPlayerAgentSettings.Current.isInfectionPlaneRegistered)
{
EffectVolumeManager.RegisterVolume((EffectVolume)(object)LocalPlayerAgentSettings.Current.infectionPlane);
LocalPlayerAgentSettings.Current.isInfectionPlaneRegistered = true;
}
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.giginss.rundownmod", "Giginss's Rundown Mod", "1.0.0")]
public class DoorPlugin : BasePlugin
{
private ConfigEntry<bool> lurkerNerf;
private ConfigEntry<bool> psychoBuff;
private ConfigEntry<bool> rajNerf;
public override void Load()
{
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Expected O, but got Unknown
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Expected O, but got Unknown
//IL_01be: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Expected O, but got Unknown
//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
//IL_02bc: Expected O, but got Unknown
//IL_0221: Unknown result type (might be due to invalid IL or missing references)
//IL_0228: Expected O, but got Unknown
((BasePlugin)this).Log.LogInfo((object)"Plugin Giginss's Rundown Mod is loading!");
((BasePlugin)this).Log.LogInfo((object)"Hello Complex!");
lurkerNerf = ((BasePlugin)this).Config.Bind<bool>("Easter Egg", "LurkerNerf", true, "Easter Egg to prevent anyone named Lurker from picking a hammer");
psychoBuff = ((BasePlugin)this).Config.Bind<bool>("Easter Egg", "PsychoBuff", true, "Easter Egg to allow anyone named PsychoMadEye to gain enough ammo on D3.");
rajNerf = ((BasePlugin)this).Config.Bind<bool>("Easter Egg", "RajNerf", true, "Easter Egg to prevent anyone named Raj from picking a spear");
Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("GTFODoorMod.resources.red-x.png");
Texture2D val = new Texture2D(2, 2);
if (manifestResourceStream != null)
{
byte[] array = new byte[32768];
using MemoryStream memoryStream = new MemoryStream();
int count;
while ((count = manifestResourceStream.Read(array, 0, array.Length)) > 0)
{
memoryStream.Write(array, 0, count);
}
byte[] array2 = memoryStream.ToArray();
ImageConversion.LoadImage(val, Il2CppStructArray<byte>.op_Implicit(array2));
}
Harmony val2 = new Harmony("com.giginss.rundownmod");
WorldEventsPatcher worldEventsPatcher = new WorldEventsPatcher(val2, val);
DoorPatcher doorPatcher = new DoorPatcher(val2);
PabloHeavyHitreactPatch pabloHeavyHitreactPatch = new PabloHeavyHitreactPatch(val2, ((BasePlugin)this).Log);
AllowNegativeInfectionFogPatch allowNegativeInfectionFogPatch = new AllowNegativeInfectionFogPatch(val2, ((BasePlugin)this).Log);
FixWardenObjectiveManager fixWardenObjectiveManager = new FixWardenObjectiveManager(val2, ((BasePlugin)this).Log);
OnlyBreakLocksPatch onlyBreakLocksPatch = new OnlyBreakLocksPatch(val2, ((BasePlugin)this).Log);
FixProgressionPuzzleNotUsingDimensionIndexPatch fixProgressionPuzzleNotUsingDimensionIndexPatch = new FixProgressionPuzzleNotUsingDimensionIndexPatch(val2, ((BasePlugin)this).Log);
FixBaseGameBugs fixBaseGameBugs = new FixBaseGameBugs(val2, ((BasePlugin)this).Log);
if (psychoBuff.Value)
{
InfiniteAmmoEasterEgg infiniteAmmoEasterEgg = new InfiniteAmmoEasterEgg(val2, ((BasePlugin)this).Log);
}
bool flag = default(bool);
if (lurkerNerf.Value)
{
ManualLogSource log = ((BasePlugin)this).Log;
BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(22, 0, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Lurker Nerf is enabled");
}
log.LogInfo(val3);
EventAPI.OnManagersSetup += CheckAndDisableHammers;
}
if (rajNerf.Value)
{
ManualLogSource log2 = ((BasePlugin)this).Log;
BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(19, 0, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Raj Nerf is enabled");
}
log2.LogInfo(val3);
EventAPI.OnManagersSetup += CheckAndDisableSpears;
}
MethodInfo method = typeof(SNet_Replication).GetMethod("AllocateKey", new Type[2]
{
typeof(SNet_ReplicatorType),
typeof(ushort)
});
val2.Patch((MethodBase)method, new HarmonyMethod(typeof(ReplicationPatch), "Prefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
ClassInjector.RegisterTypeInIl2Cpp<TemperatureUpdater>();
((BasePlugin)this).Log.LogInfo((object)"Giginss' Rundown Mod finished Loading");
}
private static void CheckAndDisableHammers()
{
if (SteamManager.LocalPlayerName.Equals("Lurker", StringComparison.OrdinalIgnoreCase))
{
((GameDataBlockBase<PlayerOfflineGearDataBlock>)(object)GameDataBlockBase<PlayerOfflineGearDataBlock>.GetBlock(9u)).internalEnabled = false;
((GameDataBlockBase<PlayerOfflineGearDataBlock>)(object)GameDataBlockBase<PlayerOfflineGearDataBlock>.GetBlock(26u)).internalEnabled = false;
((GameDataBlockBase<PlayerOfflineGearDataBlock>)(object)GameDataBlockBase<PlayerOfflineGearDataBlock>.GetBlock(27u)).internalEnabled = false;
((GameDataBlockBase<PlayerOfflineGearDataBlock>)(object)GameDataBlockBase<PlayerOfflineGearDataBlock>.GetBlock(28u)).internalEnabled = false;
((GameDataBlockBase<PlayerOfflineGearDataBlock>)(object)GameDataBlockBase<PlayerOfflineGearDataBlock>.GetBlock(57u)).internalEnabled = false;
}
}
private static void CheckAndDisableSpears()
{
if (SteamManager.LocalPlayerName.Equals("RAJ", StringComparison.OrdinalIgnoreCase))
{
((GameDataBlockBase<PlayerOfflineGearDataBlock>)(object)GameDataBlockBase<PlayerOfflineGearDataBlock>.GetBlock(54u)).internalEnabled = false;
((GameDataBlockBase<PlayerOfflineGearDataBlock>)(object)GameDataBlockBase<PlayerOfflineGearDataBlock>.GetBlock(70u)).internalEnabled = false;
}
}
}
public class FixBaseGameBugs
{
private static ManualLogSource logger;
public FixBaseGameBugs(Harmony harmony, ManualLogSource loggerParent)
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Expected O, but got Unknown
logger = loggerParent;
MethodInfo method = typeof(LocalPlayerAgentSettings).GetMethod("UpdateBlendTowardsTargetFogSetting");
harmony.Patch((MethodBase)method, (HarmonyMethod)null, new HarmonyMethod(typeof(FixBaseGameBugs), "FixInfectionPlanesInDimensions", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
harmony.Patch((MethodBase)typeof(LG_LightCollection).GetMethod("ResetUpdateValues"), new HarmonyMethod(typeof(FixBaseGameBugs), "FixEmptyLightCollection", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
logger.LogInfo((object)"Patched blend method for dimensions and for empty light collection!");
}
private static void FixInfectionPlanesInDimensions(LocalPlayerAgentSettings __instance, float amount)
{
PlayerAgent localPlayerAgent = PlayerManager.GetLocalPlayerAgent();
if ((Object)(object)localPlayerAgent != (Object)null)
{
Dimension dimension = ((Agent)localPlayerAgent).Dimension;
if (dimension != null && !dimension.IsMainDimension)
{
float groundY = dimension.GroundY;
EV_Plane infectionPlane = LocalPlayerAgentSettings.Current.infectionPlane;
infectionPlane.highestAltitude -= groundY;
EV_Plane infectionPlane2 = LocalPlayerAgentSettings.Current.infectionPlane;
infectionPlane2.lowestAltitude -= groundY;
}
}
}
private static bool FixEmptyLightCollection(LG_LightCollection __instance, bool toStart)
{
if (__instance.collectedLights.Count == 0 && !toStart)
{
logger.LogWarning((object)"Light collection has an empty light array! Skipping Reset...");
return false;
}
return true;
}
}
public class FixProgressionPuzzleNotUsingDimensionIndexPatch
{
private static ManualLogSource logger;
private static LG_Layer lgLayer;
public FixProgressionPuzzleNotUsingDimensionIndexPatch(Harmony harmony, ManualLogSource loggerParent)
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
//IL_0055: Expected O, but got Unknown
logger = loggerParent;
harmony.Patch((MethodBase)typeof(LG_Distribute_ProgressionPuzzles).GetMethod("CreateKeyItemDistribution"), new HarmonyMethod(typeof(FixProgressionPuzzleNotUsingDimensionIndexPatch), "OverrideLayerIfNeededPrefix", (Type[])null), new HarmonyMethod(typeof(FixProgressionPuzzleNotUsingDimensionIndexPatch), "ResetProgressionPuzzleMainLayer", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
logger.LogInfo((object)"Patched progression puzzle distribution function!");
}
private static bool OverrideLayerIfNeededPrefix(LG_Distribute_ProgressionPuzzles __instance, GateKeyItem keyItem, ZonePlacementData placementData)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Expected O, but got Unknown
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Invalid comparison between I4 and Unknown
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Expected O, but got Unknown
//IL_019e: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Expected O, but got Unknown
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Expected O, but got Unknown
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01b6: 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_0155: Unknown result type (might be due to invalid IL or missing references)
if (__instance.m_layer.m_dimension.DimensionIndex != placementData.DimensionIndex)
{
ManualLogSource val = logger;
bool flag = default(bool);
BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(101, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Found dimension mismatch between layer dimension and placement data dimension for Keycard ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(keyItem.m_keyName);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(", fixing...");
}
val.LogInfo(val2);
Dimension val3 = default(Dimension);
Dimension.GetDimension(placementData.DimensionIndex, ref val3);
if (val3 == null)
{
ManualLogSource val4 = logger;
BepInExErrorLogInterpolatedStringHandler val5 = new BepInExErrorLogInterpolatedStringHandler(33, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val5).AppendLiteral("Dimension ");
((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<eDimensionIndex>(placementData.DimensionIndex);
((BepInExLogInterpolatedStringHandler)val5).AppendLiteral(" not found! Aborting...");
}
val4.LogError(val5);
return true;
}
if (val3.MainLayer.m_zones._size <= (int)placementData.LocalIndex)
{
ManualLogSource val6 = logger;
val2 = new BepInExInfoLogInterpolatedStringHandler(101, 3, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Cannot place keycard in ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<eDimensionIndex>(val3.DimensionIndex);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("! Not enough zones, dimension has ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(val3.MainLayer.m_zones._size);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" zones and Placement Index is ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<eLocalZoneIndex>(placementData.LocalIndex);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(". Aborting...");
}
val6.LogInfo(val2);
return true;
}
lgLayer = __instance.m_layer;
__instance.m_layer = val3.MainLayer;
ManualLogSource val7 = logger;
val2 = new BepInExInfoLogInterpolatedStringHandler(27, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Replaced with ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<eDimensionIndex>(val3.DimensionIndex);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("'s MainLayer.");
}
val7.LogInfo(val2);
}
return true;
}
private static void ResetProgressionPuzzleMainLayer(LG_Distribute_ProgressionPuzzles __instance)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Expected O, but got Unknown
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
if (lgLayer != null)
{
ManualLogSource val = logger;
bool flag = default(bool);
BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(67, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Resetting LG_Layer in Distribute Progression Puzzles to Dimension ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<eDimensionIndex>(lgLayer.m_dimension.DimensionIndex);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(".");
}
val.LogInfo(val2);
__instance.m_layer = lgLayer;
lgLayer = null;
}
}
}
public class FixWardenObjectiveManager
{
private static ManualLogSource logger;
public FixWardenObjectiveManager(Harmony harmony, ManualLogSource loggerParent)
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
logger = loggerParent;
harmony.Patch((MethodBase)typeof(WardenObjectiveManager).GetMethod("OnLevelCleanup"), (HarmonyMethod)null, new HarmonyMethod(typeof(FixWardenObjectiveManager), "OnLevelCleanupPostfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
logger.LogInfo((object)"Patched Level Cleanup function!");
}
private static void OnLevelCleanupPostfix(WardenObjectiveManager __instance)
{
logger.LogInfo((object)"Resetting value of exitEventsTriggered.");
WardenObjectiveManager.m_exitEventsTriggered = false;
}
}
public class InfiniteAmmoEasterEgg
{
private static ManualLogSource logger;
public InfiniteAmmoEasterEgg(Harmony harmony, ManualLogSource loggerParent)
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
logger = loggerParent;
harmony.Patch((MethodBase)typeof(CommunicationMenu).GetMethod("BroadcastDialog"), (HarmonyMethod)null, new HarmonyMethod(typeof(InfiniteAmmoEasterEgg), "InfiniteAmmoPatch", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
logger.LogInfo((object)"Setup easter egg!");
}
private static void InfiniteAmmoPatch(PlayerAgent src, uint textUID, PlayerAgent dst)
{
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Expected O, but got Unknown
if (!GameStateManager.IsInExpedition || !RundownManager.ActiveExpedition.Descriptive.PublicName.Equals("Breach"))
{
return;
}
uint num = 1309u;
if (textUID != num || !SteamManager.LocalPlayerName.Equals("PsychoMadEye", StringComparison.OrdinalIgnoreCase) || !SNet.IsMaster)
{
return;
}
PlayerBackpack backpack = PlayerBackpackManager.GetBackpack(src.Owner);
if (backpack != null)
{
PlayerAmmoStorage ammoStorage = backpack.AmmoStorage;
ammoStorage.StandardAmmo.AddAmmo(ammoStorage.StandardAmmo.AmmoMaxCap);
ammoStorage.SpecialAmmo.AddAmmo(ammoStorage.SpecialAmmo.AmmoMaxCap);
ManualLogSource val = logger;
bool flag = default(bool);
BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(21, 0, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Gave easter egg ammo.");
}
val.LogInfo(val2);
}
}
}
public class OnlyBreakLocksPatch
{
public OnlyBreakLocksPatch(Harmony harmony, ManualLogSource loggerParent)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Expected O, but got Unknown
MethodInfo method = typeof(LG_WeakResourceContainer).GetMethod("SetupWeakLock");
harmony.Patch((MethodBase)method, new HarmonyMethod(typeof(OnlyBreakLocksPatch), "SetBreakLock", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo method2 = typeof(LG_ResourceContainerBuilder).GetMethod("SetupFunctionGO");
harmony.Patch((MethodBase)method2, new HarmonyMethod(typeof(OnlyBreakLocksPatch), "ForceAllLocks", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
loggerParent.LogInfo((object)"Patched weak lock setup function!");
}
[HarmonyPrefix]
[HarmonyPatch(typeof(LG_ResourceContainerBuilder), "SetupFunctionGO")]
private static bool ForceAllLocks(LG_ResourceContainerBuilder __instance, LG_LayerType layer, GameObject GO)
{
uint persistentID = ((GameDataBlockBase<ExpeditionBalanceDataBlock>)(object)RundownManager.ActiveExpeditionBalanceData).persistentID;
if (persistentID == 5)
{
__instance.m_locked = true;
}
return true;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(LG_WeakResourceContainer), "SetupWeakLock")]
private static bool SetBreakLock(LG_WeakResourceContainer __instance, ref eWeakLockType type)
{
uint persistentID = ((GameDataBlockBase<ExpeditionBalanceDataBlock>)(object)RundownManager.ActiveExpeditionBalanceData).persistentID;
if (persistentID == 5)
{
type = (eWeakLockType)1;
}
return true;
}
}
public class PabloHeavyHitreactPatch
{
private static ManualLogSource logger;
public PabloHeavyHitreactPatch(Harmony harmony, ManualLogSource loggerParent)
{
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
logger = loggerParent;
MethodInfo method = typeof(Dam_EnemyDamageBase).GetMethod("ProcessReceivedDamage");
harmony.Patch((MethodBase)method, new HarmonyMethod(typeof(PabloHeavyHitreactPatch), "HavePabloStagger", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
logger.LogInfo((object)"Patched damage received function!");
}
[HarmonyPrefix]
private static bool HavePabloStagger(Dam_EnemyDamageBase __instance, ref ES_HitreactType hitreact, ref bool tryForceHitreact, float damage, float staggerDamageMulti)
{
if (__instance.Owner.EnemyDataID == 47)
{
hitreact = (ES_HitreactType)4;
tryForceHitreact = true;
}
return true;
}
}
internal static class ReplicationPatch
{
public static bool OverrideSelfManaged => OverrideCount != 0;
public static uint OverrideCount { get; internal set; }
public static bool Prefix(SNet_ReplicatorType type, ushort key, ref ushort __result)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Invalid comparison between Unknown and I4
if (!OverrideSelfManaged)
{
return true;
}
if ((int)type != 2)
{
return true;
}
__result = (ushort)SNet_Replication.s_highestSlotUsed_SelfManaged;
SNet_Replication.s_highestSlotUsed_SelfManaged += 1;
return false;
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "GTFODoorMod";
public const string PLUGIN_NAME = "GTFODoorMod";
public const string PLUGIN_VERSION = "0.0.1";
}
}
namespace GTFODoorMod.Temperature
{
public class TemperatureManager
{
private GameObject temperatureTracker;
public static bool IsTemperatureActive = false;
private static readonly ManualLogSource Logger = new ManualLogSource("giginss.rundownmod.temperature");
private readonly string SYNC_TEMP = "SyncTemperature";
public TemperatureManager(Harmony harmony)
{
Logger.Sources.Add((ILogSource)(object)Logger);
Logger.LogInfo((object)"Initializing Temperature Manager");
LevelAPI.OnLevelCleanup += OnLevelCleanup;
RegisterNetworkEvents();
RegisterPatches(harmony);
Logger.LogInfo((object)"Temperature Manager initialized");
}
public void ActivateTemperature(float startingValue, float increaseRate)
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
if ((Object)(object)temperatureTracker == (Object)null)
{
temperatureTracker = new GameObject("TemperatureTracker");
temperatureTracker.AddComponent<TemperatureUpdater>();
temperatureTracker.GetComponent<TemperatureUpdater>().SetupCallbacks(UpdateTemperatureDisplay, SyncCurrentTemperature);
}
temperatureTracker.GetComponent<TemperatureUpdater>().StartTemperatureTicking(startingValue, increaseRate);
GuiManager.PlayerLayer.m_objectiveTimer.SetTimerActive(true, true);
((TMP_Text)GuiManager.PlayerLayer.m_objectiveTimer.m_titleText).SetText("Temperature Status", true);
IsTemperatureActive = true;
}
public void AddTemporaryCooling(float duration, float coolingRate)
{
if ((Object)(object)temperatureTracker != (Object)null)
{
temperatureTracker.GetComponent<TemperatureUpdater>().AddTemporaryCooling(duration, coolingRate);
}
}
public void DeactivateTemperature()
{
if ((Object)(object)temperatureTracker != (Object)null)
{
temperatureTracker.GetComponent<TemperatureUpdater>().StopTemperatureTicking();
GuiManager.PlayerLayer.m_objectiveTimer.SetTimerActive(false, true);
}
IsTemperatureActive = false;
}
public void OnLevelCleanup()
{
if ((Object)(object)temperatureTracker != (Object)null)
{
Object.Destroy((Object)(object)temperatureTracker);
temperatureTracker = null;
}
IsTemperatureActive = false;
}
private void UpdateTemperatureDisplay(float currentTemp, Color textColor, string status)
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
if (IsTemperatureActive)
{
((TMP_Text)GuiManager.PlayerLayer.m_objectiveTimer.m_timerText).SetText($"{currentTemp:0.00} °C, Condition: <color=#{ColorUtility.ToHtmlStringRGBA(textColor)}>{status}</color>", true);
}
}
private void SyncCurrentTemperature(float currentTemp)
{
if (SNet.IsMaster && IsTemperatureActive)
{
NetworkAPI.InvokeEvent<float>(SYNC_TEMP, currentTemp, (SNet_ChannelType)2);
}
}
public void SetTemperatureBounds(float lower, float upper)
{
if ((Object)(object)temperatureTracker != (Object)null)
{
temperatureTracker.GetComponent<TemperatureUpdater>().SetTemperatureBounds(lower, upper);
}
}
private void RegisterNetworkEvents()
{
NetworkAPI.RegisterEvent<float>(SYNC_TEMP, (Action<ulong, float>)SyncTemperature);
}
public void SyncTemperature(ulong id, float temperature)
{
if ((Object)(object)temperatureTracker != (Object)null)
{
temperatureTracker.GetComponent<TemperatureUpdater>().SetTemperatureFromSync(temperature);
}
}
private void RegisterPatches(Harmony harmony)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Expected O, but got Unknown
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Expected O, but got Unknown
MethodInfo method = typeof(PUI_LocalPlayerStatus).GetMethod("SetInfectionbar");
harmony.Patch((MethodBase)method, (HarmonyMethod)null, new HarmonyMethod(typeof(TemperaturePatches), "SetInfectionBarPostfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo method2 = typeof(PUI_LocalPlayerStatus).GetMethod("UpdateInfection");
harmony.Patch((MethodBase)method2, (HarmonyMethod)null, new HarmonyMethod(typeof(TemperaturePatches), "UpdateInfectionPostfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo method3 = typeof(CM_PageMap).GetMethod("UpdatePlayerInventory");
harmony.Patch((MethodBase)method3, (HarmonyMethod)null, new HarmonyMethod(typeof(TemperaturePatches), "UpdatePlayerInventoryPostfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
}
}
public class TemperaturePatches
{
private static readonly Color TempColorBarLow = new Color(1f, 0.8f, 0.32f);
private static readonly Color TempColorBarHigh = new Color(1f, 0.7f, 0f);
public static void SetInfectionBarPostfix(ref SpriteRenderer bar, float val)
{
//IL_0011: 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_001c: Unknown result type (might be due to invalid IL or missing references)
if (TemperatureManager.IsTemperatureActive)
{
bar.color = Color.Lerp(TempColorBarLow, TempColorBarHigh, val);
}
}
public static void UpdateInfectionPostfix(PUI_LocalPlayerStatus __instance, float infection, float infectionHealthRel)
{
//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_0080: Unknown result type (might be due to invalid IL or missing references)
if (TemperatureManager.IsTemperatureActive && ((Behaviour)__instance.m_infectionText).enabled)
{
((TMP_Text)__instance.m_infectionText).text = $"OVERHEAT : {(object)Mathf.Floor(infection * 100f)}%";
((Graphic)__instance.m_infectionText).color = Color.Lerp(TempColorBarLow, TempColorBarHigh, infection);
}
}
public static void UpdatePlayerInventoryPostfix(CM_PageMap __instance, ref SNet_Player player, int count)
{
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: 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_00bc: Unknown result type (might be due to invalid IL or missing references)
if (!TemperatureManager.IsTemperatureActive || !player.IsInSlot)
{
return;
}
int num = player.PlayerSlotIndex();
PlayerAgent val = default(PlayerAgent);
if (PlayerManager.TryGetPlayerAgent(ref num, ref val))
{
string text = " <color=orange>(" + (((Dam_SyncedDamageBase)val.Damage).GetHealthRel() * 100f).ToString("N0") + "%)</color>";
if (val.Damage.Infection > 0.1f)
{
text += $"<color=#{ColorUtility.ToHtmlStringRGBA(Color.Lerp(TempColorBarLow, TempColorBarHigh, val.Damage.Infection))}>({Mathf.Floor(val.Damage.Infection * 100f)}%)</color>";
}
((Il2CppArrayBase<PUI_Inventory>)(object)__instance.m_inventory)[num].SetHeader(player.NickName + text, player.PlayerColor);
}
}
}
public class TemperatureUpdater : MonoBehaviour
{
private float tempRate;
private float currentTemp;
private bool currentlyTicking;
private float coolingRate;
private float coolingDuration;
private readonly float TEMP_SYNC_TIMER = 10f;
private float currentSyncTimer;
private readonly float TEMP_INFECTION_RATE = 0.02f;
private readonly Color TEMP_OKAY_COLOR = new Color(0.5f, 0.5f, 0.5f);
private readonly float TEMP_WARN_THRESHOLD = 37f;
private readonly Color TEMP_WARN_THRESHOLD_COLOR = Color.yellow;
private readonly float TEMP_DAMAGE_THRESHOLD = 40f;
private readonly Color TEMP_DAMAGE_THRESHOLD_COLOR = Color.red;
private static float DEFAULT_MINIMUM_TEMPERATURE = 30f;
private float currentMinumumTemperature = DEFAULT_MINIMUM_TEMPERATURE;
private static float DEFAULT_MAXIMUM_TEMPERATURE = 50f;
private float currentMaximumTemperature = DEFAULT_MAXIMUM_TEMPERATURE;
private Action<float, Color, string> displayCallback;
private Action<float> syncCallback;
public void SetupCallbacks(Action<float, Color, string> displayCallback, Action<float> syncCallback)
{
this.displayCallback = displayCallback;
this.syncCallback = syncCallback;
}
public void StartTemperatureTicking(float startTemp, float tempRate)
{
currentTemp = startTemp;
this.tempRate = tempRate;
currentlyTicking = true;
}
public void StopTemperatureTicking()
{
currentlyTicking = false;
}
public void SetTemperatureFromSync(float temp)
{
currentTemp = temp;
}
public void SetTemperatureBounds(float lower, float upper)
{
currentMinumumTemperature = lower;
currentMaximumTemperature = upper;
}
public void AddTemporaryCooling(float duration, float rate)
{
coolingDuration = duration;
coolingRate = rate;
}
private void Update()
{
//IL_0118: 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_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0206: Unknown result type (might be due to invalid IL or missing references)
//IL_0218: Unknown result type (might be due to invalid IL or missing references)
//IL_0220: Unknown result type (might be due to invalid IL or missing references)
//IL_0225: Unknown result type (might be due to invalid IL or missing references)
//IL_023c: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
if (!currentlyTicking)
{
return;
}
float deltaTime = Time.deltaTime;
if (coolingDuration > 0f)
{
coolingDuration -= deltaTime;
currentTemp -= coolingRate * deltaTime;
if (coolingDuration <= 0f)
{
coolingDuration = 0f;
}
}
else
{
currentTemp += tempRate * deltaTime;
currentSyncTimer += deltaTime;
}
currentTemp = Mathf.Clamp(currentTemp, currentMinumumTemperature, currentMaximumTemperature);
if (currentSyncTimer >= TEMP_SYNC_TIMER)
{
currentSyncTimer = 0f;
syncCallback(currentTemp);
}
if (currentTemp >= TEMP_DAMAGE_THRESHOLD)
{
float amount = deltaTime * TEMP_INFECTION_RATE;
PlayerAgent localPlayerAgent = PlayerManager.GetLocalPlayerAgent();
localPlayerAgent.Damage.ModifyInfection(new pInfection
{
amount = amount,
effect = (pInfectionEffect)0,
mode = (pInfectionMode)1
}, false, false);
displayCallback(currentTemp, TEMP_DAMAGE_THRESHOLD_COLOR, "OVERHEATING");
}
else if (currentTemp >= TEMP_WARN_THRESHOLD)
{
float amount2 = deltaTime * TEMP_INFECTION_RATE * -1.5f;
PlayerAgent localPlayerAgent2 = PlayerManager.GetLocalPlayerAgent();
localPlayerAgent2.Damage.ModifyInfection(new pInfection
{
amount = amount2,
effect = (pInfectionEffect)0,
mode = (pInfectionMode)1
}, false, false);
displayCallback(currentTemp, TEMP_WARN_THRESHOLD_COLOR, "WARMING");
}
else
{
float amount3 = deltaTime * TEMP_INFECTION_RATE * -3f;
PlayerAgent localPlayerAgent3 = PlayerManager.GetLocalPlayerAgent();
localPlayerAgent3.Damage.ModifyInfection(new pInfection
{
amount = amount3,
effect = (pInfectionEffect)0,
mode = (pInfectionMode)1
}, false, false);
displayCallback(currentTemp, TEMP_OKAY_COLOR, "ACCEPTABLE");
}
}
}
}
namespace GTFODoorMod.CustomWorldEvents
{
public abstract class AbstractWorldEvent
{
protected static readonly ManualLogSource eventLogger;
public abstract string Identifier { get; }
static AbstractWorldEvent()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Expected O, but got Unknown
eventLogger = new ManualLogSource("giginss-doormod-events");
Logger.Sources.Add((ILogSource)(object)eventLogger);
}
public abstract void OnEventTrigger(ref WardenObjectiveEventData eventData);
protected bool TryGetZone(WardenObjectiveEventData eventData, out LG_Zone zone)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
if (!Builder.Current.m_currentFloor.TryGetZoneByLocalIndex(eventData.DimensionIndex, eventData.Layer, eventData.LocalIndex, ref zone))
{
zone = null;
return false;
}
return true;
}
public bool CheckWorldEventCondition(WardenObjectiveEventData eventData)
{
int conditionIndex = eventData.Condition.ConditionIndex;
if (conditionIndex == -1)
{
return true;
}
bool isTrue = eventData.Condition.IsTrue;
bool condition = WorldEventManager.GetCondition(conditionIndex);
return isTrue == condition;
}
protected LG_WeakDoor[] GetAllWeakDoorsInZone(LG_Zone zone)
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Invalid comparison between Unknown and I4
Dictionary<uint, LG_WeakDoor> dictionary = new Dictionary<uint, LG_WeakDoor>();
Enumerator<AIG_CourseNode> enumerator = zone.m_courseNodes.GetEnumerator();
while (enumerator.MoveNext())
{
AIG_CourseNode current = enumerator.Current;
Enumerator<AIG_CoursePortal> enumerator2 = current.m_portals.GetEnumerator();
while (enumerator2.MoveNext())
{
AIG_CoursePortal current2 = enumerator2.Current;
iLG_Door_Core door = current2.m_door;
if (door != null && (int)door.DoorType == 1)
{
LG_WeakDoor val = ((Il2CppObjectBase)current2.m_door).TryCast<LG_WeakDoor>();
if ((Object)(object)val != (Object)null)
{
dictionary.TryAdd(val.MapperDataID, val);
}
}
}
}
return dictionary.Values.ToArray();
}
}
public class ActivateTemperature : AbstractWorldEvent
{
private TemperatureManager TemperatureManager;
public override string Identifier => "ActivateTemperature";
public ActivateTemperature(TemperatureManager temperatureManager)
{
TemperatureManager = temperatureManager;
}
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
TemperatureManager.ActivateTemperature(eData.Duration, eData.FogTransitionDuration);
}
}
public class AddMovementSpeed : AbstractWorldEvent
{
public override string Identifier => "AddMovementSpeed";
public override void OnEventTrigger(ref WardenObjectiveEventData eventData)
{
MoveSpeedAPI.AddModifier(eventData.Duration, (StackLayer)1, "Maintenance");
}
}
public class ChangeLastKnownMainDimPosition : AbstractWorldEvent
{
public override string Identifier => "ForgetLastKnownMainDimPosition";
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0155: Expected O, but got Unknown
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Expected O, but got Unknown
//IL_0084: 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: Expected O, but got Unknown
Il2CppArrayBase<PlayerAgent> items = PlayerManager.PlayerAgentsInLevel._items;
TryGetZone(eData, out var zone);
bool flag = default(bool);
for (int i = 0; i < items.Count; i++)
{
PlayerAgent val = items[i];
if (!((Object)(object)val != (Object)null))
{
continue;
}
if (eData.Enabled)
{
if (zone.m_courseNodes._items.Count > 0)
{
AIG_CourseNode val2 = zone.m_courseNodes._items[0];
val.HasLastKnownMainDimensionPosition = true;
val.LastKnownMainDimensionPosition = val2.GetRandomPositionInside();
val.LastKnownMainDimensionCourseNode = val2;
BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(99, 2, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(val.PlayerName);
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" has had their last known dimension position changed to a random position inside courseNode 0 for ");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(((Object)zone).name);
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(".");
}
AbstractWorldEvent.eventLogger.LogInfo(val3);
}
else
{
BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(81, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("No course nodes found for zone ");
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(((Object)zone).name);
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("! Resetting last known dimension position instead.");
}
AbstractWorldEvent.eventLogger.LogInfo(val3);
val.HasLastKnownMainDimensionPosition = false;
}
}
else
{
val.HasLastKnownMainDimensionPosition = false;
BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(45, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(val.PlayerName);
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" has forgotten their last known dim position!");
}
AbstractWorldEvent.eventLogger.LogInfo(val3);
}
}
}
}
public class CloseAllWeakDoorsInZone : AbstractWorldEvent
{
public override string Identifier => "CloseAllWeakDoorsInZone";
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Expected O, but got Unknown
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
if (!SNet.IsMaster)
{
return;
}
if (TryGetZone(eData, out var zone))
{
LG_WeakDoor[] allWeakDoorsInZone = GetAllWeakDoorsInZone(zone);
LG_WeakDoor[] array = allWeakDoorsInZone;
foreach (LG_WeakDoor val in array)
{
val.m_sync.AttemptDoorInteraction((eDoorInteractionType)6, 0f, 0f, default(Vector3), (Agent)null);
}
}
else
{
bool flag = default(bool);
BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(33, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(Identifier);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" event failed to get target zone!");
}
AbstractWorldEvent.eventLogger.LogError(val2);
}
}
}
public class DeactivateTemperature : AbstractWorldEvent
{
private TemperatureManager TemperatureManager;
public override string Identifier => "DeactivateTemperature";
public DeactivateTemperature(TemperatureManager temperatureManager)
{
TemperatureManager = temperatureManager;
}
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
TemperatureManager.DeactivateTemperature();
}
}
public class DoorLockTracker
{
private static readonly HashSet<uint> LockedDoors = new HashSet<uint>();
public static bool IsDoorLocked(uint doorId)
{
return LockedDoors.Contains(doorId);
}
public static void LockDoor(uint doorId)
{
LockedDoors.Add(doorId);
}
public static void UnlockDoor(uint doorId)
{
LockedDoors.Remove(doorId);
}
public static void ClearLockedDoors()
{
LockedDoors.Clear();
}
}
public class DoorPatcher
{
private static readonly ManualLogSource DoorLogger = new ManualLogSource("giginss-doormod-door-patcher");
public DoorPatcher(Harmony harmony)
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Expected O, but got Unknown
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Expected O, but got Unknown
Logger.Sources.Add((ILogSource)(object)DoorLogger);
DoorLogger.LogInfo((object)"Patching door method");
MethodInfo method = typeof(LG_WeakDoor).GetMethod("AttemptOpenCloseInteraction");
MethodInfo methodInfo = typeof(LG_WeakDoor).GetProperty("InteractionAllowed")?.GetGetMethod();
harmony.Patch((MethodBase)method, new HarmonyMethod(typeof(DoorPatcher), "OpenCloseInteractionPrefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
if (methodInfo != null)
{
harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(typeof(DoorPatcher), "InteractionAllowedPrefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
}
DoorLogger.LogInfo((object)"Patching successful!");
}
private static bool OpenCloseInteractionPrefix(LG_WeakDoor __instance, bool onlyUnlock)
{
if (DoorLockTracker.IsDoorLocked(__instance.MapperDataID))
{
return false;
}
return true;
}
private static bool InteractionAllowedPrefix(LG_WeakDoor __instance)
{
if (DoorLockTracker.IsDoorLocked(__instance.MapperDataID))
{
return false;
}
return true;
}
}
public class ForceSolveUplink : AbstractWorldEvent
{
public override string Identifier => "ForceSolveUplink";
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Expected O, but got Unknown
if (TryGetZone(eData, out var zone))
{
bool flag = false;
Enumerator<LG_ComputerTerminal> enumerator = zone.TerminalsSpawnedInZone.GetEnumerator();
while (enumerator.MoveNext())
{
LG_ComputerTerminal current = enumerator.Current;
if (current.UplinkPuzzle.Connected)
{
flag = true;
current.UplinkPuzzle.Solved = true;
current.UplinkPuzzle.UpdateGUI(false);
current.AddLine((TerminalLineType)5, "Forcefully terminating uplink", 3f);
if (current.UplinkPuzzle.OnPuzzleSolved != null)
{
current.UplinkPuzzle.OnPuzzleSolved.Invoke();
}
}
}
if (!flag)
{
bool flag2 = default(bool);
BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(45, 1, ref flag2);
if (flag2)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Failed to find any active uplink terminal in ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(zone.m_navInfo.GetFormattedText((LG_NavInfoFormat)6));
}
AbstractWorldEvent.eventLogger.LogError(val);
}
}
else
{
AbstractWorldEvent.eventLogger.LogError((object)"Failed to find zone for ForceSolveUplink!");
}
}
}
public class LockAllDoorsInZone : AbstractWorldEvent
{
public override string Identifier => "LockAllDoorsInZone";
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Expected O, but got Unknown
//IL_003a: 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)
if (TryGetZone(eData, out var zone))
{
LG_WeakDoor[] allWeakDoorsInZone = GetAllWeakDoorsInZone(zone);
Texture2D redXTexture = WorldEventsPatcher.GetRedXTexture();
Sprite sprite = Sprite.Create(redXTexture, new Rect(0f, 0f, (float)((Texture)redXTexture).width, (float)((Texture)redXTexture).height), new Vector2(0.5f, 0.5f), 100f);
LG_WeakDoor[] array = allWeakDoorsInZone;
foreach (LG_WeakDoor val in array)
{
DoorLockTracker.LockDoor(val.MapperDataID);
foreach (LG_DoorButton item in (Il2CppArrayBase<LG_DoorButton>)(object)val.m_buttons)
{
foreach (SpriteRenderer componentsInChild in ((Component)item).gameObject.GetComponentsInChildren<SpriteRenderer>())
{
if (((Object)componentsInChild).name.Equals("DoorFrame"))
{
SpriteRenderer val2 = Object.Instantiate<SpriteRenderer>(componentsInChild, ((Component)((Component)componentsInChild).transform.parent).gameObject.transform);
((Object)val2).name = WorldEventsPatcher.SpriteName;
val2.sprite = sprite;
((Renderer)val2).enabled = true;
}
if (WorldEventsPatcher.DoorSpriteRenderers.Contains(((Object)componentsInChild).name))
{
((Component)componentsInChild).gameObject.SetActive(false);
}
}
}
}
}
else
{
bool flag = default(bool);
BepInExErrorLogInterpolatedStringHandler val3 = new BepInExErrorLogInterpolatedStringHandler(33, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(Identifier);
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" event failed to get target zone!");
}
AbstractWorldEvent.eventLogger.LogError(val3);
}
}
}
public class OpenAllWeakDoorsInZone : AbstractWorldEvent
{
public override string Identifier => "OpenAllWeakDoorsInZone";
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Expected O, but got Unknown
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
if (!SNet.IsMaster)
{
return;
}
if (TryGetZone(eData, out var zone))
{
LG_WeakDoor[] allWeakDoorsInZone = GetAllWeakDoorsInZone(zone);
LG_WeakDoor[] array = allWeakDoorsInZone;
foreach (LG_WeakDoor val in array)
{
val.m_sync.AttemptDoorInteraction((eDoorInteractionType)0, 0f, 0f, default(Vector3), (Agent)null);
}
}
else
{
bool flag = default(bool);
BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(33, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(Identifier);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" event failed to get target zone!");
}
AbstractWorldEvent.eventLogger.LogError(val2);
}
}
}
public class ReplaceZoneDoorAlarm : AbstractWorldEvent
{
public override string Identifier => "ReplaceZoneDoorAlarm";
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Expected O, but got Unknown
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: 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_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Expected I4, but got Unknown
TryGetZone(eData, out var zone);
LG_SecurityDoor val = ((Il2CppObjectBase)zone.m_sourceGate.SpawnedDoor).TryCast<LG_SecurityDoor>();
if ((Object)(object)val != (Object)null)
{
ReplicationPatch.OverrideCount++;
eDoorStatus lastStatus = val.LastStatus;
eDoorStatus val2 = lastStatus;
switch ((int)val2)
{
case 8:
case 9:
case 10:
case 16:
AbstractWorldEvent.eventLogger.LogWarning((object)"Set up chained puzzle on potentially invalid door state.");
val.SetupChainedPuzzleLock(eData.ChainPuzzle);
break;
case 1:
case 3:
case 4:
case 5:
case 6:
case 7:
case 15:
val.SetupChainedPuzzleLock(eData.ChainPuzzle);
break;
case 0:
case 2:
case 11:
case 12:
case 13:
case 14:
AbstractWorldEvent.eventLogger.LogError((object)"Tried to setup chained puzzle on invalid door state");
break;
}
ReplicationPatch.OverrideCount--;
}
else
{
bool flag = default(bool);
BepInExErrorLogInterpolatedStringHandler val3 = new BepInExErrorLogInterpolatedStringHandler(38, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(Identifier);
((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" event failed to read a security door!");
}
AbstractWorldEvent.eventLogger.LogError(val3);
}
}
}
public class SetTemperatureBounds : AbstractWorldEvent
{
private TemperatureManager temperatureManager;
public override string Identifier => "SetTemperatureBounds";
public SetTemperatureBounds(TemperatureManager manager)
{
temperatureManager = manager;
}
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
temperatureManager.SetTemperatureBounds(eData.Duration, eData.FogTransitionDuration);
}
}
public class StartTemperatureCooling : AbstractWorldEvent
{
private TemperatureManager TemperatureManager;
public override string Identifier => "StartTemperatureCooling";
public StartTemperatureCooling(TemperatureManager temperatureManager)
{
TemperatureManager = temperatureManager;
}
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
TemperatureManager.AddTemporaryCooling(eData.Duration, eData.FogTransitionDuration);
}
}
public class TeleportPocketItems : AbstractWorldEvent
{
public override string Identifier => "TeleportPocketItems";
public override void OnEventTrigger(ref WardenObjectiveEventData eventData)
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Expected O, but got Unknown
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Expected O, but got Unknown
//IL_0263: Unknown result type (might be due to invalid IL or missing references)
//IL_026a: Expected O, but got Unknown
int count = eventData.Count;
int enemyID = (int)eventData.EnemyID;
List<PlayerAgent> playerAgentsInLevel = PlayerManager.PlayerAgentsInLevel;
bool flag = default(bool);
if (count >= playerAgentsInLevel.Count || enemyID >= playerAgentsInLevel.Count)
{
BepInExWarningLogInterpolatedStringHandler val = new BepInExWarningLogInterpolatedStringHandler(95, 3, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Either ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(count);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" or ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(enemyID);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" are out of range when trying to teleport pocket items. Number of player agents is ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(playerAgentsInLevel.Count);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(".");
}
AbstractWorldEvent.eventLogger.LogWarning(val);
return;
}
PlayerAgent val2 = playerAgentsInLevel[count];
PlayerAgent val3 = playerAgentsInLevel[enemyID];
PlayerBackpack val4 = default(PlayerBackpack);
bool flag2 = PlayerBackpackManager.TryGetBackpack(val2.Owner, ref val4);
PlayerBackpack val5 = default(PlayerBackpack);
bool flag3 = PlayerBackpackManager.TryGetBackpack(val3.Owner, ref val5);
if (!flag2 || !flag3)
{
BepInExWarningLogInterpolatedStringHandler val = new BepInExWarningLogInterpolatedStringHandler(67, 2, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Failed to get source and/or destination backpack for indices ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(count);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" and ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(enemyID);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("!");
}
AbstractWorldEvent.eventLogger.LogWarning(val);
return;
}
List<List<PocketItem>> pocketItemsGroups = val4.PocketItemsGroups;
for (int i = 0; i < pocketItemsGroups.Count; i++)
{
List<PocketItem> val6 = pocketItemsGroups._items[i];
for (int j = 0; j < val6.Count; j++)
{
if (val6.Count > 0)
{
PocketItem val7 = val6._items[0];
if (!val5.ItemIDToPocketItemGroup.ContainsKey(val7.itemID))
{
val5.ItemIDToPocketItemGroup.Add(val7.itemID, new List<PocketItem>());
val5.PocketItemsGroups.Add(val5.ItemIDToPocketItemGroup[val7.itemID]);
}
val5.ItemIDToPocketItemGroup[val7.itemID].Add(val7);
}
}
val6.Clear();
}
pocketItemsGroups.Clear();
val4.ItemIDToPocketItemGroup.Clear();
BepInExInfoLogInterpolatedStringHandler val8 = new BepInExInfoLogInterpolatedStringHandler(35, 2, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val8).AppendLiteral("Transferred pocket items from ");
((BepInExLogInterpolatedStringHandler)val8).AppendFormatted<int>(count);
((BepInExLogInterpolatedStringHandler)val8).AppendLiteral(" to ");
((BepInExLogInterpolatedStringHandler)val8).AppendFormatted<int>(enemyID);
((BepInExLogInterpolatedStringHandler)val8).AppendLiteral(".");
}
AbstractWorldEvent.eventLogger.LogInfo(val8);
PlayerBackpackManager.UpdatePocketItemGUI();
}
}
public class TeleportResourcePack : AbstractWorldEvent
{
public override string Identifier => "TeleportResourcePack";
public override void OnEventTrigger(ref WardenObjectiveEventData eventData)
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Expected O, but got Unknown
//IL_0180: Unknown result type (might be due to invalid IL or missing references)
//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
//IL_01aa: Expected O, but got Unknown
//IL_0200: Unknown result type (might be due to invalid IL or missing references)
//IL_0223: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Expected O, but got Unknown
//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
//IL_02cc: Expected O, but got Unknown
//IL_026b: Unknown result type (might be due to invalid IL or missing references)
//IL_023d: Unknown result type (might be due to invalid IL or missing references)
//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
//IL_03af: Expected O, but got Unknown
//IL_034b: Unknown result type (might be due to invalid IL or missing references)
//IL_0352: Expected O, but got Unknown
int count = eventData.Count;
int enemyID = (int)eventData.EnemyID;
if (!SNet.IsMaster)
{
return;
}
List<PlayerAgent> playerAgentsInLevel = PlayerManager.PlayerAgentsInLevel;
bool flag = default(bool);
if (count >= playerAgentsInLevel.Count || enemyID >= playerAgentsInLevel.Count)
{
BepInExWarningLogInterpolatedStringHandler val = new BepInExWarningLogInterpolatedStringHandler(95, 3, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Either ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(count);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" or ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(enemyID);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" are out of range when trying to teleport pocket items. Number of player agents is ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(playerAgentsInLevel.Count);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(".");
}
AbstractWorldEvent.eventLogger.LogWarning(val);
return;
}
PlayerAgent val2 = playerAgentsInLevel[count];
PlayerAgent val3 = playerAgentsInLevel[enemyID];
PlayerBackpack val4 = default(PlayerBackpack);
bool flag2 = PlayerBackpackManager.TryGetBackpack(val2.Owner, ref val4);
PlayerBackpack val5 = default(PlayerBackpack);
bool flag3 = PlayerBackpackManager.TryGetBackpack(val3.Owner, ref val5);
if (!flag2 || !flag3)
{
BepInExWarningLogInterpolatedStringHandler val = new BepInExWarningLogInterpolatedStringHandler(67, 2, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Failed to get source and/or destination backpack for indices ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(count);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" and ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(enemyID);
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("!");
}
AbstractWorldEvent.eventLogger.LogWarning(val);
return;
}
BackpackItem val6 = default(BackpackItem);
bool flag4 = val4.TryGetBackpackItem((InventorySlot)4, ref val6);
BackpackItem val7 = default(BackpackItem);
bool flag5 = val5.TryGetBackpackItem((InventorySlot)4, ref val7);
if (flag4)
{
pItemData_Custom val8 = new pItemData_Custom
{
ammo = val4.AmmoStorage.ResourcePackAmmo.AmmoInPack
};
BepInExInfoLogInterpolatedStringHandler val9 = new BepInExInfoLogInterpolatedStringHandler(27, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral("Set source custom.ammo to ");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<float>(val8.ammo);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral(".");
}
AbstractWorldEvent.eventLogger.LogInfo(val9);
val6.Instance.SetCustomData(val8, false);
}
if (flag5)
{
pItemData_Custom val10 = new pItemData_Custom
{
ammo = val5.AmmoStorage.ResourcePackAmmo.AmmoInPack
};
BepInExInfoLogInterpolatedStringHandler val9 = new BepInExInfoLogInterpolatedStringHandler(32, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral("Set destination custom.ammo to ");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<float>(val10.ammo);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral(".");
}
AbstractWorldEvent.eventLogger.LogInfo(val9);
val7.Instance.SetCustomData(val10, false);
}
if (flag5 && flag4)
{
PlayerBackpackManager.MasterRemoveItem(val6.Instance, val4);
PlayerBackpackManager.MasterRemoveItem(val7.Instance, val5);
PlayerBackpackManager.MasterAddItem(val7.Instance, val4);
PlayerBackpackManager.MasterAddItem(val6.Instance, val5);
BepInExInfoLogInterpolatedStringHandler val9 = new BepInExInfoLogInterpolatedStringHandler(45, 2, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral("Swapped resource packs between indices ");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<int>(count);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral(" and ");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<int>(enemyID);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral(".");
}
AbstractWorldEvent.eventLogger.LogInfo(val9);
}
else if (!flag5)
{
PlayerBackpackManager.MasterRemoveItem(val6.Instance, val4);
PlayerBackpackManager.MasterAddItem(val6.Instance, val5);
BepInExInfoLogInterpolatedStringHandler val9 = new BepInExInfoLogInterpolatedStringHandler(29, 2, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral("Sent resource pack from ");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<int>(count);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral(" to ");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<int>(enemyID);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral(".");
}
AbstractWorldEvent.eventLogger.LogInfo(val9);
}
else
{
BepInExInfoLogInterpolatedStringHandler val9 = new BepInExInfoLogInterpolatedStringHandler(49, 4, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral("Failed to teleport resource packs from ");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<int>(count);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral(" to ");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<int>(enemyID);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral("! (");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<bool>(flag4);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral(", ");
((BepInExLogInterpolatedStringHandler)val9).AppendFormatted<bool>(flag5);
((BepInExLogInterpolatedStringHandler)val9).AppendLiteral(")");
}
AbstractWorldEvent.eventLogger.LogInfo(val9);
}
}
}
public class UnlockAllDoorsInZone : AbstractWorldEvent
{
public override string Identifier => "UnlockAllDoorsInZone";
public override void OnEventTrigger(ref WardenObjectiveEventData eData)
{
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Expected O, but got Unknown
if (TryGetZone(eData, out var zone))
{
LG_WeakDoor[] allWeakDoorsInZone = GetAllWeakDoorsInZone(zone);
LG_WeakDoor[] array = allWeakDoorsInZone;
foreach (LG_WeakDoor val in array)
{
DoorLockTracker.UnlockDoor(val.MapperDataID);
foreach (LG_DoorButton item in (Il2CppArrayBase<LG_DoorButton>)(object)val.m_buttons)
{
foreach (SpriteRenderer componentsInChild in ((Component)item).gameObject.GetComponentsInChildren<SpriteRenderer>(true))
{
if (((Object)componentsInChild).name.Equals(WorldEventsPatcher.SpriteName))
{
Object.Destroy((Object)(object)((Component)componentsInChild).gameObject);
}
if (WorldEventsPatcher.DoorSpriteRenderers.Contains(((Object)componentsInChild).name))
{
((Component)componentsInChild).gameObject.SetActive(true);
}
}
}
}
}
else
{
bool flag = default(bool);
BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(33, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(Identifier);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" event failed to get target zone!");
}
AbstractWorldEvent.eventLogger.LogError(val2);
}
}
}
public class WorldEventsPatcher
{
private static Dictionary<int, AbstractWorldEvent> _customWorldEvents = new Dictionary<int, AbstractWorldEvent>();
private Dictionary<string, object> _enumMapping = new Dictionary<string, object>();
private static readonly ManualLogSource EventsLogger = new ManualLogSource("giginss.rundownmod.events-patcher");
private static Texture2D RedXTexture;
public static readonly List<string> DoorSpriteRenderers = new List<string>
{
"DoorFrame", "Door_Blade_1", "Door_Blade_2", "Door_Blade_3", "Door_Blade_4", "Door_Blade_5", "Door_Blade_6", "Door_Blade_7", "Door_Blade_Broken", "DoorEnterArrow_1",
"DoorEnterArrow_2", "DoorEnterArrow_3", "DoorExitArrow"
};
private static readonly int eWardenObjectiveEventTypeOffset = 50;
private int currentCount = 0;
private TemperatureManager TemperatureManager;
public static string SpriteName => "DoorRedX";
public WorldEventsPatcher(Harmony harmony, Texture2D redX)
{
//IL_0211: Unknown result type (might be due to invalid IL or missing references)
//IL_021f: Expected O, but got Unknown
//IL_024a: Unknown result type (might be due to invalid IL or missing references)
//IL_0257: Expected O, but got Unknown
Logger.Sources.Add((ILogSource)(object)EventsLogger);
TemperatureManager = new TemperatureManager(harmony);
RedXTexture = redX;
Object.DontDestroyOnLoad((Object)(object)RedXTexture);
((Object)RedXTexture).hideFlags = (HideFlags)61;
EventsLogger.LogDebug((object)"Creating door events");
LockAllDoorsInZone worldEvent = new LockAllDoorsInZone();
UnlockAllDoorsInZone worldEvent2 = new UnlockAllDoorsInZone();
OpenAllWeakDoorsInZone worldEvent3 = new OpenAllWeakDoorsInZone();
CloseAllWeakDoorsInZone worldEvent4 = new CloseAllWeakDoorsInZone();
ReplaceZoneDoorAlarm worldEvent5 = new ReplaceZoneDoorAlarm();
ChangeLastKnownMainDimPosition worldEvent6 = new ChangeLastKnownMainDimPosition();
TeleportResourcePack worldEvent7 = new TeleportResourcePack();
TeleportPocketItems worldEvent8 = new TeleportPocketItems();
AddMovementSpeed worldEvent9 = new AddMovementSpeed();
ActivateTemperature worldEvent10 = new ActivateTemperature(TemperatureManager);
DeactivateTemperature worldEvent11 = new DeactivateTemperature(TemperatureManager);
StartTemperatureCooling worldEvent12 = new StartTemperatureCooling(TemperatureManager);
SetTemperatureBounds worldEvent13 = new SetTemperatureBounds(TemperatureManager);
ForceSolveUplink worldEvent14 = new ForceSolveUplink();
EventsLogger.LogDebug((object)"Registering events");
AddToCustomWorldEvents(worldEvent);
AddToCustomWorldEvents(worldEvent2);
AddToCustomWorldEvents(worldEvent3);
AddToCustomWorldEvents(worldEvent4);
AddToCustomWorldEvents(worldEvent5);
AddToCustomWorldEvents(worldEvent6);
AddToCustomWorldEvents(worldEvent7);
AddToCustomWorldEvents(worldEvent8);
AddToCustomWorldEvents(worldEvent9);
AddToCustomWorldEvents(worldEvent10);
AddToCustomWorldEvents(worldEvent11);
AddToCustomWorldEvents(worldEvent12);
AddToCustomWorldEvents(worldEvent13);
AddToCustomWorldEvents(worldEvent14);
EventsLogger.LogDebug((object)"Injecting events into enum...");
foreach (KeyValuePair<int, AbstractWorldEvent> customWorldEvent in _customWorldEvents)
{
_enumMapping[customWorldEvent.Value.Identifier] = customWorldEvent.Key;
}
EnumInjector.InjectEnumValues<eWardenObjectiveEventType>(_enumMapping);
EventsLogger.LogDebug((object)"Injection complete, patching...");
MethodInfo method = typeof(WorldEventManager).GetMethod("ExecuteEvent");
harmony.Patch((MethodBase)method, new HarmonyMethod(typeof(WorldEventsPatcher), "ExecuteEventPrefix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo method2 = typeof(GS_AfterLevel).GetMethod("CleanupAfterExpedition");
harmony.Patch((MethodBase)method2, (HarmonyMethod)null, new HarmonyMethod(typeof(WorldEventsPatcher), "CleanupLevelPostfix", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
EventsLogger.LogDebug((object)"Patching successful!");
}
private void AddToCustomWorldEvents(AbstractWorldEvent worldEvent)
{
int key = eWardenObjectiveEventTypeOffset + currentCount;
currentCount++;
_customWorldEvents.Add(key, worldEvent);
}
private static bool ExecuteEventPrefix(ref WardenObjectiveEventData eData, float currentDuration)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected I4, but got Unknown
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected I4, but got Unknown
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Expected O, but got Unknown
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
if (_customWorldEvents.ContainsKey((int)eData.Type))
{
bool flag = default(bool);
if (_customWorldEvents.TryGetValue((int)eData.Type, out var value))
{
BepInExDebugLogInterpolatedStringHandler val = new BepInExDebugLogInterpolatedStringHandler(11, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Triggering ");
((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(value.Identifier);
}
EventsLogger.LogDebug(val);
if (!value.CheckWorldEventCondition(eData))
{
return false;
}
float delay = eData.Delay;
if (delay > 0f)
{
CoroutineDispatcher.StartCoroutine(ExecuteEventCoroutine(value, eData, delay));
}
else
{
ExecuteEvent(value, eData);
}
}
else
{
BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(81, 1, ref flag);
if (flag)
{
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Key ");
((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<eWardenObjectiveEventType>(eData.Type);
((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" exists in the custom world events dictionary but failed to retrieve it!?!?!?");
}
EventsLogger.LogError(val2);
}
return false;
}
return true;
}
[HarmonyPostfix]
private static void CleanupLevelPostfix()
{
DoorLockTracker.ClearLockedDoors();
}
public static Texture2D GetRedXTexture()
{
return RedXTexture;
}
private static IEnumerator ExecuteEventCoroutine(AbstractWorldEvent abstractWorldEvent, WardenObjectiveEventData eData, float delay)
{
yield return (object)new WaitForSeconds(delay);
ExecuteEvent(abstractWorldEvent, eData);
}
private static void ExecuteEvent(AbstractWorldEvent abstractWorldEvent, WardenObjectiveEventData eData)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
abstractWorldEvent.OnEventTrigger(ref eData);
WardenObjectiveManager.DisplayWardenIntel(eData.Layer, eData.WardenIntel);
}
}
}