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

FREE AdminMenu : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
 // Requires: ImageLibrary
//Requires: EnhancedBanSystem
using Newtonsoft.Json;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using System;
using System.Linq;
using Oxide.Core.Libraries.Covalence;
using UnityEngine;
using UI = Oxide.Plugins.EMInterface.UI;
using UI4 = Oxide.Plugins.EMInterface.UI4;
using CurrentEventInfo = Oxide.Plugins.EventManager.CurrentEventInfo;
using BaseEventPlayer = Oxide.Plugins.EventManager.BaseEventPlayer;
using BaseEventGame = Oxide.Plugins.EventManager.BaseEventGame;
using RoomSpectatingBehaviour = Oxide.Plugins.EventManager.RoomSpectatingBehaviour;
using MurderPlayer = Oxide.Plugins.MurderGameMode.MurderPlayer;
using MurderGame = Oxide.Plugins.MurderGameMode.MurderGame;
using PlayerRole = Oxide.Plugins.MurderGameMode.PlayerRole;
using BanData = Oxide.Plugins.EnhancedBanSystem.BanData;
namespace Oxide.Plugins {
    [Info("Admin Menu", "Apwned", "1.0.0")]
    [Description("Admin Menu integrated with EventManager")]
    public class AdminMenu : RustPlugin {
#region Fields
        [PluginReference]
        private Plugin ImageLibrary, MurderGameMode, PlayerDatabase, BetterChatMute;
        private static AdminMenu Instance;
        //Perms
        private const string ADMINMENU_PERMISSION = "murderadminmenu.use";
        private const string ACTION_PERMISSION = "murderadminmenu.action";
        //UI Parents
        private const string spectatemenu_UI = "murderadminmenu.spectatemenu";
#endregion
#region Enums
        public enum MenuTab {
            ActivePlayers, AllPlayers, Player, Rooms, Room, ConVars
        }
        //Tabs with menu in player tab
        public enum PlayerTab {
            None, MuteMenu, BanMenu, ReasonMenu
        }
        //seconds
        public enum BlockDuration {
            None, Mns30 =1800, Hr1 = 3600, Hrs3 = 10800, Day1=86400, Week1 =604800, Permanent = 0
        }
        public enum Action {
            None, Unban, Ban, Mute, UnMute, Kick, Teleport, Spectate, FinishSpectating, StripInventory, CloseRoom
        }
        public enum Reason {
            Advertising, Cheating, Griefing, RuleViolation, Racism, Spamming, SusGamePlay, ToxicGamePlay
        }
#endregion
#region Hooks
        void Init() {
            Instance = this;
        }
        void OnServerInitialized() {
            RegisterImages();
        }
        void Loaded() {
            permission.RegisterPermission(ACTION_PERMISSION, this);
            permission.RegisterPermission(ADMINMENU_PERMISSION, this);
        }
#endregion
        void RegisterImages() {
            AddImage("unknownprofilephoto", "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/b5/b5bd56c1aa4644a474a2e4972be27ef9e82e517e_full.jpg");
        }
        private Dictionary<ulong, string[]> lastPage = new Dictionary<ulong, string[]>();
        [ChatCommand("murderadminmenu")]
        void OpenAdminMenu(BasePlayer player) {
            player.SendConsoleCommand("murderadminmenu.ui");
        }
        [ConsoleCommand("murderadminmenu.ui")]
        void AdminMenuUI(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (!permission.UserHasPermission(player.UserIDString, ADMINMENU_PERMISSION)) return;
            MenuTab menuTab = (MenuTab)arg.GetInt(0);
            switch (menuTab) {
                case MenuTab.Player : PlayerTab playerTab = (PlayerTab)arg.GetInt(1);
                string userID = arg.GetString(2);
                Action action = (Action)arg.GetInt(3);
                BlockDuration blockDuration = (BlockDuration)arg.GetInt(4);
                OpenMenu(player, new MenuArgs(playerTab, userID, action, blockDuration));
                break;
                case MenuTab.ActivePlayers : case MenuTab.AllPlayers : int pageNum = arg.GetInt(1);
                OpenMenu(player, new MenuArgs(menuTab, pageNum));
                break;
                case MenuTab.Room : ulong ID = arg.GetUInt64(1);
                int pageNum1 = arg.GetInt(2);
                OpenMenu(player, new MenuArgs(ID, pageNum1));
                break;
                case MenuTab.Rooms : int pageNum2 = arg.GetInt(1);
                OpenMenu(player, new MenuArgs(menuTab, pageNum2));
                break;
            }
            lastPage[player.userID] = arg.Args;
        }
        [ConsoleCommand("murderadminmenu.refresh")]
        void RefreshAdminMenu(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (lastPage.ContainsKey(player.userID)) {
                player.SendConsoleCommand("murderadminmenu.ui", lastPage[player.userID]);
            }
        }
        void RefreshAdminMenu(BasePlayer player) {
            player.SendConsoleCommand("murderadminmenu.ui", lastPage[player.userID]);
        }
        [ConsoleCommand("murderadminmenu.action")]
        void AdminMenuAction(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (!permission.UserHasPermission(player.UserIDString, ACTION_PERMISSION)) return;
            Action action = (Action)arg.GetInt(0);
            switch (action) {
                case Action.Ban : ulong userID = arg.GetULong(1);
                BlockDuration duration = (BlockDuration)arg.GetInt(2);
                string reason = arg.GetString(3);
                BanPlayer(userID, reason, duration);
                break;
                case Action.Unban : ulong userID1 = arg.GetULong(1);
                UnBanPlayer(userID1);
                break;
                case Action.Kick : ulong userID2 = arg.GetULong(1);
                string reason2 = arg.GetString(3);
                KickPlayer(userID2, reason2, player);
                break;
                case Action.Teleport : ulong userID3 = arg.GetULong(1);
                TransportToPlayer(userID3, player);
                break;
                case Action.StripInventory : ulong userID4 = arg.GetULong(1);
                StripInventory(userID4, player);
                break;
                case Action.CloseRoom : int roomID = arg.GetInt(1);
                CloseRoom(roomID, player);
                break;
                case Action.Mute : ulong userID5 = arg.GetULong(1);
                BlockDuration duration2 = (BlockDuration)arg.GetInt(2);
                string reason3 = arg.GetString(3);
                MutePlayer(userID5, player, duration2, reason3);
                break;
                case Action.UnMute : ulong userID6 = arg.GetULong(1);
                UnMutePlayer(userID6, player);
                break;
                case Action.Spectate : ulong userID7 = arg.GetULong(1);
                SpectatePlayer(player, userID7);
                break;
                case Action.FinishSpectating : FinishSpectating(player);
                break;
            }
            RefreshAdminMenu(player);
        }
        [ConsoleCommand("murderadminmenu.close")]
        void cmdCloseMenu(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            if (player == null) return;
            CuiHelper.DestroyUi(player, spectatemenu_UI);
            if (lastPage.ContainsKey(player.userID)) lastPage.Remove(player.userID);
        }
        void OpenMenu(BasePlayer player, MenuArgs args) {
            CuiHelper.DestroyUi(player, spectatemenu_UI);
            CuiElementContainer container = UI.Container(spectatemenu_UI, "0 0 0 1", UI.TransformToUI4(99f, 1821, 75f, 1004f), true, "Overall");
            UI.Label(container, spectatemenu_UI, "ADMIN MENU", 14, UI.TransformToUI4(45, 300f, 845f, 925f, 1722f, 929f), TextAnchor.MiddleLeft, "1 1 1 1", "PermanentMarker.ttf");
            UI.Button(container, spectatemenu_UI, UI.Color(configData.labelColor, 1f), "X", 12, UI.TransformToUI4(1655f, 1702f, 869f, 906f, 1722f, 929f), "murderadminmenu.close", TextAnchor.MiddleCenter, "PermanentMarker.ttf");
            UI.Button(container, spectatemenu_UI, UI.Color(configData.labelColor, 1f), "↻", 20, UI.TransformToUI4(1600f, 1647f, 869f, 906f, 1722f, 929f), "murderadminmenu.refresh");
            UI.Panel(container, spectatemenu_UI, "1 1 1 1", UI.TransformToUI4(49f, 1673f, 842f, 844f, 1722f, 929f));
            CreateMenuLabels(container, args);
            switch (args.Menu) {
                case MenuTab.Player : CreatePlayerTab(container, args, player, Convert.ToUInt64(args.playerTabArgs.targetPlayerID));
                break;
                case MenuTab.ActivePlayers : CreateActivePlayersTab(container, args);
                break;
                case MenuTab.Room : CreateRoomTab(container, args);
                break;
                case MenuTab.Rooms : CreateRoomsTab(container, args);
                break;
                case MenuTab.AllPlayers : CreateAllPlayersTab(container, args);
                break;
            }
            CuiHelper.AddUi(player, container);
        }
        void CreateMenuLabels(CuiElementContainer container, MenuArgs args) {
            UI.Button(container, spectatemenu_UI, UI.Color(args.Menu == MenuTab.ActivePlayers ? configData.highlightedLabelColor : configData.labelColor, 1f), "Active Players", 14, UI.TransformToUI4(337f, 337f + 189f, 869f, 869f + 37f, 1722f, 929f), $"murderadminmenu.ui {(int)MenuTab.ActivePlayers} ");
            UI.Button(container, spectatemenu_UI, UI.Color(args.Menu == MenuTab.AllPlayers ? configData.highlightedLabelColor : configData.labelColor, 1f), "All Players", 14, UI.TransformToUI4(337f + 205f, 337f + 189f + 205f, 869f, 869f + 37f, 1722f, 929f), $"murderadminmenu.ui {(int)MenuTab.AllPlayers}");
            UI.Button(container, spectatemenu_UI, UI.Color(args.Menu == MenuTab.Rooms ? configData.highlightedLabelColor : configData.labelColor, 1f), "Rooms", 14, UI.TransformToUI4(337f + 410f, 337f + 189f + 410f, 869f, 869f + 37f, 1722f, 929f), $"murderadminmenu.ui {(int)MenuTab.Rooms}");
        }
        void CreatePlayerTab(CuiElementContainer container, MenuArgs args, BasePlayer admin, ulong steamID) {
            BasePlayer player = BasePlayer.FindByID(steamID);
            if (player != null) {
                //Profile photo
                UI.Image(container, spectatemenu_UI, GetImage(player.UserIDString), UI.TransformToUI4(67f, 67f + 288f, 517f, 517f + 288f, 1722f, 929f));
                UI.Label(container, spectatemenu_UI, GetPlayerDetailsLeft(player), 15, UI.TransformToUI4(436f, 1105f, 500f, 800f, 1722f, 929f), TextAnchor.UpperLeft);
                UI.Label(container, spectatemenu_UI, GetPlayerDetailsRight(player), 15, UI.TransformToUI4(1030f, 1677f, 500f, 800f, 1722f, 929f), TextAnchor.UpperLeft);
                int xindex = 0;
                float xoffset = 307f / 1920f;
                int yindex = 0;
                float yoffset = 67f / 1080f;
                UI4 ui4 = UI.TransformToUI4(55f, 355f, 404f, 458f, 1722f, 929f);
                UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Kick", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Kick} 0");
                if(!IsPlayerBanned(player.userID)) UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Ban", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.BanMenu} {player.UserIDString}");
                else UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Unban", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.action {(int)Action.Unban} {player.UserIDString}");
                UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Strip Inventory", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.action {(int)Action.StripInventory} {player.UserIDString}");
                if(!IsPlayerMuted(player.userID)) UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Mute", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.MuteMenu} {player.UserIDString}");
                else UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Unmute", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.action {(int)Action.UnMute} {player.UserIDString}");
                UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Teleport", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.action {(int)Action.Teleport} {player.UserIDString}");
                if(!IsPlayerSpectating(admin)) UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Spectate", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.action {(int)Action.Spectate} {player.UserIDString}");
                else UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Finish Spectating", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.action {(int)Action.FinishSpectating}");
                UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Room", 12, ui4.SetOffset(yoffset, yindex++, xoffset, xindex), $"murderadminmenu.ui {(int)MenuTab.Room} {player.UserIDString} 0");
            }
            else {
                UI.Image(container, spectatemenu_UI, GetImage(steamID.ToString()), UI.TransformToUI4(67f, 67f + 288f, 517f, 517f + 288f, 1722f, 929f));
                UI.Label(container, spectatemenu_UI, GetPlayerDetailsLeft(steamID), 15, UI.TransformToUI4(436f, 1105f, 500f, 800f, 1722f, 929f), TextAnchor.UpperLeft);
                int xindex = 0;
                float xoffset = 307f / 1920f;
                int yindex = 0;
                float yoffset = 67f / 1080f;
                UI4 ui4 = UI.TransformToUI4(55f, 355f, 404f, 458f, 1722f, 929f);
                if(!IsPlayerBanned(steamID)) UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Ban", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.BanMenu} {steamID}");
                else UI.Button(container, spectatemenu_UI, UI.Color(configData.buttonColor, 1f), "Unban", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.action {(int)Action.Unban} {steamID}");
            }
            CreatePlayerSmallMenu(container, args, player);
        }
        void CreatePlayerSmallMenu(CuiElementContainer container, MenuArgs args, BasePlayer player) {
            if (args.playerTabArgs.playerTab == PlayerTab.None) return;
            const string smallMenu = "murderadminmenu.playertab.smallmenu";
            UI.Panel(container, spectatemenu_UI, smallMenu, UI.Color("#363636", 1f), UI.TransformToUI4(878f, 1649f, 100f, 456f, 1722f, 929f));
            switch (args.playerTabArgs.playerTab) {
                case PlayerTab.BanMenu : UI.Label(container, smallMenu, "Ban Menu", 12, UI.TransformToUI4(260f, 511f, 285f, 352f, 771f, 356f));
                UI4 ui4 = UI.TransformToUI4(41f, 334f, 242f, 284f, 771f, 356f);
                int yindex = 0;
                float yoffset = 49f/356f;
                int xindex = 0;
                float xoffset = 379f/771f;
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Ban for 30 minutes", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Ban} {(int)BlockDuration.Mns30}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Ban for 1 hour", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Ban} {(int)BlockDuration.Hr1}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Ban for 3 hours", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Ban} {(int)BlockDuration.Hrs3}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Ban for 1 day", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Ban} {(int)BlockDuration.Day1}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Ban for 1 week", 12, ui4.SetOffset(yoffset, yindex++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Ban} {(int)BlockDuration.Week1}");
                yindex = 0;
                xindex++;
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Ban Permanently", 12, ui4.SetOffset(yoffset, yindex++, xoffset, xindex), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Ban} {(int)BlockDuration.Permanent}");
                break;
                case PlayerTab.MuteMenu : UI.Label(container, smallMenu, "Mute Menu", 12, UI.TransformToUI4(260f, 511f, 285f, 352f, 771f, 356f));
                UI4 ui4_1 = UI.TransformToUI4(41f, 334f, 242f, 284f, 771f, 356f);
                int yindex_1 = 0;
                float yoffset_1 = 49f/356f;
                int xindex_1 = 0;
                float xoffset_1 = 379f/771f;
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Mute for 30 minutes", 12, ui4_1.SetOffset(yoffset_1, yindex_1++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Mute} {(int)BlockDuration.Mns30}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Mute for 1 hour", 12, ui4_1.SetOffset(yoffset_1, yindex_1++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Mute} {(int)BlockDuration.Hr1}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Mute for 3 hours", 12, ui4_1.SetOffset(yoffset_1, yindex_1++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Mute} {(int)BlockDuration.Hrs3}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Mute for 1 day", 12, ui4_1.SetOffset(yoffset_1, yindex_1++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Mute} {(int)BlockDuration.Day1}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Mute for 1 week", 12, ui4_1.SetOffset(yoffset_1, yindex_1++), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Mute} {(int)BlockDuration.Week1}");
                yindex_1 = 0;
                xindex_1++;
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Mute Permanently", 12, ui4_1.SetOffset(yoffset_1, yindex_1++, xoffset_1, xindex_1), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.ReasonMenu} {player.UserIDString} {(int)Action.Mute} {(int)BlockDuration.Permanent}");
                break;
                case PlayerTab.ReasonMenu : UI.Label(container, smallMenu, "Reason Menu", 12, UI.TransformToUI4(260f, 511f, 285f, 352f, 771f, 356f));
                UI4 ui4_2 = UI.TransformToUI4(41f, 334f, 242f, 284f, 771f, 356f);
                int yindex_2 = 0;
                float yoffset_2 = 49f/356f;
                int xindex_2 = 0;
                float xoffset_2 = 379f/771f;
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Advertising", 12, ui4_2.SetOffset(yoffset_2, yindex_2++), $"murderadminmenu.action {(int)args.playerTabArgs.action} {player.UserIDString} {(int)args.playerTabArgs.blockDuration} {Reason.Advertising}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Cheating", 12, ui4_2.SetOffset(yoffset_2, yindex_2++), $"murderadminmenu.action {(int)args.playerTabArgs.action} {player.UserIDString} {(int)args.playerTabArgs.blockDuration} {Reason.Cheating}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Griefing", 12, ui4_2.SetOffset(yoffset_2, yindex_2++), $"murderadminmenu.action {(int)args.playerTabArgs.action} {player.UserIDString} {(int)args.playerTabArgs.blockDuration} {Reason.Griefing}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Racism", 12, ui4_2.SetOffset(yoffset_2, yindex_2++), $"murderadminmenu.action {(int)args.playerTabArgs.action} {player.UserIDString} {(int)args.playerTabArgs.blockDuration} {Reason.Racism}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Spamming", 12, ui4_2.SetOffset(yoffset_2, yindex_2++), $"murderadminmenu.action {(int)args.playerTabArgs.action} {player.UserIDString} {(int)args.playerTabArgs.blockDuration} {Reason.Spamming}");
                yindex_2 = 0;
                xindex_2++;
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Rule Violation", 12, ui4_2.SetOffset(yoffset_2, yindex_2++, xoffset_2, xindex_2), $"murderadminmenu.action {(int)args.playerTabArgs.action} {player.UserIDString} {(int)args.playerTabArgs.blockDuration} {Reason.RuleViolation}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Suspicious Game Play", 12, ui4_2.SetOffset(yoffset_2, yindex_2++, xoffset_2, xindex_2), $"murderadminmenu.action {(int)args.playerTabArgs.action} {player.UserIDString} {(int)args.playerTabArgs.blockDuration} {Reason.SusGamePlay}");
                UI.Button(container, smallMenu, UI.Color(configData.buttonColor, 1f), "Toxic Game Play", 12, ui4_2.SetOffset(yoffset_2, yindex_2++, xoffset_2, xindex_2), $"murderadminmenu.action {(int)args.playerTabArgs.action} {player.UserIDString} {(int)args.playerTabArgs.blockDuration} {Reason.ToxicGamePlay}");
                break;
            }
        }
        void CreateActivePlayersTab(CuiElementContainer container, MenuArgs args) {
            if (args.Page == -1) args.Page = 0;
            else if (args.Page * 75 > BasePlayer.activePlayerList.Count()) args.Page--;
            UI.Label(container, spectatemenu_UI, args.Page.ToString(), 10, UI.TransformToUI4(1430f, 1495f, 869f, 906f, 1722f, 929f));
            UI.Button(container, spectatemenu_UI, UI.Color(configData.labelColor, 1f), "<", 10, UI.TransformToUI4(1388f, 1435f, 869f, 906f, 1722f, 929f), $"murderadminmenu.ui {(int)MenuTab.ActivePlayers} {args.Page - 1}");
            UI.Button(container, spectatemenu_UI, UI.Color(configData.labelColor, 1f), ">", 10, UI.TransformToUI4(1500f, 1547f, 869f, 906f, 1722f, 929f), $"murderadminmenu.ui {(int)MenuTab.ActivePlayers} {args.Page + 1}");
            UI4 labelpos = UI.TransformToUI4(49f, 363f, 756f, 803f, 1722f, 929f);
            for (int i = args.Page * 75; i < (args.Page + 1) * 75;
            i++) {
                if ((args.Page * 75) + i >= BasePlayer.activePlayerList.Count() || !BasePlayer.activePlayerList.Any()) break;
                BasePlayer target = BasePlayer.activePlayerList.ToList()[i];
                UI.Button(container, spectatemenu_UI, UI.Color("#575757", 1f), GetRealName(target), 10, labelpos.SetOffset(55f/1024f, i % 15, 360f/1920f, i/15), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.None} {target.UserIDString}");
            }
        }
        void CreateAllPlayersTab(CuiElementContainer container, MenuArgs args) {
            List<string> allPlayers = PlayerDatabase.Call("GetAllKnownPlayers") as List<string>;
            if (allPlayers == null) return;
            if (args.Page == -1) args.Page = 0;
            else if (args.Page * 75 > allPlayers.Count()) args.Page--;
            UI.Label(container, spectatemenu_UI, args.Page.ToString(), 10, UI.TransformToUI4(1430f, 1495f, 869f, 906f, 1722f, 929f));
            UI.Button(container, spectatemenu_UI, UI.Color(configData.labelColor, 1f), "<", 10, UI.TransformToUI4(1388f, 1435f, 869f, 906f, 1722f, 929f), $"murderadminmenu.ui {(int)MenuTab.AllPlayers} {args.Page - 1}");
            UI.Button(container, spectatemenu_UI, UI.Color(configData.labelColor, 1f), ">", 10, UI.TransformToUI4(1500f, 1547f, 869f, 906f, 1722f, 929f), $"murderadminmenu.ui {(int)MenuTab.AllPlayers} {args.Page + 1}");
            UI4 labelpos = UI.TransformToUI4(49f, 363f, 756f, 803f, 1722f, 929f);
            for (int i = args.Page * 75; i < (args.Page + 1) * 75;
            i++) {
                if ((args.Page * 75) + i >= allPlayers.Count() || !allPlayers.Any()) break;
                string targetID = allPlayers[i];
                string name = PlayerDatabase.Call("GetPlayerData", targetID, "name") as string ?? "Unknown";
                UI.Button(container, spectatemenu_UI, UI.Color("#575757", 1f), targetID +":"+name, 10, labelpos.SetOffset(55f/1024f, i % 15, 360f/1920f, i/15), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.None} {targetID}");
            }
        }
        void CreateRoomTab(CuiElementContainer container, MenuArgs args) {
            MurderGame room;
            ulong ID = args.roomTabArgs.ID;
            BasePlayer searchedPlayer = BasePlayer.FindByID(ID);
            if (searchedPlayer != null) room = (MurderGame)EventManager.GetRoomofPlayer(searchedPlayer);
            else {
                BaseEventGame result;
                EventManager.BaseManager.TryGetValue(Convert.ToInt32(ID), out result);
                room = result as MurderGame;
            }
            if (room == null) {
                UI.Label(container, spectatemenu_UI, "Room not found", 12, UI.TransformToUI4(49f, 328f, 752f, 803f, 1722f, 929f));
                return;
            }
            float yoffset = 63f/1080f;
            UI4 buttontransform = UI.TransformToUI4(49f, 363f, 756f, 803f, 1722f, 929f);
            UI4 label1 = UI.TransformToUI4(330f, 540f, 745f, 813f, 1722f, 929f);
            UI4 label2 = UI.TransformToUI4(515f, 725f, 745f, 813f, 1722f, 929f);
            IList<BasePlayer> players = EventManager.GetPlayersOfRoom(room);
            for (int i = 0; i < players.Count; i++) {
                BasePlayer target = players[i];
                if (target == null) continue;
                MurderPlayer murderPlayer;
                target.TryGetComponent(out murderPlayer);
                if (murderPlayer == null) {
                    UI.Button(container, spectatemenu_UI, UI.Color("#575757", 1f), GetRealName(target), 11, buttontransform.SetOffset(yoffset, i), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.None} {target.UserIDString}");
                    UI.Label(container, spectatemenu_UI, "Spectating", 11, label1.SetOffset(yoffset, i));
                }
                else if (murderPlayer != null && murderPlayer.playerRole != null) {
                    UI.Button(container, spectatemenu_UI, UI.Color("#575757", 1f), GetRealName(target), 11, buttontransform.SetOffset(yoffset, i), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.None} {target.UserIDString}");
                    UI.Label(container, spectatemenu_UI, murderPlayer.playerRole?.roleName, 11, label1.SetOffset(yoffset, i), TextAnchor.MiddleCenter, UI.Color(murderPlayer.playerRole.roleColor, 1f));
                    if(murderPlayer.playerRole.playerRole == PlayerRole.Murderer) UI.Label(container, spectatemenu_UI, "Murderer", 11, label2.SetOffset(yoffset, i), TextAnchor.MiddleCenter, UI.Color("#ff0000", 1f));
                    else if(murderPlayer.playerRole.playerRole == PlayerRole.Sheriff) UI.Label(container, spectatemenu_UI, "Sheriff", 11, label2.SetOffset(yoffset, i), TextAnchor.MiddleCenter, UI.Color("#62acf7", 1f));
                    else UI.Label(container, spectatemenu_UI, "Innocent", 11, label2.SetOffset(yoffset, i));
                }
                else {
                    UI.Button(container, spectatemenu_UI, UI.Color("#575757", 1f), GetRealName(target), 11, buttontransform.SetOffset(yoffset, i), $"murderadminmenu.ui {(int)MenuTab.Player} {(int)PlayerTab.None} {target.UserIDString}");
                    UI.Label(container, spectatemenu_UI, "Joining", 11, label1.SetOffset(yoffset, i), TextAnchor.MiddleCenter, UI.Color("#b1b1b1", 1f));
                }
            }
            if(players.Count == 0) UI.Label(container, spectatemenu_UI, "No players found", 16, UI.TransformToUI4(49f, 363f, 756f, 803f, 1722f, 929f), TextAnchor.MiddleCenter, UI.Color("#fc0000", 1f));
            UI.Label(container, spectatemenu_UI, GetRoomDetails(room), 15, UI.TransformToUI4(1045f, 1574f, 276f, 785f, 1722f, 929f), TextAnchor.UpperLeft);
            UI.Button(container, spectatemenu_UI, UI.Color("#c80000", 1f), "Close Room", 12, UI.TransformToUI4(1499f, 1689f, 27f, 76f, 1722f, 929f), $"murderadminmenu.action {(int)Action.CloseRoom} {room.gameroom.roomID}");
        }
        void CreateRoomsTab(CuiElementContainer container, MenuArgs args) {
            List<BaseEventGame> rooms = EventManager.BaseManager.Values.ToList();
            if (args.Page == -1) args.Page = 0;
            else if (args.Page * 75 > rooms.Count) args.Page--;
            UI.Label(container, spectatemenu_UI, args.Page.ToString(), 10, UI.TransformToUI4(1430f, 1495f, 869f, 906f, 1722f, 929f));
            UI.Button(container, spectatemenu_UI, UI.Color(configData.labelColor, 1f), "<", 10, UI.TransformToUI4(1388f, 1435f, 869f, 906f, 1722f, 929f), $"murderadminmenu.ui {(int)MenuTab.Rooms} {args.Page - 1}");
            UI.Button(container, spectatemenu_UI, UI.Color(configData.labelColor, 1f), ">", 10, UI.TransformToUI4(1500f, 1547f, 869f, 906f, 1722f, 929f), $"murderadminmenu.ui {(int)MenuTab.Rooms} {args.Page + 1}");
            UI4 labelpos = UI.TransformToUI4(49f, 363f, 756f, 803f, 1722f, 929f);
            for (int i = args.Page * 75; i < (args.Page + 1) * 75;
            i++) {
                if ((args.Page * 75) + i >= rooms.Count || !rooms.Any()) break;
                BaseEventGame target = rooms[i];
                UI.Button(container, spectatemenu_UI, UI.Color("#575757", 1f), target.gameroom.roomID + ":" + (target.gameroom.isCreatedbySystem?"System" : target.gameroom.ownerName), 10, labelpos.SetOffset(55f/1024f, i % 15, 360f/1920f, i/15), $"murderadminmenu.ui {(int)MenuTab.Room} {target.gameroom.roomID} 0");
            }
        }
        private struct MenuArgs {
            public int Page;
            public MenuTab Menu;
            public PlayerTabArgs playerTabArgs;
            public RoomTabArgs roomTabArgs;
            public MenuArgs(MenuTab menu) {
                Page = 0;
                Menu = menu;
                playerTabArgs.playerTab = PlayerTab.None;
                playerTabArgs = default(PlayerTabArgs);
                roomTabArgs = default(RoomTabArgs);
            }
            public MenuArgs(MenuTab menu, int pageNum) {
                Page = pageNum;
                Menu = menu;
                playerTabArgs.playerTab = PlayerTab.None;
                playerTabArgs = default(PlayerTabArgs);
                roomTabArgs = default(RoomTabArgs);
            }
            public MenuArgs(PlayerTab playerTab, string userIDString , Action _action = Action.None, BlockDuration _blockDuration = BlockDuration.None) {
                Page = 0;
                Menu = MenuTab.Player;
                playerTabArgs = new PlayerTabArgs(playerTab, userIDString , _action, _blockDuration);
                roomTabArgs = default(RoomTabArgs);
            }
            public MenuArgs(ulong ID, int pageNum) {
                roomTabArgs = new RoomTabArgs(ID);
                Page = pageNum;
                playerTabArgs = default(PlayerTabArgs);
                Menu = MenuTab.Room;
            }
            public struct PlayerTabArgs {
                public PlayerTab playerTab;
                public Action action;
                public BlockDuration blockDuration;
                public string targetPlayerID;
                public PlayerTabArgs(PlayerTab _playerTab, string userIDString, Action _action = Action.None, BlockDuration _blockDuration = BlockDuration.None) {
                    playerTab = _playerTab;
                    action = _action;
                    blockDuration = _blockDuration;
                    targetPlayerID = userIDString;
                }
            }
            public struct RoomTabArgs {
                public ulong ID;
                public RoomTabArgs(ulong _ID) {
                    ID = _ID;
                }
            }
        }
