API UO CalcDir uk - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.CalcDir
ClassicUO • Runtime API
Обчислює напрямок від однієї світової точки до іншої, не переміщуючи персонажа.
Точний синтаксис
UO.CalcDir(Xfrom:Any, Yfrom:Any, Xto:Any, Yto:Any) -> Integer
Параметри
Xfrom— Координата X початкової точки.Yfrom— Координата Y початкової точки.Xto— Координата X призначення.Yto— Координата Y призначення.
Повертає
Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
Поведінка
- Чисте обчислення без пакетів, очікувань, завантаження мапи, перешкод, Z та перевірки світу. Це не пошук прохідного маршруту і не гарантія прибуття. Точки мають належати одній системі координат; обхід може бути довшим.
- Усі чотири параметри обов’язкові. Передавайте світові координати Integer у документованому діапазоні 0..65535. Any означає універсальний адаптер, а не ID предмета. Типових значень, координат усередині контейнера, п’ятого Z чи форми з одним об’єктом немає.
- Від призначення віднімається початок; перевіряються знаки. Від’ємна зміна Y означає північ, додатна X — схід. Зміна обох осей дає діагональ незалежно від величин. Обидві різниці нульові — результат 100.
Внутрішні функції: від виклику до результату
Третій приклад відтворює алгоритм скриптовою функцією; це навчальна реалізація, а не реальна внутрішня назва команди.
1. ExecuteStealthCompatibility
Адаптер читає аргументи 0..3 як цілі Xfrom,Yfrom,Xto,Yto та передає їх обчислювальній функції.
Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функція ExecuteStealthCompatibility.
2. CalculateDirection
CalculateDirection: dx=Math.Sign(toX-fromX); dy=Math.Sign(toY-fromY); identical ->100; axis/sign branches ->0..7.
Від призначення віднімається початок; перевіряються знаки. Від’ємна зміна Y означає північ, додатна X — схід. Зміна обох осей дає діагональ незалежно від величин. Обидві різниці нульові — результат 100.
Код проєкту: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; функція CalculateDirection.
Чисте обчислення без пакетів, очікувань, завантаження мапи, перешкод, Z та перевірки світу. Це не пошук прохідного маршруту і не гарантія прибуття. Точки мають належати одній системі координат; обхід може бути довшим.
Приклади
Пряме обчислення
# Пряме обчислення
#
# Обчислює напрямок від однієї світової точки до іншої, не переміщуючи персонажа.
#
# Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний
# захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не
# невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
SUB Main()
# Початок (100,100), призначення (101,100): зростає лише X. Main повертає Integer 2, схід. Рух
# не запускається.
# Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний
# захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не
# невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
# Від призначення віднімається початок; перевіряються знаки. Від’ємна зміна Y означає північ,
# додатна X — схід. Зміна обох осей дає діагональ незалежно від величин. Обидві різниці нульові
# — результат 100.
Return UO.CalcDir(100,100,101,100)
END SUB
Пояснення параметрів і виконання:
- Початок (100,100), призначення (101,100): зростає лише X. Main повертає Integer 2, схід. Рух не запускається.
- Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
- Від призначення віднімається початок; перевіряються знаки. Від’ємна зміна Y означає північ, додатна X — схід. Зміна обох осей дає діагональ незалежно від величин. Обидві різниці нульові — результат 100.
Перевірка значення
# Перевірка значення
#
# Обчислює напрямок від однієї світової точки до іншої, не переміщуючи персонажа.
#
# Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний
# захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не
# невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
SUB Main()
# Однакові точки (100,100) дають direction=100; Main повертає "already there". Для різних точок
# виконується інша гілка. Порівнюйте зі 100, а не True.
# Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний
# захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не
# невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
# Від призначення віднімається початок; перевіряються знаки. Від’ємна зміна Y означає північ,
# додатна X — схід. Зміна обох осей дає діагональ незалежно від величин. Обидві різниці нульові
# — результат 100.
Dim direction=UO.CalcDir(100,100,100,100)
If direction=100 Then
Return "already there"
End If
Return "different point"
END SUB
Пояснення параметрів і виконання:
- Однакові точки (100,100) дають direction=100; Main повертає "already there". Для різних точок виконується інша гілка. Порівнюйте зі 100, а не True.
- Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
- Від призначення віднімається початок; перевіряються знаки. Від’ємна зміна Y означає північ, додатна X — схід. Зміна обох осей дає діагональ незалежно від величин. Обидві різниці нульові — результат 100.
Повний скриптовий алгоритм
# Повний скриптовий алгоритм
#
# Обчислює напрямок від однієї світової точки до іншої, не переміщуючи персонажа.
#
# Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний
# захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не
# невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
SUB Main()
# Від (20,20) до (19,21): X меншає, Y зростає. UO.CalcDir та повністю наведена RebuildDirection
# дають 5; Main повертає "5:5". Чотири параметри помічника мають той самий зміст координат.
# Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний
# захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не
# невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
# Від призначення віднімається початок; перевіряються знаки. Від’ємна зміна Y означає північ,
# додатна X — схід. Зміна обох осей дає діагональ незалежно від величин. Обидві різниці нульові
# — результат 100.
Dim actual=UO.CalcDir(20,20,19,21)
Dim rebuilt=RebuildDirection(20,20,19,21)
Return CStr(actual) & ":" & CStr(rebuilt)
END SUB
Function RebuildDirection(Xfrom, Yfrom, Xto, Yto) As Integer
Dim dx = Xto-Xfrom
Dim dy = Yto-Yfrom
If dx=0 AndAlso dy=0 Then
Return 100
End If
If dx=0 Then
If dy<0 Then
Return 0
End If
Return 4
End If
If dy=0 Then
If dx>0 Then
Return 2
End If
Return 6
End If
If dx>0 Then
If dy<0 Then
Return 1
End If
Return 3
End If
If dy>0 Then
Return 5
End If
Return 7
End Function
Пояснення параметрів і виконання:
- Від (20,20) до (19,21): X меншає, Y зростає. UO.CalcDir та повністю наведена RebuildDirection дають 5; Main повертає "5:5". Чотири параметри помічника мають той самий зміст координат.
- Integer — код: 0=північ, 1=північний схід, 2=схід, 3=південний схід, 4=південь, 5=південний захід, 6=захід, 7=північний захід. Однакові точки дають 100. Це не Boolean: 0 є північчю, не невдачею, а 1 є напрямком, не успіхом. Не передавайте 100 команді кроку.
- Від призначення віднімається початок; перевіряються знаки. Від’ємна зміна Y означає північ, додатна X — схід. Зміна обох осей дає діагональ незалежно від величин. Обидві різниці нульові — результат 100.