JA UO Topic menus context menus - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
家 · C# · IDE · UO API · A–Z · 例 · Languages
古いメニュー、コンテキスト メニュー、テキスト入力。これらは別個のメカニズムです。ご希望のメニューの回答から商品番号を取得します。
| トピック | コマンドと説明 |
|---|---|
| AutoMenu | UO.AutoMenu |
| WaitMenu | UO.WaitMenu |
| Menu Hooks | UO.MenuHookPresent · UO.CancelAllMenuHooks |
| メニュー項目 | UO.GetMenuItems · UO.GetMenuItemsEx · UO.GetLastMenuItems |
| CancelMenu | UO.CancelMenu |
| Context Menu | UO.GetContextMenu · UO.ClearContextMenu |
| RequestContextMenu | UO.RequestContextMenu |
| Context Menu Hooks | UO.SetContextMenuHook |
UO.AutoMenu · UO.WaitMenu · UO.GetMenuItems · UO.GetMenuItemsEx · UO.GetLastMenuItems · UO.MenuHookPresent · UO.MenuPresent · UO.CancelAllMenuHooks · UO.CancelMenu · UO.CloseMenu · UO.WaitingForMenu · UO.WaitingMenu
UO.GetContextMenu · UO.RequestContextMenu · UO.SetContextMenuHook · UO.ClearContextMenu
UO.WaitTextEntry · UO.ConsoleEntryReply · UO.ConsoleEntryUnicodeReply
各コマンド カードには、直接コード、関数、クラスなどのいくつかの独立したシナリオがあります。以下は厳選された短いシナリオです。制限と完全な分析がカードに含まれています。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.RequestContextMenu(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;UO.WaitMenu("Craft", "Tools");Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.AutoMenu(object? prompt, object? choice);永続的なメニュー フックを登録します。適切なキャプションを持つサーバー メニューが表示されると、クライアントは適切な項目を選択します。この呼び出しではメニューは開かず、メニューを同期的に待機しません。
-
prompt— サーバーメニュータイトルの部分文字列。 -
choice— メニュー項目署名の部分文字列。
void。この呼び出しではフックが登録されるだけで、メニューが見つかったかどうか、または項目が正常に選択されたかどうかは報告されません。
- クライアントが更新されるたびに、フックはまだ閉じられておらず、タイトルに
promptが含まれるサーバー メニューを探します。署名にchoiceが含まれるアイテムが見つかった場合、クライアントはそれを選択します。フックは選択後も登録されたままとなるため、後続の一致するメニューで機能します。UO.CancelMenu()を使用してフックを削除できます。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.AutoMenu");
UO.AutoMenu("Choose material", "Copper");引数と実行の流れ:
- 「素材の選択」というタイトルのメニューが表示されるまで待ち、「銅」というテキストの項目を選択します。
UO.AutoMenu("Choose material", "Copper");引数と実行の流れ:
- 部分文字列は大文字と小文字を区別せずに比較されます。フックは、その後に一致するメニューにも影響します。
return RunScenario();
object? RunScenario()
{
var menuCaption = "choose color";
var itemCaption = "blue";
UO.AutoMenu(menuCaption, itemCaption);
return null;
}引数と実行の流れ:
- このタスクの期間中にフックを登録し、その後、このクライアントのすべてのフックを削除します。
- メニューが表示される前に、他のスクリプト アクションを実行できます。
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.AutoMenu("Choose material", "Iron");
UO.CancelMenu();
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: prompt (Any), choice (Any)
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.AddMenuHook:bridge.AddMenuHook(arguments[0].ToString(), arguments[1].ToString(), true). -
InjectionScript.Runtime.InjectionValue.ToString:arguments[0].ToString().
内部実装のコードです。単独のスクリプトとして実行できません。
case "automenu":
if (arguments.Length >= 2) bridge.AddMenuHook(arguments[0].ToString(), arguments[1].ToString(), true);
break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CancelAllMenuHooks();登録されているすべての自動フックを古いクライアント サーバー メニューから削除します。
パラメータはありません。
void - 戻り値はありません。
- ClearMenuHooks マネージャーに電話します。 AutoMenu と WaitMenu を含む、単一の永続的な選択ルールが削除されます。このコマンドは、すでに開いているメニューを閉じません。 CloseMenuはこれに使用されます。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.CancelAllMenuHooks");
UO.CancelAllMenuHooks();引数と実行の流れ:
- 削除はクライアント メニュー フックのセット全体に適用されます。
UO.CancelAllMenuHooks();引数と実行の流れ:
- フックはすぐに取り外されます。今後、一致するメニューは自動的に選択されなくなります。
return RunScenario();
object? RunScenario()
{
UO.AutoMenu("Choose material", "Iron");
UO.CancelAllMenuHooks();
return null;
}引数と実行の流れ:
- 最初のコマンドはフックを削除します。 2 つ目は、開いている古いメニューを個別にキャンセルします。
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.CancelAllMenuHooks();
UO.CloseMenu();
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearMenuHooks:bridge.ClearMenuHooks().
内部実装のコードです。単独のスクリプトとして実行できません。
case "cancelallmenuhooks": bridge.ClearMenuHooks(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CancelMenu();登録されているすべての自動フックを古いクライアント サーバー メニューから削除します。
パラメータはありません。
void - 戻り値はありません。
- ClearMenuHooks マネージャーに電話します。 AutoMenu と WaitMenu を含む、単一の永続的な選択ルールが削除されます。このコマンドは、すでに開いているメニューを閉じません。 CloseMenuはこれに使用されます。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.CancelMenu");
UO.CancelMenu();引数と実行の流れ:
- 削除はクライアント メニュー フックのセット全体に適用されます。
UO.CancelMenu();引数と実行の流れ:
- フックはすぐに取り外されます。今後、一致するメニューは自動的に選択されなくなります。
return RunScenario();
object? RunScenario()
{
UO.AutoMenu("Choose material", "Iron");
UO.CancelMenu();
return null;
}引数と実行の流れ:
- 最初のコマンドはフックを削除します。 2 つ目は、開いている古いメニューを個別にキャンセルします。
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.CancelMenu();
UO.CloseMenu();
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteLegacyManualAlias. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearMenuHooks:bridge.ClearMenuHooks().
内部実装のコードです。単独のスクリプトとして実行できません。
case "cancelmenu": bridge.ClearMenuHooks(); break;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ClearContextMenu();現在のローカル コンテキスト メニュー モデルを削除します。
パラメータはありません。
void - 戻り値はありません。
- モデルがある場合は、ServerMenus.Context で Dispose を呼び出します。次のリクエストの後に新しいサーバー メニューが表示される場合があります。ここはCloseMenuではありません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.ClearContextMenu");
UO.ClearContextMenu();引数と実行の流れ:
- 現在のローカル コンテキスト メニュー モデルを削除します。
UO.ClearContextMenu();引数と実行の流れ:
- スナップショットの読み取り後にローカル コンテキスト メニューを削除します。
return RunScenario();
object? RunScenario()
{
var entries = UO.GetContextMenu();
UO.ClearContextMenu();
return null;
}引数と実行の流れ:
- 空のセットをクリアすることは許容され、新しい設定は作成されません。
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.ClearContextMenu();
UO.ClearContextMenu();
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ClearContextMenu:bridge.ClearContextMenu().
内部実装のコードです。単独のスクリプトとして実行できません。
case "clearcontextmenu": bridge.ClearContextMenu(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.CloseMenu();CancelForYoko を介して、アクティブな古いサーバーのメニューをすべてキャンセルします。
パラメータはありません。
void - 戻り値はありません。
- スナップショット ServerMenus を反復処理し、各モデルを破棄します。自動メニュー フックは削除されず、任意のガンプ/インターフェイス ウィンドウは閉じられません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.CloseMenu");
UO.CloseMenu();引数と実行の流れ:
- キャンセルは古いMenuGump/サーバーメニューに適用されます。
UO.CloseMenu();引数と実行の流れ:
- 自動選択と開いたメニューは別のコマンドで処理されます。
return RunScenario();
object? RunScenario()
{
UO.CancelAllMenuHooks();
UO.CloseMenu();
return null;
}引数と実行の流れ:
- メニューをキャンセルした後でも、リストのスナップショットはアイテムに保存されます。
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 items = UO.GetLastMenuItems();
UO.Print(Convert.ToString(ArrayLength(items)));
UO.CloseMenu();
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseMenu:bridge.CloseMenu().
内部実装のコードです。単独のスクリプトとして実行できません。
case "closemenu": bridge.CloseMenu(); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ConsoleEntryReply(object? text);MessageManager.SendServerPromptResponse を介してアクティブなサーバー プロンプトにテキストで応答します。
-
text— 文字列に変換される値。空の文字列は空の応答として送信されます。
void - 戻り値はありません。
- 両チームともReplyServerPromptへ向かいます。パッケージ タイプ ASCII/Unicode は、保存されたサーバー プロンプトの状態に基づいて選択されます。コマンド名によって別のエンコーディングが強制されることはありません。アクティブなプロンプトがない場合、マネージャーは応答を送信しません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.ConsoleEntryReply");
UO.ConsoleEntryReply("reply");引数と実行の流れ:
- 送信とは、現在のサーバー入力リクエストを指します。
UO.ConsoleEntryReply("reply");引数と実行の流れ:
- 空のテキストは空の応答としてマネージャーに送信されます。
return RunScenario();
object? RunScenario()
{
UO.ConsoleEntryReply("");
return null;
}引数と実行の流れ:
- 変数名は、選択したサーバー プロンプト形式には影響しません。
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 reply = "New item name";
UO.ConsoleEntryReply(reply);
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: text (Any)
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReplyServerPrompt:bridge.ReplyServerPrompt(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "consoleentryreply":
case "consoleentryunicodereply": bridge.ReplyServerPrompt(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.ConsoleEntryUnicodeReply(object? text);MessageManager.SendServerPromptResponse を介してアクティブなサーバー プロンプトにテキストで応答します。
-
text— 文字列に変換される値。空の文字列は空の応答として送信されます。
void - 戻り値はありません。
- 両チームともReplyServerPromptへ向かいます。パッケージ タイプ ASCII/Unicode は、保存されたサーバー プロンプトの状態に基づいて選択されます。コマンド名によって別のエンコーディングが強制されることはありません。アクティブなプロンプトがない場合、マネージャーは応答を送信しません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.ConsoleEntryUnicodeReply");
UO.ConsoleEntryUnicodeReply("reply");引数と実行の流れ:
- 送信とは、現在のサーバー入力リクエストを指します。
UO.ConsoleEntryUnicodeReply("reply");引数と実行の流れ:
- 空のテキストは空の応答としてマネージャーに送信されます。
return RunScenario();
object? RunScenario()
{
UO.ConsoleEntryUnicodeReply("");
return null;
}引数と実行の流れ:
- 変数名は、選択したサーバー プロンプト形式には影響しません。
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 reply = "New item name";
UO.ConsoleEntryUnicodeReply(reply);
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: text (Any)
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.ReplyServerPrompt:bridge.ReplyServerPrompt(Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "consoleentryreply":
case "consoleentryunicodereply": bridge.ReplyServerPrompt(Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetContextMenu();現在のコンテキスト メニュー モデルの項目文字列を読み取ります。
パラメータはありません。
ServerMenus.Context.GetYokoItems(); からの文字列の配列モデルがない場合は空の配列。
- RequestContextMenu を送信せず、サーバーの応答を待ちません。新しいメニューを取得するには、まず個別にリクエストし、モデルが表示されるのを待ちます。 ClearContextMenu は読み取り後にモデルを削除します。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
object? result = UO.GetContextMenu();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));引数と実行の流れ:
- 既存のモデルが読み込まれます。
var entries = UO.GetContextMenu();
for (int i = (int)(0); i <= ArrayLength(entries)-1; i += (int)(1))
{
UO.Print(entries[i]);
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;引数と実行の流れ:
- 500 ms - 一時停止の例であり、サーバーの応答を保証するものではありません。空の配列も受け入れられます。
return await RunScenarioAsync();
async Task<object?> RunScenarioAsync()
{
UO.RequestContextMenu(UO.Self());
await Delay(500);
var entries = UO.GetContextMenu();
UO.Print(Convert.ToString(ArrayLength(entries)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
Task Delay(object? milliseconds) => WaitAsync(checked((int)Convert.ToDouble(milliseconds)));引数と実行の流れ:
- 保存した配列はメニューモデルをクリアしても消えません。
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 entries = UO.GetContextMenu();
UO.ClearContextMenu();
UO.Print(Convert.ToString(ArrayLength(entries)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetContextMenu()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetContextMenu:bridge.GetContextMenu().
内部実装のコードです。単独のスクリプトとして実行できません。
case "getcontextmenu": return StringArray(bridge.GetContextMenu());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetLastMenuItems();すでに開いている古いサーバーメニューの項目を読み取ります。
パラメータはありません。
文字列の配列。項目名/説明行GetYokoItems。適切なメニューが見つからない場合は、空の配列が返されます。
- 最後の写真メニューServerMenusが選択されています。このコマンドはメニューを開いたり、フックを配置したり、項目を選択したりしません。これはコンテキスト メニューや通常のサーバー ガンプではありません。
- 次数はモデルの点に対応します。リストはスナップショットです。その後メニューを変更しても、保存された配列は更新されません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
object? result = UO.GetLastMenuItems();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));引数と実行の流れ:
- 空の配列はループセーフです。
var items = UO.GetLastMenuItems();
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
UO.Print(items[i]);
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;引数と実行の流れ:
- インデックス 0 は、サイズを確認した後にのみ読み取られます。
return RunScenario();
object? RunScenario()
{
var items = UO.GetLastMenuItems();
if (Truth(ArrayLength(items) > 0))
{
UO.Print(items[0]);
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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 items = UO.GetLastMenuItems();
UO.CloseMenu();
UO.Print(Convert.ToString(ArrayLength(items)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetLastMenuItems()). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastMenuItems:bridge.GetLastMenuItems().
内部実装のコードです。単独のスクリプトとして実行できません。
case "getlastmenuitems": return StringArray(bridge.GetLastMenuItems());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMenuItems(object? caption);すでに開いている古いサーバーメニューの項目を読み取ります。
-
caption— 古いサーバー メニューのタイトルの部分文字列。 OrdinalIgnoreCase を検索してください。空の行は任意のヘッダーと一致します。
文字列の配列。項目名/説明行GetYokoItems。適切なメニューが見つからない場合は、空の配列が返されます。
- 一致するタイトル部分文字列を持つ最後の非廃棄メニューが選択されます。このコマンドはメニューを開いたり、フックを配置したり、項目を選択したりしません。これはコンテキスト メニューや通常のサーバー ガンプではありません。
- 次数はモデルの点に対応します。リストはスナップショットです。その後メニューを変更しても、保存された配列は更新されません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
object? result = UO.GetMenuItems("");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));引数と実行の流れ:
- 空の配列はループセーフです。
var items = UO.GetMenuItems("");
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
UO.Print(items[i]);
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;引数と実行の流れ:
- インデックス 0 は、サイズを確認した後にのみ読み取られます。
return RunScenario();
object? RunScenario()
{
var items = UO.GetMenuItems("");
if (Truth(ArrayLength(items) > 0))
{
UO.Print(items[0]);
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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 items = UO.GetMenuItems("");
UO.CloseMenu();
UO.Print(Convert.ToString(ArrayLength(items)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: caption (Any)
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetMenuItems(Text(0), false)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMenuItems:bridge.GetMenuItems(Text(0), false). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "getmenuitems": return StringArray(bridge.GetMenuItems(Text(0), false));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.GetMenuItemsEx(object? caption);すでに開いている古いサーバーメニューの項目を読み取ります。
-
caption— 古いサーバー メニューのタイトルの部分文字列。 OrdinalIgnoreCase を検索してください。空の行は任意のヘッダーと一致します。
文字列の配列。文字列 graphicHex|hueHex|インデックス|名前、たとえば、0x0001|0x0000|1|選択。適切なメニューが見つからない場合は、空の配列が返されます。
- 一致するタイトル部分文字列を持つ最後の非廃棄メニューが選択されます。このコマンドはメニューを開いたり、フックを配置したり、項目を選択したりしません。これはコンテキスト メニューや通常のサーバー ガンプではありません。
- 次数はモデルの点に対応します。リストはスナップショットです。その後メニューを変更しても、保存された配列は更新されません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
object? result = UO.GetMenuItemsEx("");
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));引数と実行の流れ:
- 空の配列はループセーフです。
var items = UO.GetMenuItemsEx("");
for (int i = (int)(0); i <= ArrayLength(items)-1; i += (int)(1))
{
UO.Print(items[i]);
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;引数と実行の流れ:
- インデックス 0 は、サイズを確認した後にのみ読み取られます。
return RunScenario();
object? RunScenario()
{
var items = UO.GetMenuItemsEx("");
if (Truth(ArrayLength(items) > 0))
{
UO.Print(items[0]);
}
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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 items = UO.GetMenuItemsEx("");
UO.CloseMenu();
UO.Print(Convert.ToString(ArrayLength(items)));
return null;
}
int ArrayLength(object? value) => value is System.Array array ? array.Length : 0;
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: caption (Any)
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
InjectionScript.Runtime.InjectionApiUO.StringArray:StringArray(bridge.GetMenuItems(Text(0), true)). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetMenuItems:bridge.GetMenuItems(Text(0), true). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "getmenuitemsex": return StringArray(bridge.GetMenuItems(Text(0), true));Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MenuHookPresent();登録されているメニューフックの有無を読み取ります。
パラメータはありません。
数値フラグ int: 1 - _manager.HasMenuHooks、0 - フックなし。メニュー自体がまだ存在しない可能性があります。
- 登録されているメニューフックの有無を読み取ります。メニューを待たず、サーバーのガンプをチェックせず、フックも消費しません。
- 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
object? result = UO.MenuHookPresent();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));引数と実行の流れ:
- 登録されているメニューフックの有無を読み取ります。
UO.Print(UO.MenuHookPresent());引数と実行の流れ:
- 登録されているメニューフックの有無を読み取ります。メニューを待たず、サーバーのガンプをチェックせず、フックも消費しません。
return RunScenario();
object? RunScenario()
{
UO.WaitMenu("Craft", "Tools");
UO.Print(UO.MenuHookPresent());
return null;
}引数と実行の流れ:
- 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
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 before = UO.MenuHookPresent();
UO.Wait(500);
var after = UO.MenuHookPresent();
UO.Print(before);
UO.Print(after);
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MenuHookPresent:bridge.MenuHookPresent().
内部実装のコードです。単独のスクリプトとして実行できません。
case "menuhookpresent": return new InjectionValue(bridge.MenuHookPresent());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
dynamic UO.MenuPresent();MenuPresent は WaitingMenu を直接呼び出します。
パラメータはありません。
数値フラグ int: 1 - サーバーメニューがあります。 0 - いいえ。
- MenuPresent は WaitingMenu を直接呼び出します。 GetGumpsCount、コンテキスト メニュー、または登録されたフックはチェックしません。
- 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
object? result = UO.MenuPresent();
UO.Print(result is Array values ? "Count: " + values.Length : Convert.ToString(result));引数と実行の流れ:
- MenuPresent は WaitingMenu を直接呼び出します。
UO.Print(UO.MenuPresent());引数と実行の流れ:
- MenuPresent は WaitingMenu を直接呼び出します。 GetGumpsCount、コンテキスト メニュー、または登録されたフックはチェックしません。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.MenuPresent()))
{
UO.Print(UO.GetLastMenuItems());
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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 before = UO.MenuPresent();
UO.Wait(500);
var after = UO.MenuPresent();
UO.Print(before);
UO.Print(after);
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: dynamic / Any.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.MenuPresent:bridge.MenuPresent().
内部実装のコードです。単独のスクリプトとして実行できません。
case "menupresent": return new InjectionValue(bridge.MenuPresent());Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.RequestContextMenu(object? objID);オブジェクトのコンテキスト メニューを要求します。
-
objID— シリアル/ID オブジェクト: int、数値/16 進文字列、または確立されたエイリアス (例: "lasttarget")。これはgraphic/typeではありません。アクションを実行する前に、ロードされたオブジェクトを確認してください。
void - 値がありません。別の回線で電話してください。完了してもサーバーのアクションは確認されません。
- ブリッジは GameActions.OpenPopupMenu を呼び出します。答えは別に保存され、GetContextMenu を読んでください。このコマンドはメニュー バーを選択しません。
- Bridge はゲーム ストリームでリクエストを送信します。サーバールールが適用されます。確認を待つ組み込み機能はありません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.RequestContextMenu");
UO.RequestContextMenu(UO.GetSerial("lasttarget"));引数と実行の流れ:
- オブジェクトのコンテキスト メニューを要求します。
var id = UO.GetSerial("lasttarget");
if (Truth(UO.Exists(id)))
{
UO.RequestContextMenu(id);
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;引数と実行の流れ:
- ブリッジは GameActions.OpenPopupMenu を呼び出します。答えは別に保存され、GetContextMenu を読んでください。このコマンドはメニュー バーを選択しません。
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("self");
if (Truth(UO.Exists(id)))
{
UO.RequestContextMenu(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;引数と実行の流れ:
- Bridge はゲーム ストリームでリクエストを送信します。サーバールールが適用されます。確認を待つ組み込み機能はありません。
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()
{
ApplyToLoaded(UO.GetSerial("lasttarget"));
return null;
}
void ApplyToLoaded(dynamic id)
{
if (Truth(UO.Exists(id)))
{
UO.RequestContextMenu(id);
}
}
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 を使います。
引数: objID (Any)
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.RequestContextMenu:bridge.RequestContextMenu(Arg(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "requestcontextmenu": bridge.RequestContextMenu(Arg(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.SetContextMenuHook(object? menuID, object? entryNumber);コンテキスト メニュー項目の 1 回限りの選択を登録します。
-
menuID— メニューオブジェクトのシリアル。uint に縮小されます。 0 はすべての serial に適合します。これはサーバーガンプIDではありません。 -
entryNumber— ゼロ点インデックス。負の値を指定すると、保留中のコンテキスト フックが無効になります。 0..GetArrayLength(UO.GetContextMenu())-1。
void - 値がありません。別の回線で電話してください。完了してもサーバーのアクションは確認されません。
- Bridge はデータを _manager.SetContextMenuHook に渡します。ここには、_contextMenuSerial/_contextMenuEntry が保存されます。 ProcessMenuHooks ハンドラーは、既存の一致するコンテキスト メニューを待ちます。
- SelectYokoItem が成功すると、フィールドは 0/-1 にクリアされます。メニューはこのセッターによって要求されません。RequestContextMenu を単独で使用してください。呼び出し自体は、サーバーのアクションをブロックしたり確認したりしません。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.SetContextMenuHook");
UO.SetContextMenuHook(0, 0);引数と実行の流れ:
- コンテキスト メニュー項目の 1 回限りの選択を登録します。
UO.SetContextMenuHook(0, 0);引数と実行の流れ:
- Bridge はデータを _manager.SetContextMenuHook に渡します。ここには、_contextMenuSerial/_contextMenuEntry が保存されます。 ProcessMenuHooks ハンドラーは、既存の一致するコンテキスト メニューを待ちます。
return RunScenario();
object? RunScenario()
{
var id = UO.GetSerial("lasttarget");
UO.SetContextMenuHook(UO.Hex2Int(id), 0);
UO.RequestContextMenu(id);
return null;
}引数と実行の流れ:
- SelectYokoItem が成功すると、フィールドは 0/-1 にクリアされます。メニューはこのセッターによって要求されません。RequestContextMenu を単独で使用してください。呼び出し自体は、サーバーのアクションをブロックしたり確認したりしません。
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.SetContextMenuHook(0, -1);
UO.Print(UO.GetContextMenu());
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: menuID (Any), entryNumber (Any)
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetContextMenuHook:bridge.SetContextMenuHook(Arg(0), Arg(1)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Arg:Arg(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "setcontextmenuhook": bridge.SetContextMenuHook(Arg(0), Arg(1)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitMenu(object? menuCaption, object? elementCaption);
void UO.WaitMenu(object? prompt1, object? choice1, object? prompt2, object? choice2);
void UO.WaitMenu(object? prompt1, object? choice1, object? prompt2, object? choice2, object? prompt3, object? choice3);ワンタイムメニューフックを3つまで登録できます。
-
menuCaption / prompt1 / prompt2 / prompt3— サーバーメニューのタイトルテンプレート文字列。ペアはヘッダー、要素の順に渡されます。 -
menuCaption— サーバーメニューのタイトルテンプレート文字列。ペアはヘッダー、要素の順に渡されます。 -
prompt1— サーバーメニューのタイトルテンプレート文字列。ペアはヘッダー、要素の順に渡されます。 -
prompt2— サーバーメニューのタイトルテンプレート文字列。ペアはヘッダー、要素の順に渡されます。 -
prompt3— サーバーメニューのタイトルテンプレート文字列。ペアはヘッダー、要素の順に渡されます。 -
elementCaption / choice1 / choice2 / choice3— 対応するヘッダーの要素を選択するための行。 ID 通常のガンプ ボタンではありません。 -
elementCaption— 対応するヘッダーの要素を選択するための行。 ID 通常のガンプ ボタンではありません。 -
choice1— 対応するヘッダーの要素を選択するための行。 ID 通常のガンプ ボタンではありません。 -
choice2— 対応するヘッダーの要素を選択するための行。 ID 通常のガンプ ボタンではありません。 -
choice3— 対応するヘッダーの要素を選択するための行。 ID 通常のガンプ ボタンではありません。
void - 値がありません。別の回線で電話してください。完了してもサーバーのアクションは確認されません。
- 各ペアは _manager.AddMenuHook(prompt、choice、false) に渡されます。登録されている形式は、2/4/6 引数です。 false は 1 回限りのフックを示します。 AutoMenu/2 つの引数 VendorMenu は定数フックを使用します。
- メニューが表示されるまでスクリプトをブロックしません。フックは、メニューが適切な場合にマネージャーによって消費されます。サーバーによる実行結果は返されません。メニューの場合は WaitingMenu、フックの場合は MenuHookPresent を使用します。
- メニュー/選択フォームの場合、マネージャーはタイトルにプロンプトが含まれる最初のメニューを選択します (大文字と小文字は区別されません)。 SessionMenu は、名前に選択肢が含まれる最初の項目を選択します。これも大文字と小文字は区別されません。 Blank text is suitable for anyone;数値テキストは名前の一部であり、インデックスではありません。選択が成功すると、応答が送信され、ローカル メニューが閉じます。ワンタイムフックは、選択が成功した後にのみ削除されます。 a permanent hook remains.
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.WaitMenu");
UO.WaitMenu("Craft", "Tools");引数と実行の流れ:
- ワンタイムメニューフックを3つまで登録できます。
UO.WaitMenu("Craft", "Tools");引数と実行の流れ:
- 各ペアは _manager.AddMenuHook(prompt、choice、false) に渡されます。登録されている形式は、2/4/6 引数です。 false は 1 回限りのフックを示します。 AutoMenu/2 つの引数 VendorMenu は定数フックを使用します。
return RunScenario();
object? RunScenario()
{
UO.WaitMenu("Craft", "Tools", "Tools", "Shovel");
return null;
}引数と実行の流れ:
- メニューが表示されるまでスクリプトをブロックしません。フックは、メニューが適切な場合にマネージャーによって消費されます。サーバーによる実行結果は返されません。メニューの場合は WaitingMenu、フックの場合は MenuHookPresent を使用します。
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.WaitMenu("Craft", "Tools", "Tools", "Shovel", "Amount", "One");
UO.Print(UO.MenuHookPresent());
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: menuCaption (Any/String), elementCaption (Any/String)
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitMenu:bridge.WaitMenu(arguments.Select(value => value.ToString()).ToArray()). -
InjectionScript.Runtime.InjectionValue.ToString:value.ToString().
内部実装のコードです。単独のスクリプトとして実行できません。
case "waitmenu": bridge.WaitMenu(arguments.Select(value => value.ToString()).ToArray()); return InjectionValue.Unit;引数: menuCaption (Any/String), elementCaption (Any/String)
結果: void / Unit.
呼び出し時:
内部実装のコードです。単独のスクリプトとして実行できません。
public void WaitMenu(string prompt, string choice)
=> bridge.WaitMenu(prompt, choice);引数: prompt1 (String), choice1 (String), prompt2 (String), choice2 (String)
結果: void / Unit.
呼び出し時:
内部実装のコードです。単独のスクリプトとして実行できません。
public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2)
=> bridge.WaitMenu(prompt1, choice1, prompt2, choice2);
UO.WaitMenu(prompt1, choice1, prompt2, choice2, prompt3, choice3) — UO.WaitMenu(String,String,String,String,String,String)
引数: prompt1 (String), choice1 (String), prompt2 (String), choice2 (String), prompt3 (String), choice3 (String)
結果: void / Unit.
呼び出し時:
内部実装のコードです。単独のスクリプトとして実行できません。
public void WaitMenu(string prompt1, string choice1, string prompt2, string choice2, string prompt3, string choice3)
=> bridge.WaitMenu(prompt1, choice1, prompt2, choice2, prompt3, choice3);Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
void UO.WaitTextEntry(object? value);現在のガンプの textentry にテキストを書き込もうとします。
-
value— テキスト経由 ToString;送信済みとして保存されます。
void - 値がありません。別の回線で電話してください。完了してもサーバーのアクションは確認されません。
- ExecuteClientApiCompatibility は SetGumpValue(-1, "textentry", -1, Text(0)) を呼び出します。 key=-1 は通常の null インデックスではありません。書き込みは、gump 実装で既存のフィールドがそのような ID にマップされる場合にのみ可能です。
- 将来のガンプを待たず、プロンプトも開かず、フックも登録しません。一致するフィールドがない場合、SetGumpValue はメッセージを表示します。既知のフィールドの場合は、明示的な ID/index とともに SetGump を使用します。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
コマンドは独立した文です。直前のメッセージは呼び出しの開始を示し、サーバーの動作完了を確認するものではありません。
UO.Print("Calling UO.WaitTextEntry");
UO.WaitTextEntry("Example");引数と実行の流れ:
- 現在のガンプの textentry にテキストを書き込もうとします。
UO.WaitTextEntry("Example");引数と実行の流れ:
- ExecuteClientApiCompatibility は SetGumpValue(-1, "textentry", -1, Text(0)) を呼び出します。 key=-1 は通常の null インデックスではありません。書き込みは、gump 実装で既存のフィールドがそのような ID にマップされる場合にのみ可能です。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.GetGumpsCount() > 0))
{
UO.WaitTextEntry("Example");
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 0;引数と実行の流れ:
- 将来のガンプを待たず、プロンプトも開かず、フックも登録しません。一致するフィールドがない場合、SetGumpValue はメッセージを表示します。既知のフィールドの場合は、明示的な ID/index とともに SetGump を使用します。
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.WaitTextEntry("Example");
UO.Print("Check the target field in the current gump");
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: value (Any)
結果: void / Unit.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.SetGumpValue:bridge.SetGumpValue(-1, "textentry", -1, Text(0)). -
InjectionScript.Runtime.InjectionApiUO.ExecuteClientApiCompatibility::Text:Text(0).
内部実装のコードです。単独のスクリプトとして実行できません。
case "waittextentry": bridge.SetGumpValue(-1, "textentry", -1, Text(0)); return InjectionValue.Unit;Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.WaitingForMenu(object? delay);
int UO.WaitingForMenu(object? delay, object? menuCount);
int UO.WaitingForMenu(object? delay, object? menuCount, object? blockMenu);
int UO.WaitingForMenu(object? delay, object? menuCount, object? blockMenu, object? menuName);
int UO.WaitingForMenu(object? delayValue, object? menuCountValue, object? blockMenuValue, object? menuNameValue, object? skillOrSerial);必要なサーバー メニューの表示数には制限があります。
-
delay— ミリ秒単位の int タイムアウト、負の場合は 0 になります。 0 でもチェックは 1 つ行われます。 -
delayValue— ミリ秒単位の int タイムアウト、負の場合は 0 になります。 0 でもチェックは 1 つ行われます。 -
menuCount— オプションの出現数、最小 1;デフォルトは 1 です。メニューの品数ではありません。 -
menuCountValue— オプションの出現数、最小 1;デフォルトは 1 です。メニューの品数ではありません。 -
blockMenu— オプションのゼロ以外の数値は、条件が満たされたときにメニューを閉じます。 0 は彼から離れます。 -
blockMenuValue— オプションのゼロ以外の数値は、条件が満たされたときにメニューを閉じます。 0 は彼から離れます。 -
menuName- オプションの正確なタイトル、大文字と小文字が区別されます。空の場合は誰でも許可されます。 -
menuNameValue- オプションの正確なタイトル、大文字と小文字が区別されます。空の場合は誰でも許可されます。 -
skillOrSerial- オプションの最後の引数: TriggerWaitAction は、最初に serial という名前のスキルまたはオブジェクトを使用できます。デフォルトでは、0 はアクションを実行しません。
数値フラグ int: 1 - 少なくとも menuCount の異なる出現が認識され、最後のものには目的のタイトルが付けられます。 0 - タイムアウト。既存のメニューをすぐにカウントできます。
- TriggerWaitAction が GetLastMenuIdentity を読み取った後。新しいアイデンティティによりカウンターが増加します。空の ID は前の ID のメモリをリセットするため、閉じたり再度開いたりした後に同じメニューを再度カウントできます。
- カウント境界は、新しい ID を使用してのみチェックされます。と が一致する場合、blockMenu はメニューを閉じます。チェック間 UO.Wait から 25 ミリ秒。ヘッダーは部分文字列ではなく序数によってチェックされます。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
var result = UO.WaitingForMenu(3000);
UO.Print("WaitingForMenu: " + Convert.ToString(result));引数と実行の流れ:
- 必要なサーバー メニューの表示数には制限があります。
UO.Print(UO.WaitingForMenu(3000));引数と実行の流れ:
- TriggerWaitAction が GetLastMenuIdentity を読み取った後。新しいアイデンティティによりカウンターが増加します。空の ID は前の ID のメモリをリセットするため、閉じたり再度開いたりした後に同じメニューを再度カウントできます。
return RunScenario();
object? RunScenario()
{
UO.Print(UO.WaitingForMenu(3000, 1, 1, "Craft"));
return null;
}引数と実行の流れ:
- カウント境界は、新しい ID を使用してのみチェックされます。と が一致する場合、blockMenu はメニューを閉じます。チェック間 UO.Wait から 25 ミリ秒。ヘッダーは部分文字列ではなく序数によってチェックされます。
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 found = UO.WaitingForMenu(3000, 1, 0, "Craft", "lasttarget");
if (Truth(found))
{
UO.Print(UO.GetLastMenuItems());
}
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 を使います。
引数: delay (Any)
結果: int / Integer.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForMenu. -
InjectionScript.Runtime.InjectionApiUO.WaitingForMenu:WaitingForMenu(delay, InjectionValue.Zero, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero).
内部実装のコードです。単独のスクリプトとして実行できません。
public int WaitingForMenu(InjectionValue delay) => WaitingForMenu(delay, InjectionValue.Zero, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero);引数: delay (Any), menuCount (Any)
結果: int / Integer.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForMenu. -
InjectionScript.Runtime.InjectionApiUO.WaitingForMenu:WaitingForMenu(delay, menuCount, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero).
内部実装のコードです。単独のスクリプトとして実行できません。
public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount) => WaitingForMenu(delay, menuCount, InjectionValue.Zero, new InjectionValue(string.Empty), InjectionValue.Zero);引数: delay (Any), menuCount (Any), blockMenu (Any)
結果: int / Integer.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForMenu. -
InjectionScript.Runtime.InjectionApiUO.WaitingForMenu:WaitingForMenu(delay, menuCount, blockMenu, new InjectionValue(string.Empty), InjectionValue.Zero).
内部実装のコードです。単独のスクリプトとして実行できません。
public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount, InjectionValue blockMenu) => WaitingForMenu(delay, menuCount, blockMenu, new InjectionValue(string.Empty), InjectionValue.Zero);引数: delay (Any), menuCount (Any), blockMenu (Any), menuName (Any)
結果: int / Integer.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForMenu. -
InjectionScript.Runtime.InjectionApiUO.WaitingForMenu:WaitingForMenu(delay, menuCount, blockMenu, menuName, InjectionValue.Zero).
内部実装のコードです。単独のスクリプトとして実行できません。
public int WaitingForMenu(InjectionValue delay, InjectionValue menuCount, InjectionValue blockMenu, InjectionValue menuName) => WaitingForMenu(delay, menuCount, blockMenu, menuName, InjectionValue.Zero);
UO.WaitingForMenu(delayValue, menuCountValue, blockMenuValue, menuNameValue, skillOrSerial) — UO.WaitingForMenu(Any,Any,Any,Any,Any)
引数: delayValue (Any), menuCountValue (Any), blockMenuValue (Any), menuNameValue (Any), skillOrSerial (Any)
結果: int / Integer.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingForMenu. -
InjectionScript.Runtime.NumberConversions.ToInt:NumberConversions.ToInt(delayValue). -
InjectionScript.Runtime.InjectionValue.ToString:menuNameValue.ToString(). -
InjectionScript.Runtime.InjectionApiUO.TriggerWaitAction:TriggerWaitAction(skillOrSerial). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastMenuIdentity:bridge.GetLastMenuIdentity(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.GetLastMenuCaption:bridge.GetLastMenuCaption(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.CloseMenu:bridge.CloseMenu(). -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.Wait:bridge.Wait(Math.Min(25, Math.Max(1, delay))).
内部実装のコードです。単独のスクリプトとして実行できません。
public int WaitingForMenu(InjectionValue delayValue, InjectionValue menuCountValue, InjectionValue blockMenuValue, InjectionValue menuNameValue, InjectionValue skillOrSerial)
{
int delay = Math.Max(0, NumberConversions.ToInt(delayValue));
int requiredMenuCount = Math.Max(1, NumberConversions.ToInt(menuCountValue));
bool blockMenu = NumberConversions.ToInt(blockMenuValue) != 0;
string expectedName = menuNameValue.ToString() ?? string.Empty;
DateTime deadline = timeSource.Now.AddMilliseconds(delay);
string previousIdentity = string.Empty;
int observedMenuCount = 0;
TriggerWaitAction(skillOrSerial);
do
{
string identity = bridge.GetLastMenuIdentity() ?? string.Empty;
if (identity.Length == 0)
{
// Reset between server menus so an identical menu opened again
// still counts as a new appearance.
previousIdentity = string.Empty;
}
else if (!identity.Equals(previousIdentity, StringComparison.Ordinal))
{
previousIdentity = identity;
observedMenuCount++;
string caption = bridge.GetLastMenuCaption() ?? string.Empty;
bool nameMatches = expectedName.Length == 0
|| caption.Equals(expectedName, StringComparison.Ordinal);
if (observedMenuCount >= requiredMenuCount && nameMatches)
{
if (blockMenu)
bridge.CloseMenu();
return 1;
}
}
if (timeSource.Now >= deadline)
break;
bridge.Wait(Math.Min(25, Math.Max(1, delay)));
}
while (true);
return 0;
}Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
int UO.WaitingMenu();_world.ServerMenus.Snapshot().Length != 0 を読み取ります。
パラメータはありません。
数値フラグ int: 1 - ServerMenus には少なくとも 1 つのメニューがありますが、0 - はありません。これはスクリプトを待つのではなく、メニューを持っています。
- _world.ServerMenus.Snapshot().Length != 0 を読み取ります。レガシー サーバー メニューは、通常のサーバー ガンプおよびコンテキスト メニューとは別のものです。
- 現在のローカル状態を読み取ります。パッケージ、ターゲット、自動アップデートはありません。個々の読み取りでは異なる状態が表示される場合があります。
各サンプルは個別のファイル .csx として保存し、IDE で実行できます。 UO オブジェクトと待機関数は、現在のゲーム セッションのホストを提供します。デモの serial の名前、座標、アドレスを自分のものに置き換えます。
このコードを独立した .csx ファイルとして実行します。引数は呼び出しに直接記載されています。例の名前、serial、アドレスを自分の値に置き換えてください。
1 回の呼び出し結果をジャーナルに表示します。数値は bool に変換されません。配列の場合は要素数を表示します。
var result = UO.WaitingMenu();
UO.Print("WaitingMenu: " + Convert.ToString(result));引数と実行の流れ:
- _world.ServerMenus.Snapshot().Length != 0 を読み取ります。
UO.Print(UO.WaitingMenu());引数と実行の流れ:
- _world.ServerMenus.Snapshot().Length != 0 を読み取ります。レガシー サーバー メニューは、通常のサーバー ガンプおよびコンテキスト メニューとは別のものです。
return RunScenario();
object? RunScenario()
{
if (Truth(UO.WaitingMenu()))
{
UO.Print(UO.GetLastMenuItems());
}
return null;
}
bool Truth(object? value) => value is bool flag ? flag : value is string text ? !string.IsNullOrEmpty(text) : value != null && Convert.ToDouble(value) != 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 before = UO.WaitingMenu();
UO.Wait(500);
var after = UO.WaitingMenu();
UO.Print(before);
UO.Print(after);
return null;
}
}C# は大文字と小文字を区別します。正確な UO 名を使用してください。数値フラグは 0 と比較し、戻り値が bool の場合だけ bool を使います。
引数: 引数はありません。
結果: int / Integer.
呼び出し時:
-
InjectionScript.Runtime.InjectionApiUO.WaitingMenu. -
ClassicUO.Game.Managers.ClassicUOInjectionApiBridge.WaitingMenu:bridge.WaitingMenu().
内部実装のコードです。単独のスクリプトとして実行できません。
public int WaitingMenu() => bridge.WaitingMenu();