API UO CalcDir ko - 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 λ˜λŠ” μ›”λ“œ 검사가 μ—†λŠ” 순수 κ³„μ‚°μž…λ‹ˆλ‹€. 톡행 경둜λ₯Ό μ°Ύκ±°λ‚˜ 도착을 보μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 같은 μ’Œν‘œκ³„μ˜ 지점을 μ‚¬μš©ν•˜λ©° 우회 κ²½λ‘œλŠ” 더 κΈΈ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ„€ λ§€κ°œλ³€μˆ˜ λͺ¨λ‘ ν•„μš”ν•©λ‹ˆλ‹€. λ¬Έμ„œ λ²”μœ„ 0..65535의 Integer μ›”λ“œ μ’Œν‘œλ₯Ό μ „λ‹¬ν•˜μ„Έμš”. AnyλŠ” λ²”μš© μ–΄λŒ‘ν„°μ΄λ©° 물체 IDκ°€ μ•„λ‹™λ‹ˆλ‹€. κΈ°λ³Έκ°’, μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€ μ’Œν‘œ, λ‹€μ„― 번째 Z, 단일 물체 μ˜€λ²„λ‘œλ“œλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • λͺ©μ μ§€μ—μ„œ μ‹œμž‘μ μ„ λΊ€ λ’€ λΆ€ν˜Έλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. Y κ°μ†ŒλŠ” 뢁μͺ½, X μ¦κ°€λŠ” 동μͺ½μž…λ‹ˆλ‹€. 두 좕이 λͺ¨λ‘ λ°”λ€Œλ©΄ 차이 크기와 λ¬΄κ΄€ν•˜κ²Œ λŒ€κ°μ„ μ„ μ„ νƒν•©λ‹ˆλ‹€. λ‘˜ λ‹€ 0이면 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 μ¦κ°€λŠ” 동μͺ½μž…λ‹ˆλ‹€. 두 좕이 λͺ¨λ‘ λ°”λ€Œλ©΄ 차이 크기와 λ¬΄κ΄€ν•˜κ²Œ λŒ€κ°μ„ μ„ μ„ νƒν•©λ‹ˆλ‹€. λ‘˜ λ‹€ 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