查看: 2325|回复: 4

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

[复制链接]
梦石
0
星屑
50
在线时间
27 小时
注册时间
2015-2-22
回帖
11
发表于 2015-5-15 20:11:07 | 显示全部楼层 |阅读模式

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

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

×
怎样才能使游戏同步网络时间,我想借此做一个签到系统,每天的这个时候签到可以获得礼品。
求大大给脚本啊
梦石
0
星屑
175
在线时间
332 小时
注册时间
2013-7-6
回帖
316
发表于 2015-5-16 01:34:26 | 显示全部楼层
首先要获取时间要有时间提供商,http://www.time.ac.cn/stime.asp
其次要分析有用信息,用正则匹配年月日

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

使用道具 举报

梦石
0
星屑
94
在线时间
648 小时
注册时间
2009-2-3
回帖
208
发表于 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 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
27 小时
注册时间
2015-2-22
回帖
11
 楼主| 发表于 2015-5-31 18:11:26 | 显示全部楼层
不联网的有没有啊

点评

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

使用道具 举报

梦石
0
星屑
106
在线时间
470 小时
注册时间
2015-4-26
回帖
71
发表于 2015-7-24 19:58:44 | 显示全部楼层
同步时间#==============================================================================
# ■ Window_PlayTime
#------------------------------------------------------------------------------
# 菜单画面的系统时间表示
#==============================================================================
class Window_PlayTime < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 160, 128)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.size = 18
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.font.color = text_color(6)
    time = Time.now
    text = time.strftime("%x %X")
    self.contents.draw_text(-2, 32, 130, 32, text, 2)
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    text = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 160, 32, "日期与游戏时间")
    self.contents.draw_text(-2, 64, 130, 32, text, 2)
  end
  #--------------------------------------------------------------------------
  # ● 更新
  #--------------------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end

在其他脚本中截来的
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部