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

FREE LastName : 0.3.0 0.3.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Oxide.Core;

/* --------------------------------------------------------------------- */
/* --- Don't edit anything here if you don't know what you are doing --- */
/* --------------------------------------------------------------------- */

namespace Oxide.Plugins
{
	[Info("LastName", "deer_SWAG", "0.3.0", ResourceId = 1227)]
	[Description("Stores all player usernames")]
	class LastName : RustPlugin
	{
		#region Definitions

		const string PluginPermission = "lastname.use";

		class PluginData
		{
			public HashSet<PlayerData> Players = new HashSet<PlayerData>();

			public void Add(PlayerData player) => Players.Add(player);
		}

		class PlayerData
		{
			public ulong userID;
			public HashSet<string> Names = new HashSet<string>();

			public PlayerData() { }
			public PlayerData(ulong userID) { this.userID = userID; }

			public void Add(string name) => Names.Add(name);
		}

		#endregion Definitions

		PluginData data;

		protected override void LoadDefaultConfig()
		{
			CheckConfig();
			Puts("Default config was saved and loaded");
		}

		protected override void LoadDefaultMessages()
		{
			lang.RegisterMessages(new Dictionary<string, string>()
			{
				{ "WrongQueryChat", "/names <name/steamID>" },
				{ "WrongQueryConsole", "player.names <name/steamID>" },
				{ "NoPlayerFound", "No players found with that name/steamID" },
				{ "PlayerWasFound", "{name}({id}) was also known as: " },
				{ "DataLoadFail", "Unable to load data file.Creating a new one" }
			}, this);
		}

		void Init()
		{
			CheckConfig();

			data = Interface.Oxide.DataFileSystem.ReadObject<PluginData>(Name);
			permission.RegisterPermission("lastname.use", this);

			if (data == null)
			{
				PrintWarning(Lang("DataLoadFail"));
				SaveData();
			}
		}

		void OnServerSave()
		{
			SaveData();
		}

		void OnPlayerConnected(Network.Message packet)
		{
			if (Config.Get<bool>("ReplaceWithFirstName"))
			{
				foreach (PlayerData dataPlayer in data.Players)
				{
					if (packet.connection.userid == dataPlayer.userID)
					{
						packet.connection.username = dataPlayer.Names.First();
						break;
					}
				}
			}
		}

		PlayerData FindPlayerData(ulong userId)
		{
			foreach (var player in data.Players)
			{
				if (player.userID == userId)
					return player;
			}

			return null;
		}

		void OnPlayerInit(BasePlayer player)
		{
			var playerData = FindPlayerData(player.userID);

			if (playerData != null)
			{
				if (!playerData.Names.Contains(player.displayName))
					playerData.Add(player.displayName);
			}
			else
			{
				PlayerData p = new PlayerData(player.userID);
				p.Add(player.displayName);
				data.Add(p);
			}
		}

		[ChatCommand("lastname")]
		void cmdChat(BasePlayer player, string command, string[] args)
		{
			if (!PlayerHasPermission(player, PluginPermission))
				return;

			if (args.Length > 0)
				PrintToChat(player, GetNames(args));
			else
				PrintToChat(player, Lang("WrongQueryChat", player));
		}

		[ConsoleCommand("player.names")]
		void cmdConsole(ConsoleSystem.Arg arg)
		{
			if (arg.HasArgs())
				Puts(GetNames(arg.Args));
			else
				Puts(Lang("WrongQueryConsole"));
		}

		string GetNames(string[] args)
		{
			var message = new StringBuilder();
			string name = string.Empty;

			message.Append(Lang("PlayerWasFound"));

			try
			{
				ulong id = Convert.ToUInt64(args[0]);
				var playerData = FindPlayerData(id);

				if (playerData != null)
				{
					name = playerData.Names.First();

					foreach (string n in playerData.Names)
						message.Append(n + ", ");
				}
			}
			catch { }
			finally
			{
				if (name.Length > 0)
				{
					message.Remove(message.Length - 2, 2).Replace("{name}", name).Replace("{id}", args[0]);
				}
				else
				{
					PlayerData found = null;

					for (int i = 0; i < args.Length; i++)
						name += args[i] + " ";

					name = name.TrimEnd();

					foreach (PlayerData dataPlayer in data.Players)
					{
						foreach (string s in dataPlayer.Names)
						{
							if (s.Equals(name, StringComparison.CurrentCultureIgnoreCase))
							{
								found = dataPlayer;
								goto end;
							}
							else if (s.StartsWith(name, StringComparison.CurrentCultureIgnoreCase))
							{
								found = dataPlayer;
								goto end;
							}
							else if (StringContains(s, name, StringComparison.CurrentCultureIgnoreCase))
							{
								found = dataPlayer;
								goto end;
							}
						}
					} end:;

					if (found != null)
					{
						foreach (string s in found.Names)
							message.Append(s + ", ");

						message.Remove(message.Length - 2, 2).Replace("{name}", name).Replace("{id}", found.userID.ToString());
					}
					else
					{
						message.Clear();
						message.Append(Lang("NoPlayerFound"));
					}
				}
			}

			return message.ToString();
		}

		void SendHelpText(BasePlayer player)
		{
			if (PlayerHasPermission(player, PluginPermission))
				PrintToChat(player, Lang("WrongQuery"));
		}

		void CheckConfig()
		{
			ConfigItem("ReplaceWithFirstName", false);

			SaveConfig();
		}

		void SaveData()
		{
			Interface.Oxide.DataFileSystem.WriteObject(Name, data);
		}

		#region Helpers

		void ConfigItem(string name, object defaultValue)
		{
			Config[name] = Config[name] ?? defaultValue;
		}

		bool StringContains(string source, string value, StringComparison comparison)
		{
			return source.IndexOf(value, comparison) >= 0;
		}

		string Lang(string key, BasePlayer player = null)
		{
			return lang.GetMessage(key, this, player?.UserIDString);
		}

		bool PlayerHasPermission(BasePlayer player, string permissionName)
		{
			return player.IsAdmin || permission.UserHasPermission(player.UserIDString, permissionName);
		}

		#endregion Helpers

	}
}

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