lotress 发表于 2015-1-25 02:29

【独家首发】自改版ESP插件合并脚本及使用教程含图,再次升级,继续诚招小白鼠

本帖最后由 lotress 于 2016-1-9 05:38 编辑

初来乍到,借贵宝地发个我们自己改的工具Mod,基于原Mod v1.8.13 beta修改了几乎所有核心代码。http://www.nexusmods.com/skyrim/mods/37981

原作者似乎有窃据他人工作的倾向,在N网私聊中毫不留情地拒绝了合并我们的代码同时发出了更新通告,内容正是我们解决的问题;我们这边先发了,等他新版大家比较一下他的更新部分。
不过既然原作者说了GPLv2授权并要求附带原链接,我们就在此另立山头fork一个吧,最初目的也只是用上正确的工具而已,不提他了。


这是一个TES5Edit的Pascal辅助脚本,作用就是将多个esp或esm文件合并成一个esp,不再需要原esp文件,将插件载入数量减至255个限制之下,大家请分清与TES5Edit自带的Create Merged Patch功能或Wyre Bash合并功能的区别。
我想每个老滚5正常玩家都会有几百个esp的吧,所以这是个居家旅行必备Mod。


跟旧版本(1.8.13)的区别

[*]可以自动合并NAVI记录,不再需要用Creation Kit重建了;
[*]正确处理非局部记录的FormId映射;
[*]正确处理交错载入时的Master列表;
[*]esp load order不足时给出提示;
[*]保存了FormId映射和资源复制信息,为将来的维护升级做好准备。


这个Mod应该是esp合并最主流,适用性最广的选择。

我们希望这个合并脚本实现了正确性,即对于任意正确输入产生正确结果,正确输入有客观标准,所有插件以正确顺序载入,TES5Edit中check errors没发现错误,这也是游戏要求。
额外一点是待合并项不能有交错覆盖,举个例子现有A, B, C三个插件,A的某些部分被B覆盖,B又被C覆盖,那么跨过B合并AC是行不通的,略一思考就可知合并后的东西放哪载入都不合适,合并ABC则没问题。在此之前世上任何从事通用esp插件合并的自动工具都在某些正确的输入上会产生错误,综上,符合下述条件的同学应当优先尝试本脚本

[*]曾经合并插件用TES5Edit查出错误的
[*]想合并master文件的


接下来安装需求
建议Mod Organizer,管理什么都方便一点;
TES5Edit 3.0.33以上,最新版FO4Edit 3.1.3(没错,支持辐射4了)官方地址http://www.nexusmods.com/fallout4/mods/2737/,别忘了启动参数填上-cp:utf-8就支持UTF-8;
然后就是脚本连同TES5Edit分流,百度盘地址http://pan.blacksheepgame.com/s/1o6pAvJ8,下载后作为mod安装。


使用方法,再举个例子,现依载入顺序有S.esm, A.esm, B.esp, C.esp, D.esp,其中A是C的master,B是D的master,S则是所有小伙伴的master;欲合并ACD为M.esp。
开TES5Edit,依序载入上述文件,检查ACD的错误并修正;如有所修改特别是修改了任一Master list,务必重启TES5Edit并重新载入。
选择欲合并文件,本例中为ACD,在文件上右键,Apply script,选择Merge plugins v1.9,Ok执行;
第一次使用会弹出对话框要求设置用不用Mod Organizer啦,输出路径啦,是否复制被合并Mod的其他资源啦,解不解压bsa啦之类选项,请大家按自身需求设置;
其中记录复制方法(Copying options)不建议改,批处理文件复制资源(Batch copy assets)最好勾上,保存继续;
此时特殊情况出现了,我们称此情况为交错载入,注意例子里不被合并的B是个Master,欲合并的A却在B之前载入,这里给一警告,务必确认A和B是独立的,没有更改任何相同内容,否则就是交错覆盖;
I'm sure之后设置合并目标,默认新建文件,输入名字M,不带.esp并确定;
没有交错载入的同学们就可以一气呵成了,否则脚本很快会停下,告诉你A restart of TES5Edit is needed.云云,此时保存M.esp,重启TES5Edit;别再改东西,严格依照原顺序载入SABCDM,右键,Apply script,选择Merge plugins v1.9,Ok执行;
等脚本执行成功,选了Batch copy assets的同学应该见到Batch copying is enabled, so asset copying will now be performed in a cmd window.等信息,最新版TES5Edit应该会自动执行它;
使用非最新版TES5Edit的同学此时切勿关闭信息窗口,去脚本路径(或Mod Organizer的overwrite目录或自行设定目录)\mp\logs下找到最新的merge_xxxxxx_xxxxx.bat并执行,等到执行完再关闭信息窗口;
仅保存M.esp,重启TES5Edit对M查错,都正常的话可以松口气了。


