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

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

圖書

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

閱讀和編輯遊戲書籍:標題、頁面和文字。查看卡片的有效頁碼和記錄效果。

部分

主題 命令與解釋
Read Page UO.BookGetPageText
Set Page UO.BookSetPageText
Set Header UO.BookSetHeader
Set Text UO.BookSetText
Clear Text UO.BookClearText

所有主題命令

書頁

UO.BookGetPageText · UO.BookSetPageText · UO.BookSetHeader · UO.BookSetText · UO.BookClearText

關於該主題的範例

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

UO.BookGetPageText

參數、結果及所有場景

var text = UO.BookGetPageText(1);
if (Truth(text != ""))
{
    UO.Print(text);
}

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

UO.BookSetPageText

參數、結果及所有場景

UO.BookSetPageText(2, "Camp A");

完整指令說明


UO.BookClearText

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

C# 簽章

void UO.BookClearText();

從打開的可編輯書籍的所有頁面中刪除文本,保留標題和作者。

參數

沒有參數。

傳回值

void - 無值。這是一個寫入請求,而不是true/false或伺服器確認。伺服器可能會禁止編輯。

行為

  • 首先,使用遊戲動作開啟所需的書籍。指令使用最後打開的書:不接受ID書。如果您有多本書,請確保選擇正確的一本。 Get 會讀取已載入的頁面,本身並不會要求遺失的頁面。
  • 在管理器中,書籍的內容儲存在會話中,並且無需圖形即可使用。關閉遊戲視窗會儲存書籍和草稿,再次開啟會恢復它們。關閉工作簿本身會將其從開啟的工作簿中刪除;斷開連線會重置伺服器書籍。
  • 變更僅適用於您正在編輯的圖書。無效頁面或太長的文字將被拒絕。 BookSetText 在首次提交之前檢查所有頁面:錯誤的延遲頁面不會導致部分寫入。
  • BookClearText 為每個頁面發送空白文字。這破壞了本書之前的文字;在您編輯的副本上使用。標題和作者保持不變。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接應用-直接腳本

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
UO.BookClearText();

2。練習場景-場景功能

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
return  RunScenario();
 object? RunScenario()
{
    UO.BookClearText();
    UO.BookSetHeader("New expedition", "Alice");
    UO.BookSetPageText(1, "Bring bandages");
    return null;
}

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

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和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()
    {
        ResetNotebook("Supply list", "Alice", "Bandages" + Chr(10) + "Food");
        return null;
    }

    void ResetNotebook(dynamic title, dynamic author, dynamic firstPage)
    {
        UO.BookClearText();
        UO.BookSetHeader(title, author);
        UO.BookSetPageText(1, firstPage);
    }

    string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();
}

命令實作

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

UO.BookClearText() — UO.BookClearText()

參數: 沒有參數。

結果: void / Unit.

呼叫時:

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

case "bookcleartext":

                    state.BookPages.Clear();

                    bridge.BookClearText();

                    return InjectionValue.Unit;

UO.BookGetPageText

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

C# 簽章

dynamic UO.BookGetPageText(object? page);

閱讀最後打開的一本書的一頁文字。

參數

  • page — 1 的頁碼,而非 serial 書。上限是伺服器報告的頁數。

傳回值

string — 由換行符號分隔的頁行,最後沒有空白行。如果工作簿未開啟、尚未接收頁面或編號不正確,也會傳回空字串。這並不表示該頁面存在或可寫入。

行為

  • 首先,使用遊戲動作開啟所需的書籍。指令使用最後打開的書:不接受ID書。如果您有多本書,請確保選擇正確的一本。 Get 會讀取已載入的頁面,本身並不會要求遺失的頁面。
  • 在管理器中,書籍的內容儲存在會話中,並且無需圖形即可使用。關閉遊戲視窗會儲存書籍和草稿,再次開啟會恢復它們。關閉工作簿本身會將其從開啟的工作簿中刪除;斷開連線會重置伺服器書籍。
  • 變更僅適用於您正在編輯的圖書。無效頁面或太長的文字將被拒絕。 BookSetText 在首次提交之前檢查所有頁面:錯誤的延遲頁面不會導致部分寫入。

獨立的 C# 腳本

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

簡單範例

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

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

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

1。直接應用-直接腳本

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
var text = UO.BookGetPageText(1);
if (Truth(text != ""))
{
    UO.Print(text);
}

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

2。練習場景-場景功能

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
return  RunScenario();
 object? RunScenario()
{
    var firstPage = UO.BookGetPageText(1);
    if (Truth(firstPage != ""))
    {
        UO.BookSetPageText(3, firstPage);
    }

    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和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()
    {
        ReplaceCampNote(2);
        return null;
    }

