질문과 답변

Extra Form

=begin
  title  WebTime class
 
  author jubin-park
  refer  EFE's WinHttp Request
  date   2015.12.12
  syntax Ruby (XP/VX/VXA)
=end

class WebTime < Time
  def self.new;  now() end
  def self.year; now.year() end
  def self.mon;  now.mon() end
  def self.mday; now.mday() end
  def self.hour; now.hour() end
  def self.min;  now.min() end
  def self.sec;  now.sec() end
  def self.now
    n = 0; data = String.new
    t_p = Time.now
    req = s2u(EFE.request('www.webtour.com', '/GInfo/time.asp?Code=A', 999999))
    # 실패 시 로컬 시간 반환
    return Time.now if req == "\000"
    t_l = Time.now
    req.scan(/<td width="134">(.*)<\/td>/) do |w|
      n += 1
      if n == 20
        data << $1
        break
      end
    end
    req = nil
    data = data.scan /(\d+)\/(\d+)\/(\d+) 오(전|후) (\d+):(\d+):(\d+)/
    # 실패 시 로컬 시간 반환
    return Time.now if data == []
    data.flatten!
    data[3] = 0  if data[3] == '전' # 오전 +0
    data[3] = 12 if data[3] == '후' # 오후 +12
    data[4] = 0  if data[3] == 0 && data[4] == '12' # 오전 12시 = 오전 0시
    data[4] = 0  if data[3] == 12 && data[4] == '12' # 오후 12시 = 오후 0시
    for i in 0...data.size
      data[i] = data[i].to_i
    end
    data[0] += 2000
    data[4] += data[3] # AM/PM 적용 뒤
    data.delete_at(3) # 삭제
    data[1] = case data[1] # 달
    when 1; 'jan'
    when 2; 'feb'
    when 3; 'mar'
    when 4; 'apr'
    when 5; 'may'
    when 6; 'jun'
    when 7; 'jul'
    when 8; 'aug'
    when 9; 'sep'
    when 10; 'oct'
    when 11; 'nov'
    when 12; 'dec'
    end
    return Time.local(*data) + (t_l - t_p) # 오차값 가산
  end
end

=begin
===============================================================================
 EFE's Request Script
 Version: RGSS & RGSS2 & RGSS3
 Special thanks : Ryex, Gustavo Bicalho, Kubiwa Taicho
===============================================================================
 This script will allow to request to some servers WITHOUT posting. (Only GET)
--------------------------------------------------------------------------------
Used WINAPI functions:

WinHTTPOpen
WinnHTTLConnect
WinHTTPOpenRequest
WinHTTPSendRequest
WinHTTPReceiveResponse
WinHttpQueryDataAvailable
WinHttpReadData

Call:

EFE.request(host, path, post, port)

host : "www.rpgmakervxace.net" (without http:// prefix)
path : "/forum/login.php" ( the directory path of your php file )
post : "username=kfdsfdsl&password=24324234"
port : 80 is default.

=end

module EFE
  WinHttpOpen = Win32API.new('winhttp','WinHttpOpen',"PIPPI",'I')
  WinHttpConnect = Win32API.new('winhttp','WinHttpConnect',"PPII",'I')
  WinHttpOpenRequest = Win32API.new('winhttp','WinHttpOpenRequest',"PPPPPII",'I')
  WinHttpSendRequest = Win32API.new('winhttp','WinHttpSendRequest',"PIIIIII",'I')
  WinHttpReceiveResponse = Win32API.new('winhttp','WinHttpReceiveResponse',"PP",'I')
  WinHttpQueryDataAvailable = Win32API.new('winhttp', 'WinHttpQueryDataAvailable', "PI", "I")
  WinHttpReadData = Win32API.new('winhttp','WinHttpReadData',"PPIP",'I')
 
  # I took this method from Gustavo Bicalho's WebKit script. Special thanks him.
  def self.to_ws(str)
    str = str.to_s();
    wstr = "";
    for i in 0..str.size
      wstr += str[i,1]+"\0";
    end
    wstr += "\0";
    return wstr;
  end
 
  def self.request(host, path, buf, post="",port=80)
    p = path
    if(post != "")
      p = p + "?" + post
    end
    p = p.to_s
    pwszUserAgent = ''
    pwszProxyName = ''
    pwszProxyBypass = ''
    httpOpen = WinHttpOpen.call(pwszUserAgent, 0, pwszProxyName, pwszProxyBypass, 0)
    if httpOpen
      httpConnect = WinHttpConnect.call(httpOpen, to_ws(host), port, 0)
      if httpConnect
        httpOpenR = WinHttpOpenRequest.call(httpConnect, nil, to_ws(p), "", '',0,0)
        if httpOpenR
          httpSendR = WinHttpSendRequest.call(httpOpenR, 0, 0 , 0, 0,0,0)
          if httpSendR
            httpReceiveR = WinHttpReceiveResponse.call(httpOpenR, nil)
            if httpReceiveR
              received = 0
              httpAvailable = WinHttpQueryDataAvailable.call(httpOpenR, received)
              if httpAvailable
                ali = ' ' * buf
                n = 0
                httpRead = WinHttpReadData.call(httpOpenR, ali, buf, o=[n].pack('i!'))
                n=o.unpack('i!')[0]
                return ali[0, n]
              else
                p("Error about query data available")
              end
            else
              p("Error when receiving response")
            end
          else
            p("Error when sending request")
          end
        else
          p("Error when opening request")
        end
      else
        p("Error when connecting to the host")
      end
    else
      p("Error when opening connection")
    end
  end
end

## Encoding

MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'llplpl', 'l')
WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'llplplpp', 'l')

