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

FREE PlayerList : 0.3.2 0.3.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
/*
 * TODO:
 * Add pagination to handle large amounts of players
 * Figure out limit for showing in a single message
 */

using System;
using System.Collections.Generic;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;

namespace Oxide.Plugins
{
    [Info("PlayerList", "Wulf/lukespragg", "0.3.2", ResourceId = 2126)]
    [Description("Shows a list and count of all online, non-hidden players")]

    class PlayerList : CovalencePlugin
    {
        #region Initialization

        const string permAllow = "playerlist.allow";
        const string permHide = "playerlist.hide";

        bool adminSeparate;
        string adminColor;

        protected override void LoadDefaultConfig()
        {
            Config["Admin List Separate (true/false)"] = adminSeparate = GetConfig("Admin List Separate (true/false)", false);
            Config["Admin Color (Hex Format or Name)"] = adminColor = GetConfig("Admin Color (Hex Format or Name)", "e68c17");

            // Cleanup
            Config.Remove("SeparateAdmin");
            Config.Remove("AdminColor");

            SaveConfig();
        }

        void Init()
        {
            LoadDefaultConfig();
            LoadDefaultMessages();
            permission.RegisterPermission(permAllow, this);
            permission.RegisterPermission(permHide, this);
        }

        #endregion

        #region Localization

        void LoadDefaultMessages()
        {
            // English
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["AdminCount"] = "{0} администраторы онлайн",
                ["AdminList"] = "Администраторы онлайн ({0}): {1}",
                ["NobodyOnline"] = "Ни один из игроков онлайн",
                ["NotAllowed"] = "Нельзя использовать команду «{0}»",
                ["OnlyYou"] = "Вы являетесь единственным онлайн!",
                ["PlayerCount"] = "{0} игрока (ов) онлайн",
                ["PlayerList"] = "Игроков онлайн ({0}): {1}"
            }, this);

            // French
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["AdminCount"] = "{0} administrateurs en ligne",
                ["AdminList"] = "Administrateurs en ligne ({0}) : {1}",
                ["NobodyOnline"] = "Aucuns joueurs ne sont actuellement en ligne",
                ["NotAllowed"] = "Vous n’êtes pas autorisé à utiliser la commande « {0} »",
                ["OnlyYou"] = "Vous êtes la seule personne en ligne !",
                ["PlayerCount"] = "{0} joueur(s) en ligne",
                ["PlayerList"] = "Joueurs en ligne ({0}) : {1}"
            }, this, "fr");

            // German
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["AdminCount"] = "{0} Administratoren online",
                ["AdminList"] = "Administratoren online ({0}): {1}",
                ["NobodyOnline"] = "Keine Spieler sind gerade online",
                ["NotAllowed"] = "Sie sind nicht berechtigt, verwenden Sie den Befehl '{0}'",
                ["OnlyYou"] = "Du bist der einzige Online!",
                ["PlayerCount"] = "{0} Spieler online",
                ["PlayerList"] = "Spieler online ({0}): {1}"
            }, this, "de");

            // Russian
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["AdminCount"] = "{0} администраторы онлайн",
                ["AdminList"] = "Администраторы онлайн ({0}): {1}",
                ["NobodyOnline"] = "Ни один из игроков онлайн",
                ["NotAllowed"] = "Нельзя использовать команду «{0}»",
                ["OnlyYou"] = "Вы являетесь единственным онлайн!",
                ["PlayerCount"] = "{0} игрока (ов) онлайн",
                ["PlayerList"] = "Игроков онлайн ({0}): {1}"
            }, this, "ru");

            // Spanish
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["AdminCount"] = "{0} administradores en línea",
                ["AdminList"] = "Los administradores en línea ({0}): {1}",
                ["NobodyOnline"] = "No hay jugadores están actualmente en línea",
                ["NotAllowed"] = "No se permite utilizar el comando '{0}'",
                ["OnlyYou"] = "Usted es el único en línea!",
                ["PlayerCount"] = "{0} jugadores en línea",
                ["PlayerList"] = "Jugadores en línea ({0}): {1}"
            }, this, "es");
        }

        #endregion

        #region Commands

        [Command("online")]
        void OnlineCommand(IPlayer player, string command, string[] args)
        {
            if (!player.HasPermission(permAllow))
            {
                player.Reply(Lang("NotAllowed", player.Id, command));
                return;
            }

            var adminCount = players.Connected.Count(p => p.IsAdmin && !p.HasPermission(permHide));
            var playerCount = players.Connected.Count(p => !p.IsAdmin && !p.HasPermission(permHide));

            player.Reply($"{Lang("AdminCount", player.Id, adminCount)}, {Lang("PlayerCount", player.Id, playerCount)}");
        }

        [Command("players", "who")]
        void PlayersCommand(IPlayer player, string command, string[] args)
        {
            if (!player.HasPermission(permAllow))
            {
                player.Reply(Lang("NotAllowed", player.Id, command));
                return;
            }

            var adminCount = players.Connected.Count(p => p.IsAdmin && !p.HasPermission(permHide));
            var playerCount = players.Connected.Count(p => !p.IsAdmin && !p.HasPermission(permHide));
            var totalCount = adminCount + playerCount;

            if (totalCount == 0) player.Reply(Lang("NobodyOnline", player.Id));
            else if (totalCount == 1 && player.Id != "server_console") player.Reply(Lang("OnlyYou", player.Id));
            else
            {
                var adminList = string.Join(", ", players.Connected.Where(p => p.IsAdmin && !p.HasPermission(permHide)).Select(p => covalence.FormatText($"[#{adminColor}]{p.Name.Sanitize()}[/#]")).ToArray());
                var playerList = string.Join(", ", players.Connected.Where(p => !p.IsAdmin && !p.HasPermission(permHide)).Select(p => p.Name.Sanitize()).ToArray());

                if (adminSeparate && !string.IsNullOrEmpty(adminList)) player.Reply(Lang("AdminList", player.Id, adminCount, adminList.TrimEnd(' ').TrimEnd(',')));
                else
                {
                    playerCount = adminCount + playerCount;
                    playerList = string.Concat(adminList, ", ", playerList);
                }
                if (!string.IsNullOrEmpty(playerList)) player.Reply(Lang("PlayerList", player.Id, playerCount, playerList.TrimEnd(' ').TrimEnd(',')));
            }
        }

        #endregion

        #region Helpers

        T GetConfig<T>(string name, T value) => Config[name] == null ? value : (T)Convert.ChangeType(Config[name], typeof(T));

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

        #endregion
    }
}

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