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

UO.PredictedY

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

ClassicUO • Runtime API

Читает прогнозируемую координату Y после уже поставленных в очередь шагов персонажа.

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

UO.PredictedY() -> Integer

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

Параметры

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

Возвращает

Integer Y в клетках карты. 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 Y в клетках карты. 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 Y в клетках карты. 0 — допустимая координата либо отсутствие персонажа.

Это локальный прогноз, не подтверждённое прибытие. Новые/завершённые шаги, отказ сервера, очистка очереди или телепорт могут его изменить. Отдельные вызовы компонентов не атомарны; совпадение X не доказывает совпадение Y/Z или подтверждение сервера.

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

PredictionEquals(expected) принимает одно числовое значение координаты/высоты/направления, проверяет наличие персонажа и сравнивает один компонент прогноза. Возвращает Integer Boolean: 1=TRUE или 0=FALSE. Не ждёт и не гарантирует прибытие.

Примеры

Пример 1. Прочитать один компонент

# Прочитать один компонент
#
# Читает прогнозируемую координату Y после уже поставленных в очередь шагов персонажа.
#
# Integer Y в клетках карты. 0 — допустимая координата либо отсутствие персонажа.

SUB Main()
    # predicted сохраняет один вызов без аргументов; CStr форматирует число для журнала.

    VAR predicted = UO.PredictedY()
    UO.Print('Predicted: ' + CStr(predicted))
END SUB

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

  • predicted сохраняет один вызов без аргументов; CStr форматирует число для журнала.

Пример 2. Наблюдать изменение прогноза

# Наблюдать изменение прогноза
#
# Читает прогнозируемую координату Y после уже поставленных в очередь шагов персонажа.
#
# Integer Y в клетках карты. 0 — допустимая координата либо отсутствие персонажа.

SUB Main()
    # WAIT(100) приостанавливает пример на 100 мс. before и after могут совпасть даже при
    # промежуточном движении; эти чтения движение не запускают.

    VAR before = UO.PredictedY()
    WAIT(100)
    VAR after = UO.PredictedY()
    IF before <> after THEN
        UO.Print('Prediction changed: ' + CStr(before) + ' -> ' + CStr(after))
    END IF
END SUB

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

  • WAIT(100) приостанавливает пример на 100 мс. before и after могут совпасть даже при промежуточном движении; эти чтения движение не запускают.

Пример 3. Полная функция сравнения

# Полная функция сравнения
#
# Читает прогнозируемую координату Y после уже поставленных в очередь шагов персонажа.
#
# Integer Y в клетках карты. 0 — допустимая координата либо отсутствие персонажа.

SUB Main()
    # expected — пример координаты/высоты/направления, не аргумент нативной команды.
    # PredictionEquals проверяет UO.Self(), читает значение один раз и возвращает 1=TRUE при
    # равенстве, иначе 0=FALSE. Весь код функции показан ниже Main. Совпадение одного компонента не
    # означает прибытие.

    IF PredictionEquals(1690) = 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.PredictedY()
    RETURN predicted = expected
END SUB

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

  • expected — пример координаты/высоты/направления, не аргумент нативной команды. PredictionEquals проверяет UO.Self(), читает значение один раз и возвращает 1=TRUE при равенстве, иначе 0=FALSE. Весь код функции показан ниже Main. Совпадение одного компонента не означает прибытие.