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

Wrye Bash 教程第二十二堂——安装向导

[newwarning title=”温馨提示”]高级玩家的教程,入门玩家请直接看Wrye Bash 教程第二十三堂——监视外部安装[/newwarning]这堂课的主要内容是BAIN安装向导,也就是Wizard……可能会复杂很多,已经不是新手看的了,如果看不懂你可以放弃,直到你想自己写安装向导的时候再拿起来看看.
具体使用方法见视频

Show the Content

; Leon MOD CN 201210 安装向导 by icedream@tesfans.org

; 先强制所有的子安装包都不勾选
DeSelectAll

sName = "Leon MOD CN"
sAuthor = "寂寞的魂"
sVersion = "201210"
sWebsite = "3dm"
sdescription = "介绍:\n修复游戏Bug及增强游戏的可玩性\n全中文,汉化风格均为简洁、易懂、方便使用。\n人名地名类词汇均对照十游词典(既未来的TLF+Deepku+云渺联合汉化版本),与目前3DM的汉化补丁会有所不同。\n汉化的Mod版权归原作者所有,本人只是将其汉化共享。如果你喜欢这些Mod,还请到N网多多支持作者!\n如果您觉得本帖的中文Mod侵犯了您的版权,请及时通知我。"
sUpdate = "更新日志 —— 10月16日\n\nComplete Combine Potions (CCP) —— 完整药剂合成 —— 版本1.0 原创\n* 参考N网的Combine Potions,本人全新制作的完整药剂合成Mod\n* 在烹饪处添加了药剂合成功能,两个1级药剂能够合成为一个2级药剂,以此类推。"

; SelectOne为单选,SelectMany为多选(可以不选任何项目)
; 通常的,我们在第一个窗口使用SelectMany,然后显示MOD介绍等信息。
; "选项", "说明", "截图"
SelectMany "Leon MOD CN", \
	"MOD说明", "名字:" + sName + "\n作者:" + sAuthor + "\n版本:" + sVersion + "\n网址:" + sWebsite + "\n" + "\n" + sdescription, "", \
	"版本历史", sUpdate, ""
EndSelect

; 路径中\必须用\\,而\n则表示另起一行
; 不能使用fomod\pics\SkyUI1.png
SelectOne "交互界面与中文排序——SkyUI图标选择", \
	"图标一", "三款图标请择一使用", "fomod\\pics\\SkyUI1.png", \
	"图标二", "三款图标请择一使用", "fomod\\pics\\SkyUI2.png", \
	"图标三", "三款图标请择一使用", "fomod\\pics\\SkyUI3.png", \
	"不安装", "不安装SkyUI,使用原版界面或自行安装其他界面。", ""
	Case "图标一"
		SelectSubPackage "110 SkyUI 1"
		Break
	Case "图标二"
		SelectSubPackage "110 SkyUI 2"
		Break
	Case "图标三"
		SelectSubPackage "110 SkyUI 3"
		Break
	Case "不安装"
		Break
EndSelect

; 在选项前面添上|表示默认勾选该选项
SelectOne "交互界面与中文排序——原版中文排序", \
	"|Esp(对应3DM汉化)", "名字:Leon CN Sorting\n版本:21009\n作者:寂寞的魂\n介绍:\n重新命名了天际原版游戏内所有物品、装备、法术、法术书、卷轴、龙吼、配方,使其有规则的排列,及修复了部分3DM汉化补丁遗漏和错翻的地方,方便查看使用。\n使用时请放至所有Esp的最上面(Esm下面)\n详细介绍可查看:3dm...", "fomod\\pics\\10.jpg", \
	"Strings(对应大学汉化)", "名字:Leon CN Sorting Strings\n版本:21009\n作者:寂寞的魂\n介绍:\n此版基于“大学版”汉化补丁对照十游词典制作,直接将词汇导入Strings文件内,修复了大学版4.37补丁的大量错误,以及加入LCS中文排序,不必再用Esp文件。\n仅适用于大学版汉化补丁!!!3DM汉化使用后会导致大量物品排序失效!!!\n详细介绍可查看:3dm...", "fomod\\pics\\10.jpg", \
	"不安装", "不安装“原版中文排序”。", ""
	Case "Esp(对应3DM汉化)"
		SelectSubPackage "120 Leon CN Sorting"
		Note "您选择了 Esp(对应3DM汉化),此版本在 大学版的汉化 下不能使用,请再检查自己的汉化是3DM版的还是大学版的。"
		Break
	Case "Strings(对应大学汉化)"
		SelectSubPackage "120 Leon CN Sorting Strings"
		Note "您选择了 Strings(对应大学汉化),此版本在 3DM的汉化 下不能使用,请再检查自己的汉化是3DM版的还是大学版的。"
		Break
	Case "不安装"
		Break
