第四章:模组接口
1、 第四章:修改版API接口
2、 API,即应用程序编程接口,英文全称为Application Programming Interface。它是一组程序对外提供的函数,允许我们通过调用这些函数来操控或读取程序内容。在制作饥荒游戏模组或修改代码时,本质上就是利用游戏所提供的API接口,对主程序进行功能扩展与调整,实现自定义效果。
3、 在饥荒的模组系统中,安装的模组文件实际运行于沙盒环境中,由模组系统提供隔离调用机制,确保游戏主体安全稳定。
4、 提供了一些函数和表供我们调用。
5、 例如,IO表和OS表在饥荒主程序的Lua部分存储于_G表中,而mods文件夹中的模组则会对其加以调用或修改。
6、 代码文件在相对独立的环境中运行。
7、 将各mod置于独立沙盒中运行,可确保彼此隔离互不干扰。
8、 mods系统内置丰富功能,其中mod加载函数位于mods.lua文件中,便于模块调用与管理。
9、 在mods.lua、modindex.lua和modutil.lua这三个文件中,modapi即为env表所包含的内容,env主要由多个函数和键值构成。
10、 这是mod的运行环境,关键在于蓝色那行代码:GLOBAL=_G。
11、 env中还包含大量函数。
12、 若逐一讲解这些函数,耗时甚久,难以尽述,此处仅选取关键部分进行说明。
13、 让斧头能点燃物品,这种模组估计谁都能做出来。
14、 你们是如何操作的?
15、 打开axe.lua文件,在适当位置添加代码:inst:AddComponent(lighter)。
16、 随后将文件打包,一个完整的mod便制作完成。
17、 然而,若当前存在一个Amod与一个Bmod
18、 Amod使斧头具备点燃物品的功能,如同打火机一般。
19、 Bmod使斧头具备燃烧燃料功能。
20、 若这两个模组采用上述方式制作,同时安装后会产生怎样的效果或冲突?
21、 斧子不可能既是火源又是燃料,二者只能选其一。
22、 游戏启动时,主程序会读取一个名为PREFABFILES的配置表,用于加载基础内容。每个MOD也包含一个功能类似的PrefabFiles表。系统首先载入主程序中的PREFABFILES数据,随后依次加载各个MOD中的PrefabFiles内容。若某个MOD的PrefabFiles中包含与主程序同名的条目,该MOD的文件将覆盖主程序中的原始文件。当多个MOD的PrefabFiles中存在相同条目时,后被加载的MOD中的文件将最终生效,覆盖先前加载的同名内容。因此,MOD的加载顺序直接影响资源替换的结果,决定了哪些内容会被保留或替代,从而影响游戏的实际表现。这一机制决定了MOD之间发生冲突时的优先级规则。
23、 这样说应该够清楚了。
24、 先:
25、 加载模组时
26、 当两个模组包含相同名称的文件(尤其是PrefabFiles)时,通常只有一个会生效,其余的将被忽略。
27、 在使用mod时,因共用相同文件可能引发冲突,轻则导致功能异常,重则造成游戏无法正常运行。
28、 系统崩溃错误
29、 若与上述A、B模组调用相同文件,则此类模组制作方式不可行。
30、 非必要勿直接修改文件,以免造成不可逆的影响。
31、 能否让axe具备点燃物品的功能,如打火机般燃烧,且不改动文件内容?
32、 当然有用,不然我写这章干什么。
33、 可通过调用mods系统API实现相关功能。
34、 在预制物体中嵌入一个功能函数。
35、 如:
36、 无论多少个mod同时修改axe文件,都能确保正常使用。
37、 类似函数还包括:
