Arkalion Seigneur de la lumière
Nombre de messages : 260 Age : 31 Localisation : Canada/Québec/...chez moi Date d'inscription : 26/04/2006
| Sujet: Advance Save Menu Dim 4 Juin - 5:04 | |
| Advance_Save_Menu Auteur: Squall Un script est bien, il remplacera votre fenêtre de sauvegarde pour afficher une images de la carte ou la sauvegarde a été effectué, ainsi que le temps de jeu. SCREEN : D'abord créer un nouveau dossier dans votre projet (avec les fichiers appellés "Game", et nommé le "Saves". REMPLACER (dans Scene_Title) : - Citation :
- for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata") @continue_enabled = true end end par : - Citation :
- for i in 0..99
if FileTest.exist?("Saves/Save#{i+1}.rxdata") @continue_enabled = true end end Puis créer un nouveau script au dessus de "Main", et nommé le "Advance Save Menu" : - Citation :
#===================================== # ■ ASM - advanced save menu #------------------------------------------------------------------------------ # by squall // squall@loeher.zzn.com # monday the 28th of november 2005 # # Allows to have up to 99 files. # Files are stored inside of the folder 'Saves' inside of the game's folder. # Don't forget to create that folder if it doesn't already exist. #======================================
#====================================== # ■ Window_File #------------------------------------------------------------------------------ # This window shows a list of recorded save files. #======================================
class Window_File < Window_Selectable #-------------------------------------------------------------------------- # ● initialize #-------------------------------------------------------------------------- def initialize() super(0, 64, 320, 416) self.contents = Bitmap.new(width - 32, 99 * 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize index = $game_temp.last_file_index == nil ? 0 : $game_temp.last_file_index self.index = index @item_max = 99 refresh end #-------------------------------------------------------------------------- # ● refresh the window #-------------------------------------------------------------------------- def refresh time_stamp = Time.at(0) for i in 0...99 filename = "Saves/Save#{i + 1}.rxdata" self.contents.draw_text(1, i * 32, 32, 32, (i + 1).to_s, 1) if FileTest.exist?(filename) size = File.size(filename) if size.between?(1000, 999999) size /= 1000 size_str = "#{size} Ko" elsif size > 999999 size /= 1000000 size_str = "#{size} Mo" else size_str = size.to_s end time_stamp = File.open(filename, "r").mtime date = time_stamp.strftime("%d/%m/%Y") time = time_stamp.strftime("%H:%M") self.contents.draw_text(38, i * 32, 120, 32, date) self.contents.draw_text(160, i * 32, 100, 32, time) self.contents.draw_text(0, i * 32, 284, 32, size_str, 2) end end end end
#====================================== # ■ Window_FileStatus #------------------------------------------------------------------------------ # This window shows the status of the currently selected save file #======================================
class Window_FileStatus < Window_Base #-------------------------------------------------------------------------- # ● initialize #-------------------------------------------------------------------------- def initialize(save_window) super(320, 64, 320, 416) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize @save_window = save_window @index = @save_window.index rect = Rect.new(x + 16, y + (height - 32) / 2 + 16, width - 32, (height - 32) / 2) @viewport = Viewport.new(rect) @viewport.z = z + 10 refresh end #-------------------------------------------------------------------------- # ● dispose the map and the window #-------------------------------------------------------------------------- def dispose tilemap_dispose @viewport.dispose super end #-------------------------------------------------------------------------- # ● refresh the window #-------------------------------------------------------------------------- def refresh self.contents.clear tilemap_dispose filename = "Saves/Save#{@index + 1}.rxdata" return unless FileTest.exist?(filename) file = File.open(filename, "r") Marshal.load(file) frame_count = Marshal.load(file) for i in 0...6 Marshal.load(file) end party = Marshal.load(file) Marshal.load(file) map = Marshal.load(file) for i in 0...party.actors.size actor = party.actors[i] x = i % 2 * 144 + 4 y = i / 2 * 64 draw_actor_name(actor, x + 40, y) draw_actor_level(actor, x + 40, y + 32) draw_actor_graphic(actor, x + 10, y + 50) end total_sec = frame_count / Graphics.frame_rate hour = total_sec / 60 / 60 min = total_sec / 60 % 60 sec = total_sec % 60 text = sprintf("%02d:%02d:%02d", hour, min, sec) map_name = load_data("Data/MapInfos.rxdata")[map.map_id].name self.contents.font.color = system_color self.contents.draw_text(4, 128, 120, 32, "Played Time ") self.contents.draw_text(4, 160, 120, 32, "Location ") self.contents.draw_text(128, 128, 16, 32, ":") self.contents.draw_text(128, 160, 16, 32, ":") self.contents.font.color = normal_color self.contents.draw_text(144, 128, 120, 32, text) self.contents.draw_text(144, 160, 120, 32, map_name)
@tilemap = Tilemap.new(@viewport) @tilemap.tileset = RPG::Cache.tileset(map.tileset_name) for i in 0..6 autotile_name = map.autotile_names[i] @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name) end @tilemap.map_data = map.data @tilemap.ox = map.display_x / 4 + 176 @tilemap.oy = map.display_y / 4 + 148 end #-------------------------------------------------------------------------- # ● tilemap_dispose #-------------------------------------------------------------------------- def tilemap_dispose unless @tilemap == nil @tilemap.tileset.dispose for i in 0..6 @tilemap.autotiles[i].dispose end @tilemap.dispose @tilemap = nil end end #-------------------------------------------------------------------------- # ● update #-------------------------------------------------------------------------- def update @tilemap.update if @tilemap != nil if @index != @save_window.index @index = @save_window.index refresh end super end end
#==================================== # ■ Scene_File #------------------------------------------------------------------------------ # Base scene for load and save menus. #====================================
class Scene_File #-------------------------------------------------------------------------- # ● initialize the scene #-------------------------------------------------------------------------- def initialize(help_text) @help_text = help_text end #-------------------------------------------------------------------------- # ● main #-------------------------------------------------------------------------- def main @help_window = Window_Help.new @help_window.set_text(@help_text) @file_window = Window_File.new @status_window = Window_FileStatus.new(@file_window) Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @help_window.dispose @file_window.dispose @status_window.dispose end #-------------------------------------------------------------------------- # ● update #-------------------------------------------------------------------------- def update @help_window.update @file_window.update @status_window.update if Input.trigger?(Input::C) decision $game_temp.last_file_index = @file_index return end if Input.trigger?(Input::B) cancel return end end #-------------------------------------------------------------------------- # ● return the selected file's name #-------------------------------------------------------------------------- def filename return "Saves/Save#{@file_window.index + 1}.rxdata" end end
#==================================== # ■ Scene_Save #------------------------------------------------------------------------------ # Save menu #====================================
class Scene_Save < Scene_File #-------------------------------------------------------------------------- # ● initialize the save menu #-------------------------------------------------------------------------- def initialize super("Select a file to record your progress.") end #-------------------------------------------------------------------------- # ● decision key pressed #-------------------------------------------------------------------------- def decision $game_system.se_play($data_system.save_se) file = File.open(filename, "wb") write_save_data(file) file.close if $game_temp.save_calling $game_temp.save_calling = false $scene = Scene_Map.new return end $scene = Scene_Menu.new(4) end #-------------------------------------------------------------------------- # ● cancel key pressed #-------------------------------------------------------------------------- def cancel $game_system.se_play($data_system.cancel_se) if $game_temp.save_calling $game_temp.save_calling = false $scene = Scene_Map.new return end $scene = Scene_Menu.new(4) end #-------------------------------------------------------------------------- # ● save the current data into the selected file #-------------------------------------------------------------------------- def write_save_data(file) characters = [] for i in 0...$game_party.actors.size actor = $game_party.actors[i] characters.push([actor.character_name, actor.character_hue]) end Marshal.dump(characters, file) Marshal.dump(Graphics.frame_count, file) $game_system.save_count += 1 $game_system.magic_number = $data_system.magic_number Marshal.dump($game_system, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_screen, file) Marshal.dump($game_actors, file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) end end
#====================================== # ■ Scene_Load #------------------------------------------------------------------------------ # Load menu #======================================
class Scene_Load < Scene_File #-------------------------------------------------------------------------- # ● initialize the menu #-------------------------------------------------------------------------- def initialize $game_temp = Game_Temp.new $game_temp.last_file_index = 0 latest_time = Time.at(0) for i in 0..99 filename = "Saves/Save#{i + 1}.rxdata" if FileTest.exist?(filename) file = File.open(filename, "r") if file.mtime > latest_time latest_time = file.mtime $game_temp.last_file_index = i end file.close end end super("Select a file to load.") end #-------------------------------------------------------------------------- # ● decision key pressed #-------------------------------------------------------------------------- def decision unless FileTest.exist?(filename) $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.load_se) file = File.open(filename, "rb") read_save_data(file) file.close $game_system.bgm_play($game_system.playing_bgm) $game_system.bgs_play($game_system.playing_bgs) $game_map.update $scene = Scene_Map.new end #-------------------------------------------------------------------------- # ● cancel key pressed #-------------------------------------------------------------------------- def cancel $game_system.se_play($data_system.cancel_se) $scene = Scene_Title.new end #-------------------------------------------------------------------------- # ● load the selected file #-------------------------------------------------------------------------- def read_save_data(file) characters = Marshal.load(file) Graphics.frame_count = Marshal.load(file) $game_system = Marshal.load(file) $game_switches = Marshal.load(file) $game_variables = Marshal.load(file) $game_self_switches = Marshal.load(file) $game_screen = Marshal.load(file) $game_actors = Marshal.load(file) $game_party = Marshal.load(file) $game_troop = Marshal.load(file) $game_map = Marshal.load(file) $game_player = Marshal.load(file) if $game_system.magic_number != $data_system.magic_number $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end $game_party.refresh end end
| |
|