API UO Ground zh tw - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

UO.Ground

ClassicUO • Runtime API

回傳代表地面的特殊選擇值,供搜尋容器或移動目的地參數使用。

完整語法

UO.Ground() -> Integer

參數

沒有參數。

傳回值

Integer,永遠為 0。這是有效的地面選擇值,不是 FALSE、搜尋失敗、物件 ID、圖形、地圖編號或座標。請檢查使用它的搜尋或移動結果,不要把 Ground() 當成成功旗標。

行為

  • 沒有參數。單獨呼叫 Ground() 不搜尋、不移動、不開啟目標、不傳送封包,也不改變既有搜尋結果。登入前同樣回傳 0。
  • 放在 FindType、FindList、Count、FindTypeEx、FindTypesArrayEx、CountEx 或 MoveItem 的 container/destination 位置。搜尋只讀取已載入物件,不載入遠方格子。地面的 X/Y/Z 是世界座標,不是容器視窗像素。
  • FindType(type, color) 仍搜尋物品欄:第二參數是顏色。地面需寫 FindType(type, color, UO.Ground())。舊式精簡 FindType/MoveItem 以 -1 表示物品欄;相容 FindTypeEx/FindTypesArrayEx/CountEx 也接受 -1 表示地面。建議用 UO.Ground() 或名稱 ground,避免在不同指令間直接搬用數字。
  • 原始參考:Stealth Ground。上述指令慣例及範例描述此客戶端。

內部函式:從呼叫到結果

以下為實際內部步驟。FindGroundTypes 是完整使用者函式,不是額外的內建指令。

1. ExecuteStealthCompatibility

無參數的 runtime 分支直接回傳 Integer 0,不呼叫遊戲 bridge。

Integer,永遠為 0。這是有效的地面選擇值,不是 FALSE、搜尋失敗、物件 ID、圖形、地圖編號或座標。請檢查使用它的搜尋或移動結果,不要把 Ground() 當成成功旗標。

專案原始碼: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 函式 ExecuteStealthCompatibility.

2. ConvertContainer

精簡搜尋將明確的 0 轉成內部地面範圍,並保留 -1 作為物品欄預設值。相容搜尋接受 0 與舊的 -1 表示地面;容器名稱另行解析。

FindType(type, color) 仍搜尋物品欄:第二參數是顏色。地面需寫 FindType(type, color, UO.Ground())。舊式精簡 FindType/MoveItem 以 -1 表示物品欄;相容 FindTypeEx/FindTypesArrayEx/CountEx 也接受 -1 表示地面。建議用 UO.Ground() 或名稱 ground,避免在不同指令間直接搬用數字。

專案原始碼: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 函式 ConvertContainer.

3. ConvertStealthSearchContainer

精簡搜尋將明確的 0 轉成內部地面範圍,並保留 -1 作為物品欄預設值。相容搜尋接受 0 與舊的 -1 表示地面;容器名稱另行解析。

FindType(type, color) 仍搜尋物品欄:第二參數是顏色。地面需寫 FindType(type, color, UO.Ground())。舊式精簡 FindType/MoveItem 以 -1 表示物品欄;相容 FindTypeEx/FindTypesArrayEx/CountEx 也接受 -1 表示地面。建議用 UO.Ground() 或名稱 ground,避免在不同指令間直接搬用數字。

專案原始碼: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 函式 ConvertStealthSearchContainer.

4. ResolveTransferDestination

目的地解析保留地面值 0。客戶端 bridge 使用世界座標,放下封包的容器欄位則為 0xFFFFFFFF。API 選擇值與封包欄位採用不同表示法。

將 0x40001001 改成可存取物品的 serial。IsObjectExists 先檢查已載入物件。MoveItem(item, amount, destination, X, Y, Z):amount=0 為整堆,Ground() 選地面,GetX/GetY/GetZ 讀取角色世界座標。result=1 表示客戶端接受移動請求,否則 0;這不是 Ground() 的結果,也不是伺服器收件確認。

專案原始碼: external/InjectionScript/src/InjectionScript/Runtime/InjectionApiUO.cs; 函式 ResolveTransferDestination.

5. MoveItem

目的地解析保留地面值 0。客戶端 bridge 使用世界座標,放下封包的容器欄位則為 0xFFFFFFFF。API 選擇值與封包欄位採用不同表示法。

將 0x40001001 改成可存取物品的 serial。IsObjectExists 先檢查已載入物件。MoveItem(item, amount, destination, X, Y, Z):amount=0 為整堆,Ground() 選地面,GetX/GetY/GetZ 讀取角色世界座標。result=1 表示客戶端接受移動請求,否則 0;這不是 Ground() 的結果,也不是伺服器收件確認。

專案原始碼: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; 函式 MoveItem.

沒有參數。單獨呼叫 Ground() 不搜尋、不移動、不開啟目標、不傳送封包,也不改變既有搜尋結果。登入前同樣回傳 0。

範例

讀取選擇值

# 讀取選擇值
#
# 回傳代表地面的特殊選擇值,供搜尋容器或移動目的地參數使用。
#
# Integer,永遠為 0。這是有效的地面選擇值,不是 FALSE、搜尋失敗、物件 ID、圖形、地圖編號或座標。請檢查使用它的搜尋或移動結果,不要把 Ground() 當成成功旗標。

