-
-
Notifications
You must be signed in to change notification settings - Fork 2
Operations ja
English | 日本語
実験的な機能です。 フレームワーク 1.4.0 で入ったもので、この先のバージョンで変わったり、無くなったりするかもしれません。
Operations(操作の登録簿)は中核(DragNWash.ModFramework、クラス Operations)にある登録簿で、各ライブラリや Mod にできることを、名前と単純な引数で呼べるようにします。Console の op コマンドも Bridge の MCP のツールも、裏ではこれを使っています。MCP のツールは、この PC の AI クライアント(Claude Code・VS Code・Cursor)がゲームを読むためのものです。中核が持つのは登録簿だけで、操作はそれぞれのライブラリが自分で登録します。
設計は docs/API_PLAN.ja.md(第 1 段階)にあります。
| 部分 | 意味 |
|---|---|
| 名前 |
library.noun.verb。小文字で空白なし:inspector.member.get、saves.flags.list
|
| 説明 | 何をするかを 1 行で。人と AI クライアントが読みます |
| 引数 | それぞれに名前、型(String、Number、Boolean)、必須かどうか、説明、決まった値しか受け付けないときはその選択肢 |
| 種類 |
Read(何も変えない)か Write(ゲームの中の何かを変える) |
| 戻り値 | 何を返すかの 1 行 |
| 持ち主 | 登録した Mod の GUID |
ベクトルと色は、Inspector の行と同じ書き方のテキストで渡します。
Operations.Register(MyMod.Guid, "mymod.items.list", "The items my mod knows, optionally only those whose name contains a text.",
OperationKind.Read, "a list of { name, count }",
args =>
{
string filter = args.String("filter");
int max = args.Int("max", 20);
return Items(filter, max); // リスト、辞書、文字列、数値、true/false
},
Operations.Parameter("filter", OperationType.String, "Only names that contain this."),
Operations.Parameter("max", OperationType.Number, "At most this many (20 when left out)."));-
Operations.Register(ownerGuid, name, description, kind, returns, run, params parameters)はOperationを返します。名前がすでに使われていればnullを返し、誰が使っているかをログに書きます。大文字や空白を含む名前は例外になります。 -
Operations.Parameter(name, type, description, required = false, params choices)で引数を作ります。選択肢を渡すと、その値だけを受け付けます(大文字・小文字は区別しません)。 - 関数には
OperationArgsが渡され、Has(name)、String(name, fallback)、Number(name, fallback)、Int(name, fallback)、Bool(name, fallback)で引数を読めます。 - 返すのは単純な値で、
null、文字列、数値、true/false、それからそれらのリストと、キーが文字列の辞書です。それ以外はテキストにして書き出します。失敗させたいときは、メッセージつきで例外を投げてください。 - ほかの Mod とぶつからないように、操作の名前は自分の Mod の名前で始めてください(
mymod.…)。
-
Operations.Allですべての操作が名前順に、Operations.Find(name)で 1 つが手に入ります(なければnull)。 -
Operations.CallNow(name, args, caller)はその場で呼びます。メインスレッド専用で、OperationResult(Ok、Value、Error、ToJson())を返します。 -
Operations.Call(name, args, caller, done)はどのスレッドからでも呼べます。操作は次のフレームにメインスレッドで動き、結果はそこでdoneに渡されます。 -
callerは、誰が呼んだか("console"、"mcp:<クライアント>")をログに残すための名前です。 - 引数は、操作が動く前に引数の定義と突き合わせます。必須の引数がない、知らない名前がある、型が違う、といった場合はエラーです。テキストは、引数の型に合わせて数値や true/false に変えます。
-
Operations.ToJson(value, indented)で、結果を JSON にします。
- Unity のオブジェクトはメインスレッドでしか触れないので、誰が呼んでも、操作はメインスレッドで動きます。
- JSON で 200,000 文字(
Operations.MaxResultChars)を超える結果はエラーになり、範囲を絞って呼び直すよう求めます。 - 呼び出しはすべて、誰が呼んだか、引数、うまくいったかどうかと一緒にログに残ります。書き換える操作は Info、読む操作は Debug です。誰が呼んだかは、操作の側から
OperationArgs.Callerで読めます。 - 書き換える操作は
OperationArgs.TakeBack(label, undo, before, after)で戻し方を渡し、登録簿はそれをOperations.Writtenで知らせます。Inspector の History にほかの Mod が変えたものも並ぶのは、これを聞いているからです。undoをFunc<bool>で書けば、本当に戻せたかどうかを返せます。オブジェクトが無くなっていたり、誰かがあとから書き換えていたりすれば戻せていないことになるので、数える側は試した回数ではなく、実際に戻した件数を数えられます。 - Mod を読み直したり外したりすると、その Mod の操作も一緒に消えます。
-
Registerの直後にOperation.Audienceを設定すると、その操作をどの入り口に出すかを決められます。入り口はConsole(F1 のウィンドウ)、Page(この PC の Bridge のページ)、Mcp(AI クライアント)、Graphs(データ Mod のグラフ)で、初期値は 4 つすべてのAnyoneです。ゲーム自身のコードを見せるもの(コードグラフ)はConsole | Pageで、エディター自身の操作も、書き込みを含めてConsole | Pageです。 - Bridge が AI クライアントに出すのは読む操作だけで、それも
Mcpを含むものに限ります。書き込みは、誰が求めても出しません。
Console で使えます(Tool window ライブラリに入っています)。
| コマンド | 内容 |
|---|---|
op |
すべての操作の一覧。書き換えるものには [write]
|
op help <name> |
1 つを説明する(種類、持ち主、引数ごとの型、戻り値) |
op <name> key=value ... |
実行して、結果を JSON で表示(リストは 1 行に 1 つ) |
名前と引数は Tab で補完できます。
op inspector.objects.find text=Light max=10
op saves.flags.list slot=1 filter=intro
bridge.page.open のほかは、すべて読む操作です。
| ライブラリ | 操作 | 引数 | 返すもの |
|---|---|---|---|
| 中核 | mods.list |
Mods 画面の Mod:guid、名前、バージョン、読み込み済みか、次の起動でオンか、ライブラリか、作者、説明 | |
| 中核 | mods.network |
このセッションで Mod がつないだ先と、それぞれ申告済みか | |
| 中核 | game.info |
フレームワーク・Unity・グラフィックスのバージョン、Direct3D 12 かどうか、OS、画面、開発者ツール | |
| 中核 | scene.list |
アクティブなシーン、読み込まれているシーン、ゲームのビルドにあるすべてのシーン | |
| Tool window | log.read |
max、source、level
|
Console の最新の行:時刻、レベル、出どころ、テキスト |
| Inspector | inspector.objects.find |
text(必須)、max
|
名前にそのテキストを含むオブジェクト:パス、シーン、有効か |
| Inspector | inspector.objects.children |
path |
オブジェクトの子。パスがなければ一番上のオブジェクト |
| Inspector | inspector.components.list |
path(必須) |
オブジェクトのコンポーネントを順に、同じ型の中での番号つきで |
| Inspector | inspector.member.get |
path、component(どちらも必須)、index、member、private
|
コンポーネントのメンバーを Inspector の表示どおりに、または 1 つのメンバー |
| Inspector | inspector.selection.get |
Inspector で選ばれているもの | |
| Inspector | code.graph |
method(必須)、stub
|
ゲームのメソッドをブロックと分岐で(ページ専用) |
| Inspector | code.type |
type(必須) |
型のメソッドをまとまりごとに、その間の呼び出しとともに(ページ専用) |
| Inspector | code.callers |
method(必須) |
そのメソッドを呼ぶメソッド(ページ専用) |
| Inspector | code.search |
text(必須)、max
|
名前にそのテキストを含む型とメソッド(ページ専用) |
| Inspector | code.stats |
コードの索引の大きさ(ページ専用) | |
| Assets | assets.textures.list |
filter、max
|
メモリにあるテクスチャと大きさ |
| Assets | assets.materials.list |
filter、max
|
読み込まれているマテリアルと、そのシェーダーとテクスチャ |
| Assets | assets.meshes.list |
filter、max
|
読み込まれているメッシュと、頂点数・サブメッシュ数 |
| Assets | assets.replacements.list |
filter |
Mod が入れているテクスチャの差し替え:テクスチャ、Mod、言語、ファイル |
| Assets | assets.fonts.language |
フォントを用意している言語 | |
| Dialogue | dialogue.current |
動いているノード、台詞か選択肢が出ているか、最後の台詞 | |
| Dialogue | dialogue.recent |
text、max
|
このセッションで出た最近の台詞と選択肢(100 件まで)、話し手つき |
| Text | text.rewriters |
ゲームのテキストを書き換える Mod を、動く順に | |
| Text | text.shown |
text(必須)、max
|
画面のテキスト:ゲームが設定したものと、表示されているもの |
| Flags and saves | saves.list |
セーブスロットと、そのレベル、履歴のコピーの数 | |
| Flags and saves | saves.flags.list |
slot(必須)、filter
|
スロットのイベントフラグと、フラグカタログの説明 |
| Flags and saves | saves.flags.get |
slot、id(どちらも必須) |
1 つのイベントフラグ |
| Bridge |
bridge.page.open(書き換え) |
focus |
この PC の Bridge のページを、サインインした状態で開く |
| Overrides | objects.writes |
このセッションで Overrides ライブラリが変えたもの、誰が頼んだか、同じところを変えた別の Mod |
1.4.1 では、Overrides ライブラリにグラフ向けの書き込みが 3 つ(objects.member.set、objects.material.set、objects.active.set)入り、Graphs ライブラリ自身の graphs.* も入りました。こちらはページのエディター専用で、ほかからは見えません。
各引数の説明と範囲は、Console の op help <name> で見られます。
Players
Mod authors
- Getting started
- Playing well with others (the guide)
- Going online
- Installer
- Mod reload
- Overrides (no code)
- Graphs (no code, makes things happen)
Tools (F1, developer tools)
- Inspector
- Console
- Code graph
- Bridge (AI clients, MCP)
API
日本語
- ホーム
- プレイヤー向け · ランチャー · FAQ · クラッシュレポート
- はじめての Mod · ほかの Mod と一緒に動かす · 外と通信する Mod · インストーラー · Mod の再読み込み · Overrides · Graphs
- Inspector · Console · コードのグラフ · Bridge
- 中核 API · 操作の登録簿 · Text · Dialogue · Tool window · Assets · Flags and saves · GameEvents · SettingMeta
Links
- Repository
- Releases
- Changelog
- Design records: DESIGN · ROADMAP · CONTENT_POLICY