API UO PredictedZ - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.PredictedZ
Оглавление · Алфавитный указатель · Movement
ClassicUO • Runtime API
Читает прогнозируемую высоту Z после уже поставленных в очередь шагов персонажа.
Точный синтаксис
UO.PredictedZ() -> Integer
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
Параметров нет.
Возвращает
Integer Z, знаковая высота -128..127; отрицательное значение сохраняется. 0 — допустимая высота либо отсутствие персонажа.
Поведение
- Только показанная в синтаксисе функция UO без аргументов. Нет параметров target, serial, type, цели, дистанции или timeout. Число не Boolean, ID или запись tile: 1 не означает достижение цели.
- GetEndPosition читает X/Y/Z/направление последнего уже добавленного Mobile.Step. При пустой очереди читает текущее положение/направление персонажа. Это чтение O(1): шаг не извлекается, движение и пакет не отправляются, маршрут не рассчитывается, достижения команда не ждёт.
- X и Y — координаты мира/карты, не пиксели гампа контейнера. Z — высота, не номер этажа. Возвращается один компонент, не массив и не конечная цель всего маршрута.
- Это локальный прогноз, не подтверждённое прибытие. Новые/завершённые шаги, отказ сервера, очистка очереди или телепорт могут его изменить. Отдельные вызовы компонентов не атомарны; совпадение X не доказывает совпадение Y/Z или подтверждение сервера.
- Invoke выполняет чтение на игровом потоке; с рабочего потока ожидается обработка запроса менеджером. Отмена скрипта прерывает ожидание. Паузы и дополнительные сетевые запросы не добавляются.
- Внешние реализации IApiBridge без IPredictedMovementBridge сохраняют запасное чтение текущих координат/направления. Classic UO реализует интерфейс с учётом очереди.
Внутренние функции: от вызова до результата
Реальные внутренние этапы чтения. PredictionEquals — полностью объявленная пользовательская BASIC-функция, не встроенная команда и не процедура движения.
1. ExecuteStealthCompatibility
Зарегистрированная нативная функция вызывает ReadPredictedCoordinate, который выбирает свойство IPredictedMovementBridge. NewMoveXY и поиск маршрута не запускаются.
Только показанная в синтаксисе функция UO без аргументов. Нет параметров target, serial, type, цели, дистанции или timeout. Число не Boolean, ID или запись tile: 1 не означает достижение цели.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteStealthCompatibility.
2. ReadPredictedCoordinate
Зарегистрированная нативная функция вызывает ReadPredictedCoordinate, который выбирает свойство IPredictedMovementBridge. NewMoveXY и поиск маршрута не запускаются.
Внешние реализации IApiBridge без IPredictedMovementBridge сохраняют запасное чтение текущих координат/направления. Classic UO реализует интерфейс с учётом очереди.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ReadPredictedCoordinate.
3. Invoke
Invoke выполняет чтение на игровом потоке; с рабочего потока ожидается обработка запроса менеджером. Отмена скрипта прерывает ожидание. Паузы и дополнительные сетевые запросы не добавляются.
Integer Z, знаковая высота -128..127; отрицательное значение сохраняется. 0 — допустимая высота либо отсутствие персонажа.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция Invoke.
4. ReadPredictedPosition
ReadPredictedPosition возвращает 0 при отсутствующем/уничтоженном Player; иначе вызывает GetEndPosition и выбирает компонент.
GetEndPosition читает X/Y/Z/направление последнего уже добавленного Mobile.Step. При пустой очереди читает текущее положение/направление персонажа. Это чтение O(1): шаг не извлекается, движение и пакет не отправляются, маршрут не рассчитывается, достижения команда не ждёт.
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция ReadPredictedPosition.
5. GetEndPosition
GetEndPosition читает X/Y/Z/направление последнего уже добавленного Mobile.Step. При пустой очереди читает текущее положение/направление персонажа. Это чтение O(1): шаг не извлекается, движение и пакет не отправляются, маршрут не рассчитывается, достижения команда не ждёт.
X и Y — координаты мира/карты, не пиксели гампа контейнера. Z — высота, не номер этажа. Возвращается один компонент, не массив и не конечная цель всего маршрута.
Исходник проекта: src/ClassicUO.Client/Game/GameObjects/Mobile.cs; функция GetEndPosition.
6. InjectionValue
Integer Z, знаковая высота -128..127; отрицательное значение сохраняется. 0 — допустимая высота либо отсутствие персонажа.
Это локальный прогноз, не подтверждённое прибытие. Новые/завершённые шаги, отказ сервера, очистка очереди или телепорт могут его изменить. Отдельные вызовы компонентов не атомарны; совпадение X не доказывает совпадение Y/Z или подтверждение сервера.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionValue.cs; функция InjectionValue.
PredictionEquals(expected) принимает одно числовое значение координаты/высоты/направления, проверяет наличие персонажа и сравнивает один компонент прогноза. Возвращает Integer Boolean: 1=TRUE или 0=FALSE. Не ждёт и не гарантирует прибытие.
Примеры
Пример 1. Прочитать один компонент
# Прочитать один компонент
#
# Читает прогнозируемую высоту Z после уже поставленных в очередь шагов персонажа.
#
# Integer Z, знаковая высота -128..127; отрицательное значение сохраняется. 0 — допустимая
# высота либо отсутствие персонажа.
SUB Main()
# predicted сохраняет один вызов без аргументов; CStr форматирует число для журнала.
VAR predicted = UO.PredictedZ()
UO.Print('Predicted: ' + CStr(predicted))
END SUB
Разбор параметров и выполнения:
- predicted сохраняет один вызов без аргументов; CStr форматирует число для журнала.
Пример 2. Наблюдать изменение прогноза
# Наблюдать изменение прогноза
#
# Читает прогнозируемую высоту Z после уже поставленных в очередь шагов персонажа.
#
# Integer Z, знаковая высота -128..127; отрицательное значение сохраняется. 0 — допустимая
# высота либо отсутствие персонажа.
SUB Main()
# WAIT(100) приостанавливает пример на 100 мс. before и after могут совпасть даже при
# промежуточном движении; эти чтения движение не запускают.
VAR before = UO.PredictedZ()
WAIT(100)
VAR after = UO.PredictedZ()
IF before <> after THEN
UO.Print('Prediction changed: ' + CStr(before) + ' -> ' + CStr(after))
END IF
END SUB
Разбор параметров и выполнения:
- WAIT(100) приостанавливает пример на 100 мс. before и after могут совпасть даже при промежуточном движении; эти чтения движение не запускают.
Пример 3. Полная функция сравнения
# Полная функция сравнения
#
# Читает прогнозируемую высоту Z после уже поставленных в очередь шагов персонажа.
#
# Integer Z, знаковая высота -128..127; отрицательное значение сохраняется. 0 — допустимая
# высота либо отсутствие персонажа.
SUB Main()
# expected — пример координаты/высоты/направления, не аргумент нативной команды.
# PredictionEquals проверяет UO.Self(), читает значение один раз и возвращает 1=TRUE при
# равенстве, иначе 0=FALSE. Весь код функции показан ниже Main. Совпадение одного компонента не
# означает прибытие.
IF PredictionEquals(-4) = TRUE THEN
UO.Print('Queued endpoint matches this component')
ELSE
UO.Print('Different component or no player')
END IF
END SUB
SUB PredictionEquals(expected)
IF UO.Self() = 0 THEN
RETURN FALSE
END IF
VAR predicted = UO.PredictedZ()
RETURN predicted = expected
END SUB
Разбор параметров и выполнения:
- expected — пример координаты/высоты/направления, не аргумент нативной команды. PredictionEquals проверяет UO.Self(), читает значение один раз и возвращает 1=TRUE при равенстве, иначе 0=FALSE. Весь код функции показан ниже Main. Совпадение одного компонента не означает прибытие.