C#:
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", "vk.com/rust_fans", "0.0.1")]
public class InfoPanel : RustPlugin
{
#region Variables
[PluginReference] private Plugin ImageLibrary;
private Dictionary<ulong, bool> playerModes = new Dictionary<ulong, bool>();
private List<string> messageList = new List<string>
{
"ГРУППА СЕРВЕРА <color=#66adff>VK.COM/vendetta__rust</color>",
"НАШ САЙТ <color=orange>vendettarust.playrust.ru/products</color>",
"ОБРАЩАЙТЕСЬ ЗА ПОМОЩЬЮ <color=red> DISCORD-https://discord.gg/psQDn8JhPT</color>"
};
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
}
}