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 всё равно не является кодом успеха.