Registrarse

[Essentials] Interruptores controlados por script

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Pokémon Essentials tiene una función muy curiosa, permite que podamos activar y desactivar interruptores según si se cumple cierta condición via scripting.
Antes de seguir este tutorial doy por hecho de que sabes crear y utilizar los interruptores, si no es el caso puedes aprender a usarlos en este otro tutorial.

Creando el interruptor

Cuando el nombre de un interruptor en Essentials comienza con "s:" el propio sistema activará o desactivará el interruptor según si el script que sigue al "s:" se cumple.
Voy a poner un ejemplo muy simple: un interruptor que se active únicamente si el nombre del jugador es "Klein", la variable que guarda el nombre del jugador es $Trainer.name por lo que simplemente habría que hacer una comparación en Ruby ($Trainer.name=='Klein').
Si creo un interruptor y lo llamo "s:$Trainer.name=='Klein'" este solo se activará si el nombre de mi jugador es Klein.


Y así quedaría el evento con la condición de aparición:


Por supuesto casi nadie va a querer crear un evento que se ejecute solo cuando el jugador se llame de cierta forma, pero es solo un ejemplo, ahora veremos ejemplos útiles donde podemos usar esta función de Essentials.

Ejemplos útiles

Uno de los ejemplos más útiles que puede tener esto es hacer por ejemplo que un evento se ejecute solo si tienes más de un cierto número de Pokémon.
La variable que guarda el equipo es $Trainer.party, esta es un array por lo que para obtener la longitud (o sea, el número de objetos, en este caso Pokémon, que hay en el array) usaríamos $Trainer.party.length.
Si creamos un interruptor y lo llamamos "s:$Trainer.party.length > 0" solo se ejecutaría cuando tengamos más de un Pokémon, muy útil para eventos que queramos que aparezcan solo cuando tengamos al fin un Pokémon.

También podemos hacer eventos que aparezcan según el año, mes, día o hora a la que juguemos. Estos son los scripts que devuelven la fecha.

Devuelve el año, por ejemplo ahora mismo me devuelve 2017.
Código:
Time.now.year
Devuelve el mes, por ejemplo ahora mismo me devuelve 9 (septiembre)
Código:
Time.now.mon
Devuelve la hora
Código:
Time.now.hour
Devuelve el minuto
Código:
Time.now.min
Podemos comprobar también los segundos con Time.now.sec pero no creo que sea de mucha utilidad.
Gracias al tiempo podemos hacer por ejemplo que un interruptor solo esté activo desde las 9 de la noche hasta la 10 fácilmente llamando al interruptor "s:Time.now.hour >= 21 and Time.now.hour < 22".

También podemos hacer que haya eventos que solo aparezcan cuando tengamos cierto tipo de Pokémon en la Pokédex utilizando $Trainer.pokedexOwned para Pokémon capturados o $Trainer.pokedexSeen, como véis las posibilidades son muchísimas ;)
 

Diego Mertens

Dartrix Joven
¡Wow! Que gran aporte, me sorprende que Pokémon Essentials tenga esa función, de hecho, yo sólo creí que serviría para medir un cierto tiempo.
Esto me va a ser de mucha utilidad para mi proyecto.
Aunque me pregunto... para hacer que un evento active un temporizador, que hace que tengas cierto tiempo para encontrar un objeto e ir de nuevo a hablar con ése evento, y si no lo haces, se reinicia, ¿Cómo sería?
 
Última edición:
M

Miembro eliminado 28262

Invitado
Gran tutorial, de mucha utilidad, sin duda aplicar este tipo de comandos es tropecientas veces más fácil que en GBA.

Tengo una duda, ¿Cuales son los numeros maximos de interruptores?
¿Hay alguna lista de todos los comandos de interruptores como los que has usado en el tutorial?
 

fghtids

Usuario de platino
Gran tutorial, de mucha utilidad, sin duda aplicar este tipo de comandos es tropecientas veces más fácil que en GBA.

Tengo una duda, ¿Cuales son los numeros maximos de interruptores?
¿Hay alguna lista de todos los comandos de interruptores como los que has usado en el tutorial?
El límite de interruptores y de variables está si no me equivoco en 9999 pero por el internet creo que ronda una manera de romper ese límite que dudo que necesites.

