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

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

客戶端UI

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

顯示訊息、服務視窗、顯示物件並開啟IDE。這些步驟不會取代向伺服器發送語音。

部分

主題 命令與解釋
Print 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

關於該主題的範例

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

UO.Print

參數、結果及所有場景

var processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);

UO.FillInfoWindow

參數、結果及所有場景

UO.FillInfoWindow("Status ready");

完整指令說明


UO.ActivateHandle

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

C# 簽章

void UO.ActivateHandle();

請求 Windows/SDL 將目前用戶端視窗置於最前面。沒有爭論或結果。這是一個視窗命令,而不是一個專案、技能或目標應用程式;實際焦點取決於視窗系統。

參數

沒有參數。

傳回值

void。該呼叫僅請求啟動視窗;它不承認視窗系統將其帶到前台。

行為

  • 客戶端透過SDL升起遊戲視圖視窗。該命令不會發送遊戲資料包或在世界中執行操作。最小化的視窗或視窗系統的限制可能會妨礙實際焦點。
  • RequireGameView 需要 Client.Game。如果 ClassicUO 圖形視窗未打開,則橋會拋出 InvalidOperationException。 SDL_RaiseWindow 請求提升現有視窗;關於焦點的決定留給視窗系統。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。請求將客戶端視窗置於前台。 - 直接腳本

參數與執行流程:

  • 請求將客戶端視窗置於前台。
UO.ActivateHandle();

2。連接到遊戲之前不要請求視窗焦點。 - 腳本功能

參數與執行流程:

  • 連接到遊戲之前不要請求視窗焦點。
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;

3。將視窗操作包裝到可重複使用的過程。 - 腳本類

參數與執行流程:

  • 將視窗操作包裝到可重複使用的過程。
  • 透過輔助過程執行請求。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        RunAction();
        return null;
    }

    void RunAction()
    {
        UO.ActivateHandle();
    }
}

命令實作

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

UO.ActivateHandle() — UO.ActivateHandle()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void ActivateHandle() => bridge.ActivateHandle();

UO.AddFigure

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

C# 簽章

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 格式指定輪廓。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.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));

1。遊戲地圖上矩形的紅色輪廓 - 直接腳本

參數與執行流程:

  • 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);

2。從角色到遊戲地圖上的點的箭頭 - 腳本函數

參數與執行流程:

  • 對於 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;
}

3。在當前面的兩點之間創建一條藍線。 - 腳本類

參數與執行流程:

  • 在當前面的兩點之間創建一條藍線。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        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。

UO.AddFigure(figure) — UO.AddFigure(Any)

參數: figure (Any)

結果: dynamic / Any.

呼叫時:

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

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);

                }

UO.CharPrint

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

C# 簽章

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

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.CharPrint");
UO.CharPrint(0x0044, "Ready");

1。 UO.CharPrint - 1 - 直接脚本

參數與執行流程:

  • 第一種形式 CharPrint 將 Ready 置於其字元上方。 ClientPrintEx透過UO.Hex2Int(UO.GetSerial("self")接收它serial)並明確地將字體傳遞給3。銘文不包含任何遊戲模式。
  • GetSerial 傳回十六進位字串。 Hex2Int 將其轉換為 int,然後與數字0 進行比較;字串「0x00000000」不能被檢查為數字0。
UO.CharPrint(0x0044, "Ready");

2。 UO.CharPrint — 2 — 腳本函數

參數與執行流程:

  • 目標 — 最後一個目標的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;

3。 UO.CharPrint - 3 - 場景類

參數與執行流程:

  • 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。

UO.CharPrint(color, msg) — UO.CharPrint(Integer,String)

參數: color (Integer/String), msg (String)

結果: void / Unit.

呼叫時:

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

public void CharPrint(int color, string msg) => CharPrint(bridge.Self, color, msg);

UO.CharPrint(color, msg) — UO.CharPrint(String,String)

參數: color (Integer/String), msg (String)

結果: void / Unit.

呼叫時:

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

public void CharPrint(string color, string msg) => CharPrint(bridge.Self, NumberConversions.ToInt(color), msg);

UO.CharPrint(id, color, msg) — UO.CharPrint(Any,Any,Any)

參數: id (Any/Integer), color (Any/Integer), msg (Any/String)

結果: void / Unit.

呼叫時:

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

public void CharPrint(InjectionValue id, InjectionValue color, InjectionValue msg) 

            => CharPrint(GetObject(id), NumberConversions.ToInt(color), (string)msg);

UO.CharPrint(id, color, msg) — UO.CharPrint(Integer,Integer,String)

參數: id (Any/Integer), color (Any/Integer), msg (Any/String)

結果: void / Unit.

呼叫時:

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

public void CharPrint(int id, int color, string msg) => bridge.CharPrint(id, color, msg);

UO.CircleTrans

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

C# 簽章

int UO.CircleTrans();
void UO.CircleTrans(object? enabled);

讀取或更改活動設定檔的透明度圓設定。

參數

  • enabled - int:0 停用,任何非零值啟用。如果沒有參數,則設定是唯讀的。

傳回值

不含參數 int 1/0;帶參數的表單回傳 null。

行為

  • 在沒有設定檔的情況下閱讀給出0。沒有設定檔的條目會列印錯誤;如果有設定文件,則更改 UseCircleOfTransparency 並儲存設定檔。這是客戶端的視覺客製化。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。讀取設定-直接腳本

參數與執行流程:

  • 閱讀不會改變個人資料。
var enabled = UO.CircleTrans();
UO.Print(Convert.ToString(enabled));

