スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

web拍手 by FC2   

[RGSS]情報屋

使い方は → こちら

[RGSS]情報屋
情報(テキスト)を販売するショップを作成できます。 設定項目がやや大変なため後々変更する可能性があります。

スクリーンショット サムネイルクリックで拡大画像が見られます。
rgss_report.jpg

プログラムは続きにあります。

=begin
===============================================================================
  ☆★☆★☆★☆★ 情報屋 ★☆★☆★☆★☆
=============================================================================== 

 製作・開発:STERS
  アイデア:ルルベル様

  Page::http://stersblog.blog15.fc2.com/

導入方法------------------------------------------------------------------

    このスクリプトを Scene_Debug より下 Main より上に
   新しく作ったセクションにコピペして入れてください。
    
--------------------------------------------------------------------------

これを導入することで
情報屋が作れるようになります。

使い方--------------------------------------------------------------------
1.まずはこのスクリプトを導入してください。

2.情報アイテムを作ります。
      スキルショップと同じような感じで作ってください。
      
3.設定項目で先ほど作ったアイテムとそれに対応した
  情報を書いてください。

4.$report = true とイベントのスクリプトで記述してから、
    ショップの処理で好きな情報アイテムを買わせるようにすればOKです

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

取得した情報をメニューなどで表示できるようにするには、
掲示板へとご連絡をください。

--------------------------------------------------------------------------
=end
#--------------------------------------------------------------------------
# ☆ 設定項目
#--------------------------------------------------------------------------
module Report
  # アイテムの情報
  # [アイテム名,情報]の順でお願いします
  #
  # 情報には
  #  | が使えます(改行)
  #
  #  + を使うとサンプルのように複数行にわたり
  #    指定できます
  #
  # よくわからない場合はサンプルを参照
  
  ITEM = [["情報",
           "はずれ情報でした~|" +
           "残念~|||||" +
           "すいません。m(_ _)m||" +
           "written by STERS"
          ],
          ["滝",
           "世界中には滝が|数えられないくらいある||"+
           "その中には、|誰も見たことのない幻想的な滝があるという。"
          ]
        ]
end
#==============================================================================
# ■ Game_System
#==============================================================================

class Game_System
  attr_accessor :report_item
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias report_initialize initialize unless $@
  def initialize
    @report_item = []
    report_initialize
  end
end

#==============================================================================
# ■ Window_ReportCommand
#==============================================================================
class Window_ReportCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 64, 480, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 2
    @column_max = 2
    @commands = ["情報を買う", "キャンセル"]
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i)
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    # 座標計算を修正
    x = 4 + index * 240   
    self.contents.draw_text(x, 0, 128, 32, @commands[index])
  end
end

#==============================================================================
# ■ Window_ReportStatus
#------------------------------------------------------------------------------
#  ショップ画面で、アイテムの所持数やアクターの装備を表示するウィンドウです。
#==============================================================================

