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)). Перестановка точок не змінює результат. Це не евклідова відстань, не сума різниць і не довжина обходу перешкод.