データベースとCSVの相互変換(2)

 2011-10-19
データベースとCSVの相互変換について
今回は、アクターとエネミーのデータを編集したいと思います。
>> 前回の記事
>> 関連記事

今回使用するスクリプトは、以前のものを少し改良しました。
モジュールにまとめて、引数も統一しました。
それと、ファイル名で拡張子は省略するようにしました。
>> データベースとCSVの相互変換スクリプト (Shift_JIS)

出力可能なデータは、整数値・文字列・一次元配列・一次元テーブルのみです。
その他のデータは、個別に機能を追加する必要があります。
今回、アクターのパラメータを扱うメソッドを追加しています。

アイテム
# プロパティの定義
base_item = [:id, :name, :icon_index, :description, :note]
usable_item = [ :scope, :occasion, :speed, :animation_id, :common_event_id,
:base_damage, :variance, :atk_f, :spi_f, :physical_attack,
:damage_to_mp, :absorb_damage, :ignore_defense ]
item = [:price, :consumable, :hp_recovery_rate, :hp_recovery,
:mp_recovery_rate, :mp_recovery, :parameter_type, :parameter_points]
element_set = [:element_set]
plus_state_set = [:plus_state_set]
minus_state_set = [:minus_state_set]
配列やテーブルのデータは、1ファイル1データです。
# データベースの読み込み
data = load_data("Data/Items.rvdata").compact
# CSV ファイルの書き出し
CSV.save_data("Items", data, base_item + usable_item + item)
CSV.save_data("IElementSet", data, element_set)
CSV.save_data("IPlusStateSet", data, plus_state_set)
CSV.save_data("IMinusStateSet", data, minus_state_set)
書き出しと読み込みのメソッドの引数を統一したので、
コピペ定義がやりやすくなりました。
# データベースの初期化
data = Array.new(20) { RPG::Item.new }
# CSV ファイルの読み込み
CSV.load_data("Items", data, base_item + usable_item + item)
CSV.load_array("IElementSet", data, element_set)
CSV.load_array("IPlusStateSet", data, plus_state_set)
CSV.load_array("IMinusStateSet", data, minus_state_set)
# RVDATA の書き出し
save_data([nil] + data, "Items.rvdata")
一度エディタを閉じてから、作成された Items.rvdata を Data フォルダに移動してください。
再びエディタを起動して、データベースを確認すると情報が変更されていると思います。


アクター
# プロパティの定義
actor = [
:id, :name, :class_id, :initial_level, :exp_basis, :exp_inflation,
:character_name, :character_index, :face_name, :face_index,
:weapon_id, :armor1_id, :armor2_id, :armor3_id, :armor4_id,
:two_swords_style, :fix_equipment, :auto_battle, :super_guard,
:pharmacology, :critical_bonus
]
parameter = [:parameters]
# データベースの読み込み
data = load_data("Data/Actors.rvdata").compact
# CSV ファイルの書き出し
CSV.save_data("Actors", data, actor)
CSV.save_parameter("AParameters", data, parameter)
2次元テーブルには対応していないので、
新しくアクターのパラメータを出力するためのメソッドを追加しました。
ファイル名 AParameters.アクターID.csv でアクターの数だけ出力されます。
縦の行がパラメータの種類で、横の列がレベルごとの数値です。
最初の列は、レベル0を表すので0にしておいてください。
# データベースの初期化
data = Array.new(8) { RPG::Actor.new }
# CSV ファイルの読み込み
CSV.load_data("Actors", data, actor)
CSV.load_parameter("AParameters", data, parameter)
# RVDATA の書き出し
save_data([nil] + data, "Actors.rvdata")


エネミー
エネミーのようなデータベースは、現在の機能では出力することができません。
そのような場合は、編集するデータを限定してCSVで設定するものと
エディタで設定するものとをわけると良いかと思います。

エネミーで出力できないデータは、ドロップアイテムと行動パターンです。
さらに、グラフィックやオプションやメモは、エディタで編集した方が簡単そうなので、
CSVには出力しないようにプロパティを定義してみます。
# プロパティの定義
enemy = [ :id, :name, :maxhp, :maxmp,
:atk, :def, :spi, :agi, :hit, :eva, :exp, :gold ]
# データベースの読み込み
data = load_data("Data/Enemies.rvdata").compact
# CSV ファイルの書き出し
CSV.save_data("Enemies", data, enemy)
CSV.save_data("EElementRanks", data, :element_ranks)
CSV.save_data("EStateRanks", data, :state_ranks)
書き出すプロパティが1つの場合は、配列にしなくてもOKです。
# データベースの読み込み
data = load_data("Data/Enemies.rvdata").compact
# CSV ファイルの読み込み
CSV.load_data("Enemies", data, enemy)
CSV.load_array("EElementRanks", data, :element_ranks)
CSV.load_array("EStateRanks", data, :state_ranks)
# RVDATA の書き出し
save_data([nil] + data, "Enemies.rvdata")
最初の行を間違えて初期化処理にしないように注意して下さい。
コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/590-05e534ea
≪ トップページへこのページの先頭へ  ≫
カレンダー
01 << 2017/02 >> 03
- - - 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 - - - -

カテゴリー
最近の記事
02/14 お返事
01/21 お返事
01/12 更新情報
11/28 お返事
08/08 お返事

最近のコメント
01/21 お返事
11/30 z座標
11/20 z座標
08/03 お返事
02/24 お返事

タグクラウド

リンク