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

Project1

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

[已经解决] XP如何检测是否联网了

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2015-12-23
帖子
22
跳转到指定楼层
1
发表于 2016-1-31 22:30:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
RPGXP游戏如何检测有没有联网,希望大神给个范例或者教程。
(游戏内已经有了联网脚本,只需要一个检测的就可以了。)
头像被屏蔽

Lv1.梦旅人 (禁止访问)

梦石
0
星屑
88
在线时间
631 小时
注册时间
2014-8-4
帖子
3600
3
发表于 2016-2-1 21:23:55 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

2
发表于 2016-2-1 19:58:12 | 只看该作者



RUBY 代码复制
  1. module ReadTime
  2.   module Config
  3.     #小时,分钟,秒设置的变量编号, 默认放在了6,7,8号变量里面
  4.     HOUR   = 6
  5.     MINUTE = 7
  6.     SECOND = 8
  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

点评

脚本没用吗?有用的话可以读取网络时间的啊  发表于 2016-2-7 00:38
骚瑞 没什么作用  发表于 2016-2-6 23:22
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-11 23:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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