Jump to content
模组网
Sign in to follow this  
icedream

WB Wizard单选/多选窗如何在不同的情况显示不同的选项

Recommended Posts

Wizard 生成单选窗口(或者多选窗口)很容易就可以实现,但是却不像 OMOD 可以自定义每个选项的显示条件……一开始不懂,只能每次在安装向导后面又加了判断语句(不符合条件的再自动取消勾选)。后来看了 Sensual Walks 的 Wizard 恍然大悟:可以借助 Exec 来实现。下面说下具体的实现方式:

因为只有有兴趣的人才愿意看这些内容,所以我就写少一点。

Leon CN Mod 安装 非官方补丁 的脚本如下:

SelectMany "Bug修复", \
	"|非官方修正 - 天际", "名字:Unofficial Skyrim Patch\n版本:1.2.3a\n作者:Kivan\n汉化:寂寞的魂\n介绍:\n非官方修复Mod,修复了原版游戏的各类Bug。", "", \
	"|非官方修正 - 黎明守卫", "名字:Unofficial Dawnguard Patch\n版本:1.1.1a\n作者:Kivan\n汉化:寂寞的魂\n介绍:\n非官方修复Mod,修复了DLC黎明守卫的各类Bug。", "", \
	"|非官方修正 - 炉火", "名字:Unofficial Hearthfire Patch\n版本:1.0a\n作者:Kivan\n汉化:寂寞的魂\n介绍:\n非官方修复Mod,修复了DLC炉火的各类Bug。", "", \
	"装备修正", "名字:Weapons and Armor Fixes\n版本:2.05\n作者:Headbomb\n汉化:寂寞的魂\n介绍:\n在非官方修复的基础上又修复了原版游戏内的武器装备Bug。", "", \
	"个人修正", "名字:Leon Fix\n版本:1.0\n作者:寂寞的魂\n介绍:\n替代LPA,LPA停止更新\n个人制作的修正Mod,修正了:“炼金+附魔”的循环Bug;   强化恢复系药剂对附魔装备的错误加成Bug;\n头盔与头环能够同时佩戴的Bug;\n按等级奖励的装备全部统一为原版最高属性;\n替换附魔药剂为夜视药剂。", ""
	Case "非官方修正 - 天际"
		SelectSubPackage "Unofficial Skyrim Patch"
		Break
	Case "非官方修正 - 黎明守卫"
		SelectSubPackage "Unofficial Dawnguard Patch"
		Break
	Case "非官方修正 - 炉火"
		SelectSubPackage "Unofficial Hearthfire Patch"
		Break
	Case "装备修正"
		SelectSubPackage "Weapons and Armor Fixes"
		Break
	Case "个人修正"
		SelectSubPackage "Leon Fix"
		Break
EndSelect

这个安装向导存在一个问题:不管玩家有没有安装 黎明守卫 或者 炉火 ,运行的时候都会默认勾选。然后那些没安装 黎明守卫 或者 炉火 的小白装了 Leon CN Mod 后就会跳出……到处求助

我们可以把代码修改成下面的形式

sSelect = 'SelectMany "Bug修复", "|非官方修正 - 天际", "", ""'
sCases = 'Case "非官方修正 - 天际"\n'
sCases += 'SelectSubPackage "Unofficial Skyrim Patch"\n'
sCases += 'Break\n'
If DataFileExists("Dawnguard.esm")
	sSelect += ', "|非官方修正 - 黎明守卫", "", ""'
	sCases += 'Case "非官方修正 - 黎明守卫"\n'
	sCases += 'SelectSubPackage "Unofficial Dawnguard Patch"\n'
	sCases += 'Break\n'
EndIf
If DataFileExists("HearthFires.esm")
	sSelect += ', "|非官方修正 - 炉火", "", ""'
	sCases += 'Case "非官方修正 - 炉火"\n'
	sCases += 'SelectSubPackage "Unofficial Hearthfire Patch"\n'
	sCases += 'Break\n'
EndIf
sSelect += ', "装备修正", "", ""'
sCases += 'Case "装备修正"\n'
sCases += 'SelectSubPackage "Weapons and Armor Fixes"\n'
sCases += 'Break\n'
sSelect += ', "个人修正", "", ""'
sCases += 'Case "个人修正"\n'
sCases += 'SelectSubPackage "Leon Fix"\n'
sCases += 'Break\n'
Exec(sSelect + "\n" + sCases + "EndSelect\n")

这样子,仅在检测到 Dawnguard.esm 的时候才会显示 非官方修正 – 黎明守卫,仅在检测到 HearthFires.esm 的时候才会显示 非官方修正 – 炉火 。

说一下原理:

我们都知道单选的实现方式:

SelectOne 'description', \
	'option 1', 'description 1', 'image 1', \
	'option 2', 'description 2', 'image 2'
	Case 'option 1'
		lines 1
		Break
	Case 'option 2'
		lines 2
		Break
EndSelect

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

所以,省略掉为了美观而添加的空格,再把由\分行的重新恢复成单行,上面实际上可以写成

SelectOne 'description', 'option 1', 'description 1', 'image 1', 'option 2', 'description 2', 'image 2'
Case 'option 1'
lines 1
Break
Case 'option 2'
lines 2
Break
EndSelect