SUB Main()
    # destination 得到 Integer 0,Print 顯示它。這不會放下任何物品。

    VAR destination = UO.Ground()
    UO.Print(CStr(destination))
END SUB

參數與執行說明:

  • destination 得到 Integer 0,Print 顯示它。這不會放下任何物品。

搜尋地面的金幣堆

# 搜尋地面的金幣堆
#
# 回傳代表地面的特殊選擇值,供搜尋容器或移動目的地參數使用。
#
# Integer,永遠為 0。這是有效的地面選擇值,不是 FALSE、搜尋失敗、物件 ID、圖形、地圖編號或座標。請檢查使用它的搜尋或移動結果,不要把 Ground() 當成成功旗標。

SUB Main()
    # 0x0EED 是金幣圖形;第二個 -1 代表任何色彩。Ground() 選取世界,FALSE 停用容器遞迴。FindTypeEx 回傳 serial 或 0,<> 0 檢查該
    # serial。適用 FindDistance/FindVertical 與 Ignore。

    VAR id = UO.FindTypeEx(0x0EED, -1, UO.Ground(), FALSE)
    IF id <> 0 THEN
        UO.Print(HEX(id))
    ELSE
        UO.Print('0')
    END IF
END SUB

參數與執行說明:

  • 0x0EED 是金幣圖形;第二個 -1 代表任何色彩。Ground() 選取世界,FALSE 停用容器遞迴。FindTypeEx 回傳 serial 或 0,<> 0 檢查該 serial。適用 FindDistance/FindVertical 與 Ignore。

搜尋兩種圖形的完整函式

# 搜尋兩種圖形的完整函式
#
# 回傳代表地面的特殊選擇值,供搜尋容器或移動目的地參數使用。
#
# Integer,永遠為 0。這是有效的地面選擇值,不是 FALSE、搜尋失敗、物件 ID、圖形、地圖編號或座標。請檢查使用它的搜尋或移動結果,不要把 Ground() 當成成功旗標。

SUB Main()
    # FindGroundTypes(firstType, secondType, radius, height) 搜尋金幣 0x0EED 和黑珍珠
    # 0x0F7A,radius=5、height=10。DIM types[1] 建立兩格,colors[0] 和 containers[0]
    # 各一格。一堆算一個物件;類型/色彩是可選條件,重疊容器不會重複 ID。函式回傳保存的 serial 陣列,Finally 還原兩個限制,Main 印出每個 ID。完整函式如下。

    VAR ids = FindGroundTypes(0x0EED, 0x0F7A, 5, 10)
    FOR EACH id IN ids
        UO.Print(HEX(id))
    NEXT
END SUB

FUNCTION FindGroundTypes(firstType, secondType, radius, height)
    VAR oldDistance = UO.FindDistance()
    VAR oldVertical = UO.FindVertical()
    DIM types[1]
    types[0] = firstType
    types[1] = secondType
    DIM colors[0]
    colors[0] = -1
    DIM containers[0]
    containers[0] = UO.Ground()
    TRY
        UO.FindDistance(radius)
        UO.FindVertical(height)
        UO.FindTypesArrayEx(types, colors, containers, FALSE)
        RETURN UO.GetFoundItems()
    FINALLY
        UO.FindDistance(oldDistance)
        UO.FindVertical(oldVertical)
    END TRY
END FUNCTION

參數與執行說明:

  • FindGroundTypes(firstType, secondType, radius, height) 搜尋金幣 0x0EED 和黑珍珠 0x0F7A,radius=5、height=10。DIM types[1] 建立兩格,colors[0] 和 containers[0] 各一格。一堆算一個物件;類型/色彩是可選條件,重疊容器不會重複 ID。函式回傳保存的 serial 陣列,Finally 還原兩個限制,Main 印出每個 ID。完整函式如下。

把已知物品放到角色所在格子

# 把已知物品放到角色所在格子
#
# 回傳代表地面的特殊選擇值,供搜尋容器或移動目的地參數使用。
#
# Integer,永遠為 0。這是有效的地面選擇值,不是 FALSE、搜尋失敗、物件 ID、圖形、地圖編號或座標。請檢查使用它的搜尋或移動結果,不要把 Ground() 當成成功旗標。

SUB Main()
    # 將 0x40001001 改成可存取物品的 serial。IsObjectExists 先檢查已載入物件。MoveItem(item, amount, destination, X, Y,
    # Z):amount=0 為整堆,Ground() 選地面,GetX/GetY/GetZ 讀取角色世界座標。result=1 表示客戶端接受移動請求,否則 0;這不是 Ground()
    # 的結果,也不是伺服器收件確認。

    VAR item = 0x40001001
    IF UO.IsObjectExists(item) THEN
        VAR result = UO.MoveItem(item, 0, UO.Ground(), UO.GetX('self'), UO.GetY('self'), UO.GetZ('self'))
    END IF
END SUB

參數與執行說明:

  • 將 0x40001001 改成可存取物品的 serial。IsObjectExists 先檢查已載入物件。MoveItem(item, amount, destination, X, Y, Z):amount=0 為整堆,Ground() 選地面,GetX/GetY/GetZ 讀取角色世界座標。result=1 表示客戶端接受移動請求,否則 0;這不是 Ground() 的結果,也不是伺服器收件確認。

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

Basic