Nintendo MessageStudio ヘルプ

# プラグイン作成のチュートリアル

## プラグイン作成の概要

Message Studioのプラグインは.NET Frameworkのクラスライブラリ(*.dll)として作成します。 そのため、.NETアセンブリを作成可能なプログラミング言語に関する知識が必須になります。 具体的には、Visual Basic.net、C#、Iron Pythonなどが利用可能です。

この章では、Microsoft Visual StudioとC#を用いてMessage Studioのプラグインを作成するための方法を紹介します。 もちろん、Visual Studio以外のソフトウエアを用いても作成は可能ですが、ここでは割愛させていただきます。 プラグイン作成に対応しているVisual Studioはバージョン2005以上です。 無料で入手可能なExpress Editionでも作業に問題はありません。

※画像と作業手順はVisual Studio 2008 Standard Editionを元に解説します。 エディションとバージョンによっては一部存在しないメニュー項目があるかもしれません。

## プロジェクトの作成

まずはMicrosoft Visual Studioを起動して、プロジェクトを作成します。 Visual C# のクラスライブラリを選択します。.NET Frameworkは2.0を選択します(Visual Studio 2005では常に2.0になります)。 プロジェクト名としてプラグイン名を入力してください。

プロジェクトが作成できたら、次にMessage Studioのパッケージの中からbinディレクトリをコピーします。 コピーするときに、ディレクトリの名前を適当なものに変更しておいてください(たとえば「MessageStudioBin」など)。

次に、参照設定を追加します。 参照設定に追加すると、.NETアセンブリの中に登録されたpublic宣言のクラスやインターフェイスを利用することが可能になります。 Visual Studioのソリューションエクスプローラの中にある、参照設定を右クリックし、「参照の追加」を選びます。

タブの中から、「参照」を選び、先ほどコピーしたMessageStudio.exeを選択してOKを選んでください。 さらに、System.Windows.Forms.dllの参照設定も追加します。 これは.NET標準のライブラリなので、「参照」によってファイルを選ぶのではなく.NETコンポーネントの中から選択します。

これで、プラグインプロジェクトを作成するための準備が整いました。

## 単純なプラグインの作成

それでは実際にコーディング作業に入りましょう。 ここでは、最も単純な例として、Message Studioの本体に追加するメニューの追加をやってみます。

まず最初に、自動生成されたClass1クラスをMyMenuクラスにリネームします。 外部アセンブリからこのクラスにアクセスさせるため、クラスをpublic宣言にします。 続いて、MyMenuクラスがIAdditionalMenuItemPluginを実装するようにします。 このインターフェイスは、MessageStudio.exeの中に含まれています。 Visual Studioによって表示されるメニューによって、ソースコードに利用する名前空間を追加してください (標準設定では、ショートカットキーはShift+Alt+F10です)。 インターフェイスが実装しなければならないメソッドの宣言を追加します。 (これも、インターフェイスのところにカーソルをあわせてShift+Alt+F10を押すと行えます)。 ここまでを実行するとMyMenu.csファイルは以下のような内容になります。

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Nintendo.MessageStudio.Core.Plugin;

    namespace MyPlugin
    {
    	public class MyMenu : IAdditionalMenuItemPlugin
    	{
    		public System.Windows.Forms.ToolStripMenuItem CreateMenuItem()
    		{
    			throw new NotImplementedException();
    		}

    		public AdditionalMenuType MenuType
    		{
    			get { throw new NotImplementedException(); }
    		}

    		public void SetupPlugin( PluginInitArgs args )
    		{
    			throw new NotImplementedException();
    		}

    		public void TearDownPlugin()
    		{
    			throw new NotImplementedException();
    		}
    	}
    }

まずはSetupPluginとTearDownPluginメソッドを実装していきましょう。 今回はこれらの中で特にやることはありません。 実際にはプラグインが初期化されたときと終了されるときの処理を実装することになります。 NotImplementedExceptionをスローしている箇所を削除してください。

