# 多周目物品箱 by cupidk rays # 需配合本工程内的跨存档变量 # 使用方法 调用脚本$scene = Scene_NGCase.new class Game_Party; attr_accessor :items ; end class Window_NgItem < Window_Item def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] (1...$data_items.size).each do |i| if Ngitem_number(i) > 0 @data.push($data_items[i]) end end @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) (0...@item_max).each do |i| draw_item(i) end end end def Ngitem_number(id) data = CUPIDK::NGVAR.get_data["NG_items"] n = data.include?(id) ? data[id] : 0 end def draw_item(index) item = @data[index] number = Ngitem_number(item.id) x = 4 + index % 2 * (288 + 32) y = index / 2 * 32 rect = Rect.new(x, y, self.width / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(item.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, item.name, 0) self.contents.draw_text(x + 240, y, 16, 32, ":", 1) self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2) end end class Window_HaveItem < Window_Item def draw_item(index) item = @data[index] case item when RPG::Item number = $game_party.item_number(item.id) when RPG::Weapon number = $game_party.weapon_number(item.id) when RPG::Armor number = $game_party.armor_number(item.id) end x = 4 + index % 2 * (288 + 32) y = index / 2 * 32 rect = Rect.new(x, y, self.width / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(item.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, item.name, 0) self.contents.draw_text(x + 240, y, 16, 32, ":", 1) self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2) end end class Scene_NGCase include CUPIDK def main # 生成帮助窗口、物品窗口 @help_window = Window_Help.new @item_window = Window_HaveItem.new @item_window.y += 285 @item_window.height = 130 @item_window.help_window = @help_window @Ngitem_window = Window_NgItem.new @Ngitem_window.help_window = @help_window @Ngitem_window.height = 284 if $game_party.items.empty? || !$game_party.items.any? {|k,v| v >= 1 } @item_window.active = false else @Ngitem_window.active = false end # 执行过度 Graphics.transition # 主循环 loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze # 释放窗口 @help_window.dispose @item_window.dispose @Ngitem_window.dispose end # 画面更新 def update @help_window.update @item_window.update @Ngitem_window.update if @item_window.active update_item return end if @Ngitem_window.active update_Ngitem return end end def Ngitems NGVAR.get_data["NG_items"] end # 跨存档储存窗口 def update_Ngitem if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) @Ngitem = @Ngitem_window.item num = 1 if NGVAR.get_data["NG_items"].include?(@Ngitem.id) && NGVAR.get_data["NG_items"][@Ngitem.id] >= num NGVAR.get_data["NG_items"][@Ngitem.id] -= num if $game_party.items.include?(@Ngitem.id) $game_party.gain_item(@Ngitem.id, num) else $game_party.items[@Ngitem.id] = num end $game_system.se_play($data_system.decision_se) name = "Data/NGdata.rxdata" save_data(NGVAR.get_data, name) @item_window.refresh @Ngitem_window.refresh else $game_system.se_play($data_system.cancel_se) end end end # 角色物品窗口 def update_item if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) @Ngitem_window.active = true @item_window.active = false return end if Input.trigger?(Input::C) @item = @item_window.item id = NGVAR::NGTIMES_VARID max = $game_variables[id] * NGVAR::NGCASE_SIZE ngmax = NGVAR.get_data["NG_items"].select do |k, v| v > 0 end if (NGVAR.get_data["NG_items"][@item.id].nil? || NGVAR.get_data["NG_items"][@item.id] == 0) && max <= ngmax.size return $game_system.se_play($data_system.cancel_se) end # 演奏确定 SE num = 1 if $game_party.items.include?(@item.id) && $game_party.item_number(@item.id) >= num $game_party.gain_item(@item.id, -num) if NGVAR.get_data["NG_items"][@item.id] NGVAR.get_data["NG_items"][@item.id] += num else NGVAR.get_data["NG_items"][@item.id] = num end $game_system.se_play($data_system.decision_se) name = "Data/NGdata.rxdata" save_data(NGVAR.get_data, name) @item_window.refresh @Ngitem_window.refresh else $game_system.se_play($data_system.cancel_se) end end end end