饥荒mod教程:mod api

时间:2024-10-12 17:00:11

第四章砜实蛰斓:modapi

什么是api?英文全称ApplicationPro爿讥旌护gramInterface.应用程序接口.是一个程序暴露出的一些函数,我们可以调用这些函数来控制与读取应用程序的内容.其实我们做饥荒mod和修改代码,就是利用饥荒提供的接口,来改造饥荒的主程序.

在饥荒的mod系统里,我们所安装的mod文件,其实是放在一个沙盒环境下调用的,mods系统提供

了一些函数与表来给我们调用.

比如,io表啊,os表,这些在饥荒的主程序(lua部分)是存储在_G表里的,而在mods文件夹里的mod

代码文件,它的运行环境是一个相对独立的.

饥荒mod教程:mod api

这样做的好处可以把各个mod放在不同的沙盒里,互不影响.

饥荒mod教程:mod api

在mods系统里,它还提供了许多的函数.mod载入函数在mods.lua里,

饥荒mod教程:mod api

env是一个表,他就是mod的运行环境,这个表主要定义在,

饥荒mod教程:mod api

mods.lua,modindex.lua,modutil.lua这三个文件里,这个modapi就是env表的内容.env主要由一系列函数与key组成.

这个就是mod的运行环境,重点是蓝色的那一行,GLOBAL=_G.

此外,env里还有许多函数,

饥荒mod教程:mod api

假如把这些函数一个一个讲,恐怕几天几夜都写不完,我就挑几个重要的讲一讲.

饥荒mod教程:mod api

让斧子可以点燃物品,想必这个mod是个人都会做.

那你们是怎么做的呢???????

打开axe.lua在某个位置插入inst:AddComponent("lighter").

之后打包mod.一个这样的mod就诞生了.

可是:假如现在有一个Amod,和一个Bmod

Amod让斧子可以点燃物品lighter

Bmod让斧子可以燃烧fuel.

那么如果这两个mod利用上面的方法制作,那么同时安装这两个mod,会发生什么事呢?

斧子肯定不会同时可以lighter和fuel.只能取其一.

这是由于mod载入的方式决定的,在饥荒主程序里有一个PREFABFILES表,而每一个mod有一个PrefabFiles表,这两个表的作用是一样的,饥荒程序先载入PREFABFILES表的内容,之后再调用每一个mod里的PrefabFiles,假如PrefabFiles与PREFABFILES有相同的,mod里的文件就会替换掉饥荒主程序里的同名文件.假如两个mod的PrefabFiles有相同的,最终有用的就是后调用的mod里的文件.

这样说应该很清楚吧.

先:

饥荒mod教程:mod api

载入mod时:

饥荒mod教程:mod api

假如,两个mod里的文件有相同的(主要是指PrefabFiles),就会一个有用,其他的没有用.

在mod的实际使用中,不可避免的会使用相同的文件,这时可能会导致mod失效,严重的会导致游戏

崩溃错误.

假如:跟上面的A,Bmod一样,调用了相同的文件,这样制作mod是不行的,

除非必要,不要直接修改文件!!!!!!!!

可是我们要让axe可以点燃物品lighter或者可以燃烧.不修改文件行吗?

废话,如果不行我写这一章干嘛啊!

我们可以调用mods系统提供的api,中的:

饥荒mod教程:mod api

一个物品(prefab)里插入一个函数(fn),

如:

饥荒mod教程:mod api

这样写,不管有几个mod同时改变axe文件,都可以成功的使用

同样地函数还有:

饥荒mod教程:mod api

上面的那些都可以改变一个文件的局部,而不用替换掉这些文件..

© 手抄报圈