Project1

标题: 我想让游戏设时间限制, 过几天就打不开那种,xp能..... [打印本页]

作者: 惊天动地    时间: 2015-3-16 16:33
标题: 我想让游戏设时间限制, 过几天就打不开那种,xp能.....
本帖最后由 惊天动地 于 2015-3-19 15:51 编辑

我想让xp游戏设时间限制, 过几天就打不开那种,即使改动电脑时间也不能运行的,能做到吗?能编脚本吗 ?最好有范例  请指教
作者: 惊天动地    时间: 2015-3-16 17:04
那麻烦您给个范例行吗

作者: 惊天动地    时间: 2015-3-16 18:49
是发错了  可我改不回来了 ,麻烦您告诉我 这个问题怎么弄好吗  ?千恩万谢
作者: 芯☆淡茹水    时间: 2015-3-16 19:23
本帖最后由 芯☆淡茹水 于 2015-3-16 19:27 编辑

插入到脚本最上部,可调节里面的限制天数。

在游戏打包发给别人玩之前,或自己测试时  时限已到 ,
可把 Data 文件夹下的 Timedata.rxdata 文件删掉。
  1. unless FileTest.exist?("Data/Timedata.rxdata")
  2.   f = File.open("Data/Timedata.rxdata", "wb")
  3.   time = Time.now
  4.   Marshal.dump(time, f)
  5.   f.close
  6. else
  7.   f = File.open("Data/Timedata.rxdata", "rb")
  8.   old_time = Marshal.load(f)
  9.   f.close
  10.   if Time.now - old_time >= 86400 #<= 秒。 86400 秒 = 1 天
  11.     p "使用时限已到!"
  12.     exit
  13.   end
  14. end
复制代码

作者: 惊天动地    时间: 2015-3-16 20:27
芯☆淡茹水 发表于 2015-3-16 19:23
插入到脚本最上部,可调节里面的限制天数。

在游戏打包发给别人玩之前,或自己测试时  时限已到 ,

老师你好
我游戏Data 里没有Timedata.rxdata    找了半天没看到啊   
作者: 惊天动地    时间: 2015-3-16 20:33
芯☆淡茹水 发表于 2015-3-16 19:23
插入到脚本最上部,可调节里面的限制天数。

在游戏打包发给别人玩之前,或自己测试时  时限已到 ,

您好,我复制进去了,能打开,没报错, 我是脚本盲  ,别见笑, 比如说我设置1天后失效,或十分钟后失效,怎么改数字呢   在哪改呢?谢谢!万分感谢
作者: 惊天动地    时间: 2015-3-19 15:38
芯☆淡茹水 发表于 2015-3-16 19:23
插入到脚本最上部,可调节里面的限制天数。

在游戏打包发给别人玩之前,或自己测试时  时限已到 ,

有位老师说  写入注册表比较安全,怎样写入注册表呢? 谢谢
作者: 惊天动地    时间: 2015-3-19 15:48
芯☆淡茹水 发表于 2015-3-16 19:23
插入到脚本最上部,可调节里面的限制天数。

在游戏打包发给别人玩之前,或自己测试时  时限已到 ,

可能是我的问题模糊,我想 最好能设定使用时间 ,但改电脑时间无效的那种,能做到吗?谢谢老师
作者: 芯☆淡茹水    时间: 2015-3-19 17:50
惊天动地 发表于 2015-3-19 15:48
可能是我的问题模糊,我想 最好能设定使用时间 ,但改电脑时间无效的那种,能做到吗?谢谢老师 ...

我给你的有设定时间啊,也许说得太含蓄了,LZ不能理解;
再一个,如果改电脑时间无效的话,就要获取网络时间;
第三个,最近在加紧填坑,较为费时间的东西你还是找其他老师吧。
作者: 布罗利    时间: 2015-3-21 19:36
本帖最后由 布罗利 于 2015-3-21 19:53 编辑

