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

UO.GetNextStepZ

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

ClassicUO • Runtime API

Вычисляет предполагаемую высоту следующего шага в указанном направлении.

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

UO.GetNextStepZ(CurrX:Any, CurrY:Any, DestX:Any, DestY:Any, WorldNum:Any, CurrZ:Any) -> Integer

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

Параметры

  • CurrX — Исходная мировая X, обычно UO.GetX().
  • CurrY — Исходная мировая Y, обычно UO.GetY().
  • DestX — X назначения. Для проверки одного конкретного шага передавайте соседнюю клетку.
  • DestY — Y назначения; вместе с DestX задаёт направление одного шага, а не полный маршрут.
  • WorldNum — Номер карты/фасета; используйте UO.WorldNum(). Читается только текущая загруженная карта.
  • CurrZ — Исходная высота Z, обычно UO.GetZ(); геометрический расчёт использует диапазон -128..127.

Возвращает

Integer — рассчитанная Z следующего шага; 0 и отрицательные числа являются допустимой высотой. При отключённом персонаже или другой карте 0. Метод возвращает компонент Z проверки даже при непроходимости; само число не является подтверждением прохода. Для флага и высоты вместе используйте IsWorldCellPassable и читайте [0]/[1].

Поведение

  • Команда читает локальную карту и не запускает движение или target. Клетка за пределами размеров карты не подменяется клеткой соседнего столбца.
  • Высота Z, graphic/type, цвет hue, флаги и слой экипировки имеют разный смысл. Нулевой graphic или Z=0 могут быть допустимыми данными; проверяйте форму результата.
  • Расчёт не делает шаг и не открывает дверь. Он проверяет локальную геометрию; сервер может отклонить реальное движение. Если bridge не вернул Z, используется CurrZ.

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

Это цепочка настоящих C#-методов клиента. Имена внутренних методов не являются дополнительными UO-командами. Запускаемый код и все вспомогательные процедуры приведены ниже.

1. ExecuteStealthCompatibility

Ветка GetNextStepZ разбирает шесть аргументов; при отсутствии подключения или другой карте возвращает 0.

Передаёт CurrX/CurrY/CurrZ/DestX/DestY/WorldNum в CheckWorldStep. Выбирает [1], не [0]; при коротком результате возвращает CurrZ.

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

2. CheckWorldStep

На игровом потоке проверяет карту/Pathfinder, определяет направление по знакам разности координат, ограничивает исходную Z диапазоном sbyte.

CanWalkForQuery вычисляет соседнюю клетку и Z; возвращается [passable, z]. Отсутствие карты/Pathfinder даёт [0,CurrZ], совпадающие X/Y — [1,CurrZ].

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

3. CanWalkForQuery

Проверяет один переход с локальными правилами геометрии, не запуская автопуть.

Возвращает проходимость и изменяет X/Y/Z по ссылке. Проверка не наследует чужой фильтр активного скриптового маршрута.

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

4. GetChunk2

Получает X/Y блока карты и флаг load. Проверяет обе оси до вычисления линейного индекса; отрицательные и слишком большие координаты дают null.

Возвращает загруженный/переиспользуемый Chunk или null. При load=true может прочитать блок из ресурсов; холодное чтение не имеет жёсткой гарантии времени.

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

Чтение не перемещает персонажа и не отправляет команды серверу. Геометрия меняется между запросами; полученный массив — результат этого чтения, а не подписка на изменения.

Примеры

Пример 1. Узнать предполагаемую высоту восточного шага

# Узнать предполагаемую высоту восточного шага
#
# Вычисляет предполагаемую высоту следующего шага в указанном направлении.
#
# Integer — рассчитанная Z следующего шага; 0 и отрицательные числа являются допустимой высотой.
# При отключённом персонаже или другой карте 0. Метод возвращает компонент Z проверки даже при
# непроходимости; само число не является подтверждением прохода. Для флага и высоты вместе
# используйте IsWorldCellPassable и читайте [0]/[1].

SUB Main()
    # Шесть параметров: исходные X/Y, соседние X/Y, карта и исходная Z. nextZ — высота, не
    # TRUE/FALSE.

    VAR x = UO.GetX()
    VAR y = UO.GetY()
    VAR z = UO.GetZ()
    VAR nextZ = UO.GetNextStepZ(x, y, x + 1, y, UO.WorldNum(), z)
    UO.Print('Candidate Z: ' + CStr(nextZ))
END SUB

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

  • Шесть параметров: исходные X/Y, соседние X/Y, карта и исходная Z. nextZ — высота, не TRUE/FALSE.

Пример 2. Получить флаг проходимости и высоту вместе

# Получить флаг проходимости и высоту вместе
#
# Вычисляет предполагаемую высоту следующего шага в указанном направлении.
#
# Integer — рассчитанная Z следующего шага; 0 и отрицательные числа являются допустимой высотой.
# При отключённом персонаже или другой карте 0. Метод возвращает компонент Z проверки даже при
# непроходимости; само число не является подтверждением прохода. Для флага и высоты вместе
# используйте IsWorldCellPassable и читайте [0]/[1].

SUB Main()
    # У IsWorldCellPassable другой порядок семи аргументов:
    # CurrX,CurrY,CurrZ,DestX,DestY,DestZ,WorldNum.
    # Логическое 1/0 — только stepResult[0]. stepResult[1] и результат GetNextStepZ остаются
    # высотой.

    VAR x = UO.GetX()
    VAR y = UO.GetY()
    VAR z = UO.GetZ()
    VAR stepResult = UO.IsWorldCellPassable(x, y, z, x + 1, y, z, UO.WorldNum())
    IF GetArrayLength(stepResult) = 2 THEN
        IF stepResult[0] = TRUE THEN
            UO.Print('Passable, Z: ' + CStr(stepResult[1]))
        ELSE
            UO.Print('Blocked')
        END IF
    END IF
END SUB

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

  • У IsWorldCellPassable другой порядок семи аргументов: CurrX,CurrY,CurrZ,DestX,DestY,DestZ,WorldNum.
  • Логическое 1/0 — только stepResult[0]. stepResult[1] и результат GetNextStepZ остаются высотой.

Пример 3. Отделить отключение от настоящей высоты 0

# Отделить отключение от настоящей высоты 0
#
# Вычисляет предполагаемую высоту следующего шага в указанном направлении.
#
# Integer — рассчитанная Z следующего шага; 0 и отрицательные числа являются допустимой высотой.
# При отключённом персонаже или другой карте 0. Метод возвращает компонент Z проверки даже при
# непроходимости; само число не является подтверждением прохода. Для флага и высоты вместе
# используйте IsWorldCellPassable и читайте [0]/[1].

SUB Main()
    # Вызов выполняется только при известном подключении. Между проверкой и чтением соединение может
    # пропасть; Z=0 всё равно не является кодом успеха.

    IF UO.Connected() = TRUE THEN
        VAR x = UO.GetX()
        VAR y = UO.GetY()
        VAR z = UO.GetNextStepZ(x, y, x, y + 1, UO.WorldNum(), UO.GetZ())
        UO.Print('South candidate Z: ' + CStr(z))
    ELSE
        UO.Print('Character disconnected')
    END IF
END SUB

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

  • Вызов выполняется только при известном подключении. Между проверкой и чтением соединение может пропасть; Z=0 всё равно не является кодом успеха.