XYGame-网络同步3-防作弊

梦想游戏人
目录:
游戏开发

GIT https://git.oschina.net/dreamyouxi/XYGame

对应工程是ClientServer 服务器

客户服务端 ClientServer

运行在服务端的软件。 用于模拟客户端的运算 来校验数据,原则上 只是UnityClient的一个场景 和部分修改代码 没有UI 只有逻辑,有单独的线程 负责和 LogicServer通信等

由于所有逻辑都在客户端,执行,像战争迷雾,客户端逻辑错乱,开辅助软件刷号 刷金币等,操作型的作弊 对于手游,我没什么解决方法,对于各个客户端逻辑的正确性,可以通过ClientServer 来效验,具体流程

战斗完成后,战斗服务器 会把游戏帧数据保存 到redis  或者文件什么的,LogicServer 会向ClientServer发起 数据效验请求,带上装备信息,战斗id 等基本信息,ClientServer 可以做成一个队列,收到请求后立刻和客户端一样的算法 来快速模拟这句游戏,然后匹配战斗结果 是否一致,

有一层小优化就是可以预先判定各个客户端的数据是否一致,一致才发起数据效验,目前实现的ClientServer 只相比客户端多了100多行代码,开发逻辑时 不需要特地在意,打包的时候 选择ClientServer 场景即可,GIT连接的UnityClient工程中 已实现

由于服务器没有显卡,运行Unity 可用 xxx.exe -batchmode 命令来运行,

当然,只是开发版本,运营的话 还要改动大量客户端代码,比如吧View 音效 特效等东西去掉,只留下逻辑

等代码,当然客户端框架设计得好的话可以很简单就移除掉View Audio 等模块。

这种效验方式只能在战斗结束后才能效验,如果玩家作弊,虽然对其他玩家不会有太大的影响,但是有时候还会在游戏过程中需要立刻阻止 或者响应很快的知道某客户端作弊,强行掉线 不让其进行游戏的这种需求的话,

方案:服务端的ClientServer 同步模拟游戏,然后一定Tick 对整个游戏系统 做信息摘要,比如求一次hash 来做对比,这种在不需要知道客户端作弊内容的情况下,还比较好,当然也可以用客户端之间来做对比(所有客户端都作弊 那就无解了,也存在作弊内容不一样的情况), 这种粗暴的强行不让游戏的做法比较粗暴,可以让整盘游戏失效,也可以做到 谁作弊 谁强行掉线

端游还可以开个守护进程监测系统进程活动,类似于TX的TP系统,不过也防不了高手

Scroll Up