-
-
Notifications
You must be signed in to change notification settings - Fork 2
Going online ja
English | 日本語
実験的な機能です。 中核 1.2.0 で入ったもので、
mods networkは Tool window 1.1.0 で入りました(フレームワーク 1.2.0、2026-09-17)。
Mod はゲームと同じ権限で動くので、何でもどこへでも送れます。プレイヤーからはそれが見えませんし、Mod のソースを読む人もほとんどいません。そこでフレームワークには、単純な決まりがあります。外と通信する Mod はそのことを申告し、プレイヤーは驚く前に Mods 画面でそれを確かめられる。
外との通信は、マルウェアが紛れ込む場所にもなります。Mod はプレイヤーのファイルを外へ送ったり、コードを取ってきて動かしたりしながら、見た目は普通の Mod のままでいられます。人をだますように作られた Mod は、フレームワークには止められません(これができないこと)。できるのは、外と通信するならどの Mod も必ずそれを公に申告する、という決まりにすることです。そうすれば、
- プレイヤーは、遊ぶ前にも遊んでいる間にも、どの Mod がどこと何のために通信するかを確かめられる
- 申告していない所へつないだ Mod は、Mods 画面とログで目立ち、プレイヤーやレビューする人、ほかの Mod 作者の目に留まる
- 正直な Mod 作者には、自分の Mod が何をするかを伝える、分かりやすい決まった方法がある
仕組みは 3 つに分かれています。Mod 作者向けのルール(GUIDE のルール 11)、Mods 画面に表示される ModInfo.Network での申告、それから、どの Mod が実際に通信したかを記録して、申告していない Mod に印を付ける見張りです。
インターネットにつなぐ Mod は、つなぐ先のホストをすべて ModInfo.Network に並べて、何のためか、何を送るか、どう止めるかを書きます。プレイヤーについての情報(名前、セーブ、入力した文字、その人を追える ID)は、本人がオンにしてから送ります。プレイヤーについて何も送らない確認なら、フレームワークの更新確認のように既定でオンにしておいても構いません。
ModFramework.Register(new ModInfo
{
Guid = MyMod.Guid,
DisplayName = "My Mod",
Network = new[]
{
new NetworkUse
{
Host = "api.example.com", // または "*.example.com"
Purpose = "Downloads the latest word list once a day.",
Sends = "The language you chose. Nothing that identifies you.",
TurnOff = "Mods → My Mod → Settings → Online word list",
},
},
});- ホストは完全に同じものだけが合います。
*.example.comと書けば、example.comとその下すべてに合います。アドレスへ直接つなぐ Mod は、そのアドレスを申告します。 -
UpdateRepositoryのためには、何も足さなくて大丈夫です。その問い合わせ(api.github.comへ)はフレームワークが Mod の代わりにして、申告もフレームワークがやります。フレームワーク自身の更新確認も同じように申告しています。プレイヤーが更新確認をオフにすると、これらの項目は消えます。 -
TurnOffには、プレイヤーが Mods 画面でたどる道筋を書いてください。
Mods 画面(Options → Mods)では次のように出ます。
- 一覧では、ホストを申告しているか、通信しているのが見られた Mod に Online(オンライン) のタグが付きます。
- 詳細には Uses the internet:(インターネットを使用)と接続先が出ます。
- Mod の Internet タブには、接続先ごとに What for(何のため)、What is sent(何を送るか)、How to turn it off(止め方)が並び、続けて、このセッションでその Mod が接続したのが見られた先が出ます。About や Settings と並ぶタブになったのは1.5.0 からで(1.5.0)、それまでは Settings の上のボタンで開くページでした。
- 警告色で出ていたら、その Mod は申告していない接続先へつないだということです。詳細には Went online without saying so:(申告せずに通信した)と Internet タブへのボタンが出て、タブには警告色の点が付き、タブの中ではその接続先に not declared by the mod(Mod が申告していない)と付きます。一覧の Needs attention の絞り込みにも入ります(1.5.0)。ログにも警告が出ます。
Console の mods network でも、読み込まれている全プラグインについて同じ内容を出せます。
NetworkWatch(Mods → Drag'n Wash ModFramework → Settings → Watch connections、[Network] Watch connections、既定でオン)は、どの Mod がどこへ接続したかを記録します。見張るのは次の呼び出しです。
| API | 見張る所 |
|---|---|
UnityWebRequest |
SendWebRequest() |
WebRequest(WebClient も経由する) |
Create・CreateDefault・CreateHttp
|
HttpClient |
Get / Post / Send がすべて行き着く SendAsync(request, option, token)。System.Net.Http が読み込まれた時点から |
Socket |
Connect(EndPoint)・Connect(host, port)・BeginConnect(EndPoint, ...)・BeginConnect(host, port, ...)・ConnectAsync(SocketAsyncEventArgs)・SendTo(..., EndPoint)
|
TcpClient |
Connect(host, port) |
呼び出しがあるたびに、呼び出し元のスタックで最初に見つかったプラグインを探して、Mod とホストと API を記録します。ある Mod があるホストに初めてつないだとき、申告済みならログに情報を 1 行出します。申告していなければログに警告を出して、上に書いた印を Mods 画面に付けます。
-
数えるのは一番外側の呼び出しだけです。
CreateHttpはCreateを、Connect("host")はConnect(アドレス)を呼びますが、残すのはホスト名の入った 1 件だけです。HttpWebRequest・HttpClient・TLS の中で開かれるソケットは、それを始めた呼び出しの側で数えます。 -
file:やjar:のようなネットワークでない URL と、localhostやループバックのアドレスは数えません。名前解決(Dns)も見張りません。名前解決だけなら、リゾルバーに名前が送られるだけだからです。 - 記録はスタック上の最初のプラグインに付きます。 ライブラリが Mod の代わりに通信すれば、ライブラリの分になります。後で別スレッドで動き、スタックに Mod がいないコード(async の続き)は、誰の分にもせず、記録もしません。それを始めた呼び出しのほうで、もう記録してあるからです。
- 負荷としては、見張る呼び出しのたびにスタックをたどりますが、通信はめったにないので問題になりません。
見張るだけです。何も止めず、遅らせず、変えません。見張りの中で何か失敗しても握りつぶすので、Mod の通信はそのまま進みます。
安全を保証する仕組みではありません。 ネイティブコード、Mod が自前で持つソケットのライブラリ、見張りを外す Harmony の小細工、呼び出し元を隠すコードは、すり抜けます。正直な使い方を見えるようにして、うっかりを目立たせるためのもので、Mod が安全だと証明することはできません。Internet タブにも、そのことを 1 行で書いています。
- ある Mod の通信を止めるには、その Mod の Internet タブの How to turn it off(止め方)に従うか、Mods 画面でその Mod をオフにします。
- 更新確認(フレームワークのものと、
UpdateRepositoryを設定したすべての Mod のもの)は、Mods → Drag'n Wash ModFramework → Settings → Check for updates でオフにします。 - 見張りそのものは、Mods → Drag'n Wash ModFramework → Settings → Watch connections でオフにします。オフにすると何も記録せず、Internet タブには見張りがオフだと出ます。申告の表示はそのまま残ります。
| API | メンバー |
|---|---|
NetworkUse |
Host、Purpose、Sends、TurnOff
|
ModInfo.Network |
NetworkUse[] |
NetworkWatch.Enabled |
プレイヤーの設定 |
NetworkWatch.DeclaredBy(guid) |
Mod の申告と、その Mod のためのフレームワークの更新確認 |
NetworkWatch.SeenBy(guid) / All()
|
このセッションの Connection:Guid、Host、Via、Count、Declared、FirstSeenUtc
|
NetworkWatch.HasUndeclared(guid) |
申告していないホストへ接続していれば true |
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