ZH TW UO Topic client ui - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 範例 · Languages
顯示訊息、服務視窗、顯示物件並開啟IDE。這些步驟不會取代向伺服器發送語音。
| 主題 | 命令與解釋 |
|---|---|
| UO.Print | |
| ClientPrint | UO.ClientPrint |
| Info Window | UO.FillInfoWindow · UO.ClearInfoWindow · UO.FillNewWindow |
| Text Window | UO.TextOpen · UO.TextPrint · UO.TextClear · UO.TextClose |
| 簡單的阿甘 | UO.CloseSimpleGump |
| Close UI Window | UO.CloseClientUIWindow |
| Circle Transparency | UO.CircleTrans |
| Show Z | UO.SetShowZ |
| Open IDE | UO.OpenIDE |
UO.Print · UO.ClientPrint · UO.ClientPrintEx · UO.CharPrint · UO.ColorPrint · UO.ConsolePrint · UO.ServerPrint · UO.SetSilentMode · UO.ConColor · UO.FontColor
UO.ClearInfoWindow · UO.FillInfoWindow · UO.FillNewWindow · UO.TextOpen · UO.TextClear · UO.TextClose · UO.TextPrint · UO.CloseSimpleGump · UO.CloseClientUIWindow · UO.ShowJournal · UO.OpenIDE · UO.HelpRequest · UO.ActivateHandle · UO.CloseHandle · UO.Snap
UO.Hide · UO.ClientHide · UO.ClientMarkChar · UO.CircleTrans · UO.SetShowZ · UO.Morph
UO.AddFigure · UO.UpdateFigure · UO.RemoveFigure · UO.ClearFigures
每個命令卡都有幾個獨立的場景:直接程式碼、函數和類別。以下是精選的簡短場景;限制和全面分析是有可能的。
var processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);UO.FillInfoWindow("Status ready");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ActivateHandle();請求 Windows/SDL 將目前用戶端視窗置於最前面。沒有爭論或結果。這是一個視窗命令,而不是一個專案、技能或目標應用程式;實際焦點取決於視窗系統。
沒有參數。
void。該呼叫僅請求啟動視窗;它不承認視窗系統將其帶到前台。
- 客戶端透過SDL升起遊戲視圖視窗。該命令不會發送遊戲資料包或在世界中執行操作。最小化的視窗或視窗系統的限制可能會妨礙實際焦點。
- RequireGameView 需要 Client.Game。如果 ClassicUO 圖形視窗未打開,則橋會拋出 InvalidOperationException。 SDL_RaiseWindow 請求提升現有視窗;關於焦點的決定留給視窗系統。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ActivateHandle");
UO.ActivateHandle();參數與執行流程:
- 請求將客戶端視窗置於前台。
UO.ActivateHandle();參數與執行流程:
- 連接到遊戲之前不要請求視窗焦點。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected()))
{
UO.ActivateHandle();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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()
{
RunAction();
return null;
}
void RunAction()
{
UO.ActivateHandle();
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ActivateHandle. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ActivateHandle:bridge.ActivateHandle().
內部實作程式碼,不能作為獨立腳本執行。
public void ActivateHandle() => bridge.ActivateHandle();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.AddFigure(object? figure);將本地人物新增至 ClassicUO 世界地圖並返回其 ID。該數字儲存在客戶端,不會通知遊戲伺服器。
int 是相加數字的正ID。如果圖形資料不正確或卡片拒絕添加,則返回0。將收到的ID轉移到UO.UpdateFigure或UO.RemoveFigure。
- 為
WorldMapGump建立本地圖形。支援直線、橢圓、矩形、方向箭頭和文字。fcWorld座標遵循地圖變換和比例尺;fcScreen是相對於地圖視窗測量的。將顯示所選面的形狀。
數組格式:[kind, coord, x1, y1, x2, y2, brushColor, brushStyle, color, worldNum, text]。 kind:0直線、1橢圓、2長方形、3方向箭頭、4文本。 coord:0world、1螢幕。 color 使用 Delphi TColor (0x00BBGGRR) 位元組順序。對於具有世界座標和x2=0,y2=0的箭頭,起點是當前角色。採用歷史brushColor和brushStyle相容;視覺著色並不能保證與Delphi完全匹配。
該圖窗保留在客戶端集合中,直到被刪除/清除或進程結束。更改面只會隱藏屬於另一個面的圖形。
- 至少接受 9 字段。如果worldNum缺失,則使用目前卡;如果沒有文本,則採用空字串。種類僅限於0..4,座標 - 0..1;其他意義為0。負worldNum允許在任何面上顯示。在檢查 SetYokoMapFigure 之前,ID 計數器會遞增,因此被拒絕的件可能會在 ID 中留下間隙。採集WorldMapGump靜態進行中;一個管理器的常規腳本使用通用的持久運行時狀態。
- brushColor和brushStyle保存在條目中,但目前渲染器不使用它們。直線和矩形繪製為輪廓;橢圓由 32 線段組成。僅針對kind=4繪製文字簽名;其他類型不輸出。顏色以 COLORREF 0x00BBGGRR 格式指定輪廓。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.AddFigure(new object?[] { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 });
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- kind=2 繪製紅色輪廓。保存具有值 Area 的文本字段,但对于这种类型,不会绘制标签;文本输出 kind=4。
dynamic[] fig = new dynamic[checked((int)(11) + 1)];
fig[0] = 2;
fig[1] = 0;
fig[2] = UO.GetX("self")-3;
fig[3] = UO.GetY("self")-3;
fig[4] = UO.GetX("self")+3;
fig[5] = UO.GetY("self")+3;
fig[6] = 0;
fig[7] = 1;
fig[8] = 255;
fig[9] = UO.WorldNum();
fig[10] = "Area";
var figureId = UO.AddFigure(fig);參數與執行流程:
- 對於 world 座標和 x2=0,y2=0,箭頭的原點取自繪製時角色的位置。 kind=3 的值為 East 的文字不會輸出。
return RunScenario();
object? RunScenario()
{
dynamic[] dirFig = new dynamic[checked((int)(11) + 1)];
dirFig[0] = 3;
dirFig[1] = 0;
dirFig[2] = UO.GetX("self") + 10;
dirFig[3] = UO.GetY("self");
dirFig[4] = 0;
dirFig[5] = 0;
dirFig[6] = 0;
dirFig[7] = 1;
dirFig[8] = 65280;
dirFig[9] = UO.WorldNum();
dirFig[10] = "East";
var arrowId = UO.AddFigure(dirFig);
return null;
}參數與執行流程:
- 在當前面的兩點之間創建一條藍線。
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()
{
dynamic[] lineFig = new dynamic[checked((int)(11) + 1)];
lineFig[0] = 0;
lineFig[1] = 0;
lineFig[2] = UO.GetX("self");
lineFig[3] = UO.GetY("self");
lineFig[4] = UO.GetX("self") + 8;
lineFig[5] = UO.GetY("self");
lineFig[6] = 0;
lineFig[7] = 1;
lineFig[8] = 16711680;
lineFig[9] = UO.WorldNum();
lineFig[10] = "";
var lineId = UO.AddFigure(lineFig);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: figure (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::TryMapFigureArg:TryMapFigureArg(0, out int[] figure, out string figureText). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMapFigure:bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::SerializeMapFigure:SerializeMapFigure(figure, figureText).
內部實作程式碼,不能作為獨立腳本執行。
case "addfigure":
{
if (!TryMapFigureArg(0, out int[] figure, out string figureText))
return InjectionValue.Zero;
int id = state.NextMapFigureId++;
if (bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText) == 0)
return InjectionValue.Zero;
state.MapFigures[id] = SerializeMapFigure(figure, figureText);
return new InjectionValue(id);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CharPrint(object? color, object? msg);
void UO.CharPrint(object? id, object? color, object? msg);在載入的物件上方建立只有您可見的銘文:例如,所選目標的標記或角色上方的警告。這不是角色的講話或遊戲視窗底部的消息。
-
id是物件的序列,而不是 graphic/type 或座標。三參數形式的UO.CharPrint還可以理解self、lasttarget和儲存的物件名稱。對於UO.ClientPrintEx中的SenderID,請使用數字,例如UO.Hex2Int(UO.GetSerial("self"));字串別名不會被解析為物件。 -
color是UO hue,而不是RGB。取該數字的最低有效16位; 0x0044就是一個例子。 -1 變成 0xFFFF 而不是「任何顏色」的意思。這裡沒有使用顏色ConColor。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 該物件必須存在於載入的世界中且不能被刪除;不會繪製空白文字或遺失的目標。該命令不會從伺服器下載物件。伺服器和其他玩家不會收到此訊息。沒有遊戲窗口,世界上就看不到銘文;它不能取代管理器的系統日誌。
- UO.CharPrint(color, msg) 選擇他的角色。 UO.CharPrint(id, color, msg) 選擇指定物件。兩種形式都使用字體3。 UO.ClientPrintEx 需要按 SenderID、Color、Font、Text 順序排列的所有四個參數。
- 字體編號是 UO,而不是磅值或 Windows 字體名稱。數量限制在0..255範圍內;特定字體的可用性取決於遊戲檔案。在範例中,3 是普通字體編號。
- GetSerial 傳回十六進位字串。 Hex2Int 將其轉換為 int,然後與數字0 進行比較;字串「0x00000000」不能被檢查為數字0。
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.CharPrint");
UO.CharPrint(0x0044, "Ready");參數與執行流程:
- 第一種形式 CharPrint 將 Ready 置於其字元上方。 ClientPrintEx透過UO.Hex2Int(UO.GetSerial("self")接收它serial)並明確地將字體傳遞給3。銘文不包含任何遊戲模式。
- GetSerial 傳回十六進位字串。 Hex2Int 將其轉換為 int,然後與數字0 進行比較;字串「0x00000000」不能被檢查為數字0。
UO.CharPrint(0x0044, "Ready");參數與執行流程:
- 目標 — 最後一個目標的serial。零意味著在此範例中沒有要標記的人。選定目標 - 僅本機簽章:目標未受到攻擊且活動伺服器目標未填入。
- GetSerial 傳回十六進位字串。 Hex2Int 將其轉換為 int,然後與數字0 進行比較;字串「0x00000000」不能被檢查為數字0。
return RunScenario();
object? RunScenario()
{
var target = UO.Hex2Int(UO.GetSerial("lasttarget"));
if (Truth(target != 0))
{
UO.CharPrint(target, 0x0044, "Selected target");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- ShowWeightWarning 在下面完整聲明。她將重量與已知的正極限進行比較,只有在超載時才重寫她的角色;不會扔掉任何東西。轉換。 ToString 將權重轉換為文字。
- GetSerial 傳回十六進位字串。 Hex2Int 將其轉換為 int,然後與數字0 進行比較;字串「0x00000000」不能被檢查為數字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()
{
ShowWeightWarning(UO.Weight(), UO.MaxWeight());
return null;
}
void ShowWeightWarning(dynamic weight, dynamic maximum)
{
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.CharPrint(UO.Hex2Int(UO.GetSerial("self")), 0x0044, "Too heavy: " + Convert.ToString(weight));
}
}
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。
參數: color (Integer/String), msg (String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.CharPrint. -
InjectionScript.Runtime.InjectionApiUO.CharPrint:CharPrint(bridge.Self, color, msg). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
public void CharPrint(int color, string msg) => CharPrint(bridge.Self, color, msg);參數: color (Integer/String), msg (String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.CharPrint. -
InjectionScript.Runtime.InjectionApiUO.CharPrint:CharPrint(bridge.Self, NumberConversions.ToInt(color), msg). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Self:bridge.Self.
內部實作程式碼,不能作為獨立腳本執行。
public void CharPrint(string color, string msg) => CharPrint(bridge.Self, NumberConversions.ToInt(color), msg);參數: id (Any/Integer), color (Any/Integer), msg (Any/String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.CharPrint. -
InjectionScript.Runtime.InjectionApiUO.CharPrint:CharPrint(GetObject(id), NumberConversions.ToInt(color), (string)msg). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
內部實作程式碼,不能作為獨立腳本執行。
public void CharPrint(InjectionValue id, InjectionValue color, InjectionValue msg)
=> CharPrint(GetObject(id), NumberConversions.ToInt(color), (string)msg);參數: id (Any/Integer), color (Any/Integer), msg (Any/String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.CharPrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CharPrint:bridge.CharPrint(id, color, msg).
內部實作程式碼,不能作為獨立腳本執行。
public void CharPrint(int id, int color, string msg) => bridge.CharPrint(id, color, msg);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.CircleTrans();
void UO.CircleTrans(object? enabled);讀取或更改活動設定檔的透明度圓設定。
-
enabled- int:0 停用,任何非零值啟用。如果沒有參數,則設定是唯讀的。
不含參數 int 1/0;帶參數的表單回傳 null。
- 在沒有設定檔的情況下閱讀給出0。沒有設定檔的條目會列印錯誤;如果有設定文件,則更改 UseCircleOfTransparency 並儲存設定檔。這是客戶端的視覺客製化。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.CircleTrans();
UO.Print("CircleTrans: " + Convert.ToString(result));參數與執行流程:
- 閱讀不會改變個人資料。
var enabled = UO.CircleTrans();
UO.Print(Convert.ToString(enabled));參數與執行流程:
- 錄音時透明圈保持開啟。
return RunScenario();
object? RunScenario()
{
UO.CircleTrans(1);
return null;
}參數與執行流程:
- 臨時更改設定後,將恢復已儲存的標誌。
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 previous = UO.CircleTrans();
UO.CircleTrans(0);
UO.CircleTrans(previous);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.CircleTrans. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CircleTrans:bridge.CircleTrans().
內部實作程式碼,不能作為獨立腳本執行。
public int CircleTrans() => bridge.CircleTrans();參數: enabled (Integer)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.CircleTrans. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CircleTrans:bridge.CircleTrans(enabled).
內部實作程式碼,不能作為獨立腳本執行。
public void CircleTrans(int enabled) => bridge.CircleTrans(enabled);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearFigures();刪除所有自訂地圖形狀及其運行時條目。
沒有參數。
void - 無回傳值。
- 清除 WorldMapGump.ClearYokoMapFigures 併狀態.MapFigures。底圖和UserStatics沒有改變。
- ClearYokoMapFigures 清除 WorldMapGump 正在進行的靜態收集,然後該指令清除 MapFigures 的運行時狀態。此清理範圍由整個客戶端集合決定,而不僅僅是呼叫腳本的名稱。
- 保留常規自訂地圖標籤 (userMarkers.usr)。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ClearFigures");
UO.ClearFigures();參數與執行流程:
- 刪除所有自訂地圖形狀及其運行時條目。
UO.ClearFigures();參數與執行流程:
- 為目前地圖建立本機形狀,然後刪除所有自訂形狀。
return RunScenario();
object? RunScenario()
{
dynamic[] figure = new dynamic[checked((int)(9) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = UO.GetX();
figure[3] = UO.GetY();
figure[4] = figure[2] + 1;
figure[5] = figure[3] + 1;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
figure[9] = UO.WorldNum();
var figureId = UO.AddFigure(figure);
UO.ClearFigures();
return null;
}參數與執行流程:
- 清除空集是可以接受的,並且不會建立新設定。
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.ClearFigures();
UO.ClearFigures();
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearMapFigures:bridge.ClearMapFigures().
內部實作程式碼,不能作為獨立腳本執行。
case "clearfigures":
bridge.ClearMapFigures();
state.MapFigures.Clear();
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearInfoWindow();清除客戶端文字視窗的行。
沒有參數。
void - 無回傳值。
- TextClear清空緩衝區;如果視窗打開,則用空內容更新它。窗戶不一定會關閉。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ClearInfoWindow");
UO.ClearInfoWindow();參數與執行流程:
- 清除客戶端文字視窗的行。
UO.ClearInfoWindow();參數與執行流程:
- 清除先前新增的文字視窗行。
return RunScenario();
object? RunScenario()
{
UO.FillInfoWindow("status");
UO.ClearInfoWindow();
return null;
}參數與執行流程:
- 清除空集是可以接受的,並且不會建立新設定。
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.ClearInfoWindow();
UO.ClearInfoWindow();
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextClear:bridge.TextClear().
內部實作程式碼,不能作為獨立腳本執行。
case "clearinfowindow": bridge.TextClear(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.ClientHide(object? objID);僅在ClassicUO顯示中隱藏serial已裝載的物品或其他角色,包括容器、紙娃娃和裝備的物品。
-
objID— 特定載入物件的序號:int 或十六進位/十進位字串。這不是graphic/type。對於已儲存的名稱,請使用 GetSerial(name)。此參數為必填項;景象沒有出現。
發送橋指令後int1。歷史結果並不能確認物件的存在:即使對於未知的serial或self,網橋也會輸出失敗,並且運行時返回1。不要使用該值作為隱藏是否成功的測試。相容性元資料顯示object? 。
- 僅需要一個參數。若要使用滑鼠選擇,請使用UO.Hide()。
- Hide(serial) 立即作用於已知的載入物件。傳遞特定堆疊/項目的serial,而不是graphic/type。無論數量如何,所選堆疊都會完全隱藏。
- 此項目保留在容器中:數量、擁有者、內容和伺服器狀態不會改變。 FindType/GetContent還能找到。隱藏不是搜尋過濾器、遺留、刪除、隱藏技能或伺服器端不可見性。
- 普通容器、交易視窗和戰利品網格不會繪製隱藏物品,也不接受對其進行點擊/拖曳。當重建並重新開啟視窗且使用相同的載入物件時,該標誌仍存在。
- 裝備的物品從紙娃娃、小槽和角色圖像中消失。它保持裝備狀態:伺服器上的圖層、裝甲和狀態不會改變。隱藏的長袍不再與內衣重疊。管理器中的角色圖像使用相同的標誌進行更新;實際設備清單仍然可用。
- Hide不隱藏自己的性格、土地和靜態。不存在的serial給了一條訊息。隱藏包本身不會關閉已開啟的內容窗口,也不會自動隱藏其中包含的每個項目。
- 目前API中沒有單獨的取消隱藏指令。隱藏屬於已載入的物件實例:將其從客戶端世界中刪除並再次載入(例如,重新連線時)會重置標誌。簡單地關閉/打開箱子並不能保證退回物品。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
object? result = UO.ClientHide(0x40001234);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));參數與執行流程:
- ObjID 是一個特定的項目,而不是它的type。它從顯示器上消失,保留在容器中。
var item = 0x40001234;
if (Truth(UO.Exists(item)))
{
UO.ClientHide(item);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- FindType 搜尋 backpack 中任意顏色的 graphic 0x0EED。返回的serial傳輸給ClientHide;整個堆疊被完全隱藏。
return RunScenario();
object? RunScenario()
{
var item = UO.FindType(0x0EED, -1, "backpack");
if (Truth(item != ""))
{
UO.ClientHide(item);
UO.Print("Amount is still: " + Convert.ToString(UO.GetQuantity(item)));
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- GetSerial 解析之前儲存的裝飾名稱。該物品必須先被裝載,例如打開其容器。
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 item = UO.GetSerial("decoration");
if (Truth(UO.Exists(item)) && Truth(item != UO.GetSerial("self")))
{
UO.ClientHide(item);
}
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。
參數: objID (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientHide:bridge.ClientHide(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "clienthide": bridge.ClientHide(Arg(0)); return InjectionValue.True;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientMarkChar(object? actionIndex, object? id);更新客戶端標籤LastTarget和/或LastAttack。
-
actionIndex- int: 1 - LastTarget; 2 - LastAttack; 3 - 兩者皆有。其他值列印錯誤。 -
id— 物件的序號或支援的 self/backpack/lasttarget/saved 物件名稱;數字字串和 0x 字串由執行時間解析。
void - 無回傳值。
- ClientMarkChar 修改已儲存的目標而不發送攻擊或回應伺服器目標。後續命令可以使用新標籤。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ClientMarkChar");
UO.ClientMarkChar(1, "self");參數與執行流程:
- 保存的目標成為你自己的角色。
UO.ClientMarkChar(1,"self");參數與執行流程:
- 後一個目標用於兩個客戶端標記。
return RunScenario();
object? RunScenario()
{
var target = UO.LastTarget();
if (Truth(UO.Exists(target)))
{
UO.ClientMarkChar(3, target);
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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.ClientMarkChar(0, "self");
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: actionIndex (Any), id (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ClientMarkChar. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClientMarkChar:bridge.ClientMarkChar(NumberConversions.ToInt(actionIndex), GetObject(id)). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(actionIndex). -
InjectionScript.Runtime.InjectionApiUO.GetObject:GetObject(id).
內部實作程式碼,不能作為獨立腳本執行。
public void ClientMarkChar(InjectionValue actionIndex, InjectionValue id)
=> bridge.ClientMarkChar(NumberConversions.ToInt(actionIndex), GetObject(id));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientPrint(object? text);顯示有關腳本進度或停止條件的本機訊息。你可以看到它,而不是其他玩家。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 該訊息將發送到遊戲視窗的左下區域和本地日誌。輸出 IDE 中提供了副本。在管理員的常規日誌中,啟用腳本訊息過濾器:該條目在沒有遊戲視窗的情況下可用。伺服器系統訊息過濾器不會選擇此類記錄。網路語音包不傳送。頭部上方的銘文是UO.CharPrint。
-
UO.Print在遊戲訊息日誌中新增一個條目:先讀取或儲存所需的搜尋字串/結果,然後記錄診斷訊息。在快速循環中,在發生變更時而不是每次迭代時記錄訊息。 - 使用此腳本運行時的系統訊息的顏色:最初 0x0440, 變化 UO.ConColor。這是本地條目;命令名稱並不意味著發送到伺服器。
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。
UO.ClientPrint("Hello from C#");參數與執行流程:
- processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.ClientPrint("Processed item entries: " + Convert.ToString(processed));參數與執行流程:
- 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 Main 結束;物品不會被丟棄。
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ClientPrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Main 記住重量,等待 1000 毫秒,並呼叫完全宣告的 ReportWeight。助手僅在重量變化時進行列印,並返回新的重量以供下一次檢查。它本身不會創建無限循環。
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ClientPrint("Weight changed: " + Convert.ToString(current));
}
return current;
}
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。
參數: text (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.SystemMessage:SystemMessage(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
內部實作程式碼,不能作為獨立腳本執行。
case "addtojournal":
case "addtosystemjournal":
case "clientprint":
SystemMessage(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClientPrintEx(object? senderID, object? color, object? font, object? text);在載入的物件上方建立只有您可見的銘文:例如,所選目標的標記或角色上方的警告。這不是角色的講話或遊戲視窗底部的消息。
-
senderID是物件的序列,而不是 graphic/type 或座標。三參數形式的UO.CharPrint還可以理解self、lasttarget和儲存的物件名稱。對於UO.ClientPrintEx中的SenderID,請使用數字,例如UO.Hex2Int(UO.GetSerial("self"));字串別名不會被解析為物件。 -
color是UO hue,而不是RGB。取該數字的最低有效16位; 0x0044就是一個例子。 -1 變成 0xFFFF 而不是「任何顏色」的意思。這裡沒有使用顏色ConColor。 -
font— 字型編號UO,而非磅值或 Windows 字型名稱。數量限制在0..255範圍內;特定字體的可用性取決於遊戲檔案。在範例中,3 是普通字體編號。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 該物件必須存在於載入的世界中且不能被刪除;不會繪製空白文字或遺失的目標。該命令不會從伺服器下載物件。伺服器和其他玩家不會收到此訊息。沒有遊戲窗口,世界上就看不到銘文;它不能取代管理器的系統日誌。
- UO.CharPrint(color, msg) 選擇他的角色。 UO.CharPrint(id, color, msg) 選擇指定物件。兩種形式都使用字體3。 UO.ClientPrintEx 需要按 SenderID、Color、Font、Text 順序排列的所有四個參數。
- 字體編號是 UO,而不是磅值或 Windows 字體名稱。數量限制在0..255範圍內;特定字體的可用性取決於遊戲檔案。在範例中,3 是普通字體編號。
- GetSerial 傳回十六進位字串。 Hex2Int 將其轉換為 int,然後與數字0 進行比較;字串「0x00000000」不能被檢查為數字0。
- UO.Print · UO.CharPrint · UO.ClientPrintEx · UO.AddToSystemJournalEx
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ClientPrintEx");
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Ready");參數與執行流程:
- 第一種形式 CharPrint 將 Ready 置於其字元上方。 ClientPrintEx透過UO.Hex2Int(UO.GetSerial("self")接收它serial)並明確地將字體傳遞給3。銘文不包含任何遊戲模式。
- GetSerial 傳回十六進位字串。 Hex2Int 將其轉換為 int,然後與數字0 進行比較;字串「0x00000000」不能被檢查為數字0。
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Ready");參數與執行流程:
- 目標 — 最後一個目標的serial。零意味著在此範例中沒有要標記的人。選定目標 - 僅本機簽章:目標未受到攻擊且活動伺服器目標未填入。
- GetSerial 傳回十六進位字串。 Hex2Int 將其轉換為 int,然後與數字0 進行比較;字串「0x00000000」不能被檢查為數字0。
return RunScenario();
object? RunScenario()
{
var target = UO.Hex2Int(UO.GetSerial("lasttarget"));
if (Truth(target != 0))
{
UO.ClientPrintEx(target, 0x0044, 3, "Selected target");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- ShowWeightWarning 在下面完整聲明。她將重量與已知的正極限進行比較,只有在超載時才重寫她的角色;不會扔掉任何東西。轉換。 ToString 將權重轉換為文字。
- GetSerial 傳回十六進位字串。 Hex2Int 將其轉換為 int,然後與數字0 進行比較;字串「0x00000000」不能被檢查為數字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()
{
ShowWeightWarning(UO.Weight(), UO.MaxWeight());
return null;
}
void ShowWeightWarning(dynamic weight, dynamic maximum)
{
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Too heavy: " + Convert.ToString(weight));
}
}
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。
參數: senderID (Any), color (Any), font (Any), text (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CharPrintEx:bridge.CharPrintEx(Arg(0), Arg(1), Arg(2), Text(3)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(3).
內部實作程式碼,不能作為獨立腳本執行。
case "clientprintex":
bridge.CharPrintEx(Arg(0), Arg(1), Arg(2), Text(3)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseClientUIWindow(object? uiWindowType, object? id);關閉特定物件的指定類型的本機用戶端視窗。例如,您可以刪除角色的紙娃娃、他的狀態或背包視窗。該命令不會關閉遊戲用戶端,也不會回應伺服器的 Gump 按鈕。
-
uiWindowType— 強制數字視窗代碼:0 — 紙娃娃(裝備),1 — 角色狀態,2 — 個人資料,3 — 容器。這是四個代碼的單獨列表,不是 graphic/type 主體,也不是 ID 伺服器口令。其他號碼找不到該視窗。 -
id— 窗口所属对象的序列:0..2 类型的self/serial 字符,3 类型的backpack/serial 容器。接受數字、十六進位字串或可解析的物件別名。這不是列表InfoGumps中的視窗號。未知的对象别名将转换为 0。
void - 沒有價值。该调用写在单独的一行上,没有 var result = 和 if UO.CloseClientUIWindow(...)。如果沒有合適的開啟窗口,則不會發生任何事情;該命令不返回true/false。
- 這兩個參數都是必要的。視窗類別和LocalSerial都會進行比較。用(3,self)呼叫並不代表背包:背包需要backpack。
- 繞過會影響此類開啟的、尚未銷毀的視窗/serial;遊戲執行緒上所有符合的視窗都關閉。其餘視窗保持開啟狀態。
- 介面關閉,物品不會從容器中移除,角色也不會從世界上消失。可以安全地重複一遍:如果視窗已經關閉,則沒有匹配項。
- 對於伺服器端對話框,研究UO.CloseSimpleGump和UO.NumGumpButton;該指令的程式碼0..3 不適用於此處。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.CloseClientUIWindow");
UO.CloseClientUIWindow(0, "self");參數與執行流程:
- 僅您角色的裝備視窗會關閉;他的狀態、個人資料和背包仍然是單獨的視窗。
UO.CloseClientUIWindow(0, "self");參數與執行流程:
- 如果背包沒有打開,該動作不會改變任何東西。此命令不會移動項目,也不傳回結果。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.Connected()) && Truth(UO.Exists("backpack")))
{
UO.CloseClientUIWindow(3, "backpack");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 1 - 狀態,2 - 個人資料。 id 是所選用mobile 的serial。 ASC(text,0) 這裡將字串serial解析為備用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()
{
var selected = Asc(UO.GetSerial("lasttarget"), 0);
CloseMobilePanels(selected);
return null;
}
void CloseMobilePanels(dynamic id)
{
if (Truth(id == 0) || !(Truth(UO.Exists(id))))
{
return;
}
UO.CloseClientUIWindow(1, id);
UO.CloseClientUIWindow(2, id);
}
int Asc(object? value, int fallback = 0)
{
string text = Convert.ToString(value) ?? "";
if (text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
return int.TryParse(text[2..], System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out int hex) ? hex : fallback;
return int.TryParse(text, out int number) ? number : fallback;
}
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。
參數: uiWindowType (Any), id (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseClientWindow:bridge.CloseClientWindow(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "closeclientuiwindow": bridge.CloseClientWindow(Arg(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseHandle();透過 Client.Game.Exit 請求當前客戶端應用程式退出。
沒有參數。
void - 無回傳值。
- CloseUO 被送到同一個橋接器。 CloseHandle。 exit是在遊戲執行緒上執行的;如果缺少 Client.Game,則不會執行任何操作。該命令不是關閉單獨的命令。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.CloseHandle");
UO.CloseHandle();參數與執行流程:
- 該呼叫請求終止客戶端應用程式。
UO.CloseHandle();參數與執行流程:
- 此範例顯示了受控條件;值 0 使客戶端保持開啟狀態。
return RunScenario();
object? RunScenario()
{
var finishClient = 0;
if (Truth(finishClient))
{
UO.CloseHandle();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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()
{
FinishClient(0);
return null;
}
void FinishClient(dynamic enabled)
{
if (Truth(enabled))
{
UO.CloseHandle();
}
}
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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.CloseHandle. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseHandle:bridge.CloseHandle().
內部實作程式碼,不能作為獨立腳本執行。
public void CloseHandle() => bridge.CloseHandle();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseSimpleGump(object? gumpIndex);本地關閉允許透過嚴格索引關閉的伺服器口令。
-
gumpIndex— 強制 int — 活動伺服器口令的索引,從 0 到 GetGumpsCount()-1。這不是 GumpID/serial。負數和列表外的索引無效。開啟、關閉和重新排序視窗可以更改索引;行動前檢查GetGumpID/GetGumpSerial。
void - 不回傳任何內容。結果不應解釋為伺服器或bool的確認。
- 與活動伺服器 Gump 一起使用。背包、地圖、設定等本地視窗不包含在此列表中。一次呼叫讀取遊戲執行緒中的資料;不同的呼叫可能會看到列表的不同狀態。
- 無效索引和 NoClose 不會改變任何內容。該命令不會將按鈕回應傳送到伺服器。這個答案,請使用SendGumpSelect。
- 關閉會修改清單和索引。若要批次關閉,請從最後一個索引遍歷清單到第一個索引。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.CloseSimpleGump");
UO.CloseSimpleGump(0);參數與執行流程:
- 0是索引,不是ID。如果視窗禁止關閉,它將保持開啟。
UO.CloseSimpleGump(0);參數與執行流程:
- 反向遍歷減少了收盤後指數變化的影響。並行開啟新視窗時,請再次檢查清單。
return RunScenario();
object? RunScenario()
{
var i = UO.GetGumpsCount() - 1;
while (Truth(i >= 0))
{
UO.CloseSimpleGump(i);
i = i - 1;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- info[1] - 儲存的 GumpID。該操作不傳回任何內容,因此結果不會指派給變數。
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 info = UO.GetGumpInfo(0);
if (Truth(ArrayLength(info) == 5))
{
UO.CloseSimpleGump(0);
UO.Print(Hex(info[1]));
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
string Hex(object? value) => Convert.ToInt64(value).ToString("X");
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: gumpIndex (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseSimpleGump:bridge.CloseSimpleGump(Arg(0)).
內部實作程式碼,不能作為獨立腳本執行。
case "closesimplegump":
if (bridge is IApiGumpAccess gumpAccess) gumpAccess.CloseGumpAtIndex(Arg(0));
else bridge.CloseSimpleGump(Arg(0));
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ColorPrint(object? color, object? msg);顯示有關腳本進度或停止條件的本機訊息。你可以看到它,而不是其他玩家。
-
color- UO hue,而非 RGB。數字或十六進位字串;橋接器使用低 16 位元。不要與graphic/type混淆。範例中的0x0044 就是所選的hue。如果沒有顏色,則使用hue0x03B2。 UO.Print(text, color) 先接受文字; UO.ColorPrint(color, text) – 顏色第一。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 該訊息將發送到遊戲視窗的左下區域和本地日誌。輸出 IDE 中提供了副本。在管理員的常規日誌中,啟用腳本訊息過濾器:該條目在沒有遊戲視窗的情況下可用。伺服器系統訊息過濾器不會選擇此類記錄。網路語音包不傳送。頭部上方的銘文是UO.CharPrint。
-
UO.Print在遊戲訊息日誌中新增一個條目:先讀取或儲存所需的搜尋字串/結果,然後記錄診斷訊息。在快速循環中,在發生變更時而不是每次迭代時記錄訊息。 - 如果沒有顏色,則使用hue0x03B2。 UO.Print(text, color) 先接受文字; UO.ColorPrint(color, text) – 顏色第一。
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。
UO.ColorPrint(0x0044, "Hello from C#");參數與執行流程:
- processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.ColorPrint(0x0044, "Processed item entries: " + Convert.ToString(processed));參數與執行流程:
- 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 Main 結束;物品不會被丟棄。
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ColorPrint(0x0044, "Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Main 記住重量,等待 1000 毫秒,並呼叫完全宣告的 ReportWeight。助手僅在重量變化時進行列印,並返回新的重量以供下一次檢查。它本身不會創建無限循環。
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ColorPrint(0x0044, "Weight changed: " + Convert.ToString(current));
}
return current;
}
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。
參數: color (Any), msg (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ColorPrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Print:bridge.Print(NumberConversions.ToInt(color), msg.ToString()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionValue.ToString:msg.ToString().
內部實作程式碼,不能作為獨立腳本執行。
public void ColorPrint(InjectionValue color, InjectionValue msg) => bridge.Print(NumberConversions.ToInt(color), msg.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ConColor(object? color);為該腳本運行時的後續系統訊息設定 UO hue。
-
color- UO hue,而非 RGB。數字或十六進位字串;橋接器使用低16位。不要與graphic/type混淆。範例中的0x0044 就是所選的hue。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 影響後續的UO.ClientPrint、UO.AddToJournal和UO.AddToSystemJournal。不重新著色先前的行,不更改 SpeechHue 配置文件,並且在沒有顏色參數的情況下不更改 UO.Print 的顏色。舊的顏色獲取器不在這裡:將選定的常規hue儲存在其變數中。
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ConColor");
UO.ConColor(0x0044);參數與執行流程:
- 0x0044 成為下一條系統線的顏色。 ConColor本身不印任何東西。
UO.ConColor(0x0044);
UO.AddToSystemJournal("Notice");參數與執行流程:
- 正常的Print保留其0x03B2顏色,AddToJournal使用指定的0x0044。兩個訊息都是本地訊息。
return RunScenario();
object? RunScenario()
{
UO.ConColor(0x0044);
UO.Print("Normal Print color");
UO.AddToJournal("System color");
return null;
}參數與執行流程:
- usualHue=0x0440顯然是選擇的正常顏色,而不是讀取的舊值。 try使用暫時的0x0035;
finally返回usualHue,然後下一行再次以正常顏色列印。
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 usualHue = 0x0440;
UO.ConColor(usualHue);
try
{
UO.ConColor(0x0035);
UO.AddToSystemJournal("Temporary warning");
}
finally
{
UO.ConColor(usualHue);
}
UO.AddToSystemJournal("Normal messages again");
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: color (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ConColor. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color).
內部實作程式碼,不能作為獨立腳本執行。
public void ConColor(InjectionValue color)
{
systemMessageColor = NumberConversions.ToInt(color);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ConsolePrint(object? msg);顯示有關腳本進度或停止條件的本機訊息。你可以看到它,而不是其他玩家。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 該訊息將發送到遊戲視窗的左下區域和本地日誌。輸出 IDE 中提供了副本。在管理員的常規日誌中,啟用腳本訊息過濾器:該條目在沒有遊戲視窗的情況下可用。伺服器系統訊息過濾器不會選擇此類記錄。網路語音包不傳送。頭部上方的銘文是UO.CharPrint。
-
UO.Print在遊戲訊息日誌中新增一個條目:先讀取或儲存所需的搜尋字串/結果,然後記錄診斷訊息。在快速循環中,在發生變更時而不是每次迭代時記錄訊息。 - 如果沒有顏色,則使用hue0x03B2。 UO.Print(text, color) 先接受文字; UO.ColorPrint(color, text) – 顏色第一。
- 儘管名稱中有控制台,但這是相同的本機遊戲輸出,而不是單獨的 Windows 終端。
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。
UO.ConsolePrint("Hello from C#");參數與執行流程:
- processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.ConsolePrint("Processed item entries: " + Convert.ToString(processed));參數與執行流程:
- 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 Main 結束;物品不會被丟棄。
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ConsolePrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Main 記住重量,等待 1000 毫秒,並呼叫完全宣告的 ReportWeight。助手僅在重量變化時進行列印,並返回新的重量以供下一次檢查。它本身不會創建無限循環。
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ConsolePrint("Weight changed: " + Convert.ToString(current));
}
return current;
}
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。
參數: msg (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ConsolePrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Print:bridge.Print(msg.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:msg.ToString().
內部實作程式碼,不能作為獨立腳本執行。
public void ConsolePrint(InjectionValue msg) => bridge.Print(msg.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FillInfoWindow(object? s);向文字視窗新增一行並顯示它。
-
s——行文本;該值被轉換為string。
void - 無回傳值。
- 先前累積的行將保留至 MaxTextWindowLines 限制。
- TextPrint 新增一行並顯示 YokoTextWindowGump 本身; TextOpen 確保開啟狀態。當緩衝區溢位時,最舊的行將被刪除。這是一個單獨的文字窗口,不是伺服器指南,也不是UO.GetInfo。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.FillInfoWindow");
UO.FillInfoWindow("Status ready");參數與執行流程:
- 文字被傳送到客戶端文字視窗。
UO.FillInfoWindow("Status ready");參數與執行流程:
- 此串由本地電流 HP 組成。
return RunScenario();
object? RunScenario()
{
var status = "HP: " + Convert.ToString(UO.GetHP());
UO.FillInfoWindow(status);
return null;
}參數與執行流程:
- 第二個命令在第一個命令之後新增第二個命令。
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.FillInfoWindow("first");
UO.FillInfoWindow("second");
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: s (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextPrint:bridge.TextPrint(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextOpen:bridge.TextOpen().
內部實作程式碼,不能作為獨立腳本執行。
case "fillinfowindow":
bridge.TextPrint(Text(0));
bridge.TextOpen();
return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FillNewWindow(object? s);清除文字窗口,添加一行並顯示它。
-
s——行文本;該值被轉換為string。
void - 無回傳值。
- 在TextPrint之前,TextClear被執行;先前累積的行將被刪除。
- TextPrint 新增一行並顯示 YokoTextWindowGump 本身; TextOpen 確保開啟狀態。當緩衝區溢位時,最舊的行將被刪除。這是一個單獨的文字窗口,不是伺服器指南,也不是UO.GetInfo。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.FillNewWindow");
UO.FillNewWindow("Status ready");參數與執行流程:
- 文字被傳送到客戶端文字視窗。
UO.FillNewWindow("Status ready");參數與執行流程:
- 此串由本地電流 HP 組成。
return RunScenario();
object? RunScenario()
{
var status = "HP: " + Convert.ToString(UO.GetHP());
UO.FillNewWindow(status);
return null;
}參數與執行流程:
- 第二個命令替換內容:剩下的是第二個。
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.FillNewWindow("first");
UO.FillNewWindow("second");
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: s (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextClear:bridge.TextClear(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextPrint:bridge.TextPrint(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextOpen:bridge.TextOpen().
內部實作程式碼,不能作為獨立腳本執行。
case "fillnewwindow": bridge.TextClear(); bridge.TextPrint(Text(0)); bridge.TextOpen(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.FontColor(object? color);將 hue 設定為此腳本的後續本地 UO.UOAMessage。不改變角色的語音顏色、正常UO.Print、InfoFindList或IDE主題。
-
color— 強制數字索引 hue 0..65535,例如 0x0044。這不是RGB。裡面存有int,當輸出減少到ushort時; -1並不意味著重置,而是變成65535。新運行時間的初始值為0x03B2。沒有論證就沒有形式。
void:無結果、舊顏色或成功標誌。若要稍後恢復設置,請將選定的 hue 儲存在腳本變數中。
- 只改變狀態。 FontColor,不列印訊息或發送網路封包。
- 有效到同一運行時間的下一個FontColor。另一個獨立的腳本有它自己的狀態。 UO.Print(text,color)直接設定顏色,不讀取FontColor。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.FontColor");
UO.FontColor(0x0021);參數與執行流程:
- 0x0021 — 索引hue;最終的色調取決於客戶的色調檔案。訊息本地可見;它不是由角色說出來的。
UO.FontColor(0x0021);
var first = UO.FindList("0x0EED", "backpack");
if (Truth(first == ""))
{
UO.UOAMessage("No gold in the loaded backpack");
}
else
{
UO.UOAMessage("Gold units: " + Convert.ToString(UO.FindFullQuantity()));
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 完整通知接受文本和hue。最後安裝的 hue 保留用於該運行時的下一個 UOAMessage。這裡沒有內建的 FontColor() 可供閱讀。
return RunScenario();
object? RunScenario()
{
Notice("Supplies checked", 0x0044);
Notice("Restock needed", 0x0021);
return null;
}
void Notice(dynamic text, dynamic hue)
{
UO.FontColor(hue);
UO.UOAMessage(text);
}參數與執行流程:
- 0x03B2 — 新運行時的初始值FontColor。最後根據正常完成/錯誤處理準確地返回選定的基礎;它不會恢復未知的先前值。
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 baseHue = 0x03B2;
try
{
UO.FontColor(0x0021);
UO.UOAMessage("Check the route before moving");
}
finally
{
UO.FontColor(baseHue);
}
UO.UOAMessage("Ready");
UO.Print("Regular Print keeps its own color");
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: color (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias::Arg:Arg(0, state.FontColor).
內部實作程式碼,不能作為獨立腳本執行。
case "fontcolor": state.FontColor = Arg(0, state.FontColor); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.HelpRequest();請求伺服器幫助選單。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- ExecuteClientApiCompatibility 呼叫 HelpRequest,後者透過 Invoke 發送 GameActions.RequestHelp。菜單的內容由伺服器決定。
- 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.HelpRequest");
UO.HelpRequest();參數與執行流程:
- 請求伺服器幫助選單。
UO.HelpRequest();參數與執行流程:
- ExecuteClientApiCompatibility 呼叫 HelpRequest,後者透過 Invoke 發送 GameActions.RequestHelp。菜單的內容由伺服器決定。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.IsOnline()))
{
UO.HelpRequest();
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- 在範例中,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()
{
if (Truth(UO.IsOnline()))
{
UO.HelpRequest();
UO.Print("Help requested");
}
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。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.HelpRequest:bridge.HelpRequest().
內部實作程式碼,不能作為獨立腳本執行。
case "helprequest": bridge.HelpRequest(); return InjectionValue.Unit;void UO.Hide();
void UO.Hide(object? serial);
string UO.Hide(object? type, object? x, object? y);
string UO.Hide(object? type, object? x, object? y, object? z);Hide 只在本機隱藏已載入物件,不使用 Hiding 技能。Resend/Resync 清除這種隱藏並還原原先的繪製狀態,重複 Hide 後亦然。物件資料和伺服器 Hidden 旗標不會改變。
-
serial— 物件序號或已儲存的別名。 -
type— 物品圖形 ID;-1 表示指定位置的任何類型。 -
x— 世界 X 座標。 -
y— 世界 Y 座標。 -
z— Z 高度;簡短形式使用 0。
在 C# Scripts IDE 設定前綴;# 僅為範例。參數以空白分隔,引號將文字保留為單一參數。id 是 serial,type 是 graphic。xy x y [z] 選擇該位置第一個已載入物件;只有 type 時選第一個符合物件。InfoTile(x,y,map) 第三個參數是地圖,不是 Z。
#hide
#hide id 0x40001234
#hide type 0x0EED
#hide xy 1450 1690
#hide type 0x0EED xy 1450 1690 0
每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。
UO.Hide(0x40001234);UO.Print(UO.Hide(0x0EED, 1450, 1690, 0));foreach (int serial in new[] { 0x40001234, 0x40005678 })
UO.Hide(serial);new CommandSample().Execute(UO);
sealed class CommandSample
{
public void Execute(global::ClassicUO.CSharp.CSharpGameApi api)
{
api.Hide(0x40001234);
}
}CSharpGameApi.Hide
-> CSharpScriptGlobals
-> InjectionScript.Runtime.InjectionApiUO.Hide
ClassicUOInjectionApiBridge -> target / serial / type-position selection
-> local hidden-object state -> renderer visibility
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Morph(object? @type);本地更改目前角色的graphic。
-
type- int body graphic 或由 ResolveType 解析的字串 type。 0恢復與第一個Morph一起保存的graphic;非零數減少為ushort。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- Bridge.Morph沒有玩家不會改變任何東西。第一次呼叫時,它會儲存 _originalGraphic,然後將其指派給 Player.Graphic。即使 Player 遺失,運行時也會更新 ticksAnim=Timer。
- 這是本地外觀,而不是伺服器改造或種族/可用技能的變化。 ushort 以外的值不會被該橋接函數檢查,並被縮減為 16 位元。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.Morph");
UO.Morph("0x0190");參數與執行流程:
- 本地更改目前角色的graphic。
UO.Morph("0x0190");參數與執行流程:
- Bridge.Morph沒有玩家不會改變任何東西。第一次呼叫時,它會儲存 _originalGraphic,然後將其指派給 Player.Graphic。即使 Player 遺失,運行時也會更新 ticksAnim=Timer。
return RunScenario();
object? RunScenario()
{
UO.Morph(0);
return null;
}參數與執行流程:
- 這是本地外觀,而不是伺服器改造或種族/可用技能的變化。 ushort 以外的值不會被該橋接函數檢查,並被縮減為 16 位元。
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.Morph("0x0190");
UO.Wait(500);
UO.Morph(0);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: type (Integer/String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Morph. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Morph:bridge.Morph(type). -
InjectionScript.Runtime.InjectionApiUO.Timer:Timer().
內部實作程式碼,不能作為獨立腳本執行。
public void Morph(int type)
{
bridge.Morph(type);
ticksAnim = Timer();
}參數: type (Integer/String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Morph. -
InjectionScript.Runtime.InjectionApiUO.Morph:Morph(ResolveType(type)). -
InjectionScript.Runtime.InjectionApiUO.ResolveType:ResolveType(type).
內部實作程式碼,不能作為獨立腳本執行。
public void Morph(string type) => Morph(ResolveType(type));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.OpenIDE();
void UO.OpenIDE(object? filePath);-
filePath— 可選路徑。空白/空白-開啟編輯器而不選擇檔案;相對值從_manager.AutoloadPath解析,絕對值被保留。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- Bridge.OpenIDE 準備要求的路徑,然後呼叫 Invoke YokoScriptEditorGump.Open(_world,請求)。文件中的腳本不是由 OpenIDE 指令執行。
- 編輯器是一個圖形窗口,而不是外部應用程式Launch。讀取/顯示檔案取決於路徑和編輯器邏輯的存在。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.OpenIDE");
UO.OpenIDE();參數與執行流程:
- 打開圖形編輯器C#IDE。
UO.OpenIDE();參數與執行流程:
- Bridge.OpenIDE 準備要求的路徑,然後呼叫 Invoke YokoScriptEditorGump.Open(_world,請求)。文件中的腳本不是由 OpenIDE 指令執行。
return RunScenario();
object? RunScenario()
{
UO.OpenIDE("Example.csx");
return null;
}參數與執行流程:
- 編輯器是一個圖形窗口,而不是外部應用程式Launch。讀取/顯示檔案取決於路徑和編輯器邏輯的存在。
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 path = "C:\\UO Scripts\\Example.csx";
UO.OpenIDE(path);
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.OpenIDE. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenIDE:bridge.OpenIDE(string.Empty).
內部實作程式碼,不能作為獨立腳本執行。
public void OpenIDE() => bridge.OpenIDE(string.Empty);參數: filePath (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.OpenIDE. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.OpenIDE:bridge.OpenIDE(filePath.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:filePath.ToString().
內部實作程式碼,不能作為獨立腳本執行。
public void OpenIDE(InjectionValue filePath) => bridge.OpenIDE(filePath.ToString());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.Print(object? msg);
void UO.Print(object? msg, object? color);顯示有關腳本進度或停止條件的本機訊息。你可以看到它,而不是其他玩家。
-
color- UO hue,而非 RGB。數字或十六進位字串;橋接器使用低 16 位元。不要與graphic/type混淆。範例中的0x0044 就是所選的hue。如果沒有顏色,則使用hue0x03B2。 UO.Print(text, color) 先接受文字; UO.ColorPrint(color, text) – 顏色第一。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 該訊息將發送到遊戲視窗的左下區域和本地日誌。輸出 IDE 中提供了副本。在管理員的常規日誌中,啟用腳本訊息過濾器:該條目在沒有遊戲視窗的情況下可用。伺服器系統訊息過濾器不會選擇此類記錄。網路語音包不傳送。頭部上方的銘文是UO.CharPrint。
-
UO.Print在遊戲訊息日誌中新增一個條目:先讀取或儲存所需的搜尋字串/結果,然後記錄診斷訊息。在快速循環中,在發生變更時而不是每次迭代時記錄訊息。 - 如果沒有顏色,則使用hue0x03B2。 UO.Print(text, color) 先接受文字; UO.ColorPrint(color, text) – 顏色第一。
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
UO.Print("C# script started");
UO.Print($"Position: {UO.GetX()}, {UO.GetY()}");每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。
UO.Print("Hello from C#");參數與執行流程:
- processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);參數與執行流程:
- 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 Main 結束;物品不會被丟棄。
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.Print("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum), 0x0044);
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Main 記住重量,等待 1000 毫秒,並呼叫完全宣告的 ReportWeight。助手僅在重量變化時進行列印,並返回新的重量以供下一次檢查。它本身不會創建無限循環。
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.Print("Weight changed: " + Convert.ToString(current), 0x0044);
}
return current;
}
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。
參數: msg (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Print. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Print:bridge.Print(msg.ToString()). -
InjectionScript.Runtime.InjectionValue.ToString:msg.ToString().
內部實作程式碼,不能作為獨立腳本執行。
public void Print(InjectionValue msg)
{
bridge.Print(msg.ToString());
}參數: msg (Any), color (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Print. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Print:bridge.Print(NumberConversions.ToInt(color), msg.ToString()). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(color). -
InjectionScript.Runtime.InjectionValue.ToString:msg.ToString().
內部實作程式碼,不能作為獨立腳本執行。
public void Print(InjectionValue msg, InjectionValue color)
{
bridge.Print(NumberConversions.ToInt(color), msg.ToString());
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.RemoveFigure(object? figureID);按其刪除本機地圖圖形 ID.
-
figureID- int ID,回AddFigure。這不是 serial 物品,也不是 ID 阿甘。
int — 橋接的結果。 RemoveMapFigure: 1/0 透過刪除的圖形的存在。無論橋接的結果如何,運行時條目都會被刪除。
- 先呼叫bridge.RemoveMapFigure,然後state.MapFigures.Remove(id),再回橋接結果。未知 ID 不會建立形狀或觸發伺服器操作。
- 地圖上的局部圖形不是世界的物件。其他形狀和伺服器幾何形狀不會改變。
- WorldMapGump 將圖片儲存在進程的靜態字典中。一個世界/設定檔的常規腳本/聊天/巨集使用公共GetPersistentState和計數器ID;各個管理器進程不共享圖紙。 World.Clear/YokoScripts.Clear 和載入設定檔狀態不會清除或還原此字典(載入程式僅恢復UserStatics)。因此,考慮到worldNum,圖紙可以在同一過程中保存世界/配置文件的變化;新狀態可以重新強調已經存在的ID繪圖。 ClearFigures 明確清除圖面和目前狀態記錄。成功-寫入/刪除數據,而不是顯示證明。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
var id = UO.AddFigure(new object?[] { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 });
UO.Print("Removed flag: " + Convert.ToString(UO.RemoveFigure(id)));參數與執行流程:
- 按其刪除本機地圖圖形 ID.
UO.Print(UO.RemoveFigure(1));參數與執行流程:
- 先呼叫bridge.RemoveMapFigure,然後state.MapFigures.Remove(id),再回橋接結果。未知 ID 不會建立形狀或觸發伺服器操作。
return RunScenario();
object? RunScenario()
{
dynamic[] figure = new dynamic[checked((int)(10) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = UO.GetX();
figure[3] = UO.GetY();
figure[4] = UO.GetX() + 1;
figure[5] = UO.GetY() + 1;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
figure[9] = UO.WorldNum();
figure[10] = "Example";
var id = UO.AddFigure(figure);
if (Truth(id > 0))
{
UO.Print(UO.RemoveFigure(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;參數與執行流程:
- 地圖上的局部圖形不是世界的物件。其他形狀和伺服器幾何形狀不會改變。
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 id = 1;
var first = UO.RemoveFigure(id);
var second = UO.RemoveFigure(id);
UO.Print(Convert.ToString(first) + " " + Convert.ToString(second));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: figureID (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RemoveMapFigure:bridge.RemoveMapFigure(id).
內部實作程式碼,不能作為獨立腳本執行。
case "removefigure":
{
int id = Arg(0);
int removed = bridge.RemoveMapFigure(id);
state.MapFigures.Remove(id);
return new InjectionValue(removed);
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ServerPrint(object? message);顯示有關腳本進度或停止條件的本機訊息。你可以看到它,而不是其他玩家。
對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。
- 該訊息將發送到遊戲視窗的左下區域和本地日誌。輸出 IDE 中提供了副本。在管理員的常規日誌中,啟用腳本訊息過濾器:該條目在沒有遊戲視窗的情況下可用。伺服器系統訊息過濾器不會選擇此類記錄。網路語音包不傳送。頭部上方的銘文是UO.CharPrint。
-
UO.Print在遊戲訊息日誌中新增一個條目:先讀取或儲存所需的搜尋字串/結果,然後記錄診斷訊息。在快速循環中,在發生變更時而不是每次迭代時記錄訊息。 - 如果沒有顏色,則使用hue0x03B2。 UO.Print(text, color) 先接受文字; UO.ColorPrint(color, text) – 顏色第一。
- 儘管伺服器的名稱或與網路訊息相似,但該命令僅列印本機文字。若要與世界對話,請使用UO.Say。
- UO.Print · UO.CharPrint · UO.Say · UO.ConColor
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。
UO.ServerPrint("Hello from C#");參數與執行流程:
- processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.ServerPrint("Processed item entries: " + Convert.ToString(processed));參數與執行流程:
- 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 Main 結束;物品不會被丟棄。
return RunScenario();
object? RunScenario()
{
var weight = UO.Weight();
var maximum = UO.MaxWeight();
if (Truth(maximum > 0) && Truth(weight >= maximum))
{
UO.ServerPrint("Too heavy: " + Convert.ToString(weight) + "/" + Convert.ToString(maximum));
return null;
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;參數與執行流程:
- Main 記住重量,等待 1000 毫秒,並呼叫完全宣告的 ReportWeight。助手僅在重量變化時進行列印,並返回新的重量以供下一次檢查。它本身不會創建無限循環。
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 previous = UO.Weight();
UO.Wait(1000);
previous = ReportWeight(previous, UO.Weight());
return null;
}
dynamic ReportWeight(dynamic previous, dynamic current)
{
if (Truth(previous != current))
{
UO.ServerPrint("Weight changed: " + Convert.ToString(current));
}
return current;
}
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。
參數: message (String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ServerPrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ServerPrint:bridge.ServerPrint(message).
內部實作程式碼,不能作為獨立腳本執行。
public void ServerPrint(string message) => bridge.ServerPrint(message);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetShowZ(object? stateValue);更改本地標誌showZ運行時。
-
stateValue- 0 關閉;任何非零整數包括。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- 將NumberConversions.ToInt之後的0或1的值賦給showZ。該函數本身不會改變座標,也不會發送資料包。
- 這是目前運行時的兼容性儲存。項目私有mulPath/showZ沒有消費者;該更改不會重新載入資源或更改高度顯示。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetShowZ");
UO.SetShowZ(1);參數與執行流程:
- 更改本地標誌showZ運行時。
UO.SetShowZ(1);參數與執行流程:
- 將NumberConversions.ToInt之後的0或1的值賦給showZ。該函數本身不會改變座標,也不會發送資料包。
return RunScenario();
object? RunScenario()
{
UO.SetShowZ(0);
return null;
}參數與執行流程:
- 這是目前運行時的兼容性儲存。項目私有mulPath/showZ沒有消費者;該更改不會重新載入資源或更改高度顯示。
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()
{
ApplyValue(1);
return null;
}
void ApplyValue(dynamic value)
{
UO.SetShowZ(value);
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: stateValue (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.SetShowZ. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(stateValue).
內部實作程式碼,不能作為獨立腳本執行。
public void SetShowZ(InjectionValue stateValue) => showZ = NumberConversions.ToInt(stateValue) != 0 ? 1 : 0;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetSilentMode(object? value);更改本地標誌SilentMode運行時。
-
value- 0 關閉;任何非零整數包括。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- 將 SilentMode 儲存為 0/1。 GumpLinesResult讀取標誌:使用0將非空結果GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription另外列印到文字視窗中並開啟它;使用1,此附加顯示被抑制。傳回的數組不會改變。其他Print聲音和伺服器訊息不會被抑制。
- 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.SetSilentMode");
UO.SetSilentMode(1);參數與執行流程:
- 將 SilentMode 儲存為 0/1。 GumpLinesResult讀取標誌:使用0將非空結果GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription另外列印到文字視窗中並開啟它;使用1,此附加顯示被抑制。傳回的數組不會改變。其他Print聲音和伺服器訊息不會被抑制。
UO.SetSilentMode(1);參數與執行流程:
- 將 SilentMode 儲存為 0/1。 GumpLinesResult讀取標誌:使用0將非空結果GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription另外列印到文字視窗中並開啟它;使用1,此附加顯示被抑制。傳回的數組不會改變。其他Print聲音和伺服器訊息不會被抑制。
return RunScenario();
object? RunScenario()
{
UO.SetSilentMode(0);
return null;
}參數與執行流程:
- 將 SilentMode 儲存為 0/1。 GumpLinesResult讀取標誌:使用0將非空結果GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription另外列印到文字視窗中並開啟它;使用1,此附加顯示被抑制。傳回的數組不會改變。其他Print聲音和伺服器訊息不會被抑制。
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()
{
ApplyValue(1);
return null;
}
void ApplyValue(dynamic value)
{
UO.SetSilentMode(value);
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: value (Any)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
內部實作程式碼,不能作為獨立腳本執行。
case "setsilentmode": state.SilentMode = Arg(0) != 0 ? 1 : 0; return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ShowJournal();開啟本機客戶端日誌視窗。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- ShowJournal 呼叫 GameActions.OpenJournal(_world)。記錄不會被清除,文字也不會傳送到伺服器。
- 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.ShowJournal");
UO.ShowJournal();參數與執行流程:
- 開啟本機客戶端日誌視窗。
UO.ShowJournal();參數與執行流程:
- ShowJournal 呼叫 GameActions.OpenJournal(_world)。記錄不會被清除,文字也不會傳送到伺服器。
return RunScenario();
object? RunScenario()
{
UO.Print("Journal example");
UO.ShowJournal();
return null;
}參數與執行流程:
- 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。
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.ShowJournal();
UO.Print(UO.LineCount());
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ShowJournal:bridge.ShowJournal().
內部實作程式碼,不能作為獨立腳本執行。
case "showjournal": bridge.ShowJournal(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.Snap();
int UO.Snap(object? name);
int UO.Snap(object? name, object? quality);
int UO.Snap(object? file, object? quality, object? includeUI);儲存客戶端圖形視窗的快照。
-
name— 可選檔名。 .jpg/.jpeg 選擇JPEG,其他/無選擇PNG。名稱中的目錄被刪除;僅使用基本名稱。 -
file— 可選檔名。 .jpg/.jpeg 選擇JPEG,其他/無選擇PNG。名稱中的目錄被刪除;僅使用基本名稱。 -
quality— 可選 int,預設為100,僅限於1..100。影響JPEG; PNG 不使用有損質量。 -
includeUI- 可選bool,預設true。 false 在沒有 UI 的情況下繪製世界/光線。
數位標誌int:1 - 影像檔案已儲存,0 - 擷取/寫入錯誤。如果沒有圖形窗口,RequireGameView會在TakeScreenshot之前拋出錯誤。
- TakeScreenshot寫入ExecutablePath/Data/Client/Screenshots,清除無效的名稱字符,如果為空則自動按日期選擇名稱,如果存在現有文件則添加_2/_3。不使用任意絕對路徑。
- 用UI讀取後台緩衝區;沒有 UI 創建 RenderTarget2D 並渲染世界。 JPEG暫時設定FNA_GRAPHICS_JPEG_SAVE_QUALITY並恢復;PNGSaveAsPng。 TakeScreenshot 內的錯誤被記錄並給出為 0。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
將一次呼叫的結果輸出到日誌。數值不會轉換成 bool;若結果是陣列,則顯示元素數量。
var result = UO.Snap();
UO.Print("Snap: " + Convert.ToString(result));參數與執行流程:
- 儲存客戶端圖形視窗的快照。
UO.Print(UO.Snap());參數與執行流程:
- TakeScreenshot寫入ExecutablePath/Data/Client/Screenshots,清除無效的名稱字符,如果為空則自動按日期選擇名稱,如果存在現有文件則添加_2/_3。不使用任意絕對路徑。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.Snap("manual-example.jpg", 85));
return null;
}參數與執行流程:
- 用UI讀取後台緩衝區;沒有 UI 創建 RenderTarget2D 並渲染世界。 JPEG暫時設定FNA_GRAPHICS_JPEG_SAVE_QUALITY並恢復;PNGSaveAsPng。 TakeScreenshot 內的錯誤被記錄並給出為 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.Print(UO.Snap("manual-world.png", 100, false));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Snap. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Snap:bridge.Snap(null, 100, true).
內部實作程式碼,不能作為獨立腳本執行。
public int Snap() => bridge.Snap(null, 100, true);參數: name (String)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Snap. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Snap:bridge.Snap(name, 100, true).
內部實作程式碼,不能作為獨立腳本執行。
public int Snap(string name) => bridge.Snap(name, 100, true);參數: name (String), quality (Integer)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Snap. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Snap:bridge.Snap(name, Math.Max(1, Math.Min(100, quality)), true).
內部實作程式碼,不能作為獨立腳本執行。
public int Snap(string name, int quality) => bridge.Snap(name, Math.Max(1, Math.Min(100, quality)), true);參數: file (Any), quality (Any), includeUI (Any)
結果: int / Integer.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.Register [Snap]. -
InjectionScript.Runtime.InjectionApiUO.Snap:Snap(values[0].ToString(), NumberConversions.ToInt(values[1]), ToBoolean(values[2])). -
InjectionScript.Runtime.InjectionValue.ToString:values[0].ToString(). -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(values[1]). -
InjectionScript.Runtime.InjectionApiUO.ToBoolean:ToBoolean(values[2]).
呼叫時執行已儲存的處理函式 delegate。註冊方法在建立 API 時建立此 delegate。
內部實作程式碼,不能作為獨立腳本執行。
values => new InjectionValue(Snap(values[0].ToString(), NumberConversions.ToInt(values[1]), ToBoolean(values[2])))Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextClear();清除本機文字視窗的緩衝區。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- 清除_textWindow;如果視窗已打開,則用空列表重新顯示它。 A closed window remains closed.客戶端日誌未清除。
- 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.TextClear");
UO.TextClear();參數與執行流程:
- 清除本機文字視窗的緩衝區。
UO.TextClear();參數與執行流程:
- 清除_textWindow;如果視窗已打開,則用空列表重新顯示它。 A closed window remains closed.客戶端日誌未清除。
return RunScenario();
object? RunScenario()
{
UO.TextPrint("Old line");
UO.TextClear();
return null;
}參數與執行流程:
- 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
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.TextClose();
UO.TextClear();
UO.TextOpen();
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.TextClear. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextClear:bridge.TextClear().
內部實作程式碼,不能作為獨立腳本執行。
public void TextClear() => bridge.TextClear();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextClose();關閉本機文字窗口,儲存緩衝區。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- 設定 _textWindowOpen=false 並處理現有的 YokoTextWindowGump。 _textWindow清單沒有被清除; TextOpen將再次顯示其線條。
- 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.TextClose");
UO.TextClose();參數與執行流程:
- 關閉本機文字窗口,儲存緩衝區。
UO.TextClose();參數與執行流程:
- 設定 _textWindowOpen=false 並處理現有的 YokoTextWindowGump。 _textWindow清單沒有被清除; TextOpen將再次顯示其線條。
return RunScenario();
object? RunScenario()
{
UO.TextPrint("Retained line");
UO.TextClose();
return null;
}參數與執行流程:
- 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
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.TextPrint("Retained line");
UO.TextClose();
UO.Wait(250);
UO.TextOpen();
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.TextClose. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextClose:bridge.TextClose().
內部實作程式碼,不能作為獨立腳本執行。
public void TextClose() => bridge.TextClose();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextOpen();開啟本機文字視窗。
沒有參數。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- 儲存 _textWindowOpen=true 並調用 YokoTextWindowGump.用當前_textWindow顯示。緩衝區沒有被清除;重新開啟會顯示累積的行數。
- 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.TextOpen");
UO.TextOpen();參數與執行流程:
- 開啟本機文字視窗。
UO.TextOpen();參數與執行流程:
- 儲存 _textWindowOpen=true 並調用 YokoTextWindowGump.用當前_textWindow顯示。緩衝區沒有被清除;重新開啟會顯示累積的行數。
return RunScenario();
object? RunScenario()
{
UO.TextPrint("Example");
UO.TextOpen();
return null;
}參數與執行流程:
- 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
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.TextOpen();
UO.Wait(500);
UO.TextClose();
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: 沒有參數。
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.TextOpen. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextOpen:bridge.TextOpen().
內部實作程式碼,不能作為獨立腳本執行。
public void TextOpen() => bridge.TextOpen();Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.TextPrint(object? text);將一行新增至本機文字視窗並將其開啟。
-
text— 透過 ToString 發送文字;儲存為已傳送。
void - 沒有值。使用單獨的線路撥打電話;完成並不確認伺服器的操作。
- 在限制下,MaxTextWindowLines=2000 刪除舊行,然後新增文字或空白行,設定 _textWindowOpen=true 並顯示視窗。這不是日誌中的UO.Print,也不是對伺服器的講話。
- 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
指令是獨立的陳述式。前面的訊息表示呼叫開始,並非伺服器已完成動作的確認。
UO.Print("Calling UO.TextPrint");
UO.TextPrint("Example");參數與執行流程:
- 將一行新增至本機文字視窗並將其開啟。
UO.TextPrint("Example");參數與執行流程:
- 在限制下,MaxTextWindowLines=2000 刪除舊行,然後新增文字或空白行,設定 _textWindowOpen=true 並顯示視窗。這不是日誌中的UO.Print,也不是對伺服器的講話。
return RunScenario();
object? RunScenario()
{
var message = "Line 1";
UO.TextPrint(message);
UO.TextPrint("Line 2");
return null;
}參數與執行流程:
- 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
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.TextClear();
UO.TextPrint("Fresh report");
UO.TextClose();
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: text (String)
結果: void / Unit.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.TextPrint. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.TextPrint:bridge.TextPrint(text).
內部實作程式碼,不能作為獨立腳本執行。
public void TextPrint(string text) => bridge.TextPrint(text);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.UpdateFigure(object? figureID, object? figure);取代現有本地地圖圖形的描述。
-
figureID- 狀態中的 int ID。 MapFigures 被AddFigure 接收。未知的ID給出0。 -
figure— 帶 | 的陣列或字串:[kind,coord,x1,y1,x2,y2,brushColor,brushStyle,color,worldNum,text]。最少前 9 數字欄位; worldNum預設為當前地圖,文字預設為空。 -
figure[0] (kind)- 種類應為 0..4,座標 - 0..1,FigureID - 正數。當違反這些邊界時,WorldMapGump.SetYokoMapFigure 返回0。 -
figure[1] (coord)- 種類應為 0..4,座標 - 0..1,FigureID - 正數。當違反這些邊界時,WorldMapGump.SetYokoMapFigure 返回0。
數位標誌 int: 1 - 解析成功並橋接。 SetMapFigure返回非零結果,之後記錄被更新; 0 - 無 ID,結構/數字文字欄位錯誤或橋接失敗。
- TryMapFigureArg 接受陣列或 |string。第一個9字段被轉換;數字文字由TryStr2Int檢查。不支援的視圖/短符號 - 0,其他視圖轉換錯誤可能會破壞腳本。
- 如果橋接器發生故障,則不會取代現有的運行時條目。成功後,將 SerializeMapFigure 與 10 數字欄位和文字一起儲存。該圖僅是本地的,不是伺服器專案。
- 種類:0直線,1橢圓(32輪廓線段),2矩形輪廓,3箭頭,4文本。 coord=0 — 轉換為地圖的世界座標,coord=1 — 相對於地圖繪製區域的像素。 x1/y1 和 x2/y2 - 末端/邊界;對於世界箭頭 x2=y2=0 設定玩家的起點和 x1/y1 的目標。顏色 — 0x00BBGGRR(次要byte紅色),輪廓顏色。 brushColor/brushStyle 已儲存,但渲染器不會讀取它們:沒有填充。 worldNum<0 在任何地圖上顯示,否則僅在指定地圖上顯示。文字是在地圖字體中的第一個點(非文字形狀的 +3 像素)繪製的,而不是輪廓顏色。
- WorldMapGump 將圖片儲存在進程的靜態字典中。一個世界/設定檔的常規腳本/聊天/巨集使用公共GetPersistentState和計數器ID;各個管理器進程不共享圖紙。 World.Clear/YokoScripts.Clear 和載入設定檔狀態不會清除或還原此字典(載入程式僅恢復UserStatics)。因此,考慮到worldNum,圖紙可以在同一過程中保存世界/配置文件的變化;新狀態可以重新強調已經存在的ID繪圖。 ClearFigures 明確清除圖面和目前狀態記錄。成功-寫入/刪除數據,而不是顯示證明。
每個範例都可以儲存為單獨的檔案.csx並在IDE中運行。 UO物件和等待函數提供當前遊戲會話的主機。將演示 serial 名稱、座標和地址替換為您自己的。
將這段程式碼存為獨立的 .csx 檔案執行。參數直接出現在呼叫中;請將範例名稱、serial 和網址替換成自己的值。
object?[] figure = { 0, 0, UO.X(), UO.Y(), UO.X() + 3, UO.Y(), 0, 0, 255 };
var id = UO.AddFigure(figure);
figure[8] = 65280;
UO.Print("Updated flag: " + Convert.ToString(UO.UpdateFigure(id, figure)));參數與執行流程:
- 取代現有本地地圖圖形的描述。
dynamic[] figure = new dynamic[checked((int)(8) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = 100;
figure[3] = 100;
figure[4] = 101;
figure[5] = 101;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
UO.Print(UO.UpdateFigure(1, figure));參數與執行流程:
- TryMapFigureArg 接受陣列或 |string。第一個9字段被轉換;數字文字由TryStr2Int檢查。不支援的視圖/短符號 - 0,其他視圖轉換錯誤可能會破壞腳本。
return RunScenario();
object? RunScenario()
{
dynamic[] figure = new dynamic[checked((int)(10) + 1)];
figure[0] = 0;
figure[1] = 0;
figure[2] = UO.GetX();
figure[3] = UO.GetY();
figure[4] = UO.GetX() + 1;
figure[5] = UO.GetY() + 1;
figure[6] = 0;
figure[7] = 0;
figure[8] = 0;
figure[9] = UO.WorldNum();
figure[10] = "Example";
var id = UO.AddFigure(figure);
if (Truth(id > 0))
{
UO.Print(UO.UpdateFigure(id, figure));
UO.RemoveFigure(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;參數與執行流程:
- 如果橋接器發生故障,則不會取代現有的運行時條目。成功後,將 SerializeMapFigure 與 10 數字欄位和文字一起儲存。該圖僅是本地的,不是伺服器專案。
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 figure = "0|0|100|100|101|101|0|0|0";
UO.Print(UO.UpdateFigure(1, figure));
return null;
}
}C# 區分大小寫。請使用正確的 UO 名稱。數值旗標應與 0 比較;只有回傳型別為 bool 時才使用 bool。
參數: figureID (Any), figure (Any)
結果: dynamic / Any.
呼叫時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::TryMapFigureArg:TryMapFigureArg(1, out int[] figure, out string figureText). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetMapFigure:bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::SerializeMapFigure:SerializeMapFigure(figure, figureText).
內部實作程式碼,不能作為獨立腳本執行。
case "updatefigure":
{
int id = Arg(0);
if (!state.MapFigures.ContainsKey(id) || !TryMapFigureArg(1, out int[] figure, out string figureText))
return InjectionValue.False;
if (bridge.SetMapFigure(id, figure[0], figure[1], figure[2], figure[3], figure[4], figure[5], figure[6], figure[7], figure[8], figure[9], figureText) == 0)
return InjectionValue.False;
state.MapFigures[id] = SerializeMapFigure(figure, figureText);
return InjectionValue.True;
}