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

UO.SendGumpSelect

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

ClassicUO • Runtime API

Отправляет ButtonID для выбранного серверного гампа.

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

UO.SendGumpSelect(triggerId:Integer) -> Integer
UO.SendGumpSelect(triggerId:String) -> Integer
UO.SendGumpSelect(gumpIndex:Any, triggerId:Any) -> Integer
UO.SendGumpSelect(serial:Any, gumpId:Any, triggerId:Any) -> Integer
UO.SendGumpSelect(serial:Any, gumpId:Any, triggerId:Any, timeout:Any) -> Integer

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

Параметры

  • triggerId — Integer или числовая строка — серверный ButtonID. 0 обычно означает закрытие/отказ, но точное действие определяет сервер. Наличие видимого ButtonID в дереве не требуется.
  • gumpIndex — Обязательный Integer — индекс активного серверного гампа, от 0 до GetGumpsCount()-1. Это не GumpID/serial. Отрицательное число и индекс вне списка недействительны. Открытие, закрытие и изменение порядка окон могут изменить индекс; перед действием проверяйте GetGumpID/GetGumpSerial. Используется только в двухаргументной форме (gumpIndex, triggerId).
  • serial — В формах из 3/4 аргументов — числовой 32-битный serial. 0 или -1 отключают фильтр serial; остальные числа, включая отрицательные со старшим битом, сравниваются точно.
  • gumpId — В формах из 3/4 аргументов — числовой 32-битный GumpID. 0 или -1 отключают фильтр GumpID. Hex-строки разрешены; имена AddObject здесь не разрешаются.
  • timeout — Необязательный четвёртый аргумент, Integer миллисекунд ожидания подходящей пары ID. По умолчанию 0 — одна немедленная попытка; отрицательное ограничивается 0. Интервал повторной проверки 20 мс.

Возвращает

Integer — 1, если найден живой серверный гамп и выполнен вызов ответа; 0, если окно не найдено до истечения ожидания. Не возвращает выбранный ID и не ждёт подтверждения результата сервером.

Поведение

  • Работает с активными серверными гампами. Рюкзак, карта, настройки и другие локальные окна не входят в этот список. Один вызов читает данные в игровом потоке; разные вызовы могут увидеть разные состояния списка.
  • Один аргумент выбирает ранее выбранный этим скриптом гамп; если он закрыт/не выбран — последний элемент текущего списка. Два аргумента задают строгий индекс. Три/четыре — пару ID с фильтрами.
  • Выбор и вызов ответа происходят в одном запросе игрового потока. Ожидание отменяется остановкой процедуры. Не путайте прямой серверный ответ со сменой страницы: для кнопки SwitchPage нужен NumGumpButton.

Примеры

Пример 1. Ответить выбранному окну

# Ответить выбранному окну
#
# Отправляет ButtonID для выбранного серверного гампа.
#
# Integer — 1, если найден живой серверный гамп и выполнен вызов ответа; 0, если окно не найдено
# до истечения ожидания. Не возвращает выбранный ID и не ждёт подтверждения результата сервером.

SUB Main()
    # SelectGump выбирает тип/serial 0x12345678 либо сообщает об отсутствии; 100 — ButtonID.
    # Если выбранного окна уже нет, одноаргументная форма использует последнее доступное окно. Для
    # строгой идентичности применяйте форму с двумя ID.

    UO.SelectGump(0x12345678)
    VAR sent = UO.SendGumpSelect(100)
    UO.Print(STR(sent))
END SUB

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

  • SelectGump выбирает тип/serial 0x12345678 либо сообщает об отсутствии; 100 — ButtonID.
  • Если выбранного окна уже нет, одноаргументная форма использует последнее доступное окно. Для строгой идентичности применяйте форму с двумя ID.

Пример 2. Ответить первому элементу списка

# Ответить первому элементу списка
#
# Отправляет ButtonID для выбранного серверного гампа.
#
# Integer — 1, если найден живой серверный гамп и выполнен вызов ответа; 0, если окно не найдено
# до истечения ожидания. Не возвращает выбранный ID и не ждёт подтверждения результата сервером.

SUB Main()
    # 0 — индекс, 100 — ButtonID. Это не serial=0 и не GumpID=100.

    VAR sent = UO.SendGumpSelect(0, 100)
    IF sent = 0 THEN
        UO.Print('No gump at index zero')
    END IF
END SUB

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

  • 0 — индекс, 100 — ButtonID. Это не serial=0 и не GumpID=100.

Пример 3. Ответить именно окну из снимка

# Ответить именно окну из снимка
#
# Отправляет ButtonID для выбранного серверного гампа.
#
# Integer — 1, если найден живой серверный гамп и выполнен вызов ответа; 0, если окно не найдено
# до истечения ожидания. Не возвращает выбранный ID и не ждёт подтверждения результата сервером.

SUB Main()
    # info[0] — serial, info[1] — GumpID, 100 — ButtonID. Изменение индекса не перенаправит ответ
    # другому типу/владельцу.
    # Serial/GumpID со значениями 0/-1 являются фильтрами без ограничения; одинаковые пары не
    # различают повторно открытые экземпляры.

    VAR info = UO.GetGumpInfo(0)
    IF GetArrayLength(info) = 5 THEN
        VAR sent = UO.SendGumpSelect(info[0], info[1], 100)
    END IF
END SUB

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

  • info[0] — serial, info[1] — GumpID, 100 — ButtonID. Изменение индекса не перенаправит ответ другому типу/владельцу.
  • Serial/GumpID со значениями 0/-1 являются фильтрами без ограничения; одинаковые пары не различают повторно открытые экземпляры.

Пример 4. Ожидать конкретный тип

# Ожидать конкретный тип
#
# Отправляет ButtonID для выбранного серверного гампа.
#
# Integer — 1, если найден живой серверный гамп и выполнен вызов ответа; 0, если окно не найдено
# до истечения ожидания. Не возвращает выбранный ID и не ждёт подтверждения результата сервером.

SUB Main()
    # 0 отключает фильтр serial; 0x87654321 — точный ID со старшим битом; 100 — кнопка; 2000 —
    # максимум ожидания в мс. Не используется как безусловный wildcard.

    VAR sent = UO.SendGumpSelect(0, 0x87654321, 100, 2000)
    UO.Print(STR(sent))
END SUB

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

  • 0 отключает фильтр serial; 0x87654321 — точный ID со старшим битом; 100 — кнопка; 2000 — максимум ожидания в мс. Не используется как безусловный wildcard.