omodとはOblivion Mod Managerで作るModパッケージファイルです。
ObMMを導入して使いこなしている方は普通にomodを作成して日々Modの出し入れに
活用されていると思います。
さて、omodにはScript機能があります。
Scriptの出来る事はあんまり自由度が高くないのですが、しかし、ウィザードを作る程度なら
十分使えます。ウィザード機能が付いたomodファイルを利用された事がある方も多いでしょう。
ここでは簡単なウィザード用omod用Scriptの解説をします
(基本的なomodの作成方法は理解できているものとします)。
翻訳からはちょっと離れますが、Mod製作者は時々いろんなバリエーションのesm/espを
アーカイブ内に同梱して配布しています。
これはPlayerの皆さんの好みに合うものを選んでくれという親切心なのですが、
添付文書を読まない人がそれらを全部いれちゃってトラブルの質問スレにやってくる事が
良く有ります。
『同じキャラが3人も居るよ、何で?』っていう質問が良く見られたのはこれの良い例です。
『添付文書くらい読め、このおたんこなーす』と思わなくも無いですが、事前に
omodの形でウィザードにしておけば(彼らがObMMを使う限りは)回避できます。
試してみる価値はあると思いますよ。
; ---------------------------- ; omodをActivateした時に速攻インストール作業に移らないようにする命令 ; ---------------------------- DontInstallAnyPlugins DontInstallAnyDataFiles ; ---------------------------- ; Flag用変数宣言 ; ---------------------------- SetVar FlagJPBooks 0 ; ---------------------------- ; UserにSIの有無を問うてFlagを決定 (0,1) = (SI無, SI有) ; ---------------------------- If DialogYesNo "SIを導入していますか?導入済ならはい(Yes)、未導入ならいいえ(No)を選んで下さい" "バリエーション選択" SetVar FlagJPBooks 1 Else SetVar FlagJPBooks 0 EndIf ; ---------------------------- ; インストール ; ---------------------------- If Equal %FlagJPBooks% 1 CopyPlugin "JPBooks_Vanilla+SI.esp" "JPBooks_Vanilla+SI.esp" Else CopyPlugin "JPBooks_Vanilla.esp" "JPBooks_Vanilla.esp" EndIfコメント(行頭が;なものがコメント行で、Script実行時は無視される)が ちょっとウザイですが、案外簡単ですよね。
CopyPlugin [omod内での名前] [コピー先の名前]という文法です。 よってomod内のesp名と別の名前でインストールする事も出来ます。
CopyPlugin "JPBooks_Vanilla+SI.esp" "JPBooks.esp"また、omod内のespファイルをディレクトリを掘って分類して置き、インストール時に そこから取り出す事も出来ます(階層の区切り文字は\\と二つ重ねている事に注意)。
CopyPlugin "JPBooks\\JPBooks_Vanilla+SI.esp" "JPBooks.esp"これら二つは、espファイルを特定の名前でインストールして欲しいときに有用です (BOSS等によるソートやBSAを読み込ませたい時等)。 また、espファイル以外のtexturesディレクトリ等をまとめてコピーしたい場合は 『CopyDataFolder』という命令があります。 使い方はほぼ同様です(最後のTrueは再帰的にする(サブフォルダも対象にする)という意味)。
CopyDataFolder "textures" "textures" True後、Flag変数を使わずにIfで判定したら直ぐにコピー(CopyPlugin)をした方が コードは単純になります (ファイルコピーは実際は選択ダイアログを全て行った後に行われるので、 Script上では何処に書いても余り問題は無い)。 ですがもっと複雑なScriptになった場合はFlag変数を準備して行った方が見通しがよくなります。 それを踏まえれば、単純なコードのうちから慣れておいた方が良いと思います。
; ---------------------------- ; omodをActivateした時に速攻インストール作業に移らないようにする命令 ; ---------------------------- DontInstallAnyPlugins DontInstallAnyDataFiles ; ---------------------------- ; Flag用変数宣言:夫々で判定をする必要があるのでFlag変数が増える ; ---------------------------- SetVar FlagJPBooksVanilla SetVar FlagJPBooksSI ; ---------------------------- ; JPBooksVanillaの導入 (0,1) = (導入しない, 導入する) ; ---------------------------- If DialogYesNo "JPBooksVanillaを導入しますか?導入するならはい(Yes)、不要ならいいえ(No)を選んで下さい" "JPBooksVanilla選択" SetVar FlagJPBooksVanilla 1 Else SetVar FlagJPBooksVanilla 0 EndIf ; ---------------------------- ; JPBooksSIの導入 (0,1) = (導入しない, 導入する) ; ---------------------------- If DialogYesNo "JPBooksSIを導入しますか?導入するならはい(Yes)、不要ならいいえ(No)を選んで下さい" "JPBooksSI選択" SetVar FlagJPBooksSI 1 Else SetVar FlagJPBooksSI 0 EndIf ; ---------------------------- ; インストール ; ---------------------------- ; JPBooksVanilla If Equal %FlagJPBooksVanilla% 1 CopyPlugin "JPBooksVanilla.esp" "JPBooksVanilla.esp" EndIf ; JPBooksSI If Equal %FlagJPBooksSI% 1 CopyPlugin "JPBooksSI.esp" "JPBooksSI.esp" EndIfこの様にespファイルごとにFlag変数を準備して処理すればOKです。 この方法を使えば3つ以上のespファイルの場合も処理出来ちゃいます。
; ---------------------------- ; お約束 ; ---------------------------- DontInstallAnyPlugins DontInstallAnyDataFiles ; ---------------------------- ; Flag用変数宣言 ; ---------------------------- SetVar FlagJPBooksVanilla SetVar FlagJPBooksVanillaSI ; ---------------------------- ; JPBooks_Vanilla+SIの導入 (0,1) = (導入しない, 導入する) ; ---------------------------- If DialogYesNo "JPBooks_Vanilla+SIを導入しますか?導入するならはい(Yes)、不要ならいいえ(No)を選んで下さい" "JPBooks_Vanilla+SI選択" SetVar FlagJPBooksVanillaSI 1 Else SetVar FlagJPBooksVanillaSI 0 EndIf ; ---------------------------- ; JPBooks_Vanillaの導入 (0,1) = (導入しない, 導入する) ; ---------------------------- If DialogYesNo "JPBooks_Vanillaを導入しますか?導入するならはい(Yes)、不要ならいいえ(No)を選んで下さい" "JPBooks_Vanilla選択" SetVar FlagJPBooksVanilla 1 Else SetVar FlagJPBooksVanilla 0 EndIf ; ---------------------------- ; 検閲! ; ---------------------------- If Equal %FlagJPBooksVanillaSI% 1 If Equal %FlagJPBooksVanilla% 1 Message "FlagJPBooksVanillaSIとFlagJPBooksVanillaを同時に入れるのは無駄です。やり直してください" ; インストール処理の強制終了命令 FatalError EndIf EndIf ; ---------------------------- ; インストール ; ---------------------------- ; JPBooks_Vanilla+SI If Equal %FlagJPBooksVanillaSI% 1 CopyPlugin "JPBooks_Vanilla+SI.esp" "JPBooks_Vanilla+SI.esp" EndIf ; JPBooks_Vanilla If Equal %FlagJPBooksVanilla% 1 CopyPlugin "JPBooks_Vanilla.esp" "JPBooks_Vanilla.esp" EndIfObMM組み込みのScriptエンジンは 論理積 (A且つB)が無いのでIf階層が深くなるのが難点。
Select "JPBooksのインストール", "JPBooks_Vanilla+SI", "JPBooks_Vanilla" Case JPBooks_Vanilla+SI SetVar FlagJPBooks 1 Break Case JPBooks_Vanilla SetVar FlagJPBooks 2 Break Default Message "入力値が不正です" "Error" FatalError EndSelectこれで出せるダイアログは以下の画像の様になります。 どちらか一方しか選択出来ないように強制できるのが利点です。 但し、DialogYesNoと異なり、タイトルバーの内容しか弄れません (画像内の"Select one option"とある部分は弄れない)。 『Select』を『SelectMany』にすると複数を選択できるようになります。 選択肢にDescriptionを付けているomodを見た事が有るかもしれません。 それは『SelectWithDescriptions』で行います。
; ---------------------------- ; この命令で長い行を改行する事が出来るようになる。改行部分には\を加える必要有 ; ---------------------------- AllowRunOnLines SelectManyWithDescriptions "JPBooksのインストール", \ "JPBooksVanilla", \ "Vanilla環境に存在する書籍の内容を日本語に置換します。名詞は英語のままです", \ "JPBooksSI", \ "SI環境に存在する書籍の内容を日本語に置換します(Vanillaの物は含みません)。名詞は英語のままです。" Case JPBooksVanilla SetVar FlagJPBooksVanilla 1 Break Case JPBooksSI SetVar FlagJPBooksSI 1 Break Default Message "入力値が不正です(若しくは何も選択されていません)" "Error" FatalError EndSelectこれで出せるダイアログは以下の画像の様になります (Descriptionボタン位置をクリックするとその例が表示されます)。 SelectMany*なので複数が選択でき、また、*WithDescriptionsなので 夫々についての説明文を出す事が出来ます。 選択肢と説明文の対応は比較しておくと良いでしょう。
先ずは、JPBooksを例にとってみます。 これはメインのJPBooksが2パターン(VanillaのみとVanilla+SIの択一)、 オプションとしてmorrowindJPbooks(ノーマルとライトの択一) が選べます。 更に選んだespをばらばらで入れるかマージしたものを入れるかも選択できます。 ObMMでのインストール時にespをマージ出来れば良いのですが不可能なので omod内にバラバラのespとマージしたespの全てを準備しておかないといけないのが 作成者側の手間になります(Script書くよりこっちの方が面倒)。 omod作成時のディレクトリ構造は以下の画像のようになっています。処理上分かり易くする為に同じグループのespごとにディレクトリを分けてあります。
以上の構造を踏まえて作成したScriptが次のものです。
こちらの注目部分はバージョンチェック(及びSI有無の確認)・LoadEarly命令・
インストールespを案内する仕組み・インストールキャンセルの仕組み
(途中でキャンセルできるというのは結構便利)等です。
LoadEarlyはObMMのHelpには明確に記述されていませんが利用できるものです。
これを指定すると対象のespはロードオーダーの頭に移動されます(*.esmよりは後)。
ObMM Script for JPBooks 11.1.20
その後、Scriptをかなり書き換えました。
環境チェックを多少強化し、提案する選択肢にそれを反映させています。
ただし、ObMMのOblivionバージョンチェックが多少怪しいことが分かったので回避処理を盛り込んでいます。
ObMM Script for JPBooks 11.9.22
ObMM Script for From2ch Lives v1.3.1
こちらの注目部分は、バージョンチェックや前段階での選択で後の選択を切り替える方法 (From2ch Livesメインespを入れないとAddonが入れられない仕組み)や 選択したespに応じて新たにSelectダイアログを作成する部分です(不死属性版を選ぶ部分)。