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

FREE CMuteChat : 1.0.4 1.0.4

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

namespace Oxide.Plugins
{
	[Info("CMuteChat", "Crazy", "1.0.4")]
	[Description("Mute/Unmute chat server")]
	class CMuteChat : RustPlugin
	{
		#region Fields
			private static CMuteChat _ins;
			private static List<MTimer> muteList = new List<MTimer>();
			private Dictionary<ulong, MuteChat> _data;
			public class MTimer
			{
				public TimeSpan start;
				public TimeSpan end;
				public MTimer(int min)
                {
                    this.start = DateTime.Now.TimeOfDay;
                    this.end = DateTime.Now.TimeOfDay.Add(TimeSpan.FromMinutes(min));
                }
			}

		#endregion

        #region Server
            private void Loaded()
            {
                _ins = this;
                _data = new Dictionary<ulong, MuteChat>();
                
                permission.RegisterPermission("cmutechat.use", this);

                foreach (var player in BasePlayer.activePlayerList)
                    OnPlayerConnected(player);                
            }
			private void Unload()
            {
                if (BasePlayer.activePlayerList.Count == 0)
                    return;

                MuteChat[] objects = UnityEngine.Object.FindObjectsOfType<MuteChat>();
                
                if (objects != null)
                {
                    foreach (var obj in objects)
                        UnityEngine.Object.Destroy(obj);
                }
            }
            private void OnPlayerConnected(BasePlayer player)
            {
                if (player.HasPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot) || player.IsSleeping())
                {
                    timer.In(2, () => OnPlayerConnected(player));
                    return;
                }

                if (IsMuted() && !player.GetComponent<MuteChat>())                                    
                    _data[player.userID] = player.gameObject.AddComponent<MuteChat>();
            }
            private void OnPlayerDisconnected(BasePlayer player)
            {
                if(_data.ContainsKey(player.userID))
                    UnityEngine.Object.Destroy(_data[player.userID]);
            }
            private object OnPlayerChat(BasePlayer player, string message, ConVar.Chat.ChatChannel channel)
            {
                if (plugins.Exists("BetterChat"))
                    return null;

                if(player.IsAdmin)
					return null;

                if(channel == ConVar.Chat.ChatChannel.Team)
					return null;

                if(IsMuted())
                    return false;

                return null;
            }
			private void OnBetterChat(Dictionary<string, object> data)
			{
				var player = data["Player"] as IPlayer;
				var message = data["Message"] as string;
				var channel = data["ChatChannel"].ToString();
				
				if(player.IsAdmin)
					return;

				if(channel == "Team")
					return;

				if(IsMuted())			
					data["CancelOption"] = 2; 
			}

        #endregion

		#region Component
            private class MuteChat : FacepunchBehaviour
            {
                private BasePlayer player;
				private TimeSpan time;
				private void Awake()
                {
                    player = GetComponent<BasePlayer>();
                    time = DateTime.Now.TimeOfDay;
					CreateUI(true);
                    InvokeRepeating(Refresh, 0f, 1);
                }        
				private void Refresh()
                {
					time = DateTime.Now.TimeOfDay;

					if(!IsMuted())
					{
						Destroy(this);
						return;
					}

					if(IsFinish(time))
					{						
						muteList.Clear();
						Interface.CallHook("CMuteChat_End");
						_ins.Puts("Chat unmuted");
						Destroy(this);
						return;
					}

					DestroyUI();
					CreateUI();
                }
				private string GetCooldown()
				{
					TimeSpan cooldown = muteList.First().end - time;
					string result = cooldown.ToString(@"mm\:ss");

					return $"Restant • {result}";
				}
				private void CreateUI(bool all = false)
                {
					TimeSpan start = muteList.First().start; 
					TimeSpan end = muteList.First().end;
					string elapsedSeconds = (end - time).TotalSeconds.ToString();
					string totalSeconds = (end - start).TotalSeconds.ToString();
					float progressCount = (float) float.Parse(elapsedSeconds)/float.Parse(totalSeconds);

					if(all)
					{
						var container = UI.CreateElementContainer("cmutechat.static.txt", HexToRustFormat("#d8453dA1"), "0.925 0.66", "1 0.70");
						UI.AddText(ref container, "cmutechat.static.txt", "›› Mute Chat", 15, "robotocondensed-regular.ttf", "1 1 1 0.8", TextAnchor.MiddleLeft, "0.05 0.0", "1.0 1");
						UI.AddImageColor(ref container, "cmutechat.static.txt", HexToRustFormat("#000000F1"), "0 0", "1 0", "0 0", "0 5");
						CuiHelper.AddUi(player, container);
						
						var container2 = UI.CreateElementContainer("cmutechat.statictime.txt", HexToRustFormat("#000000D5"), "0.925 0.63", "1 0.659");
						CuiHelper.AddUi(player, container2);
					}
					else
					{
						var container = UI.CreateElementContainer("cmutechat.progressbar.txt", "0 0 0 0", "0.925 0.66", "1 0.70");
						UI.AddImageColor(ref container, "cmutechat.progressbar.txt", HexToRustFormat("#d8453dF1"), "0 0", $"{progressCount} 0", "0 1", "0 4");
						CuiHelper.AddUi(player, container);

						var container2 = UI.CreateElementContainer("cmutechat.progress.txt", "0 0 0 0", "0.925 0.63", "1 0.659");
						UI.AddText(ref container2, "cmutechat.progress.txt", GetCooldown(), 11, "robotocondensed-regular.ttf", "1 1 1 0.6", TextAnchor.MiddleCenter, "0.0 0.0", "0.95 1.0");
						CuiHelper.AddUi(player, container2);
					}
				}
				private void DestroyUI(bool all = false)
                {
                    if(all)
                    {
                        CuiHelper.DestroyUi(player, "cmutechat.static.txt");
						CuiHelper.DestroyUi(player, "cmutechat.statictime.txt");
						CuiHelper.DestroyUi(player, "cmutechat.progressbar.txt");
                        CuiHelper.DestroyUi(player, "cmutechat.progress.txt");
                    }                        
                    else
					{
                        CuiHelper.DestroyUi(player, "cmutechat.progressbar.txt");
						CuiHelper.DestroyUi(player, "cmutechat.progress.txt");
					}                       
                }
				private void OnDestroy() => DestroyUI(true);
            }

