7.我在帖子开头说过中文bug的出现是因为官方汉化文件里的参数被汉化了,导致代码传参时找不到被汉化后的参数,但是这里涉及到一个问题,那就是如何识别和判断出语言文件里哪些文字不是纯粹的文本而是参数呢?
这里就是一种判断方法:大括号法
那就是看某一行的文字是否在语言文件的其他地方出现在了大括号{}内,我们以楼上讲的伤齿龙轮盘菜单的冷却时间显示bug为例,伤齿龙轮盘菜单的冷却时间对应的参数是recharge,出现bug以后,出现的情况就是把原本应该是数字的地方显示成了{recharge},那么我们可以在文本文件里搜索recharge,果然发现在15781行和16866行出现了大括号内的recharge,15781行内容是范围等级 {range} - 冷却等级 {recharge} ,16866行内容是 [侦查-范围 {range} - 冷却时间 {recharge} 秒] ,这就说明recharge是冷却时间相关代码的参数,那么recharge就不应该被翻译。
所以,但凡你看到语言文件里有些行的内容里出现了大括号{},那么大括号内出现过的单词就是游戏代码所需要的参数,当其他地方出现单独的一行这些参数单词时就不应该把那一行的参数翻译,这适用于语言文件里所有出现在大括号内的单词,我们接下来要讲的那些bug,都是用这种方法找出原因后修复的,流程是发现bug,发现bug的地方出现了 {英文单词} 的形式,在英文语言文件里搜索大括号内的这个英文单词,找到单独成一行的这个英文单词记住它所在的行数,在中文语言文件里对应行数的附近找到这个单词翻译后的中文,把翻译后的中文改回原来的英文,解决bug。
出现大括号型bug的时候,其实还有一种解决方法,但我不推荐,那就是不把被翻译后的单独一行的参数恢复成英语,而是把所有大括号内的英语单词翻译成中文,比如伤齿龙轮盘菜单冷却时间bug里,15781行内容是范围等级 {range} - 冷却等级 {recharge} ,16866行内容是 [侦查-范围 {range} - 冷却时间 {recharge} 秒] ,也可以把这两行的recharge改成中文语言文件里单独一行那里已经翻译后的对应的中文,也可以消除bug,但我不推荐这种方法,因为不是所有代码都是部分显示在语言文件里的,这种方法修复bug后,其他没有显示在语言文件里的代码如果也用到了recharge这个参数时依然会产生bug。
但是,大括号内出现过的单词是参数,不代表参数只有大括号内出现过的单词,有些单词和文本从来没有出现在大括号内,但依然是参数,比如楼上讲的导致出现创世纪2联邦泰克套不能无条件使用bug的参数 Gen2 ,Gen2这个文本从来没有出现在大括号内,但依然是参数且导致了bug,这是因为用到了这个参数的游戏代码没有直接出现在语言文件里,当然找不到大括号内的Gen2即{Gen2}的出现,对于这种bug,出现时的表现形式并不是本该出现数字或者其他内容的地方出现了 {英文单词} ,而是直接产生了bug效果,这就无法用大括号法来判断,只能用二分查找法来寻找判断,二分查找法是什么我之后再说。