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

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

客戶端與連接

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

連線、世界進入狀態、延遲、伺服器位址和角色清單。

部分

主題 命令與解釋
Connect UO.Connect
Disconnect UO.Disconnect
Connected UO.Connected
Online UO.Online
Ping UO.GetPing
Server IP UO.GameServerIPString
Shard Name UO.ShardName
Shard Path UO.ShardPath
人物列表 UO.GetCharsListForShard
Resend UO.Resend
CheckLag UO.CheckLag

所有主題命令

聯繫

UO.Connect · UO.Disconnect · UO.Connected · UO.Online · UO.IsOnline · UO.ConnectedTime · UO.DisconnectedTime · UO.GetPing · UO.CheckLag · UO.GameServerIPString · UO.ShardName · UO.ShardPath · UO.GetCharsListForShard · UO.Resend · UO.CloseUO

關於該主題的範例

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

UO.Connected

參數、結果及所有場景

if (Truth(Truth(UO.Connected()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

UO.GameServerIPString

參數、結果及所有場景

var address = UO.GameServerIPString();
UO.Print(address);

完整指令說明


UO.CheckLag

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

C# 簽章

int UO.CheckLag();
dynamic UO.CheckLag(object? timeoutMS);
int UO.CheckLag(object? timeout, object? retries);

檢查是否在指定時間內收到來自遊戲伺服器的新回應。在網路延遲後繼續腳本之前很方便。

參數

  • timeout — 超時 / timeoutMS — 一次嘗試的等待時間(以毫秒為單位),轉換為 int。負值限制為零。使用0可以發送請求,但不需要回應;這不是無限超時。
  • timeoutMS — 超時 / timeoutMS — 一次嘗試的等待時間(以毫秒為單位),轉換為 int。負值限制為零。使用0可以發送請求,但不需要回應;這不是無限超時。
  • retries - 重試 - 嘗試總數,而不是額外重複的次數。轉換為 int 並限制為 1。例如,(250, 3) - 在 250 毫秒內最多嘗試 3 次;成功的回應會提前完成檢查。

傳回值

數字標誌int:1(滿足條件)-收到新回應;0(不滿足條件)- 請求不可能或過時限。单参数注册object?实际上返回这个int。這不是 ping 值或嘗試次數。

行為

  • CheckLag() 嘗試一次,等待 10000 毫秒。 CheckLag(timeoutMS) - 一次具有指定期望的嘗試。 CheckLag(超時,重試)重複檢查,直到成功或嘗試總次數用完。
  • 等待會延遲呼叫腳本而不是確認遊戲操作。該命令不會重新連接,也不會更改網路設定。伺服器可能不會回應 echo: failure 本身並不能證明連線已中斷。時間還取決於流調度;不要對每一幀調用主動檢查。停止腳本會中斷等待。
  • UO.GetPing · UO.CheckLag · UO.IsOnline

獨立的 C# 腳本

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

簡單範例

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

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

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

1。 CheckLag - 1 - 直接脚本

參數與執行流程:

  • 沒有參數的表單最多可以等 10 秒。 true 表示新的迴聲響應。隱藏由單獨的命令調用,並且可以被遊戲機制覆蓋。
if (Truth(Truth(UO.CheckLag()) == true))
{
    UO.UseSkill("Hiding");
}
else
{
    UO.Print("No fresh server response");
}

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

2。 CheckLag — 2 — 腳本函數

參數與執行流程:

  • 250 — 等待一次嘗試,3 — 總嘗試次數。如果成功,則不再進行進一步的嘗試;使用 0 腳本不會繼續。這不是 250 ms ping 測量或三個額外的重複。
return  RunScenario();
 object? RunScenario()
{
    var responsive = UO.CheckLag(250, 3);
    if (Truth(responsive == 0))
    {
        UO.Print("No response after the allowed attempts");
        return null;
    }

    UO.Print("Fresh response received; the script can continue");
    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。 CheckLag - 3 - 場景類

參數與執行流程:

  • CanContinue(timeoutMs, attempts) 先檢查UO.IsOnline,然後檢查最新答案。 false 和 0 對這個謂詞來說是等價的。 500 ms 和2 嘗試次數分別指定;此功能不會觸發自動重連。
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(CanContinue(500, 2))))
        {
            return null;
        }

        UO.UseSkill("Hiding");
        return null;
    }

    dynamic CanContinue(dynamic timeoutMs, dynamic attempts)
    {
        if (Truth(Truth(UO.IsOnline()) == false))
        {
            return false;
        }

        return Truth(Truth(UO.CheckLag(timeoutMs, attempts)) == true);
    }

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

命令實作

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

UO.CheckLag() — UO.CheckLag()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int CheckLag() => bridge.CheckLag(10_000);

UO.CheckLag(timeoutMS) — UO.CheckLag(Any)

參數: timeoutMS (Any)

結果: dynamic / Any.

呼叫時:

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

case "checklag": return new InjectionValue(bridge.CheckLag(Arg(0, 10_000)));

UO.CheckLag(timeout, retries) — UO.CheckLag(Any,Any)

參數: timeout (Any), retries (Any)

結果: int / Integer.

呼叫時:

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

public int CheckLag(InjectionValue timeout, InjectionValue retries)

        {

            int timeoutMs = Math.Max(0, NumberConversions.ToInt(timeout));

            int attempts = Math.Max(1, NumberConversions.ToInt(retries));

            for (int attempt = 0; attempt < attempts; attempt++)

            {

                if (bridge.CheckLag(timeoutMs) != 0)

                    return 1;

            }

            return 0;

        }

UO.CloseUO

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

C# 簽章

void UO.CloseUO();

透過 Client.Game.Exit 請求當前客戶端應用程式退出。

參數

沒有參數。

傳回值

void - 無回傳值。

行為

  • CloseUO 被送到同一個橋接器。 CloseHandle。 exit是在遊戲執行緒上執行的;如果缺少 Client.Game,則不會執行任何操作。該命令不是關閉單獨的命令。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。終止客戶端 - 直接腳本

參數與執行流程:

  • 該呼叫請求終止客戶端應用程式。
UO.CloseUO();

2。明確終止條件 - 腳本函數

參數與執行流程:

  • 此範例顯示了受控條件;值 0 使客戶端保持開啟狀態。
return  RunScenario();
 object? RunScenario()
{
    var finishClient = 0;
    if (Truth(finishClient))
    {
        UO.CloseUO();
    }

    return null;
}

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

3。完成程式-腳本類

參數與執行流程:

  • 完全聲明的幫助程序允許明確退出啟用。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        FinishClient(0);
        return null;
    }

    void FinishClient(dynamic enabled)
    {
        if (Truth(enabled))
        {
            UO.CloseUO();
        }
    }

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

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "closeuo": bridge.CloseHandle(); break;

UO.Connect

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

C# 簽章

void UO.Connect();

請求連線或重新連線目前客戶端會話。

參數

沒有參數。

傳回值

void - 無回傳值。

行為

  • 在管理器會話中,呼叫 SessionControl.RequestConnect。在獨立客戶端中,活動/準備連線保持不變。
  • 對於GameScene,計劃保存重新連接,以免在更新期間更改場景。即使自動重新連線關閉,LoginScene 使用目前帳戶和儲存的密碼,開啟重新連線並使用記住的碎片/字元呼叫Connect。
  • 團隊並沒有等待進入這個世界。如果進一步的操作需要連接,請在單獨等待後檢查UO.Connected。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。連接 - 直接腳本

參數與執行流程:

  • 通話僅發起連線。
UO.Connect();

2。無連接時連接-腳本函數

參數與執行流程:

  • 驗證可以避免重新請求。
return  RunScenario();
 object? RunScenario()
{
    if (!(Truth(UO.Connected())))
    {
        UO.Connect();
    }

    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。稍後檢查狀態 - 腳本類

參數與執行流程:

  • 等待1000毫秒並不能保證進入;輸出顯示實際的當前標誌。
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.Connect();
        await Delay(1000);
        UO.Print(Convert.ToString(UO.Connected()));
        return null;
    }

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

命令實作

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

UO.Connect() — UO.Connect()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "connect": bridge.ConnectClient(); return InjectionValue.Unit;

UO.Connected

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

C# 簽章

dynamic UO.Connected();

檢查當前會話是否在遊戲世界中以及其遊戲連線是否開啟。在角色動作之前或等待輸入時使用。

參數

沒有參數。

傳回值

