API UO Dist uk - 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 — одну клітинку. Це кількість, не Boolean. Окреме порівняння 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 — одну клітинку. Це кількість, не Boolean. Окреме порівняння 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 —
# одну клітинку. Це кількість, не Boolean. Окреме порівняння distance<=2 повертає 1/True чи
# 0/False.

SUB Main()
    # Для (100,100) і (103,104) абсолютні різниці — 3 та 4. Більша дорівнює 4; Main повертає Integer
    # 4.
    # Integer — невід’ємна відстань у клітинках для допустимих координат. 0 означає однакові XY, 1 —
    # одну клітинку. Це кількість, не Boolean. Окреме порівняння 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 — одну клітинку. Це кількість, не Boolean. Окреме порівняння distance<=2 повертає 1/True чи 0/False.
  • Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). Перестановка точок не змінює результат. Це не евклідова відстань, не сума різниць і не довжина обходу перешкод.

Перевірка значення

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

SUB Main()
    # Для (100,100) і (101,99) відстань 1, а порівняння distance<=2 дає True=1. Main повертає "1:1":
    # спершу відстань, потім логічний результат.
    # Integer — невід’ємна відстань у клітинках для допустимих координат. 0 означає однакові XY, 1 —
    # одну клітинку. Це кількість, не Boolean. Окреме порівняння 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 — одну клітинку. Це кількість, не Boolean. Окреме порівняння distance<=2 повертає 1/True чи 0/False.
  • Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). Перестановка точок не змінює результат. Це не евклідова відстань, не сума різниць і не довжина обходу перешкод.

Повний скриптовий алгоритм

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

SUB Main()
    # UO.Dist і RebuildTileDistance обидві дають 4; Main повертає "4:4". Помічник обчислює Abs
    # різниць, порівнює їх і повертає більшу. Це повний навчальний код, не додаткова команда рушія.
    # Integer — невід’ємна відстань у клітинках для допустимих координат. 0 означає однакові XY, 1 —
    # одну клітинку. Це кількість, не Boolean. Окреме порівняння 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 і RebuildTileDistance обидві дають 4; Main повертає "4:4". Помічник обчислює Abs різниць, порівнює їх і повертає більшу. Це повний навчальний код, не додаткова команда рушія.
  • Integer — невід’ємна відстань у клітинках для допустимих координат. 0 означає однакові XY, 1 — одну клітинку. Це кількість, не Boolean. Окреме порівняння 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