游戏中防止加速的一种方法
关键字:游戏 服务器 客户端 防外挂加速
游戏当中有些动作要求必须间隔一定时间才能执行,比如跑步等动作。如果仅在客户端限制的话往往都被加速器(外挂)所破坏。本文假定客户端必须间隔400毫秒的数据包传输,提出服务器端解决加速问题的一种方法。
一、客户端发送若干数据包
t1=tc;
Send(…);
t2=tc;
Send(…);
…
t6=tc;
Send(…);
t1-6:每个数据包必须包含的发送时客户端当前时间值
Tc:客户端当前时间
二、服务器端接收若干数据包
Void OnConnect(void) { IsFirstData = True; } Void OnReceive(…) { ...... T=DataPack.ClientTime; //T当前数据包内的时间值 if(IsFirstData) //第一次接收? { IsFirstData = False; Tsf=Ts; //记录当前服务器时间 Tcf=T; //记录数据包内的客户端的时间值,T=t1 Tlst=T; //保存当次数据包中的时间值 }else { if(T - Tlst < 400) //时间间隔验证 OnError(); if((T-Tcf) - (Ts-Tsf ) > Tnd+ Tx) //时长验证 OnError(); if (Ts-Tsf) > MaxLong //每十分钟初始一次Tsf、Tcf,防止两端时间误差累加放大 { Tsf = ts; Tcf=T; } Tlst=T; //保存当次数据包中的时间值 } …… }
Tsf:服务器收第一个数据包时的当前时间
Ts:服务器当前时间
Tcf:客户端第一个数据包里面的时间值
T:当前接收到数据包内的客户端时间值
Tlst:上次接收到的数据包的时间值
Tnd:网络传输延时时间的最大允许值,常量
Tx:客户端和服务器端的在最大计时周期内(MaxLong)的最大允许的时间累计误差,常量
(T-Tcf):当前数据包和第一个数据包间隔时长
(Ts-Tsf ):当前服务器时间和接收第一个数据包时的间隔时长
MaxLong:最大计时周期:10分钟,常量,适当调整
正常情况下(图一),数据包间隔时间和两端时间是符合规则的。但如果外挂要想插入两个数据包(图二)t7和t8,那么t7必须等于2400,t8必须等于2800才能满足(T - Tlst >= 400)条件,这样在接收到t8的时候(T-Tcf) - (Ts-Tsf )就有800毫秒的误差,当插入的数据包超过一定数量的时候(假定Tnd + Tx=1000)就会触发阀门((T-Tcf) - (Ts-Tsf ) > Tnd + Tx)打开,将该用户列入黑名单并断线。
实际游戏中,有效数据包需要限时,有些游戏不需要,应用起来可能还要复杂些。外挂也可能还有更多的应对策略,但此法可以参考来完善游戏中的防护机制。
游戏中防止加速的一种方法相关推荐
- npm使用国内镜像加速的几种方法
npm使用国内镜像加速的几种方法 在使用npm过程中经常会遇到无法下载包的问题,本人在这里整理了几个npm使用国内镜像加速的方法,希望对大家有所帮助. 原始配置 npm config set regi ...
- 在JavaScript中重复字符串的三种方法
In this article, I'll explain how to solve freeCodeCamp's "Repeat a string repeat a string" ...
- 在js中加html_在HTML文档中嵌入JavaScript的四种方法
在HTML里嵌入JavaScript 在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内嵌,放置在标签之间 (少): 2.放置在有 3.放置自HTML事件处理程序中,该事件处理程 ...
- html怎么样取jsp中的路径,jsp中获得路径的两种方法和获得url路径的方法(推荐)
是解决相对路径的问题,可返回站点的根路径. //这样获得的是绝对路径 //这样获得的是相对路径 能够更有效的防治连接的失效. request.getContextPath()得到的是项目的名字,如果项 ...
- mysql 统计条目_mysql 统计表中条目数量的几种方法
mysql 统计表中条目数量的几种方法 展开 通常的方法是: select count(*) from `table_name` select count(1) from `table_name` s ...
- python写错了怎么更改-Python中修改字符串的四种方法
在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符. 因此改变一个字符串的元素需要新建一个新的字符串. 常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用joi ...
- python自带的shell是什么-python中执行shell的两种方法总结
一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: ...
- matlab中单独存图_Matlab中图片保存的四种方法
Matlab 中图片保存的四种方法 matlab 的绘图和可视化能力是不用多说的, 可以说在业内是家喻户晓的. Matlab 提供了丰富 的绘图函数,比如 ez** 系类的简易绘图函数, surf . ...
- python字符串中某个字符修改_Python中修改字符串的四种方法
在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符. 因此改变一个字符串的元素需要新建一个新的字符串. 常见的修改方法有以下4种. 方法1:将字符串转换成列表后修改值,然后用joi ...
- 在php中可以使用几种方法定义数组,PHP中数组定义的几种方法
在php.html" target="_blank">php和其他编程语言中,需要常常使用数组创建,我们在前端开发中,js的数组创建可以由new array创建,下 ...
最新文章
- 1270: [BeijingWc2008]雷涛的小猫
- java formatter()_Java Formatter locale()用法及代码示例
- icache的方面以及使用
- Flutter时间轴(timeline)
- linux权限bcd码是6,Linux权限管理(1)基本权限
- (二)安装redies,配置,启动
- 键盘定位板图纸_Alienware AW510K RGB矮轴机械键盘评测
- Android studio开发Android图灵智能聊天机器人,课程设计报告
- 搜狐全体员工遭遇工资补助诈骗,冲上微博热搜第一
- 网易云web安全工程师第二天
- 学习shell小窍门
- 移动硬盘中安装ubuntu系统——Vmware Workstation安装
- 勇敢面对人生的苦难(转载自https://www.xuemeiwen.com/)
- 图片转成pdf的免费软件
- (2)如何使用Artemis
- 【战国策】之《齐策·张仪为秦连横说齐王曰》
- ECG起搏器数据库 下载 PacedECGdb
- 一加7p鸿蒙rom,一加5和iPhone7 Plus哪个好?苹果7P与一加5区别对比
- 安卓开发实现双方比赛计时器
- 白银时代房地产如何赚钱?——旅游地产怎样玩?