Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP][VX][VXACE]Backups Projects

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP][VX][VXACE]Backups Projects

Mensaje por newold el 2018-02-25, 11:42

Recientemente tuve un problema en un projecto. Se cortó el suministro eléctrico mientras estaba trabajando en él y al volver la corriente, para mi desgracia, todos los archivos de la carpeta data del proyecto habían quedado vacíos, con la imposibilidad de recuperar el proyecto :(.

para eso os dejo este script, se coloca en el primer script de la lista y lo que hace es que cada vez que le deis play a vuestro juego desde el editor os creará un backup de la carpeta data para que no os pase como a mí.

La carpeta que os crea se llama "Backup_Data_Project" y podéis configurar el script al principio del código para que os cree 2 carpetas de backups para más seguridad todavía de que no se perderá tu proyecto. Dentro de la carpeta "Backup_Data_Project" se crea un archivo llamado log.txt que muestra si los archivos están correctos y la fecha en que se crearon.

Versión corregida, la anterior no funcionaba bien en XP


Código:
# ------------------------------------------------------------------------------
# ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼               Begin Configuration            ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
# ------------------------------------------------------------------------------
  

# Use backups data
# true => Backup all files in folder "Data"
# false => does nothing
use_backup_data = true


# true => create 2 folders with backups of the files project data
#         folders "Backup_Data_Project" and "Backup_Data_Project2"
# false => create 1 folder with backups of the files project data
#         folder name "Backup_Data_Project"
use_double_backup = false


# ------------------------------------------------------------------------------
# ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲               End Configuration              ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
# ------------------------------------------------------------------------------




#==============================================================================
class File # << by NEWOLD
  def self.copy(s,d)
    begin
      f1 = File.open(s,'rb')
      f2 = File.open(d,'wb')
      text = f1.readlines.join("")
      f2.puts text
      f1.close
      f2.close
    rescue
    end
  end
end
#==============================================================================

#==============================================================================
class Find_Files # << by NEWOLD
  
  #--------------------------------------------------------------------------
  # Este bonito método encuentra todos los archivos en una carpeta dada.
  # Busca a través de todas las subcarpetas y devuelve todas las rutas de
  # los archivos. La ruta del directorio que se le pasa a este método
  # debe acabar en / (Ejemplo: c:/carpeta de archivos/ )
  # Este método puede recibir tres parámetros:
  # d = Directorio a analizar (Acabado en /). Este parámetro es obligatorio.
  # filter = Un array que contendrá las extensiones de archivo permitidas.
  #          (Solo las extensiones sin el .) Este parámetro es opcional.
  # check_sub_dir = Puede ser true o false. Cuando es true, también buscará
  #                 archivos en todos los subdirectorios que encuentre dentro
  #                 del directorio actual (y en todos los directorios que
  #                 encuentre). Cuando es false solo buscará archivos en el
  #                 directorio dado sin mirar en los subdirectorios.
  #                 Este parámetro es opcional.
  #--------------------------------------------------------------------------
  def dir(d,filter=[],check_sub_dir=true,i=0)
    data = []
    Dir[d + '*'].each do |path|
      if FileTest.directory?(path) and check_sub_dir
        
        data2 = Find_Files.new.dir(path + "/",filter,check_sub_dir,i)
        data.concat(data2)
      end
      path.downcase.match(/\.(\w*)\z/)
      next_path = (filter.size > 0) ? true : false
      filter.each {|ext| (next_path = false and break) if ext.downcase == $1}
      next if next_path
      data.push(path) if FileTest.file?(path)
      i += 1
      if i == 1000
        Graphics.update; i = 0
      end
    end
    return data
  end
  #--------------------------------------------------------------------------
  
end
#==============================================================================

if use_backup_data == true and ($TEST == true or $DEBUG == true)

    if use_double_backup == true
      backup_dirs = ["Backup_Data_Project", "Backup_Data_Project2"]
    else
      backup_dirs = ["Backup_Data_Project"]
    end

    files = Find_Files.new.dir("Data/")

    time = Time.now
    time = time.strftime("(%m/%d/%Y at %I:%M%p)")

    backup_dirs.each{|dir|

      Dir::mkdir(dir) unless FileTest.directory?(dir)
      
      log_file = File.open("#{dir}/log.txt", "w")
      
      log_file.write("List of files to backup #{time}:\n\n")
      
      files.each{|source| log_file.write("⏺️ #{source}\n") }
      
      log_file.write("\n\n----------------------------------------------------------")
      log_file.write("----------------------------------------------------------\n")
      log_file.write("➤ BEGIN\n")
      log_file.write("----------------------------------------------------------")
      log_file.write("----------------------------------------------------------\n")

      files.each{|source|
        new_dir = dir
        dirs = source.scan(/([^\/]+)/)
        for i in 0...dirs.size-1
          new_dir += "/#{dirs[i][0]}"
          Dir::mkdir(new_dir) unless FileTest.directory?(new_dir)
        end
        destination = "#{dir}/#{source}"
        if FileTest.exists?(destination)
          t1 = File.mtime(source)
          t2 = File.mtime(destination)
          if t1 != t2
            log_file.write("status file \"#{source}\"... ")
            File.copy(source, destination)
            begin
            File.utime(t1, t1, destination)
            rescue; end;
            log_file.write("ok.\n")
          else
            log_file.write("status file \"#{source}\"... ok.\n")
          end
        else
          log_file.write("status file \"#{source}\"... ")
          File.copy(source, destination)
          t1 = File.mtime(source)
          begin
          File.utime(t1, t1, destination)
          rescue; end
          log_file.write("ok.\n")
          log_file.write("status file \"#{source}\"... ok.\n")
        end
        t1 = File.mtime(source)
          t2 = File.mtime(destination)
      }
      
      log_file.write("----------------------------------------------------------")
      log_file.write("----------------------------------------------------------\n")
      log_file.write("➤ END")
      log_file.write("\n----------------------------------------------------------")
      log_file.write("----------------------------------------------------------\n")
    
      log_file.close
    }
    
end


Última edición por newold el 2018-03-29, 16:15, editado 1 vez
avatar
newold
Principiante
Principiante

0/3

Créditos 1267

Gracias : 133

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por Wecoc el 2018-02-25, 13:11

Me parece muy buen aporte no solo por lo que hace sinó por como está hecho, son muy interesantes algunos de esos métodos. Por ejemplo el Find_Files.new.dir es como hacer Dir["*"], Dir["*/**"]... pero totalmente recíproco y comprobando tipos de archivo, ¿verdad? Hice algo parecido hace un tiempo pero este parece tener más opciones. ¿Sabes si puede haber problemas con carácteres especiales?

Spoiler:


Solo por si alguien más se da cuenta: He visto esto y creí que era un error pero luego ya he visto que no, es un carácter Unicode que pusiste de modo controlado y por algún motivo Foroactivo lo muestra como "icono especial" de ese modo. Aún así parece copiarlo bien en el maker.

Edit: Creo que lo han arreglado


Última edición por Wecoc el 2018-05-27, 19:40, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 12291

Gracias : 646

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por newold el 2018-02-25, 18:50

Correcto. El Find_Files.new.dir hace justamente eso. Hice ese script hace eones y lo usaba en mis editores. Por ejemplo con un uso así:

Find_Files.new.dir("Graphics/",["png", "jpg"])

Encuentra todos los archivos png y jpg dentro de la carpeta Graphics y todas sus subcarpetas.


Y lo de los carácteres unicode este foro parece que muestra algunos como imágenes raras como ese círculo azul, pero al copiarlo y pegarlo en el editor del rpg maker se pega correctamente.
avatar
newold
Principiante
Principiante

0/3

Créditos 1267

Gracias : 133

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por Dariel Lopez el 2018-02-25, 20:09

Pues acabo de probarlo y funciona tal y como dices newold así que te felicito porque a quien le pase eso de perder su proyecto le evitarás que vuelva a empezar de cero. A mí me pasó una vez cuando recién empecé a usar el Maker, se fué la luz en casa y perdí lo que llevaba hecho, pero desde entonces hago dos respaldos cada que hago algo importante en mis proyectos.
Y aprovechando te preguntaré si puedes ayudarme con este problema que tengo en el juego que estoy creando:
http://www.mundo-maker.com/t14810-ayudacambiar-formacionvx-ace#108940
Ya intenté de varias formas usando items, armaduras y habilidades pero no funciona cuando cambio de personaje; si tengo activada la habilidad de Ryu y lo cambio por Arzak este último también puede usar la habilidad del primero.
Y aprovecho también para preguntarte esto: tú estabas trabajando en un engine para crear juegos tipo Castlevania Shympony of the Night ¿verdad? Porque se miraba bastante prometedor pero ya hace bastante tiempo que no sé nada sobre ese engine.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 716

Gracias : 43

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por newold el 2018-02-25, 20:55

el proyecto de juegos 2d lo tuve que dejar porque tenía infinidad de bugs y el personaje quedaba atascado cada dos por tres en el suelo, paredes o techo.

Para tu problema creo que con un engine sencillo lo solucionas,

en un evento en paralelo pones como condición que si es el lider y ha aprendido  habilidad que puedas usarla si se pulsa el botón , algo como esto (evento en proceso paralelo)



lo primero es el comando script con este código:
Código:
# En XP usar $game_party.actors en
# vez de $game_party.members
if $game_party.members[0].id == 1 # id del personaje en la primera posición de la party
  $game_variables[999] = 1
end

si usas XP cambia if $game_party.members[0].id == 1 por if $game_party.actors[0].id == 1

añade más condiciones como la del script, indicando la id del personaje y cambia el valor de una variable (en el ejemplo si tienes el personaje con id 1 en la primera posición de la party, la variable 500 pasa a valer 10)

Después con el comando de condiciones lo pones como en la imagen, y pon tantas condiciones como personajes/skills quieras usar
avatar
newold
Principiante
Principiante

0/3

Créditos 1267

Gracias : 133

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por Dariel Lopez el 2018-02-25, 21:46

Es una lástima que hayas abandonado el proyecto en 2d porque se miraba muy bien.
Y sobre mi problema disculpa mi ignorancia pero no entendí. Voy a dormir un poco a ver si despierto con la mente más despejada y logro comprender lo que me dices.
Gracias de nuevo.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 716

Gracias : 43

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por newold el 2018-02-25, 22:40

En resumen:
- Creas un evento y haces que se ejecute en proceso paralelo


- Ahora usas el conditional branch para crear una serie de condiciones


La primera condición que compruebe si se pulsa una tecla determinada


Dentro de esa condición otra que compruebe quién es el primer personaje en la party (el que controlas, el que va primero) (Ponla como esta imagen)


Ese comando es para ACE/VX, para XP  cambia la palabra members por actors. El número indica la id del personaje en la base de datos. En esa condición estamnos mirando si el personaje que está primero en la party es el que tiene la id 1.

Si la condición se cumple entonces dentro ponemos otra que compruebe si ese personaje tiene una determinada skill


Esa condición comprueba si el personaje con id 1 ha aprendido la skill con id 13 (trueno)

Si la ha aprendido, dentro pones que se use esa skill

Repite todos los pasos de añadir condiciones para diferentes personajes/skills

resultado:
avatar
newold
Principiante
Principiante

0/3

Créditos 1267

Gracias : 133

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por Dariel Lopez el 2018-02-26, 01:34

Muchas gracias otra vez por tu ayuda newold, acabo de probar lo que me dijiste y funcionó a la perfección con los dos primeros personajes y cuando les dé las habilidades correspondientes a los demás personajes jugables los agregaré a ver que pasa.
La primera vez que me explicaste me hice bolas por lo de las variables que mencionaste pero ya miré que entendí mal porque no hay necesidad de usar variables, además de que no sabía como usar el script call.
Muchas gracias de nuevo y cuando saque mi juego tu nombre estará inscrito en los créditos.
Ahora a seguir trabajando que aún hay mucho por hacer.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 716

Gracias : 43

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por AsFzKakarotto el 2018-03-29, 13:49

Si bien es un Backup ¿Es normal que cada .rxdata pese 0 kb?
Según el documento log están en todos en ...OK



Saludos....
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 314

Gracias : 68

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por newold el 2018-03-29, 16:16

Al parecer el método que usé para copiar los archivos no funcionaba en xp, ya he resubido el script corregido
avatar
newold
Principiante
Principiante

0/3

Créditos 1267

Gracias : 133

Volver arriba Ir abajo

Re: [XP][VX][VXACE]Backups Projects

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.