2。啟用透明度 - 腳本函數

參數與執行流程:

  • 錄音時透明圈保持開啟。
return  RunScenario();
 object? RunScenario()
{
    UO.CircleTrans(1);
    return null;
}

3。恢復先前的值 - 腳本類

參數與執行流程:

  • 臨時更改設定後,將恢復已儲存的標誌。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var previous = UO.CircleTrans();
        UO.CircleTrans(0);
        UO.CircleTrans(previous);
        return null;
    }
}

命令實作

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

UO.CircleTrans() — UO.CircleTrans()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

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

UO.CircleTrans(enabled) — UO.CircleTrans(Integer)

參數: enabled (Integer)

結果: void / Unit.

呼叫時:

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

public void CircleTrans(int enabled) => bridge.CircleTrans(enabled);

UO.ClearFigures

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

C# 簽章

void UO.ClearFigures();

刪除所有自訂地圖形狀及其運行時條目。

參數

沒有參數。

傳回值

void - 無回傳值。

行為

  • 清除 WorldMapGump.ClearYokoMapFigures 併狀態.MapFigures。底圖和UserStatics沒有改變。
  • ClearYokoMapFigures 清除 WorldMapGump 正在進行的靜態收集,然後該指令清除 MapFigures 的運行時狀態。此清理範圍由整個客戶端集合決定,而不僅僅是呼叫腳本的名稱。
  • 保留常規自訂地圖標籤 (userMarkers.usr)。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。清除狀態-直接腳本

參數與執行流程:

  • 刪除所有自訂地圖形狀及其運行時條目。
UO.ClearFigures();

2。設定後清除-腳本功能

參數與執行流程:

  • 為目前地圖建立本機形狀,然後刪除所有自訂形狀。
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;
}

3。重新清除 - 腳本類

參數與執行流程:

  • 清除空集是可以接受的,並且不會建立新設定。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ClearFigures();
        UO.ClearFigures();
        return null;
    }
}

命令實作

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

UO.ClearFigures() — UO.ClearFigures()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "clearfigures":

                    bridge.ClearMapFigures();

                    state.MapFigures.Clear();

                    return InjectionValue.Unit;

UO.ClearInfoWindow

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

C# 簽章

void UO.ClearInfoWindow();

清除客戶端文字視窗的行。

參數

沒有參數。

傳回值

void - 無回傳值。

行為

  • TextClear清空緩衝區;如果視窗打開,則用空內容更新它。窗戶不一定會關閉。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。清除狀態-直接腳本

參數與執行流程:

  • 清除客戶端文字視窗的行。
UO.ClearInfoWindow();

2。設定後清除-腳本功能

參數與執行流程:

  • 清除先前新增的文字視窗行。
return  RunScenario();
 object? RunScenario()
{
    UO.FillInfoWindow("status");
    UO.ClearInfoWindow();
    return null;
}

3。重新清除 - 腳本類

參數與執行流程:

  • 清除空集是可以接受的,並且不會建立新設定。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ClearInfoWindow();
        UO.ClearInfoWindow();
        return null;
    }
}

命令實作

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

UO.ClearInfoWindow() — UO.ClearInfoWindow()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "clearinfowindow": bridge.TextClear(); return InjectionValue.Unit;

UO.ClientHide

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

C# 簽章

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中沒有單獨的取消隱藏指令。隱藏屬於已載入的物件實例:將其從客戶端世界中刪除並再次載入(例如,重新連線時)會重置標誌。簡單地關閉/打開箱子並不能保證退回物品。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。透過已知的 ID 隱藏項目 - 直接腳本

參數與執行流程:

  • 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;

2。隱藏找到的堆疊 - 腳本函數

參數與執行流程:

  • 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;

3。使用命名物件 - 腳本類

參數與執行流程:

  • 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。

UO.ClientHide(objID) — UO.ClientHide(Any)

參數: objID (Any)

結果: dynamic / Any.

呼叫時:

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

case "clienthide": bridge.ClientHide(Arg(0)); return InjectionValue.True;

UO.ClientMarkChar

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

C# 簽章

void UO.ClientMarkChar(object? actionIndex, object? id);

更新客戶端標籤LastTarget和/或LastAttack。

參數

  • actionIndex - int: 1 - LastTarget; 2 - LastAttack; 3 - 兩者皆有。其他值列印錯誤。
  • id — 物件的序號或支援的 self/backpack/lasttarget/saved 物件名稱;數字字串和 0x 字串由執行時間解析。

傳回值

void - 無回傳值。

行為

  • ClientMarkChar 修改已儲存的目標而不發送攻擊或回應伺服器目標。後續命令可以使用新標籤。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.ClientMarkChar");
UO.ClientMarkChar(1, "self");

1。更新LastTarget - 直接腳本

參數與執行流程:

  • 保存的目標成為你自己的角色。
UO.ClientMarkChar(1,"self");

2。更新兩個標籤 - 腳本函數

參數與執行流程:

  • 後一個目標用於兩個客戶端標記。
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;

3。不正確的操作 - 腳本類

參數與執行流程:

  • 零不是操作集的一部分,會導致錯誤訊息。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ClientMarkChar(0, "self");
        return null;
    }
}

命令實作

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

UO.ClientMarkChar(actionIndex, id) — UO.ClientMarkChar(Any,Any)

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

結果: void / Unit.

呼叫時:

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

public void ClientMarkChar(InjectionValue actionIndex, InjectionValue id)

            => bridge.ClientMarkChar(NumberConversions.ToInt(actionIndex), GetObject(id));