Como tal no hay lista de todos los comandos (creo) ya que básicamente no tiene límites. Si quisieras podrías hasta llamar una def de los scripts mismos.
 

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
¡Wow! Que gran aporte, me sorprende que Pokémon Essentials tenga esa función, de hecho, yo sólo creí que serviría para medir un cierto tiempo.
Esto me va a ser de mucha utilidad para mi proyecto.
Aunque me pregunto... para hacer que un evento active un temporizador, que hace que tengas cierto tiempo para encontrar un objeto e ir de nuevo a hablar con ése evento, y si no lo haces, se reinicia, ¿Cómo sería?
Para eso hay que usar algo más que interruptores, en la wiki está explicado (en inglés): Time-sensitive events

Gran tutorial, de mucha utilidad, sin duda aplicar este tipo de comandos es tropecientas veces más fácil que en GBA.

Tengo una duda, ¿Cuales son los numeros maximos de interruptores?
¿Hay alguna lista de todos los comandos de interruptores como los que has usado en el tutorial?
El número máximo de interruptores son 9999.
Pues una lista completa de comandos sería complicado, porque Essentials tiene muchísimas funciones y creo que no están todas documentadas en la wiki. En el articulo Player por ejemplo tienes todas las relacionadas con el jugador (dinero y demás)
 

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Sí, pero hay que actualizar el mapa, y eso no sería un cronómetro.
Pero entonces no te hace falta nada más que RPG Maker XP, en la primera página de los eventos tienes la opción de "Operaciones de tiempo" que te permite crear una cuenta atrás.
Si quieres que algo pase cuando la cuenta atrás esté a cero (que se te teletransporte por ejemplo al inicio de la "prueba" o lo que quieras hacer) puedes usar un condiciones y efectos en un evento en proceso paralelo que se active cuando la cuenta atrás termine.
 

Axel

Héroe de WaH
Aprender cosas como esta me están viniendo pero que muy bien. Gracias porn traer tantos Tutoriales sencillos y a la vez básicos para saber hacer proyectos en RPG. ¡Gracias y sigue trayento cosas como esta please!
~Byee
 

kanda

Creador de Pokémon HighSchool
My gosh, no tenía ni idea de esto y se ve realmente útil. ¡¡Muchas gracias por el aporte Klein!! Se ve que andas a tope con los tutoriales y se agradece mucho. Poco a poco voy entendiendo más y más. Y eso creo que a todos nos gusta :)

¡Sigue así!
 

Guilly Alpha

It's eleven o'clock
Un gran gran tutorial si señor! Y bastante útil!
Ya mismo me estoy poniendo a probarlo ;)

¿Cómo se haria para que el interruptor se activara si tienes un determinado Pokémon o tipo en el equipo?
 

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Un gran gran tutorial si señor! Y bastante útil!
Ya mismo me estoy poniendo a probarlo ;)

¿Cómo se haria para que el interruptor se activara si tienes un determinado Pokémon o tipo en el equipo?
¡Perdon por no haberlo visto hasta ahora! Normalmente me fijo en las respuestas de Dudas pero no mucho en las de tutoriales, a la próxima mencioname ;)
Para un Pokémon es fácil:
Código:
pbHasSpecies?(:PIKACHU)
Ese es el código para comprobar si tienes un Pokémon en el equipo así que solo habría que añadirlo al nombre del interruptor (s:pbHasSpecies?:)PIKACHU)).
Para ver si tienes un tipo de Pokémon en el equipo sería más complicado porque tendrías que crear una función nueva que compruebe los tipos de cada Pokémon en tu equipo, si te hace falta para tu proyecto dímelo y te lo hago en un segundillo.

Quizás ya lo hayas solucionado porque han pasado dos días pero te respondo para la gente que vea el tema en un futuro con la misma duda ;)
 

lucas2017

Aguante Magikarp
Pokémon Essentials tiene una función muy curiosa, permite que podamos activar y desactivar interruptores según si se cumple cierta condición via scripting.
Antes de seguir este tutorial doy por hecho de que sabes crear y utilizar los interruptores, si no es el caso puedes aprender a usarlos en este otro tutorial.

Creando el interruptor

Cuando el nombre de un interruptor en Essentials comienza con "s:" el propio sistema activará o desactivará el interruptor según si el script que sigue al "s:" se cumple.
Voy a poner un ejemplo muy simple: un interruptor que se active únicamente si el nombre del jugador es "Klein", la variable que guarda el nombre del jugador es $Trainer.name por lo que simplemente habría que hacer una comparación en Ruby ($Trainer.name=='Klein').
Si creo un interruptor y lo llamo "s:$Trainer.name=='Klein'" este solo se activará si el nombre de mi jugador es Klein.


Y así quedaría el evento con la condición de aparición:


Por supuesto casi nadie va a querer crear un evento que se ejecute solo cuando el jugador se llame de cierta forma, pero es solo un ejemplo, ahora veremos ejemplos útiles donde podemos usar esta función de Essentials.

Ejemplos útiles

Uno de los ejemplos más útiles que puede tener esto es hacer por ejemplo que un evento se ejecute solo si tienes más de un cierto número de Pokémon.
La variable que guarda el equipo es $Trainer.party, esta es un array por lo que para obtener la longitud (o sea, el número de objetos, en este caso Pokémon, que hay en el array) usaríamos $Trainer.party.length.
Si creamos un interruptor y lo llamamos "s:$Trainer.party.length > 0" solo se ejecutaría cuando tengamos más de un Pokémon, muy útil para eventos que queramos que aparezcan solo cuando tengamos al fin un Pokémon.

También podemos hacer eventos que aparezcan según el año, mes, día o hora a la que juguemos. Estos son los scripts que devuelven la fecha.

Devuelve el año, por ejemplo ahora mismo me devuelve 2017.
Código:
Time.now.year
Devuelve el mes, por ejemplo ahora mismo me devuelve 9 (septiembre)
Código:
Time.now.mon
Devuelve la hora
Código:
Time.now.hour
Devuelve el minuto
Código:
Time.now.min
Podemos comprobar también los segundos con Time.now.sec pero no creo que sea de mucha utilidad.
Gracias al tiempo podemos hacer por ejemplo que un interruptor solo esté activo desde las 9 de la noche hasta la 10 fácilmente llamando al interruptor "s:Time.now.hour >= 21 and Time.now.hour < 22".

También podemos hacer que haya eventos que solo aparezcan cuando tengamos cierto tipo de Pokémon en la Pokédex utilizando $Trainer.pokedexOwned para Pokémon capturados o $Trainer.pokedexSeen, como véis las posibilidades son muchísimas ;)
Basándome en esto: "s:$Trainer.name=='Klein'" como se aria para detectar el nombre de el rival que se guarda en la variable 12
 

Diego Mertens

Dartrix Joven
Y cómo se haría para que un evento se active desde, por ejemplo desde el 20/10/2017 hasta el 31/10/2017 se activara un evento en donde te entregaran un ticket especial para poder acceder a la isla de algún Pokémon especial y así hacer una especie de Evento como en los juegos oficiales, o que directamente te entregaran el Pokémon como lo hacen actualmente.
 

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Basándome en esto: "s:$Trainer.name=='Klein'" como se aria para detectar el nombre de el rival que se guarda en la variable 12
Las variables se guardan en la global $game_variables[X], así que podrías hacerlo así:
Código:
s:$game_variables[12]=='Klein'

Y cómo se haría para que un evento se active desde, por ejemplo desde el 20/10/2017 hasta el 31/10/2017 se activara un evento en donde te entregaran un ticket especial para poder acceder a la isla de algún Pokémon especial y así hacer una especie de Evento como en los juegos oficiales, o que directamente te entregaran el Pokémon como lo hacen actualmente.
Aunque puedes hacerlo con un montón de condiciones en el nombre del interruptor (s:Time.now.year==2017 &&...) te recomiendo crear un pequeño script para resumirlo y luego llamarlo a traves del nombre del interruptor, algo así:
Código:
def pbTiempoEspecial
  return Time.now.year == 2017 && Time.now.mon == 10 && Time.now.day >= 20 && Time.now.hour <= 31
end
Y luego sería tan fácil como que el interruptor se llamase s:pbTiempoEspecial
 
Arriba