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

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

Targeting

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

使用目標遊標和預設響應WaitTarget進行手動響應。設定預期目標和執行操作是不同的操作。

部分

主題 命令與解釋
Target UO.Target
TargetID UO.TargetID
TargetToObject UO.TargetToObject
TargetToTile UO.TargetToTile
TargetToXYZ UO.TargetToXYZ
TargetByResource UO.TargetByResource
WaitTarget UO.WaitTarget
WaitTargetObject UO.WaitTargetObject
WaitTargetType UO.WaitTargetType
WaitTargetTile UO.WaitTargetTile
WaitTargetXYZ UO.WaitTargetXYZ
WaitTargetSelf UO.WaitTargetSelf
LastTarget UO.LastTarget
CancelTarget UO.CancelTarget
Client Target Response UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.WaitForClientTargetResponse · UO.ClientTargetResponse

所有主題命令

目標

UO.Target · UO.TargetID · UO.Targeting · UO.TargetPresent · UO.TargetToObject · UO.TargetToTile · UO.TargetToXYZ · UO.TargetByResource · UO.LastTarget · UO.LastTargetX · UO.LastTargetY · UO.LastTile · UO.TicksTarget

Waiting / 取消

UO.WaitTarget · UO.WaitTargetObject · UO.WaitTargetType · UO.WaitTargetObjectType · UO.WaitTargetTile · UO.WaitTargetXYZ · UO.WaitTargetSelf · UO.WaitTargetGround · UO.WaitTargetLast · UO.WaitForTarget · UO.IsWaitTargetActive · UO.CancelTarget · UO.CancelWaitTarget

客戶端Target響應

UO.ClientRequestObjectTarget · UO.ClientRequestTileTarget · UO.ClientTargetResponse · UO.ClientTargetResponsePresent · UO.WaitForClientTargetResponse

關於該主題的範例

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

UO.WaitTargetObject

參數、結果及所有場景

UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");

UO.TargetToXYZ

參數、結果及所有場景

if (Truth(UO.TargetPresent()))
{
    UO.TargetToXYZ(1445, 1690, 0);
}

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

完整指令說明


UO.CancelTarget

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

C# 簽章

void UO.CancelTarget();

取消活動遊標並清除準備好的十字線響應。

參數

沒有參數。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 已發送到伺服器的回覆不會被撤回。
  • 本機回呼目標被取消;對於活動伺服器目標,會傳送目標取消。
  • 此佇列對於客戶端來說是公共的:它的清除適用於所有流程的準備回應。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。不准备 - 直接脚本

參數與執行流程:

  • 沒有爭論。
  • 對self的待處理回應被刪除。
UO.WaitTargetSelf();
UO.CancelTarget();

2。替换之前准备好的点脚本函数

參數與執行流程:

  • 1445/1690/0 是世界上新點的範例。
  • 在設定新目標之前,舊的答案將會被刪除。
return  RunScenario();
 object? RunScenario()
{
    UO.CancelTarget();
    UO.WaitTargetXYZ(1445, 1690, 0);
    return null;
}

3。逾時後拒絕-腳本類

參數與執行流程:

  • UO.Wait=1000 ms 是此範例的限制。
  • 檢查的是剩餘隊列,不是技能成功。如果沒有伺服器十字線,下一個外部命令將不會收到舊的回應。
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()
    {
        UO.WaitTargetSelf();
        UO.UseSkill("Anatomy");
        await Delay(1000);
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelTarget();
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.CancelTarget() — UO.CancelTarget()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void CancelTarget()

        {

            var waitTargetQueue = bridge.GetWaitTargetQueue();

            if (waitTargetQueue.Length > 0 || bridge.IsTargeting() != 0)

            {

                bridge.CancelTarget();

                SystemMessage("Targeting cancelled");

            }

            else

                SystemMessage("Error: no target to cancel");

        }

UO.CancelWaitTarget

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

C# 簽章

void UO.CancelWaitTarget();

清除準備好的十字準線響應。

參數

沒有參數。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 已發送到伺服器的回覆不會被撤回。
  • 開啟的遊標保持活動狀態;稍後可以手動處理。
  • 此佇列對於客戶端來說是公共的:它的清除適用於所有流程的準備回應。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。不准备 - 直接脚本

參數與執行流程:

  • 沒有爭論。
  • 對self的待處理回應被刪除。
UO.WaitTargetSelf();
UO.CancelWaitTarget();

2。替换之前准备好的点脚本函数

參數與執行流程:

  • 1445/1690/0 是世界上新點的範例。
  • 在設定新目標之前,舊的答案將會被刪除。
return  RunScenario();
 object? RunScenario()
{
    UO.CancelWaitTarget();
    UO.WaitTargetXYZ(1445, 1690, 0);
    return null;
}

3。逾時後拒絕-腳本類

參數與執行流程:

  • UO.Wait=1000 ms 是此範例的限制。
  • 檢查的是剩餘隊列,不是技能成功。如果沒有伺服器十字線,下一個外部命令將不會收到舊的回應。
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()
    {
        UO.WaitTargetSelf();
        UO.UseSkill("Anatomy");
        await Delay(1000);
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelWaitTarget();
        }

        return null;
    }

    Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
    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.CancelWaitTarget() — UO.CancelWaitTarget()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "cancelwaittarget": bridge.CancelWaitTarget(); return InjectionValue.Unit;

UO.ClientRequestObjectTarget

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

C# 簽章

void UO.ClientRequestObjectTarget();

開啟本地十字準線以手動選擇項目或角色。

參數

沒有參數。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 該運行時的先前結果將會重設。該命令立即返回,無需等待單擊。
  • 結果在WaitForClientTargetResponse或ClientTargetResponsePresent之後讀取ClientTargetResponse。
  • 停止正在運行的過程會刪除最近幀中屬於它的範圍。如果另一個請求已經替換了遊標,則取消它不受影響。
  • 一個客戶端介面十字準線不能同時用於兩個獨立的手動選擇。在處理完前一個請求之前,請勿啟動新請求。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。選擇一個項目或角色 - 直接腳本

參數與執行流程:

  • 5000 — 按一下等待逾時(以毫秒為單位)。新的查詢會重置先前的結果。
  • 五個欄位的陣列指示選定的物件。結果[0]是serial,而不是type。
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Serial: " + UO.Int2Hex(result[0]));
    }
    else
    {
        UO.Print("Selection cancelled");
    }
}

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;

2。取消是一個回應,但不是一個物件 - 腳本函數

參數與執行流程:

  • CancelTarget取消本地選擇;回呼返回空結果。
  • ClientTargetResponsePresent 給出1,但陣列的長度為0。在未檢查長度的情況下請勿訪問結果[0]。
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestObjectTarget();
    UO.CancelTarget();
    if (Truth(UO.ClientTargetResponsePresent()))
    {
        var result = UO.ClientTargetResponse();
        UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
    }

    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;

3。選擇物件並儲存命名參考 - 腳本類

參數與執行流程:

  • 回應包含五個欄位;serial 在結果[0]中。超时和取消不会产生可用的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.ClientRequestObjectTarget();
        if (UO.WaitForClientTargetResponse(5000) == 0)
            return false;
        var result = UO.ClientTargetResponse();
        if (((object? [])result).Length != 5 || Convert.ToInt32(result[0]) == 0)
            return false;
        UO.AddObject("selected_object", result[0]);
        UO.Print($"Saved object: {UO.GetName(result[0])}");
        return true;
        return null;
    }
}

命令實作

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

UO.ClientRequestObjectTarget() — UO.ClientRequestObjectTarget()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "clientrequestobjecttarget": bridge.RequestClientTarget(false); return InjectionValue.Unit;

UO.ClientRequestTileTarget

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

C# 簽章

void UO.ClientRequestTileTarget();

開啟本地十字線以手動選擇點/圖塊或物件。

參數

沒有參數。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 該運行時的先前結果將會重設。該命令立即返回,無需等待單擊。
  • 結果在WaitForClientTargetResponse或ClientTargetResponsePresent之後讀取ClientTargetResponse。
  • 停止正在運行的過程會刪除最近幀中屬於它的範圍。如果另一個請求已經替換了遊標,則取消它不受影響。
  • 一個客戶端介面十字準線不能同時用於兩個獨立的手動選擇。在處理完前一個請求之前,請勿啟動新請求。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取所選圖塊的座標 - 直接腳本

參數與執行流程:

  • 結果[1] - graphic,結果[2]/[3]/[4] - X/Y/Z。世界圖塊serial的結果[0]等於0。
  • 類型、座標和 serial 是單獨的字段。該數組中沒有靜態層索引。
UO.ClientRequestTileTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Type: " + UO.Int2Hex(result[1]));
        UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
    }
}

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;

2。儲存選定單元格的座標 - 腳本函數

參數與執行流程:

  • 對於單元格,X/Y/Z 位於字段2/3/4 中。全球商店字串; graphic 和 serial 不取代此處的座標。
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestTileTarget();
    if (UO.WaitForClientTargetResponse(5000) == 0)
        return false;
    var selection = (object? [])UO.ClientTargetResponse();
    if (selection.Length != 5)
        return false;
    UO.SetGlobal("route.x", Convert.ToString(selection[2]));
    UO.SetGlobal("route.y", Convert.ToString(selection[3]));
    UO.SetGlobal("route.z", Convert.ToString(selection[4]));
    return true;
    return null;
}

3。中止本機儲存格選擇 - 腳本類

參數與執行流程:

  • CancelTarget 覆蓋本地遊標。取消後出現回調並不代表選擇成功。
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()
    {
        UO.ClientRequestTileTarget();
        await WaitAsync(1000);
        UO.CancelTarget();
        if (UO.ClientTargetResponsePresent() != 0)
        {
            var result = (object? [])UO.ClientTargetResponse();
            UO.Print($"Response after cancel: {result.Length} fields");
        }

        return null;
    }
}

命令實作

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

UO.ClientRequestTileTarget() — UO.ClientRequestTileTarget()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "clientrequesttiletarget": bridge.RequestClientTarget(true); return InjectionValue.Unit;

UO.ClientTargetResponse

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

C# 簽章

dynamic UO.ClientTargetResponse();

將最後一個本地ClientRequest*的結果複製到陣列中。

參數

沒有參數。

傳回值

五個數組 int: [0]=serial 目的 (0 在地面/靜態), [1]=graphic/type, [2]=X, [3]=Y, [4]=Z。在選擇之前、透過新請求重設之後、或在取消或不適當的選擇時傳回空數組。沒有任何 hue、地圖、靜態圖層索引和土地/靜態屬性。這不是具有命名字段的對象。

行為

  • 讀取不會消耗結果:可以再次讀取結果。新的 ClientRequest* 取代了它。
  • 在存取索引之前始終檢查ArrayLength(結果)=5。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。選擇一個項目或角色 - 直接腳本

參數與執行流程:

  • 5000 — 按一下等待逾時(以毫秒為單位)。新的查詢會重置先前的結果。
  • 五個欄位的陣列指示選定的物件。結果[0]是serial,而不是type。
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Serial: " + UO.Int2Hex(result[0]));
    }
    else
    {
        UO.Print("Selection cancelled");
    }
}

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;

2。讀取所選圖塊的座標 - 腳本函數

參數與執行流程:

  • 結果[1] - graphic,結果[2]/[3]/[4] - X/Y/Z。世界圖塊serial的結果[0]等於0。
  • 類型、座標和 serial 是單獨的字段。該數組中沒有靜態層索引。
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestTileTarget();
    if (Truth(UO.WaitForClientTargetResponse(5000)))
    {
        var result = UO.ClientTargetResponse();
        if (Truth(ArrayLength(result) == 5))
        {
            UO.Print("Type: " + UO.Int2Hex(result[1]));
            UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
        }
    }

    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;

3。取消是一個回應,但不是一個物件 - 腳本類

參數與執行流程:

  • CancelTarget取消本地選擇;回呼返回空結果。
  • ClientTargetResponsePresent 給出1,但陣列的長度為0。在未檢查長度的情況下請勿訪問結果[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()
    {
        UO.ClientRequestObjectTarget();
        UO.CancelTarget();
        if (Truth(UO.ClientTargetResponsePresent()))
        {
            var result = UO.ClientTargetResponse();
            UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
        }

        return null;
    }

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

命令實作

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

UO.ClientTargetResponse() — UO.ClientTargetResponse()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "clienttargetresponse":

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

UO.ClientTargetResponsePresent

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

C# 簽章

dynamic UO.ClientTargetResponsePresent();

檢查是否收到對最後一個本地選擇請求的回應。

參數

沒有參數。

傳回值

int 1 — 回呼已回應,包括取消; 0 - 新選擇尚未完成。值 1 不保證物件的存在:取消時,ClientTargetResponse 傳回一個空數組。

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

行為

  • 不指示伺服器視線的存在,也不描述WaitTarget隊列。
  • 讀取結果不會重設該標誌;它被下一個ClientRequest*重設。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。取消是一个响应,但不是一个对象 - 直接脚本

參數與執行流程:

  • CancelTarget取消本地選擇;回呼返回空結果。
  • ClientTargetResponsePresent 給出1,但陣列的長度為0。在未檢查長度的情況下請勿訪問結果[0]。
UO.ClientRequestObjectTarget();
UO.CancelTarget();
if (Truth(UO.ClientTargetResponsePresent()))
{
    var result = UO.ClientTargetResponse();
    UO.Print("Fields: " + Convert.ToString(ArrayLength(result)));
}

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;

2。選擇物件後檢查準備 - 腳本功能

參數與執行流程:

  • 檢查響應的準備及其內容。屬性 1 不是 serial 物件。
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestObjectTarget();
    if (UO.WaitForClientTargetResponse(5000) == 0)
        return false;
    if (UO.ClientTargetResponsePresent() == 0)
        return false;
    var response = (object? [])UO.ClientTargetResponse();
    return response.Length == 5 && Convert.ToInt32(response[0]) != 0;
    return null;
}

3。單元格選擇準備度民意調查 - 腳本類

參數與執行流程:

  • 輪詢時間限制為五秒。如果沒有回應,則遊標被取消; X/Y/Z 欄位僅從完整回應中讀取。
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()
    {
        UO.ClientRequestTileTarget();
        for (int attempt = 0; attempt < 50; attempt++)
        {
            if (UO.ClientTargetResponsePresent() != 0)
            {
                var response = (object? [])UO.ClientTargetResponse();
                if (response.Length == 5)
                    UO.Print($"Selected tile: {response[2]},{response[3]},{response[4]}");
                return null;
            }

            await WaitAsync(100);
        }

        UO.CancelTarget();
        UO.Print("Selection timed out");
        return null;
    }
}

命令實作

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

UO.ClientTargetResponsePresent() — UO.ClientTargetResponsePresent()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "clienttargetresponsepresent": return new InjectionValue(bridge.ClientTargetResponsePresent());

UO.IsWaitTargetActive

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

C# 簽章

dynamic UO.IsWaitTargetActive();

檢查準備好的回應是否保留在目標佇列中。

參數

沒有參數。

傳回值

int 1 - 存在未取消的物件、方塊的延遲目標或取消下一個瞄準; 0 - 隊列為空。它沒有打開的遊標;對於遊標,使用 TargetPresent/Targeting。

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

行為

  • 讀取整個客戶端佇列。如果多個過程同時運行,則每個過程的回應都會被考慮在內。
  • 零僅表示沒有待處理的回應。它並不確認在伺服器上成功使用技能或咒語。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。檢查準備-直接腳本

參數與執行流程:

  • 預計在 WaitTargetSelf 之後和伺服器目標 1 之前。
  • CancelWaitTarget 清空隊列;下一個測試給出0。
UO.WaitTargetSelf();
UO.Print(Convert.ToString(UO.IsWaitTargetActive()));
UO.CancelWaitTarget();

2。有界地等待響應被花費 - 腳本函數

參數與執行流程:

  • 該檢查沒有參數。 UO.Wait=50毫秒,最大20期望。
  • 如果答案仍然存在,則取消。單獨新增對伺服器操作結果的檢查。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var attempts = 0;
    while (Truth(UO.IsWaitTargetActive()) && Truth(attempts < 20))
    {
        await Delay(50);
        attempts = attempts + 1;
    }

    if (Truth(UO.IsWaitTargetActive()))
    {
        UO.CancelWaitTarget();
    }

    return null;
}

Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;

3。顯示隊列和視線之間的差異 - 腳本類

參數與執行流程:

  • 第一行顯示延遲響應,第二行顯示視線狀態。
  • 沒有遊標的佇列和沒有佇列的遊標都是可以的;這些值不可互換。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        UO.Print("Cursor: " + Convert.ToString(UO.TargetPresent()));
        return null;
    }
}

命令實作

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

UO.IsWaitTargetActive() — UO.IsWaitTargetActive()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "iswaittargetactive": return new InjectionValue(Waiting());

UO.LastTarget

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

C# 簽章

int UO.LastTarget();

讀取最後儲存的目標物件的serial。

參數

沒有參數。

傳回值

int - serial/ID,不是type,也不是bool。 0 表示不存在目標物件;地面和靜態也有 serial 0,儘管可以儲存座標。所有 32 位元均被保留。要檢查非零 ID,請使用 != 0,而不是 > 0,或 == true。

行為

  • 無參數。不開啟瞄準器,不選擇新目標,不攻擊或發送資料包。 LastTarget與LastAttack和LastStatus不同。正常選擇self不會取代最後一個目標;顯式的ClientMarkChar可以改變它。
  • 在SetEntity,已知實體被保留。 X/Y;對於容器中的項目,這可能是內容的座標。 SetLand/SetStatic拯救所選點的世界X/Y。物件的後續移動/移除不會更改已儲存的座標。對於目前位置,請使用GetX/GetY(serial)。
  • Clear 和 World.Clear 清晰錄製,包括儲存腳本時。顯式設定中的未知serial不會繼承之前的X/Y:它們會變成0。這不能保證目標存在於伺服器上。
  • 透過單獨的指令讀取serial和X/Y不是原子的。對於目標物件LastTile儲存網路X/Y=65535;這不是已儲存的物件位置。對於地面/靜態LastTile(1)/(2),讀取所選的X/Y。不帶括號的lasttarget是內建即時值,除非被變數覆蓋。
  • World.Clear 调用ClearWorldState:重置活动回调、保存的目标和重播数据包。正常重置會保存歷史記錄。內部TargetLast僅將儲存的資料包傳送到活動伺服器目標;如果沒有歷史記錄或本地回調,它不會發送任何內容並保存目標。活动的客户端回调接收 null 一次作为取消:当响应为空时,ClientTargetResponsePresent 变为 1。完成選擇後不會再通知。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取儲存值 - 直接腳本

參數與執行流程:

  • value 是指令的唯一結果;HEX 顯示ID,轉換。 ToString 為座標。該呼叫不會選擇任何內容。
var value = UO.LastTarget();
UO.Print("Saved value: " + Hex(value));

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

2。比較已儲存位置和目前位置 - 腳本功能

參數與執行流程:

  • id — 已儲存serial。 Exists 檢查GetX/GetY 之前是否存在物件。保存的座標和當前座標可能有所不同。使用serial=0,範例會列印所選點,但0本身並不證明該點已被選擇。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    var x = UO.LastTargetX();
    var y = UO.LastTargetY();
    UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(id)));
    }

    return null;
}

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

3。完整助手ReadTargetValue - 腳本類

參數與執行流程:

  • 最小值/最大值指定助手結果的可接受範圍,而不是API參數。助手已完全定義; -1是它自己超出範圍的標誌。對於 ID,檢查儲存任何非零 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 = ReadTargetValue();
        UO.Print("Checked value: " + Convert.ToString(value));
        return null;
    }

    dynamic ReadTargetValue()
    {
        var value = UO.LastTarget();
        if (Truth(value == 0))
        {
            return -1;
        }

        return value;
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

case "lasttarget": return new InjectionValue(bridge.LastTarget);

UO.LastTargetX

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

C# 簽章

int UO.LastTargetX();

讀取選擇最後一個目標時儲存的 X 座標。

參數

沒有參數。

傳回值

int是X保存的坐标,不是屏幕像素。清除之前/之后或对于未知物体 - 0;真实坐标0也可以。不是bool。对于地面/静态,它也适用于 LastTarget()=0。

行為

  • 無參數。不開啟瞄準器,不選擇新目標,不攻擊或發送資料包。 LastTarget與LastAttack和LastStatus不同。正常選擇self不會取代最後一個目標;顯式的ClientMarkChar可以改變它。
  • 在SetEntity,已知實體被保留。 X/Y;對於容器中的項目,這可能是內容的座標。 SetLand/SetStatic拯救所選點的世界X/Y。物件的後續移動/移除不會更改已儲存的座標。對於目前位置,請使用GetX/GetY(serial)。
  • Clear 和 World.Clear 清晰錄製,包括儲存腳本時。顯式設定中的未知serial不會繼承之前的X/Y:它們會變成0。這不能保證目標存在於伺服器上。
  • 透過單獨的指令讀取serial和X/Y不是原子的。對於目標物件LastTile儲存網路X/Y=65535;這不是已儲存的物件位置。對於地面/靜態LastTile(1)/(2),讀取所選的X/Y。不帶括號的lasttarget是內建即時值,除非被變數覆蓋。
  • World.Clear 调用ClearWorldState:重置活动回调、保存的目标和重播数据包。正常重置會保存歷史記錄。內部TargetLast僅將儲存的資料包傳送到活動伺服器目標;如果沒有歷史記錄或本地回調,它不會發送任何內容並保存目標。活动的客户端回调接收 null 一次作为取消:当响应为空时,ClientTargetResponsePresent 变为 1。完成選擇後不會再通知。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取儲存值 - 直接腳本

參數與執行流程:

  • value 是指令的唯一結果;HEX 顯示ID,轉換。 ToString 為座標。該呼叫不會選擇任何內容。
var value = UO.LastTargetX();
UO.Print("Saved value: " + Convert.ToString(value));

2。比較已儲存位置和目前位置 - 腳本功能

參數與執行流程:

  • id — 已儲存serial。 Exists 檢查GetX/GetY 之前是否存在物件。保存的座標和當前座標可能有所不同。使用serial=0,範例會列印所選點,但0本身並不證明該點已被選擇。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    var x = UO.LastTargetX();
    var y = UO.LastTargetY();
    UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(id)));
    }

    return null;
}

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

3。完整助手ReadTargetValue - 腳本類

參數與執行流程:

  • 最小值/最大值指定助手結果的可接受範圍,而不是API參數。助手已完全定義; -1是它自己超出範圍的標誌。對於 ID,檢查儲存任何非零 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 = ReadTargetValue(0, 65535);
        UO.Print("Checked value: " + Convert.ToString(value));
        return null;
    }

    dynamic ReadTargetValue(dynamic minimum, dynamic maximum)
    {
        var value = UO.LastTargetX();
        if (Truth(value < minimum) || Truth(value > maximum))
        {
            return -1;
        }

        return value;
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int LastTargetX() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetX : bridge.GetX(bridge.LastTarget);

UO.LastTargetY

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

C# 簽章

int UO.LastTargetY();

讀取選擇最後一個目標時儲存的 Y 座標。

參數

沒有參數。

傳回值

int是Y保存的坐标,不是屏幕像素。清除之前/之后或对于未知物体 - 0;真实坐标0也可以。不是bool。对于地面/静态,它也适用于 LastTarget()=0。

行為

  • 無參數。不開啟瞄準器,不選擇新目標,不攻擊或發送資料包。 LastTarget與LastAttack和LastStatus不同。正常選擇self不會取代最後一個目標;顯式的ClientMarkChar可以改變它。
  • 在SetEntity,已知實體被保留。 X/Y;對於容器中的項目,這可能是內容的座標。 SetLand/SetStatic拯救所選點的世界X/Y。物件的後續移動/移除不會更改已儲存的座標。對於目前位置,請使用GetX/GetY(serial)。
  • Clear 和 World.Clear 清晰錄製,包括儲存腳本時。顯式設定中的未知serial不會繼承之前的X/Y:它們會變成0。這不能保證目標存在於伺服器上。
  • 透過單獨的指令讀取serial和X/Y不是原子的。對於目標物件LastTile儲存網路X/Y=65535;這不是已儲存的物件位置。對於地面/靜態LastTile(1)/(2),讀取所選的X/Y。不帶括號的lasttarget是內建即時值,除非被變數覆蓋。
  • World.Clear 调用ClearWorldState:重置活动回调、保存的目标和重播数据包。正常重置會保存歷史記錄。內部TargetLast僅將儲存的資料包傳送到活動伺服器目標;如果沒有歷史記錄或本地回調,它不會發送任何內容並保存目標。活动的客户端回调接收 null 一次作为取消:当响应为空时,ClientTargetResponsePresent 变为 1。完成選擇後不會再通知。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取儲存值 - 直接腳本

參數與執行流程:

  • value 是指令的唯一結果;HEX 顯示ID,轉換。 ToString 為座標。該呼叫不會選擇任何內容。
var value = UO.LastTargetY();
UO.Print("Saved value: " + Convert.ToString(value));

2。比較已儲存位置和目前位置 - 腳本功能

參數與執行流程:

  • id — 已儲存serial。 Exists 檢查GetX/GetY 之前是否存在物件。保存的座標和當前座標可能有所不同。使用serial=0,範例會列印所選點,但0本身並不證明該點已被選擇。
return  RunScenario();
 object? RunScenario()
{
    var id = UO.LastTarget();
    var x = UO.LastTargetX();
    var y = UO.LastTargetY();
    UO.Print("Saved XY: " + Convert.ToString(x) + "," + Convert.ToString(y));
    if (Truth(id != 0) && Truth(UO.Exists(id)))
    {
        UO.Print("Live XY: " + Convert.ToString(UO.GetX(id)) + "," + Convert.ToString(UO.GetY(id)));
    }

    return null;
}

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

3。完整助手ReadTargetValue - 腳本類

參數與執行流程:

  • 最小值/最大值指定助手結果的可接受範圍,而不是API參數。助手已完全定義; -1是它自己超出範圍的標誌。對於 ID,檢查儲存任何非零 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 = ReadTargetValue(0, 65535);
        UO.Print("Checked value: " + Convert.ToString(value));
        return null;
    }

    dynamic ReadTargetValue(dynamic minimum, dynamic maximum)
    {
        var value = UO.LastTargetY();
        if (Truth(value < minimum) || Truth(value > maximum))
        {
            return -1;
        }

        return value;
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int LastTargetY() => bridge is ITargetSnapshotBridge snapshot ? snapshot.LastTargetY : bridge.GetY(bridge.LastTarget);

UO.LastTile

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

C# 簽章

string UO.LastTile();
int UO.LastTile(object? index);

讀取最後儲存的圖塊目標。

參數

  • index - 選修的 int 0..3: 0=graphic, 1=X, 2=Y, 3=Z。超出範圍 - 0。如果沒有索引,則傳回整個記錄的行。

傳回值

不含參數 string "graphic X Y Z" 帶小數字段;一個字段的索引 - int。缺失/短的條目以零填充。

行為

  • NormalizeLastTile 將缺少的欄位補充為四個。該行不包含map/hue/serial。值 0 可以表示真實的 graphic/座標或無字段。
  • 此指令僅讀取已儲存的圖塊目標;不建立目標或選擇新儲存格。 WaitTargetTile("lasttile") 使用單獨的記錄存在檢查。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 讀取最後儲存的圖塊目標。
UO.Print(UO.LastTile());

2。明確選項 - 腳本函數

參數與執行流程:

  • NormalizeLastTile 將缺少的欄位補充為四個。該行不包含map/hue/serial。值 0 可以表示真實的 graphic/座標或無字段。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.LastTile(1));
    UO.Print(UO.LastTile(2));
    UO.Print(UO.LastTile(3));
    return null;
}

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

參數與執行流程:

  • 此指令僅讀取已儲存的圖塊目標;不建立目標或選擇新儲存格。 WaitTargetTile("lasttile") 使用單獨的記錄存在檢查。
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 graphic = UO.LastTile(0);
        var x = UO.LastTile(1);
        var y = UO.LastTile(2);
        var z = UO.LastTile(3);
        UO.Print(Convert.ToString(graphic) + " " + Convert.ToString(x) + " " + Convert.ToString(y) + " " + Convert.ToString(z));
        return null;
    }
}

命令實作

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

UO.LastTile() — UO.LastTile()

參數: 沒有參數。

結果: string / String.

呼叫時:

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

public string LastTile()

        {

            int[] tileInfo = NormalizeLastTile(bridge.LastTile());



            return $"{tileInfo[0]} {tileInfo[1]} {tileInfo[2]} {tileInfo[3]}";

        }

UO.LastTile(index) — UO.LastTile(Any)

參數: index (Any)

結果: int / Integer.

呼叫時:

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

public int LastTile(InjectionValue index)

        {

            var i = NumberConversions.ToInt(index);

            if (i < 0 || i > 3)

                return 0;



            return NormalizeLastTile(bridge?.LastTile())[i];



        }

UO.Target

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

C# 簽章

void UO.Target();
void UO.Target(object? @object);
void UO.Target(object? targetKey, object? target);
void UO.Target(object? targetKey, object? target, object? targetType, object? @type, object? x, object? y, object? z);

取消/設定預期目標或發送明確的目標資料包。

參數

  • object — 一個參數:serial/別名透過 WaitTargetObject 放置。沒有參數 - CancelTarget。
  • targetKey — ID 目標查詢的 int 參數的 2/7 形式,通常為 UO.TargetID()。它直接傳遞到包中,而不是按鍵。
  • target — 表格2:serial/別名或「lasttile」。形狀7:serial物件;「ground」離開serial=0。
  • 僅targetType - 7 形式:協議類型目標,通常為 0 物件、1 圖塊。可簡化為 byte。
  • type - 僅形式 7: graphic 以及圖塊/未知物體的世界座標; graphic/X/Y 減少到 ushort, Z 到 sbyte。對於已知的實體橋,將它們替換為實際的實體欄位。
  • x - 僅形式 7: graphic 以及圖塊/未知物體的世界座標; graphic/X/Y 減少到 ushort, Z 到 sbyte。對於已知的實體橋,將它們替換為實際的實體欄位。
  • y - 僅形式 7: graphic 以及圖塊/未知物體的世界座標; graphic/X/Y 減少到 ushort, Z 到 sbyte。對於已知的實體橋,將它們替換為實際的實體欄位。
  • z - 僅形式 7: graphic 以及圖塊/未知物體的世界座標; graphic/X/Y 減少到 ushort, Z 到 sbyte。對於已知的實體橋,將它們替換為實際的實體欄位。

傳回值

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

行為

  • 沒有/只有一個參數的表單沿著 ExecuteLegacyManualAlias 並控制佇列。 2/7 形式直接呼叫Target 並發送一個Send_TargetObject,而不是下一個目標的佇列。
  • 在2形式中,「lasttile」取儲存的目標圖塊的graphic/X/Y/Z;它的缺席會顯示一則訊息。未知的物件別名也會顯示一則訊息。 7 與 targetType=0 試解析 serial;其他型態剩下serial=0。
  • Bridge.Target 不檢查活動遊標/匹配targetKey;透過當前ID。不要使用先前請求中的舊密鑰。該調用不會等待伺服器接受。
  • 2/7參數的明確形式直接傳送封包:負數serial變為0,targetKey減少為uint;此分支不會清除本地遊標/佇列或更新TicksTarget。 TargetToObject/TargetToTile 使用不同的路徑來實現客戶的主動目標。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 取消/設定預期目標或發送明確的目標資料包。
UO.Target("self");
UO.Print(UO.Waiting());
UO.Target();

2。明確選項 - 腳本函數

參數與執行流程:

  • 沒有/只有一個參數的表單沿著 ExecuteLegacyManualAlias 並控制佇列。 2/7 形式直接呼叫Target 並發送一個Send_TargetObject,而不是下一個目標的佇列。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.TargetPresent()))
    {
        UO.Target(UO.TargetID(), "self");
    }

    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。完整的輔助函數 - 腳本類

參數與執行流程:

  • Bridge.Target 不檢查活動遊標/匹配targetKey;透過當前ID。不要使用先前請求中的舊密鑰。該調用不會等待伺服器接受。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        if (Truth(UO.TargetPresent()))
        {
            UO.Target(UO.TargetID(), "ground", 1, 0, UO.GetX(), UO.GetY(), UO.GetZ());
        }

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

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "target":

                    if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());

                    else CancelTarget();

                    break;

UO.Target(object) — UO.Target(Any)

參數: object (Any)

結果: void / Unit.

呼叫時:

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

case "target":

                    if (arguments.Length > 0) WaitTargetObject(arguments[0].ToString());

                    else CancelTarget();

                    break;

UO.Target(targetKey, target) — UO.Target(Any,Any)

參數: targetKey (Any), target (Any)

結果: void / Unit.

呼叫時:

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

public void Target(InjectionValue targetKey, InjectionValue target)

        {

            int key = NumberConversions.ToInt(targetKey);

            string selector = target.Kind == InjectionValueKind.String ? target.String : string.Empty;



            if (selector.Equals("lasttile", StringComparison.OrdinalIgnoreCase))

            {

                int[] tile = bridge.LastTile() ?? Array.Empty<int>();

                if (tile.Length >= 4)

                    bridge.Target(key, 0, 1, tile[0], tile[1], tile[2], tile[3]);

                else

                    SystemMessage("UO.Target: lasttile is unavailable");

                return;

            }



            if (TryGetObject(target, out int serial))

                bridge.Target(key, serial, 0, 0, 0, 0, 0);

            else

                SystemMessage($"UO.Target: invalid target '{selector}'");

        }

UO.Target(targetKey, target, targetType, type, x, y, z) — UO.Target(Any,Any,Any,Any,Any,Any,Any)

參數: targetKey (Any), target (Any), targetType (Any), type (Any), x (Any), y (Any), z (Any)

結果: void / Unit.

呼叫時:

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

public void Target

        (

            InjectionValue targetKey,

            InjectionValue target,

            InjectionValue targetType,

            InjectionValue type,

            InjectionValue x,

            InjectionValue y,

            InjectionValue z

        )

        {

            int targetTypeValue = NumberConversions.ToInt(targetType);

            string selector = target.Kind == InjectionValueKind.String ? target.String : string.Empty;

            int serial = 0;



            if (targetTypeValue == 0 && !selector.Equals("ground", StringComparison.OrdinalIgnoreCase))

                TryGetObject(target, out serial);



            bridge.Target

            (

                NumberConversions.ToInt(targetKey),

                serial,

                targetTypeValue,

                ResolveType(type),

                NumberConversions.ToInt(x),

                NumberConversions.ToInt(y),

                NumberConversions.ToInt(z)

            );

        }

UO.TargetByResource

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

C# 簽章

void UO.TargetByResource(object? objID, object? resource);

在 graphic 搜尋項目,準備給定目標並使用找到的項目。

參數

  • objID — 序列/ID 物件:int,數字/十六進位字串或已建立的別名,例如「lasttarget」。這不是graphic/type。在採取行動之前檢查裝載的物體。
  • resource — 圖形/type 要搜尋的項目,ResolveType 允許;這不是 Pascal API 中的資源欄位編號。

傳回值

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

行為

  • 在此實作中,FindType(ResolveType(Resource), -1, 0, -1, true) 搜尋項目。如果找到! = 0,則先橋接.WaitTargetObject(ObjID),然後橋接.UseObject(找到)。
  • 未發現任何內容 - 未安裝或使用任何內容。該命令不發送單獨的資源目標資料包;範圍=0 從以下位置選擇項目 RootContainer=Player.Serial,包括庫存內容/設備; recursive=true 被傳遞給bridge,但是這個scope0分支本身使用 RootContainer.

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.TargetByResource");
UO.TargetByResource("self", "0x0E21");

1。直接呼叫-直接腳本

參數與執行流程:

  • 在 graphic 搜尋項目,準備給定目標並使用找到的項目。
UO.TargetByResource("self", "0x0E21");

2。明確選項 - 腳本函數

參數與執行流程:

  • 在此實作中,FindType(ResolveType(Resource), -1, 0, -1, true) 搜尋項目。如果找到! = 0,則先橋接.WaitTargetObject(ObjID),然後橋接.UseObject(找到)。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.TargetByResource("lasttarget", "0x0E21");
    }

    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。完整的輔助函數 - 腳本類

參數與執行流程:

  • 未發現任何內容 - 未安裝或使用任何內容。該命令不發送單獨的資源目標資料包;範圍=0 從以下位置選擇項目 RootContainer=Player.Serial,包括庫存內容/設備; recursive=true 被傳遞給bridge,但是這個scope0分支本身使用 RootContainer.
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.TargetByResource("self", "0x0E21");
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

命令實作

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

UO.TargetByResource(objID, resource) — UO.TargetByResource(Any,Any)

參數: objID (Any), resource (Any)

結果: void / Unit.

呼叫時:

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

case "targetbyresource":

                {

                    int found = bridge.FindType(ResolveType(arguments[1]), -1, 0, -1, true);

                    if (found != 0) { bridge.WaitTargetObject(Arg(0)); bridge.UseObject(found); }

                    return InjectionValue.Unit;

                }

UO.TargetID

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

C# 簽章

dynamic UO.TargetID();

讀取目前目標遊標的ID。

參數

沒有參數。

傳回值

遊標的int - 32 位元ID,而非最後一個物件的serial。如果沒有遊標,則回傳0。若最高有效位被置位,則int為負; Int2Hex 保存其位。實數cursorID=0 和本地範圍也可以給出0:檢查TargetPresent 的活動。在此客戶端中,未使用空ID的特殊非空替換。

行為

  • LastTarget/GetSerial("lasttarget") 指所選對象,TargetID 指目標請求。這些值不能互相替換。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印活動遊標的ID - 直接腳本

參數與執行流程:

  • 沒有爭論。
  • Int2Hex 可讓您查看 ID 的所有位,包括最高有效位。
if (Truth(UO.TargetPresent()))
{
    UO.Print(UO.Int2Hex(UO.TargetID()));
}

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

2。區分兩種ID——腳本函數

參數與執行流程:

  • 遊標 — 視線的 ID,物體的 object — serial。
  • 在TargetToObject中,傳遞的是object,而不是遊標。
return  RunScenario();
 object? RunScenario()
{
    var cursor = UO.TargetID();
    var targetSerial = UO.GetSerial("lasttarget");
    UO.Print("Cursor: " + UO.Int2Hex(cursor));
    UO.Print("Object: " + targetSerial);
    return null;
}

3。等待後檢查 - 腳本類

參數與執行流程:

  • 1000 — 等待逾時(以毫秒為單位)。
  • 發生的符號就是結果WaitForTarget;不檢查遊標符號。
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()
    {
        if (Truth(UO.WaitForTarget(1000)))
        {
            var cursor = UO.TargetID();
            UO.Print("Request: " + UO.Int2Hex(cursor));
        }
        else
        {
            UO.Print("No cursor arrived");
        }

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

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "targetid": return new InjectionValue(bridge.GetTargetCursorId());

UO.TargetPresent

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

C# 簽章

dynamic UO.TargetPresent();

檢查客戶端是否有活動的目標選擇遊標。

參數

沒有參數。

傳回值

int 1 - TargetManager.IsTargeting 已安裝; 0 - 無活動遊標。本地回調目標也被考慮。這不是 serial 或隊列狀態 WaitTarget。

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

行為

  • 讀取狀態一次;不等待遊標出現。
  • 若要在遊戲操作後等待伺服器十字準線,請使用WaitForTarget。對於本地 ClientRequest* - WaitForClientTargetResponse 的結果。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。顯示狀態 - 直接腳本

參數與執行流程:

  • 沒有爭論。
  • 顯示1或0。
UO.Print(Convert.ToString(UO.TargetPresent()));

2。取消開啟遊標-腳本函數

參數與執行流程:

  • 透過活動遊標檢查條件。
  • 該客戶端中的CancelTarget也會清除準備好的回應。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.TargetPresent()))
    {
        UO.CancelTarget();
    }

    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。請求遊戲動作後 - 場景類

