当前位置:网站首页>【防作弊】Unity防本地调时间作弊
【防作弊】Unity防本地调时间作弊
2022-07-30 06:11:00 【博赢天下】
目录
1.需求背景
- 许多游戏有一种“体力”的概念,一般跨越30分钟(NowTime-LastRewardTime)恢复一个。如果是单机游戏,玩家就可以改本地时钟,NowTime一下跑很大块,超过30min就可以立即获得奖励了。
- 问题:如何防止这种本地改时间作弊。
2.解决方案
2.1 初步方案
- 维护开机时间的偏移量,计算Passing(N-L)差的时候带上开机时间偏离量,即可规避改时间的作弊行为,保证时间差运算合法。
- 以Unity使用C#代码为例:
public static DateTime GetSystemStartupTime() { return DateTime.Now.AddMilliseconds(-Environment.TickCount); }在游戏启动时获取MobileBoot的时间戳记为 Boot.Old。
那么就可以在下次判定奖励获取时,计入一个 Boot.New-Boot.Old的时间差 offset修正,防止改时间的作弊行为。包含防改时间作弊的计算奖励时间差伪代码如下:
// 游戏启动时记录 DateTime bootOld = GetBootDate(); DateTime bootNew = GetBootDate(); int rewardHeardCount = ((NowTime - LastRewardTime) - (bootNew - bootOld)) / 30;
2.2 最终方案
- 当玩家不重启,不关闭app,以上非联网状态是可以纠正的。但你想想,如果玩家app再改时间,上面的方式也是无法纠正的。
- 所以实际解决方案,应该在游戏启动时同步Server时间戳是第一步,在游戏中某次检测识别到 Boot.New 与Boot.Old不一致时,表明玩家在app未关闭的情况下改了时间,做一次弱联网同步时间戳,而不是用本地校验直接算结果(本地永远是不可靠的)。
3.纯单机如何防作弊
- 兄弟,纯单机了还想防…… 你又不允许起后台VirtualServer计时器
- 其实,纯单机,能识别,但不能纠正,毕竟咱们没有时间计时器了,不依靠外部Service辅助就不能获取正确的当前时间了。
边栏推荐
- 千万级数据量的表,怎样最快速度查询?
- 获取controller中所有接口路径和名称
- Go 使用mencached缓存
- MySQL题外篇【ORM思想解析】
- The calculation and source code of the straight line intersecting the space plane
- Ali two sides: List several tips for Api interface optimization
- 预测人们对你的第一印象,“AI颜狗”的诞生
- DP5340 domestic replacement for CM5340 stereo audio A/D converter chip
- golang : Zap日志整合
- assert
猜你喜欢

【day5】数组

ETL为什么经常变成ELT甚至LET?

Is it possible to use the same port for UDP and TCP?

BGP:边界网关路由协议 无类别的路径矢量EGP协议

AI可通过X光片识别种族,但没人知道为什么

C语言自定义类型详解

入选“十大硬核科技”,详解可信密态计算(TECC)技术点

Ali two sides: List several tips for Api interface optimization

Basic usage of tree arrays

2020 ACM | MoFlow: An Invertible Flow Model for Generating Molecular Graphs
随机推荐
go : 使用 grom 删除数据库数据
RAID disk array
Station B collapsed, what would you do if you were the developer in charge that night?
go : go-redis 基础操作
进制转换。。。
Vue项目通过node连接MySQL数据库并实现增删改查操作
go : go gin returns JSON data
Keil compile size and storage instructions
千万级数据量的表,怎样最快速度查询?
this与super
【雷达目标检测】恒定阈值法和恒虚警(CFAR)法及代码实现
获取controller中所有接口路径和名称
人工肌肉智能材料新突破
Equation Derivation Proof of Vector Triple Product
assert
What are the access modifiers, declaration modifiers, and keywords in C#?Literacy articles
node.js中实现对数据库的链式操作
Redis 如何实现防止超卖和库存扣减操作?
Go: use gorm query record
redis实现分布式锁的原理