#============================================================================== # ■ アイテム図鑑 ver 1.05 本体プログラム #------------------------------------------------------------------------------ #  配布元: # 白の魔 http://www12.plala.or.jp/izumiizayoi/tkool/ # #  利用規約: # RPGツクールVXの正規の登録者のみご利用になれます。 # 利用報告・著作権表示とかは必要ありません。 # 改造もご自由にどうぞ。 # 何か問題が発生しても責任は持ちません。 #============================================================================== module WD_itemdictionary def i_dictionary_switch_on(id) $game_system.i_dic_sw = [] if $game_system.i_dic_sw == nil $game_system.i_dic_sw[id] = false if $game_system.i_dic_sw[id] == nil $game_system.i_dic_sw[id] = true end def i_dictionary_switch_off(id) $game_system.i_dic_sw = [] if $game_system.i_dic_sw == nil $game_system.i_dic_sw[id] = false if $game_system.i_dic_sw[id] == nil $game_system.i_dic_sw[id] = false end def w_dictionary_switch_on(id) $game_system.w_dic_sw = [] if $game_system.w_dic_sw == nil $game_system.w_dic_sw[id] = false if $game_system.w_dic_sw[id] == nil $game_system.w_dic_sw[id] = true end def w_dictionary_switch_off(id) $game_system.w_dic_sw = [] if $game_system.w_dic_sw == nil $game_system.w_dic_sw[id] = false if $game_system.w_dic_sw[id] == nil $game_system.w_dic_sw[id] = false end def a_dictionary_switch_on(id) $game_system.a_dic_sw = [] if $game_system.a_dic_sw == nil $game_system.a_dic_sw[id] = false if $game_system.a_dic_sw[id] == nil $game_system.a_dic_sw[id] = true end def a_dictionary_switch_off(id) $game_system.a_dic_sw = [] if $game_system.a_dic_sw == nil $game_system.a_dic_sw[id] = false if $game_system.a_dic_sw[id] == nil $game_system.a_dic_sw[id] = false end def i_dictionary_perfection(n) dic_max = 0 dic_num = 0 for i in 1...$data_items.size hantei = /<図鑑無効>/ =~ $data_items[i].note if $data_items[i].name.size > 0 and hantei == nil dic_max += 1 $game_system.i_dic_sw = [] if $game_system.i_dic_sw == nil $game_system.i_dic_sw[i] = false if $game_system.i_dic_sw[i] == nil if $game_system.i_dic_sw[i] == true dic_num += 1 end end end $game_variables[n] = (100*dic_num)/dic_max end def w_dictionary_perfection(n) dic_max = 0 dic_num = 0 for i in 1...$data_weapons.size hantei = /<図鑑無効>/ =~ $data_weapons[i].note if $data_weapons[i].name.size > 0 and hantei == nil dic_max += 1 $game_system.w_dic_sw = [] if $game_system.w_dic_sw == nil $game_system.w_dic_sw[i] = false if $game_system.w_dic_sw[i] == nil if $game_system.w_dic_sw[i] == true dic_num += 1 end end end $game_variables[n] = (100*dic_num)/dic_max end def a_dictionary_perfection(n) dic_max = 0 dic_num = 0 for i in 1...$data_armors.size hantei = /<図鑑無効>/ =~ $data_armors[i].note if $data_armors[i].name.size > 0 and hantei == nil dic_max += 1 $game_system.a_dic_sw = [] if $game_system.a_dic_sw == nil $game_system.a_dic_sw[i] = false if $game_system.a_dic_sw[i] == nil if $game_system.a_dic_sw[i] == true dic_num += 1 end end end $game_variables[n] = (100*dic_num)/dic_max end end class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :i_dic_sw attr_accessor :w_dic_sw attr_accessor :a_dic_sw #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias wd_orig_initialize13 initialize def initialize wd_orig_initialize13 @i_dic_sw = [] @w_dic_sw = [] @a_dic_sw = [] end end class Game_Interpreter include WD_itemdictionary end class Game_Party < Game_Unit include WD_itemdictionary #-------------------------------------------------------------------------- # ● アイテムの増加 (減少) # item : アイテム # n : 個数 # include_equip : 装備品も含める #-------------------------------------------------------------------------- alias wd_orig_gain_item13 gain_item def gain_item(item, n, include_equip = false) wd_orig_gain_item13(item, n, include_equip) if n > 0 case item when RPG::Item i_dictionary_switch_on(item.id) when RPG::Weapon w_dictionary_switch_on(item.id) when RPG::Armor a_dictionary_switch_on(item.id) end end end end #============================================================================== # ■ Scene_ItemDictionary #------------------------------------------------------------------------------ #  道具図鑑画面の処理を行うクラスです。 #============================================================================== class Scene_ItemDictionary < Scene_Base #-------------------------------------------------------------------------- # ● 初期化 #-------------------------------------------------------------------------- def initialize @dic_index = -1 end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background @viewport = Viewport.new(0, 0, 544, 416) @left_window = Window_ItemDictionaryLeft.new @left_window.viewport = @viewport @right_window = Window_ItemDictionaryRight.new @right_window.viewport = @viewport @bottom_window = Window_DictionaryPerfection.new(0) @bottom_window.viewport = @viewport end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background @left_window.dispose @right_window.dispose @bottom_window.dispose end #-------------------------------------------------------------------------- # ● 元の画面へ戻る #-------------------------------------------------------------------------- def return_scene $scene = Scene_Map.new # $scene = Scene_Menu.new(6) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super update_menu_background @left_window.update @right_window.update @bottom_window.update if @dic_index != @right_window.index @left_window.refresh(@right_window.data_id[@right_window.index], @right_window.index) @dic_index = @right_window.index end if Input.trigger?(Input::B) Sound.play_cancel return_scene end end end #============================================================================== # ■ Window_ItemDictionaryLeft #------------------------------------------------------------------------------ #  道具の性能を表示するウィンドウです。 #============================================================================== class Window_ItemDictionaryLeft < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = 0 y = 0 width = 544-200 height = 416 super(x, y, width, height) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(id, index) self.contents.clear self.contents.font.color = normal_color $game_system.i_dic_sw = [] if $game_system.i_dic_sw == nil $game_system.i_dic_sw[id] = false if $game_system.i_dic_sw[id] == nil if WD_itemdictionary_ini::I_number_display x = WD_itemdictionary_ini::I_number_display_x y = WD_itemdictionary_ini::I_number_display_y width = WD_itemdictionary_ini::I_number_display_width text = sprintf("%0#{WD_itemdictionary_ini::I_number_display_digit}d",index+1) self.contents.draw_text(x, y, width, WLH, text, 0) end if $game_system.i_dic_sw[id] == true item = $data_items[id] if WD_itemdictionary_ini::I_name_display x = WD_itemdictionary_ini::I_name_display_x y = WD_itemdictionary_ini::I_name_display_y width = WD_itemdictionary_ini::I_name_display_width self.contents.draw_text(x, y, width, WLH, item.name, 0) end if WD_itemdictionary_ini::I_icon_display x = WD_itemdictionary_ini::I_icon_display_x y = WD_itemdictionary_ini::I_icon_display_y draw_icon(item.icon_index, x, y, true) end if WD_itemdictionary_ini::I_text_display x = WD_itemdictionary_ini::I_text_display_x y = WD_itemdictionary_ini::I_text_display_y width = WD_itemdictionary_ini::I_text_display_width self.contents.draw_text(x, y, width, WLH, item.description, 0) end if WD_itemdictionary_ini::I_occasion_display x = WD_itemdictionary_ini::I_occasion_display_x y = WD_itemdictionary_ini::I_occasion_display_y width = WD_itemdictionary_ini::I_occasion_display_width text1 = WD_itemdictionary_ini::I_occasion_display_text1 text2 = WD_itemdictionary_ini::I_occasion_display_text2 text3 = WD_itemdictionary_ini::I_occasion_display_text3 text4 = WD_itemdictionary_ini::I_occasion_display_text4 text5 = WD_itemdictionary_ini::I_occasion_display_text5 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color case item.occasion when 0 self.contents.draw_text(x, y, width, WLH, text2, 2) when 1 self.contents.draw_text(x, y, width, WLH, text3, 2) when 2 self.contents.draw_text(x, y, width, WLH, text4, 2) when 3 self.contents.draw_text(x, y, width, WLH, text5, 2) end end if WD_itemdictionary_ini::I_consumable_display x = WD_itemdictionary_ini::I_consumable_display_x y = WD_itemdictionary_ini::I_consumable_display_y width = WD_itemdictionary_ini::I_consumable_display_width text1 = WD_itemdictionary_ini::I_consumable_display_text1 text2 = WD_itemdictionary_ini::I_consumable_display_text2 text3 = WD_itemdictionary_ini::I_consumable_display_text3 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color if item.consumable self.contents.draw_text(x, y, width, WLH, text2, 2) else self.contents.draw_text(x, y, width, WLH, text3, 2) end end if WD_itemdictionary_ini::I_speed_display x = WD_itemdictionary_ini::I_speed_display_x y = WD_itemdictionary_ini::I_speed_display_y width = WD_itemdictionary_ini::I_speed_display_width text1 = WD_itemdictionary_ini::I_speed_display_text1 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color self.contents.draw_text(x, y, width, WLH, item.speed, 2) end if WD_itemdictionary_ini::I_price_display x = WD_itemdictionary_ini::I_price_display_x y = WD_itemdictionary_ini::I_price_display_y width = WD_itemdictionary_ini::I_price_display_width text1 = WD_itemdictionary_ini::I_price_display_text1 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color self.contents.draw_text(x, y, width, WLH, "#{item.price}#{Vocab::gold}", 2) end if WD_itemdictionary_ini::I_option_display x = WD_itemdictionary_ini::I_option_display_x y = WD_itemdictionary_ini::I_option_display_y width = WD_itemdictionary_ini::I_option_display_width text1 = WD_itemdictionary_ini::I_option_display_text1 text2 = WD_itemdictionary_ini::I_option_display_text2 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color match_hantei = false i = 0 item.note.scan(/<図鑑オプション:(.*)>/){|matched| i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, matched, 0) match_hantei = true } if match_hantei == false self.contents.draw_text(x + 24, y + WLH, width - 24, WLH, text2, 0) end end else x = WD_itemdictionary_ini::I_non_display_x y = WD_itemdictionary_ini::I_non_display_y width = WD_itemdictionary_ini::I_non_display_width text1 = WD_itemdictionary_ini::I_non_display_text1 self.contents.draw_text(x, y, width, WLH, text1, 0) end end end #============================================================================== # ■ Window_ItemDictionaryRight #------------------------------------------------------------------------------ #  道具の一覧を表示するウィンドウです。 #============================================================================== class Window_ItemDictionaryRight < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :data_id #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = 544 -200 y = 0 width = 200 height = 416-56 super(x, y, width, height) @index=0 @column_max = 1 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @data = [] @data_id = [] for i in 1...$data_items.size hantei = /<図鑑無効>/ =~ $data_items[i].note if $data_items[i].name.size > 0 and hantei == nil $game_system.i_dic_sw = [] if $game_system.i_dic_sw == nil $game_system.i_dic_sw[i] = false if $game_system.i_dic_sw[i] == nil if $game_system.i_dic_sw[i] == true @data.push($data_items[i].name) else @data.push(WD_itemdictionary_ini::C_non_display_text1) end @data_id.push($data_items[i].id) end end self.contents.clear @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) rect.x += 4 rect.width -= 8 self.contents.clear_rect(rect) self.contents.font.color.alpha = 255 self.contents.font.color.alpha = 128 if @data[index] == WD_itemdictionary_ini::C_non_display_text1 self.contents.draw_text(rect, @data[index], 0) end end #============================================================================== # ■ Scene_WeaponDictionary #------------------------------------------------------------------------------ #  武器図鑑画面の処理を行うクラスです。 #============================================================================== class Scene_WeaponDictionary < Scene_Base #-------------------------------------------------------------------------- # ● 初期化 #-------------------------------------------------------------------------- def initialize @dic_index = -1 end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background @viewport = Viewport.new(0, 0, 544, 416) @left_window = Window_WeaponDictionaryLeft.new @left_window.viewport = @viewport @right_window = Window_WeaponDictionaryRight.new @right_window.viewport = @viewport @bottom_window = Window_DictionaryPerfection.new(1) @bottom_window.viewport = @viewport end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background @left_window.dispose @right_window.dispose @bottom_window.dispose end #-------------------------------------------------------------------------- # ● 元の画面へ戻る #-------------------------------------------------------------------------- def return_scene $scene = Scene_Map.new # $scene = Scene_Menu.new(6) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super update_menu_background @left_window.update @right_window.update @bottom_window.update if @dic_index != @right_window.index @left_window.refresh(@right_window.data_id[@right_window.index], @right_window.index) @dic_index = @right_window.index end if Input.trigger?(Input::B) Sound.play_cancel return_scene end end end #============================================================================== # ■ Window_WeaponDictionaryLeft #------------------------------------------------------------------------------ #  武器の性能を表示するウィンドウです。 #============================================================================== class Window_WeaponDictionaryLeft < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = 0 y = 0 width = 544-200 height = 416 super(x, y, width, height) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(id, index) self.contents.clear self.contents.font.color = normal_color $game_system.w_dic_sw = [] if $game_system.w_dic_sw == nil $game_system.w_dic_sw[id] = false if $game_system.w_dic_sw[id] == nil if WD_itemdictionary_ini::W_number_display x = WD_itemdictionary_ini::W_number_display_x y = WD_itemdictionary_ini::W_number_display_y width = WD_itemdictionary_ini::W_number_display_width text = sprintf("%0#{WD_itemdictionary_ini::W_number_display_digit}d",index+1) self.contents.draw_text(x, y, width, WLH, text, 0) end if $game_system.w_dic_sw[id] == true item = $data_weapons[id] if WD_itemdictionary_ini::W_name_display x = WD_itemdictionary_ini::W_name_display_x y = WD_itemdictionary_ini::W_name_display_y width = WD_itemdictionary_ini::W_name_display_width self.contents.draw_text(x, y, width, WLH, item.name, 0) end if WD_itemdictionary_ini::W_icon_display x = WD_itemdictionary_ini::W_icon_display_x y = WD_itemdictionary_ini::W_icon_display_y draw_icon(item.icon_index, x, y, true) end if WD_itemdictionary_ini::W_text_display x = WD_itemdictionary_ini::W_text_display_x y = WD_itemdictionary_ini::W_text_display_y width = WD_itemdictionary_ini::W_text_display_width self.contents.draw_text(x, y, width, WLH, item.description, 0) end if WD_itemdictionary_ini::W_atk_display x = WD_itemdictionary_ini::W_atk_display_x y = WD_itemdictionary_ini::W_atk_display_y width = WD_itemdictionary_ini::W_atk_display_width self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, Vocab::atk, 0) self.contents.font.color = normal_color if item.atk >= 0 self.contents.draw_text(x, y, width, WLH, "+#{item.atk}", 2) else self.contents.draw_text(x, y, width, WLH, item.atk, 2) end end if WD_itemdictionary_ini::W_def_display x = WD_itemdictionary_ini::W_def_display_x y = WD_itemdictionary_ini::W_def_display_y width = WD_itemdictionary_ini::W_def_display_width self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, Vocab::def, 0) self.contents.font.color = normal_color if item.def >= 0 self.contents.draw_text(x, y, width, WLH, "+#{item.def}", 2) else self.contents.draw_text(x, y, width, WLH, item.def, 2) end end if WD_itemdictionary_ini::W_spi_display x = WD_itemdictionary_ini::W_spi_display_x y = WD_itemdictionary_ini::W_spi_display_y width = WD_itemdictionary_ini::W_spi_display_width self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, Vocab::spi, 0) self.contents.font.color = normal_color if item.spi >= 0 self.contents.draw_text(x, y, width, WLH, "+#{item.spi}", 2) else self.contents.draw_text(x, y, width, WLH, item.spi, 2) end end if WD_itemdictionary_ini::W_agi_display x = WD_itemdictionary_ini::W_agi_display_x y = WD_itemdictionary_ini::W_agi_display_y width = WD_itemdictionary_ini::W_agi_display_width self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, Vocab::agi, 0) self.contents.font.color = normal_color if item.agi >= 0 self.contents.draw_text(x, y, width, WLH, "+#{item.agi}", 2) else self.contents.draw_text(x, y, width, WLH, item.agi, 2) end end if WD_itemdictionary_ini::W_hit_display x = WD_itemdictionary_ini::W_hit_display_x y = WD_itemdictionary_ini::W_hit_display_y width = WD_itemdictionary_ini::W_hit_display_width text1 = WD_itemdictionary_ini::W_hit_display_text1 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color self.contents.draw_text(x, y, width, WLH, "#{item.hit}%", 2) end if WD_itemdictionary_ini::W_price_display x = WD_itemdictionary_ini::W_price_display_x y = WD_itemdictionary_ini::W_price_display_y width = WD_itemdictionary_ini::W_price_display_width text1 = WD_itemdictionary_ini::W_price_display_text1 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color self.contents.draw_text(x, y, width, WLH, "#{item.price}#{Vocab::gold}", 2) end if WD_itemdictionary_ini::W_element_display x = WD_itemdictionary_ini::W_element_display_x y = WD_itemdictionary_ini::W_element_display_y width = WD_itemdictionary_ini::W_element_display_width text1 = WD_itemdictionary_ini::W_element_display_text1 text2 = WD_itemdictionary_ini::W_element_display_text2 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color sentence = "" if item.element_set.size > 0 for element in item.element_set if element <= WD_itemdictionary_ini::W_element_display_range sentence += "#{$data_system.elements[element]}," end end sentence.chop! end sentence = text2 if sentence.size == 0 self.contents.draw_text(x + 120, y, width - 120, WLH, sentence, 2) end if WD_itemdictionary_ini::W_state_display x = WD_itemdictionary_ini::W_state_display_x y = WD_itemdictionary_ini::W_state_display_y width = WD_itemdictionary_ini::W_state_display_width text1 = WD_itemdictionary_ini::W_state_display_text1 text2 = WD_itemdictionary_ini::W_state_display_text2 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color sentence = "" if item.state_set.size > 0 for element in item.state_set if element <= WD_itemdictionary_ini::W_state_display_range sentence += "#{$data_states[element].name}," end end sentence.chop! end sentence = text2 if sentence.size == 0 self.contents.draw_text(x + 120, y, width - 120, WLH, sentence, 2) end if WD_itemdictionary_ini::W_option_display x = WD_itemdictionary_ini::W_option_display_x y = WD_itemdictionary_ini::W_option_display_y width = WD_itemdictionary_ini::W_option_display_width text1 = WD_itemdictionary_ini::W_option_display_text1 text2 = WD_itemdictionary_ini::W_option_display_text2 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color match_hantei = false i = 0 if WD_itemdictionary_ini::W_option_display_auto if item.two_handed i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, "両手持ち", 0) match_hantei = true end if item.fast_attack i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, "ターン内先制", 0) match_hantei = true end if item.dual_attack i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, "連続攻撃", 0) match_hantei = true end if item.critical_bonus i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, "クリティカル頻発", 0) match_hantei = true end end item.note.scan(/<図鑑オプション:(.*)>/){|matched| i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, matched, 0) match_hantei = true } if match_hantei == false self.contents.draw_text(x + 24, y + WLH, width - 24, WLH, text2, 0) end end else x = WD_itemdictionary_ini::W_non_display_x y = WD_itemdictionary_ini::W_non_display_y width = WD_itemdictionary_ini::W_non_display_width text1 = WD_itemdictionary_ini::W_non_display_text1 self.contents.draw_text(x, y, width, WLH, text1, 0) end end end #============================================================================== # ■ Window_WeaponDictionaryRight #------------------------------------------------------------------------------ #  武器の一覧を表示するウィンドウです。 #============================================================================== class Window_WeaponDictionaryRight < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :data_id #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = 544 -200 y = 0 width = 200 height = 416 - 56 super(x, y, width, height) @index=0 @column_max = 1 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @data = [] @data_id = [] for i in 1...$data_weapons.size hantei = /<図鑑無効>/ =~ $data_weapons[i].note if $data_weapons[i].name.size > 0 and hantei == nil $game_system.w_dic_sw = [] if $game_system.w_dic_sw == nil $game_system.w_dic_sw[i] = false if $game_system.w_dic_sw[i] == nil if $game_system.w_dic_sw[i] == true @data.push($data_weapons[i].name) else @data.push(WD_itemdictionary_ini::C_non_display_text1) end @data_id.push($data_weapons[i].id) end end self.contents.clear @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) rect.x += 4 rect.width -= 8 self.contents.clear_rect(rect) self.contents.font.color.alpha = 255 self.contents.font.color.alpha = 128 if @data[index] == WD_itemdictionary_ini::C_non_display_text1 self.contents.draw_text(rect, @data[index], 0) end end #============================================================================== # ■ Scene_ArmorDictionary #------------------------------------------------------------------------------ #  防具図鑑画面の処理を行うクラスです。 #============================================================================== class Scene_ArmorDictionary < Scene_Base #-------------------------------------------------------------------------- # ● 初期化 #-------------------------------------------------------------------------- def initialize @dic_index = -1 end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background @viewport = Viewport.new(0, 0, 544, 416) @left_window = Window_ArmorDictionaryLeft.new @left_window.viewport = @viewport @right_window = Window_ArmorDictionaryRight.new @right_window.viewport = @viewport @bottom_window = Window_DictionaryPerfection.new(2) @bottom_window.viewport = @viewport end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background @left_window.dispose @right_window.dispose @bottom_window.dispose end #-------------------------------------------------------------------------- # ● 元の画面へ戻る #-------------------------------------------------------------------------- def return_scene $scene = Scene_Map.new # $scene = Scene_Menu.new(6) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super update_menu_background @left_window.update @right_window.update @bottom_window.update if @dic_index != @right_window.index @left_window.refresh(@right_window.data_id[@right_window.index], @right_window.index) @dic_index = @right_window.index end if Input.trigger?(Input::B) Sound.play_cancel return_scene end end end #============================================================================== # ■ Window_ArmorDictionaryLeft #------------------------------------------------------------------------------ #  防具の性能を表示するウィンドウです。 #============================================================================== class Window_ArmorDictionaryLeft < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = 0 y = 0 width = 544-200 height = 416 super(x, y, width, height) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(id, index) self.contents.clear self.contents.font.color = normal_color $game_system.a_dic_sw = [] if $game_system.a_dic_sw == nil $game_system.a_dic_sw[id] = false if $game_system.a_dic_sw[id] == nil if WD_itemdictionary_ini::A_number_display x = WD_itemdictionary_ini::A_number_display_x y = WD_itemdictionary_ini::A_number_display_y width = WD_itemdictionary_ini::A_number_display_width text = sprintf("%0#{WD_itemdictionary_ini::A_number_display_digit}d",index+1) self.contents.draw_text(x, y, width, WLH, text, 0) end if $game_system.a_dic_sw[id] == true item = $data_armors[id] if WD_itemdictionary_ini::A_name_display x = WD_itemdictionary_ini::A_name_display_x y = WD_itemdictionary_ini::A_name_display_y width = WD_itemdictionary_ini::A_name_display_width self.contents.draw_text(x, y, width, WLH, item.name, 0) end if WD_itemdictionary_ini::A_icon_display x = WD_itemdictionary_ini::A_icon_display_x y = WD_itemdictionary_ini::A_icon_display_y draw_icon(item.icon_index, x, y, true) end if WD_itemdictionary_ini::A_text_display x = WD_itemdictionary_ini::A_text_display_x y = WD_itemdictionary_ini::A_text_display_y width = WD_itemdictionary_ini::A_text_display_width self.contents.draw_text(x, y, width, WLH, item.description, 0) end if WD_itemdictionary_ini::A_atk_display x = WD_itemdictionary_ini::A_atk_display_x y = WD_itemdictionary_ini::A_atk_display_y width = WD_itemdictionary_ini::A_atk_display_width self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, Vocab::atk, 0) self.contents.font.color = normal_color if item.atk >= 0 self.contents.draw_text(x, y, width, WLH, "+#{item.atk}", 2) else self.contents.draw_text(x, y, width, WLH, item.atk, 2) end end if WD_itemdictionary_ini::A_def_display x = WD_itemdictionary_ini::A_def_display_x y = WD_itemdictionary_ini::A_def_display_y width = WD_itemdictionary_ini::A_def_display_width self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, Vocab::def, 0) self.contents.font.color = normal_color if item.def >= 0 self.contents.draw_text(x, y, width, WLH, "+#{item.def}", 2) else self.contents.draw_text(x, y, width, WLH, item.def, 2) end end if WD_itemdictionary_ini::A_spi_display x = WD_itemdictionary_ini::A_spi_display_x y = WD_itemdictionary_ini::A_spi_display_y width = WD_itemdictionary_ini::A_spi_display_width self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, Vocab::spi, 0) self.contents.font.color = normal_color if item.spi >= 0 self.contents.draw_text(x, y, width, WLH, "+#{item.spi}", 2) else self.contents.draw_text(x, y, width, WLH, item.spi, 2) end end if WD_itemdictionary_ini::A_agi_display x = WD_itemdictionary_ini::A_agi_display_x y = WD_itemdictionary_ini::A_agi_display_y width = WD_itemdictionary_ini::A_agi_display_width self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, Vocab::agi, 0) self.contents.font.color = normal_color if item.agi >= 0 self.contents.draw_text(x, y, width, WLH, "+#{item.agi}", 2) else self.contents.draw_text(x, y, width, WLH, item.agi, 2) end end if WD_itemdictionary_ini::A_eva_display x = WD_itemdictionary_ini::A_eva_display_x y = WD_itemdictionary_ini::A_eva_display_y width = WD_itemdictionary_ini::A_eva_display_width text1 = WD_itemdictionary_ini::A_eva_display_text1 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color self.contents.draw_text(x, y, width, WLH, "#{item.eva}%", 2) end if WD_itemdictionary_ini::A_price_display x = WD_itemdictionary_ini::A_price_display_x y = WD_itemdictionary_ini::A_price_display_y width = WD_itemdictionary_ini::A_price_display_width text1 = WD_itemdictionary_ini::A_price_display_text1 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color self.contents.draw_text(x, y, width, WLH, "#{item.price}#{Vocab::gold}", 2) end if WD_itemdictionary_ini::A_element_display x = WD_itemdictionary_ini::A_element_display_x y = WD_itemdictionary_ini::A_element_display_y width = WD_itemdictionary_ini::A_element_display_width text1 = WD_itemdictionary_ini::A_element_display_text1 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color sentence = "" if item.element_set.size > 0 for element in item.element_set if element <= WD_itemdictionary_ini::A_element_display_range sentence += "#{$data_system.elements[element]}," end end sentence.chop! end sentence = "無" if sentence.size == 0 self.contents.draw_text(x + 120, y, width - 120, WLH, sentence, 2) end if WD_itemdictionary_ini::A_state_display x = WD_itemdictionary_ini::A_state_display_x y = WD_itemdictionary_ini::A_state_display_y width = WD_itemdictionary_ini::A_state_display_width text1 = WD_itemdictionary_ini::A_state_display_text1 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color sentence = "" if item.state_set.size > 0 for element in item.state_set if element <= WD_itemdictionary_ini::A_state_display_range sentence += "#{$data_states[element].name}," end end sentence.chop! end sentence = "無" if sentence.size == 0 self.contents.draw_text(x + 120, y, width - 120, WLH, sentence, 2) end if WD_itemdictionary_ini::A_option_display x = WD_itemdictionary_ini::A_option_display_x y = WD_itemdictionary_ini::A_option_display_y width = WD_itemdictionary_ini::A_option_display_width text1 = WD_itemdictionary_ini::A_option_display_text1 self.contents.font.color = system_color self.contents.draw_text(x, y, width, WLH, text1, 0) self.contents.font.color = normal_color match_hantei = false i = 0 if WD_itemdictionary_ini::A_option_display_auto if item.prevent_critical i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, "クリティカル防止", 0) match_hantei = true end if item.half_mp_cost i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, "消費MP半分", 0) match_hantei = true end if item.double_exp_gain i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, "取得経験値2倍", 0) match_hantei = true end if item.auto_hp_recover i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, "HP自動回復", 0) match_hantei = true end end item.note.scan(/<図鑑オプション:(.*)>/){|matched| i += 1 self.contents.draw_text(x + 24, y + WLH * i, width - 24, WLH, matched, 0) match_hantei = true } if match_hantei == false self.contents.draw_text(x + 24, y + WLH, width - 24, WLH, "なし", 0) end end else x = WD_itemdictionary_ini::A_non_display_x y = WD_itemdictionary_ini::A_non_display_y width = WD_itemdictionary_ini::A_non_display_width text1 = WD_itemdictionary_ini::A_non_display_text1 self.contents.draw_text(x, y, width, WLH, text1, 0) end end end #============================================================================== # ■ Window_ArmorDictionaryRight #------------------------------------------------------------------------------ #  防具の一覧を表示するウィンドウです。 #============================================================================== class Window_ArmorDictionaryRight < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :data_id #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize x = 544 -200 y = 0 width = 200 height = 416-56 super(x, y, width, height) @index=0 @column_max = 1 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh @data = [] @data_id = [] for i in 1...$data_armors.size hantei = /<図鑑無効>/ =~ $data_armors[i].note if $data_armors[i].name.size > 0 and hantei == nil $game_system.a_dic_sw = [] if $game_system.a_dic_sw == nil $game_system.a_dic_sw[i] = false if $game_system.a_dic_sw[i] == nil if $game_system.a_dic_sw[i] == true @data.push($data_armors[i].name) else @data.push(WD_itemdictionary_ini::C_non_display_text1) end @data_id.push($data_armors[i].id) end end self.contents.clear @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) rect.x += 4 rect.width -= 8 self.contents.clear_rect(rect) self.contents.font.color.alpha = 255 self.contents.font.color.alpha = 128 if @data[index] == WD_itemdictionary_ini::C_non_display_text1 self.contents.draw_text(rect, @data[index], 0) end end #============================================================================== # ■ Window_DictionaryPerfection #------------------------------------------------------------------------------ #  図鑑完成度を表示するウィンドウです。 #============================================================================== class Window_DictionaryPerfection < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize(kind) super(544 - 200, 416 - 56, 200, 56) refresh(kind) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(kind) self.contents.clear dic_max = 0 dic_num = 0 self.contents.draw_text(0, 0, 200 - 32, WLH, "図鑑完成度:", 0) if kind == 0 for i in 1...$data_items.size hantei = /<図鑑無効>/ =~ $data_items[i].note if $data_items[i].name.size > 0 and hantei == nil dic_max += 1 $game_system.i_dic_sw = [] if $game_system.i_dic_sw == nil $game_system.i_dic_sw[i] = false if $game_system.i_dic_sw[i] == nil if $game_system.i_dic_sw[i] == true dic_num += 1 end end end self.contents.draw_text(0, 0, 200 - 32, WLH, "#{(100*dic_num)/dic_max}%", 2) end if kind == 1 for i in 1...$data_weapons.size hantei = /<図鑑無効>/ =~ $data_weapons[i].note if $data_weapons[i].name.size > 0 and hantei == nil dic_max += 1 $game_system.w_dic_sw = [] if $game_system.w_dic_sw == nil $game_system.w_dic_sw[i] = false if $game_system.w_dic_sw[i] == nil if $game_system.w_dic_sw[i] == true dic_num += 1 end end end self.contents.draw_text(0, 0, 200 - 32, WLH, "#{(100*dic_num)/dic_max}%", 2) end if kind == 2 for i in 1...$data_armors.size hantei = /<図鑑無効>/ =~ $data_armors[i].note if $data_armors[i].name.size > 0 and hantei == nil dic_max += 1 $game_system.a_dic_sw = [] if $game_system.a_dic_sw == nil $game_system.a_dic_sw[i] = false if $game_system.a_dic_sw[i] == nil if $game_system.a_dic_sw[i] == true dic_num += 1 end end end self.contents.draw_text(0, 0, 200 - 32, WLH, "#{(100*dic_num)/dic_max}%", 2) end end end