def s2u(text)
  len = MultiByteToWideChar.call(0, 0, text, -1, nil, 0)
  buf = '\0' * (len*2)
  MultiByteToWideChar.call(0, 0, text, -1, buf, buf.size/2)
  len = WideCharToMultiByte.call(65001, 0, buf, -1, nil, 0, nil, nil)
  ret = '\0' * len
  WideCharToMultiByte.call(65001, 0, buf, -1, ret, ret.size, nil, nil)
  return ret.delete('\000')
end

 

 

 

------------

 

 

여기서.. 오프라인 상태에서는 컴퓨터 자체의 시간을 취득해오는데, 그렇지 않고, 오프라인 상태에서는 게임이 강제 종료가 되거나,

데이터베이스 내의 변수에 값을 대입해버린 후 , 커먼이벤트 상에서 그 변수가 나올경우, 자동 저장된 후 게임 강제종료 되게끔 하는 방법 없을 까요 ㅠ?


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12451
RMVX 마우스 입력의 각개인식 7 file 하늘바라KSND 2012.07.07 1067
RMVX vampyr sbabs 스크립트 관련 질문 드립니다 1 존스노우 2012.07.07 1120
RMVX 아방스님의 맵 타이틀 스크립트 질문합니다. 2 file 카온 2012.07.07 1493
RMVXA RPG VX ACE 윈도우 7유저의 한글 깨짐 현상. 3 kila233 2012.07.07 8630
GM 게임 스타트 누를 때 실행않되고 이상한 오류 뜨는거 시작하는방법 1 file 오매갓 2012.07.06 1671
RMVX 캐릭터칩 질문 2 file 임재혁 2012.07.05 1358
RMVX 무기 착용시 Maxmp 올리는 법 관련해서 다시 한 번 질문드립니다 3 존스노우 2012.07.05 992
RMVXA 현재 VX Ace 버전의 [오메가 퀘스트] 스크립트는 없나요? 1 세븐체크 2012.07.05 1546
RMVXA 절벽에서 내려가기 O 올라가기X 5 file 세븐체크 2012.07.05 1447
RMXP 아이템종류 확장 1 나홀로11호 2012.07.04 1057
RMVX 프로젝트 폴더안 Game아이콘 바꾸는법 1 임재혁 2012.07.04 2027
RMVX 죽은 동료 파티에서 자동으로 빠지게 하려면 어떻게 해야 하나요? 4 존스노우 2012.07.04 1460
기타 몬스터랑 싸우는 방식 2 wnsml 2012.07.04 1442
기타 이벤트(퀘스트)무한반복 안되는 법점여. 스토리 있어염.. 2 wnsml 2012.07.04 1237
RMVXA 상인 npc가 사라져서 안보입니다. 2 file 어느날부터 2012.07.04 1257
RMXP NPC이름나타내기 2 준프로겜 2012.07.03 1071
RMXP 스킬을 만들어보려고 하는데... 2 Amaster 2012.07.03 1266
RMXP 위력과 공격력은 뭐가 다른 건가요? 2 아미상 2012.07.03 1113
RMVX 액터의 오프닝시 위치 처리가 자동으로 이루어집니다. 3 file 지나가는떡꼬치 2012.07.03 1149
RMVXA 흔들림 효과 질문 3 달밤에왈츠 2012.07.03 1680
Board Pagination Prev 1 ... 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 ... 516 Next
/ 516