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 InstantTeleport v0.0.2
InstantTeleport.dll
Decompiled 2 years agousing System; using System.Collections; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.AI; [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: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: AssemblyCompany("InstantTeleport")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+0e14460f7cfc4423db0502c178e3415750870e39")] [assembly: AssemblyProduct("InstantTeleport")] [assembly: AssemblyTitle("InstantTeleport")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] 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; } } } [BepInPlugin("DeathWrench.InstantTeleport", "Instant Teleport", "0.0.2")] public class Plugin : BaseUnityPlugin { public static ConfigEntry<bool> oldBehavior; private void Awake() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown oldBehavior = ((BaseUnityPlugin)this).Config.Bind<bool>("Settings", "Inverse Semi Instant", false, "If true, inverse teleporter will only be instant if you're on it when the button is pressed."); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin DeathWrench.InstantTeleport is loaded!"); Harmony val = new Harmony("DeathWrench.InstantTeleport"); val.PatchAll(); } } [HarmonyPatch(typeof(ShipTeleporter))] [HarmonyPatch("beamUpPlayer")] public class ShipTeleporter_BeamUpPlayer_Patch { private static bool Prefix(ShipTeleporter __instance) { //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: 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) __instance.shipTeleporterAudio.PlayOneShot(__instance.teleporterSpinSFX); PlayerControllerB targetedPlayer = StartOfRound.Instance.mapScreen.targetedPlayer; if ((Object)(object)targetedPlayer == (Object)null) { Debug.Log((object)"Targeted player is null"); return false; } if ((Object)(object)targetedPlayer.redirectToEnemy != (Object)null) { Debug.Log((object)$"Attempting to teleport enemy '{((Object)((Component)targetedPlayer.redirectToEnemy).gameObject).name}' (tied to player #{targetedPlayer.playerClientId}) to ship."); if (StartOfRound.Instance.shipIsLeaving) { Debug.Log((object)$"Ship could not teleport enemy '{((Object)((Component)targetedPlayer.redirectToEnemy).gameObject).name}' (tied to player #{targetedPlayer.playerClientId}) because the ship is leaving the nav mesh."); } targetedPlayer.redirectToEnemy.ShipTeleportEnemy(); __instance.shipTeleporterAudio.PlayOneShot(__instance.teleporterBeamUpSFX); if (GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } } __instance.SetPlayerTeleporterId(targetedPlayer, 1); if ((Object)(object)targetedPlayer.deadBody != (Object)null) { if ((Object)(object)targetedPlayer.deadBody.beamUpParticle == (Object)null) { return false; } targetedPlayer.deadBody.beamUpParticle.Play(); targetedPlayer.deadBody.bodyAudio.PlayOneShot(__instance.beamUpPlayerBodySFX); } else { targetedPlayer.beamUpParticle.Play(); targetedPlayer.movementAudio.PlayOneShot(__instance.beamUpPlayerBodySFX); } bool flag = false; if ((Object)(object)targetedPlayer.deadBody != (Object)null) { if ((Object)(object)targetedPlayer.deadBody.grabBodyObject == (Object)null || !targetedPlayer.deadBody.grabBodyObject.isHeldByEnemy) { flag = true; targetedPlayer.deadBody.attachedTo = null; targetedPlayer.deadBody.attachedLimb = null; targetedPlayer.deadBody.secondaryAttachedLimb = null; targetedPlayer.deadBody.secondaryAttachedTo = null; targetedPlayer.deadBody.SetRagdollPositionSafely(__instance.teleporterPosition.position, true); ((Component)targetedPlayer.deadBody).transform.SetParent(StartOfRound.Instance.elevatorTransform, true); if ((Object)(object)targetedPlayer.deadBody.grabBodyObject != (Object)null && targetedPlayer.deadBody.grabBodyObject.isHeld && (Object)(object)targetedPlayer.deadBody.grabBodyObject.playerHeldBy != (Object)null) { targetedPlayer.deadBody.grabBodyObject.playerHeldBy.DropAllHeldItems(true, false); } } } else { flag = true; targetedPlayer.DropAllHeldItems(true, false); if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>())) { Object.FindObjectOfType<AudioReverbPresets>().audioPresets[3].ChangeAudioReverbForPlayer(targetedPlayer); } targetedPlayer.isInElevator = true; targetedPlayer.isInHangarShipRoom = true; targetedPlayer.isInsideFactory = false; targetedPlayer.averageVelocity = 0f; targetedPlayer.velocityLastFrame = Vector3.zero; targetedPlayer.TeleportPlayer(__instance.teleporterPosition.position, true, 160f, false, true); } __instance.SetPlayerTeleporterId(targetedPlayer, -1); if (flag) { __instance.shipTeleporterAudio.PlayOneShot(__instance.teleporterBeamUpSFX); if (GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } } return false; } } [HarmonyPatch(typeof(ShipTeleporter))] [HarmonyPatch("beamOutPlayer")] public class ShipTeleporter_BeamOutPlayerPatch { private const float InstantTeleportDuration = 5f; private static void Prefix(ShipTeleporter __instance) { //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null) { return; } if (StartOfRound.Instance.inShipPhase) { Debug.Log((object)"Attempted using teleporter while in ship phase"); return; } __instance.shipTeleporterAudio.PlayOneShot(__instance.teleporterSpinSFX); if (!Plugin.oldBehavior.Value) { ((MonoBehaviour)__instance).StartCoroutine(InstantTeleportationRoutine(__instance)); return; } for (int i = 0; i < StartOfRound.Instance.allPlayerObjects.Length; i++) { PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[i]; if (val.shipTeleporterId == 1) { continue; } Vector3 position = ((Component)val).transform.position; if ((Object)(object)val.deadBody != (Object)null) { position = ((Component)val.deadBody.bodyParts[5]).transform.position; } if (Vector3.Distance(position, __instance.teleportOutPosition.position) < 2f) { if (RoundManager.Instance.insideAINodes.Length != 0) { Vector3 position2 = RoundManager.Instance.insideAINodes[__instance.shipTeleporterSeed.Next(0, RoundManager.Instance.insideAINodes.Length)].transform.position; position2 = RoundManager.Instance.GetRandomNavMeshPositionInBoxPredictable(position2, 10f, default(NavMeshHit), __instance.shipTeleporterSeed, -1); __instance.SetPlayerTeleporterId(val, 2); if ((Object)(object)val.deadBody != (Object)null) { __instance.TeleportPlayerBodyOutServerRpc((int)val.playerClientId, position2); continue; } __instance.TeleportPlayerOutWithInverseTeleporter((int)val.playerClientId, position2); __instance.TeleportPlayerOutServerRpc((int)val.playerClientId, position2); } } else { Debug.Log((object)$"Player #{val.playerClientId} is not close enough to teleporter to beam out"); } } } private static IEnumerator InstantTeleportationRoutine(ShipTeleporter teleporter) { for (float timer = 0f; timer < 5f; timer += Time.deltaTime) { for (int i = 0; i < StartOfRound.Instance.allPlayerObjects.Length; i++) { PlayerControllerB playerControllerB = StartOfRound.Instance.allPlayerScripts[i]; if (playerControllerB.shipTeleporterId == 1) { continue; } Vector3 position = ((Component)playerControllerB).transform.position; if ((Object)(object)playerControllerB.deadBody != (Object)null) { position = ((Component)playerControllerB.deadBody.bodyParts[5]).transform.position; } if (Vector3.Distance(position, teleporter.teleportOutPosition.position) < 2f) { Vector3 randomTeleportPosition2 = RoundManager.Instance.insideAINodes[Random.Range(0, RoundManager.Instance.insideAINodes.Length)].transform.position; randomTeleportPosition2 = RoundManager.Instance.GetRandomNavMeshPositionInBoxPredictable(randomTeleportPosition2, 10f, default(NavMeshHit), teleporter.shipTeleporterSeed, -1); teleporter.SetPlayerTeleporterId(playerControllerB, 2); if ((Object)(object)playerControllerB.deadBody != (Object)null) { teleporter.TeleportPlayerBodyOutServerRpc((int)playerControllerB.playerClientId, randomTeleportPosition2); continue; } teleporter.TeleportPlayerOutWithInverseTeleporter((int)playerControllerB.playerClientId, randomTeleportPosition2); teleporter.TeleportPlayerOutServerRpc((int)playerControllerB.playerClientId, randomTeleportPosition2); } else { Debug.Log((object)$"Player #{playerControllerB.playerClientId} is not close enough to teleporter to beam out"); } } yield return null; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }