查看: 2354|回复: 2

[已经过期] 怎么让游戏里的数据于一论坛同步?求解

[复制链接]
梦石
0
星屑
49
在线时间
91 小时
注册时间
2013-9-19
回帖
103
发表于 2014-3-9 18:59:23 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 龙战于野 于 2014-3-9 19:00 编辑

求解一下,想让游戏中的某项数据与一论坛数据同步更新,该怎么做?希望大神们帮助下。
需要什么样的网页协议都可以提供,修改会员数据什么的,都可以用协议形式提供。
就求一下协议插入游戏的方法。
梦石
0
星屑
50
在线时间
82 小时
注册时间
2013-1-28
回帖
34
发表于 2014-3-10 10:47:37 | 显示全部楼层
本帖最后由 Sion 于 2014-3-10 19:26 编辑

[pre lang="ruby" line="1"]# ★ RGSS3_ニコ新着チェッカー Ver1.0
#==============================================================================
=begin

作者:tomoaky
webサイト:ひきも記は閉鎖しました。(http://hikimoki.sakura.ne.jp/)

このスクリプトを導入すると、通常のゲーム処理と並行して
ニコニコ動画の新着動画情報を受信し、画面上部に表示することができます。

F8キーを押すことで、表示中の動画をブラウザで視聴することもできます。

動作には WHITE-FLUTE Web (http://www.whiteflute.org/) 様にて配布されている
『NET-EX ネット通信スクリプト VXAce版』が必要です、利用規約をよく読み
同意したうえで正しく導入してください。

RGSS3_ニコニコ動画 は tomoaky が作成したプラグインスクリプトです。
このスクリプトのサポートを WHITE-FLUTE Web 様へ求めるようなことは
絶対にしないでください。

2014.02.13  Ver1.0
  公開
  
=end

#==============================================================================
# □ 設定項目
#==============================================================================
module TMNICONEW
  TIMEOUT_SECOND  = 10      # タイムアウトまでの時間(秒)
  INTERVAL_SECOND = 300     # データ取得間隔(秒)
  OUTPUT_SECOND   = 15      # 動画情報の表示時間(秒)
  
  BROWSE_KEY      = :F8     # ブラウザ視聴に利用するキー
  GUIDE_TEXT      = "F8:ブラウザで視聴"
  
  # 動画リストの取得先アドレス
  LIST_URI = "http://www.nicovideo.jp/newarrival?rss=2.0"
  
  # 動画リストを取得するための正規表現(順番変更不可)
  # タイトル, 動画アドレス, サムネアドレス, 再生時間
  RSS_TAGS = [
    /<title>(.+?)<\/title>/,
    /<link>(.+?)<\/link>/,
    /<img\salt\=\".+?\"\ssrc\=\"(.+?)\"\swidth/,
    /<strong\sclass\=\"nico\-info\-length\">(.+?)<\/strong>/,
  ]
  
end

#==============================================================================
# □ ネット通信のセットアップ
#------------------------------------------------------------------------------
#  解放処理は共通実行スクリプトで必ず実行するようにしてください。
#==============================================================================
unless WFNet.http
  WFNet.setup
  WFNet.http_setup
end

#==============================================================================
# ◆ WFNet
#==============================================================================
module WFNet
  module_function
  #--------------------------------------------------------------------------
  # ◇ サムネイルの破損チェック
  #--------------------------------------------------------------------------
  def img_valid?(file_name)
    result = true
    f = File.open(file_name, "rb")
    begin
      header = f.read(8)
      f.seek(-12, IO::SEEK_END)
      footer = f.read(12)
    rescue
      return false
    end
    if header[0,2].unpack("H*") == [ "ffd8" ]
      result = false unless footer[-2,2].unpack("H*") == [ "ffd9" ]
    else
      result = false
    end
    f.close
    result
  end
  #--------------------------------------------------------------------------
  # ◇ 特殊文字の変換
  #--------------------------------------------------------------------------
  def convert_ex_characters(text)
    return unless text
    text.gsub!(/\&amp\;/)  {|s| "&" }
    text.gsub!(/\&amp\;/)  {|s| "&" }
    text.gsub!(/\&nbsp\;/) {|s| " " }
    text.gsub!(/\&apos\;/) {|s| "'" }
    text.gsub!(/\&quot\;/) {|s| '"' }
    text.gsub!(/\&lt\;/)   {|s| "<" }
    text.gsub!(/\&gt\;/)   {|s| ">" }
    text
  end
end

#==============================================================================
# □ Game_NicoNew
#------------------------------------------------------------------------------
#  ニコニコ動画の新着動画をチェックするクラスオブジェクトです。このクラスのイン
# スタンスは $game_niconew で参照されます。
#==============================================================================
class Game_NicoNew
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :use_thum                 # サムネイル利用可能フラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @state = 0
    @use_thum = false
    @data = nil
    @log = []
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    case @state
    when 0; update_get_data
    when 1; update_wait_data
    when 2; update_get_img
    when 3; update_wait_img
    when 4; update_output
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(動画情報のリクエスト)
  #--------------------------------------------------------------------------
  def update_get_data
    return if @last_get && Time.now - @last_get > TMNICONEW::INTERVAL_SECOND
    uri = TMNICONEW::LIST_URI
    file_name = "System/nico_list.tom"
    if WFNet.uri_open(uri, file_name)
      @state = 1
      @start_second = Time.now
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(動画情報の受信待ち)
  #--------------------------------------------------------------------------
  def update_wait_data
    file_name = "System/nico_list.tom"
    if WFNet.is_http_finish?
      @data_list = []
      a = nil
      file = File::open(file_name)
      file.each do |line|
        a = [] if /<item>/ =~ line
        if a
          TMNICONEW::RSS_TAGS.each_with_index {|s, i| a = $1 if s =~ line }
          @data_list.push(a) if /<\/item>/ =~ line && !@log.include?(a[2])
        end
      end
      file.close
      @state = 2
    elsif Time.now - @start_second > TMNICONEW::TIMEOUT_SECOND
      @state = 0
      @last_get = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(サムネイルのリクエスト)
  #--------------------------------------------------------------------------
  def update_get_img
    if @data_list.empty?
      @state = 0
    else
      @data = @data_list.shift
      @log.push(@data[2])
      if WFNet.uri_open(@data[2], "System/nico_thumnail.jpg")
        @state = 3
        @start_second = Time.now
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(サムネイルの受信待ち)
  #--------------------------------------------------------------------------
  def update_wait_img
    if WFNet.is_http_finish?
      @use_thum = WFNet.img_valid?("System/nico_thumnail.jpg")
    elsif Time.now - @start_second > TMNICONEW::TIMEOUT_SECOND
      @use_thum = false
    else
      return
    end
    @state = 4
    @wait_count = TMNICONEW::OUTPUT_SECOND * Graphics.frame_rate
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(動画情報の表示中)
  #--------------------------------------------------------------------------
  def update_output
    @wait_count -= 1
    @state = 2 if @wait_count == 0
  end
  #--------------------------------------------------------------------------
  # ● 動画のタイトルを返す
  #--------------------------------------------------------------------------
  def nico_title
    return nil unless @data
    return nil if @state < 4
    WFNet.convert_ex_characters(@data[0])
  end
  #--------------------------------------------------------------------------
  # ● 動画のアドレスを返す
  #--------------------------------------------------------------------------
  def nico_uri
    return nil unless @data
    return nil if @state < 4
    @data[1]
  end
  #--------------------------------------------------------------------------
  # ● 動画の長さを返す
  #--------------------------------------------------------------------------
  def nico_length
    return nil unless @data
    return nil if @state < 4
    @data[3]
  end
end

#==============================================================================
# □ Sprite_NicoNew
#==============================================================================
class Sprite_NicoNew < Sprite
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    self.bitmap = Bitmap.new(Graphics.width, 54)
    self.z = 9999
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    super
    self.bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    if @uri != $game_niconew.nico_uri
      @uri = $game_niconew.nico_uri
      refresh if @uri
    end
    self.y += 2 if self.y < 0
    super
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.bitmap.clear
    self.bitmap.font.size = 20
    self.bitmap.gradient_fill_rect(bitmap.rect, Color.new(0, 0, 0, 192),
      Color.new(0, 0, 0, 0), true)
    if $game_niconew.use_thum
      bitmap = Bitmap.new("System/nico_thumnail")
      rect = Rect.new(2, 2, 65, 50)
      self.bitmap.stretch_blt(rect, bitmap, bitmap.rect)
      bitmap.dispose
    else
      self.bitmap.fill_rect(2, 2, 65, 50, Color.new(0, 0, 0))
      self.bitmap.draw_text(2, 2, 65, 20, "No IMG")
    end
    self.bitmap.draw_text(69, 2, self.width - 69, 20, $game_niconew.nico_title)
    self.bitmap.draw_text(2, 32, 65, 20, $game_niconew.nico_length, 2)
    self.bitmap.font.size = 16
    self.bitmap.draw_text(0, 24, self.width - 2, 16, TMNICONEW::GUIDE_TEXT, 2)
    self.y = 0 - self.height
  end
end

#==============================================================================
# ■ Scene_Base
#==============================================================================
class Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  alias tmniconew_scene_base_start start
  def start
    tmniconew_scene_base_start
    $game_niconew = Game_NicoNew.new unless $game_niconew
    @niconew_sprite = Sprite_NicoNew.new(nil)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias tmniconew_scene_base_update update
  def update
    tmniconew_scene_base_update
    $game_niconew.update
    @niconew_sprite.update
    if Input.trigger?(TMNICONEW::BROWSE_KEY) && $game_niconew.nico_uri
      a = Win32API.new("shell32","ShellExecuteA", %w(p p p p p i),"i")
      a.call(0, "open", $game_niconew.nico_uri, 0, 0, 1)
    end
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  alias tmniconew_scene_base_terminate terminate
  def terminate
    tmniconew_scene_base_terminate
    @niconew_sprite.dispose
  end
end[/pre]

评分

参与人数 1星屑 +110 收起 理由
Sion + 110 感谢帮忙

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
82 小时
注册时间
2013-1-28
回帖
34
发表于 2014-3-10 10:49:00 | 显示全部楼层
上面这个可以实现游戏中弹出广告,楼主研究下,可以改成你想要的效果

点评

把代码框起来呀  发表于 2014-3-10 19:25
谢谢,我研究一下  发表于 2014-3-10 14:09
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部