#region Actions
        void BanPlayer(ulong steamID, string reason, BlockDuration duration) {
            if (duration != BlockDuration.None) {
                BasePlayer player = BasePlayer.FindByID(steamID);
                string success = EnhancedBanSystem.Instance.BanID(player?.IPlayer, steamID.ToString(), reason + "(Banned)", (int)duration);
                Console.WriteLine(success);
            }
        }
        void UnBanPlayer(ulong steamID) {
            string success = EnhancedBanSystem.Instance.ExecuteUnban(null, steamID.ToString(), string.Empty, GetUserIP(steamID));
            Console.WriteLine(success);
        }
        void KickPlayer(ulong steamID, string reason, BasePlayer admin) {
            BasePlayer player = BasePlayer.FindByID(steamID);
            if (player != null) {
                player.Kick(reason);
                admin.ChatMessage(player.displayName + " has been kicked from server");
            }
            else {
                admin.ChatMessage("Kick failed.Player with given steamID is not on the server");
            }
        }
        void TransportToPlayer(ulong steamID, BasePlayer admin) {
            BasePlayer target = BasePlayer.FindByID(steamID);
            if (target != null) {
                admin.MovePosition(target.ServerPosition);
                admin.ChatMessage("Transported to Player: " + GetRealName(target) + $"({target.UserIDString})");
            }
            else {
                admin.ChatMessage("Player not found");
            }
        }
        void StripInventory(ulong steamID, BasePlayer admin) {
            BasePlayer player = BasePlayer.FindByID(steamID);
            if (player != null) {
                EventManager.StripInventory(player);
                admin.ChatMessage("Inventory emptied successfully: " + GetRealName(player) + $"({player.UserIDString})");
            }
            else {
                admin.ChatMessage("Player not found");
            }
        }
        void CloseRoom(int roomID, BasePlayer admin) {
            BaseEventGame game;
            if (EventManager.BaseManager.TryGetValue(roomID, out game)) {
                game.EndEvent();
                admin.ChatMessage("Room closed successfully");
            }
            else {
                admin.ChatMessage("Room is not found.");
            }
        }
        void MutePlayer(ulong userID, BasePlayer admin, BlockDuration duration, string reason) {
            BasePlayer target = BasePlayer.FindByID(userID);
            if (target == null) {
                admin.ChatMessage("Mute failed.Player not found.");
                return;
            }
            if (duration == BlockDuration.Permanent) {
                BetterChatMute.Call("API_Mute", target.IPlayer, admin.IPlayer, reason);
            }
            else {
                BetterChatMute.Call("API_TimeMute", target.IPlayer, admin.IPlayer, TimeSpan.FromSeconds((int)duration), reason);
            }
        }
        void UnMutePlayer(ulong userID, BasePlayer admin) {
            BasePlayer target = BasePlayer.FindByID(userID);
            if (target == null) {
                admin.ChatMessage("Mute failed.Player not found.");
                return;
            }
            BetterChatMute.Call("API_Unmute", target.IPlayer, admin.IPlayer);
        }
        void SpectatePlayer(BasePlayer player, ulong targetID) {
            BasePlayer target = BasePlayer.FindByID(targetID);
            if (target == null) {
                player.ChatMessage("Invalid command.Target is null.Target player may be disconnected");
                return;
            }
            EventManager.SpectatingBehaviour spectatingBehaviour = player.gameObject.AddComponent<EventManager.SpectatingBehaviour>();
            spectatingBehaviour.Enable(target);
        }
        void FinishSpectating(BasePlayer player) {
            EventManager.SpectatingBehaviour behaviour;
            if (player.TryGetComponent<EventManager.SpectatingBehaviour>(out behaviour)) {
                UnityEngine.Object.DestroyImmediate(behaviour);
                player.ChatMessage("Spectating ended.");
            }
            else {
                player.ChatMessage("Unexpected command.You are not spectating.");
            }
        }
        bool IsPlayerMuted(ulong userID) {
            BasePlayer target = BasePlayer.FindByID(userID);
            if (target == null) return false;
            object result = BetterChatMute.Call("API_IsMuted", target.IPlayer);
            if (!(result is bool)) return false;
            bool isMuted = (bool)result;
            return isMuted;
        }
        bool IsPlayerSpectating(BasePlayer player) {
            if (player.HasComponent<EventManager.SpectatingBehaviour>()) return true;
            return false;
        }