    void ReplaceCampNote(dynamic page)
    {
        var text = UO.BookGetPageText(page);
        if (Truth(text == "Camp A"))
        {
            UO.BookSetPageText(page, "Camp B");
        }
    }

    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.BookGetPageText(page) — UO.BookGetPageText(Any)

參數: page (Any)

結果: dynamic / Any.

呼叫時:

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

case "bookgetpagetext":

                {

                    int pageNumber = Math.Max(1, Arg(0));

                    string liveText = bridge.BookGetPageText(pageNumber);

                    if (!string.IsNullOrEmpty(liveText))

                        return new InjectionValue(liveText);

                    int page = pageNumber - 1;

                    return new InjectionValue(page < state.BookPages.Count ? state.BookPages[page] : string.Empty);

                }

UO.BookSetHeader

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

C# 簽章

void UO.BookSetHeader(object? title, object? author);

指定開啟的可編輯書籍的標題和作者。

參數

  • title——標題;圖形編輯器和命令保存前 47 字元。
  • author——作者;前 29 字符被保存。

傳回值

void - 無值。這是一個寫入請求,而不是true/false或伺服器確認。伺服器可能會禁止編輯。

行為

  • 首先,使用遊戲動作開啟所需的書籍。指令使用最後打開的書:不接受ID書。如果您有多本書,請確保選擇正確的一本。 Get 會讀取已載入的頁面,本身並不會要求遺失的頁面。
  • 在管理器中,書籍的內容儲存在會話中,並且無需圖形即可使用。關閉遊戲視窗會儲存書籍和草稿,再次開啟會恢復它們。關閉工作簿本身會將其從開啟的工作簿中刪除;斷開連線會重置伺服器書籍。
  • 變更僅適用於您正在編輯的圖書。無效頁面或太長的文字將被拒絕。 BookSetText 在首次提交之前檢查所有頁面:錯誤的延遲頁面不會導致部分寫入。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.BookSetHeader");
UO.BookSetHeader("Mining route", "Alice");

1。直接應用-直接腳本

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
UO.BookSetHeader("Mining route", "Alice");

2。練習場景-場景功能

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
return  RunScenario();
 object? RunScenario()
{
    var route = "Northern mine";
    var author = "Alice";
    UO.BookSetHeader("Route: " + route, author);
    return null;
}

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

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
  • 輔助功能完整給出。 true 表示只進行本機檢查和呼叫;它不會傳回伺服器對錄製的確認。
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 requested = SetNotebookHeader("Supply list", "Alice");
        return null;
    }

    dynamic SetNotebookHeader(dynamic title, dynamic author)
    {
        if (Truth(Len(title) > 47) || Truth(Len(author) > 29))
        {
            return false;
        }

        UO.BookSetHeader(title, author);
        return true;
    }

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

命令實作

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

UO.BookSetHeader(title, author) — UO.BookSetHeader(Any,Any)

參數: title (Any), author (Any)

結果: void / Unit.

呼叫時:

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

case "booksetheader":

                    state.BookTitle = Text(0);

                    state.BookAuthor = Text(1);

                    bridge.BookSetHeader(state.BookTitle, state.BookAuthor);

                    return InjectionValue.Unit;

UO.BookSetPageText

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

C# 簽章

void UO.BookSetPageText(object? page, object? text);

替換已開啟的可編輯書籍的一頁文字。

參數

  • page — 1 的頁碼,而非 serial 書。上限是伺服器報告的頁數。
  • text — 文本。行由 Chr(10) ​​分隔; Chr(13) 被刪除。每頁最多 10 行,每行最多 53 個字元。禁止使用空字符。

傳回值

void - 無值。這是一個寫入請求,而不是true/false或伺服器確認。伺服器可能會禁止編輯。

行為

  • 首先,使用遊戲動作開啟所需的書籍。指令使用最後打開的書:不接受ID書。如果您有多本書,請確保選擇正確的一本。 Get 會讀取已載入的頁面,本身並不會要求遺失的頁面。
  • 在管理器中,書籍的內容儲存在會話中,並且無需圖形即可使用。關閉遊戲視窗會儲存書籍和草稿,再次開啟會恢復它們。關閉工作簿本身會將其從開啟的工作簿中刪除;斷開連線會重置伺服器書籍。
  • 變更僅適用於您正在編輯的圖書。無效頁面或太長的文字將被拒絕。 BookSetText 在首次提交之前檢查所有頁面:錯誤的延遲頁面不會導致部分寫入。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.BookSetPageText");
UO.BookSetPageText(2, "Camp A");

1。直接應用-直接腳本

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
UO.BookSetPageText(2, "Camp A");

2。練習場景-場景功能

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
return  RunScenario();
 object? RunScenario()
{
    UO.BookSetPageText(1, "Supplies" + Chr(10) + "Bandages" + Chr(10) + "Food");
    return null;
}

