ZH TW UO Topic search Part 2 - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

搜尋 — 2

家 · C# · IDE · UO API · A–Z · 範例 · Languages

參考章節

1 · 2

完整指令說明


UO.FindMan

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

C# 簽章

void UO.FindMan();
dynamic UO.FindMan(object? notoriety);
dynamic UO.FindMan(object? notoriety, object? distance);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color);
dynamic UO.FindMan(object? notoriety, object? distance, object? nearest, object? maxZ, object? body, object? color, object? includeSelf);

根據知名度、距離、身高、身材和 hue 找一個 serial。用於預先選擇目標而不自動攻擊。

參數

  • notoriety — 與從伺服器接收的角色的關係狀態: 0 - 未知, 1 — Innocent, 2 — Ally, 3 — Gray, 4 — Criminal, 5 — Enemy, 6 — Murderer, 7 - 刀槍不入。數字表示一種狀態; ”5|6" 或數字數組 - 以上任何一個。這不是衣服或班級的顏色。負數(通常 -1), 0xFFFF、「any」、空字串或空數組分別停用此過濾器。沒有有效數字的無效字串找不到任何人。狀態的順序不設定優先順序。篩選 5 選擇敵人,而不是自動選擇任何人 NPC/怪物;實際值取決於伺服器。
  • distance — 單元格中的水平半徑(含):5 允許距離 0..5。距離為 max(abs(dx),abs(dy)),因此相鄰對角線也是 1。預設情況下或如果數字為負數,則採用UO.FindDistance()而非無限搜尋。 0 留下相同的 X/Y 單元。不是路線的長度;此參數不檢查障礙物和地板。
  • nearest - 預設為true/1 - 最接近,距離相等,較小的serial; false/0 - 客戶列表中的第一個,而不是最遠的。
  • maxZ — 最大絕對值(目標的 Z - 自己角色的 Z),包含在內,以世界 Z 單位表示。這不是樓層數或 X/Y 單元格數。 maxZ=4 與 Z 玩家10 允許 Z 目標 6..14;0 要求高度完全相同。預設情況下/對於負數,採用UO.FindVertical()。在樓梯上,相等的 Z 可以消除所需的目標。即使 Z 值有很小的差異也不能證明地板的可及性。
  • body - 角色身體的圖形/NPC,而不是特定角色的ID,也不是所穿盔甲的type。數字、十六進位字串、字串「0x0190|0x0191」或數字陣列。 0x0190 (400) - 人類男性; 0x0191 (401) - 女性人類。面具將兩個身體結合在一起。此清單不會自動包含其他種族、幽靈或變形;標準圖形體類型表。負數(預設為 -1)、0xFFFF、「任意」、空字串或單獨的空數組 - 任何主體。沒有有效數字的未知文字會產生空結果。
  • color — mobile 本身的色調:int 或數字/十六進位字串。負數(預設為-1)和0xFFFF - 任何hue; 0 恰好是 hue 0,而不是任何值。不是惡名昭彰的顏色或衣服的顏色。此參數不檢查所配戴物品的顏色。
  • includeSelf - true/1 允許 self 受到其他過濾器的約束; false/0 預設排除。 Ignore也適用於self。

傳回值

int serial,或0 無結果。檢查id != 0;它不是bool,也不是數量。不改變FindItem/FindCount/GetFoundItems,也不發動攻擊。

行為

  • 本地搜尋:僅限已下載的手機。考虑Ignore; self 被排除在外,支持它的命令中显式的 includeSelf=true 除外。容器和物品不是移動設備。
  • 這些條件一起適用 (AND)。 body/恶名内的有效替代方案通过OR组合。搜尋不會改變 FindItem、FindCount 和 GetFoundItems。
  • 在 body/notoriety 中,具有有效数字的掩码恰好使用这些:“any|5”仍然将其限制为值5。有效数字旁边的空白/无效元素将被忽略。如果沒有限制,則單獨傳遞-1。不要将此规则应用于classMask:未知类名拒绝整个列表。
  • 團隊不會打開世界區域,不會跑向球門,也不檢查路線的通行性。在選擇和伺服器處理之間,世界的狀態可能會發生變化。
  • true和1的傳輸對於標誌來說是等效的,false和0也是如此。其他非零數也轉換為true,但8/9不是單獨的模式;使用透明true/false。
  • 確切的順序:知名度、距離、最近、maxZ、body、顏色、includeSelf。與AttackNearest和GetMobiles不同。
  • 沒有參數 classMask、aliveOnly 或 visibleOnly。如有必要,單獨檢查找到的ID;要在所有活的/可見的中進行選擇,請使用GetMobiles,以便最接近的死者不會遮擋其他人。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

object? result = UO.FindMan(2, 12);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。尋找並儲存最接近的盟友 - 直接腳本

參數與執行流程:

  • 2 - 盟友,12 - 半徑。其餘:nearest=true,maxZ=FindVertical(),任何body/hue,self除外。隊伍只拯救目標,不攻擊。
var ally = UO.FindMan(2, 12);
if (Truth(ally == 0))
{
    return null;
}
UO.AddObject("ally_nearby", ally);

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。在進一步操作之前指定每個條件 - 腳本函數

參數與執行流程:

  • IsDead 檢查是單獨進行的。 body指定主體;bodyHue=-1不限於hue。該團隊不按服裝分類。
return  RunScenario();
 object? RunScenario()
{
    var status = 5;
    var radius = 8;
    dynamic nearest = true;
    var height = 4;
    var bodies = "0x0190|0x0191";
    var bodyHue = -1;
    dynamic includeMe = false;
    var enemy = UO.FindMan(status, radius, nearest, height, bodies, bodyHue, includeMe);
    if (Truth(enemy != 0))
    {
        if (Truth(UO.IsDead(enemy) == 0))
        {
            UO.Attack(enemy);
        }
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。尋找第一個具有特定 hue 的 mobile - 腳本類

參數與執行流程:

  • 第一個 -1 禁用惡名,第二個 -1 禁用 body。第三個位置的false關閉排序;最後一個false排除了self。不檢查衣服的色調。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var chosenHue = 0x0455;
        var mobile = UO.FindMan(-1, 10, false, 8, -1, chosenHue, false);
        if (Truth(mobile == 0))
        {
            return null;
        }

        UO.AddObject("body_hue_match", mobile);
        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.FindMan() — UO.FindMan()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "findman":

                {

                    int mobile = bridge.GetMobiles().FirstOrDefault();

                    if (mobile != 0) state.Objects.Set(arguments.Length > 0 ? Text(0) : "findman", mobile);

                    break;

                }

UO.FindMan(notoriety) — UO.FindMan(Any)

參數: notoriety (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance) — UO.FindMan(Any,Any)

參數: notoriety (Any), distance (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest) — UO.FindMan(Any,Any,Any)

參數: notoriety (Any), distance (Any), nearest (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ) — UO.FindMan(Any,Any,Any,Any)

參數: notoriety (Any), distance (Any), nearest (Any), maxZ (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ, body) — UO.FindMan(Any,Any,Any,Any,Any)

參數: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ, body, color) — UO.FindMan(Any,Any,Any,Any,Any,Any)

參數: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindMan(values))

UO.FindMan(notoriety, distance, nearest, maxZ, body, color, includeSelf) — UO.FindMan(Any,Any,Any,Any,Any,Any,Any)

參數: notoriety (Any), distance (Any), nearest (Any), maxZ (Any), body (Any), color (Any), includeSelf (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindMan(values))

UO.FindMobile

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

C# 簽章

int UO.FindMobile();
int UO.FindMobile(object? stateFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionOrKind);
int UO.FindMobile(object? stateFilter, object? rangeFilter, object? verticalFilter, object? directionFilter, object? kindFilter);

使用聯合字串過濾器尋找一個最接近的載入角色/生物。球員本人被排除在外。

參數

  • stateFilter — 通常全部/活著/死亡;選修的。實作中的所有參數都是過濾字串,因此可以在一個參數中組合多個單字。
  • rangeFilter - 通常為全部/近(0..4)/中(5..9)/遠(從10到總半徑)。此位置不接受數字半徑;總體限制透過UO.FindDistance(value)變化。
  • verticalFilter - 全部/上方/下方。上方:candidate.Z > self.Z,下方:candidate.Z < self.Z。這不是下限或 Z 數值公差。
  • directionOrKind — 具有四個參數的形式的第四個位置:全部、北/南/東/西或人類/NPC/生物。可以是複合字串。
  • directionFilter — 具有五個參數的形式的第四個位置:全部或比較 X/Y 北/南/東/西。這是相對於self的位置,而不是視圖的方向。
  • kindFilter - 第五位置:所有/人類/NPC/生物。人類包括男性和女性身體:0x0190 - 男性人類,0x0191 - 女性人類,以及標準的精靈/石像鬼和鬼魂身體。完整列表:人類。 npc - IsNpc 和人類;暴民 - IsNpc 而非人類。不接受「怪物」和「女性」等字眼。

傳回值

int:mobile 中的一個serial,或0(如果沒有匹配項)。它不是一個數量,不是一個數組,不是type也不是bool。 Checkfound!=0表示結果存在;比較發現 == true 在 C# 中無效:int 無法與 bool 比較。

行為

  • 適用於 UO.FindMobile:0 到 5 參數。缺少的尾部參數就是全部。每個參數可以包含一個單字或多個單詞,以空格、製表符、逗號、分號、| 分隔。或+。所有條件透過AND組合;符號|這裡的意思不是OR。
  • 搜尋僅查看下載的手機,排除 self 並將距離限制為 max(1, UO.FindDistance())。根據規則max(abs(dx),abs(dy))測量距離;對角線的正方形算 1。對於移動物體,距離可以考慮步數隊列,X/Y/Z比較讀取目前座標。
  • 從合適的中選擇最接近的;等距離時 - 較小的serial。傳回 int serial 或 0 而非 true/false、計數或陣列。
  • UO.FindMobile 不改變 FindItem/FindCount/GetFoundItems,不適用 Ignore 和 UO.FindVertical,且不檢查能見度、通過性或視線。它不會移動、定位或載入遠端物件。
  • 數字半徑/Z/方向、單字 Monster、東北、西北、東南、西南不是過濾器。檢查候選詞時,未知單字會導致錯誤;若無候選人,本節可不執行。對於對角線區域,結合東北等;對於數值驗證,請使用找到的物件的屬性或UO.GetMobiles()。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.FindMobile("all", "all", "above");
UO.Print("FindMobile: " + Convert.ToString(result));

1。搜尋並檢查結果-直接腳本

參數與執行流程:

  • 通過全部、全部、上方:物件的高度嚴格大於角色的 Z。等於 Z 不合適。
  • 0 在讀取屬性之前處理。 Print 顯示ID、姓名和身高;沒有觸發任何遊戲動作。
var found = UO.FindMobile("all", "all", "above");
if (Truth(found == 0))
{
    UO.Print("No matching mobile");
    return null;
}
UO.Print("ID: " + Convert.ToString(found) + " | Name: " + UO.GetName(found));
UO.Print("Z: " + Convert.ToString(UO.GetZ(found)) + " | Self Z: " + Convert.ToString(UO.GetZ("self")));

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。條件與時間半徑的組合 - 腳本函數

