CSV出力スクリプト(白の魔様 各種図鑑スクリプト用)

フォーラムルール
素材の利用規約を決めたいけど、どんなことを書けばいいのか分からない場合は、
素材のテンプレートをご利用下さい。
TOMO
記事: 209
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

CSV出力スクリプト(白の魔様 各種図鑑スクリプト用)

投稿記事by TOMO » 2020年4月09日(木) 16:06

図鑑で表示される分をCSVファイルとして出力します
攻略サイトとか作りたい人用?

・設定項目

コード: 全て選択

# 白の魔様 各種図鑑スクリプト用「CSV出力スクリプト」設定項目
# 制作者:TOMO
#
# 図鑑で表示される分をCSVファイルとして出力します
#
#
# ※使用方法
# ・save_enemy_csv([filename])
#   敵キャラのCSVファイルの出力
#   (filenameは省略可能)
#
# ・save_item_csv([filename])
#   アイテムのCSVファイルの出力
#   (filenameは省略可能)
#
# ・save_weapon_csv([filename])
#   武器のCSVファイルの出力
#   (filenameは省略可能)
#
# ・save_armor_csv([filename])
#   防具のCSVファイルの出力
#   (filenameは省略可能)
#
#
# ※シンボル一覧
#   :id           : 図鑑番号
#   :name         : 名前
#   :description  : 説明文
#   :params       : 基本能力値(Paramsで設定した分が表示されます。アイテム以外)
#   :gold         : 獲得金額(敵キャラ専用)
#   :price        : 価格(敵キャラ以外)
#   :exp          : 獲得経験値(敵キャラ専用)
#   :drop_items   : ドロップアイテム(敵キャラ専用)
#   :consumable   : 消費(アイテム専用)
#   :scope        : 効果範囲(アイテム専用)
#   :occasion     : 使用可能時(アイテム専用)
#   :wtype        : 武器タイプ(武器専用)
#   :atype        : 装備タイプ / 防具タイプ(防具専用)
#   その他        : NoteTextsで設定したメモ欄関連
#
#
# ※注意
# ・白の魔様の魔物図鑑やアイテム図鑑スクリプトの導入が必須です
# ・他サイト様の図鑑系スクリプトには対応してません

module TOMO
module DictionaryCSV
  #--------------------------------------------------------------------------
  # ● 表示する能力値の設定
  #   0~7 : 最大HP~運
  #--------------------------------------------------------------------------
  Params = [0, 1, 2, 3, 4, 5, 6, 7]
  #--------------------------------------------------------------------------
  # ● 敵キャラシンボルの設定
  #   params  : 基本能力値
  #--------------------------------------------------------------------------
  EnemySymbols = [
    :id, :name, :params, :memo1, :exp, :gold, :drop_items, :memo2
  ]
  #--------------------------------------------------------------------------
  # ● アイテムシンボルの設定
  #--------------------------------------------------------------------------
  ItemSymbols = [
    :id, :name, :description, :price, :consumable, :scope, :occasion, :memo1
  ]
  #--------------------------------------------------------------------------
  # ● 武器シンボルの設定
  #   wtype : 武器タイプ
  #--------------------------------------------------------------------------
  WeaponSymbols = [
    :id, :name, :description, :wtype, :price, :params, :memo1
  ]
  #--------------------------------------------------------------------------
  # ● 防具シンボルの設定
  #   atype : 装備タイプ/防具タイプ
  #--------------------------------------------------------------------------
  ArmorSymbols = [
    :id, :name, :description, :atype, :price, :params, :memo1
  ]
  #--------------------------------------------------------------------------
  # ● 列名の設定
  #--------------------------------------------------------------------------
  Names = {
    :id => "番号", :name => "名前", :description => "説明",
    :consumable => "消費", :scope => "効果範囲", :occasion => "使用可能",
    :gold => "お金", :price => "価格", :exp => "経験値",
    :drop_items => "ドロップアイテム", :wtype => "タイプ", :atype => "タイプ",
    :memo1 => "特徴", :memo2 => "説明"
  }
  #--------------------------------------------------------------------------
  # ● アイテム効果範囲の設定
  #--------------------------------------------------------------------------
  Scope = [
    "なし", "敵単体", "敵全体", "敵1体ランダム", "敵2体ランダム",
    "敵3体ランダム", "敵4体ランダム", "味方単体", "味方全体",
    "味方単体(戦闘不能)", "味方全体(戦闘不能)", "使用者"
  ]
  #--------------------------------------------------------------------------
  # ● アイテム使用可能時の設定
  #--------------------------------------------------------------------------
  Occasion = ["常時", "バトルのみ", "メニューのみ", "使用不可"]
  #--------------------------------------------------------------------------
  # ● メモ欄取得の設定
  #--------------------------------------------------------------------------
  NoteTexts = {
    :memo1 => /<図鑑特徴:(.+)>/i,
    :memo2 => /<図鑑説明:(.+)>/i,
  }
end
end

・本体

コード: 全て選択

