域名将于6月份到期,并且不再续费,届时网站将无法访问。
6月份之前如果服务器到期将提前关闭网站,请改访问模组网社区

如何将XML脚本转换成Wizard安装向导

说一下如何将 NMM 的 XML 安装脚本转换成 Wrye Bash 的 Wizard 安装向导,不会很难,但可能需要先了解一下 Wizard (可以看完后遇到问题了再回去重新阅读)。

用到的安装包是 塞妮可玲 的 【ARROW&KNEE MOD TEAM™】【重点关注:搏击类武器NMM汉化整合安装版】独立高材质多类型勾爪、拳套和手刀~精美帅气~另外附送黑解附魔~

把安装包下载完打开后如下(我把不相关代码隐藏了)
搏击类武器汉化整合-XML
使用 Nexus Mod Manager 运行后的效果是:
搏击类武器汉化整合1
搏击类武器汉化整合2
搏击类武器汉化整合3

把 最后的效果 与 XML 比较一下,我们可以大致了解:
安装步骤通过installStep定义的,上面的XML脚本定义了三个installStep,所以最终NMM运行时生成三个步骤。
每一个步骤下面会有一个或者多个group,表示该步骤下面会出现相应的项目。
group下面一定会出现plugin,如果有多个plugin,最终该group下面会以多个单选项出现

我们这边先不讨论 group type 的定义

如下图,步骤二 的group 矮人爪 定义了 三个 plugin ,于是有了下面的单选效果
XML-单选与多选
同样的,步骤一 匕首类武器选择 定义了多个 plugin ,但每个 plugin 下面只有一个 plugin ,所以出现上面 多选 的效果

不过,我个人觉得步骤一好丑,艾尔文利爪 前面直接出现一个勾选框不就好了,为什么要在下面多一个 elven 然后才出现勾选框……

先说一下多选框,也就是步骤一。
XML 脚本中的多选框实现方法是installStep下面定义多个group,然后每个group下面对应一个plugin,如下(部分代码省略了)

<installStep name="Claws interface">
  <group name="铁爪" type="SelectAny">
  <group name="玻璃爪" type="SelectAny">
  <group name="兽人爪" type="SelectAny">
  <group name="乌木爪" type="SelectAny">
  <group name="魔族爪" type="SelectAny">
  <group name="龙爪" type="SelectAny">
  <group name="钢质拳套" type="SelectAny">
  <group name="雷迪克之爪" type="SelectAny">
  <group name="艾尔文利爪" type="SelectAny">
 </installStep>

Wizard 中的多选框实现方式是 SelectMany

SelectMany "匕首类武器选择", \
	"选项一", "Description", "image", \
	"选项二", "Description", "image"
	Case "选项一"
		命令1
		Break
	Case "选项二" 
		命令2
		Break
EndSelect

所以把上面的形式转换成 Wizard 便是

SelectMany "匕首类武器选择", \
	"铁爪", "Description", "image", \
	"玻璃爪", "Description", "image", \
	"兽人爪", "Description", "image", \
	"乌木爪", "Description", "image", \
	"魔族爪", "Description", "image", \
	"龙爪", "Description", "image", \
	"钢质拳套", "Description", "image", \
	"雷迪克之爪", "Description", "image", \
	"艾尔文利爪", "Description", "image"
	Case "铁爪"
		命令1
		Break
	Case "玻璃爪" 
		命令2
		Break
	Case "兽人爪"
		命令3
		Break
	Case "乌木爪"
		命令4
		Break
	Case "魔族爪"
		命令5
		Break
	Case "龙爪"
		命令6
		Break
	Case "钢质拳套"
		命令7
		Break
	Case "雷迪克之爪"
		命令8
		Break
	Case "艾尔文利爪"
		命令9
		Break
EndSelect

接下来把每一个选项的细节补齐

XML 里面,第一个选项 铁爪 的形式是

<group name="铁爪" type="SelectAny">
  <plugins order="Explicit">
   <plugin name="iron">
    <description>
     铁质爪器。获得方法:独立锻造或控制台代码XX001004/XX001000。
    </description>
    <image path="fomod\img\01 iron.bmp"/>
    <files>
     <folder source="01 iron" destination="" priority="0"/>
    </files>
    <typeDescriptor>
     <type name="Optional"/>
    </typeDescriptor>
   </plugin>
  </plugins>
 </group>

转换为 Wizard 就是

"铁爪", "Description", "image", \

变成