UO.ClientPrint

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

C# 簽章

void UO.ClientPrint(object? text);

顯示有​​關腳本進度或停止條件的本機訊息。你可以看到它,而不是其他玩家。

參數

傳回值

對返回類型為void的方法的呼叫被編寫為獨立語句C#;無法分配或檢查結果。完成聲明並不構成遊戲伺服器的確認。

行為

  • 該訊息將發送到遊戲視窗的左下區域和本地日誌。輸出 IDE 中提供了副本。在管理員的常規日誌中,啟用腳本訊息過濾器:該條目在沒有遊戲視窗的情況下可用。伺服器系統訊息過濾器不會選擇此類記錄。網路語音包不傳送。頭部上方的銘文是UO.CharPrint。
  • UO.Print 在遊戲訊息日誌中新增一個條目:先讀取或儲存所需的搜尋字串/結果,然後記錄診斷訊息。在快速循環中,在發生變更時而不是每次迭代時記錄訊息。
  • 使用此腳本運行時的系統訊息的顏色:最初 0x0440, 變化 UO.ConColor。這是本地條目;命令名稱並不意味著發送到伺服器。
  • UO.Print · UO.CharPrint · UO.Say · UO.ConColor

獨立的 C# 腳本

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

簡單範例

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

指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。

UO.ClientPrint("Hello from C#");

1。簡短報告-直接腳本

參數與執行流程:

  • processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.ClientPrint("Processed item entries: " + Convert.ToString(processed));

2。過載警告 - 腳本函數

參數與執行流程:

  • 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 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;

3。僅報告體重變化 - 腳本類

參數與執行流程:

  • 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。

UO.ClientPrint(text) — UO.ClientPrint(Any)

參數: text (Any)

結果: void / Unit.

呼叫時:

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

case "addtojournal":

                case "addtosystemjournal":

                case "clientprint":

                    SystemMessage(Text(0)); return InjectionValue.Unit;

UO.ClientPrintEx

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

C# 簽章

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

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.ClientPrintEx");
UO.ClientPrintEx(UO.Hex2Int(UO.GetSerial("self")), 0x0044, 3, "Ready");

1。 UO.ClientPrintEx - 1 - 直接脚本

參數與執行流程:

  • 第一種形式 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");

2。 UO.ClientPrintEx — 2 — 腳本函數

參數與執行流程:

  • 目標 — 最後一個目標的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;

3。 UO.ClientPrintEx - 3 - 場景類

參數與執行流程:

  • 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。

UO.ClientPrintEx(senderID, color, font, text) — UO.ClientPrintEx(Any,Any,Any,Any)

參數: senderID (Any), color (Any), font (Any), text (Any)

結果: void / Unit.

呼叫時:

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

case "clientprintex":

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

UO.CloseClientUIWindow

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

C# 簽章

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 不適用於此處。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.CloseClientUIWindow");
UO.CloseClientUIWindow(0, "self");

1。刪除你的紙娃娃 - 直接腳本

參數與執行流程:

  • 僅您角色的裝備視窗會關閉;他的狀態、個人資料和背包仍然是單獨的視窗。
UO.CloseClientUIWindow(0, "self");

2。使用完東西後關閉背包視窗-腳本功能

參數與執行流程:

  • 如果背包沒有打開,該動作不會改變任何東西。此命令不會移動項目,也不傳回結果。
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;

3。刪除所選角色的狀態和個人資料 - 場景類別

參數與執行流程:

  • 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。

UO.CloseClientUIWindow(uiWindowType, id) — UO.CloseClientUIWindow(Any,Any)

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

結果: void / Unit.

呼叫時:

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

case "closeclientuiwindow": bridge.CloseClientWindow(Arg(0), Arg(1)); return InjectionValue.Unit;

UO.CloseHandle

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

C# 簽章

void UO.CloseHandle();

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

參數

沒有參數。

傳回值

void - 無回傳值。

行為

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

獨立的 C# 腳本

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

簡單範例

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

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

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

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

參數與執行流程:

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

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

參數與執行流程:

  • 此範例顯示了受控條件;值 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;

3。完成程式-腳本類

