Registrarse

[Essentials] Encuentros por evento con un Pokémon salvaje predefinido

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Como sabréis en los juegos de Pokémon normalmente hay una serie de Pokémon con los que puedes combatir interactuando con ellos directamente, normalmente suelen ser legendarios o Pokémon raros como el Gyarados rojo de Pokémon O/P/C o en sus remakes.


Si usáis Essentials probablemente ya conozcais el siguiente script:

Código:
pbWildBattle(POKEMON, NIVEL)

Este script inicia una batalla con un Pokémon al nivel que le digamos, ¿pero y si queremos hacer que el Pokémon sea shiny? ¿o que tenga unos ataques en concreto?

Interceptando al Pokémon salvaje

Lo primero que tendremos que hacer será crear un nuevo script, lo podremos llamar como queramos pero siempre habrá que crearlo encima del script "main".
Una vez lo creemos copiamos y pegamos este código:

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  # Condiciones
}

Este código será el código "base" para crear nuevas condiciones, lo que hace es "interceptar" el momento en el que se crean los Pokémon salvajes para permitirnos editarlo al vuelo cuando se genera.

Añadiendo nuevas condiciones

Para crear nuevas condiciones utilizaremos los interruptores de forma que podemos hacer que el Pokémon que se genere sea especial según el interruptor que activemos (por ejemplo, podríamos hacer que cuando el interruptor número 60 esté activado el Pokémon salvaje sea shiny).
Tened en cuenta que las condiciones que vamos a crear afentan a todos los Pokémon salvajes por lo que para usarlo para un Pokémon de evento específico tendríamos que activar el interruptor, llamar al script pbWildBattle y luego desactivar el interruptor.


Ahora que está todo explicado podemos empezar a crear las condiciones, abrimos el script que creamos antes y justo debajo de "# Condiciones" añadimos esto:

Código:
if $game_switches[60]
  # Condición aquí
end

Esto hará que podamos modificar el Pokémon de una forma específica solo cuando el interruptor 60 esté activado, por supuesto podéis el número del interruptor.
Ahora lo único que nos falta es modificar el Pokémon, para eso tendremos que usar las funciones del objeto (o sea, de la clase que define lo que es un Pokémon en el código del juego).
Si no tienes ni idea de lo que hablo puedes usar las siguientes funciones, que normalmente son las más típicas:

Hacer un Pokémon shiny
Código:
pokemon.makeShiny

Darle Pokerus al Pokémon
Código:
pokemon.givePokerus

Le da un objeto al Pokémon, podemos usar la ID del objeto o el nombre interno (":pOTION", por ejemplo).
Código:
pokemon.setItem(OBJETO)

Cambia los IVs del Pokémon salvaje
Tendremos que cambiar "N" por el número del IV que queramos, los PS sería 0, ataque sería 1, defensa sería 2, velocidad sería 3, ataque especial sería 4 y defensa especial sería 5.
Código:
pokemon.iv[N] = VALOR

Aprende un nuevo movimiento, si no hay espacio para otro sustituye al primero, al igual que con el objeto podremos usar la ID o el nombre interno.
Código:
pokemon.pbLearnMove(MOV)

Elimina TODOS los movimientos del Pokémon, muy útil si queréis usar pbLearnMove sin preocupaciones.
Código:
pokemon.pbDeleteAllMoves

Ahora simplemente añadimos lo que queramos debajo de "# Condición aquí", por ejemplo esto haría que el Pokémon fuese shiny, llevase una poción equipada y tuviese los IVs perfectos.
Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  # Condiciones
  if $game_switches[60]
    # Condición aquí
    pokemon.makeShiny
    pokemon.setItem(:POTION)
    pokemon.iv[0] = 31
    pokemon.iv[1] = 31
    pokemon.iv[2] = 31
    pokemon.iv[3] = 31
    pokemon.iv[4] = 31
    pokemon.iv[5] = 31
  end
}

