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

FREE SimpleLogo : 1.2.9 1.2.9

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
namespace Oxide.Plugins {
    /// <summary>
    /// Displays a custom logo on player screens with rotation support
    /// </summary>
    [Info("SimpleLogo", "Sami37", "1.2.9")]
    [Description("Place your own logo to your player screen.")]
    public class SimpleLogo : RustPlugin {
#region config
        [PluginReference]
        private readonly Plugin ImageLibrary;
        private static SimpleLogo _instance;
        private Timer _refreshTimer;
        private const string Perm = "simplelogo.display";
        private const string NoDisplay = "simplelogo.nodisplay";
        private const string UiName = "containerSimpleUI";
        private string _anchorMin, _anchorMax, _backgroundColor;
        List<object> _urlList = new List<object>();
        private int _currentlySelected, _intervals;
        private Dictionary<ulong, bool> playerHide = new Dictionary<ulong, bool>();
        protected override void LoadDefaultConfig() {
            Config.Clear();
            LoadConfig();
        }
        string ListToString<T>(List<T> list, int first = 0, string seperator = ", ") => string.Join(seperator, (from val in list select val.ToString()).Skip(first).ToArray());
        void SetConfig(params object[] args) {
            List<string> stringArgs = (from arg in args select arg.ToString()).ToList();
            stringArgs.RemoveAt(args.Length - 1);
            if (Config.Get(stringArgs.ToArray()) == null) Config.Set(args);
        }
        T GetConfig<T>(T defaultVal, params object[] args) {
            List<string> stringArgs = (from arg in args select arg.ToString()).ToList();
            if (Config.Get(stringArgs.ToArray()) == null) {
                PrintError($"The plugin failed to read something from the config: {ListToString(stringArgs, 0, "/")}{Environment.NewLine}Please reload the plugin and see if this message is still showing. If so, please post this into the support thread of this plugin.");
                return defaultVal;
            }
            return (T)Convert.ChangeType(Config.Get(stringArgs.ToArray()), typeof(T));
        }
        private string GetImage(string shortname, ulong skin = 0, bool returnUrl = false) {
            return string.IsNullOrEmpty(shortname) ? null : (string) _instance.ImageLibrary?.Call("GetImage", shortname, skin, returnUrl);
        }
        private static bool AddImageToLibrary(string url, string shortname, ulong skin = 0) {
            return (bool)_instance.ImageLibrary.Call("AddImage", url, shortname.ToLower(), skin);
        }
        void LoadConfig() {
            List<object> listUrl = new List<object> {
                "http://i.imgur.com/KVmbhyB.png"
            }
            ;
            SetConfig("UI", "GUIAnchorMin", "0.01 0.02");
            SetConfig("UI", "GUIAnchorMax", "0.15 0.1");
            SetConfig("UI", "BackgroundMainColor", "0 0 0 0");
            SetConfig("UI", "BackgroundMainURL", listUrl);
            SetConfig("UI", "IntervalBetweenImage", 30);
            SaveConfig();
            _anchorMin = Config["UI", "GUIAnchorMin"].ToString();
            _anchorMax = Config["UI", "GUIAnchorMax"].ToString();
            _backgroundColor = Config["UI", "BackgroundMainColor"].ToString();
            _intervals = GetConfig(30, "UI", "IntervalBetweenImage");
            _urlList = (List<object>)Config["UI", "BackgroundMainURL"];
            if (_urlList == null || _urlList.Count == 0) {
                PrintWarning("No url registered !");
                return;
            }
            int i = 0;
            foreach (var url in _urlList) {
                if (string.IsNullOrEmpty(url?.ToString())) {
                    PrintWarning($"Empty URL at index {i}");
                    continue;
                }
                AddImageToLibrary(url.ToString(), "SimpleLogo" + i);
                i++;
            }
        }
#endregion
#region data_init
        void Unload() {
            _refreshTimer?.Destroy();
            foreach (var player in BasePlayer.activePlayerList) {
                GUIDestroy(player);
            }
            if (playerHide != null) {
                try {
                    Interface.Oxide.DataFileSystem.WriteObject(Name, playerHide);
                    Puts("Player preferences saved successfully.");
                }
                catch (Exception ex) {
                    PrintError($"Failed to save player preferences: {ex.Message}");
                }
            }
        }
#endregion
        private CuiElement CreateImage(string panelName) {
            var url = GetImage($"SimpleLogo{_currentlySelected}");
            if (string.IsNullOrEmpty(url)) {
                PrintWarning($"Image SimpleLogo{_currentlySelected} not found in ImageLibrary!");
            }
            return new CuiElement {
                Name = CuiHelper.GetGuid(), Parent = panelName, Components = {
                    new CuiRawImageComponent {
                        Png = url
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1"
                    }
                }
            }
            ;
        }
        void GUIDestroy(BasePlayer player) {
            CuiHelper.DestroyUi(player, UiName);
        }
        void CreateUi(BasePlayer player) {
            if (permission.UserHasPermission(player.UserIDString, Perm) && !permission.UserHasPermission(player.UserIDString, NoDisplay)) {
                var panel = new CuiElementContainer {
                    {
                        new CuiPanel {
                            Image = {
                                Color = _backgroundColor
                            }
                            , RectTransform = {
                                AnchorMin = _anchorMin, AnchorMax = _anchorMax
                            }
                            , CursorEnabled = false
                        }
                        , "Hud", UiName
                    }
                }
                ;
                var backgroundImageWin = CreateImage(UiName);
                panel.Add(backgroundImageWin);
                CuiHelper.AddUi(player, panel);
            }
        }
        void RefreshUi() {
            _refreshTimer?.Destroy();
            if (_urlList == null || _urlList.Count == 0) return;
            foreach (var player in BasePlayer.activePlayerList) {
                GUIDestroy(player);
                bool isHidden = playerHide != null && playerHide.TryGetValue(player.userID, out bool hidden) && hidden;
                if (!isHidden) CreateUi(player);
            }
            if (_urlList.Count > 1) {
                _refreshTimer = timer.In(_intervals, () => {
                    _currentlySelected = (_currentlySelected + 1) % _urlList.Count;
                    RefreshUi();
                }
                );
            }
        }
        void OnPlayerConnected(BasePlayer player) {
            if (player.IsNpc) return;
            timer.Once(1f, () => {
                if (player != null && player.IsConnected) {
                    bool isHidden = playerHide != null && playerHide.TryGetValue(player.userID, out bool hidden) && hidden;
                    if (!isHidden) CreateUi(player);
                }
            }
            );
        }
        void OnServerInitialized() {
            _instance = this;
            if (ImageLibrary == null) {
                PrintError("ImageLibrary isn't loaded !");
                return;
            }
            playerHide = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, bool>>(Name);
            if (playerHide == null) playerHide = new Dictionary<ulong, bool>();
            permission.RegisterPermission(Perm, this);
            permission.RegisterPermission(NoDisplay, this);
            LoadConfig();
            NextTick(RefreshUi);
        }
        [ChatCommand("SL")]
        void chatCmd(BasePlayer player, string command, string[] args) {
            if (playerHide == null) playerHide = new Dictionary<ulong, bool>();
            // Simplification avec TryGetValue
            playerHide.TryGetValue(player.userID, out bool currentState);
            playerHide[player.userID] = !currentState;
            GUIDestroy(player);
            if (!playerHide[player.userID]) CreateUi(player);
            player.ChatMessage($"Logo {(playerHide[player.userID] ? "hidden" : "displayed")}");
        }
    }
}

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