using System.Collections.Generic; using Oxide.Core.Plugins; using Oxide.Game.Rust.Cui; using Oxide.Game.Rust.Libraries; using UnityEngine; namespace Oxide.Plugins { [Info("InfoPanel", "abdyrval", "0.0.1")] public class InfoPanel : RustPlugin { #region Variables [PluginReference] private Plugin ImageLibrary; private Dictionary playerModes = new Dictionary(); private List messageList = new List { "ГРУППА СЕРВЕРА VK.COM/RUST", "НАШ САЙТ TEST.RU", "ОБРАЩАЙТЕСЬ ЗА ПОМОЩЬЮ VK.COM/RUST" }; private string HeliIcon = "https://i.imgur.com/m6DgtBf.png"; private string BradleyIcon = "https://i.imgur.com/qlqH5gt.png"; private string ChinIcon = "https://i.imgur.com/xIidCPG.png"; private string AirIcon = "https://i.imgur.com/40DM4mw.png"; private string CargoIcon = "https://i.imgur.com/2WC5Xwe.png"; private string Layer = "UI_InterfaceInfo"; private BaseEntity heli = null; private BaseEntity bradley = null; private BaseEntity air = null; private BaseEntity chin = null; private BaseEntity cargo = null; #endregion #region Initialization private void OnServerInitialized() { foreach (BasePlayer player in BasePlayer.activePlayerList) OnPlayerConnected(player); ImageLibrary.Call("AddImage", HeliIcon, "HeliIcon"); ImageLibrary.Call("AddImage", BradleyIcon, "BradleyIcon"); ImageLibrary.Call("AddImage", ChinIcon, "ChinIcon"); ImageLibrary.Call("AddImage", AirIcon, "AirIcon"); ImageLibrary.Call("AddImage", CargoIcon, "CargoIcon"); timer.Every(5, () => { foreach (var p in BasePlayer.activePlayerList) { UpdateClock(p); UpdateMessages(p); } }); } private void Unload() { foreach (var p in BasePlayer.activePlayerList) { CuiHelper.DestroyUi(p, Layer); } } #endregion #region Commands [ConsoleCommand("UI_InfoHide")] private void cmdConsoleHandler(ConsoleSystem.Arg args) { if (args.Player() != null && playerModes.ContainsKey(args.Player().userID)) { if (playerModes[args.Player().userID]) playerModes[args.Player().userID] = false; else playerModes[args.Player().userID] = true; DrawInfo(args.Player(), playerModes[args.Player().userID]); } } #endregion #region Hooks private void OnPlayerConnected(BasePlayer player) { if (!playerModes.ContainsKey(player.userID)) playerModes.Add(player.userID, true); DrawInfo(player, playerModes[player.userID]); foreach (var p in BasePlayer.activePlayerList) UpdateOnline(p); } private void OnPlayerDisconnected(BasePlayer player, string reason) { NextTick(() => { foreach (var p in BasePlayer.activePlayerList) UpdateOnline(p); }); } private void OnEntitySpawned(BaseNetworkable entity) { if (entity is BaseHelicopter) { heli = entity as BaseEntity; foreach (var p in BasePlayer.activePlayerList) UpdateHeli(p, true); return; } if (entity is BradleyAPC) { bradley = entity as BaseEntity; foreach (var p in BasePlayer.activePlayerList) UpdateBradley(p, true); return; } if (entity is CH47Helicopter) { chin = entity as BaseEntity; foreach (var p in BasePlayer.activePlayerList) UpdateChinook(p, true); return; } if (entity is CargoPlane) { air = entity as BaseEntity; foreach (var p in BasePlayer.activePlayerList) UpdateAir(p, true); return; } if (entity is CargoShip) { cargo = entity as BaseEntity; foreach (var p in BasePlayer.activePlayerList) UpdateCargoShip(p, true); return; } } private void OnPlayerSleepEnded(BasePlayer player) { if (player.IsReceivingSnapshot) { NextTick(() => { OnPlayerConnected(player); return; }); return; } if (!playerModes.ContainsKey(player.userID)) playerModes.Add(player.userID, true); DrawInfo(player, playerModes[player.userID]); } private void OnPlayerDeath(BasePlayer player, HitInfo info) { CuiHelper.DestroyUi(player, Layer); return; } private void OnEntityKill(BaseNetworkable entity) { if (entity is BaseHelicopter) { heli = null; foreach (var p in BasePlayer.activePlayerList) UpdateHeli(p, false); return; } if (entity is BradleyAPC) { bradley = entity as BaseEntity; foreach (var p in BasePlayer.activePlayerList) UpdateBradley(p, false); return; } if (entity is CH47Helicopter) { chin = null; foreach (var p in BasePlayer.activePlayerList) UpdateChinook(p, false); return; } if (entity is CargoPlane) { air = null; foreach (var p in BasePlayer.activePlayerList) UpdateAir(p, false); return; } if (entity is CargoShip) { cargo = null; foreach (var p in BasePlayer.activePlayerList) UpdateCargoShip(p, false); return; } } #endregion #region GUI private void DrawInfo(BasePlayer player, bool Message) { CuiHelper.DestroyUi(player, Layer); CuiElementContainer container = new CuiElementContainer(); string y = playerModes[player.userID] ? "0.65" : "-0.137"; container.Add(new CuiPanel { CursorEnabled = false, RectTransform = { AnchorMin = $"{y} 0.0250001", AnchorMax = $"{y} 0.0250001", OffsetMax = "268 59.3" }, Image = { Color = "0 0 0 0" } }, "Overlay", Layer); //--------- container.Add(new CuiElement { Name = Layer + ".CargoShipHandler", Parent = Layer, Components = { new CuiImageComponent { Color = "1 1 1 0.1" }, new CuiRectTransformComponent { AnchorMin = "0.31 0.56",AnchorMax = "0.41 0.97", OffsetMax = "0 0"} } }); //--------- container.Add(new CuiElement { Name = Layer + ".BradleyHandler", Parent = Layer, Components = { new CuiImageComponent { Color = "1 1 1 0.1" }, new CuiRectTransformComponent { AnchorMin = "0.54 0.1",AnchorMax = "0.64 0.5", OffsetMax = "0 0"} } }); //--------- container.Add(new CuiElement { Name = Layer + ".HeliHandler", Parent = Layer, Components = { new CuiImageComponent { Color = "1 1 1 0.1" }, new CuiRectTransformComponent { AnchorMin = "0.42 0.56",AnchorMax = "0.53 0.97", OffsetMax = "0 0"} } }); //--------- container.Add(new CuiElement { Name = Layer + ".ChinookHandler", Parent = Layer, Components = { new CuiImageComponent { Color = "1 1 1 0.1" }, new CuiRectTransformComponent { AnchorMin = "0.65 0.58",AnchorMax = "0.75 0.97", OffsetMax = "0 0"} } }); //--------- container.Add(new CuiElement { Name = Layer + ".AirHandler", Parent = Layer, Components = { new CuiImageComponent { Color = "1 1 1 0.1" }, new CuiRectTransformComponent { AnchorMin = "0.54 0.56",AnchorMax = "0.64 0.97", OffsetMax = "0 0"} } }); //--------- CuiHelper.AddUi(player, container); UpdateClock(player); UpdateOnline(player); UpdateHeli(player, (heli != null)); UpdateBradley(player, (bradley != null)); UpdateChinook(player, (chin != null)); UpdateCargoShip(player, (cargo != null)); UpdateAir(player, (air != null)); if (playerModes[player.userID]) { UpdateMessages(player); } container.Clear(); container.Add(new CuiElement { Name = Layer + ".ButtonHandler", Parent = Layer, Components = { new CuiImageComponent { Color = "1 1 1 0.1" }, new CuiRectTransformComponent { AnchorMin = "0.65 0.1",AnchorMax = "0.75 0.5", OffsetMax = "0 0"} } }); container.Add(new CuiButton { RectTransform = { AnchorMin = "-0.1 -0.1",AnchorMax = "1.1 1.1", OffsetMax = "0 0"}, Button = { Close = Layer, Command = "UI_InfoHide", Color = "0 0 0 0" }, Text = { Text = playerModes[player.userID] ? "←" : "→", Color = "0.89 0.89 0.89 1", Align = TextAnchor.MiddleCenter, FontSize = 20 } }, Layer + ".ButtonHandler"); CuiHelper.AddUi(player, container); } private void UpdateClock(BasePlayer player) { CuiHelper.DestroyUi(player, Layer + "ClockText"); CuiElementContainer container = new CuiElementContainer(); container.Add(new CuiElement { Name = Layer + ".ClockHandler", Parent = Layer, Components = { new CuiImageComponent { Color = "1 1 1 0" }, new CuiRectTransformComponent { AnchorMin = "0.11 0.56", AnchorMax = "0.30 0.97", OffsetMax = "0 0" } } }); container.Add(new CuiElement { FadeOut = 0.5f, Parent = Layer + ".ClockHandler", Name = Layer + "ClockText", Components = { new CuiTextComponent { FadeIn = 0.5f, Text = TOD_Sky.Instance.Cycle.DateTime.ToShortTimeString(), Color = "1 1 1 0.5", FontSize = 16, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter }, new CuiRectTransformComponent { AnchorMin = "0.1 0", AnchorMax = "0.93 1", OffsetMax = "0 0" } } }); CuiHelper.AddUi(player, container); } private void UpdateOnline(BasePlayer player) { CuiHelper.DestroyUi(player, Layer + "OnlineText"); CuiElementContainer container = new CuiElementContainer(); container.Add(new CuiElement { Name = Layer + ".PlayerHandler", Parent = Layer, Components = { new CuiImageComponent { Color = "0 0.5 0.2 0" }, new CuiRectTransformComponent { AnchorMin = "0.11 0.1", AnchorMax = "0.53 0.5", OffsetMax = "0 0" } } }); container.Add(new CuiElement { Parent = Layer + ".PlayerHandler", Name = Layer + "OnlineText", Components = { new CuiTextComponent { Text = $" онлайн {BasePlayer.activePlayerList.Count} из {ConVar.Server.maxplayers}", Color = "1 1 1 0.5", FontSize = 14, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter }, new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "0.93 1", OffsetMax = "0 0" } } }); CuiHelper.AddUi(player, container); } private void UpdateHeli(BasePlayer player, bool active) { CuiHelper.DestroyUi(player, Layer + "HeliIcon"); CuiElementContainer container = new CuiElementContainer(); container.Add(new CuiElement { Name = Layer + "HeliIcon", Parent = Layer + ".HeliHandler", Components = { new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "HeliIcon"), Color = active ? "0.93 0.50 0.50" : "1 1 1 0.5" }, new CuiRectTransformComponent { AnchorMin = "0.1 0",AnchorMax = "-0.04 -0.25", OffsetMax = "28.666 28.666"} } }); CuiHelper.AddUi(player, container); } private void UpdateBradley(BasePlayer player, bool active) { CuiHelper.DestroyUi(player, Layer + "BradleyIcon"); CuiElementContainer container = new CuiElementContainer(); container.Add(new CuiElement { Name = Layer + "BradleyIcon", Parent = Layer + ".BradleyHandler", Components = { new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "BradleyIcon"), Color = active ? "0.56 0.86 0.56" : "1 1 1 0.5" }, new CuiRectTransformComponent { AnchorMin = "0.05 -0.1",AnchorMax = "-0.1 -0.17", OffsetMax = "28.666 28.666"} } }); CuiHelper.AddUi(player, container); } private void UpdateAir(BasePlayer player, bool active) { CuiHelper.DestroyUi(player, Layer + "AirIcon"); CuiElementContainer container = new CuiElementContainer(); container.Add(new CuiElement { Name = Layer + "AirIcon", Parent = Layer + ".AirHandler", Components = { new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "AirIcon"), Color = active ? "0 0.73 1" : "1 1 1 0.5" }, new CuiRectTransformComponent { AnchorMin = "0 0.1",AnchorMax = "-0.05 -0.25", OffsetMax = "28.666 28.666"} } }); CuiHelper.AddUi(player, container); } private void UpdateChinook(BasePlayer player, bool active) { CuiHelper.DestroyUi(player, Layer + "ChinIcon"); CuiElementContainer container = new CuiElementContainer(); container.Add(new CuiElement { Name = Layer + "ChinIcon", Parent = Layer + ".ChinookHandler", Components = { new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "ChinIcon"), Color = active ? "0.83 0.68 1" : "1 1 1 0.5" }, new CuiRectTransformComponent { AnchorMin = "0 0.02",AnchorMax = "-0.05 -0.1", OffsetMax = "28.666 28.666"} } }); CuiHelper.AddUi(player, container); } private void UpdateCargoShip(BasePlayer player, bool active) { CuiHelper.DestroyUi(player, Layer + "CargoIcon"); CuiElementContainer container = new CuiElementContainer(); container.Add(new CuiElement { Name = Layer + "CargoIcon", Parent = Layer + ".CargoShipHandler", Components = { new CuiRawImageComponent { Png = (string) ImageLibrary.Call("GetImage", "CargoIcon"), Color = active ? "0 0.73 1" : "1 1 1 0.5" }, new CuiRectTransformComponent { AnchorMin = "0.055 0.05",AnchorMax = "-0.1 -0.2", OffsetMax = "28.666 28.666"} } }); CuiHelper.AddUi(player, container); } private void UpdateMessages(BasePlayer player) { if (playerModes[player.userID]) { CuiHelper.DestroyUi(player, Layer + "MessageHandler"); CuiElementContainer container = new CuiElementContainer(); container.Add(new CuiElement { Name = Layer + "MessageHandler", Parent = Layer, Components = { new CuiImageComponent { Color = "1 1 1 0" }, new CuiRectTransformComponent { AnchorMin = "-1.55 -0.34", AnchorMax = "0 0", OffsetMax = "0 0" } } }); container.Add(new CuiElement { Parent = Layer + "MessageHandler", Components = { new CuiTextComponent { Text = messageList.GetRandom(), FontSize = 14, Font = "robotocondensed-bold.ttf", Color = "0.89 0.89 0.89 1", Align = TextAnchor.MiddleCenter }, new CuiRectTransformComponent { AnchorMin = "0.02 0", AnchorMax = "1 1", OffsetMax = "0 0" } } }); CuiHelper.AddUi(player, container); } } #endregion } }