设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2633|回复: 3
打印 上一主题 下一主题

[已经解决] 【专业伸手党】游戏时间与WINDOWS系统时间同步并验证防作弊

[复制链接]

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

跳转到指定楼层
1
 楼主| 发表于 2013-3-6 02:34:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10星屑
论坛里面有一个《仿牧场时间》的工程,里面也有应用到ruby自带的time函数,不过不是我想要的效果。
P叔之前说的那个time函数的验证,也说实在的还是不知道具体怎么用。

上面两句和本文无直接关系,请无视。。。。

============================时间的分割线==============================

好几年前就想实现一个类似农场的游戏,种下一个白菜,十二小时成熟,这时候,退出游戏,甚至是关闭电脑
当十二小时过去再打开游戏,白菜就熟了。

据说应用time函数就可以完美达成这一效果,P叔给了一个思路,只要在白菜事件里面设定分歧“当变量A 大于等于12”,
再次进入游戏的瞬间,进行系统time校队,变量A代入时间,大于等于十二小时,就判定为成熟.

现在有一个问题:如何进行反作弊验证,当玩家退出游戏,把windows系统的时间改晚12小时,那么再进入游戏,岂不会
看到白菜瞬间成熟了?玩手机游戏的时候我经常刷系统时间的方法来作弊,现在自己的游戏非常不希望别人能那么容易作弊,
我自己脑子比较简单,设想了一个反作弊的方法,只是我没有能力去做出它。

如果是网游的话,就简单,直接以服务器时间作为依据,但是RM是单机游戏,反作弊非常的难啊。
具体思路就是,在退出游戏之前,系统自动记录一个数据,就是当时的系统时间,然后当玩家再次进入游戏的时候,会进行验证
如果当前系统时间不正常,就会进行积分惩罚或者是退出游戏之类的。(问题是怎么才能知道系统时间异常啊啊啊)


伸手党之所以被称为伸手党,是因为他连脑子都不肯动,最好是一个完整的工程拿到手,还外带说明,这样才会满足。

so,希望有人能给个完整的工程,也算是给我们这些新手的一个福利吧,鉴于难度,这次给10VIP的悬赏。

最佳答案

查看完整内容

这里有两个思路: 思路1: 一、首先需要用到这篇文章的东西: http://rpg.blue/thread-201237-1-1.html 二、这段是Windows的BAT脚本:这个脚本的作用是从 http://open.baidu.com/special/time/ 抓取时间,并同步给系统。 三、可以结合以上两点,强制从网络同步时间。 缺陷: 1、没有删除IE临时文件,造成baidu_time(XXXX)的XXX值过旧,从而引起时间偏差。 2、需要网络支持 思路2: 可以双项判定 系统时间,以及RM自带的游戏经过 ...

Lv1.梦旅人

匿·蹤

梦石
0
星屑
65
在线时间
99 小时
注册时间
2006-3-19
帖子
456
来自 2楼
发表于 2013-3-6 02:34:26 | 只看该作者
本帖最后由 OCTSJimmy 于 2013-3-6 20:05 编辑

这里有两个思路:
思路1:
一、首先需要用到这篇文章的东西:
http://rpg.blue/thread-201237-1-1.html

二、这段是Windows的BAT脚本:
  1. title 获取网络时间,同步到本机(需联网)
  2. del /f /s /q "%userprofile%\Local Settings\Admin\Temporary Internet Files\*.*"
  3. rem 这句的作用是清除IE的临时文件,否则时间可能会不准。路径请自行修改。
  4. cd /d "%tmp%"
  5. rem 至临时文件目录
  6. (
  7. echo With CreateObject^("Microsoft.XMLHTTP"^)
  8. rem VBS脚本,建立XMLHTTP通信对象
  9. echo .open "get", "http://open.baidu.com/special/time/", False
  10. rem VBS脚本,以get模式打开[url]http://open.baidu.com/special/time/[/url]
  11. echo .send
  12. rem 发送get请求
  13. echo WScript.echo DateAdd^("s",CLng^(Left^(Split^(Split^(.responseText,"baidu_time("^)^(1^),")"^)^(0^),10^)^),"1970-1-1 8:00"^)
  14. rem 日期加法运算(秒,取整(左取(切割(切割(源代码,"baidu_time(")(切割后的后半部分),")")(切割后的前半部分),10位)),"1970-1-1 8:00")
  15. rem 即对日期:1970-1-1 8:00做加法运算,加上自源代码中取出的 "baidu_time(XXX)"中XXX的前10位 的秒数
  16. echo End With
  17. rem 结束通信对象的With
  18. )>gettime.vbs
  19. rem 以上脚本全部写入gettime.vbs
  20. for /f "tokens=1*" %%i in ('cscript //nologo gettime.vbs') do date %%i & time %%j
  21. rem 获得gettime.vbs的执行结果进入BAT的变量i,每列步进一个变量,并做操作 设定系统日期 为i ,设定系统时间为 j
  22. rem 每列步进一个变量即:假如第一列进入变量i,第二列就进入变量j,第三列就进入变量k........
  23. echo 本机系统时间设置完成!
  24. pause