鉴于这是alpha版,请大家多测试,原文件和脚本在\mp\logs下输出的那一大堆尽量别删。只要我们还在玩老滚5,这个脚本就会维护下去,尤其这两天我们静候反馈。
话有点多,敲了两小时,就这样吧。给个带图的例子,以下说明均以使用较新版Mod Organizer为准
http://att.blacksheepgame.com/att/album/201503/11/043957969w1w1vlml1aqja.jpghttp://att.blacksheepgame.com/att/album/201503/11/043957wmmn6pw3eqmww373.jpg
http://att.blacksheepgame.com/att/album/201503/11/043958vazyu01eau0ll7ha.jpg
第一次使用会弹出设置窗口
http://att.blacksheepgame.com/att/album/201503/11/043958kb65qf6hz6hbjj2k.jpg
然后是待合并插件的选择,点击列表中插件名字可以看说明,这都有疯子去合并
http://att.blacksheepgame.com/att/album/201503/11/043958x2x8geze9ejz4xg4.jpg
交错载入的警告,详情见前文说明
http://att.blacksheepgame.com/att/album/201503/11/043958n6yq1bq514q6bp69.jpg
选择一个目标文件,如果不是合并到以前的目标中,通常新建一个
http://att.blacksheepgame.com/att/album/201503/11/043958pgii6p6zszm8irp4.jpg
出现这个信息说明要保存并重启Tes5Edit
http://att.blacksheepgame.com/att/album/201503/11/043958e2xue4e25s24bxzb.jpg
重启后增加勾选目标文件,直接应用同一个脚本即可
然后等啊等
http://att.blacksheepgame.com/att/album/201503/11/043959zkr93o3xvp13pbva.jpg
成功完成之后可能需要运行批处理文件,但文件里的路径是被Mod Organizer映射之后的data,所以如果Tes5Edit没有自动运行它,我们就要通过Mod Organizer运行它,实在觉得麻烦的去选项里关掉Batch copy assets,但我们不建议这么做。
http://att.blacksheepgame.com/att/album/201503/11/043959n2fn93992hll6sf6.jpg
重启之后先查错,没错了再Create SEQ
http://att.blacksheepgame.com/att/album/201503/11/043959iuhu87hf488j6xv7.jpg
最后清理overwrite下的临时文件,logs下的东西建议保存


---------------更新说明---------------
1.9.1 alpha
基于原Mod v1.8.15 beta修改,若干错误修正
---------------------------------------
修正某些插件命名导致MCM翻译文件复制错误
注意TES5Edit更新至r1898,请重新下载
---------------------------------------
1.9.2 beta
基于原Mod v1.8.16正式版修改
TES5Edit更新至r1901
---------------------------------------
清理无效选项
TES5Edit更新至r1912
---------------------------------------
基于原Mod 1.9正式版修改,没有值得一提的改动,考虑到仅仅是小修改就更新了版本号第二位,我们这边加两个小版本号至1.9.5吧
更新TES5Edit至Version 3.1.1 r1915
默认使用Robocopy,需要Windows Vista以上,不舒服的就打开Merge plugins v1.9.pas把第26行的true改成false
更新截图说明---------------------------------------
1.10.0 alpha
基于原Mod v1.9.5 beta版修改
加入插件升级能力
目前如果合并列表中有一个插件要升级NAVI,只能全部之前有NAVI的插件都要勾选
TES5Edit更新至3.1.1r1943
---------------------------------------
1.10.1
修正错误(基本上1.10的新东西都重写了)
现在如果有任何一个插件要升级,全部之前被合并的插件都要出现在载入列表中,不过不勾上也一样被重新合并进去
放松了升级时的载入顺序一致性要求
TES5Edit更新至3.1.1r1945
---------------------------------------
1.10.3
修正错误,1.10版本用户请务必更新
TES5Edit更新至3.1.1 090515
---------------------------------------
1.10.5
增加了多语言支持
TES5Edit更新至3.1.1 190515

ruinelec 发表于 2015-1-25 09:54

直接调用FormID的脚本还是有的。

kk3207164 发表于 2015-1-25 10:53

居家旅行必备Mod{:3_121:}

kk3207164 发表于 2015-1-25 11:01

啥时候CK能支持esp为前置master就好了{:3_101:}

g670632043 发表于 2015-1-25 11:28

试试看等会

lotress 发表于 2015-1-25 11:47

本帖最后由 lotress 于 2015-1-25 11:53 编辑

