東方管制塔 EX プラグインのつくりかた | 東方管制塔開発部
東方管制塔 EX プラグインのつくりかた

このページは工事中です…

準備
本ページでは、東方管制塔 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 の起動時にプラグインであるかどうかの検証が行われ、 適宜プラグインとして読み込まれます。

    プラグインを作り始める
    では、実際にプラグインを作成していきましょう。
    1. Visual Studio を起動する。
    2. .NET クラスライブラリプロジェクトまたは .NET WPF クラスライブラリプロジェクトを作成する。
    3. ウィンドウやダイアログをもつプラグインを作る場合、.NET WPF クラスライブラリプロジェクトを選択しましょう。

    4. ThGameMgr.Ex.Plugin.dll をプロジェクトの参照に追加する。
    5. ソリューションエクスプローラーからプロジェクトを右クリックし、[追加(D)]→[プロジェクト参照(R)]から参照マネージャーが起動するので 左のペインから[参照]を選択し、右下の[参照(B)]ボタンから ThGameMgr.Ex.Plugin.dll を選択して追加します。
      詳しくは 参照マネージャーで参照を追加する - Visual Studio (Windows) | Microsoft Learn

    6. 任意のソースファイルの先頭に using ThGameMgr.Ex.Plugin を追加し、そのソースファイル内で実装されている任意のクラスに以下のいずれかの基底クラスを継承し、必要なプロパティおよびメソッドを実装する。
      • StartGamePluginBase
      • SelectedGamePluginBase
      • GameFilesPluginBase
      • ToolPluginBase
    作りたいプラグインの役割に応じて、継承するべき基底クラスが異なります(後述)。
    プラグイン基底クラスを継承したクラスがプラグインとして認識されるため、1つのdll内に複数のプラグインを実装することが可能です。

    プラグインを作る:ゲーム起動プラグイン
    ゲーム起動プラグインは、ゲームを起動する機能を提供するプラグインです。 例えば、東方管制塔 EX 標準の vpatch.exe や thprac 適用機能のように、外部ツールを適用してゲームを起動する機能を実現することができます。 このプラグインを作るには、基底クラス StartGamePluginBase を継承する必要があります。 このプラグインは、東方管制塔 EX のメインウィンドウで選択中のゲームについて、その Game ID とゲームの実行ファイルのパスが与えられます。
    必須プロパティ
    プロパティ名説明
    Namestringプラグインの名前を返します。
    Versionstringプラグインのバージョンを返します。
    Developerstringプラグインの開発者名を返します。
    Descriptionstringプラグインの説明テキストを返します。
    CommandNamestringメニューに表示されるテキストを返します。
    必須関数
    関数名返り値引数
    MainSystem.Diagnostics.Process型string gameId, string gameFilePath

    プラグイン呼び出し時に実行される関数は Main(string gameId, string gameFilePath) です。
    必須プロパティおよび関数のアクセス修飾子はpublicに指定してください。

    関数の引数について

    返り値について
    関数の返り値の型は、 System.Diagnostics名前空間Process型 です。 プラグインで起動したゲームプロセスのインスタンスをProcess型として返してください。 プラグイン呼び出し後、返されたProcessがゲームプロセスのものであるかどうか、東方管制塔 EX によって判定されます。

    参考
    東方管制塔開発部が提供する AutoThpracSelector は、ゲーム起動プラグインに該当します。
    AutoThpracSelector(GitHub)

    プラグインを作る:単一ゲームファイルプラグイン
    単一ゲームファイルプラグインは、東方管制塔 EX のメインウィンドウで選択中のゲームの実行ファイルにアクセスできるプラグインです。 このプラグインを作るには、基底クラス SelectedGamePluginBase を継承する必要があります。 このプラグインは、東方管制塔 EX のメインウィンドウで選択中のゲームについて、その Game ID とゲームの実行ファイルのパスが与えられます。
    必須プロパティ
    プロパティ名説明
    Namestringプラグインの名前を返します。
    Versionstringプラグインのバージョンを返します。
    Developerstringプラグインの開発者名を返します。
    Descriptionstringプラグインの説明テキストを返します。
    CommandNamestringメニューに表示されるテキストを返します。
    必須関数
    関数名返り値引数
    Mainなしstring gameId, string gameFile

    プラグイン呼び出し時に実行される関数は Main(string gameId, string gameFile) です。
    必須プロパティおよび関数のアクセス修飾子はpublicに指定してください。

    関数の引数について
    参考
    東方管制塔開発部が開発中の東方管制塔 EX ファイルマネージャは、単一ゲームファイルプラグインに該当します。
    東方管制塔 EX ファイルマネージャ(GitHub)

    プラグインを作る:全ゲームファイルプラグイン
    全ゲームファイルプラグインは、東方管制塔 EX にパスが登録されている全ゲームの実行ファイルパスにアクセスできます。 このプラグインを作るには、基底クラス GameFilesPluginBase を継承する必要があります。 このプラグインは、東方管制塔 EX にパスが登録されている作品の Game ID のリストと、各々のゲームの実行ファイルパスが与えられます。
    必須プロパティ
    プロパティ名説明
    Namestringプラグインの名前を返します。
    Versionstringプラグインのバージョンを返します。
    Developerstringプラグインの開発者名を返します。
    Descriptionstringプラグインの説明テキストを返します。
    CommandNamestringメニューに表示されるテキストを返します。
    必須関数
    関数名返り値引数
    MainなしList<string> availableGamesList,
    Dictionary<string, string> availableGameFilesDictionary

    プラグイン呼び出し時に実行される関数は Main(List<string> availableGamesList, Dictionary<string, string> availableGameFilesDictionary) です。
    必須プロパティおよび関数のアクセス修飾子はpublicに指定してください。

    関数の引数について

    プラグインを作る:ツールプラグイン
    ツールプラグインは、独立した機能をもつプラグインです。 このプラグインを作るには、基底クラス ToolPluginBase を継承する必要があります。 このプラグインは、一切のデータが与えられず、完全に自由で独立な機能をもったプラグインを作ることができます。
    必須プロパティ
    プロパティ名説明
    Namestringプラグインの名前を返します。
    Versionstringプラグインのバージョンを返します。
    Developerstringプラグインの開発者名を返します。
    Descriptionstringプラグインの説明テキストを返します。
    CommandNamestringメニューに表示されるテキストを返します。
    必須関数
    関数名返り値引数
    Mainなしなし

    プラグイン呼び出し時に実行される関数はMain()です。
    必須プロパティおよび関数のアクセス修飾子はpublicに指定してください。