Brandobscure001 Paladin (niveau 1)
Messages postés : 544 Date d'inscription : 02/08/2011 Jauge LPC :
| Sujet: Zelda File System v1.1( sauvegarde-zelda ) Mer 22 Fév 2012 - 20:55 | |
| Bonjour je vien vous partager un nouveau script. Auteur : SowS Descriptif: Ce script permet d'avoir des slots de sauvegarde a la zelda. Screen: le script: - Code:
-
#=============================================================================== # Zelda File System # v1.1 - 03/04/11 # by SowS #------------------------------------------------------------------------------- # Instructions: # Copier au dessus de main. # Assurez-vous que votre base de données Acteur n'est pas vide. #====================================================================== $imported = {} if $imported == nil $imported["SowSZeldaFileSystem"] = true module SOWS_ZFS #============================================================================== # ** SETTINGS - START #============================================================================== # Background image # Set to true if you want to use a background image. The dimension must be # 544 x 416. USE_BG = false BG_FILENAME = "zfs_bg" #---------------------------------------- # Texts used in the script FILE_LABEL = "CHOOSE A FILE" PRESS_START = "PRESS START" START_LABEL = "START" ERASE_LABEL = "ERASE" # File Status window settings # Set to true to display. Otherwise, false. You can change the # position of the things set to true. format is [x, y] #---------------------------------------- # Sprites of the party members PARTY_SPRITES = true PARTY_SPRITES_POS = [80, 106] #---------------------------------------- # Faces of the party members PARTY_FACES = true PARTY_FACES_POS = [0, 10] #---------------------------------------- # Time played TIME_STAMP = true TIME_STAMP_POS = [0, 150] #---------------------------------------- # Current gold GOLD_HELD = true GOLD_HELD_POS = [0, 200] #---------------------------------------- # Current map MAP_ON = true MAP_ON_POS = [0, 175] #============================================================================== # ** SETTINGS - END #============================================================================== end #============================================================================== # ** Game_Temp #------------------------------------------------------------------------------ # This class handles temporary data that is not included with save data. # The instance of this class is referenced by $game_temp. #============================================================================== class Game_Temp attr_accessor :filename #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- alias sows_zfs_initialize initialize unless $@ def initialize sows_zfs_initialize @filename = "" end end #============================================================================== # ** Window_Command #------------------------------------------------------------------------------ # This window deals with general command choices. #============================================================================== class Window_Start < Window_Command #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- alias sows_zfs_initialize initialize unless $@ def initialize(*args) sows_zfs_initialize(*args) self.opacity = 0 end #-------------------------------------------------------------------------- # * Update cursor #-------------------------------------------------------------------------- def update_cursor self.cursor_rect.empty # Empty cursor end end #============================================================================== # ** Window_SaveFile #------------------------------------------------------------------------------ # This window displays save files on the save and load screens. #============================================================================== class Window_SaveFile < Window_Base #-------------------------------------------------------------------------- # * Object Initialization # file_index : save file index (0-3) # filename : filename #-------------------------------------------------------------------------- def initialize(file_index, filename) super(0, 56 + file_index % 4 * 90, 544 / 3 - 32, 90) @file_index = file_index @filename = filename load_gamedata refresh @selected = false end #-------------------------------------------------------------------------- # * Load Partial Game Data # By default, switches and variables are not used (for expansion use, # such as displaying place names) #-------------------------------------------------------------------------- def load_gamedata @time_stamp = Time.at(0) @file_exist = FileTest.exist?(@filename) if @file_exist file = File.open(@filename, "r") @time_stamp = file.mtime begin @characters = Marshal.load(file) @frame_count = Marshal.load(file) @last_bgm = Marshal.load(file) @last_bgs = Marshal.load(file) @game_system = Marshal.load(file) @game_message = Marshal.load(file) @game_switches = Marshal.load(file) @game_variables = Marshal.load(file) @game_self_switches = Marshal.load(file) @game_actors = Marshal.load(file) @total_sec = @frame_count / Graphics.frame_rate rescue @file_exist = false ensure file.close end end end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = normal_color filename = @file_exist ? @game_actors[1].name : "" name = "#{@file_index + 1} " + filename self.contents.draw_text(4, (self.contents.height - WLH) / 2, 200, WLH, name) end #-------------------------------------------------------------------------- # * Update cursor #-------------------------------------------------------------------------- def update_cursor if @selected self.cursor_rect.set(0, (self.contents.height - WLH) / 2, self.contents.width, WLH) else self.cursor_rect.empty end end end #============================================================================== # ** Window_FileCommand #------------------------------------------------------------------------------ # This window displays the commands for the current file selected. #============================================================================== class Window_FileCommand < Window_Base include SOWS_ZFS #-------------------------------------------------------------------------- # * Object Initialization # index : command index (0-1) #-------------------------------------------------------------------------- def initialize(index) super(544 / 3 * index, 326, 544 / 3, 90) @index = index refresh @selected = false self.visible = false end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = normal_color case @index when 0; name = START_LABEL when 1; name = ERASE_LABEL end self.contents.draw_text(4, (self.contents.height - WLH) / 2, self.contents.width - 4, WLH, name) end #-------------------------------------------------------------------------- # * Set Selected # selected : new selected (true = selected, false = unselected) #-------------------------------------------------------------------------- def selected=(selected) @selected = selected update_cursor end #-------------------------------------------------------------------------- # * Update cursor #-------------------------------------------------------------------------- def update_cursor if @selected self.cursor_rect.set(0, (self.contents.height - WLH) / 2, self.contents.width, WLH) else self.cursor_rect.empty end end end #============================================================================== # ** Window_FileStatus #------------------------------------------------------------------------------ # This window displays the status of the current file selected. #============================================================================== class Window_FileStatus < Window_Base include SOWS_ZFS #-------------------------------------------------------------------------- # * Object Initialization # file_index : save file index (0-3) # filename : filename #-------------------------------------------------------------------------- def initialize(filename) super(544 / 3 - 32, 56, 544 / 3 * 2 + 32, 270) @filename = filename load_gamedata refresh self.visible = false end #-------------------------------------------------------------------------- # * Load Partial Game Data # By default, switches and variables are not used (for expansion use, # such as displaying place names) #-------------------------------------------------------------------------- def load_gamedata @time_stamp = Time.at(0) @file_exist = FileTest.exist?(@filename) if @file_exist file = File.open(@filename, "r") @time_stamp = file.mtime begin @characters = Marshal.load(file) @frame_count = Marshal.load(file) @last_bgm = Marshal.load(file) @last_bgs = Marshal.load(file) @game_system = Marshal.load(file) @game_message = Marshal.load(file) @game_switches = Marshal.load(file) @game_variables = Marshal.load(file) @game_self_switches = 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) @total_sec = @frame_count / Graphics.frame_rate rescue @file_exist = false ensure file.close end end end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = normal_color if @file_exist draw_party_faces(PARTY_FACES_POS[0], PARTY_FACES_POS[1]) if PARTY_FACES draw_party_characters(PARTY_SPRITES_POS[0], PARTY_SPRITES_POS[1]) if PARTY_SPRITES draw_playtime(TIME_STAMP_POS[0], TIME_STAMP_POS[1], contents.width - 4, 2) if TIME_STAMP draw_currency_value(@game_party.gold, GOLD_HELD_POS[0], GOLD_HELD_POS[1], contents.width - 4) if GOLD_HELD #~ draw_party_hp(HP_GAUGE_POS[0], HP_GAUGE_POS[1]) if HP_GAUGE #~ draw_party_mp(MP_GAUGE_POS[0], MP_GAUGE_POS[1]) if MP_GAUGE draw_map_name(MAP_ON_POS[0], MAP_ON_POS[1]) if MAP_ON end end #-------------------------------------------------------------------------- # * Draw Party Characters's Faces # x : Draw spot X coordinate # y : Draw spot Y coordinate #-------------------------------------------------------------------------- def draw_party_faces(x, y) i = @game_party.members.size - 1 while i >= 0 name = @game_party.members[i].face_name index = @game_party.members[i].face_index draw_face(name, index, x + i * 88, y) i -= 1 end end #-------------------------------------------------------------------------- # * Draw Party Characters Sprites # x : Draw spot X coordinate # y : Draw spot Y coordinate #-------------------------------------------------------------------------- def draw_party_characters(x, y) for i in 0...@characters.size name = @characters[i][0] index = @characters[i][1] draw_character(name, index, x + i * 88, y) end end #-------------------------------------------------------------------------- # * Draw Party Characters's HPs # x : Draw spot X coordinate # y : Draw spot Y coordinate #-------------------------------------------------------------------------- def draw_party_hp(x, y) for i in 0...@game_party.members.size draw_actor_hp(@game_party.members[i], x + i * 76, y, 120) end end #-------------------------------------------------------------------------- # * Draw Party Characters's FMPs # x : Draw spot X coordinate # y : Draw spot Y coordinate #-------------------------------------------------------------------------- def draw_party_mp(x, y) for i in 0...@game_party.members.size draw_actor_mp(@game_party.members[i], x + i * 76, y, 120) end end #-------------------------------------------------------------------------- # * Draw Map name # x : Draw spot X coordinate # y : Draw spot Y coordinate #-------------------------------------------------------------------------- def draw_map_name(x, y) name = load_data("Data/MapInfos.rvdata")[@game_map.map_id].name self.contents.draw_text(x, y, contents.width - 4, WLH, name, 2) end #-------------------------------------------------------------------------- # * Draw Play Time # x : Draw spot X coordinate # y : Draw spot Y coordinate # width : Width # align : Alignment #-------------------------------------------------------------------------- def draw_playtime(x, y, width, align) hour = @total_sec / 60 / 60 min = @total_sec / 60 % 60 sec = @total_sec % 60 time_string = sprintf("%02d:%02d:%02d", hour, min, sec) self.contents.font.color = normal_color self.contents.draw_text(x, y, width, WLH, time_string, 2) end #-------------------------------------------------------------------------- # * Set Selected # selected : new selected (true = selected, false = unselected) #-------------------------------------------------------------------------- def selected=(selected) @selected = selected if @selected; self.visible = true else; self.visible = false end end end #============================================================================== # ** Scene_Title #------------------------------------------------------------------------------ # This class performs the title screen processing. #============================================================================== class Scene_Title < Scene_Base include SOWS_ZFS #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super @command_window.update if Input.trigger?(Input::C) Sound.play_decision $scene = Scene_File.new(false, true, false) $game_temp.filename = $game_actors[1].name end end #-------------------------------------------------------------------------- # * Create Command Window #-------------------------------------------------------------------------- def create_command_window @command_window = Window_Start.new(172, [PRESS_START]) @command_window.x = (544 - @command_window.width) / 2 @command_window.y = 288 @command_window.openness = 0 @command_window.open end end #============================================================================== # ** Scene_Name #------------------------------------------------------------------------------ # This class performs name input screen processing. #============================================================================== class Scene_Name < Scene_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(file_index = -1) @file_index = file_index end #-------------------------------------------------------------------------- # * Start processing #-------------------------------------------------------------------------- def start super create_menu_background if @file_index != -1 $game_actors[1].name = $game_temp.filename @actor = $game_actors[1] max_char = 10 else @actor = $game_actors[$game_temp.name_actor_id] max_char = $game_temp.name_max_char end if !$imported["SowSNISDesign"] @input_window = Window_NameInput.new @edit_window = Window_NameEdit.new(@actor, max_char) end end #-------------------------------------------------------------------------- # * Return to Original Screen #-------------------------------------------------------------------------- def return_scene if @file_index == -1 $scene = Scene_Map.new else $scene = Scene_File.new(true, false, false, @file_index) @actor = nil end end end #============================================================================== # ** Scene_File #------------------------------------------------------------------------------ # This class performs the save and load screen processing. #============================================================================== class Scene_File < Scene_Base include SOWS_ZFS #-------------------------------------------------------------------------- # * Object Initialization # saving : save flag (if false, load screen) # from_title : flag: it was called from "Continue" on the title screen # from_event : flag: it was called from the "Call Save Screen" event # from_nis : flag: it was called from the name input screen #-------------------------------------------------------------------------- alias sows_zfs_initialize initialize unless $@ def initialize(saving, from_title, from_event, file_index = -1) sows_zfs_initialize(saving, from_title, from_event) @file_index = file_index @cmd_index = 0 end #-------------------------------------------------------------------------- # * Start processing #-------------------------------------------------------------------------- def start if @file_index != -1 Sound.play_save # Make file file = File.open("Save#{@file_index + 1}.rvdata", "wb") write_save_data(file) file.close end super create_menu_background @help_window = Window_Help.new create_savefile_windows create_filecommand_windows @index = self.latest_file_index @help_window.set_text(FILE_LABEL) @savefile_windows[@index].selected = true @filestatus_windows[@index].selected = true end #-------------------------------------------------------------------------- # * Termination Processing #-------------------------------------------------------------------------- alias sows_zfs_terminate terminate unless $@ def terminate sows_zfs_terminate dispose_status_windows dispose_command_windows end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- alias sows_zfs_update update unless $@ def update super update_menu_background @help_window.update update_status_windows update_savefile_windows update_command_windows if @filecommand_windows[0].visible update_command_selection else update_savefile_selection end end #-------------------------------------------------------------------------- # * Create File Command Window #-------------------------------------------------------------------------- def create_filecommand_windows @filecommand_windows = [] for i in 0..1 @filecommand_windows.push(Window_FileCommand.new(i)) end end #-------------------------------------------------------------------------- # * Dispose of File Status Window #-------------------------------------------------------------------------- def dispose_status_windows for window in @filestatus_windows window.dispose end end #-------------------------------------------------------------------------- # * Dispose File Command Window #-------------------------------------------------------------------------- def dispose_command_windows for window in @filecommand_windows window.dispose end end #-------------------------------------------------------------------------- # * Update File Command Window #-------------------------------------------------------------------------- def update_command_windows for window in @filecommand_windows window.update end end #-------------------------------------------------------------------------- # * Update Save File Window #-------------------------------------------------------------------------- def update_status_windows for window in @filestatus_windows window.update end end #-------------------------------------------------------------------------- # * Update Save File Selection #-------------------------------------------------------------------------- def update_savefile_selection if Input.trigger?(Input::C) determine_savefile elsif Input.trigger?(Input::B) Sound.play_cancel return_scene else last_index = @index if Input.repeat?(Input::DOWN) cursor_down(Input.trigger?(Input::DOWN)) end if Input.repeat?(Input::UP) cursor_up(Input.trigger?(Input::UP)) end if @index != last_index Sound.play_cursor @savefile_windows[last_index].selected = false @savefile_windows[@index].selected = true @filestatus_windows[last_index].selected = false @filestatus_windows[@index].selected = true end end end #-------------------------------------------------------------------------- # *Update File Command Selection #-------------------------------------------------------------------------- def update_command_selection if Input.trigger?(Input::C) case @cmd_index when 0; do_load when 1; do_erase end elsif Input.trigger?(Input::B) case @index when 0; @savefile_windows[1].visible = @savefile_windows[2].visible = true when 1; @savefile_windows[0].visible = @savefile_windows[2].visible = true when 2; @savefile_windows[0].visible = @savefile_windows[1].visible = true end @savefile_windows[@index].selected = true @filecommand_windows[@cmd_index].selected = false @filecommand_windows[0].visible = false @filecommand_windows[1].visible = false @item_max = 3 else last_index = @cmd_index if Input.repeat?(Input::LEFT) cursor_left(Input.trigger?(Input::LEFT)) end if Input.repeat?(Input::RIGHT) cursor_right end if @cmd_index != last_index Sound.play_cursor @filecommand_windows[last_index].selected = false @filecommand_windows[@cmd_index].selected = true end end end #-------------------------------------------------------------------------- # * Move cursor right # wrap : Wraparound allowed #-------------------------------------------------------------------------- def cursor_right if @cmd_index == 0; @cmd_index = 1 elsif @cmd_index == 1; @cmd_index = 0 end end #-------------------------------------------------------------------------- # * Move cursor left # wrap : Wraparound allowed #-------------------------------------------------------------------------- def cursor_left(wrap) if @cmd_index > 0 or wrap @cmd_index = (@cmd_index - 1 + @item_max) % @item_max end end #-------------------------------------------------------------------------- # * Confirm Save File #-------------------------------------------------------------------------- def determine_savefile if @savefile_windows[@index].file_exist case @index when 0; @savefile_windows[1].visible = @savefile_windows[2].visible = false when 1; @savefile_windows[0].visible = @savefile_windows[2].visible = false when 2; @savefile_windows[0].visible = @savefile_windows[1].visible = false end @savefile_windows[@index].selected = false @filecommand_windows[0].visible = true @filecommand_windows[1].visible = true @filecommand_windows[0].selected = true @item_max = 2 else do_save end $game_temp.last_file_index = @index end #-------------------------------------------------------------------------- # * Execute Save #-------------------------------------------------------------------------- def do_save # Set player location confirm_player_location Sound.play_decision $game_party.setup_starting_members # Initial party $game_map.setup($data_system.start_map_id) # Initial map position $game_player.moveto($data_system.start_x, $data_system.start_y) $game_player.refresh $file_name = "Save#{@index + 1}.rvdata" $scene = Scene_Name.new(@index) end #-------------------------------------------------------------------------- # * Execute Load #-------------------------------------------------------------------------- def do_load Sound.play_load file = File.open(@savefile_windows[@index].filename, "rb") read_save_data(file) file.close $scene = Scene_Map.new RPG::BGM.fade(1500) Graphics.fadeout(60) Graphics.wait(40) @last_bgm.play @last_bgs.play end #-------------------------------------------------------------------------- # * Execute Load #-------------------------------------------------------------------------- def do_erase Sound.play_decision File.delete(@savefile_windows[@index].filename) $scene = Scene_File.new(true, false, false) end #-------------------------------------------------------------------------- # * Check Player Start Location Existence #-------------------------------------------------------------------------- def confirm_player_location if $data_system.start_map_id == 0 print "Player start location not set." exit end end #-------------------------------------------------------------------------- # * Create Save File Window #-------------------------------------------------------------------------- def create_savefile_windows @savefile_windows = [] @filestatus_windows = [] for i in 0..2 @savefile_windows.push(Window_SaveFile.new(i, make_filename(i))) @filestatus_windows.push(Window_FileStatus.new(make_filename(i))) end @item_max = 3 end #-------------------------------------------------------------------------- # * Write Save Data # file : write file object (opened) #-------------------------------------------------------------------------- alias sows_zfs_write_save_data write_save_data unless $@ def write_save_data(file) sows_zfs_write_save_data(file) Marshal.dump($file_name, file) end #-------------------------------------------------------------------------- # * Read Save Data # file : file object for reading (opened) #-------------------------------------------------------------------------- alias sows_zfs_read_save_data read_save_data unless $@ def read_save_data(file) sows_zfs_read_save_data(file) $file_name = Marshal.load(file) end #-------------------------------------------------------------------------- # * Create Menu Background #-------------------------------------------------------------------------- alias sows_zfs_create_menu_background create_menu_background unless $@ def create_menu_background if USE_BG @menuback_sprite = Sprite.new @menuback_sprite.bitmap = Cache.picture(BG_FILENAME) @menuback_sprite.x = @menuback_sprite.y = 0 else sows_zfs_create_menu_background end end end #============================================================================== # ** Scene_Menu #------------------------------------------------------------------------------ # This class performs the menu screen processing. #============================================================================== class Scene_Menu < Scene_Base #-------------------------------------------------------------------------- # * Update Command Selection #-------------------------------------------------------------------------- def update_command_selection if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new elsif Input.trigger?(Input::C) if $game_party.members.size == 0 and @command_window.index < 4 Sound.play_buzzer return elsif $game_system.save_disabled and @command_window.index == 4 Sound.play_buzzer return end Sound.play_decision case @command_window.index when 0 # Item $scene = Scene_Item.new when 1,2,3 # Skill, equipment, status start_actor_selection when 4 # Save do_save if !$file_name.nil? when 5 # End Game $scene = Scene_End.new end end end #-------------------------------------------------------------------------- # * Execute Save #-------------------------------------------------------------------------- def do_save file = File.open($file_name, "wb") write_save_data(file) file.close Sound.play_save end #-------------------------------------------------------------------------- # * Write Save Data # file : write file object (opened) #-------------------------------------------------------------------------- def write_save_data(file) characters = [] for actor in $game_party.members characters.push([actor.character_name, actor.character_index]) end $game_system.save_count += 1 $game_system.version_id = $data_system.version_id @last_bgm = RPG::BGM::last @last_bgs = RPG::BGS::last Marshal.dump(characters, file) Marshal.dump(Graphics.frame_count, file) Marshal.dump(@last_bgm, file) Marshal.dump(@last_bgs, file) Marshal.dump($game_system, file) Marshal.dump($game_message, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, 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) Marshal.dump($file_name, file) end end #~ #---------------------------------------- #~ # Party members' HP #~ HP_GAUGE = true #~ HP_GAUGE_POS = [0, 108] #~ #---------------------------------------- #~ # Party members' MP #~ MP_GAUGE = true #~ MP_GAUGE_POS = [0, 140] si il y a des problèmes dite le moi Il y aurais peus ètre des risque d'imcompatibilité avec certain écran de titre |
|
Elekami Fondateur
Messages postés : 19071 Date d'inscription : 19/07/2008 Jauge LPC :
| Sujet: Re: Zelda File System v1.1( sauvegarde-zelda ) Jeu 23 Fév 2012 - 1:58 | |
| Rah nan merde, j'avais encore oublié de le préciser. |
|
Jin Ancien staffeux
Messages postés : 8557 Date d'inscription : 08/12/2010 Jauge LPC :
| Sujet: Re: Zelda File System v1.1( sauvegarde-zelda ) Jeu 23 Fév 2012 - 2:03 | |
| Tu m'emmerdes toi xD
Tu sais quoi ... n'en mets plus ... tes modérateur le feront à ta place x) Bien que je ne le sois pas totalement x) |
|