API UO Dist ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
UO.Dist
ClassicUO β’ Runtime API
Xμ Y μ λ μ°¨μ΄ μ€ ν° κ°μΌλ‘ λ μ§μ μ¬μ΄μ νμΌ μλ₯Ό κ³μ°ν©λλ€.
μ νν ꡬ문
UO.Dist(Xfrom:Any, Yfrom:Any, Xto:Any, Yto:Any) -> Integer
λ§€κ°λ³μ
Xfromβ μμ X.Yfromβ μμ Y.Xtoβ λͺ©μ μ§ X.Ytoβ λͺ©μ μ§ Y.
λ°νκ°
μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True λλ 0/Falseλ₯Ό λ§λλλ€.
λμ
- ν¨ν·, λκΈ°, μ§λ λ‘λ©, μ₯μ λ¬Ό, Z λλ μλ κ²μ¬κ° μλ μμ κ³μ°μ λλ€. ν΅ν κ²½λ‘λ₯Ό μ°Ύκ±°λ λμ°©μ 보μ₯νμ§ μμ΅λλ€. κ°μ μ’νκ³μ μ§μ μ μ¬μ©νλ©° μ°ν κ²½λ‘λ λ κΈΈ μ μμ΅λλ€.
- λ€ λ§€κ°λ³μ λͺ¨λ νμν©λλ€. λ¬Έμ λ²μ 0..65535μ Integer μλ μ’νλ₯Ό μ λ¬νμΈμ. Anyλ λ²μ© μ΄λν°μ΄λ©° 물체 IDκ° μλλλ€. κΈ°λ³Έκ°, 컨ν μ΄λ λ΄λΆ μ’ν, λ€μ― λ²μ§Έ Z, λ¨μΌ 물체 μ€λ²λ‘λλ μμ΅λλ€.
- Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). μ§μ μ λ°κΏλ κ°μ΅λλ€. μ ν΄λ¦¬λ 거리, μ°¨μ΄μ ν©, μ₯μ λ¬Όμ λλ κ±Έμ μκ° μλλλ€.
λ΄λΆ ν¨μ: νΈμΆλΆν° κ²°κ³ΌκΉμ§
μΈ λ²μ§Έ μμ λ μΌλ° μ€ν¬λ¦½νΈ ν¨μλ‘ μκ³ λ¦¬μ¦μ μ¬νν©λλ€. μμ§μ΄ μ΄ μμ ν¨μλ₯Ό λ΄λΆμ μΌλ‘ νΈμΆνλ€λ λ»μ μλλλ€.
1. ExecuteStealthCompatibility
μ΄λν°κ° μμΉ 0..3μ Xfrom,Yfrom,Xto,Yto μμμ μ μλ‘ μ½κ³ κ³μ° ν¨μλ₯Ό νΈμΆν©λλ€.
μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True λλ 0/Falseλ₯Ό λ§λλλ€.
νλ‘μ νΈ μμ€: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; ν¨μ ExecuteStealthCompatibility.
2. GetDistance
GetDistance(int,int,int,int): dx=Math.Abs(x1-x2); dy=Math.Abs(y1-y2); return Math.Max(dx,dy).
Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). μ§μ μ λ°κΏλ κ°μ΅λλ€. μ ν΄λ¦¬λ 거리, μ°¨μ΄μ ν©, μ₯μ λ¬Όμ λλ κ±Έμ μκ° μλλλ€.
νλ‘μ νΈ μμ€: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; ν¨μ GetDistance.
ν¨ν·, λκΈ°, μ§λ λ‘λ©, μ₯μ λ¬Ό, Z λλ μλ κ²μ¬κ° μλ μμ κ³μ°μ λλ€. ν΅ν κ²½λ‘λ₯Ό μ°Ύκ±°λ λμ°©μ 보μ₯νμ§ μμ΅λλ€. κ°μ μ’νκ³μ μ§μ μ μ¬μ©νλ©° μ°ν κ²½λ‘λ λ κΈΈ μ μμ΅λλ€.
μμ
μ§μ κ³μ°
# μ§μ κ³μ°
#
# Xμ Y μ λ μ°¨μ΄ μ€ ν° κ°μΌλ‘ λ μ§μ μ¬μ΄μ νμΌ μλ₯Ό κ³μ°ν©λλ€.
#
# μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ
λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True
# λλ 0/Falseλ₯Ό λ§λλλ€.
SUB Main()
# (100,100)κ³Ό (103,104)μ μ λ μ°¨μ΄λ 3κ³Ό 4μ
λλ€. Mainμ ν° κ°μΈ Integer 4λ₯Ό λ°νν©λλ€.
# μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ
λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True
# λλ 0/Falseλ₯Ό λ§λλλ€.
# Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). μ§μ μ λ°κΏλ κ°μ΅λλ€. μ ν΄λ¦¬λ 거리, μ°¨μ΄μ ν©, μ₯μ λ¬Όμ λλ κ±Έμ μκ° μλλλ€.
Return UO.Dist(100,100,103,104)
END SUB
λ§€κ°λ³μ λ° μ€ν μ€λͺ :
- (100,100)κ³Ό (103,104)μ μ λ μ°¨μ΄λ 3κ³Ό 4μ λλ€. Mainμ ν° κ°μΈ Integer 4λ₯Ό λ°νν©λλ€.
- μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True λλ 0/Falseλ₯Ό λ§λλλ€.
- Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). μ§μ μ λ°κΏλ κ°μ΅λλ€. μ ν΄λ¦¬λ 거리, μ°¨μ΄μ ν©, μ₯μ λ¬Όμ λλ κ±Έμ μκ° μλλλ€.
κ²°κ³Ό μ¬λ°λ₯΄κ² νμ
# κ²°κ³Ό μ¬λ°λ₯΄κ² νμ
#
# Xμ Y μ λ μ°¨μ΄ μ€ ν° κ°μΌλ‘ λ μ§μ μ¬μ΄μ νμΌ μλ₯Ό κ³μ°ν©λλ€.
#
# μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ
λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True
# λλ 0/Falseλ₯Ό λ§λλλ€.
SUB Main()
# (100,100)κ³Ό (101,99)μ 거리λ 1μ΄λ©° λ³λ λΉκ΅ distance<=2λ True=1μ
λλ€. "1:1"μ 첫 κ°μ 거리μ΄κ³ λ λ²μ§Έλ λ
Όλ¦¬ κ²°κ³Όμ
λλ€.
# μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ
λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True
# λλ 0/Falseλ₯Ό λ§λλλ€.
# Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). μ§μ μ λ°κΏλ κ°μ΅λλ€. μ ν΄λ¦¬λ 거리, μ°¨μ΄μ ν©, μ₯μ λ¬Όμ λλ κ±Έμ μκ° μλλλ€.
Dim distance=UO.Dist(100,100,101,99)
Dim close=distance<=2
Return CStr(distance) & ":" & CStr(close)
END SUB
λ§€κ°λ³μ λ° μ€ν μ€λͺ :
- (100,100)κ³Ό (101,99)μ 거리λ 1μ΄λ©° λ³λ λΉκ΅ distance<=2λ True=1μ λλ€. "1:1"μ 첫 κ°μ 거리μ΄κ³ λ λ²μ§Έλ λ Όλ¦¬ κ²°κ³Όμ λλ€.
- μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True λλ 0/Falseλ₯Ό λ§λλλ€.
- Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). μ§μ μ λ°κΏλ κ°μ΅λλ€. μ ν΄λ¦¬λ 거리, μ°¨μ΄μ ν©, μ₯μ λ¬Όμ λλ κ±Έμ μκ° μλλλ€.
μ 체 μ€ν¬λ¦½νΈ μκ³ λ¦¬μ¦
# μ 체 μ€ν¬λ¦½νΈ μκ³ λ¦¬μ¦
#
# Xμ Y μ λ μ°¨μ΄ μ€ ν° κ°μΌλ‘ λ μ§μ μ¬μ΄μ νμΌ μλ₯Ό κ³μ°ν©λλ€.
#
# μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ
λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True
# λλ 0/Falseλ₯Ό λ§λλλ€.
SUB Main()
# UO.Distμ RebuildTileDistanceλ 4, Mainμ "4:4"λ₯Ό λ°νν©λλ€. μ 체 λμ°λ―Έλ Abs μ°¨μ΄λ₯Ό κ΅¬ν΄ ν° κ°μ λ°νν©λλ€. μΆκ° API λͺ
λ Ήμ΄
# μλ μμ μ½λμ
λλ€.
# μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ
λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True
# λλ 0/Falseλ₯Ό λ§λλλ€.
# Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). μ§μ μ λ°κΏλ κ°μ΅λλ€. μ ν΄λ¦¬λ 거리, μ°¨μ΄μ ν©, μ₯μ λ¬Όμ λλ κ±Έμ μκ° μλλλ€.
Dim actual=UO.Dist(100,100,103,104)
Dim rebuilt=RebuildTileDistance(100,100,103,104)
Return CStr(actual) & ":" & CStr(rebuilt)
END SUB
Function RebuildTileDistance(Xfrom, Yfrom, Xto, Yto) As Integer
Dim dx = Abs(Xto-Xfrom)
Dim dy = Abs(Yto-Yfrom)
If dx>dy Then
Return dx
End If
Return dy
End Function
λ§€κ°λ³μ λ° μ€ν μ€λͺ :
- UO.Distμ RebuildTileDistanceλ 4, Mainμ "4:4"λ₯Ό λ°νν©λλ€. μ 체 λμ°λ―Έλ Abs μ°¨μ΄λ₯Ό κ΅¬ν΄ ν° κ°μ λ°νν©λλ€. μΆκ° API λͺ λ Ήμ΄ μλ μμ μ½λμ λλ€.
- μ ν¨ μ’νμμλ μμκ° μλ Integer νμΌ μμ λλ€. 0μ λμΌ XY, 1μ ν νμΌμ΄λ©° μ±κ³΅ νλκ·Έκ° μλλλ€. λ³λ λΉκ΅ distance<=2κ° 1/True λλ 0/Falseλ₯Ό λ§λλλ€.
- Max(Abs(Xto-Xfrom), Abs(Yto-Yfrom)). μ§μ μ λ°κΏλ κ°μ΅λλ€. μ ν΄λ¦¬λ 거리, μ°¨μ΄μ ν©, μ₯μ λ¬Όμ λλ κ±Έμ μκ° μλλλ€.