Thinking Skeever

Skyrim/The Witcher 3 Modについてのあれこれ。FoModの作り方、Mod導入時のトラブル事例などのニッチな話を書いていきます。a.k.a. BowmoreLover@nexusmods

FOModの作り方(Xml Tips)

FOMod(Xml)に関するTipsをまとめておきます。

必ずコピーするファイルの記述方法

どのオプションを選んでも必ずコピーするファイルがある場合、次の3つの方法で記述できます。

方法1:必ず通過するページを利用

必ず通過するページに、常に選択される選択肢を用意して記述します。
チュートリアル2チュートリアル4で用いた方法です。

<installStep name="">
    <optionalFileGroups order="Explicit">
        <group name="ようこそ!" type="SelectExactlyOne">
            <plugins order="Explicit">
                <plugin name="ようこそ">
                    <description>
                        次のページでインストールオプションが選べます。
                    </description>
                    <image path="FOMod\Images\Intro.jpg"/>
                    <!-- *** 必ずコピーするファイル *** -->
                    <files>
                        <folder source="00 Core Meshes" destination="" priority="0"/>
                        <file source="10 Esps\coreModule.esp" destination="coreModule.esp" priority="0"/>
                    </files>
                    <typeDescriptor>
                        <type name="Required"/>
                    </typeDescriptor>
                </plugin>
                    :

方法2:<requiredInstallFiles>を使う

ModuleConfig.xml先頭の<moduleName>と<installSteps>の間に<requiredInstallFiles>を追加して記述します。

<?xml version="1.0" encoding="UTF-16"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://qconsulting.ca/fo3/ModConfig5.0.xsd">
    <moduleName>FOMod Tutorial 02</moduleName>
    <!-- *** 必ずコピーするファイル *** -->
    <requiredInstallFiles>
        <folder source="00 Core Meshes" destination="" priority="0"/>
        <file source="10 Esps\coreModule.esp" destination="coreModule.esp" priority="0"/>
    </requiredInstallFiles>

    <installSteps order="Explicit">
            :

方法3:<conditionalFileInstalls>にコピー条件のない<pattern>を定義する

<conditionalFileInstalls>に<dependencies>の中身が空の<pattern>を定義します。

<conditionalFileInstalls>
    <patterns>
        <!-- *** 必ずコピーするファイル *** -->
        <pattern>
            <dependencies>
            </dependencies>
            <files>
                <folder source="00 Core Meshes" destination="" priority="0"/>
                <file source="10 Esps\coreModule.esp" destination="coreModule.esp" priority="0"/>
            </files>
        </pattern>
            :

priority属性について

<file>と<folder>にはコピー順序を指定するpriority属性が指定できます。
priority属性には"0"以上の数字が指定できます。複数の項目に対して同じ値を指定してもかまいません。
省略したときは"0"が仮定されるはずですが、明示的に記述したほうが安全と思われます。

FOModインストーラがファイルをコピーする際、ModuleConfig.xml内に記載された<file>と<folder>をpriority属性の昇順にソートし、その順序でコピーを行うようです(もちろん選択していないものは除外されます)。
priorityが同一の場合は記述順となります。
同一のファイルに対するコピーを複数回指定した場合、priority属性が一番大きく、一番最後に記述されたものが最終的にコピーされます。

ModuleConfig.xml中に次の順序で<file>が出現するものとします。

<file source="11 Type1\Follower.esp" destination="Follower.esp" priority="0"/>
<file source="12 Type2\Follower.esp" destination="Follower.esp" priority="2"/>
<file source="13 Type3\Follower.esp" destination="Follower.esp" priority="5"/>
<file source="14 Type4\Follower.esp" destination="Follower.esp" priority="5"/>
<file source="15 Type5\Follower.esp" destination="Follower.esp" priority="1"/>

この場合、ファイルはType1 -> Type5 -> Type2 -> Type3 -> Type4の順にコピーされ、最終的にType4がインストールされます。

  • 注意
    • 詳細未確認ですが、MOのとき特定条件化でpriorityどおりファイルが上書きされないことがあるようです。priorityによる上書きに依存したインストールを行う場合、リリース前にNMM/MO両方で動作検証することをお勧めします。

修正履歴

  • 2015/05/25 00:53 priorityの注意事項を追記

Copyright (C) 2015-2020 ThinkingSkeever, All Rights Reserved.
ブログの記事内に記載されているメーカー名、製品名称等は、日本及びその他の国における各企業の商標または登録商標です。
リンクはご自由に。記事の転載はご遠慮ください。記事を引用する場合はトラックバックするか元のURLを明記してください。