		#endregion

		#region Functions
			private bool isNumeric(string valeur)
			{
				if (string.IsNullOrEmpty(valeur))
					return false;

				foreach (char ch in valeur.ToCharArray())
					if (char.IsLetter(ch))
						return false;

				return true;
			}
			private static bool IsMuted() => muteList.Count == 0 ? false : true;
			private static bool IsFinish(TimeSpan time) => time > muteList.First().end ? true : false;
			
		#endregion

        #region UI
            static class UI
            {
                static public CuiElementContainer CreateElementContainer(string panel, string color, string aMin, string aMax)
                {
                    var NewElement = new CuiElementContainer()
                    {
                        {
                            new CuiPanel
                            {
                                Image = {Color = color},
                                RectTransform = {AnchorMin = aMin, AnchorMax = aMax}
                            },
                            new CuiElement().Parent = "Hud",
                            panel
                        }                  
                    };
                    return NewElement;  
                }
                static public void AddText(ref CuiElementContainer container, string panel, string text, int size, string font, string color, TextAnchor align, string aMin, string aMax)
                {
                    container.Add(new CuiElement
                    {
                        Name = CuiHelper.GetGuid(),
                        Parent = panel,
                        Components =
                        {
                            new CuiTextComponent
                            {
                                Text =  text, FontSize = size,
                                Font = font,
                                Color = color,
                                Align = align
                            },
                            new CuiRectTransformComponent {
                                AnchorMin = aMin, 
                                AnchorMax = aMax 
                            }
                        }
                    });                
                }
                static public void AddImageColor(ref CuiElementContainer container, string panel, string color, string aMin, string aMax, string oMin, string oMax)
                {
                    container.Add(new CuiElement
                    {
                        Name = CuiHelper.GetGuid(),
                        Parent = panel,
                        Components =
                        {
                            new CuiImageComponent                         
                            {
                                Color = color
                            },
                            new CuiRectTransformComponent {
                                AnchorMin = aMin, 
                                AnchorMax = aMax, 
                                OffsetMin = oMin, 
                                OffsetMax = oMax
                            }
                      
                        }
                    });                
                }
            }

        #endregion

        #region Helpers
            private static string HexToRustFormat(string hex)
            {
                if (string.IsNullOrEmpty(hex))
                    hex = "#FFFFFFFF";

                var str = hex.Trim('#');

                if (str.Length == 6)
                    str += "FF";

                if (str.Length != 8)
                {
                    throw new Exception(hex);
                    throw new InvalidOperationException("Cannot convert a wrong format.");
                }

                var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
                var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
                var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
                var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);

                Color color = new Color32(r, g, b, a);

                return string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
            }

        #endregion

        #region API

            [ConsoleCommand("/muteall")]
            private void API_MuteChat(ConsoleSystem.Arg arg)
            {
                if (!arg.IsAdmin)
                    return;

                API_MuteChat((BasePlayer)null, "muteall", arg.Args);
            }

            [ChatCommand("muteall"), Permission("cmutechat.use")]
			private void API_MuteChat(BasePlayer player, string command, string[] args)
			{
				if (args == null || args.Length == 0)
					return;

				if (isNumeric(args[0]))
				{
					if (IsMuted())
					{
						muteList.Clear();
						Unload();
					}

					muteList.Add(new MTimer(min:int.Parse(args[0])));

					Interface.CallHook("CMuteChat_Start", args[0]);

					foreach (var p in BasePlayer.activePlayerList)
                    	OnPlayerConnected(p);

					Puts("Chat muted");

					return;
				}

				if (args[0].ToLower() == "stop")
				{
					if (!IsMuted())
						return;

					Puts("Chat unmuted (cancel)");

					muteList.Clear();
					Interface.CallHook("CMuteChat_Cancel");
				}
			}
			private bool API_CMuteChat() => IsMuted();

		#endregion
	}
}

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