準備
本ページでは、東方管制塔 EX ver0.2.0-alpha 以降、および東方管制塔 EX プラグイン基底ライブラリ ver0.1.0-alpha をベースにプラグインを作成することを想定しています。
プラグイン基底ライブラリのバージョン情報の確認は、東方管制塔 EX のメインウィンドウの [ヘルプ(H)]→[プラグイン基底ライブラリについて] から確認できます。
目次
総論
東方管制塔 EX プラグインの作成には C# を用います。
プラグインの作成に必要なソフトウェアおよびフレームワークは以下の通りです。
Microsoft Visual Studio
.NET SDK
ThGameMgr.Ex.Plugin.dll
Microsoft Visual Studio および .NET SDK は適宜インストールしてください。
ThGameMgr.Ex.Plugin.dll は東方管制塔 EX の実行ファイル(ThGameMgr.Ex.exe)とともに配布されていますのでそちらをご利用ください。
また、東方管制塔 EX 内部では、各作品に string 値の Game ID を割り当てて扱っているので、プラグインでも同様に Game ID に対応する必要があります。
以下に Game ID と割り当てられている作品について示します。
Game ID | 作品名 |
Th06 | 東方紅魔郷 |
Th07 | 東方妖々夢 |
Th08 | 東方永夜抄 |
Th09 | 東方花映塚 |
Th10 | 東方風神録 |
Th11 | 東方地霊殿 |
Th12 | 東方星蓮船 |
Th13 | 東方神霊廟 |
Th14 | 東方輝針城 |
Th15 | 東方紺珠伝 |
Th16 | 東方天空璋 |
Th17 | 東方鬼形獣 |
Th18 | 東方虹龍洞 |
プラグインの仕様
東方管制塔 EX のプラグインは .dll 形式で、東方管制塔 EX 起動時にすべて読み込まれます。
プラグインは 東方管制塔 EX の実行ファイル(ThGameMgr.Ex.exe)と同じディレクトリにある Plugin ディレクトリにインストールされます。
プラグイン読み込みは Plugin ディレクトリ直下および全サブディレクトリ下にあるすべての .dll ファイルが対象となります。
すなわち、Plugin ディレクトリにある .dll ファイルは、どの階層にあるかにかかわらず東方管制塔 EX の起動時にプラグインであるかどうかの検証が行われ、
適宜プラグインとして読み込まれます。
プラグインを作り始める
では、実際にプラグインを作成していきましょう。
- Visual Studio を起動する。
- .NET クラスライブラリプロジェクトまたは .NET WPF クラスライブラリプロジェクトを作成する。
ウィンドウやダイアログをもつプラグインを作る場合、.NET WPF クラスライブラリプロジェクトを選択しましょう。
- ThGameMgr.Ex.Plugin.dll をプロジェクトの参照に追加する。
ソリューションエクスプローラーからプロジェクトを右クリックし、[追加(D)]→[プロジェクト参照(R)]から参照マネージャーが起動するので
左のペインから[参照]を選択し、右下の[参照(B)]ボタンから ThGameMgr.Ex.Plugin.dll を選択して追加します。
詳しくは
参照マネージャーで参照を追加する - Visual Studio (Windows) | Microsoft Learn
- 任意のソースファイルの先頭に using ThGameMgr.Ex.Plugin を追加し、そのソースファイル内で実装されている任意のクラスに以下のいずれかの基底クラスを継承し、必要なプロパティおよびメソッドを実装する。
-
StartGamePluginBase
-
SelectedGamePluginBase
-
GameFilesPluginBase
-
ToolPluginBase
作りたいプラグインの役割に応じて、継承するべき基底クラスが異なります(後述)。
プラグイン基底クラスを継承したクラスがプラグインとして認識されるため、1つのdll内に複数のプラグインを実装することが可能です。
プラグインを作る:ゲーム起動プラグイン
ゲーム起動プラグインは、ゲームを起動する機能を提供するプラグインです。
例えば、東方管制塔 EX 標準の vpatch.exe や thprac 適用機能のように、外部ツールを適用してゲームを起動する機能を実現することができます。
このプラグインを作るには、基底クラス StartGamePluginBase を継承する必要があります。
このプラグインは、東方管制塔 EX のメインウィンドウで選択中のゲームについて、その Game ID とゲームの実行ファイルのパスが与えられます。
必須プロパティ
プロパティ名 | 型 | 説明 |
Name | string | プラグインの名前を返します。 |
Version | string | プラグインのバージョンを返します。 |
Developer | string | プラグインの開発者名を返します。 |
Description | string | プラグインの説明テキストを返します。 |
CommandName | string | メニューに表示されるテキストを返します。 |
必須関数
関数名 | 返り値 | 引数 |
Main | System.Diagnostics.Process型 | string gameId, string gameFilePath |
プラグイン呼び出し時に実行される関数は Main(string gameId, string gameFilePath) です。
必須プロパティおよび関数のアクセス修飾子はpublicに指定してください。
関数の引数について
- gameId
東方管制塔 EX のメインウィンドウで選択中のゲームについて、その Game ID が代入されます。(string値)
- gameFilePath
東方管制塔 EX のメインウィンドウで選択中のゲームについて、その実行ファイルのパスが代入されます。(string値)
返り値について
関数の返り値の型は、
System.Diagnostics名前空間
の
Process型
です。
プラグインで起動したゲームプロセスのインスタンスをProcess型として返してください。
プラグイン呼び出し後、返されたProcessがゲームプロセスのものであるかどうか、東方管制塔 EX によって判定されます。
参考
東方管制塔開発部が提供する AutoThpracSelector は、ゲーム起動プラグインに該当します。
AutoThpracSelector(GitHub)
プラグインを作る:単一ゲームファイルプラグイン
単一ゲームファイルプラグインは、東方管制塔 EX のメインウィンドウで選択中のゲームの実行ファイルにアクセスできるプラグインです。
このプラグインを作るには、基底クラス SelectedGamePluginBase を継承する必要があります。
このプラグインは、東方管制塔 EX のメインウィンドウで選択中のゲームについて、その Game ID とゲームの実行ファイルのパスが与えられます。
必須プロパティ
プロパティ名 | 型 | 説明 |
Name | string | プラグインの名前を返します。 |
Version | string | プラグインのバージョンを返します。 |
Developer | string | プラグインの開発者名を返します。 |
Description | string | プラグインの説明テキストを返します。 |
CommandName | string | メニューに表示されるテキストを返します。 |
必須関数
関数名 | 返り値 | 引数 |
Main | なし | string gameId, string gameFile |
プラグイン呼び出し時に実行される関数は Main(string gameId, string gameFile) です。
必須プロパティおよび関数のアクセス修飾子はpublicに指定してください。
関数の引数について
- gameId
東方管制塔 EX のメインウィンドウで選択中のゲームについて、その Game ID が代入されます。(string値)
- gameFile
東方管制塔 EX のメインウィンドウで選択中のゲームについて、その実行ファイルのパスが代入されます。(string値)
参考
東方管制塔開発部が開発中の東方管制塔 EX ファイルマネージャは、単一ゲームファイルプラグインに該当します。
東方管制塔 EX ファイルマネージャ(GitHub)
プラグインを作る:全ゲームファイルプラグイン
全ゲームファイルプラグインは、東方管制塔 EX にパスが登録されている全ゲームの実行ファイルパスにアクセスできます。
このプラグインを作るには、基底クラス GameFilesPluginBase を継承する必要があります。
このプラグインは、東方管制塔 EX にパスが登録されている作品の Game ID のリストと、各々のゲームの実行ファイルパスが与えられます。
必須プロパティ
プロパティ名 | 型 | 説明 |
Name | string | プラグインの名前を返します。 |
Version | string | プラグインのバージョンを返します。 |
Developer | string | プラグインの開発者名を返します。 |
Description | string | プラグインの説明テキストを返します。 |
CommandName | string | メニューに表示されるテキストを返します。 |
必須関数
関数名 | 返り値 | 引数 |
Main | なし | List<string> availableGamesList, Dictionary<string, string> availableGameFilesDictionary |
プラグイン呼び出し時に実行される関数は Main(List<string> availableGamesList, Dictionary<string, string> availableGameFilesDictionary) です。
必須プロパティおよび関数のアクセス修飾子はpublicに指定してください。
関数の引数について
- availableGamesList
東方管制塔 EX にパスが登録されている作品の Game ID のリストが代入されます。(List<string>型)
- availableGameFilesDictionary
東方管制塔 EX にパスが登録されている作品の Game ID を Key 、実行ファイルパスを Value とする Dictionary が代入されます。(Dictionary<string, string>型)
プラグインを作る:ツールプラグイン
ツールプラグインは、独立した機能をもつプラグインです。
このプラグインを作るには、基底クラス ToolPluginBase を継承する必要があります。
このプラグインは、一切のデータが与えられず、完全に自由で独立な機能をもったプラグインを作ることができます。
必須プロパティ
プロパティ名 | 型 | 説明 |
Name | string | プラグインの名前を返します。 |
Version | string | プラグインのバージョンを返します。 |
Developer | string | プラグインの開発者名を返します。 |
Description | string | プラグインの説明テキストを返します。 |
CommandName | string | メニューに表示されるテキストを返します。 |
必須関数
プラグイン呼び出し時に実行される関数はMain()です。
必須プロパティおよび関数のアクセス修飾子はpublicに指定してください。