现在的情况是:
SelectOne ‘description’, ‘option 1′, ‘description 1′, ‘image 1′, ‘option 2′, ‘description 2′, ‘image 2′ 这一长串用 sSelect 代替
Case ‘option 1′\nlines 1\nBreak\nCase ‘option 2′\nlines 2\nBreak 这一长串用 sCases 代替

最后多选框的实现方式就是:sSelect + “\n” + sCases + “EndSelect\n”

Exec 是用来执行命令的,我们把 sSelect + “\n” + sCases + “EndSelect\n” 传给 Exec ,于是 Wrye Bash 便能将 sSelect + “\n” + sCases + “EndSelect\n” 编译出来。

上面就像是一个公式,我们剩下只要定义下 sSelect 和 sCases 就可以出线各种形式的单选框(或多选框)

平时,我们使用的 sSelect、sCases 都是死的,但是借助于 条件判断语句 ,我们可以把这两个参数变成活的,同时把整个 单选/多选窗 的选项变得多样化。

以上面的向导为例,当检测到 Dawnguard.esm 时,便会有

sSelect += ', "|非官方修正 - 黎明守卫", "", ""'

这个命令会增加一个新的选项 非官方修正 – 黎明守卫

sCases += 'Case "非官方修正 - 黎明守卫"\n'
sCases += 'SelectSubPackage "Unofficial Dawnguard Patch"\n'
sCases += 'Break\n'

这几条则增加选项 非官方修正 – 黎明守卫 对应的命令。
估计我讲到 多选框的实现方式就是:sSelect + “\n” + sCases + “EndSelect\n” 时,你已经看的懂整个安装向导了。
最后我再讲几点需要注意的地方……
上面我没有写上每个 option 的 description,现在我把它们补齐

sSelect = 'SelectMany "Bug修复", "|非官方修正 - 天际", "名字:Unofficial Skyrim Patch\\n版本:1.2.3a\\n作者:Kivan\\n汉化:寂寞的魂\\n介绍:\\n非官方修复Mod,修复了原版游戏的各类Bug。", ""'
sCases = 'Case "非官方修正 - 天际"\n'
sCases += 'SelectSubPackage "Unofficial Skyrim Patch"\n'
sCases += 'Break\n'
If DataFileExists("Dawnguard.esm")
	sSelect += ', "|非官方修正 - 黎明守卫", "名字:Unofficial Dawnguard Patch\\n版本:1.1.1a\\n作者:Kivan\\n汉化:寂寞的魂\\n介绍:\\n非官方修复Mod,修复了DLC黎明守卫的各类Bug。", ""'
	sCases += 'Case "非官方修正 - 黎明守卫"\n'
	sCases += 'SelectSubPackage "Unofficial Dawnguard Patch"\n'
	sCases += 'Break\n'
EndIf
If DataFileExists("HearthFires.esm")
	sSelect += ', "|非官方修正 - 炉火", "名字:Unofficial Hearthfire Patch\\n版本:1.0a\\n作者:Kivan\\n汉化:寂寞的魂\\n介绍:\\n非官方修复Mod,修复了DLC炉火的各类Bug。", ""'
	sCases += 'Case "非官方修正 - 炉火"\n'
	sCases += 'SelectSubPackage "Unofficial Hearthfire Patch"\n'
	sCases += 'Break\n'
EndIf
sSelect += ', "装备修正", "名字:Weapons and Armor Fixes\\n版本:2.05\\n作者:Headbomb\\n汉化:寂寞的魂\\n介绍:\\n在非官方修复的基础上又修复了原版游戏内的武器装备Bug。", ""'
sCases += 'Case "装备修正"\n'
sCases += 'SelectSubPackage "Weapons and Armor Fixes"\n'
sCases += 'Break\n'
sSelect += ', "个人修正", "名字:Leon Fix\\n版本:1.0\\n作者:寂寞的魂\\n介绍:\\n替代LPA,LPA停止更新\\n个人制作的修正Mod,修正了:“炼金+附魔”的循环Bug;   强化恢复系药剂对附魔装备的错误加成Bug;\\n头盔与头环能够同时佩戴的Bug;\\n按等级奖励的装备全部统一为原版最高属性;\\n替换附魔药剂为夜视药剂。", ""'
sCases += 'Case "个人修正"\n'
sCases += 'SelectSubPackage "Leon Fix"\n'
sCases += 'Break\n'
Exec(sSelect + "\n" + sCases + "EndSelect\n")

如果认真观察的话,会看到
(1)sSelect += , “|非官方修正 – 黎明守卫”, “名字:Unofficial Dawnguard Patch\\n版本:1.1.1a\\n作者:Kivan\\n汉化:寂寞的魂\\n介绍:\\n非官方修复Mod,修复了DLC黎明守卫的各类Bug。”, “”
最外边用的是单引号”
(2)sSelect += ‘, “|非官方修正 – 黎明守卫”, “名字:Unofficial Dawnguard Patch\\n版本:1.1.1a\\n作者:Kivan\\n汉化:寂寞的魂\\n介绍:\\n非官方修复Mod,修复了DLC黎明守卫的各类Bug。”, “”‘
\n变成了\\n,这是在字符串里面,\必须用\\来表示
(3)sCases += ‘Case “个人修正”\n
sCases 每次后面都要加上 \n ,不然所有的 Case XXX 都会联成一行。

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...