API UO GetGumpInfo - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.GetGumpInfo

Оглавление · Алфавитный указатель · Gumps

ClassicUO • Runtime API

Возвращает согласованный снимок идентификаторов и элементов одного серверного гампа.

Точный синтаксис

UO.GetGumpInfo(GumpIndex:Any) -> Array

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • GumpIndex — Обязательный Integer — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial.

Возвращает

Array — ровно пять элементов: [0] Integer serial; [1] Integer GumpID; [2] Array непустых текстов; [3] Array описаний обычных кнопок; [4] Array описаний всех живых элементов, включая вложенные. Недействительный/закрытый или игнорируемый этим скриптом гамп даёт пустой массив []. ID со старшим битом представлены отрицательным Integer. Пустой текстовый массив сам по себе не означает отсутствие окна.

Поведение

  • Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
  • Весь снимок копируется в одном запросе игрового потока. Изменения/закрытие окна после возврата не изменяют сохранённый массив.
  • Это формат BASIC API проекта, а не Pascal TGumpInfo: именованные поля Pascal не поддерживаются. Элементы представлены строками описания текущих контролов, а не исходным пакетом разметки.
  • В описании контроля указаны тип, страница, ID, X/Y, размеры. Кнопки дополнительно содержат ButtonID, action, toPage и graphic; переключатели — ID, checked, inactive/active. Тексты могут содержать пробелы и знаки =; строку нельзя безусловно разбирать по пробелам.
  • AddGumpIgnoreByID/AddGumpIgnoreBySerial скрывают результат только этого чтения в текущем скрипте; ClearGumpsIgnore снимает эти фильтры. GetGumpsCount не уменьшается.

Примеры

Пример 1. Прочитать оба ID

# Прочитать оба ID
#
# Возвращает согласованный снимок идентификаторов и элементов одного серверного гампа.
#
# Arrayровно пять элементов: [0] Integer serial; [1] Integer GumpID; [2] Array<String>
# непустых текстов; [3] Array<String> описаний обычных кнопок; [4] Array<String> описаний всех
# живых элементов, включая вложенные. Недействительный/закрытый или игнорируемый этим скриптом
# гамп даёт пустой массив []. ID со старшим битом представлены отрицательным Integer. Пустой
# текстовый массив сам по себе не означает отсутствие окна.

SUB Main()
    # GumpIndex=0первый серверный гамп. Проверка длины защищает доступ к полям отсутствующего
    # окна.
    # info[0] — serial, info[1] — GumpID; оба принадлежат одному снимку.

    VAR info = UO.GetGumpInfo(0)
    IF GetArrayLength(info) = 5 THEN
        UO.Print('Serial=' + Hex(info[0]))
        UO.Print('GumpID=' + Hex(info[1]))
    END IF
END SUB

Разбор параметров и выполнения:

  • GumpIndex=0 — первый серверный гамп. Проверка длины защищает доступ к полям отсутствующего окна.
  • info[0] — serial, info[1] — GumpID; оба принадлежат одному снимку.

Пример 2. Перечислить реальные ButtonID

# Перечислить реальные ButtonID
#
# Возвращает согласованный снимок идентификаторов и элементов одного серверного гампа.
#
# Arrayровно пять элементов: [0] Integer serial; [1] Integer GumpID; [2] Array<String>
# непустых текстов; [3] Array<String> описаний обычных кнопок; [4] Array<String> описаний всех
# живых элементов, включая вложенные. Недействительный/закрытый или игнорируемый этим скриптом
# гамп даёт пустой массив []. ID со старшим битом представлены отрицательным Integer. Пустой
# текстовый массив сам по себе не означает отсутствие окна.

SUB Main()
    # info[3] — массив описаний кнопок; поле ButtonID в строке задаёт ID для ответа. iтолько
    # индекс строки, не ButtonID.
    # Радиокнопки относятся к переключателям и присутствуют в info[4], а не в списке обычных кнопок.

    VAR info = UO.GetGumpInfo(0)
    IF GetArrayLength(info) = 5 THEN
        VAR buttons = info[3]
        VAR i = 0
        WHILE i < GetArrayLength(buttons)
            UO.Print(buttons[i])
            i = i + 1
        WEND
    END IF
END SUB

Разбор параметров и выполнения:

  • info[3] — массив описаний кнопок; поле ButtonID в строке задаёт ID для ответа. i — только индекс строки, не ButtonID.
  • Радиокнопки относятся к переключателям и присутствуют в info[4], а не в списке обычных кнопок.

Пример 3. Сохранить текст до закрытия

# Сохранить текст до закрытия
#
# Возвращает согласованный снимок идентификаторов и элементов одного серверного гампа.
#
# Arrayровно пять элементов: [0] Integer serial; [1] Integer GumpID; [2] Array<String>
# непустых текстов; [3] Array<String> описаний обычных кнопок; [4] Array<String> описаний всех
# живых элементов, включая вложенные. Недействительный/закрытый или игнорируемый этим скриптом
# гамп даёт пустой массив []. ID со старшим битом представлены отрицательным Integer. Пустой
# текстовый массив сам по себе не означает отсутствие окна.

SUB Main()
    # info[2] — копия текстов. Закрытие допускается только для окна без запрета NoClose.
    # Закрытие не очищает сохранённые texts; пустой массив текстов допустим и у существующего окна.

    VAR info = UO.GetGumpInfo(0)
    IF GetArrayLength(info) = 5 THEN
        VAR texts = info[2]
        UO.CloseSimpleGump(0)
        IF GetArrayLength(texts) > 0 THEN
            UO.Print(texts[0])
        END IF
    END IF
END SUB

Разбор параметров и выполнения:

  • info[2] — копия текстов. Закрытие допускается только для окна без запрета NoClose.
  • Закрытие не очищает сохранённые texts; пустой массив текстов допустим и у существующего окна.
⚠️ **GitHub.com Fallback** ⚠️