參數與執行流程:

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

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

    void FinishClient(dynamic enabled)
    {
        if (Truth(enabled))
        {
            UO.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。

UO.CloseHandle() — UO.CloseHandle()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void CloseHandle() => bridge.CloseHandle();

UO.CloseSimpleGump

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

C# 簽章

void UO.CloseSimpleGump(object? gumpIndex);

本地關閉允許透過嚴格索引關閉的伺服器口令。

參數

  • gumpIndex — 強制 int — 活動伺服器口令的索引,從 0 到 GetGumpsCount()-1。這不是 GumpID/serial。負數和列表外的索引無效。開啟、關閉和重新排序視窗可以更改索引;行動前檢查GetGumpID/GetGumpSerial。

傳回值

void - 不回傳任何內容。結果不應解釋為伺服器或bool的確認。

行為

  • 與活動伺服器 Gump 一起使用。背包、地圖、設定等本地視窗不包含在此列表中。一次呼叫讀取遊戲執行緒中的資料;不同的呼叫可能會看到列表的不同狀態。
  • 無效索引和 NoClose 不會改變任何內容。該命令不會將按鈕回應傳送到伺服器。這個答案,請使用SendGumpSelect。
  • 關閉會修改清單和索引。若要批次關閉,請從最後一個索引遍歷清單到第一個索引。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.CloseSimpleGump");
UO.CloseSimpleGump(0);

1。關閉第一個視窗-直接腳本

參數與執行流程:

  • 0是索引,不是ID。如果視窗禁止關閉,它將保持開啟。
UO.CloseSimpleGump(0);

2。關閉所有啟用的視窗 - 腳本功能

參數與執行流程:

  • 反向遍歷減少了收盤後指數變化的影響。並行開啟新視窗時,請再次檢查清單。
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;

3。關閉前儲存資訊-腳本類

參數與執行流程:

  • 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。

UO.CloseSimpleGump(gumpIndex) — UO.CloseSimpleGump(Any)

參數: gumpIndex (Any)

結果: void / Unit.

呼叫時:

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

case "closesimplegump":

                    if (bridge is IApiGumpAccess gumpAccess) gumpAccess.CloseGumpAtIndex(Arg(0));

                    else bridge.CloseSimpleGump(Arg(0));

                    return InjectionValue.Unit;

UO.ColorPrint

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

C# 簽章

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

獨立的 C# 腳本

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

簡單範例

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

指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。

UO.ColorPrint(0x0044, "Hello from C#");

1。簡短報告-直接腳本

參數與執行流程:

  • processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.ColorPrint(0x0044, "Processed item entries: " + Convert.ToString(processed));

2。過載警告 - 腳本函數

參數與執行流程:

  • 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 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;

3。僅報告體重變化 - 腳本類

參數與執行流程:

  • 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。

UO.ColorPrint(color, msg) — UO.ColorPrint(Any,Any)

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

結果: void / Unit.

呼叫時:

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

public void ColorPrint(InjectionValue color, InjectionValue msg) => bridge.Print(NumberConversions.ToInt(color), msg.ToString());

UO.ConColor

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

C# 簽章

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

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.ConColor");
UO.ConColor(0x0044);

1。 UO.ConColor - 1 - 直接脚本

參數與執行流程:

  • 0x0044 成為下一條系統線的顏色。 ConColor本身不印任何東西。
UO.ConColor(0x0044);
UO.AddToSystemJournal("Notice");

2。 UO.ConColor — 2 — 腳本函數

參數與執行流程:

  • 正常的Print保留其0x03B2顏色,AddToJournal使用指定的0x0044。兩個訊息都是本地訊息。
return  RunScenario();
 object? RunScenario()
{
    UO.ConColor(0x0044);
    UO.Print("Normal Print color");
    UO.AddToJournal("System color");
    return null;
}

3。 UO.ConColor - 3 - 場景類

參數與執行流程:

  • 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。

UO.ConColor(color) — UO.ConColor(Any)

參數: color (Any)

結果: void / Unit.

呼叫時:

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

public void ConColor(InjectionValue color)

        {

            systemMessageColor = NumberConversions.ToInt(color);

        }

UO.ConsolePrint

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

C# 簽章

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

獨立的 C# 腳本

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

簡單範例

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

指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。

UO.ConsolePrint("Hello from C#");

1。簡短報告-直接腳本

參數與執行流程:

  • processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.ConsolePrint("Processed item entries: " + Convert.ToString(processed));

2。過載警告 - 腳本函數

參數與執行流程:

  • 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 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;

3。僅報告體重變化 - 腳本類

參數與執行流程:

  • 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。

UO.ConsolePrint(msg) — UO.ConsolePrint(Any)

參數: msg (Any)

結果: void / Unit.

呼叫時:

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

public void ConsolePrint(InjectionValue msg) => bridge.Print(msg.ToString());

UO.FillInfoWindow

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

C# 簽章

void UO.FillInfoWindow(object? s);

向文字視窗新增一行並顯示它。

參數

  • s——行文本;該值被轉換為string。

傳回值

void - 無回傳值。

行為

  • 先前累積的行將保留至 MaxTextWindowLines 限制。
  • TextPrint 新增一行並顯示 YokoTextWindowGump 本身; TextOpen 確保開啟狀態。當緩衝區溢位時,最舊的行將被刪除。這是一個單獨的文字窗口,不是伺服器指南,也不是UO.GetInfo。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.FillInfoWindow");
UO.FillInfoWindow("Status ready");

1。顯示行 - 直接腳本

參數與執行流程:

  • 文字被傳送到客戶端文字視窗。
UO.FillInfoWindow("Status ready");

2。來自變數的文字 - 腳本函數

參數與執行流程:

  • 此串由本地電流 HP 組成。
return  RunScenario();
 object? RunScenario()
{
    var status = "HP: " + Convert.ToString(UO.GetHP());
    UO.FillInfoWindow(status);
    return null;
}

3。連續兩行 - 腳本類

參數與執行流程:

  • 第二個命令在第一個命令之後新增第二個命令。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.FillInfoWindow("first");
        UO.FillInfoWindow("second");
        return null;
    }
}

命令實作

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

UO.FillInfoWindow(s) — UO.FillInfoWindow(Any)

參數: s (Any)

結果: void / Unit.

呼叫時:

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

case "fillinfowindow":

                    bridge.TextPrint(Text(0));

                    bridge.TextOpen();

                    return InjectionValue.Unit;

UO.FillNewWindow

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

C# 簽章

void UO.FillNewWindow(object? s);

清除文字窗口,添加一行並顯示它。

參數

  • s——行文本;該值被轉換為string。

傳回值

void - 無回傳值。

行為

  • 在TextPrint之前,TextClear被執行;先前累積的行將被刪除。
  • TextPrint 新增一行並顯示 YokoTextWindowGump 本身; TextOpen 確保開啟狀態。當緩衝區溢位時,最舊的行將被刪除。這是一個單獨的文字窗口,不是伺服器指南,也不是UO.GetInfo。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.FillNewWindow");
