Skip to content

API ArrayContains zh tw

Codex edited this page Oct 4, 2026 · 1 revision

ArrayContains

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

API · Basic

ClassicUO • Runtime API

檢查允許或已處理的陣列中是否含有某個值。

完整語法

ArrayContains(array:Any, pattern:Any) -> Integer

參數

  • array — 要檢查的 Array;其他種類回傳 0。
  • pattern — 要在直接元素中尋找的任意值。

傳回值

Integer 布林值:符合為 1/True,否則 0/False。可使用 If ArrayContains(...) 或與 True/1 比較。這不是索引或符合數量。

行為

  • 這是本機查詢,不會向伺服器發送要求、移動物品或修改陣列。範例使用固定資料,並非即時背包。
  • 檢查種類後逐一比較外層元素,第一個符合便結束。Integer 1 等於 Decimal 1.0,但不等於 String "1"。字串區分大小寫。
  • 巢狀 Array 與參照 Object 比較參照是否相同。Structure 是例外:相同宣告型別且各欄位值相等便相等;Array/Object 欄位仍依各自的比較規則。不會遞迴搜尋;空陣列為 0。未初始化欄位含有 Unit,可與 Unit 符合。

內部函式:從呼叫到結果

檢查種類後逐一比較外層元素,第一個符合便結束。Integer 1 等於 Decimal 1.0,但不等於 String "1"。字串區分大小寫。

1. ArrayContains

檢查種類後逐一比較外層元素,第一個符合便結束。Integer 1 等於 Decimal 1.0,但不等於 String "1"。字串區分大小寫。

Integer 布林值:符合為 1/True,否則 0/False。可使用 If ArrayContains(...) 或與 True/1 比較。這不是索引或符合數量。

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

2. Equals

檢查種類後逐一比較外層元素,第一個符合便結束。Integer 1 等於 Decimal 1.0,但不等於 String "1"。字串區分大小寫。

巢狀 Array 與參照 Object 比較參照是否相同。Structure 是例外:相同宣告型別且各欄位值相等便相等;Array/Object 欄位仍依各自的比較規則。不會遞迴搜尋;空陣列為 0。未初始化欄位含有 Unit,可與 Unit 符合。

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

3. ValueEquals

巢狀 Array 與參照 Object 比較參照是否相同。Structure 是例外:相同宣告型別且各欄位值相等便相等;Array/Object 欄位仍依各自的比較規則。不會遞迴搜尋;空陣列為 0。未初始化欄位含有 Unit,可與 Unit 符合。

Integer 布林值:符合為 1/True,否則 0/False。可使用 If ArrayContains(...) 或與 True/1 比較。這不是索引或符合數量。

專案原始碼: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/StructureObject.cs; 函式 ValueEquals.

巢狀 Array 與參照 Object 比較參照是否相同。Structure 是例外:相同宣告型別且各欄位值相等便相等;Array/Object 欄位仍依各自的比較規則。不會遞迴搜尋;空陣列為 0。未初始化欄位含有 Unit,可與 Unit 符合。

範例

允許指定物品圖形

# 允許指定物品圖形
#
# 檢查允許或已處理的陣列中是否含有某個值。
#
# Integer 布林值:符合為 1/True,否則 0/False。可使用 If ArrayContains(...) 或與 True/1 比較。這不是索引或符合數量。

SUB Main()
    # 清單中有 0x0EED,所以回傳 allowed。不會搜尋或移動物品。
    # 這是本機查詢,不會向伺服器發送要求、移動物品或修改陣列。範例使用固定資料,並非即時背包。

    Dim allowed(1)
    allowed[0] = 0x0EED
    allowed[1] = 0x0F7A
    Dim graphic = 0x0EED
    If ArrayContains(allowed, graphic) = True Then
        Return "allowed"
    End If
    Return "skip"
END SUB

參數與執行說明:

  • 清單中有 0x0EED,所以回傳 allowed。不會搜尋或移動物品。
  • 這是本機查詢,不會向伺服器發送要求、移動物品或修改陣列。範例使用固定資料,並非即時背包。

避免重複處理 serial

# 避免重複處理 serial
#
# 檢查允許或已處理的陣列中是否含有某個值。
#
# Integer 布林值:符合為 1/True,否則 0/False。可使用 If ArrayContains(...) 或與 True/1 比較。這不是索引或符合數量。

SUB Main()
    # ASC 明確將十六進位字串轉成 Integer。已存在的 serial 回傳 already queued;原本的 String 不會與數字相符。
    # 這是本機查詢,不會向伺服器發送要求、移動物品或修改陣列。範例使用固定資料,並非即時背包。

    Dim queued(1)
    queued[0] = 0x40001234
    queued[1] = 0x40005678
    Dim incoming = "0x40001234"
    Dim serial = ASC(incoming, 0)
    If serial = 0 Then
        Return "invalid"
    End If
    If ArrayContains(queued, serial) Then
        Return "already queued"
    End If
    Return "new"
END SUB

參數與執行說明:

  • ASC 明確將十六進位字串轉成 Integer。已存在的 serial 回傳 already queued;原本的 String 不會與數字相符。
  • 這是本機查詢,不會向伺服器發送要求、移動物品或修改陣列。範例使用固定資料,並非即時背包。

路徑點的參照

# 路徑點的參照
#
# 檢查允許或已處理的陣列中是否含有某個值。
#
# Integer 布林值:符合為 1/True,否則 0/False。可使用 If ArrayContains(...) 或與 True/1 比較。這不是索引或符合數量。

SUB Main()
    # route 包含 point,不包含 sameCoordinates。相同座標不代表同一陣列參照,所以結果為 1|0。
    # 這是本機查詢,不會向伺服器發送要求、移動物品或修改陣列。範例使用固定資料,並非即時背包。

    Dim point(1)
    point[0] = 100
    point[1] = 200
    Dim sameCoordinates(1)
    sameCoordinates[0] = 100
    sameCoordinates[1] = 200
    Dim route(0)
    route[0] = point
    Return CStr(ArrayContains(route, point)) & "|" & CStr(ArrayContains(route, sameCoordinates))
END SUB

參數與執行說明:

  • route 包含 point,不包含 sameCoordinates。相同座標不代表同一陣列參照,所以結果為 1|0。
  • 這是本機查詢,不會向伺服器發送要求、移動物品或修改陣列。範例使用固定資料,並非即時背包。

Clone this wiki locally