需要获取百度的时间,这里用到一个脚本,至于作者嘛我也不知道是谁了,这个脚本收藏好长时间了,如果作者看到请理解
RUBY 代码复制
  1. module ReadTime
  2.   module Config
  3.     #小时,分钟,秒设置的变量编号
  4.     HOUR   = 1
  5.     MINUTE = 2
  6.     SECOND = 4
  7.  
  8.     #年月日
  9.     YEAR  = 9
  10.     MON   = 10
  11.     MDAY  = 11
  12.   end
  13. end
  14.  
  15.  
  16.  
  17.  
  18. module SAFX
  19.   module_function
  20.  
  21.   def to_param(a)
  22.     case a when Integer then "L" when String then "p" end
  23.   end
  24.  
  25.   def to_ptr(a)
  26.     case a  when Integer then a when String then [a].pack('p').unpack("L").first end
  27.   end
  28.  
  29.   def api(dll,func)
  30.     lambda{|*args|
  31.        Win32API.new(dll,func,args.map{|x|to_param(x)}, 'i').call(*args)
  32.     }
  33.   end
  34.  
  35.   def memread(addr, size)
  36.                         buf = "\0"*size
  37.                         api('Kernel32','RtlMoveMemory').call buf, addr, size
  38.                         buf
  39.         end
  40. end
  41.  
  42. module ReadTime
  43.  
  44.  
  45.  
  46.   class << self
  47.     TYPE_VOIDP = "L"
  48.     PTRLEN = 4
  49.     include SAFX
  50.     extend SAFX
  51.     %w[gethostbyname socket connect send recv closesocket].each{|name|
  52.        define_method(name, &api('ws2_32', name))
  53.     }
  54.     api('ws2_32', 'WSAStartup').call 0x202, "\0"*2048
  55.  
  56.     def get
  57.         # get IP
  58.         baidu =  gethostbyname("open.baidu.com\0")
  59.         raise "不能ping到open.baidu.com" if baidu == 0
  60.         addr = memread(baidu+PTRLEN*3, PTRLEN)
  61.                                 addr = addr.unpack(TYPE_VOIDP).first
  62.                                 addr = memread(addr, PTRLEN)
  63.                                 addr = addr.unpack(TYPE_VOIDP).first
  64.                                 addr = memread(addr, PTRLEN)
  65.                                 u = addr.unpack("L").first
  66.  
  67.         #setup TCP
  68.         tcpclient = socket(2, 1, 6)
  69.         raise "无法初始化TCP" if tcpclient == -1
  70.         #connect
  71.         result = connect tcpclient, [2, 80, u].pack("SnLx8"), 16
  72.         raise "不能连接到open.baidu.com" if result == -1
  73.  
  74.         #make request
  75.         req = "GET /special/time/ HTTP/1.1\r\n"  <<
  76.               "host: open.baidu.com\r\n" <<
  77.               "\r\n" <<
  78.               "\r\n\r\n"
  79.         #send
  80.         send tcpclient, req, req.length, 0
  81.  
  82.         #receive
  83.         buf = "\0"*1024
  84.         ret = ""
  85.         while true
  86.           len = recv tcpclient, buf, buf.length, 0
  87.           break if len < 1
  88.           ret << buf[0, len]
  89.         end
  90.  
  91.         #shutdown
  92.         closesocket tcpclient
  93.  
  94.         ret = ret.unpack("C*").pack("C*")
  95.         number = ret[/HTTP\/1\.1 (\d+)/, 1].to_i
  96.  
  97.         if number != 200
  98.           raise "HTTP错误: #{number}"
  99.         end
  100.  
  101.  
  102.         #gettime
  103.         val = ret[/window\.baidu_time\((\d+)\)/, 1].to_i
  104.         if val == 0
  105.           raise "网络数据格式已变更,请联系作者"
  106.         end
  107.         curtime = Time.at val / 1000
  108.         $game_variables[ReadTime::Config::HOUR] = curtime.hour
  109.         $game_variables[ReadTime::Config::MINUTE] = curtime.min
  110.         $game_variables[ReadTime::Config::SECOND] = curtime.sec
  111.  
  112.         $game_variables[ReadTime::Config::YEAR] = curtime.year
  113.         $game_variables[ReadTime::Config::MDAY] = curtime.mday
  114.         $game_variables[ReadTime::Config::MON] = curtime.mon
  115.  
  116.      end
  117.   end
  118. end
  119.  
  120. def 获取时间
  121.   ReadTime.get
  122. end




把这个脚本插入到脚本Main之前,然后弄个事件,用事件的脚本功能,写上获取时间
这样1号和2号变量就变成百度时间了,1号是小时,2号是分钟
然后用个事件判断,如果1、2号变量到了一定的程度,就结束游戏
具体见范例吧


限制游戏试玩时间.rar (189.23 KB, 下载次数: 43)
作者: Eric_Zh    时间: 2015-3-27 18:03
https://rpg.blue/forum.php?mod=viewthread&tid=377728
这个也可以,这个是注册表方法




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1