Skip to content

API UO GetGump

Codex edited this page Sep 19, 2026 · 5 revisions

UO.GetGump

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

ClassicUO • Runtime API

Читает одно поле выбранного серверного гампа. Позволяет явно задать селектор окна.

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

UO.GetGump(identifier:String) -> Any
UO.GetGump(identifier:String, key:Integer) -> Any
UO.GetGump(gumpId:Integer, identifier:String) -> Any
UO.GetGump(gumpId:Integer, identifier:String, key:Integer) -> Any

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

Параметры

  • gumpId — Необязательный первый Integer в формах (gumpId,identifier) и (gumpId,identifier,key). Integer или числовая строка: сначала ищется точное совпадение GumpID/serial, затем индекс с 0. -1 — выбранный этим скриптом гамп, а если его нет — последний в текущем списке. Другие отрицательные Integer сохраняют 32-битный ID. Это селектор, в отличие от строгого GumpIndex в NumGump*.
  • identifier — String без учёта регистра. Все поддерживаемые значения и типы результатов перечислены в разделе «Возвращает». Неизвестное имя возвращает пустую строку.
  • key — Необязательный Integer, по умолчанию -1. Индекс с 0 для button/text/object/command; это не ID контроля. Отрицательный индекс и выход за границу дают 0 для button или пустую строку для текстовых полей. Остальные identifier не используют key.

Возвращает

Тип результата зависит от identifier. Integer: buttonlen — число обычных кнопок; button — ButtonID по индексу key; textlen — число доступных текстовых элементов; injid — текущий индекс окна; replyed — 0 (история ответов не хранится); inclient — 1 для найденного живого окна, 0 при отсутствии; objectcount — число живых контролов, включая вложенные. String: serial и gumpid — hex-строки 0xXXXXXXXX; text — текст элемента по индексу key; object — имя типа контрола; command — описание контрола (тип, page, ID, координаты, размеры и поддерживаемые поля). При отсутствии окна числовые identifier дают 0, строковые — пустую строку. injid=0 также является допустимым первым индексом: сам по себе 0 не доказывает отсутствие окна. Это не Array и не Pascal TGumpInfo.

Поведение

  • Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
  • SelectGump/InfoGump задают выбранное окно только в текущем runtime. Если выбранное окно закрыто, используется последний элемент текущего списка, который не обязательно является самым новым по времени.
  • textlen/text относятся к доступным текстовым контролам, а не исходному пулу строк серверного пакета. object/command относятся ко всему дереву живых контролов. Индексы разных списков нельзя смешивать.
  • Каждый вызов читает текущее состояние отдельно. Для согласованных serial, GumpID и списков используйте GetGumpInfo.

Примеры

Пример 1. Прочитать ID выбранного окна

# Прочитать ID выбранного окна
#
# Читает одно поле выбранного серверного гампа. Позволяет явно задать селектор окна.
#
# Тип результата зависит от identifier. Integer: buttonlenчисло обычных кнопок; button# ButtonID по индексу key; textlenчисло доступных текстовых элементов; injidтекущий индекс
# окна; replyed0 (история ответов не хранится); inclient1 для найденного живого окна, 0
# при отсутствии; objectcountчисло живых контролов, включая вложенные. String: serial и
# gumpidhex-строки 0xXXXXXXXX; textтекст элемента по индексу key; objectимя типа
# контрола; commandописание контрола (тип, page, ID, координаты, размеры и поддерживаемые
# поля). При отсутствии окна числовые identifier дают 0, строковыепустую строку. injid=0
# также является допустимым первым индексом: сам по себе 0 не доказывает отсутствие окна. Это не
# Array и не Pascal TGumpInfo.

SUB Main()
    # gumpid и serial возвращают строки, уже оформленные в hex; дополнительный Hex не нужен. Пустые
    # строки означают отсутствие окна при чтении.

    VAR id = UO.GetGump('gumpid')
    VAR serial = UO.GetGump('serial')
    UO.Print(id + ' / ' + serial)
END SUB

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

  • gumpid и serial возвращают строки, уже оформленные в hex; дополнительный Hex не нужен. Пустые строки означают отсутствие окна при чтении.

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

# Перечислить ButtonID
#
# Читает одно поле выбранного серверного гампа. Позволяет явно задать селектор окна.
#
# Тип результата зависит от identifier. Integer: buttonlenчисло обычных кнопок; button# ButtonID по индексу key; textlenчисло доступных текстовых элементов; injidтекущий индекс
# окна; replyed0 (история ответов не хранится); inclient1 для найденного живого окна, 0
# при отсутствии; objectcountчисло живых контролов, включая вложенные. String: serial и
# gumpidhex-строки 0xXXXXXXXX; textтекст элемента по индексу key; objectимя типа
# контрола; commandописание контрола (тип, page, ID, координаты, размеры и поддерживаемые
# поля). При отсутствии окна числовые identifier дают 0, строковыепустую строку. injid=0
# также является допустимым первым индексом: сам по себе 0 не доказывает отсутствие окна. Это не
# Array и не Pascal TGumpInfo.

SUB Main()
    # buttonlenколичество кнопок; iиндекс строки от 0 до count-1. buttonID для ответа, не
    # графика и не индекс. При изменении окон перечитайте список.

    VAR count = UO.GetGump('buttonlen')
    VAR i = 0
    WHILE i < count
        VAR button = UO.GetGump('button',i)
        UO.Print(STR(button))
        i = i + 1
    WEND
END SUB

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

  • buttonlen — количество кнопок; i — индекс строки от 0 до count-1. button — ID для ответа, не графика и не индекс. При изменении окон перечитайте список.

Пример 3. Прочитать текст после выбора

# Прочитать текст после выбора
#
# Читает одно поле выбранного серверного гампа. Позволяет явно задать селектор окна.
#
# Тип результата зависит от identifier. Integer: buttonlenчисло обычных кнопок; button# ButtonID по индексу key; textlenчисло доступных текстовых элементов; injidтекущий индекс
# окна; replyed0 (история ответов не хранится); inclient1 для найденного живого окна, 0
# при отсутствии; objectcountчисло живых контролов, включая вложенные. String: serial и
# gumpidhex-строки 0xXXXXXXXX; textтекст элемента по индексу key; objectимя типа
# контрола; commandописание контрола (тип, page, ID, координаты, размеры и поддерживаемые
# поля). При отсутствии окна числовые identifier дают 0, строковыепустую строку. injid=0
# также является допустимым первым индексом: сам по себе 0 не доказывает отсутствие окна. Это не
# Array и не Pascal TGumpInfo.

SUB Main()
    # 0x12345678пример GumpID/serial, замените ID нужной формы. text с key=0 читает первый
    # доступный текстовый контроль; это другой список, чем button.
    # SelectGump сообщает об отсутствии указанного окна, но не блокирует последующее чтение: при
    # необходимости отдельно проверяйте возвращённый gumpid.

    UO.SelectGump(0x12345678)
    IF UO.GetGump('inclient') THEN
        VAR count = UO.GetGump('textlen')
        IF count > 0 THEN
            UO.Print(UO.GetGump('text',0))
        END IF
    END IF
END SUB

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

  • 0x12345678 — пример GumpID/serial, замените ID нужной формы. text с key=0 читает первый доступный текстовый контроль; это другой список, чем button.
  • SelectGump сообщает об отсутствии указанного окна, но не блокирует последующее чтение: при необходимости отдельно проверяйте возвращённый gumpid.

Clone this wiki locally