ZH TW UO Topic shops vendors - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

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

商店和供應商

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

購買、銷售、商店清單、延遲和個人商家價格。 AllPrice 和 MassPriceMove 使用其選項中指定的項目的 type。

買賣:程序

開啟完整目錄和範例

部分

主題 命令與解釋
Buy UO.Buy
Sell UO.Sell
AutoBuy UO.AutoBuy
AutoSell UO.AutoSell
Shop List UO.GetShopList · UO.ClearShopList · UO.Shop
Prices UO.GetPrice · UO.AllPrice · UO.MassPriceMove
VendorMenu UO.VendorMenu
SendShopReply UO.SendShopReply

所有主題命令

買/賣

UO.Buy · UO.Sell · UO.AutoBuy · UO.AutoBuyEx · UO.AutoSell · UO.Shop · UO.GetShopList · UO.ClearShopList · UO.VendorMenu · UO.SendShopReply

價格

UO.GetPrice · UO.AllPrice · UO.MassPriceMove

延誤

UO.GetAutoBuyDelay · UO.GetAutoSellDelay · UO.SetAutoBuyDelay · UO.SetAutoSellDelay

關於該主題的範例

每個命令卡都有幾個獨立的場景:直接程式碼、函數和類別。以下是精選的簡短場景;限制和全面分析是有可能的。

UO.AllPrice

參數、結果及所有場景

UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");

UO.MassPriceMove

參數、結果及所有場景

UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");

完整指令說明


UO.AllPrice

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

C# 簽章

void UO.AllPrice();
void UO.AllPrice(object? price);
void UO.AllPrice(object? price, object? @type);

將商品放入供應商的庫存後啟用自動價格輸入。团队本身不携带物品。首先打开模式,然后拖动项目。价格仅在相应的服务器请求后发送。第二个参数过滤项目的TYPE。

參數

  • price — 第一個參數是整個公開項目/堆疊的總價格,從 0 到 2147483647。 125表示價格125。 0 - 明顯零價格(如果伺服器允許則免費),無需關機。負值關閉此模式;建議使用不含參數的UO.AllPrice()。
  • type — 第二個可選參數是TYPE/從0到65535的圖形,數字或十六進位字串,例如0x0EED。 0 或缺席 - 任何類型。項目序號和物件名稱不合適。颜色未经过过滤。

傳回值

void:沒有價值。啟動 AllPrice 報告啟動。發送的價格行表示回應已發送,而不是接受伺服器確認的價格。

行為

  • 此模式適用於後續傳輸,直至關閉。在納入/轉移之前已待處理的價格請求不會自動填寫。不回應供應商/商店重命名請求。
  • 要求容器屬於客戶端已知的另一個角色/NPC。管理供應商的權利和價格的可接受性由伺服器檢查。角色的常規背包、地上的箱子和土地不會自動定價。
  • 對於標準供應商,無論客戶使用何種語言,都會識別 cliloc 1043303 價格請求。也支援以「鍵入價格」、「輸入價格」、「輸入價格」、「輸入價格」或「輸入價格」開頭的系統文字提示。留下未知邀請以供手動回應。
  • 支援ASCII和Unicode伺服器查詢。若邀請未在10秒內到達,延遲回覆將被取消。在批量傳輸期間,佇列也會停止。已發送的回覆將不會被撤回。
  • 其他TYPE商品沒有收到價格。如果啟用MassMove,則下次提交等待價格請求被處理;未知或不適當的請求會停止佇列以避免混淆項目。
  • AllPrice() 清除掛單價格並關閉模式。 TerminateAll()、退出、死亡或換牌也會重設自動價格。此命令不會更改已列出產品的價格。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。任何類型的後續項目均價 - 直接腳本

參數與執行流程:

  • Price=125 — 每件商品的總價格。 type 不存在:所有類型都適用。
  • 啟動後,手動將商品新增至供應商的庫存。客戶將以 125 回覆價格請求。每個後續項目都會收到相同的價格,直到它關閉。
  • Print僅類似於動作;此過程本身不傳輸任何內容。
UO.AllPrice(125);
UO.Print("Drop goods into your vendor inventory");

2。僅針對給定類型的自動定價 - 腳本函數

參數與執行流程:

  • salePrice 傳輸為價格=250。 itemType 作為type=0x0F7A 傳輸,而不是單獨產品的serial。
  • 價格250指的是顯示的整個堆疊。該命令不會將價格乘以其中的單位數量。
  • 其他類型仍然沒有自動回應。對於這些,請手動輸入價格或使用不同的過濾器包含 AllPrice。
return  RunScenario();
 object? RunScenario()
{
    var itemType = "0x0F7A";
    var salePrice = 250;
    UO.AllPrice(salePrice, itemType);
    return null;
}

3。免費明確公開項目 - 腳本類

參數與執行流程:

  • Price=0 — 將字串 0 作為價格傳送至伺服器。這並不是取消對話或關閉。
  • 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()
    {
        UO.AllPrice(0, "0x0F7A");
        return null;
    }
}

4。停用自動定價 - 直接腳本

參數與執行流程:

  • 無參數:模式關閉並刪除待處理的回應。
  • 伺服器已經設定的價格不會改變。用戶自己填寫下一個價格請求。

Shop 列表 / 買賣列表

Shop列表/買賣列表

UO.AllPrice();

命令實作

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

UO.AllPrice() — UO.AllPrice()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "allprice":

                    bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,

                        arguments.Length > 1 ? ResolveType(arguments[1]) : 0);

                    break;

UO.AllPrice(price) — UO.AllPrice(Any)

參數: price (Any)

結果: void / Unit.

呼叫時:

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

case "allprice":

                    bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,

                        arguments.Length > 1 ? ResolveType(arguments[1]) : 0);

                    break;

UO.AllPrice(price, type) — UO.AllPrice(Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "allprice":

                    bridge.AllPrice(arguments.Length > 0 ? NumberConversions.ToInt(arguments[0]) : -1,

                        arguments.Length > 1 ? ResolveType(arguments[1]) : 0);

                    break;

UO.AutoBuy

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

C# 簽章

void UO.AutoBuy(object? itemType, object? itemColor, object? quantity);

在目前設定檔Bad Newbie的主預設清單中建立、更新或刪除自動購買規則。團隊配置NPC-賣家報價的未來處理;不說買/賣,不開店,也不確認交易。完整程序:商店列表。

參數

  • itemType - 圖形產品0..65535:例如0x0F7A - 黑珍珠,0x0F51 - 匕首。這不是供應商/物品的serial,也不是角色的body。負數或大於65535的數將被拒絕。這裡0xFFFF是特定的graphic,不是所有商品的口罩。
  • itemColor — 產品色調:負數或 0xFFFF — 任意; 0 - 僅限未上漆的物品。對於精確的hue,請使用0..65534。請勿使用此範圍以外的顏色:正值將轉換為 ushort。必需的。
  • quantity — 每個商店報價收到的商品單位數量,而不是堆疊數量,也不是背包中所需的餘額。正值僅限於65535。 0/負數從Default中刪除匹配規則type+color;它不是「全部數量」。必需的。

傳回值

void - 無值。在單獨的一行上調用,不帶 var result = 且不帶 if。通話結束意味著設定結束,而不是交易成功。如果沒有設定檔或graphic無效,則不會建立規則;沒有錯誤的數值結果。透過背包內容、金幣以及伺服器回應來查看實際交易情況。

行為

  • 所有 3 參數都是必需的。這是一個規則設置,而不是一個等待函數。
  • 預設情況下,規則鍵為graphic,遮罩為hue。重複呼叫替換了該規則的數量等欄位;它不會在前一個限制之上添加另一個限制。如果沒有價格/名稱,先前對這些欄位的限制將被刪除。
  • 新的/更新的 Enabled=true 規則。一般的買/賣開關是根據規則的存在來設定的,並且設定檔被儲存。停用的預設清單本身不會自動啟用:必須在設定中啟用常規模式和清單。其他命名清單未更改。
  • 當貨物清單到達時,處理開始。该限制是在与一条规则匹配的行之间总共花费的。对于每个位置,使用第一个匹配的启用规则。当规则生效时,重新开业商店会提供新的优惠和新的限制。
  • 與 Bad Newbie 完全配合使用;在 Classic 中,此自動化功能已停用。請勿替換參數中的名稱NPC或已儲存清單的名稱。 AutoBuyEx 購買時添加價格/名稱過濾器; ClearShopList ​​完全重置這兩個自動化。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.AutoBuy");
UO.AutoBuy(0x0F7A, -1, 1);

1。準備購買一單位試劑-直接腳本

參數與執行流程:

  • 0x0F7A - graphic 試劑,而非 ID NPC。數量 - 1;顏色 - 任意。本表格未規定價格上限。腳本本身沒有說什麼,也沒有打開商店。該規則繼續適用於後續句子,直到您更改/停用它。
UO.AutoBuy(0x0F7A, -1, 1);

2。為一個商店報價設定試劑供應 - 腳本功能

參數與執行流程:

  • 20 - 最多一個商店回應,而不是「將數量增加到20」。 AutoBuy 沒有價格和名稱參數。如果需要的話,使用AutoBuyEx;其完整範例可在下面的連結中找到。物品、金錢和伺服器規則的缺乏決定了結果。
return  RunScenario();
 object? RunScenario()
{
    UO.AutoBuy(0x0F7A, 0, 20);
    return null;
}

3。刪除選定的規則而不重置其他清單 - 腳本類

參數與執行流程:

  • 助理接受graphic。僅刪除帶有AnyHue的預設規則;保留各個規則hue=0。這不會取消已傳送到伺服器的交易。若要刪除精確的顏色,請傳遞建立規則所使用的相同hue。

Shop 列表 / 買賣列表

Shop列表/買賣列表

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()
    {
        DisableReagentRule(0x0F7A);
        DisableReagentRule(0x0F84);
        return null;
    }

    void DisableReagentRule(dynamic itemType)
    {
        UO.AutoBuy(itemType, -1, 0);
    }
}