Finalmente si queréis añadir más condiciones es tan fácil como copiar y pegar el código del interruptor.
Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  # Condiciones
  if $game_switches[60]
    # Condición aquí
  end
  if $game_switches[61]
    # Condición aquí
  end
}

Y este sería el resultado final:
 

Guilly Alpha

It's eleven o'clock
Me acabas de salvar completamente una de las mecanicas del juego, ya estaba creando un tema en dudas.
Gran gran tutorial (como todos los tuyos jajajaja)

Muchas gracias, a la carpeta de favoritos va.
 

Axel

Usuario de Platino
Es un buen tutorial, aunque es sencillo y está en la Wiki siempre viene bien que te lo expliquen debidamente, con imágenes y con esa carisma(?). Gracias por traer algo así, a mucha gente le será útil.
~Byee
 
Yo tengo un mini problema con este tema, bueno..2

1) Al matar al poke, sigue saliéndome en combate (el sprite es como que se bugea y aparece por la mitad o algo raro). Es decir, es como si lo hubiese matado pero no, porque sigo estando en combate.

2)Cuando lo matas, como hacemos para que desaparezca? estilo Snorlax, Gyarados..etc.
 

Hiro696

El Chanfle
Tengo una consulta que viene bn aqui, ¿como programo para que el pokemon me salga con una forma alterna, por ejemplo si quiero que me salga un cyndaquil alterno que hise y que tiene el sprite de 155_1, pero que no salga como pokemon salvaje sino como uno predefinido
 

Diego Mertens

Dartrix Joven
Tengo una consulta que viene bn aqui, ¿como programo para que el pokemon me salga con una forma alterna, por ejemplo si quiero que me salga un cyndaquil alterno que hise y que tiene el sprite de 155_1, pero que no salga como pokemon salvaje sino como uno predefinido
Así:
Código:
p=PokeBattle_Pokemon.new(:PICHU,2,
   $Trainer)
p.setItem(:POTION)
p.setAbility(2)
pkmn.form=1
p.makeMale
p.makeShiny
p.pbLearnMove(:VOLTTACKLE)
p.pbLearnMove(:THUNDERBOLT)
p.pbLearnMove(:IRONTAIL)
p.pbLearnMove(:QUICKATTACK)
p.calcStats
Y

Código:
Kernel.pbAddPokemonSilent(p)
Código:
Kernel.pbAddPokemon(p)
En este caso, se entregaría un Pichu Picoreja Shiny, Macho, con Pararrayos, una Poción equipada, con los movimientos Tacleada de Voltios, Atactrueno, Cola de Hierro y Ataque Rápido.
 
Es un buen tutorial y creía haberlo entendido pero a la hora de la práctica no me sale y me da error. Estoy intentando hacer un galvantula shiny con pokérus, con habilidad ojo compuesto, con los movimientos zumbido, trueno, gigadrenado y red viscosa y con ivs perfectos, adjunto capturas de los scripts que he hecho: https://ibb.co/h4Mb9n https://ibb.co/naBb9n
No sé en que me he equivocado, si alguien me hace el script de ejemplo para que aprenda estaría agradecido.
 

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Es un buen tutorial y creía haberlo entendido pero a la hora de la práctica no me sale y me da error. Estoy intentando hacer un galvantula shiny con pokérus, con habilidad ojo compuesto, con los movimientos zumbido, trueno, gigadrenado y red viscosa y con ivs perfectos, adjunto capturas de los scripts que he hecho: https://ibb.co/h4Mb9n https://ibb.co/naBb9n
No sé en que me he equivocado, si alguien me hace el script de ejemplo para que aprenda estaría agradecido.
Los scripts se crean en el editor de scripts (F11), la función en los eventos lo que hace es llamarlos.
Por otro lado, el interruptor debería de ser el 907, no 0907, y las condiciones puedes ponerlas en el mismo sitio y no en diferentes apartados.
 
