Decompiled source of Giant Extension Ladders v3.3.1
BepInEx/plugins/inoyu.GiantExtensionLadders.dll
Decompiled 3 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