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

FREE AdminLeaveJoin : 0.1.9 0.1.9

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using Oxide.Core.Libraries.Covalence;
using System.Linq;
namespace Oxide.Plugins {
    [Info("AdminLeaveJoin", "austinv900", "0.1.9", ResourceId = 2032)]
    [Description("Custom Join and Leave Message when admins leave and join")]
    class AdminLeaveJoin : CovalencePlugin {
#region Libraries
        Dictionary<IPlayer, string> ActiveStaffList = new Dictionary<IPlayer, string>();
#endregion
#region Oxide Hooks
        void Init() {
            LoadDefaultConfig();
            LoadDefaultMessages();
            permission.RegisterPermission(Name + "." + AdminPermission, this);
            permission.RegisterPermission(Name + "." + ModeratorPermission, this);
            UpdateList();
        }
        void OnServerSave() {
            UpdateList();
        }
        void OnUserConnected(IPlayer player) {
            if (IsAdmin(player) || IsModerator(player)) {
                UpdateList();
                JoinLeave(player, true);
            }
        }
        void OnUserDisconnected(IPlayer player) {
            if (IsAdmin(player) || IsModerator(player)) {
                UpdateList();
                JoinLeave(player);
            }
        }
#endregion
#region Configuration
        bool showAdminJoin;
        bool showAdminLeave;
        bool showModJoin;
        bool showModLeave;
        string ModeratorGroup;
        string AdminGroup;
        string AdminPermission;
        string ModeratorPermission;
        string msgPrefix;
        protected override void LoadDefaultConfig() {
            SetConfig("General", "Admin", "ShowJoin", true);
            SetConfig("General", "Admin", "ShowLeave", true);
            SetConfig("General", "Admin", "OxideGroup", "admin");
            SetConfig("General", "Admin", "Permission(adminleavejoin.?)", "admin");
            SetConfig("General", "Moderator", "ShowJoin", true);
            SetConfig("General", "Moderator", "ShowLeave", true);
            SetConfig("General", "Moderator", "OxideGroup", "moderator");
            SetConfig("General", "Moderator", "Permission(adminleavejoin.?)", "moderator");
            SetConfig("Settings", "Chat", "Prefix", "AdminJoin");
            SetConfig("Settings", "Chat", "Color", "#005682");
            SaveConfig();
            showAdminJoin = GetConfig(true, "General", "Admin", "ShowJoin");
            showAdminLeave = GetConfig(true, "General", "Admin", "ShowLeave");
            AdminGroup = GetConfig("admin", "General", "Admin", "OxideGroup");
            showModJoin = GetConfig(true, "General", "Moderator", "ShowJoin");
            showModLeave = GetConfig(true, "General", "Moderator", "ShowLeave");
            ModeratorGroup = GetConfig("moderator", "General", "Moderator", "OxideGroup");
            AdminPermission = GetConfig("admin", "General", "Admin", "Permission(adminleavejoin.?)");
            ModeratorPermission = GetConfig("moderator", "General", "Moderator", "Permission(adminleavejoin.?)");
            msgPrefix = GetConfig("AdminJoin", "Settings", "Chat", "Prefix");
        }
#endregion
#region Localization
        void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["Online"]
                = "{0} {1} has come Online", ["Offline"] = "{0} {1} has just went Offline", ["Admin"] = "Admin", ["Moderator"] = "Moderator", ["NoActiveStaff"] = "No staff currently online", ["ChatFormat"] = "[{0}] : {1}", ["AdminListHeader"] = "Active Staff List:", ["AdminListValues"] = "{0} - {1}"
            }
            , this, "en");
        }
#endregion
#region ChatCommands
        [Command("staff")]
        void cmdAvailable(IPlayer player, string command, string[] args) {
            if (ActiveStaffList.Count == 0) {
                player.Reply(MessageFormat(Lang("NoActiveStaff", player.Id), player.Id));
                return;
            }
            ;
            player.Reply(Lang("AdminListHeader", player.Id));
            foreach(var admin in ActiveStaffList.Keys) {
                player.Reply(Lang("AdminListValues", player.Id, admin.Name, ActiveStaffList[admin]));
            }
        }
#endregion
#region Plugin Hooks
        void UpdateList() {
            ActiveStaffList.Clear();
            foreach(var pl in players.Connected) {
                if (IsAdmin(pl) && !ActiveStaffList.ContainsKey(pl)) ActiveStaffList.Add(pl, Lang("Admin", pl.Id));
                if (IsModerator(pl) && !ActiveStaffList.ContainsKey(pl)) ActiveStaffList.Add(pl, Lang("Moderator", pl.Id));
            }
        }
        void JoinLeave(IPlayer player, bool Join = false) {
            string Rank = "Moderator";
            string join = "Offline";
            if (IsAdmin(player)) Rank = "Admin";
            if (Join) {
                join = "Online";
                if (!ActiveStaffList.ContainsKey(player)) ActiveStaffList.Add(player, Lang(Rank, player.Id));
            }
            MessageBroadcast(player.Name, Rank, join);
        }
        void MessageBroadcast(string name, string rank, string status) {
            if (rank == "Moderator" && status == "Offline" && !showModLeave) return;
            if (rank == "Moderator" && status == "Online" && !showModJoin) return;
            if (rank == "Admin" && status == "Offline" && !showAdminLeave) return;
            if (rank == "Admin" && status == "Online" && !showAdminJoin) return;
            foreach (var pl in players.Connected) {
                string message = MessageFormat(Lang(status, pl.Id, name, Lang(rank, null)), pl.Id);
                pl.Reply(message);
            }
        }
#endregion
#region Helpers
        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));
        }
        bool IsAdmin(IPlayer player) => permission.UserHasPermission(player.Id, Name + "." + AdminPermission) || permission.UserHasGroup(player.Id, AdminGroup) || player.IsAdmin;
        bool IsModerator(IPlayer player) => permission.UserHasPermission(player.Id, Name + "." + ModeratorPermission) || permission.UserHasGroup(player.Id, ModeratorGroup);
        string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
        string MessageFormat(string msg, string id) => Lang("ChatFormat", id, msgPrefix, msg);
#endregion
    }
}

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