UO.FillNewWindow("Status ready");

1。顯示行 - 直接腳本

參數與執行流程:

  • 文字被傳送到客戶端文字視窗。
UO.FillNewWindow("Status ready");

2。來自變數的文字 - 腳本函數

參數與執行流程:

  • 此串由本地電流 HP 組成。
return  RunScenario();
 object? RunScenario()
{
    var status = "HP: " + Convert.ToString(UO.GetHP());
    UO.FillNewWindow(status);
    return null;
}

3。連續兩行 - 腳本類

參數與執行流程:

  • 第二個命令替換內容:剩下的是第二個。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.FillNewWindow("first");
        UO.FillNewWindow("second");
        return null;
    }
}

命令實作

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

UO.FillNewWindow(s) — UO.FillNewWindow(Any)

參數: s (Any)

結果: void / Unit.

呼叫時:

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

case "fillnewwindow": bridge.TextClear(); bridge.TextPrint(Text(0)); bridge.TextOpen(); return InjectionValue.Unit;

UO.FontColor

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

C# 簽章

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。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.FontColor");
UO.FontColor(0x0021);

1。突出顯示庫存警報 - 直接腳本

參數與執行流程:

  • 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;

2。通用顏色通知程式 - 腳本函數

參數與執行流程:

  • 完整通知接受文本和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);
}

3。恢復為已知基色 - 腳本類

參數與執行流程:

  • 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。

UO.FontColor(color) — UO.FontColor(Any)

參數: color (Any)

結果: void / Unit.

呼叫時:

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

case "fontcolor": state.FontColor = Arg(0, state.FontColor); break;

UO.HelpRequest

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

C# 簽章

void UO.HelpRequest();

請求伺服器幫助選單。

參數

沒有參數。

傳回值

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

行為

  • ExecuteClientApiCompatibility 呼叫 HelpRequest,後者透過 Invoke 發送 GameActions.RequestHelp。菜單的內容由伺服器決定。
  • 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 請求伺服器幫助選單。
UO.HelpRequest();

2。明確選項 - 腳本函數

參數與執行流程:

  • 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;

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

參數與執行流程:

  • 在範例中,UO.Wait僅指定腳本暫停;暫停的結束並不能證明伺服器已經完成了請求。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        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。

UO.HelpRequest() — UO.HelpRequest()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "helprequest": bridge.HelpRequest(); return InjectionValue.Unit;

UO.Hide

C# 簽章

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

完整 C# 範例

每個程式碼區塊都是完整的獨立 .csx。請替換範例 serial、type 與座標;參數順序及 C# 具名參數依照簽章。

1

UO.Hide(0x40001234);

2

UO.Print(UO.Hide(0x0EED, 1450, 1690, 0));

3

foreach (int serial in new[] { 0x40001234, 0x40005678 })
    UO.Hide(serial);

4

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


UO.Morph

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

C# 簽章

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 位元。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.Morph");
UO.Morph("0x0190");

1。直接呼叫-直接腳本

參數與執行流程:

  • 本地更改目前角色的graphic。
UO.Morph("0x0190");

2。明確選項 - 腳本函數

參數與執行流程:

  • Bridge.Morph沒有玩家不會改變任何東西。第一次呼叫時,它會儲存 _originalGraphic,然後將其指派給 Player.Graphic。即使 Player 遺失,運行時也會更新 ticksAnim=Timer。
return  RunScenario();
 object? RunScenario()
{
    UO.Morph(0);
    return null;
}

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

參數與執行流程:

  • 這是本地外觀,而不是伺服器改造或種族/可用技能的變化。 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。

UO.Morph(type) — UO.Morph(Integer)

參數: type (Integer/String)

結果: void / Unit.

呼叫時:

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

public void Morph(int type)

        {

            bridge.Morph(type);

            ticksAnim = Timer();

        }

UO.Morph(type) — UO.Morph(String)

參數: type (Integer/String)

結果: void / Unit.

呼叫時:

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

public void Morph(string type) => Morph(ResolveType(type));

UO.OpenIDE

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

C# 簽章

void UO.OpenIDE();
void UO.OpenIDE(object? filePath);

參數

  • filePath — 可選路徑。空白/空白-開啟編輯器而不選擇檔案;相對值從_manager.AutoloadPath解析,絕對值被保留。

傳回值

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

行為

  • Bridge.OpenIDE 準備要求的路徑,然後呼叫 Invoke YokoScriptEditorGump.Open(_world,請求)。文件中的腳本不是由 OpenIDE 指令執行。
  • 編輯器是一個圖形窗口,而不是外部應用程式Launch。讀取/顯示檔案取決於路徑和編輯器邏輯的存在。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 打開圖形編輯器C#IDE。
UO.OpenIDE();

2。明確選項 - 腳本函數

參數與執行流程:

  • Bridge.OpenIDE 準備要求的路徑,然後呼叫 Invoke YokoScriptEditorGump.Open(_world,請求)。文件中的腳本不是由 OpenIDE 指令執行。
return  RunScenario();
 object? RunScenario()
{
    UO.OpenIDE("Example.csx");
    return null;
}

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

參數與執行流程:

  • 編輯器是一個圖形窗口,而不是外部應用程式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。

UO.OpenIDE() — UO.OpenIDE()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void OpenIDE() => bridge.OpenIDE(string.Empty);

UO.OpenIDE(filePath) — UO.OpenIDE(Any)

參數: filePath (Any)

結果: void / Unit.

呼叫時:

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