ruinelec 发表于 2015-1-25 09:54 static/image/common/back.gif
直接调用FormID的脚本还是有的。
麻烦详细解释一下,这脚本何时硬编码FormId,如何应对动态载入顺序,这个FormId何时保存下来,有没有对它做算数操作?
我们见到了GetFormId的接口,但Papyrus脚本不能设置FormId,真有人做Papyrus脚本会假定esp的FormId一成不变吗?


lotress 发表于 2015-1-25 11:48

kk3207164 发表于 2015-1-25 11:01 static/image/common/back.gif
啥时候CK能支持esp为前置master就好了

这脚本倒是完全不需要CK

lotress 发表于 2015-1-25 11:49

哦,对了,检查完正确性别忘了顺手在TES5Edit中右键, Other, Create SEQ file一下。

xx201413 发表于 2015-1-25 12:25

新手福音。

lotress 发表于 2015-1-25 12:46

感谢大家支持,如果觉得这脚本有什么难用的地方可以反馈到这里;未来我们打算增加一些维护已合并插件的功能。

顺带说下,正确的插件也有可能把游戏弄糟,不过这是插件本身的功能导致;所谓正确结果标准是TES5Edit中check errors没发现错误,存在一个合并后文件的载入顺序使得载入的总效果等价于合并前。
但可能有其他插件载入顺序位于被合并文件的范围中,当然肯定没有master关系,不会修改被合并文件的自带内容;不过它们有可能对公共master如skyrim.esm做出了同样修改,此时合并后文件由于载入顺序移动,会产生不等价结果,这与大家手动修改载入顺序是相似的。

合并后文件的载入顺序推荐是最后一个相关master的正下方与所有原被合并文件载入顺序最小值两者中取最大值。

ruinelec 发表于 2015-1-25 12:51

lotress 发表于 2015-1-25 11:47 static/image/common/back.gif
麻烦详细解释一下,这脚本何时硬编码FormId,如何应对动态载入顺序,这个FormId何时保存下来,有没有对它 ...

有getformfromfile这种,为了兼容性或不添加额外前置mod等目的而直接把FormID写进脚本的。当然一般都是对非当前mod用的,对当前mod这样用的几乎没有,但也指不定有奇葩存在。

lotress 发表于 2015-1-25 13:31

ruinelec 发表于 2015-1-25 12:51 static/image/common/back.gif
有getformfromfile这种,为了兼容性或不添加额外前置mod等目的而直接把FormID写进脚本的。当然一般都是对 ...

所有游戏中的get操作都没问题,怕就怕有人把FormId当作C语言中的指针(万恶之源啊)加加减减的,以为FormId总按设计好的准确排放,对这种情况,世上不存在安全的FormId renumbering方法。至于硬编码了FormId以减少依赖,这意味着游戏中仍然存在那个master,那么脚本还需要知道该文件的名字,获得该文件的加载顺序才能映射到实际FormId了?
对于Mod作者自己做出来的master似乎没必要这么做,毕竟在一个Mod内不需要减少依赖;那么只剩下那些人所共知并且假定了不会改变FormId的master了,比如官方DLC和Update,这些不推荐合并。
当然我们不推荐合并那些被广泛依赖的master,这需要修改现在和将来可能安装的所有依赖它的文件。
Renumbering冲突的FormId对于合并插件是必须的,不过合并序列中的第一个文件FormId会被完整保持,其他的则仅修改冲突的FormId,所以非得合并某个被广泛依赖的master还要保持兼容性那就把它放合并序列最上面,合并后再把文件名改成这个master的名字,当然这个机会对每个合并序列只有一次。

vood 发表于 2015-1-25 16:07

看樣子是合併完了,只能開新檔重新遊戲吧!{:3_56:}

lotress 发表于 2015-1-25 16:14

vood 发表于 2015-1-25 16:07 static/image/common/back.gif
看樣子是合併完了,只能開新檔重新遊戲吧!

大体相当于删掉了一堆Mod再装上一堆,原存档中引用的物体(在游戏过程中获得的)很可能消失,放置于世界中的则不变。
如果合并的esp关联了脚本,因在合并前等待脚本效果消失或按Mod给出的方式卸载脚本。
都这样做了的话,存档还是可以再用的。

秋名山佬司机 发表于 2015-1-25 17:00

论坛又有人才出赞1个

lotress 发表于 2015-1-25 17:42

