#==============================================================================
# ■ Make_Party_Events  vol.1.20
#------------------------------------------------------------------------------
# イベントコマンド『注釈』に『宝箱』と記入したイベントの数を格納
# 08/02/06
#==============================================================================
class Make_Party_Events
  attr_accessor :treasurs               # ゲーム全体の宝箱データを格納
  #--------------------------------------------------------------------------
  # ■ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(data)
    @treasurs = data
    map_name = load_data("Data/MapInfos.rxdata")
    for map_id in map_name.keys
      map = load_data(sprintf("Data/Map%03d.rxdata",map_id))
      if @treasurs[map_id].nil?
        @treasurs[map_id] = {}
      end
      for event in map.events.values
        #…………………………………………………………………………………………………
        # ■ pages[0]=イベントページ1 list[0]=1行目 code=108(注釈)
        #…………………………………………………………………………………………………
        if event.pages[0].list[0].code == 355
          text = event.pages[0].list[0].parameters[0]
          #…………………………………………………………………………………………………
          # ■『注釈』で分岐
          #…………………………………………………………………………………………………
          if (/open_treasur_box?/.match(text))
            if @treasurs[map_id][event.id].nil?
              @treasurs[map_id][event.id] = false
            end
          end
        end
      end
    end
  end
end
#==============================================================================
# ■ Game_Party
# $game_party で参照される
#==============================================================================
class Game_Party
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :events                 # イベントデータを格納
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  if !$@;alias hidesp_game_party_initialize initialize;end
  def initialize
    hidesp_game_party_initialize
    @events = Make_Party_Events.new({})
  end
  #--------------------------------------------------------------------------
  # ■ ゲーム全体にある、宝箱の回収率(%)を返す(全Map)
  #--------------------------------------------------------------------------
  def game_percent
    total = game_total_number * 1.00
    open = game_open_number * 1.00
    n = (open / total)*100
    # □四捨五入する(小数点)
    n = n.round 
    return n
  end
  #--------------------------------------------------------------------------
  # ■ ゲーム全体にある、宝箱の数を返す(全Map)
  #--------------------------------------------------------------------------
  def game_total_number
    n = 0
    for data in @events.treasurs.values
      n += data.size
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ■ ゲーム全体で、既に開けている宝箱の数を返す(全Map)
  #--------------------------------------------------------------------------
  def game_open_number
    n = 0
    for data in @events.treasurs.values
      for value in data.values
        if value == true
          n += 1
        end
      end
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ■ ゲーム全体で、開けていない宝箱の数を返す(全Map)
  #--------------------------------------------------------------------------
  def game_closes_number
    n = 0
    for data in @events.treasurs.values
      for value in data.values
        if value == false
          n += 1
        end
      end
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ■ Mapの宝箱数を返す(現在のMap)
  #--------------------------------------------------------------------------
  def map_total_number
    return @events.treasurs[$game_map.map_id].size
  end
  #--------------------------------------------------------------------------
  # ■ Mapで、既に開けている宝箱の数を返す(現在のMap)
  #--------------------------------------------------------------------------
  def map_open_number
    n = 0
    for value in @events.treasurs[$game_map.map_id].values
      if value == true
        n += 1
      end
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ■ Mapで、開けていない宝箱の数を返す(現在のMap)
  #--------------------------------------------------------------------------
  def map_closes_number
    n = 0
    for value in @events.treasurs[$game_map.map_id].values
      if value == false
        n += 1
      end
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ■ Mapデータを変更した場合、再構築(MapInfos.rxdataの追加に対応)
  #--------------------------------------------------------------------------
  def make_events
    @events = Make_Party_Events.new(@events.treasurs)
  end
end
#==============================================================================
# ■ Interpreter
#==============================================================================
class Interpreter
  #--------------------------------------------------------------------------
  # ■ 実行中のイベントの宝箱フラグを操作
  #--------------------------------------------------------------------------
  def gain_treasur(map_id = $game_map.map_id,event_id = @event_id,key = true)
    $game_party.events.treasurs[map_id][event_id] = key
  end
end

#==============================================================================
# ■ Open_text
#==============================================================================
class Open_text
  #--------------------------------------------------------------------------
  # ■ 宝箱データをテキストに出力
  # イベントコマンドのスクリプトに、下の2行を貼り付けて、ゲーム中に実行する。
  #--------------------------------------------------------------------------
  # a = Open_text.new
  # a.create_treasurs
  #--------------------------------------------------------------------------
  def create_treasurs
    f = File.open("treasurs.text", "w")
    text = ""
    text += '-------------------------------------------------------------------------' + "\n"
    text += '■ 宝箱データ' + "\n"
    text += '※注釈に『宝箱』と記入したイベントを取得' + "\n"
    text += '-------------------------------------------------------------------------' + "\n"
    text += '【宝箱総数】 ' + $game_party.game_total_number.to_s + "\n"
    text += '【開封済み】 ' + $game_party.game_open_number.to_s + "\n"
    text += '【未開封】　 ' + $game_party.game_closes_number.to_s + "\n"
    text += '【回収率】　 ' + $game_party.game_percent.to_s + "％" + "\n" + "\n"
    text += ' ○=開封済み,×=未開封' + "\n"
    text += '-------------------------------------------------------------------------' + "\n"
    map_name = load_data("Data/MapInfos.rxdata")
    for map_id in map_name.keys
      map = load_data(sprintf("Data/Map%03d.rxdata",map_id))
      text += "■MAP:" + sprintf("%03d",map_id) + ' ' + map_name[map_id].name + "\n"
      for event in map.events.values
        if event.pages[0].list[0].code == 108
          data = event.pages[0].list[0].parameters[0]
          if (/宝箱/.match(data))
            if $game_party.events.treasurs[map_id][event.id]
              text += "○"
            else
              text += "×"
            end
            text += '【ID=' + sprintf("%03d",event.id) + ','
            text += 'X=' + sprintf("%03d",event.x) + ',Y=' + sprintf("%03d",event.y) + '】' + "\n"
          end
        end
      end
      text += '-------------------------------------------------------------------------' + "\n"
    end
    f.write(text)
    f.close
  end
end