dcoder
2022-11-14 12:08:47 +08:00
上面基本都没说清楚, 简单的说是这样的:
游戏世界的模拟都在 server 做. server 收到 all/most clients 的 update messages, 然后自己一个个逻辑帧往前模拟计算.
然后把模拟结果发回各个 clients. 虽然单个 client 可以对所有其他 player 做预测(prediction + rollback netcode)来制造本地延迟很地的幻象(提高本地 player 的体验), 但是最终还是要服从 server 的模拟结果 (和 server 冲突的时候要 state rollback).
server 在收到每个 client 的 update message 后, 都要校验, 跟前一个逻辑帧比较, 这个 client 的新 update 是否合理?
如果 client 自己在单方面加速, 那开始加速那几帧的 update 就通不过逻辑校验了 -- 比如违反了游戏世界的物理规律, 移动速度和动作过快.
但是有些东西是比较难反作弊的: 比如 fps 自动爆头, 因为 client 的操作和 update 都在游戏模拟中是合理的, server 不知道是这个玩家作弊了,还是枪法太好.