參數與執行流程:

  • UseSkill請求技能,WaitForTarget等待3000毫秒。
  • TargetToObject 僅回應活動伺服器目標;如果逾時,則不會執行該分支。
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.UseSkill("Anatomy");
        if (Truth(UO.WaitForTarget(3000)))
        {
            if (Truth(UO.TargetPresent()))
            {
                UO.TargetToObject("self");
            }
        }

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

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "targetpresent": return new InjectionValue(IsTargeting());

UO.TargetToObject

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

C# 簽章

void UO.TargetToObject(object? objID);

立即回應已經活動的伺服器目標serial物件。

參數

  • objID — Serial/ID 項目或字元、數字或十六進位/十進位字串, self/backpack/lasttarget/lastobject 或已儲存的名稱 AddObject。這不是 type。在對命名物件進行操作之前,請檢查 Exists;未解析的別名給出 serial 0.

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 如果沒有活動伺服器遊標,它不會執行任何操作,也不會建立延遲回應。初步準備,請使用WaitTargetObject/WaitTargetTile/WaitTargetXYZ。
  • 本地ClientRequest*和其他回調瞄準點不由此指令處理。
  • 伺服器判斷目標是否有效。對於記憶體不足的 serial,發送 ID 時圖形/座標欄位為零。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.TargetToObject");
UO.TargetToObject("self");

1。回覆開眼界-直接腳本

參數與執行流程:

  • 參數定義角色本身。
  • 沒有任何內容添加到未來範圍隊列中。
if (Truth(UO.TargetPresent()))
{
    UO.TargetToObject("self");
}

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

2。首先等待視線-腳本功能

參數與執行流程:

  • 3000 — 最長等待時間(以毫秒為單位);請求視線的動作必須事先執行。
  • 僅在視線出現後才呼叫命令;遊戲操作可能會因伺服器故障而結束。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitForTarget(3000)))
    {
        UO.TargetToObject("self");
    }
    else
    {
        UO.Print("Target timeout");
    }

    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。檢查延遲回應 - 腳本類

參數與執行流程:

  • CancelTarget 關閉舊的視線並清理隊列。
  • 如果沒有新的範圍,挑戰就不會產生預期。隊列輸出保持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()
    {
        UO.CancelTarget();
        UO.TargetToObject("self");
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        return null;
    }
}

命令實作

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

UO.TargetToObject(objID) — UO.TargetToObject(Any)

參數: objID (Any)

結果: void / Unit.

呼叫時:

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

case "targettoobject": bridge.TargetToObject(Arg(0)); return InjectionValue.Unit;

UO.TargetToTile

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

C# 簽章

void UO.TargetToTile(object? tile, object? x, object? y, object? z);

立即使用圖塊座標回應已活動的伺服器目標。

參數

  • tile - 图形/type 平铺,0..65535,而不是 serial。零表示沒有指定圖形的座標目標。
  • x — 目前地圖上的世界 X 座標,0..65535。這不是螢幕像素或阿甘座標。
  • y — 目前地圖上的世界 Y 座標,0..65535。
  • z - 遊戲點的高度,用於網路目標使用 -128..127。這不是地板或設備層。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 如果沒有活動伺服器遊標,它不會執行任何操作,也不會建立延遲回應。初步準備,請使用WaitTargetObject/WaitTargetTile/WaitTargetXYZ。
  • 本地ClientRequest*和其他回調瞄準點不由此指令處理。
  • graphic=0 的目標需要十字線;物體視線不接受地面。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.TargetToTile");
UO.TargetToTile(0x0CCA, 1445, 1690, 0);

1。回覆開眼界-直接腳本

參數與執行流程:

  • 這些參數給出了真實點的範例:將座標和 graphic 替換為所需值。
  • 沒有任何內容添加到未來範圍隊列中。
if (Truth(UO.TargetPresent()))
{
    UO.TargetToTile(0x0CCA, 1445, 1690, 0);
}

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

2。首先等待視線-腳本功能

參數與執行流程:

  • 3000 — 最長等待時間(以毫秒為單位);請求視線的動作必須事先執行。
  • 僅在視線出現後才呼叫命令;遊戲操作可能會因伺服器故障而結束。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitForTarget(3000)))
    {
        UO.TargetToTile(0x0CCA, 1445, 1690, 0);
    }
    else
    {
        UO.Print("Target timeout");
    }

    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。檢查延遲回應 - 腳本類

參數與執行流程:

  • CancelTarget 關閉舊的視線並清理隊列。
  • 如果沒有新的範圍,挑戰就不會產生預期。隊列輸出保持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()
    {
        UO.CancelTarget();
        UO.TargetToTile(0x0CCA, 1445, 1690, 0);
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        return null;
    }
}

命令實作

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

UO.TargetToTile(tile, x, y, z) — UO.TargetToTile(Any,Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "targettotile":

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

UO.TargetToXYZ

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

C# 簽章

void UO.TargetToXYZ(object? x, object? y, object? z);

立即使用圖塊座標回應已活動的伺服器目標。

參數

  • x — 目前地圖上的世界 X 座標,0..65535。這不是螢幕像素或阿甘座標。
  • y — 目前地圖上的世界 Y 座標,0..65535。
  • z - 遊戲點的高度,用於網路目標使用 -128..127。這不是地板或設備層。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 如果沒有活動伺服器遊標,它不會執行任何操作,也不會建立延遲回應。初步準備,請使用WaitTargetObject/WaitTargetTile/WaitTargetXYZ。
  • 本地ClientRequest*和其他回調瞄準點不由此指令處理。
  • graphic=0 的目標需要十字線;物體視線不接受地面。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.TargetToXYZ");
UO.TargetToXYZ(1445, 1690, 0);

1。回覆開眼界-直接腳本

參數與執行流程:

  • 這些參數給出了真實點的範例:將座標和 graphic 替換為所需值。
  • 沒有任何內容添加到未來範圍隊列中。
if (Truth(UO.TargetPresent()))
{
    UO.TargetToXYZ(1445, 1690, 0);
}

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

2。首先等待視線-腳本功能

參數與執行流程:

  • 3000 — 最長等待時間(以毫秒為單位);請求視線的動作必須事先執行。
  • 僅在視線出現後才呼叫命令;遊戲操作可能會因伺服器故障而結束。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitForTarget(3000)))
    {
        UO.TargetToXYZ(1445, 1690, 0);
    }
    else
    {
        UO.Print("Target timeout");
    }

    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。檢查延遲回應 - 腳本類

參數與執行流程:

  • CancelTarget 關閉舊的視線並清理隊列。
  • 如果沒有新的範圍,挑戰就不會產生預期。隊列輸出保持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()
    {
        UO.CancelTarget();
        UO.TargetToXYZ(1445, 1690, 0);
        UO.Print("Queued: " + Convert.ToString(UO.IsWaitTargetActive()));
        return null;
    }
}

命令實作

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

UO.TargetToXYZ(x, y, z) — UO.TargetToXYZ(Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "targettoxyz":

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

UO.Targeting

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

C# 簽章

int UO.Targeting();

檢查客戶端是否有活動的目標選擇遊標。

參數

沒有參數。

傳回值

int 1 - TargetManager.IsTargeting 已安裝; 0 - 無活動遊標。本地回調目標也被考慮。這不是 serial 或隊列狀態 WaitTarget。

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

行為

  • 讀取狀態一次;不等待遊標出現。
  • 若要在遊戲操作後等待伺服器十字準線,請使用WaitForTarget。對於本地 ClientRequest* - WaitForClientTargetResponse 的結果。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。顯示狀態 - 直接腳本

參數與執行流程:

  • 沒有爭論。
  • 顯示1或0。
UO.Print(Convert.ToString(UO.Targeting()));

2。取消開啟遊標-腳本函數

參數與執行流程:

  • 透過活動遊標檢查條件。
  • 該客戶端中的CancelTarget也會清除準備好的回應。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Targeting()))
    {
        UO.CancelTarget();
    }

    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。請求遊戲動作後 - 場景類

參數與執行流程:

  • UseSkill請求技能,WaitForTarget等待3000毫秒。
  • TargetToObject 僅回應活動伺服器目標;如果逾時,則不會執行該分支。
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.UseSkill("Anatomy");
        if (Truth(UO.WaitForTarget(3000)))
        {
            if (Truth(UO.Targeting()))
            {
                UO.TargetToObject("self");
            }
        }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

UO.TicksTarget

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

C# 簽章

int UO.TicksTarget();

透過 WaitTargetObject/WaitTargetTile 及其呼叫 shell 讀取目標的上次設定時間戳。

參數

沒有參數。

傳回值

int — 準備時UO.Timer的值,以運行時開始後的十分之一秒為單位。在第一次此類訓練之前 - 0。這是一個標記,不是等待時間,不是毫秒,也不是ID目標。

行為

  • 立即 TargetToObject/TargetToTile/TargetToXYZ 不准備隊列,也不更新此標記。
  • 有些搜尋指令直接透過橋給出答案; TicksTarget 不是任何目標變更的通用時間。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。記住準備的時刻—直接腳本

參數與執行流程:

  • 沒有爭論; WaitTargetSelf 更新高程。
  • 時間戳以十分之一秒為單位。
UO.WaitTargetSelf();
var stamp = UO.TicksTarget();
UO.Print(Convert.ToString(stamp));
UO.CancelWaitTarget();

2。計算經過的時間 - 腳本函數

參數與執行流程:

  • UO.Wait=250 毫秒。
  • 由於標記的離散性,過去通常是2或3,而不是250。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.WaitTargetObject("self");
    await Delay(250);
    var elapsed = UO.Timer() - UO.TicksTarget();
    UO.Print("Tenths: " + Convert.ToString(elapsed));
    UO.CancelWaitTarget();
    return null;
}

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

3。確保數字serial - 場景類別的時間相同

參數與執行流程:

  • 你的角色的selfId - int serial。
  • 數字形式與字串形式一樣更新標記; TicksTarget沒有參數。
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 selfId = UO.Hex2Int(UO.GetSerial("self"));
        UO.WaitTargetObject(selfId);
        UO.Print(Convert.ToString(UO.TicksTarget()));
        UO.CancelWaitTarget();
        return null;
    }
}

命令實作

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

UO.TicksTarget() — UO.TicksTarget()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int TicksTarget() => ticksTarget;

UO.WaitForClientTargetResponse

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

C# 簽章

dynamic UO.WaitForClientTargetResponse(object? maxWaitTimeMS);

