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

Project1

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

[已经解决] 同步网络时间

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
27 小时
注册时间
2015-2-22
帖子
17
跳转到指定楼层
1
发表于 2015-5-15 20:11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
怎样才能使游戏同步网络时间,我想借此做一个签到系统,每天的这个时候签到可以获得礼品。
求大大给脚本啊

Lv1.梦旅人

梦石
0
星屑
155
在线时间
332 小时
注册时间
2013-7-6
帖子
356
2
发表于 2015-5-16 01:34:26 | 只看该作者
首先要获取时间要有时间提供商,http://www.time.ac.cn/stime.asp
其次要分析有用信息,用正则匹配年月日

具体实践明天试试
偶是熬夜学编程的傻子
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
94
在线时间
648 小时
注册时间
2009-2-3
帖子
238
3
发表于 2015-5-17 04:30:48 | 只看该作者
本帖最后由 lanyaolove 于 2015-5-17 04:32 编辑
  1. module ReadTime

  2.   module Config

  3.     #小时,分钟,秒设置的变量编号, 默认放在了6,7,8号变量里面

  4.     HOUR   = 6

  5.     MINUTE = 7

  6.     SECOND = 8



  7.     #年月日

  8.     YEAR  = 9

  9.     MON   = 10

  10.     MDAY  = 11

  11.   end

  12. end









  13. module SAFX

  14.   module_function



  15.   def to_param(a)

  16.     case a when Integer then "L" when String then "p" end

  17.   end



  18.   def to_ptr(a)

  19.     case a  when Integer then a when String then [a].pack('p').unpack("L").first end

  20.   end



  21.   def api(dll,func)

  22.     lambda{|*args|

  23.        Win32API.new(dll,func,args.map{|x|to_param(x)}, 'i').call(*args)

  24.     }

  25.   end



  26.   def memread(addr, size)

  27.                         buf = "\0"*size

  28.                         api('Kernel32','RtlMoveMemory').call buf, addr, size

  29.                         buf

  30.         end

  31. end



  32. module ReadTime







  33.   class << self

  34.     TYPE_VOIDP = "L"

  35.     PTRLEN = 4

  36.     include SAFX

  37.     extend SAFX

  38.     %w[gethostbyname socket connect send recv closesocket].each{|name|

  39.        define_method(name, &api('ws2_32', name))

  40.     }

  41.     api('ws2_32', 'WSAStartup').call 0x202, "\0"*2048



  42.     def get

  43.         # get IP

  44.         baidu =  gethostbyname("open.baidu.com\0")

  45.         raise "不能ping到open.baidu.com" if baidu == 0

  46.         addr = memread(baidu+PTRLEN*3, PTRLEN)

  47.                                 addr = addr.unpack(TYPE_VOIDP).first

  48.                                 addr = memread(addr, PTRLEN)

  49.                                 addr = addr.unpack(TYPE_VOIDP).first

  50.                                 addr = memread(addr, PTRLEN)

  51.                                 u = addr.unpack("L").first



  52.         #setup TCP

  53.         tcpclient = socket(2, 1, 6)

  54.         raise "无法初始化TCP" if tcpclient == -1

  55.         #connect

  56.         result = connect tcpclient, [2, 80, u].pack("SnLx8"), 16

  57.         raise "不能连接到open.baidu.com" if result == -1



  58.         #make request

  59.         req = "GET /special/time/ HTTP/1.1\r\n"  <<

  60.               "host: open.baidu.com\r\n" <<

  61.               "\r\n" <<

  62.               "\r\n\r\n"

  63.         #send

  64.         send tcpclient, req, req.length, 0



  65.         #receive

  66.         buf = "\0"*1024

  67.         ret = ""

  68.         while true

  69.           len = recv tcpclient, buf, buf.length, 0

  70.           break if len < 1

  71.           ret << buf[0, len]

  72.         end



  73.         #shutdown

  74.         closesocket tcpclient



  75.         ret = ret.unpack("C*").pack("C*")

  76.         number = ret[/HTTP\/1\.1 (\d+)/, 1].to_i



  77.         if number != 200

  78.           raise "HTTP错误: #{number}"

  79.         end





  80.         #gettime

  81.         val = ret[/window\.baidu_time\((\d+)\)/, 1].to_i

  82.         if val == 0

  83.           raise "网络数据格式已变更,请联系作者"

  84.         end

  85.         curtime = Time.at val / 1000

  86.         $game_variables[ReadTime::Config::HOUR] = curtime.hour

  87.         $game_variables[ReadTime::Config::MINUTE] = curtime.min

  88.         $game_variables[ReadTime::Config::SECOND] = curtime.sec



  89.         $game_variables[ReadTime::Config::YEAR] = curtime.year

  90.         $game_variables[ReadTime::Config::MDAY] = curtime.mday

  91.         $game_variables[ReadTime::Config::MON] = curtime.mon



  92.      end

  93.   end

  94. end



  95. def 获取时间

  96.   ReadTime.get

  97. end
复制代码
这是兰兰写好的脚本 @晴兰
用法:在事件脚本里面或者其他地方 写上   获取时间    就行了

评分

参与人数 1星屑 +150 收起 理由
RyanBern + 150 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
27 小时
注册时间
2015-2-22
帖子
17
4
 楼主| 发表于 2015-5-31 18:11:26 | 只看该作者
不联网的有没有啊

点评

不联网怎么同步网络时间, LZ你偏题了; 以及要看系统时间可使用Time类  发表于 2015-6-1 12:22
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
106
在线时间
470 小时
注册时间
2015-4-26
帖子
92
5
发表于 2015-7-24 19:58:44 | 只看该作者
同步时间

在其他脚本中截来的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-23 05:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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