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

最後に開いた本の 1 ページのテキストを読みます。

引数

  • page — serial 本ではなく、1 のページ番号。上限は、サーバーによって報告されるページ数です。

戻り値

string — 末尾に空行を含まない、改行文字で区切られたページ行。ワークブックが開いていない場合、ページがまだ受信されていない場合、または数値が正しくない場合にも、空の文字列が返されます。これは、ページが存在すること、またはページが書き込み可能であることを示すものではありません。

動作

  • まず、ゲームアクションを使用して目的の本を開きます。コマンドは最後に開いたブックを使用します: ID ブックは受け入れられません。複数の本をお持ちの場合は、正しいものを選択してください。 Get は、すでにロードされているページを読み取りますが、それ自体は不足しているページを要求しません。
  • マネージャーでは、本の内容がセッションに保存されており、グラフィックなしで利用できます。ゲーム ウィンドウを閉じるとブックとドラフトが保存され、再度開くと復元されます。ワークブック自体を閉じると、開いているワークブックからそのワークブックが削除されます。接続を切断すると、サーバーの予約がリセットされます。
  • 変更は、編集中の書籍にのみ適用できます。無効なページや長すぎるテキストは拒否されます。 BookSetText は最初の送信前にすべてのページをチェックします。遅延ページの誤りによって部分的な書き込みが行われることはありません。

単独で実行できる C# スクリプト

各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。

簡単な例

このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。

1 回の呼び出し結果をジャーナルに表示します。数値は 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 — 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);

開いている編集可能なブックの 1 ページのテキストを置き換えます。

引数

  • page — serial 本ではなく、1 のページ番号。上限は、サーバーによって報告されるページ数です。
  • text — テキスト。行は Chr(10) ​​で区切られています。 Chr(13)が削除されました。 1 ページあたり最大 10 行、1 行あたり最大 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)が削除されました。 1 ページあたり最大 10 行、1 行あたり最大 53 文字。ヌル文字は禁止されています。

戻り値

void - 値なし。これは書き込みリクエストであり、true/false やサーバーの確認ではありません。サーバーにより編集が禁止されている場合があります。

動作

  • まず、ゲームアクションを使用して目的の本を開きます。コマンドは最後に開いたブックを使用します: ID ブックは受け入れられません。複数の本をお持ちの場合は、正しいものを選択してください。 Get は、すでにロードされているページを読み取りますが、それ自体は不足しているページを要求しません。
  • マネージャーでは、本の内容がセッションに保存されており、グラフィックなしで利用できます。ゲーム ウィンドウを閉じるとブックとドラフトが保存され、再度開くと復元されます。ワークブック自体を閉じると、開いているワークブックからそのワークブックが削除されます。接続を切断すると、サーバーの予約がリセットされます。
  • 変更は、編集中の書籍にのみ適用できます。無効なページや長すぎるテキストは拒否されます。 BookSetText は最初の送信前にすべてのページをチェックします。遅延ページの誤りによって部分的な書き込みが行われることはありません。
  • BookSetText: Chr(12) は明示的にページを分割します。 Chr(12) が存在しない場合、10 行ごとに 1 ページが形成されます。残りの古いページはクリアされません。完全に置き換えるには、まず 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** ⚠️