public void OpenIDE(InjectionValue filePath) => bridge.OpenIDE(filePath.ToString());

UO.Print

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

C# 簽章

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

範例.csx

UO.Print("C# script started");
UO.Print($"Position: {UO.GetX()}, {UO.GetY()}");

獨立的 C# 腳本

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

簡單範例

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

指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。

UO.Print("Hello from C#");

1。簡短報告-直接腳本

參數與執行流程:

  • processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.Print("Processed item entries: " + Convert.ToString(processed), 0x0044);

2。過載警告 - 腳本函數

參數與執行流程:

  • 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 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;

3。僅報告體重變化 - 腳本類

參數與執行流程:

  • 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。

UO.Print(msg) — UO.Print(Any)

參數: msg (Any)

結果: void / Unit.

呼叫時:

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

public void Print(InjectionValue msg)

        {

            bridge.Print(msg.ToString());

        }

UO.Print(msg, color) — UO.Print(Any,Any)

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

結果: void / Unit.

呼叫時:

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

public void Print(InjectionValue msg, InjectionValue color)

        {

            bridge.Print(NumberConversions.ToInt(color), msg.ToString());

        }

UO.RemoveFigure

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

C# 簽章

dynamic UO.RemoveFigure(object? figureID);

按其刪除本機地圖圖形 ID.

參數

  • figureID - int ID,回AddFigure。這不是 serial 物品,也不是 ID 阿甘。

傳回值

int — 橋接的結果。 RemoveMapFigure: 1/0 透過刪除的圖形的存在。無論橋接的結果如何,運行時條目都會被刪除。

行為

  • 先呼叫bridge.RemoveMapFigure,然後st​​ate.MapFigures.Remove(id),再回橋接結果。未知 ID 不會建立形狀或觸發伺服器操作。
  • 地圖上的局部圖形不是世界的物件。其他形狀和伺服器幾何形狀不會改變。
  • WorldMapGump 將圖片儲存在進程的靜態字典中。一個世界/設定檔的常規腳本/聊天/巨集使用公共GetPersistentState和計數器ID;各個管理器進程不共享圖紙。 World.Clear/YokoScripts.Clear 和載入設定檔狀態不會清除或還原此字典(載入程式僅恢復UserStatics)。因此,考慮到worldNum,圖紙可以在同一過程中保存世界/配置文件的變化;新狀態可以重新強調已經存在的ID繪圖。 ClearFigures 明確清除圖面和目前狀態記錄。成功-寫入/刪除數據,而不是顯示證明。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.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)));

1。直接呼叫-直接腳本

參數與執行流程:

  • 按其刪除本機地圖圖形 ID.
UO.Print(UO.RemoveFigure(1));

2。明確選項 - 腳本函數

參數與執行流程:

  • 先呼叫bridge.RemoveMapFigure,然後st​​ate.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;

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

參數與執行流程:

  • 地圖上的局部圖形不是世界的物件。其他形狀和伺服器幾何形狀不會改變。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        var 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。

UO.RemoveFigure(figureID) — UO.RemoveFigure(Any)

參數: figureID (Any)

結果: dynamic / Any.

呼叫時:

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

case "removefigure":

                {

                    int id = Arg(0);

                    int removed = bridge.RemoveMapFigure(id);

                    state.MapFigures.Remove(id);

                    return new InjectionValue(removed);

                }

UO.ServerPrint

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

C# 簽章

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

獨立的 C# 腳本

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

簡單範例

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

指令是獨立的陳述式,沒有傳回值(void)。訊息文字直接出現在呼叫中。

UO.ServerPrint("Hello from C#");

1。簡短報告-直接腳本

參數與執行流程:

  • processed=12 — 已處理項目的演示數量。 Convert.ToString 將其轉換為字串。這個例子只報告了一個數字;它不傳送物件本身。
var processed = 12;
UO.ServerPrint("Processed item entries: " + Convert.ToString(processed));

2。過載警告 - 腳本函數

參數與執行流程:

  • 讀取角色的體重和最大值。零/未知的最大值不被視為過載。如果重量 >= 最大值,則列印一行並 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;

3。僅報告體重變化 - 腳本類

參數與執行流程:

  • 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。

UO.ServerPrint(message) — UO.ServerPrint(String)

參數: message (String)

結果: void / Unit.

呼叫時:

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

public void ServerPrint(string message) => bridge.ServerPrint(message);

UO.SetShowZ

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

C# 簽章

void UO.SetShowZ(object? stateValue);

更改本地標誌showZ運行時。

參數

  • stateValue - 0 關閉;任何非零整數包括。

傳回值

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

行為

  • 將NumberConversions.ToInt之後的0或1的值賦給showZ。該函數本身不會改變座標,也不會發送資料包。
  • 這是目前運行時的兼容性儲存。項目私有mulPath/showZ沒有消費者;該更改不會重新載入資源或更改高度顯示。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetShowZ");
UO.SetShowZ(1);

1。直接呼叫-直接腳本

參數與執行流程:

  • 更改本地標誌showZ運行時。
UO.SetShowZ(1);

2。明確選項 - 腳本函數

參數與執行流程:

  • 將NumberConversions.ToInt之後的0或1的值賦給showZ。該函數本身不會改變座標,也不會發送資料包。
return  RunScenario();
 object? RunScenario()
{
    UO.SetShowZ(0);
    return null;
}

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

參數與執行流程:

  • 這是目前運行時的兼容性儲存。項目私有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。

UO.SetShowZ(stateValue) — UO.SetShowZ(Any)

參數: stateValue (Any)

結果: void / Unit.

