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.

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

Basic