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

UO.Dist

ClassicUO • Runtime API

Вычисляет расстояние в клетках между двумя мировыми точками: наибольшую из абсолютных разностей X и Y.

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

UO.Dist(Xfrom:Any, Yfrom:Any, Xto:Any, Yto:Any) -> Integer

Параметры

  • Xfrom — Координата X исходной точки.
  • Yfrom — Координата Y исходной точки.
  • Xto — Координата X назначения.
  • Yto — Координата Y назначения.

Возвращает

Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение distance<=2 даёт 1/True либо 0/False.

Поведение

  • Только вычисление координат: без пакетов, ожиданий, загрузки карты, проверки препятствий, Z и карты мира. Команда не ищет проходимый маршрут и не гарантирует достижение цели. Точки должны относиться к одной системе координат; обход препятствий может увеличить путь.
  • Нужны все четыре параметра. Передавайте мировые координаты Integer в документированном диапазоне 0..65535. Any в сигнатуре обозначает универсальный адаптер, а не ID предмета. Значений по умолчанию, координат внутри сундука, пятого Z и перегрузки с одним объектом у этих команд нет.
  • Формула: Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). При перестановке точек результат тот же. Это не евклидово расстояние, не сумма разностей и не число шагов при обходе препятствия.

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

Третий пример воспроизводит алгоритм обычной скриптовой функцией. Это учебный код, а не утверждение, что движок вызывает именно её.

1. ExecuteStealthCompatibility

Адаптер читает позиции 0..3 как целые в порядке Xfrom,Yfrom,Xto,Yto, затем вызывает вычислительный помощник.

Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение distance<=2 даёт 1/True либо 0/False.

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

2. GetDistance

GetDistance(int,int,int,int): dx=Math.Abs(x1-x2); dy=Math.Abs(y1-y2); return Math.Max(dx,dy).

Формула: Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). При перестановке точек результат тот же. Это не евклидово расстояние, не сумма разностей и не число шагов при обходе препятствия.

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

Только вычисление координат: без пакетов, ожиданий, загрузки карты, проверки препятствий, Z и карты мира. Команда не ищет проходимый маршрут и не гарантирует достижение цели. Точки должны относиться к одной системе координат; обход препятствий может увеличить путь.

Примеры

Прямое вычисление

# Прямое вычисление
#
# Вычисляет расстояние в клетках между двумя мировыми точками: наибольшую из абсолютных
# разностей X и Y.
#
# Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает
# одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение
# distance<=2 даёт 1/True либо 0/False.

SUB Main()
    # От (100,100) до (103,104): абсолютные разности равны 3 и 4, максимум — 4. Main возвращает
    # Integer 4.
    # Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает
    # одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение
    # distance<=2 даёт 1/True либо 0/False.
    # Формула: Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). При перестановке точек результат тот же. Это не
    # евклидово расстояние, не сумма разностей и не число шагов при обходе препятствия.

    Return UO.Dist(100,100,103,104)
END SUB

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

  • От (100,100) до (103,104): абсолютные разности равны 3 и 4, максимум — 4. Main возвращает Integer 4.
  • Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение distance<=2 даёт 1/True либо 0/False.
  • Формула: Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). При перестановке точек результат тот же. Это не евклидово расстояние, не сумма разностей и не число шагов при обходе препятствия.

Правильная проверка результата

# Правильная проверка результата
#
# Вычисляет расстояние в клетках между двумя мировыми точками: наибольшую из абсолютных
# разностей X и Y.
#
# Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает
# одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение
# distance<=2 даёт 1/True либо 0/False.

SUB Main()
    # От (100,100) до (101,99) расстояние равно 1. Отдельное сравнение distance<=2 даёт True=1. Main
    # возвращает "1:1": первая единица — расстояние, вторая — логический результат сравнения.
    # Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает
    # одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение
    # distance<=2 даёт 1/True либо 0/False.
    # Формула: Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). При перестановке точек результат тот же. Это не
    # евклидово расстояние, не сумма разностей и не число шагов при обходе препятствия.

    Dim distance=UO.Dist(100,100,101,99)
    Dim close=distance<=2
    Return CStr(distance) & ":" & CStr(close)
END SUB

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

  • От (100,100) до (101,99) расстояние равно 1. Отдельное сравнение distance<=2 даёт True=1. Main возвращает "1:1": первая единица — расстояние, вторая — логический результат сравнения.
  • Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение distance<=2 даёт 1/True либо 0/False.
  • Формула: Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). При перестановке точек результат тот же. Это не евклидово расстояние, не сумма разностей и не число шагов при обходе препятствия.

Полный скриптовый разбор

# Полный скриптовый разбор
#
# Вычисляет расстояние в клетках между двумя мировыми точками: наибольшую из абсолютных
# разностей X и Y.
#
# Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает
# одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение
# distance<=2 даёт 1/True либо 0/False.

SUB Main()
    # UO.Dist возвращает 4. RebuildTileDistance вычисляет разности через Abs, сравнивает их и
    # возвращает большую, также 4. Main возвращает "4:4". Помощник полностью приведён в примере и не
    # является ещё одной командой движка.
    # Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает
    # одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение
    # distance<=2 даёт 1/True либо 0/False.
    # Формула: Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). При перестановке точек результат тот же. Это не
    # евклидово расстояние, не сумма разностей и не число шагов при обходе препятствия.

    Dim actual=UO.Dist(100,100,103,104)
    Dim rebuilt=RebuildTileDistance(100,100,103,104)
    Return CStr(actual) & ":" & CStr(rebuilt)
END SUB

Function RebuildTileDistance(Xfrom, Yfrom, Xto, Yto) As Integer
    Dim dx = Abs(Xto-Xfrom)
    Dim dy = Abs(Yto-Yfrom)
    If dx>dy Then
        Return dx
    End If
    Return dy
End Function

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

  • UO.Dist возвращает 4. RebuildTileDistance вычисляет разности через Abs, сравнивает их и возвращает большую, также 4. Main возвращает "4:4". Помощник полностью приведён в примере и не является ещё одной командой движка.
  • Integer — расстояние в клетках, неотрицательное для допустимых координат. 0 означает одинаковые XY, 1 — одну клетку. Это количество, а не признак успеха. Отдельное сравнение distance<=2 даёт 1/True либо 0/False.
  • Формула: Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). При перестановке точек результат тот же. Это не евклидово расстояние, не сумма разностей и не число шагов при обходе препятствия.

en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic