-
Notifications
You must be signed in to change notification settings - Fork 0
API UO CalcDir ko
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입니다.
세 번째 예제는 일반 스크립트 함수로 알고리즘을 재현합니다. 엔진이 이 예제 함수를 내부적으로 호출한다는 뜻은 아닙니다.
어댑터가 위치 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.
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입니다.
ClassicUO
Bad Newbie & Basic IDE
Найти в справочнике
Клиент и скрипты
Каталоги значений
Разработка и помощь