Skip to content

API UO CalcDir ko

Codex edited this page Sep 21, 2026 · 2 revisions

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 또는 월드 검사가 없는 순수 계산입니다. 통행 경로를 찾거나 도착을 보장하지 않습니다. 같은 좌표계의 지점을 사용하며 우회 경로는 더 길 수 있습니다.
  • 네 매개변수 모두 필요합니다. 문서 범위 0..65535의 Integer 월드 좌표를 전달하세요. Any는 범용 어댑터이며 물체 ID가 아닙니다. 기본값, 컨테이너 내부 좌표, 다섯 번째 Z, 단일 물체 오버로드는 없습니다.
  • 목적지에서 시작점을 뺀 뒤 부호를 확인합니다. Y 감소는 북쪽, X 증가는 동쪽입니다. 두 축이 모두 바뀌면 차이 크기와 무관하게 대각선을 선택합니다. 둘 다 0이면 100입니다.

내부 함수: 호출부터 결과까지

세 번째 예제는 일반 스크립트 함수로 알고리즘을 재현합니다. 엔진이 이 예제 함수를 내부적으로 호출한다는 뜻은 아닙니다.

1. ExecuteClientApiCompatibility

어댑터가 위치 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; 함수 ExecuteClientApiCompatibility.

2. CalculateDirection

CalculateDirection: dx=Math.Sign(toX-fromX); dy=Math.Sign(toY-fromY); identical ->100; axis/sign branches ->0..7.

목적지에서 시작점을 뺀 뒤 부호를 확인합니다. Y 감소는 북쪽, X 증가는 동쪽입니다. 두 축이 모두 바뀌면 차이 크기와 무관하게 대각선을 선택합니다. 둘 다 0이면 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 증가는 동쪽입니다.  축이 모두 바뀌면 차이 크기와 무관하게 대각선을 선택합니다.   0이면
    # 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 증가는 동쪽입니다. 두 축이 모두 바뀌면 차이 크기와 무관하게 대각선을 선택합니다. 둘 다 0이면 100입니다.

결과 올바르게 판정

# 결과 올바르게 판정
#
#  월드 좌표 사이의 방향을 계산합니다. 캐릭터를 움직이지 않습니다.
#
# Integer 방향 코드: 0=북, 1=북동, 2=동, 3=남동, 4=남, 5=남서, 6=서, 7=북서. 같은 지점이면 100입니다. Boolean 아닙니다. 0
# 실패가 아닌 북쪽이고 1 성공이 아닌 북동쪽입니다. 100 이동 방향으로 전달하지 마세요.

SUB Main()
    #  지점이 (100,100)이므로 direction=100이며 Main은 "already there" 반환합니다. 다른 지점은 다른 분기를 사용합니다. True 아닌
    # 100 비교하세요.
    # Integer 방향 코드: 0=북, 1=북동, 2=동, 3=남동, 4=남, 5=남서, 6=서, 7=북서. 같은 지점이면 100입니다. Boolean 아닙니다. 0
    # 실패가 아닌 북쪽이고 1 성공이 아닌 북동쪽입니다. 100 이동 방향으로 전달하지 마세요.
    # 목적지에서 시작점을   부호를 확인합니다. Y 감소는 북쪽, X 증가는 동쪽입니다.  축이 모두 바뀌면 차이 크기와 무관하게 대각선을 선택합니다.   0이면
    # 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"를 반환합니다. 다른 지점은 다른 분기를 사용합니다. True가 아닌 100과 비교하세요.
  • Integer 방향 코드: 0=북, 1=북동, 2=동, 3=남동, 4=남, 5=남서, 6=서, 7=북서. 같은 지점이면 100입니다. Boolean이 아닙니다. 0은 실패가 아닌 북쪽이고 1은 성공이 아닌 북동쪽입니다. 100을 이동 방향으로 전달하지 마세요.
  • 목적지에서 시작점을 뺀 뒤 부호를 확인합니다. Y 감소는 북쪽, X 증가는 동쪽입니다. 두 축이 모두 바뀌면 차이 크기와 무관하게 대각선을 선택합니다. 둘 다 0이면 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 증가는 동쪽입니다.  축이 모두 바뀌면 차이 크기와 무관하게 대각선을 선택합니다.   0이면
    # 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 증가는 동쪽입니다. 두 축이 모두 바뀌면 차이 크기와 무관하게 대각선을 선택합니다. 둘 다 0이면 100입니다.

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

Basic

Clone this wiki locally