命令實作

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

UO.AutoBuy(itemType, itemColor, quantity) — UO.AutoBuy(Any,Any,Any)

參數: itemType (Any), itemColor (Any), quantity (Any)

結果: void / Unit.

呼叫時:

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

case "autobuy":

                    bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), 0, string.Empty); return InjectionValue.Unit;

UO.AutoBuyEx

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

C# 簽章

void UO.AutoBuyEx(object? itemType, object? itemColor, object? quantity, object? price, object? name);

在目前設定檔Bad Newbie的主預設清單中建立、更新或刪除自動購買規則。團隊配置NPC-賣家報價的未來處理;不說買/賣,不開店,也不確認交易。完整程序:商店列表。

參數

  • itemType - 圖形產品0..65535:例如0x0F7A - 黑珍珠,0x0F51 - 匕首。這不是供應商/物品的serial,也不是角色的body。負數或大於65535的數將被拒絕。這裡0xFFFF是特定的graphic,不是所有商品的口罩。
  • itemColor — 產品色調:負數或 0xFFFF — 任意; 0 - 僅限未上漆的物品。對於精確的hue,請使用0..65534。請勿使用此範圍以外的顏色:正值將轉換為 ushort。必需的。
  • quantity — 每個商店報價收到的商品單位數量,而不是堆疊數量,也不是背包中所需的餘額。正值僅限於65535。 0/負數從Default中刪除匹配規則type+color;它不是「全部數量」。必需的。
  • price — 一個單位的最高價格,而不是整個交易。 0/負 – 沒有價格上限。價格高於正限的產品可以通過。價格不在伺服器上交易或更改。必需的。
  • name — 產品名稱的子字串,不區分大小寫;邊緣空間被刪除,空行 - 無過濾器。這不是賣家的姓名或清單的名稱。例如,「Black Pearl」會檢查商店位置的文本,如果伺服器發送的正是這樣的名稱。必需的。

傳回值

void - 無值。在單獨的一行上調用,不帶 var result = 且不帶 if。通話結束意味著設定結束,而不是交易成功。如果沒有設定檔或graphic無效,則不會建立規則;沒有錯誤的數值結果。透過背包內容、金幣以及伺服器回應來查看實際交易情況。

行為

  • 所有 5 參數都是必需的。這是一個規則設置,而不是一個等待函數。
  • 預設情況下,規則鍵為graphic,遮罩為hue。重複呼叫替換了該規則的數量等欄位;它不會在前一個限制之上添加另一個限制。如果沒有價格/名稱,先前對這些欄位的限制將被刪除。
  • 新的/更新的 Enabled=true 規則。一般的買/賣開關是根據規則的存在來設定的,並且設定檔被儲存。停用的預設清單本身不會自動啟用:必須在設定中啟用常規模式和清單。其他命名清單未更改。
  • 當貨物清單到達時,處理開始。该限制是在与一条规则匹配的行之间总共花费的。对于每个位置,使用第一个匹配的启用规则。当规则生效时,重新开业商店会提供新的优惠和新的限制。
  • 與 Bad Newbie 完全配合使用;在 Classic 中,此自動化功能已停用。請勿替換參數中的名稱NPC或已儲存清單的名稱。 AutoBuyEx 購買時添加價格/名稱過濾器; ClearShopList ​​完全重置這兩個自動化。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.AutoBuyEx");
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");

1。準備購買一單位試劑-直接腳本

參數與執行流程:

  • 0x0F7A - graphic 試劑,而非 ID NPC。數量 - 1;顏色 - 任意。每單位價格上限5。腳本本身沒有說什麼,也沒有打開商店。該規則繼續適用於後續句子,直到您更改/停用它。
UO.AutoBuyEx(0x0F7A, -1, 1, 5, "");

2。為一個商店報價設定試劑供應 - 腳本功能

參數與執行流程:

  • 20 - 一家商店回應的最大值,而不是「將數量增加到20」。 5 — 每單位價格,「Black Pearl」 — 產品名稱的子字串。如果伺服器對試劑的呼叫不同,請變更過濾器或傳遞「」。物品、金錢和伺服器規則的缺乏決定了結果。
return  RunScenario();
 object? RunScenario()
{
    UO.AutoBuyEx(0x0F7A, 0, 20, 5, "Black Pearl");
    return null;
}

3。刪除選定的規則而不重置其他清單 - 腳本類

參數與執行流程:

  • 助理接受graphic。僅刪除帶有AnyHue的預設規則;保留各個規則hue=0。這不會取消已傳送到伺服器的交易。若要刪除精確的顏色,請傳遞建立規則所使用的相同hue。

Shop 列表 / 買賣列表

Shop列表/買賣列表

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()
    {
        DisableReagentRule(0x0F7A);
        DisableReagentRule(0x0F84);
        return null;
    }

    void DisableReagentRule(dynamic itemType)
    {
        UO.AutoBuyEx(itemType, -1, 0, 0, "");
    }
}

命令實作

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

UO.AutoBuyEx(itemType, itemColor, quantity, price, name) — UO.AutoBuyEx(Any,Any,Any,Any,Any)

參數: itemType (Any), itemColor (Any), quantity (Any), price (Any), name (Any)

結果: void / Unit.

呼叫時:

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

case "autobuyex":

                    bridge.SetAutoBuyRule(Arg(0), Arg(1), Arg(2), Arg(3), Text(4)); return InjectionValue.Unit;

UO.AutoSell

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

C# 簽章

void UO.AutoSell(object? itemType, object? itemColor, object? quantity);

在目前設定檔Bad Newbie的主預設清單中建立、更新或刪除自動銷售規則。團隊配置NPC-賣家報價的未來處理;不說買/賣,不開店,也不確認交易。完整程序:商店列表。

參數

  • itemType - 圖形產品0..65535:例如0x0F7A - 黑珍珠,0x0F51 - 匕首。這不是供應商/物品的serial,也不是角色的body。負數或大於65535的數將被拒絕。這裡0xFFFF是特定的graphic,不是所有商品的口罩。
  • itemColor — 產品色調:負數或 0xFFFF — 任意; 0 - 僅限未上漆的物品。對於精確的hue,請使用0..65534。請勿使用此範圍以外的顏色:正值將轉換為 ushort。必需的。
  • quantity — 每個商店報價收到的商品單位數量,而不是堆疊數量,也不是背包中所需的餘額。正值僅限於65535。 0/負數從Default中刪除匹配規則type+color;它不是「全部數量」。必需的。

傳回值

void - 無值。在單獨的一行上調用,不帶 var result = 且不帶 if。通話結束意味著設定結束,而不是交易成功。如果沒有設定檔或graphic無效,則不會建立規則;沒有錯誤的數值結果。透過背包內容、金幣以及伺服器回應來查看實際交易情況。

行為

  • 所有 3 參數都是必需的。這是一個規則設置,而不是一個等待函數。
  • 預設情況下,規則鍵為graphic,遮罩為hue。重複呼叫替換了該規則的數量等欄位;它不會在前一個限制之上添加另一個限制。如果沒有價格/名稱,先前對這些欄位的限制將被刪除。
  • 新的/更新的 Enabled=true 規則。一般的買/賣開關是根據規則的存在來設定的,並且設定檔被儲存。停用的預設清單本身不會自動啟用:必須在設定中啟用常規模式和清單。其他命名清單未更改。
  • 當貨物清單到達時,處理開始。该限制是在与一条规则匹配的行之间总共花费的。对于每个位置,使用第一个匹配的启用规则。当规则生效时,重新开业商店会提供新的优惠和新的限制。
  • 與 Bad Newbie 完全配合使用;在 Classic 中,此自動化功能已停用。請勿替換參數中的名稱NPC或已儲存清單的名稱。 AutoBuyEx 購買時添加價格/名稱過濾器; ClearShopList ​​完全重置這兩個自動化。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.AutoSell");
UO.AutoSell(0x0F51, -1, 1);

1。允許出售一把匕首 - 直接腳本

參數與執行流程:

  • 0x0F51 - graphic 匕首,任 hue、1 - 每句話一個。團隊沒有選擇特定的serial,也沒有測試該項目的有用性/價值。選擇您的商品的確切type/顏色。
UO.AutoSell(0x0F51, -1, 1);

2。僅出售某種顏色的長袍是腳本的功能

參數與執行流程:

  • 0x1F03 是標準graphic 長袍的範例,0x0044 是hue 的範例。將兩者替換為您的產品。 5 — 單位,而非價格;不接受最低價格及名稱參數Sell/AutoSell。伺服器必須將商品包含在銷售報價中。
return  RunScenario();
 object? RunScenario()
{
    UO.AutoSell(0x1F03, 0x0044, 5);
    return null;
}

3。在進入NPC之前停用兩種類型的銷售 - 腳本類

參數與執行流程:

  • 程式名稱是任意的; itemType和hue是它的參數。其他規則、採購和自訂命名清單均保留。如果另一個啟用的清單也出售這些商品,請透過設定來停用其中相應的規則。

Shop 列表 / 買賣列表

Shop列表/買賣列表

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()
    {
        RemoveSaleRule(0x0F51, -1);
        RemoveSaleRule(0x1F03, 0x0044);
        return null;
    }

    void RemoveSaleRule(dynamic itemType, dynamic hue)
    {
        UO.AutoSell(itemType, hue, 0);
    }
}

命令實作

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

UO.AutoSell(itemType, itemColor, quantity) — UO.AutoSell(Any,Any,Any)

參數: itemType (Any), itemColor (Any), quantity (Any)

結果: void / Unit.

呼叫時:

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

case "autosell":

                    bridge.SetAutoSellRule(Arg(0), Arg(1), Arg(2)); return InjectionValue.Unit;

UO.Buy

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

C# 簽章

void UO.Buy(object? @type);
void UO.Buy(object? @type, object? color);
void UO.Buy(object? @type, object? color, object? quantity);
void UO.Buy(object? @type, object? color, object? quantity, object? maxPrice);
void UO.Buy(object? @type, object? color, object? quantity, object? maxPrice, object? name);

在目前設定檔Bad Newbie的主預設清單中建立、更新或刪除自動購買規則。團隊配置NPC-賣家報價的未來處理;不說買/賣,不開店,也不確認交易。完整程序:商店列表。

參數

  • type - 圖形產品0..65535:例如0x0F7A - 黑珍珠,0x0F51 - 匕首。這不是供應商/物品的serial,也不是角色的body。負數或大於65535的數將被拒絕。這裡0xFFFF是特定的graphic,不是所有商品的口罩。
  • color — 產品色調:負數或 0xFFFF — 任意; 0 - 僅限未上漆的物品。對於精確的hue,請使用0..65534。請勿使用此範圍以外的顏色:正值將轉換為 ushort。預設為1。
  • quantity — 每個商店報價收到的商品單位數量,而不是堆疊數量,也不是背包中所需的餘額。正值仅限于65535。 0/负数从Default中删除匹配规则type+color;它不是“全部数量”。預設為1。
  • maxPrice — 一個單位的最高價格,而不是整個交易。 0/負 – 沒有價格上限。價格高於正限的產品可以通過。價格不在伺服器上交易或更改。預設為0。
  • name — 產品名稱的子字串,不區分大小寫;邊緣空間被刪除,空白行 - 無過濾器。這不是賣家的姓名或清單的名稱。例如,「Black Pearl」會檢查商店位置的文本,如果伺服器發送的正是這樣的名稱。預設為空字串。

傳回值

void - 無值。在單獨的一行上調用,不帶 var result = 且不帶 if。通話結束意味著設定結束,而不是交易成功。如果沒有設定檔或graphic無效,則不會建立規則;沒有錯誤的數值結果。透過背包內容、金幣以及伺服器回應來查看實際交易情況。

行為

  • Buy 接受從 1 到 5 的參數;右側缺少顏色=-1,數量=1,maxPrice=0,名稱=“”。
  • 預設情況下,規則鍵為graphic,遮罩為hue。重複呼叫替換了該規則的數量等欄位;它不會在前一個限制之上添加另一個限制。如果沒有價格/名稱,先前對這些欄位的限制將被刪除。
  • 新的/更新的 Enabled=true 規則。一般的買/賣開關是根據規則的存在來設定的,並且設定檔被儲存。停用的預設清單本身不會自動啟用:必須在設定中啟用常規模式和清單。其他命名清單未更改。
  • 當貨物清單到達時,處理開始。该限制是在与一条规则匹配的行之间总共花费的。对于每个位置,使用第一个匹配的启用规则。当规则生效时,重新开业商店会提供新的优惠和新的限制。
  • 與 Bad Newbie 完全配合使用;在 Classic 中,此自動化功能已停用。請勿替換參數中的名稱NPC或已儲存清單的名稱。 AutoBuyEx 購買時添加價格/名稱過濾器; ClearShopList ​​完全重置這兩個自動化。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.Buy");
UO.Buy(0x0F7A);

1。準備購買一單位試劑-直接腳本

參數與執行流程:

  • 0x0F7A - graphic 試劑,而非 ID NPC。數量 - 1;顏色 - 任意。本表格未規定價格上限。腳本本身沒有說什麼,也沒有打開商店。該規則繼續適用於後續句子,直到您更改/停用它。
UO.Buy(0x0F7A);

2。為一個商店報價設定試劑供應 - 腳本功能

參數與執行流程:

  • 20 - 一家商店回應的最大值,而不是「將數量增加到20」。 5 — 每單位價格,「Black Pearl」 — 產品名稱的子字串。如果伺服器對試劑的呼叫不同,請變更過濾器或傳遞「」。物品、金錢和伺服器規則的缺乏決定了結果。
return  RunScenario();
 object? RunScenario()
{
    UO.Buy(0x0F7A, 0, 20, 5, "Black Pearl");
    return null;
}

3。刪除選定的規則而不重置其他清單 - 腳本類

參數與執行流程:

  • 助理接受graphic。僅刪除帶有AnyHue的預設規則;保留各個規則hue=0。這不會取消已傳送到伺服器的交易。若要刪除精確的顏色,請傳遞建立規則所使用的相同hue。

Shop 列表 / 買賣列表

Shop列表/買賣列表

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()
    {
        DisableReagentRule(0x0F7A);
        DisableReagentRule(0x0F84);
        return null;
    }

    void DisableReagentRule(dynamic itemType)
    {
        UO.Buy(itemType, -1, 0);
    }
}

命令實作

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

UO.Buy(type) — UO.Buy(Any)

參數: type (Any)

結果: void / Unit.

呼叫時:

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

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

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

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

結果: void / Unit.

呼叫時:

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

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

UO.Buy(type, color, quantity) — UO.Buy(Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

UO.Buy(type, color, quantity, maxPrice) — UO.Buy(Any,Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

UO.Buy(type, color, quantity, maxPrice, name) — UO.Buy(Any,Any,Any,Any,Any)

參數: type (Any), color (Any), quantity (Any), maxPrice (Any), name (Any)

結果: void / Unit.

呼叫時:

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

case "buy":

                    bridge.SetAutoBuyRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1, arguments.Length > 3 ? Arg(3) : 0, arguments.Length > 4 ? Text(4) : string.Empty);

                    break;

UO.ClearShopList

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

C# 簽章

void UO.ClearShopList();

刪除自動購買和出售活動設定檔的規則。

參數

沒有參數。

傳回值

void - 無回傳值。

行為

  • 清除BackNewbieAutoBuyRules和BackNewbieAutoSellRules,關閉共享AutoBuy/AutoSell,更新OptionsGump並儲存設定檔。戰利品清單不變;缺少設定檔會產生空操作。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。清除狀態-直接腳本

參數與執行流程:

  • 刪除自動購買和出售活動設定檔的規則。
UO.ClearShopList();

2。設定後清除-腳本功能

參數與執行流程:

  • 刪除購買繃帶的規則以及其他交易規則。
return  RunScenario();
 object? RunScenario()
{
    UO.AutoBuy(0x0E21, -1, 10);
    UO.ClearShopList();
    return null;
}

3。重新清除 - 腳本類

參數與執行流程:

  • 清除空集是可以接受的,並且不會建立新設定。

Shop 列表 / 買賣列表

Shop列表/買賣列表

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.ClearShopList();
        UO.ClearShopList();
        return null;
    }
}

命令實作

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

UO.ClearShopList() — UO.ClearShopList()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "clearshoplist":

                    bridge.ClearAutoShopRules(); return InjectionValue.Unit;

UO.GetAutoBuyDelay

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

C# 簽章

dynamic UO.GetAutoBuyDelay();

從客戶檔案中讀取當前的自動購買延遲。

參數

沒有參數。

傳回值

int — 目前延遲(以毫秒為單位)。 setter寫入的值僅限於0…65535。 0表示沒有額外延遲;這不是錯誤。如果沒有載入的設定文件,則傳回3。讀取不會返回商品數量或確認交易。

行為

  • 此設定對於目前設定檔是通用的:另一個腳本或 UI 中的變更在您下次閱讀時可見。零是一個有效的設置,不是丟失資料的標誌,也不是返回舊腳本快取的原因。
  • 預設值為3毫秒。發送自動操作後,管理員設定下一次允許操作的時間。此通道不處理較早到達的供應商清單; getter 不會觸發等待,也不會發送買入/賣出本身。
  • 這不是MassMove、Drag/Drop的延遲或手動交易。調度下一個延遲時套用新值;已指派的時刻不會重新計算。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。顯示目前延遲-直接腳本

參數與執行流程:

  • 沒有爭論。延遲——以毫秒為單位的時間。
  • 該值反映了調用時的設定檔。儲存的 var 以後不會更新。
var delay = UO.GetAutoBuyDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));

2。更改設定並讀取限值 - 腳本功能

參數與執行流程:

  • setter 獲得 70000 毫秒;允許的最大值為65535。此範例更改設定檔設定。
  • 載入設定檔時,實際必須包含65535。 Getter 傳回實際的約束值而非原始參數70000。
return  RunScenario();
 object? RunScenario()
{
    UO.SetAutoBuyDelay(70000);
    var actual = UO.GetAutoBuyDelay();
    UO.Print(Convert.ToString(actual));
    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()
    {
        var current = UO.GetAutoBuyDelay();
        if (Truth(current == 0))
        {
            UO.Print("No additional delay");
        }
        else
        {
            UO.Print("Delay: " + Convert.ToString(current) + " ms");
        }

        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.GetAutoBuyDelay() — UO.GetAutoBuyDelay()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "getautobuydelay":

                    return new InjectionValue(bridge.GetAutoBuyDelay());

UO.GetAutoSellDelay

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

C# 簽章

dynamic UO.GetAutoSellDelay();

從客戶檔案中讀取當前的自動銷售延遲。

參數

沒有參數。

傳回值

int — 目前延遲(以毫秒為單位)。 setter寫入的值僅限於0…65535。 0表示沒有額外延遲;這不是錯誤。如果沒有載入的設定文件,則傳回3。讀取不會返回商品數量或確認交易。

行為

  • 此設定對於目前設定檔是通用的:另一個腳本或 UI 中的變更在您下次閱讀時可見。零是一個有效的設置,不是丟失資料的標誌,也不是返回舊腳本快取的原因。
  • 預設值為3毫秒。發送自動操作後,管理員設定下一次允許操作的時間。此通道不處理較早到達的供應商清單; getter 不會觸發等待,也不會發送買入/賣出本身。
  • 這不是MassMove、Drag/Drop的延遲或手動交易。調度下一個延遲時套用新值;已指派的時刻不會重新計算。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。顯示目前延遲-直接腳本

參數與執行流程:

  • 沒有爭論。延遲——以毫秒為單位的時間。
  • 該值反映了調用時的設定檔。儲存的 var 以後不會更新。
var delay = UO.GetAutoSellDelay();
UO.Print("Delay ms: " + Convert.ToString(delay));

2。更改設定並讀取限值 - 腳本功能

參數與執行流程:

  • setter 獲得 70000 毫秒;允許的最大值為65535。此範例更改設定檔設定。
  • 載入設定檔時,實際必須包含65535。 Getter 傳回實際的約束值而非原始參數70000。
return  RunScenario();
 object? RunScenario()
{
    UO.SetAutoSellDelay(70000);
    var actual = UO.GetAutoSellDelay();
    UO.Print(Convert.ToString(actual));
    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()
    {
        var current = UO.GetAutoSellDelay();
        if (Truth(current == 0))
        {
            UO.Print("No additional delay");
        }
        else
        {
            UO.Print("Delay: " + Convert.ToString(current) + " ms");
        }

        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.GetAutoSellDelay() — UO.GetAutoSellDelay()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "getautoselldelay":

                    return new InjectionValue(bridge.GetAutoSellDelay());

UO.GetPrice

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

C# 簽章

dynamic UO.GetPrice(object? objID);

讀取客戶端已知的 serial 商品的 Item.Price。

參數

  • objID — 物件的序號或支援的 self/backpack/lasttarget/saved 物件名稱;數字字串和 0x 字串由執行時間解析。

傳回值

int — uint Item.Price 到 int 未經檢查的轉換。缺少的物品給出0;2147483647以上的價格顯示為負值int。

行為

  • 該團隊不請求供應商提案。該值取決於客戶端先前收到的資料。零可以表示未知/零价格或缺少商品;要测试对象,请使用Exists。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。所選商品的價格 - 直接腳本

參數與執行流程:

  • 結果就是快取的 Item.Price。
var item = UO.LastTarget();
if (Truth(UO.Exists(item)))
{
    var price = UO.GetPrice(item);
    UO.Print(Convert.ToString(price));
}

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

2。零serial – 腳本函數

參數與執行流程:

  • 缺少的物品給出0。
return  RunScenario();
 object? RunScenario()
{
    var price = UO.GetPrice(0);
    UO.Print(Convert.ToString(price));
    return null;
}

3。價格快照 - 腳本類

參數與執行流程:

  • 只有新的呼叫才會重新讀取模型;暫停本身並不要求代價。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
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;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var item = UO.LastTarget();
        var before = UO.GetPrice(item);
        await Delay(500);
        var after = UO.GetPrice(item);
        UO.Print(Convert.ToString(before) + " " + Convert.ToString(after));
        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
}

命令實作

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

UO.GetPrice(objID) — UO.GetPrice(Any)

參數: objID (Any)

結果: dynamic / Any.

呼叫時:

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

case "getprice":

                    return new InjectionValue(bridge.GetPrice(Arg(0)));

UO.GetShopList

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

C# 簽章

dynamic UO.GetShopList();

讀取NPC賣家最後有效報價的商品。讓您在購買或出售之前檢查類型、數量和價格。

參數

沒有參數。

傳回值

string 數組 — 字串數組,來自 0 的索引。每行:serial|graphic|hue|金額|價格|名稱。序號 - ID 具體位置,graphic - 類型,hue - 顏色;前三個欄位以 0x 格式寫入。金額 — 可用單位減去視窗中的草稿,價格 — 一個單位的價格,名稱 — 姓名。這不是 serial 列表,也不是 bool 列表。如果沒有報價,則數組為空。名稱可以包含|:前五個分隔符號定義字段,其餘為名稱。

行為

  • 首先,作為正常的遊戲操作,從所需的NPC打開買入或賣出並等待伺服器報價。這些團隊本身不尋找賣家,不開放交易,不為個人賣家定價,也不在箱子之間轉移物品。賣家的ID不作為參數傳遞:如果有多個報價,則使用最後一個。
  • 在管理器中,報價儲存在遊戲會話中。關閉圖形用戶端會儲存提案和草稿,開啟它會恢復視窗。關閉商店本身、回應、關閉伺服器或斷開連接都會刪除優惠。自動買入/自動賣出Bad Newbie可以在腳本之前處理。
  • 讀取不會向伺服器發送請求。這是已收到供應的快照,並非NPC當前庫存的保證。數量欄位反映單位,而不是行/堆疊的數量。 ArrayLength(行) 計算位置。這裡的價格為GetShopList;SendShopReply不接受這個價格。
  • 明確的清單會替換草稿,並且不會添加到草稿中。重複一次serial將數量相加;總數受到報價中商品總數的限制。未知的serial、不正確或非正數會在提交之前拒絕整個回應,並保存報價。如果沒有句子,SendShopReply報錯。 「0」行不是撤銷指令;使用 」」。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。解析第一個位置 - 直接腳本

參數與執行流程:

  • GetWord 使用索引來自 0: 0 — serial, 1 — graphic, 2 — hue, 3 - 數量, 4 - 價格。行前[0] 檢查數組的長度。
var rows = UO.GetShopList();
if (Truth(ArrayLength(rows) == 0))
{
    return null;
}
var serial = ReadField(rows[0], 0, "|");
var itemType = ReadField(rows[0], 1, "|");
var amount = Convert.ToInt32(ReadField(rows[0], 3, "|"));
var price = Convert.ToDouble(ReadField(rows[0], 4, "|"));
UO.Print(serial + " / " + itemType + " / " + Convert.ToString(amount) + " / " + Convert.ToString(price));

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;

string ReadField(object? row, int index, string separator) { string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None); return index >= 0 && index < fields.Length ? fields[index] : ""; }

2。限價購買最多十條繃帶 - 腳本功能

參數與執行流程:

  • 僅適用於開盤前買入報價。 0x0E21 — 繃帶,5 — 最高單價,10 — 所需數量。採取第一個適當的位置;從句子中讀取精確的serial。該代碼本身不會啟動購買。
return  RunScenario();
 object? RunScenario()
{
    var rows = UO.GetShopList();
    for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
    {
        var row = rows[i];
        if (Truth(ReadField(row, 1, "|") == "0x0E21"))
        {
            var price = Convert.ToDouble(ReadField(row, 4, "|"));
            var amount = Convert.ToInt32(ReadField(row, 3, "|"));
            if (Truth(price > 0) && Truth(price <= 5) && Truth(amount > 0))
            {
                if (Truth(amount > 10))
                {
                    amount = 10;
                }

                UO.SendShopReply(ReadField(row, 0, "|") + ":" + Convert.ToString(amount));
                return null;
            }
        }
    }

    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;
string ReadField(object? row, int index, string separator)
{
    string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
    return index >= 0 && index < fields.Length ? fields[index] : "";
}

3。計算所選類型的可用庫存 - 場景類

參數與執行流程:

  • 輔助函數已完整給出:它將指定類型的所有部位的 amount 欄位相加。如果子句為空,則傳回0;這是可用單位的數量,而不是角色上的動物或物品的數量。

Shop 列表 / 買賣列表

Shop列表/買賣列表

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 available = CountOfferedType("0x0E21");
        if (Truth(available < 10))
        {
            UO.Print("Bandage stock below 10: " + Convert.ToString(available));
        }

        return null;
    }

    dynamic CountOfferedType(dynamic itemType)
    {
        var total = 0;
        var rows = UO.GetShopList();
        for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
        {
            if (Truth(ReadField(rows[i], 1, "|") == itemType))
            {
                total = total + Convert.ToInt32(ReadField(rows[i], 3, "|"));
            }
        }

        return total;
    }

    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;
    string ReadField(object? row, int index, string separator)
    {
        string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
        return index >= 0 && index < fields.Length ? fields[index] : "";
    }
}

命令實作

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

UO.GetShopList() — UO.GetShopList()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

public InjectionValue GetShopList()

            => new InjectionValue((bridge.GetShopList() ?? Array.Empty<string>()).Select(item => new InjectionValue(item)).ToArray());

UO.MassPriceMove

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

C# 簽章

void UO.MassPriceMove();
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price);
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price, object? destination);
void UO.MassPriceMove(object? delay, object? quantity, object? @type, object? price, object? destination, object? x, object? y, object? z);

允許批量轉移一個 TYPE 的商品,並在供應商的庫存中自動定價。來源由第一次手動傳輸決定。每個堆疊都被完全轉移並被視為一個項目;在提出價格請求後,客戶做出回應,然後才繼續排隊。

參數

  • delay — 第一個參數是傳輸請求之間的延遲(以毫秒為單位),是從 0 到 2147483647 的整數。 350 表示0,35 秒。對於0,每個遊戲幀發送的下一個進位不超過一個。 GrabDelay 不新增延遲。負值會停用該模式並清除佇列;對於關閉,最好使用清晰的UO.MassPriceMove()符號。
  • quantity - 第二個參數是單一物品(items)的TOTAL限制,包括第一次手動傳輸。無論裡面的數量多少,一疊/一疊都被視為一件物品。 50 表示最多50 整個堆疊或50 單一項目。在此限制下堆栈不会分裂。 0 - 所有合适的物品。不允許使用負值。
  • type - 第三個參數是物品類型代碼(Graphic/Type),整數0..65535,例如0x0EED或字串「0x0EED」代表黃金。这不是 serial/ID,也不是名称 AddObject。 0 通过第一次手动传输来确定类型。對於顯式類型,拖曳另一個類型不會啟動佇列;該模式繼續等待合適的項目。
  • price — 第四個必需參數是顯示的每個完整項目/堆疊的總價格 0..2147483647。 0表示免費,不關機。負價被拒絕。
  • destination - 第五個可選參數是 serial 或供應商庫存中保存的容器名稱。如果不存在,則取自手動重置。一個普通的背包,地上的箱子和目的地=0這裡就出現了偏差:無法在地上定價。
  • x - 第六個參數 - 供應商容器內的 X:-1 或 65535 用於自動放置,否則為 0..65535。僅與 Y 和 Z 一起表示。
  • y - 第七個參數 - 供應商容器內的 Y:-1/65535 用於自動放置,否則0..65535。僅與 X 和 Z 一起表示。
  • z —第八個參數是高度-128..127,在容器內部通常是0。沒有明確的 X/Y/Z,對於給定的目的地,使用 -1、-1,0;手動分配時,將採用重置位置。

傳回值

void:沒有價值。啟動 MassPriceMove 啟用手動樣品等待。轉帳和價格訊息表明請求已提交,並不保證伺服器接受。

行為

  • 帶有 0、4、5 或 8 參數的表單。精確順序:延遲、數量、type、價格、目的地、x、y、z。不支援部分座標三元組。
  • 首先,呼叫命令,然後拾取並拖曳整個適當的項目。輸入0記住它TYPE;顯式類型會跳過其他類型的手動包裝。來源始終取自第一個合適的項目。
  • 數量包括第一個手動項目。 50 表示100 中的50 完整堆疊,而不是堆疊中的50 單位。 0 - 所有合適的直物體。顏色不會被過濾,巢狀容器不會展開。
  • 適用AllPrice價格請求識別規則,包括ASCII/Unicode和10秒等待。暫停延遲 - 最小間隔:緩慢的伺服器會增加它以免混淆價格。
  • 普通模式AllPrice不需要啟用。該操作的價格優先於AllPrice。不建議在佇列期間更改價格AllPrice或手動傳輸其他項目:未知回應或伺服器故障會中斷佇列。
  • MassPriceMove() 關閉目前傳輸佇列並取消掛起的價格回應;如果單獨啟用通用AllPrice,則會保留。 TerminateAll() 關閉兩種模式。這是與MassMove相同的一個隊列:新激活取代舊激活。
  • 如果價格請求未被識別,則該命令將離開對話方塊以進行手動輸入並停止進一步的傳輸。伺服器故障、死亡、地圖更改和不可用的物品/容器也會停止工作。
  • 正確地重複呼叫相同的命令,當模式仍在等待第一次滑鼠拖曳時,關閉等待:Deactivate MassMove/MassPriceMove 直接出現在遊戲視窗中。下一次呼叫將重新開啟該模式。第一次傳輸後,使用無參形式停止剩餘隊列。已經發送的請求不會被回滾。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。移動50與價格堆疊,用滑鼠確定類型-直接腳本

參數與執行流程:

  • 延遲=350毫秒;單一物品的數量=50,包括第一個手動物品;type=0 記住TYPE樣本;每件商品的價格=125。
  • 缺少目的地和座標:將範例直接拖曳到供應商的庫存中。
  • 如果原始堆疊為100,則最多傳輸50滿堆疊。伺服器請求後,每個人都會收到一個價格125。
UO.MassPriceMove(350, 50, 0, 125);
UO.Print("Drag one complete stack into your vendor bag");

2。將已知類型的所有項目放入所選供應商包中 - 腳本函數

參數與執行流程:

  • AddObject 提示您選擇供應商包並將其儲存為vendor_bag。這是ID目的地; type 仍然是代碼 0x0F7A。
  • 延遲=500,數量=0無限制,type=0x0F7A,價格=250,目的地=vendor_bag。
  • X/Y/Z 缺失:-1,-1,0。若要啟動佇列,請手動拖曳適當類型的一項;由此確定原始套件。
return  RunScenario();
 object? RunScenario()
{
    UO.AddObject("vendor_bag");
    UO.MassPriceMove(500, 0, "0x0F7A", 250, "vendor_bag");
    UO.Print("Now drag one matching item from the source");
    return null;
}

3。指定所有八個參數以及包內的位置 - 場景類

參數與執行流程:

  • 延遲=350毫秒;數量=10全品;type=itemType=0x0EED;每個全端的價格=1000。
  • 目的地=vendorBag是您供應商袋子的真實ID,替換範例。這是第五個參數,而不是第四個。
  • x=60,y=70是這個包包裡面的地方,z=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 itemType = "0x0EED";
        var vendorBag = "0x40005678";
        UO.MassPriceMove(350, 10, itemType, 1000, vendorBag, 60, 70, 0);
        return null;
    }
}

4。取消隊列和掛起價格響應 - 直接腳本

參數與執行流程:

  • 如果不帶參數,則該命令將關閉一般批量傳輸佇列並清除其掛起的價格回應。
  • 伺服器已接受的價格和轉帳不會回滾。若要停止其他程序並單獨啟用AllPrice,請使用UO.TerminateAll()。

Shop 列表 / 買賣列表

Shop列表/買賣列表

UO.MassPriceMove();

命令實作

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

UO.MassPriceMove() — UO.MassPriceMove()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "masspricemove":

                    if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);

                    else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),

                        NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),

                        NumberConversions.ToInt(arguments[3]),

                        arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,

                        arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);

                    break;

UO.MassPriceMove(delay, quantity, type, price) — UO.MassPriceMove(Any,Any,Any,Any)

參數: delay (Any), quantity (Any), type (Any), price (Any)

結果: void / Unit.

呼叫時:

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

case "masspricemove":

                    if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);

                    else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),

                        NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),

                        NumberConversions.ToInt(arguments[3]),

                        arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,

                        arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);

                    break;

UO.MassPriceMove(delay, quantity, type, price, destination) — UO.MassPriceMove(Any,Any,Any,Any,Any)

參數: delay (Any), quantity (Any), type (Any), price (Any), destination (Any)

結果: void / Unit.

呼叫時:

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

case "masspricemove":

                    if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);

                    else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),

                        NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),

                        NumberConversions.ToInt(arguments[3]),

                        arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,

                        arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);

                    break;

UO.MassPriceMove(delay, quantity, type, price, destination, x, y, z) — UO.MassPriceMove(Any,Any,Any,Any,Any,Any,Any,Any)

參數: delay (Any), quantity (Any), type (Any), price (Any), destination (Any), x (Any), y (Any), z (Any)

結果: void / Unit.

呼叫時:

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

case "masspricemove":

                    if (arguments.Length == 0) bridge.MassPriceMove(-1, 0, 0, 0, -1, -1, -1, 0);

                    else bridge.MassPriceMove(NumberConversions.ToInt(arguments[0]),

                        NumberConversions.ToInt(arguments[1]), ResolveType(arguments[2]),

                        NumberConversions.ToInt(arguments[3]),

                        arguments.Length > 4 ? ResolveTransferDestination(arguments[4], true) : -1,

                        arguments.Length > 5 ? NumberConversions.ToInt(arguments[5]) : -1,

                        arguments.Length > 6 ? NumberConversions.ToInt(arguments[6]) : -1,

                        arguments.Length > 7 ? NumberConversions.ToInt(arguments[7]) : 0);

                    break;

UO.Sell

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

C# 簽章

void UO.Sell(object? @type);
void UO.Sell(object? @type, object? color);
void UO.Sell(object? @type, object? color, object? quantity);

在目前設定檔Bad Newbie的主預設清單中建立、更新或刪除自動銷售規則。團隊配置NPC-賣家報價的未來處理;不說買/賣,不開店,也不確認交易。完整程序:商店列表。

參數

  • type - 圖形產品0..65535:例如0x0F7A - 黑珍珠,0x0F51 - 匕首。這不是供應商/物品的serial,也不是角色的body。負數或大於65535的數將被拒絕。這裡0xFFFF是特定的graphic,不是所有商品的口罩。
  • color — 產品色調:負數或 0xFFFF — 任意; 0 - 僅限未上漆的物品。對於精確的hue,請使用0..65534。請勿使用此範圍以外的顏色:正值將轉換為 ushort。預設為1。
  • quantity — 每個商店報價收到的商品單位數量,而不是堆疊數量,也不是背包中所需的餘額。正值仅限于65535。 0/负数从Default中删除匹配规则type+color;它不是“全部数量”。預設為1。

傳回值

void - 無值。在單獨的一行上調用,不帶 var result = 且不帶 if。通話結束意味著設定結束,而不是交易成功。如果沒有設定檔或graphic無效,則不會建立規則;沒有錯誤的數值結果。透過背包內容、金幣以及伺服器回應來查看實際交易情況。

行為

  • Sell接受1到3參數;右側缺失顏色=-1,數量=1。
  • 預設情況下,規則鍵為graphic,遮罩為hue。重複呼叫替換了該規則的數量等欄位;它不會在前一個限制之上添加另一個限制。如果沒有價格/名稱,先前對這些欄位的限制將被刪除。
  • 新的/更新的 Enabled=true 規則。一般的買/賣開關是根據規則的存在來設定的,並且設定檔被儲存。停用的預設清單本身不會自動啟用:必須在設定中啟用常規模式和清單。其他命名清單未更改。
  • 當貨物清單到達時,處理開始。该限制是在与一条规则匹配的行之间总共花费的。对于每个位置,使用第一个匹配的启用规则。当规则生效时,重新开业商店会提供新的优惠和新的限制。
  • 與 Bad Newbie 完全配合使用;在 Classic 中,此自動化功能已停用。請勿替換參數中的名稱NPC或已儲存清單的名稱。 AutoBuyEx 購買時添加價格/名稱過濾器; ClearShopList ​​完全重置這兩個自動化。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.Sell");
UO.Sell(0x0F51);

1。允許出售一把匕首 - 直接腳本

參數與執行流程:

  • 0x0F51 - graphic 匕首,任 hue、1 - 每句話一個。團隊沒有選擇特定的serial,也沒有測試該項目的有用性/價值。選擇您的商品的確切type/顏色。
UO.Sell(0x0F51);

2。僅出售某種顏色的長袍是腳本的功能

參數與執行流程:

  • 0x1F03 是標準graphic 長袍的範例,0x0044 是hue 的範例。將兩者替換為您的產品。 5 — 單位,而非價格;不接受最低價格及名稱參數Sell/AutoSell。伺服器必須將商品包含在銷售報價中。
return  RunScenario();
 object? RunScenario()
{
    UO.Sell(0x1F03, 0x0044, 5);
    return null;
}

3。在進入NPC之前停用兩種類型的銷售 - 腳本類

參數與執行流程:

  • 程式名稱是任意的; itemType和hue是它的參數。其他規則、採購和自訂命名清單均保留。如果另一個啟用的清單也出售這些商品,請透過設定來停用其中相應的規則。

Shop 列表 / 買賣列表

Shop列表/買賣列表

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()
    {
        RemoveSaleRule(0x0F51, -1);
        RemoveSaleRule(0x1F03, 0x0044);
        return null;
    }

    void RemoveSaleRule(dynamic itemType, dynamic hue)
    {
        UO.Sell(itemType, hue, 0);
    }
}

命令實作

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

UO.Sell(type) — UO.Sell(Any)

參數: type (Any)

結果: void / Unit.

呼叫時:

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

case "sell":

                    bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);

                    break;

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

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

結果: void / Unit.

呼叫時:

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

case "sell":

                    bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);

                    break;

UO.Sell(type, color, quantity) — UO.Sell(Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "sell":

                    bridge.SetAutoSellRule(Arg(0), arguments.Length > 1 ? Arg(1) : -1, arguments.Length > 2 ? Arg(2) : 1);

                    break;

UO.SendShopReply

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

C# 簽章

void UO.SendShopReply(object? reply);

將產品選擇發送到NPC賣家的最後一個有效報價。交易方向由報價決定:從NPC買進或賣給他。

參數

  • reply — 字串:「serial:數量」;多個位置之間以 |, 分隔;或逗號。而不是 : 讓我們說=。序號 - 來自 GetShopList 的ID 頭寸,小數或 0x,不是 graphic 也不是 ID 賣家。數量是正整數個數,而不是堆疊數;如果沒有它,則取1。 「accept」不區分大小寫或「1」確認草稿視窗;空白行會取消交易並傳回空白回應。

傳回值

void - 沒有回傳值:既沒有true/false,也沒有金額,也沒有購買確認。伺服器決定交易是否有效。提交後,檢查是否有更新的物品、金幣或伺服器訊息。

行為

  • 首先,作為正常的遊戲操作,從所需的NPC打開買入或賣出並等待伺服器報價。這些團隊本身不尋找賣家,不開放交易,不為個人賣家定價,也不在箱子之間轉移物品。賣家的ID不作為參數傳遞:如果有多個報價,則使用最後一個。
  • 在管理器中,報價儲存在遊戲會話中。關閉圖形用戶端會儲存提案和草稿,開啟它會恢復視窗。關閉商店本身、回應、關閉伺服器或斷開連接都會刪除優惠。自動買入/自動賣出Bad Newbie可以在腳本之前處理。
  • 讀取不會向伺服器發送請求。這是已收到供應的快照,並非NPC當前庫存的保證。數量欄位反映單位,而不是行/堆疊的數量。 ArrayLength(行) 計算位置。這裡的價格為GetShopList;SendShopReply不接受這個價格。
  • 明確的清單會替換草稿,並且不會添加到草稿中。重複一次serial將數量相加;總數受到報價中商品總數的限制。未知的serial、不正確或非正數會在提交之前拒絕整個回應,並保存報價。如果沒有句子,SendShopReply報錯。 「0」行不是撤銷指令;使用 」」。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。最多选择第一个位置的三个单元 - 直接脚本

參數與執行流程:

  • 最多選擇3個第一位置單元;serial臉皮不硬。對於購買報價,它是購買,對於銷售報價,它是銷售。檢查您已開啟哪個報價。
var rows = UO.GetShopList();
if (Truth(ArrayLength(rows) == 0))
{
    return null;
}
var amount = Convert.ToInt32(ReadField(rows[0], 3, "|"));
if (Truth(amount > 3))
{
    amount = 3;
}
if (Truth(amount > 0))
{
    UO.SendShopReply(ReadField(rows[0], 0, "|") + ":" + Convert.ToString(amount));
}

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;

string ReadField(object? row, int index, string separator) { string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None); return index >= 0 && index < fields.Length ? fields[index] : ""; }

2。在預算內一次選擇一項 - 腳本功能

參數與執行流程:

  • 僅適用於購買報價:預算30,類型0x0E21。如果價格為正且在剩餘預算範圍內,則從每個符合資格的商品中選擇一個單位。該字串使用 | 連接;一個SendShopReply發送整個選擇。
return  RunScenario();
 object? RunScenario()
{
    double budget = 30;
    var reply = "";
    var rows = UO.GetShopList();
    for (int i = (int)(0); i <= ArrayLength(rows) - 1; i += (int)(1))
    {
        var row = rows[i];
        if (Truth(ReadField(row, 1, "|") == "0x0E21"))
        {
            var price = Convert.ToDouble(ReadField(row, 4, "|"));
            var amount = Convert.ToInt32(ReadField(row, 3, "|"));
            if (Truth(price > 0) && Truth(price <= budget) && Truth(amount > 0))
            {
                if (Truth(reply != ""))
                {
                    reply = reply + "|";
                }

                reply = reply + ReadField(row, 0, "|") + ":1";
                budget = budget - price;
            }
        }
    }

    if (Truth(reply != ""))
    {
        UO.SendShopReply(reply);
    }

    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;
string ReadField(object? row, int index, string separator)
{
    string[] fields = (Convert.ToString(row) ?? "").Split(new[] { separator }, StringSplitOptions.None);
    return index >= 0 && index < fields.Length ? fields[index] : "";
}

3。確認視窗草稿 - 腳本類

參數與執行流程:

  • 在商店櫥窗中預先選擇數量。 「接受」準確地發送此草稿;關閉遊戲視窗後,它被儲存。如果未選擇任何內容,將發送空回應。 「1」是確認的同義詞,不是serial主詞。
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.SendShopReply("accept");
        return null;
    }
}

4。取消報價 - 直接腳本

參數與執行流程:

  • 空行發送空響應並關閉活動報價。 GetShopList檢查避免了無貨時被調用,但它不區分空句和缺席。

Shop 列表 / 買賣列表

Shop列表/買賣列表

if (Truth(ArrayLength(UO.GetShopList()) > 0))
{
    UO.SendShopReply("");
}

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.SendShopReply(reply) — UO.SendShopReply(Any)

參數: reply (Any)

結果: void / Unit.

呼叫時:

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

public void SendShopReply(InjectionValue reply) => bridge.SendShopReply(reply.ToString());

UO.SetAutoBuyDelay

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

C# 簽章

void UO.SetAutoBuyDelay(object? value);

設定自動購買延遲並儲存目前設定檔。

參數

  • value — 所需的毫秒數。負值限制為0,大於65535的值限制為數字65535。 0 停用額外延遲,但不停用自動交易本身。

傳回值

void - 無回傳值。作為單獨的一行調用,然後使用GetAutoBuyDelay()讀取有效設定。如果沒有配置文件,setter 不會保存任何內容;此狀態下的吸氣劑給出標準的3毫秒。

行為

  • 此設定對於目前設定檔是通用的:另一個腳本或 UI 中的變更在您下次閱讀時可見。零是一個有效的設置,不是丟失資料的標誌,也不是返回舊腳本快取的原因。
  • 預設值為3毫秒。發送自動操作後,管理員設定下一次允許操作的時間。此通道不處理較早到達的供應商清單; getter 不會觸發等待,也不會發送買入/賣出本身。
  • 這不是MassMove、Drag/Drop的延遲或手動交易。調度下一個延遲時套用新值;已指派的時刻不會重新計算。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetAutoBuyDelay");