复制代码
这个脚本的作用是从 http://open.baidu.com/special/time/ 抓取时间,并同步给系统。
三、可以结合以上两点,强制从网络同步时间。
缺陷:
1、没有删除IE临时文件,造成baidu_time(XXXX)的XXX值过旧,从而引起时间偏差。
2、需要网络支持

思路2:
可以双项判定 系统时间,以及RM自带的游戏经过时间。
一颗菜的起始时间需要用两个量表示:A当前系统时间 B游戏经过时间,判定是否成熟,就使用AND判定。
这个是伪代码,进用作思路提供:

  1. if cai.a <= 当前系统时间 and cai.b + 60*60*12 <= 游戏经过时间
  2.   p "菜成熟啦"
  3. else
  4.   if cai.a <= 当前系统时间 and cai.b + 60*60*12 > 游戏经过时间
  5.    p "由于你修改了系统时间,所以菜黄掉了"
  6.   else
  7.      if cai.a > 当前系统时间 and cai.b + 60*60*12 <= 游戏经过时间
  8.      p "变速齿轮,把菜都捣烂啦"
  9.      end
  10.   end
  11. end
复制代码
=============================================================
补充,思路2巨大BUG——没有考虑到关闭RM的情况,那么可以这样子修正:
关闭RM前,写入当前时间进入某变量,开始游戏时也写入当前系统时间进入另一个变量。
假设该变量名分别为close_time_system, open_time_system,close_over_time_system, 其表示关闭游戏系统时间与开启游戏系统时间,以及关闭游戏后经过的累积时间
那么上面的伪代码需要改为:

  1. close_over_time_system += open_time_system - close_time_system
  2. if 转为秒数(当前系统时间 - (open_time_system - close_time_system) - close_over_time_system - cat.a) >= 60*60*12 and 当前游戏时间 - cat.b >= 60*60*12
  3.   p "菜成熟啦"
  4. else
  5.   if 转为秒数(当前系统时间 - (open_time_system - close_time_system) - close_over_time_system - cat.a) >= 60*60*12 and 当前游戏时间 - cat.b < 60*60*12
  6.    p "由于你修改了系统时间,所以菜黄掉了"
  7.   else
  8.      if 转为秒数(当前系统时间 - (open_time_system - close_time_system) - close_over_time_system - cat.a) < 60*60*12 and 当前游戏时间 - cat.b >= 60*60*12
  9.      p "变速齿轮,把菜都捣烂啦"
  10.      end
  11.   end
  12. end
复制代码

点评

网速差和没网的时候就不能用了= =...  发表于 2013-3-14 22:54
不明觉厉  发表于 2013-3-7 22:18
又一大神~  发表于 2013-3-7 15:03
膜拜中……  发表于 2013-3-6 11:01
卐忍 → 解忍 → 元忍 → 隐忍 → 卍忍 → 匿踪(最终)
完全退步到了卐忍阶段
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
706
在线时间
183 小时
注册时间
2012-4-21
帖子
145
3
发表于 2013-3-8 21:06:47 | 只看该作者
在DNF的单机版中有防修改工程的脚本……
以上防改工程……
以下放改作弊时间……
可以利用倒计时这种东西……虽然这方法有点懒,还不可以离线生长……
或者有设置像“度日如年”的这种东西,也就是自己在游戏中设定一个时间段,过得很快的那种,仿制《牧场物语矿石镇》
其实这很简单,设置个倒计时,到0就+1个变量。再弄个显示变量的脚本。。但是这种方法问题就是没有“分钟”的概念。
个人觉得可以。

点评

变速齿轮大爱  发表于 2013-3-15 09:34
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
239
在线时间
2399 小时
注册时间
2008-4-11
帖子
12326

贵宾第6届短篇游戏比赛季军

4
 楼主| 发表于 2013-3-14 22:44:02 | 只看该作者
OCTSJimmy 发表于 2013-3-6 07:32
这里有两个思路:
思路1:
一、首先需要用到这篇文章的东西:

可否做一个工程给我呢?虽然明白了机制,但是我做不出来啊,谢谢

点评

是否要退悬赏?  发表于 2013-3-30 23:13
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-22 21:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表