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

FREE NoMap : 1.0.1 1.0.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using Newtonsoft.Json;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using UnityEngine.UI;

namespace Oxide.Plugins;

[Info("No Map", "Blitzmachine", "1.0.1")]
[Description("Adds a full sized panel over the map interface with an custom set text")]
public class NoMap : RustPlugin
{
    #region Variables

    private CuiElementContainer _elementContainer;
    private Configuration _config;
    private const string CONTAINER_IDENTIFIER = "nomap.ui.container";
    private const string PERMISSION_NAME = "nomap.use";
    private HashSet<string> _blockedPlayers = new HashSet<string>();

    #endregion

    #region Plugin Configuration

    private class Configuration
    {
        [JsonProperty(propertyName: "Background Color (HEX)")]
        public string BackgroundColor { get; set; }

        [JsonProperty(propertyName: "Text")]
        public string Text { get; set; }

        [JsonProperty(propertyName: "Font Size")]
        public int FontSize { get; set; }

        [JsonProperty(propertyName: "Font Color")]
        public string FontColor { get; set; }

        [JsonProperty(propertyName: "Font Outline Color")]
        public string FontOutlineColor { get; set; }

        [JsonProperty(propertyName: "Font Outline Distance")]
        public string FontOutlineDistance { get; set; }

        public static Configuration GetDefaultConfiguration() => new Configuration
        {
            BackgroundColor = "#1c1c1c",
            Text = "Map Interface has been disabled!",
            FontColor = "#fa4343",
            FontSize = 40,
            FontOutlineColor = "#f1f1f1",
            FontOutlineDistance = "4"
        };
    }

    protected override void LoadDefaultConfig() => _config = Configuration.GetDefaultConfiguration();
    protected override void SaveConfig() => Config.WriteObject(_config);
    protected override void LoadConfig()
    {
        base.LoadConfig();
        try { _config = Config.ReadObject<Configuration>(); }
        catch (Exception e)
        {
            var builder = new StringBuilder("Configuration file is corrupt - (Invalid JSON Format?)").AppendLine();
            builder.AppendLine(e.Message);
            PrintError(builder.ToString());

            LoadDefaultConfig();
            PrintWarning("Configuration Object is using default values.");
        }
    }

    #endregion

    #region Oxide Hooks

    private void Init()
    {
        if (!permission.PermissionExists(PERMISSION_NAME))
            permission.RegisterPermission(PERMISSION_NAME, this);

        _elementContainer = InitializeElementContainer();

        if (_elementContainer.Count == 0)
            PrintWarning("ElementContainer has 0 elements.");
    }

    private void Loaded()
    {
        var players = BasePlayer.activePlayerList;

        if (players.Count == 0)
            return;

        foreach (BasePlayer player in players)
        {
            RefreshMapInterfaceUsage(player);
        }
    }

    private void OnPlayerConnected(BasePlayer player) => RefreshMapInterfaceUsage(player);

    private void Unload()
    {
        var players = BasePlayer.activePlayerList;

        if (players.Count == 0)
            return;

        foreach (BasePlayer player in players)
        {
            if (!IsPlayerOnline(player))
                continue;

            CuiHelper.DestroyUi(player, CONTAINER_IDENTIFIER);
        }
        _blockedPlayers.Clear();
    }

    private void OnUserPermissionGranted(string id, string permName)
    {
        if (!permName.Equals(PERMISSION_NAME))
            return;

        var player = BasePlayer.FindByID(ulong.Parse(id));
        RefreshMapInterfaceUsage(player);
    }

    private void OnUserPermissionRevoked(string id, string permName)
    {
        if (!permName.Equals(PERMISSION_NAME))
            return;

        var player = BasePlayer.FindByID(ulong.Parse(id));
        RefreshMapInterfaceUsage(player);
    }

    private void OnGroupPermissionGranted(string name, string perm)
    {
        if (!perm.Equals(PERMISSION_NAME))
            return;

        var players = BasePlayer.activePlayerList;
        foreach (BasePlayer player in players)
        {
            RefreshMapInterfaceUsage(player);
        }
    }

    private void OnGroupPermissionRevoked(string name, string perm)
    {
        if (!perm.Equals(PERMISSION_NAME))
            return;

        var players = BasePlayer.activePlayerList;
        foreach (BasePlayer player in players)
        {
            RefreshMapInterfaceUsage(player);
        }
    }

    private void OnUserGroupRemoved(string id)
    {
        var player = BasePlayer.FindByID(ulong.Parse(id));
        RefreshMapInterfaceUsage(player);
    }

    private void OnUserGroupAdded(string id)
    {
        var player = BasePlayer.FindByID(ulong.Parse(id));
        RefreshMapInterfaceUsage(player);
    }
    #endregion

    #region Internal Helpers

    private static bool IsPlayerOnline(BasePlayer player)
    {
        if (player == null)
            return false;

        return player.IsConnected;
    }
    private void RefreshMapInterfaceUsage(BasePlayer player)
    {
        if (!IsPlayerOnline(player))
            return;

        if (permission.UserHasPermission(player.UserIDString, PERMISSION_NAME))
        {
            if (!_blockedPlayers.Contains(player.UserIDString))
            {
                _blockedPlayers.Add(player.UserIDString);
                CuiHelper.AddUi(player, _elementContainer);
            }
        }
        else
        {
            _blockedPlayers.Remove(player.UserIDString);
            CuiHelper.DestroyUi(player, CONTAINER_IDENTIFIER);
        }
    }

    #endregion

    #region CUI Internal Helpers

    private CuiElementContainer InitializeElementContainer()
    {
        var container = new CuiElementContainer();

        try
        {
            var panel = new CuiPanel
            {
                Image = { Color = HexToCuiColor(_config.BackgroundColor) },
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1"}
            };

            var element = new CuiElement
            {
                Parent = CONTAINER_IDENTIFIER,
                Components =
                {
                    new CuiTextComponent
                    {
                        Text = _config.Text,
                        Align = TextAnchor.MiddleCenter,
                        Color = HexToCuiColor(_config.FontColor),
                        FontSize = _config.FontSize
                    },
                    new CuiOutlineComponent
                    {
                        Color = HexToCuiColor(_config.FontOutlineColor),
                        Distance = _config.FontOutlineDistance
                    },
                    new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1" }
                }
            };

            var image = new CuiElement
            {
                Parent = CONTAINER_IDENTIFIER,
                Components =
                {
                    new CuiImageComponent
                    {
                        ImageType = Image.Type.Filled,
                        ItemId = 696029452
                    },
                    new CuiRectTransformComponent { AnchorMin = "0.45 0.6", AnchorMax = "0.55 0.7" }
                }
            };

            container.Add(panel, "Map", CONTAINER_IDENTIFIER);
            container.Add(element);
            container.Add(image);
        }
        catch (Exception e)
        {
            PrintError("Failed to initialize components for ElementContainer.(Wrong Component usage?)");
            PrintError(e.Message);
            return container;
        }
        return container;
    }

    // Thanks to Mevent - ActiveSort
    private static string HexToCuiColor(string hex, float alpha = 100)
    {
        if (string.IsNullOrEmpty(hex)) hex = "#FFFFFF";

        var str = hex.Trim('#');
        if (str.Length != 6) throw new Exception(hex);
        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);

        return $"{(double)r / 255} {(double)g / 255} {(double)b / 255} {alpha / 100f}";
    }

    #endregion
}

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