Repository navigation
API 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.
Ветка Dismount вызывает выделенный метод bridge.Dismount.
Общий UseObject/GameActions.DoubleClick не используется.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteClientApiCompatibility.
Передаёт запрос на игровой поток в общий BasicMountController.
Контроллер проверяет игрока, слой, цель и незавершённый предыдущий запрос.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Dismount.
Для допустимого запроса запоминает персонажа/текущий слой и время.
Передаёт serial в Send_DoubleClick — название функции пакета 0x06. Сам слой не меняет.
Исходник проекта: src/ClassicUO.Client/Game/Managers/BasicMountController.cs; функция Request.
Пример ожидания ниже ограничен по времени и проверяет наблюдаемое состояние; сервер может отказать.
# Запросить спешивание
#
# Запрашивает спешивание, если персонаж сейчас верхом.
#
# Unit — возвращаемого значения нет. Вызывайте отдельной строкой, не сравнивайте результат с
# 1/TRUE. Проверяйте слой 25 после ответа сервера.
SUB Main()
# Параметров нет. Возвращаемого значения тоже нет.
# При пустом слое 25 команда ничего не отправляет.
UO.Dismount()
END SUBРазбор параметров и выполнения:
- Параметров нет. Возвращаемого значения тоже нет.
# Проверить наличие верхового предмета до запроса
#
# Запрашивает спешивание, если персонаж сейчас верхом.
#
# 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 принимает ноль аргументов.
# Полная функция ожидания пустого слоя
#
# Запрашивает спешивание, если персонаж сейчас верхом.
#
# 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.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь