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 NicerTeleporters v1.1.2
NicerTeleporters.dll
Decompiled 2 years agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; 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("NicerTeleporters")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("NicerTeleporters")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("70cb27b0-8de2-449b-9992-aadcd6903262")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace NicerTeleporters { [BepInPlugin("MV.NicerTeleporters", "NicerTeleporters", "1.1.2")] public class NicerTeleportersBase : BaseUnityPlugin { public const string modGUID = "MV.NicerTeleporters"; public const string modName = "NicerTeleporters"; public const string modVersion = "1.1.2"; private readonly Harmony harmony = new Harmony("MV.NicerTeleporters"); private static NicerTeleportersBase instance; private ManualLogSource mls; private void Awake() { if ((Object)(object)instance == (Object)null) { instance = this; } mls = Logger.CreateLogSource("MV.NicerTeleporters"); harmony.PatchAll(); mls.LogInfo((object)"Patched NicerTeleporters."); } } internal class Utils { internal static void DropMostHeldItems(ref PlayerControllerB __instance, bool itemsFall = true, bool disconnecting = false) { //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) MethodInfo method = typeof(PlayerControllerB).GetMethod("SetSpecialGrabAnimationBool", BindingFlags.Instance | BindingFlags.NonPublic); float num = 1f; for (int i = 0; i < __instance.ItemSlots.Length; i++) { GrabbableObject val = __instance.ItemSlots[i]; if (!((Object)(object)val != (Object)null)) { continue; } List<string> list = new List<string> { "Shovel", "WalkieTalkie", "KeyItem", "FlashlightItem", "BoomboxItem", "RadarBoosterItem" }; if (list.Contains(((object)val).GetType().ToString())) { num += Mathf.Clamp(val.itemProperties.weight - 1f, 0f, 10f); continue; } if (itemsFall) { val.parentObject = null; val.heldByPlayerOnServer = false; if (__instance.isInElevator) { ((Component)val).transform.SetParent(__instance.playersManager.elevatorTransform, true); } else { ((Component)val).transform.SetParent(__instance.playersManager.propsContainer, true); } __instance.SetItemInElevator(__instance.isInHangarShipRoom, __instance.isInElevator, val); val.EnablePhysics(true); val.EnableItemMeshes(true); ((Component)val).transform.localScale = val.originalScale; val.isHeld = false; val.isPocketed = false; val.startFallingPosition = ((Component)val).transform.parent.InverseTransformPoint(((Component)val).transform.position); val.FallToGround(true); val.fallTime = Random.Range(-0.3f, 0.05f); if (((NetworkBehaviour)__instance).IsOwner) { val.DiscardItemOnClient(); } else if (!val.itemProperties.syncDiscardFunction) { val.playerHeldBy = null; } } if (((NetworkBehaviour)__instance).IsOwner && !disconnecting) { ((Behaviour)HUDManager.Instance.holdingTwoHandedItem).enabled = false; ((Behaviour)HUDManager.Instance.itemSlotIcons[i]).enabled = false; HUDManager.Instance.ClearControlTips(); __instance.activatingItem = false; } __instance.ItemSlots[i] = null; } if (__instance.isHoldingObject) { __instance.isHoldingObject = false; if ((Object)(object)__instance.currentlyHeldObjectServer != (Object)null) { method.Invoke(__instance, new object[2] { false, __instance.currentlyHeldObjectServer }); } __instance.playerBodyAnimator.SetBool("cancelHolding", true); __instance.playerBodyAnimator.SetTrigger("Throw"); } __instance.activatingItem = false; __instance.carryWeight = num; __instance.twoHanded = false; __instance.currentlyHeldObjectServer = null; } } } namespace NicerTeleporters.Patches { [HarmonyPatch] internal class CommonPatch { [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { private static FieldInfo cooldownProp = typeof(ShipTeleporter).GetField("cooldownTime", BindingFlags.Instance | BindingFlags.NonPublic); [HarmonyPatch("StartGame")] [HarmonyPostfix] private static void StartGame() { ResetCooldown(); } [HarmonyPatch("EndOfGame")] [HarmonyPostfix] private static void EndOfGame() { ResetCooldown(); } [HarmonyPatch("EndOfGameClientRpc")] [HarmonyPostfix] private static void EndOfGameClientRpc() { ResetCooldown(); } private static void ResetCooldown() { ShipTeleporter[] array = Object.FindObjectsOfType<ShipTeleporter>(); ShipTeleporter[] array2 = array; foreach (ShipTeleporter obj in array2) { cooldownProp.SetValue(obj, 0f); } } } } [HarmonyPatch] internal class InverseTeleporterPatch { [HarmonyPrefix] [HarmonyPatch(typeof(ShipTeleporter), "Awake")] private static void Awake(ShipTeleporter __instance) { if (__instance.isInverseTeleporter) { __instance.cooldownAmount = 45f; } } [HarmonyPrefix] [HarmonyPatch(typeof(ShipTeleporter), "TeleportPlayerOutWithInverseTeleporter")] private static bool inverseTeleport(int playerObj, ref Vector3 teleportPos, ShipTeleporter __instance) { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: 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_010c: Unknown result type (might be due to invalid IL or missing references) MethodInfo method = typeof(ShipTeleporter).GetMethod("teleportBodyOut", BindingFlags.Instance | BindingFlags.NonPublic); MethodInfo method2 = typeof(ShipTeleporter).GetMethod("SetPlayerTeleporterId", BindingFlags.Instance | BindingFlags.NonPublic); if (StartOfRound.Instance.allPlayerScripts[playerObj].isPlayerDead) { ((MonoBehaviour)__instance).StartCoroutine((IEnumerator)method.Invoke(__instance, new object[2] { playerObj, teleportPos })); return false; } PlayerControllerB __instance2 = StartOfRound.Instance.allPlayerScripts[playerObj]; method2.Invoke(__instance, new object[2] { __instance2, -1 }); Utils.DropMostHeldItems(ref __instance2); if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>())) { Object.FindObjectOfType<AudioReverbPresets>().audioPresets[2].ChangeAudioReverbForPlayer(__instance2); } __instance2.isInElevator = false; __instance2.isInHangarShipRoom = false; __instance2.isInsideFactory = true; __instance2.averageVelocity = 0f; __instance2.velocityLastFrame = Vector3.zero; StartOfRound.Instance.allPlayerScripts[playerObj].TeleportPlayer(teleportPos, false, 0f, false, true); StartOfRound.Instance.allPlayerScripts[playerObj].beamOutParticle.Play(); __instance.shipTeleporterAudio.PlayOneShot(__instance.teleporterBeamUpSFX); StartOfRound.Instance.allPlayerScripts[playerObj].movementAudio.PlayOneShot(__instance.teleporterBeamUpSFX); if ((Object)(object)__instance2 == (Object)(object)GameNetworkManager.Instance.localPlayerController) { Debug.Log((object)"Teleporter shaking camera"); HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } return false; } } [HarmonyPatch] internal class TeleporterPatch { [HarmonyTranspiler] [HarmonyPatch(typeof(ShipTeleporter), "PressTeleportButtonClientRpc")] private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown return new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[1] { new CodeMatch((OpCode?)OpCodes.Call, (object)AccessTools.Method(typeof(ShipTeleporter), "beamUpPlayer", (Type[])null, (Type[])null), (string)null) }).ThrowIfInvalid("Method not found.").SetOperandAndAdvance((object)AccessTools.Method(typeof(TeleporterPatch), "betterBeamUpPlayer", (Type[])null, (Type[])null)) .InstructionEnumeration(); } private static IEnumerator betterBeamUpPlayer(ShipTeleporter __instance) { MethodInfo SetPlayerTeleporterId = typeof(ShipTeleporter).GetMethod("SetPlayerTeleporterId", BindingFlags.Instance | BindingFlags.NonPublic); __instance.shipTeleporterAudio.PlayOneShot(__instance.teleporterSpinSFX); PlayerControllerB playerToBeamUp = StartOfRound.Instance.mapScreen.targetedPlayer; if ((Object)(object)playerToBeamUp == (Object)null) { Debug.Log((object)"Targeted player is null"); yield break; } if ((Object)(object)playerToBeamUp.redirectToEnemy != (Object)null) { Debug.Log((object)$"Attemping to teleport enemy '{((Object)((Component)playerToBeamUp.redirectToEnemy).gameObject).name}' (tied to player #{playerToBeamUp.playerClientId}) to ship."); if (StartOfRound.Instance.shipIsLeaving) { Debug.Log((object)$"Ship could not teleport enemy '{((Object)((Component)playerToBeamUp.redirectToEnemy).gameObject).name}' (tied to player #{playerToBeamUp.playerClientId}) because the ship is leaving the nav mesh."); } playerToBeamUp.redirectToEnemy.ShipTeleportEnemy(); yield return (object)new WaitForSeconds(3f); __instance.shipTeleporterAudio.PlayOneShot(__instance.teleporterBeamUpSFX); if (GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } } SetPlayerTeleporterId.Invoke(__instance, new object[2] { playerToBeamUp, -1 }); if ((Object)(object)playerToBeamUp.deadBody != (Object)null) { if ((Object)(object)playerToBeamUp.deadBody.beamUpParticle == (Object)null) { yield break; } playerToBeamUp.deadBody.beamUpParticle.Play(); playerToBeamUp.deadBody.bodyAudio.PlayOneShot(__instance.beamUpPlayerBodySFX); } else { playerToBeamUp.beamUpParticle.Play(); playerToBeamUp.movementAudio.PlayOneShot(__instance.beamUpPlayerBodySFX); } Debug.Log((object)"Teleport A"); yield return (object)new WaitForSeconds(3f); bool flag = false; if ((Object)(object)playerToBeamUp.deadBody != (Object)null) { if ((Object)(object)playerToBeamUp.deadBody.grabBodyObject == (Object)null || !playerToBeamUp.deadBody.grabBodyObject.isHeldByEnemy) { flag = true; playerToBeamUp.deadBody.attachedTo = null; playerToBeamUp.deadBody.attachedLimb = null; playerToBeamUp.deadBody.secondaryAttachedLimb = null; playerToBeamUp.deadBody.secondaryAttachedTo = null; playerToBeamUp.deadBody.SetRagdollPositionSafely(__instance.teleporterPosition.position, true); ((Component)playerToBeamUp.deadBody).transform.SetParent(StartOfRound.Instance.elevatorTransform, true); if ((Object)(object)playerToBeamUp.deadBody.grabBodyObject != (Object)null && playerToBeamUp.deadBody.grabBodyObject.isHeld && (Object)(object)playerToBeamUp.deadBody.grabBodyObject.playerHeldBy != (Object)null) { playerToBeamUp.deadBody.grabBodyObject.playerHeldBy.DropAllHeldItems(true, false); } } } else { flag = true; Utils.DropMostHeldItems(ref playerToBeamUp); if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>())) { Object.FindObjectOfType<AudioReverbPresets>().audioPresets[3].ChangeAudioReverbForPlayer(playerToBeamUp); } playerToBeamUp.isInElevator = true; playerToBeamUp.isInHangarShipRoom = true; playerToBeamUp.isInsideFactory = false; playerToBeamUp.averageVelocity = 0f; playerToBeamUp.velocityLastFrame = Vector3.zero; playerToBeamUp.TeleportPlayer(__instance.teleporterPosition.position, true, 160f, false, true); } Debug.Log((object)"Teleport B"); SetPlayerTeleporterId.Invoke(__instance, new object[2] { playerToBeamUp, -1 }); if (flag) { __instance.shipTeleporterAudio.PlayOneShot(__instance.teleporterBeamUpSFX); if (GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } } Debug.Log((object)"Teleport C"); } } }