¡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 3930 miembros registrados.
El último usuario registrado es LKendo.

Nuestros miembros han publicado un total de 83410 mensajes en 11867 argumentos.
Navega con Google Chrome
[DESCARGA]

Mensaje al aprender habilidad

 :: RPG Maker :: Ayuda RPG

Ver el tema anterior Ver el tema siguiente Ir abajo

Mensaje al aprender habilidad

Mensaje por alex1633 el 2017-01-24, 11:41

Hola de nuevo, tengo otra duda, resulta que estoy haciendo varias mejoras en el juego pero siempre me salen problemas ante lo nuevo, ya que nunca lo he hecho.

Mi duda es sobre al aprender una habilidad, que salga un mensaje de texto con su musiquita diciendo "Has aprendido la habilidad Cura" por ejemplo, resulta que sé hacerlo, lo hago con un evento común en "modo paralelo" y con un interruptor activado para que éste evento común esté activo, entonces, todo marcha bien, subo un nivel, me dan una habilidad y ese evento se pone en marcha con las condiciones y efectos de si he aprendido una habilidad, que me aparezca un mensaje diciendo "Has aprendido la habilidad Cura", todo bien, el problema es cuando sale ese mensaje, como en condiciones y efectos dice, si he aprendido la habilidad cura, aparece el mensaje, entonces, le doy a intro para que desaparezca dicho mensaje y vuelve a ponerse en medio haciendo imposible jugar, llegando a un bucle. He probado con parar el proceso de evento y no me va, supongo que porque como está en paralelo, pues vuelve a ponerse. También he probado con borrar evento temporalmente, pero el interruptor está activo así que sigue saliendo. También he probado con romper ciclo, ya que es un bucle, a ver si lo detiene, pero tampoco. Espero haberme explicado bien y agradezco todo tipo de ayuda. Gracias y a saguir trabajando en vuestros proyectos! Cool
avatar
alex1633
Soñador
Soñador

0/3

Créditos 322

Gracias : 11

Volver arriba Ir abajo

Re: Mensaje al aprender habilidad

Mensaje por Wecoc el 2017-01-24, 11:59

Eso es porque tu condición es si el personaje tiene cierta habilidad aprendida, no si acaba de aprenderla. No puedes poner en condición ésto segundo directamente, que es lo que necesitas, en cambio tienes que replantearlo todo distinto.

Yo lo que haría es que cuando un actor aprenda una habilidad se almacene en una variable el nombre del actor (se podría guardar la ID pero te lo mostraré con el nombre porque así luego puedes hacer un pequeño truco), en otra también el nombre de la habilidad y luego se llame a un evento común. Éste evento común no usa ningún interruptor y no funciona en proceso paralelo, así solo funcionará cuando quieres y solo saldrá una vez, pero cada vez que se aprenda una habilidad.

Mira, el script es éste, ponlo encima de main y adáptalo a las variables que quieras.

Código:
class Game_Actor
  alias wec_popup_learn_skill learn_skill unless $@
  def learn_skill(skill_id, popup = true)
    if skill_id > 0 and not skill_learn?(skill_id)
      wec_popup_learn_skill(skill_id)
      return if popup == false
      actor = self.name
      skill = $data_skills[skill_id].name
      $game_variables[1] = actor # Primera variable
      $game_variables[2] = skill # Segunda variable
      $game_temp.common_event_id = 1 # Evento común
    end
  end
end

Y en el evento común como usaste los nombres puedes poner simplemente algo así:



Y se verá así:


Si no quieres mostrar el nombre del actor, solo necesitarás una variable para el nombre de la habilidad.

Normalmente por script cuando un actor aprende una habilidad se usa
learn_skill(id de la habilidad)
Sigue funcionando igual pero he añadido la posibilidad de poner si quieres que al aprender una skill se muestre el mensaje o no, así:
learn_skill(id de la habilidad, mostrar mensaje)
Por ejemplo: learn_skill(1, false)
Así si en algún caso te molesta que salga la ventana tendrás opciones para impedirlo.
Espero que eso no te cause ninguna incompatibilidad.
avatar
Wecoc
Administrador
Administrador



Créditos 8988

Gracias : 442

Volver arriba Ir abajo

Re: Mensaje al aprender habilidad

Mensaje por alex1633 el 2017-01-24, 12:52

Funciona perfectamente, muchas gracias! Very Happy

Tengo ahora dos dudas respecto a este script, resulta que cuando empieza el juego, como el personaje ya tiene una habilidad al comienzo, el mensaje sale al comienzo de que ha aprendido cierta habilidad y eso queda feo y me gustaría suprimir las habilidades que ya tienen aprendidas los personajes que se unen al grupo, la segunda duda que tengo es, si dos personajes dan la casualidad de que suben de nivel al mismo momento y los dos aprenden habilidades, solo sale un mensaje de que un personaje ha subido una habilidad pero del otro no dice nada.
avatar
alex1633
Soñador
Soñador

