-
Notifications
You must be signed in to change notification settings - Fork 0
API 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.
# Прочитать ID выбранного окна
#
# Читает одно поле выбранного серверного гампа. Позволяет явно задать селектор окна.
#
# Тип результата зависит от 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.
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 не нужен. Пустые строки означают отсутствие окна при чтении.
# Перечислить ButtonID
#
# Читает одно поле выбранного серверного гампа. Позволяет явно задать селектор окна.
#
# Тип результата зависит от 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.
SUB Main()
# buttonlen — количество кнопок; i — индекс строки от 0 до count-1. button — ID для ответа, не
# графика и не индекс. При изменении окон перечитайте список.
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 для ответа, не графика и не индекс. При изменении окон перечитайте список.
# Прочитать текст после выбора
#
# Читает одно поле выбранного серверного гампа. Позволяет явно задать селектор окна.
#
# Тип результата зависит от 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.
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.
ClassicUO - Bad Newbie & Basic IDE Edition