Repository navigation
JA UO Topic journal Part 2
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 例 · Languages
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 を使用します。
各サンプルは個別のファイル .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));引数と実行の流れ:
- 開始済み — 待機するまでの制限。 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;引数と実行の流れ:
- 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;引数と実行の流れ:
- スタンプは、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 を使います。
引数: startTime (Any), str (Any), maxWaitTimeMS (Any)
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitJournalLine:WaitJournalLine(arguments, false).
内部実装のコードです。単独のスクリプトとして実行できません。
case "waitjournalline": return WaitJournalLine(arguments, false);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 と協力しています。
各サンプルは個別のファイル .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));引数と実行の流れ:
- 開始済み — 待機するまでの制限。 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;引数と実行の流れ:
- 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;引数と実行の流れ:
- スタンプは、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 を使います。
引数: startTime (Any), str (Any), maxWaitTimeMS (Any)
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.WaitJournalLine:WaitJournalLine(arguments, true).
内部実装のコードです。単独のスクリプトとして実行できません。
case "waitjournallinesystem": return WaitJournalLine(arguments, true);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
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 を使用します。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.WaitingForJournalText");
UO.WaitingForJournalText(Now(), 2000, "notice");引数と実行の流れ:
- 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;引数と実行の流れ:
- 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;引数と実行の流れ:
- 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.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, 0, 0, InjectionValue.Zero).
内部実装のコードです。単独のスクリプトとして実行できません。
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.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, equals, 0, InjectionValue.Zero).
内部実装のコードです。単独のスクリプトとして実行できません。
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.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText:WaitingForJournalText(startTime, maxDelay, text, equals, ignoreCase, InjectionValue.Zero).
内部実装のコードです。単独のスクリプトとして実行できません。
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.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForJournalText. -
InjectionScript.Runtime.InjectionApiUO.SelectJournalEntry:SelectJournalEntry(null). -
InjectionScript.Runtime.InjectionApiUO.TriggerWaitAction:TriggerWaitAction(skillNameOrObjectId). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.JournalEntryCount:bridge.JournalEntryCount(). -
InjectionScript.Runtime.InjectionApiUO.ReadJournalSnapshot:ReadJournalSnapshot(index). -
InjectionScript.Runtime.InjectionApiUO.JournalEntryTime:JournalEntryTime(entry.Timestamp). -
InjectionScript.Runtime.InjectionApiUO.FindJournalPatternId:FindJournalPatternId(journalText, pattern, exactMatch, caseInsensitive). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Wait:bridge.Wait(Math.Min(25, Math.Max(1, timeout))).
内部実装のコードです。単独のスクリプトとして実行できません。
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);
}ClassicUO — Bad Newbie & C# Scripts IDE