Помогите Разработка плагина с UI

vd_zxcursed

7 Мар 2023
6
0
0
Доброго времени суток!

У меня возникла проблема с модулем - Oxide.Game.Rust.Cui
Дело в том, что при написании плагина на раст с UI постоянно возникает ошибка.
Никаких нормальных документаций найти я не смог.
При попытке спастить позаимствовать код из чужого плагина ошибка такая же.
Вот код:

C#:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("MicroPanelButton", "", "1.0")]
    public class MicroPanelButton : RustPlugin
    {
        private string Layer = "MicroPanel";

        private CuiPanel _mainPanel = new CuiPanel()
        
    
        private void StartUi(BasePlayer player)
        {
            var cont = new CuiElementContainer();

            cont.Add(_mainPanel, "Hud", Layer);

            cont.Add(new CuiElement()
            {
                Parent = Layer,
                Components =
                {
                    new CuiRawImageComponent()
                    {
                        Png = GetImage("BG")
                    },
                    new CuiRectTransformComponent()
                    {
                        AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "-10 -175", OffsetMax = "360 80"
                    }
                }
            });
            CuiHelper.AddUi(player, cont);
        }

    }
}

В консоли сервера следующая ошибка: Error while compiling: MicroPanelButton.cs(48,0): error CS1525: Unexpected symbol `}'

Можете пожалуйста скинуть хорошую документацию к модулю либо указать что я делаю не так?
 
Здравствуйте!

Ошибка, которую вы получаете, связана с тем, что вы забыли закрыть пару скобок в строке 12. Для исправления этой ошибки добавьте закрывающую скобку после new CuiPanel():

Код:
private CuiPanel _mainPanel = new CuiPanel();

Также я рекомендую вам посмотреть следующие ресурсы для получения информации о модуле Oxide.Game.Rust.Cui:

1. Официальная документация Oxide: https://docs.oxidemod.org/rust/Oxide.Game.Rust.Cui.html
2. Примеры использования Oxide.Game.Rust.Cui: https://github.com/OxideMod/Oxide.Cui/tree/master/examples

Надеюсь, это поможет вам продвинуться в вашем проекте!
 
  • Мне нравится
Реакции: vd_zxcursed
Здравствуйте!

Ошибка, которую вы получаете, связана с тем, что вы забыли закрыть пару скобок в строке 12. Для исправления этой ошибки добавьте закрывающую скобку после new CuiPanel():

Код:
private CuiPanel _mainPanel = new CuiPanel();

Также я рекомендую вам посмотреть следующие ресурсы для получения информации о модуле Oxide.Game.Rust.Cui:

1. Официальная документация Oxide: https://docs.oxidemod.org/rust/Oxide.Game.Rust.Cui.html
2. Примеры использования Oxide.Game.Rust.Cui: https://github.com/OxideMod/Oxide.Cui/tree/master/examples

Надеюсь, это поможет вам продвинуться в вашем проекте!
Спасибо, но ссылки на документацию не работают. Еще вопрос, как теперь вывести весь слой либо контейнер на экран?
 
Спасибо, но ссылки на документацию не работают. Еще вопрос, как теперь вывести весь слой либо контейнер на экран?
Пожалуйста, вот рабочая ссылка на документацию: https://docs.oxidemod.org/rust/Oxide.Game.Rust.Cui.html.

Чтобы вывести весь слой или контейнер на экран, вы можете использовать метод CuiHelper.AddUi. Этот метод принимает два аргумента: BasePlayer и CuiElementContainer. Вот пример кода, который использует этот метод для добавления всего слоя на экран:

Код:
private void ShowLayer(BasePlayer player)
{
    var container = new CuiElementContainer();

    container.Add(new CuiPanel
    {
        Image =
        {
            Color = "0 0 0 0.8"
        },
        RectTransform =
        {
            AnchorMin = "0 0",
            AnchorMax = "1 1"
        }
    }, "Hud.Menu", "LayerName");

    CuiHelper.AddUi(player, container);
}

Код выше добавляет новый контейнер, который является панелью, на существующий слой "Hud.Menu" с именем "LayerName". Вы можете адаптировать этот код под свои потребности, заменив "Hud.Menu" на имя вашего слоя и "LayerName" на имя вашего контейнера.
 
Пожалуйста, вот рабочая ссылка на документацию: https://docs.oxidemod.org/rust/Oxide.Game.Rust.Cui.html.

Чтобы вывести весь слой или контейнер на экран, вы можете использовать метод CuiHelper.AddUi. Этот метод принимает два аргумента: BasePlayer и CuiElementContainer. Вот пример кода, который использует этот метод для добавления всего слоя на экран:

Код:
private void ShowLayer(BasePlayer player)
{
    var container = new CuiElementContainer();

    container.Add(new CuiPanel
    {
        Image =
        {
            Color = "0 0 0 0.8"
        },
        RectTransform =
        {
            AnchorMin = "0 0",
            AnchorMax = "1 1"
        }
    }, "Hud.Menu", "LayerName");

    CuiHelper.AddUi(player, container);
}

Код выше добавляет новый контейнер, который является панелью, на существующий слой "Hud.Menu" с именем "LayerName". Вы можете адаптировать этот код под свои потребности, заменив "Hud.Menu" на имя вашего слоя и "LayerName" на имя вашего контейнера.
а как текст вывести?
 
а как текст вывести?
Чтобы вывести текст на экран, вы можете добавить новый элемент CuiText к своему контейнеру. Ниже приведен пример кода, который создает новый контейнер и добавляет в него элемент CuiText:

Код:
private void ShowText(BasePlayer player, string text)
{
    var container = new CuiElementContainer();

    container.Add(new CuiPanel
    {
        Image =
        {
            Color = "0 0 0 0.8"
        },
        RectTransform =
        {
            AnchorMin = "0 0",
            AnchorMax = "1 1"
        }
    }, "Hud.Menu", "LayerName");

    container.Add(new CuiText
    {
        Text =
        {
            FontSize = 20,
            Align = TextAnchor.MiddleCenter,
            Text = text
        },
        RectTransform =
        {
            AnchorMin = "0.25 0.25",
            AnchorMax = "0.75 0.75"
        }
    }, "LayerName", "TextName");

    CuiHelper.AddUi(player, container);
}

Этот код добавляет новый контейнер на слой "Hud.Menu" с именем "LayerName" и затем добавляет в него новый элемент CuiText с именем "TextName", содержащий заданный текст. Код также определяет размер текста, выравнивание и положение на экране.

Вы можете использовать этот пример как отправную точку и настроить параметры CuiText под свои нужды.
 
Чтобы вывести текст на экран, вы можете добавить новый элемент CuiText к своему контейнеру. Ниже приведен пример кода, который создает новый контейнер и добавляет в него элемент CuiText:

Код:
private void ShowText(BasePlayer player, string text)
{
    var container = new CuiElementContainer();

    container.Add(new CuiPanel
    {
        Image =
        {
            Color = "0 0 0 0.8"
        },
        RectTransform =
        {
            AnchorMin = "0 0",
            AnchorMax = "1 1"
        }
    }, "Hud.Menu", "LayerName");

    container.Add(new CuiText
    {
        Text =
        {
            FontSize = 20,
            Align = TextAnchor.MiddleCenter,
            Text = text
        },
        RectTransform =
        {
            AnchorMin = "0.25 0.25",
            AnchorMax = "0.75 0.75"
        }
    }, "LayerName", "TextName");

    CuiHelper.AddUi(player, container);
}

Этот код добавляет новый контейнер на слой "Hud.Menu" с именем "LayerName" и затем добавляет в него новый элемент CuiText с именем "TextName", содержащий заданный текст. Код также определяет размер текста, выравнивание и положение на экране.

Вы можете использовать этот пример как отправную точку и настроить параметры CuiText под свои нужды.
Код:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins
{
    [Info("MicroPanelButton", "vd.zxcursed", "1.0")]
    public class MicroPanelButton : RustPlugin
    {
        private void OnServerInitialized()
        {
            AddImage("https://cdn.discordapp.com/attachments/1083832418135445584/1084363520168181780/Menu_buutton.png", "Menu");
        }
        private string Layer = "MicroPanel";

        private CuiPanel _mainPanel = new CuiPanel();
        
    
        private void ShowText(BasePlayer player, string text)
{
    var container = new CuiElementContainer();
    container.Add(new CuiButton()
                {
                    RectTransform = {AnchorMin = "0.4 0.05", AnchorMax = "1 0.95"},
                    Button = {Command = "", Color = "0.15 0.86 0.1 0"},
                    Text =
                    {
                        Text = "######",
                        Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 14
                    }
                }, Layer + "Onlinefon", Layer + "Online");
    CuiHelper.AddUi(player, container);
}
        #region Help
        private string GetImage(string shortname, ulong skin = 0) =>
            (string) ImageLibrary.Call("GetImage", shortname, skin);
        private bool AddImage(string url, string shortname, ulong skin = 0) =>
            (bool) ImageLibrary.Call("AddImage", url, shortname, skin);
        [PluginReference] private Plugin ImageLibrary;
        #endregion
    }
}

не рабоает почему?
 
Код:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace Oxide.Plugins
{
    [Info("MicroPanelButton", "vd.zxcursed", "1.0")]
    public class MicroPanelButton : RustPlugin
    {
        private void OnServerInitialized()
        {
            AddImage("https://cdn.discordapp.com/attachments/1083832418135445584/1084363520168181780/Menu_buutton.png", "Menu");
        }
        private string Layer = "MicroPanel";

        private CuiPanel _mainPanel = new CuiPanel();
        
    
        private void ShowText(BasePlayer player, string text)
{
    var container = new CuiElementContainer();
    container.Add(new CuiButton()
                {
                    RectTransform = {AnchorMin = "0.4 0.05", AnchorMax = "1 0.95"},
                    Button = {Command = "", Color = "0.15 0.86 0.1 0"},
                    Text =
                    {
                        Text = "######",
                        Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 14
                    }
                }, Layer + "Onlinefon", Layer + "Online");
    CuiHelper.AddUi(player, container);
}
        #region Help
        private string GetImage(string shortname, ulong skin = 0) =>
            (string) ImageLibrary.Call("GetImage", shortname, skin);
        private bool AddImage(string url, string shortname, ulong skin = 0) =>
            (bool) ImageLibrary.Call("AddImage", url, shortname, skin);
        [PluginReference] private Plugin ImageLibrary;
        #endregion
    }
}

не рабоает почему?
Ваш код не работает, потому что вы не вызываете метод ShowText в вашем плагине. Вы должны вызвать этот метод при запуске вашего плагина, чтобы показать текстовый элемент на экране.

Вот пример кода, который вызывает метод ShowText при запуске плагина:

Код:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("MicroPanelButton", "vd.zxcursed", "1.0")]
    public class MicroPanelButton : RustPlugin
    {
        private void OnServerInitialized()
        {
            AddImage("https://
 
Как
Ваш код не работает, потому что вы не вызываете метод ShowText в вашем плагине. Вы должны вызвать этот метод при запуске вашего плагина, чтобы показать текстовый элемент на экране.

Вот пример кода, который вызывает метод ShowText при запуске плагина:

Код:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("MicroPanelButton", "vd.zxcursed", "1.0")]
    public class MicroPanelButton : RustPlugin
    {
        private void OnServerInitialized()
        {
            AddImage("https://
Как вызвать ShowText когда нужно функции дать baseplayer???
 
Как вызвать ShowText когда нужно функции дать baseplayer???
Вы можете передать BasePlayer в качестве аргумента метода ShowText, чтобы отображать текстовый элемент только для определенного игрока. Вот пример кода, который вызывает метод ShowText для определенного игрока:

Код:
private void OnPlayerConnected(BasePlayer player)
{
    ShowText(player, "Привет, игрок!");
}

private void ShowText(BasePlayer player, string text)
{
    var container = new CuiElementContainer();

    container.Add(new CuiPanel
    {
        Image =
        {
            Color = "0 0 0 0.8"
        },
        RectTransform =
        {
            AnchorMin = "0 0",
            AnchorMax = "1 1"
        }
    }, "Hud.Menu", "LayerName");

    container.Add(new CuiText
    {
        Text =
        {
            FontSize = 20,
            Align = TextAnchor.MiddleCenter,
            Text = text
        },
        RectTransform =
        {
            AnchorMin = "0.25 0.25",
            AnchorMax = "0.75 0.75"
        }
    }, "LayerName", "TextName");

    CuiHelper.AddUi(player, container);
}

В этом примере метод OnPlayerConnected вызывает метод ShowText для каждого подключенного игрока, передавая
 
так причем тут это? Нормальной документации к этой фигне нет, а то что кидает ChatGPT - невалидно
Валидно, если кинуть пример рабочий и объяснить что ты хочешь сделать .
А так смотри маленькие плагины с GUI и оттуда бери информацию, тестируй, пользуйся VisualStudioCode например
 
Активность
Пока никто не печатает сообщение