參數與執行流程:

  • 18-外在極限;活著的、附近的、所有的、所有的,暴徒設定了合作條件。近的範圍仍是4,中的範圍是5..9,遠的範圍是10。
  • 最後在正常完成或處理錯誤時傳回先前的半徑。該腳本不會擴展世界載入。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.FindDistance();
    try
    {
        UO.FindDistance(18);
        var found = UO.FindMobile("alive", "near", "all", "all", "mob");
        if (Truth(found != 0))
        {
            UO.Print("Match: " + Convert.ToString(found));
            UO.Print("Distance: " + Convert.ToString(UO.GetDistance(found)));
        }
        else
        {
            UO.Print("No match in the loaded area");
        }
    }
    finally
    {
        UO.FindDistance(previous);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。复合过滤器的完整功能 - 脚本类

參數與執行流程:

  • 字串“north east”被傳遞給助手。這些是一個請求的多個條件,而不是針對不同目標的連續搜尋。
  • FindAndDescribe 被完整聲明。它返回ID/0,而不更改目標或角色。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = FindAndDescribe("north east");
        UO.Print("Returned ID: " + Convert.ToString(id));
        return null;
    }

    dynamic FindAndDescribe(dynamic filters)
    {
        var id = UO.FindMobile(filters);
        if (Truth(id == 0))
        {
            UO.Print("Nothing matched: " + filters);
            return 0;
        }

        UO.Print(UO.GetName(id) + " | " + Convert.ToString(id));
        return id;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

4。找到該生物並分別檢查確切的距離 - 直接腳本

參數與執行流程:

  • live/all/all/all/mob - 五個支援的位置。在獲得最接近的結果後檢查距離2。
  • 這樣的腳本不會檢查生物的路徑,也不會開始移動。
var found = UO.FindMobile("alive", "all", "all", "all", "mob");
if (Truth(found == 0))
{
    UO.Print("No loaded creature");
    return null;
}
if (Truth(UO.GetDistance(found) <= 2))
{
    UO.Print("Creature within two tiles: " + Convert.ToString(found));
}
else
{
    UO.Print("Nearest creature is farther away");
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.FindMobile() — UO.FindMobile()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public int FindMobile() => FindMobile(new InjectionValue("all"), new InjectionValue("all"),

            new InjectionValue("all"), new InjectionValue("all"));

UO.FindMobile(stateFilter) — UO.FindMobile(Any)

參數: stateFilter (Any)

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public int FindMobile(InjectionValue stateFilter) => FindMobile(stateFilter, new InjectionValue("all"),

            new InjectionValue("all"), new InjectionValue("all"));

UO.FindMobile(stateFilter, rangeFilter) — UO.FindMobile(Any,Any)

參數: stateFilter (Any), rangeFilter (Any)

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter) => FindMobile(stateFilter,

            rangeFilter, new InjectionValue("all"), new InjectionValue("all"));

UO.FindMobile(stateFilter, rangeFilter, verticalFilter) — UO.FindMobile(Any,Any,Any)

參數: stateFilter (Any), rangeFilter (Any), verticalFilter (Any)

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public int FindMobile(InjectionValue stateFilter, InjectionValue rangeFilter, InjectionValue verticalFilter) =>

            FindMobile(stateFilter, rangeFilter, verticalFilter, new InjectionValue("all"));

UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionOrKind) — UO.FindMobile(Any,Any,Any,Any)

參數: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionOrKind (Any)

結果: int / Integer.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(

                    FindMobile(values[0], values[1], values[2], values[3]))

UO.FindMobile(stateFilter, rangeFilter, verticalFilter, directionFilter, kindFilter) — UO.FindMobile(Any,Any,Any,Any,Any)

參數: stateFilter (Any), rangeFilter (Any), verticalFilter (Any), directionFilter (Any), kindFilter (Any)

結果: int / Integer.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(

                    FindMobile(values[0], values[1], values[2], values[3], values[4]))

UO.FindNotoriety

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

C# 簽章

dynamic UO.FindNotoriety(object? @type, object? notoriety);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color);
dynamic UO.FindNotoriety(object? @type, object? notoriety, object? distance, object? nearest, object? maxZ, object? color, object? container);

尋找另一個mobile一一body/type和允許的惡名。適合當你需要某種性格和正確態度的時候;高級形狀允許您約束半徑、高度和 hue。這只是一個物件選擇,而不是攻擊。

參數

  • type — 一個主體數字 graphic 或十六進位字串;不是磨損物品的serial,不是type,也不是陣列。 0x0190 (400) - 男性人類,0x0191 (401) - 女性人類;這些是不同精確度的過濾器。兩個body需要單獨呼叫或帶有遮罩的GetMobiles。 -1 或 0xFFFF - 任何物品。
  • notoriety — 與從伺服器接收的角色的關係狀態: 0 - 未知, 1 — Innocent, 2 — Ally, 3 — Gray, 4 — Criminal, 5 — Enemy, 6 — Murderer, 7 - 刀槍不入。數字表示一種狀態; ”5|6" 或數字數組 - 以上任何一個。這不是衣服或班級的顏色。負數(通常 -1), 0xFFFF、「any」、空字串或空數組分別停用此過濾器。沒有有效數字的無效字串找不到任何人。狀態的順序不設定優先順序。篩選 5 選擇敵人,而不是自動選擇任何人 NPC/怪物;實際值取決於伺服器。多個值組合為 OR: 數字 5, 線 ”5|6" 或數字/數字字串的平面數組。您可以混合平面數組和單個參數。值的順序不具有優先權。非數字標記被排除;完全錯誤的掩碼不會找到任何內容。嵌套數組不是數字,會被視為錯誤元素而被忽略;不支援多維掩碼。雙參數數字形式的特徵:只有負碼會禁用過濾器,數字 0xFFFF 被認為是文字代碼,通常找不到任何人。
  • distance — 單元格中的水平半徑(含):5 允許距離 0..5。距離為 max(abs(dx),abs(dy)),因此相鄰對角線也是 1。預設情況下或如果數字為負數,則採用UO.FindDistance()而非無限搜尋。 0 留下相同的 X/Y 單元。不是路線的長度;此參數不檢查障礙物和地板。
  • nearest - false/0 預設:世界枚舉順序中的第一個匹配,不保證最接近或更小的ID。 true/1:最接近,若相等,則較小serial。
  • maxZ — 最大絕對值(目標的 Z - 自己角色的 Z),包含在內,以世界 Z 單位表示。這不是樓層數或 X/Y 單元格數。 maxZ=4 與 Z 玩家10 允許 Z 目標 6..14;0 要求高度完全相同。預設情況下/對於負數,採用UO.FindVertical()。在樓梯上,相等的 Z 可以消除所需的目標。即使 Z 值有很小的差異也不能證明地板的可及性。
  • color — mobile 本身的色調:int 或數字/十六進位字串。負數(預設為-1)和0xFFFF - 任何hue; 0 恰好是 hue 0,而不是任何值。不是惡名昭彰的顏色或衣服的顏色。此參數不檢查所配戴物品的顏色。
  • container - 預設情況下不存在:世界。當指定時,ground/"ground"/UO.Ground()、數字0/1和-1/"my"在此特定命令中可接受作為兼容的世界名稱。顯式 serial 容器或“backpack”返回 0:容器內沒有移動設備。不添加搜尋東西。

傳回值

int — serial 已選擇 mobile 或者 0,如果沒有合適的。這 ID,而不是 graphic/type,找到的物體數量或 true/false:使用 if (找到!= 0) { ... }, 找到 == true。成立 ID 可以轉移 UO.AddObject, UO.Attack 或者 UO.Follow,但是每個遊戲動作都是單獨調用的。

行為

  • 搜尋僅讀取客戶端已下載的手機;已銷毀的記錄和 Ignore 被排除在外。呼叫本身不打開目標,不攻擊,不去目標,也不向伺服器請求遠端物件。
  • 距離是幾何 max(abs(dx),abs(dy)),而不是路線長度。鄰近並不能保證沒有牆壁或可以到達另一層樓。返回時情況可能會改變。
  • 生命、隱身和視線不會自動檢查。如果它們很重要,請將 GetMobiles 與 aliveOnly/visibleOnly 或您自己的支票一起使用。擁有敵方狀態的伺服器並不能使任何NPC符合資格。
  • 從2到7爭論。要傳輸maxZ,您需要指定之前的距離和最近的距離。對於此指令中的多個惡名,請在第二個參數中使用單一遮罩「5|6」或平面數組;第三個參數是距離,而不是第二個狀態。
  • 形式上的一個重要區別:兩個帶有 NUMERIC 臭名昭著的參數調用bridge.FindNotoriety,丟棄舊的FindItem/FindCount/GetFoundItems並記錄所有匹配。兩個 STRING/ARARY 參數以及任何帶有 3..7 參數的形式,僅傳回 ID,保留相同的 Find* 欄位。不要將 FindCount 視為擴充查詢的結果。
  • 所有形式均排除self和Ignore,使用极限Z;实时/可见过滤器且无视线。沒有匹配項回傳0。不可读的type/距离/maxZ/颜色会导致转换错误。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

object? result = UO.FindNotoriety(0x0190, 5);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。計算具有敵人聲望的男性和女性 - 直接腳本

參數與執行流程:

  • 0x0190(400)是男性人體,0x0191(401)是女性人體。 5 - 敵人。每個呼叫接收一個body;此位置不支援字串 0x0190|0x0191。使用當前的FindDistance/FindVertical。
  • 第二次呼叫後,FindItem/FindCount/GetFoundItems僅指女性身體;第一個數量儲存在menCount中。回歸的男/女是第一個serial或0,而不是數字。具有此類機構的NPC也可以包含在結果中;鬼族和其他種族不屬於這兩個body。
var man = UO.FindNotoriety(0x0190, 5);
var menCount = UO.FindCount();
var woman = UO.FindNotoriety(0x0191, 5);
var womenCount = UO.FindCount();
UO.Print("Male humans: " + Convert.ToString(menCount));
UO.Print("Female humans: " + Convert.ToString(womenCount));
UO.Print("Total humans: " + Convert.ToString(menCount + womenCount));

2。兩個高度限制狀態中最接近的一個 - 腳本函數