EndSelect

SelectOne "交互界面与中文排序——黎明守卫中文排序", \
	"|安装", "名字:Leon DG Sorting\n版本:21009\n作者:寂寞的魂\n介绍:\nDLC黎明守卫中文排序初版测试,仅初步排列了物品与法术,任务物品暂时未排。使用方法与原版中文排序LCS一样,放在所有Esp的上面(Leon CN Sorting下面),Esm的下面。", "", \
	"不安装", "不安装“黎明守卫中文排序”。", ""
	Case "安装"
		SelectSubPackage "130 Leon DG Sorting"
		Break
	Case "不安装"
		Break
EndSelect

SelectMany "Bug修复,请选择你要安装的内容。", \
	"|非官方修正(原版) USkP", "名字:Unofficial Skyrim Patch\n版本:1.2.2b\n作者:Kivan\n汉化:寂寞的魂\n介绍:\n非官方修复Mod,修复了原版游戏的各类Bug。", "", \
	"|非官方修正(黎明守卫) UDgP", "名字:Unofficial Dawnguard Patch\n版本:1.1a\n作者:Kivan\n汉化:寂寞的魂\n介绍:\n非官方修复Mod,修复了DLC黎明守卫的各类Bug。", "", \
	"|非官方修正(炉火) UHfP", "名字:Unofficial Hearthfire Patch\n版本:1.0a\n作者:Kivan\n汉化:寂寞的魂\n介绍:\n非官方修复Mod,修复了DLC炉火的各类Bug。", "", \
	"装备修正 WAF", "名字:Weapons and Armor Fixes\n版本:2.05\n作者:Headbomb\n汉化:寂寞的魂\n介绍:\n在非官方修复的基础上又修复了原版游戏内的武器装备Bug。", "", \
	"铁匠修正 SPO", "名字:Smithing Perks Overhaul\n版本:1.11\n作者:Headbomb\n汉化:寂寞的魂\n介绍:\n修复了铁匠技能方面的一些问题。", "", \
	"个人修正 LF", "名字:Leon Fix\n版本:1.0\n作者:寂寞的魂\n介绍:\n替代LPA,LPA停止更新\n个人制作的修正Mod,修正了:“炼金+附魔”的循环Bug;   强化恢复系药剂对附魔装备的错误加成Bug;\n头盔与头环能够同时佩戴的Bug;\n按等级奖励的装备全部统一为原版最高属性;\n替换附魔药剂为夜视药剂。", ""
	Case "非官方修正(原版) USkP"
		SelectSubPackage "210 Unofficial Skyrim Patch"
		Break
	Case "非官方修正(黎明守卫) UDgP"
		SelectSubPackage "220 Unofficial Dawnguard Patch"
		Break
	Case "非官方修正(炉火) UHfP"
		SelectSubPackage "230 Unofficial Hearthfire Patch"
		Break
	Case "装备修正 WAF"
		SelectSubPackage "240 Weapons and Armor Fixes"
		Break
	Case "铁匠修正 SPO"
		SelectSubPackage "250 Smithing Perks Overhaul"
		Break
	Case "个人修正 LF"
		SelectSubPackage "260 Leon Fix"
		Break
EndSelect

