API UO Dist ja - 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))。始点と終点を入れ替えても同じです。ユークリッド距離、差の合計、障害物を避ける歩数ではありません。

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

Basic