Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ?using System.Collections.Generic;
- using Oxide.Core;
- using System.Linq;
- using Oxide.Core.Libraries.Covalence;
- namespace Oxide.Plugins
- {
- [Info("Whisper", "Ryan/mTrX", "1.1.1")]
- class Whisper : CovalencePlugin
- {
- #region Declaration
- private const string UsePerm = "whisper.use";
- private const string ReplyPerm = "whisper.reply";
- private string Command;
- private string ReplyCmd;
- #endregion
- #region Configuration
- private void LoadDefaultConfig()
- {
- Puts("Generating default configuration file");
- Config["Command"] = Command = "whisper";
- Config["Reply Command"] = ReplyCmd = "wr";
- Config.Save();
- }
- #endregion
- #region Lang
- private struct Msg
- {
- public const string Prefix = "Prefix";
- public const string Message = "Message";
- public const string NoPermission = "NoPermission";
- public const string Whispered = "Whispered";
- public const string InvalidArgs = "InvalidArgs";
- public const string NotId = "NotId";
- public const string NoPlayer = "NoPlayer";
- public const string InvalidArgsReply = "InvalidArgsReply";
- public const string Replied = "Replied";
- public const string Reply = "Reply;";
- }
- private void LoadDefaultMessages()
- {
- lang.RegisterMessages(new Dictionary<string, string>
- {
- [Msg.Prefix] = "[#ff6666][WHISPER][/#] ",
- [Msg.Message] = "[#c0c0c0ff]{0}[/#]",
- [Msg.NoPermission] = "You don't have permission to use that commannd",
- [Msg.Whispered] = "Whispered {0} ({1}) with message '{2}'",
- [Msg.InvalidArgs] = "Invalid arguments. Usage: '{0} <id> <message>'",
- [Msg.InvalidArgsReply] = "Invalid arguments. Usage '{0} <message>'",
- [Msg.NotId] = "The ID you entered doesn't seem to be a valid Steam ID",
- [Msg.NoPlayer] = "No online player found with that Steam ID",
- [Msg.Replied] = "You have sent your reply",
- [Msg.Reply] = "[REPLY] {0} replied with message '{1}'"
- }, this);
- }
- #endregion
- #region Methods
- private string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
- private ulong FindPlayersSingleId(string nameOrIdOrIp, IPlayer player)
- {
- var targets = FindPlayers(nameOrIdOrIp);
- if (targets.Count > 1)
- {
- player.Reply("MultiplePlayers", string.Join(", ", targets.Select(p => p.displayName).ToArray()));
- return 0;
- }
- ulong userId;
- if (targets.Count <= 0)
- {
- if (ulong.TryParse(nameOrIdOrIp, out userId)) return userId;
- player.Reply("PlayerNotFound");
- return 0;
- }
- else
- userId = targets.First().userID;
- return userId;
- }
- private static HashSet<BasePlayer> FindPlayers(string nameOrIdOrIp)
- {
- var foundPlayers = new HashSet<BasePlayer>();
- if (string.IsNullOrEmpty(nameOrIdOrIp)) return foundPlayers;
- foreach (var activePlayer in BasePlayer.activePlayerList)
- {
- if (activePlayer.UserIDString.Equals(nameOrIdOrIp))
- foundPlayers.Add(activePlayer);
- else if (!string.IsNullOrEmpty(activePlayer.displayName) && activePlayer.displayName.ToLower().IndexOf(nameOrIdOrIp) != -1)
- foundPlayers.Add(activePlayer);
- else if (activePlayer.net?.connection != null && activePlayer.net.connection.ipaddress.Equals(nameOrIdOrIp))
- foundPlayers.Add(activePlayer);
- }
- return foundPlayers;
- }
- #endregion
- #region Hooks
- private void Init()
- {
- permission.RegisterPermission(UsePerm, this);
- permission.RegisterPermission(ReplyPerm, this);
- Command = (string) Config["Command"];
- ReplyCmd = (string) Config["Reply Command"];
- if (string.IsNullOrEmpty(Command) || string.IsNullOrEmpty(ReplyCmd))
- {
- LogWarning("Configuration file not valid");
- LoadDefaultConfig();
- }
- AddCovalenceCommand(Command, "WhisperCommand");
- AddCovalenceCommand(ReplyCmd, "ReplyCommand");
- }
- #endregion
- #region Commands
- private void WhisperCommand(IPlayer player, string command, string[] args)
- {
- if (!player.IsAdmin && !player.HasPermission(UsePerm))
- {
- player.Reply(Lang(Msg.NoPermission, player.Id));
- return;
- }
- if (args.Length < 2)
- {
- player.Reply(Lang(Msg.InvalidArgs, player.Id, Command));
- return;
- }
- string userId = args[0];
- if (!userId.IsSteamId())
- {
- ulong playerID = FindPlayersSingleId(userId, player);
- if (playerID == 0)
- {
- player.Reply(Lang(Msg.NoPlayer, player.Id));
- return;
- }
- userId = playerID.ToString();
- }
- var foundPlayer = players.FindPlayerById(userId);
- string foundPlayerName = FindPlayers(userId).First().displayName;
- if (foundPlayer == null || !foundPlayer.IsConnected)
- {
- player.Reply(Lang(Msg.NoPlayer, player.Id));
- return;
- }
- var fullArgs = string.Join(" ", args.ToList().Skip(1).ToArray());
- player.Reply(Lang(Msg.Whispered, player.Id, foundPlayer.Name, foundPlayer.Id, fullArgs));
- foundPlayer.Reply(covalence.FormatText(Lang(Msg.Prefix, player.Id) + foundPlayerName + ": " + Lang(Msg.Message, player.Id, fullArgs)));
- }
- private void ReplyCommand(IPlayer player, string command, string[] args)
- {
- if (!player.IsAdmin && !player.HasPermission(ReplyPerm))
- {
- player.Reply(Lang(Msg.NoPermission, player.Id));
- return;
- }
- if (args.Length < 1)
- {
- player.Reply(Lang(Msg.InvalidArgsReply, player.Id, ReplyCmd));
- return;
- }
- var fullArgs = string.Join(" ", args);
- Puts(Lang(Msg.Reply, null, player.Name, fullArgs));
- player.Reply(Lang(Msg.Replied, player.Id));
- }
- #endregion
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment