Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4133 miembros registrados.
El último usuario registrado es Neysersitoh.

Nuestros miembros han publicado un total de 84767 mensajes en 12064 argumentos.

Script de encriptación de audio/Gráficos [XP][VX][ACE]

Ver el tema anterior Ver el tema siguiente Ir abajo

Script de encriptación de audio/Gráficos [XP][VX][ACE]

Mensaje por newold el 2016-08-18, 21:21

Os dejo este script que estoy creando para encriptar el audio y gráficos de vuestro proyecto. Solo copiar arriba de todos los scripts y leer las instrucciones al principio del script. Una vez que se encripta un proyecto, las imágenes y audio son borrados de sus respectivas carpetas, se os crea un backup con todos esos archivos para que no los perdáis, y en la carpeta de vuestro proyecto se habrá creado una carpeta llamada Files y dentro tendrá dos archivos, uno que contiene todo el audio de vuestro juego y el otro todos los gráficos. Esta versión no encripta los archivos de audio y gráficos del rtp si no los habéis copiado a la carpeta de vuestro juego. Para evitar lags innecesarios a causa de este script, es conveniente que vuestro juego cachee bien las imágenes.

Sin más, aquí os dejo el script

VERSIÓN UPDATE (04.09.2016 - 00:32:06)

Código:
=begin
  * Script de encriptación de Audio y Video (RPG MAKER XP, VX, ACE compatible)
  * Uso no comercial. Para uso comercial contactar conmigo (el autor)
  * Autor: newold  Contacto: todobasura31@hotmail.es
  * Versión: 1.0.2
  
  changelog...
  
  - Versión 1.0.0 -> Lanzamiento del script, estable y funcionando
  - Versión 1.0.2 -> Ahora en la carpeta Backup que se crea existe un archivo
                     llamado Restore.bat. Si ejecutas ese archivo estando la
                     carpeta backups en el proyecto deseado, restaurará los
                     audios y gráficos del juego y eliminará la encriptación
  - Versión 1.0.3 -> Interfaz que muestra el proceso de encriptado añadido
                     Se puede desactivar en el apartado de configuración
=end




# ******************************************************************************
#                           CONFIGURACIÓN
# ******************************************************************************

# ··············································································
=begin
  Poner esta variable a true para crear un archivo de encriptación nuevo para
  audio y gráficos (en false si ya has creado los archivos de encriptación
  y vas a añadir nuevos)
=end

$clean_encrypt = true
# ··············································································

# ··············································································
=begin
  Poner esta variable a true para que se muestre texto descriptivo mientras se
  encriptan los datos. Dejar en false para no mostrar nada mientras se encriptan
  los datos.
=end

show_gui = true
# ··············································································

# ··············································································
=begin
  Añade un nuevo nivel de encriptación usando Zlib si pones esta variable en
  true (false para encriptación por defecto)
  (OJO: si encriptas con esta variable en true, déjala siempre en true)
  Nota: Encriptar con esta variable en true puede extender los tiempos de carga
=end

$encryption_level2 = true
# ··············································································

# ··············································································
# Para encriptar el audio poner en true (false para no encriptar)

encrypt_audio = false
# ··············································································

# ··············································································
# Para encriptar los gráficos poner en true (false para no encriptar)

encrypt_images = false
# ··············································································

# ··············································································
=begin
                       ¡¡¡¡¡ CUIDADO !!!!!
  Poner esta variable a true para que borre todas las imágenes y audio de
  tu juego y las meta en una carpeta de backups en la misma carpeta
  donde esté el juego (false para que no haga nada).
  El backup se realizará solo si se ha especificado la variable encrypt_audio
  o la variable encrypt_images como true. Si ambas son false no hace nada.
=end

delete_and_copy_resources_backup_folder = true
# ··············································································


# ··············································································
=begin
  Para un juego terminado que quieras encriptar sigue estos pasos:
  [OPCIONAL]  Haz una copia del proyecto que quieras encriptar
  [REQUERIDO] Copia este script encima de todos los scripts del proyecto a
              encriptar
  [REQUERIDO] En el apartado de configuración del script:
              * Pon la variable encrypt_audio en true para encriptar todo el
              audio de tu juego ubicado en la carpeta Audio
              * Pon la variable encrypt_images en true para encriptar todas las
              imágenes de tu juego ubicadas en la carpeta Graphics
              * Pon la variable $encryption_level2 en true para una encriptación
              más fuerte y en false para una encriptación más debil.
  [REQUERIDO] Ejecuta el juego una vez y espera a que éste se cierre
              automáticamente (puedes activar la interfaz para ver que está
              haciendo el script poniendo en true la variable show_gui)
  [REQUERIDO] En el apartado de configuración del script:
              * Pon en false la variable encrypt_audio
              * Pon en false la variable encrypt_images
              * Guarda y cierra el proyecto
  [OPCIONAL]  La carpeta backups que se te crea en la carpeta del proyecto
              contiene todos tus audios y gráficos sin encriptar. Además,
              dentro de esa carpeta habrá un archivo llamado Restore.bat que,
              si lo ejecutas estando la carpeta backup en el proyecto que lo
              creó, restaurará todos los audios y gráficos y eliminará la
              encriptación del proyecto.
  [REQUERIDO] Elimina la carpeta backup del proyecto cuando lo vayas a distribuir.
  [OPCIONAL]  Puedes borrar la carpeta Graphics y la de Audio junto con todas
              sus subcarpetas.
  
  En tu proyecto ahora habrá una carpeta llamada Files y dentro tendrás dos
  archivos (uno de audio y otro de gráficos) que contiene todos los audios y
  gráficos "encriptados"
  
  Versión Actual: 1.0.2 (04-09-2016)
  Próximas versiones:
  - Ventanas de confirmación para realizar encriptado.
  - Encriptación de scripts.
  - Auto-instalación.
=end
# ··············································································




# ******************************************************************************
#                         FIN CONFIGURACIÓN
# ******************************************************************************



#==============================================================================
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,erase_ext=false,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,erase_ext,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
      if FileTest.file?(path)
        if erase_ext
          path.gsub!(File.extname(path),"")
        end
        data.push(path)
      end
      i += 1
      if i == 1000
        Graphics.update; i = 0
      end
    end
    return data
  end
  #--------------------------------------------------------------------------
  
end
#==============================================================================


#==============================================================================
module ED # Encrypt / Decrypt
  #----------------------------------------------------------------------------
  @files = []
  unless FileTest.directory?("Files")
    Dir.mkdir("Files")
  end
  temp_files = Find_Files.new.dir("Files/")
  temp_files.each {|path| @files << path if path.match(/tmp\d+/)}
  @opened_files = {
    :Audio => nil,
    :Graphics => nil
  }
  SetFileAttributes = Win32API.new("Kernel32", "SetFileAttributes", "pi", "i")
  #----------------------------------------------------------------------------
  def ED.encrypt(dir,data_type=nil)
    case data_type
    when "Audio"
      path = "Files/Audio"
      path2 = "Audio_data"
    when "Graphics"
      path = "Files/Graphics"
      path2 = "Graphics_data"
    else
      return false
    end
    files = Find_Files.new.dir(dir)
    data = ""
    data2 = {}
    files.each {|file|
      f =  File.open(file,"rb")
      c = f.readlines.join('')
      name = Zlib::Deflate.deflate(file.gsub(File.extname(file),"").downcase)
      s1 = Zlib::Deflate.deflate(data.size.to_s)
      s2 = Zlib::Deflate.deflate(c.size.to_s)
      h = "||<<" + name + " - " + s1 + " - " + s2 + ">>||"
      s3 = h.size
      f.close
      data << h + c
      data2[name] = [s1,s2,s3,File.extname(file)]
      unless $gui.nil?
        $gui.refresh("Encriptando...", File.basename(file) + " (#{data_type})")
      end
    }
    file = File.open(path,"wb")
    if $encryption_level2
      file.puts Zlib::Deflate.deflate(data)
    else
      file.puts data
    end
    file.close
    if not $clean_encrypt and FileTest.exist?("Data/#{path2}.rvdata2")
      file = File.open("Data/#{path2}.rvdata2","rb")
      data3 = Marshal.load(file)
      data2.merge(data3)
    end
    file = File.open("Data/#{path2}.rvdata2","wb")
    Marshal.dump(data2,file)
    file.close
  end
  #----------------------------------------------------------------------------
  def ED.decrypt(path,data_type=nil,file_encrypt=nil)
    
    ED.update
    ED.check_opened_files_setted
    path_name = Zlib::Deflate.deflate(path.downcase)
    
    case data_type
    when "Audio"
      return false unless FileTest.exist?("Files/Audio")
      file = File.open("Files/Audio","rb")
      data = @opened_files[:Audio]
    when "Graphics"
      return false unless FileTest.exist?("Files/Graphics")
      file = File.open("Files/Graphics","rb")
      data = @opened_files[:Graphics]
    else
      return false
    end

    if $encryption_level2
      c = Zlib::Inflate.inflate(file.readlines.join(''))
    else
      c = file.readlines.join('')
    end
    file.close
    
    if data.nil? or data[path_name].nil?
      path_escape = Regexp.escape(path.downcase)
      c.match  (/(\|\|<<#{path_escape} - (\.+) - (\.+)>>\|\|)/)
      return false if $1.nil? or $2.nil? or $3.nil?
      s1 = Zlib::Inflate.inflate($2).to_i
      s2 = Zlib::Inflate.inflate($3).to_i
      ip = s1 + $1.size
      fp = s2
    else
      if file_encrypt.nil?
        ip = Zlib::Inflate.inflate(data[path_name][0]).to_i + data[path_name][2]
        fp = Zlib::Inflate.inflate(data[path_name][1]).to_i
      else
        ip = Zlib::Inflate.inflate(file_encrypt[0]).to_i + file_encrypt[2]
        fp = Zlib::Inflate.inflate(file_encrypt[1]).to_i
      end
    end

    file = c[ip,fp]
    id = ED.get_new_id
    id = ED.get_new_id while FileTest.exist?("Files/tmp#{id}")
    tmp_file_path = "Files/tmp#{id}"
    tmp_file = File.open(tmp_file_path,"wb")
    tmp_file.puts file
    tmp_file.close

    # Hidden (file attrib) 0x2(hidden)|0x100(temporally)|0x2000(not index)
    SetFileAttributes.call("Files/tmp#{id}",0x100|0x2000|0x2)
    @files << tmp_file_path
    
    return tmp_file_path
  end
  #----------------------------------------------------------------------------
  def ED.check_opened_files_setted
    if FileTest.exist?("Data/Audio_data.rvdata2") and
       @opened_files[:Audio].nil?
      file = File.open("Data/Audio_data.rvdata2","rb")
      data = Marshal.load(file)
      file.close
      @opened_files[:Audio] = data
    end
    if FileTest.exist?("Data/Graphics_data.rvdata2") and
       @opened_files[:Graphics].nil?
      file = File.open("Data/Graphics_data.rvdata2","rb")
      data = Marshal.load(file)
      file.close
      @opened_files[:Graphics] = data
    end
  end
  #----------------------------------------------------------------------------
  def ED.update
    @files.each{|path|
      begin
        File.delete(path)
        @files.delete(path)
      rescue
      end
    }
  end
  #----------------------------------------------------------------------------
  def ED.get_new_id
    t = ""
    12.times {t << rand(10).to_s}
    return t
  end
  #----------------------------------------------------------------------------
  def ED.file_encrypted?(path,data_type=nil)
    ED.check_opened_files_setted
    case data_type
    when "Audio"
      return false if @opened_files[:Audio].nil?
      data = @opened_files[:Audio]
    when "Graphics"
      return false if @opened_files[:Graphics].nil?
      data = @opened_files[:Graphics]
    end
    return false if data.nil?
    path_name = Zlib::Deflate.deflate(path.downcase)
    return data[path_name]
  end
  #----------------------------------------------------------------------------
  def ED.clear
    @opened_files[:Audio].clear
    @opened_files[:Graphics].clear
  end
  #----------------------------------------------------------------------------
  def ED.set_restore_file(backup_directory)
    f = File.open("Game.ini","rb")
    config = f.readlines
    f.close
    title = "Title="
    for i in 0...config.size
      if config[i].match(/Title=(.*)/)
        title += $1
        break
      end
    end
    
    new_line = "\r\n"
    sep = "echo ..................................................." + new_line
    double_line = "@echo:" + new_line + "@echo:" + new_line
    dir1 = "..\\Files"
    dir2 = "..\\Data\\Audio_data.rvdata2"
    dir3 = "..\\Data\\Graphics_data.rvdata2"
    # file content
    f = File.open(backup_directory + "/Restore.bat","wb")
    f.puts "@echo off" + new_line
    f.puts "SET str=#{title}" + new_line
    f.puts "IF EXIST ..\\Game.ini (" + new_line
    f.puts "FOR /F \"tokens=*\" %%A IN (..\\Game.ini) DO (" + new_line
    f.puts "if \"%%A\" == \"%str%\" GOTO FILE_FOUNDED" + new_line
    f.puts ")" + new_line
    f.puts ")" + new_line
    f.puts "GOTO FILE_NO_FOUNDED" + new_line
    f.puts ":FILE_FOUNDED" + new_line
    f.puts sep
    f.puts "echo Restaurando archivos..." + new_line
    f.puts sep + double_line
    f.puts "XCOPY /E /C /R /I /Q /K /Y * ..\\" + new_line
    f.puts "echo archivos restaurados..." + new_line
    f.puts double_line + sep
    f.puts "echo Borrando archivos encriptados..." + new_line
    f.puts sep + double_line
    f.puts "IF EXIST #{dir1} ( del /F /Q /S #{dir1} )" + new_line
    f.puts "IF EXIST #{dir2} ( del /F /Q /S #{dir2} )" + new_line
    f.puts "IF EXIST #{dir3} ( del /F /Q /S #{dir3} )" + new_line
    f.puts "echo \"archivos de encriptado borrados...\"" + new_line
    f.puts double_line
    f.puts "msg * Archivos restaurados y encriptado eliminado" + new_line
    f.puts "pause" + new_line
    f.puts "GOTO END" + new_line
    f.puts ":FILE_NO_FOUNDED" + new_line
    f.puts "msg * Proyecto equivocado" + new_line
    f.puts "pause" + new_line
    f.puts ":END" + new_line
    # end file content
    f.close
  end
  #----------------------------------------------------------------------------
end
#==============================================================================

#==============================================================================
module Graphics
  #----------------------------------------------------------------------------
  class << self
    # ·········································································
    alias update_after_ED update unless defined?(update_after_ED) or $@
    # ·········································································
    def update
      ED.update
      update_after_ED
    end
    # ·········································································
    alias transition_after_ED transition unless defined?(transition_after_ED) or $@
    # ·········································································
    def transition(*args)
      if args[1].to_s.size > 0
        file = args[1].to_s.gsub(File.extname(args[1]),"")
        file_encrypt = ED.file_encrypted?(file,"Graphics")
        if file_encrypt
          file = ED.decrypt(file,"Graphics",file_encrypt)
          args[1] = file if file
        end
      end
      transition_after_ED(*args)
    end
    # ·········································································
  end
  #----------------------------------------------------------------------------
end
#==============================================================================

#==============================================================================
module Audio
  #----------------------------------------------------------------------------
  class << self
    # ·········································································
    alias se_play_after_ED se_play unless defined?(se_play_after_ED) or $@
    # ·········································································
    def se_play(*args)
      args[0] = get_real_file(args[0])
      se_play_after_ED(*args)
    end
    # ·········································································
    alias bgm_play_after_ED bgm_play unless defined?(bgm_play_after_ED) or $@
    # ·········································································
    def bgm_play(*args)
      args[0] = get_real_file(args[0])
      bgm_play_after_ED(*args)
    end
    # ·········································································
    alias bgs_play_after_ED bgs_play unless defined?(bgs_play_after_ED) or $@
    # ·········································································
    def bgs_play(*args)
      args[0] = get_real_file(args[0])
      bgs_play_after_ED(*args)
    end
    # ·········································································
    alias me_play_after_ED me_play unless defined?(me_play_after_ED) or $@
    # ·········································································
    def me_play(*args)
      args[0] = get_real_file(args[0])
      me_play_after_ED(*args)
    end
    # ·········································································
    def get_real_file(file)
      file2 = file.to_s.gsub(File.extname(file),"")
      file_encrypt = ED.file_encrypted?(file2,"Audio")
      if file_encrypt
        file2 = ED.decrypt(file,"Audio",file_encrypt)
        return file2 ? file2 : file
      end
      return file
    end
    # ·········································································
  end
  #----------------------------------------------------------------------------
end
#==============================================================================

#==============================================================================
class Bitmap
  #----------------------------------------------------------------------------
  alias initialize_mod_ED initialize unless defined?(initialize_mod_ED) or $@
  #----------------------------------------------------------------------------
  def initialize(*args)
    if args.size == 1
      file = args[0].to_s.gsub(File.extname(args[0]),"")
      file_encrypt = ED.file_encrypted?(file,"Graphics")
      if file_encrypt
        file = ED.decrypt(file,"Graphics",file_encrypt)
        args[0] = file if file
      end
    end
    begin
      initialize_mod_ED(*args)
    rescue
      file = args[0].to_s.gsub(File.extname(args[0]),"").downcase
      file_encrypt = ED.file_encrypted?(file,"Graphics")
      file = ED.decrypt(file,"Graphics",file_encrypt)
      begin
        initialize_mod_ED(*args)
      rescue
        initialize_mod_ED(1,1)
      end
    end
  end
  #----------------------------------------------------------------------------
end
#==============================================================================

#==============================================================================
class Array
  unless defined?(take)
    def take(n)
      arr = []
      for i in 0...n
        arr << self[i]
      end
      return arr
    end
  end
end
#==============================================================================

#==============================================================================
class Gui_ED
  #----------------------------------------------------------------------------
  def initialize
    @title_color = Color.new(255,20,20)
    @data_color = Color.new(225,225,225)
    @x = 30
    @y = 30
    @w = screen_size[0] - @x * 2
    @h = screen_size[1] - @y * 2
    @need_clear = false
    draw
  end
  #----------------------------------------------------------------------------
  def draw
    r = screen_size
    @sprite = Sprite.new
    @sprite.bitmap = Bitmap.new(r[0],r[1])
    @sprite.bitmap.font.name = ["Verdana","Arial"]
    @sprite.bitmap.font.size = 20
    @sprite.bitmap.fill_rect(0,0,r[0],r[1],Color.new(255,255,255))
    @sprite.bitmap.fill_rect(8,8,r[0]-16,r[1]-16,Color.new(0,0,0,0))
  end
  #----------------------------------------------------------------------------
  def screen_size
    if defined?(Graphics.width)
      r = [Graphics.width, Graphics.height]
    else
      r = [640, 480]
    end
    return r
  end
  #----------------------------------------------------------------------------
  def refresh(title,data)
    if @need_clear
      @y = 30
      @need_clear = false
      @sprite.bitmap.fill_rect(@x,@y,@w,@h,Color.new(0,0,0,0))
    end
    size = @sprite.bitmap.text_size(title)
    @sprite.bitmap.font.color = @title_color
    @sprite.bitmap.draw_text(@x,@y,@w,size.height,title)
    @sprite.bitmap.font.color = @data_color
    @sprite.bitmap.draw_text(@x+size.width+5,@y,@w-size.width-5,size.height,data)
    @y += size.height
    if @y >= @h
      @need_clear = true
    end
    Graphics.update
  end
  #----------------------------------------------------------------------------
  def dispose
    @sprite.bitmap.dispose
    @sprite.dispose
  end
  #----------------------------------------------------------------------------
end
#==============================================================================

#==============================================================================
# Process encription if encrypt_audio or encrypt_images setted
#==============================================================================
if (encrypt_audio or encrypt_images) and show_gui
  $gui = Gui_ED.new
  $gui.refresh(" ","        ....  Empezando encriptación de archivos  ...")
end

ED.encrypt("Audio/","Audio") if encrypt_audio
ED.encrypt("Graphics/","Graphics") if encrypt_images

if delete_and_copy_resources_backup_folder and (encrypt_audio or encrypt_images)
  backupFolder = "Backup_" + Time.now.strftime("%d-%m-%Y_%H-%M-%12N")
  while FileTest.directory?(backupFolder)
    backupFolder = "Backup_" + Time.now.strftime("%d-%m-%Y_%H-%M-%12N")
  end
  Dir.mkdir(backupFolder)
  if FileTest.exist?("Data/Audio_data.rvdata2") and encrypt_audio
    dir = "Audio/"
    files = Find_Files.new.dir(dir)
    files.each {|file|
      arr = file.split("/")
      for i in 0...arr.size - 1
        directory = backupFolder + "/" + arr.take(i+1).join("/")
        unless FileTest.directory?(directory)
          Dir.mkdir(directory)
        end
      end
      from = arr.join("/")
      to = backupFolder + "/" + from
      File.rename(from, to)
    }
  end
  if FileTest.exist?("Data/Graphics_data.rvdata2") and encrypt_images
    dir = "Graphics/"
    files = Find_Files.new.dir(dir)
    files.each {|file|
      arr = file.split("/")
      for i in 0...arr.size - 1
        directory = backupFolder + "/" + arr.take(i+1).join("/")
        unless FileTest.directory?(directory)
          Dir.mkdir(directory)
        end
      end
      from = arr.join("/")
      to = backupFolder + "/" + from
      File.rename(from, to)
    }
  end
  ED.set_restore_file(backupFolder)
end

$clean_encrypt = nil

unless $gui.nil?
  $gui.refresh(" "," ")
  $gui.refresh(" ","        ....  Encriptado terminado  ....")
  $gui.refresh(" ","        ....  Pulsa intro para salir  ....")
  while true
    Input.update
    Graphics.update
    if Input.press?(Input::C) || Input.press?(Input::B)
      break
    end
  end
  $gui.dispose
  $gui = nil
end

# exit if encrypt_audio or encrypt_images setted
exit if (encrypt_audio or encrypt_images)
#==============================================================================

Es compatible con los 3 rpg makers (XP, VX y ACE). Probarlos y me comentáis que tal funciona, si os va lento, rápido, si veis algún bug, etc. Y si se os ocurre alguna forma de mejorarlo decirlo también y no os calléis ^^


Última edición por newold el 2016-09-30, 10:13, editado 12 veces
avatar
newold
Principiante
Principiante

0/3

Créditos 1096

Gracias : 71

Volver arriba Ir abajo

Re: Script de encriptación de audio/Gráficos [XP][VX][ACE]

Mensaje por Ledai el 2016-08-18, 22:25

Una pregunta ¿El que los archivos gráficos o de audio se encripten en una carpeta nueva interferirían de algún modo con los Script externos al maker que usan alguno de esos gráficos o audios y que requieren un directorio especifico?
Puesto que entiendo que al "mover" los archivos encriptados a una carpeta nueva se perdería su ruta y darían erro, a no sé que se sustituyan los archivos originales por los encriptados una vez hecho el proceso. No sé si me explico XD
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 2354

Gracias : 170

Volver arriba Ir abajo

Re: Script de encriptación de audio/Gráficos [XP][VX][ACE]

Mensaje por Miky Joe el 2016-08-19, 02:46

Si por ejemplo yo uso el Ace, y lo que me paso al encriptar una demo, es que utilice el script de Overlay parallax, y como tienes que hacer una carpeta nueva, al momento de comprimir los mapas o mejor dicho, las imágenes de esa carpeta no se veían, salia el puro personaje en la pantalla... Como dice leda, puede que solo encripte las carpetas por defecto, o habra que intergar una línea editable y poner el nombre de la carpeta.

De todos modos un muy buén aporte.

Saludos.
avatar
Miky Joe
Veterano
Veterano

0/3

Créditos 1039

Gracias : 63

Volver arriba Ir abajo

Re: Script de encriptación de audio/Gráficos [XP][VX][ACE]

Mensaje por newold el 2016-08-19, 09:13

El script encripta todo el contenido de la carpeta Audio y de la carpeta Graphics. Cuando se va a cargar una imagen que estaba por ejemplo en "Graphics/Pictures/foto1.jpg" el script lo detecta y cambia la ruta por la correcta. Esto debería funcionar para todos los scripts que use recursos dentro de esas dos carpetas (da igual que estén dentro de las carpetas default o de otras creadas, siempre y cuando se encuentren dentro de Graphics o Audio). Es más, una vez encriptado todo, la carpeta Graphics y la de Audio pueden ser borradas junto con todas sus subcarpetas (y dejar solo la carpeta Files que es donde se encuentran ahora los archivos empaquetados en dos únicos archivos)

Si tienes imágenes o audio fuera de las carpetas Audio o Graphics esas no las encripta el script y se cargan sin problema siempre que no las hayas borrado. Para que también sean encriptadas habría que añadir unas cuantas líneas al script para que detecte, encripte y desencripte las nuevas rutas

En el caso del script de overlay que dices, no se que script es, y habría que verlo para ver en que no es compatible (Siempre que no sobreescriba el método initialize de los Bitmaps y utilice recursos que estén dentro de la carpeta Graphics o Audio debería funcionar en principio)

PD: He resubido el script con un par de fallos corregidos que había encontrado.

PD2: Aún no está implementado pero en la carpeta de backup que se crea pienso crear un archivo que restaure todo el audio y vídeo a sus respectivas carpetas y borre los archivos de encriptación.
avatar
newold
Principiante
Principiante

0/3

Créditos 1096

Gracias : 71

Volver arriba Ir abajo

Re: Script de encriptación de audio/Gráficos [XP][VX][ACE]

Mensaje por orochii el 2016-08-29, 04:18

Hey Newold. Esto no usa nada del PhysFS, ¿cierto? Es que es una biblioteca de C++ (y probablemente otras cosas xD) que sirve para dar acceso abstracto a archivos, que permite por ejemplo que un juego cargue archivos de un ZIP, de un WAD (formato de Doom), o de un PAK por ejemplo (formato de Quake1 y 2).

Más que todo ahora viendo tu script, aparte de preguntarme cómo diantres funciona xD, me puse a pensar en que sería interesante hacer eso, implementar el PhysFS en el maker xD. Peeeeero yo ser muy vago para hacer cosas de encriptación xD.

Ahora lo pruebo porque soy curioso, y dependiendo podría pensar en usarlo en alguna que otra cosa (excepto Dreki porque explota con volverlo a ver "orz).

Salut!

EDIT: Está interesante, al parecer lo que hace es descomprimir el archivo temporalmente al ser leído del archivo encriptado, luego lo pasa al maker, y por último borra los rastros. Alguna vez ví un sistema parecido, pero como los archivos se descomprimían temporalmente la gente igual se sentía incómoda por eso, puesto que mientras el juego estaba en ejecución el archivo quedaba y era posible sacarlo xD. En este ayuda el oscurecimiento por el nombre de archivo (temp######), y que no dura ni un segundo en el disco XD! (tenía la carpeta abierta, el maker puesto para no estorbar y darle play, y nada, sólo logré ver un archivo desaparecer en una ocasión xD). Eso sí, con algo de paciencia supongo que se podría pausar el maker cambiando de ventana y extrar el recurso, sin saber qué se está tomando xD!.

Si hubiera forma de inyectar código en el momento donde el maker hace la carga la imagen, podría evitarse el tener que escribir el archivo al disco (total el código de Zlib ya genera un archivo en memoria, la cuestión es tirárselo al "maker"). O quiza la solución es leer el archivo desde otro medio, y mandar los datos como estructura de Bitmap, por ejemplo, como hace la gente con los DLLs.

¡En fin! Ta guay :^3
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6388

Gracias : 332

Volver arriba Ir abajo

Re: Script de encriptación de audio/Gráficos [XP][VX][ACE]

Mensaje por newold el 2016-09-03, 22:30

Ya mi nivel no llega para hacer algo así. Era lo que quería hacer en un principio, cargar los datos directamente leyendo el archivo empacado sin generar ningún archivo, que queda feo y además ralentiza la carga. Pero no he encontrado una forma de hacer eso en el maker, ya que para cargar un audio o un gráfico a los constructores se les pasa la ruta al archivo y no un archivo cargado en memoria. (También la idea del script era de ser un simple script que no dependiera de ninguna dll externa y algo simple que si no sabes nada de ruby no te va a dejar conseguir todos los recursos de una forma sencilla)

El script lee el archivo que necesita cargar del archivo empacado (el de audio o el de graficos), lo extrae de forma temporal (con atributo hidden), le pasa la ruta al constructor (Bitmap o Audio) y borra el archivo justo después de ser cargado y cuando el maker ya no lo usa. El archivo temporal lo crea en la carpeta Files, pero podría modificarse el script para que lo guardase en cualquier otra carpeta.

Yo supongo que cuando el maker recibe el comando para cargar audio o graficos, lo que hace es abrir el archivo que le pasas por ruta con File.open, mi script ya usa ese comando para leer el archivo antes de extraerlo y si hubiera una forma de pasarle eso a Bitmap o Audio en vez de la ruta los cargaría del tirón sin tener que leer los archivos temporales del disco, con el incremento de velocidad que eso conlleva.

Mirare eso del PhysFS que no tenía ni idea de eso, a ver si hay alguna forma de implementarlo, aunque yo de c++ voy justísimo xd.

Aprobecho y subo una nueva versión del script con algunos añadidos (primer post editado con el nuevo script).
avatar
newold
Principiante
Principiante

0/3

Créditos 1096

Gracias : 71

Volver arriba Ir abajo

Re: Script de encriptación de audio/Gráficos [XP][VX][ACE]

Mensaje por akito_squall el 2016-09-04, 00:20

Newold siempre con scripts que me dejan con la boca abierta.. A mi opinión uno de los mejores scripters de RGSS e.e
Ya con el triple triad que uso, y el sistema de herrería estaba fascinado, pero cada vez sacas cosas mejores xD
De seguro lo use cuando termine mi proyecto (dios quiera que algún día)
Saludos!
avatar
akito_squall
Soñador
Soñador

0/3

Créditos 103

Gracias : 11

Volver arriba Ir abajo

Re: Script de encriptación de audio/Gráficos [XP][VX][ACE]

Mensaje por Eden_ el 2016-09-30, 07:44

Muy buen script, probaré en mi proyecto a ver cómo afecta en la velocidad de carga de imágenes. En principio si un juega está mal optimizado respecto la carga de archivos externos (cargas múltiples e innecesarias de imágenes) ya  se nota en la jugabilidad... Aunque la potencia de los ordenadores actuales lo enmascara en cierto modo. En mi caso, estuve optimizando al máximo el sistema de carga de imágenes (ya que la GUI del sistema de batalla que utilizo  carga bastantes imágenes externas) para reducir al máximo el tiempo evitando cargas innecesarias, así que en principio podré comparar un poco el rendimiento encriptando  los archivos o no. Al fin y al cabo, es necesario encriptar los archivos de algún modo, así que una ligera bajada de rendimiento es asumible.

Muchas gracias por la aportación!
avatar
Eden_
Iniciado
Iniciado

0/3

Créditos 6

Gracias : 2

Volver arriba Ir abajo

Re: Script de encriptación de audio/Gráficos [XP][VX][ACE]

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.