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.Light(15);UO.SetRec();
UO.Light(15);
UO.UseRec();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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() 只讀取並且不消耗等待標誌。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetRec");
UO.SetRec();參數與執行流程:
- 準備記錄下一個舊命令UO。
UO.SetRec();
UO.Light(15);參數與執行流程:
- ExecuteLegacyManualAlias 清除狀態。 RecordedAction 並設定 recordNextLegacyAction=true。下次呼叫同一個遺留排程器(SetRec/UseRec 除外)時,會在執行指令之前先序列化名稱和參數,然後清除標誌。
return RunScenario();
object? RunScenario()
{
UO.SetRec();
UO.Sound(0x0040);
UO.UseRec();
return null;
}參數與執行流程:
- 這不會記錄所有滑鼠操作、任何 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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
內部實作程式碼,不能作為獨立腳本執行。
case "setrec":
state.RecordedAction = string.Empty;
recordNextLegacyAction = true;
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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的私有欄位。只有此實例記錄其下一個舊呼叫。另一個腳本可以清除或重做共享寫入,但不會消耗該實例的寫入等待標誌。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.UseRec");
UO.UseRec();參數與執行流程:
- 重複保存的舊命令UO。
UO.SetRec();
UO.Light(15);
UO.UseRec();參數與執行流程:
- TryDeserializeRecordedLegacyAction 檢查 YOKOREC1 前綴和鍵入的參數。無/無效條目 - 本機訊息,無操作。有效的條目使用已儲存的名稱和參數呼叫ExecuteLegacyManualAlias。
return RunScenario();
object? RunScenario()
{
UO.SetRec();
UO.Sound(0x0040);
UO.Wait(250);
UO.UseRec();
return null;
}參數與執行流程:
- 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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.TryDeserializeRecordedLegacyAction:TryDeserializeRecordedLegacyAction(state.RecordedAction, out string recordedName, out InjectionValue[] recordedArguments). -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage("UseRec: no recorded UO action is available. Call UO.SetRec() before the action to record."). -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias:ExecuteLegacyManualAlias(recordedName, recordedArguments).
內部實作程式碼,不能作為獨立腳本執行。
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;