參數與執行流程:

  • -第一個參數中的1 — 任何主體; -第六個1 - 任何hue。 ground - 和平。 FindCount 自此表格以來尚未更新;使用發現。
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindNotoriety(-1, "5|6", 12, true, 4, -1, "ground");
    if (Truth(found != 0))
    {
        UO.AddObject("near_enemy", found);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。第二個參數中的狀態數組 - 場景類

參數與執行流程:

  • 該數組包含兩個代碼。缺少尾部參數意味著當前半徑/Z,最近=false,以及任何hue。這不是條目 UO.FindNotoriety(type,5,6):6 將是半徑。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        dynamic[] allowed = new dynamic[checked((int)(1) + 1)];
        allowed[0] = 5;
        allowed[1] = 6;
        var found = UO.FindNotoriety(0x0191, allowed);
        if (Truth(found != 0))
        {
            UO.AddObject("allowed_mobile", found);
            UO.Print("Selected ID: " + Convert.ToString(found));
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.FindNotoriety(type, notoriety) — UO.FindNotoriety(Any,Any)

參數: type (Any), notoriety (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance) — UO.FindNotoriety(Any,Any,Any)

參數: type (Any), notoriety (Any), distance (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest) — UO.FindNotoriety(Any,Any,Any,Any)

參數: type (Any), notoriety (Any), distance (Any), nearest (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest, maxZ) — UO.FindNotoriety(Any,Any,Any,Any,Any)

參數: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color) — UO.FindNotoriety(Any,Any,Any,Any,Any,Any)

參數: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindNotoriety(type, notoriety, distance, nearest, maxZ, color, container) — UO.FindNotoriety(Any,Any,Any,Any,Any,Any,Any)

參數: type (Any), notoriety (Any), distance (Any), nearest (Any), maxZ (Any), color (Any), container (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => new InjectionValue(CompactFindNotoriety(values))

UO.FindQuantity

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

C# 簽章

dynamic UO.FindQuantity();

讀取第一個搜尋結果中的目前數量。

參數

沒有參數。

傳回值

int - serial FindItem、1(對於現有角色)、0(對於遺失/刪除的物件)的項目的目前數量。其他找到的堆疊不累積。與FindFullQuantity不同,呼叫時從目前物件讀取數量。

行為

  • 該數據屬於該腳本最後一次正常搜尋的數據。 FindType 與 1–5 參數、FindTypeEx、Count/CountEx/CountGround 替換結果。更改此快照不需要高級過濾字元命令。
  • 沒有匹配項的新搜尋將清除 FindItem、FindCount 和 FindFullQuantity,並清除 GetFoundItems。單獨讀取結果不會觸發新的搜尋。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

UO.FindType(0x0EED, -1, "backpack");
object? result = UO.FindQuantity();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。測量黃金搜尋結果 - 直接腳本

參數與執行流程:

  • type=0x0EED – 金;顏色=-1 — 任何hue; backpack - 僅背包的直接內容以此形式FindType。
  • int - serial FindItem、1(對於現有角色)、0(對於遺失/刪除的物件)的項目的目前數量。其他找到的堆疊不累積。與FindFullQuantity不同,呼叫時從目前物件讀取數量。
var found = UO.FindType(0x0EED, -1, "backpack");
var value = UO.FindQuantity();
UO.Print(Convert.ToString(value));

2。比較項目和單位 - 腳本函數

參數與執行流程:

  • 所有四個讀取都屬於一次搜索,直到在其間調用另一次搜索。
  • 例如兩疊50:物品=2,第一疊=50,所有單位=100;第一個ID包含一個堆疊的唯一ID。
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindType(0x0EED, -1, "backpack");
    UO.Print("Items: " + Convert.ToString(UO.FindCount()));
    UO.Print("First stack: " + Convert.ToString(UO.FindQuantity()));
    UO.Print("All units: " + Convert.ToString(UO.FindFullQuantity()));
    UO.Print("First ID: 0x" + Hex(UO.FindItem()));
    return null;
}

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

3。儲存結果直到下一次搜尋 - 腳本類

參數與執行流程:

  • 第一個type是金,第二個0x0F7A是一種單獨類型的試劑。新團隊改變了整體鏡頭。
  • 保存的仍然是第一次搜尋的號碼。即使沒有匹配,第二個讀數也適用於試劑。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var found = UO.FindType(0x0EED, -1, "backpack");
        var saved = UO.FindQuantity();
        found = UO.FindType(0x0F7A, -1, "backpack");
        UO.Print("Saved: " + Convert.ToString(saved));
        UO.Print("Current: " + Convert.ToString(UO.FindQuantity()));
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.FindQuantity() — UO.FindQuantity()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "findquantity": return new InjectionValue(bridge.FindQuantity());

UO.FindType

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

C# 簽章

string UO.FindType(object? @type);
string UO.FindType(object? @type, object? color);
string UO.FindType(object? @type, object? color, object? container);
string UO.FindType(object? @type, object? color, object? container, object? range);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? recursive);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly);
string UO.FindType(object? @type, object? color, object? container, object? distance, object? notoriety, object? nearest, object? maxZ, object? mobileOnly, object? itemOnly, object? includeIgnored, object? includeSelf, object? aliveOnly, object? visibleOnly, object? nameMask);

在客戶端已下載的項目和字元中搜尋。您可以按類型、顏色、容器、距離和其他濾鏡進行搜尋。結果是所選物件的十六進位字串serial;空字串表示不符。此命令本身不會打開容器,不會拾取物品,也不會攻擊發現的目標。

參數

  • type - 一個 graphic 項或 body 字元:整數或數字字串。 0x0EED——金色;0x0190 (400) - 人類男性; 0x0191 (401) - 女性人類。 1 個type 0x0190 不包括0x0191。要列出兩種性別的字符,請使用 GetMobiles 和 body="0x0190|0x0191";掩碼不會傳遞給這個單一參數FindType。負值或 0xFFFF 會清除類型過濾器。
  • color - 色調/顏色:整數或數字字串。 -1或0xFFFF表示任何顏色; 0 - 特別是hue 0。雙參數形式的特徵:第二個位置的「ground」、「backpack」、「my」行選擇搜尋區域而不是顏色。 “my”可以繞過已載入的子容器。
  • container - 搜尋區域:「ground」 - 世界,「backpack」 - 背包的頂層,「my」 - 裝有簡短形式的子容器的背包;您也可以傳遞容器的serial或物件的保存名稱。容器不會自動開啟。參數的擴展形式 7–14 迭代給定容器的直接內容,且沒有遞歸標誌。
  • range — 四參數形式的第四個參數:單元格中的距離。負值使用通用設定FindDistance; 0 僅在同一單元格上留下匹配項。對於容器中的項目,會考慮容器在世界中的位置。
  • distance — 位置 4 處的單元格距離,以五個參數的形式。 -1使用FindDistance; 0 及更高的數字設定了明確的限制。這是搜尋半徑,而不是路線長度。
  • recursive - 僅五個參數形式的第五個參數:1/true - 也在加載的子容器中搜索,0/false - 僅頂層。這不是惡名。改為六參數形式會改變位置5的意思。
  • notoriety — 5 在參數形式 6–14 中的位置。角色聲望:0未知,1無辜,2盟友,3可攻擊,4罪犯,5敵人,6兇手,7敵。您可以傳遞數字、字串“3|6”或值數組。 -1、0xFFFF 或「any」停用過濾器。當過濾器處於活動狀態時,項目將被排除:它們沒有惡名。
  • nearest - 位置 6: 1/true - 選擇最接近的合適字符,並以擴展形式 7–14 — 任何允許類型中最接近的候選者;當使用等距離時 serial. 0/false 保留搜尋順序。在六參數形式中,在繼續尋找項目時使用正常的項目搜尋順序。
  • maxZ - 位置7:與自己角色的最大絕對高度差Z。 0—相同高度; -1需要FindVertical。對於容器內的物品,會檢查容器的高度。這不是樓層數。
  • mobileOnly — 位置8:1/true — 只留下角色和小怪; 0/false - 也允许物品。如果沒有爭論,false。
  • itemOnly — 位置 9: 1/true — 只剩下物體; 0/false - 也允許字元。如果丟失,false。同時 mobileOnly=true 和 itemOnly=true 給出空結果。
  • includeIgnored — 位置 10: 1/true — 允許來自 IgnoreList 的物件; 0/false - 排除它們。預設為false。 IgnoreList 指令本身不會改變。
  • includeSelf — 位置11: 1/true — 在候選人中允許自己的角色mobile; 0/false - 排除。預設為false。不影響物品。
  • aliveOnly - 位置 12: 1/true - 排除死字; 0/false - 允許兩種狀態。預設為false。此過濾器不檢查項目的運作狀況。
  • visibleOnly - 位置13:1/true - 需要正向檢查IsVisible;0/false - 不要使用它。預設為false。該命令仍然只適用於客戶端已知的物件。
  • nameMask — 位置14:名稱的文字部分,不區分大小寫。字串“orc|troll”允許這兩個匹配中的任何一個;分隔符號也可以是逗號和分號。空字串、「any」或「-1」將刪除過濾器。這是子字串搜索,而不是正規表示式或帶有 * 的遮罩。如果缺少參數,則過濾器被停用。

傳回值

string:例如「0x40001234」。如果什麼也沒找到-“”。透過與空字串比較來檢查結果。不要將其與找到的物件數量或到達物件的步驟數量混淆。

行為

  • 有些形式帶有 1–14 參數,但這不是帶有任意省略參數的長簽名。選擇準確的語法行;參數按位置傳遞。
  • 表單1–5使用正常搜尋並更新FindItem/FindCount/結果清單。對於6–14形式,直接使用傳回的字串:字元過濾是以單獨的方式完成的,並且不承諾更新這些共享值。
  • 對於簡短形式,預設搜尋是在世界範圍內,任何顏色,距離FindDistance,無遞歸。字串“my”是帶有子容器的背包的特殊簡寫形式。
  • 六參數形式首先尋找匹配的字元;在沒有惡名過濾器和合適的角色的情況下,搜尋物件是可能的。形式7–14組合已解析的候選者並應用附加過濾器。
  • 參數數量從五個到六個的變化尤其重要:遞歸被惡名取代,最近的成為第六個參數。位置 5 處的值 1 意味著無害的、非遞歸遍歷。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.FindType(0x0EED, -1, "backpack");
UO.Print("FindType: " + Convert.ToString(result));

1。在背包最頂層尋找金子並處理缺少結果-直接腳本

參數與執行流程:

  • 1: type=0x0EED - 尋找黃金。
  • 2:顏色=-1 — 任何hue。
  • 3:container=“backpack” - 僅背包中的直接內容。
  • gold 接收字串 serial。 gold="" 檢查將遺失的項目與找到的項目分開。 Info(金色)顯示訊息;金子不動。