# 白の魔様 各種図鑑スクリプト用「CSV出力スクリプト」本体
# 制作者:TOMO
#
# 図鑑で表示される分をCSVファイルとして出力します
#
#
# ※使用方法
# ・save_enemy_csv([filename])
#   敵キャラのCSVファイルの出力
#   (filenameは省略可能)
#
# ・save_item_csv([filename])
#   アイテムのCSVファイルの出力
#   (filenameは省略可能)
#
# ・save_weapon_csv([filename])
#   武器のCSVファイルの出力
#   (filenameは省略可能)
#
# ・save_armor_csv([filename])
#   防具のCSVファイルの出力
#   (filenameは省略可能)
#
#
# ※シンボル一覧
#   :id           : 図鑑番号
#   :name         : 名前
#   :description  : 説明文
#   :params       : 基本能力値(Paramsで設定した分が表示されます。アイテム以外)
#   :gold         : 獲得金額(敵キャラ専用)
#   :price        : 価格(敵キャラ以外)
#   :exp          : 獲得経験値(敵キャラ専用)
#   :drop_items   : ドロップアイテム(敵キャラ専用)
#   :consumable   : 消費(アイテム専用)
#   :scope        : 効果範囲(アイテム専用)
#   :occasion     : 使用可能時(アイテム専用)
#   :wtype        : 武器タイプ(武器専用)
#   :atype        : 装備タイプ / 防具タイプ(防具専用)
#   その他        : NoteTextsで設定したメモ欄関連
#
#
# ※注意
# ・白の魔様の魔物図鑑やアイテム図鑑スクリプトの導入が必須です
# ・他サイト様の図鑑系スクリプトには対応してません

class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 敵キャラCSV出力
  #--------------------------------------------------------------------------
  def save_enemy_csv(filename = "Enemies.csv")
    save_csv(TOMO::DictionaryCSV::EnemySymbols, $data_enemies, filename)
  end
  #--------------------------------------------------------------------------
  # ● アイテムCSV出力
  #--------------------------------------------------------------------------
  def save_item_csv(filename = "Items.csv")
    save_csv(TOMO::DictionaryCSV::ItemSymbols, $data_items, filename)
  end
  #--------------------------------------------------------------------------
  # ● 武器CSV出力
  #--------------------------------------------------------------------------
  def save_weapon_csv(filename = "Weapons.csv")
    save_csv(TOMO::DictionaryCSV::WeaponSymbols, $data_weapons, filename)
  end
  #--------------------------------------------------------------------------
  # ● 防具CSV出力
  #--------------------------------------------------------------------------
  def save_armor_csv(filename = "Armors.csv")
    save_csv(TOMO::DictionaryCSV::ArmorSymbols, $data_armors, filename)
  end
  #--------------------------------------------------------------------------
  # ● CSV出力
  #--------------------------------------------------------------------------
  def save_csv(symbols, items, filename)
    text = dictionary_symbol_names(symbols).join(",") + "\n"
    id = 1
    items.each do |item|
      next unless dictionary?(item)
      ary = []
      if dictionary_switch?(item)
        symbols.each do |symbol|
          ary << (symbol == :id ? id : dictionary_symbol_param(item, symbol))
        end
      else
        symbols.each do |symbol|
          case symbol
          when :id;   ary << id
          when :name; ary << "?" * item.name.size
          else;       ary << ""
          end
        end
      end
      id += 1
      text += ary.join(",") + "\n"
    end
    file = File.open(filename, "w")
    file.write(text)
    file.close
  end
  #--------------------------------------------------------------------------
  # ● 図鑑に含むか?
  #--------------------------------------------------------------------------
  def dictionary?(item)
    item && !item.name.empty? && !item.note.include?("<図鑑無効>")
  end
  #--------------------------------------------------------------------------
  # ● 図鑑登録済みか?
  #--------------------------------------------------------------------------
  def dictionary_switch?(item)
    return m_dictionary_victory_switch_on?(item.id) if item.is_a?(RPG::Enemy)
    return i_dictionary_switch_on?(item.id) if item.is_a?(RPG::Item)
    return w_dictionary_switch_on?(item.id) if item.is_a?(RPG::Weapon)
    return a_dictionary_switch_on?(item.id) if item.is_a?(RPG::Armor)
    return false
  end
  #--------------------------------------------------------------------------
  # ● シンボル名前変換
  #--------------------------------------------------------------------------
  def dictionary_symbol_names(ary)
    r = []
    ary.each do |symbol|
      case symbol
      when :params
        TOMO::DictionaryCSV::Params.each {|id| r << Vocab::param(id) }
      else
        r << TOMO::DictionaryCSV::Names[symbol] || ""
      end
    end
    r
  end
  #--------------------------------------------------------------------------
  # ● シンボル数値取得
  #--------------------------------------------------------------------------
  def dictionary_symbol_param(item, symbol)
    case symbol
    when :params
      ary = TOMO::DictionaryCSV::Params.collect {|id| item.params[id] }
      return ary.join(",")
    when :drop_items
      ary = []
      item.drop_items.each_with_index do |di, i|
        next if di.kind == 0
        visible = m_dictionary_drop_switch_on?(item.id, i)
        case di.kind
        when 1; object = $data_items[di.data_id]
        when 2; object = $data_weapons[di.data_id]
        when 3; object = $data_armors[di.data_id]
        end
        name = visible ? object.name : "?" * object.name.size
        ary << sprintf("%s(1/%d)", name, di.denominator)
      end
      return "\"#{ary.join("\n")}\""
    when :consumable
      return item.consumable ? "する" : "しない"
    when :scope
      return TOMO::DictionaryCSV::Scope[item.scope]
    when :occasion
      return TOMO::DictionaryCSV::Occasion[item.occasion]
    when :wtype
      return $data_system.weapon_types[item.wtype_id]
    when :atype
      return $data_system.terms.etypes[item.etype_id] + "/" +
      $data_system.armor_types[item.atype_id]
    else
      if TOMO::DictionaryCSV::NoteTexts[symbol]
        ary = []
        item.note.each_line do |line|
          ary << $1.to_s if line.match(TOMO::DictionaryCSV::NoteTexts[symbol])
        end
        return "\"#{ary.join("\n")}\""
      else
        return item.method(symbol).call
      end
    end
  end
end

作成したCSVファイルを開く際は、
「Unicode(UTF-8)」にすると正常に表示されます

画像
画像
画像
画像
画像
画像

“Ace:スクリプト素材(RGSS3)” へ戻る