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

FREE PopCommand : 1.0.2 1.0.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using ConVar;
namespace Oxide.Plugins {
    [Info("PopCommand", "HandyS11", "1.0.2")]
    [Description("Displays the population information of your server")]
    public class PopCommand : RustPlugin {
#region Configuration
        private Configuration _configuration;
        private sealed class Configuration {
            [JsonProperty(PropertyName = "Use permission for lambda players")]
            public bool UsePermissionForPlayers {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Broadcast to every player on /pop")]
            public bool DoBroadcast {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Chat default avatar")]
            public ulong ChatAvatar {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Display Options")]
            public DisplayOptions DisplayOption {
                get;
                set;
            }
        }
        public class DisplayOptions {
            [JsonProperty(PropertyName = "Show player count")]
            public bool ShowPlayerCount {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Show server slots")]
            public bool ShowServerSlots {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Show sleepers")]
            public bool ShowSleepers {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Show joining players")]
            public bool ShowJoiningPlayers {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Show players in queue")]
            public bool ShowPlayersInQueue {
                get;
                set;
            }
        }
        private Configuration GetDefaultConfig() {
            return new Configuration {
                UsePermissionForPlayers = false, DoBroadcast = false, ChatAvatar = 0, DisplayOption = new DisplayOptions {
                    ShowPlayerCount = true, ShowServerSlots = true, ShowSleepers = false, ShowJoiningPlayers = false, ShowPlayersInQueue = false,
                }
                ,
            }
            ;
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            _configuration = Config.ReadObject<Configuration>();
            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            _configuration = GetDefaultConfig();
        }
        protected override void SaveConfig() {
            Config.WriteObject(_configuration, true);
        }
#endregion
#region Permissions
        private static class Permission {
            public const string PopCommand = "popcommand.pop";
            public const string PopCommandAdmin = "popcommand.apop";
        }
# endregion
#region Hooks
        private void Init() {
            permission.RegisterPermission(Permission.PopCommand, this);
            permission.RegisterPermission(Permission.PopCommandAdmin, this);
        }
        private void OnPlayerChat(BasePlayer player, string message, Chat.ChatChannel channel) {
            switch (message) {
                case "!pop" : PopPlayer(player, "pop");
                break;
                case "!apop" : PopAdmin(player, "apop");
                break;
            }
        }
#endregion
#region Functions
        private void SendChatMessage(BasePlayer player, string message) {
            Player.Message(player, message, _configuration.ChatAvatar);
        }
        private void SendMessageToAll(string message) {
            Server.Broadcast(message, _configuration.ChatAvatar);
        }
        private bool HasPermission(BasePlayer player, string permissionName) {
            return permission.UserHasPermission(player.UserIDString, permissionName);
        }
        private IEnumerable<int> GetData() {
            var data = new List<int>();
            if (_configuration.DisplayOption.ShowPlayerCount) data.Add(BasePlayer.activePlayerList.Count);
            if (_configuration.DisplayOption.ShowServerSlots) data.Add(ConVar.Server.maxplayers);
            if (_configuration.DisplayOption.ShowSleepers) data.Add(BasePlayer.sleepingPlayerList.Count);
            if (_configuration.DisplayOption.ShowJoiningPlayers) data.Add(ServerMgr.Instance.connectionQueue.joining.Count);
            if (_configuration.DisplayOption.ShowPlayersInQueue) data.Add(ServerMgr.Instance.connectionQueue.queue.Count);
            return data;
        }
        private bool VerifyPlaceholders(string template, int expectedCount) {
            var actualCount = Regex.Matches(template, @"\{\d+\}").Count;
            return actualCount <= expectedCount;
        }
#endregion
#region Command
        private static class Command {
            public const string PopPlayer = "pop";
            public const string PopAdmin = "apop";
        }
        [ChatCommand(Command.PopPlayer)]
        private void PopPlayer(BasePlayer player, string command, string[] args = null) {
            if (_configuration.UsePermissionForPlayers && !HasPermission(player, Permission.PopCommand)) {
                SendChatMessage(player, GetMessage(MessageKey.PopPermissionDeny, player.UserIDString));
                return;
            }
            if (_configuration.DoBroadcast) {
                SendMessageToAll(GetMessage(MessageKey.PopMessage, player.UserIDString, GetData().Cast<object>().ToArray()));
                return;
            }
            SendChatMessage(player, GetMessage(MessageKey.PopMessage, player.UserIDString, GetData().Cast<object>().ToArray()));
        }
        [ChatCommand(Command.PopAdmin)]
        private void PopAdmin(BasePlayer player, string command, string[] args = null) {
            if (!player.IsAdmin || !HasPermission(player, Permission.PopCommandAdmin)) {
                SendChatMessage(player, GetMessage(MessageKey.PopAdminPermissionDeny, player.UserIDString));
                return;
            }
            SendChatMessage(player, GetMessage(MessageKey.PopMessageAdmin, player.UserIDString, BasePlayer.activePlayerList.Count, ConVar.Server.maxplayers, BasePlayer.sleepingPlayerList.Count, ServerMgr.Instance.connectionQueue.joining.Count, ServerMgr.Instance.connectionQueue.queue.Count ));
        }
#endregion
#region Localization
        private static class MessageKey {
            public const string PopMessage = "PopCommand.ChatMessage";
            public const string PopMessageAdmin = "PopCommand.AdminMessage";
            public const string PopPermissionDeny = "PopCommand.PermissionDeny";
            public const string PopAdminPermissionDeny = "PopCommand.AdminPermissionDeny";
            public const string PopError = "PopCommand.Error";
        }
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                [MessageKey.PopMessage]
                = "Players online: <color=orange>{0}</color>/<color=orange>{1}</color>", [MessageKey.PopMessageAdmin] = "Players online: <color=orange>{0}</color>/<color=orange>{1}</color> | Sleeping: <color=orange>{2}</color> | Joining: <color=orange>{3}</color> | Queued: <color=orange>{4}</color>", [MessageKey.PopPermissionDeny] = "You are not allowed to run this command!", [MessageKey.PopAdminPermissionDeny] = "Only administrators can run this command!", [MessageKey.PopError] = "The config/lang file contains some errors!",
            }
            , this);
            lang.RegisterMessages(new Dictionary<string, string> {
                [MessageKey.PopMessage]
                = "Joueurs en ligne : <color=green>{0}</color>/<color=red>{1}</color>", [MessageKey.PopMessageAdmin] = "Joueurs en ligne : <color=orange>{0}</color>/<color=orange>{1}</color> | Endormi : <color=orange>{2}</color> | En train de rejoindre : <color=orange>{3}</color> | Dans la queue : <color=orange>{4}</color>", [MessageKey.PopPermissionDeny] = "Vous n'êtes pas autorisé à utiliser cette commande !", [MessageKey.PopAdminPermissionDeny] = "Seul les administrateurs peuvent utiliser cette commande !", [MessageKey.PopError] = "Le fichier de configuration et/ou de traduction contient des erreurs !",
            }
            , this, "fr");
        }
        private string GetMessage(string messageKey, string playerId = null, params object[] data) {
            try {
                var template = lang.GetMessage(messageKey, this, playerId);
                if (VerifyPlaceholders(template, data.Length)) return string.Format(template, data);
                Puts("Wrong number of params compared to the string");
                return lang.GetMessage(MessageKey.PopError, this, playerId);
            }
            catch (Exception exception) {
                PrintError(exception.ToString());
                throw;
            }
        }
#endregion
    }
}

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