剖析lub和lua文件之间的关系

在2013年的客户端开始,重力社大量的应用了lua文件,lua是一种小巧的脚本语言,存在的主要意义就是为程序提供灵活的扩展性,得益于这个改动,我们在RO添加头饰、添加魔物甚至添加各种自定义技能,都非常的简单,无需使用Xray客户端。

什么是扩展性呢?比如在以前,RO加一个魔物或者头饰,都需要更新客户端,因为这部分头饰外观之类是写死在代码里面的,而现在RO将头饰的外观都放在一个lua文件中,如果需要加头饰,那么就只需要编辑一些lua文件,重新发个grf补丁就可以了。

仙境传说的lua文件大多数情况下放在data目录下的luafiles514文件夹里面,这个luafiles514文件夹里面保存了刚刚提到的头饰外观索引文件、技能树文件、技能描述文件等。

你会发现data目录下还有一个luafiles文件夹,里面的内容根据我的经验基本不会用到,这是个人见解,不一定正确!

除了luafiles514文件夹之外,游戏安装目录下的System文件夹中,还有几个lua文件,这几个lua文件中最重要的就是iteminfo文件,它储存着游戏中所有物品的名称和描述。

那么问题来了,iteminfo文件不是lub格式的吗?为什么也说它是个lua文件?别着急,我们慢慢道来。

大家知道lub文件怎么来的么?或许你已经猜到了,其实lub文件就是从lua文件lub文件就是通过lua文件生成出来的

那么为什么游戏程序不直接用lua文件,而要用lub文件呢?这是因为程序直接读取lua文件的时候,效率会比较低,而lub文件是通过lua文件直接“编译”出来的,编译出来的lub文件体积会变得更小,被应用程序载入内存时的效率更高

而且被转换成lub格式的文件,还有一个好处,那就是里面保存的内容会变得不是明文,某种程度上起到了加密的作用。实际上并不是真正意义上的加密,因为lub文件根本不是为了加密设计的,加密强度很弱。

那么为什么iteminfo.lub的内容,无论是明文还是密文,都可以被游戏读取而不出错呢?

这是因为游戏里面有一个lua的脚本解析引擎,这个解析引擎在加载文件的时候,如果发现它的内容是被编译过的,那么就会直接把文件内容加载到内存。如果发现文件内容是明文的,那么就会花时间去进行解析,最终还是可以正确的将文件内容加载到内存。

实际上在lua官方中,并不存在lub这么一个文件后缀,这个后缀是RO自己起的名字……在RO客户端的定义中:lub表示编译后的二进制文件,lua表示明文文件。