Los scripts se crean en el editor de scripts (F11), la función en los eventos lo que hace es llamarlos.
Por otro lado, el interruptor debería de ser el 907, no 0907, y las condiciones puedes ponerlas en el mismo sitio y no en diferentes apartados.
LOL, que tonto por mi parte jajaja, se nota que soy nuevo. Gracias y...¿los Evs se pueden cambiar también?¿Y la naturaleza y habilidad?Muchas gracias.
 

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
LOL, que tonto por mi parte jajaja, se nota que soy nuevo. Gracias y...¿los Evs se pueden cambiar también?¿Y la naturaleza y habilidad?Muchas gracias.
Los evs puedes cambiarlos de la misma forma que los ivs, la naturaleza con pokemon.natureflag, y la habilidad con pokemon.abilityflag, aunque solo puedes asignarle las habilidades que tiene el Pokémon definidas en el archivo pokemon.txt, tienes toda la información sobre los valores que puedes asignarle a los Pokémon aquí: Pokémon | Pokemon Essentials Wiki | FANDOM powered by Wikia
 

Link Langostino

El Guerrero de las Pijamas de Langostino
Una Pregunta Klein Y Si Quiero Que El Pokémon Te lo Den,Estoy Haciendo un evento donde te regalan un Pokémon shiny y no se como ponerlo que sea shiny ayúdame plz
 
Última edición:

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Una Pregunta Klein Y Si Quiero Que El Pokémon Te lo Den,Estoy Haciendo un evento donde te regalan un Pokémon shiny y no se como ponerlo que sea shiny ayúdame plz
Eso es algo completamente aparte de lo que explico en este tutorial, para hacer eso tendrías que crear un nuevo script y poner algo como esto

Código:
def pbAddPokemonShiny(pokemon, level)
  p=PokeBattle_Pokemon.new(pokemon, level, $Trainer)
  p.makeShiny
  pbAddToParty(p)
end
Y llamar al script así (ejemplo de Pikachu al nivel 100)
Código:
pbAddPokemonShiny(25, 100)
No he probado el código pero debería de funcionar sin problema.
 

Diego Mertens

Dartrix Joven
o si no, hacer esto
en llamar script, en un evento, poner esto
Código:
p=PokeBattle_Pokemon.new(:PICHU,30, #te dará un pichu al nivel 30
   $Trainer)
p.setItem(:ZAPPLATE) #con el item zaplate
p.form=1                # forma picoreja
p.makeFemale  #será hembra
p.makeShiny #será shiny
p.pbLearnMove(:VOLTTACKLE) #sabra placaje electrico
p.pbLearnMove(:HELPINGHAND) # refuerzo
p.pbLearnMove(:SWAGGER) #no recuerdo el nombre ._.
p.pbLearnMove(:PAINSPLIT) #divide dolor
p.calcStats #esto debe ir siempre, calculara las stats que tendrá el pokemon
y luego
Código:
Kernel.pbAddPokemon(p)
en otro llamar script, ¡Y listo! esto te permitirá, también, entregar pokémon con movimientos únicos, habilidades especiales, items potenciadores, naturalezas concretas, si es o no shiny, etc, etc, etc.
 
Como sabréis en los juegos de Pokémon normalmente hay una serie de Pokémon con los que puedes combatir interactuando con ellos directamente, normalmente suelen ser legendarios o Pokémon raros como el Gyarados rojo de Pokémon O/P/C o en sus remakes.


Si usáis Essentials probablemente ya conozcais el siguiente script:

Código:
pbWildBattle(POKEMON, NIVEL)

Este script inicia una batalla con un Pokémon al nivel que le digamos, ¿pero y si queremos hacer que el Pokémon sea shiny? ¿o que tenga unos ataques en concreto?

Interceptando al Pokémon salvaje

