using UnityEngine; using Newtonsoft.Json; using Oxide.Core.Libraries.Covalence; namespace Oxide.Plugins { [Info("Jump", "Zeeuss", "0.1.0")] [Description("Jumps you to the location you are looking at")] public class Jump : RustPlugin { #region Init private const string permUse = "jump.use"; void Init() { permission.RegisterPermission(permUse, this); if (!LoadConfigVariables()) { return; } } #endregion #region Command [ChatCommand("jump")] void jumpCmd(BasePlayer ply, string command, string[] args) { if (!permission.UserHasPermission(ply.UserIDString, permUse)) { return; } IPlayer iPly = covalence.Players.FindPlayer(ply.UserIDString); LayerMask terrainLayerMask = LayerMask.GetMask("Terrain", "World", "Tree", "Deployed", "Construction", "Vehicle Large"); RaycastHit hit; if (Physics.Raycast(ply.eyes.HeadRay(), out hit, configData.MaxDistance, terrainLayerMask)) { iPly.Teleport(hit.point.x, hit.point.y, hit.point.z); } else { var pos = ply.eyes.position + ply.eyes.HeadRay().direction * configData.MaxDistance; iPly.Teleport(pos.x, pos.y, pos.z); } // DEBUG: //RaycastHit[] hits = Physics.RaycastAll(ply.eyes.transform.position, ply.eyes.HeadRay().direction); //foreach (RaycastHit hitInfo in hits) //{ // Collider hitCollider = hitInfo.collider; // GameObject hitObject = hitCollider.gameObject; // int hitLayer = hitObject.layer; // // Do something with the hitLayer value, e.g., print it // Puts($"Hit layer: {LayerMask.LayerToName(hitLayer)}"); //} //DEBUG: Puts($"{hit.collider.ToString()}\n{hit.collider.name.ToString()}"); //DEBUG: Puts($"{hit.point.x}, {hit.point.y}, {hit.point.z}"); } #endregion #region Config private ConfigData configData; class ConfigData { [JsonProperty(PropertyName = "Max jump distance")] public float MaxDistance = 300f; } private bool LoadConfigVariables() { try { configData = Config.ReadObject(); } catch { return false; } SaveConfig(configData); return true; } protected override void LoadDefaultConfig() { configData = new ConfigData(); SaveConfig(configData); } void SaveConfig(ConfigData config) { Config.WriteObject(config, true); } #endregion } }