• Хостинг игровых серверов

    Максимальная производительность для ваших игровых серверов!

    Заказать сейчас

Обсудим CUI button - не работает

Отображает A++ 1, дальше счетчик не идет при нажатии, хотя если написать например Text = $"A++ {a++}" - работает счетчик и отображает цифру, вообщем не знаю как вызывать методы при нажатие на кнопку
Код:
container.Add(new CuiButton{
RectTransform = { AnchorMin = "0.56 0.42", AnchorMax = "0.64 0.47" },
Button = {  Command = "sndmss",  Color = "1 0 0 1" },
Text = { Text = $"A++ {a}", Align = TextAnchor.MiddleCenter }
}, "MyBackgroundName");

и вызов, пробовал и так и так, не работает
public int a = 1;

Код:
        [ConsoleCommand("sndmss")]
        private void sndmss(ConsoleSystem.Arg arg)
        {
            a++;
        }

        [ChatCommand("aheal")]
        private void HealCommand(IPlayer player, string command, string[] args)
        {
            a++;
        }
 
Отображает A++ 1, дальше счетчик не идет при нажатии, хотя если написать например Text = $"A++ {a++}" - работает счетчик и отображает цифру, вообщем не знаю как вызывать методы при нажатие на кнопку
Код:
container.Add(new CuiButton{
RectTransform = { AnchorMin = "0.56 0.42", AnchorMax = "0.64 0.47" },
Button = {  Command = "sndmss",  Color = "1 0 0 1" },
Text = { Text = $"A++ {a}", Align = TextAnchor.MiddleCenter }
}, "MyBackgroundName");

и вызов, пробовал и так и так, не работает
public int a = 1;

Код:
        [ConsoleCommand("sndmss")]
        private void sndmss(ConsoleSystem.Arg arg)
        {
            a++;
        }

        [ChatCommand("aheal")]
        private void HealCommand(IPlayer player, string command, string[] args)
        {
            a++;
        }
Вполне работает. Только вот что бы значение поменялось, тебе нужно сделать destroyui а потом заново вывести его
 
  • Мне нравится
Реакции: london12312121
А не подскажите как обновлять только элемент?
Пробовал удалять его и заново в контейнер добавлять и загружать контейнер но в таком случае получается что у игрока несколько контейнеров, и при закрытие одного остается второй
Поэтому в данный момент удаляется весь MyBackgroundName и выглядит это не красиво
Код:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("Command", "Cold", "1.0.0")]
    public class Command : RustPlugin
    {
        [PluginReference] private Plugin ImageLibrary;

        private CuiElementContainer container;

        [ChatCommand("command")]
        private void tesCommand(BasePlayer player)
        {
            container = new CuiElementContainer();

            //задний фон прозрачный
            var backgroundName = container.Add(new CuiPanel
            {
                CursorEnabled = true,
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1"},
                Image =
                {
                    Color = "0 0 0 0.5", Material = "assets/content/ui/uibackgroundblur.mat",
                    Sprite = "assets/content/ui/ui.background.transparent.radial.psd"
                }
            }, "Overlay", "MyBackgroundName");

            //фон
            container.Add(new CuiElement
            {
                Parent = "MyBackgroundName",
                Components =
                {
                    new CuiRawImageComponent {Url = "Ваша ссылка"},
                    new CuiRectTransformComponent {AnchorMin = "0 0", AnchorMax = "1 1"},
                }
            });
 
            container.Add(getBut(), "MyBackgroundName", "aplus");

            //закрытие
            container.Add(new CuiButton
            {
                RectTransform = {AnchorMin = "0.8 0.8", AnchorMax = "0.9 0.9"},
                Button = {Close = "MyBackgroundName", Color = "0 0 0 0"},
                Text = {Text = ""}
            }, "MyBackgroundName");
            CuiHelper.AddUi(player, container);
        }

        public int a = 1;

        private CuiButton getBut()
        {
            CuiButton c = new CuiButton();
            c.RectTransform.AnchorMin = "0.56 0.42";
            c.RectTransform.AnchorMax = "0.64 0.47";
            c.Button.Command = "aplus";
            c.Button.Color = "1 0 0 1";
            c.Text.Text = $"A++ {a}";
            c.Text.Align = TextAnchor.MiddleCenter;
            return c;
        }


        void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            CuiHelper.DestroyUi(player, "MyBackgroundName");
            player.ChatMessage("clear");
        }

        [ConsoleCommand("aplus")]
        void sndmss(ConsoleSystem.Arg args)
        {
            BasePlayer player = args.Player();
            a++;
            CuiHelper.DestroyUi(player, "MyBackgroundName");
            container.Add(getBut(), "MyBackgroundName", "aplus");
            CuiHelper.AddUi(player, container);
        }
    }
}
 
Активность
Пока никто не печатает сообщение