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

FREE ChatMinus : 2.1 2.1

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("ChatMinus", "Хомячок", "2.1")]
    [Description("Отправка и просмотр ЛС, тикетов админам и модераторам")]
    public class ChatMinus : RustPlugin
    {
        #region Virables
        
        private List<BasePlayer> _activeGui = new List<BasePlayer>();
        private List<BasePlayer> _activeFind = new List<BasePlayer>();
        //private Dictionary<string, Dictionary<BasePlayer, BasePlayer>> _activeCuiAll = new Dictionary<string, Dictionary<BasePlayer, BasePlayer>>
        //{
        //   { "_activeGuiModer",  new Dictionary<BasePlayer, BasePlayer>()},
        //    { "_activeGuiAdmin", new Dictionary<BasePlayer, BasePlayer>()},
        //    { "_activeGuiPrivate", new Dictionary<BasePlayer, BasePlayer>()},
        //    { "_activeMess", new Dictionary<BasePlayer, BasePlayer>()}
        //};
        private Dictionary<BasePlayer, BasePlayer> _activeGuiModer = new Dictionary<BasePlayer, BasePlayer>();
        private Dictionary<BasePlayer, BasePlayer> _activeGuiAdmin = new Dictionary<BasePlayer, BasePlayer>();
        private Dictionary<BasePlayer, BasePlayer> _activeGuiPrivate = new Dictionary<BasePlayer, BasePlayer>();
        private Dictionary<BasePlayer, BasePlayer> _activeMess = new Dictionary<BasePlayer, BasePlayer>();
        private Dictionary<BasePlayer, string> _string = new Dictionary<BasePlayer, string>();

        private const string PermModer = "chatminus.moder";
        private const string PermAdmin = "chatminus.admin";
        private const string UiElement = "MainUi";
        private const string UiInput = "UiInput";
        private const string UiInputFind = "UiInputFind";
        private const string UiMess = "UiMess";
        private const string UiPlayers = "UiPlayers";
        private const string UiNotiсe = "UiRemove";
        private const string Sound = "assets/prefabs/npc/scientist/sound/chatter.prefab";
        
        #endregion

        #region Commands

        [ChatCommand("cm")]
        private void CmdChatGui(BasePlayer player, string command, string[] args)
        {
            if (_activeGui.Contains(player))
            {
                DestroyGuiAll(player);
                if (_activeGuiModer.ContainsKey(player)) _activeGuiModer.Remove(player);
                if (_activeGuiAdmin.ContainsKey(player)) _activeGuiAdmin.Remove(player);
                if (_activeGuiPrivate.ContainsKey(player)) _activeGuiPrivate.Remove(player);
                _activeGui.Remove(player);
            }
            else
            {
                _activeGui.Add(player);
                CreateGui(player, player);
                if (!_activeMess.ContainsKey(player)) return;
                var target = _activeMess[player];
                player.SendConsoleCommand($"cm.openinputmenu {target.userID} 3");
                //InputGui(player, target.userID, 3);
                //MessageList(player, target, 3);
                //if (!_activeGuiPrivate.ContainsKey(player))
                //    _activeGuiPrivate.Add(player, target);
                //if (!_string.ContainsKey(player)) return;
                //_string.Remove(player);
            }
        }
        
        [ConsoleCommand("cm.change")]
        private void CmdChatMinusChange(ConsoleSystem.Arg arg)
        {
/*            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;
            
            var hum = Convert.ToUInt64(arg.Args[0]); 
            var target = GetPlayer(hum);

            DestroyGuiNoOne(player);
            var num = _data.PlayersSetting[player.userID].StatusMenu;
            if (num == 0)
            {
                _data.PlayersSetting[player.userID].StatusMenu = 1;
                SaveData();
                CreateGui(player, target);
            }
            else
            {
                _data.PlayersSetting[player.userID].StatusMenu = 0;
                SaveData();
                CreateGui(player, target);
                if (player != target) MessageList(player, target, 3);
                if (_activeGuiAdmin.ContainsKey(player)) MessageList(player, target, 1);
                if (_activeGuiModer.ContainsKey(player)) MessageList(player, target, 2);
            }*/
        }
        
        [ConsoleCommand("cm.opendopmenu")]
        private void CmdChatMinusMenu(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;

            switch (arg.Args[0])
            {
                case "admin":
                    if (AllowAdmin(player))
                    {
                        player.Command($"cm.filtercharsadmincharf {int.Parse(arg.Args[1])} ~");
                        if (_activeGuiPrivate.ContainsKey(player)) _activeGuiPrivate.Remove(player);
                        if (_activeGuiModer.ContainsKey(player)) _activeGuiModer.Remove(player);
                    }
                    else
                    {
                        if (_activeFind.Contains(player))
                        {
                            _activeFind.Remove(player);
                            DestroyGuiNoOne(player);
                        }
                        InputGui(player, player.userID, 1);
                        MessageList(player, player, 1);
                        if (_activeGuiPrivate.ContainsKey(player)) _activeGuiPrivate.Remove(player);
                        if (_activeGuiModer.ContainsKey(player)) _activeGuiModer.Remove(player);
                        if (!_activeGuiAdmin.ContainsKey(player))_activeGuiAdmin.Add(player, player);
                    }
                    return;
                case "moder":
                    if (AllowModer(player))
                    {
                        player.Command($"cm.filtercharsmodercharf {int.Parse(arg.Args[1])} ~");
                        if (_activeGuiPrivate.ContainsKey(player)) _activeGuiPrivate.Remove(player);
                        if (_activeGuiAdmin.ContainsKey(player)) _activeGuiAdmin.Remove(player);
                    }
                    else
                    {
                        if (_activeFind.Contains(player))
                        {
                            _activeFind.Remove(player);
                            DestroyGuiNoOne(player);
                        }
                        InputGui(player, player.userID, 2);
                        MessageList(player, player, 2);
                        if (_activeGuiPrivate.ContainsKey(player)) _activeGuiPrivate.Remove(player);
                        if (_activeGuiAdmin.ContainsKey(player)) _activeGuiAdmin.Remove(player);
                        if (!_activeGuiModer.ContainsKey(player)) _activeGuiModer.Add(player, player);
                    }
                    return;
                case "players":
                    DestroyGui(player, UiInput);
                    player.Command($"cm.filtercharsplayerscharf {int.Parse(arg.Args[1])} ~");
                    if (_activeGuiModer.ContainsKey(player)) _activeGuiModer.Remove(player);
                    if (_activeGuiAdmin.ContainsKey(player)) _activeGuiAdmin.Remove(player);
                    return;
            }
        }
        
        [ConsoleCommand("cm.openinputmenu")]
        private void CmdAnswer(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;
            
            var hum = Convert.ToUInt64(arg.Args[0]); 
            var target = GetPlayer(hum);
            
            if (_activeFind.Contains(player))_activeFind.Remove(player);

            DestroyGuiNoOne(player);
            CreateGui(player, target);

            switch (arg.Args[1])
            {
                case "1":
                    InputGui(player, target.userID, 1);
                    MessageList(player, target, 1);
                    if (!_activeGuiAdmin.ContainsKey(player)) 
                        _activeGuiAdmin.Add(player, target);
                    if (!_string.ContainsKey(player)) return;
                    _string.Remove(player);
                    return;
                case "2":
                    InputGui(player, target.userID, 2);
                    MessageList(player, target, 2);
                    if (!(_activeGuiModer).ContainsKey(player)) 
                        _activeGuiModer.Add(player, target);
                    if (!_string.ContainsKey(player)) return;
                    _string.Remove(player);
                    return;
                case "3":
                    InputGui(player, target.userID, 3);
                    MessageList(player, target, 3);
                    if (!_activeGuiPrivate.ContainsKey(player)) 
                        _activeGuiPrivate.Add(player, target);
                    if (!_activeMess.ContainsKey(player))
                        _activeMess.Add(player, target);
                    _activeMess[player] = target;
                    if (!_string.ContainsKey(player)) return;
                    _string.Remove(player);
                    return;
            }
            
            _activeFind.Remove(player);
        }
        
        [ConsoleCommand("cm.filtercharsadmininput")]
        private void CmdFilterCharsAdmin(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;

            if (!AllowAdmin(player)) return;

            var playerList = new Dictionary<string, ulong>();

            var argList = arg.Args.ToList();
            argList.RemoveAt(1);
            var message = string.Join(" ", argList.ToArray());

            if (!_string.ContainsKey(player)) _string.Add(player, "");
            _string[player] = message;
            if (_string[player] == "") return;
            var name = arg.Args[1];
            foreach (var target in _data.Players)
            {
                if (target.Value == player.userID) continue;
                if (target.Key.StartsWith(name.ToUpper()) || target.Key.StartsWith(name.ToLower()))
                {
                    playerList.Add(target.Key, target.Value);
                }
            }
            DestroyGui(player, UiPlayers);
            DestroyGui(player, UiMess);
            var numList = int.Parse(arg.Args[2]);
            ShowPlayers(player, playerList, "input", 1, numList);
            _activeFind.Add(player);
            if (!_string.ContainsKey(player)) return;
            _string.Remove(player);
        }

        [ConsoleCommand("cm.filtercharsadmincharf")]
        private void CmdFilterCharsAdminCh(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;

            if (!AllowAdmin(player)) return;

            var playerList = new Dictionary<string, ulong>();

            var numList = int.Parse(arg.Args[0]);
            var charF = arg.Args[1];
            if (charF == "~")
            {
                foreach (var target in BasePlayer.activePlayerList)
                {
                    if (IsNpc(target)) continue;
                    if (target == player) continue;
                    if (AllowAdmin(target)) continue;
                    if (!_data.PlayerMess.ContainsKey(target.userID)) continue;
                    if (_data.PlayerMess[target.userID].CountAdminMess > 0)
                        playerList.Add(target.displayName, target.userID);
                }
                DestroyGui(player, UiPlayers);
                DestroyGui(player, UiMess);
                ShowPlayers(player, playerList, "charf", 1, numList, charF);
                _activeFind.Add(player);
            }
            else
            {
                foreach (var target in BasePlayer.activePlayerList)
                {
                    if (IsNpc(target)) continue;
                    if (target != player && !AllowAdmin(target))
                    {
                        if (target.displayName.StartsWith(charF.ToUpper()) ||
                            target.displayName.StartsWith(charF.ToLower()))
                            if (!playerList.ContainsKey(target.displayName))
                                playerList.Add(target.displayName, target.userID);
                    }
                }

                foreach (var target in BasePlayer.sleepingPlayerList)
                {
                    if (IsNpc(target)) continue;
                    if (!AllowAdmin(target))
                    {
                        if (target.displayName.StartsWith(charF.ToUpper()) ||
                            target.displayName.StartsWith(charF.ToLower()))
                            if (!playerList.ContainsKey(target.displayName))
                                playerList.Add(target.displayName, target.userID);
                    }
                }

                DestroyGui(player, UiPlayers);
                DestroyGui(player, UiMess);
                ShowPlayers(player, playerList, "charf", 1, numList, charF);
                _activeFind.Add(player);
            }

            if (!_string.ContainsKey(player)) return;
            _activeFind.Add(player);
            _string.Remove(player);
        }

        [ConsoleCommand("cm.filtercharsmoderinput")]
        private void CmdFilterCharsModer(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;

            if (!AllowModer(player)) return;
            var playerList = new Dictionary<string, ulong>();

            var argList = arg.Args.ToList();
            argList.RemoveAt(1);
            var message = string.Join(" ", argList.ToArray());

            if (!_string.ContainsKey(player)) _string.Add(player, "");
            _string[player] = message;
            if (_string[player] == "") return;
            var name = arg.Args[1];
            foreach (var target in _data.Players)
            {
                if (target.Value == player.userID) continue;
                if (target.Key.StartsWith(name.ToUpper()) || target.Key.StartsWith(name.ToLower()))
                {
                    playerList.Add(target.Key, target.Value);
                }
            }
            DestroyGui(player, UiPlayers);
            DestroyGui(player, UiMess);
            var numList = int.Parse(arg.Args[2]);
            ShowPlayers(player,playerList, "input", 2, numList);
            _activeFind.Add(player);
            if (!_string.ContainsKey(player)) return;
            _string.Remove(player);
        }

        [ConsoleCommand("cm.filtercharsmodercharf")]
        private void CmdFilterCharsModerCh(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;

            if (!AllowModer(player)) return;
            var playerList = new Dictionary<string, ulong>();

            var numList = int.Parse(arg.Args[0]);
            var charF = arg.Args[1];
            if (charF == "~")
            {
                foreach (var target in BasePlayer.activePlayerList)
                {
                    if (IsNpc(target)) continue;
                    if (target == player) continue;
                    if (AllowModer(target)) continue;
                    if (!_data.PlayerMess.ContainsKey(target.userID)) continue;
                    if (_data.PlayerMess[target.userID].CountModerMess > 0)
                        playerList.Add(target.displayName, target.userID);
                }
                DestroyGui(player, UiPlayers);
                DestroyGui(player, UiMess);
                ShowPlayers(player, playerList, "charf", 2, numList, charF);
                _activeFind.Add(player);
            }
            else
            {
                foreach (var target in BasePlayer.activePlayerList)
                {
                    if (IsNpc(target)) continue;
                    if (target != player && !AllowModer(target) && !AllowAdmin(target))
                    {
                        if (target.displayName.StartsWith(charF.ToUpper()) ||
                            target.displayName.StartsWith(charF.ToLower()))
                                if (!playerList.ContainsKey(target.displayName))
                                    playerList.Add(target.displayName, target.userID);
                    }
                }

                foreach (var target in BasePlayer.sleepingPlayerList)
                {
                    if (IsNpc(target)) continue;
                    if (!AllowModer(target) && !AllowAdmin(target))
                    {
                        if (target.displayName.StartsWith(charF.ToUpper()) ||
                            target.displayName.StartsWith(charF.ToLower()))
                            if (target != player)
                                if (!playerList.ContainsKey(target.displayName))
                                    playerList.Add(target.displayName, target.userID);
                    }
                }

                DestroyGui(player, UiPlayers);
                DestroyGui(player, UiMess);
                ShowPlayers(player, playerList, "charf", 2, numList, charF);
                _activeFind.Add(player);
            }

            if (!_string.ContainsKey(player)) return;
            _activeFind.Add(player);
            _string.Remove(player);
        }

        [ConsoleCommand("cm.filtercharsplayersinput")]
        private void CmdFilterCharsPlayers(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;
            
            var playerList = new Dictionary<string, ulong>();
            var argList = arg.Args.ToList();
            argList.RemoveAt(1);
            var message = string.Join(" ", argList.ToArray());

            if (!_string.ContainsKey(player)) _string.Add(player, "");
            _string[player] = message;
            if (_string[player] == "") return;
            var name = arg.Args[1];
            if (_data.Players == null) return;
            foreach (var target in _data.Players)
            {
                if (target.Value == player.userID) continue;
                if (target.Key.StartsWith(name.ToUpper()) || target.Key.StartsWith(name.ToLower()))
                {
                    playerList.Add(target.Key, target.Value);
                }
            }
            DestroyGui(player, UiPlayers);
            DestroyGui(player, UiMess);
            var numList = int.Parse(arg.Args[2]);
            ShowPlayers(player, playerList, "input", 3, numList);
            _activeFind.Add(player);
            if (!_string.ContainsKey(player)) return;
            _string.Remove(player);
        }

        [ConsoleCommand("cm.filtercharsplayerscharf")]
        private void CmdFilterCharsPlayersCh(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;

            var playerList = new Dictionary<string, ulong>();

            var numList1 = int.Parse(arg.Args[0]);
            var charF = arg.Args[1];
            if (charF == "~")
            {
                foreach (var target in BasePlayer.activePlayerList)
                {
                    if (target != player)
                        playerList.Add(target.displayName, target.userID);
                }
                //foreach (var target in BasePlayer.sleepingPlayerList)
                //{
                //    if (IsNpc(target)) continue;
                //    if (target != player)
                //        if (!playerList.ContainsKey(target.displayName))
                //            playerList.Add(target.displayName, target.userID);
                //}
                DestroyGui(player, UiPlayers);
                DestroyGui(player, UiMess);

                ShowPlayers(player, playerList, "charf", 3, numList1, charF);
                _activeFind.Add(player);
            }
            else
            {
                foreach (var target in _data.Players)
                {
                    if (target.Value != player.userID)
                    {
                        if (target.Key.StartsWith(charF.ToUpper()) ||
                            target.Key.StartsWith(charF.ToLower()))
                            if (!playerList.ContainsKey(target.Key))
                                playerList.Add(target.Key, target.Value);
                    }
                }

                foreach (var target in BasePlayer.sleepingPlayerList)
                {
                    if (IsNpc(target)) continue;
                    if (target.displayName.StartsWith(charF.ToUpper()) ||
                        target.displayName.StartsWith(charF.ToLower()))
                        if(!playerList.ContainsKey(target.displayName))
                            playerList.Add(target.displayName, target.userID);
                }

                DestroyGui(player, UiPlayers);
                DestroyGui(player, UiMess);
                ShowPlayers(player, playerList, $"charf", 3, numList1, charF);
                _activeFind.Add(player);
            }

            if (!_string.ContainsKey(player)) return;
            _activeFind.Add(player);
            _string.Remove(player);
        }

        [ConsoleCommand("cm.sendchatminus")]
        private void CmdChatMinusSendMessage(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection.player as BasePlayer;
            if (player == null)
                return;

            BasePlayer target;
            
            if (!_string.ContainsKey(player)) _string.Add(player, "");

            switch (arg.Args[0])
            {
                case "input":
                    var argList = arg.Args.ToList();
                    argList.RemoveAt(0);
                    var message = string.Join(" ", argList.ToArray());
            
                    if (!_string.ContainsKey(player)) _string.Add(player, "");
                    _string[player] = message;
                    return;
                case "playermessage": // игрок игроку
                    target = GetPlayer(Convert.ToUInt64(arg.Args[1]));
                    if (!CheckMessage(_string[player]))
                    {
                        Msg(player, lang.GetMessage("MSG_ERROR", this, player.UserIDString));
                        return;
                    }
                    _data.PlayerMess[player.userID].PrivateMess[target.userID].Add(DateTime.Now, ($"<b><color=#FFFFFF>  {player.displayName}</color></b> <size=10>({DateTime.Now})</size>\n" + _string[player]));
                    SaveData();
                    DestroyGuiNoOne(player);
                    InputGui(player, target.userID, 3);
                    MessageList(player, target, 3);
                    if (_config.EnableSound) Effect.server.Run(_config.Sound, target, 0, Vector3.zero, Vector3.zero);
                    //Puts($"Игрок {player.displayName} для {target.displayName}: {_string[player]}");
                    SendUpdateMessages(player, target, 1);
                    return;
                case "adminmessage": // игрок админу
                    if (!CheckMessage(_string[player])) 
                    {
                        Msg(player, lang.GetMessage("MSG_ERROR", this, player.UserIDString));
                        return;
                    }
                    _data.PlayerMess[player.userID].AdminMess.Add(DateTime.Now, ($"<b><color=#ffffff>  {player.displayName}</color></b> <size=10>({DateTime.Now})</size>\n" + _string[player]));
					_data.PlayerMess[player.userID].CountAdminMess += 1;
                    SaveData();
                    DestroyGuiNoOne(player);
                    InputGui(player, player.userID, 1);
                    MessageList(player, player, 1);
                    //Puts($"Игрок {player.displayName} АДМИНУ: {_string[player]}");
                    SendUpdateMessages(player, player, 2);
                    return;
                case "adminanswer": // админ игроку
                    target = GetPlayer(Convert.ToUInt64(arg.Args[1]));
                    if (!CheckMessage(_string[player])) 
                    {
                        Msg(player, lang.GetMessage("MSG_ERROR", this, player.UserIDString));
                        return;
                    }
                    _data.PlayerMess[target.userID].AdminMess.Add(DateTime.Now, ($"<b><color=#ffffff>ADMIN</color></b> <size=10>({DateTime.Now})</size>\n" + _string[player]));
					_data.PlayerMess[target.userID].CountAdminMess += 1;
                    SaveData();
                    DestroyGuiNoOne(player);
                    InputGui(player, target.userID, 1);
                    MessageList(player, target, 1);
                    if (_config.EnableSound) Effect.server.Run(_config.Sound, target, 0, Vector3.zero, Vector3.zero);
                    //Puts($"АДМИН {player.displayName} ИГРОКУ {target.displayName}: {_string[player]}");
                    SendUpdateMessages(player, target, 3);
                    return;
                case "modermessage": // игрок модеру
                    if (!CheckMessage(_string[player])) 
                    {
                        Msg(player, lang.GetMessage("MSG_ERROR", this, player.UserIDString));
                        return;
                    }
                    _data.PlayerMess[player.userID].ModerMess.Add(DateTime.Now, ($"<b><color=#ffffff>  {player.displayName}</color></b> <size=10>({DateTime.Now})</size>\n" + _string[player]));
					_data.PlayerMess[player.userID].CountModerMess += 1;
                    SaveData();
                    DestroyGuiNoOne(player);
                    InputGui(player, player.userID, 2);
                    MessageList(player, player, 2);
                    //Puts($"Игрок {player.displayName} МОДЕРУ: {_string[player]}");
                    SendUpdateMessages(player, player, 4);
                    return;
                case "moderanswer": // модер игроку
                    target = GetPlayer(Convert.ToUInt64(arg.Args[1]));
                    if (!CheckMessage(_string[player])) 
                    {
                        Msg(player, lang.GetMessage("MSG_ERROR", this, player.UserIDString));
                        return;
                    }
                    _data.PlayerMess[target.userID].ModerMess.Add(DateTime.Now, ($"<b><color=#ffffff>MODERATOR</color></b> <size=10>({DateTime.Now})</size>\n" + _string[player]));
					_data.PlayerMess[target.userID].CountModerMess += 1;
                    SaveData();
                    DestroyGuiNoOne(player);
                    InputGui(player, target.userID, 2);
                    MessageList(player, target, 2);
                    if (_config.EnableSound) Effect.server.Run(_config.Sound, target, 0, Vector3.zero, Vector3.zero);
                    //Puts($"МОДЕР {player.displayName} ИГРОКУ {target.displayName}: {_string[player]}");
                    SendUpdateMessages(player, target, 5);
                    return;
                case "removeamdmin": // админ удаляет
                    target = GetPlayer(Convert.ToUInt64(arg.Args[1]));
                    if (_data.PlayerMess[target.userID].AdminMess.Count > 0) _data.PlayerMess[target.userID].AdminMess.Clear();
					_data.PlayerMess[target.userID].CountAdminMess = 0;
                    SaveData();
                    player.Command("cm.sendchatminus close");
                    target.Command("cm.sendchatminus close");
                    Msg(player, lang.GetMessage("TICKET_DELETE", this, player.UserIDString));
                    Msg(target, lang.GetMessage("TICKET_DELETE", this, target.UserIDString));
                    return;
                case "removemoder": // модер удаляет
                    target = GetPlayer(Convert.ToUInt64(arg.Args[1]));
                    if (_data.PlayerMess[target.userID].ModerMess.Count > 0) _data.PlayerMess[target.userID].ModerMess.Clear();
					_data.PlayerMess[target.userID].CountModerMess = 0;
                    SaveData();
                    player.Command("cm.sendchatminus close");
                    target.Command("cm.sendchatminus close");
                    Msg(player, lang.GetMessage("TICKET_DELETE", this, player.UserIDString));
                    Msg(target, lang.GetMessage("TICKET_DELETE", this, target.UserIDString));
                    return;
                case "removeplayeramdmin": // игрок удаляет сообщения для админов
                    if (_data.PlayerMess[player.userID].AdminMess.Count > 1) _data.PlayerMess[player.userID].AdminMess.Clear();
					_data.PlayerMess[player.userID].CountAdminMess = 0;
                    SaveData();
                    player.Command("cm.sendchatminus close");
                    Msg(player, lang.GetMessage("TICKET_DELETE", this, player.UserIDString));
                    SendUpdateMessages(player, player, 6);
                    return;
                case "removeplayermoder": // игрок удаляет сообщения для модеров
                    if (_data.PlayerMess[player.userID].ModerMess.Count > 1) _data.PlayerMess[player.userID].ModerMess.Clear();
					_data.PlayerMess[player.userID].CountModerMess = 0;
                    SaveData();
                    player.Command("cm.sendchatminus close");
                    Msg(player, lang.GetMessage("TICKET_DELETE", this, player.UserIDString));
                    SendUpdateMessages(player, player, 7);
                    return;
                case "close":
                    DestroyGuiAll(player);
                    if (_activeGuiModer.ContainsKey(player)) _activeGuiModer.Remove(player);
                    if (_activeGuiAdmin.ContainsKey(player)) _activeGuiAdmin.Remove(player);
                    if (_activeGuiPrivate.ContainsKey(player)) _activeGuiPrivate.Remove(player);
                    if (_activeFind.Contains(player))_activeFind.Remove(player);
                    _activeGui.Remove(player);
                    return;
            }
        }

        #endregion

        #region Cui

        private static void CreateGui(BasePlayer player, BasePlayer target)
        {
            //var num = _data.PlayersSetting[player.userID].StatusMenu;
            var startOne = "0.825 0.3";
            var lastOne = "0.9975 0.9";
/*            var  name = ">";
            switch (num)
            {
                case 1:
                    startOne = "0.9975 0.3";
                    lastOne = "1.17 0.9";
                    name = "<b><</b>";
                    break;
                case 0:
                    startOne = "0.825 0.3";
                    lastOne = "0.9975 0.9";
                    name = "<b>></b>";
                    break;
            }*/

            var container = Ui.Container(UiElement, Ui.Color("#000000", 0f), startOne, lastOne); 
            Ui.Panel(ref container, UiElement, Ui.Color("#808080", 0.3f), "0 0.074", "1 0.924");
            
            Ui.Panel(ref container, UiElement, Ui.Color("#808080", 0.5f), "0 0.931", "1 1");
            Ui.Label(ref container, UiElement, $"<b>{target.displayName}</b>", Ui.Color("#FFFFFF", 1f), 16, "0 0.931", "1 1", 0);
            
            Ui.Panel(ref container, UiElement, Ui.Color("#808080", 0f), "0 0", "1 0.069");
            Ui.Button(ref container, UiElement, Ui.Color("#B67A7F", 0.8f), "<b>ADMIN</b>", "1 1 1 0.8", 14, "0 0", "0.32 0.065", $"cm.opendopmenu admin 0");
            Ui.Button(ref container, UiElement, Ui.Color("#81b67a", 0.8f), "<b>MODER</b>", "1 1 1 0.8", 14, "0.34 0", "0.66 0.065", $"cm.opendopmenu moder 0");
            Ui.Button(ref container, UiElement, Ui.Color("#808080", 0.6f), "<b>PLAYERS</b>", "1 1 1 0.8", 14, "0.68 0", "1 0.065", $"cm.opendopmenu players 0");
            
            //Ui.Button(ref container, UiElement, Ui.Color("#808080", 0.6f), name, "1 1 1 0.8", 16, "-0.07 0.46", "0 0.54", $"cm.change {target.userID}");

            CuiHelper.DestroyUi(player, UiElement);
            CuiHelper.AddUi(player, container);
        }
        
        private void InputGui(BasePlayer player, ulong targetUlong, int num)
        {
            var container = Ui.Container(UiInput, Ui.Color("#808080", 0f), "0.0128 0.025", "0.3077 0.124");
            
            Ui.Panel(ref container, UiInput, Ui.Color("#ff7f50", 0.7f), "0 0.57", "1 0.94", 0.5f);
            Ui.Input(ref container, UiInput, Ui.Color("#ffffff", 1f), "input ", 18, $"cm.sendchatminus ", "0.02 0.57", "0.98 0.94");
            
            Ui.Panel(ref container, UiInput, Ui.Color("#808080", 0.4f), "0.51 0.14", "0.75 0.51");
            Ui.Button(ref container, UiInput, Ui.Color("#FF6347", 0.7f), "<b>CLOSE</b>", Ui.Color("#FFFFFF", 1f), 14, "0.51 0.14", "0.75 0.51", $"cm.sendchatminus close");
            Ui.Panel(ref container, UiInput, Ui.Color("#808080", 0.4f), "0.76 0.14", "1 0.51");

            switch (num)
            {
                    case 1:
                        if (AllowAdmin(player))
                        {
                            Ui.Panel(ref container, UiInput, Ui.Color("#808080", 0.4f), "0.26 0.14", "0.5 0.51");
                            Ui.Button(ref container, UiInput, Ui.Color("#808080", 0.7f), "<b>REMOVE</b>", Ui.Color("#FFFFFF", 1f), 14, "0.26 0.14", "0.5 0.51", $"cm.sendchatminus removeamdmin {targetUlong}");
                            Ui.Button(ref container, UiInput, Ui.Color("#9acd32", 0.7f), "<b>SEND</b>", Ui.Color("#FFFFFF", 1f), 14, "0.76 0.14", "1 0.51", $"cm.sendchatminus adminanswer {targetUlong}");
                        }
                        else
                        {
                            Ui.Panel(ref container, UiInput, Ui.Color("#808080", 0.4f), "0.26 0.14", "0.5 0.51");
                            Ui.Button(ref container, UiInput, Ui.Color("#808080", 0.7f), "<b>REMOVE</b>", Ui.Color("#FFFFFF", 1f), 14, "0.26 0.14", "0.5 0.51", $"cm.sendchatminus removeplayeramdmin");
                            Ui.Button(ref container, UiInput, Ui.Color("#9acd32", 0.7f), "<b>SEND</b>", Ui.Color("#FFFFFF", 1f), 14, "0.76 0.14", "1 0.51", $"cm.sendchatminus adminmessage");
                        }
                        
                        CuiHelper.DestroyUi(player, UiInput);
                        CuiHelper.AddUi(player, container);
                        return;
                    case 2:
                        if (AllowModer(player))
                        {
                            Ui.Panel(ref container, UiInput, Ui.Color("#808080", 0.4f), "0.26 0.14", "0.5 0.51");
                            Ui.Button(ref container, UiInput, Ui.Color("#808080", 0.7f), "<b>REMOVE</b>", Ui.Color("#FFFFFF", 1f), 14, "0.26 0.14", "0.5 0.51", $"cm.sendchatminus removemoder {targetUlong}");
                            Ui.Button(ref container, UiInput, Ui.Color("#9acd32", 0.7f), "<b>SEND</b>", Ui.Color("#FFFFFF", 1f), 14, "0.76 0.14", "1 0.51", $"cm.sendchatminus moderanswer {targetUlong}");
                        }
                        else
                        {
                            Ui.Panel(ref container, UiInput, Ui.Color("#808080", 0.4f), "0.26 0.14", "0.5 0.51");
                            Ui.Button(ref container, UiInput, Ui.Color("#808080", 0.7f), "<b>REMOVE</b>", Ui.Color("#FFFFFF", 1f), 14, "0.26 0.14", "0.5 0.51", $"cm.sendchatminus removeplayermoder");
                            Ui.Button(ref container, UiInput, Ui.Color("#9acd32", 0.7f), "<b>SEND</b>", Ui.Color("#FFFFFF", 1f), 14, "0.76 0.14", "1 0.51", $"cm.sendchatminus modermessage");
                        }
                        
                        CuiHelper.DestroyUi(player, UiInput);
                        CuiHelper.AddUi(player, container);
                        return;
                    case 3:
                        Ui.Button(ref container, UiInput, Ui.Color("#9acd32", 0.7f), "<b>SEND</b>", Ui.Color("#FFFFFF", 1f), 14, "0.76 0.14", "1 0.51", $"cm.sendchatminus playermessage {targetUlong}");
                        
                        CuiHelper.DestroyUi(player, UiInput);
                        CuiHelper.AddUi(player, container);
                        return;
            }
        }
        
        private static void FilterCharsInputMenu(BasePlayer player, int num)
        {
            var container = Ui.Container(UiInputFind, Ui.Color("#808080", 0f), "0.825 0.25", "0.9975 0.29");

            switch (num)
            {
                case 1:
                    Ui.Panel(ref container, UiInputFind, Ui.Color("#808080", 0.6f), "0 0", "0.8 1");
                    Ui.Input(ref container, UiInputFind, Ui.Color("#ffffff", 1f), "0 ", 18, $"cm.filtercharsadmincharf ", "0 0", "0.8 1");
                    Ui.Panel(ref container, UiInputFind, Ui.Color("#808080", 0.6f), "0.82 0", "1 1");
                    Ui.Label(ref container, UiInputFind, $"<b>FIND</b>", Ui.Color("#FFFFFF", 1f), 16, "0.82 0", "1 1");
                    CuiHelper.DestroyUi(player, UiInputFind);
                    CuiHelper.AddUi(player, container);
                    return;
                case 2:
                    Ui.Panel(ref container, UiInputFind, Ui.Color("#808080", 0.6f), "0 0", "0.8 1");
                    Ui.Input(ref container, UiInputFind, Ui.Color("#ffffff", 1f), "0 ", 18, $"cm.filtercharsmodercharf ", "0 0", "0.8 1");
                    Ui.Panel(ref container, UiInputFind, Ui.Color("#808080", 0.6f), "0.82 0", "1 1");
                    Ui.Label(ref container, UiInputFind, $"<b>FIND</b>", Ui.Color("#FFFFFF", 1f), 16, "0.82 0", "1 1");
                    CuiHelper.DestroyUi(player, UiInputFind);
                    CuiHelper.AddUi(player, container);
                    return;
                case 3:
                    Ui.Panel(ref container, UiInputFind, Ui.Color("#808080", 0.6f), "0 0", "0.8 1");
                    Ui.Input(ref container, UiInputFind, Ui.Color("#ffffff", 1f), "0 ", 18, $"cm.filtercharsplayerscharf ", "0 0", "0.8 1");
                    Ui.Panel(ref container, UiInputFind, Ui.Color("#808080", 0.6f), "0.82 0", "1 1");
                    Ui.Label(ref container, UiInputFind, $"<b>FIND</b>", Ui.Color("#FFFFFF", 1f), 16, "0.82 0", "1 1");
                    CuiHelper.DestroyUi(player, UiInputFind);
                    CuiHelper.AddUi(player, container);
                    return;
            }
        }
        
        private void MessageList(BasePlayer player, BasePlayer target, int num)
        {
            BasePlayer human;

            if (AllowAdmin(player) && num != 2 && num != 3) human = target;
            else if (AllowModer(player) && num != 1 && num != 3) human = target;
            else human = player;

            Dictionary<DateTime, string> top;
            var message = new List<string>();
            
            switch (num)
            {
                case 1:
                    CheckData(human.userID, human.userID);
                    top = _data.PlayerMess[human.userID].AdminMess.OrderByDescending(pair => pair.Key).Take(5).ToDictionary(pair => pair.Key, pair => pair.Value);
                    foreach (var msg in top)
                    {
                        message.Add(msg.Value);
                    }
                    ShowMessage(player, message);
                    break;
                case 2:
                    CheckData(human.userID, human.userID);
                    top = _data.PlayerMess[human.userID].ModerMess.OrderByDescending(pair => pair.Key).Take(5).ToDictionary(pair => pair.Key, pair => pair.Value);
                    foreach (var msg in top)
                    {
                        message.Add(msg.Value);
                    }
                    ShowMessage(player, message);
                    break;
                case 3:
                    CheckData(human.userID, target.userID);
                     top = _data.PlayerMess[human.userID].PrivateMess[target.userID].OrderByDescending(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value);
                     var top1 = _data.PlayerMess[target.userID].PrivateMess[human.userID].OrderByDescending(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value);
                    var top3 = new Dictionary<DateTime, string>();
                    foreach (var tops in top) 
                    {top3.Add(tops.Key, tops.Value);}
                    foreach (var tops in top1) 
                    {top3.Add(tops.Key, tops.Value);}
                    var top4 = top3.OrderByDescending(pair => pair.Key).Take(5).ToDictionary(pair => pair.Key, pair => pair.Value);
                    foreach (var msg in top4)
                    {
                        message.Add(msg.Value);
                    }
                    ShowMessage(player, message);
                    break;
            }
        }

        private static void ShowMessage(BasePlayer player, IEnumerable<string> messageList)
        {
            var container = Ui.Container(UiMess, "1 1 1 0", "0.8278 0.3495", "0.9955 0.85");
            var y1 = 0f;
            var y2 = 0.1915f;
            var y3 = 0.154f;
            foreach (var t in messageList)
            {
                var color = Ui.Color(t.Contains(player.displayName) ? "#9acd32" : "#42aaff", 0.6f);
                if (t == "") color = Ui.Color("#808080", 0.6f);
                if (t.Contains("ADMIN") || t.Contains("MODER")) color = Ui.Color("#a333ff", 0.6f);
                
                Ui.Panel(ref container, UiMess, Ui.Color("#808080", 0.3f), $"0 {y1}", $"1 {y2}");
                Ui.Panel(ref container, UiMess, color, $"0 {y1}", $"1 {y2}");
                Ui.Panel(ref container, UiMess, Ui.Color("#808080", 0.8f), $"0 {y3}", $"1 {y2}");
                Ui.Label(ref container, UiMess, t, Ui.Color("#FFFFFF", 1f), 12, $"0.01 {y1}", $"0.99 {y2}", 0, TextAnchor.UpperLeft);
                y1 += 0.201f;
                y2 += 0.201f;
                y3 += 0.201f;
            }

            CuiHelper.DestroyUi(player, UiMess);
            CuiHelper.AddUi(player, container);
        }
        
        private void ShowPlayers(BasePlayer player, Dictionary<string, ulong> list, string chars,  int num, int numList, string charF = "")
        {
            FilterCharsInputMenu(player, num);
            var container = Ui.Container(UiPlayers, Ui.Color("#808080", 0.6f), "0.2 0.3", "0.8 0.9");
            //var playerListSort = list.OrderByDescending(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value);
            var playerListSort = list.OrderByDescending(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value).Skip(numList * 60).Take(60);

            var color = Ui.Color("#FFFFFF", 0.3f);

            var count = 0;
            var x1 = 0.014f;
            var y1 = 0.02f;
            var x2 = 0.17f;
            var y2 = 0.105f;
            foreach (var pl in playerListSort)
            {
                if (_data.PlayerMess.ContainsKey(player.userID) && _data.PlayerMess.ContainsKey(pl.Value) && _data.PlayerMess[player.userID].PrivateMess.ContainsKey(pl.Value) && _data.PlayerMess[pl.Value].PrivateMess.ContainsKey(player.userID))
                {
                    var date1 = _data.PlayerMess[player.userID].PrivateMess[pl.Value].OrderByDescending(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value).Take(1);
                    var date2 = _data.PlayerMess[pl.Value].PrivateMess[player.userID].OrderByDescending(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value).Take(1);

                    var dada1 = DateTime.Now;
                    var dada2 = DateTime.Now;
                    var text1 = "";
                    var text2 = "";
                    foreach (var r in date1)
                    {
                        foreach (var t in date2)
                        {
                            dada2 = t.Key;
                            text1 = t.Value;
                        }
                        dada1 = r.Key;
                        text2 = r.Value;
                    }
                    color = dada1 > dada2 ? text1 != "" && text2 != "" ? Ui.Color("#9acd32", 0.3f): Ui.Color("#FFFFFF", 0.3f) : text1 != "" && text2 != "" ? Ui.Color("#42aaff", 0.3f): Ui.Color("#FFFFFF", 0.3f);
                }
                var playerId = pl.Key;
                Ui.Button(ref container, UiPlayers, color, playerId, "1 1 1 1", 18, $"{x1} {y1}", $"{x2} {y2}", $"cm.openinputmenu {pl.Value} {num}");
                color = Ui.Color("#FFFFFF", 0.3f);
                ++count;

                x1 += 0.163f;
                x2 += 0.163f;
                if (count % 6 == 0)
                {
                    y1 += 0.0968f;
                    y2 += 0.0968f;
                    x1 = 0.014f;
                    x2 = 0.17f;
                }

                if (count >= 60)
                    break;
            }

            var command = num == 1 ? $"cm.filtercharsadmin{chars}" : num == 2 ? $"cm.filtercharsmoder{chars}" : $"cm.filtercharsplayers{chars}";
            var numDown = numList == 0 ? 0 : numList - 1;
            var cmdUp = (numList + 1) * 60 > playerListSort.Count() ? "" : $"{command} {numList + 1} {charF}";
            var cmdDown = numList <= 0 ? "" : $"{command} {numDown} {charF}";
            Ui.Button(ref container, UiPlayers, Ui.Color("#808080", 0.6f), $"{numList + 2}", "1 1 1 1", 16, "0.9 -0.08", "1 -0.015", $"{cmdUp}");
            Ui.Button(ref container, UiPlayers, Ui.Color("#808080", 0.6f), $"{numDown +1}", "1 1 1 1", 16, "0 -0.08", "0.1 -0.015", $"{cmdDown}");

            CuiHelper.DestroyUi(player, UiMess);
            CuiHelper.AddUi(player, container);
        }

        #endregion
        
        #region DestroyGui
        
        private static void DestroyGui(BasePlayer player, string container)
        {
            CuiHelper.DestroyUi(player, container);
        }
        
        private static void DestroyGuiNoOne(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, UiPlayers);
            CuiHelper.DestroyUi(player, UiMess);
            CuiHelper.DestroyUi(player, UiInputFind);
        }
        
        private static void DestroyGuiAll(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, UiElement);
            CuiHelper.DestroyUi(player, UiInput);
            CuiHelper.DestroyUi(player, UiInputFind);
            CuiHelper.DestroyUi(player, UiMess);
            CuiHelper.DestroyUi(player, UiPlayers);
            CuiHelper.DestroyUi(player, UiNotiсe);
        }
        
        #endregion

        #region Func

        private static bool IsNpc(B
// ... [Code preview truncated due to length. Full source in attached file] ...

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