KF1 mod 开发教程
客户端模拟函数
如果要模拟多人游戏情况,建议是装一个 VMware 虚拟环境, 然后往 VM 中安装一个 XP系统,在虚拟环境中启动另一个 KF1 游戏程序。

提前说明:进 VMware 在命令窗口不知道退出时,请输入 shutdown


第一次使用 VMware 时,将克服一下问题:
  1. 安装 VMware,并找个序列号激活
  2. 到 BIOS 启动 CPU 虚拟化,解决 “Intel VT-x 处于禁用状态”问题
  3. 下载并安装 XP 系统到 VM 中
  4. 虚拟XP系统中安装 VMtools 工具
  5. 设置 VM 共享文件夹
  6. 将 KF1 通过共享文件夹,复制到 虚拟XP系统中
这个过程对于初学者来说一个挑战 但也是一劳永逸的; 有了虚拟机 就可以一个人测试“多人游戏”,并不是谁都有时间来一起调试。


准备就绪之后,原桌面启动游戏,再到 VM中启动一个游戏
建议测试用破解版,将插件编译后的内容 复制过去; 目标为 system 文件夹,将编译插件生成的 .u 和 .ucl 文件扔过去

但是VM虚拟机中的 KF1 就不需要复制mod包了,因为进房时 会加载缓存。
模拟函数
给函数加上模拟关键字,即可实现客户端对该函数的执行。 前提该类已设置好了“网络所有权”,表示客户端能感知到 插件对象的存在。
defaultproperties
{
	RemoteRole=ROLE_SimulatedProxy
	bAlwaysRelevant=true
	bAddToServerPackages=true
}
示例代码,给以前写过的函数加上 simulated 模拟关键字
// 游戏开始之后
simulated function PostBeginPlay()
{
	SetTimer(5, false);
}

// 计时器
simulated function Timer()
{
	local PlayerController PC;

	PC = Level.GetLocalPlayerController();
	if (PC != none)
	    PC.Player.Console.Message("Hello World!", 0);
}
以上代码在能在“客户端”进入房间5秒后执行; 即 多开游戏进行测试,能发现两边都能执行到该函数。

请注意观察 上述两个函数都加了 simulated 关键字
如果把 simulated 关键字去掉,将只有房主端能看到输出, 客户端则看不到输出内容(~波浪键,控制台窗口)

在插件中关于玩家出生的函数 ModifyPlayer() 可以不加模拟关键字, 因为玩家每次出生都直接在“服务端”进行处理,并不需要客户端 再次处理。


小提示:
仅在客户端执行的函数
实际上并没有只在客户端执行的函数,只是可以通过“条件判断”来排除服务器端的执行

请记住:条件判断一般是写在函数体里面
// 判断网络模式 不是“专用服务器”
if (Level.NetMode != NM_DedicatedServer)
{
	// 这里的代码,只在客户端执行
}
从机翻来看 就是关卡的网络模式 不等于 专用服务器时,就表示仅客户端执行; 有了这种代码,我们可以在客户端做出不一样的效果
simulated function PostBeginPlay()
{
	// 在客户端设置 clot 的默认值,环境辉光最亮
	if (Level.NetMode != NM_DedicatedServer)
		class'KFChar.ZombieClot'.default.AmbientGlow = 255;
}
clot 是杀地板中最低级的白皮怪,属性 AmbientGlow 表示“环境辉光”
代码效果为:客户端将看见带闪烁皮肤的 clot怪
根据条件判断,服务器端将不执行该效果


由于篇幅有点长,下次再详细讨论一下网络游戏中的变量复制