CreateMenuItemメソッドの中ではMessage Studioに登録するためのメニューアイテムを作成して返します。 クリックされたときのイベントを登録し「Hello, Message Studio!」と表示するようにしてみます。 ここまでを追加して少し整理したものを例として以下に示します。

    public void SetupPlugin( PluginInitArgs args )
    {
    }

    public void TearDownPlugin()
    {
    }

    public ToolStripMenuItem CreateMenuItem()
    {
    	ToolStripMenuItem menu = new ToolStripMenuItem();
    	menu.Name = "MyMenuItem";
    	menu.Text = "My First Plug-in menu";
    	menu.Click += new EventHandler( menu_Click );
    	return menu;
    }

    private void menu_Click( object sender, EventArgs e )
    {
    	MessageBox.Show( "Hello, Message Studio!" );
    }

次に、メニューをどこに追加するかを指定するプロパティを実装します。 Message Studioの「プロジェクト」メニューの下にアイテムを追加するなら、以下のように記述します。

    public AdditionalMenuType MenuType
    {
    	get { return AdditionalMenuType.ProjectMenu; }
    }

これでプラグインの実装作業が完了しました。 それでは、プラグインのDLLを作成するために、「ビルド」を行います。 作成されたMyPlugin.dllをプラグインとして利用してください。 (プラグインの使用方法は、プラグインについての概要をご覧ください)

プロジェクトファイル(*.msproj)が指定したプラグインパスにMyPlugin.dllがコピーされた状態で Message Studioに開かれると、プラグインが利用され、メニューアイテムが追加されます。

メニューアイテムをクリックすれば、イベントハンドラが呼び出されます。

このようにしてプラグインを作成していきます。 どのようなプラグインが作成可能であるかは、プラグインの種類についてのページをご覧ください。 また、プラグインの実装方法についてのリファレンスマニュアルは、 パッケージのdocディレクトリの下にある、DeveloperGuide.chmというファイルです。 (このドキュメントは英語版は提供されません)。

## サンプルについて

上記の操作を行って作成されたプロジェクトがサンプルとして提供されています。 以下のディレクトリに収められていますので、必要に応じてご覧ください。

samples\plugins\Tutorial\

ただし、このプロジェクトファイルはVisual Studio 2008 Standard Editionで作成されたものです。 また、MessageStudioBinというディレクトリは省略していますので、 コンパイルされるときはbinディレクトリをコピーしてから行ってください。

- はじめに
- Message Studioの基礎
  - ゲーム製作のフロー
  - プロジェクトファイルについて
  - プロジェクトエクスプローラの操作
  - ウインドウ操作
  - 言語設定
  - カラーの設定
  - 属性の設定
- メッセージ編集
  - 基本操作
  - テキストの種類
  - クリップボードを利用した操作
  - 言語セルステータス
  - 表示のカスタマイズ
  - メッセージ一覧画面のTips
- タグ
  - 概要
  - タグを用いた編集
  - タグのソース文字列
  - タグ比較について
- 検索機能
  - 概要
  - 簡易検索
  - 詳細検索
  - 正規表現
- スペルチェック
  - スペルチェックについて
  - スペルチェックの利用方法
- ロールとパーミッション
  - 概要
  - ロールの追加とパーミッションの設定
  - ロールの選択
- メッセージの統計情報
  - 統計情報について
  - 統計情報の利用方法
- スタイル機能と幅計算
  - スタイルと幅計算について
  - テキスト幅の全体チェック
  - レンダリング方式について
  - スタイルの設定方法
- フォント
  - フォント機能の概要
  - フォントに関するワークフローについて
  - フォントの設定
- チーム管理機能
  - 概要
  - ファイル管理のされ方
  - チーム管理機能を利用する
  - 基本操作
  - コミットログを表示する
  - 差分(diff)を表示する
  - 競合とマージ
  - プロキシサーバの設定
  - サーバーの設定
- メタ情報の設定
  - メタ情報の設定について
  - 設定可能なメタ情報一覧
- リソースファイル関連
  - リソースについての概要
  - リソースファイルを出力する
  - 出力設定を行う
  - ビルドイベントについて
  - 共通のバイナリフォーマット
  - メッセージバイナリフォーマット
  - フローチャートバイナリフォーマット
  - プロジェクトバイナリフォーマット
    - プロジェクトバイナリフォーマット
    - カラー情報
    - コンテンツ情報
    - 属性情報
    - タグ情報
    - スタイル情報
  - タグについて
- マクロ文字列展開機能
  - マクロ文字列とは
  - 利用可能なマクロ一覧
- コマンドライン関連
  - コマンドライン制御について
  - /convertスイッチについて
- プラグインについて
  - プラグインの概要
  - プラグインの種類について
- プラグインの作成方法
  - 単純なプラグイン作成チュートリアル
  - 開発環境を利用しない作成方法
  - サンプルについて
- Message Studioのアセンブリ設定
  - Caspol：アセンブリセキュリティ設定
  - Ngen：ネイティブイメージ生成
- XML仕様
  - 概要
  - プロジェクトファイル（.msproj）のXML仕様
  - メッセージファイル（.mstxt）のXML仕様
- libmsについて
  - 概要
  - コンパイルの仕方
- 共通の関数
  - LMS_SetMemFuncs
- メッセージに関する関数
  - LMS_InitMessage
  - LMS_CloseMessage
  - LMS_SearchMessageBlockByName
  - LMS_GetMessageBlockInfoByName
  - LMS_GetTextNum
  - LMS_GetTextIndexByLabel
  - LMS_GetText
  - LMS_GetTextSize
  - LMS_GetTextByLabel
  - LMS_GetLabelByTextIndex
  - LMS_GetTextStyle
  - LMS_GetTextStyleByLabel
  - LMS_GetAttributeSize
  - LMS_GetAttribute
  - LMS_GetAttributeText
- フローチャートに関する関数
  - LMS_InitFlowchart
  - LMS_CloseFlowchart
  - LMS_GetNodeNum
  - LMS_GetEntryNodeIndex
  - LMS_GetNodeDataPtr
  - LMS_GetFlowNodeIndex
  - LMS_GetCaseIndexesFromBranchNode
  - LMS_GetFlowParamText
- プロジェクトに関する関数
  - LMS_InitProject
  - LMS_CloseProject
  - LMS_SearchProjectBlockByName
  - カラー情報に関する関数
    - LMS_GetColorIndexByName
    - LMS_GetColor
    - LMS_GetColorByName
    - LMS_GetColorNum
  - コンテンツ情報に関する関数
    - LMS_GetContentsNum
    - LMS_GetContentPath
  - 属性情報に関する関数
    - LMS_GetAttrInfoIndexByName
    - LMS_GetAttrType
    - LMS_GetAttrTypeByName
    - LMS_GetAttrOffset
    - LMS_GetAttrOffsetByName
    - LMS_GetAttrListItemName
    - LMS_GetAttrListItemNameByName
    - LMS_GetAttrNum
    - LMS_GetAttrListItemNum
  - タグ情報に関する関数
    - LMS_GetTagGroupName
    - LMS_GetTagName
    - LMS_GetTagParamName
    - LMS_GetTagParamType
    - LMS_GetTagListItemName
    - LMS_GetTagGroupNum
    - LMS_GetTagNum
    - LMS_GetTagParamNum
    - LMS_GetTagListItemNum
  - スタイル情報に関する関数
    - LMS_GetStyleIndexByName
    - LMS_GetRegionWidth
    - LMS_GetRegionWidthByName
    - LMS_GetLineNum
    - LMS_GetLineNumByName
    - LMS_GetFontIndex
    - LMS_GetFontIndexByName
    - LMS_GetStyleNum
- 扱うファイルの拡張子一覧
- よくある質問