int。 1 - 同時有一個玩家、一張載入的卡片和一個活動的遊戲套接字;否則0。登入階段開啟的客戶端視窗、字元清單或TCP連線並不表示1。數字標誌int:1(滿足條件),0(不符合條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。

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

行為

  • 無參數:serial、type、角色名、IP無法傳遞。 UO.Online()、UO.Connected() 和 UO.IsOnline() 檢查相同的內容。這是給定會話擁有者的狀態,而不是其他管理員設定檔的狀態。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。不要離線執行遊戲技能-直接腳本

參數與執行流程:

  • false 相當於0。 return 將 Main 終止到UseSkill。隱藏是技能名稱UseSkill的唯一參數。對於1,腳本只要求使用技能;結果取決於角色和伺服器的狀態。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
if (Truth(Truth(UO.Connected()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

2。無連線時請求連線-腳本函數

參數與執行流程:

  • 與 0 比較檢查目前連接,而不是自動重新連接設定。不含參數的Connect使用已儲存的設置,不等待登入完成。在已經開始的登入期間重複命令不應建立第二個會話。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Connected() == 0))
    {
        UO.Connect();
    }

    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。等待世界在時間限制下準備好 - 場景類

參數與執行流程:

  • WaitForWorld(timeoutMs) ​​是一個完整顯示的使用者定義函數,而不是內建指令。 5000 — 預算(以毫秒為單位),UO.Wait(50) — 檢查間隔。負值給出false;0只允許現成的世界。 Timer 測量秒,因此差值乘以1000。必須提前關閉自動暫停,否則Main退出。函數不會呼叫Connect,並且不會在時間到期時取消已開始的輸入。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
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()
    {
        if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
        {
            return null;
        }

        if (Truth(await WaitForWorld(5000)))
        {
            UO.UseSkill("Hiding");
        }

        return null;
    }

    async Task<dynamic> WaitForWorld(dynamic timeoutMs)
    {
        if (Truth(timeoutMs < 0))
        {
            return false;
        }

        var started = Environment.TickCount;
        while (!(Truth(UO.Connected())))
        {
            if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
            {
                return false;
            }

            await Delay(50);
        }

        return true;
    }

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

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "connected": return new InjectionValue(bridge.IsOnline());

UO.ConnectedTime

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

C# 簽章

dynamic UO.ConnectedTime();

返回角色最後一次成功進入世界的日曆標記。協助您了解在繼續執行相同任務之前等待或暫停期間連線是否已變更。

參數

沒有參數。

傳回值

double:從 1899-12-30 的天數,小數部分 - 一天中的時間(OLE 自動化日期)。 0表示該會話擁有者尚未進入世界。斷開連接後,保留最後的輸入標記。它不是 bool 或以秒為單位的持續時間。

行為

  • 沒有爭論。對於相同會話擁有者的腳本,歷史記錄是常見的:延遲啟動、暫停和關閉IDE 不會變更標記。新的會話流程開始新的故事;它不是所有連接的日誌。
  • 如果角色沒有出現在世界中,則登入嘗試失敗不被視為登入成功。反覆離線檢查不會改變關機時間。對於目前狀態,請使用 UO.Connected() 而不是非零日期。
  • 時鐘取自電腦的本機時鐘。差值乘以 86400 得出日曆秒數;改變時鐘/時區可能會導致結果偏差。對於超時,請使用單調 Timer()。單一呼叫不形成原子快照;相同的標記不是唯一的ID連接。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。請求第一個輸入 - 直接腳本

參數與執行流程:

  • 0 檢查此特定過程中是否缺少輸入。 Connect 使用已儲存的設定文件,僅要求登入。此範例故意不恢復已終止的連線。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。
if (Truth(UO.ConnectedTime() == 0))
{
    UO.Connect();
}

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

2。新登入後重設預期目標 - 腳本功能

參數與執行流程:

  • 30.0 — 以 Timer 秒为单位监控预算; 250 — 间隔UO.Wait,以毫秒为单位。更改入口标记后,CancelWaitTarget清除之前的延迟目标。如果沒有新輸入,則循環結束,不執行此操作。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    var login = UO.ConnectedTime();
    var started = Environment.TickCount;
    while (Truth(Environment.TickCount - started < 30.0))
    {
        if (Truth(UO.Connected()) && Truth(UO.ConnectedTime() != login))
        {
            UO.CancelWaitTarget();
            return null;
        }

        await Delay(250);
    }

    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。繼續之前測試連線 - 腳本類

參數與執行流程:

  • SameConnection(登入)返回bool。我們保存標記,等待500毫秒,然後如果沒有連接或輸入發生變化則禁止繼續。這是重新測試,並不保證未來伺服器的可用性。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var login = UO.ConnectedTime();
        await Delay(500);
        if (!(Truth(SameConnection(login))))
        {
            return null;
        }

        UO.AddToSystemJournal("Same connection; continue this batch");
        return null;
    }

    dynamic SameConnection(dynamic login)
    {
        return Truth(login != 0) && Truth(UO.Connected()) && Truth(UO.ConnectedTime() == login);
    }

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

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "connectedtime":

                    UpdateConnectionState();

                    return new InjectionValue(state.ConnectedTime == default(DateTime) ? 0d : state.ConnectedTime.ToOADate());

UO.Disconnect

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

C# 簽章

void UO.Disconnect();

中斷目前或已安裝的用戶端傳輸並準備重新連線的腳本。

參數

沒有參數。

傳回值

void - 無回傳值。

行為

  • 如果關閉自動重新連接,BeginScriptControlledDisconnect 會儲存工作人員稍後呼叫 UO.Connect。管理器會話接收RequestDisconnect。
  • 獨立客戶端呼叫 Socket.Disconnect 和 PrepareForReconnect。啟用全域重新連線後,它會明確安排已儲存的場景轉換。在 LoginScene 中清除彈出視窗並返回 Main。
  • 返回void不報告重連結果。單獨讀取連線狀態;自動重新連線設定可以啟動新的登入。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。斷開會話 - 直接腳本

參數與執行流程:

  • 該命令取消活動的和已安裝的傳輸。
UO.Disconnect();

2。明確重新連接 - 腳本函數

參數與執行流程:

  • 當 AR 關閉時,呼叫工作人員可以自行連接到 Connect。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    UO.Disconnect();
    await Delay(1000);
    UO.Connect();
    return null;
}

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

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()
    {
        if (Truth(UO.Connected()))
        {
            UO.Disconnect();
        }

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

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "disconnect": bridge.DisconnectClient(); return InjectionValue.Unit;

UO.DisconnectedTime

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

C# 簽章

dynamic UO.DisconnectedTime();

返回上次遊戲連線遺失的日曆標記。需要診斷中斷並估計完成連線的持續時間,而不是確定登入嘗試的次數。

參數

沒有參數。

傳回值

double:從 1899-12-30 的天數,包含當天的小數部分。中斷後 - 用戶端注意到中斷的時間;第一次中斷之前是建立會話擁有者的時間。這不是離線標誌,也不是毫秒。

行為

  • 沒有爭論。對於相同會話擁有者的腳本,歷史記錄是常見的:延遲啟動、暫停和關閉IDE 不會變更標記。新的會話流程開始新的故事;它不是所有連接的日誌。
  • 如果角色沒有出現在世界中,則登入嘗試失敗不被視為登入成功。反覆離線檢查不會改變關機時間。對於目前狀態,請使用 UO.Connected() 而不是非零日期。
  • 時鐘取自電腦的本機時鐘。差值乘以 86400 得出日曆秒數;改變時鐘/時區可能會導致結果偏差。對於超時,請使用單調 Timer()。單一呼叫不形成原子快照;相同的標記不是唯一的ID連接。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。估計完成連線的持續時間 - 直接腳本

參數與執行流程:

  • 如果沒有完成的連接或輸入在讀取之間發生了變化,CompletedConnectionSeconds() 返回秒或 -1。 86400 — 一天中的幾秒。僅重新計算最後一個輸入/中斷對;函數不會總結所有會話的歷史記錄。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。
var seconds = CompletedConnectionSeconds();
if (Truth(seconds >= 0))
{
    UO.AddToSystemJournal("Completed connection seconds: " + Convert.ToString(seconds));
}

dynamic CompletedConnectionSeconds()
{
    var login = UO.ConnectedTime();
    var loss = UO.DisconnectedTime();
    if (Truth(login == 0) || Truth(loss < login) || Truth(UO.Connected()))
    {
        return -1;
    }
    if (Truth(UO.ConnectedTime() != login))
    {
        return -1;
    }
    return (loss - login) * 86400.0;
}

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

2。離線短暫等待後請求登入 - 腳本功能

參數與執行流程:

  • 當啟用自動暫停時,該控制器立即退出;要離線工作,必須提前關閉。 UO.Wait(1000)離線後,再次檢查先前的斷點標記。 Connect 不保證成功,也不取代自動重新連線設定。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
    if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
    {
        return null;
    }

    if (Truth(UO.Connected()))
    {
        return null;
    }

    var loss = UO.DisconnectedTime();
    await Delay(1000);
    if (!(Truth(UO.Connected())) && Truth(UO.DisconnectedTime() == loss))
    {
        UO.Connect();
    }

    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。注意檢查之間的中斷 - 腳本類

參數與執行流程:

  • 與 previousLoss 進行比較,發現重新進入後已達到收支平衡。 30 秒限制腳本執行時的監視,WaitAsync(250) 在檢查之間釋放執行緒。多個中斷可以合併為一個通知。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var previousLoss = UO.DisconnectedTime();
        var started = Environment.TickCount;
        while (Truth(Environment.TickCount - started < 30.0))
        {
            if (Truth(UO.DisconnectedTime() != previousLoss))
            {
                UO.AddToSystemJournal("A connection loss occurred; check the session");
                return null;
            }

            await Delay(250);
        }

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

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "disconnectedtime":

                    UpdateConnectionState();

                    return new InjectionValue(state.DisconnectedTime.ToOADate());

UO.GameServerIPString

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

C# 簽章

dynamic UO.GameServerIPString();

從客戶端的全域設定讀取配置的伺服器位址。

參數

沒有參數。

傳回值

string — Settings.GlobalSettings.IP 或如果沒有值則為空字串。

行為

  • 目前橋中的GameServerAddress讀取全域設定IP。這不是DNS/網路請求,也不是檢查實際對等點的位址;管理器會話可以有自己的連線參數。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取地址-直接腳本

參數與執行流程:

  • 返回目前全域設定IP。
var address = UO.GameServerIPString();
UO.Print(address);

2。檢查空地址 - 腳本函數

參數與執行流程:

  • 空白值表示沒有配置,也不是測量到的網路故障。
return  RunScenario();
 object? RunScenario()
{
    var address = UO.GameServerIPString();
    if (Truth(Len(address) == 0))
    {
        UO.Print("no configured address");
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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 await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var address = UO.GameServerIPString();
        await Delay(100);
        UO.Print(address);
        return null;
    }

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

命令實作

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

UO.GameServerIPString() — UO.GameServerIPString()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "gameserveripstring": return new InjectionValue(bridge.GameServerAddress);

UO.GetCharsListForShard

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

C# 簽章

dynamic UO.GetCharsListForShard();

傳回客戶端已知的目前分片的角色名稱。

參數

沒有參數。

傳回值

字串數組。沒有已知的名稱,目前字元是空數組。

行為

  • 管理器會話讀取SessionControl.Characters。在獨立模式下,LastCharacterManager首先用於帳戶/伺服器;如果清單為空,則讀取LoginScene。沒有空名稱的字元;那麼目前的 Player.Name 被用作唯一的元素。
  • 這些都是當地有名的名字;該命令不會向伺服器請求完整列表,也不保證快取的新鮮度。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。列印姓名 - 直接腳本

參數與執行流程:

  • 此循環對已知名稱的實際數組進行操作。
var names = UO.GetCharsListForShard();
for (int i = (int)(0); i <= ArrayLength(names)-1; i += (int)(1))
{
    UO.Print(names[i]);
}

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

2。第一個已知名稱 - 腳本函數

參數與執行流程:

  • 索引0僅用於非空數組。
return  RunScenario();
 object? RunScenario()
{
    var names = UO.GetCharsListForShard();
    if (Truth(ArrayLength(names) > 0))
    {
        UO.Print(names[0]);
    }

    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()
    {
        var names = UO.GetCharsListForShard();
        UO.Print(Convert.ToString(ArrayLength(names)));
        return null;
    }

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

命令實作

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

UO.GetCharsListForShard() — UO.GetCharsListForShard()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "getcharslistforshard": return StringArray(bridge.GetCharactersForCurrentShard());

UO.GetPing

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

C# 簽章

int UO.GetPing();
int UO.GetPing(object? timeout);

讀取遊戲伺服器回應延遲。不帶參數,使用最後一個維度;逾時請求新的回應。

參數

  • timeout — 超時 / timeoutMS — 一次嘗試的等待時間(以毫秒為單位),轉換為 int。負值限制為零。使用0可以發送請求,但不需要回應;這不是無限超時。

傳回值

int,毫秒。值 >= 0 – 測量值; 0毫秒也可以接受。 -1 - 無測量:對於帶有參數的表單,請求未完成或未按時收到回應。這不是bool;0不能算是失敗,而-1不能算是成功。

行為

  • GetPing() 不發送任何內容並立即讀取最後一個ServerPing。舊值本身並不能證明連接現在正常工作。這是最後一次伺服器回顯測量,不是平滑/備份 TCP 指示器 ping,也不是 ICMP Ping(主機)。 GetPing(超時)等待新的回應,然後讀取最後的伺服器測量。
  • 等待會延遲呼叫腳本而不是確認遊戲操作。該命令不會重新連接,也不會更改網路設定。伺服器可能不會回應 echo: failure 本身並不能證明連線已中斷。時間還取決於流調度;不要對每一幀調用主動檢查。停止腳本會中斷等待。
  • UO.GetPing · UO.CheckLag · UO.IsOnline

獨立的 C# 腳本

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

簡單範例

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

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

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

1。 GetPing - 1 - 直接脚本

參數與執行流程:

  • 無需新的網路請求即可讀取快取。此範例選擇 50 或 200 毫秒,以閾值 250 毫秒等待腳本本身。未知維度單獨處理。這些數字是範例設置,而不是通用伺服器限制。
var pingMs = UO.GetPing();
if (Truth(pingMs < 0))
{
    UO.Print("No server latency sample");
    return null;
}
var delayMs = 50;
if (Truth(pingMs > 250))
{
    delayMs = 200;
}
await Delay(delayMs);

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;

2。 GetPing — 2 — 腳本函數

參數與執行流程:

  • 1000 — 等待新回應的最長等待時間(以毫秒為單位)。在-1,程序結束。如果測量成功,則請求隱藏;迴聲回應並不能證明該技能的成功使用。
return  RunScenario();
 object? RunScenario()
{
    var pingMs = UO.GetPing(1000);
    if (Truth(pingMs == -1))
    {
        UO.Print("No fresh server response");
        return null;
    }

    UO.UseSkill("Hiding");
    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。 GetPing - 3 - 場景類

參數與執行流程:

  • MeanPing(樣本,timeoutMs)完整顯示:3嘗試500毫秒;不成功的測量被排除在平均值之外。如果沒有成功,則回傳-1。樣品僅限1–10; UO.Wait(100) 降低嘗試之間的請求率。
return await new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenarioAsync();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

    async public Task<object?> RunScenarioAsync()
    {
        var meanMs = await MeanPing(3, 500);
        if (Truth(meanMs < 0))
        {
            UO.Print("No successful samples");
        }
        else
        {
            UO.Print("Measured mean, ms: " + Convert.ToString(meanMs));
        }

        return null;
    }

    async Task<dynamic> MeanPing(dynamic samples, dynamic timeoutMs)
    {
        if (Truth(samples < 1) || Truth(samples > 10))
        {
            return -1;
        }

        var total = 0;
        var count = 0;
        for (int i = (int)(1); i <= samples; i += (int)(1))
        {
            var current = UO.GetPing(timeoutMs);
            if (Truth(current >= 0))
            {
                total = total + current;
                count = count + 1;
            }

            await Delay(100);
        }

        if (Truth(count == 0))
        {
            return -1;
        }

        return total / count;
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

UO.GetPing(timeout) — UO.GetPing(Any)

參數: timeout (Any)

結果: int / Integer.

呼叫時:

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

public int GetPing(InjectionValue timeout) => bridge.GetPing(Math.Max(0, NumberConversions.ToInt(timeout)));

UO.IsOnline

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

C# 簽章

int UO.IsOnline();

檢查當前會話是否在遊戲世界中以及其遊戲連線是否開啟。在角色動作之前或等待輸入時使用。

參數

沒有參數。

傳回值

int。 1 - 同時有一個玩家、一張載入的卡片和一個活動的遊戲套接字;否則0。登入階段開啟的客戶端視窗、字元清單或TCP連線並不表示1。數字標誌int:1(滿足條件),0(不符合條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。

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

行為

  • 無參數:serial、type、角色名、IP無法傳遞。 UO.Online()、UO.Connected() 和 UO.IsOnline() 檢查相同的內容。這是給定會話擁有者的狀態,而不是其他管理員設定檔的狀態。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。不要離線執行遊戲技能-直接腳本

參數與執行流程:

  • false 相當於0。 return 將 Main 終止到UseSkill。隱藏是技能名稱UseSkill的唯一參數。對於1,腳本只要求使用技能;結果取決於角色和伺服器的狀態。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
if (Truth(Truth(UO.IsOnline()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

2。無連線時請求連線-腳本函數

參數與執行流程:

  • 與 0 比較檢查目前連接,而不是自動重新連接設定。不含參數的Connect使用已儲存的設置,不等待登入完成。在已經開始的登入期間重複命令不應建立第二個會話。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline() == 0))
    {
        UO.Connect();
    }

    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。等待世界在時間限制下準備好 - 場景類

參數與執行流程:

  • WaitForWorld(timeoutMs) ​​是一個完整顯示的使用者定義函數,而不是內建指令。 5000 — 預算(以毫秒為單位),UO.Wait(50) — 檢查間隔。負值給出false;0只允許現成的世界。 Timer 測量秒,因此差值乘以1000。必須提前關閉自動暫停,否則Main退出。函數不會呼叫Connect,並且不會在時間到期時取消已開始的輸入。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
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()
    {
        if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
        {
            return null;
        }

        if (Truth(await WaitForWorld(5000)))
        {
            UO.UseSkill("Hiding");
        }

        return null;
    }

    async Task<dynamic> WaitForWorld(dynamic timeoutMs)
    {
        if (Truth(timeoutMs < 0))
        {
            return false;
        }

        var started = Environment.TickCount;
        while (!(Truth(UO.IsOnline())))
        {
            if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
            {
                return false;
            }

            await Delay(50);
        }

        return true;
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

UO.Online

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

C# 簽章

int UO.Online();

檢查當前會話是否在遊戲世界中以及其遊戲連線是否開啟。在角色動作之前或等待輸入時使用。

參數

沒有參數。

傳回值

int。 1 - 同時有一個玩家、一張載入的卡片和一個活動的遊戲套接字;否則0。登入階段開啟的客戶端視窗、字元清單或TCP連線並不表示1。數字標誌int:1(滿足條件),0(不符合條件)。這是一個數字標誌:在 C# 中檢查結果 != 0 或結果 == 0。 int 與 true/false 和 if(結果)的直接比較是不允許的。

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

行為

  • 無參數:serial、type、角色名、IP無法傳遞。 UO.Online()、UO.Connected() 和 UO.IsOnline() 檢查相同的內容。這是給定會話擁有者的狀態,而不是其他管理員設定檔的狀態。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
  • UO.Wait 需要毫秒。連線遺失時自動暫停和手動暫停會延遲範例的執行:只有在暫停解除後,逾時檢查才會繼續。這些命令不會自行取消暫停,也不會啟用自動重新連線。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。不要離線執行遊戲技能-直接腳本

參數與執行流程:

  • false 相當於0。 return 將 Main 終止到UseSkill。隱藏是技能名稱UseSkill的唯一參數。對於1,腳本只要求使用技能;結果取決於角色和伺服器的狀態。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
if (Truth(Truth(UO.Online()) == false))
{
    return null;
}
UO.UseSkill("Hiding");

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

2。無連線時請求連線-腳本函數

參數與執行流程:

  • 與 0 比較檢查目前連接,而不是自動重新連接設定。不含參數的Connect使用已儲存的設置,不等待登入完成。在已經開始的登入期間重複命令不應建立第二個會話。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.Online() == 0))
    {
        UO.Connect();
    }

    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。等待世界在時間限制下準備好 - 場景類

參數與執行流程:

  • WaitForWorld(timeoutMs) ​​是一個完整顯示的使用者定義函數,而不是內建指令。 5000 — 預算(以毫秒為單位),UO.Wait(50) — 檢查間隔。負值給出false;0只允許現成的世界。 Timer 測量秒,因此差值乘以1000。必須提前關閉自動暫停,否則Main退出。函數不會呼叫Connect,並且不會在時間到期時取消已開始的輸入。
  • 此命令僅讀取本地狀態。它不發送 ping、不連接、不暫停,也不檢查 Internet 的可用性。閱讀後,連接可能會改變; 1不保證下一個動作成功。
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()
    {
        if (Truth(UO.GetPauseScriptOnDisconnectStatus()))
        {
            return null;
        }

        if (Truth(await WaitForWorld(5000)))
        {
            UO.UseSkill("Hiding");
        }

        return null;
    }

    async Task<dynamic> WaitForWorld(dynamic timeoutMs)
    {
        if (Truth(timeoutMs < 0))
        {
            return false;
        }

        var started = Environment.TickCount;
        while (!(Truth(UO.Online())))
        {
            if (Truth((Environment.TickCount - started) * 1000.0 >= timeoutMs))
            {
                return false;
            }

            await Delay(50);
        }

        return true;
    }

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

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

() => bridge.IsOnline()

建立 API: 這些函式負責註冊 API,不會在每次命令呼叫時重新執行。


UO.Resend

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

C# 簽章

void UO.Resend();

發送重新同步世界的請求。

參數

沒有參數。

傳回值

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

行為

  • Resync 在遊戲線程上發送 NetClient.Socket.Send_Resync。這是更新請求,而不是重新連接或已收到資料的確認。
  • 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 發送重新同步世界的請求。
UO.Resend();

2。明確選項 - 腳本函數

參數與執行流程:

  • Resync 在遊戲線程上發送 NetClient.Socket.Send_Resync。這是更新請求,而不是重新連接或已收到資料的確認。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.IsOnline()))
    {
        UO.Resend();
    }

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

參數與執行流程:

  • 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。
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.Resend();
        UO.Wait(500);
        UO.Print(UO.GetX());
        return null;
    }
}

命令實作

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

UO.Resend() — UO.Resend()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "resend": bridge.Resync(); break;

UO.ShardName

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

C# 簽章

dynamic UO.ShardName();

讀取分片名稱。

參數

沒有參數。

傳回值

string — 橋接欄位的文字。 ShardName;如果沒有可用數據,則可能會出現空字串。這不是連接符號,也不是數字ID。

行為

  • ExecuteClientApiCompatibility 返回網橋。 ShardName 不更改設定檔或伺服器選擇。
  • 讀取目前本地狀態。沒有軟體包、目標或自動更新;個別讀取可能會看到不同的狀態。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 讀取分片名稱。
var value = UO.ShardName();
UO.Print(value);

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteClientApiCompatibility 返回網橋。 ShardName 不更改設定檔或伺服器選擇。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.ShardName();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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()
    {
        var before = UO.ShardName();
        UO.Wait(500);
        var after = UO.ShardName();
        UO.Print(before = after);
        return null;
    }
}

命令實作

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

UO.ShardName() — UO.ShardName()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "shardname":

                case "profileshardname": return new InjectionValue(bridge.ShardName);

UO.ShardPath

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

C# 簽章

dynamic UO.ShardPath();

讀取目前設定檔的路徑。

參數

沒有參數。

傳回值

string — 橋接欄位的文字。 CurrentProfilePath;如果沒有可用數據,則可能會出現空字串。這不是連接符號,也不是數字ID。

行為

  • ExecuteClientApiCompatibility 返回網橋。 CurrentProfilePath 不更改設定檔或伺服器選擇。
  • 讀取目前本地狀態。沒有軟體包、目標或自動更新;個別讀取可能會看到不同的狀態。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 讀取目前設定檔的路徑。
var value = UO.ShardPath();
UO.Print(value);

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteClientApiCompatibility 返回網橋。 CurrentProfilePath 不更改設定檔或伺服器選擇。
return  RunScenario();
 object? RunScenario()
{
    var value = UO.ShardPath();
    if (Truth(Len(value) > 0))
    {
        UO.TextPrint(value);
    }

    return null;
}

int Len(object? value) => Convert.ToString(value)?.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()
    {
        var before = UO.ShardPath();
        UO.Wait(500);
        var after = UO.ShardPath();
        UO.Print(before = after);
        return null;
    }
}

命令實作

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

UO.ShardPath() — UO.ShardPath()

參數: 沒有參數。

結果: dynamic / Any.

呼叫時:

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

case "shardpath":

                case "clientprofilepath": return new InjectionValue(bridge.CurrentProfilePath);
⚠️ **GitHub.com Fallback** ⚠️