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μ λλ€.