求教个技术问题,mod添加内容和替换内容是如何实现的
博得之门吧
全部回复
仅看楼主
level 1
蒿修0IS 楼主
突然发现,有些mod是在原文件上增加内容,而有些是覆盖内容,求教技术大佬,mod具体是如何实现这种差异的。不同的指令还是参数什么的呢
具体而言,主要是两类文件,dlg和bcs,前者一般是d文件进行操作,后者则好像是baf文件操作?
装mod装不上,发现是某某参数不对,搜索同名文件才发现,bran,dlg被前后几hear个mod操作,地窟vault,黑心blackheart,bg1npc项目,其中黑心把本来2Kb的dlg替换成了500b的小文件,导致vault的操作全没了,而同样的bg1npc则是在500b基础上增加少量内容,变成了700b。
搜索黑心tp2文件,包括其引用的几个tpa库文件,都没找到具体操作bran.d的语句.....
2026年04月08日 11点04分 1
level 1
蒿修0IS 楼主
// Special compatibility with Gorgon Eye
COMPILE EVALUATE_BUFFER ~Blackhearts/Dialog/~ USING ~Blackhearts/tra/%LANGUAGE%/BHBG1script.tra~
ACTION_IF GAME_IS ~eet~ BEGIN
COMPILE ~Blackhearts/DialogPatch/IllaseraPatch.d~ USING ~Blackhearts/tra/%LANGUAGE%/BHBG1script.tra~
怀疑是这一句,直接批处理把dialog目录下的d文件全给处理了,evaluate_buffer 不知道是啥参数,一般compile好像不用加这个参数。。。。难道是为了批处理省事?真狠...
2026年04月08日 11点04分 2
level 1
蒿修0IS 楼主
对比黑心dialog目录的另外一个d文件,搜相关dlg,发现还真是,大概这么处理的都是被替换而不是修正了。
大概看了下weidu命令说明,compile指令一般是编译d文件和baf文件,新增或修正。
而compile evaluate_buffer的效果具体没说,
evaluate_buff是可以用在多种指令的一个参数,类似计算变量结果?
2026年04月08日 12点04分 3
level 7
d文件里有对话的插入、修改,你看一下d文件,有CHAIN、ADD、EXTEND_BOTTOM之类的
2026年04月08日 12点04分 4
确实有可能是这方面的原因,搜了一下compiile eva,400mod大概有1000多个,按一半是d文件,也不应该都有问题,有些可能是同一个npc换不同名字的dlg?
2026年04月08日 13点04分
level 1
蒿修0IS 楼主
BEGIN BRAN
IF ~Global("BHBG1Quest","GLOBAL",1) !PartyHasItem("WIHELM01")~ THEN BEGIN WIbran0
SAY @174
IF ~~ EXIT
END
IF ~Global("BHBG1Quest","GLOBAL",1) PartyHasItem("WIHELM01")~ THEN BEGIN WIbran1
SAY @175
IF ~~ EXIT
END
IF ~Global("BranTalk","GLOBAL",0)~ THEN BEGIN WIbran2
SAY @夏⁣​⁣⁣夜 IF ~~ THEN DO ~SetGlobal("BranTalk","GLOBAL",1)~ EXIT
END
IF ~Global("BranTalk","GLOBAL",1)~ THEN BEGIN WIbran3
SAY @177
IF ~~ EXIT
END
看了两个d文件,都没特殊的....但是效果就是安装后个体的dlg文件变小了
2026年04月08日 13点04分 5
这个d文件估计是直接导出的,安装只能是覆盖,你找些新队友的MOD看下d文件就知道区别了
2026年04月08日 13点04分
@lz744804554 请教直接导出是怎么实现的?我看了BH目录的多个d文件,多数都是新npc没这问题,而晨歌里的两个牧师都是文件变小了?而有些mod还用了另一个参数,compille eval xx.d ,太复杂了。。。
2026年04月08日 13点04分
@蒿修0IS nearinfinity里导出dlg时选weidu格式出来就是d
2026年04月08日 13点04分
level 1
蒿修0IS 楼主
膜拜大佬,又看了几个mod的d文件,可能关键就在于d文件本身,第一行,append `xxn`,可能就是扩展xx dlg的第n个state trigger之类的吧,
而直接的begin xx,可能就是新建(替换)某个dlg,而语句中的begin则是开始第n个state trigger之类的
不过这样的话,还是没有简单直观的方法快速检索出这种兼容性障碍型Mod.....
2026年04月08日 15点04分 6
1