那个自动准备脚本 能不能写个脚本再发一次 jj...

【独家首发】自改版ESP插件合并脚本及使用教程含图,再次升级,继续诚招小白鼠 - 3DMGAME论坛 - Powered by Discuz!
3DMGAME论坛
标题: 【独家首发】自改版ESP插件合并脚本及使用教程含图,再次升级,继续诚招小白鼠
作者: lotress& & 时间:
标题: 【独家首发】自改版ESP插件合并脚本及使用教程含图,再次升级,继续诚招小白鼠 本帖最后由 lotress 于
05:38 编辑
初来乍到,借贵宝地发个我们自己改的工具Mod,基于原Mod v1.8.13 beta修改了几乎所有核心代码。
原作者似乎有窃据他人工作的倾向,在N网私聊中毫不留情地拒绝了合并我们的代码同时发出了更新通告,内容正是我们解决的问题;我们这边先发了,等他新版大家比较一下他的更新部分。
不过既然原作者说了GPLv2授权并要求附带原链接,我们就在此另立山头fork一个吧,最初目的也只是用上正确的工具而已,不提他了。
这是一个TES5Edit的Pascal辅助脚本,作用就是将多个esp或esm文件合并成一个esp,不再需要原esp文件,将插件载入数量减至255个限制之下,大家请分清与TES5Edit自带的Create Merged Patch功能或Wyre Bash合并功能的区别。
我想每个老滚5正常玩家都会有几百个esp的吧,所以这是个居家旅行必备Mod。
跟旧版本(1.8.13)的区别
可以自动合并N***I记录,不再需要用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文件的
接下来***需求
建议,管理什么都方便一点;
TES5Edit 3.0.33以上,最新版FO4Edit 3.1.3(没错,支持辐射4了)官方地址,别忘了启动参数填上-cp:utf-8就支持UTF-8;[attach]3616561[/attach]
然后就是脚本连同TES5Edit分流,百度盘地址,下载后作为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为准
第一次使用会弹出设置窗口
然后是待合并插件的选择,点击列表中插件名字可以看说明,这都有疯子去合并
交错载入的警告,详情见前文说明
选择一个目标文件,如果不是合并到以前的目标中,通常新建一个
出现这个信息说明要保存并重启Tes5Edit
重启后增加勾选目标文件,直接应用同一个脚本即可
然后等啊等
成功完成之后可能需要运行批处理文件,但文件里的路径是被Mod Organizer映射之后的data,所以如果Tes5Edit没有自动运行它,我们就要通过Mod Organizer运行它,实在觉得麻烦的去选项里关掉Batch copy assets,但我们不建议这么做。
重启之后先查错,没错了再Create SEQ
最后清理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版修改
加入插件升级能力
目前如果合并列表中有一个插件要升级N***I,只能全部之前有N***I的插件都要勾选
TES5Edit更新至3.1.1r1943
---------------------------------------
修正错误(基本上1.10的新东西都重写了)
现在如果有任何一个插件要升级,全部之前被合并的插件都要出现在载入列表中,不过不勾上也一样被重新合并进去
放松了升级时的载入顺序一致性要求
TES5Edit更新至3.1.1r1945
---------------------------------------
修正错误,1.10版本用户请务必更新
TES5Edit更新至3.1.1 090515
---------------------------------------
增加了多语言支持
TES5Edit更新至3.1.1 190515
作者: ruinelec& & 时间:
直接调用FormID的脚本还是有的。
作者: kk3207164& & 时间:
居家旅行必备Mod
作者: kk3207164& & 时间:
啥时候CK能支持esp为前置master就好了
作者: g& & 时间:
试试看等会
作者: lotress& & 时间:
本帖最后由 lotress 于
11:53 编辑
ruinelec 发表于
直接调用FormID的脚本还是有的。
麻烦详细解释一下,这脚本何时硬编码FormId,如何应对动态载入顺序,这个FormId何时保存下来,有没有对它做算数操作?
我们见到了GetFormId的接口,但Papyrus脚本不能设置FormId,真有人做Papyrus脚本会假定esp的FormId一成不变吗?
作者: lotress& & 时间:
kk3207164 发表于
啥时候CK能支持esp为前置master就好了
这脚本倒是完全不需要CK
作者: lotress& & 时间:
哦,对了,检查完正确性别忘了顺手在TES5Edit中右键, Other, Create SEQ file一下。
作者: xx201413& & 时间:
新手福音。
作者: lotress& & 时间:
感谢大家支持,如果觉得这脚本有什么难用的地方可以反馈到这里;未来我们打算增加一些维护已合并插件的功能。
顺带说下,正确的插件也有可能把游戏弄糟,不过这是插件本身的功能导致;所谓正确结果标准是TES5Edit中check errors没发现错误,存在一个合并后文件的载入顺序使得载入的总效果等价于合并前。
但可能有其他插件载入顺序位于被合并文件的范围中,当然肯定没有master关系,不会修改被合并文件的自带内容;不过它们有可能对公共master如skyrim.esm做出了同样修改,此时合并后文件由于载入顺序移动,会产生不等价结果,这与大家手动修改载入顺序是相似的。
合并后文件的载入顺序推荐是最后一个相关master的正下方与所有原被合并文件载入顺序最小值两者中取最大值。
作者: ruinelec& & 时间:
lotress 发表于
麻烦详细解释一下,这脚本何时硬编码FormId,如何应对动态载入顺序,这个FormId何时保存下来,有没有对它 ...
有getformfromfile这种,为了兼容性或不添加额外前置mod等目的而直接把FormID写进脚本的。当然一般都是对非当前mod用的,对当前mod这样用的几乎没有,但也指不定有奇葩存在。
作者: lotress& & 时间:
ruinelec 发表于
有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& & 时间:
看?子是合?完了,只能?新?重新??吧!
作者: lotress& & 时间:
vood 发表于
看?子是合?完了,只能?新?重新??吧!
大体相当于删掉了一堆Mod再装上一堆,原存档中引用的物体(在游戏过程中获得的)很可能消失,放置于世界中的则不变。
如果合并的esp关联了脚本,因在合并前等待脚本效果消失或按Mod给出的方式卸载脚本。
都这样做了的话,存档还是可以再用的。
作者: 秋名山佬司机& & 时间:
论坛又有人才出&&赞1个
作者: lotress& & 时间:
嗯,再说一下例子里的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& & 时间:
哦,顺带一提,合并N***I的时间复杂度是O(NMt(N)),Renumbering是O(Nt(N)),下界都是Omega(N),还有优化空间,其中N是所有记录总数,M是插件个数,t是列表查找开销;空间需求都是O(N)。所以虽然不太可能,不过如果有一堆DLC等级的插件需要合并,请保持耐心。
作者: 三大妈论坛& & 时间:
热心人士必须顶个
作者: vood& & 时间:
kk3207164 发表于
啥时候CK能支持esp为前置master就好了
哈?kk君,有大大在???分享了N卡347.25版,本人gtx 650 ti 2G?用??得?算?定
有了上次升?不愉快的??,突破心?的忐忑不安?於?340升到了347是不是?的有??重
作者: 贪紫& & 时间:
顶顶顶顶顶顶顶顶顶顶
作者: lotress& & 时间:
等到版本稳定了写一个详细的插件合并教程吧,加上背景知识和截图。
话说现在有人试用过了N***I合并功能吗?麻烦反馈一下。
作者: kk3207164& & 时间:
vood 发表于
哈?kk君,有大大在???分享了N卡347.25版,本人gtx 650 ti 2G?用??得?算?定
有了上次升?不愉快 ...
我是第一时间升级,酸的甜的不尝尝怎么知道
作者: xtdk& & 时间:
技术流啊楼主。。绝对要支持的。。给楼主点个攒。
作者: lotress& & 时间:
我们既缺少创意又笨手笨脚,只好来做这种没存在感的基础工作,不过老滚6都快出了,5还存在这一堆基础问题没得到解决,相关资料去哪里找呢?
作者: wjw& & 时间:
感觉很复杂的样子。。
作者: lotress& & 时间:
wjw 发表于
感觉很复杂的样子。。
基本上这是合并插件的唯一选择,如果觉得哪里说明不清楚或者操作麻烦的可以提出来。
作者: lotress& & 时间:
nexus网上着突然就被墙了,现在要怎么下Mod
作者: lotress& & 时间:
顶楼提到了插件合并与Merged Patch/Bashed Patch的区别,这是两种不同的功能;如果想要应用Merged Patch/Bashed Patch,请在合并插件之前创建Patch以得到所有插件的设定。那么为什么我们的插件合并脚本不内置类似功能呢?原因是我们追求合并结果等价于合并前载入序列,而Merged Patch/Bashed Patch产生的结果不同于Skyrim自行载入的结果,这些功能的使用也足够简便,因此不再自作主张。
作者: lotress& & 时间:
我们参照原Mod v1.8.15 beta更新了本作品,版本定为v1.9.1 alpha。
改动都是原作者的,我们大部分照单全收。
这一版本在新窗口中显示插件相关信息,当不需要时不再产生.bat文件,临时文件路径有了备选&脚本路径\mp\temp&;
值得注意的是原作者提到当被覆盖的记录Record Header\Record Flags\PersistentReference QuestItem DisplaysInMainMenu置为1时,复制记录会产生duplicate formID错误。我们没能在测试中复现这个错误,并且原作者读取这个值的路径不对(至少在我们这边的TES5Edit),真怀疑他有没做过测试,我们也不认为记录的内容会影响复制函数的行为,不过我们认为这个修补不损害正确性,所以保留了。
希望使用本作品的同学认真执行check errors的步骤。
作者: Crazy灬上古& & 时间:
不错支持下
作者: az7942959& & 时间:
支持,绝对支持
作者: a& & 时间:
原创支持,but我的Mod并不多。。。。。
作者: & & 时间:
先观望,等人试水
作者: 深圳房产顾问& & 时间:
顶一下..............
作者: hxyxiha& & 时间:
给LZ点个赞!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: shantolyl& & 时间:
LZ我想问一下,你用MO调用hdtTES5EditUTF8_loader后可以读取到完整的MOD列表吗
作者: lotress& & 时间:
shantolyl 发表于
LZ我想问一下,你用MO调用hdtTES5EditUTF8_loader后可以读取到完整的MOD列表吗
可以呀,用Mod Organizer启动hdtTES5EditUTF8_loader.exe,能够读取完整的插件列表,不要勾选MO里隐藏未激活的ESP(默认就没勾)。好多天没来这里,刚好赶上你的问题。
作者: shantolyl& & 时间:
本帖最后由 shantolyl 于
17:37 编辑
lotress 发表于
可以呀,用Mod Organizer启动hdtTES5EditUTF8_loader.exe,能够读取完整的插件列表,不要勾选MO里隐藏未 ...
这就奇怪了,我用MO运行TES5EDIT,就可以看到完整的ESP列表,但不支持UTF8,运行hdtTES5EditUTF8_loader,就只能看到data里的ESP列表,请问你是怎么设置的
作者: lotress& & 时间:
shantolyl 发表于
这就奇怪了,我用MO运行TES5EDIT,就可以看到完整的ESP列表,但不支持UTF8,运行hdtTES5EditUTF8_loader, ...
真的一点设置都没做过
[attach]3212956[/attach]
作者: lotress& & 时间:
楼主 我一开始运行的时候没有问题 但最后出现了Failed to copy 这正常吗
Copying records...
Failed to copy [REFR:00******],其中00开头的FormID表示这些插件覆盖了Skyrim.esm的记录,Failed to copy则表示覆盖Skyrim.esm中相同记录的待合并插件不止一个;load order最大的插件的这一纪录将被保留到合并目标中,其他修改了这一纪录的待合并插件则产生Failed to copy错误;合并的结果等价于原先的载入列表,只有最后一个覆盖Skyrim.esm中相同记录的插件生效;如果原先的插件没有冲突则合并结果也正确,所以请先保证这一点;你可以在合并后确认一下合并目标中这些FormID都有相应记录并且与load order最大的待合并插件的相应记录相同。
欢迎光临 3DMGAME论坛 (/)
Powered by Discuz! X3.2

参考资料

 

随机推荐