Lo primero que tendremos que hacer será crear un nuevo script, lo podremos llamar como queramos pero siempre habrá que crearlo encima del script "main".
Una vez lo creemos copiamos y pegamos este código:

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  # Condiciones
}

Este código será el código "base" para crear nuevas condiciones, lo que hace es "interceptar" el momento en el que se crean los Pokémon salvajes para permitirnos editarlo al vuelo cuando se genera.

Añadiendo nuevas condiciones

Para crear nuevas condiciones utilizaremos los interruptores de forma que podemos hacer que el Pokémon que se genere sea especial según el interruptor que activemos (por ejemplo, podríamos hacer que cuando el interruptor número 60 esté activado el Pokémon salvaje sea shiny).
Tened en cuenta que las condiciones que vamos a crear afentan a todos los Pokémon salvajes por lo que para usarlo para un Pokémon de evento específico tendríamos que activar el interruptor, llamar al script pbWildBattle y luego desactivar el interruptor.


Ahora que está todo explicado podemos empezar a crear las condiciones, abrimos el script que creamos antes y justo debajo de "# Condiciones" añadimos esto:

Código:
if $game_switches[60]
  # Condición aquí
end

Esto hará que podamos modificar el Pokémon de una forma específica solo cuando el interruptor 60 esté activado, por supuesto podéis el número del interruptor.
Ahora lo único que nos falta es modificar el Pokémon, para eso tendremos que usar las funciones del objeto (o sea, de la clase que define lo que es un Pokémon en el código del juego).
Si no tienes ni idea de lo que hablo puedes usar las siguientes funciones, que normalmente son las más típicas:

Hacer un Pokémon shiny
Código:
pokemon.makeShiny

Darle Pokerus al Pokémon
Código:
pokemon.givePokerus

Le da un objeto al Pokémon, podemos usar la ID del objeto o el nombre interno (":pOTION", por ejemplo).
Código:
pokemon.setItem(OBJETO)

Cambia los IVs del Pokémon salvaje
Tendremos que cambiar "N" por el número del IV que queramos, los PS sería 0, ataque sería 1, defensa sería 2, velocidad sería 3, ataque especial sería 4 y defensa especial sería 5.
Código:
pokemon.iv[N] = VALOR

Aprende un nuevo movimiento, si no hay espacio para otro sustituye al primero, al igual que con el objeto podremos usar la ID o el nombre interno.
Código:
pokemon.pbLearnMove(MOV)

Elimina TODOS los movimientos del Pokémon, muy útil si queréis usar pbLearnMove sin preocupaciones.
Código:
pokemon.pbDeleteAllMoves

Ahora simplemente añadimos lo que queramos debajo de "# Condición aquí", por ejemplo esto haría que el Pokémon fuese shiny, llevase una poción equipada y tuviese los IVs perfectos.
Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  # Condiciones
  if $game_switches[60]
    # Condición aquí
    pokemon.makeShiny
    pokemon.setItem(:POTION)
    pokemon.iv[0] = 31
    pokemon.iv[1] = 31
    pokemon.iv[2] = 31
    pokemon.iv[3] = 31
    pokemon.iv[4] = 31
    pokemon.iv[5] = 31
  end
}

Finalmente si queréis añadir más condiciones es tan fácil como copiar y pegar el código del interruptor.
Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  # Condiciones
  if $game_switches[60]
    # Condición aquí
  end
  if $game_switches[61]
    # Condición aquí
  end
}

Y este sería el resultado final:
Me gustaría hacer que cuando un switch estuviese activo, todos los Magikarps de la zona se convirtieran en Gyarados rojos. Ya he probado de todo y, puesto que no soy muy diestro con los scripts, no me sale bien.