string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();

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

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
  • 輔助功能完整給出。 true 表示只進行本機檢查和呼叫;它不會傳回伺服器對錄製的確認。
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 requested = AppendNote(1, "Return before night");
        return null;
    }

    dynamic AppendNote(dynamic page, dynamic line)
    {
        if (Truth(Len(line) > 53))
        {
            return false;
        }

        var previous = UO.BookGetPageText(page);
        if (Truth(previous == ""))
        {
            UO.BookSetPageText(page, line);
            return true;
        }

        var lineCount = 1;
        for (int index = (int)(1); index <= Len(previous); index += (int)(1))
        {
            if (Truth(Mid(previous, index, 1) == Chr(10)))
            {
                lineCount = lineCount + 1;
            }
        }

        if (Truth(lineCount >= 10))
        {
            return false;
        }

        UO.BookSetPageText(page, previous + Chr(10) + line);
        return true;
    }

    string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();
    int Len(object? value) => Convert.ToString(value)?.Length ?? 0;
    string Mid(object? value, int start, int length = int.MaxValue)
    {
        string text = Convert.ToString(value) ?? "";
        int offset = Math.Clamp(start - 1, 0, text.Length);
        return text.Substring(offset, Math.Min(Math.Max(0, length), text.Length - offset));
    }

    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.BookSetPageText(page, text) — UO.BookSetPageText(Any,Any)

參數: page (Any), text (Any)

結果: void / Unit.

呼叫時:

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

case "booksetpagetext":

                {

                    int page = Math.Max(0, Arg(0) - 1);

                    while (state.BookPages.Count <= page) state.BookPages.Add(string.Empty);

                    state.BookPages[page] = Text(1);

                    bridge.BookSetPageText(page + 1, state.BookPages[page]);

                    return InjectionValue.Unit;

                }

UO.BookSetText

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

C# 簽章

void UO.BookSetText(object? text);

從打開的可編輯書籍的第一頁寫入文字。

參數

  • text — 文本。行由 Chr(10) ​​分隔; Chr(13) 被刪除。每頁最多 10 行,每行最多 53 個字元。禁止使用空字符。

傳回值

void - 無值。這是一個寫入請求,而不是true/false或伺服器確認。伺服器可能會禁止編輯。

行為

  • 首先,使用遊戲動作開啟所需的書籍。指令使用最後打開的書:不接受ID書。如果您有多本書,請確保選擇正確的一本。 Get 會讀取已載入的頁面,本身並不會要求遺失的頁面。
  • 在管理器中,書籍的內容儲存在會話中,並且無需圖形即可使用。關閉遊戲視窗會儲存書籍和草稿,再次開啟會恢復它們。關閉工作簿本身會將其從開啟的工作簿中刪除;斷開連線會重置伺服器書籍。
  • 變更僅適用於您正在編輯的圖書。無效頁面或太長的文字將被拒絕。 BookSetText 在首次提交之前檢查所有頁面:錯誤的延遲頁面不會導致部分寫入。
  • BookSetText:Chr(12) 明確分隔頁面。如果 Chr(12) 不存在,則每 10 行形成一個頁面。剩餘的舊頁面不會被清除:要完全替換它們,首先單獨呼叫BookClearText。空白文字僅取代第一頁。

獨立的 C# 腳本

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

簡單範例

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

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

UO.Print("Calling UO.BookSetText");
UO.BookSetText("Camp A\nReturn home");

1。直接應用-直接腳本

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
UO.BookSetText("Mining route" + Chr(10) + "Start at camp");

string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();

2。練習場景-場景功能

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和3是頁碼;確保它們存在。文本/名称用于演示目的。
return  RunScenario();
 object? RunScenario()
{
    UO.BookSetText("Camp A" + Chr(12) + "Camp B" + Chr(12) + "Return home");
    return null;
}

string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();

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

參數與執行流程:

  • 所有範例都假設所需的書籍已打開,所需的頁面已收到,並且正在編輯該書籍以進行記錄。數字1、2和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()
    {
        WriteRoute("Northern mine", "Bring bandages");
        return null;
    }

    void WriteRoute(dynamic destination, dynamic supplies)
    {
        var firstPage = "Destination" + Chr(10) + destination;
        var secondPage = "Supplies" + Chr(10) + supplies;
        UO.BookSetText(firstPage + Chr(12) + secondPage);
    }

    string Chr(object? value) => ((char)Convert.ToInt32(value)).ToString();
}

命令實作

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

UO.BookSetText(text) — UO.BookSetText(Any)

參數: text (Any)

結果: void / Unit.

呼叫時:

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

case "booksettext":

                {

                    string bookText = Text(0) ?? string.Empty;

                    state.BookPages.Clear();

                    state.BookPages.AddRange(bookText.Split(new[] { '\f' }, StringSplitOptions.None));

                    bridge.BookSetText(bookText);

                    return InjectionValue.Unit;

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