Registrarse

[RPG - Scripting] Listar eventos

Pableroski

Novato - Rpg en desarrollo
Buenas.

¿Habría alguna forma de listar todos los eventos existentes en un mapa? Y posteriormente guardar la información en un fichero.
Gracias
 

Manurocker95

Doctorando en Ingeniería Biomédica & Game Dev
Miembro insignia
Buenas.

¿Habría alguna forma de listar todos los eventos existentes en un mapa? Y posteriormente guardar la información en un fichero.
Gracias
“Guardar la información” te refieres al id, a los comandos…? El array de Game_Map tiene todos los eventos. Solo tendrias que recorrerlo y guardar en el fichero lo que necesitaras.
 

Pableroski

Novato - Rpg en desarrollo
“Guardar la información” te refieres al id, a los comandos…? El array de Game_Map tiene todos los eventos. Solo tendrias que recorrerlo y guardar en el fichero lo que necesitaras.
Mas que nada me refería al id de los eventos, sí. Probaré lo del Game_Map, gracias
 

Pableroski

Novato - Rpg en desarrollo
Código:
def listar_evento_mapa(mapa)

  ancho=$game_map.width
  alto=$game_map.height
  lista=0
  iteracion=0
  lista_eventos=[]

  
  x=1
  evento=1
  while x<=ancho*alto
      if $game_map.events[x]!=nil
        lista_eventos[evento]=$game_map.events[x].id
        print(lista_eventos[evento])
        evento+=1
      end
  x+=1
  end
end
Buenas otra vez. Al final logré acceder a lo que me decías. Ahora me encuentro con otro problema que será una tontería pero no acabo de solucionar. $game_map accede al mapa actual, pero habría alguna forma de acceder a otro mapa? Viendo que con $game_map.events devolvía todos las direcciones de memoria de los eventos de ese mapa, y que con $game_map.events[x] devolvía la dirección del evento "x" de ese mapa, intenté replicarlo. Pero $game_map solo devuelve la de ese mapa concreto y entonces $game_map[x] obviamente da error.
 

Manurocker95

Doctorando en Ingeniería Biomédica & Game Dev
Miembro insignia
Código:
def listar_evento_mapa(mapa)

  ancho=$game_map.width
  alto=$game_map.height
  lista=0
  iteracion=0
  lista_eventos=[]

 
  x=1
  evento=1
  while x<=ancho*alto
      if $game_map.events[x]!=nil
        lista_eventos[evento]=$game_map.events[x].id
        print(lista_eventos[evento])
        evento+=1
      end
  x+=1
  end
end
Buenas otra vez. Al final logré acceder a lo que me decías. Ahora me encuentro con otro problema que será una tontería pero no acabo de solucionar. $game_map accede al mapa actual, pero habría alguna forma de acceder a otro mapa? Viendo que con $game_map.events devolvía todos las direcciones de memoria de los eventos de ese mapa, y que con $game_map.events[x] devolvía la dirección del evento "x" de ese mapa, intenté replicarlo. Pero $game_map solo devuelve la de ese mapa concreto y entonces $game_map[x] obviamente da error.
Podías haber hecho simplemente un Marshal.dump pero no sé por qué recorres de 1 a N pudiendo simplemente recorrer los eventos

Código:
for event in $game_map.events.values
   # Do stuff
end
Respecto a mirar otro mapa, hay una factory de mapas que puedes utilizar

Código:
if $MapFactory
   for i in $MapFactory.maps
      #do your stuff here
   end
end
 

Pableroski

Novato - Rpg en desarrollo
Podías haber hecho simplemente un Marshal.dump pero no sé por qué recorres de 1 a N pudiendo simplemente recorrer los eventos
Estaba haciendo pruebas con el ancho y el largo de los mapas para otra cosa y lo aproveché. No puede haber más eventos que posiciones de mapa. Al menos en la capa de eventos.

Respecto a mirar otro mapa, hay una factory de mapas que puedes utilizar
Si quiero acceder, por ejemplo, al mapa 116, cómo sería? He visto que $MapFactory.maps solo tiene una dirección que es la de mi mapa actual.
 

Manurocker95

Doctorando en Ingeniería Biomédica & Game Dev
Miembro insignia
Estaba haciendo pruebas con el ancho y el largo de los mapas para otra cosa y lo aproveché. No puede haber más eventos que posiciones de mapa. Al menos en la capa de eventos.
Pero recorriendo los eventos recorres hasta el numero que haya independientemente del tamaño del mapa.

Si quiero acceder, por ejemplo, al mapa 116, cómo sería? He visto que $MapFactory.maps solo tiene una dirección que es la de mi mapa actual.
No entiendo lo de "solo tiene una dirección". La factoría tiene el array de todos los mapas que se hayan compilado. No tienen por qué ir en orden, asi que solo tienes que comprobar si el map id es 116 y fuera:

Código:
if $MapFactory
   for i in $MapFactory.maps
      if i.map_id == 116
          #do your stuff here
        break
      end
   end
end
 

Pableroski

Novato - Rpg en desarrollo
Pero recorriendo los eventos recorres hasta el numero que haya independientemente del tamaño del mapa.



No entiendo lo de "solo tiene una dirección". La factoría tiene el array de todos los mapas que se hayan compilado. No tienen por qué ir en orden, asi que solo tienes que comprobar si el map id es 116 y fuera:

Código:
if $MapFactory
   for i in $MapFactory.maps
      if i.map_id == 116
          #do your stuff here
        break
      end
   end
end
Pero ahí solo entraría en el if si el mapa en el que estuviera el jugador fuera el 116. Si quiero mirar el número de eventos del mapa 116 estando en el 114, por decir uno, no entra en el if. Al final estamos en las mismas
 

Manurocker95

Doctorando en Ingeniería Biomédica & Game Dev
Miembro insignia
Pero ahí solo entraría en el if si el mapa en el que estuviera el jugador fuera el 116. Si quiero mirar el número de eventos del mapa 116 estando en el 114, por decir uno, no entra en el if. Al final estamos en las mismas
Es verdad, guarda los que se están visualizando pero haciendo un simil de lo que ocurre en el método getMap de la factoría sí debería devolvertelo
 
Última edición:

Pableroski

Novato - Rpg en desarrollo
Es verdad, guarda los que se están visualizando pero getMap en la factoría sí debería devolvertelo
Código:
if $MapFactory
   for i in $MapFactory.maps
      if i.map_id == 116
        print($game_map.width)
        break
      end
   end
end
Desde el mapa 114 si ejecuto ese código no hace nada.

EDIT: probaré lo del get map
 

Manurocker95

Doctorando en Ingeniería Biomédica & Game Dev
Miembro insignia
Código:
if $MapFactory
   for i in $MapFactory.maps
      if i.map_id == 116
        print($game_map.width)
        break
      end
   end
end
Desde el mapa 114 si ejecuto ese código no hace nada.

EDIT: probaré lo del get map
Ahí tienes, solo tienes que crear una instancia de Game_Map con el id que quieras y te carga todos sus datos:

Código:
def pbCheckMapEventCount(id)
    map=Game_Map.new
    map.setup(id)
    Kernel.pbMessage(_INTL("{1}",map.events.length))
end
1728039617607.png


1728039566874.png


El mapa desde el que se llama (Ruta 3 con ID 31):

1728039781808.png


Recorrerlos se te queda en algo tan sencillo como:

Código:
def pbDoStuffWithEventsInMap(id)
    map=Game_Map.new
    map.setup(id)
    for i in map.events
      #do stuff here
    end
end
 
Arriba