He abierto encima de Main una sección nueva llamada Radio_Waves en la que he agregado esto:

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  r = false
  r = true if $game_switches[74]==true && isConst?(pokemon.species,PBSpecies,:MAGIKARP) && pokemon.form=3
  next pokemon.pbWildBattle(:GYARADOS,20) if r==true
       pokemon.form=3 if r==true
       pokemon.iv=[31,31,31,31,31,31]
       pokemon.calcStats if r==true
}
He definido que el Gyarados rojo, además de la forma Shiny de Gyarados es una tercera forma. Pero con este script sólo me aparece el Gyarados normal al nivel 20 y si huyo, lucho automáticamente contra un Magikarp y si me derrota, tras teletransportarme al lugar de inicio se inicia un combate contra un Magikarp.

Se supone que he creado un método de evolución llamado RadioWave para evolucionar a Magikarp en el Gyarados rojo (forma alternativa no shiny) cuando el switch 74 está activo y me funciona bien. He intentado usar un script basado en ese para hacer este que no me funciona bien.

Si me puedes ayudar te lo agradecería. Te dejo el script que usé para evolucionar a mi Magikarp al Gyarados rojo:

Código:
  when PBEvolution::RadioWave
       r = false
       r = true if $game_map.map_id==level && $game_switches[74]==true
       pokemon.form=3 if r==true
       pokemon.iv=[31,31,31,31,31,31]
       pokemon.calcStats
    return poke if r==true
Muchas gracias de antemano.
 

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Me gustaría hacer que cuando un switch estuviese activo, todos los Magikarps de la zona se convirtieran en Gyarados rojos. Ya he probado de todo y, puesto que no soy muy diestro con los scripts, no me sale bien.

He abierto encima de Main una sección nueva llamada Radio_Waves en la que he agregado esto:

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  r = false
  r = true if $game_switches[74]==true && isConst?(pokemon.species,PBSpecies,:MAGIKARP) && pokemon.form=3
  next pokemon.pbWildBattle(:GYARADOS,20) if r==true
       pokemon.form=3 if r==true
       pokemon.iv=[31,31,31,31,31,31]
       pokemon.calcStats if r==true
}
He definido que el Gyarados rojo, además de la forma Shiny de Gyarados es una tercera forma. Pero con este script sólo me aparece el Gyarados normal al nivel 20 y si huyo, lucho automáticamente contra un Magikarp y si me derrota, tras teletransportarme al lugar de inicio se inicia un combate contra un Magikarp.

Se supone que he creado un método de evolución llamado RadioWave para evolucionar a Magikarp en el Gyarados rojo (forma alternativa no shiny) cuando el switch 74 está activo y me funciona bien. He intentado usar un script basado en ese para hacer este que no me funciona bien.

Si me puedes ayudar te lo agradecería. Te dejo el script que usé para evolucionar a mi Magikarp al Gyarados rojo:

Código:
  when PBEvolution::RadioWave
       r = false
       r = true if $game_map.map_id==level && $game_switches[74]==true
       pokemon.form=3 if r==true
       pokemon.iv=[31,31,31,31,31,31]
       pokemon.calcStats
    return poke if r==true
Muchas gracias de antemano.
Es que estás haciendo una cosa muy rara, onWildPokemonCreate simplemente se usa para interceptar y modificar los datos del Pokémon que se crea a la hora de iniciar una batalla pero tu lo que has hecho es dentro de eso llamar al script pbWildBattle que lo que hace es iniciar una batalla, o sea, que cuando se genera el Pokémon tu inicias una batalla completamente aparte de la que se había generado.
Simplemente cambia la especie del Pokémon y la forma, en este ejemplo hago que todos los Pokémon se conviertan en Deoxys forma defensa:

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon = e[0]
  pokemon.species = 386
  pokemon.form = 2
  pokemon.calcStats
}
Siguiendo un poco tu código lo que buscas sería algo así (he quitado la variable r porque aquí no tienes que devolver nada y no es necesaria cuando puedes meterlo todo en un condicional directamente)

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  if $game_switches[74]==true && isConst?(pokemon.species, PBSpecies, :MAGIKARP) 
    pokemon.species = 130
    pokemon.form = 3
    pokemon.level = 20
    pokemon.iv=[31,31,31,31,31,31]
    pokemon.calcStats
  end
}
 