呼叫時:

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

public void SetShowZ(InjectionValue stateValue) => showZ = NumberConversions.ToInt(stateValue) != 0 ? 1 : 0;

UO.SetSilentMode

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

C# 簽章

void UO.SetSilentMode(object? value);

更改本地標誌SilentMode運行時。

參數

  • value - 0 關閉;任何非零整數包括。

傳回值

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

行為

  • 將 SilentMode 儲存為 0/1。 GumpLinesResult讀取標誌:使用0將非空結果GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription另外列印到文字視窗中並開啟它;使用1,此附加顯示被抑制。傳回的數組不會改變。其他Print聲音和伺服器訊息不會被抑制。
  • 在常規用戶端主機中,此狀態資料取自GetPersistentState管理器,並且對於同一世界/設定檔的腳本/聊天/巨集是通用的,且不屬於一個腳本。另一個進程或明顯獨立的InjectionRuntimeState具有不同的狀態。載入/清除設定檔可以取代它;已儲存的serial仍然會根據載入的世界進行檢查。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.SetSilentMode");
UO.SetSilentMode(1);

1。直接呼叫-直接腳本

參數與執行流程:

  • 將 SilentMode 儲存為 0/1。 GumpLinesResult讀取標誌:使用0將非空結果GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription另外列印到文字視窗中並開啟它;使用1,此附加顯示被抑制。傳回的數組不會改變。其他Print聲音和伺服器訊息不會被抑制。
UO.SetSilentMode(1);

2。明確選項 - 腳本函數

參數與執行流程:

  • 將 SilentMode 儲存為 0/1。 GumpLinesResult讀取標誌:使用0將非空結果GetGumpShortLines/GetGumpFullLines/GetGumpButtonsDescription另外列印到文字視窗中並開啟它;使用1,此附加顯示被抑制。傳回的數組不會改變。其他Print聲音和伺服器訊息不會被抑制。
return  RunScenario();
 object? RunScenario()
{
    UO.SetSilentMode(0);
    return null;
}

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

參數與執行流程:

  • 將 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。

UO.SetSilentMode(value) — UO.SetSilentMode(Any)

參數: value (Any)

結果: void / Unit.

呼叫時:

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

case "setsilentmode": state.SilentMode = Arg(0) != 0 ? 1 : 0; return InjectionValue.Unit;

UO.ShowJournal

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

C# 簽章

void UO.ShowJournal();

開啟本機客戶端日誌視窗。

參數

沒有參數。

傳回值

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

行為

  • ShowJournal 呼叫 GameActions.OpenJournal(_world)。記錄不會被清除,文字也不會傳送到伺服器。
  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 開啟本機客戶端日誌視窗。
UO.ShowJournal();

2。明確選項 - 腳本函數

參數與執行流程:

  • ShowJournal 呼叫 GameActions.OpenJournal(_world)。記錄不會被清除,文字也不會傳送到伺服器。
return  RunScenario();
 object? RunScenario()
{
    UO.Print("Journal example");
    UO.ShowJournal();
    return null;
}

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

參數與執行流程:

  • 僅修改或顯示指定的本機資料。該命令沒有伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.ShowJournal();
        UO.Print(UO.LineCount());
        return null;
    }
}

命令實作

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

UO.ShowJournal() — UO.ShowJournal()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "showjournal": bridge.ShowJournal(); break;

UO.Snap

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

C# 簽章

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。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 儲存客戶端圖形視窗的快照。
UO.Print(UO.Snap());

2。明確選項 - 腳本函數

參數與執行流程:

  • TakeScreenshot寫入ExecutablePath/Data/Client/Screenshots,清除無效的名稱字符,如果為空則自動按日期選擇名稱,如果存在現有文件則添加_2/_3。不使用任意絕對路徑。
return  RunScenario();
 object? RunScenario()
{
    UO.Print(UO.Snap("manual-example.jpg", 85));
    return null;
}

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

參數與執行流程:

  • 用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。

UO.Snap() — UO.Snap()

參數: 沒有參數。

結果: int / Integer.

呼叫時:

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

public int Snap() => bridge.Snap(null, 100, true);

UO.Snap(name) — UO.Snap(String)

參數: name (String)

結果: int / Integer.

呼叫時:

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

public int Snap(string name) => bridge.Snap(name, 100, true);

UO.Snap(name, quality) — UO.Snap(String,Integer)

參數: name (String), quality (Integer)

結果: int / Integer.

呼叫時:

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

public int Snap(string name, int quality) => bridge.Snap(name, Math.Max(1, Math.Min(100, quality)), true);

UO.Snap(file, quality, includeUI) — UO.Snap(Any,Any,Any)

參數: file (Any), quality (Any), includeUI (Any)

結果: int / Integer.

呼叫時:

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

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

values => new InjectionValue(Snap(values[0].ToString(), NumberConversions.ToInt(values[1]), ToBoolean(values[2])))

UO.TextClear

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

C# 簽章

void UO.TextClear();

清除本機文字視窗的緩衝區。

參數

沒有參數。

傳回值

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

行為

  • 清除_textWindow;如果視窗已打開,則用空列表重新顯示它。 A closed window remains closed.客戶端日誌未清除。
  • 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 清除本機文字視窗的緩衝區。
UO.TextClear();

2。明確選項 - 腳本函數

參數與執行流程:

  • 清除_textWindow;如果視窗已打開,則用空列表重新顯示它。 A closed window remains closed.客戶端日誌未清除。
return  RunScenario();
 object? RunScenario()
{
    UO.TextPrint("Old line");
    UO.TextClear();
    return null;
}

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

