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

FREE AdminChatroom : 1.0.2 1.0.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using Oxide.Core.Libraries.Covalence;
using System.Linq;
using Oxide.Core.Plugins;
namespace Oxide.Plugins {
    [Info("Admin Chatroom", "austinv900", "1.0.2")]
    [Description("Allows admins to send messages back and forth between other admins")]
    class AdminChatroom : CovalencePlugin {
        HashSet<IPlayer> AdminChat = new HashSet<IPlayer>();
#region Oxide Hooks
        void Init() {
            LoadDefaultConfig();
            LoadMessages();
            foreach (var pl in players.All) {
                if (pl.IsConnected && IsAdmin(pl)) AdminChat.Add(pl);
            }
            permission.RegisterPermission(Permission, this);
        }
        void OnUserConnected(IPlayer player) {
            if (IsAdmin(player) && !AdminChat.Contains(player)) AdminChat.Add(player);
        }
        void OnUserDisconnected(IPlayer player) {
            if (AdminChat.Contains(player)) AdminChat.Remove(player);
        }
#endregion
#region Configuration
        string Permission = "adminchatroom.";
        protected override void LoadDefaultConfig() {
            SetConfig("General", "Allowed To Join Permission 'adminchatroom.'", $"allowed");
            SaveConfig();
            Permission += GetConfig($"allowed", "General", "Allowed To Join Permission 'adminchatroom.'");
        }
#endregion
#region Localization
        void LoadMessages() {
            lang.RegisterMessages(new Dictionary<string, string>() {
                ["ChatFormat"]
                = "[AdminChat] {0}: {1}", ["NotInvited"] = "You have not have access to this chatroom", ["PlayerAdded"] = "{0} has been added to the admin chat", ["PlayerRemoved"] = "{0} has been kicked from the chatroom", ["SendCommandInfo"] = "You have been invited to the admin chatroom.please use /{0} msg - To chat", ["InviteFailed"] = "Failed to invite {0} to the chat.Is he already present?"
            }
            , this);
        }
#endregion
#region Plugin WorkBench
        [Command("a")]
        void cmdAdminChat(IPlayer player, string command, string[] args) {
            if (!AdminChat.Contains(player)) {
                player.Reply(Lang("NotInvited", player.Id));
                return;
            }
            if (args.Length == 0) return;
            if (IsAdmin(player) && args.Length == 2 && args[0].ToLower().Contains("invite") || args[0].ToLower().Contains("kick")) {
                switch (args[0].ToLower()) {
                    case "invite" : var targ = FindConnectedPlayer(args[1]);
                    if (targ == null) {
                        player.Reply(Lang("InviteFailed", player.Id, args[1]));
                        return;
                    }
                    if (AdminChat.Contains(targ)) {
                        player.Reply(Lang("InviteFailed", player.Id, targ.Name));
                        return;
                    }
                    if (!AdminChat.Contains(targ)) {
                        AdminChat.Add(targ);
                        SendRoomMessage("ChatRoom", Lang("PlayerAdded", player.Id, targ.Name));
                        targ.Reply(Lang("SendCommandInfo", targ.Id, command));
                        return;
                    }
                    break;
                    case "kick" : var target = FindConnectedPlayer(args[1]);
                    if (target != null && AdminChat.ToList().Contains(target)) {
                        AdminChat.Remove(target);
                        SendRoomMessage("ChatRoom", Lang("PlayerRemoved", player.Id, target.Name));
                        return;
                    }
                    break;
                }
            }
            else {
                SendRoomMessage(player.Name, string.Join(" ", args));
                return;
            }
        }
        void SendRoomMessage(string name, string message) {
            foreach (var pl in AdminChat) {
                pl.Reply(Lang("ChatFormat", pl.Id, name, message));
            }
        }
#endregion
#region Helpers
        string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
        bool IsAdmin(IPlayer player) => permission.UserHasGroup(player.Id, "admin") || permission.UserHasPermission(player.Id, Permission) || player.IsAdmin;
        string ListToString<T>(List<T> list, int first = 0, string seperator = ", ") => string.Join(seperator, (from val in list select val.ToString()).Skip(first).ToArray());
        void SetConfig(params object[] args) {
            List<string> stringArgs = (from arg in args select arg.ToString()).ToList();
            stringArgs.RemoveAt(args.Length - 1);
            if (Config.Get(stringArgs.ToArray()) == null) Config.Set(args);
        }
        T GetConfig<T>(T defaultVal, params object[] args) {
            List<string> stringArgs = (from arg in args select arg.ToString()).ToList();
            if (Config.Get(stringArgs.ToArray()) == null) {
                PrintError($"The plugin failed to read something from the config: {ListToString(stringArgs, 0, "/")}{Environment.NewLine}Please reload the plugin and see if this message is still showing.If so, please post this into the support thread of this plugin.");
                return defaultVal;
            }
            return (T)System.Convert.ChangeType(Config.Get(stringArgs.ToArray()), typeof(T));
        }
        IPlayer FindConnectedPlayer(string var) {
            var pl = players.All.Where(p => p.Id == var || p.Name.ToLower().Contains(var.ToLower()) && p.IsConnected).ToArray();
            if (pl.Count() > 1 || pl.Count() == 0) return null;
            return pl[0];
        }
#endregion
    }
}

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