Skip to content

JA UO Topic journal Part 2

Codex edited this page Oct 12, 2026 · 1 revision

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

Journal — 2

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

リファレンスの各部

1 · 2

コマンドの完全なリファレンス


UO.WaitJournalLine

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

C# のシグネチャ

dynamic UO.WaitJournalLine(object? startTime, object? str, object? maxWaitTimeMS);

ローカル ログ内の適切なメッセージを待ちます。

引数

  • startTime - 必須の開始ラベル: int Now() ミリ秒単位、0 - 実行の開始。 LineTime からの double OLE の日付 (現代の日付 20000…100000 日) も受け入れられます。 20000…100000 全体は常にミリ秒であり、日付ではありません。エントリーの年齢は伝えないでください。
  • str — 検索された部分文字列または | によるいくつかの代替 (例: success|failed)。各選択肢の端にあるスペースは削除され、空の選択肢はスキップされます。これは正規表現ではなくプレーンテキストです。空ではないテンプレートを使用してください。大文字と小文字を区別しない検索。
  • maxWaitTimeMS — ミリ秒単位の必須の int タイムアウト。正の値は待機を制限します。0 は制限なしで待機することを意味します。負の値は0に制限されます。スクリプトを停止すると待機が中断されます。

戻り値

テキストが見つかった場合は bool - true、一致せずに正のタイムアウトが発生した場合は false。これは指標や数量ではありません。スクリプト内ではブール値を1/0として表示することもできます。

コマンドの結果は数値フラグです。1 は条件が満たされたことを意味し、0 は条件が満たされていないことを意味します。 var result = command(...) の後、(result != 0) または (result == 0) を確認します。 1 回の呼び出しの結果を保存します。呼び出しを繰り返すと、アクションを再度実行したり、すでに変更された状態を読み取ることができます。

動作

  • Search and Journal/GetJournal/LastJournalMessage は、現在のスクリプト内の 1 つのエントリのテキストとフィールドを保存します。新しいメッセージはこれらのフィールドを置き換えません。レコードが制限付きジャーナルから削除された場合、保持されたフィールドは残りますが、LineIndex/GetFoundedTextIndex は -1 を返します。次の検索または読み取りでは、別のエントリが選択されます。検索の失敗、インデックスの無効、およびこのスクリプトによるクリアにより、選択がリセットされます。
  • 初期境界は呼び出されたときに固定され、ポーリングはほぼ 25 ミリ秒ごとに行われます。期待自体はスキルやアイテムをトリガーしません。待機後のLineCountは最後の検索を指します。
  • システム文字列のみをフィルタリングするには、WaitJournalLineSystem を使用します。

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

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

簡単な例

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

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.WaitJournalLine(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。ラベルの保存後に待機 - 直接スクリプト

引数と実行の流れ:

  • 開始済み — 待機するまでの制限。 3000 — ミリ秒単位の最大待機時間。パターンには 2 つの結果が含まれています。
  • false — この期間内にテキストが見つかりませんでした。サーバーは別の表現を使用した可能性があります。
var started = Now();
var found = UO.WaitJournalLine(started, "success|failed", 3000);
if (Truth(found))
{
    UO.Print(UO.GetFoundedText());
}
else
{
    UO.Print("Timeout");
}

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

2。実行開始からのショートチェック - スクリプト機能

引数と実行の流れ:

  • 0 - ランタイムの開始。タイムアウトは無効になりません。 100 - タイムアウト。
  • 見つかった行は、呼び出しの前にすでにログに存在している可能性があります。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitJournalLine(0, "notice", 100)))
    {
        var author = UO.LineName();
        UO.Print(author);
    }

    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。選択した行のカレンダー境界 - スクリプト クラス

引数と実行の流れ:

  • スタンプは、Convert.ToInt32/Convert.ToString を使用せずに double LineTime を保存します。これは、Now() ではなく、カレンダーの日付です。 1500 — 待機するミリ秒。
  • 境界線がオンになります。応答が含まれている場合は、選択した文字列自体が適切である可能性があります。
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 text = UO.Journal(0);
        if (Truth(UO.LineIndex() >= 0))
        {
            var stamp = UO.LineTime();
            var found = UO.WaitJournalLine(stamp, "response", 1500);
            UO.Print(Convert.ToString(found));
        }

        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.WaitJournalLine(startTime, str, maxWaitTimeMS) — UO.WaitJournalLine(Any,Any,Any)

