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

FREE CustomNameChange : 1.0.2 1.0.2

Нет прав для скачивания
C#:
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace Oxide.Plugins {
    [Info("CustomNameChange", "MBR", "1.0.2")]
    class CustomNameChange : RustPlugin {
        private Dictionary<string, int> Changes = new Dictionary<string, int>();
#region Hooks
        private void Init() {
            Changes = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, int>>(this.Name);
        }
        private void Unload() => SaveData();
#endregion
#region Commands
        [ChatCommand("itemnamechange")]
        private void ChangeItemnameCMD(BasePlayer player, string command, string[] args) {
            int val = 0;
            if (!Changes.TryGetValue(player.UserIDString, out val) || val == 0) {
                SendReply(player, "<color=red>You don't have any item name changes left.</color>");
                return;
            }
            if (args.Length < 1) {
                SendReply(player, "You currently have <color=orange>" + val + "</color> item name change" + (val == 1 ? "" : "s"));
                return;
            }
            Item helditem = player.GetActiveItem();
            if (helditem == null) {
                SendReply(player, "You're not holding an item!");
                return;
            }
            if (helditem.amount != 1) {
                SendReply(player, "You can only rename one item!");
                return;
            }
            var text = string.Join(" ", args);
            var filteredText = RemoveTags(text);
            if (filteredText.Length > 20) {
                SendReply(player, "Name is too long, please pick a shorter name! (20 letters)");
                return;
            }
            helditem.name = filteredText;
            SendReply(player, "New name is: " + helditem.name);
            helditem.MarkDirty();
            if (Changes[player.UserIDString] == 1) Changes.Remove(player.UserIDString);
            else Changes[player.UserIDString]--;
        }
        [ConsoleCommand("giveitemnamechange")]
        private void AddItemNameChangeCMD(ConsoleSystem.Arg arg) {
            if (arg == null || (arg.Connection != null && !arg.IsAdmin)) return;
            var args = arg.Args;
            if (args == null || args.Length < 1) {
                Puts("Invalid command! additemnamechange <name|ID>");
                return;
            }
            var player = FindConnectedPlayer(args[0], true);
            if (player == null) {
                Puts("Couldn't find player " + args[0]);
                return;
            }
            var count = 1;
            if (args.Length > 1 && !int.TryParse(args[1], out count)) {
                SendReply(arg, "Not a valid int: " + args[1]);
                return;
            }
            var bp = player.Object as BasePlayer;
            if (bp != null && bp.IsConnected) SendReply(bp, "<color=green>You have been given 1 item name change! <i>/itemnamechange</i></color>");
            if (!Changes.ContainsKey(player.Id)) Changes.Add(player.Id, count);
            else Changes[player.Id] += count;
            Puts("Gave " + count + " item name change" + (count == 1 ? "" : "s") + " to " + player.Id + "/" + player.Name);
        }
        [ConsoleCommand("inccount")]
        private void CCMD(ConsoleSystem.Arg arg) {
            if (arg == null || (arg.Connection != null && !arg.IsAdmin)) return;
            var arr = new List<string>();
            foreach (var item in Changes) arr.Add(item.Key + ": " + item.Value);
            Puts(string.Join("\n", arr));
        }
#endregion
#region Methods
        private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(this.Name, Changes);
        IPlayer FindConnectedPlayer(string nameOrIdOrIp, bool tryFindOfflineIfNoOnline = false) {
            if (string.IsNullOrEmpty(nameOrIdOrIp)) throw new ArgumentNullException();
            try {
                var p = covalence.Players.FindPlayer(nameOrIdOrIp);
                if (p != null) if ((!p.IsConnected && tryFindOfflineIfNoOnline) || p.IsConnected) return p;
                var connected = covalence.Players.Connected;
                List<IPlayer> players = new List<IPlayer>();
                foreach (var player in connected) {
                    var IP = player?.Address ?? string.Empty;
                    var name = player?.Name ?? string.Empty;
                    var ID = player?.Id ?? string.Empty;
                    if (ID.Equals(nameOrIdOrIp, StringComparison.OrdinalIgnoreCase) || name.IndexOf(nameOrIdOrIp, StringComparison.OrdinalIgnoreCase) >= 0 || IP == nameOrIdOrIp || string.Equals(name, nameOrIdOrIp, StringComparison.OrdinalIgnoreCase)) players.Add(player);
                }
                if (players.Count <= 0 && tryFindOfflineIfNoOnline) {
                    foreach (var offlinePlayer in covalence.Players.All) {
                        if (offlinePlayer.IsConnected) continue;
                        var name = offlinePlayer?.Name ?? string.Empty;
                        var ID = offlinePlayer?.Id ?? string.Empty;
                        if (ID.Equals(nameOrIdOrIp, StringComparison.OrdinalIgnoreCase) || name.IndexOf(nameOrIdOrIp, StringComparison.OrdinalIgnoreCase) >= 0 || string.Equals(name, nameOrIdOrIp, StringComparison.OrdinalIgnoreCase)) players.Add(offlinePlayer);
                    }
                }
                if (players.Count > 1 || players.Count <= 0) return null;
                else return players[0];
            }
            catch (Exception ex) {
                PrintError(ex.ToString() + " ^ FindConnectedPlayer ^ ");
                return null;
            }
        }
        private string RemoveTags(string phrase) {
            if (string.IsNullOrEmpty(phrase)) return phrase;
            //	Forbidden formatting tags
            var forbiddenTags = new List<string> {
                "</color>", "</size>", "<b>", "</b>", "<i>", "</i>"
            }
            ;
            //	Replace Color Tags
            phrase = new Regex("(<color=.+?>)").Replace(phrase, string.Empty);
            //	Replace Size Tags
            phrase = new Regex("(<size=.+?>)").Replace(phrase, string.Empty);
            var phraseSB = new StringBuilder(phrase);
            for (int i = 0; i < forbiddenTags.Count; i++) {
                var tag = forbiddenTags[i];
                phraseSB.Replace(tag, string.Empty);
            }
            return phraseSB.ToString();
        }
#endregion
    }
}

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