等待本地選擇ClientRequestObjectTarget/ClientRequestTileTarget完成。

參數

  • maxWaitTimeMS — 最長時間(以毫秒為單位)。 0和負值給予一次檢查,無需無限期等待。

傳回值

int 1 - 已收到回應,包括取消; 0 - 逾時已過。對於1,仍然檢查ClientTargetResponse的長度。使用 0 遊標本身不會自動關閉。

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

行為

  • 等待在腳本線程中以最多 25 ms 的間隔發生,並透過停止腳本來中斷。
  • 如果沒有先前的 ClientRequest*,新選擇將不會開始。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。選擇一個項目或角色 - 直接腳本

參數與執行流程:

  • 5000 — 按一下等待逾時(以毫秒為單位)。新的查詢會重置先前的結果。
  • 五個欄位的陣列指示選定的物件。結果[0]是serial,而不是type。
UO.ClientRequestObjectTarget();
if (Truth(UO.WaitForClientTargetResponse(5000)))
{
    var result = UO.ClientTargetResponse();
    if (Truth(ArrayLength(result) == 5))
    {
        UO.Print("Serial: " + UO.Int2Hex(result[0]));
    }
    else
    {
        UO.Print("Selection cancelled");
    }
}

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;

2。讀取所選圖塊的座標 - 腳本函數

參數與執行流程:

  • 結果[1] - graphic,結果[2]/[3]/[4] - X/Y/Z。世界圖塊serial的結果[0]等於0。
  • 類型、座標和 serial 是單獨的字段。該數組中沒有靜態層索引。
return  RunScenario();
 object? RunScenario()
{
    UO.ClientRequestTileTarget();
    if (Truth(UO.WaitForClientTargetResponse(5000)))
    {
        var result = UO.ClientTargetResponse();
        if (Truth(ArrayLength(result) == 5))
        {
            UO.Print("Type: " + UO.Int2Hex(result[1]));
            UO.Print(Convert.ToString(result[2]) + "," + Convert.ToString(result[3]) + "," + Convert.ToString(result[4]));
        }
    }

    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;

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.ClientRequestTileTarget();
        int ready = UO.WaitForClientTargetResponse(3000);
        if (ready == 0)
        {
            UO.CancelTarget();
            UO.Print("Selection timed out");
            return false;
        }

        var response = (object? [])UO.ClientTargetResponse();
        if (response.Length != 5)
            return false;
        UO.Print($"Tile coordinates: {response[2]}, {response[3]}, {response[4]}");
        return true;
        return null;
    }
}

命令實作

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

UO.WaitForClientTargetResponse(maxWaitTimeMS) — UO.WaitForClientTargetResponse(Any)

參數: maxWaitTimeMS (Any)

結果: dynamic / Any.

呼叫時:

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

case "waitforclienttargetresponse": return new InjectionValue(bridge.WaitForClientTargetResponse(Arg(0)));

UO.WaitForTarget

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

C# 簽章

dynamic UO.WaitForTarget(object? maxWaitTimeMS);

等待活動目標遊標在超時時間內出現。

參數

  • maxWaitTimeMS — 最長等待時間(以毫秒為單位)。零和負值會立即進行檢查;這不是無休止的等待。

傳回值

int 1 — 驗證期間遊標處於活動狀態; 0 - 無遊標逾時。本地回調目標也滿足此測試。這並不是確認已準備好的WaitTarget的使用:自動回應可能在檢查之前就已經用完遊標了。

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

行為

  • 檢查在腳本執行緒中暫停最多 25 毫秒來執行,並且可以透過停止來中斷。
  • 該方法本身不會建立十字準線或選擇目標。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。等待技能視線-直接腳本

參數與執行流程:

  • MaxWaitTimeMS=3000,則選擇 self。
  • WaitTargetSelf 未預設:此範例明確回答。
UO.UseSkill("Anatomy");
if (Truth(UO.WaitForTarget(3000)))
{
    UO.TargetToObject("self");
}

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

2。一鍵檢查-腳本功能

參數與執行流程:

  • MaxWaitTimeMS=0.
  • 準備好 - 1 或 0;沒有長時間的停頓。
return  RunScenario();
 object? RunScenario()
{
    var ready = UO.WaitForTarget(0);
    UO.Print(Convert.ToString(ready));
    return null;
}

3。處理超時 - 腳本類

參數與執行流程:

  • 500 - 半秒。
  • 沒有視線可能意味著操作失敗或正在自動處理:檢查遊戲日誌。
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()
    {
        if (Truth(UO.WaitForTarget(500) == 0))
        {
            UO.CancelWaitTarget();
            UO.Print("Cursor did not arrive");
        }

        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.WaitForTarget(maxWaitTimeMS) — UO.WaitForTarget(Any)

參數: maxWaitTimeMS (Any)

結果: dynamic / Any.

呼叫時:

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

case "waitfortarget": return new InjectionValue(bridge.WaitUntilTargeting(Arg(0)));

UO.WaitTarget

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

C# 簽章

void UO.WaitTarget(object? target);
void UO.WaitTarget(object? target, object? @type);
void UO.WaitTarget(object? target, object? @type, object? color);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety, object? nearest);
void UO.WaitTarget(object? target, object? @type, object? color, object? distance, object? notoriety, object? nearest, object? maxZ);

將serial放入下一個目標請求的佇列中,或使用過濾器選擇目標。

參數

  • target — 允許正數 serial/alias 直接設置,其他參數被忽略。 0或-1啟用搜尋;另一個數位哨兵取消下一個目標。
  • type - 可選graphic/type或型別遮罩; -1無限制。命名型別由ResolveType/ParseTypeMask解析。
  • color - 可選 hue:-1 或 0xFFFF,無限制。
  • distance — 可選的單元格內最大距離;預設為GetFindDistance。解析ResolveCompactDistance允許根據搜尋設定使用特殊值。
  • notoriety - 可選號碼/遮罩惡名。非空遮罩限制移動候選人;如果沒有它,手機和world物品都會被考慮。
  • nearest - 可選bool,預設true:依距離排序,然後是serial。
  • maxZ — 可選最大絕對值(Z-selfZ),預設GetFindVertical。

傳回值

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

行為

  • 搜尋時,排除self、serial=0、常規忽略清單和選定的命名type過濾器;重複項被刪除。直接正值serial不會通過這些過濾器。
  • 搜尋僅讀取載入的物件。沒有匹配/無效哨兵 - 訊息和 CancelNextTarget。成功的選擇呼叫WaitTargetObject並更新TicksTarget。 WaitTarget本身不使用該物品,不打開目標,也不等待伺服器處理它。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.WaitTarget");
UO.WaitTarget("self");

1。直接呼叫-直接腳本

參數與執行流程:

  • 將serial放入下一個目標請求的佇列中,或使用過濾器選擇目標。
UO.WaitTarget("self");

2。明確選項 - 腳本函數

參數與執行流程:

  • 搜尋時,排除self、serial=0、常規忽略清單和選定的命名type過濾器;重複項被刪除。直接正值serial不會通過這些過濾器。
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTarget(0, -1, -1, 10, 3, true, 20);
    return null;
}

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

參數與執行流程:

  • 搜尋僅讀取載入的物件。沒有匹配/無效哨兵 - 訊息和 CancelNextTarget。成功的選擇呼叫WaitTargetObject並更新TicksTarget。 WaitTarget本身不使用該物品,不打開目標,也不等待伺服器處理它。
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.WaitTarget("lasttarget");
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

命令實作

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

UO.WaitTarget(target) — UO.WaitTarget(Any)

參數: target (Any)

結果: void / Unit.

呼叫時:

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type) — UO.WaitTarget(Any,Any)

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

結果: void / Unit.

呼叫時:

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color) — UO.WaitTarget(Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance) — UO.WaitTarget(Any,Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance, notoriety) — UO.WaitTarget(Any,Any,Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTarget(target, type, color, distance, notoriety, nearest) — UO.WaitTarget(Any,Any,Any,Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

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

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

結果: void / Unit.

呼叫時:

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

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

values =>

                    {

                        CompactWaitTarget(values);

                        return InjectionValue.Unit;

                    }

UO.WaitTargetGround

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

C# 簽章

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

在 graphic/hue 搜尋項目並將其放入下一個目標的隊列中。

參數

  • type - 圖形/type int,十六進位字串或名為type 的集合。這不是 serial 商品。
  • color - 可選int hue;預設 -1 - 任何顏色。

傳回值

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

行為

  • 範圍:ground/容器選擇器1,無遞歸搜尋。 Bridge.FindType回傳找到的serial;當serial>0bridge.WaitTargetObject被呼叫時。這些方法不會直接更新運行時TicksTarget。
  • 沒有項目 - 訊息和 CancelNextTarget。搜尋可能會改變一般FindItem/FoundItems;該指令不使用找到的項目,也不等待遊標。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.WaitTargetGround");
UO.WaitTargetGround("0x0E21");

1。直接呼叫-直接腳本

參數與執行流程:

  • 在 graphic/hue 搜尋項目並將其放入下一個目標的隊列中。
UO.WaitTargetGround("0x0E21");

2。明確選項 - 腳本函數

參數與執行流程:

  • 範圍:ground/容器選擇器1,無遞歸搜尋。 Bridge.FindType回傳找到的serial;當serial>0bridge.WaitTargetObject被呼叫時。這些方法不會直接更新運行時TicksTarget。
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTargetGround("0x0E21", -1);
    return null;
}

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

參數與執行流程:

  • 沒有項目 - 訊息和 CancelNextTarget。搜尋可能會改變一般FindItem/FoundItems;該指令不使用找到的項目,也不等待遊標。
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.WaitTargetGround("0x0E21", -1);
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

命令實作

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

UO.WaitTargetGround(type) — UO.WaitTargetGround(Any)

參數: type (Any)

結果: void / Unit.

呼叫時:

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

public void WaitTargetGround(InjectionValue type) => WaitTargetGround(type, new InjectionValue(-1));

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

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

結果: void / Unit.

呼叫時:

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

public void WaitTargetGround(InjectionValue type, InjectionValue color)

        {

            int item = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);

            if (item <= 0)

            {

                SystemMessage("No ground item found. Next target request will be canceled");

                bridge.CancelNextTarget();

            }

            else

                bridge.WaitTargetObject(item);

        }