引数: startTime (Any), str (Any), maxWaitTimeMS (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "waitjournalline": return WaitJournalLine(arguments, false);

UO.WaitJournalLineSystem

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

C# のシグネチャ

dynamic UO.WaitJournalLineSystem(object? startTime, object? str, object? maxWaitTimeMS);

作成者 System の名前を含む適切なメッセージを待ちます。

引数

  • startTime - 必須の開始ラベル: int Now() ミリ秒単位、0 - 実行の開始。 LineTime からの double OLE の日付 (現代の日付 20000…100000 日) も受け入れられます。 20000…100000 全体は常にミリ秒であり、日付ではありません。エントリーの年齢は伝えないでください。
  • str — 検索された部分文字列または | によるいくつかの代替 (例: success|failed)。各選択肢の端にあるスペースは削除され、空の選択肢はスキップされます。これは正規表現ではなくプレーンテキストです。空ではないテンプレートを使用してください。大文字と小文字を区別しない検索。
  • maxWaitTimeMS — ミリ秒単位の必須の int タイムアウト。正の値は待機を制限します。0 は制限なしで待機することを意味します。負の値は0に制限されます。スクリプトを停止すると待機が中断されます。

戻り値

テキストが見つかった場合は bool - true、一致せずに正のタイムアウトが発生した場合は false。これは指標や数量ではありません。スクリプト内ではブール値を1/0として表示することもできます。

コマンドの結果は数値フラグです。1 は条件が満たされたことを意味し、0 は条件が満たされていないことを意味します。 var result = command(...) の後、(result != 0) または (result == 0) を確認します。 1 回の呼び出しの結果を保存します。呼び出しを繰り返すと、アクションを再度実行したり、すでに変更された状態を読み取ることができます。

動作

  • Search and Journal/GetJournal/LastJournalMessage は、現在のスクリプト内の 1 つのエントリのテキストとフィールドを保存します。新しいメッセージはこれらのフィールドを置き換えません。レコードが制限付きジャーナルから削除された場合、保持されたフィールドは残りますが、LineIndex/GetFoundedTextIndex は -1 を返します。次の検索または読み取りでは、別のエントリが選択されます。検索の失敗、インデックスの無効、およびこのスクリプトによるクリアにより、選択がリセットされます。
  • 初期境界は呼び出されたときに固定され、ポーリングはほぼ 25 ミリ秒ごとに行われます。期待自体はスキルやアイテムをトリガーしません。待機後のLineCountは最後の検索を指します。
  • この翻案では、システムは作成者の名前によって識別されます (大文字と小文字は区別されません)。チームは総合ジャーナル ClassicUO と協力しています。

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

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

簡単な例

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

1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。

object? result = UO.WaitJournalLineSystem(Now(), "success|failed", 3000);
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));

1。ラベルの保存後に待機 - 直接スクリプト

引数と実行の流れ:

  • 開始済み — 待機するまでの制限。 3000 — ミリ秒単位の最大待機時間。パターンには 2 つの結果が含まれています。
  • false — この期間内にテキストが見つかりませんでした。サーバーは別の表現を使用した可能性があります。
var started = Now();
var found = UO.WaitJournalLineSystem(started, "success|failed", 3000);
if (Truth(found))
{
    UO.Print(UO.GetFoundedText());
}
else
{
    UO.Print("Timeout");
}

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

2。実行開始からのショートチェック - スクリプト機能

引数と実行の流れ:

  • 0 - ランタイムの開始。タイムアウトは無効になりません。 100 - タイムアウト。
  • 見つかった行は、呼び出しの前にすでにログに存在している可能性があります。
return  RunScenario();
 object? RunScenario()
{
    if (Truth(UO.WaitJournalLineSystem(0, "notice", 100)))
    {
        var author = UO.LineName();
        UO.Print(author);
    }

    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。選択した行のカレンダー境界 - スクリプト クラス

引数と実行の流れ:

  • スタンプは、Convert.ToInt32/Convert.ToString を使用せずに double LineTime を保存します。これは、Now() ではなく、カレンダーの日付です。 1500 — 待機するミリ秒。
  • 境界線がオンになります。応答が含まれている場合は、選択した文字列自体が適切である可能性があります。
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 text = UO.Journal(0);
        if (Truth(UO.LineIndex() >= 0))
        {
            var stamp = UO.LineTime();
            var found = UO.WaitJournalLineSystem(stamp, "response", 1500);
            UO.Print(Convert.ToString(found));
        }

        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.WaitJournalLineSystem(startTime, str, maxWaitTimeMS) — UO.WaitJournalLineSystem(Any,Any,Any)

引数: startTime (Any), str (Any), maxWaitTimeMS (Any)

結果: dynamic / Any.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

case "waitjournallinesystem": return WaitJournalLine(arguments, true);

UO.WaitingForJournalText

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

C# のシグネチャ

void UO.WaitingForJournalText(object? startTime, object? maxDelay, object? text);
void UO.WaitingForJournalText(object? startTime, object? maxDelay, object? text, object? equals);
void UO.WaitingForJournalText(object? startTime, object? maxDelay, object? text, object? equals, object? ignoreCase);
void UO.WaitingForJournalText(object? startTime, object? maxDelay, object? text, object? equals, object? ignoreCase, object? skillNameOrObjectId);

追加の比較モードとオプションのスキル/アイテムの起動を含むテキストが期待されます。

引数

  • startTime — 必須ラベル Now()、ランタイムの開始からの int ミリ秒。 startTime 以上のラベルが付いた行がチェックされます。 0 には、ラベルがゼロのエントリが含まれます。
  • maxDelay — ミリ秒単位の必須の最大待機時間。 0 と負の値は、無限待機ではなく 1 回の即時パスを意味します。
  • text — 検索された部分文字列または | によるいくつかの代替 (例: success|failed)。各選択肢の端にあるスペースは削除され、空の選択肢はスキップされます。これは正規表現ではなくプレーンテキストです。空ではないテンプレートを使用してください。
  • equals - オプションの int: 0 (デフォルト) - 部分文字列。ゼロ以外の値 - すべてのテキストは 1 つの選択肢と一致する必要があります。
  • ignoreCase — オプションの int: 0 (デフォルト) — 大文字と小文字を区別します。ゼロ以外 - 無視します。
  • skillNameOrObjectId - 名前によるオプションのスキル、serial/16 進文字列または解決可能なオブジェクトのエイリアス。スキルの名前が最初に認識され、それ以外の場合はオブジェクトが使用されます。 0/空行はアクションを無効にします。スキル/アイテムは検索前に一度発動します。

戻り値

void - 戻り値なし。呼び出しを変数に割り当てません。完了すると、GetFoundedTextIndex >= 0 は、選択したエントリがまだ使用可能であることを意味します。 -1 - 見つからない/レコードが削除されました。 GetFoundedTextID は、選択が成功した場合にのみ、一致する代替案を表示します。

動作

  • Search and Journal/GetJournal/LastJournalMessage は、現在のスクリプト内の 1 つのエントリのテキストとフィールドを保存します。新しいメッセージはこれらのフィールドを置き換えません。レコードが制限付きジャーナルから削除された場合、保持されたフィールドは残りますが、LineIndex/GetFoundedTextIndex は -1 を返します。次の検索または読み取りでは、別のエントリが選択されます。検索の失敗、インデックスの無効、およびこのスクリプトによるクリアにより、選択がリセットされます。
  • 最大 25 ミリ秒まで一時停止してポーリングします。スクリプトを停止すると中断されます。空の代替リストではテキストが見つかりません。 bool の結果には、独自のパラメーターとゼロ タイムアウトの意味を持つ WaitJournalLine を使用します。

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

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

簡単な例

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

コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。

UO.Print("Calling UO.WaitingForJournalText");
UO.WaitingForJournalText(Now(), 2000, "notice");

1。 1 つの部分文字列が必要です - 直接スクリプト

引数と実行の流れ:

  • startTime — 待機する前にマークを付けます。 maxDelay=2000 ミリ秒;大文字と小文字を区別する部分文字列の比較。
  • このコマンドは true/false を返しません。選択されたエントリがチェックされます。
var started = Now();
UO.WaitingForJournalText(started, 2000, "notice");
if (Truth(UO.GetFoundedTextIndex() >= 0))
{
    UO.Print(UO.GetFoundedText());
}

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

2。大文字と小文字を区別しない完全一致 - スクリプト関数

引数と実行の流れ:

  • startTime=0; maxDelay=0 - 1 パス。等しい=1 — すべてのテキスト、ignoreCase=1 — 大文字と小文字は区別されません。
  • 代替番号 0 または 1 が表示されます。追加の単語を含む長い行は機能しません。
return  RunScenario();
 object? RunScenario()
{
    UO.WaitingForJournalText(0, 0, "success|failed", 1, 1);
    if (Truth(UO.GetFoundedTextIndex() >= 0))
    {
        UO.Print(Convert.ToString(UO.GetFoundedTextID()));
    }

    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。スキルを実行して結果を期待する - スクリプトクラス

引数と実行の流れ:

  • Hiding の 6 番目の引数はスキルを 1 回実行します。等しい=0 — 部分文字列、ignoreCase=1 — 大文字と小文字は区別されません。
  • 「hidden/failed」という単語は例です。サーバーのテキストに置き換えてください。スキルの代わりに、serial または lastobject を指定してアイテムを使用することもできます。
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 started = Now();
        UO.WaitingForJournalText(started, 3000, "hidden|failed", 0, 1, "Hiding");
        if (Truth(UO.GetFoundedTextIndex() >= 0))
        {
            UO.Print(UO.GetFoundedText());
        }

        return null;
    }

    bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;
    private int Now() => global::ClassicUO.CSharp.CSharpScriptContext.Current.Now();
}

コマンドの実装

C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。

UO.WaitingForJournalText(startTime, maxDelay, text) — UO.WaitingForJournalText(Integer,Integer,String)

引数: startTime (Integer), maxDelay (Integer), text (String)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

public void WaitingForJournalText(int startTime, int maxDelay, string text)

            => WaitingForJournalText(startTime, maxDelay, text, 0, 0, InjectionValue.Zero);

UO.WaitingForJournalText(startTime, maxDelay, text, equals) — UO.WaitingForJournalText(Integer,Integer,String,Integer)

引数: startTime (Integer), maxDelay (Integer), text (String), equals (Integer)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

public void WaitingForJournalText(int startTime, int maxDelay, string text, int equals)

            => WaitingForJournalText(startTime, maxDelay, text, equals, 0, InjectionValue.Zero);

UO.WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase) — UO.WaitingForJournalText(Integer,Integer,String,Integer,Integer)

引数: startTime (Integer), maxDelay (Integer), text (String), equals (Integer), ignoreCase (Integer)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

public void WaitingForJournalText(int startTime, int maxDelay, string text, int equals, int ignoreCase)

            => WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase, InjectionValue.Zero);

UO.WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase, skillNameOrObjectId) — UO.WaitingForJournalText(Integer,Integer,String,Integer,Integer,Any)

引数: startTime (Integer), maxDelay (Integer), text (String), equals (Integer), ignoreCase (Integer), skillNameOrObjectId (Any)

結果: void / Unit.

呼び出し時:

内部実装のコードです。単独のスクリプトとして実行できません。

public void WaitingForJournalText(int startTime, int maxDelay, string text, int equals, int ignoreCase, InjectionValue skillNameOrObjectId)

        {

            int timeout = Math.Max(0, maxDelay);

            bool exactMatch = equals != 0;

            bool caseInsensitive = ignoreCase != 0;

            string pattern = text ?? string.Empty;

            DateTime deadline = timeSource.Now.AddMilliseconds(timeout);

            SelectJournalEntry(null);



            TriggerWaitAction(skillNameOrObjectId);



            do

            {

                int journalCount = Math.Max(0, bridge.JournalEntryCount());

                for (int index = 0; index < journalCount; index++)

                {

                    JournalEntrySnapshot entry = ReadJournalSnapshot(index);

                    int lineTime = entry == null ? -1 : JournalEntryTime(entry.Timestamp);

                    if (lineTime < 0 || lineTime < startTime)

                        continue;



                    string journalText = entry.Text;

                    int matchId = FindJournalPatternId(journalText, pattern, exactMatch, caseInsensitive);

                    if (matchId >= 0)

                    {

                        SelectJournalEntry(entry);

                        foundedTextId = matchId;

                        return;

                    }

                }

                if (timeSource.Now >= deadline)

                    break;

                bridge.Wait(Math.Min(25, Math.Max(1, timeout)));

            }

            while (true);

        }

Clone this wiki locally