"铁爪", "铁质爪器。获得方法:独立锻造或控制台代码XX001004/XX001000。", "fomod\\img
\\01 iron.bmp", \

铁质爪器。获得方法:独立锻造或控制台代码XX001004/XX001000。 是从 <description>铁质爪器。获得方法:独立锻造或控制台代码XX001004/XX001000。</description>中转换过来的;
fomod\\img\\01 iron.bmp 是从 <image path=”fomod\img\01 iron.bmp”/> 中转换过来的(注意要把 \ 变成 \\ ,详细原因见 Wizard教程)。
同时,

	Case "铁爪"
		命令1
		Break

变成

	Case "铁爪"
		SelectSubPackage "01 iron"
		Break

01 iron 是由  <files><folder source=”01 iron” destination=”” priority=”0″/></files> 中得来的。

所以,把整个 步骤一 用 Wizard 来表示就是

Show the Content

; 匕首类武器选择
SelectMany "匕首类武器选择", \
	"铁爪", "铁质爪器。获得方法:独立锻造或控制台代码XX001004/XX001000。", "fomod\\img\\01 iron.bmp", \
	"玻璃爪", "玻璃材料的爪器。获得方法:独立锻造或控制台代码XX001034/XX001037。", "fomod\\img\\01 glass.bmp", \
	"兽人爪", "兽人族的爪器。获得方法:独立锻造或控制台代码01001014。", "fomod\\img\\01 orcish.bmp", \
	"乌木爪", "乌木爪器。获得方法:独立锻造或控制台代码XX001024。", "fomod\\img\\01 ebony.bmp", \
	"魔族爪", "魔族的爪器。获得方法:独立锻造或控制台代码XX00103C/XX00103F。", "fomod\\img\\01 daedric.bmp", \
	"龙爪", "龙骨制成的爪器。获得方法:独立锻造或控制台代码XX001044/XX001047。", "fomod\\img\\01 dragonbone.bmp", \
	"钢质拳套", "钢质的拳套。获得方法:独立锻造或控制台代码XX001008。", "fomod\\img\\01 steel.bmp", \
	"雷迪克之爪", "神秘的雷迪克曾使用的爪器。获得方法:独立锻造或控制台代码XX001028。", "fomod\\img\\01 RiddickUlak.bmp", \
	"艾尔文利爪", "艾尔文的利爪。获得方法:独立锻造或控制台代码XX001018/XX001019。", "fomod\\img\\01 elven.bmp"
	Case "铁爪"
		SelectSubPackage "01 iron"
		Break
	Case "玻璃爪"
		SelectSubPackage "01 glass"
		Break
	Case "兽人爪"
		SelectSubPackage "01 orcish"
		Break
	Case "乌木爪"
		SelectSubPackage "01 ebony"
		Break
	Case "魔族爪"
		SelectSubPackage "01 daedric"
		Break
	Case "龙爪"
		SelectSubPackage "01 dragonbone"
		Break
	Case "钢质拳套"
		SelectSubPackage "01 steel"
		Break
	Case "雷迪克之爪"
		SelectSubPackage "01 RiddickUlak"
		Break
	Case "艾尔文利爪"
		SelectSubPackage "01 elven"
		Break
EndSelect

个人感觉这边代码的书写比 Wizard 会比 XML 来的简单。

接下来,说下单选框

因为 Wizard 中一次只能一个单选框,所以上面 步骤二 一下子出现了四个单选框,转换成 Wizard 时我们必须把它分成四个,另外把 SelectMany 改成 SelectOne (多选改成单选)

剩下的利用同样的方法,最终的 Wizard 是

Show the Content

; 可选类武器种类选择
SelectOne "可选类武器种类选择 - 矮人爪", \
	"匕首版", "锻莫遗迹发现的爪器。获得方法:独立锻造或控制台代码XX00102C/XX00102D。", "fomod\\img\\02 dwemer.bmp", \
	"单手锤版", "锻莫遗迹发现的爪器。获得方法:独立锻造或控制台代码XX00102C/XX00102D。", "fomod\\img\\02 dwemer.bmp", \
	"不选择", "不选择此种武器。", ""
	Case "匕首版"
		SelectSubPackage "02 dwemer(dagger)"
		Break
	Case "单手锤版"
		SelectSubPackage "02 dwemer(mace)"
		Break
	Case "不选择"
		Break