#endregion
#region Helpers
        internal void AddImage(string imageName, string url) => ImageLibrary.Call("AddImage", url, imageName, 0UL, null);
        internal string GetImage(string name) => (string)ImageLibrary.Call("GetImage", name);
        string GetRealName(BasePlayer player) {
            object result = MurderGameMode.CallHook("GetRealPlayerName", player);
            if (!(result is string)) return "Invalid";
            string name = result as string;
            return name;
        }
        private static string FormatTime(TimeSpan time) {
            var values = new List<string>();
            if (time.Days != 0) values.Add($"{time.Days} day(s)");
            if (time.Hours != 0) values.Add($"{time.Hours} hour(s)");
            if (time.Minutes != 0) values.Add($"{time.Minutes} minute(s)");
            if (time.Seconds != 0) values.Add($"{time.Seconds} second(s)");
            return values.ToSentence();
        }
        string GetPlayerDetailsLeft(BasePlayer player) {
            MurderPlayer eventPlayer;
            player.TryGetComponent(out eventPlayer);
            RoomSpectatingBehaviour spectatingBehaviour;
            player.TryGetComponent(out spectatingBehaviour);
            string result = $"Name: {GetRealName(player)}\n" + $"SteamID: {player.UserIDString}\n" + $"{(player.IsConnected ? "<color=#47d733><b>Online</b></color>" : "<color=#ff0000><b>Offline</b></color>")}\n" + $"Server Pos: {player.ServerPosition.ToString()}\n" + $"Idle Time: {FormatTime(TimeSpan.FromSeconds(player.IdleTime))} seconds\n";
            if (eventPlayer != null) {
                result += $"<color=#ff0000><b>IN-GAME</b></color>\n" + $"Room ID: {eventPlayer.Event.gameroom.roomID}\n" + $"Event Status: {eventPlayer.Event.Status.ToString()}\n" + $"Role Name:<color={eventPlayer.playerRole?.roleColor}>{eventPlayer.playerRole?.roleName}</color>";
            }
            else if (spectatingBehaviour != null) {
                result += $"<color=#20dafb><b>Spectating</b></color>\n" + $"RoomID: {spectatingBehaviour.Event.gameroom.roomID}\n";
            }
            return result;
        }
        string GetPlayerDetailsLeft(ulong userID) {
            string result = string.Empty;
            result += $"Player IP: {GetUserIP(userID)}\n" + $"Player name: {GetUserName(userID)}\n" + $"SteamID: {userID}";
            return result;
        }
        string GetPlayerDetailsRight(BasePlayer player) {
            BanData banData;
            GetPlayerBanData(player.userID, out banData);
            string text = String.Empty;
            string result = (string)BetterChatMute.Call("API_GetMuteDetails", player.IPlayer) ?? String.Empty;
            text += result;
            text += "\n";
            if (banData != null) {
                text += $"<b><color=red>Banned</color></b>\n" + $"Ban Reason: {banData.reason}\n";
                if (banData.expire == 0.0f) text += "<b><color=red>Banned Permanently</color></b>";
                else text += $"<b><color=red>Ban Expires in {TimeSpan.FromSeconds(banData.expire)}</color></b>";
            }
            else text += "<color=lightblue>Not Banned</color>";
            return text;
        }
        string GetRoomDetails(MurderGame room) {
            string result = $"Room ID: {room.gameroom.roomID}\n" + $"Arena: {room.gameroom.place}\n" + $"Created by System: {room.gameroom.isCreatedbySystem}\n" + $"Has Password: {room.gameroom.hasPassword}\n";
            if (room.gameroom.hasPassword) result += $"Password: {room.gameroom.password}\n";
            if (!room.gameroom.isCreatedbySystem) result += $"Owner Name: {room.gameroom.ownerName}\n";
            result += $"Deployed Objects: {room.roomobjects.Count}\n" + $"Room Status: {room.Status}\n" + $"Max Player Limit: {room.gameroom.maxPlayer}\n";
            return result;
        }
        bool IsPlayerBanned(ulong steamID) {
            BanData banData;
            string userIP = GetUserIP(steamID);
            return EnhancedBanSystem.Instance.PlayerDatabase_IsBanned(steamID.ToString(), userIP, out banData);
        }
        void GetPlayerBanData(ulong steamID, out BanData banData) {
            string userIP = GetUserIP(steamID);
            EnhancedBanSystem.Instance.PlayerDatabase_IsBanned(steamID.ToString(), userIP, out banData);
        }
        string GetUserIP(ulong steamID) {
            string result = PlayerDatabase.Call("GetPlayerData", steamID.ToString(), "ip") as string;
            if (string.IsNullOrEmpty(result)) return string.Empty;
            return result;
        }
        string GetUserName(ulong steamID) {
            string result = PlayerDatabase.Call("GetPlayerData", steamID.ToString(), "name") as string;
            if (string.IsNullOrEmpty(result)) return string.Empty;
            return result;
        }
        string GetUserID(ulong steamID) {
            string result = PlayerDatabase.Call("GetPlayerData", steamID.ToString(), "steamid") as string;
            if (string.IsNullOrEmpty(result)) return string.Empty;
            return result;
        }
#endregion
#region Configuration
        private ConfigData configData;
        private class ConfigData {
            [JsonProperty("Label Color")]
            public string labelColor;
            [JsonProperty("Highlighted Label Color")]
            public string highlightedLabelColor;
            [JsonProperty("Button Color")]
            public string buttonColor;
        }
        protected override void LoadDefaultConfig() {
            configData = new ConfigData() {
                highlightedLabelColor = "#822af9", labelColor = "#b985ff", buttonColor = "#d00202"
            }
            ;
            SaveConfig();
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            configData = Config.ReadObject<ConfigData>();
            Config.WriteObject(configData, true);
        }
        protected override void SaveConfig() {
            base.SaveConfig();
            Config.WriteObject(configData, true);
        }
#endregion
#region Localization
        protected override void LoadDefaultMessages() => lang.RegisterMessages(Messages, this);
        public static string Message(string key, ulong playerId = 0U) => Instance.lang.GetMessage(key, Instance, playerId != 0U ? playerId.ToString() : null);
        private readonly Dictionary<string, string> Messages = new Dictionary<string, string> {
        }
        ;
#endregion
    }
}

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