SelectMany "功能增强,请选择你要安装的内容。", \
	"偏好菜单 CFM", "名字:Categorized Favorites Menu\n版本:0.1.15\n作者:favmenumodder\n汉化:寂寞的魂\n介绍:\n增强了原版游戏的偏好菜单(默认“Q”键),使之能够分类排列出物品魔法。     !!!重要!!!必须配合中文排序 LCN、LDS才能够正常分类,否则会分类错误!", "fomod\\pics\\01.jpg", \
	"药剂合成 CCP", "名字:Complete Combine Potions\n版本:1.0\n作者:寂寞的魂\n介绍:\n参考N网的Combine Potions,个人全新制作的完整版药剂合成Mod,添加了在烹饪处能够合成药剂的功能,两个1级药剂(毒素)能够合成为2级药剂(毒素),以此类推。", "fomod\\pics\\CCP.jpg", \
	"完整锻造 CCO", "名字:Complete Crafting Overhaul\n版本:1.12\n作者:Headbomb\n汉化:寂寞的魂\n介绍:\n补充了大量可锻造的(白板)物品并保持游戏的平衡性。", "fomod\\pics\\02.jpg", \
	"真实光照 RL", "名字:Realistic Lighting\n版本:3.4a\n作者:The Realistic Lighting Team\n汉化:寂寞的魂\n介绍:\n在不影响性能的情况下,全面提升游戏画面的真实度!", ""
	Case "偏好菜单 CFM"
		SelectSubPackage "310 Categorized Favorites Menu"
		Break
	Case "药剂合成 CCP"
		SelectSubPackage "320 Complete Combine Potions"
		Break
	Case "完整锻造 CCO"
		SelectSubPackage "330 Complete Crafting Overhaul"
		Break
	Case "真实光照 RL"
		SelectSubPackage "340 Realistic Lighting"
		Break
EndSelect



如果你之前有接触过编程的话,这边会比较容易理解。
其实我不清楚写OMOD向导或者写FOMOD向导的人是不是都是有编程基础的,但是个人感觉这东西其实用多了也就懂了,只有几个固定的东西,记住了,用惯了,也就没有什么难度了。

语言结构 · Language Structure

BAIN安装向导(后面直接称Wizard)里面,一行代表一条语句。 如果你想分成多行,必须用反斜杠“\”链接。

除了文件名外,Wizard是有大小写之分的。所以 SelectEspm “Example.esp”SelectEspm “example.esp” 是等同的(Example.esp是文件名),但是 Selectespm “Example.esp” 是会出错的。 SelectEspm 是Wizard中定义好的关键字,表示在Esp/m勾选框中选择对应的 esp、esm 。因为有大小写之分,Wizard仅识别 SelectEspm ,不识别 Selectespm。

变量的命名要求只能使用英文字符(a-z、A-Z)、数字(0-9)以及下划线(_),同时第一个字符不能为数字。特别地,对于Wizard已经定义的关键字、函数、常量等,你也是不能使用的。

[text]关键字、函数你可以在后面慢慢接触到,只要避开不使用就好了。想知道具体的关键字(Keywords)、函数(Functions)有哪些的。可以自己阅读 Wrye Bash Technical Readme.html 。 至于常量,就只有两个:

  1. True,表示“真”,等同于1;
  2. False,表示“假”,等同于0。

[/text]

Wizard的基本数据类型有(懂编程希望别太纠结表述上的问题,只是为了容易理解):

  • 整数:应该不需要结束,没有小数点。有正整数、负整数和零;
  • 小数:有小数点的,如:0.1234,3.14;
  • 字符:用双引号或者单引号包括的,比如”Hello”、’World!’,两个都是字符。

对于常量,你是不可以自己创建的,只能使用上面说到的 True 和 False 。

注释的话,可以在前面加上“;”,也就是说,在语句前面加上“;”,Wizard就会跳过该语句。

表达式?就大家平常的习惯,例:3 + 6 * 2 的值为 15 。具体信息建议自己阅读 Wrye Bash Technical Readme.html

转义符 · Escape Sequences

没接触过编程的可能会无法理解,举个例子,

“上古卷轴爱好者
湮没、天际社区流行MOD的分享、介绍与汉化”

