- A+
1、简介
与端游不同,目前大部分手游战斗设计上没有采用实时交互,只在战斗开始和结束时,服务器和客户端才有通讯。整个战斗过程的逻辑全部运行在客户端。这种设计在弱网络下,依然能有良好的战斗体验,但是由于战斗逻辑完全没有经过服务器,导致外挂作弊的难度大大降低。
目前客户端可以作弊的方式有:
1)内存修改器
这种最为普遍,通过修改攻击力,HP等达到过关的目的,常用工具如烧饼大师、八门神器等,
2)加速器
加速游戏运行,以快速过关练级,例如变速齿轮。
3)协议破解
伪造战斗胜利包上报
4)客户端破解
无敌,全屏攻击等
2、服务端策略
这里例举两种方案:
1、客户端上报关键数据,服务端对过程进行验算。
2、客户端上报全量数据,服务端进行战斗重演。
战斗重演通常单独搭建一组monosvr进行验证,它的好处是前后台采用同一套代码,准确度高,但由于上传数据量大,计算量大,需要消耗大量网络流量,和大量服务器资源。
如果选用的对关键数据进行验算的方案,从玩家角色的角度,采集以下数据。
2.1 具体采集数据有
命中怪的技能序列
被击中序列
Buff序列
被特殊怪击中序列
2.2 通过这些数据可以检验的点有
单次输出伤害
输出总伤害
单次承受伤害
承受总伤害
技能次数
技能CD
技能攻击范围
技能合法性
Buff触发合法性
怪生成合法性
总伤害与怪总血量比较
消耗时间
被命中(无敌)
隐藏怪固定频率使用全屏命中但无伤害的技能,并上报该技能的命中次数,服务器需根据战斗时长,频率,校验玩家被该技能命中的次数。用于对无敌闪避状态的检测。
2.3 优点
只上报关键数据, 节省网络流量和服务器资源。校验直接在gamesvr上进行,架构简单,无需另外搭建checksvr。 接口调用简单, 无需回调。能有效应对:内存修改,资源破解及协议破解,变速器。
2.4 缺点
没有采集每帧的数据,缺乏对AI校验,玩家移动操作校验。但如果游戏本身是一个数值型游戏,操作的作用较弱,且有时间和次数限制,因此重点是验证对排名奖励影响大的输出伤害。承受伤害对排名奖励影响很小。另一个问题是容易误报。由于前后台不是同一份代码,且重度游戏数值复杂,Buff类型多,副本加成等,服务端容易造成误报。
2.5 如何应对
首先前后台用不同代码也有个好处是可以互相印证。
尽量使用公共的数值资源,战斗相关需求与改动抄送后台开发同事。
给与一定的阈值便于容错,并提供灵活的开关配置,在外网出现大量误杀时先提高阈值或关闭相关开关。
3、一些经验
1、如何做正确性排查?
战斗详细日志较大,可以只在出错时拉取客户端详细日志。
2、如何降低误报?
设置更小范围预警值,达到预警值时不报错,只采集日志。
优化措施:
进程启动时对常用数据资源进行提取加工后保存,如某副本怪加成后属性。使在循环中对数据查找复杂度达到O(1)。
在一次对攻击序列的遍历中,同时验证多个策略,如输出伤害,技能CD等。
![手游服务端战斗校验攻略 | 游戏开发](https://tutu123.test.upcdn.net/862328-fa2dc3a2371f4064ad8f8b09c0d6a898.png)
![手游服务端战斗校验攻略 | 游戏开发](https://youxijia.net/wp-content/themes/begin/img/blank.gif)
Gad祝大家新年快乐!
Gad-GameDev∣腾讯游戏开发者平台
长按,识别二维码,加关注
免费组件下载丨专业知识学习
组队游戏制作丨项目孵化渠道
国内业界首家专业独立游戏开发者平台。
面向游戏从业者,
打造开放、互联、回馈、分享的专业游戏人社区。