질문과 답변

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 12445
RMVXA 캐릭터 제작에 관련해서 질문. 2 file 꼭해볼테다 2013.10.13 1386
RM2k3 RPG2003 비트맵 1 「에그」 2013.10.28 1387
라이선스 기타 오디오 파일은 압축이 안되는 이유 1 나방's 2011.02.14 1387
RMXP 자꾸 프로젝트 작성 실패가 뜹네다. 2 패배자 2011.05.16 1387
RMXP 캐릭터 플레이어 속도 어떻게 변횐하나요? 1 맥켄리 2012.09.24 1387
RMVX [VX 질문] 사물을 클릭하면 대화창나오는 이벤트 어떻게하나요? 2 file 초보입니다헤헤헤 2013.10.28 1388
RMVX RPG Tankentai SBS + ATB 사용중에 궁금한게 있어서 문의 드립니다. 8 니노미야 2010.09.11 1388
RMVX Crissaegrim ABS 스크립트 보상 위치 설정이요 2 아타르 2011.08.09 1388
RMXP 이런... 오류 해결 방법좀 알려주세요. 6 file 시리녹스 2012.08.24 1388
RMVXA 특정 장소에서 인카운트 변경 2 레비엔 2012.09.23 1388
RMVX 알피쥐 vx 전투 질문 2 로디머스 루도리아 2011.09.18 1390
RMXP 님들아 도와주세요 BGM이 안나와요 5 미니미니 2013.06.17 1390
RMVX 처음 킬때 동영상 넣는법 3 hamster and rabbit 2011.07.08 1392
RMVX rpg vx 캐릭터 칩 적용법 질문 6 키라라vx 2013.02.18 1392
RMVX 포켓몬 스크립트 KIMj 2010.10.29 1395
기타 홈페이지 질문 은색바람 2011.05.01 1395
RMVX 몬스터 리젠 시키는 방법 5 file RASA 2011.12.27 1395
RMVXA 일러스트 대화창 뒤로 가게 하는 방법이요. 10 file 은이하롄 2018.02.22 1395
RMVX tankentai sbs system 전투시 스킬선택창 사이즈 축소 관련 질문입니다. 1 톰소여동생 2012.06.03 1396
RMVXA 전투 방식 2 file 빵씨 2013.04.03 1396
Board Pagination Prev 1 ... 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 ... 516 Next
/ 516