Es que estás haciendo una cosa muy rara, onWildPokemonCreate simplemente se usa para interceptar y modificar los datos del Pokémon que se crea a la hora de iniciar una batalla pero tu lo que has hecho es dentro de eso llamar al script pbWildBattle que lo que hace es iniciar una batalla, o sea, que cuando se genera el Pokémon tu inicias una batalla completamente aparte de la que se había generado.
Simplemente cambia la especie del Pokémon y la forma, en este ejemplo hago que todos los Pokémon se conviertan en Deoxys forma defensa:

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon = e[0]
  pokemon.species = 386
  pokemon.form = 2
  pokemon.calcStats
}
Siguiendo un poco tu código lo que buscas sería algo así (he quitado la variable r porque aquí no tienes que devolver nada y no es necesaria cuando puedes meterlo todo en un condicional directamente)

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  if $game_switches[74]==true && isConst?(pokemon.species, PBSpecies, :MAGIKARP) 
    pokemon.species = 130
    pokemon.form = 3
    pokemon.level = 20
    pokemon.iv=[31,31,31,31,31,31]
    pokemon.calcStats
  end
}
¡¡Muchas gracias!! pero hay un pequeño problema y es que crea a Magikarp con el sprite de la forma 3 de Gyarados y no a Gyarados en su forma 3. Lo digo porque en el nombre del pokémon pone 'Magikarp' y sólo me hace 'Salpicadura', aunque sus habilidades son las de Gyarados y es un poco triste todo.

Lo he copiado tal cual, y ha pasado eso, si te sirve de algo tengo la versión 17.1 de Essentials.
 

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
¡¡Muchas gracias!! pero hay un pequeño problema y es que crea a Magikarp con el sprite de la forma 3 de Gyarados y no a Gyarados en su forma 3. Lo digo porque en el nombre del pokémon pone 'Magikarp' y sólo me hace 'Salpicadura', aunque sus habilidades son las de Gyarados y es un poco triste todo.

Lo he copiado tal cual, y ha pasado eso, si te sirve de algo tengo la versión 17.1 de Essentials.
Vaya, no me había fijado en eso, lo siento.
El caso es que todo eso se genera cuando se crea el Pokémon, así que hay que modificarlo también a la hora de alterar la especie, para el nombre puedes usar:

Código:
pokemon.name = PBSpecies.getName(pokemon.species)
Y para resetear los movimientos puedes usar pokemon.resetMoves
 
Vaya, no me había fijado en eso, lo siento.
El caso es que todo eso se genera cuando se crea el Pokémon, así que hay que modificarlo también a la hora de alterar la especie, para el nombre puedes usar:

Código:
pokemon.name = PBSpecies.getName(pokemon.species)
Y para resetear los movimientos puedes usar pokemon.resetMoves
Funciona perfectamente, ¡muchísimas gracias!

EDITO:
Bueno, ¿y si quisiera que los Gyarados saliesen en un mapa determinado y no en todos mientras el switch esté activado? ¿Qué tendría que añadir?

PD: Perdón por ser tan pesado.
 
Última edición:

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Funciona perfectamente, ¡muchísimas gracias!

EDITO:
Bueno, ¿y si quisiera que los Gyarados saliesen en un mapa determinado y no en todos mientras el switch esté activado? ¿Qué tendría que añadir?

PD: Perdón por ser tan pesado.
Pues simplemente tienes que añadir en la condición que compruebe la ID del mapa, la cual se guarda en $game_map.map_id.
Por ejemplo, así haría que todos los Pokémon en el mapa 25 fuesen shinys:

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
  pokemon=e[0]
  if $game_map.map_id == 25
    pokemon.makeShiny
  end
}
Y no te preocupes, no eres pesado, aquí estamos para ayudar ;)
 
Arriba