Иконка ресурса

FREE ATP : 2.0.3 2.0.3

Нет прав для скачивания
C#:
using Facepunch;
using Newtonsoft.Json;
using Oxide.Core.Configuration;
using Oxide.Core.Plugins;
using Oxide.Core;
using Oxide.Game.Rust;
using Network;
using Rust;
using System.Collections.Generic;
using System.Collections;
using System.Globalization;
using System.Linq;
using System;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("ATP", "mspeedie", "2.0.3")]
    [Description("Teleport for admins")]
    class ATP : RustPlugin
    {
		#region Configuration

		private Configuration config;

		public class Configuration
		{
			[JsonProperty(PropertyName = "TP permission")]
			public string PermTp { get; set; } =  "ATP.tp";

			[JsonProperty(PropertyName = "TP Players to you permission")]
			public string PermTp2 { get; set; } =  "ATP.tp2";

			[JsonProperty(PropertyName = "Allow TP to sleepers")]
			public string PermSleepers { get; set; } = "ATP.sleeper";

			[JsonProperty(PropertyName = "Version")]
			public Oxide.Core.VersionNumber Version { get; set; }
			
		}

		protected override void LoadDefaultConfig() => config = new Configuration();

		protected override void LoadConfig()
		{
			try
			{
				base.LoadConfig();
				config = Config.ReadObject<Configuration>();
				if (config == null)
				{
					throw new JsonException();
				}

				if (config.Version < Version)
				{
					Puts("Configuration appears to be outdated; updating and saving");
					config.Version = Version;
					SaveConfig();
				}
			}
			catch
			{
				Puts($"Configuration file {Name}.json is invalid; using defaults");
				LoadDefaultConfig();
			}

			// CheckConfig();
		}

		protected override void SaveConfig()
		{
			Puts($"Configuration changes saved to {Name}.json");
			Config.WriteObject(config, true);
		}

		private void OnServerInitialized()
		{
			// set up permission to run chat command
			if (!permission.PermissionExists(config.PermTp))
				permission.RegisterPermission(config.PermTp,this);
			if (!permission.PermissionExists(config.PermTp2))
				permission.RegisterPermission(config.PermTp2,this);
			if (!permission.PermissionExists(config.PermSleepers))
				permission.RegisterPermission(config.PermSleepers,this);
		}

		#endregion Configuration

		string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);

		protected override void LoadDefaultMessages()
		{
			lang.RegisterMessages(new Dictionary<string, string>
			{
				["multipleplayers"] = "Multiple players found:\n\r",
				["nopermission"] = "You do not have permission for atp",
				["noplayerfound"] = "No player found for name: ",
				["noplayergiven"] = "No player name or ID given ",
				["noplayertogiven"] = "No player name or ID given for to",
				["noplayerpos"] = "No player position found for name: ",
				["syntaxatp"] = "please provide either a target player (to) or two players (from to)",
				["syntaxatp2"] = "please provide a target player",
				["teleportingtwo"] = "Teleporting from to: ",
				["teleportingto"] = "Teleporting to: ",
				["teleportingtoyou"] = "Teleporting to you: "
			}, this);
		}

       private BasePlayer FindPlayer(string PlayerFind, BasePlayer player)
       {
			BasePlayer	from_player = null;
			int			player_count = 0;
			string		returnstring = "";
			ulong		fp_user_ID = 0u;

           if (string.IsNullOrEmpty(PlayerFind))
           {
				SendReply(player, Lang("noplayergiven", player.UserIDString));
				return null as BasePlayer;
           }

			if (!string.IsNullOrEmpty(PlayerFind))
			{
				ulong.TryParse ( PlayerFind, out fp_user_ID );
			}
			if (fp_user_ID != 0u)
			{
				foreach (BasePlayer plyr in BasePlayer.activePlayerList.Where(x=>x.userID == fp_user_ID))
				{
					from_player = plyr;
					player_count++;
					returnstring += string.Format("{0} - {1}\n\r", plyr.userID, plyr.displayName);
				}
				if (from_player == null && permission.UserHasPermission(player.UserIDString, config.PermSleepers))
				{
					foreach (BasePlayer splyr in BasePlayer.sleepingPlayerList.Where(x=>x.userID == fp_user_ID))
					{
						from_player = splyr;
						player_count++;
						returnstring += string.Format("{0} - {1}\n\r", splyr.UserIDString, splyr.displayName);
					}
				}
				if(player_count > 1)
				{
					SendReply(player, String.Concat(Lang("multipleplayers", player.UserIDString), returnstring));
					return null as BasePlayer;
				}
			}
			else if (from_player == null)
			{
				foreach (BasePlayer plyr in BasePlayer.activePlayerList)
				{
					if (plyr.displayName.Contains(PlayerFind, CompareOptions.OrdinalIgnoreCase))
					{
						from_player = plyr;
						player_count++;
						returnstring += string.Format("{0} - {1}\n\r", plyr.userID, plyr.displayName);
					}
				}
				if (from_player == null && permission.UserHasPermission(player.UserIDString, config.PermSleepers))
				{
					foreach (BasePlayer splyr in BasePlayer.sleepingPlayerList)
					{
						if (splyr.displayName.Contains(PlayerFind, CompareOptions.OrdinalIgnoreCase))
						{
							from_player = splyr;
							player_count++;
							returnstring += string.Format("{0} - {1}\n\r", splyr.UserIDString, splyr.displayName);
						}
					}
				}
				if(player_count > 1)
				{
					SendReply(player, String.Concat(Lang("multipleplayers", player.UserIDString), returnstring));
					return null as BasePlayer;
				}
			}

			if (from_player == null)
			{
				SendReply(player, Lang("noplayerfound", PlayerFind));
               return null as BasePlayer;
			}
			// SendReply(player,"found: " + from_player.displayName); // debug
			return from_player;
       }

		[ChatCommand("admintp")]
		private void ChatCommandatp(BasePlayer player, string cmd, string[] args)
		{
			BasePlayer from_player = null as BasePlayer;
			BasePlayer to_player = null as BasePlayer;
			if (!permission.UserHasPermission(player.UserIDString, config.PermTp))
			{
				SendReply(player, Lang("nopermission", player.UserIDString));
				return;
			}
			else if (args == null || args.Length < 1 || string.IsNullOrEmpty(args[0]))
			{
				SendReply(player, Lang("noplayergiven", player.UserIDString));
				return;
			}
			else if (args.Length > 2)
			{
				SendReply(player, Lang("syntaxatp", player.UserIDString));
				return;
			}
			else if (args.Length == 1)
			{
				to_player = FindPlayer(args[0].ToLower(), player);
				if (to_player != null)
				{
					var to_player_pos = to_player.transform.position;
					if (to_player_pos != null)
					{
						SendReply(player, Lang("teleportingto", player.UserIDString)+ to_player.displayName);
						if (player.HasParent())
						{
							player.SetParent(null, true, true);
						}
						player.Teleport(to_player_pos);
						player.ClientRPC(RpcTarget.Player("ForcePositionTo", player), to_player_pos);
					}
					else
					{
						SendReply(player, String.Concat(Lang("noplayerpos", player.UserIDString),args[0]));
					}
				}
				return;
			}
			else if (args.Length == 2)
			{
				if (string.IsNullOrEmpty(args[1]))
				{
					SendReply(player, Lang("noplayertogiven", player.UserIDString));
					return;
				}
				else
				{
					from_player = FindPlayer(args[0].ToLower(), player);
					to_player = FindPlayer(args[1].ToLower(), player);
					if (from_player != null && to_player != null)
					{
						var to_player_pos = to_player.transform.position;
						if (to_player_pos != null)
						{
							SendReply(player, string.Format(Lang("teleportingtwo", player.UserIDString)+ "{0} -> {1}", from_player.displayName, to_player.displayName));
							if (from_player.HasParent())
							{
								from_player.SetParent(null, true, true);
							}
							if (from_player.IsConnected)
							{
								from_player.EndLooting();
							}
							from_player.Teleport(to_player_pos);
							from_player.ClientRPC(RpcTarget.Player("ForcePositionTo", from_player), to_player_pos);
						}
						else
						{
							SendReply(player, String.Concat(Lang("noplayerpos", player.UserIDString),args[0]));
						}
					}
				}
			}
		}

		[ChatCommand("admintp2")]
		private void ChatCommandatp2(BasePlayer player, string cmd, string[] args)
		{
			if (!permission.UserHasPermission(player.UserIDString, config.PermTp2))
			{
				SendReply(player, Lang("nopermission", player.UserIDString));
				return;
			}
			else if (args == null || args.Length < 1 || string.IsNullOrEmpty(args[0]))
			{
				SendReply(player, Lang("noplayergiven", player.UserIDString));
				return;
			}
			else if (args.Length > 1)
			{
				SendReply(player, Lang("syntaxatp2", player.UserIDString));
				return;
				
			}
			else
			{
				BasePlayer to_player = null as BasePlayer;
				to_player = FindPlayer(args[0].ToLower(), player);
				if (to_player != null)
				{
					var player_pos = player.transform.position;
					if (player_pos != null)
					{
						SendReply(player, Lang("teleportingtoyou", player.UserIDString)+ to_player.displayName);
						if (to_player.HasParent())
						{
							to_player.SetParent(null, true, true);
						}
						if (to_player.IsConnected)
						{
							to_player.EndLooting();
						}
						to_player.Teleport(player_pos);
						to_player.ClientRPC(RpcTarget.Player("ForcePositionTo", to_player), player_pos);
						to_player.SendEntityUpdate();
					}
					else
					{
						SendReply(player, String.Concat(Lang("noplayerpos", player.UserIDString),args[0]));
					}
				}
				return;
			}
		}

	}
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху