Decompiled source of TeleportToPlayer v0.2.0

TeleportToPlayer.dll

Decompiled a day ago
using System;
using System.Collections.Generic;
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 BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using BepInEx.Unity.IL2CPP.UnityEngine;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Microsoft.CodeAnalysis;
using Mirror;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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 TeleportToPlayer
{
	[BepInPlugin("YonahG0y.bigwalk.teleporttoplayer", "Teleport To Player", "0.2.0")]
	public class Plugin : BasePlugin
	{
		public static Plugin Instance;

		public static ConfigEntry<float> Cooldown;

		public static ConfigEntry<KeyCode> TeleportKey;

		public static ConfigEntry<float> DropHeight;

		public static ConfigEntry<float> DropSpeed;

		public override void Load()
		{
			Instance = this;
			Cooldown = ((BasePlugin)this).Config.Bind<float>("General", "Cooldown", 900f, "Seconds between teleports.");
			TeleportKey = ((BasePlugin)this).Config.Bind<KeyCode>("General", "TeleportKey", (KeyCode)112, "Key that triggers the teleport.");
			DropHeight = ((BasePlugin)this).Config.Bind<float>("General", "DropHeight", 3f, "Height above the target to drop in from.");
			DropSpeed = ((BasePlugin)this).Config.Bind<float>("General", "DropSpeed", 100f, "Downward speed on arrival.");
			((BasePlugin)this).AddComponent<TpfBehaviour>();
			((BasePlugin)this).Log.LogInfo((object)"[TPF] Loaded.");
		}
	}
	public class TpfBehaviour : MonoBehaviour
	{
		private const float ReturnCooldown = 300f;

		private const float ReturnWindow = 30f;

		private bool _keyWasHeld;

		private float _nextAllowedTime;

		private bool _hasPendingReturn;

		private float _returnExpiresAt;

		private Vector3 _returnPosition;

		private Quaternion _returnRotation;

		public TpfBehaviour(IntPtr ptr)
			: base(ptr)
		{
		}

		private void Update()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			bool keyInt = Input.GetKeyInt((KeyCode)Plugin.TeleportKey.Value);
			if (keyInt && !_keyWasHeld)
			{
				TryTeleport();
			}
			_keyWasHeld = keyInt;
		}

		private void TryTeleport()
		{
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e3: Expected O, but got Unknown
			//IL_00f7: 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_024f: 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_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0304: Unknown result type (might be due to invalid IL or missing references)
			//IL_030c: Unknown result type (might be due to invalid IL or missing references)
			//IL_031e: Unknown result type (might be due to invalid IL or missing references)
			//IL_032d: Unknown result type (might be due to invalid IL or missing references)
			//IL_035f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0366: Expected O, but got Unknown
			//IL_02a6: 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_0293: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0394: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
			Il2CppArrayBase<PlayerCharacter> val = Object.FindObjectsByType<PlayerCharacter>((FindObjectsSortMode)0);
			PlayerCharacter val2 = null;
			foreach (PlayerCharacter item in val)
			{
				if (((NetworkBehaviour)item).isLocalPlayer)
				{
					val2 = item;
					break;
				}
			}
			if ((Object)(object)val2 == (Object)null)
			{
				((BasePlugin)Plugin.Instance).Log.LogInfo((object)"[TPF] abort: local player not identified");
				return;
			}
			bool flag = default(bool);
			BepInExInfoLogInterpolatedStringHandler val3;
			if (_hasPendingReturn)
			{
				_hasPendingReturn = false;
				if (Time.realtimeSinceStartup <= _returnExpiresAt)
				{
					val2.grease.Teleport(_returnPosition, _returnRotation, true);
					_nextAllowedTime = Time.realtimeSinceStartup + 300f;
					ManualLogSource log = ((BasePlugin)Plugin.Instance).Log;
					val3 = new BepInExInfoLogInterpolatedStringHandler(31, 1, ref flag);
					if (flag)
					{
						((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("[TPF] returned to ");
						((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<Vector3>(_returnPosition);
						((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(", cooldown 5m");
					}
					log.LogInfo(val3);
					return;
				}
				((BasePlugin)Plugin.Instance).Log.LogInfo((object)"[TPF] return window expired, falling through to normal teleport");
			}
			if (Time.realtimeSinceStartup < _nextAllowedTime)
			{
				int value = Mathf.CeilToInt((_nextAllowedTime - Time.realtimeSinceStartup) / 60f);
				val2.texter.DisplayMessage($"My teleport is on a {value}m cooldown");
				((BasePlugin)Plugin.Instance).Log.LogInfo((object)"[TPF] abort: cooldown active");
				return;
			}
			List<PlayerCharacter> list = new List<PlayerCharacter>();
			foreach (PlayerCharacter item2 in val)
			{
				if ((Object)(object)item2 != (Object)(object)val2)
				{
					list.Add(item2);
				}
			}
			if (list.Count == 0)
			{
				((BasePlugin)Plugin.Instance).Log.LogInfo((object)"[TPF] abort: no other players present");
				return;
			}
			PlayerCharacter val4 = list[Random.Range(0, list.Count)];
			Vector3 position = ((Component)val4).transform.position;
			float value2 = Plugin.DropHeight.Value;
			RaycastHit val5 = default(RaycastHit);
			Vector3 val6;
			if (Physics.SphereCast(position, 0.5f, Vector3.up, ref val5, value2))
			{
				float num = ((RaycastHit)(ref val5)).distance - 0.6f;
				val6 = ((num < 0.5f) ? position : (position + Vector3.up * num));
			}
			else
			{
				val6 = position + Vector3.up * value2;
			}
			_returnPosition = ((Component)val2).transform.position;
			_returnRotation = ((Component)val2).transform.rotation;
			_hasPendingReturn = true;
			_returnExpiresAt = Time.realtimeSinceStartup + 30f;
			val2.grease.Teleport(val6, ((Component)val2).transform.rotation, true);
			val2.rb.linearVelocity = Vector3.down * Plugin.DropSpeed.Value;
			_nextAllowedTime = Time.realtimeSinceStartup + Plugin.Cooldown.Value;
			ManualLogSource log2 = ((BasePlugin)Plugin.Instance).Log;
			val3 = new BepInExInfoLogInterpolatedStringHandler(27, 2, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("[TPF] teleported above ");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(((Object)val4).name);
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" to ");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<Vector3>(val6);
			}
			log2.LogInfo(val3);
			((BasePlugin)Plugin.Instance).Log.LogInfo((object)"[TPF] remote appearance unverified: HouseNetworkTransform exposes no confirmed teleport-snap method, relying on its normal per-frame sync");
		}
	}
}