Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of giant extension ladders v1.0.0
BepInEx/plugins/GiantExtensionLadders.dll
Decompiled 2 years agousing System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GiantExtensionLadders.Behaviours; using HarmonyLib; using LethalLib.Modules; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("BigLadderItem")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("BigLadderItem")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("b3c3d5ca-fe17-4291-92ca-a44e3ae22724")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace GiantExtensionLadders { [BepInPlugin("inoyu.GiantExtensionLadders", "GiantExtensionLadders", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class GiantLadderBase : BaseUnityPlugin { private const string modGUID = "inoyu.GiantExtensionLadders"; private const string modName = "GiantExtensionLadders"; private const string modVersion = "1.0.0"; private readonly Harmony harmony = new Harmony("inoyu.GiantExtensionLadders"); private static GiantLadderBase Instance; internal static ManualLogSource mls; private const string bigLadderAssetsBundleName = "BigLadderAssets"; private const string hugeLadderAssetsBundleName = "HugeLadderAssets"; private const string itemPropertiesLocation = "Assets/extLadderTest/lcLadder/ExtensionLadder_0.asset"; private const string item2PropertiesLocation = "Assets/extLadderTest/newLongerLadder/ExtensionLadder_0.asset"; private const int MAX_PROPERTY_AMOUNT = 18; private const int bigLadderBasePrice = 75; private const int hugeLadderBasePrice = 160; private ConfigEntry<int> ladderPrice; private ConfigEntry<int> hugeLadderPrice; internal static List<MeshRenderer> meshRenderers; internal static List<Animator> animators; internal static List<Transform> transforms; internal static List<AudioClip> audioClips; internal static List<AudioSource> audioSources; internal static List<InteractTrigger> interactTriggers; internal static List<BoxCollider> boxColliders; internal static int propertyCounter; internal static List<MeshRenderer> hugeLadderMeshRenderers; internal static List<Animator> hugeLadderAnimators; internal static List<Transform> hugeLadderTransforms; internal static List<AudioClip> hugeLadderAudioClips; internal static List<AudioSource> hugeLadderAudioSources; internal static List<InteractTrigger> hugeLadderInteractTriggers; internal static List<BoxCollider> hugeLadderBoxColliders; internal static int propertyCounter2; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("inoyu.GiantExtensionLadders"); mls.LogInfo((object)"mod awake"); mls.LogInfo((object)"loading ladder prices"); ladderPrice = ((BaseUnityPlugin)this).Config.Bind<int>("BigLadderConfig", "ladderPrice", 75, "set's the price of the big ladder"); hugeLadderPrice = ((BaseUnityPlugin)this).Config.Bind<int>("BigLadderConfig", "hugeLadderPrice", 160, "set's the price of the huge ladder"); mls.LogInfo((object)"loading assetbundles"); string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "BigLadderAssets"); string text2 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "HugeLadderAssets"); AssetBundle val = AssetBundle.LoadFromFile(text); AssetBundle val2 = AssetBundle.LoadFromFile(text2); if ((Object)(object)val != (Object)null && (Object)(object)val2 != (Object)null) { mls.LogInfo((object)"successfully loaded two assetbundles from files"); } else { mls.LogInfo((object)"failed to load assetbundles"); } mls.LogInfo((object)"loading items from assetbundles"); Item val3 = val.LoadAsset<Item>("Assets/extLadderTest/lcLadder/ExtensionLadder_0.asset"); Item val4 = val2.LoadAsset<Item>("Assets/extLadderTest/newLongerLadder/ExtensionLadder_0.asset"); if ((Object)(object)val3 != (Object)null && (Object)(object)val4 != (Object)null) { mls.LogInfo((object)"successfully loaded items from assetbundles"); } else { mls.LogInfo((object)"failed to load items from item assetbundles"); } GameObject spawnPrefab = val3.spawnPrefab; GameObject spawnPrefab2 = val4.spawnPrefab; mls.LogInfo((object)"attempting to build the big ladder"); meshRenderers = spawnPrefab.GetComponentsInChildren<MeshRenderer>().ToList(); animators = spawnPrefab.GetComponentsInChildren<Animator>().ToList(); transforms = spawnPrefab.GetComponentsInChildren<Transform>().ToList(); audioClips = val.LoadAllAssets<AudioClip>().ToList(); audioSources = spawnPrefab.GetComponentsInChildren<AudioSource>().ToList(); interactTriggers = spawnPrefab.GetComponentsInChildren<InteractTrigger>().ToList(); boxColliders = spawnPrefab.GetComponentsInChildren<BoxCollider>().ToList(); BigLadderItemScript bigLadderItemScript = spawnPrefab.AddComponent<BigLadderItemScript>(); if ((Object)(object)spawnPrefab.GetComponent<BigLadderItemScript>() == (Object)null) { mls.LogInfo((object)"bigLadderScript failed"); } else { mls.LogInfo((object)"bigLadderScript okay"); } ((GrabbableObject)bigLadderItemScript).grabbable = true; ((GrabbableObject)bigLadderItemScript).grabbableToEnemies = true; ((GrabbableObject)bigLadderItemScript).itemProperties = val3; foreach (MeshRenderer meshRenderer in meshRenderers) { if (((Object)meshRenderer).name.Equals("LadderBox")) { propertyCounter++; ((GrabbableObject)bigLadderItemScript).mainObjectRenderer = meshRenderer; mls.LogInfo((object)("found :" + ((Object)meshRenderer).name)); break; } } foreach (Animator animator in animators) { if (((Object)animator).name.Equals("AnimContainer")) { propertyCounter++; bigLadderItemScript.ladderAnimator = animator; mls.LogInfo((object)("found :" + ((Object)animator).name)); } if (((Object)animator).name.Equals("MeshContainer")) { propertyCounter++; bigLadderItemScript.ladderRotateAnimator = animator; mls.LogInfo((object)("found :" + ((Object)animator).name)); } } foreach (Transform transform in transforms) { if (((Object)transform).name.Equals("Base")) { propertyCounter++; bigLadderItemScript.baseNode = transform; mls.LogInfo((object)("found :" + ((Object)transform).name)); } if (((Object)transform).name.Equals("TopPosition")) { propertyCounter++; bigLadderItemScript.topNode = transform; mls.LogInfo((object)("found :" + ((Object)transform).name)); } if (((Object)transform).name.Equals("MovableNode")) { propertyCounter++; bigLadderItemScript.moveableNode = transform; mls.LogInfo((object)("found :" + ((Object)transform).name)); } } foreach (AudioClip audioClip in audioClips) { if (((Object)audioClip).name.Equals("ExtensionLadderHitWall")) { propertyCounter++; bigLadderItemScript.hitRoof = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderHitWall2")) { propertyCounter += 2; bigLadderItemScript.fullExtend = audioClip; bigLadderItemScript.hitWall = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderExtend")) { propertyCounter++; bigLadderItemScript.ladderExtendSFX = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderShrink")) { propertyCounter++; bigLadderItemScript.ladderShrinkSFX = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderAlarm")) { propertyCounter++; bigLadderItemScript.blinkWarningSFX = audioClip; } if (((Object)audioClip).name.Equals("ExtensionLadderLidOpen")) { propertyCounter++; bigLadderItemScript.lidOpenSFX = audioClip; } mls.LogInfo((object)((Object)audioClip).name); } foreach (AudioSource audioSource in audioSources) { if (((Object)audioSource).name.Equals("LadderAudio")) { propertyCounter++; bigLadderItemScript.ladderAudio = audioSource; mls.LogInfo((object)("found :" + ((Object)audioSource).name)); break; } } foreach (InteractTrigger interactTrigger in interactTriggers) { if (((Object)interactTrigger).name.Equals("ExtLadderTrigger")) { propertyCounter++; bigLadderItemScript.ladderScript = interactTrigger; mls.LogInfo((object)("found :" + ((Object)interactTrigger).name)); break; } } foreach (BoxCollider boxCollider in boxColliders) { if (((Object)boxCollider).name.Equals("ExtLadderTrigger")) { propertyCounter++; bigLadderItemScript.interactCollider = (Collider)(object)boxCollider; mls.LogInfo((object)("found :" + ((Object)boxCollider).name)); } if (((Object)boxCollider).name.Equals("LadderBridgeCollider")) { propertyCounter++; bigLadderItemScript.bridgeCollider = (Collider)(object)boxCollider; mls.LogInfo((object)("found :" + ((Object)boxCollider).name)); } if (((Object)boxCollider).name.Equals("KillTrigger")) { propertyCounter++; bigLadderItemScript.killTrigger = (Collider)(object)boxCollider; mls.LogInfo((object)("found :" + ((Object)boxCollider).name)); } } if (propertyCounter == 18) { mls.LogInfo((object)"all properties found"); } else { mls.LogInfo((object)("NOT all properties found. Counter: " + propertyCounter)); } mls.LogInfo((object)"attempting to build the huge ladder"); hugeLadderMeshRenderers = spawnPrefab2.GetComponentsInChildren<MeshRenderer>().ToList(); hugeLadderAnimators = spawnPrefab2.GetComponentsInChildren<Animator>().ToList(); hugeLadderTransforms = spawnPrefab2.GetComponentsInChildren<Transform>().ToList(); hugeLadderAudioClips = val2.LoadAllAssets<AudioClip>().ToList(); hugeLadderAudioSources = spawnPrefab2.GetComponentsInChildren<AudioSource>().ToList(); hugeLadderInteractTriggers = spawnPrefab2.GetComponentsInChildren<InteractTrigger>().ToList(); hugeLadderBoxColliders = spawnPrefab2.GetComponentsInChildren<BoxCollider>().ToList(); HugeLadderItemScript hugeLadderItemScript = spawnPrefab2.AddComponent<HugeLadderItemScript>(); if ((Object)(object)spawnPrefab2.GetComponent<HugeLadderItemScript>() == (Object)null) { mls.LogInfo((object)"hugeLadderScript failed"); } else { mls.LogInfo((object)"hugeLadderScript okay"); } ((GrabbableObject)hugeLadderItemScript).grabbable = true; ((GrabbableObject)hugeLadderItemScript).grabbableToEnemies = true; ((GrabbableObject)hugeLadderItemScript).itemProperties = val4; foreach (MeshRenderer hugeLadderMeshRenderer in hugeLadderMeshRenderers) { if (((Object)hugeLadderMeshRenderer).name.Equals("LadderBox")) { propertyCounter2++; ((GrabbableObject)hugeLadderItemScript).mainObjectRenderer = hugeLadderMeshRenderer; mls.LogInfo((object)("found :" + ((Object)hugeLadderMeshRenderer).name)); break; } } foreach (Animator hugeLadderAnimator in hugeLadderAnimators) { if (((Object)hugeLadderAnimator).name.Equals("AnimContainer")) { propertyCounter2++; hugeLadderItemScript.ladderAnimator = hugeLadderAnimator; mls.LogInfo((object)("found :" + ((Object)hugeLadderAnimator).name)); } if (((Object)hugeLadderAnimator).name.Equals("MeshContainer")) { propertyCounter2++; hugeLadderItemScript.ladderRotateAnimator = hugeLadderAnimator; mls.LogInfo((object)("found :" + ((Object)hugeLadderAnimator).name)); } } foreach (Transform hugeLadderTransform in hugeLadderTransforms) { if (((Object)hugeLadderTransform).name.Equals("Base")) { propertyCounter2++; hugeLadderItemScript.baseNode = hugeLadderTransform; mls.LogInfo((object)("found :" + ((Object)hugeLadderTransform).name)); } if (((Object)hugeLadderTransform).name.Equals("TopPosition")) { propertyCounter2++; hugeLadderItemScript.topNode = hugeLadderTransform; mls.LogInfo((object)("found :" + ((Object)hugeLadderTransform).name)); } if (((Object)hugeLadderTransform).name.Equals("MovableNode")) { propertyCounter2++; hugeLadderItemScript.moveableNode = hugeLadderTransform; mls.LogInfo((object)("found :" + ((Object)hugeLadderTransform).name)); } } foreach (AudioClip hugeLadderAudioClip in hugeLadderAudioClips) { if (((Object)hugeLadderAudioClip).name.Equals("ExtensionLadderHitWall")) { propertyCounter2++; hugeLadderItemScript.hitRoof = hugeLadderAudioClip; } if (((Object)hugeLadderAudioClip).name.Equals("ExtensionLadderHitWall2")) { propertyCounter2 += 2; hugeLadderItemScript.fullExtend = hugeLadderAudioClip; hugeLadderItemScript.hitWall = hugeLadderAudioClip; } if (((Object)hugeLadderAudioClip).name.Equals("ExtensionLadderExtend")) { propertyCounter2++; hugeLadderItemScript.ladderExtendSFX = hugeLadderAudioClip; } if (((Object)hugeLadderAudioClip).name.Equals("ExtensionLadderShrink")) { propertyCounter2++; hugeLadderItemScript.ladderShrinkSFX = hugeLadderAudioClip; } if (((Object)hugeLadderAudioClip).name.Equals("ExtensionLadderAlarm")) { propertyCounter2++; hugeLadderItemScript.blinkWarningSFX = hugeLadderAudioClip; } if (((Object)hugeLadderAudioClip).name.Equals("ExtensionLadderLidOpen")) { propertyCounter2++; hugeLadderItemScript.lidOpenSFX = hugeLadderAudioClip; } mls.LogInfo((object)((Object)hugeLadderAudioClip).name); } foreach (AudioSource hugeLadderAudioSource in hugeLadderAudioSources) { if (((Object)hugeLadderAudioSource).name.Equals("LadderAudio")) { propertyCounter2++; hugeLadderItemScript.ladderAudio = hugeLadderAudioSource; mls.LogInfo((object)("found :" + ((Object)hugeLadderAudioSource).name)); break; } } foreach (InteractTrigger hugeLadderInteractTrigger in hugeLadderInteractTriggers) { if (((Object)hugeLadderInteractTrigger).name.Equals("ExtLadderTrigger")) { propertyCounter2++; hugeLadderItemScript.ladderScript = hugeLadderInteractTrigger; mls.LogInfo((object)("found :" + ((Object)hugeLadderInteractTrigger).name)); break; } } foreach (BoxCollider hugeLadderBoxCollider in hugeLadderBoxColliders) { if (((Object)hugeLadderBoxCollider).name.Equals("ExtLadderTrigger")) { propertyCounter2++; hugeLadderItemScript.interactCollider = (Collider)(object)hugeLadderBoxCollider; mls.LogInfo((object)("found :" + ((Object)hugeLadderBoxCollider).name)); } if (((Object)hugeLadderBoxCollider).name.Equals("LadderBridgeCollider")) { propertyCounter2++; hugeLadderItemScript.bridgeCollider = (Collider)(object)hugeLadderBoxCollider; mls.LogInfo((object)("found :" + ((Object)hugeLadderBoxCollider).name)); } if (((Object)hugeLadderBoxCollider).name.Equals("KillTrigger")) { propertyCounter2++; hugeLadderItemScript.killTrigger = (Collider)(object)hugeLadderBoxCollider; mls.LogInfo((object)("found :" + ((Object)hugeLadderBoxCollider).name)); } } if (propertyCounter2 == 18) { mls.LogInfo((object)"all properties found"); } else { mls.LogInfo((object)("NOT all properties found. Counter: " + propertyCounter2)); } NetworkPrefabs.RegisterNetworkPrefab(val3.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(val4.spawnPrefab); mls.LogInfo((object)"registered network prefabs."); Utilities.FixMixerGroups(val3.spawnPrefab); Utilities.FixMixerGroups(val4.spawnPrefab); mls.LogInfo((object)"fixed mixers."); TerminalNode val5 = ScriptableObject.CreateInstance<TerminalNode>(); val5.clearPreviousText = true; val5.displayText = "This ladder seems longer than the normal one..\n\n"; Items.RegisterShopItem(val3, (TerminalNode)null, (TerminalNode)null, val5, ladderPrice.Value); TerminalNode val6 = ScriptableObject.CreateInstance<TerminalNode>(); val6.clearPreviousText = true; val6.displayText = "This ladder seems EVEN longer than the big one..\n\n"; Items.RegisterShopItem(val4, (TerminalNode)null, (TerminalNode)null, val6, hugeLadderPrice.Value); mls.LogInfo((object)"items should be in shop."); harmony.PatchAll(typeof(GiantLadderBase)); } } } namespace GiantExtensionLadders.Behaviours { internal class HugeLadderItemScript : GrabbableObject { private bool ladderActivated; private 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 AudioClip ladderFallSFX = null; 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; private const float LADDER_ALARM_TIME = 25f; private const float LADDER_EXTENDED_TIME = 30f; private const float MAX_EXTENSION = 34.4f; private const float MIN_ROTATION_COLLISION_CHECK = 60f; private const int LADDER_HIT_LINECAST_MULTIPLIER = 4; private const int LADDER_HIT_CHECK_MIN_HEIGHT = 8; private const float LADDER_HEIGHT_MULTIPLIER = 14.15f; public override void Update() { //IL_01b1: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).Update(); if ((Object)(object)base.playerHeldBy == (Object)null && !base.isHeld && !base.isHeldByEnemy && base.reachedFloorTarget && ladderActivated) { if (!ladderAnimationBegun) { ladderTimer = 0f; StartLadderAnimation(); } else if (ladderAnimationBegun) { ladderTimer += Time.deltaTime; if (!ladderBlinkWarning && ladderTimer > 25f) { ladderBlinkWarning = true; ladderAnimator.SetBool("blinkWarning", true); ladderAudio.clip = blinkWarningSFX; ladderAudio.Play(); } else if (ladderTimer >= 30f) { 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; } 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 StartLadderAnimation() { ladderAnimationBegun = true; ladderScript.interactable = false; if (ladderAnimationCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(ladderAnimationCoroutine); } ladderAnimationCoroutine = ((MonoBehaviour)this).StartCoroutine(LadderAnimation()); } private IEnumerator LadderAnimation() { ladderAudio.volume = 1f; ladderScript.interactable = false; interactCollider.enabled = false; bridgeCollider.enabled = false; killTrigger.enabled = false; ladderAnimator.SetBool("openLid", false); ladderAnimator.SetBool("extend", false); yield return null; ladderAnimator.SetBool("openLid", true); ((Component)ladderAudio).transform.position = ((Component)this).transform.position; ladderAudio.PlayOneShot(lidOpenSFX, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)ladderAudio).transform.position, 18f, 0.8f, 0, base.isInShipRoom, 0); yield return (object)new WaitForSeconds(1f); ladderAnimator.SetBool("extend", true); float ladderExtendAmountNormalized = GetLadderExtensionDistance() / 34.4f; float ladderRotateAmountNormalized = Mathf.Clamp(GetLadderRotationDegrees(ladderExtendAmountNormalized) / -90f, 0f, 0.99f); ladderAudio.clip = ladderExtendSFX; ladderAudio.Play(); float currentNormalizedTime3 = 0f; float speedMultiplier3 = 0.1f; while (currentNormalizedTime3 < ladderExtendAmountNormalized) { speedMultiplier3 += Time.deltaTime * 2f; currentNormalizedTime3 = Mathf.Min(currentNormalizedTime3 + Time.deltaTime * speedMultiplier3, ladderExtendAmountNormalized); ladderAnimator.SetFloat("extensionAmount", currentNormalizedTime3); yield return null; } extendAmount = currentNormalizedTime3; interactCollider.enabled = true; bridgeCollider.enabled = false; killTrigger.enabled = false; ladderAudio.Stop(); if (ladderExtendAmountNormalized == 1f) { ((Component)ladderAudio).transform.position = ((Component)baseNode).transform.position + ((Component)baseNode).transform.up * 34.4f; ladderAudio.PlayOneShot(fullExtend, 0.7f); WalkieTalkie.TransmitOneShotAudio(ladderAudio, fullExtend, 0.7f); RoundManager.Instance.PlayAudibleNoise(((Component)ladderAudio).transform.position, 8f, 0.5f, 0, base.isInShipRoom, 0); } else { ((Component)ladderAudio).transform.position = ((Component)baseNode).transform.position + ((Component)baseNode).transform.up * (ladderExtendAmountNormalized * 34.4f); ladderAudio.PlayOneShot(hitRoof); WalkieTalkie.TransmitOneShotAudio(ladderAudio, hitRoof, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)ladderAudio).transform.position, 17f, 0.8f, 0, base.isInShipRoom, 0); } yield return (object)new WaitForSeconds(0.4f); ladderAudio.clip = ladderFallSFX; ladderAudio.Play(); ladderAudio.volume = 0f; speedMultiplier3 = 0.15f; currentNormalizedTime3 = 0f; while (currentNormalizedTime3 < ladderRotateAmountNormalized) { speedMultiplier3 += Time.deltaTime * 2f; currentNormalizedTime3 = Mathf.Min(currentNormalizedTime3 + Time.deltaTime * speedMultiplier3, ladderRotateAmountNormalized); if (ladderExtendAmountNormalized > 0.6f && currentNormalizedTime3 > 0.5f) { killTrigger.enabled = true; } ladderAudio.volume = Mathf.Min(ladderAudio.volume + Time.deltaTime * 1.75f, 1f); ladderRotateAnimator.SetFloat("rotationAmount", currentNormalizedTime3); yield return null; } rotateAmount = ladderRotateAmountNormalized; ladderAudio.volume = 1f; ladderAudio.Stop(); ((Component)ladderAudio).transform.position = ((Component)moveableNode).transform.position; ladderAudio.PlayOneShot(hitWall, Mathf.Min(ladderRotateAmountNormalized + 0.3f, 1f)); RoundManager.Instance.PlayAudibleNoise(((Component)ladderAudio).transform.position, 18f, 0.7f, 0, base.isInShipRoom, 0); if (ladderRotateAmountNormalized * 90f < 60f) { ladderScript.interactable = true; interactCollider.enabled = true; } else { bridgeCollider.enabled = true; } killTrigger.enabled = false; } 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, 34.4f, layerMask, (QueryTriggerInteraction)1)) { return ((RaycastHit)(ref hit)).distance; } return 34.4f; } private float GetLadderRotationDegrees(float topOfLadder) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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) float num = 90f; for (float num2 = 56.6f; num2 >= 8f; num2 -= 1f) { float num3 = 0.6075f * num2; ((Component)moveableNode).transform.localPosition = new Vector3(0f, num3, 0f); baseNode.localEulerAngles = Vector3.zero; for (int i = 1; i < 40; i++) { Vector3 position = ((Component)moveableNode).transform.position; baseNode.localEulerAngles = new Vector3((float)(-i / 2) * 4.5f, 0f, 0f); if (Physics.Linecast(position, ((Component)moveableNode).transform.position, layerMask, (QueryTriggerInteraction)1)) { float num4 = (float)(i / 2 - 1) * 4.5f; if (num4 < num) { num = num4; } break; } } if (num <= 8f) { break; } } return 0f - num; } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); } public override void DiscardItemFromEnemy() { ((GrabbableObject)this).DiscardItemFromEnemy(); ladderActivated = true; } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemActivate(used, buttonDown); ladderActivated = true; if (((NetworkBehaviour)this).IsOwner) { base.playerHeldBy.DiscardHeldObject(false, (NetworkObject)null, default(Vector3), true); } } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override string __getTypeName() { return "BigLadderItem"; } } internal class BigLadderItemScript : GrabbableObject { private bool ladderActivated; private 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 AudioClip ladderFallSFX = null; 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; private const float LADDER_ALARM_TIME = 20f; private const float LADDER_EXTENDED_TIME = 25f; private const float MAX_EXTENSION = 17f; private const float MIN_ROTATION_COLLISION_CHECK = 60f; private const int LADDER_HIT_LINECAST_MULTIPLIER = 3; private const int LADDER_HIT_CHECK_MIN_HEIGHT = 8; private const float LADDER_HEIGHT_MULTIPLIER = 7f; public override void Update() { //IL_01b1: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).Update(); if ((Object)(object)base.playerHeldBy == (Object)null && !base.isHeld && !base.isHeldByEnemy && base.reachedFloorTarget && ladderActivated) { if (!ladderAnimationBegun) { ladderTimer = 0f; StartLadderAnimation(); } else if (ladderAnimationBegun) { ladderTimer += Time.deltaTime; if (!ladderBlinkWarning && ladderTimer > 20f) { ladderBlinkWarning = true; ladderAnimator.SetBool("blinkWarning", true); ladderAudio.clip = blinkWarningSFX; ladderAudio.Play(); } else if (ladderTimer >= 25f) { 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; } 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 StartLadderAnimation() { ladderAnimationBegun = true; ladderScript.interactable = false; if (ladderAnimationCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(ladderAnimationCoroutine); } ladderAnimationCoroutine = ((MonoBehaviour)this).StartCoroutine(LadderAnimation()); } private IEnumerator LadderAnimation() { ladderAudio.volume = 1f; ladderScript.interactable = false; interactCollider.enabled = false; bridgeCollider.enabled = false; killTrigger.enabled = false; ladderAnimator.SetBool("openLid", false); ladderAnimator.SetBool("extend", false); yield return null; ladderAnimator.SetBool("openLid", true); ((Component)ladderAudio).transform.position = ((Component)this).transform.position; ladderAudio.PlayOneShot(lidOpenSFX, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)ladderAudio).transform.position, 18f, 0.8f, 0, base.isInShipRoom, 0); yield return (object)new WaitForSeconds(1f); ladderAnimator.SetBool("extend", true); float ladderExtendAmountNormalized = GetLadderExtensionDistance() / 17f; float ladderRotateAmountNormalized = Mathf.Clamp(GetLadderRotationDegrees(ladderExtendAmountNormalized) / -90f, 0f, 0.99f); ladderAudio.clip = ladderExtendSFX; ladderAudio.Play(); float currentNormalizedTime3 = 0f; float speedMultiplier3 = 0.1f; while (currentNormalizedTime3 < ladderExtendAmountNormalized) { speedMultiplier3 += Time.deltaTime * 2f; currentNormalizedTime3 = Mathf.Min(currentNormalizedTime3 + Time.deltaTime * speedMultiplier3, ladderExtendAmountNormalized); ladderAnimator.SetFloat("extensionAmount", currentNormalizedTime3); yield return null; } extendAmount = currentNormalizedTime3; interactCollider.enabled = true; bridgeCollider.enabled = false; killTrigger.enabled = false; ladderAudio.Stop(); if (ladderExtendAmountNormalized == 1f) { ((Component)ladderAudio).transform.position = ((Component)baseNode).transform.position + ((Component)baseNode).transform.up * 17f; ladderAudio.PlayOneShot(fullExtend, 0.7f); WalkieTalkie.TransmitOneShotAudio(ladderAudio, fullExtend, 0.7f); RoundManager.Instance.PlayAudibleNoise(((Component)ladderAudio).transform.position, 8f, 0.5f, 0, base.isInShipRoom, 0); } else { ((Component)ladderAudio).transform.position = ((Component)baseNode).transform.position + ((Component)baseNode).transform.up * (ladderExtendAmountNormalized * 17f); ladderAudio.PlayOneShot(hitRoof); WalkieTalkie.TransmitOneShotAudio(ladderAudio, hitRoof, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)ladderAudio).transform.position, 17f, 0.8f, 0, base.isInShipRoom, 0); } yield return (object)new WaitForSeconds(0.4f); ladderAudio.clip = ladderFallSFX; ladderAudio.Play(); ladderAudio.volume = 0f; speedMultiplier3 = 0.15f; currentNormalizedTime3 = 0f; while (currentNormalizedTime3 < ladderRotateAmountNormalized) { speedMultiplier3 += Time.deltaTime * 2f; currentNormalizedTime3 = Mathf.Min(currentNormalizedTime3 + Time.deltaTime * speedMultiplier3, ladderRotateAmountNormalized); if (ladderExtendAmountNormalized > 0.6f && currentNormalizedTime3 > 0.5f) { killTrigger.enabled = true; } ladderAudio.volume = Mathf.Min(ladderAudio.volume + Time.deltaTime * 1.75f, 1f); ladderRotateAnimator.SetFloat("rotationAmount", currentNormalizedTime3); yield return null; } rotateAmount = ladderRotateAmountNormalized; ladderAudio.volume = 1f; ladderAudio.Stop(); ((Component)ladderAudio).transform.position = ((Component)moveableNode).transform.position; ladderAudio.PlayOneShot(hitWall, Mathf.Min(ladderRotateAmountNormalized + 0.3f, 1f)); RoundManager.Instance.PlayAudibleNoise(((Component)ladderAudio).transform.position, 18f, 0.7f, 0, base.isInShipRoom, 0); if (ladderRotateAmountNormalized * 90f < 60f) { ladderScript.interactable = true; interactCollider.enabled = true; } else { bridgeCollider.enabled = true; } killTrigger.enabled = false; } 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, 17f, layerMask, (QueryTriggerInteraction)1)) { return ((RaycastHit)(ref hit)).distance; } return 17f; } private float GetLadderRotationDegrees(float topOfLadder) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008e: 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) float num = 90f; for (float num2 = 21f; num2 >= 8f; num2 -= 1f) { float num3 = 0.81f * num2; ((Component)moveableNode).transform.localPosition = new Vector3(0f, num3, 0f); baseNode.localEulerAngles = Vector3.zero; for (int i = 1; i < 40; i++) { Vector3 position = ((Component)moveableNode).transform.position; baseNode.localEulerAngles = new Vector3((float)(-i / 2) * 4.5f, 0f, 0f); if (Physics.Linecast(position, ((Component)moveableNode).transform.position, layerMask, (QueryTriggerInteraction)1)) { float num4 = (float)(i / 2 - 1) * 4.5f; if (num4 < num) { num = num4; } break; } } if (num <= 8f) { break; } } return 0f - num; } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); } public override void DiscardItemFromEnemy() { ((GrabbableObject)this).DiscardItemFromEnemy(); ladderActivated = true; } public override void ItemActivate(bool used, bool buttonDown = true) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemActivate(used, buttonDown); ladderActivated = true; if (((NetworkBehaviour)this).IsOwner) { base.playerHeldBy.DiscardHeldObject(false, (NetworkObject)null, default(Vector3), true); } } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override string __getTypeName() { return "BigLadderItem"; } } }