Project1
标题:
【专业伸手党】游戏时间与WINDOWS系统时间同步并验证防作弊
[打印本页]
作者:
一瞬间的幻觉
时间:
2013-3-6 02:34
标题:
【专业伸手党】游戏时间与WINDOWS系统时间同步并验证防作弊
论坛里面有一个《仿牧场时间》的工程,里面也有应用到ruby自带的time函数,不过不是我想要的效果。
P叔之前说的那个time函数的验证,也说实在的还是不知道具体怎么用。
上面两句和本文无直接关系,请无视。。。。
============================时间的分割线==============================
好几年前就想实现一个类似农场的游戏,种下一个白菜,十二小时成熟,这时候,退出游戏,甚至是关闭电脑
当十二小时过去再打开游戏,白菜就熟了。
据说应用time函数就可以完美达成这一效果,P叔给了一个思路,只要在白菜事件里面设定分歧“当变量A 大于等于12”,
再次进入游戏的瞬间,进行系统time校队,变量A代入时间,大于等于十二小时,就判定为成熟.
现在有一个问题:如何进行反作弊验证,当玩家退出游戏,把windows系统的时间改晚12小时,那么再进入游戏,岂不会
看到白菜瞬间成熟了?玩手机游戏的时候我经常刷系统时间的方法来作弊,现在自己的游戏非常不希望别人能那么容易作弊,
我自己脑子比较简单,设想了一个反作弊的方法,只是我没有能力去做出它。
如果是网游的话,就简单,直接以服务器时间作为依据,但是RM是单机游戏,反作弊非常的难啊。
具体思路就是,在退出游戏之前,系统自动记录一个数据,就是当时的系统时间,然后当玩家再次进入游戏的时候,会进行验证
如果当前系统时间不正常,就会进行积分惩罚或者是退出游戏之类的。(问题是怎么才能知道系统时间异常啊啊啊)
伸手党之所以被称为伸手党,是因为他连脑子都不肯动,最好是一个完整的工程拿到手,还外带说明,这样才会满足。
so,希望有人能给个完整的工程,也算是给我们这些新手的一个福利吧,鉴于难度,这次给10VIP的悬赏。
作者:
OCTSJimmy
时间:
2013-3-6 02:34
本帖最后由 OCTSJimmy 于 2013-3-6 20:05 编辑
这里有两个思路:
思路1:
一、首先需要用到这篇文章的东西:
http://rpg.blue/thread-201237-1-1.html
二、这段是Windows的BAT脚本:
title 获取网络时间,同步到本机(需联网)
del /f /s /q "%userprofile%\Local Settings\Admin\Temporary Internet Files\*.*"
rem 这句的作用是清除IE的临时文件,否则时间可能会不准。路径请自行修改。
cd /d "%tmp%"
rem 至临时文件目录
(
echo With CreateObject^("Microsoft.XMLHTTP"^)
rem VBS脚本,建立XMLHTTP通信对象
echo .open "get", "http://open.baidu.com/special/time/", False
rem VBS脚本,以get模式打开[url]http://open.baidu.com/special/time/[/url]
echo .send
rem 发送get请求
echo WScript.echo DateAdd^("s",CLng^(Left^(Split^(Split^(.responseText,"baidu_time("^)^(1^),")"^)^(0^),10^)^),"1970-1-1 8:00"^)
rem 日期加法运算(秒,取整(左取(切割(切割(源代码,"baidu_time(")(切割后的后半部分),")")(切割后的前半部分),10位)),"1970-1-1 8:00")
rem 即对日期:1970-1-1 8:00做加法运算,加上自源代码中取出的 "baidu_time(XXX)"中XXX的前10位 的秒数
echo End With
rem 结束通信对象的With
)>gettime.vbs
rem 以上脚本全部写入gettime.vbs
for /f "tokens=1*" %%i in ('cscript //nologo gettime.vbs') do date %%i & time %%j
rem 获得gettime.vbs的执行结果进入BAT的变量i,每列步进一个变量,并做操作 设定系统日期 为i ,设定系统时间为 j
rem 每列步进一个变量即:假如第一列进入变量i,第二列就进入变量j,第三列就进入变量k........
echo 本机系统时间设置完成!
pause
复制代码
这个脚本的作用是从
http://open.baidu.com/special/time/
抓取时间,并同步给系统。
三、可以结合以上两点,强制从网络同步时间。
缺陷:
1、没有删除IE临时文件,造成baidu_time(XXXX)的XXX值过旧,从而引起时间偏差。
2、需要网络支持
思路2:
可以双项判定 系统时间,以及RM自带的游戏经过时间。
一颗菜的起始时间需要用两个量表示:A当前系统时间 B游戏经过时间,判定是否成熟,就使用AND判定。
这个是伪代码,进用作思路提供:
if cai.a <= 当前系统时间 and cai.b + 60*60*12 <= 游戏经过时间
p "菜成熟啦"
else
if cai.a <= 当前系统时间 and cai.b + 60*60*12 > 游戏经过时间
p "由于你修改了系统时间,所以菜黄掉了"
else
if cai.a > 当前系统时间 and cai.b + 60*60*12 <= 游戏经过时间
p "变速齿轮,把菜都捣烂啦"
end
end
end
复制代码
=============================================================
补充,思路2巨大BUG——没有考虑到关闭RM的情况,那么可以这样子修正:
关闭RM前,写入当前时间进入某变量,开始游戏时也写入当前系统时间进入另一个变量。
假设该变量名分别为close_time_system, open_time_system,close_over_time_system, 其表示关闭游戏系统时间与开启游戏系统时间,以及关闭游戏后经过的累积时间
那么上面的伪代码需要改为:
close_over_time_system += open_time_system - close_time_system
if 转为秒数(当前系统时间 - (open_time_system - close_time_system) - close_over_time_system - cat.a) >= 60*60*12 and 当前游戏时间 - cat.b >= 60*60*12
p "菜成熟啦"
else
if 转为秒数(当前系统时间 - (open_time_system - close_time_system) - close_over_time_system - cat.a) >= 60*60*12 and 当前游戏时间 - cat.b < 60*60*12
p "由于你修改了系统时间,所以菜黄掉了"
else
if 转为秒数(当前系统时间 - (open_time_system - close_time_system) - close_over_time_system - cat.a) < 60*60*12 and 当前游戏时间 - cat.b >= 60*60*12
p "变速齿轮,把菜都捣烂啦"
end
end
end
复制代码
作者:
853861078
时间:
2013-3-8 21:06
在DNF的单机版中有防修改工程的脚本……
以上防改工程……
以下放改作弊时间……
可以利用倒计时这种东西……虽然这方法有点懒,还不可以离线生长……
或者有设置像“度日如年”的这种东西,也就是自己在游戏中设定一个时间段,过得很快的那种,仿制《牧场物语矿石镇》
其实这很简单,设置个倒计时,到0就+1个变量。再弄个显示变量的脚本。。但是这种方法问题就是没有“分钟”的概念。
个人觉得可以。
作者:
一瞬间的幻觉
时间:
2013-3-14 22:44
OCTSJimmy 发表于 2013-3-6 07:32
这里有两个思路:
思路1:
一、首先需要用到这篇文章的东西:
可否做一个工程给我呢?虽然明白了机制,但是我做不出来啊,谢谢
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1