Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Giant Extension Ladders v3.3.1
BepInEx/plugins/inoyu.GiantExtensionLadders.dll
Decompiled 10 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using CSync.Extensions; using CSync.Lib; using GameNetcodeStuff; using GiantExtensionLaddersV2.Behaviours; using GiantExtensionLaddersV2.ConfigStuff; using HarmonyLib; using LethalLib.Modules; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.UIElements.Collections; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("inoyu.GiantExtensionLadders")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("3.3.1.0")] [assembly: AssemblyInformationalVersion("3.3.1+01d51b2e5ad5f3e164c2dfc5e3d4e00153bbf21a")] [assembly: AssemblyProduct("GiantExtensionLaddersV2")] [assembly: AssemblyTitle("inoyu.GiantExtensionLadders")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("3.3.1.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.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = 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 GiantExtensionLaddersV2 { [BepInPlugin("inoyu.GiantExtensionLadders", "GiantExtensionLaddersV2", "3.3.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency("com.sigurd.csync", "5.0.0")] public class GiantExtensionLaddersV2 : BaseUnityPlugin { internal static MySyncedConfigs mySyncedConfigs; private const string ladderAssetbundleName = "allLadderAssets"; private const string tinyLadderAssetbundleName = "TinyLadderAssets"; private const string bigLadderAssetbundleName = "BigLadderAssets"; private const string hugeLadderAssetbundleName = "HugeLadderAssets"; private const string ultimateLadderAssetbundleName = "UltimateLadderAssets"; private const string ladderCollectorAssetBundleName = "laddercollector"; private const string tinyLadderItemPropertiesLocation = "Assets/extLadderTest/tinyLadder/TinyLadder.asset"; private const string bigLadderItemPropertiesLocation = "Assets/extLadderTest/BigLadder/BigLadder.asset"; private const string hugeLadderItemPropertiesLocation = "Assets/extLadderTest/HugeLadder/HugeLadder.asset"; private const string ultimateLadderItemPropertiesLocation = "Assets/extLadderTest/Gigantic ladder/UltimateLadderItem.asset"; private const string ladderCollectorItemLocation = "Assets/LethalCompany/Mods/Items/LadderCollector/LadderCollectorItem.asset"; private const int MAX_PROPERTY_AMOUNT = 19; internal static int propertyCounter = 0; internal LadderObject tinyLadder = new LadderObject(10.3f, 75f, 0.15f, ladderIsClimbable: false, GiantLadderType.TINY); internal LadderObject bigLadder = new LadderObject(17f, 60f, 0.15f, ladderIsClimbable: true, GiantLadderType.BIG); internal LadderObject hugeLadder = new LadderObject(34.4f, 60f, 0.2f, ladderIsClimbable: true, GiantLadderType.HUGE); internal LadderObject ultimateLadder = new LadderObject(68f, 60f, 0.25f, ladderIsClimbable: true, GiantLadderType.ULTIMATE); internal static Item? tinyLadderItem; internal static Item? bigLadderItem; internal static Item? hugeLadderItem; internal static Item? ultimateLadderItem; internal static Item? ladderCollectorItem; internal static TerminalNode? tinyLadderNode; internal static TerminalNode? bigLadderNode; internal static TerminalNode? hugeLadderNode; internal static TerminalNode? ultimateLadderNode; internal static TerminalNode? ladderCollectorNode; internal static Dictionary<Item, string> originalItemNames = new Dictionary<Item, string>(); internal static bool isBuildSuccess = true; internal static bool isPlayerOnTinyLadder = false; internal static GiantExtensionLaddersV2 Instance { get; private set; } = null; internal static ManualLogSource mls { get; private set; } = null; internal static Harmony? Harmony { get; set; } private void Awake() { //IL_000d: 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: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("inoyu.GiantExtensionLadders"); } mls = ((BaseUnityPlugin)this).Logger; Instance = this; mySyncedConfigs = new MySyncedConfigs(((BaseUnityPlugin)this).Config); mls.LogInfo((object)"loading assetbundles"); string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "TinyLadderAssets"); string text2 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "BigLadderAssets"); string text3 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "HugeLadderAssets"); string text4 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "UltimateLadderAssets"); string text5 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "laddercollector"); AssetBundle val = AssetBundle.LoadFromFile(text); AssetBundle val2 = AssetBundle.LoadFromFile(text2); AssetBundle val3 = AssetBundle.LoadFromFile(text3); AssetBundle val4 = AssetBundle.LoadFromFile(text4); AssetBundle val5 = AssetBundle.LoadFromFile(text5); if ((Object)(object)val2 == (Object)null || (Object)(object)val3 == (Object)null || (Object)(object)val == (Object)null || (Object)(object)val4 == (Object)null) { mls.LogError((object)"failed to load assetbundles"); return; } tinyLadderItem = val.LoadAsset<Item>("Assets/extLadderTest/tinyLadder/TinyLadder.asset"); bigLadderItem = val2.LoadAsset<Item>("Assets/extLadderTest/BigLadder/BigLadder.asset"); hugeLadderItem = val3.LoadAsset<Item>("Assets/extLadderTest/HugeLadder/HugeLadder.asset"); ultimateLadderItem = val4.LoadAsset<Item>("Assets/extLadderTest/Gigantic ladder/UltimateLadderItem.asset"); ladderCollectorItem = val5.LoadAsset<Item>("Assets/LethalCompany/Mods/Items/LadderCollector/LadderCollectorItem.asset"); if ((Object)(object)bigLadderItem == (Object)null || (Object)(object)hugeLadderItem == (Object)null || (Object)(object)tinyLadderItem == (Object)null || (Object)(object)ultimateLadderItem == (Object)null || (Object)(object)ladderCollectorItem == (Object)null) { mls.LogError((object)"failed to load items from item assetbundles"); return; } mls.LogInfo((object)"building tiny ladder..."); tinyLadder.ladderPrefab = tinyLadderItem.spawnPrefab; tinyLadder.meshRenderers = tinyLadder.ladderPrefab.GetComponentsInChildren<MeshRenderer>().ToList(); tinyLadder.animators = tinyLadder.ladderPrefab.GetComponentsInChildren<Animator>().ToList(); tinyLadder.transforms = tinyLadder.ladderPrefab.GetComponentsInChildren<Transform>().ToList(); tinyLadder.audioClips = val.LoadAllAssets<AudioClip>().ToList(); tinyLadder.audioSources = tinyLadder.ladderPrefab.GetComponentsInChildren<AudioSource>().ToList(); tinyLadder.interactTriggers = tinyLadder.ladderPrefab.GetComponentsInChildren<InteractTrigger>().ToList(); tinyLadder.boxColliders = tinyLadder.ladderPrefab.GetComponentsInChildren<BoxCollider>().ToList(); LadderItemScript ladderItemScript = tinyLadder.ladderPrefab.AddComponent<LadderItemScript>(); if ((Object)(object)tinyLadder.ladderPrefab.GetComponent<LadderItemScript>() == (Object)null) { mls.LogError((object)"tinyLadderItemPrefab failed"); return; } ((GrabbableObject)ladderItemScript).grabbable = true; ((GrabbableObject)ladderItemScript).grabbableToEnemies = true; ((GrabbableObject)ladderItemScript).itemProperties = tinyLadderItem; ladderItemScript.maxExtension = tinyLadder.LADDER_MAX_EXTENSION; ladderItemScript.minInteractableRotation = tinyLadder.LADDER_MIN_ROTATION_FOR_INTERACTION; ladderItemScript.ladderRotateSpeedMultiplier = tinyLadder.LADDER_ROTATE_SPEED; ladderItemScript.isClimbable = true; ladderItemScript.isClimbableInShip = true; ladderItemScript.giantLadderType = tinyLadder.ladderType; BuildLadderItemScript(tinyLadder.meshRenderers, tinyLadder.animators, tinyLadder.transforms, tinyLadder.audioClips, tinyLadder.audioSources, tinyLadder.interactTriggers, tinyLadder.boxColliders, ladderItemScript); tinyLadderItem.canBeGrabbedBeforeGameStart = true; mls.LogInfo((object)"building big ladder..."); bigLadder.ladderPrefab = bigLadderItem.spawnPrefab; bigLadder.meshRenderers = bigLadder.ladderPrefab.GetComponentsInChildren<MeshRenderer>().ToList(); bigLadder.animators = bigLadder.ladderPrefab.GetComponentsInChildren<Animator>().ToList(); bigLadder.transforms = bigLadder.ladderPrefab.GetComponentsInChildren<Transform>().ToList(); bigLadder.audioClips = val2.LoadAllAssets<AudioClip>().ToList(); bigLadder.audioSources = bigLadder.ladderPrefab.GetComponentsInChildren<AudioSource>().ToList(); bigLadder.interactTriggers = bigLadder.ladderPrefab.GetComponentsInChildren<InteractTrigger>().ToList(); bigLadder.boxColliders = bigLadder.ladderPrefab.GetComponentsInChildren<BoxCollider>().ToList(); LadderItemScript ladderItemScript2 = bigLadder.ladderPrefab.AddComponent<LadderItemScript>(); if ((Object)(object)bigLadder.ladderPrefab.GetComponent<LadderItemScript>() == (Object)null) { mls.LogError((object)"bigLadderScript failed"); return; } ((GrabbableObject)ladderItemScript2).grabbable = true; ((GrabbableObject)ladderItemScript2).grabbableToEnemies = true; ((GrabbableObject)ladderItemScript2).itemProperties = bigLadderItem; ladderItemScript2.maxExtension = bigLadder.LADDER_MAX_EXTENSION; ladderItemScript2.minInteractableRotation = bigLadder.LADDER_MIN_ROTATION_FOR_INTERACTION; ladderItemScript2.ladderRotateSpeedMultiplier = bigLadder.LADDER_ROTATE_SPEED; ladderItemScript2.isClimbable = bigLadder.LADDER_IS_CLIMBABLE; ladderItemScript2.giantLadderType = bigLadder.ladderType; BuildLadderItemScript(bigLadder.meshRenderers, bigLadder.animators, bigLadder.transforms, bigLadder.audioClips, bigLadder.audioSources, bigLadder.interactTriggers, bigLadder.boxColliders, ladderItemScript2); mls.LogInfo((object)"building huge ladder..."); hugeLadder.ladderPrefab = hugeLadderItem.spawnPrefab; hugeLadder.meshRenderers = hugeLadder.ladderPrefab.GetComponentsInChildren<MeshRenderer>().ToList(); hugeLadder.animators = hugeLadder.ladderPrefab.GetComponentsInChildren<Animator>().ToList(); hugeLadder.transforms = hugeLadder.ladderPrefab.GetComponentsInChildren<Transform>().ToList(); hugeLadder.audioClips = val3.LoadAllAssets<AudioClip>().ToList(); hugeLadder.audioSources = hugeLadder.ladderPrefab.GetComponentsInChildren<AudioSource>().ToList(); hugeLadder.interactTriggers = hugeLadder.ladderPrefab.GetComponentsInChildren<InteractTrigger>().ToList(); hugeLadder.boxColliders = hugeLadder.ladderPrefab.GetComponentsInChildren<BoxCollider>().ToList(); LadderItemScript ladderItemScript3 = hugeLadder.ladderPrefab.AddComponent<LadderItemScript>(); if ((Object)(object)hugeLadder.ladderPrefab.GetComponent<LadderItemScript>() == (Object)null) { mls.LogError((object)"hugeLadderScript failed"); return; } ((GrabbableObject)ladderItemScript3).grabbable = true; ((GrabbableObject)ladderItemScript3).grabbableToEnemies = true; ((GrabbableObject)ladderItemScript3).itemProperties = hugeLadderItem; ladderItemScript3.maxExtension = hugeLadder.LADDER_MAX_EXTENSION; ladderItemScript3.minInteractableRotation = hugeLadder.LADDER_MIN_ROTATION_FOR_INTERACTION; ladderItemScript3.ladderRotateSpeedMultiplier = hugeLadder.LADDER_ROTATE_SPEED; ladderItemScript3.isClimbable = hugeLadder.LADDER_IS_CLIMBABLE; ladderItemScript3.giantLadderType = hugeLadder.ladderType; BuildLadderItemScript(hugeLadder.meshRenderers, hugeLadder.animators, hugeLadder.transforms, hugeLadder.audioClips, hugeLadder.audioSources, hugeLadder.interactTriggers, hugeLadder.boxColliders, ladderItemScript3); mls.LogInfo((object)"building ultimate ladder..."); ultimateLadder.ladderPrefab = ultimateLadderItem.spawnPrefab; ultimateLadder.meshRenderers = ultimateLadder.ladderPrefab.GetComponentsInChildren<MeshRenderer>().ToList(); ultimateLadder.animators = ultimateLadder.ladderPrefab.GetComponentsInChildren<Animator>().ToList(); ultimateLadder.transforms = ultimateLadder.ladderPrefab.GetComponentsInChildren<Transform>().ToList(); ultimateLadder.audioClips = val4.LoadAllAssets<AudioClip>().ToList(); ultimateLadder.audioSources = ultimateLadder.ladderPrefab.GetComponentsInChildren<AudioSource>().ToList(); ultimateLadder.interactTriggers = ultimateLadder.ladderPrefab.GetComponentsInChildren<InteractTrigger>().ToList(); ultimateLadder.boxColliders = ultimateLadder.ladderPrefab.GetComponentsInChildren<BoxCollider>().ToList(); LadderItemScript ladderItemScript4 = ultimateLadder.ladderPrefab.AddComponent<LadderItemScript>(); if ((Object)(object)ultimateLadder.ladderPrefab.GetComponent<LadderItemScript>() == (Object)null) { mls.LogError((object)"ultimateLadderScript failed"); return; } ((GrabbableObject)ladderItemScript4).grabbable = true; ((GrabbableObject)ladderItemScript4).grabbableToEnemies = true; ((GrabbableObject)ladderItemScript4).itemProperties = ultimateLadderItem; ladderItemScript4.maxExtension = ultimateLadder.LADDER_MAX_EXTENSION; ladderItemScript4.minInteractableRotation = ultimateLadder.LADDER_MIN_ROTATION_FOR_INTERACTION; ladderItemScript4.ladderRotateSpeedMultiplier = ultimateLadder.LADDER_ROTATE_SPEED; ladderItemScript4.isClimbable = ultimateLadder.LADDER_IS_CLIMBABLE; ladderItemScript4.giantLadderType = ultimateLadder.ladderType; BuildLadderItemScript(ultimateLadder.meshRenderers, ultimateLadder.animators, ultimateLadder.transforms, ultimateLadder.audioClips, ultimateLadder.audioSources, ultimateLadder.interactTriggers, ultimateLadder.boxColliders, ladderItemScript4); if (!isBuildSuccess) { mls.LogError((object)"Ran into a problem finding all ladder components on some ladders. If you see this, please add it as an issue on this mod's GitHub page."); return; } LadderCollectorScript ladderCollectorScript = ladderCollectorItem.spawnPrefab.AddComponent<LadderCollectorScript>(); if ((Object)(object)ladderCollectorScript == (Object)null) { mls.LogError((object)"ladderCollectorScript failed"); return; } ((GrabbableObject)ladderCollectorScript).grabbable = true; ((GrabbableObject)ladderCollectorScript).grabbableToEnemies = false; ((GrabbableObject)ladderCollectorScript).itemProperties = ladderCollectorItem; ladderCollectorScript.lcAudioSource = ladderCollectorItem.spawnPrefab.GetComponent<AudioSource>(); ladderCollectorScript.teleportationLight = ladderCollectorItem.spawnPrefab.GetComponentInChildren<Light>(); List<Transform> list = ladderCollectorItem.spawnPrefab.GetComponentsInChildren<Transform>().ToList(); List<AudioClip> list2 = val5.LoadAllAssets<AudioClip>().ToList(); foreach (Transform item in list) { if (((Object)item).name.Equals("BaseNode")) { ladderCollectorScript.baseNode = item; } else if (((Object)item).name.Equals("LadderSpawnNode")) { ladderCollectorScript.ladderSpawnNode = item; } } foreach (AudioClip item2 in list2) { if (((Object)item2).name.Equals("spawnSFX3")) { ladderCollectorScript.spawnAudio = item2; } } if ((Object)(object)ladderCollectorScript.baseNode == (Object)null || (Object)(object)ladderCollectorScript.ladderSpawnNode == (Object)null || (Object)(object)ladderCollectorScript.spawnAudio == (Object)null || (Object)(object)ladderCollectorScript.lcAudioSource == (Object)null || (Object)(object)ladderCollectorScript.teleportationLight == (Object)null) { mls.LogError((object)"some components for ladderCollector couldn't be found!"); return; } NetworkPrefabs.RegisterNetworkPrefab(tinyLadderItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(bigLadderItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(hugeLadderItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(ultimateLadderItem.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(ladderCollectorItem.spawnPrefab); Utilities.FixMixerGroups(tinyLadderItem.spawnPrefab); Utilities.FixMixerGroups(bigLadderItem.spawnPrefab); Utilities.FixMixerGroups(hugeLadderItem.spawnPrefab); Utilities.FixMixerGroups(ultimateLadderItem.spawnPrefab); Utilities.FixMixerGroups(ladderCollectorItem.spawnPrefab); tinyLadderNode = ScriptableObject.CreateInstance<TerminalNode>(); tinyLadderNode.clearPreviousText = true; tinyLadderNode.displayText = "Awwww... tiny ladder! Can be used if the person climbing is also tiny!\n\n"; Items.RegisterShopItem(tinyLadderItem, (TerminalNode)null, (TerminalNode)null, tinyLadderNode, SyncedEntry<int>.op_Implicit(mySyncedConfigs.tinyLadderPrice)); bigLadderNode = ScriptableObject.CreateInstance<TerminalNode>(); bigLadderNode.clearPreviousText = true; bigLadderNode.displayText = "This ladder is 17m high, thats about 1,75x height of the standard ladder.\n\n"; Items.RegisterShopItem(bigLadderItem, (TerminalNode)null, (TerminalNode)null, bigLadderNode, SyncedEntry<int>.op_Implicit(mySyncedConfigs.bigLadderPrice)); hugeLadderNode = ScriptableObject.CreateInstance<TerminalNode>(); hugeLadderNode.clearPreviousText = true; hugeLadderNode.displayText = "This ladder is 34m high, thats about 3,5x height of the standard ladder.\n\n"; Items.RegisterShopItem(hugeLadderItem, (TerminalNode)null, (TerminalNode)null, hugeLadderNode, SyncedEntry<int>.op_Implicit(mySyncedConfigs.hugeLadderPrice)); ultimateLadderNode = ScriptableObject.CreateInstance<TerminalNode>(); ultimateLadderNode.clearPreviousText = true; ultimateLadderNode.displayText = "This ladder is 68m high, thats about 7x height of the standard ladder.\n\n"; Items.RegisterShopItem(ultimateLadderItem, (TerminalNode)null, (TerminalNode)null, ultimateLadderNode, SyncedEntry<int>.op_Implicit(mySyncedConfigs.ultimateLadderPrice)); ladderCollectorNode = ScriptableObject.CreateInstance<TerminalNode>(); ladderCollectorNode.clearPreviousText = true; ladderCollectorNode.displayText = "This device somehow detects and attracts ladders within an huge range.\n\n"; Items.RegisterShopItem(ladderCollectorItem, (TerminalNode)null, (TerminalNode)null, ladderCollectorNode, 75); originalItemNames.Add(tinyLadderItem, tinyLadderItem.itemName); originalItemNames.Add(bigLadderItem, bigLadderItem.itemName); originalItemNames.Add(hugeLadderItem, hugeLadderItem.itemName); originalItemNames.Add(ultimateLadderItem, ultimateLadderItem.itemName); originalItemNames.Add(ladderCollectorItem, ladderCollectorItem.itemName); Harmony.PatchAll(); mls.LogInfo((object)"builds completed and items should be in shop."); mls.LogInfo((object)"inoyu.GiantExtensionLadders v3.3.1 has fully loaded!"); } private void BuildLadderItemScript(List<MeshRenderer> meshRenderers, List<Animator> animators, List<Transform> transforms, List<AudioClip> audioClips, List<AudioSource> audioSources, List<InteractTrigger> interactTriggers, List<BoxCollider> boxColliders, LadderItemScript ladderItemScript) { propertyCounter = 0; foreach (MeshRenderer meshRenderer in meshRenderers) { if (((Object)meshRenderer).name.Equals("LadderBox")) { propertyCounter++; ((GrabbableObject)ladderItemScript).mainObjectRenderer = meshRenderer; break; } } foreach (Animator animator in animators) { if (((Object)animator).name.Equals("AnimContainer")) { propertyCounter++; ladderItemScript.ladderAnimator = animator; } if (((Object)animator).name.Equals("MeshContainer")) { propertyCounter++; ladderItemScript.ladderRotateAnimator = animator; } } foreach (Transform transform in transforms) { if (((Object)transform).name.Equals("Base")) { propertyCounter++; ladderItemScript.baseNode = transform; } if (((Object)transform).name.Equals("TopPosition")) { propertyCounter++; ladderItemScript.topNode = transform; } if (((Object)transform).name.Equals("TopCollisionNode")) { propertyCounter++; ladderItemScript.topCollisionNode = transform; } if (((Object)transform).name.Equals("MovableNode")) { propertyCounter++; ladderItemScript.moveableNode = transform; } } foreach (AudioClip audioClip in audioClips) { if (((Object)audioClip).name.Equals("ExtensionLadderHitWall")) { propertyCounter++; ladderItemScript.hitRoof = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderHitWall2")) { propertyCounter += 2; ladderItemScript.fullExtend = audioClip; ladderItemScript.hitWall = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderExtend")) { propertyCounter++; ladderItemScript.ladderExtendSFX = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderShrink")) { propertyCounter++; ladderItemScript.ladderShrinkSFX = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderAlarm")) { propertyCounter++; ladderItemScript.blinkWarningSFX = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderLidOpen")) { propertyCounter++; ladderItemScript.lidOpenSFX = audioClip; } } foreach (AudioSource audioSource in audioSources) { if (((Object)audioSource).name.Equals("LadderAudio")) { propertyCounter++; ladderItemScript.ladderAudio = audioSource; break; } } foreach (InteractTrigger interactTrigger in interactTriggers) { if (((Object)interactTrigger).name.Equals("ExtLadderTrigger")) { ladderItemScript.ladderScript = interactTrigger; propertyCounter++; break; } } foreach (BoxCollider boxCollider in boxColliders) { if (((Object)boxCollider).name.Equals("ExtLadderTrigger")) { propertyCounter++; ladderItemScript.interactCollider = (Collider)(object)boxCollider; } if (((Object)boxCollider).name.Equals("LadderBridgeCollider")) { propertyCounter++; ladderItemScript.bridgeCollider = (Collider)(object)boxCollider; } if (((Object)boxCollider).name.Equals("KillTrigger")) { propertyCounter++; ladderItemScript.killTrigger = (Collider)(object)boxCollider; } } if (propertyCounter != 19) { mls.LogError((object)("Some Components of " + ((Object)ladderItemScript).name + " are missing!")); isBuildSuccess = false; } } } internal enum GiantLadderType { TINY, BIG, HUGE, ULTIMATE } internal class LadderObject { internal List<MeshRenderer> meshRenderers { get; set; } internal List<Animator> animators { get; set; } internal List<Transform> transforms { get; set; } internal List<AudioClip> audioClips { get; set; } internal List<AudioSource> audioSources { get; set; } internal List<InteractTrigger> interactTriggers { get; set; } internal List<BoxCollider> boxColliders { get; set; } internal GameObject ladderPrefab { get; set; } internal GiantLadderType ladderType { get; private set; } internal float LADDER_MAX_EXTENSION { get; private set; } internal float LADDER_MIN_ROTATION_FOR_INTERACTION { get; private set; } internal int LADDER_LINECAST_CHECKS_MULTIPLIER { get; private set; } internal int LADDER_LINECAST_MIN_CHECK_HEIGHT { get; private set; } internal float LADDER_HEIGHT_MULTIPLIER { get; private set; } internal float LADDER_ROTATE_SPEED { get; private set; } internal bool LADDER_IS_CLIMBABLE { get; private set; } public LadderObject(float ladderMaxExtension, float ladderMinRotationForInteraction, float ladderRotateSpeed, bool ladderIsClimbable, GiantLadderType type) { LADDER_MAX_EXTENSION = ladderMaxExtension; LADDER_MIN_ROTATION_FOR_INTERACTION = ladderMinRotationForInteraction; LADDER_ROTATE_SPEED = ladderRotateSpeed; LADDER_IS_CLIMBABLE = ladderIsClimbable; ladderType = type; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "inoyu.GiantExtensionLadders"; public const string PLUGIN_NAME = "GiantExtensionLaddersV2"; public const string PLUGIN_VERSION = "3.3.1"; } } namespace GiantExtensionLaddersV2.Patches { [HarmonyPatch(typeof(InteractTrigger))] internal class LadderPlayerSnapPatch { private const float NEGATIVE_OFFSET_BASE_VALUE = 0.25f; private const float TINY_LADDER_OFFSET_BASE_VALUE = -0.215f; private const float OFFSET_BASE_VALUE = 0.035f; private const float BIGGER_LADDER_SIZE_START = 20f; private const int CLOSE_POS_ADDITIONAL_CHECKS = 10; private const int LADDER_BOT_RESET_AMOUNT = 2; private const int LADDER_TOP_RESET_AMOUNT = 5; private const float GROUND_OFFSET = 0.5f; private const float TINY_LADDER_GROUND_OFFSET = 0.05f; [HarmonyPrefix] [HarmonyPatch("ladderClimbAnimation")] public static void PatchLadderPlayerSnap(InteractTrigger __instance, ref PlayerControllerB playerController) { //IL_0033: 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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //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_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0105: 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_012b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: 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_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0184: 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_0281: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: 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_0294: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02a5: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_024a: 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_025b: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_025f: 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_0266: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: 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_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_021b: 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_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) LadderItemScript componentInParent = ((Component)__instance).GetComponentInParent<LadderItemScript>(); if ((Object)(object)componentInParent != (Object)null) { if (componentInParent.giantLadderType == GiantLadderType.TINY) { __instance.bottomOfLadderPosition.position = new Vector3(__instance.bottomOfLadderPosition.position.x, playerController.thisPlayerBody.position.y - 0.2f, __instance.bottomOfLadderPosition.position.z); GiantExtensionLaddersV2.isPlayerOnTinyLadder = true; } else { GiantExtensionLaddersV2.isPlayerOnTinyLadder = false; } Vector3 val = __instance.topOfLadderPosition.position - __instance.bottomOfLadderPosition.position; Vector3 val2 = Vector3.Normalize(val); float num = Vector3.Dot(Vector3.up, val2); float vector3CloseToLadder = GetVector3CloseToLadder(__instance.bottomOfLadderPosition.position, __instance.topOfLadderPosition.position, val2, playerController.thisPlayerBody.position); Vector3 val3 = __instance.bottomOfLadderPosition.position + vector3CloseToLadder * val2; float num2 = Vector3.Distance(__instance.topOfLadderPosition.position, __instance.bottomOfLadderPosition.position); Vector3 val4 = default(Vector3); ((Vector3)(ref val4))..ctor(0f, 0.035f, 0f); val4 *= vector3CloseToLadder; if (val3.y + val4.y >= __instance.topOfLadderPosition.position.y && vector3CloseToLadder > 5f) { val3 = __instance.bottomOfLadderPosition.position + (vector3CloseToLadder - 5f) * val2; } else if (vector3CloseToLadder < 2f && num2 >= 20f) { val4 += __instance.bottomOfLadderPosition.forward * 0.25f; } if (componentInParent.giantLadderType == GiantLadderType.TINY) { if (((GrabbableObject)componentInParent).isInShipRoom) { Vector3 val5 = __instance.bottomOfLadderPosition.forward * -0.215f * (1.3f - (num * 2f - 1f)); val4 += val5; val4 += val2 * 0.05f; } else { Vector3 val6 = __instance.bottomOfLadderPosition.forward * -0.215f * 0.75f; val4 += val6; val4 += val2 * 0.05f; } } else { val4 += val2 * 0.5f; } val3 += val4; __instance.ladderPlayerPositionNode.position = val3; playerController.thisPlayerBody.position = val3; } else { GiantExtensionLaddersV2.isPlayerOnTinyLadder = false; } } private static float GetVector3CloseToLadder(Vector3 bottomPos, Vector3 topPos, Vector3 normalizedLDV, Vector3 playerVector) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: 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) int num = 0; float num2 = float.MaxValue; float num3 = Vector3.Distance(bottomPos, topPos) + 10f; for (int i = 0; (float)i < num3; i++) { Vector3 val = bottomPos + (float)i * normalizedLDV; float num4 = Vector3.Distance(playerVector, val); if (num4 < num2) { num2 = num4; num = i; continue; } return num; } return num3 / 2f; } } [HarmonyPatch] public class LoadLadderConfigsPatch { private const bool debugLogsActive = false; internal const string DISABLED_LADDER_PREFIX = "- - - "; internal const string DISABLED_ITEM_NAME = "- - - (removed item: {0})"; internal const int DISABLED_ITEM_PRICE = 99999; private static List<Item> removedItemsTerminalFix = new List<Item>(); private static List<Item> removedItemsSafeFix = new List<Item>(); private static float methodUptime = 10f; private static float updateConfigStart = 3.5f; private static bool isPatchActive = true; private static bool isFirstPatch = true; private static bool wasFirstPatchFail = false; private static int amountOfRemovedItems = 0; [HarmonyPostfix] [HarmonyPatch(typeof(PlayerControllerB), "Update")] [HarmonyPriority(0)] public static void PatchLaddersConfigs() { if (isPatchActive && methodUptime > 0f) { methodUptime -= Time.deltaTime; if (methodUptime < updateConfigStart) { SyncLadderPrices(); } } else if (isPatchActive && methodUptime <= 0f) { EvaluateConfigSync(); if (isFirstPatch && wasFirstPatchFail) { GiantExtensionLaddersV2.mls.LogWarning((object)"Initial config sync failed, trying again..."); isFirstPatch = false; methodUptime = 10f; removedItemsTerminalFix = new List<Item>(); } else { isPatchActive = false; } } } [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "StartDisconnect")] public static void PlayerLeave() { removedItemsTerminalFix = new List<Item>(); removedItemsSafeFix = new List<Item>(); methodUptime = 10f; updateConfigStart = 4f; isPatchActive = true; isFirstPatch = true; wasFirstPatchFail = false; } private static void EvaluateConfigSync() { bool flag = true; foreach (ShopItem shopItem in Items.shopItems) { if (!shopItem.item.itemName.StartsWith("- - - ") && shopItem.item.itemName.Equals(GiantExtensionLaddersV2.tinyLadderItem.itemName) && shopItem.item.creditsWorth != GiantExtensionLaddersV2.mySyncedConfigs.tinyLadderPrice.Value) { flag = false; } else if (!shopItem.item.itemName.StartsWith("- - - ") && shopItem.item.itemName.Equals(GiantExtensionLaddersV2.bigLadderItem.itemName) && shopItem.item.creditsWorth != GiantExtensionLaddersV2.mySyncedConfigs.bigLadderPrice.Value) { flag = false; } else if (!shopItem.item.itemName.StartsWith("- - - ") && shopItem.item.itemName.Equals(GiantExtensionLaddersV2.hugeLadderItem.itemName) && shopItem.item.creditsWorth != GiantExtensionLaddersV2.mySyncedConfigs.hugeLadderPrice.Value) { flag = false; } else if (!shopItem.item.itemName.StartsWith("- - - ") && shopItem.item.itemName.Equals(GiantExtensionLaddersV2.ultimateLadderItem.itemName) && shopItem.item.creditsWorth != GiantExtensionLaddersV2.mySyncedConfigs.ultimateLadderPrice.Value) { flag = false; } } if (flag) { GiantExtensionLaddersV2.mls.LogInfo((object)"Config sync success! All settings should now be synced with the host's settings."); GiantExtensionLaddersV2.mls.LogInfo((object)"Updating sales..."); Object.FindObjectOfType<Terminal>().SetItemSales(); GiantExtensionLaddersV2.mls.LogInfo((object)"done!"); } else if (isFirstPatch) { wasFirstPatchFail = true; } else { GiantExtensionLaddersV2.mls.LogError((object)"Config sync failed! \n Some of your settings are not synchronized with the host settings! This can lead to players having differently priced ladders."); } } private static void SyncLadderPrices() { Terminal val = Object.FindObjectOfType<Terminal>(); if ((Object)(object)val == (Object)null) { GiantExtensionLaddersV2.mls.LogWarning((object)"Terminal was not found in scene!"); return; } amountOfRemovedItems = 0; UpdatePriceOrRemove(GiantExtensionLaddersV2.tinyLadderItem, SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isTinyLadderEnabled), SyncedEntry<int>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.tinyLadderPrice)); UpdatePriceOrRemove(GiantExtensionLaddersV2.bigLadderItem, SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isBigLadderEnabled), SyncedEntry<int>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.bigLadderPrice)); UpdatePriceOrRemove(GiantExtensionLaddersV2.hugeLadderItem, SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isHugeLadderEnabled), SyncedEntry<int>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.hugeLadderPrice)); UpdatePriceOrRemove(GiantExtensionLaddersV2.ultimateLadderItem, SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isUltimateLadderEnabled), SyncedEntry<int>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.ultimateLadderPrice)); UpdatePriceOrRemove(GiantExtensionLaddersV2.ladderCollectorItem, SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isLadderCollectorEnabled), SyncedEntry<int>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.ladderCollectorPrice)); } private static void UpdatePriceOrRemove(Item item, bool isItemEnabled, int updatedPrice) { if ((Object)(object)item != (Object)null) { if (isItemEnabled) { if (item.itemName.StartsWith("- - - ")) { try { item.itemName = DictionaryExtensions.Get<Item, string>((IDictionary<Item, string>)GiantExtensionLaddersV2.originalItemNames, item, (string)null); } catch (Exception) { GiantExtensionLaddersV2.mls.LogError((object)"There was an error with resetting a removed item name. If you are not the host, please restart your game."); } } Items.UpdateShopItemPrice(item, updatedPrice); } else { amountOfRemovedItems++; RemoveItem(item, Items.terminal, amountOfRemovedItems); } } else { GiantExtensionLaddersV2.mls.LogDebug((object)"item was null"); } } private static void RemoveItem(Item targetItem, Terminal terminal, int amountOfRemovedItems) { if (SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isSalesFixEasyActive) && !SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isDontFix)) { Item val = FindBuyableItem(targetItem, terminal); if ((Object)(object)val != (Object)null) { if (!removedItemsSafeFix.Contains(val)) { removedItemsSafeFix.Add(val); val.itemName = $"- - - (removed item: {removedItemsSafeFix.Count})"; val.creditsWorth = 99999; val.highestSalePercentage = 0; } } else { GiantExtensionLaddersV2.mls.LogWarning((object)"Item to be removed could not be found. Will remove the item the old way, this can lead to sales being displayed falsely!"); Items.RemoveShopItem(targetItem); } } else if (SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isSalesFixTerminalActive) && !SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isSalesFixEasyActive) && !SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isDontFix)) { int num = 0; for (int i = 0; i < terminal.buyableItemsList.Length; i++) { if (terminal.buyableItemsList[i].itemName == targetItem.itemName) { num = i; break; } } Item val2 = terminal.buyableItemsList[num]; Item val3 = terminal.buyableItemsList[terminal.buyableItemsList.Length - amountOfRemovedItems]; UpdateBuyItemIndex(val2, terminal.buyableItemsList.Length - amountOfRemovedItems); UpdateBuyItemIndex(val3, num); terminal.buyableItemsList[num] = val3; terminal.buyableItemsList[terminal.buyableItemsList.Length - amountOfRemovedItems] = val2; if (!removedItemsTerminalFix.Contains(targetItem)) { removedItemsTerminalFix.Add(targetItem); Items.RemoveShopItem(targetItem); } } else { Items.RemoveShopItem(targetItem); } } private static Item? FindBuyableItem(Item item, Terminal terminal) { Item[] buyableItemsList = terminal.buyableItemsList; foreach (Item val in buyableItemsList) { if (val.itemName.Equals(item.itemName)) { return val; } } return null; } private static void UpdateBuyItemIndex(Item item, int newIndex) { //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) Item item2 = item; TerminalKeyword val = Items.terminal.terminalNodes.allKeywords.First((TerminalKeyword keyword) => keyword.word == "buy"); TerminalNode result = val.compatibleNouns[0].result.terminalOptions[1].result; List<CompatibleNoun> source = val.compatibleNouns.ToList(); if (!Items.buyableItemAssetInfos.Any((BuyableItemAssetInfo x) => (Object)(object)x.itemAsset == (Object)(object)item2)) { bool flag = false; return; } BuyableItemAssetInfo asset = Items.buyableItemAssetInfos.First((BuyableItemAssetInfo x) => (Object)(object)x.itemAsset == (Object)(object)item2); if (!source.Any((CompatibleNoun noun) => (Object)(object)noun.noun == (Object)(object)asset.keyword)) { bool flag2 = false; return; } TerminalNode result2 = source.First((CompatibleNoun noun) => (Object)(object)noun.noun == (Object)(object)asset.keyword).result; bool flag3 = false; result2.buyItemIndex = newIndex; if (result2.terminalOptions.Length == 0) { bool flag4 = false; return; } CompatibleNoun[] terminalOptions = result2.terminalOptions; CompatibleNoun[] array = terminalOptions; foreach (CompatibleNoun val2 in array) { if ((Object)(object)val2.result != (Object)null && val2.result.buyItemIndex != -1) { val2.result.buyItemIndex = newIndex; } } } } [HarmonyPatch(typeof(ExtensionLadderItem))] internal class NormalLadderFallPatch { private static bool isLadderOnAnotherLadder; [HarmonyPatch("Update")] [HarmonyPrefix] private static void LadderFallPatch(ExtensionLadderItem __instance) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) RaycastHit val = default(RaycastHit); if (!((Object)(object)((GrabbableObject)__instance).playerHeldBy == (Object)null) || ((GrabbableObject)__instance).isHeld || ((GrabbableObject)__instance).isHeldByEnemy || !((GrabbableObject)__instance).reachedFloorTarget || !__instance.ladderActivated || !Physics.Raycast(((Component)__instance).transform.position, Vector3.down, ref val, 80f, 268437760, (QueryTriggerInteraction)1)) { return; } if ((Object)(object)((Component)((RaycastHit)(ref val)).collider).GetComponentInParent<LadderItemScript>() != (Object)null) { isLadderOnAnotherLadder = true; return; } if (isLadderOnAnotherLadder) { ((GrabbableObject)__instance).FallToGround(false, false, ((Component)__instance.baseNode).transform.position); } isLadderOnAnotherLadder = false; } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPatch("ShipLeave")] [HarmonyPrefix] public static void CollectLadders(StartOfRound __instance) { //IL_0085: Unknown result type (might be due to invalid IL or missing references) if (!SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isAutoCollectLaddersEnabled)) { return; } List<GrabbableObject> list = ((IEnumerable<GrabbableObject>)(object)Object.FindObjectsOfType<LadderItemScript>()).ToList(); list.AddRange(new <>z__ReadOnlyArray<GrabbableObject>(((IEnumerable<GrabbableObject>)(object)Object.FindObjectsOfType<ExtensionLadderItem>()).ToArray())); for (int i = 0; i < list.Count; i++) { LadderItemScript ladderItemScript = list[i] as LadderItemScript; GrabbableObject obj = list[i]; ExtensionLadderItem val = (ExtensionLadderItem)(object)((obj is ExtensionLadderItem) ? obj : null); if (!((Object)(object)ladderItemScript == (Object)null) || !((Object)(object)val == (Object)null)) { TeleportLadderItem(ladderItemScript, val, __instance.middleOfShipNode.position); } } } private static void TeleportLadderItem(LadderItemScript? ladder, ExtensionLadderItem? normalLadder, Vector3 position) { //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) GrabbableObject val = (GrabbableObject)(((object)ladder) ?? ((object)normalLadder)); if (!((Object)(object)val == (Object)null)) { bool flag = ((GrabbableObject)(ladder?)).isPocketed ?? ((GrabbableObject)(normalLadder?)).isPocketed ?? false; bool flag2 = ((GrabbableObject)(ladder?)).isHeld ?? ((GrabbableObject)(normalLadder?)).isHeld ?? false; bool flag3 = ((GrabbableObject)(ladder?)).isHeldByEnemy ?? ((GrabbableObject)(normalLadder?)).isHeldByEnemy ?? false; bool flag4 = ((GrabbableObject)(ladder?)).isBeingUsed ?? ((GrabbableObject)(normalLadder?)).isBeingUsed ?? false; if (!flag && !flag2 && !flag3 && (!flag4 || SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isCollectExtendedLaddersEnabled))) { ((Component)val).transform.position = position; val.FallToGround(false, false, ((Component)val).transform.position); StartOfRound.Instance.localPlayerController.SetItemInElevator(true, false, val); } } } } [HarmonyPatch(typeof(PlayerControllerB))] internal class TinyLadderClimbingSpeedPatch { private static float defaultClimbSpeed; private static bool isDefaultClimbSpeedSet; private const float CLIMB_SPEED_MULTIPLIER = 0.25f; [HarmonyPatch("Update")] [HarmonyPriority(200)] [HarmonyPostfix] private static void CrankThatClimbingSpeed(PlayerControllerB __instance) { if (!isDefaultClimbSpeedSet) { defaultClimbSpeed = __instance.climbSpeed; isDefaultClimbSpeedSet = true; } if (GiantExtensionLaddersV2.isPlayerOnTinyLadder) { if (__instance.isPlayerControlled && __instance.isClimbingLadder) { __instance.climbSpeed = defaultClimbSpeed * 0.25f; } } else { __instance.climbSpeed = defaultClimbSpeed; } } } [HarmonyPatch(typeof(InteractTrigger))] internal class UseLadderInShipPatch { internal static bool changedPlayerLocation; internal static PlayerControllerB playerWithChangedLocation; private const float minPlayerSizeForTinyLadder = 0.25f; [HarmonyPatch("Interact")] [HarmonyPrefix] public static void PlayerIsInShipPatch(InteractTrigger __instance, ref Transform playerTransform) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) LadderItemScript componentInParent = ((Component)__instance).GetComponentInParent<LadderItemScript>(); PlayerControllerB component = ((Component)playerTransform).GetComponent<PlayerControllerB>(); if ((Object)(object)componentInParent != (Object)null && (Object)(object)component != (Object)null && !component.isInHangarShipRoom) { if (componentInParent.giantLadderType == GiantLadderType.TINY && component.thisPlayerBody.localScale.y > 0.25f) { changedPlayerLocation = true; component.isInHangarShipRoom = true; playerWithChangedLocation = component; } } else if ((Object)(object)componentInParent != (Object)null && (Object)(object)component != (Object)null && component.isInHangarShipRoom && componentInParent.giantLadderType == GiantLadderType.TINY && component.thisPlayerBody.localScale.y <= 0.25f) { changedPlayerLocation = true; component.isInHangarShipRoom = false; playerWithChangedLocation = component; } } [HarmonyPatch("Update")] [HarmonyPriority(700)] [HarmonyPrefix] public static void ResetPlayerIsInShipPatch() { if ((Object)(object)playerWithChangedLocation != (Object)null && changedPlayerLocation) { playerWithChangedLocation.isInHangarShipRoom = !playerWithChangedLocation.isInHangarShipRoom; changedPlayerLocation = false; playerWithChangedLocation = null; } } } } namespace GiantExtensionLaddersV2.ConfigStuff { [DataContract] internal class MySyncedConfigs : SyncedConfig2<MySyncedConfigs> { private const int MIN_LADDER_PRICE = 1; private const int MAX_LADDER_PRICE = 9999; private const float MIN_EXT_TIME = 3f; private const float MAX_EXT_TIME = 999f; private const float MIN_TP_FREQ = 1f; private const float MAX_TP_FREQ = 60f; private const int tinyLadderBasePrice = 15; private const int bigLadderBasePrice = 75; private const int hugeLadderBasePrice = 160; private const int ultimateLadderBasePrice = 250; private const int ladderCollectorBasePrice = 75; private const float tinyLadderExtensionTimeBase = 10f; private const float bigLadderExtensionTimeBase = 25f; private const float hugeLadderExtensionTimeBase = 30f; private const float ultimateLadderExtensionTimeBase = 60f; private const float teleportFrequencyBase = 0.8f; [SyncedEntryField] internal SyncedEntry<bool> isTinyLadderEnabled; [SyncedEntryField] internal SyncedEntry<bool> isBigLadderEnabled; [SyncedEntryField] internal SyncedEntry<bool> isHugeLadderEnabled; [SyncedEntryField] internal SyncedEntry<bool> isUltimateLadderEnabled; [SyncedEntryField] internal SyncedEntry<bool> isLadderCollectorEnabled; [SyncedEntryField] internal SyncedEntry<float> tinyLadderExtTime; [SyncedEntryField] internal SyncedEntry<float> bigLadderExtTime; [SyncedEntryField] internal SyncedEntry<float> hugeLadderExtTime; [SyncedEntryField] internal SyncedEntry<float> ultimateLadderExtTime; [SyncedEntryField] internal SyncedEntry<int> tinyLadderPrice; [SyncedEntryField] internal SyncedEntry<int> bigLadderPrice; [SyncedEntryField] internal SyncedEntry<int> hugeLadderPrice; [SyncedEntryField] internal SyncedEntry<int> ultimateLadderPrice; [SyncedEntryField] internal SyncedEntry<int> ladderCollectorPrice; [SyncedEntryField] internal SyncedEntry<bool> isTinyLadderAlwaysActive; [SyncedEntryField] internal SyncedEntry<bool> isBigLadderAlwaysActive; [SyncedEntryField] internal SyncedEntry<bool> isHugeLadderAlwaysActive; [SyncedEntryField] internal SyncedEntry<bool> isUltimateLadderAlwaysActive; [SyncedEntryField] internal SyncedEntry<bool> isAutoCollectLaddersEnabled; [SyncedEntryField] internal SyncedEntry<bool> isTeleportFromShipRoomEnabled; [SyncedEntryField] internal SyncedEntry<bool> isCollectExtendedLaddersEnabled; [SyncedEntryField] internal SyncedEntry<float> teleportFrequency; [SyncedEntryField] internal SyncedEntry<bool> isSalesFixEasyActive; [SyncedEntryField] internal SyncedEntry<bool> isSalesFixTerminalActive; [SyncedEntryField] internal SyncedEntry<bool> isDontFix; internal ConfigEntry<string> salesFixHeader; private static ManualLogSource mlsConfig = Logger.CreateLogSource("inoyu.GiantExtensionLadders.Config"); internal MySyncedConfigs(ConfigFile cfg) : base("GiantExtensionLaddersV2") { //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Expected O, but got Unknown //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Expected O, but got Unknown //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Expected O, but got Unknown //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Expected O, but got Unknown //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Expected O, but got Unknown //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Expected O, but got Unknown //IL_0393: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Expected O, but got Unknown isTinyLadderEnabled = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "DeactivateLadders", "isTinyLadderEnabled", true, "Tiny ladder doesn't appear in the shop if this is set to false."); isBigLadderEnabled = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "DeactivateLadders", "isBigLadderEnabled", true, "Big ladder doesn't appear in the shop if this is set to false."); isHugeLadderEnabled = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "DeactivateLadders", "isHugeLadderEnabled", true, "Huge ladder doesn't appear in the shop if this is set to false."); isUltimateLadderEnabled = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "DeactivateLadders", "isUltimateLadderEnabled", true, "Ultimate ladder doesn't appear in the shop if this is set to false."); isLadderCollectorEnabled = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "DeactivateLadders", "isLadderCollectorEnabled", true, "Ladder Collector doesn't appear in the shop if this is set to false."); AcceptableValueRange<int> val = new AcceptableValueRange<int>(1, 9999); tinyLadderPrice = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, "LadderPrices", "tinyLadderPrice", 15, new ConfigDescription("Sets the price of the tiny ladder.", (AcceptableValueBase)(object)val, Array.Empty<object>())); bigLadderPrice = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, "LadderPrices", "bigLadderPrice", 75, new ConfigDescription("Sets the price of the big ladder.", (AcceptableValueBase)(object)val, Array.Empty<object>())); hugeLadderPrice = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, "LadderPrices", "hugeLadderPrice", 160, new ConfigDescription("Sets the price of the huge ladder.", (AcceptableValueBase)(object)val, Array.Empty<object>())); ultimateLadderPrice = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, "LadderPrices", "ultimateLadderPrice", 250, new ConfigDescription("Sets the price of the ultimate ladder.", (AcceptableValueBase)(object)val, Array.Empty<object>())); ladderCollectorPrice = SyncedBindingExtensions.BindSyncedEntry<int>(cfg, "LadderPrices", "ladderCollectorItemPrice", 75, new ConfigDescription("Sets the price of ladder collector.", (AcceptableValueBase)(object)val, Array.Empty<object>())); isTinyLadderAlwaysActive = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "LadderAlwaysActive", "isTinyLadderAlwaysActive", false, "Sets the tiny ladder to always being extended."); isBigLadderAlwaysActive = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "LadderAlwaysActive", "isBigLadderAlwaysActive", false, "Sets the big ladder to always being extended."); isHugeLadderAlwaysActive = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "LadderAlwaysActive", "isHugeLadderAlwaysActive", false, "Sets the huge ladder to always being extended."); isUltimateLadderAlwaysActive = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "LadderAlwaysActive", "isUltimateLadderAlwaysActive", false, "Sets the ultimate ladder to always being extended."); AcceptableValueRange<float> val2 = new AcceptableValueRange<float>(3f, 999f); tinyLadderExtTime = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, "LadderExtensionTime", "tinyLadderExtensionTime", 10f, new ConfigDescription("Amount of seconds the tiny ladder stays extended.", (AcceptableValueBase)(object)val2, Array.Empty<object>())); bigLadderExtTime = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, "LadderExtensionTime", "bigLadderExtensionTime", 25f, new ConfigDescription("Amount of seconds the big ladder stays extended.", (AcceptableValueBase)(object)val2, Array.Empty<object>())); hugeLadderExtTime = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, "LadderExtensionTime", "hugeLadderExtensionTime", 30f, new ConfigDescription("Amount of seconds the huge ladder stays extended.", (AcceptableValueBase)(object)val2, Array.Empty<object>())); ultimateLadderExtTime = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, "LadderExtensionTime", "ultimateLadderExtensionTime", 60f, new ConfigDescription("Amount of seconds the ultimate ladder stays extended.", (AcceptableValueBase)(object)val2, Array.Empty<object>())); salesFixHeader = cfg.Bind<string>("SalesBugfixMethod", "WhatIsThisConfigSection?", "(„• ᴗ •„) I am a happy placeholder!", "The sales bug is a relatively small bug that shifts sales by one slot occasionally. " + Environment.NewLine + "To fix this I have two solutions: the safe one, which will most likely always work and the experimental one, which looks way nicer in the terminal but could cause some issues."); isSalesFixEasyActive = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "SalesBugfixMethod", "safeSalesFix", true, "This will fix sales in a very safe way, but disabled ladders will appear as an item named \"- - - (removed item: {0})\" in the store."); isSalesFixTerminalActive = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "SalesBugfixMethod", "experimentalSalesFix", false, "This will fix sales and fully remove disabled ladders from the store without \"- - - (removed item: {0})\" being displayed." + Environment.NewLine + "WARNING: This might cause store related bugs or have influence on the compatibility with other mods!"); isDontFix = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "SalesBugfixMethod", "dontFixSales", false, "This will not fix the sales, resulting in sales sometimes being displayed on an item which is not on sale (or the opposite of that)."); isAutoCollectLaddersEnabled = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "LadderCollector", "enableAutoCollectLadders", false, "This will try to teleport all remaining ladders on the map to the ship when pulling the lever to leave the planet."); isTeleportFromShipRoomEnabled = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "LadderCollector", "allowTeleportFromShipRoom", true, "This allows the ladder collector to teleport ladders that are in the ship room (or very close to it)."); teleportFrequency = SyncedBindingExtensions.BindSyncedEntry<float>(cfg, "LadderCollector", "ladderTeleportFrequency", 0.8f, new ConfigDescription("Time between ladder-teleports (in seconds)", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 60f), Array.Empty<object>())); isCollectExtendedLaddersEnabled = SyncedBindingExtensions.BindSyncedEntry<bool>(cfg, "LadderCollector", "collectExtendedLadders", true, "This allows the ladder collector to teleport ladders that are extended."); ConfigManager.Register<MySyncedConfigs>((SyncedConfig2<MySyncedConfigs>)(object)this); } } } namespace GiantExtensionLaddersV2.Behaviours { internal class LadderCollectorScript : GrabbableObject { [CompilerGenerated] private sealed class <SpawnLaddersAnim>d__12 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public List<GrabbableObject> ladders; public LadderCollectorScript <>4__this; private List<GrabbableObject> <laddersToTeleport>5__1; private List<GrabbableObject>.Enumerator <>s__2; private GrabbableObject <ladder>5__3; private bool <areLadderTeleportConditionsMet>5__4; private int <i>5__5; private LadderItemScript <ladder>5__6; private ExtensionLadderItem <normalLadder>5__7; private float <baseNodeRotationAmount>5__8; object? IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object? IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SpawnLaddersAnim>d__12(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <laddersToTeleport>5__1 = null; <>s__2 = default(List<GrabbableObject>.Enumerator); <ladder>5__3 = null; <ladder>5__6 = null; <normalLadder>5__7 = null; <>1__state = -2; } private bool MoveNext() { //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; <laddersToTeleport>5__1 = new List<GrabbableObject>(); <>s__2 = ladders.GetEnumerator(); try { while (<>s__2.MoveNext()) { <ladder>5__3 = <>s__2.Current; <areLadderTeleportConditionsMet>5__4 = <ladder>5__3.isInFactory == StartOfRound.Instance.localPlayerController.isInsideFactory && (!<ladder>5__3.isInShipRoom || SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isTeleportFromShipRoomEnabled)); if (<areLadderTeleportConditionsMet>5__4) { <laddersToTeleport>5__1.Add(<ladder>5__3); } <ladder>5__3 = null; } } finally { ((IDisposable)<>s__2).Dispose(); } <>s__2 = default(List<GrabbableObject>.Enumerator); <>4__this.teleportTimer = (float)<laddersToTeleport>5__1.Count * <>4__this.waitBetweenTeleport + 1f; <>4__this.isTimerActive = true; <i>5__5 = 0; break; case 1: <>1__state = -1; goto IL_025e; case 2: { <>1__state = -1; <ladder>5__6 = null; <normalLadder>5__7 = null; goto IL_025e; } IL_025e: <i>5__5++; break; } if (<i>5__5 < <laddersToTeleport>5__1.Count) { <ladder>5__6 = <laddersToTeleport>5__1[<i>5__5] as LadderItemScript; ref ExtensionLadderItem reference = ref <normalLadder>5__7; GrabbableObject obj = <laddersToTeleport>5__1[<i>5__5]; reference = (ExtensionLadderItem)(object)((obj is ExtensionLadderItem) ? obj : null); <baseNodeRotationAmount>5__8 = 360f / (float)<laddersToTeleport>5__1.Count; ((Component)<>4__this.baseNode).transform.rotation = Quaternion.Euler(0f, (float)<i>5__5 * <baseNodeRotationAmount>5__8, 0f); if ((Object)(object)<ladder>5__6 == (Object)null && (Object)(object)<normalLadder>5__7 == (Object)null) { <>2__current = null; <>1__state = 1; return true; } <>2__current = <>4__this.TeleportLadderItem(<ladder>5__6, <normalLadder>5__7, <>4__this.ladderSpawnNode.position, ((Component)<>4__this.baseNode).transform.rotation); <>1__state = 2; return true; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <TeleportLadderItem>d__13 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LadderItemScript ladder; public ExtensionLadderItem normalLadder; public Vector3 position; public Quaternion rotation; public LadderCollectorScript <>4__this; private GrabbableObject <item>5__1; private bool <isPocketed>5__2; private bool <isHeld>5__3; private bool <isHeldByEnemy>5__4; private bool <isBeingUsed>5__5; private bool <ladderAnimationBegun>5__6; object? IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object? IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <TeleportLadderItem>d__13(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <item>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_02b4: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <item>5__1 = (GrabbableObject)(((object)ladder) ?? ((object)normalLadder)); if ((Object)(object)<item>5__1 == (Object)null) { <>2__current = null; <>1__state = 1; return true; } <isPocketed>5__2 = ((GrabbableObject)(ladder?)).isPocketed ?? ((GrabbableObject)(normalLadder?)).isPocketed ?? false; <isHeld>5__3 = ((GrabbableObject)(ladder?)).isHeld ?? ((GrabbableObject)(normalLadder?)).isHeld ?? false; <isHeldByEnemy>5__4 = ((GrabbableObject)(ladder?)).isHeldByEnemy ?? ((GrabbableObject)(normalLadder?)).isHeldByEnemy ?? false; <isBeingUsed>5__5 = ((GrabbableObject)(ladder?)).isBeingUsed ?? ((GrabbableObject)(normalLadder?)).isBeingUsed ?? false; <ladderAnimationBegun>5__6 = ladder?.ladderAnimationBegun ?? normalLadder?.ladderAnimationBegun ?? false; if (!<isPocketed>5__2 && !<isHeld>5__3 && !<isHeldByEnemy>5__4 && !<isBeingUsed>5__5 && (!<ladderAnimationBegun>5__6 || SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isCollectExtendedLaddersEnabled))) { <>4__this.teleportationLight.intensity = 0f; ((MonoBehaviour)<>4__this).StartCoroutine(<>4__this.TeleportLightAnim()); <>4__this.lcAudioSource.pitch = Random.Range(0.94f, 1.06f); <>4__this.lcAudioSource.PlayOneShot(<>4__this.spawnAudio); ((Component)<item>5__1).transform.position = position; ((Component)<item>5__1).transform.localEulerAngles = Vector3.zero; ((Component)<item>5__1).transform.eulerAngles = Vector3.zero; ((Component)<item>5__1).transform.localRotation = Quaternion.Euler(0f, 0f, 0f); ((Component)<item>5__1).transform.rotation = rotation; <item>5__1.FallToGround(false, false, ((Component)<>4__this).transform.position); StartOfRound.Instance.localPlayerController.SetItemInElevator(<>4__this.wasPlayerInShipRoom, false, <item>5__1); <>2__current = (object)new WaitForSeconds(<>4__this.waitBetweenTeleport); <>1__state = 2; return true; } break; case 1: <>1__state = -1; return false; case 2: <>1__state = -1; break; } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <TeleportLightAnim>d__14 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public LadderCollectorScript <>4__this; private float <numberOfSteps>5__1; private float <maxIntensity>5__2; private float <intensityPerStep>5__3; private int <i>5__4; private int <i>5__5; object? IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object? IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <TeleportLightAnim>d__14(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <numberOfSteps>5__1 = 100f * <>4__this.waitBetweenTeleport / 2f; <maxIntensity>5__2 = 800f; <intensityPerStep>5__3 = <maxIntensity>5__2 / <numberOfSteps>5__1; <i>5__4 = 0; goto IL_00c5; case 1: <>1__state = -1; <i>5__4++; goto IL_00c5; case 2: { <>1__state = -1; <i>5__5++; break; } IL_00c5: if ((float)<i>5__4 < <numberOfSteps>5__1) { Light? teleportationLight = <>4__this.teleportationLight; teleportationLight.intensity += <intensityPerStep>5__3; <>2__current = (object)new WaitForSeconds(0.01f); <>1__state = 1; return true; } <i>5__5 = 0; break; } if ((float)<i>5__5 < <numberOfSteps>5__1) { Light? teleportationLight2 = <>4__this.teleportationLight; teleportationLight2.intensity -= <intensityPerStep>5__3; <>2__current = (object)new WaitForSeconds(0.01f); <>1__state = 2; return true; } <>4__this.teleportationLight.intensity = 0f; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public Transform? baseNode; public Transform? ladderSpawnNode; public AudioSource? lcAudioSource; public AudioClip? spawnAudio; public Light? teleportationLight; private bool wasPlayerInShipRoom = false; private float teleportTimer = 0f; private bool isTimerActive = false; private float waitBetweenTeleport = 0.8f; public override void Update() { ((GrabbableObject)this).Update(); if (isTimerActive && teleportTimer > 0f) { teleportTimer -= Time.deltaTime; } else if (isTimerActive) { isTimerActive = false; } } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_0051: 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) ((GrabbableObject)this).ItemActivate(used, buttonDown); waitBetweenTeleport = GiantExtensionLaddersV2.mySyncedConfigs.teleportFrequency.Value; if (!StartOfRound.Instance.inShipPhase && !isTimerActive) { if (((NetworkBehaviour)this).IsOwner) { base.playerHeldBy.DiscardHeldObject(false, (NetworkObject)null, default(Vector3), true); } wasPlayerInShipRoom = false; if (StartOfRound.Instance.localPlayerController.isInHangarShipRoom) { wasPlayerInShipRoom = true; } CollectLadders(); } } private void CollectLadders() { List<GrabbableObject> list = ((IEnumerable<GrabbableObject>)(object)Object.FindObjectsOfType<LadderItemScript>()).ToList(); list.AddRange(new <>z__ReadOnlyArray<GrabbableObject>(((IEnumerable<GrabbableObject>)(object)Object.FindObjectsOfType<ExtensionLadderItem>()).ToArray())); ((MonoBehaviour)this).StartCoroutine(SpawnLaddersAnim(list)); } [IteratorStateMachine(typeof(<SpawnLaddersAnim>d__12))] private IEnumerator SpawnLaddersAnim(List<GrabbableObject> ladders) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <SpawnLaddersAnim>d__12(0) { <>4__this = this, ladders = ladders }; } [IteratorStateMachine(typeof(<TeleportLadderItem>d__13))] private IEnumerator TeleportLadderItem(LadderItemScript? ladder, ExtensionLadderItem? normalLadder, Vector3 position, Quaternion rotation) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <TeleportLadderItem>d__13(0) { <>4__this = this, ladder = ladder, normalLadder = normalLadder, position = position, rotation = rotation }; } [IteratorStateMachine(typeof(<TeleportLightAnim>d__14))] private IEnumerator TeleportLightAnim() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <TeleportLightAnim>d__14(0) { <>4__this = this }; } public override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } public override string __getTypeName() { return "LadderCollector"; } } internal class LadderItemScript : GrabbableObject { [CompilerGenerated] private sealed class <LadderAnimation>d__53 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public bool isSkipExtension; public float externalRotNormalTime; public LadderItemScript <>4__this; private float <ladderMaxExtension>5__1; private float <ladderExtendAmountNormalized>5__2; private float <ladderRotateAmountNormalized>5__3; private float <currentNormalizedTime>5__4; private float <extensionSpeedMultiplier2>5__5; private float <newColliderScale>5__6; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <LadderAnimation>d__53(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Expected O, but got Unknown //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_02f9: Unknown result type (might be due to invalid IL or missing references) //IL_07ab: Unknown result type (might be due to invalid IL or missing references) //IL_07fd: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Unknown result type (might be due to invalid IL or missing references) //IL_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04d0: Unknown result type (might be due to invalid IL or missing references) //IL_04e7: Unknown result type (might be due to invalid IL or missing references) //IL_04ec: Unknown result type (might be due to invalid IL or missing references) //IL_0549: Unknown result type (might be due to invalid IL or missing references) //IL_03e6: Unknown result type (might be due to invalid IL or missing references) //IL_03fb: 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_0410: Unknown result type (might be due to invalid IL or missing references) //IL_0472: Unknown result type (might be due to invalid IL or missing references) //IL_0a52: Unknown result type (might be due to invalid IL or missing references) //IL_0a71: Unknown result type (might be due to invalid IL or missing references) //IL_0a7b: Unknown result type (might be due to invalid IL or missing references) //IL_0aa6: Unknown result type (might be due to invalid IL or missing references) //IL_0ac5: Unknown result type (might be due to invalid IL or missing references) //IL_0acf: Unknown result type (might be due to invalid IL or missing references) //IL_0afa: Unknown result type (might be due to invalid IL or missing references) //IL_0b19: Unknown result type (might be due to invalid IL or missing references) //IL_0b23: Unknown result type (might be due to invalid IL or missing references) //IL_0b4e: Unknown result type (might be due to invalid IL or missing references) //IL_0b6d: Unknown result type (might be due to invalid IL or missing references) //IL_0b77: Unknown result type (might be due to invalid IL or missing references) //IL_08f9: Unknown result type (might be due to invalid IL or missing references) //IL_0919: Unknown result type (might be due to invalid IL or missing references) //IL_0923: Unknown result type (might be due to invalid IL or missing references) //IL_094e: Unknown result type (might be due to invalid IL or missing references) //IL_096e: Unknown result type (might be due to invalid IL or missing references) //IL_0978: Unknown result type (might be due to invalid IL or missing references) //IL_09a3: Unknown result type (might be due to invalid IL or missing references) //IL_09c2: Unknown result type (might be due to invalid IL or missing references) //IL_09cc: Unknown result type (might be due to invalid IL or missing references) //IL_09f7: Unknown result type (might be due to invalid IL or missing references) //IL_0a16: Unknown result type (might be due to invalid IL or missing references) //IL_0a20: Unknown result type (might be due to invalid IL or missing references) //IL_0572: Unknown result type (might be due to invalid IL or missing references) //IL_057c: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <ladderMaxExtension>5__1 = <>4__this.GetLadderExtensionDistance(); <ladderExtendAmountNormalized>5__2 = <ladderMaxExtension>5__1 / <>4__this.maxExtension; <ladderRotateAmountNormalized>5__3 = 1f; <currentNormalizedTime>5__4 = 0f; <extensionSpeedMultiplier2>5__5 = 0.1f; <>4__this.ladderAudio.volume = 1f; <>4__this.ladderScript.interactable = false; <>4__this.interactCollider.enabled = false; <>4__this.bridgeCollider.enabled = false; <>4__this.killTrigger.enabled = false; if (!isSkipExtension) { <>4__this.ladderAnimator.SetBool("openLid", false); <>4__this.ladderAnimator.SetBool("extend", false); <>2__current = null; <>1__state = 1; return true; } goto IL_058d; case 1: <>1__state = -1; <>4__this.ladderAnimator.SetBool("openLid", true); ((Component)<>4__this.ladderAudio).transform.position = ((Component)<>4__this).transform.position; <>4__this.ladderAudio.PlayOneShot(<>4__this.lidOpenSFX, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)<>4__this.ladderAudio).transform.position, 18f, 0.8f, 0, ((GrabbableObject)<>4__this).isInShipRoom, 0); <>2__current = (object)new WaitForSeconds(1f); <>1__state = 2; return true; case 2: <>1__state = -1; <>4__this.ladderAnimator.SetBool("extend", true); <>4__this.ladderAudio.clip = <>4__this.ladderExtendSFX; <>4__this.ladderAudio.Play(); <ladderMaxExtension>5__1 += ((Component)<>4__this.baseNode).transform.position.y + 4f; goto IL_02e1; case 3: <>1__state = -1; goto IL_02e1; case 4: <>1__state = -1; goto IL_058d; case 5: { <>1__state = -1; break; } IL_02e1: if (<currentNormalizedTime>5__4 < 2f && <>4__this.topCollisionNode.position.y < <ladderMaxExtension>5__1) { <extensionSpeedMultiplier2>5__5 += Time.deltaTime * 2f; <currentNormalizedTime>5__4 = Mathf.Min(<currentNormalizedTime>5__4 + Time.deltaTime * <extensionSpeedMultiplier2>5__5, 2f); <>4__this.ladderAnimator.SetFloat("extensionAmount", <currentNormalizedTime>5__4); <>2__current = null; <>1__state = 3; return true; } if (<>4__this.topCollisionNode.position.y >= <ladderMaxExtension>5__1) { <>4__this.hasHitRoof = true; } else { <>4__this.hasHitRoof = false; } <>4__this.extendAmount = <currentNormalizedTime>5__4; <>4__this.interactCollider.enabled = true; <>4__this.bridgeCollider.enabled = false; <>4__this.killTrigger.enabled = false; <>4__this.ladderAudio.Stop(); if (<ladderExtendAmountNormalized>5__2 == 1f) { ((Component)<>4__this.ladderAudio).transform.position = ((Component)<>4__this.baseNode).transform.position + ((Component)<>4__this.baseNode).transform.up * <>4__this.maxExtension; <>4__this.ladderAudio.PlayOneShot(<>4__this.fullExtend, 0.7f); WalkieTalkie.TransmitOneShotAudio(<>4__this.ladderAudio, <>4__this.fullExtend, 0.7f); RoundManager.Instance.PlayAudibleNoise(((Component)<>4__this.ladderAudio).transform.position, 8f, 0.5f, 0, ((GrabbableObject)<>4__this).isInShipRoom, 0); } else { ((Component)<>4__this.ladderAudio).transform.position = ((Component)<>4__this.baseNode).transform.position + ((Component)<>4__this.baseNode).transform.up * (<ladderExtendAmountNormalized>5__2 * <>4__this.maxExtension); <>4__this.ladderAudio.PlayOneShot(<>4__this.hitRoof); WalkieTalkie.TransmitOneShotAudio(<>4__this.ladderAudio, <>4__this.hitRoof, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)<>4__this.ladderAudio).transform.position, 17f, 0.8f, 0, ((GrabbableObject)<>4__this).isInShipRoom, 0); } <>2__current = (object)new WaitForSeconds(0.4f); <>1__state = 4; return true; IL_058d: <>4__this.ladderAudio.clip = <>4__this.ladderFallSFX; <>4__this.ladderAudio.Play(); <>4__this.ladderAudio.volume = 0f; <extensionSpeedMultiplier2>5__5 = <>4__this.ladderRotateSpeedMultiplier; <currentNormalizedTime>5__4 = 0f; <ladderRotateAmountNormalized>5__3 = Mathf.Clamp(<>4__this.GetLadderRotationDegrees(90f) / -90f, 0f, 0.99f); if (externalRotNormalTime > 0.01f) { <ladderRotateAmountNormalized>5__3 = 0.99f; } if (externalRotNormalTime > 0f) { <currentNormalizedTime>5__4 = externalRotNormalTime; } break; } if (<currentNormalizedTime>5__4 < <ladderRotateAmountNormalized>5__3) { <extensionSpeedMultiplier2>5__5 += Time.deltaTime * 2f; <currentNormalizedTime>5__4 = Mathf.Min(<currentNormalizedTime>5__4 + Time.deltaTime * <extensionSpeedMultiplier2>5__5, <ladderRotateAmountNormalized>5__3); if (<currentNormalizedTime>5__4 > 0.3f && <ladderExtendAmountNormalized>5__2 > 0.6f) { <>4__this.killTrigger.enabled = true; } <>4__this.ladderAudio.volume = Mathf.Min(<>4__this.ladderAudio.volume + Time.deltaTime * 1.75f, 1f); <>4__this.ladderRotateAnimator.SetFloat("rotationAmount", <currentNormalizedTime>5__4); <>2__current = null; <>1__state = 5; return true; } <>4__this.rotateAmount = <ladderRotateAmountNormalized>5__3; <>4__this.ladderAudio.volume = 1f; <>4__this.ladderAudio.Stop(); ((Component)<>4__this.ladderAudio).transform.position = ((Component)<>4__this.moveableNode).transform.position; <>4__this.ladderAudio.PlayOneShot(<>4__this.hitWall, Mathf.Min(<ladderRotateAmountNormalized>5__3 + 0.3f, 1f)); RoundManager.Instance.PlayAudibleNoise(((Component)<>4__this.ladderAudio).transform.position, 18f, 0.7f, 0, ((GrabbableObject)<>4__this).isInShipRoom, 0); if (<>4__this.isClimbable && <ladderRotateAmountNormalized>5__3 * 90f < <>4__this.minInteractableRotation) { <>4__this.ladderScript.interactable = true; <>4__this.interactCollider.enabled = true; } else { <>4__this.bridgeCollider.enabled = true; } <>4__this.killTrigger.enabled = false; if (<>4__this.hasHitRoof) { <newColliderScale>5__6 = (100f - <>4__this.maxExtension) / 100f * 5.16f / 6f; ((Component)<>4__this.interactCollider).transform.localScale = new Vector3(((Component)<>4__this.interactCollider).transform.localScale.x, <newColliderScale>5__6, ((Component)<>4__this.interactCollider).transform.localScale.z); ((Component)<>4__this.bridgeCollider).transform.localScale = new Vector3(((Component)<>4__this.bridgeCollider).transform.localScale.x, <newColliderScale>5__6, ((Component)<>4__this.bridgeCollider).transform.localScale.z); ((Component)<>4__this.interactCollider).transform.localPosition = new Vector3(((Component)<>4__this.interactCollider).transform.localPosition.x, 1f, ((Component)<>4__this.interactCollider).transform.localPosition.z); ((Component)<>4__this.bridgeCollider).transform.localPosition = new Vector3(((Component)<>4__this.bridgeCollider).transform.localPosition.x, 1f, ((Component)<>4__this.bridgeCollider).transform.localPosition.z); } else { ((Component)<>4__this.interactCollider).transform.localScale = new Vector3(((Component)<>4__this.interactCollider).transform.localScale.x, 5.15892f, ((Component)<>4__this.interactCollider).transform.localScale.z); ((Component)<>4__this.bridgeCollider).transform.localScale = new Vector3(((Component)<>4__this.bridgeCollider).transform.localScale.x, 5.15892f, ((Component)<>4__this.bridgeCollider).transform.localScale.z); ((Component)<>4__this.interactCollider).transform.localPosition = new Vector3(((Component)<>4__this.interactCollider).transform.localPosition.x, 3.8f, ((Component)<>4__this.interactCollider).transform.localPosition.z); ((Component)<>4__this.bridgeCollider).transform.localPosition = new Vector3(((Component)<>4__this.bridgeCollider).transform.localPosition.x, 3.29f, ((Component)<>4__this.bridgeCollider).transform.localPosition.z); } return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private bool ladderActivated; internal bool ladderAnimationBegun; private Coroutine ladderAnimationCoroutine; private RaycastHit hit; private int layerMask = 268437761; private float rotateAmount; private float extendAmount; private float ladderTimer; private bool ladderBlinkWarning; private bool ladderShrunkAutomatically; private AudioClip ladderFallSFX; public Animator ladderAnimator; public Animator ladderRotateAnimator; public Transform baseNode; public Transform topNode; public Transform moveableNode; public AudioClip hitRoof; public AudioClip fullExtend; public AudioClip hitWall; public AudioClip ladderExtendSFX; public AudioClip ladderShrinkSFX; public AudioClip blinkWarningSFX; public AudioClip lidOpenSFX; public AudioSource ladderAudio; public InteractTrigger ladderScript; public Collider interactCollider; public Collider bridgeCollider; public Collider killTrigger; public GiantLadderType giantLadderType; public float ladderAlarmTime; public float ladderExtensionTime; public float maxExtension; public float minInteractableRotation; public float ladderRotateSpeedMultiplier; public bool isClimbable = true; public bool isClimbableInShip = false; public bool isAlwaysExtended = false; public Transform topCollisionNode; private const float RAYCAST_DISTANCE_CORRECTION = 4f; private bool isOnAnotherLadder = false; private bool hasFallenOnALadder = false; private bool isLeaningAgainstALadder = false; private bool hasHitRoof = false; private Vector3 linecastStart = Vector3.zero; private Vector3 linecastEnd = Vector3.zero; private const int checkpointsPerTenMeters = 10; private const int minAmountOfChecksPerCheckpoints = 50; private const float amountOfChecksMulitplier = 1.2f; private const float minDegrees = 9f; private const int startingCheckPointNumber = 2; public override void Update() { //IL_0079: 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_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: 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_013d: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).Update(); calculateExtensionTimes(); if (!isClimbableInShip) { if (base.isInShipRoom) { isClimbable = false; } else { isClimbable = true; } } if ((Object)(object)base.playerHeldBy == (Object)null && !base.isHeld && !base.isHeldByEnemy && base.reachedFloorTarget && ladderActivated) { RaycastHit val = default(RaycastHit); if (Physics.Raycast(((Component)this).transform.position, Vector3.down, ref val, 80f, 268437760, (QueryTriggerInteraction)1)) { if ((Object)(object)((Component)((RaycastHit)(ref val)).collider).GetComponentInParent<LadderItemScript>() != (Object)null) { isOnAnotherLadder = true; } else { if (isOnAnotherLadder) { ((GrabbableObject)this).FallToGround(false, false, ((Component)this).transform.position); } isOnAnotherLadder = false; } } if (!ladderAnimationBegun) { ladderTimer = 0f; StartLadderAnimation(isSkipExtension: false, -1f); } else { if (!ladderAnimationBegun) { return; } RaycastHit val2 = default(RaycastHit); if (hasFallenOnALadder && !Physics.Linecast(linecastStart, linecastEnd, ref val2, layerMask, (QueryTriggerInteraction)1)) { StartLadderAnimation(isSkipExtension: true, rotateAmount); hasFallenOnALadder = false; } if (!isAlwaysExtended) { ladderTimer += Time.deltaTime; if (!ladderBlinkWarning && ladderTimer > ladderAlarmTime) { ladderBlinkWarning = true; ladderAnimator.SetBool("blinkWarning", true); ladderAudio.clip = blinkWarningSFX; ladderAudio.Play(); } else if (ladderTimer >= ladderExtensionTime) { ladderActivated = false; ladderBlinkWarning = false; ladderAudio.Stop(); ladderAnimator.SetBool("blinkWarning", false); } } } return; } if (ladderAnimationBegun) { ladderAnimationBegun = false; ladderAudio.Stop(); killTrigger.enabled = false; bridgeCollider.enabled = false; interactCollider.enabled = false; if (ladderAnimationCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(ladderAnimationCoroutine); } ladderAnimator.SetBool("blinkWarning", false); ((Component)ladderAudio).transform.position = ((Component)this).transform.position; ladderAudio.PlayOneShot(ladderShrinkSFX); ladderActivated = false; } if ((Object)(object)killTrigger != (Object)null) { killTrigger.enabled = false; } ladderScript.interactable = false; if ((Object)(object)GameNetworkManager.Instance.localPlayerController != (Object)null && (Object)(object)GameNetworkManager.Instance.localPlayerController.currentTriggerInAnimationWith == (Object)(object)ladderScript) { ladderScript.CancelAnimationExternally(); } if (rotateAmount > 0f) { rotateAmount = Mathf.Max(rotateAmount - Time.deltaTime * 2f, 0f); ladderRotateAnimator.SetFloat("rotationAmount", rotateAmount); } else { ladderRotateAnimator.SetFloat("rotationAmount", 0f); } if (extendAmount > 0f) { extendAmount = Mathf.Max(extendAmount - Time.deltaTime * 2f, 0f); ladderAnimator.SetFloat("extensionAmount", extendAmount); } else { ladderAnimator.SetBool("openLid", false); ladderAnimator.SetBool("extend", false); ladderAnimator.SetFloat("extensionAmount", 0f); } } private void calculateExtensionTimes() { switch (giantLadderType) { case GiantLadderType.TINY: isAlwaysExtended = SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isTinyLadderAlwaysActive); ladderAlarmTime = SyncedEntry<float>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.tinyLadderExtTime) - 4f; ladderExtensionTime = SyncedEntry<float>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.tinyLadderExtTime); break; case GiantLadderType.BIG: isAlwaysExtended = SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isBigLadderAlwaysActive); ladderAlarmTime = SyncedEntry<float>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.bigLadderExtTime) - 5f; ladderExtensionTime = SyncedEntry<float>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.bigLadderExtTime); break; case GiantLadderType.HUGE: isAlwaysExtended = SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isHugeLadderAlwaysActive); ladderAlarmTime = SyncedEntry<float>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.hugeLadderExtTime) - 5f; ladderExtensionTime = SyncedEntry<float>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.hugeLadderExtTime); break; case GiantLadderType.ULTIMATE: isAlwaysExtended = SyncedEntry<bool>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.isUltimateLadderAlwaysActive); ladderAlarmTime = SyncedEntry<float>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.ultimateLadderExtTime) - 5f; ladderExtensionTime = SyncedEntry<float>.op_Implicit(GiantExtensionLaddersV2.mySyncedConfigs.ultimateLadderExtTime); break; default: isAlwaysExtended = false; ladderExtensionTime = 25f; ladderAlarmTime = 20f; break; } } private void StartLadderAnimation(bool isSkipExtension, float externalRotNormalTime) { ladderAnimationBegun = true; ladderScript.interactable = false; if (ladderAnimationCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(ladderAnimationCoroutine); } ladderAnimationCoroutine = ((MonoBehaviour)this).StartCoroutine(LadderAnimation(isSkipExtension, externalRotNormalTime)); } [IteratorStateMachine(typeof(<LadderAnimation>d__53))] private IEnumerator LadderAnimation(bool isSkipExtension, float externalRotNormalTime) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <LadderAnimation>d__53(0) { <>4__this = this, isSkipExtension = isSkipExtension, externalRotNormalTime = externalRotNormalTime }; } private float GetLadderExtensionDistance() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (Physics.Raycast(((Component)baseNode).transform.position, Vector3.up, ref hit, maxExtension, layerMask, (QueryTriggerInteraction)1) && (base.isInShipRoom || base.isInFactory)) { return ((RaycastHit)(ref hit)).distance; } return maxExtension; } private float GetLadderRotationDegrees(float startAt) { //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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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_00d0: 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_00d7: 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_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown