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

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

貿易

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

玩家之間安全交換的視窗:參與者、容器、狀態、確認和取消。

部分

主題 命令與解釋
IsTrade UO.IsTrade
貿易對手 UO.GetTradeOpponent · UO.GetTradeOpponentName ​​
貿易貨櫃 UO.GetTradeContainer
ConfirmTrade UO.ConfirmTrade
CancelTrade UO.CancelTrade

所有主題命令

安全貿易

UO.IsTrade · UO.TradeCount · UO.TradeCheck · UO.TradeContainer · UO.GetTradeContainer · UO.TradeOpponent · UO.GetTradeOpponent · UO.TradeName · UO.GetTradeOpponentName · UO.ConfirmTrade · UO.CancelTrade

關於該主題的範例

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

UO.GetTradeContainer

參數、結果及所有場景

var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));

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

UO.ConfirmTrade

參數、結果及所有場景

var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

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

完整指令說明


UO.CancelTrade

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

C# 簽章

dynamic UO.CancelTrade(object? tradeNum);

取消選定的交換並關閉其視窗。

參數

  • tradeNum — 整數:從 1 到 TradeCount() 的目前視窗號。 0 和負值是不允許的。這不是serial。

傳回值

int: 1 (條件滿足) - 視窗被發現,關閉,並透過關閉發送取消請求; 0(不滿足條件)- 無視窗。這不是等待伺服器響應。再次取消關閉的視窗不會發送第二個資料包。

該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var result = UO.CancelTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

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

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。
return  RunScenario();
 object? RunScenario()
{
    var tradeNumber = 2;
    if (Truth(UO.TradeCount() >= tradeNumber))
    {
        var result = UO.CancelTrade(tradeNumber);
        UO.Print(Convert.ToString(result));
    }

    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。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var expectedPartner = UO.GetTradeOpponent(1);
        var result = ApplyToPartner(1, expectedPartner);
        UO.Print(Convert.ToString(result));
        return null;
    }

    dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
    {
        if (Truth(expectedPartner == 0))
        {
            return false;
        }

        if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
        {
            return false;
        }

        return UO.CancelTrade(tradeNumber);
    }

    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.CancelTrade(tradeNum) — UO.CancelTrade(Any)

參數: tradeNum (Any)

結果: dynamic / Any.

呼叫時:

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

case "canceltrade": return new InjectionValue(bridge.CancelTrade(Arg(0)));

UO.ConfirmTrade

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

C# 簽章

dynamic UO.ConfirmTrade(object? tradeNum);

在選定的交易所上設定自訂同意標誌。

參數

  • tradeNum — 整數:從 1 到 TradeCount() 的目前視窗號。 0 和負值是不允許的。這不是serial。

傳回值

int: 1(條件滿足)-找到視窗並開啟自己的協定(或已開啟); 0(不滿足條件)- 無視窗。不確認伺服器傳輸項目。再次致電並不會取消同意。

該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var result = UO.ConfirmTrade(1);
if (Truth(Truth(result) == true))
{
    UO.Print("Local request processed");
}

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

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。
return  RunScenario();
 object? RunScenario()
{
    var tradeNumber = 2;
    if (Truth(UO.TradeCount() >= tradeNumber))
    {
        var result = UO.ConfirmTrade(tradeNumber);
        UO.Print(Convert.ToString(result));
    }

    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。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var expectedPartner = UO.GetTradeOpponent(1);
        var result = ApplyToPartner(1, expectedPartner);
        UO.Print(Convert.ToString(result));
        return null;
    }

    dynamic ApplyToPartner(dynamic tradeNumber, dynamic expectedPartner)
    {
        if (Truth(expectedPartner == 0))
        {
            return false;
        }

        if (Truth(UO.GetTradeOpponent(tradeNumber) != expectedPartner))
        {
            return false;
        }

        return UO.ConfirmTrade(tradeNumber);
    }

    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.ConfirmTrade(tradeNum) — UO.ConfirmTrade(Any)

參數: tradeNum (Any)

結果: dynamic / Any.

呼叫時:

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

case "confirmtrade": return new InjectionValue(bridge.ConfirmTrade(Arg(0)));

UO.GetTradeContainer

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

C# 簽章

dynamic UO.GetTradeContainer(object? tradeNum, object? num);

傳回兩個交換容器之一的數字 serial。

參數

  • tradeNum — 整數:從 1 到 TradeCount() 的目前視窗號。 0 和負值是不允許的。這不是serial。
  • num - 1 - 自有容器,2 - 合作夥伴的容器。其餘值回傳0。

傳回值

int:32位元serial容器; 0 如果沒有視窗或數字不正確。這不是type。保留最高有效位:檢查 != 0,而不是 > 0 或 == true。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var value = UO.GetTradeContainer(1, 1);
UO.Print(Hex(value));

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

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • Total — 視窗數量的快照;索引 - 目前索引/編號。枚舉示例沒有證實任何事情。在 GetTradeContainer 中,兩個呼叫讀取第一個視窗 (1) 的容器 (1) ​​和其他人的 (2)。
return  RunScenario();
 object? RunScenario()
{
    var ours = UO.GetTradeContainer(1, 1);
    var theirs = UO.GetTradeContainer(1, 2);
    UO.Print(Hex(ours) + " / " + Hex(theirs));
    return null;
}

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

3。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var value = ReadTradeValue(1);
        UO.Print(Hex(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return 0;
        }

        return UO.GetTradeContainer(index, 1);
    }

    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.GetTradeContainer(tradeNum, num) — UO.GetTradeContainer(Any,Any)

參數: tradeNum (Any), num (Any)

結果: dynamic / Any.

呼叫時:

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

case "gettradecontainer": return new InjectionValue(bridge.GetTradeContainer(Arg(0), Arg(1)));

UO.GetTradeOpponent

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

C# 簽章

dynamic UO.GetTradeOpponent(object? tradeNum);

傳回夥伴角色的數字 serial。

參數

  • tradeNum — 整數:從 1 到 TradeCount() 的目前視窗號。 0 和負值是不允許的。這不是serial。

傳回值

int:來自LocalSerial窗口的serial字符; 0 如果沒有窗戶。不是容器,也不是bool;檢查! = 0。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var value = UO.GetTradeOpponent(1);
UO.Print(Hex(value));

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

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • Total — 視窗數量的快照;索引 - 目前索引/編號。枚舉示例沒有證實任何事情。在 GetTradeContainer 中,兩個呼叫讀取第一個視窗 (1) 的容器 (1) ​​和其他人的 (2)。
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(1); index <= total - 0; index += (int)(1))
    {
        var value = UO.GetTradeOpponent(index);
        UO.Print(Convert.ToString(index) + ": " + Hex(value));
    }

    return null;
}

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

3。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var value = ReadTradeValue(1);
        UO.Print(Hex(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return 0;
        }

        return UO.GetTradeOpponent(index);
    }

    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.GetTradeOpponent(tradeNum) — UO.GetTradeOpponent(Any)

參數: tradeNum (Any)

結果: dynamic / Any.

呼叫時:

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

case "gettradeopponent": return new InjectionValue(bridge.GetTradeOpponent(Arg(0)));

UO.GetTradeOpponentName

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

C# 簽章

dynamic UO.GetTradeOpponentName(object? tradeNum);

傳回隨交換視窗一起收到的合作夥伴名稱。

參數

  • tradeNum — 整數:從 1 到 TradeCount() 的目前視窗號。 0 和負值是不允許的。這不是serial。

傳回值

string:交易所開倉包名稱;如果沒有視窗或名稱,則為空字串。不再詢問姓名。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var value = UO.GetTradeOpponentName(1);
UO.Print(Convert.ToString(value));

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • Total — 視窗數量的快照;索引 - 目前索引/編號。枚舉示例沒有證實任何事情。在 GetTradeContainer 中,兩個呼叫讀取第一個視窗 (1) 的容器 (1) ​​和其他人的 (2)。
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(1); index <= total - 0; index += (int)(1))
    {
        var value = UO.GetTradeOpponentName(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var value = ReadTradeValue(1);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 1) || Truth(index >= total + 1))
        {
            return "";
        }

        return UO.GetTradeOpponentName(index);
    }

    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.GetTradeOpponentName(tradeNum) — UO.GetTradeOpponentName(Any)

參數: tradeNum (Any)

結果: dynamic / Any.

呼叫時:

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

case "gettradeopponentname": return new InjectionValue(bridge.GetTradeOpponentName(Arg(0)));

UO.IsTrade

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

C# 簽章

int UO.IsTrade();

檢查是否有開放的安全交換窗口。

參數

沒有參數。

傳回值

int: 1(滿足條件)- 有開放交換; 0(不滿足條件)- 否。

該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var value = UO.IsTrade();
UO.Print(Convert.ToString(value));

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • 前/後 - 兩個獨立的快照,間隔 500 毫秒。暫停並不等待特定的交換;在讀數之間,狀態可能會改變幾次。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.IsTrade();
    await Delay(500);
    var after = UO.IsTrade();
    UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
    return null;
}

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

3。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var value = ReadTradeState();
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeState()
    {
        return UO.IsTrade();
    }
}

命令實作

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

UO.IsTrade() — UO.IsTrade()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "istrade": return new InjectionValue(bridge.IsTrade());

UO.TradeCheck

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

C# 簽章

int UO.TradeCheck(object? windowIndex);
dynamic UO.TradeCheck(object? tradeNum, object? num);
int UO.TradeCheck(object? windowIndex, object? checkbox, object? stateValue);

讀取同意標誌;三參數形式也修改自己的複選框。

參數

  • windowIndex — 整數:從0到TradeCount()-1的目前視窗索引。負數或缺失索引會產生空白結果。這不是serial。
  • tradeNum — 整數:從0到TradeCount()-1的目前視窗索引。負數或缺失索引會產生空白結果。這不是serial。
  • num — 僅二參數形式:1 — 自己的旗幟,2 — 夥伴的旗幟;其他意義給出0。 TradeNum 這裡從0 開始。
  • checkbox — 僅三參數形式:0 — 您自己的旗幟,1 — 您夥伴的旗幟。別人的標誌只能讀取; 0給了另一個意義。
  • stateValue — 僅適用於複選框=0:0/false 刪除同意,包括任何非零數字/true。如果 checkbox=1 該值將被忽略。

傳回值

int: 1(滿足條件)-選取的複選框被選取; 0(不滿足條件)- 已移除、窗戶缺失或側面不正確。記錄表單傳回狀態而非成功交易的指示:清除複選框回傳0。

該命令的結果是一個數字標誌: 1 表示滿足條件, 0 - 未實現。後 var 結果=命令(...)檢查是否(結果!= 0) 或 if (結果 == 0)。儲存一次呼叫的結果:重複呼叫可以再次執行該操作或讀取已經變更的狀態。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • UO.TradeCheck(0)和UO.TradeCheck(0,1)讀取第一個視窗的協定; UO.TradeCheck(0,2) - 別人的。沒有錄音,也沒有自動確認。
var own = UO.TradeCheck(0);
var sameOwn = UO.TradeCheck(0, 1);
var other = UO.TradeCheck(0, 2);
UO.Print(Convert.ToString(own) + "/" + Convert.ToString(sameOwn) + "/" + Convert.ToString(other));

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • UO.TradeCheck(0,0,false)撤回同意。 UO.TradeCheck(0,1,false) 只讀伴侶的同意: false 無法改變別人的立場。我們期待退出後的結果0。
return  RunScenario();
 object? RunScenario()
{
    var cleared = UO.TradeCheck(0, 0, false);
    var other = UO.TradeCheck(0, 1, false);
    UO.Print(Convert.ToString(cleared) + "/" + Convert.ToString(other));
    return null;
}

3。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var accepted = BothAccepted(0);
        if (Truth(Truth(accepted) == true))
        {
            UO.Print("Both boxes are checked; server completion is not known");
        }

        return null;
    }

    dynamic BothAccepted(dynamic index)
    {
        if (Truth(index < 0) || Truth(index >= UO.TradeCount()))
        {
            return false;
        }

        var own = UO.TradeCheck(index, 1);
        var other = UO.TradeCheck(index, 2);
        return Truth(Truth(own) == true) && Truth(Truth(other) == true);
    }

    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.TradeCheck(windowIndex) — UO.TradeCheck(Any)

參數: windowIndex (Any)

結果: int / Integer.

呼叫時:

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

public int TradeCheck(InjectionValue windowIndex)

            => bridge.TradeCheck(NumberConversions.ToInt(windowIndex), 0, 0, false);

UO.TradeCheck(tradeNum, num) — UO.TradeCheck(Any,Any)

參數: tradeNum (Any), num (Any)

結果: dynamic / Any.

呼叫時:

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

case "tradecheck":

                    // The compatibility reader uses participants 1/2; the legacy

                    // one/three-argument forms use checkbox indices 0/1.

                    int tradeSide = Arg(1);

                    return new InjectionValue(tradeSide is 1 or 2

                        ? bridge.TradeCheck(Arg(0), tradeSide - 1, 0, false) : 0);

UO.TradeCheck(windowIndex, checkbox, stateValue) — UO.TradeCheck(Any,Any,Any)

參數: windowIndex (Any), checkbox (Any), stateValue (Any)

結果: int / Integer.

呼叫時:

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

public int TradeCheck(InjectionValue windowIndex, InjectionValue checkbox, InjectionValue stateValue)

            => bridge.TradeCheck(NumberConversions.ToInt(windowIndex), NumberConversions.ToInt(checkbox), NumberConversions.ToInt(stateValue), true);

UO.TradeContainer

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

C# 簽章

string UO.TradeContainer(object? windowIndex);

以十六進位字串形式傳回其交換容器的serial。

參數

  • windowIndex — 整數:從0到TradeCount()-1的目前視窗索引。負數或缺失索引會產生空白結果。這不是serial。

傳回值

string:十六進位形式「0x40000011」;若沒有窗戶,則為「0x00000000」。這是其容器的 ID,而不是 bool,也不是空字串。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var value = UO.TradeContainer(0);
UO.Print(Convert.ToString(value));

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • Total — 視窗數量的快照;索引 - 目前索引/編號。枚舉示例沒有證實任何事情。在 GetTradeContainer 中,兩個呼叫讀取第一個視窗 (1) 的容器 (1) ​​和其他人的 (2)。
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeContainer(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "0x00000000";
        }

        return UO.TradeContainer(index);
    }

    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.TradeContainer(windowIndex) — UO.TradeContainer(Any)

參數: windowIndex (Any)

結果: string / String.

呼叫時:

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

public string TradeContainer(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeContainer(NumberConversions.ToInt(windowIndex)));

UO.TradeCount

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

C# 簽章

int UO.TradeCount();

傳回開啟的交換視窗的數量。

參數

沒有參數。

傳回值

int:來自0的視窗數。這是一個數量,不是bool;要檢查可用性,請使用 > 0。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var value = UO.TradeCount();
UO.Print(Convert.ToString(value));

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • 前/後 - 兩個獨立的快照,間隔 500 毫秒。暫停並不等待特定的交換;在讀數之間,狀態可能會改變幾次。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var before = UO.TradeCount();
    await Delay(500);
    var after = UO.TradeCount();
    UO.Print(Convert.ToString(before) + " -> " + Convert.ToString(after));
    return null;
}

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

3。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var value = ReadTradeState();
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeState()
    {
        return UO.TradeCount();
    }
}

命令實作

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

UO.TradeCount() — UO.TradeCount()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int TradeCount() => bridge.TradeCount();

UO.TradeName

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

C# 簽章

string UO.TradeName(object? windowIndex);

透過從零開始的索引從交換視窗傳回合作夥伴的名稱。

參數

  • windowIndex — 整數:從0到TradeCount()-1的目前視窗索引。負數或缺失索引會產生空白結果。這不是serial。

傳回值

string:已儲存的夥伴名稱;如果沒有視窗/名稱,則為空字串。不使用容器項目名稱。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var value = UO.TradeName(0);
UO.Print(Convert.ToString(value));

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • Total — 視窗數量的快照;索引 - 目前索引/編號。枚舉示例沒有證實任何事情。在 GetTradeContainer 中,兩個呼叫讀取第一個視窗 (1) 的容器 (1) ​​和其他人的 (2)。
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeName(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "";
        }

        return UO.TradeName(index);
    }

    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.TradeName(windowIndex) — UO.TradeName(Any)

參數: windowIndex (Any)

結果: string / String.

呼叫時:

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

public string TradeName(InjectionValue windowIndex) => bridge.TradeName(NumberConversions.ToInt(windowIndex));

UO.TradeOpponent

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

C# 簽章

string UO.TradeOpponent(object? windowIndex);

以十六進位字串形式傳回夥伴容器的serial;這不是 ID 角色。

參數

  • windowIndex — 整數:從0到TradeCount()-1的目前視窗索引。負數或缺失索引會產生空白結果。這不是serial。

傳回值

string:別人容器ID2的十六進位serial;如果沒有窗戶,則為「0x00000000」。對於 ID 字符,請使用 GetTradeOpponent(索引 + 1)。

行為

  • GetTradeContainer/GetTradeOpponent/GetTradeOpponentName/ConfirmTrade/CancelTrade 給窗戶編號 1; TradeContainer/TradeOpponent/TradeName 和所有形式 TradeCheck - 和 0。這是該客戶端的一個明顯的兼容性:不同引擎的外部參考書使用不同的參考點。
  • 讀取是使用當前世界的即時視窗在遊戲執行緒上執行的。關閉的窗戶不算數。讀取呼叫不發送資料包,也不等待回應。開啟、關閉、移至頂部視窗時,UI的順序可以改變;該號碼不是永久標識符。
  • ConfirmTrade及其TradeCheck記錄僅在同意發生變化時發送資料包。別人是否同意由伺服器決定。 CancelTrade 發送取消一次。 1/true是本地狀態/處理,不保證交換完成。名稱和雙方協議並不能證明物品的成分沒有改變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接閱讀或行動—直接腳本

參數與執行流程:

  • 呼叫一次,結果儲存在 value/result 中。 0 是第一個索引,1 是第一個數字(請參閱此指令的語法)。 HEX 顯示數字serial; Convert.ToString — 數字或字串。
var value = UO.TradeOpponent(0);
UO.Print(Convert.ToString(value));

2。其他腳本和選項 - 腳本功能

參數與執行流程:

  • Total — 視窗數量的快照;索引 - 目前索引/編號。枚舉示例沒有證實任何事情。在 GetTradeContainer 中,兩個呼叫讀取第一個視窗 (1) 的容器 (1) ​​和其他人的 (2)。
return  RunScenario();
 object? RunScenario()
{
    var total = UO.TradeCount();
    for (int index = (int)(0); index <= total - 1; index += (int)(1))
    {
        var value = UO.TradeOpponent(index);
        UO.Print(Convert.ToString(index) + ": " + Convert.ToString(value));
    }

    return null;
}

3。具有所有功能的完整助手 - 腳本類

參數與執行流程:

  • 助手是完整給的,實際上是從 Main 調用的。 Range/ID 檢查降低了錯誤的風險,但多個呼叫不是原子的:視窗可以在它們之間改變。對於動作 expectedPartner — 已儲存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()
    {
        var value = ReadTradeValue(0);
        UO.Print(Convert.ToString(value));
        return null;
    }

    dynamic ReadTradeValue(dynamic index)
    {
        var total = UO.TradeCount();
        if (Truth(index < 0) || Truth(index >= total + 0))
        {
            return "0x00000000";
        }

        return UO.TradeOpponent(index);
    }

    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.TradeOpponent(windowIndex) — UO.TradeOpponent(Any)

參數: windowIndex (Any)

結果: string / String.

呼叫時:

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

public string TradeOpponent(InjectionValue windowIndex) => NumberConversions.ToHex(bridge.TradeOpponent(NumberConversions.ToInt(windowIndex)));
⚠️ **GitHub.com Fallback** ⚠️