class Window_ReportStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(368, 128, 272, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item = nil
    refresh
  end
  #--------------------------------------------------------------------------
  # ● アイテムの設定
  #     item : 新しいアイテム
  #--------------------------------------------------------------------------
  def item=(item)
    if @item != item
      @item = item
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if @item == nil
      return
    end
    self.contents.font.color = system_color
    self.contents.draw_text(4, 0, 200, 32, "この情報は")
    if !$game_system.report_item.include?(@item.name)
      self.contents.font.color = normal_color
      self.contents.draw_text(4, 50, 200, 32, "まだ取得してない")
    else
      self.contents.font.color = disabled_color
      self.contents.draw_text(4, 50, 200, 32, "すでに取得した")
    end
  end
end

#==============================================================================
# ■ Window_ReportBuy
#------------------------------------------------------------------------------
#  ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
#==============================================================================

class Window_ReportBuy < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     shop_goods : 商品
  #--------------------------------------------------------------------------
  def initialize(shop_goods)
    super(0, 128, 368, 352)
    @shop_goods = shop_goods
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● アイテムの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for goods_item in @shop_goods
      item = $data_items[goods_item[1]] if goods_item[0] == 0
      if item != nil
        @data.push(item)
      end
    end
    # 項目数が 0 でなければビットマップを作成し、全項目を描画
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    price = item.price
    if price <= $game_party.gold and !$game_system.report_item.include?(item.name)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32  
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 88, 32, price.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    if @index == 0 and Input.repeat?(Input::UP) and @index != @item_max-1
      @index = @item_max-1
      $game_system.se_play($data_system.cursor_se)
    end
    if @index == @item_max-1 and Input.repeat?(Input::DOWN) and @index != 0
      @index = 0 
      $game_system.se_play($data_system.cursor_se)
    end
    super
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end
#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
#  ショップ画面の処理を行うクラスです。
#==============================================================================
class Scene_Shop
  alias report_shop_main main unless $@
  def main
    if $report == true
      $scene = Scene_ReportShop.new
      return
    end
    report_shop_main
  end
end

#==============================================================================
# ■ Scene_ReportShop
#------------------------------------------------------------------------------
#  情報屋の処理を行うクラスです。
#==============================================================================

class Scene_ReportShop < Scene_Shop
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def main
    # ヘルプウィンドウを作成
    @help_window = Window_Help.new
    # コマンドウィンドウを作成
    @command_window = Window_ReportCommand.new
    # ゴールドウィンドウを作成
    @gold_window = Window_Gold.new
    @gold_window.x = 480
    @gold_window.y = 64
    # ダミーウィンドウを作成
    @dummy_window = Window_Base.new(0, 128, 640, 352)
    # 購入ウィンドウを作成
    @buy_window = Window_ReportBuy.new($game_temp.shop_goods)
    @buy_window.active = false
    @buy_window.visible = false
    @buy_window.help_window = @help_window
    # ステータスウィンドウを作成
    @status_window = Window_ReportStatus.new
    @status_window.visible = false
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update_report
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # 情報屋フラグを下げる
    $report = false
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @help_window.dispose
    @command_window.dispose
    @gold_window.dispose
    @dummy_window.dispose
    @buy_window.dispose
    @status_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_report
    # ウィンドウを更新
    @help_window.update
    @command_window.update
    @gold_window.update
    @dummy_window.update
    @buy_window.update
    @status_window.update
    # コマンドウィンドウがアクティブの場合: update_command を呼ぶ
    if @command_window.active
      update_command_report
      return
    end
    # 購入ウィンドウがアクティブの場合: update_buy を呼ぶ
    if @buy_window.active
      update_buy_report
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_command_report
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0  # 購入する
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        # ウィンドウの状態を購入モードへ
        @command_window.active = false
        @dummy_window.visible = false
        @buy_window.active = true
        @buy_window.visible = true
        @buy_window.refresh
        @status_window.visible = true
      when 1  # やめる
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        # マップ画面に切り替え
        $scene = Scene_Map.new
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (購入ウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_buy_report
    # ステータスウィンドウのアイテムを設定
    @status_window.item = @buy_window.item
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # ウィンドウの状態を初期モードへ
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      # ヘルプテキストを消去
      @help_window.set_text("")
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # アイテムを取得
      @item = @buy_window.item
      # アイテムが無効の場合、または価格が所持金より上の場合
      if @item == nil or @item.price > $game_party.gold
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if $game_system.report_item.include?(@item.name)
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      $game_party.lose_gold(@item.price)
      $game_system.report_item.push @item.name
      @buy_window.refresh
      @status_window.refresh
      @gold_window.refresh
      return
    end
  end
end

#==============================================================================
# ■ Window_Report
#==============================================================================

class Window_Report < Window_Base
  attr_accessor:title
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(title="")
    flag = nil
    for i in 0...Report::ITEM.size
      for re in $game_system.report_item
        flag = i if Report::ITEM[i][0] == title
      end
    end
    return nil if flag == nil
    @text = bunri(Report::ITEM[flag][1])
    super(0, 240 - ((@text.size*32+32) / 2), 640-192, @text.size*32+32)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    for i in 0...@text.size
      self.contents.draw_text(0,i*32,640,32,@text[i])
    end
  end
  #--------------------------------------------------------------------------
  # ○ 分離させるメソッド
  #--------------------------------------------------------------------------
  def bunri(str)
    return str.split("\|")
  end
end

web拍手 by FC2   

コメントの投稿


非公開コメント

コメント

STERS's Development Room

STERSの開発室っぽい何か。


プロフィール

Name:STERS
Unity3D/C#/PHP/js/C++/VB
などを勉強中です

[STERS's Room]
[ファイル置き場]

カテゴリー
最近の記事
最近のコメント
カレンダー
04 ≪│2017/05│≫ 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
RSSリンクの表示
ブログ内Google検索
Google
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。