0/3

Créditos 322

Gracias : 11

Volver arriba Ir abajo

Re: Mensaje al aprender habilidad

Mensaje por Wecoc el 2017-01-24, 13:47

Me has tenido pensando un buen rato xD
Ya lo tengo, es un poco más complicado pero no mucho.
Cambia el script por éste:

Código:
class Game_Temp
  attr_accessor :learn_actor_name
  attr_accessor :learn_skill_name
  alias wec_popup_ini initialize unless $@
  def initialize(*args)
    wec_popup_ini(*args)
    @learn_actor_name = []
    @learn_skill_name = []
  end
end
  
class Game_Actor < Game_Battler
  alias wec_popup_learn_skill learn_skill unless $@
  def learn_skill(skill_id, popup = true)
    if skill_id > 0 and not skill_learn?(skill_id)
      wec_popup_learn_skill(skill_id)
      return if popup == false
      common_list = $data_common_events[1].list # ID del Evento Común
      list = $game_system.map_interpreter.instance_eval("@list")
      return if list == nil
      $game_temp.learn_actor_name.push(self.name)
      $game_temp.learn_skill_name.push($data_skills[skill_id].name)
      for i in common_list
        list.push(i)
      end
    end
  end
end

Y el Evento común ahora es un poco distinto, tienes que poner éste Llamar script al principio:

Código:
actors = $game_temp.learn_actor_name
skills = $game_temp.learn_skill_name
$game_variables[1] = actors.shift # Var 1
$game_variables[2] = skills.shift # Var 2

Cambia ahí la ID de las variables, ahora se cambian ahí, no en el script (donde pone [1] y [2])
Y no las iguales a 0 ésta vez. Quedará así:



Ojalá te sirva, si no al menos estamos más cerca. Lo he probado y se solucionaron ámbos problemas.
Si aún sale en alguna ocasión en la que no quieres eso ya es más fácil de arreglar, es tener en cuenta en determinados casos lo del learn_skill(id, false) que dije antes.
avatar
Wecoc
Administrador
Administrador



Créditos 8988

Gracias : 442

Volver arriba Ir abajo

Re: Mensaje al aprender habilidad

Mensaje por alex1633 el 2017-01-24, 14:13

Ahora hay otro problema, resulta que la línea de antes:
$game_temp.common_event_id = 1 # Evento común
llamaba al script 1 pero yo lo puse en 8 que es el evento común que uso, pero ahora vuelve a tomar el 1, dónde está la línea para ponerlo en 8?
avatar
alex1633
Soñador
Soñador

0/3

Créditos 322

Gracias : 11

Volver arriba Ir abajo

Re: Mensaje al aprender habilidad

Mensaje por alex1633 el 2017-01-24, 14:17

Eres un crack! Lo he arreglado, pero hay una cosita aún que no encaja, cuando se incluye un personaje en el grupo, ya no es mi personaje al comenzar el juego, si no al meter uno nuevo, sale su habilidad nueva pero por dos veces en el texto.
avatar
alex1633
Soñador
Soñador

0/3

Créditos 322

Gracias : 11

Volver arriba Ir abajo

Re: Mensaje al aprender habilidad

Mensaje por Wecoc el 2017-01-24, 14:32

Parecía sencillo pero se complicó al final xD
Lo que dices de entrar en grupo es lo que decía, es solo cambiar una línea.
Ve a Game_Actor, dentro de def setup hacia la línea 66 verás ésto:

Código:
   for i in 1..@level
      for j in $data_classes[@class_id].learnings
        if j.level == i
          learn_skill(j.skill_id)
        end
      end
    end

Eso añade las habilidades que tiene el actor al definirse (al entrar en el grupo)
Ahí cambia ésto:
learn_skill(j.skill_id)
Por ésto:
learn_skill(j.skill_id, false) ##

Normalmente no te diría de cambiarlo ahí, pondría el cambio en otro script, pero en éste caso supondría reescribir un método importante por solo una línea y no compensa por las incompatibilidades que pudiera haber. Le puse ## al final para marcar que se cambió, por si en un futuro tienes que buscarlo (es un truco para buscar cambios rápido porque ## no sale en ninguna parte de los scripts default)

Puede que ese no sea el único sitio donde te moleste que salga el mensaje, en ese caso habría que hacer lo mismo pero en otra parte de los script.
avatar
Wecoc
Administrador
Administrador



Créditos 8988

Gracias : 442

Volver arriba Ir abajo

Re: Mensaje al aprender habilidad

Mensaje por alex1633 el 2017-01-24, 20:20

Perfecto! Me has ayudado muchísimo! Más puntos positivos para mi juego, te invito a probarlo para ver que te parece!! Cool
avatar
alex1633
Soñador
Soñador

0/3

Créditos 322

Gracias : 11

Volver arriba Ir abajo

Re: Mensaje al aprender habilidad

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Ayuda RPG

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