參數與執行流程:

  • 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.TextClose();
        UO.TextClear();
        UO.TextOpen();
        return null;
    }
}

命令實作

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

UO.TextClear() — UO.TextClear()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void TextClear() => bridge.TextClear();

UO.TextClose

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

C# 簽章

void UO.TextClose();

關閉本機文字窗口,儲存緩衝區。

參數

沒有參數。

傳回值

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

行為

  • 設定 _textWindowOpen=false 並處理現有的 YokoTextWindowGump。 _textWindow清單沒有被清除; TextOpen將再次顯示其線條。
  • 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 關閉本機文字窗口,儲存緩衝區。
UO.TextClose();

2。明確選項 - 腳本函數

參數與執行流程:

  • 設定 _textWindowOpen=false 並處理現有的 YokoTextWindowGump。 _textWindow清單沒有被清除; TextOpen將再次顯示其線條。
return  RunScenario();
 object? RunScenario()
{
    UO.TextPrint("Retained line");
    UO.TextClose();
    return null;
}

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

參數與執行流程:

  • 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.TextPrint("Retained line");
        UO.TextClose();
        UO.Wait(250);
        UO.TextOpen();
        return null;
    }
}

命令實作

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

UO.TextClose() — UO.TextClose()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void TextClose() => bridge.TextClose();

UO.TextOpen

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

C# 簽章

void UO.TextOpen();

開啟本機文字視窗。

參數

沒有參數。

傳回值

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

行為

  • 儲存 _textWindowOpen=true 並調用 YokoTextWindowGump.用當前_textWindow顯示。緩衝區沒有被清除;重新開啟會顯示累積的行數。
  • 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接呼叫-直接腳本

參數與執行流程:

  • 開啟本機文字視窗。
UO.TextOpen();

2。明確選項 - 腳本函數

參數與執行流程:

  • 儲存 _textWindowOpen=true 並調用 YokoTextWindowGump.用當前_textWindow顯示。緩衝區沒有被清除;重新開啟會顯示累積的行數。
return  RunScenario();
 object? RunScenario()
{
    UO.TextPrint("Example");
    UO.TextOpen();
    return null;
}

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

參數與執行流程:

  • 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.TextOpen();
        UO.Wait(500);
        UO.TextClose();
        return null;
    }
}

命令實作

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

UO.TextOpen() — UO.TextOpen()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

public void TextOpen() => bridge.TextOpen();

UO.TextPrint

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

C# 簽章

void UO.TextPrint(object? text);

將一行新增至本機文字視窗並將其開啟。

參數

  • text — 透過 ToString 發送文字;儲存為已傳送。

傳回值

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

行為

  • 在限制下,MaxTextWindowLines=2000 刪除舊行,然後新增文字或空白行,設定 _textWindowOpen=true 並顯示視窗。這不是日誌中的UO.Print,也不是對伺服器的講話。
  • 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.TextPrint");
UO.TextPrint("Example");

1。直接呼叫-直接腳本

參數與執行流程:

  • 將一行新增至本機文字視窗並將其開啟。
UO.TextPrint("Example");

2。明確選項 - 腳本函數

參數與執行流程:

  • 在限制下,MaxTextWindowLines=2000 刪除舊行,然後新增文字或空白行,設定 _textWindowOpen=true 並顯示視窗。這不是日誌中的UO.Print,也不是對伺服器的講話。
return  RunScenario();
 object? RunScenario()
{
    var message = "Line 1";
    UO.TextPrint(message);
    UO.TextPrint("Line 2");
    return null;
}

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

參數與執行流程:

  • 此動作是本機介面/緩衝區;沒有網路訊息或伺服器確認。
return  new ScriptScenario(UO, WaitAsync, Args, Cancellation, Checkpoint).RunScenario();
class ScriptScenario
{
    private readonly global::ClassicUO.CSharp.CSharpGameApi UO;
    private readonly Func<int, Task> WaitAsync;
    private readonly string[] Args;
    private readonly CancellationToken Cancellation;
    private readonly Action Checkpoint;
    public ScriptScenario(global::ClassicUO.CSharp.CSharpGameApi api, Func<int, Task> wait, string[] args, CancellationToken cancellation, Action checkpoint)
    {
        UO = api;
        WaitAsync = wait;
        Args = args;
        Cancellation = cancellation;
        Checkpoint = checkpoint;
    }

     public object? RunScenario()
    {
        UO.TextClear();
        UO.TextPrint("Fresh report");
        UO.TextClose();
        return null;
    }
}

命令實作

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

UO.TextPrint(text) — UO.TextPrint(String)

參數: text (String)

結果: void / Unit.

呼叫時:

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

public void TextPrint(string text) => bridge.TextPrint(text);

UO.UpdateFigure

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

C# 簽章

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 明確清除圖面和目前狀態記錄。成功-寫入/刪除數據,而不是顯示證明。

獨立的 C# 腳本

每個範例都可以儲存為單獨的檔案.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)));

1。直接呼叫-直接腳本

參數與執行流程:

  • 取代現有本地地圖圖形的描述。
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));

2。明確選項 - 腳本函數

參數與執行流程:

  • 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;

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

參數與執行流程:

  • 如果橋接器發生故障,則不會取代現有的運行時條目。成功後,將 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。

UO.UpdateFigure(figureID, figure) — UO.UpdateFigure(Any,Any)

參數: figureID (Any), figure (Any)

結果: dynamic / Any.

呼叫時:

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

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;

                }
⚠️ **GitHub.com Fallback** ⚠️