这段文字你怎么实现?因为一个语句限定在一行内,在Wizard里面我们肯定是不能直接这么写的,那么我们可以改成”上古卷轴爱好者\n湮没、天际社区流行MOD的分享、介绍与汉化”(”\n”的效果是另起一行),常见的转义符有:

  • \”:表示双引号”;
  • \’:表示单引号’;
  • \t:横向跳格,就是Tab键的效果;
  • \n:换行,就是Enter键的效果;
  • \\:斜杠号\。

关于\\表示\这点,有些人可能会没有概念,最常见的事例:如果我想说 Data\textures\example.dds 这个文件,我该怎么做?正确的作法是“Data\\textures\\example.dds” 而不是 “Data\textures\example.dds”,否则你会出错。

对话框 · Dialogues

运行Wizard中常见的几个对话框:单选 | 多选 | 取消 | 错误 | 完成 | 版本警告 。

单选 · SelectOne


单选对话框(单选的意思是只能选一个,这里面包括:不能什么都不选、不能选2个或者2个以上)是通过 SelectOne 实现的。具体形式为

SelectOne 'description', \
	'option 1', 'description 1', 'image 1', \
	'option 2', 'description 2', 'image 2', \
	...,  \
	'option n', 'description n', 'image n'
	Case 'option 1'
		lines 1
		Break
	Case 'option 2'
		lines 2
		Break
	Case 'option n'
		lines n
		Break
	Default
		lines x
		Break
EndSelect

description 定义的是 上面窗口中的 “Pick a Complete Texture Pack option.” 位置处的内容。
option 1、option 2、……、option n 定义的是 Orange – Brumbek Recommends、Orange with Curtains 等位置处的内容,也就是有几个选项。
description 1、description 2、……、description n 定义的是 Description: 里面的东西,就是那段 This provides a more…. 。也就是说定义的是 option n 所相应的 介绍内容 ;
image 1、image 2、……、image n 定义的是选项的截图,上图中 AWLS Brumbek Orange Pack 那张图就是通过这个定义的。
下面的

Case 'option 1'
	lines
	Break

表示如果玩家选择的 option 1 则运行 line 1 的内容。直到遇到 Break 才完成。
Default表示默认的选择,“自动运行安装向导”(右键安装包可以看到)会选择Default的选项运行。
Break是用来让Case、Default终止的。
EndSelect表示SelectOne单选窗口定义完成。

下面是一个实例,通常用来做是否判断框。

SelectOne "例:是否……?", \
	"是", "Description", "Wizard Images\\Yes.jpg", \
	"否", "Description", "Wizard Images\\No.jpg"
	Case "是"
		命令1
		Break
	Case "否" 
		命令2
		Break
EndSelect

里面用到了 Wizard Images\\Yes.jpgWizard Images\\No.jpg 这两个文件是Wrye Bash内置的,可以直接拿来用。

多选 · SelectMany


与单选(SelectOne)的形式一样,只要把 SelectOne 改为 SelectMany就能实现。
最后的效果如上图所示,除了每个选项前面多了个勾选框,其他内容都没有变化。
很啰嗦,但是需要提到的是,多选框是有“什么都不选”的情况存在的……
所以,就像 Leon MOD那个Wizard,在一开始显示 “MOD说明”、”版本历史” ,我就是通过多选框实现的。(是的,Wizard里面是没有Message或者MessageBox这种功能的,但你可以用 SelectOne 或者 SelectMany 实现)。

取消 · Cancel


取消对话窗是作者用来强制玩家退出Wizard。
实现方式为

Cancel [文本]

上面那个对话窗所对应的脚本为

Cancel "Testing the Cancel function"

这个功能我比较常用,比如

