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

UO.Step

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

ClassicUO • Runtime API

Запрашивает одиночный шаг/поворот и, если был отправлен шаг, ждёт подтверждение сервера.

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

UO.Step(Direction:Any, Running:Any) -> Any

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

Параметры

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

Возвращает

Integer: 7 — подтверждён шаг либо выполнен только поворот; 5 — сервер отклонил шаг; 4 — истекло ожидание подтверждения (до 10000 мс); 3 — шаг заблокирован клиентом; 2 — очередь переполнена; 0 — общий отказ, отключение или недостаточная выносливость. Это не true/false: например, ненулевой код 5 означает отказ.

Поведение

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

Примеры

Пример 1. Шаг на восток

# Шаг на восток
#
# Запрашивает одиночный шаг/поворот и, если был отправлен шаг, ждёт подтверждение сервера.
#
# Integer: 7 — подтверждён шаг либо выполнен только поворот; 5 — сервер отклонил шаг; 4 —
# истекло ожидание подтверждения (до 10000 мс); 3 — шаг заблокирован клиентом; 2 — очередь
# переполнена; 0 — общий отказ, отключение или недостаточная выносливость. Это не true/false:
# например, ненулевой код 5 означает отказ.

SUB Main()
    # Direction=2 — E, Running=FALSE — шаг.
    # Проверяется точный код 7; для подтверждения перемещения сравните X/Y до и после.

    VAR result = UO.Step(2, FALSE)
    IF result == 7 THEN
        UO.Print('Step accepted or turn completed')
    ELSE
        UO.Print('Movement status: ' + STR(result))
    END IF
END SUB

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

  • Direction=2 — E, Running=FALSE — шаг.
  • Проверяется точный код 7; для подтверждения перемещения сравните X/Y до и после.

Пример 2. Отличить поворот от перемещения

# Отличить поворот от перемещения
#
# Запрашивает одиночный шаг/поворот и, если был отправлен шаг, ждёт подтверждение сервера.
#
# Integer: 7 — подтверждён шаг либо выполнен только поворот; 5 — сервер отклонил шаг; 4 —
# истекло ожидание подтверждения (до 10000 мс); 3 — шаг заблокирован клиентом; 2 — очередь
# переполнена; 0 — общий отказ, отключение или недостаточная выносливость. Это не true/false:
# например, ненулевой код 5 означает отказ.

SUB Main()
    # Direction=0 — N. Координаты считываются до и после вызова.
    # Неизменная позиция возможна при повороте или отказе, поэтому result нужен отдельно.

    VAR x = UO.GetX()
    VAR y = UO.GetY()
    VAR result = UO.Step(0, FALSE)
    IF UO.GetX() == x AND UO.GetY() == y THEN
        UO.Print('Position unchanged; status=' + STR(result))
    END IF
END SUB

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

  • Direction=0 — N. Координаты считываются до и после вызова.
  • Неизменная позиция возможна при повороте или отказе, поэтому result нужен отдельно.

Пример 3. Обработать серверный отказ при беге

# Обработать серверный отказ при беге
#
# Запрашивает одиночный шаг/поворот и, если был отправлен шаг, ждёт подтверждение сервера.
#
# Integer: 7 — подтверждён шаг либо выполнен только поворот; 5 — сервер отклонил шаг; 4 —
# истекло ожидание подтверждения (до 10000 мс); 3 — шаг заблокирован клиентом; 2 — очередь
# переполнена; 0 — общий отказ, отключение или недостаточная выносливость. Это не true/false:
# например, ненулевой код 5 означает отказ.

SUB Main()
    # Direction=4 — S, Running=TRUE.
    # Код 5 — отказ сервера. WAIT=250 мс задаёт паузу скрипта и не гарантирует, что следующая
    # попытка будет успешной.

    VAR result = UO.Step(4, TRUE)
    IF result == 5 THEN
        UO.Print('Server denied the step')
        WAIT(250)
    END IF
END SUB

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

  • Direction=4 — S, Running=TRUE.
  • Код 5 — отказ сервера. WAIT=250 мс задаёт паузу скрипта и не гарантирует, что следующая попытка будет успешной.