Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Instalación del sistema de autosave
- Paso 2:
- ##### Autosave #############################################
- def pbTryLoadFile(savefile, backup=false)
- trainer=nil
- framecount=nil
- game_system=nil
- pokemonSystem=nil
- mapid=nil
- time=nil
- File.open(savefile){|f|
- if backup
- Marshal.load(f)
- end
- trainer=Marshal.load(f)
- framecount=Marshal.load(f)
- game_system=Marshal.load(f)
- pokemonSystem=Marshal.load(f)
- mapid=Marshal.load(f)
- time=Marshal.load(f)
- }
- raise "Archivo corrupto" if !trainer.is_a?(PokeBattle_Trainer)
- raise "Archivo corrupto" if !framecount.is_a?(Numeric)
- raise "Archivo corrupto" if !game_system.is_a?(Game_System)
- raise "Archivo corrupto" if !pokemonSystem.is_a?(PokemonSystem)
- raise "Archivo corrupto" if !mapid.is_a?(Numeric)
- return [trainer,framecount,game_system,pokemonSystem,mapid,time]
- end
- #######################################################
- Paso 3:
- cmdBackup = -1 #Autosave
- Paso 4:
- commands[cmdBackup=commands.length]=_INTL("Autoguardados") if showContinue # Autosave
- Paso 5:
- commands[cmdBackup=commands.length]=_INTL("Autoguardados") if safeExists?(RTP.getSaveFileName("Backup0.rxdata"))
- Paso 6:
- if (cmdContinue>=0 && command==cmdContinue) || (cmdBackup>=0 && command == cmdBackup)
- # Autosave ###########################################
- if command == cmdBackup
- commands = []
- for i in 0...10
- file = RTP.getSaveFileName("Backup#{i}.rxdata")
- if safeExists?(file)
- data = nil
- File.open(file){|f|
- data = Marshal.load(f)
- }
- if data.is_a?(String)
- commands.push(data)
- next
- end
- end
- commands.push("----------")
- end
- cmd = selectAutosave(commands)
- if cmd == nil
- next
- end
- savefile = RTP.getSaveFileName("Backup#{cmd}.rxdata")
- trainer, framecount, $game_system, $PokemonSystem, mapid=pbTryLoadFile(savefile, true)
- $loading = true
- end
- ####################################################
- Paso 7:
- #### Autosave ############
- if command==cmdBackup
- Marshal.load(f) # Backup data already loaded
- end
- ###########################
- Paso 8, en un nuevo script:
- #===============================================================================
- #Sistema de Autosave de Kyu
- NOAUTOSAVESWITCH = 999
- #===============================================================================
- def selectAutosave(commands)
- cmdwindow=Window_CommandPokemonEx.new(commands)
- cmdwindow.z=99999
- cmdwindow.visible=true
- cmdwindow.resizeToFit(cmdwindow.commands)
- cmdwindow.index=0
- cmdwindow.x = Graphics.width/2 - cmdwindow.width/2
- cmdwindow.y = Graphics.height/2 - cmdwindow.height/2
- command = 0
- loop do
- Graphics.update
- Input.update
- cmdwindow.update
- if Input.trigger?(Input::B)
- command = nil
- break
- end
- if Input.trigger?(Input::C)
- if commands[cmdwindow.index] == "----------"
- Kernel.pbMessage("No existe respaldo para este slot")
- else
- command=cmdwindow.index
- break
- end
- end
- end
- cmdwindow.dispose
- Input.update
- return command
- end
- def pbSave(safesave=false, backup=false)
- return if !$Trainer
- $Trainer.metaID=$PokemonGlobal.playerID
- if backup
- index = $PokemonGlobal.autosaveSlot
- savefile = RTP.getSaveFileName("Backup#{index}.rxdata")
- time = Time.now.strftime("%c") #pbGetTimeNow.strftime("%c")
- mapname = pbGetMapNameFromId($game_map.map_id)
- data = _INTL("{1} - {2}", mapname[0,25], time)
- $PokemonGlobal.autosaveSlot += 1
- else
- savefile = RTP.getSaveFileName("Game.rxdata")
- end
- begin
- File.open(savefile,"wb"){|f|
- if backup
- Marshal.dump(data,f)
- end
- Marshal.dump($Trainer,f)
- Marshal.dump(Graphics.frame_count,f)
- if $data_system.respond_to?("magic_number")
- $game_system.magic_number = $data_system.magic_number
- else
- $game_system.magic_number = $data_system.version_id
- end
- $game_system.save_count+=1
- Marshal.dump($game_system,f)
- Marshal.dump($PokemonSystem,f)
- Marshal.dump($game_map.map_id,f)
- Marshal.dump($game_switches,f)
- Marshal.dump($game_variables,f)
- Marshal.dump($game_self_switches,f)
- Marshal.dump($game_screen,f)
- Marshal.dump($MapFactory,f)
- Marshal.dump($game_player,f)
- $PokemonGlobal.safesave=safesave
- Marshal.dump($PokemonGlobal,f)
- Marshal.dump($PokemonMap,f)
- Marshal.dump($PokemonBag,f)
- Marshal.dump($PokemonStorage,f)
- }
- Graphics.frame_reset
- rescue
- return false
- end
- return true
- end
- Events.onMapSceneChange+=proc{|sender,e|
- scene=e[0]
- mapChanged=e[1]
- if !$game_switches[NOAUTOSAVESWITCH]
- return if !scene || !scene.spriteset
- if mapChanged
- if $loading == false # Not loading for the first time
- pbSave(false, true)
- autosaveAnim
- end
- $loading = false
- end
- end
- }
- class PokemonGlobalMetadata #Añade la variable global AutosaveSlot
- alias ats_initialize initialize
- def initialize
- ats_initialize
- @autosaveSlot ||= 0
- end
- def autosaveSlot=(value)
- if value>=10
- value = 0
- end
- @autosaveSlot = value
- end
- def autosaveSlot
- if @autosaveSlot
- return @autosaveSlot
- else
- @autosaveSlot ||= 0
- return @autosaveSlot
- end
- end
- end
- if !defined?(UISprite)
- #UI Object with timer, animation and other relevant data
- class UISprite < SpriteWrapper
- attr_accessor :scroll
- attr_accessor :timer
- def initialize(x, y, bitmap, viewport)
- super(viewport)
- self.bitmap = bitmap
- self.x = x
- self.y = y
- @scroll = false
- @timer = 0
- end
- def update
- return if self.disposed?
- @timer += 1
- case @timer
- when (0..10)
- self.x += self.bitmap.width/10
- when (130..140)
- self.x -= self.bitmap.width/10
- when 141
- self.dispose
- end
- end
- end
- class Spriteset_Map
- # Handles all UI objects in order to control their positions on screen, timing
- # and disposal. Acts like a Queue.
- class UIHandler
- def initialize
- @viewport = Viewport.new(0,0,Graphics.width,Graphics.height) # Uses its own viewport to make it compatible with both v16 and v17.
- @viewport.z = 9999
- @sprites = []
- end
- def addSprite(x, y, bitmap)
- @sprites.each{|sprite|
- sprite.scroll = true
- }
- index = @sprites.length
- @sprites[index] = UISprite.new(x, y, bitmap, @viewport)
- end
- def update
- removed = []
- @sprites.each_index{|key|
- sprite = @sprites[key]
- if sprite.scroll
- sprite2 = @sprites[key + 1]
- if sprite.x >= sprite2.x && sprite.x <= sprite2.bitmap.width + sprite2.x
- if sprite.y >= sprite2.y && sprite.y <= sprite2.bitmap.height + sprite2.y + 5
- sprite.y += 5
- end
- else
- sprite.scroll = false
- end
- end
- sprite.update
- if sprite.disposed?
- removed.push(sprite)
- end
- }
- removed.each{|sprite|
- @sprites.delete(sprite)
- }
- end
- def dispose
- @sprites.each{|sprite|
- if !sprite.disposed?
- sprite.dispose
- end
- }
- @viewport.dispose
- end
- end
- alias :disposeOld :dispose
- alias :updateOld :update
- def dispose
- @ui.dispose if @ui
- disposeOld
- end
- def update
- @ui = UIHandler.new if !@ui
- @ui.update
- updateOld
- end
- def ui
- return @ui
- end
- end
- class Scene_Map
- def addSprite(x, y, bitmap)
- self.spriteset.ui.addSprite(x, y, bitmap)
- end
- end
- end
- def autosaveAnim
- bitmap = Bitmap.new(Graphics.width, 50)
- pbSetSystemFont(bitmap)
- base = Color.new(28,227,43)
- shadow = Color.new(72,80,88,0)
- #bitmap.font.size = 20
- pbSetSmallFont(bitmap)
- textpos = [[_INTL("Autoguardado Completado"),10,15,0,base,shadow]]
- pbDrawTextPositions(bitmap,textpos)
- $scene.addSprite(-bitmap.width,Graphics.height-60,bitmap)
- end
Add Comment
Please, Sign In to add comment