#============================================================================== # ■ RGSS3 セーブウィンドウ描写内容詳細化 Ver1.01 by 星潟 #------------------------------------------------------------------------------ # セーブウィンドウの描写内容を詳細化します。 # 各スイッチや変数、主人公レベルや所持金等の情報を表示できるようになります。 # (ただし、内容を増やせば増やすほど処理は重くなります) #============================================================================== # 設定例(module SW_ADD_INFORMATION内のINFO配列内にハッシュを追加して設定します) #============================================================================== # 共通必須設定(必ず設定せねばならず、省略することはできません) #------------------------------------------------------------------------------ # ハッシュ内の値は、それぞれ以下の設定となっています。 # :type スイッチ/変数/アクター/パーティ/システム/自由描写の何れかを指定します。 # 0がスイッチ、1が変数、2がアクター、3がパーティ、4がシステム、5が自由描写です。 # # :data データ内での大まかな種類を選択します。 # スイッチ・変数・アクターの場合はそれぞれのIDを示します。 # パーティの場合は0で所持金、1でアイテム所持数、2で武器所持数、 # 3で防具所持数、4で歩数、5で先頭のアクターを示します。 # (先頭のアクターの場合、パーティでなくアクターとして # その項目を読み替えて使用します) # システムの場合は0で戦闘回数、1でセーブ回数を表示します。 # 5の場合は、0で文章、1でアイコン、2で # スイッチ/変数/アクター/パーティ/システムに依存した情報を # 表示することができます。 # # :x ウィンドウ内での描写矩形のX座標を設定します。 # # :y ウィンドウ内での描写矩形のY座標を設定します。 #------------------------------------------------------------------------------ # アクターとパーティと自由描写のみで使用する必須設定 #------------------------------------------------------------------------------ # :data_type 具体的なデータの種類を指定します。 # アクターの場合 # 0で名前、1で職業の名前、2でレベルを描写します。 # パーティの場合は:typeが1〜3の時のみ必須設定となり # 所持数を表示したいアイテム/武器/防具のIDを指定します。 # 自由描写の場合、ここで文章やアイコンや # 各種データに依存情報を指定します。 # 文章やの各種データに依存情報の場合、忘れずに""で囲んで下さい。 # # 自由描写の文章の場合(:type => 5,:data =>0)の例 # 「あいうえお」と表示させたい場合 # :data_type => "あいうえお" # # アイコンの場合(:type => 5,:data =>1)の例(数字にするだけですが) # アイコンID12を表示させたい場合 # :data_type => 12 # # 自由描写のデータ指定の場合(:type => 5,:data =>2)の例 # スイッチID5がONの時は1、OFFの時は2を表示させたい時 # :data_type => "extra_data(:switches)[5] ? 1 : 2" # 変数ID12を表示させたい時 # :data_type => "extra_data(:variables)[12]" # アクター1のHPを表示させたい場合 # :data_type => "extra_data(:actors)[1].hp" # パーティの最高レベルを表示させたい場合 # :data_type => "extra_data(:party).highest_level" # 戦闘回数を表示させたい場合 # :data_type => "extra_data(:system).battle_count" #------------------------------------------------------------------------------ # 共通任意設定(省略しても問題ありません。必要に応じて設定して下さい) #------------------------------------------------------------------------------ # :w ウィンドウ内での描写矩形の横幅を設定します。 # 省略時はデフォルト値(DEAFAULT_W)が入ります。 # # :h ウィンドウ内での描写矩形の高さを設定します。 # 省略時はデフォルト値(DEAFAULT_H)が入ります。 # # :f 描写内容のフォントサイズを設定します。 # 省略時はデフォルト値(DEAFAULT_F)が入ります。 # # :contents_only 見出しを一切描写せず、内容のみを描写します。 # また、内容も矩形内の左寄せで描写されます。 # # :contents_color 描写内容の見出しの描写色を文字色の中から設定します。 # 省略時はデフォルト値(DEAFAULT_CC)が入ります。 # # :title 描写内容の見出しを設定します。 # 省略時は何も描写しません。 # # :title_color 描写内容の見出しの描写色を文字色の中から設定します。 # 省略時はデフォルト値(DEAFAULT_TC)が入ります。 # # :denomination 描写内容の単位(内容の後に付ける文字列)を設定します。 # 省略時は何も描写しません。 # # :flag 描画するか否かを設定します。 # 省略時は常に描写します。 # 文字列を計算式として扱いますが、使用できる物は限られます。 # data[1]等で、表示しようとしているデータを取得できます。 # # 例1 # typeが1(変数)の時は、data[5]で変数5の値を判定に使用できます。 # :flag => "data[5] > 0"とすれば変数5が0より大きい時のみ表示、という # 判定が可能になります。 # # 例2 # typeが2(アクター)の時は、data[1]でアクターID1のデータを # 判定に使用できます。 # :flag => "data[1].level == 99"とすれば # アクターID1のレベルが99の時のみ表示、という判定が可能になります。 # # 例3 # :flag => "extra_data(:switches)[100]"とすれば # スイッチID100で判定できます。 # # 例4 # :flag => "extra_data(:variables)[50] == 25"とすれば # 変数ID50が25か否かで判定できます。 # # 例5 # :flag => "extra_data(:actors)[2].level == 99"とすれば # アクター2のレベルが99の時のみ表示、という判定が可能になります。 # # 例6 # :flag => "extra_data(:party).members.size > 4"とすれば # パーティメンバーの人数が4人より多いかで判定できます。 # # 例7 # :flag => "extra_data(:system).battle_count > 1000"とすれば # スイッチID100で判定できます。 #------------------------------------------------------------------------------ # スイッチのみ使用する任意設定 #------------------------------------------------------------------------------ # :data1 スイッチがONの時に描写する内容を指定します。 # # :data2 スイッチがOFFの時に描写する内容を指定します。 #------------------------------------------------------------------------------ # 変数のみ使用する任意設定 #------------------------------------------------------------------------------ # :hash_key HASHに作成したハッシュデータのキーとなる物を指定します。 # 変数1(値は2)を表示:hash_key => "進行具合" と設定した場合は # HASH["進行具合"]の中の2に相当する内容が表示されます。 #============================================================================== # Ver1.01 初期設定の記述ミスを修正。 #============================================================================== module SW_ADD_INFORMATION #デフォルトの矩形の横幅を設定します。 DEAFAULT_W = 120 #デフォルトの矩形の高さを設定します。 DEAFAULT_H = 24 #デフォルトのフォントサイズを設定します。 DEAFAULT_F = 24 #デフォルトの見出しの文字色を設定します。 DEAFAULT_TC = 16 #デフォルトの内容の文字色を設定します。 DEAFAULT_CC = 0 #描写情報を設定します。各項目間は「,」で区切ってください。 INFO = [ {:type => 1,:data => 2,:x => 4,:y => 20,:contents_only => true,:denomination => "章",:hash_key => "進行具合"}, {:type => 3,:data => 5,:x => 140,:y => 0,:data_type => 0,:contents_only => true}, {:type => 3,:data => 5,:x => 396,:y => 0,:title => "レベル",:data_type => 2}, {:type => 3,:data => 1,:x => 396,:y => 20,:data_type => 0,:denomination => "G"}, {:type => 5,:data => 0,:x => 4,:y => 44,:data_type => "クリア済み",:flag => "extra_data(:switches)[100]"}, {:type => 5,:data => 1,:x => 396,:y => 44,:data_type => 280} ] HASH = {}#ここは削除しないで下さい。 #変数の設定で使用するハッシュを設定します。 #必要に応じて、以下に続けて追加して下さい。 HASH["進行具合"] = {0 => "0",1 => "1",2 => "2"} end module DataManager #-------------------------------------------------------------------------- # 追加データをロード #-------------------------------------------------------------------------- def self.load_extra_data(contents) #セーブデータの中から、該当するデータを返す。 hash = {} hash[:switches] = contents[:switches] hash[:variables] = contents[:variables] hash[:actors] = contents[:actors] hash[:party] = contents[:party] hash[:system] = contents[:system] hash end def self.get_contents_data(index) #該当するセーブデータを開く。 File.open(make_filename(index), "rb") do |file| #該当するデータがあれば、その中から指定したデータを返す。 Marshal.load(file) return load_extra_data(Marshal.load(file)) end end end class Window_SaveFile < Window_Base #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- alias refresh_extra_data refresh def refresh #本来の処理を実行。 refresh_extra_data #ヘッダーがロード出来る場合のみ追加データを描写する。 draw_extra_data if DataManager.load_header(@file_index) end #-------------------------------------------------------------------------- # 追加データを取得 #-------------------------------------------------------------------------- def extra_data(type) #データのキャッシュハッシュが存在しない場合はハッシュを作成する。 @extra_data = {} if @extra_data == nil #ハッシュ内に該当データが存在する場合はそのデータを返す。 return @extra_data[type] if @extra_data[type] != nil #ハッシュにデータを入れる。 @extra_data = DataManager.get_contents_data(@file_index) #データを返す。 @extra_data[type] end #-------------------------------------------------------------------------- # 各種情報の描写 #-------------------------------------------------------------------------- def draw_extra_data #元々のフォント情報を保存しておく。 d_font_info = contents.font.clone #描写する情報別にデータを処理する。 SW_ADD_INFORMATION::INFO.each {|info| next unless info #描写する情報の種類別にセーブデータの情報を取得し #指定された内容で描写を行う。 #ただし、条件を満たさない場合は描写を行わない。 case info[:type] #スイッチの場合 when 0;data = extra_data(:switches);next unless (info[:flag] != nil ? eval(info[:flag]) : true) #スイッチのON/OFFを確認。 flag = data[info[:data]] #:data1とdata2の設定有無に応じて内容を変更。 text = flag ? (info[:data1] != nil ? info[:data1] : "ON") : (info[:data2] != nil ? info[:data2] : "OFF") #変数の場合 when 1;data = extra_data(:variables);next unless (info[:flag] != nil ? eval(info[:flag]) : true) #ハッシュ指定があり、なおかつ変数の値に応じた #ハッシュの値が存在する場合はその値を。 #存在しない場合はそのままの値を描写内容とする。 if info[:hash_key] != nil hash_data = SW_ADD_INFORMATION::HASH[info[:hash_key]] text = hash_data != nil && hash_data[data[info[:data]]] != nil ? hash_data[data[info[:data]]] : data[info[:data]] else text = data[info[:data]] end #アクターの場合 when 2;data = extra_data(:actors);next unless (info[:flag] != nil ? eval(info[:flag]) : true) #描写内容からどのアクターにするかを決定。 actor = data[info[:data]] #描写データ別に処理。 case info[:data_type] #アクターの名前の場合 when 0;text = actor.name #アクターの職業名の場合 when 1;text = actor.class.name #アクターのレベルの場合 when 2;text = actor.level #その他の場合(飛ばす) else;next end #パーティの場合 when 3;data = extra_data(:party);next unless (info[:flag] != nil ? eval(info[:flag]) : true) #描写内容別に処理。 case info[:data] #所持金の場合 when 0;text = data.gold #アイテム所持数の場合 when 1;text = data.item_number($data_items[info[:data_type]]) #武器所持数の場合 when 2;text = data.item_number($data_weapons[info[:data_type]]) #防具所持数の場合 when 3;text = data.item_number($data_armors[info[:data_type]]) #歩数の場合 when 4;text = data.steps #先頭のアクターの場合 when 5; #パーティに誰もいない時は飛ばす。 next if data.members.empty? #先頭のアクターのアクターIDを取得する。 a_id = data.actors_array[0] #アクターデータを取得する。 data = extra_data(:actors) #該当のアクターデータを取得する。 actor = data[a_id] #描写データ別に処理。 case info[:data_type] #アクターの名前の場合 when 0;text = actor.name #アクターの職業名の場合 when 1;text = actor.class.name #アクターのレベルの場合 when 2;text = actor.level #その他の場合(飛ばす) else;next end #その他の場合(飛ばす) else;next end #システムの場合 when 4;data = extra_data(:system);next unless (info[:flag] != nil ? eval(info[:flag]) : true) #描写内容別に処理。 case info[:data] #戦闘回数の場合 when 0;text = data.battle_count #セーブ回数の場合 when 1;text = data.save_count #その他の場合(飛ばす) else;next end #自由描写の場合 when 5;next unless (info[:flag] != nil ? eval(info[:flag]) : true) #その他の場合(飛ばす) else;next end #フォントサイズを取得。 contents.font.size = info[:f] != nil ? info[:f] : SW_ADD_INFORMATION::DEAFAULT_F #描写用の矩形を作成。 data_rect = Rect.new(info[:x], info[:y], info[:w] != nil ? info[:w] : SW_ADD_INFORMATION::DEAFAULT_W, info[:h] != nil ? info[:h] : SW_ADD_INFORMATION::DEAFAULT_H) #タイトルが設定されてあり、内容のみの描写ではない時 if info[:type] != 5 if info[:title] != nil && info[:contents_only] == nil #見出しのフォントカラーを取得。 contents.font.color = info[:title_color] != nil ? text_color(info[:title_color]) : text_color(SW_ADD_INFORMATION::DEAFAULT_TC) #見出しを描写。 contents.draw_text(data_rect,info[:title]) #内容を右寄せにする。 contents_align = 2 #内容のみの描写である時は、内容を左寄せにする。 elsif info[:contents_only];contents_align = 0 #どれでもない場合は、内容を右寄せにする。 else;contents_align = 2 end else case info[:data] when 0;text = info[:data_type];contents_align = 0 when 1;draw_icon(info[:data_type],data_rect.x,data_rect.y);next when 2;text = eval(info[:data_type]);contents_align = info[:contents_only] == nil ? 2 : 0 else;next end end #内容のフォントカラーを取得。 contents.font.color = info[:contents_color] != nil ? text_color(info[:contents_color]) : text_color(SW_ADD_INFORMATION::DEAFAULT_CC) #単位が設定してある場合は単位を加える。 text = text.to_s + info[:denomination] if info[:denomination] != nil #内容を描写。 contents.draw_text(data_rect,text,contents_align) } #元々のフォント情報を復帰させる。 contents.font = d_font_info end end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # パーティメンバーのアクターID配列を取得 #-------------------------------------------------------------------------- def actors_array @actors end end