KF1 mod 开发教程
插件设置项
插件的设置项是通过函数进行设置的, 值存储在插件类的“实例变量”中,并且用 config 关键字修饰。

声明变量在前面加个 var 关键字,有点 Javascript 的感觉
var int abc;
实例变量 即“全局变量” 要写在函数的外面,以下是 config 配置项的写法:
var config int abc;
被 config 关键字修饰的变量,会出现在插件的同名配置文件中; 例如“职业插件”的配置文件能在游戏 system 文件夹找到。

以上是插件的配置文件与配置变量的关系,但是为了更好的单人游戏体验 需要用到几个函数
填充玩家信息
一般玩家不会去找配置文件,而是在游戏中激活插件 再设置插件配置; 为了实现这个过程,需要先了解一个插件函数 FillPlayInfo 填充玩家信息,虽然名字有点古怪。

示例代码如下:
static function FillPlayInfo(PlayInfo PlayInfo)
{
	Super.FillPlayInfo(PlayInfo);

	PlayInfo.AddSetting(default.RulesGroup, "变量名", "设置描述", 0, 0, "设置类型");
}
该函数有 static 关键字表示“静态函数”。在第一行访问了超类同名函数, 是为了让超类做一些提前准备,过程如此 只要这样写即可;PlayInfo 是作为参数传进来的对象,每调用一次 AddSetting 函数就会生成一个插件配置项(仅游戏中 插件设置)

添加配置项函数 AddSetting 的参数说明
  1. default.RulesGroup:表示默认属性的规则组,写法固定,具体定义在 Info 类中。
  2. 字符串 "变量名": 用来匹配 config 实例变量。
  3. 字符串 "设置描述":提供输入栏的简要说明。
  4. 字符串 "设置类型":可选值为 "check", "text", "select" 分别表示 单选按钮、文本框、下拉框。
描述之后会有两个 0 的参数值,因为是不重要的属性 这里暂不解释。 变量名 和 设置描述 都可自由填写,建议用英文;只有“设置类型”稍微讲究一点,因为有三种可选值。


类型为 check 单选按钮示例代码,前提定义了 bEnabled 实例变量并 config 修饰
一般单选按钮对应的变量类型为 bool
PlayInfo.AddSetting(default.RulesGroup, "bEnabled", "Enabled?", 0, 0, "check");
类型为 text 文本框示例
第二个写法规定了 字符长度和取值范围,取值范围的定义 主要用于限制数字
PlayInfo.AddSetting(default.RulesGroup, "HealthMax", "Maximum Health", 0, 0, "text");

// 最大 3 个字符 , 并且值的范围在 100 - 200
PlayInfo.AddSetting(default.RulesGroup, "HealthMax", "Maximum Health", 
0, 0, "text", "3;100:200");
类型为 select 下拉框示例代码,可选值以 "Value1; Text1; Value2; Text2" 的格式设定:
// 设置一个武器列表 供下拉选择
PlayInfo.AddSetting(default.RulesGroup, "StartWep", "Starting weapon", 
0, 0, "select", "0;Deagle;1;Bullpup;2;LAR");
填充玩家信息函数,只是在游戏中提供插件配置,如果是专用服务器启动插件 应直接修改配置文件; 编译插件后,会生成 插件类.ini 配置文件。

完整的示例代码:
class ABCMutator extends Mutator;

// 配置变量
var config bool My_bEnabled;
var config int My_txt;
var config string My_Weapon;


// 配置项
static function FillPlayInfo(PlayInfo PlayInfo)
{
	Super.FillPlayInfo(PlayInfo);

	PlayInfo.AddSetting(default.RulesGroup, "My_bEnabled", 
		"this is bEnabled", 0, 0, "check");
	PlayInfo.AddSetting(default.RulesGroup, "My_txt", 
		"this is txt", 0, 0, "text", "3;100:200");
	PlayInfo.AddSetting(default.RulesGroup, "My_Weapon", 
		"this is Weapon", 0, 0, "select", "0;Deagle;1;Bullpup;2;LAR");
}
获得描述文本
鼠标悬停在设置项上时 可以查询到详细说明,只需要设置 GetDescriptionText 函数的返回值。

函数过程为 接收选项名,进行判断输出描述内容:
static function string GetDescriptionText(string SettingName)
{
	switch (SettingName)
	{
	    switch (SettingName)
	    {
	        case "My_bEnabled":
	            return "Hello World! this is a CheckBox";
	        case "My_Weapon":
	            return "Select A Weapon.";
	    }
	}

	return Super.GetDescriptionText(SettingName);
}
函数接收到的参数 SettingName 实际上是配置的变量名,用 switch 进行比较 返回对应的描述内容。 最后的一个 return 只是匹配不到时 让超类继续访问别的插件描述函数,即 多插件兼容操作,也许变量名在别的插件类中。

所以对于不同的插件都有配置变量时,尽量名字不要相同。
可以给配置变量加个前缀 如:My_HealthMax