UO.WaitTargetLast

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

C# 簽章

void UO.WaitTargetLast();

透過別名 lasttarget 準備對下一個伺服器目標的回應。

參數

沒有參數。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 團隊只準備回應:它本身不使用物品、技能或咒語。下一個伺服器目標在處理客戶端訊框時接收準備好的目標。
  • 連續的呼叫形成一個公共的客戶端隊列。物件和座標目標一次處理一個;本地選擇視窗ClientRequest*/Info/container不消耗它。
  • CancelWaitTarget 清除佇列。 TerminateAll 徹底清潔;停止仍在運作的過程也會使其自身的待處理回應無效。完成一個簡短的程序通常不會取消準備好的目標。
  • 發送回應並不保證伺服器上的操作:它會檢查物件的範圍、可存取性、可見性和操作規則。要進行控制,請使用遊戲結果和日誌。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。準備目標 - 直接腳本

參數與執行流程:

  • 沒有爭論;使用lasttarget。
  • 該命令本身不會打開瞄準器並執行動作。
UO.WaitTargetLast();

2。檢查所選物件是否存在 - 腳本函數

參數與執行流程:

  • 對於該技能,lasttarget 必須解析為已載入的角色。
  • Exists檢查消除未知物體;物件類型和技能有效性的選擇仍然是腳本條件。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("lasttarget")))
    {
        UO.CancelWaitTarget();
        UO.WaitTargetLast();
        UO.UseSkill("Anatomy");
    }

    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。取消準備的目標 - 腳本類

參數與執行流程:

  • IsWaitTargetActive 檢查響應隊列。
  • CancelWaitTarget 取消準備而不關閉已開啟的自訂十字準線。
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.WaitTargetLast();
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelWaitTarget();
        }

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

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void WaitTargetLast() => WaitTargetObject("lasttarget");

UO.WaitTargetObject

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

C# 簽章

void UO.WaitTargetObject(object? objID);
void UO.WaitTargetObject(object? id1, object? id2);

準備一個或兩個連續的 serial 對伺服器目標的回應。

參數

  • objID / id1 / id2 — 項目或字元、數字或十六進位/十進位字串的序號/ID、self/backpack/lasttarget/lastobject 或儲存的名稱AddObject。這不是type。在對命名物件進行操作之前,請檢查Exists;未解析的別名給出 serial 0。單一參數指定一個目標。數字和字串形式以相同的方式更新TicksTarget。
  • objID — 項目或字元、數字或十六進位/十進位字串的序號/ID、self/backpack/lasttarget/lastobject 或儲存的名稱AddObject。這不是type。在對命名物件進行操作之前,請檢查Exists;未解析的別名給出 serial 0。單一參數指定一個目標。數字和字串形式以相同的方式更新TicksTarget。
  • id1 — Serial/ID 項目或字元、數字或十六進位/十進位字串, self/backpack/lasttarget/lastobject 或已儲存的名稱 AddObject。這不是 type。在對命名物件進行操作之前,請檢查 Exists;未解析的別名給出 serial 0。形式的第一個目標是兩條線。
  • id2 — Serial/ID 項目或字元、數字或十六進位/十進位字串, self/backpack/lasttarget/lastobject 或已儲存的名稱 AddObject。這不是 type。在對命名物件進行操作之前,請檢查 Exists;未解析的別名給出 serial 0。表格的第二個目的是使用兩條線;適用於下一個單獨的範圍。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 團隊只準備回應:它本身不使用物品、技能或咒語。下一個伺服器目標在處理客戶端訊框時接收準備好的目標。
  • 連續的呼叫形成一個公共的客戶端隊列。物件和座標目標一次處理一個;本地選擇視窗ClientRequest*/Info/container不消耗它。
  • CancelWaitTarget 清除佇列。 TerminateAll 徹底清潔;停止仍在運作的過程也會使其自身的待處理回應無效。完成一個簡短的程序通常不會取消準備好的目標。
  • 發送回應並不保證伺服器上的操作:它會檢查物件的範圍、可存取性、可見性和操作規則。要進行控制,請使用遊戲結果和日誌。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.WaitTargetObject");
UO.WaitTargetObject("self");

1。預先選擇自己的技能 - 直接腳本

參數與執行流程:

  • id="self" - 你的角色的serial。 CancelWaitTarget 刪除之前準備的答案。
  • UseSkill 請求技能;他的伺服器瞄準器接收到一個準備好的目標。
UO.CancelWaitTarget();
UO.WaitTargetObject("self");
UO.UseSkill("Anatomy");

2。透過數字serial選擇已知物件 - 腳本函數

參數與執行流程:

  • objectId - 範例serial:替換為您的。這不是graphic/type。
  • 這裡目標剛剛準備好。腳本的下一步應該調用實際期望目標的操作。
return  RunScenario();
 object? RunScenario()
{
    var objectId = 0x40001234;
    if (Truth(UO.Exists(objectId)))
    {
        UO.WaitTargetObject(objectId);
        UO.Print("Object target prepared");
    }

    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。兩個景點:第一個物件和第二個物件-腳本類

參數與執行流程:

  • 源和目標是預先定義的名稱AddObject。 GetSerial 傳回與 id1/id2 形式相符的行。
  • 第一個伺服器瞄準器使用第一,第二個瞄準器使用第二。僅適用於具有兩個連續瞄準鏡的動作;在採取另一個行動之前清除不必要的第二個目標。
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 first = UO.GetSerial("source");
        var second = UO.GetSerial("destination");
        if (Truth(UO.Exists(first)) && Truth(UO.Exists(second)))
        {
            UO.CancelWaitTarget();
            UO.WaitTargetObject(first, second);
        }

        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.WaitTargetObject(objID) — UO.WaitTargetObject(Any)

參數: objID (Any/String)

結果: void / Unit.

呼叫時:

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

case "waittargetobject": WaitTargetObject(Arg(0)); return InjectionValue.Unit;

UO.WaitTargetObject(objID) — UO.WaitTargetObject(String)

參數: objID (Any/String)

結果: void / Unit.

呼叫時:

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

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

UO.WaitTargetObject(id1, id2) — UO.WaitTargetObject(String,String)

參數: id1 (String), id2 (String)

結果: void / Unit.

呼叫時:

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

public void WaitTargetObject(string id1, string id2) => WaitTargetObject(GetObject(id1), GetObject(id2));

UO.WaitTargetObjectType

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

C# 簽章

void UO.WaitTargetObjectType(object? id, object? @type);
void UO.WaitTargetObjectType(object? id, object? @type, object? color);

準備兩個連續的目標:一個給定的物件和一個在地面上找到的物件。

參數

  • id — 序列/ID 物件:int,數字/十六進位字串或已建立的別名,例如「lasttarget」。這不是graphic/type。在採取行動之前檢查裝載的物體。
  • type - 第二項的圖形/type,int/十六進位/命名為type。
  • color - 第二科目可選hue; -1 預設為任意。

傳回值

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

行為

  • 允許第一個 serial 到 GetObject;第二個查找FindType(type,顏色,1,-1,false)。如果兩者都是正數,則呼叫bridge.WaitTargetObject(first,second)。目標的順序保持不變。
  • 如果至少有一個目標缺失/非積極 - 訊息和 CancelNextTarget,則兩個目標均未設定。該分支不更新TicksTarget,也不使用該項目。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.WaitTargetObjectType");
UO.WaitTargetObjectType("self", "0x0E21");

1。直接呼叫-直接腳本

參數與執行流程:

  • 準備兩個連續的目標:一個給定的物件和一個在地面上找到的物件。
UO.WaitTargetObjectType("self", "0x0E21");

2。明確選項 - 腳本函數

參數與執行流程:

  • 允許第一個 serial 到 GetObject;第二個查找FindType(type,顏色,1,-1,false)。如果兩者都是正數,則呼叫bridge.WaitTargetObject(first,second)。目標的順序保持不變。
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTargetObjectType("lasttarget", "0x0E21", -1);
    return null;
}

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

參數與執行流程:

  • 如果至少有一個目標缺失/非積極 - 訊息和 CancelNextTarget,則兩個目標均未設定。該分支不更新TicksTarget,也不使用該項目。
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.WaitTargetObjectType("self", "0x0E21", -1);
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

命令實作

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

UO.WaitTargetObjectType(id, type) — UO.WaitTargetObjectType(Any,Any)

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

結果: void / Unit.

呼叫時:

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

public void WaitTargetObjectType(InjectionValue id, InjectionValue type)

            => WaitTargetObjectType(id, type, new InjectionValue(-1));

UO.WaitTargetObjectType(id, type, color) — UO.WaitTargetObjectType(Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

public void WaitTargetObjectType(InjectionValue id, InjectionValue type, InjectionValue color)

        {

            int first = GetObject(id);

            int second = bridge.FindType(ResolveType(type), NumberConversions.ToInt(color), 1, -1, false);

            if (first <= 0 || second <= 0)

            {

                SystemMessage("UO.WaitTargetObjectType: object or ground item not found");

                bridge.CancelNextTarget();

                return;

            }

            bridge.WaitTargetObject(first, second);

        }

UO.WaitTargetSelf

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

C# 簽章

void UO.WaitTargetSelf();

透過別名 self 準備對下一個伺服器目標的回應。

參數

沒有參數。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 團隊只準備回應:它本身不使用物品、技能或咒語。下一個伺服器目標在處理客戶端訊框時接收準備好的目標。
  • 連續的呼叫形成一個公共的客戶端隊列。物件和座標目標一次處理一個;本地選擇視窗ClientRequest*/Info/container不消耗它。
  • CancelWaitTarget 清除佇列。 TerminateAll 徹底清潔;停止仍在運作的過程也會使其自身的待處理回應無效。完成一個簡短的程序通常不會取消準備好的目標。
  • 發送回應並不保證伺服器上的操作:它會檢查物件的範圍、可存取性、可見性和操作規則。要進行控制,請使用遊戲結果和日誌。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。準備目標 - 直接腳本

參數與執行流程:

  • 沒有爭論;使用self。
  • 該命令本身不會打開瞄準器並執行動作。
UO.WaitTargetSelf();

2。檢查所選物件是否存在 - 腳本函數

參數與執行流程:

  • 對於該技能,self 必須解析為已載入的角色。
  • Exists檢查消除未知物體;物件類型和技能有效性的選擇仍然是腳本條件。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Exists("self")))
    {
        UO.CancelWaitTarget();
        UO.WaitTargetSelf();
        UO.UseSkill("Anatomy");
    }

    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。取消準備的目標 - 腳本類

參數與執行流程:

  • IsWaitTargetActive 檢查響應隊列。
  • CancelWaitTarget 取消準備而不關閉已開啟的自訂十字準線。
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.WaitTargetSelf();
        if (Truth(UO.IsWaitTargetActive()))
        {
            UO.CancelWaitTarget();
        }

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

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void WaitTargetSelf() => WaitTargetObject("self");

UO.WaitTargetTile

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

C# 簽章

void UO.WaitTargetTile(object? selector);
void UO.WaitTargetTile(object? x, object? y, object? z);
void UO.WaitTargetTile(object? @type, object? x, object? y, object? z);

準備帶有可選圖塊圖形的座標目標。

參數

  • selector - 僅以單一參數形式:字串「lasttile」重複儲存的點。
  • type - 圖形/type 平鋪,0..65535,而非 serial。零表示沒有指定圖形的座標目標。以四個參數的形式出現; x/y/z 形式等於 0。
  • x — 目前地圖上的世界 X 座標,0..65535。這不是螢幕像素或阿甘座標。
  • y — 目前地圖上的世界 Y 座標,0..65535。
  • z - 遊戲點的高度,用於網路目標使用 -128..127。這不是地板或設備層。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 團隊只準備回應:它本身不使用物品、技能或咒語。下一個伺服器目標在處理客戶端訊框時接收準備好的目標。
  • 連續的呼叫形成一個公共的客戶端隊列。物件和座標目標一次處理一個;本地選擇視窗ClientRequest*/Info/container不消耗它。
  • CancelWaitTarget 清除佇列。 TerminateAll 徹底清潔;停止仍在運作的過程也會使其自身的待處理回應無效。完成一個簡短的程序通常不會取消準備好的目標。
  • 發送回應並不保證伺服器上的操作:它會檢查物件的範圍、可存取性、可見性和操作規則。要進行控制,請使用遊戲結果和日誌。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.WaitTargetTile");
UO.WaitTargetTile("lasttile");

1。沒有 graphic 的座標 - 直接腳本

參數與執行流程:

  • x=1445, y=1690, z=0;缺失的type等於0。
  • 这就是世界的重点。此指令不會移動角色或將物品放入口中。
UO.CancelWaitTarget();
UO.WaitTargetTile(1445, 1690, 0);

2。明確指定 graphictile - 腳本函數

參數與執行流程:

  • type=0x0CCA — 圖形範例;使用所選圖塊的真實type。 x/y/z 是它的世界位置。
  • 圖形和座標必須描述所需的地圖物件;伺服器檢查目標的有效性。
return  RunScenario();
 object? RunScenario()
{
    UO.CancelWaitTarget();
    UO.WaitTargetTile(0x0CCA, 1445, 1690, 0);
    return null;
}

3。重複最後一個目標的保存點 - 腳本類

參數與執行流程:

  • 選擇器只允許最後一個字串,不區分大小寫。單參數形式的另一個字串或數字會導致錯誤。
  • 使用 TargetManager 中圖塊的最後欄位。在第一次選擇之前,它們可以為零:首先在遊戲中選擇所需的點。三個或四個參數允許您明確設定它。
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.WaitTargetTile("lasttile");
        return null;
    }
}

命令實作

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

UO.WaitTargetTile(selector) — UO.WaitTargetTile(Any)

參數: selector (Any)

結果: void / Unit.

呼叫時:

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

public void WaitTargetTile(InjectionValue selector)

        {

            string name = selector.Kind == InjectionValueKind.String

                ? (selector.String ?? string.Empty).Trim()

                : string.Empty;

            if (!name.Equals("lasttile", StringComparison.OrdinalIgnoreCase))

                throw new NativeSubrutineException("UO.WaitTargetTile(one argument) accepts only 'lasttile'.");



            int[] tile = bridge.LastTile() ?? Array.Empty<int>();

            if (tile.Length < 4)

            {

                SystemMessage("UO.WaitTargetTile: lasttile is unavailable; next target request canceled.");

                bridge.CancelNextTarget();

                return;

            }

            bridge.WaitTargetTile(tile[0], tile[1], tile[2], tile[3]);

            ticksTarget = Timer();

        }

UO.WaitTargetTile(x, y, z) — UO.WaitTargetTile(Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

public void WaitTargetTile(InjectionValue x, InjectionValue y, InjectionValue z)

            => WaitTargetTile(new InjectionValue(0), x, y, z);

UO.WaitTargetTile(type, x, y, z) — UO.WaitTargetTile(Any,Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

public void WaitTargetTile(InjectionValue type, InjectionValue x, InjectionValue y, InjectionValue z)

        {

            bridge.WaitTargetTile(ResolveType(type), NumberConversions.ToInt(x), NumberConversions.ToInt(y), NumberConversions.ToInt(z));

            ticksTarget = Timer();

        }

UO.WaitTargetType

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

C# 簽章

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

在 graphic/hue 搜尋項目並將其放入下一個目標的隊列中。

參數

  • type - 圖形/type int,十六進位字串或名為type 的集合。這不是 serial 商品。
  • color - 可選int hue;預設 -1 - 任何顏色。

傳回值

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

行為

  • 範圍:帶有遞歸搜尋的背包。 Bridge.FindType回傳找到的serial;當serial>0bridge.WaitTargetObject被呼叫時。這些方法不會直接更新運行時TicksTarget。
  • 沒有項目 - 訊息和 CancelNextTarget。搜尋可能會改變一般FindItem/FoundItems;該指令不使用找到的項目,也不等待遊標。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.WaitTargetType");
UO.WaitTargetType("0x0E21");

1。直接呼叫-直接腳本

參數與執行流程:

  • 在 graphic/hue 搜尋項目並將其放入下一個目標的隊列中。
UO.WaitTargetType("0x0E21");

2。明確選項 - 腳本函數

參數與執行流程:

  • 範圍:帶有遞歸搜尋的背包。 Bridge.FindType回傳找到的serial;當serial>0bridge.WaitTargetObject被呼叫時。這些方法不會直接更新運行時TicksTarget。
return  RunScenario();
 object? RunScenario()
{
    UO.WaitTargetType("0x0E21", -1);
    return null;
}

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

參數與執行流程:

  • 沒有項目 - 訊息和 CancelNextTarget。搜尋可能會改變一般FindItem/FoundItems;該指令不使用找到的項目,也不等待遊標。
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.WaitTargetType("0x0E21", -1);
        UO.Print(UO.Waiting());
        UO.CancelWaitTarget();
        return null;
    }
}

命令實作

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

UO.WaitTargetType(type) — UO.WaitTargetType(Any)

參數: type (Any)

結果: void / Unit.

呼叫時:

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

public void WaitTargetType(InjectionValue type) => WaitTargetType(ResolveType(type), -1);

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

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

結果: void / Unit.

呼叫時:

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

public void WaitTargetType(InjectionValue type, InjectionValue color)

            => WaitTargetType(ResolveType(type), NumberConversions.ToInt(color));

UO.WaitTargetXYZ

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

C# 簽章

void UO.WaitTargetXYZ(object? x, object? y, object? z);

為下一個伺服器視線準備一個座標目標graphic=0。

參數

  • x — 目前地圖上的世界 X 座標,0..65535。這不是螢幕像素或阿甘座標。
  • y — 目前地圖上的世界 Y 座標,0..65535。
  • z - 遊戲點的高度,用於網路目標使用 -128..127。這不是地板或設備層。

傳回值

void - 無回傳值。使用單獨的線路撥打電話;請勿用作 true/false、serial 或 type。元資料object?對於相容的形式不會改變實際結果void。

行為

  • 團隊只準備回應:它本身不使用物品、技能或咒語。下一個伺服器目標在處理客戶端訊框時接收準備好的目標。
  • 連續的呼叫形成一個公共的客戶端隊列。物件和座標目標一次處理一個;本地選擇視窗ClientRequest*/Info/container不消耗它。
  • CancelWaitTarget 清除佇列。 TerminateAll 徹底清潔;停止仍在運作的過程也會使其自身的待處理回應無效。完成一個簡短的程序通常不會取消準備好的目標。
  • 發送回應並不保證伺服器上的操作:它會檢查物件的範圍、可存取性、可見性和操作規則。要進行控制,請使用遊戲結果和日誌。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.WaitTargetXYZ");
UO.WaitTargetXYZ(1445, 1690, 0);

1。指定世界上的一個點 - 直接腳本

參數與執行流程:

  • X=1445,Y=1690,Z=0。圖形等於0。
  • 當伺服器座標視線出現時,將發送回應。
UO.WaitTargetXYZ(1445, 1690, 0);

2。在字元下使用點 - 腳本函數

參數與執行流程:

  • X/Y/Z 是從您自己的角色中讀取的。
  • 這是一個座標目標,而不是角色的 serial 上的 object 目標。對於後者你需要WaitTargetSelf。
return  RunScenario();
 object? RunScenario()
{
    var x = UO.GetX();
    var y = UO.GetY();
    var z = UO.GetZ();
    UO.WaitTargetXYZ(x, y, z);
    return null;
}

3。準備工具點 - 腳本類

參數與執行流程:

  • 將座標替換為提取點。 UseType正在背包裡尋找任意顏色的鏟子type=0x0F39。
  • 如果沒有合適的工具,請透過 CancelWaitTarget 移除準備工作,然後再進行另一個操作。
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.CancelWaitTarget();
        UO.WaitTargetXYZ(1445, 1690, 0);
        UO.UseType(0x0F39, -1);
        return null;
    }
}

命令實作

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

UO.WaitTargetXYZ(x, y, z) — UO.WaitTargetXYZ(Any,Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "waittargetxyz": WaitTargetTile(new InjectionValue(0), arguments[0], arguments[1], arguments[2]); return InjectionValue.Unit;
⚠️ **GitHub.com Fallback** ⚠️