-
Notifications
You must be signed in to change notification settings - Fork 0
API 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-командами. Запускаемый код и все вспомогательные процедуры приведены ниже.
Ветка GetNextStepZ разбирает шесть аргументов; при отсутствии подключения или другой карте возвращает 0.
Передаёт CurrX/CurrY/CurrZ/DestX/DestY/WorldNum в CheckWorldStep. Выбирает [1], не [0]; при коротком результате возвращает CurrZ.
Исходник проекта: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функция ExecuteClientApiCompatibility.
На игровом потоке проверяет карту/Pathfinder, определяет направление по знакам разности координат, ограничивает исходную Z диапазоном sbyte.
CanWalkForQuery вычисляет соседнюю клетку и Z; возвращается [passable, z]. Отсутствие карты/Pathfinder даёт [0,CurrZ], совпадающие X/Y — [1,CurrZ].
Исходник проекта: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; функция CheckWorldStep.
Проверяет один переход с локальными правилами геометрии, не запуская автопуть.
Возвращает проходимость и изменяет X/Y/Z по ссылке. Проверка не наследует чужой фильтр активного скриптового маршрута.
Исходник проекта: src/ClassicUO.Client/Game/Pathfinder.cs; функция CanWalkForQuery.
Получает X/Y блока карты и флаг load. Проверяет обе оси до вычисления линейного индекса; отрицательные и слишком большие координаты дают null.
Возвращает загруженный/переиспользуемый Chunk или null. При load=true может прочитать блок из ресурсов; холодное чтение не имеет жёсткой гарантии времени.
Исходник проекта: src/ClassicUO.Client/Game/Map/Map.cs; функция GetChunk2.
Чтение не перемещает персонажа и не отправляет команды серверу. Геометрия меняется между запросами; полученный массив — результат этого чтения, а не подписка на изменения.
# Узнать предполагаемую высоту восточного шага
#
# Вычисляет предполагаемую высоту следующего шага в указанном направлении.
#
# 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.
# Получить флаг проходимости и высоту вместе
#
# Вычисляет предполагаемую высоту следующего шага в указанном направлении.
#
# 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 остаются высотой.
# Отделить отключение от настоящей высоты 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 всё равно не является кодом успеха.
ClassicUO - Bad Newbie & Basic IDE Edition