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

UO.StepQ

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

ClassicUO • Runtime API

Запрашивает один шаг через очередь; дополнительная форма может ждать освобождения очереди и подтверждения.

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

UO.StepQ(direction:Any, run:Any) -> Integer
UO.StepQ(direction:Any, run:Any, timeout:Any) -> Integer
UO.StepQ(direction:Any, run:Any, timeout:Any, queue:Any) -> Integer
UO.StepQ(direction:Any, run:Any, timeout:Any, queue:Any, waitForAck:Any) -> Integer

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

Параметры

  • direction — Направление 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SW, 6=W, 7=NW. Реализация применяет побитовое &7; используйте 0..7 для ясности.
  • run — TRUE/1 — запрос бега, FALSE/0 — шаг. Серверные задержки движения сохраняются; это не множитель скорости.
  • timeout — Необязательный срок ожидания очереди в мс. 0/отрицательное не ждёт освобождения; при waitForAck=TRUE и timeout=0 подтверждение ожидается до 10000 мс. При положительном значении ожидание подтверждения получает отдельный такой же срок.
  • queue — Необязательный флаг, по умолчанию TRUE. FALSE передаёт forcePacket при запросе шага; не отменяет серверные ограничения и не очищает накопленную очередь.
  • waitForAck — FALSE/отсутствие — вернуть результат постановки сразу. TRUE — для отправленного шага ждать подтверждения/отказа.

Возвращает

Integer без waitForAck: 0..255 — sequence отправленного запроса, включая допустимый 0; 256 — только поворот; -2 — препятствие на клиенте; -1 — общий отказ/полная очередь/отключение/выносливость. С waitForAck=TRUE: 7 — подтверждение, 5 — отказ сервера, 4 — тайм-аут; -1/-2/256 сохраняют предыдущий смысл. Число 7 в форме без ожидания — sequence, а не подтверждение. Проверка IF result недостаточна.

Поведение

  • Одна команда может сначала повернуть персонажа; это не обязательно перемещение на следующую клетку.
  • Учитываются moveCheckStamina, moveExitOnDisconnect и moveOpenDoor. Серверный запрет и локальное препятствие различаются.
  • Не повторяйте команду в цикле без анализа результата и WAIT: очередь движения и скорость сервера ограничены.
  • Без ожидания команда не подтверждает изменение позиции. LastStepQUsedDoor показывает попытку открытия двери, не результат шага.

Примеры

Пример 1. Получить sequence без ожидания

# Получить sequence без ожидания
#
# Запрашивает один шаг через очередь; дополнительная форма может ждать освобождения очереди и
# подтверждения.
#
# Integer без waitForAck: 0..255 — sequence отправленного запроса, включая допустимый 0; 256 —
# только поворот; -2 — препятствие на клиенте; -1 — общий отказ/полная
# очередь/отключение/выносливость. С waitForAck=TRUE: 7 — подтверждение, 5 — отказ сервера, 4 —
# тайм-аут; -1/-2/256 сохраняют предыдущий смысл. Число 7 в форме без ожидания — sequence, а не
# подтверждение. Проверка IF result недостаточна.

SUB Main()
    # direction=2 — E, run=FALSE. Два аргумента означают обычную постановку без ожидания
    # подтверждения.
    # sequence=0 является допустимым успехом постановки; sequence=256 означает поворот.

    VAR sequence = UO.StepQ(2, FALSE)
    IF sequence >= 0 AND sequence <= 255 THEN
        UO.Print('Queued sequence: ' + STR(sequence))
    ELSE
        UO.Print('Queue status: ' + STR(sequence))
    END IF
END SUB

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

  • direction=2 — E, run=FALSE. Два аргумента означают обычную постановку без ожидания подтверждения.
  • sequence=0 является допустимым успехом постановки; sequence=256 означает поворот.

Пример 2. Дождаться подтверждения

# Дождаться подтверждения
#
# Запрашивает один шаг через очередь; дополнительная форма может ждать освобождения очереди и
# подтверждения.
#
# Integer без waitForAck: 0..255 — sequence отправленного запроса, включая допустимый 0; 256 —
# только поворот; -2 — препятствие на клиенте; -1 — общий отказ/полная
# очередь/отключение/выносливость. С waitForAck=TRUE: 7 — подтверждение, 5 — отказ сервера, 4 —
# тайм-аут; -1/-2/256 сохраняют предыдущий смысл. Число 7 в форме без ожидания — sequence, а не
# подтверждение. Проверка IF result недостаточна.

SUB Main()
    # direction=4 — S, run=TRUE, timeout=1500 мс. queue=TRUE, waitForAck=TRUE.
    # Ожидание места и затем подтверждения может занять до двух интервалов по 1500 мс. 256 требует
    # отдельного учёта поворота.

    VAR status = UO.StepQ(4, TRUE, 1500, TRUE, TRUE)
    IF status == 7 THEN
        UO.Print('Server confirmed')
    ELSE
        UO.Print('Step status: ' + STR(status))
    END IF
END SUB

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

  • direction=4 — S, run=TRUE, timeout=1500 мс. queue=TRUE, waitForAck=TRUE.
  • Ожидание места и затем подтверждения может занять до двух интервалов по 1500 мс. 256 требует отдельного учёта поворота.

Пример 3. Отдельно обработать локальную стену

# Отдельно обработать локальную стену
#
# Запрашивает один шаг через очередь; дополнительная форма может ждать освобождения очереди и
# подтверждения.
#
# Integer без waitForAck: 0..255 — sequence отправленного запроса, включая допустимый 0; 256 —
# только поворот; -2 — препятствие на клиенте; -1 — общий отказ/полная
# очередь/отключение/выносливость. С waitForAck=TRUE: 7 — подтверждение, 5 — отказ сервера, 4 —
# тайм-аут; -1/-2/256 сохраняют предыдущий смысл. Число 7 в форме без ожидания — sequence, а не
# подтверждение. Проверка IF result недостаточна.

SUB Main()
    # direction=6 — W, run=FALSE; timeout=0 не ждёт очередь; queue=FALSE запрашивает forcePacket,
    # waitForAck=FALSE.
    # ForcePacket не даёт права пройти через стену. При -2 рассчитывайте другой маршрут вместо
    # повторной отправки в ту же клетку.

    VAR status = UO.StepQ(6, FALSE, 0, FALSE, FALSE)
    IF status == -2 THEN
        UO.Print('Local obstacle; calculate another route')
    END IF
END SUB

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

  • direction=6 — W, run=FALSE; timeout=0 не ждёт очередь; queue=FALSE запрашивает forcePacket, waitForAck=FALSE.
  • ForcePacket не даёт права пройти через стену. При -2 рассчитывайте другой маршрут вместо повторной отправки в ту же клетку.