C#:
using Oxide.Game.Rust.Cui;
using System.Collections.Generic;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("RustWin", "sdapro", "0.0.1")]
//YouTube https://www.youtube.com/channel/UCaatLYzqycP6He7TEbK-IDA
//https://t.me/+jb13FvJyK4o5MTli
public class RustWin : RustPlugin
{
private float displayTime = 5f; // Время отображения каждого сообщения в секундах
private float messageInterval = 20f; // Промежуток между появлением сообщений в секундах
private List<string> messages = new List<string>
{
"rustds oxide plugins RustWin",
"rustds oxide plugins RustWin",
"rustds oxide plugins RustWin",
"rustds oxide plugins RustWin",//можно и больше добавить
};
private CuiElementContainer container;
private int currentMessageIndex = 0;
void OnPlayerConnected(BasePlayer player)
{
CuiHelper.DestroyUi(player, "RustWin");
ShowNextMessage(player);
}
void Unload()
{
foreach (BasePlayer player in BasePlayer.activePlayerList)
{
CuiHelper.DestroyUi(player, "RustWin");
}
}
private void OnServerInitialized()
{
container = new CuiElementContainer();
foreach (BasePlayer player in BasePlayer.activePlayerList)
{
OnPlayerConnected(player);
}
}
private void ShowNextMessage(BasePlayer player)
{
CuiHelper.DestroyUi(player, "RustWin");
var text = messages[currentMessageIndex];
var fontSize = CalculateFontSizeToFitText(text, "Roboto-BoldItalic", 16, 1920, 50); // Размеры контейнера
container.Clear();
container.Add(new CuiElement
{
Name = "RustWin",
Parent = "Overlay",
Components = {
new CuiRectTransformComponent { AnchorMin = "0.5 0.95", AnchorMax = "0.5 0.95", OffsetMin = "-960 -50", OffsetMax = "960 50" },
new CuiTextComponent { Text = text, FontSize = fontSize, Align = TextAnchor.MiddleCenter },
new CuiOutlineComponent { Color = "0 0 4 0.5", Distance = "1 -1" }
}
});
CuiHelper.AddUi(player, container);
timer.Once(displayTime, () => HideMessage(player));
}
private void HideMessage(BasePlayer player)
{
CuiHelper.DestroyUi(player, "RustWin");
currentMessageIndex++;
if (currentMessageIndex >= messages.Count)
{
currentMessageIndex = 0;
}
timer.Once(messageInterval, () => ShowNextMessage(player));
}
private int CalculateFontSizeToFitText(string text, string font, int maxFontSize, float maxWidth, float maxHeight)
{
var tempTextGO = new GameObject("tempTextGO", typeof(RectTransform), typeof(UnityEngine.UI.Text));
var textComponent = tempTextGO.GetComponent<UnityEngine.UI.Text>();
textComponent.text = text;
textComponent.font = GetCustomFont(font);
textComponent.fontSize = maxFontSize;
var textTransform = tempTextGO.GetComponent<RectTransform>();
textTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, maxWidth);
textTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, maxHeight);
while (textComponent.preferredWidth > maxWidth || textComponent.preferredHeight > maxHeight)
{
textComponent.fontSize -= 1;
if (textComponent.fontSize <= 0)
break;
}
var fontSize = textComponent.fontSize;
UnityEngine.Object.Destroy(tempTextGO);
return fontSize;
}
private Font GetCustomFont(string fontName)
{
var fonts = Resources.FindObjectsOfTypeAll<Font>();
foreach (var font in fonts)
{
if (font.name.Equals(fontName, System.StringComparison.OrdinalIgnoreCase))
{
return font;
}
}
return null;
}
}
}