SelectOne "注意!!!安装完安装包后,请\n1、自己动手把文件夹“400 手动安装(必装)”里面的obcn_config.exe解压到游戏目录,即Oblivion.exe的附近;\n2、运行obcn_config.exe,调整字体\n3、如果嫌自己调整太麻烦的,可以把obcn.ini复制到 我的文档\\My Games\\Oblivion内,放在Oblivion.ini附近。\n把请认真阅读上面的说明,如果明白了上面的说明,下面的选项中需要选择“否”才能安装", \
	"|是", "", "Wizard Images\\Yes.jpg", \
	"否", "", "Wizard Images\\No.jpg"
	Case "是"
		Cancel "拜托,安装的时候请认真看安装选项的说明。\n\n安装的时候请认真看安装选项的说明。\n\n\n请认真看安装选项的说明。\n\n\n\n因为你没有认真看说明,现在强制取消安装。你可以重新运行安装向导,然后认真阅读安装选项"
		Break
	Case "否"
		Break
EndSelect

在选项前面加上“|”是表示默认勾选该选项。
上面的脚本默认选择”是”,但是如果玩家选择”是”的话,又会强制用户退出安装,这么做可以提醒那些安装MOD时不认真看说明一直点击下一步的玩家。

错误 · Error

这个没什么好讲的,是Wizard出错强制退出的窗口。
你得保证你的Wizard不会出现这个窗口才放出你的Wizard,不然其他玩家无法正常运行的Wizard。

完成 · Finish


完成对话窗,这个是Wizard自己生成的,每次Wizard的最后一步都会出现此窗口。
上面的Wizard用到了

Note "您选择了 Esp(对应3DM汉化),此版本在 大学版的汉化 下不能使用,请再检查自己的汉化是3DM版的还是大学版的。"

定义了提示信息,就可以在这边显示(不清楚的你可以自己运行一遍Wizard)

版本警告 · Version Warning


版本警告窗口,我们可以在Wizard中定义安装该安装包需要哪些前提条件。
实现此窗口的几个常见函数:
CompareGameVersion(版本号)
判断 游戏 是否达到 版本号 。
早于 版本号 的,返回值为 -1 ;
等于 版本号 的,返回值为 0 ;
晚于 版本号 的,返回值为 1 。

CompareSEVersion(版本号)
判断 Script Extender 是否达到 版本号 。
早于 版本号 的,返回值为 -1 ;
等于 版本号 的,返回值为 0 ;
晚于 版本号 的,返回值为 1 。

CompareGEVersion(版本号)
判断 Graphics Extender 是否达到 版本号 。
早于 版本号 的,返回值为 -1 ;
等于 版本号 的,返回值为 0 ;
晚于 版本号 的,返回值为 1 。

CompareWBVersion(版本号)
判断 Wrye Bash 是否达到 版本号 。
早于 版本号 的,返回值为 -1 ;
等于 版本号 的,返回值为 0 ;
晚于 版本号 的,返回值为 1 。

RequireVersions ‘游戏版本’,’Script Extender版本’,’Graphics Extender版本’,’Wrye Bash版本’
这个可以一下子判断 游戏、Script Extender、Graphics Extender和Wrye Bash的版本 ,如果不想判断哪个程序的版本,可以在该处放空。如

RequireVersions '1.2.0.416','0.0.19.6','','287'

判断的是 游戏版本要达到1.2.0.416、Script Extender版本要达到0.0.19.6、Wrye Bash的版本要达到287,但是对 Graphics Extender的版本 不做任何要求。

常见关键字 · Common Keywords

SelectSubPackage 名字
选择 名字 子安装包

DeSelectSubPackage 名字
取消选择 名字 子安装包

SelectEspm 名字
选择 名字 插件

DeSelectEspm 名字
取消选择 名字 插件

SelectAll
全选

DeSelectAll
全选取消

SelectAllEspms
选择所有插件

DeSelectAllEspms
取消选择所有插件

If-Elif-Else-EndIf
条件判断,例

If statement1
	lines1
Elif statement2
	lines2
Else
	lines3
EndIf

效果为:
如果满足statement1就运行lines1
不满足就判断是否满足statement2
如果满足statement2就运行lines2
如果不满足statement2就运行lines3

另外,EditINI 也顺便提一下
EditINI(file_name, section, setting, value [,comment])
用来修改文件 file_name 中 section 下 setting 的数值为 value 。comment是注释部分,可以不写。
这个功能其实很少用,所以看不懂也就算了。等你需要修改ini、cfg文件再来看也没差。