EndSelect
SelectOne "可选类武器种类选择 - 银质钻孔器", \
	"匕首版", "银质的尖刺拳套。获得方法:独立锻造或控制台代码XX00100C/XX001010。", "fomod\\img\\02 silver.bmp", \
	"单手锤版", "银质的尖刺拳套。获得方法:独立锻造或控制台代码XX00100C/XX001010。", "fomod\\img\\02 silver.bmp", \
	"不选择", "不选择此种武器。", ""
	Case "匕首版"
		SelectSubPackage "02 silver(dagger)"
		Break
	Case "单手锤版"
		SelectSubPackage "02 silver(mace)"
		Break
	Case "不选择"
		Break
EndSelect
SelectOne "可选类武器种类选择 - 炎爆", \
	"匕首版", "隐藏的火焰拳套,无法升级,但初始攻击力非常强大。获得方法:控制台代码XX00104E/XX00104F(XX0016DA/XX0016DB)。", "fomod\\img\\02 flame.bmp", \
	"单手锤版", "隐藏的火焰拳套,无法升级,但初始攻击力非常强大。获得方法:控制台代码XX001034/XX001037。", "fomod\\img\\02 flame.bmp", \
	"不选择", "不选择此种武器。", ""
	Case "匕首版"
		SelectSubPackage "02 flame(dagger)"
		Break
	Case "单手锤版"
		SelectSubPackage "02 flame(mace)"
		Break
	Case "不选择"
		Break
EndSelect
SelectOne "可选类武器种类选择 - 阿卡维尔·卡塔尔", \
	"匕首版", "神秘的阿卡维尔·卡塔尔。获得方法:独立锻造或控制台代码XX001034/XX001037。", "fomod\\img\\02 akaviri.bmp", \
	"单手剑版", "神秘的阿卡维尔·卡塔尔。获得方法:独立锻造或控制台代码XX001034/XX001037。", "fomod\\img\\02 akaviri.bmp", \
	"不选择", "不选择此种武器。", ""
	Case "匕首版"
		SelectSubPackage "02 akaviri(dagger)"
		Break
	Case "单手剑版"
		SelectSubPackage "02 akaviri(sword)"
		Break
	Case "不选择"
		Break
EndSelect

窗口三则为

Show the Content

; 附魔选择
SelectOne "附魔选择 - 黑解形态附魔", \
	"选择", "可以通过控制台代码XX000D63获得空白的黑解形态附魔原型,再分解学习黑解形态附魔。", "fomod\\img\\03 Warglaive.bmp", \
	"不选择", "不选择此种武器。", ""
	Case "选择"
		SelectSubPackage "03 Warglaive"
		Break
	Case "不选择"
		Break
EndSelect

如果觉得太简单或者太复杂的,可以拿 Wizard 与 XML 对比,对比一下应该就会了
貌似 Wrye Bash 教程第二十二堂——安装向导 会更容易理解。

我是觉得写得太简单了,不过担心写多了又显得啰嗦。

PS:这是Wizard完整版的下载:华为网盘

icedream

About icedream

其实我知道的东西很少,只是翻译了一些东西,悲催的是翻译过后很快就忘了。

,

7 Responses to 如何将XML脚本转换成Wizard安装向导

  1. Jonny 2012 年 11 月 22 日 at 上午 11:17 #

    时不时过来逛逛都有能学习的东西,谢谢

    • icedream 2012 年 11 月 22 日 at 下午 1:21 #

      @Jonny: 不客气,有人喜欢真好 🙂

  2. ak47lyj 2012 年 11 月 25 日 at 上午 10:49 #

    哎,XML我写的多了···就是个坑,虽然flag也能设置,不过那个设置方式太特么坑了,其实最想的就是想用C#写,加上一点点PS,就能做出很炫的效果

    • icedream 2012 年 11 月 25 日 at 上午 11:34 #

      @ak47lyj: 只能说你是不折腾会死星人的 = =

      • ak47lyj 2012 年 11 月 25 日 at 上午 11:51 #

        @icedream: XML一生黑,http://mod.deepku.com/mod/38.html,你参考这个吧,里面有flag设置,还不如C#一个XXX_checked

        • icedream 2012 年 11 月 25 日 at 下午 12:03 #

          @ak47lyj: 你说的是类似于set flag的东西?这个我制作unofficial skyrim tools package就用到,是实现单选效果的。

        • icedream 2012 年 11 月 25 日 at 下午 12:33 #

          @ak47lyj: 哦,明白了,为什么不用条件判断?我晚点写个Wizard的,会简单很多。

          另外,向导运行出错:未能找到文件“03 others petite”。