UO.SetAutoBuyDelay(350);

1。設定間隔350 ms - 直接腳本

參數與執行流程:

  • Value=350 — 允許的自動操作之間的毫秒數。
  • 該設定保存在目前設定檔中,並且對其他腳本可見。
UO.SetAutoBuyDelay(350);
UO.Print(Convert.ToString(UO.GetAutoBuyDelay()));

2。刪除額外的延遲 - 腳本功能

參數與執行流程:

  • 值=0有獨立意義;不被先前的非零值取代。
  • 僅延遲發生變化。規則、清單和一般自動交易開關是單獨設定的。
return  RunScenario();
 object? RunScenario()
{
    UO.SetAutoBuyDelay(0);
    var actual = UO.GetAutoBuyDelay();
    if (Truth(actual == 0))
    {
        UO.Print("Delay disabled");
    }

    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。應用計算值 - 腳本類

參數與執行流程:

  • 請求=70000超過最大值。應用程式在設定器限制後讀取設定檔。
  • 載入設定檔後,結果將為65535。若要恢復到標準延遲,請使用 3 明確呼叫 setter。
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 requested = 70000;
        UO.SetAutoBuyDelay(requested);
        var applied = UO.GetAutoBuyDelay();
        UO.Print("Requested: " + Convert.ToString(requested));
        UO.Print("Applied: " + Convert.ToString(applied));
        return null;
    }
}

命令實作

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

UO.SetAutoBuyDelay(value) — UO.SetAutoBuyDelay(Any)

參數: value (Any)

結果: void / Unit.

呼叫時:

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

case "setautobuydelay":

                    state.AutoBuyDelay = Math.Max(0, Arg(0));

                    bridge.SetAutoBuyDelay(state.AutoBuyDelay);

                    return InjectionValue.Unit;

UO.SetAutoSellDelay

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

C# 簽章

void UO.SetAutoSellDelay(object? value);

設定自動銷售延遲並儲存目前設定檔。

參數

  • value — 所需的毫秒數。負值限制為0,大於65535的值限制為數字65535。 0 停用額外延遲,但不停用自動交易本身。

傳回值

void - 無回傳值。作為單獨的一行調用,然後使用GetAutoSellDelay()讀取有效設定。如果沒有配置文件,setter 不會保存任何內容;此狀態下的吸氣劑給出標準的3毫秒。

行為

  • 此設定對於目前設定檔是通用的:另一個腳本或 UI 中的變更在您下次閱讀時可見。零是一個有效的設置,不是丟失資料的標誌,也不是返回舊腳本快取的原因。
  • 預設值為3毫秒。發送自動操作後,管理員設定下一次允許操作的時間。此通道不處理較早到達的供應商清單; getter 不會觸發等待,也不會發送買入/賣出本身。
  • 這不是MassMove、Drag/Drop的延遲或手動交易。調度下一個延遲時套用新值;已指派的時刻不會重新計算。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetAutoSellDelay");
UO.SetAutoSellDelay(350);

1。設定間隔350 ms - 直接腳本

參數與執行流程:

  • Value=350 — 允許的自動操作之間的毫秒數。
  • 該設定保存在目前設定檔中,並且對其他腳本可見。
UO.SetAutoSellDelay(350);
UO.Print(Convert.ToString(UO.GetAutoSellDelay()));

2。刪除額外的延遲 - 腳本功能

參數與執行流程:

  • 值=0有獨立意義;不被先前的非零值取代。
  • 僅延遲發生變化。規則、清單和一般自動交易開關是單獨設定的。
return  RunScenario();
 object? RunScenario()
{
    UO.SetAutoSellDelay(0);
    var actual = UO.GetAutoSellDelay();
    if (Truth(actual == 0))
    {
        UO.Print("Delay disabled");
    }

    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。應用計算值 - 腳本類

參數與執行流程:

  • 請求=70000超過最大值。應用程式在設定器限制後讀取設定檔。
  • 載入設定檔後,結果將為65535。若要恢復到標準延遲,請使用 3 明確呼叫 setter。
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 requested = 70000;
        UO.SetAutoSellDelay(requested);
        var applied = UO.GetAutoSellDelay();
        UO.Print("Requested: " + Convert.ToString(requested));
        UO.Print("Applied: " + Convert.ToString(applied));
        return null;
    }
}

命令實作

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

UO.SetAutoSellDelay(value) — UO.SetAutoSellDelay(Any)

參數: value (Any)

結果: void / Unit.

呼叫時:

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

case "setautoselldelay":

                    state.AutoSellDelay = Math.Max(0, Arg(0));

                    bridge.SetAutoSellDelay(state.AutoSellDelay);

                    return InjectionValue.Unit;

UO.Shop

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

C# 簽章

void UO.Shop();

列印本地貿易線路清單。

參數

沒有參數。

傳回值

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

行為

  • ExecuteLegacyManualAlias 讀取橋。 GetShopList 並透過「|」連接行對於SystemMessage。賣家菜單打不開,買/賣不進行。
  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 列印本地貿易線路清單。
UO.Shop();

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteLegacyManualAlias 讀取橋。 GetShopList 並透過「|」連接行對於SystemMessage。賣家菜單打不開,買/賣不進行。
return  RunScenario();
 object? RunScenario()
{
    UO.Shop();
    UO.Print(UO.GetArrayLength(UO.GetShopList()));
    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.Shop();
        UO.TextOpen();
        UO.TextPrint("Shop list was printed in the journal");
        return null;
    }
}

命令實作

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

UO.Shop() — UO.Shop()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "shop": SystemMessage(string.Join(" | ", bridge.GetShopList())); break;

UO.VendorMenu

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

C# 簽章

void UO.VendorMenu(object? vendor);
void UO.VendorMenu(object? menu, object? choice);

使用賣家或註冊永久選單掛鉤。

參數

  • vendor — 具有一個參數的表單:serial/賣家物件的別名。
  • menu — 具有兩個參數的表單:標題和選單元素,都是文字。這是一個不同的操作;第一個參數不是serial。
  • choice — 具有兩個參數的表單:標題和選單元素,都是文字。這是一個不同的操作;第一個參數不是serial。

傳回值

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

行為

  • 一個參數稱為橋。 UseObject。這兩個參數呼叫bridge.AddMenuHook(menu,choice,true),其中true表示可重複的鉤子。
  • 不會自動買進或賣出。選單的開啟和選擇由伺服器決定;註冊的鉤子作用於下一個符合的選單,直到被取消。
  • 對於選單/選擇形式,管理者選擇第一個標題包含提示的選單,不區分大小寫; SessionMenu 選擇名稱中包含 choice 的第一個項目,也不區分大小寫。空白文字適合任何人;數位文字是名稱的片段,而不是索引。成功選擇會發送回應並關閉本地選單。一次性鉤子選擇成功後才會刪除;留下永久的鉤子。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 使用賣家或註冊永久選單掛鉤。
if (Truth(UO.Exists("lasttarget")))
{
    UO.VendorMenu("lasttarget");
}

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

2。明確選項 - 腳本函數

參數與執行流程:

  • 一個參數稱為橋。 UseObject。這兩個參數呼叫bridge.AddMenuHook(menu,choice,true),其中true表示可重複的鉤子。
return  RunScenario();
 object? RunScenario()
{
    UO.VendorMenu("Vendor", "Buy");
    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.VendorMenu("Vendor", "Buy");
        UO.Print(UO.MenuHookPresent());
        UO.CancelMenu();
        return null;
    }
}

命令實作

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

UO.VendorMenu(vendor) — UO.VendorMenu(Any)

參數: vendor (Any)

結果: void / Unit.

呼叫時:

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

case "vendormenu":

                    if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);

                    else bridge.UseObject(Arg(0, bridge.LastTarget));

                    break;

UO.VendorMenu(menu, choice) — UO.VendorMenu(Any,Any)

參數: menu (Any), choice (Any)

結果: void / Unit.

呼叫時:

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

case "vendormenu":

                    if (arguments.Length >= 2) bridge.AddMenuHook(Text(0), Text(1), true);

                    else bridge.UseObject(Arg(0, bridge.LastTarget));

                    break;
⚠️ **GitHub.com Fallback** ⚠️