Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Export / Import de GameActor

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Export / Import de GameActor

Mensaje por Metalero el 2014-05-13, 01:35

¡El modelo de datos del Rpg Maker es una porqueria!

Listo, ya me desquité ahora si.
A pedido de LEDA, hice este pequeño script, que aun no puedo decir que esta finalizado del todo (esta bastante rustico aun el modo de uso).
El script basicamente agrega 2 funciones al maker:

1) Exportar Game_Actor.
Se llama con una llamada a script (funciona desde eventos o desde otros scripts):

Código:

ActorExporter.export_actor(ID, PATH)



Donde ID es el id del GameActor, o sea el que figura en la base de datos. Por ejemplo, Aluxes es 1, Basil es 2, etc
PATH es un string, con el path y nombre donde quieren que se guarde el archivo (con root en la carpeta donde esté el Game.exe del juego)

Ejemplo de uso

Código:

ActorExporter.export_actor(1, "actor_1.actor")



Esto va a generar un archivo llamado actor_1.actor en la carpeta root del juego.

2) Importar Game_Actor:
Bueno imaginaran que hace esto. Agrega al Game_Actor a los datos del juego.

La cuestión acá, es que así en principio, uno no tendría forma de usarlo si no se crea alguna manera de acceder al personaje importado (por eventos no se puede, por que no va aparecer en ningún lado, ya que saca la información estática de la base de datos)
La idea seria crear algún tipo de menú donde uno pudiese ver los personajes importados, y poder hacer cosas como agregarlos a la party,

Como dicho menú seguramente me lleve mas tiempo de hacer que la funcionalidad en si (que me llevo alrededor de 1 hora, y se que el menú me va a llevar mas tiempo), agregue al script la funcionalidad para que al importar un Game_Actor, este se agregue automáticamente a la party.

Se llama con una llamada a script (funciona desde eventos o desde otros scripts):

Código:

ActorExporter.import_actor(PATH)



PATH es un string, con el path y nombre de donde quieren que se cargue el archivo (con root en la carpeta donde esté el Game.exe del juego)

Ejemplo de uso

Código:

ActorExporter.import_actor("actor_1.actor")




Script: (pegar encima de main)
Código:

#==============================================================================
# ** Game_Actor Exporter
# * Autor: Juan Leiva (Metalero)
#==============================================================================
module ActorExporter
  def export_actor(actor_id, file_path)
    file = File.open(file_path, "wb")
    actor_data = $data_actors[actor_id]
    actor = $game_actors[actor_id]
    Marshal.dump([actor, actor_data], file)
    file.close
  end
  module_function :export_actor
  
  def import_actor(file_path)
    file = File.open(file_path, "rb")
    data_couple = Marshal.load(file)
    file.close

    actor = data_couple[0]
    actor_data = data_couple[1]
    
    $data_actors.push(actor_data)
    actor.id = $data_actors.size-1
    $game_actors.push(actor)
    $game_party.add_actor(actor.id)
  end
  module_function :import_actor
end

#==============================================================================
# ** Game_Actors
#------------------------------------------------------------------------------
#  This class handles the actor array. Refer to "$game_actors" for each
#  instance of this class.
#==============================================================================

class Game_Actors
  def push(actor)
    if actor.id > 999 or $data_actors[actor.id] == nil
      return nil
    end
    if @data[actor.id] == nil
      @data[actor.id] = actor
    end
  end
end


#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor < Game_Battler
  
  def id=(id)
    @actor_id = id
  end
end



Notas:

  1. Pruebenlo quienes esten interesados, como para ver si hay errores
  2. Hagan lo que quieran con el script. Como siempre, no exijo creditos, pero es agradable recibirlos
  3. Si alguien quiere hacer el dichoso menu para  interactuar con los Game_Actors importados, seria buenisimo, si nadie lo quiere hacer, cuando tenga algo mas de tiempo veo si lo puedo hacer.


Saludos.

Me olvidaba de aclarar, es para RPG Maker XP.

_________________
avatar
Metalero
Administrador
Administrador



Créditos 1709

Gracias : 100

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.