Septiembre 09, 2019, 12:17:31 AM Ultima modificación: Septiembre 11, 2019, 09:53:53 PM por Marth
Veran, tengo un SRPG en el que tengo que almacenar los datos de mis unidades.
Este es el código al guardar la partida:

global.j=file_text_open_write("aliados.pmd")
with(Esperador){
   file_text_write_real(global.j,profesion.object_index) // Rol de la unidad.

   file_text_write_real(global.j,defensa) // Afinidad elemental.
   for(global.t=0; global.t<3; global.t++){
      file_text_write_real(global.j,credef[global.t]) // Crecimiento de estadisticas de defensas.
      file_text_write_real(global.j,def[global.t]) // Defensas elementales.
   }

   file_text_write_real(global.j,nivel) // Nivel de la unidad.
   file_text_write_real(global.j,experiencia) // Experencia acumulada.
   file_text_write_string(global.j,nombre) // Nombre de la unidad.
}
file_text_close(global.j)


Y cuando cargo, uso este código:

global.j=file_text_open_read("aliados.pmd")
repeat(global.total){
   global.w=instance_create_depth(0,0,0,Esperador)
   with(global.w){
      profesion=file_text_read_real(global.j)

      defensa=file_text_read_real(global.j)
      for(global.t=0; global.t<3; global.t++){
         credef[global.t]=file_text_read_real(global.j)
         def[global.t]=file_text_read_real(global.j)
      }

      nivel=file_text_read_real(global.j)
      experiencia=file_text_read_real(global.j)
      nombre=file_text_read_string(global.j)
   }
}
file_text_close(global.j)


Gracias a esto, logro que los datos de las unidades se almacenen en un fichero.
Pero ocurre un extraño error.
Cuando guardo, las unidades se almacenan en un determinado orden. Y cuando cargo, en ese mismo orden se crean las unidades.
Pero GM les da un orden de instancia inverso al que deberian tener, lo que hace que el orden de colocación de las unidades se invierta, tal como muestro en las capturas de pantalla.

La cosa es como soluciono esto.
Se me ocurre que podria hacer que cuando se lean los ficheros, se haga del reves, para que así cuando se invierta el orden, al invertirse 2 veces, se quede en el orden correcto.

A lo mejor sea una idea tonta pero prueba a cargar los datos alreves, empieza por nombre y termina por profesion.

Ya lo he resuelto.
He usado este código:

repeat(global.total) // Empezamos creando las unidades.
   global.w=instance_create_depth(0,0,0,Esperador)

global.j=file_text_open_read("aliados.pmd")
with(Esperador){ // Y ahora les damos sus valores.
   profesion=file_text_read_real(global.j)
   global.azul=file_text_read_real(global.j)
   if(global.azul==255)
      global.activos++ // Los objetos empiezan ya en c_white.
   else
      image_blend=c_gray // Al fin y al cabo, el blend solo puede ser blanco o gris.

   defensa=file_text_read_real(global.j)
   for(global.t=0; global.t<3; global.t++){
      credef[global.t]=file_text_read_real(global.j)
      def[global.t]=file_text_read_real(global.j)
   }

   nivel=file_text_read_real(global.j)
   experiencia=file_text_read_real(global.j)
   nombre=string_delete(file_text_read_string(global.j),1,1) // Un bug añade un espacio al inicio de la cadena. Esto lo deberia solucionar.
   PS=heroe*nivel // La resistencia de los barcos se recuperan con una sencilla formula. El objeto Seguir les dara los ps totales.
   req()
}
file_text_close(global.j)


Primero se crean los objetos, que tendran su orden invertido.
Y luego se introducen los datos a cada objeto, estando ya colocados en un orden determinado.
Esto hace que los objetos esten en el orden correcto.