Skip to content

API UO Dismount

Codex edited this page Sep 21, 2026 · 5 revisions

UO.Dismount

UO API · Все команды · Возвращаемые значения

Запрашивает спешивание, если персонаж сейчас верхом.

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

UO.Dismount() -> Unit

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

Параметры

Параметров нет.

Возвращает

Unit — возвращаемого значения нет. Вызывайте отдельной строкой, не сравнивайте результат с 1/TRUE. Проверяйте слой 25 после ответа сервера.

Поведение

  • Команда отправляет запрос использования объекта протокола UO (0x06), без эмуляции мыши. Она обходит общий обработчик double-click интерфейса: в war mode запрос не заменяется атакой.
  • Состояние верхового животного читается из слоя 25. Оно меняется после данных сервера; возврат из команды не подтверждает завершение посадки/спешивания.
  • Повторные mount/dismount запросы временно объединяются: до изменения слоя, смены персонажа или истечения 5 секунд новый запрос не отправляется. Это защищает от дублирования между скриптами.
  • При отсутствии персонажа, вне игры или для мёртвого персонажа запрос не отправляется. Окончательные правила владения, доступности и посадки определяет сервер.
  • Если слой 25 пуст, запроса нет и paperdoll не открывается. Служебный boat item с graphic 0x3E96 не считается обычным верховым животным для этой команды.

Внутренние функции: последовательность выполнения

Ниже описана реализация этого движка. Имена внутренних методов не являются дополнительными командами BASIC.

1. ExecuteClientApiCompatibility

Ветка Dismount вызывает выделенный метод bridge.Dismount.

Общий UseObject/GameActions.DoubleClick не используется.

Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteClientApiCompatibility.

2. Dismount

Передаёт запрос на игровой поток в общий BasicMountController.

Контроллер проверяет игрока, слой, цель и незавершённый предыдущий запрос.

Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Dismount.

3. Request

Для допустимого запроса запоминает персонажа/текущий слой и время.

Передаёт serial в Send_DoubleClick — название функции пакета 0x06. Сам слой не меняет.

Исходник проекта: src/ClassicUO.Client/Game/Managers/BasicMountController.cs; функция Request.

Пример ожидания ниже ограничен по времени и проверяет наблюдаемое состояние; сервер может отказать.

Примеры

Пример 1. Запросить спешивание

# Запросить спешивание
#
# Запрашивает спешивание, если персонаж сейчас верхом.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой, не сравнивайте результат с
# 1/TRUE. Проверяйте слой 25 после ответа сервера.

SUB Main()
    # Параметров нет. Возвращаемого значения тоже нет.

    # При пустом слое 25 команда ничего не отправляет.
    UO.Dismount()
END SUB

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

  • Параметров нет. Возвращаемого значения тоже нет.

Пример 2. Проверить наличие верхового предмета до запроса

# Проверить наличие верхового предмета до запроса
#
# Запрашивает спешивание, если персонаж сейчас верхом.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой, не сравнивайте результат с
# 1/TRUE. Проверяйте слой 25 после ответа сервера.

SUB Main()
    # ridden — ID предмета слоя, не цель для повторного вызова Mount. Dismount принимает ноль
    # аргументов.

    VAR ridden = UO.ObjAtLayer(25)
    IF ridden = 0 THEN
        UO.Print("No loaded mount layer")
        RETURN
    END IF
    UO.Print("Mounted item ID: " + CStr(ridden))
    UO.Dismount()
END SUB

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

  • ridden — ID предмета слоя, не цель для повторного вызова Mount. Dismount принимает ноль аргументов.

Пример 3. Полная функция ожидания пустого слоя

# Полная функция ожидания пустого слоя
#
# Запрашивает спешивание, если персонаж сейчас верхом.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой, не сравнивайте результат с
# 1/TRUE. Проверяйте слой 25 после ответа сервера.

SUB Main()
    # Helper возвращает TRUE, если слой уже пуст или стал пустым в пределах ожидания. Он посылает не
    # более одного запроса.
    # Это проверка клиентского состояния после ответа сервера, а не возвращаемое значение
    # UO.Dismount.

    VAR dismounted = TryDismount()
    UO.Print("Mount layer empty: " + CStr(dismounted))
END SUB

FUNCTION TryDismount()
    IF UO.ObjAtLayer(25) = 0 THEN
        RETURN TRUE
    END IF
    UO.Dismount()
    VAR attempts = 0
    WHILE attempts < 20
        IF UO.ObjAtLayer(25) = 0 THEN
            RETURN TRUE
        END IF
        WAIT(50)
        attempts = attempts + 1
    WEND
    RETURN FALSE
END FUNCTION

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

  • Helper возвращает TRUE, если слой уже пуст или стал пустым в пределах ожидания. Он посылает не более одного запроса.
  • Это проверка клиентского состояния после ответа сервера, а не возвращаемое значение UO.Dismount.

Clone this wiki locally