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

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

錄音/回放

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

記錄並重複支援的操作。錄製和播放限制的構成是由命令的執行決定的。

部分

主題 命令與解釋
SetRec UO.SetRec
UseRec UO.UseRec

所有主題命令

記錄

UO.SetRec · UO.UseRec

關於該主題的範例

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

UO.SetRec

參數、結果及所有場景

UO.SetRec();
UO.Light(15);

UO.UseRec

參數、結果及所有場景

UO.SetRec();
UO.Light(15);
UO.UseRec();

完整指令說明


UO.SetRec

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

C# 簽章

void UO.SetRec();

準備記錄下一個舊命令UO。

參數

沒有參數。

傳回值

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

行為

  • ExecuteLegacyManualAlias 清除狀態。 RecordedAction 並設定 recordNextLegacyAction=true。下次呼叫同一個遺留排程器(SetRec/UseRec 除外)時,會在執行指令之前先序列化名稱和參數,然後清除標誌。
  • 這不會記錄所有滑鼠操作、任何 UO getter 或伺服器事件。僅重複來自支援的舊版調度程序的一個命令。舊的保存會立即被刪除。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
  • 此條目保留參數類型 int、double、string、recursive Array 和 void。其他物件寫為文字ToString;重複時,活動物件/句柄不會恢復。
  • RecordedAction是設定檔的一般狀態,recordNextLegacyAction/replayingLegacyAction是這個InjectionApiUO的私有欄位。只有此實例記錄其下一個舊呼叫。另一個腳本可以清除或重做共享寫入,但不會消耗該實例的寫入等待標誌。
  • 只有 SetRec() 被註冊,嚴格不帶參數。它立即清除RecordedAction,因此在該實例寫入後續遺留操作之前,remain() 會傳回0;啟用寫入等待本身不會建立已儲存的操作。 keep() 只讀取並且不消耗等待標誌。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 準備記錄下一個舊命令UO。
UO.SetRec();
UO.Light(15);

2。明確選項 - 腳本函數

參數與執行流程:

  • ExecuteLegacyManualAlias 清除狀態。 RecordedAction 並設定 recordNextLegacyAction=true。下次呼叫同一個遺留排程器(SetRec/UseRec 除外)時,會在執行指令之前先序列化名稱和參數,然後清除標誌。
return  RunScenario();
 object? RunScenario()
{
    UO.SetRec();
    UO.Sound(0x0040);
    UO.UseRec();
    return null;
}

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

參數與執行流程:

  • 這不會記錄所有滑鼠操作、任何 UO getter 或伺服器事件。僅重複來自支援的舊版調度程序的一個命令。舊的保存會立即被刪除。
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.SetRec();
        UO.TextPrint("This is not a legacy recording route");
        UO.Light(15);
        UO.UseRec();
        return null;
    }
}

命令實作

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

UO.SetRec() — UO.SetRec()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "setrec":

                    state.RecordedAction = string.Empty;

                    recordNextLegacyAction = true;

                    break;

UO.UseRec

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

C# 簽章

void UO.UseRec();

重複保存的舊命令UO。

參數

沒有參數。

傳回值

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

行為

  • TryDeserializeRecordedLegacyAction 檢查 YOKOREC1 前綴和鍵入的參數。無/無效條目 - 本機訊息,無操作。有效的條目使用已儲存的名稱和參數呼叫ExecuteLegacyManualAlias。
  • replayingLegacyAction 標誌可保護重播不被寫入自身,並被清除 finally,即使出現錯誤也是如此。重複後條目不被刪除:UseRec可以再次呼叫。名稱/serial根據保存的類型和當前世界解析。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
  • 此條目保留參數類型 int、double、string、recursive Array 和 void。其他物件寫為文字ToString;重複時,活動物件/句柄不會恢復。
  • RecordedAction是設定檔的一般狀態,recordNextLegacyAction/replayingLegacyAction是這個InjectionApiUO的私有欄位。只有此實例記錄其下一個舊呼叫。另一個腳本可以清除或重做共享寫入,但不會消耗該實例的寫入等待標誌。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 重複保存的舊命令UO。
UO.SetRec();
UO.Light(15);
UO.UseRec();

2。明確選項 - 腳本函數

參數與執行流程:

  • TryDeserializeRecordedLegacyAction 檢查 YOKOREC1 前綴和鍵入的參數。無/無效條目 - 本機訊息,無操作。有效的條目使用已儲存的名稱和參數呼叫ExecuteLegacyManualAlias。
return  RunScenario();
 object? RunScenario()
{
    UO.SetRec();
    UO.Sound(0x0040);
    UO.Wait(250);
    UO.UseRec();
    return null;
}

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

參數與執行流程:

  • replayingLegacyAction 標誌可保護重播不被寫入自身,並被清除 finally,即使出現錯誤也是如此。重複後條目不被刪除:UseRec可以再次呼叫。名稱/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.SetRec();
        UO.Light(15);
        UO.UseRec();
        UO.Wait(250);
        UO.UseRec();
        return null;
    }
}

命令實作

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

UO.UseRec() — UO.UseRec()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "userec":

                    if (!TryDeserializeRecordedLegacyAction(state.RecordedAction, out string recordedName, out InjectionValue[] recordedArguments))

                    {

                        if (bridge != null) SystemMessage("UseRec: no recorded UO action is available. Call UO.SetRec() before the action to record.");

                        break;

                    }

                    replayingLegacyAction = true;

                    try

                    {

                        ExecuteLegacyManualAlias(recordedName, recordedArguments);

                    }

                    finally

                    {

                        replayingLegacyAction = false;

                    }

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