进阶内容 · Advanced

还有循环结构、字符判断等功能没讲,因为会比较难,一般情况下也不会遇到。
如果有兴趣的话,可以试着可能能不能看懂下面的Wizard,里面通过循环结构大大提高了效率。

Show the Content

000 Docs\
  Docs\
    Update Log.txt
    说明.txt
100 Unofficial Oblivion Patch 3.4.1\
  Meshes\
    Creatures\
      Clannfear\
        Skeleton.NIF
      Daedroth\
        Skeleton.NIF
  Oblivion Citadel Door Fix.esp
  UOPS Additional Changes.esp
  Unofficial Oblivion Patch.esp
200 Unofficial Shivering Isles Patch 1.5.0\
  USIPS Additional Changes.esp
  Unofficial Shivering Isles Patch.esp
300 Unofficial Official Mods Patch 1.6\
  DLCBattlehornCastle - Unofficial Patch.esp
  DLCFrostcrag - Unofficial Patch.esp
  DLCHorseArmor - Unofficial Patch.esp
  DLCMehrunesRazor - Unofficial Patch.esp
  DLCOrrery - Unofficial Patch.esp
  DLCSpellTomes - Unofficial Patch.esp
  DLCThievesDen - Unofficial Patch - SSSB.esp
  DLCThievesDen - Unofficial Patch.esp
  DLCVileLair - Unofficial Patch.esp
  Knights - Unofficial Patch.esp
Wizard.txt

Show the Content

; 非官方补丁汉化安装包安装脚本 by bluesky404

RequireVersions '1.2.0.416','0.0.19.6','','287'

DeSelectAll
SelectAll
DeSelectAllEspms

SelectMany "非官方补丁汉化", \
	"名字", "非官方补丁汉化", "", \
	"版本", "2012.05.03", "", \
	"网址", "3dm...", "", \
	"作者", "bluesky404@3DM", ""
EndSelect

For sUOP in "100 Unofficial Oblivion Patch 3.4.1"
	If sUOP.lower().endswith(".esp")
		If DataFileExists(sUOP)
			SelectEspm sUOP
		EndIf
	EndIf
EndFor

For sUSIP in "200 Unofficial Shivering Isles Patch 1.5.0"
	If DataFileExists(sUSIP)
		SelectEspm sUSIP
	EndIf
EndFor

For sUOMP in "300 Unofficial Official Mods Patch 1.6"
	If DataFileExists(sUOMP)
		SelectEspm sUOMP
	EndIf
EndFor

如果有兴趣还可以看Sensual Walks的Wizard,里面借助函数Exec可以实现动态的多选框

Show the Content

; ===============================================================================================
; Sensual Walks for Female NPCs Installation Wizard
; ===============================================================================================
;
; Version: 1.0
; Author: Surazal
; Date: 12 June 2011
; _______________________________________________________________________________________________

; Initial checks and validation
; =============================

; Ensure Wrye Bash version can handle script
; ------------------------------------------

If CompareWBVersion(292)  0
    Cancel "You need to use Wrye Bash v292 or higher to use this Wizard"
EndIf

; Check that the Animations Installer has been run
; ------------------------------------------------

If not DataFileExists("Meshes\\Characters\\_male\\specialanims\\0FemaleVariableWalk_Commoner.kf")
	Cancel "Please activate the Animations Installer first - Installation aborted"
EndIf

; Establish which Sensual Walks mods can be installed
; ===================================================

sPrevModDesc = ""	; Previous BAIN folder number
iModCount = 0		; Number of Sensual Walks mods selected