嗯,再说一下例子里的S.esm,这个指的不只是Skyrim.esm,可能还包括了Update.esm, USKP, SMPC等载入优先级高的插件,其中有些与被合并插件毫不相干,也就是说不影响合并后文件实际内容;但是载入它们还是有意义的。
准确来说合并后文件最终有个Master list,按顺序列出了所有与被合并插件相关的未被合并Master,我们需要合并时的载入序列中,第一个被合并的文件载入顺序值不小于这个Master list的长度。
合并脚本会自行判断这一条件,同学们如果遇到All files to be merged need load order no less than XX的输出的话,就是不满足这一条件;请关掉TES5Edit,在前头随便多载入点东西再尝试合并,切记第二次重启TES5Edit时务必保持载入顺序完全相同。

lotress 发表于 2015-1-25 19:49

哦,顺带一提,合并NAVI的时间复杂度是O(NMt(N)),Renumbering是O(Nt(N)),下界都是Omega(N),还有优化空间,其中N是所有记录总数,M是插件个数,t是列表查找开销;空间需求都是O(N)。所以虽然不太可能,不过如果有一堆DLC等级的插件需要合并,请保持耐心。

三大妈论坛 发表于 2015-1-25 19:58

热心人士必须顶个

vood 发表于 2015-1-25 20:25

kk3207164 发表于 2015-1-25 11:01 static/image/common/back.gif
啥时候CK能支持esp为前置master就好了

哈囉kk君,有大大在論壇裏分享了N卡347.25版,本人gtx 650 ti 2G試用過覺得還算穩定
有了上次升級不愉快的經驗,突破心裏的忐忑不安終於從340升到了347{:3_56:}是不是說的有點嚴重

贪紫 发表于 2015-1-25 20:30

顶顶顶顶顶顶顶顶顶顶

lotress 发表于 2015-1-25 21:09

等到版本稳定了写一个详细的插件合并教程吧,加上背景知识和截图。
话说现在有人试用过了NAVI合并功能吗?麻烦反馈一下。

kk3207164 发表于 2015-1-25 21:20

vood 发表于 2015-1-25 20:25 static/image/common/back.gif
哈囉kk君,有大大在論壇裏分享了N卡347.25版,本人gtx 650 ti 2G試用過覺得還算穩定
有了上次升級不愉快 ...

我是第一时间升级,酸的甜的不尝尝怎么知道:lol

xtdk 发表于 2015-1-26 01:29

技术流啊楼主。。绝对要支持的。。给楼主点个攒。{:3_110:}

lotress 发表于 2015-1-27 17:41

我们既缺少创意又笨手笨脚,只好来做这种没存在感的基础工作,不过老滚6都快出了,5还存在这一堆基础问题没得到解决,相关资料去哪里找呢?

wjw274908821 发表于 2015-1-27 17:47

感觉很复杂的样子。。

lotress 发表于 2015-1-27 21:13

wjw274908821 发表于 2015-1-27 17:47 static/image/common/back.gif
感觉很复杂的样子。。

基本上这是合并插件的唯一选择,如果觉得哪里说明不清楚或者操作麻烦的可以提出来。

lotress 发表于 2015-1-28 15:38

nexus网上着突然就被墙了,现在要怎么下Mod

lotress 发表于 2015-1-30 22:49

顶楼提到了插件合并与Merged Patch/Bashed Patch的区别,这是两种不同的功能;如果想要应用Merged Patch/Bashed Patch,请在合并插件之前创建Patch以得到所有插件的设定。那么为什么我们的插件合并脚本不内置类似功能呢?原因是我们追求合并结果等价于合并前载入序列,而Merged Patch/Bashed Patch产生的结果不同于Skyrim自行载入的结果,这些功能的使用也足够简便,因此不再自作主张。

lotress 发表于 2015-1-31 15:53

我们参照原Mod v1.8.15 beta更新了本作品,版本定为v1.9.1 alpha。
下载链接http://pan.blacksheepgame.com/s/1c0jJsIW
改动都是原作者的,我们大部分照单全收。
这一版本在新窗口中显示插件相关信息,当不需要时不再产生.bat文件,临时文件路径有了备选"脚本路径\mp\temp";
值得注意的是原作者提到当被覆盖的记录Record Header\Record Flags\PersistentReference QuestItem DisplaysInMainMenu置为1时,复制记录会产生duplicate formID错误。我们没能在测试中复现这个错误,并且原作者读取这个值的路径不对(至少在我们这边的TES5Edit),真怀疑他有没做过测试,我们也不认为记录的内容会影响复制函数的行为,不过我们认为这个修补不损害正确性,所以保留了。
希望使用本作品的同学认真执行check errors的步骤。

Crazy灬上古 发表于 2015-2-2 02:17

不错支持下{:3_103:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 【独家首发】自改版ESP插件合并脚本及使用教程含图,再次升级,继续诚招小白鼠