不管是“插件”还是“游戏模式”,我们都需要一个MOD目录结构。
这里假设我们的游戏目录是 killingfloor,并且插件的名字叫做 ExampleMutator,
然后你需要在游戏目录下创建一个结构
killingfloor / ExampleMutator / Classes
不管游戏目录下有什么,你先创建 ExampleMutator 目录,
再到里面创建 Classes 文件夹,这里目录 就是文件夹的意思。
这里 Classes 表示类目录,里面就是你存放源码文件的地方;
接着在里面创建一个 txt文本,修改文件名为 ExampleMutator.uc
它的路径应该如下所示:
killingfloor / ExampleMutator / Classes / ExampleMutator.uc
这里文件名只是碰巧和目录名一致,并不影响任何执行;
实际上你可以在 Classes 里面创建很多文件,如何区分功能?
注意文件名有个 Mutator 单词结尾,我们应该看得出它是一个插件
Mutator 翻译为插件
假设你要写“游戏模式”应该以 GameType 结尾,还有更多的命名规则
以后我们以后会慢慢接触到,主要借鉴KF1官方文件的命名习惯。
必须养成良好的命名习惯,有助于提高文件名的可读性,方便维护。
以上将MOD目录结构定义好之后,需要进行配置 才能对其进行编译打包。
在游戏的 system 文件夹中,能找到一个 killingfloor.ini 配置文件;
将其打开搜索内容 EditPackages(用Ctrl+F进行搜索)你会找到一下结果:
EditPackages=Core
EditPackages=Engine
EditPackages=Fire
EditPackages=Editor
EditPackages=UnrealEd
...
EditPackages=FrightScript
在这些“编辑包”的最下端添加一个条目 ExampleMutator 结果如下:
....
EditPackages=FrightScript
EditPackages=ExampleMutator
用编程的知识说明一下,EditPackages 是一个数组
这些内容表示向数组中添加元素,这些名字是游戏中的目录名,
当编译时,编译器会将这些目录中的 .uc 类文件打包成一个 .u 文件
.u 文件就是目录编译之后的包
编译之前,我们要给俺们自己的插件类 写一点东西。
插件类是什么?在目录 Classes 中的 ExampleMutator.uc 就是用来写插件类的。
class ExampleMutator extends Mutator;
defaultproperties
{
GroupName="KFExampleMutator"
FriendlyName="Example Mutator"
Description="Mutator description here"
}
虚幻脚本中的 继承 使用 extends 关键字
这里我们的 ExampleMutator 类继承了 Mutator 类
所以我们目前写的是 官方插件类的子类。然后 defaultproperties 表示默认属性,
这里设置的三个属性 是从父类继承过来的,可进行赋值
-
GroupName 表示分组名,必须以 KF 开头否则找不到。
分组名用于排斥激活;如果有两个不同版本的职业插件 v6、v7 它们的
GroupName 相同,就可确保 v6、v7 只能激活其中一个。
-
FriendlyName 表示显示用名称
Description 表示描述信息,可能在选插件时能看到
编译插件也许一个命令就能执行,但是修改代码 再次编译时会碰到小问题,
因为之前打包好的 .u 文件要手动删除,还有一个 txt文件要删掉。
为了更方便的修改编译我们的MOD包,需要写一个批处理
假设我们的 KF目录 在E盘steam目录下:
del "E:\steam\steamapps\common\KillingFloor\System\ExampleMutator.u"
"E:\steam\steamapps\common\KillingFloor\System\UCC.exe" make
del "E:\steam\steamapps\common\KillingFloor\System\steam_appid.txt"
pause
第二行启动 UCC.exe 进行编译,编译什么包 它会去看之前的配置;
第一行、第三行 删除了由 UCC 生成的文件。
将以上内容保存到一个 .bat 批处理文件中,双击即可执行。
这个 bat 可以放到 Classes 目录里,方便查找。