For sModDesc in SubPackages
	If sModDesc[3:8] != " ===="
		For sESPname in sModDesc
			sSWesp = sESPname
		EndFor
		sType = ".esp"
		If not sModDesc[0:3] == sPrevModDesc[0:3]

			; Derive master ESP/M name and type (ESP or ESM)
			If sModDesc[0:3] == "000"
				sMaster = "Oblivion"
				sType = ".esm"
			Elif sModDesc[0:3] == "001" or sModDesc[0:3] == "002"
				sMaster = "DLCShiveringIsles"
			Elif sModDesc[0:3] == "800" or sModDesc[0:3] == "802"
				sType = ".~~~"	; Mod already processed, ensure master check always fails
			Else
				sMaster = sSWesp[0:sSWesp.find(" Vwalk")]
				If sModDesc[0:3] == "801" or sModDesc[0:3] == "803" or sModDesc[0:3] == "804"
					sType = ".esm"	; ESM only mod
				EndIf
			EndIf

			; Establish whether the master file is installed
			If DataFileExists(sMaster + sType)
				SelectSubPackage sModDesc				
				bInstall = True
				iModCount += 1
			Else
				bInstall = False
			EndIf
			sPrevModDesc = sModDesc
		Else

			; BAIN Sub-Package number is the same as the previous one, so this is a choice
			; - Only needs processing if the previous sub-package was selected
			If bInstall

				; Overrides that can be detected
				If sModDesc[4:] == "Elsweyr the Deserts of Anequina Unofficial Patch v1.1.1"
					If DataFileExists("Unofficial Elsweyr Anequina Patch.esp")
						DeSelectSubPackage sPrevModDesc
						SelectSubPackage sModDesc
					EndIf
				Elif sModDesc[4:] == "Fireflys Extended Cities v2.2"
					bExtendedCities = False
					If DataFileExists("Extended Chorrol.esp")
						bExtendedCities = True
					EndIf
					If DataFileExists("Extended Imperial City Version 1.0.esp")
						bExtendedCities = True
					EndIf
					If DataFileExists("Extended Skingrad.esp")
						bExtendedCities = True
					EndIf
					If not bExtendedCities
						DeSelectSubPackage sPrevModDesc
						SelectSubPackage sModDesc
					EndIf
				Elif sModDesc[4:] == "Frostcrag Reborn"
					If DataFileExists("Meshes\\Architecture\\MagesTower\\MagesTower01RETEX.NIF")
						DeSelectSubPackage sPrevModDesc
						SelectSubPackage sModDesc
					EndIf
				Elif sModDesc[4:] == "Frostcrag Spire Revisited"
					If DataFileExists("Meshes\\Architecture\\MagesTower\\ELchasmcornerinside01c.nif")
						DeSelectSubPackage sPrevModDesc
						SelectSubPackage sModDesc
					EndIf
				Elif sModDesc[4:] == "Knights of the Nine Expansion v1.9"
					If DataFileExists("meshes\\armor\\knightoforder\\AAHFEvilKnightArmor.nif")
						DeSelectSubPackage sPrevModDesc
						SelectSubPackage sModDesc
					EndIf
				Elif sModDesc[4:] == "Rumple Mod v0.7"
					If DataFileExists("meshes\\Red\\Valus\\Furniture\\aaWGsofaXiamaraIbisca.nif")
						DeSelectSubPackage sPrevModDesc
						SelectSubPackage sModDesc
					EndIf
				Elif sModDesc[4:] == "Tamriel Transportation Network v1.0 - Merged"
					If DataFileExists("ShiveringIsleTravellers.esp")
						DeSelectSubPackage sPrevModDesc
						SelectSubPackage sModDesc
					EndIf
				Elif sModDesc[4:] == "Verona House Bloodines SI Fixed v1.5.6"
					If DataFileExists("VHBloodlines 1.2.bsa")
						DeSelectSubPackage sPrevModDesc
						SelectSubPackage sModDesc
					EndIf
				Elif sModDesc[4:] == "Xeo5 Beautify Female NPCs (XeoSP v1.0)"
					If DataFileExists("Meshes\\Characters\\XEOM\\X6\\KKK\\KKK002.nif")
						DeSelectSubPackage sPrevModDesc
						SelectSubPackage sModDesc
					EndIf

				; Requires user input
				Elif sModDesc[4:] == "Companion Neeshka v2.5 -  Ranged"
					SelectOne "Specify which Companion Neeshka mod you are using", \
						"|Standard Companion Neeshka", "", "", \
						"Ranged Companion Neeshka", "", "", \
						"Companion Neeshka Facelift", "", ""

						Case "Ranged Companion Neeshka"
							DeSelectSubPackage sPrevModDesc
							SelectSubPackage sModDesc
						Break
						Case "Companion Neeshka Facelift"
							DeSelectSubPackage sPrevModDesc
							SelectSubPackage "802 Companion Neeshka v2.5 - Facelift v1.0"
						Break
					EndSelect
				Elif sModDesc[4:] == "Crowded Cities Improved v1.1"
					SelectOne "Specify which Crowded Cities mod you are using", "Original Crowded Cities", "", "", \
						"|Crowded Cities Improved", "", ""

						Case "Crowded Cities Improved"
							DeSelectSubPackage sPrevModDesc
							SelectSubPackage sModDesc
						Break
					EndSelect
				Elif sModDesc[4:] == "Hentai Mania 2 v1.0 - Boob Patch"
					SelectOne "Specify which Hentai Mania 2 mod you are using", "|Standard Hentai Mania 2", "", "", \
						"Hentai Mania 2 with Boob patch", "", ""

						Case "Hentai Mania 2 with Boob patch"
							DeSelectSubPackage sPrevModDesc
							SelectSubPackage sModDesc
						Break
					EndSelect
				Elif sModDesc[4:] == "Tantrivaylia v1.0.1 - Green Eyes"
					SelectOne "Specify which Tantrivaylia mod you are using", "|Standard eyes", "", "", \
						"Green Eyes", "", ""

						Case "Green Eyes"
							DeSelectSubPackage sPrevModDesc
							SelectSubPackage sModDesc
						Break
					EndSelect
				Elif sModDesc[4:] == "The Romancing of Eyja - Abriael Human version"
					sSelect = 'SelectOne "Specify which Eyja mod you are using", "The Romancing of Eyja", "", ""'
					sCases = ""
					If DataFileExists("Abriael_Human.esp")
						sSelect += ', "|The Romancing of Eyja - Abriael Human version", "", ""'
						sCases = 'Case "The Romancing of Eyja - Abriael Human version"\n'
						sCases += 'DeSelectSubPackage sPrevModDesc\n'
						sCases += 'SelectSubPackage sModDesc\n'
						sCases += 'Break\n'
					EndIf
					If DataFileExists("CuteElf11.esp", "HentaiChinaDress.esp")
						sSelect += ', "'
						If sCases == ""
							sSelect += "|"
						EndIf
						sSelect += 'Sexy Eyja HGEC", "", ""'
						sCases = 'Case "Sexy Eyja HGEC"\n'
						sCases += 'DeSelectSubPackage sPrevModDesc\n'
						sCases += 'Break\n'
					EndIf
					If sCases != ""
						Exec(sSelect + "\n" + sCases + "EndSelect\n")
					EndIf
				EndIf
			EndIf
		EndIf
	EndIf
EndFor

; Summary Report and Close
; ========================

Note str(iModCount) + " Sensual Walks mods have been selected based on the mods you have installed."\
+ "\n- After clicking Finish, you can tailor the selection by clearing the relevant tick boxes in your Sub-Packages list."\
+ "\n"\
+ "\n- You can adjust female NPC walk animations to suite your personal tastes by using OBMM to rerun the Sensual Walks Animations Installer OMOD."

Return

下一篇教程:Wrye Bash 教程第二十三堂——监视外部安装
上一篇教程:Wrye Bash 教程第二十一堂——调整安装包(2)

icedream

About icedream

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

,

4 Responses to Wrye Bash 教程第二十二堂——安装向导

  1. 2342 2013 年 7 月 11 日 at 下午 5:25 #

    SelectSubPackage选择多层目录怎么写呢?”dir1\\dir2″?

    • icedream 2013 年 7 月 11 日 at 下午 9:43 #

      联写两个
      SelectSubPackage “01”
      SelectSubPackage “02”

  2. 33333 2013 年 9 月 24 日 at 上午 11:29 #

    sUop是关键字吧?求官方文档地址。

    • icedream 2013 年 9 月 24 日 at 下午 10:19 #

      没听明白,请再说清楚点.