好,从这里开始就假设你已经看过了简明 Python 教程的1~9章了。
看完以后,你再回过头看看Module System里各py文件的文件结构,就看那些以module_开头的,因为以header_开头的和以process_的基本都加了警告语:不要对这个文件进行编辑。事实上最好也不要去编辑这些文件,不然出了问题,麻烦就大了。
比如就看module_items.py吧,注意了,是看结构,不是看内容。看到什么了?一个大大的list(列表),这个list就是items。不论module_items.py里定义了多少item,不论有多少行,module_items.py文件里的内容不过就是一个list而已,另外就是头部的一些简单定义的语句,再往上就是“包含语句”,就是fromxxximport*语句了。Module System里那些以module_开头的文件的文件结构都与module_items.py里的类似,大同小异。主体部分都是一个大大的列表,然后这个list(列表)里面就是tuple(元组)或者是内层的list,文件结构非常之简单,没有什么神秘可言。了解到了这一点,你可能会感到很沮丧,原来所谓用Module System来制作MOD其实就是填一下或者修改一下各个list(列表)和tuple(元组)罢了,用的仅仅是Python语言里的冰山一角。做的事情就类似于把各种液体分装到不同的容器里,如此而已,而对容器里液体的使用完全轮不到你了,而且分装的规则也轮不到你来定。也就是说,MOD制作者做的不过是通过往这些list和tuple里填数据来向游戏引擎提供数据罢了,而对于这些数据的操作完全是由游戏引擎来完成的。MOD制作者的定位就是数据提供者,而不是数据使用者。而且游戏引擎对list和tuple里数据的使用方法是由游戏引擎决定的,什么样的使用方法就决定了这些list和tuple里的数据结构必须是什么样的,叫你填字符串的地方,你就不能填数值,叫你填数值的地方,你就不能填字符串,规定了list或者tuple的长度是多长,你少填多填都是错,MOD制作者是相当被动的。不过你至少能明白一点,使用Module System就是使用Python语言里的list和tuple,这就是为什么我说“你接触了Module System多长时间,你就接触了Python语言多长时间。”
说是接触了Python语言,但这个接触太浅了,浅到如果你不看简明 Python 教程里数据结构这一章,你基本就无法发现用Module System就是在用Python语言,而可能会认为Module System是M&B提供的一种特殊语言。
说实话,这篇教程的产生起源于一个事件。当时我要做的一个东西:负重影响技能。关键的地方在于header_operations.py里是没有获得物品重量的函数,当然我马上就想到slot,可以为物品定义一个新slot:slot_item_weight,通过
(item_set_slot,,,),
这个函数就可以一一往各个物品的这个slot里写入物品的重量了,然后
(item_get_slot,,,),
就可以取出相应slot里的值了,也就是取得物品的重量了。思路是对的,但新的问题来了,物品有400多种,一一这样往相应的slot里写入数值的话,就要写400多行
(item_set