API UO GetGumpInfo - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Оглавление · Алфавитный указатель · 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 не уменьшается.
# Прочитать оба 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; оба принадлежат одному снимку.
# Перечислить реальные 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], а не в списке обычных кнопок.
# Сохранить текст до закрытия
#
# Возвращает согласованный снимок идентификаторов и элементов одного серверного гампа.
#
# 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; пустой массив текстов допустим и у существующего окна.