var gold = UO.FindType(0x0EED, -1, "backpack");
if (Truth(gold == ""))
{
    UO.Print("Gold was not found in the loaded backpack");
}
else
{
    UO.Print("Gold serial: " + gold);
    UO.Info(gold);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。遞歸搜尋已載入背包中的物品 - 腳本函數

參數與執行流程:

  • 1:wantedType包含graphic0x0EED。
  • 2: -1 移除濾色鏡。
  • 3:「backpack」選擇根容器。
  • 4: -1 使用目前的FindDistance。
  • 5:遞歸=1可實現子容器的遍歷;這是一個五參數形式。伺服器尚未發送的封閉包的內容不會以這種方式載入。
  • AddObject 檢查結果後,才將找到的serial 儲存在名稱found_gold 下。
return  RunScenario();
 object? RunScenario()
{
    var wantedType = 0x0EED;
    var recursive = 1;
    var found = UO.FindType(wantedType, -1, "backpack", -1, recursive);
    if (Truth(found != ""))
    {
        UO.AddObject("found_gold", found);
        UO.Print("Saved object: " + found);
    }
    else
    {
        UO.Print("No matching item in loaded containers");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。找到最近的具有兩個聲譽之一的角色 - 場景類

參數與執行流程:

  • 1: body=-1 允許任何body。
  • 2:顏色=-1允許任何顏色。
  • 3:「ground」表示載入的世界物件。
  • 4:半徑=10 將距離限制為十個單元格。
  • 5:聲譽=“3|6” - 可攻擊或殺人犯。這是惡名,不是遞歸。
  • 6:最近=1要求您選擇最近的一個。聲譽過濾器排除項目。此範例僅顯示訊息,並不攻擊目標。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var body = -1;
        var radius = 10;
        var reputation = "3|6";
        var nearest = 1;
        var found = UO.FindType(body, -1, "ground", radius, reputation, nearest);
        if (Truth(found != ""))
        {
            UO.Print("Matching mobile: " + found);
            UO.Info(found);
        }
        else
        {
            UO.Print("No matching mobile within the radius");
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

4。所有十四個參數:具有合適名稱的即時可見生物 - 直接腳本

參數與執行流程:

  • 1 body=-1 和 2hue=-1 不限制型別和顏色。
  • 3scope="ground" - 在世界中搜尋; 4半徑=5 - 不超過五個單元格。
  • 5聲譽=-1允許任何惡名;6最接近=1選擇最近的一個。
  • 7 maxZ=16 允許最多 16 個單位的絕對高度差。
  • 8 mobileOnly=1 排除項目; 9itemOnly=0不禁止小怪。
  • 10 includeIgnored=0 保留IgnoreList的效果。
  • 11 includeSelf=0 排除您的角色。
  • 12 aliveOnly=1 和 13 visibleOnly=1 讓可見的候選者存活。
  • 14 names="orc|troll" 需要客戶端已知的名稱中的子字串 orc 或 troll。所有過濾器必須同時執行。
var body = -1;
var hue = -1;
var scope = "ground";
var radius = 5;
var reputation = -1;
var nearest = 1;
var maxZ = 16;
var mobileOnly = 1;
var itemOnly = 0;
var includeIgnored = 0;
var includeSelf = 0;
var aliveOnly = 1;
var visibleOnly = 1;
var names = "orc|troll";
var found = UO.FindType(body, hue, scope, radius, reputation, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, names);
if (Truth(found == ""))
{
    UO.Print("No loaded mobile satisfies every filter");
}
else
{
    UO.Print("Selected serial: " + found);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

5。背包搜尋的簡寫形式—腳本函數

參數與執行流程:

  • 1wantedType=0x0EED是金子。
  • 2 "my" 是一個特殊的二參數形式的字串:選擇一個背包,包括遞歸和任意顏色。這裡第二個參數不是hue。
  • 對於頂層,傳遞“backpack”而不是“my”;為了世界 - “ground”。相反,第二個位置的數字將是濾色器。
return  RunScenario();
 object? RunScenario()
{
    var wantedType = 0x0EED;
    var found = UO.FindType(wantedType, "my");
    if (Truth(found != ""))
    {
        UO.Print("Found in backpack or a loaded subcontainer: " + found);
    }
    else
    {
        UO.Print("Nothing found");
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.FindType(type) — UO.FindType(Any)

參數: type (Any)

結果: string / String.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public string FindType(InjectionValue type)

            => FindType(ResolveType(type));

UO.FindType(type, color) — UO.FindType(Any,Any)

參數: type (Any), color (Any)

結果: string / String.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public string FindType(InjectionValue type, InjectionValue color)

        {

            if (color.Kind == InjectionValueKind.String

                && (color.String.Equals("ground", StringComparison.OrdinalIgnoreCase)

                    || color.String.Equals("backpack", StringComparison.OrdinalIgnoreCase)

                    || color.String.Equals("my", StringComparison.OrdinalIgnoreCase)))

            {

                return FindType(ResolveType(type), -1, ConvertContainer(color), -1, color.String.Equals("my", StringComparison.OrdinalIgnoreCase));

            }



            return FindType(ResolveType(type), NumberConversions.ToInt(color), -1, -1, false);

        }

UO.FindType(type, color, container) — UO.FindType(Any,Any,Any)

參數: type (Any), color (Any), container (Any)

結果: string / String.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public string FindType(InjectionValue type, InjectionValue color, InjectionValue container)

            => FindType(type, color, container, new InjectionValue(-1));

UO.FindType(type, color, container, range) — UO.FindType(Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), range (Any)

結果: string / String.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public string FindType(InjectionValue type, InjectionValue color, InjectionValue container, InjectionValue range)

        {

            if (container.Kind == InjectionValueKind.String && container.String.Equals("my", StringComparison.OrdinalIgnoreCase))

                return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), true);

            else

                return FindType(ResolveType(type), NumberConversions.ToInt(color), ConvertContainer(container), NumberConversions.ToInt(range), false);

        }

UO.FindType(type, color, container, distance, recursive) — UO.FindType(Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), recursive (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values =>

                new InjectionValue(FindType(values[0], values[1], values[2], values[3], values[4]))

UO.FindType(type, color, container, distance, notoriety, nearest) — UO.FindType(Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values =>

                CompactFindType(values[0], values[1], values[2], values[3], values[4], values[5])

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ) — UO.FindType(Any,Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactFindTypeExtended(values)

UO.FindType(type, color, container, distance, notoriety, nearest, maxZ, mobileOnly, itemOnly, includeIgnored, includeSelf, aliveOnly, visibleOnly, nameMask) — UO.FindType(Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), container (Any), distance (Any), notoriety (Any), nearest (Any), maxZ (Any), mobileOnly (Any), itemOnly (Any), includeIgnored (Any), includeSelf (Any), aliveOnly (Any), visibleOnly (Any), nameMask (Any)

結果: string / String.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactFindTypeExtended(values)

UO.FindTypeEx

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

C# 簽章

int UO.FindTypeEx(object? objType, object? color, object? container, object? inSub);

在容器或地面上搜尋一種圖形和顏色並返回找到的一個 ID。

參數

  • objType - 圖形/body,而非serial 專案。 0..65534 - 特定圖形; -1 或 0xFFFF - 任意。該客戶端中的其他負面int也刪除了過濾器。
  • color — 色調,而非項目數。 0 - 未繪製的物件; -1 或0xFFFF - 任何hue。其他負片int也去掉濾色片。
  • container - 接地:UO.Ground()、0、-1、0xFFFFFFFF 或字串 ground。背包:繩子backpack或其serial。接受十進制/十六進制 serial 和名稱 AddObject。 my 選擇角色的整個庫存,包括裝備和附帶的袋子。未知名稱會導致腳本錯誤。檢查結果 serial:顯式 0 選擇地面。名稱 ground/backpack 比數字名稱更清晰,數字名稱在指令系列之間有所不同。
  • inSub - 強制true/false(1/0)。 false - 特定容器的直接內容; true – 也裝載嵌套袋。對地球來說,遞迴不會改變任何事。 my已經選擇了角色的所有裝備。

傳回值

int:serial本地遍歷順序中的第一個匹配; 0 如果沒有匹配項。不是graphic、計數、陣列或bool。檢查結果 != 0,而非結果 == true 或結果 == 1。堆疊被視為一個物件;移動設備 - 一個物體和一個單元。順序並不意味著緊密,並且不能保證搜尋之間的順序。

行為

  • 所有四個位置參數都是必要的。沒有可選參數。
  • Earth 使用此腳本的 FindDistance 和 FindVertical,排除 self 並包含適當的 Item 和 Mobile。在特定容器內搜尋不適用這些距離/高度限制。在這兩種情況下,Ignore和被破壞的物體都被排除在外。
  • 在旁路之前,FindItem、FindCount、FindFullQuantity 和GetFoundItems 被清除。然後他們與此搜尋相關;空搜尋留下零和一個空數組。 FindFullQuantity 總結了最大(1,金額)的項目,並透過 1 匯總了行動裝置。 FindQuantity 讀取目前數量FindItem。如果再次搜尋後仍然需要先前的列表,請儲存GetFoundItems。
  • 橋會遍歷裝載的物品一次,然後如果選擇了陸地,則移動。類型、顏色和至少一個容器必須相符。即使一個物件滿足多個條件,也只計算一次。每個組合都不會重複完整地遍歷世界。
  • 僅讀取客戶端收到的資料。容器未打開,地圖單元未加載,沒有傳輸。空的結果並不能證明伺服器上的箱子是空的。如果需要活動鏈接,請檢查Connected:搜尋本身會讀取本地狀態。
  • 第一個本地匹配存儲在這裡;未知名稱不會將搜尋切換到背包。 Ground也接受0;您的FindDistance預設18,最大255。這些都是這個客戶的特點。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print("FindTypeEx: " + Convert.ToString(result));

1。直接背包內容-直接腳本

參數與執行流程:

  • 0x0EED - 金幣,-1 - 任何hue; backpack/false 不包括嵌套袋。這三行以十六進位形式輸出第一個ID,不含0x、物件的數量、個數的總和。兩堆20和50:物件2,單元70。
var item = UO.FindTypeEx(0x0EED, -1, "backpack", false);
UO.Print(Hex(item));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2。全時地面搜尋功能 - 腳本功能

參數與執行流程:

  • 半徑=5和高度=10在FindGoldNearSelf內運行。最終即使在返回或錯誤時也恢復這兩個限制。函數回傳serial金幣或0;輸出前主要檢查 != 0。
return  RunScenario();
 object? RunScenario()
{
    var item = FindGoldNearSelf(5, 10);
    if (Truth(item != 0))
    {
        UO.Print(Hex(item));
    }
    else
    {
        UO.Print("Empty");
    }

    return null;
}

dynamic FindGoldNearSelf(dynamic radius, dynamic height)
{
    var oldDistance = UO.FindDistance();
    var oldVertical = UO.FindVertical();
    try
    {
        UO.FindDistance(radius);
        UO.FindVertical(height);
        return UO.FindTypeEx(0x0EED, -1, UO.Ground(), false);
    }
    finally
    {
        UO.FindDistance(oldDistance);
        UO.FindVertical(oldVertical);
    }
}

string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。容器名稱和嵌套包 - 腳本類

參數與執行流程:

  • GetSerial允许backpack;检查零可以防止随机接地选择。 AddObject 將 ID 儲存為 search_bag。 true 包括嵌套袋。 GetFoundItems 儲存一個單獨的陣列; IsObjectExists 每ID 都會重新檢查一次。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var bag = UO.GetSerial("backpack");
        if (Truth(bag != "0x00000000"))
        {
            UO.AddObject("search_bag", bag);
            UO.FindTypeEx(0x0EED, -1, "search_bag", true);
            var items = UO.GetFoundItems();
            foreach (var item in items)
            {
                if (Truth(UO.IsObjectExists(item)))
                {
                    UO.Print(Hex(item));
                }
            }
        }

        return null;
    }

    string Hex(object? value) => Convert.ToInt64(value).ToString("X");
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.FindTypeEx(objType, color, container, inSub) — UO.FindTypeEx(Any,Any,Any,Any)

參數: objType (Any), color (Any), container (Any), inSub (Any)

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "findtypeex": return new InjectionValue(bridge.FindType(ResolveType(arguments[0]), Arg(1), StealthContainer(2), -1, Arg(3) != 0));

UO.FindTypesArrayEx

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

C# 簽章

int UO.FindTypesArrayEx(object? objTypes, object? colors, object? containers, object? inSub);

在一次遍歷中,它會搜尋不同的圖形、顏色和容器,並返回找到的 ID。完整清單可透過GetFoundItems閱讀。

參數

  • objTypes - 圖形/body,而非serial 專案。 0..65534 - 特定圖形; -1 或 0xFFFF - 任意。該客戶端中的其他負面int也刪除了過濾器。
  • colors — 色調,而非項目數。 0 - 未繪製的物件; -1 或0xFFFF - 任何hue。其他負片int也去掉濾色片。
  • containers - 接地:UO.Ground()、0、-1、0xFFFFFFFF 或字串 ground。背包:繩子backpack或其serial。接受十進制/十六進制 serial 和名稱 AddObject。 my 選擇角色的整個庫存,包括裝備和附帶的袋子。未知名稱會導致腳本錯誤。檢查結果 serial:顯式 0 選擇地面。名稱 ground/backpack 比數字名稱更清晰,數字名稱在指令系列之間有所不同。
  • inSub - 強制true/false(1/0)。 false - 特定容器的直接內容; true – 也裝載嵌套袋。對地球來說,遞迴不會改變任何事。 my已經選擇了角色的所有裝備。

傳回值

int:serial本地遍歷順序中的第一個匹配; 0 如果沒有匹配項。不是graphic、計數、陣列或bool。檢查結果 != 0,而非結果 == true 或結果 == 1。堆疊被視為一個物件;移動設備 - 一個物體和一個單元。順序並不意味著緊密,並且不能保證搜尋之間的順序。

行為

  • 陣列已傳遞;單一值也被視為只有一個元素的陣列。宣告變數值[1]建立索引0和1:填入每個索引。類型和顏色是獨立的選項,而不是按索引配對。任何位置的“任何”遮罩或類型/顏色的空數組都會刪除此過濾器。一個空的容器陣列選擇角色的庫存。容器的重複和交叉不會重複ID。
  • 所有四個位置參數都是必要的。沒有可選參數。
  • Earth 使用此腳本的 FindDistance 和 FindVertical,排除 self 並包含適當的 Item 和 Mobile。在特定容器內搜尋不適用這些距離/高度限制。在這兩種情況下,Ignore和被破壞的物體都被排除在外。
  • 在旁路之前,FindItem、FindCount、FindFullQuantity 和GetFoundItems 被清除。然後他們與此搜尋相關;空搜尋留下零和一個空數組。 FindFullQuantity 總結了最大(1,金額)的項目,並透過 1 匯總了行動裝置。 FindQuantity 讀取目前數量FindItem。如果再次搜尋後仍然需要先前的列表,請儲存GetFoundItems。
  • 橋會遍歷裝載的物品一次,然後如果選擇了陸地,則移動。類型、顏色和至少一個容器必須相符。即使一個物件滿足多個條件,也只計算一次。每個組合都不會重複完整地遍歷世界。
  • 僅讀取客戶端收到的資料。容器未打開,地圖單元未加載,沒有傳輸。空的結果並不能證明伺服器上的箱子是空的。如果需要活動鏈接,請檢查Connected:搜尋本身會讀取本地狀態。
  • 第一個本地匹配存儲在這裡;未知名稱不會將搜尋切換到背包。 Ground也接受0;您的FindDistance預設18,最大255。這些都是這個客戶的特點。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.FindTypesArrayEx(new[] { 0x0EED }, new[] { -1 }, new[] { "backpack" }, false);
UO.Print("FindTypesArrayEx: " + Convert.ToString(result));

1。地上兩張圖——直接腳本

參數與執行流程:

  • 类型包含金色0x0EED和黑珍珠0x0F7A;一种颜色=-1 - 任何hue,一种Ground - 地球。 false 不會改變地球上的任何東西。目前的搜尋限制適用。 ID,輸出物體數量和單位總和。
dynamic[] types = new dynamic[checked((int)(1) + 1)];
types[0] = 0x0EED;
types[1] = 0x0F7A;
dynamic[] colors = new dynamic[checked((int)(0) + 1)];
colors[0] = -1;
dynamic[] containers = new dynamic[checked((int)(0) + 1)];
containers[0] = UO.Ground();
var first = UO.FindTypesArrayEx(types, colors, containers, false);
UO.Print(Hex(first));
UO.Print(Convert.ToString(UO.FindCount()));
UO.Print(Convert.ToString(UO.FindFullQuantity()));

string Hex(object? value) => Convert.ToInt64(value).ToString("X");

2。背包裡和地上的金子——腳本功能

參數與執行流程:

  • 類型 - 僅金;顏色 - 任意 hue。貨櫃 - backpack 和陸運; true 包括嵌套袋。來自兩個區域的物件/堆疊和單元均被輸出,每個物件被計數一次。
return  RunScenario();
 object? RunScenario()
{
    dynamic[] types = new dynamic[checked((int)(0) + 1)];
    types[0] = 0x0EED;
    dynamic[] colors = new dynamic[checked((int)(0) + 1)];
    colors[0] = -1;
    dynamic[] containers = new dynamic[checked((int)(1) + 1)];
    containers[0] = "backpack";
    containers[1] = UO.Ground();
    UO.FindTypesArrayEx(types, colors, containers, true);
    UO.Print(Convert.ToString(UO.FindCount()));
    UO.Print(Convert.ToString(UO.FindFullQuantity()));
    return null;
}

3。帶有結果清單的完整功能 - 腳本類

參數與執行流程:

  • SearchTypesIn(container,firstType,secondType) 回傳一個 Array,而內建指令回傳單一 int ID。上面的完整函數填入數組,遞歸搜尋並立即複製GetFoundItems。 Main檢查每個儲存的ID並輸出它。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = SearchTypesIn("backpack", 0x0EED, 0x0F7A);
        foreach (var item in items)
        {
            if (Truth(UO.IsObjectExists(item)))
            {
                UO.Print(Hex(item));
            }
        }

        return null;
    }

    dynamic SearchTypesIn(dynamic container, dynamic firstType, dynamic secondType)
    {
        dynamic[] types = new dynamic[checked((int)(1) + 1)];
        types[0] = firstType;
        types[1] = secondType;
        dynamic[] colors = new dynamic[checked((int)(0) + 1)];
        colors[0] = -1;
        dynamic[] containers = new dynamic[checked((int)(0) + 1)];
        containers[0] = container;
        UO.FindTypesArrayEx(types, colors, containers, true);
        return UO.GetFoundItems();
    }

    string Hex(object? value) => Convert.ToInt64(value).ToString("X");
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.FindTypesArrayEx(objTypes, colors, containers, inSub) — UO.FindTypesArrayEx(Any,Any,Any,Any)

參數: objTypes (Any), colors (Any), containers (Any), inSub (Any)

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "findtypesarrayex":

                    InjectionValue[] searchContainers = arguments[2].Kind == InjectionValueKind.Array

                        ? arguments[2].Array : new[] { arguments[2] };

                    return new InjectionValue(bridge.FindTypes(arguments[0].Kind == InjectionValueKind.Array

                        ? arguments[0].Array.Select(ResolveType).ToArray() : new[] { ResolveType(arguments[0]) }, ArrayArg(1),

                        searchContainers.Select(ConvertClientSearchContainer).ToArray(), Arg(3) != 0));

UO.FindVertical

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

C# 簽章

int UO.FindVertical();
void UO.FindVertical(object? value);

讀取或修改預設搜尋中允許的高度差。

參數

  • value - 可選int。不帶爭論——閱讀;值——設定。值限制在0..120範圍內;負數變為0而非無限制。在新的運行時中:2;恢復的狀態可能包含不同的值。小數被截斷為零;數字字串 double/0x 也是可接受的。使用int來避免隱式轉換。

傳回值

不含參數:int - 目前限制(世界單位Z的差異),未找到ID,物件數量或bool。 0的意思是零極限,不是失敗。有值:void——無值;這不是 true/false 或舊設定。安裝後,讀取FindVertical()以找出儲存的值。

行為

  • 高度:abs(object.Z - player.Z),雙向,包括邊框。對於0,只有相同的 Z 才適用。這不是樓層數或水平單元數。
  • 該設定儲存在目前腳本的執行時間;它的過程使用單一值。獨立的運行時有單獨的設定。讀取和寫入不會觸發搜尋、清除FindItem/FindCount/GetFoundItems、傳送封包、移動角色或載入遠端物件。
  • FindTypeEx 和 FindTypesArrayEx 在地面搜尋時使用這些限制,但不在容器內搜尋。其餘過濾器是type、hue、Ignore 以及是否存在已載入物件。 FindAtCoord 忽略這兩個限制。在擴展命令中,明確距離/maxZ可以覆蓋設定;此類參數中的 -1 表示採用該設置,而不是將設定本身設為 -1。 FindList 在搜尋容器時也會過濾Z;指定的容器例外不適用於它。
  • 在臨時搜尋之前,請儲存該值並將其恢復到Finally。安裝不會自動取消。最後可以正常完成並捕捉腳本錯誤;緊急停止不能用作清潔機制。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

var result = UO.FindVertical();
UO.Print("FindVertical: " + Convert.ToString(result));

1。讀取、設定和範圍限制 - 直接腳本

參數與執行流程:

  • previous 儲存實際設定。 value:=10 設定正常限值; 1000 顯示120 的極限。 Print 將結果作為不帶參數的單獨呼叫讀取。終於恢復以前的樣子了。
var previous = UO.FindVertical();
try
{
    UO.FindVertical(10);
    UO.Print(Convert.ToString(UO.FindVertical()));
    UO.FindVertical(1000);
    UO.Print(Convert.ToString(UO.FindVertical()));
}
finally
{
    UO.FindVertical(previous);
}

2。臨時地面搜尋 - 腳本功能

參數與執行流程:

  • previous 保存呼叫程式碼的設定。 10僅改FindVertical;第二個限制不變。 0x0EED - 金色圖形,-1 - 任何 hue,Container=-1 - 世界,false - 無容器遞歸。 id - 一個serial; != 0 檢查可用性。 FindCount 計算整個物件/堆疊。最後恢復設置,而不是結果列表。
return  RunScenario();
 object? RunScenario()
{
    var previous = UO.FindVertical();
    try
    {
        UO.FindVertical(10);
        var id = UO.FindTypeEx(0x0EED, -1, -1, false);
        if (Truth(id != 0))
        {
            UO.Print(Hex(id) + ":" + Convert.ToString(UO.FindCount()));
        }
        else
        {
            UO.Print("0");
        }
    }
    finally
    {
        UO.FindVertical(previous);
    }

    return null;
}

string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。全功能CountGroundInRange——腳本類

參數與執行流程:

  • CountGroundInRange(graphic,半徑,高度)儲存兩個限制,設定半徑=5和高度=10,找出graphic=0x0EED並回傳FindCount()。堆疊被視為一個物件。完整的函數在Main之後給出。最後,即使透過返回退出,也會恢復這兩個限制;搜尋結果仍然可用。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var count = CountGroundInRange(0x0EED, 5, 10);
        UO.Print(Convert.ToString(count));
        return null;
    }

    dynamic CountGroundInRange(dynamic graphic, dynamic radius, dynamic height)
    {
        var oldDistance = UO.FindDistance();
        var oldVertical = UO.FindVertical();
        try
        {
            UO.FindDistance(radius);
            UO.FindVertical(height);
            UO.FindTypeEx(graphic, -1, -1, false);
            return UO.FindCount();
        }
        finally
        {
            UO.FindDistance(oldDistance);
            UO.FindVertical(oldVertical);
        }
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.FindVertical() — UO.FindVertical()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "findvertical":

                    if (arguments.Length > 0) { bridge.SetFindVertical(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(bridge.GetFindVertical());

UO.FindVertical(value) — UO.FindVertical(Any)

參數: value (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "findvertical":

                    if (arguments.Length > 0) { bridge.SetFindVertical(Arg(0)); return InjectionValue.Unit; }

                    return new InjectionValue(bridge.GetFindVertical());

UO.GetFindedList

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

C# 簽章

dynamic UO.GetFindedList(object? userList);

建立上次正常搜尋的清單ID的副本。

參數

  • userList — 必需的相容性參數。在目前的實作中,它沒有被填入或修改:列表作為命令的結果傳回。你可以透過0。對於不帶參數的形式,請使用 GetFoundItems。

傳回值

Array 是按最后搜索顺序排列的单独数组 serial/ID。如果沒有符合項,則為空數組。不包含 graphic、hue 或金額。更改返回的数组不会编辑已保存的搜索列表。

行為

  • 讀取客戶端已經下載的資料。該命令不會開啟容器、移動項目或從整個伺服器下載物件。
  • 陣列 - 索引從 0 開始的陣列。保存在var,訪問前檢查ArrayLength。拍攝快照後,元素可能會從世界中消失:在採取行動之前檢查Exists(serial)。
  • 該數據屬於該腳本最後一次正常搜尋的數據。 FindType 與 1–5 參數、FindTypeEx、Count/CountEx/CountGround 替換結果。更改此快照不需要高級過濾字元命令。
  • 沒有匹配項的新搜尋將清除 FindItem、FindCount 和 FindFullQuantity,並清除 GetFoundItems。單獨讀取結果不會觸發新的搜尋。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

UO.FindType(0x0EED, -1, "backpack");
object? result = UO.GetFindedList(0);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。取得清單大小 - 直接腳本

參數與執行流程:

  • 背包裡常見的黃金FindType是預先製作好的。 UserList=0 不是輸出參數。
  • 長度 - 記錄數/ID。這不是堆疊中的金額數量。空列表給出0。
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFindedList(0);
UO.Print(Convert.ToString(ArrayLength(items)));

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2。遍歷所有找到的ID——腳本函數

參數與執行流程:

  • 背包裡常見的黃金FindType是預先製作好的。 UserList=0 不是輸出參數。
  • items[i] — 數字 serial。十六進制僅用於輸出。循環不存取最後一個索引。
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindType(0x0EED, -1, "backpack");
    var items = UO.GetFindedList(0);
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。讀取前檢查第一筆記錄 - 腳本類

參數與執行流程:

  • 背包裡常見的黃金FindType是預先製作好的。 UserList=0 不是輸出參數。
  • 檢查兩個不同的事情:快照中的記錄和物件現在是否存在。沒有明確排序的順序並不意味著接近。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var found = UO.FindType(0x0EED, -1, "backpack");
        var items = UO.GetFindedList(0);
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.GetFindedList(userList) — UO.GetFindedList(Any)

參數: userList (Any)

結果: dynamic / Any.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "getfindedlist":

                    return new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray());

UO.GetFoundItems

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

C# 簽章

dynamic UO.GetFoundItems();

建立上次正常搜尋的清單ID的副本。

參數

沒有參數。

傳回值

Array 是按最后搜索顺序排列的单独数组 serial/ID。如果沒有符合項,則為空數組。不包含 graphic、hue 或金額。更改返回的数组不会编辑已保存的搜索列表。

行為

  • 讀取客戶端已經下載的資料。該命令不會開啟容器、移動項目或從整個伺服器下載物件。
  • 陣列 - 索引從 0 開始的陣列。保存在var,訪問前檢查ArrayLength。拍攝快照後,元素可能會從世界中消失:在採取行動之前檢查Exists(serial)。
  • 該數據屬於該腳本最後一次正常搜尋的數據。 FindType 與 1–5 參數、FindTypeEx、Count/CountEx/CountGround 替換結果。更改此快照不需要高級過濾字元命令。
  • 沒有匹配項的新搜尋將清除 FindItem、FindCount 和 FindFullQuantity,並清除 GetFoundItems。單獨讀取結果不會觸發新的搜尋。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

UO.FindType(0x0EED, -1, "backpack");
object? result = UO.GetFoundItems();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。取得清單大小 - 直接腳本

參數與執行流程:

  • 背包裡常見的黃金FindType是預先製作好的。沒有參數。
  • 長度 - 記錄數/ID。這不是堆疊中的金額數量。空列表給出0。
var found = UO.FindType(0x0EED, -1, "backpack");
var items = UO.GetFoundItems();
UO.Print(Convert.ToString(ArrayLength(items)));

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2。遍歷所有找到的ID——腳本函數

參數與執行流程:

  • 背包裡常見的黃金FindType是預先製作好的。沒有參數。
  • items[i] — 數字 serial。十六進制僅用於輸出。循環不存取最後一個索引。
return  RunScenario();
 object? RunScenario()
{
    var found = UO.FindType(0x0EED, -1, "backpack");
    var items = UO.GetFoundItems();
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。讀取前檢查第一筆記錄 - 腳本類

參數與執行流程:

  • 背包裡常見的黃金FindType是預先製作好的。沒有參數。
  • 檢查兩個不同的事情:快照中的記錄和物件現在是否存在。沒有明確排序的順序並不意味著接近。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var found = UO.FindType(0x0EED, -1, "backpack");
        var items = UO.GetFoundItems();
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.GetFoundItems() — UO.GetFoundItems()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "getfounditems":

                    return new InjectionValue(bridge.GetFoundItems().Select(serial => new InjectionValue(serial)).ToArray());

UO.GetIgnoreList

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

C# 簽章

dynamic UO.GetIgnoreList();

顯示透過 Ignore 新增至 serial 過濾器的特定 ID。幫助檢查哪些項目已被處理並排除在重新搜尋之外。 AddIgnoreList 中的命名規則 type/hue 不包含在此陣列中。

參數

沒有參數。

傳回值

陣列 - 來自Ignore列表的serial,依數字ID升序排列。當列表為空時清空數組。 ID可能不再存在於世界上;這些是搜尋規則,而不是可見項目的清單。

行為

  • 讀取客戶端已經下載的資料。該命令不會開啟容器、移動項目或從整個伺服器下載物件。
  • 陣列 - 索引從 0 開始的陣列。保存在var,訪問前檢查ArrayLength。拍攝快照後,元素可能會從世界中消失:在採取行動之前檢查Exists(serial)。
  • 在用戶端中,該集屬於設定檔腳本的一般狀態。此陣列為副本:IgnoreOff(serial) 清除一個異常,IgnoreReset 清除所有serial。他們不會禁用所選規則type/hue;他們需要SelectIgnoreList、DeleteIgnoreList或ClearIgnoreList。不含參數的GetContent/GetEquipment和GetWorldItems本身不應用此過濾器。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

object? result = UO.GetIgnoreList();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。取得清單大小 - 直接腳本

參數與執行流程:

  • 沒有參數;讀取明顯的serial異常的快照。空數組並不意味著命名規則type/hue丟失。
  • 長度 - 記錄數/ID。這不是堆疊中的金額數量。空列表給出0。
var items = UO.GetIgnoreList();
UO.Print(Convert.ToString(ArrayLength(items)));

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2。遍歷所有找到的ID——腳本函數

參數與執行流程:

  • 沒有參數;讀取明顯的serial異常的快照。空數組並不意味著命名規則type/hue丟失。
  • items[i] — 數字 serial。十六進制僅用於輸出。循環不存取最後一個索引。
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetIgnoreList();
    var i = 0;
    while (Truth(i < ArrayLength(items)))
    {
        UO.Print("0x" + Hex(items[i]));
        i = i + 1;
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。讀取前檢查第一筆記錄 - 腳本類

參數與執行流程:

  • 沒有參數;讀取明顯的serial異常的快照。空數組並不意味著命名規則type/hue丟失。
  • 檢查兩個不同的事情:快照中的記錄和物件現在是否存在。沒有明確排序的順序並不意味著接近。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = UO.GetIgnoreList();
        if (Truth(ArrayLength(items) > 0))
        {
            var first = items[0];
            if (Truth(UO.Exists(first)))
            {
                UO.Print(UO.GetName(first));
            }
        }
        else
        {
            UO.Print("Empty list");
        }

        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.GetIgnoreList() — UO.GetIgnoreList()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "getignorelist":

                    return new InjectionValue(bridge.GetIgnoreList().Select(value => new InjectionValue(value)).ToArray());

UO.GetWorldItems

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

C# 簽章

dynamic UO.GetWorldItems();
dynamic UO.GetWorldItems(object? @type);
dynamic UO.GetWorldItems(object? @type, object? color);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest);
dynamic UO.GetWorldItems(object? @type, object? color, object? distance, object? container, object? nearest, object? maxZ);

返回世界專案或選定容器的陣列ID。

參數

  • type - 濾波形式的第一個參數:graphic/type、-1 或 0xFFFF - 任意。這不是serial。如果沒有所有參數,則使用不含過濾的單獨形式。
  • color——色調;預設 - 1,任何顏色。 0xFFFF 也接受任何 hue。
  • distance — 單元格中沿 X/Y 的半徑。負值或缺失使用 FindDistance;0表示同一個單元格。對於容器,檢查到容器的距離,而不是其內部 X/Y。
  • container - 預設接地。 ground、數字0/1及其字串皆已研磨。 backpack、my和數字-1是背包的直接內容。容器的序號/十六進位字串/別名 - 其直接內容; self 選擇父級為角色的項目。未知的名字和丟失的背包給了一個空數組,而不是土地。
  • nearest — 預設false。 true 依距離排序,然後按數字 serial 排序。對於一個容器,所有結果的距離是相同的。
  • maxZ — 相對於 self 的允許高度差。負值或缺失使用 FindVertical;0 要求高度相同。在容器中,取容器本身的高度。

傳回值

陣列 - serial/ID 項目,而非 type、座標或金額。沒有匹配項的空數組。 GetWorldItems() 返回容器外所有已加載的項目,不帶 Ignore/範圍/高度; GetWorldItems(type,...) 使用列出的過濾器和Ignore。 NPC/玩家不以任何形式包含在內。

行為

  • 讀取客戶端已經下載的資料。該命令不會開啟容器、移動項目或從整個伺服器下載物件。
  • 陣列 - 索引從 0 開始的陣列。保存在var,訪問前檢查ArrayLength。拍攝快照後,元素可能會從世界中消失:在採取行動之前檢查Exists(serial)。
  • 照片FindItem/FindCount/GetFoundItems不變。團隊不會打開容器或檢查封閉的袋子。
  • 要停用限制,-1 是不夠的:這是目前設定的選擇,而不是無限半徑。為所有加載的土地項目指定所需的非負距離/maxZ或使用不帶參數的形式。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。

object? result = UO.GetWorldItems();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。計算所有加載的土地項目 - 直接腳本

參數與執行流程:

  • 無參數:無過濾器的特殊形式。
  • 結果並不意味著所有地圖或伺服器項目。 Ignore 在這裡不適用。
var items = UO.GetWorldItems();
UO.Print(Convert.ToString(ArrayLength(items)));

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2。尋找最近的所需類型和顏色的堆疊 - 腳本函數

參數與執行流程:

  • type=0x0EED — 金色,顏色=-1 - 任何;距離=5, container=ground, nearest=true, maxZ=3.
  • 第一個條目是最接近匹配的不可忽略的項目;距離不會檢查牆壁或攜帶可及性。
return  RunScenario();
 object? RunScenario()
{
    var items = UO.GetWorldItems(0x0EED, -1, 5, "ground", true, 3);
    if (Truth(ArrayLength(items) > 0))
    {
        var item = items[0];
        if (Truth(UO.Exists(item)))
        {
            UO.Print("Nearest ID: 0x" + Hex(item));
        }
    }

    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。直接統計背包內容-腳本類

參數與執行流程:

  • 任type/顏色;my選擇背包。距離20和差值Z255是指容器。 false 保留原始順序。
  • 計算的是直接物品,而不是堆疊中的單位,也不是嵌套袋中的內容​​。如果沒有背包,則傳回一個空數組。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var items = UO.GetWorldItems(-1, -1, 20, "my", false, 255);
        UO.Print(Convert.ToString(ArrayLength(items)));
        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.GetWorldItems() — UO.GetWorldItems()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "getworlditems":

                    return new InjectionValue(bridge.GetWorldItems().Select(serial => new InjectionValue(serial)).ToArray());

UO.GetWorldItems(type) — UO.GetWorldItems(Any)

參數: type (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color) — UO.GetWorldItems(Any,Any)

參數: type (Any), color (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance) — UO.GetWorldItems(Any,Any,Any)

參數: type (Any), color (Any), distance (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance, container) — UO.GetWorldItems(Any,Any,Any,Any)

參數: type (Any), color (Any), distance (Any), container (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance, container, nearest) — UO.GetWorldItems(Any,Any,Any,Any,Any)

參數: type (Any), color (Any), distance (Any), container (Any), nearest (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactGetWorldItems(values)

UO.GetWorldItems(type, color, distance, container, nearest, maxZ) — UO.GetWorldItems(Any,Any,Any,Any,Any,Any)

參數: type (Any), color (Any), distance (Any), container (Any), nearest (Any), maxZ (Any)

結果: dynamic / Any.

呼叫時:

呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。

內部實作程式碼,不能作為獨立腳本執行。

values => CompactGetWorldItems(values)

UO.Ignore

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

C# 簽章

void UO.Ignore(object? objID);
void UO.Ignore(object? id, object? stateValue);

從正常搜尋忽略清單中新增或刪除serial。

參數

  • id — 序列/ID 物件:int,數字/十六進位字串或已建立的別名,例如「lasttarget」。這不是graphic/type。在採取行動之前檢查裝載的物體。
  • objID — 序列/ID 物件:int,數字/十六進位字串或已建立的別名,例如「lasttarget」。這不是graphic/type。在採取行動之前檢查裝載的物體。
  • stateValue — 可選模式。數字0關閉,非零開啟。 「off」、「false」(不區分大小寫)和「0」行被關閉;任何其他行包括。沒有模式參數 - 新增。

傳回值

void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。

行為

  • Ignore(id) 呼叫bridge.Ignore(serial),它將serial加到State.IgnoredSerials。 Ignore(id,stateValue) ​​選擇Ignore 或 Unignore。任何非空字串都不能被視為 true:列出的轉義詞將單獨處理。
  • 這是一個搜尋過濾器,而不是隱藏或刪除物件。 AddIgnoreList 類型的命名過濾器單獨儲存。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.Ignore");
UO.Ignore("lasttarget");

1。直接呼叫-直接腳本

參數與執行流程:

  • 從正常搜尋忽略清單中新增或刪除serial。
UO.Ignore("lasttarget");

2。明確選項 - 腳本函數

參數與執行流程:

  • Ignore(id) 呼叫bridge.Ignore(serial),它將serial加到State.IgnoredSerials。 Ignore(id,stateValue) ​​選擇Ignore 或 Unignore。任何非空字串都不能被視為 true:列出的轉義詞將單獨處理。
return  RunScenario();
 object? RunScenario()
{
    UO.Ignore("lasttarget", "off");
    return null;
}

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 這是一個搜尋過濾器,而不是隱藏或刪除物件。 AddIgnoreList 類型的命名過濾器單獨儲存。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var id = UO.GetSerial("lasttarget");
        if (Truth(UO.Exists(id)))
        {
            UO.Ignore(id, 1);
            UO.Print(UO.GetIgnoreList());
            UO.Ignore(id, 0);
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.Ignore(objID) — UO.Ignore(Any)

參數: objID (Any/Integer/String)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "ignore": bridge.Ignore(Arg(0)); return InjectionValue.Unit;

UO.Ignore(objID) — UO.Ignore(Integer)

參數: objID (Any/Integer/String)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public void Ignore(int id) => bridge.Ignore(id);

UO.Ignore(objID) — UO.Ignore(String)

參數: objID (Any/Integer/String)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public void Ignore(string id) => Ignore(GetObject(id));

UO.Ignore(id, stateValue) — UO.Ignore(Any,Any)

參數: id (Any), stateValue (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public void Ignore(InjectionValue id, InjectionValue stateValue)

        {

            int serial = GetObject(id);

            bool enabled = stateValue.Kind != InjectionValueKind.String

                ? NumberConversions.ToInt(stateValue) != 0

                : !stateValue.String.Equals("off", StringComparison.OrdinalIgnoreCase)

                    && !stateValue.String.Equals("false", StringComparison.OrdinalIgnoreCase)

                    && stateValue.String != "0";



            if (enabled)

                bridge.Ignore(serial);

            else

                bridge.Unignore(serial);

        }

UO.IgnoreOff

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

C# 簽章

void UO.IgnoreOff(object? objID);

從正常忽略清單中刪除一個serial。

參數

  • objID — 序列/ID 物件:int,數字/十六進位字串或已建立的別名,例如「lasttarget」。這不是graphic/type。在採取行動之前檢查裝載的物體。

傳回值

void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。

行為

  • Bridge.Unignore 從 State.IgnoredSerials 中刪除 ID。其他serial和命名的AddIgnoreList過濾器不會被清除;物品並沒有從世界上消失。
  • 搜尋過濾器的本機變更;資料包不發送。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.IgnoreOff");
UO.IgnoreOff(UO.GetSerial("lasttarget"));

1。直接呼叫-直接腳本

參數與執行流程:

  • 從正常忽略清單中刪除一個serial。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
    UO.IgnoreOff(id);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。明確選項 - 腳本函數

參數與執行流程:

  • Bridge.Unignore 從 State.IgnoredSerials 中刪除 ID。其他serial和命名的AddIgnoreList過濾器不會被清除;物品並沒有從世界上消失。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.GetSerial("self");
    if (Truth(UO.Exists(id)))
    {
        UO.IgnoreOff(id);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 搜尋過濾器的本機變更;資料包不發送。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        ApplyToLoaded(UO.GetSerial("lasttarget"));
        return null;
    }

    void ApplyToLoaded(dynamic id)
    {
        if (Truth(UO.Exists(id)))
        {
            UO.IgnoreOff(id);
        }
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.IgnoreOff(objID) — UO.IgnoreOff(Any)

參數: objID (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "ignoreoff": bridge.Unignore(Arg(0)); return InjectionValue.Unit;

UO.IgnoreReset

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

C# 簽章

void UO.IgnoreReset();

清除忽略的serial的正常清單。

參數

沒有參數。

傳回值

void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。

行為

  • Bridge.IgnoreReset 呼叫 State.IgnoredSerials.Clear。从此过滤器中删除所有serial,包括在整个桥接会话中由另一个搜索添加的内容。
  • 不清除命名的AddIgnoreList、刪除物件或重置FindType的結果。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.IgnoreReset");
UO.IgnoreReset();

1。直接呼叫-直接腳本

參數與執行流程:

  • 清除忽略的serial的正常清單。
UO.IgnoreReset();

2。明確選項 - 腳本函數

參數與執行流程:

  • Bridge.IgnoreReset 呼叫 State.IgnoredSerials.Clear。从此过滤器中删除所有serial,包括在整个桥接会话中由另一个搜索添加的内容。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.GetIgnoreList());
    UO.IgnoreReset();
    return null;
}

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 不清除命名的AddIgnoreList、刪除物件或重置FindType的結果。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.Ignore("lasttarget");
        UO.IgnoreReset();
        UO.Print(UO.GetIgnoreList());
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.IgnoreReset() — UO.IgnoreReset()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

public void IgnoreReset() => bridge.IgnoreReset();

UO.InfoFindList

C# 簽章

string UO.InfoFindList();

行為與結果

呼叫來源決定顯示方式:遊戲圖形聊天指令會開啟含欄位、數值、Ctrl+C 與捲動的表格。一般 C# 腳本只取得報告字串,不開視窗或目標游標,即使遊戲視窗已開啟亦然。僅能讀取用戶端已知資料。

圖形聊天中的無參數 Info 和 InfoTile 會要求選取目標。腳本中的 Info() 讀取最後物件目標或玩家;InfoTile() 讀取玩家腳下的地形。serial、type 和座標可指定物件或地塊。InfoTile(x,y,map) 的第三個參數是地圖編號。

參數

沒有參數。

在 C# Scripts IDE 設定前綴;# 僅為範例。參數以空白分隔,引號將文字保留為單一參數。id 是 serial,type 是 graphic。xy x y [z] 選擇該位置第一個已載入物件;只有 type 時選第一個符合物件。InfoTile(x,y,map) 第三個參數是地圖,不是 Z。

聊天指令

#infofindlist

完整 C# 範例

每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。

1

UO.Print(UO.InfoFindList());

2

string ReadDefinitions() => UO.InfoFindList();
UO.Print(ReadDefinitions());

3

string report = UO.InfoFindList();
foreach (string line in report.Split('\n'))
    UO.Print(line);

4

new CommandSample().Execute(UO);

sealed class CommandSample
{
    public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
    {
        api.Print(api.InfoFindList());
    }
}

內部呼叫

CSharpGameApi.InfoFindList
  -> CSharpScriptGlobals
  -> InjectionScript.Runtime.InjectionApiUO.InfoFindList
ClassicUOInjectionApiBridge -> YokoInfoReport -> YokoInfoGump


UO.MFGI

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

C# 簽章

void UO.MFGI();

列印目前搜尋結果清單。

參數

沒有參數。

傳回值

void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。

行為

  • ExecuteLegacyManualAlias 讀取 GetFoundItems,將每個 serial 格式化為 0xXXXXXXXX,並以「|」連接各行分隔符號。不執行新的搜尋;空列表給出空字串。
  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.MFGI");
UO.MFGI();

1。直接呼叫-直接腳本

參數與執行流程:

  • 列印目前搜尋結果清單。
UO.MFGI();

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteLegacyManualAlias 讀取 GetFoundItems,將每個 serial 格式化為 0xXXXXXXXX,並以「|」連接各行分隔符號。不執行新的搜尋;空列表給出空字串。
return  RunScenario();
 object? RunScenario()
{
    UO.FindType("0x0E21");
    UO.MFGI();
    return null;
}

3。完整的輔助函數 - 腳本類

參數與執行流程:

  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.MFGI();
        UO.Print(UO.GetArrayLength(UO.GetFoundItems()));
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.MFGI() — UO.MFGI()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "mfgi":

                    SystemMessage(string.Join(" | ", bridge.GetFoundItems().Select(id => $"0x{id:X8}")));

                    break;

UO.SelectIgnoreList

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

C# 簽章

void UO.SelectIgnoreList(object? list);

切換活動的命名搜尋過濾器。在不刪除已儲存的規則的情況下更改挖掘、排序和定位之間的例外集非常有用。該命令本身不執行搜尋。

參數

  • list — 任意非空名稱,例如「loot_skip」。該名稱不區分大小寫。這不是物品的名稱,不是serial容器的名稱,也不是FindList的名稱。空字串“”在這裡也是可以接受的:禁用命名規則。

傳回值

void - 無值。在沒有 var 結果 = 且沒有檢查 =true 的情況下在單獨的行上使用。此命令改變本機過濾器;不傳回項目數量,也不向伺服器發送任何內容。

行為

  • 不存在的名稱會選擇空過濾器。已故的AddIgnoreList這個名字將在接下來的搜索中開始行動。正常Ignore(serial)無論選擇如何都會繼續運作。
  • 命名清單包含規則graphic/type + hue,常規Ignore包含特定的serial。這些是不同的過濾器:當搜尋支援它們時,它們就會被組合起來。物件保持可見並可直接存取UseObject/MoveItem;這不是Hide或禁止行動。
  • 列表名稱不區分大小寫;邊緣空間被移除。一個命名清單處於活動狀態,最初是預設的。 AddIgnoreList 不會自動選擇它。 SelectIgnoreList("") 僅停用指定的過濾器。
  • 這些規則適用於新搜索,包括新增後上傳的項目。在新的搜尋之前,不會重新計算已接收到的陣列和先前的結果FindCount。除非您想排除所有內容,否則請勿選擇具有規則 -1,-1 的清單。
  • 考慮過濾器 FindType/FindTypeEx/FindTypesArrayEx, FindList, FindAtCoord, FindNotoriety, Count/CountEx 和擴展樣本 GetMobiles, GetWorldItems, UseType, WaitTarget, Attack/AttackNearest/FindMan. includeIgnored=true,如果提供的話,會繞過和 serial, 和 type/hue。完整列表 GetContent/GetEquipment, GetWorldItems() 沒有爭論和言語 FindMobile(人類,附近,...)不要使用這些規則。
  • GetIgnoreList 僅傳回明確新增的serial;指定清單的行不包含在此陣列中。 IgnoreReset 清除整個serial-過濾器,IgnoreOff(serial) 刪除一個serial-異常;命名的規則將被保留。不帶參數的ClearIgnoreList() 會清除兩個視圖。
  • 该状态属于客户端配置文件脚本的一般状态;该更改会影响具有此状态的其他脚本。這些設定包含在已儲存的快照中。更改规则后,另一个脚本已经可以使用之前拍摄的快照执行搜索 - 下一次搜索将看到更新。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.SelectIgnoreList");
UO.SelectIgnoreList("SORT");

1。切換排序模式-直接腳本

參數與執行流程:

  • SORT 和 sort 是一個列表。搜尋選擇第一個允許的背包物件;保存名稱並不會轉移它。
UO.AddIgnoreList("sort", 0x0EED);
UO.SelectIgnoreList("SORT");
var item = UO.FindType(-1, -1, "backpack");
if (Truth(item != ""))
{
    UO.AddObject("sort_candidate", item);
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

2。關閉規則type,保存規則集本身 - 腳本功能

參數與執行流程:

  • 空白行僅停用指定的過濾器。要稍後恢復它,請再次傳遞設定名稱。
return  RunScenario();
 object? RunScenario()
{
    UO.SelectIgnoreList("");
    var gold = UO.FindType(0x0EED, -1, "backpack");
    if (Truth(gold != ""))
    {
        UO.AddObject("gold_candidate", gold);
    }

    return null;
}

bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。選擇名稱後準備過濾器 - 腳本類

參數與執行流程:

  • 在加入規則之前後面是空的。添加後,即使金幣剛出現,也不會再通過下一次搜尋。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.SelectIgnoreList("later");
        UO.AddIgnoreList("later", 0x0EED);
        var item = UO.FindType(0x0EED, -1, "ground");
        if (Truth(item == ""))
        {
            UO.Print("Gold is excluded by the selected rule");
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.SelectIgnoreList(list) — UO.SelectIgnoreList(Any)

參數: list (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "selectignorelist": state.SelectedIgnoreList = Text(0).Trim(); break;

UO.SetBadLocation

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

C# 簽章

void UO.SetBadLocation(object? x, object? y);

將 X/Y 加入以下路線 MoveXY、NewMoveXY、MoveXYZ、PMove 和請求 GetPathArray/GetPathArray3D 的禁止單元格清單中。

參數

  • x — 排除單元格的世界 X。
  • y — 排除單元格的世界 Y。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;它不是 true/false 或步數。

行為

  • 鑰匙由X/Y、無卡和Z組成。座標必須是0..65535以內的整數;超出範圍會導致腳本錯誤。
  • 禁止適用於呼叫腳本的運行時。新的路由或請求會收到它的快照。已運行的路線會保存其快照,包括內部重新計算。更改清單後,開始新的路線。
  • 這不是地圖更改:正常的手動移動和其他運行路線不會受到此禁令。你可以離開原來的方塊,即使它被標記為禁止。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.SetBadLocation");
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());

1。從計算中排除相鄰單元格 - 直接腳本

參數與執行流程:

  • X/Y - 角色東邊的儲存格。
  • 如果可以遍歷,則返回另一個完整路徑;角色不動。
UO.SetBadLocation(UO.GetX() + 1, UO.GetY());
var path = UO.GetPathArray(UO.GetX() + 3, UO.GetY(), true, 0);
UO.Print(Convert.ToString(ArrayLength(path)));

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

2。新增兩個單元格 - 腳本函數

參數與執行流程:

  • 每次呼叫都會新增一對 X/Y。
  • 重複一對不會產生第二個單獨的禁令; Z 不是參數。
return  RunScenario();
 object? RunScenario()
{
    UO.SetBadLocation(1445, 1690);
    UO.SetBadLocation(1445, 1691);
    return null;
}

3。在相鄰單元格中設置已知障礙 - 場景類

參數與執行流程:

  • 將座標替換為真正無法通過的單元格。該命令設定本地路線數據,並且不會在世界中創建物件。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        int x = UO.GetX() + 1;
        int y = UO.GetY();
        UO.SetBadLocation(x, y);
        UO.Print($"Marked known blocked location: {x},{y}");
        return null;
    }
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.SetBadLocation(x, y) — UO.SetBadLocation(Any,Any)

參數: x (Any), y (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "setbadlocation":

                {

                    int x = Arg(0), y = Arg(1);

                    if (x < 0 || x > ushort.MaxValue || y < 0 || y > ushort.MaxValue)

                        throw new NativeSubrutineException("UO.SetBadLocation requires world X/Y in 0..65535.");

                    state.BadLocations.Add(x + "," + y);

                    return InjectionValue.Unit;

                }

UO.SetBadObject

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

C# 簽章

void UO.SetBadObject(object? objType, object? color, object? radius);

從以下路徑中排除並查詢由graphic和hue所選的載入世界物件周圍的單元格路徑。

參數

  • objType - 項目的圖形/type,0..65535。 0xFFFF 或 -1 允許任何型別。這不是serial特定實例。
  • color — 項目的色調,0..65535。 0xFFFF或-1允許任何顏色; 0 恰好意味著 hue 0。
  • radius — 單元內的半徑,0..255 包括在內。 0 排除項目單元格。 R 排除其周圍的方形 max(abs(dx),abs(dy)) <= R,包括對角線單元格。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;它不是 true/false 或步數。

行為

  • 需要參數。不適當的範圍會導致腳本錯誤,而不是靜默數字截斷。
  • 規則在目前運行時累積。組合匹配規則:最大半徑應用於一項。 ClearBadObjectList 刪除了所有這些規則。
  • 考慮使用 Container=0 載入的動態項目,包括用戶端可存取的門。此過濾器不會選擇容器內的項目、NPC 和地圖靜態資料。對於字元使用avoidMobiles,對於單一單元格使用SetBadLocation。
  • 當您啟動 MoveXY/NewMoveXY/MoveXYZ/PMove 或 GetPathArray/GetPathArray3D 時,將建立專案的規則和位置的快照。世界和清單的進一步改變不會改變這個快照;新的發射會收到新的資料。
  • 過濾器不會向伺服器發送任何內容,不會強制關閉的容器載入內容,也不會更改手動移動。 X/Y 規則沒有單獨的 Z 限制。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。

簡單範例

將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。

指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。

UO.Print("Calling UO.SetBadObject");
UO.SetBadObject(0x398C, 0xFFFF, 1);

1。繞過某種類型的物件 - 直接腳本

參數與執行流程:

  • ObjType=0x398C - 範例graphic:替換為伺服器上的障礙物類型。 Color=0xFFFF選擇任意顏色; Radius=1 消除每個匹配項周圍的 3×3 正方形。
  • NewMoveXY 向東移動 5 個單元格,X/Y 精確,步行,無回調,超時=5000 毫秒。 ok=1表示達到目標; 0 不確認繞過。
UO.SetBadObject(0x398C, 0xFFFF, 1);
var ok = UO.NewMoveXY(UO.GetX() + 5, UO.GetY(), true, 0, false, 0, 5000);
UO.Print(Convert.ToString(ok));

2。檢查路徑的顏色準確,無需移動 - 腳本功能

參數與執行流程:

  • Color=0x0044 僅選擇 hue,Radius=0 僅排除該項目所佔用的單元格。 ClearBadObjectList 刪除了先前的類型和顏色規則。
  • GetPathArray 回傳條目 [x,y,z],包括原點。空數組意味著在給定當前約束的情況下沒有完整路徑。角色仍留在原地。
return  RunScenario();
 object? RunScenario()
{
    UO.ClearBadObjectList();
    UO.SetBadObject(0x398C, 0x0044, 0);
    var path = UO.GetPathArray(UO.GetX() + 4, UO.GetY(), true, 0);
    UO.Print("Path records: " + Convert.ToString(ArrayLength(path)));
    return null;
}

int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;

3。暫時排除世界上任何物體的單元格 - 腳本類

參數與執行流程:

  • ObjType=-1 和 Color=-1 都是通配符。 Radius=0 排除所有加載的世界物品的單元格,但不排除 NPC 或袋子中的內容。
  • 清理適用於未來的請求。已接收到的路徑被保存;這是座標數組,而不是活動路線。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.SetBadObject(-1, -1, 0);
        var path = UO.GetPathArray(UO.GetX() + 2, UO.GetY(), true, 0);
        UO.ClearBadObjectList();
        UO.Print(Convert.ToString(ArrayLength(path)));
        return null;
    }

    int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}

命令實作

C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。

UO.SetBadObject(objType, color, radius) — UO.SetBadObject(Any,Any,Any)

參數: objType (Any), color (Any), radius (Any)

結果: void / Unit.

呼叫時:

內部實作程式碼,不能作為獨立腳本執行。

case "setbadobject":

                {

                    int type = ResolveType(arguments[0]), hue = Arg(1), radius = Arg(2);

                    if (type < -1 || type > ushort.MaxValue || hue < -1 || hue > ushort.MaxValue || radius < 0 || radius > byte.MaxValue)

                        throw new NativeSubrutineException("UO.SetBadObject requires type/color 0..65535 (or -1) and radius 0..255.");

                    state.BadObjects.Add(type + "," + hue + "," + radius);

                    return InjectionValue.Unit;

                }
⚠️ **GitHub.com Fallback** ⚠️