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

UO.FindAtCoord

ClassicUO • Runtime API

尋找目前地圖上精確 X/Y 格子內已載入的世界物件。

完整語法

UO.FindAtCoord(X:Any, Y:Any) -> Integer

參數

  • X — 世界水平座標,Integer 0..65535,必填;不是容器視窗中的像素位置。
  • Y — 世界垂直座標,Integer 0..65535,必填。沒有額外的 Z、地圖、類型或半徑參數。

傳回值

Integer:此客戶端結果清單中第一個符合物件的 serial。找不到、角色不存在或已移除、座標超出 0..65535 時回傳 0。這是物件 ID,不是類型、數量或 Boolean。保留完整 32 位元;請以 <> 0 檢查,不要用 = TRUE 或 > 0。相同 ID 會成為 FindItem()。

行為

  • 檢查未移除的地面 Item 與 Mobile,也包含位於該格的玩家。排除容器內容及已裝備物品:它們儲存的 X/Y 不能當作世界座標。Ignore 清單中的 serial 也會被排除。
  • 精確 X/Y 上所有 Z 高度都符合。FindDistance 和 FindVertical 不限制此查詢。只讀取目前世界已載入的物件,不載入地形、靜態圖塊或其他地圖。不送出封包、不開啟目標游標、不移動物品。
  • 每次呼叫先清除上次搜尋。FindCount() 計算物件數,FindFullQuantity() 加總堆疊單位數(Mobile 加一),GetFoundItems() 提供符合的 serial。先查 Item,再查 Mobile;各集合使用目前列舉順序。下次搜尋會取代結果,請先儲存清單。
  • 參考:Stealth FindAtCoord。上述順序與篩選規則說明的是此客戶端的實作。

內部函式:從呼叫到結果

以下是實際內部步驟。CountGraphicAt 是完整定義的腳本輔助函式,不是額外內建指令。

1. ExecuteStealthCompatibility

已註冊的執行路徑轉換兩個位置或具名 X/Y 引數,將橋接層的 Integer 作為結果。

Integer:此客戶端結果清單中第一個符合物件的 serial。找不到、角色不存在或已移除、座標超出 0..65535 時回傳 0。這是物件 ID,不是類型、數量或 Boolean。保留完整 32 位元;請以 <> 0 檢查,不要用 = TRUE 或 > 0。相同 ID 會成為 FindItem()。

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

2. FindAtCoord

在遊戲執行緒清除舊結果、檢查角色及座標範圍,再巡覽符合 X/Y 的地面 Item 和 Mobile。容器內容不會符合。

檢查未移除的地面 Item 與 Mobile,也包含位於該格的玩家。排除容器內容及已裝備物品:它們儲存的 X/Y 不能當作世界座標。Ignore 清單中的 serial 也會被排除。

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

3. RegisterFound

每個符合物件增加計數並加入 serial。第一個 serial 保留為 FindItem;Item.Amount 至少加一個單位,Mobile 加一。

每次呼叫先清除上次搜尋。FindCount() 計算物件數,FindFullQuantity() 加總堆疊單位數(Mobile 加一),GetFoundItems() 提供符合的 serial。先查 Item,再查 Mobile;各集合使用目前列舉順序。下次搜尋會取代結果,請先儲存清單。

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

精確 X/Y 上所有 Z 高度都符合。FindDistance 和 FindVertical 不限制此查詢。只讀取目前世界已載入的物件,不載入地形、靜態圖塊或其他地圖。不送出封包、不開啟目標游標、不移動物品。

範例

讀取一個物件 ID

# 讀取一個物件 ID
#
# 尋找目前地圖上精確 X/Y 格子內已載入的世界物件。
#
# Integer:此客戶端結果清單中第一個符合物件的 serial。找不到、角色不存在或已移除、座標超出 0..65535 時回傳 0。這是物件 ID,不是類型、數量或
# Boolean。保留完整 32 位元;請以 <> 0 檢查,不要用 = TRUE 或 > 0。相同 ID 會成為 FindItem()。

SUB Main()
    # 1445、1690 是世界 X/Y 範例,請換成所需格子。id 儲存 serial,HEX 將其格式化。<> 0 檢查是否找到物件,不是數量。

    VAR id = UO.FindAtCoord(1445, 1690)
    IF id <> 0 THEN
        UO.Print(HEX(id))
    ELSE
        UO.Print('No loaded object')
    END IF
END SUB

參數與執行說明:

  • 1445、1690 是世界 X/Y 範例,請換成所需格子。id 儲存 serial,HEX 將其格式化。<> 0 檢查是否找到物件,不是數量。

查看角色格子內的全部物件

# 查看角色格子內的全部物件
#
# 尋找目前地圖上精確 X/Y 格子內已載入的世界物件。
#
# Integer:此客戶端結果清單中第一個符合物件的 serial。找不到、角色不存在或已移除、座標超出 0..65535 時回傳 0。這是物件 ID,不是類型、數量或
# Boolean。保留完整 32 位元;請以 <> 0 檢查,不要用 = TRUE 或 > 0。相同 ID 會成為 FindItem()。

SUB Main()
    # x/y 取自角色,ids 儲存搜尋清單。每個 id 代表一個物件,也包括整個堆疊。GetType(id) 讀取 graphic/body。不選取或使用物品。

    VAR x = UO.GetX('self')
    VAR y = UO.GetY('self')
    UO.FindAtCoord(x, y)
    VAR ids = UO.GetFoundItems()
    FOR EACH id IN ids
        UO.Print(HEX(id) + ' type=' + HEX(UO.GetType(id)))
    NEXT
END SUB

參數與執行說明:

  • x/y 取自角色,ids 儲存搜尋清單。每個 id 代表一個物件,也包括整個堆疊。GetType(id) 讀取 graphic/body。不選取或使用物品。

完整 CountGraphicAt 輔助函式

# 完整 CountGraphicAt 輔助函式
#
# 尋找目前地圖上精確 X/Y 格子內已載入的世界物件。
#
# Integer:此客戶端結果清單中第一個符合物件的 serial。找不到、角色不存在或已移除、座標超出 0..65535 時回傳 0。這是物件 ID,不是類型、數量或
# Boolean。保留完整 32 位元;請以 <> 0 檢查,不要用 = TRUE 或 > 0。相同 ID 會成為 FindItem()。

SUB Main()
    # CountGraphicAt(x, y, graphic) 搜尋一次,巡覽儲存的 ID,計算圖形相符的物件。graphic=0x0EED 代表金幣。回傳物件/堆疊數,不是單位總數或
    # true/false;一個堆疊計一。Main 後方提供完整函式。

    VAR count = CountGraphicAt(1445, 1690, 0x0EED)
    UO.Print('Objects/stacks: ' + CStr(count))
END SUB

FUNCTION CountGraphicAt(x, y, graphic)
    UO.FindAtCoord(x, y)
    VAR ids = UO.GetFoundItems()
    VAR count = 0
    FOR EACH id IN ids
        IF UO.GetType(id) = graphic THEN
            count += 1
        END IF
    NEXT
    RETURN count
END FUNCTION

參數與執行說明:

  • CountGraphicAt(x, y, graphic) 搜尋一次,巡覽儲存的 ID,計算圖形相符的物件。graphic=0x0EED 代表金幣。回傳物件/堆疊數,不是單位總數或 true/false;一個堆疊計一。Main 後方提供完整函式。

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

Basic