Registrarse

[RPG - Scripting] Pokemon con diferentes formas en la misma ruta pero diferentes hierbas

Estado
Cerrado para nuevas respuestas.

Morel X

Pues bueno aquí estamosxD
Buenas, pues estaba recordando que en pokemon X e Y estaban los Flabébé, unos pokémon que tenian unas flores distintas, azules, rojas, blancas, etc.

Y bueno este pokemon salia en su forma de flor roja al caminar sobre unas flores rojas, la forma amarilla en flores amarillas y así sucesivamente.

Pues quería poder hacer esto, que una misma ruta donde haya flores de diferentes colores esté cada flabébé, supongo que habrá que hacer algo parecido que con los gastrodon para sus formas pero no he logrado conseguirlo, alguien que me guíe en este script?

En este vale para que salga su segunda forma en otro mapa, supongo que de alguna forma se puede editar para que salga solo en uno de los tipos de encuentros, por ejemplo supongo que tengo que crear el encuentro flores rojas, flores amarillas, etc

MultipleForms.register:)GASTRODON,{
"getFormOnCreation"=>proc{|pokemon|
maps=[87,89] # Map IDs for second form
if $game_map && maps.include?($game_map.map_id)
next 1
else
next 0
end
}
})

Gracias de antemano.
 

Jessie

What goes around, comes around
Supongo que se podría hacer creando nuevos terrain, uno por cada tipo de flor y luego agregar esos terrain al PBTerrain.isGrass? para que funcionen como batalla salvaje.

1 - Se añaden los terrain nuevos al module PBTerrain

Código:
module PBTerrain
  FloresRojas          =  68
  FloresAzules         =  69
  FloresAmarillas     =  70
end
2 - Luego agregar esos terrain nuevos a PBTerrain.isGrass?

Código:
module PBTerrain
    FloresRojas          =  68
    FloresAzules         =  69
    FloresAmarillas     =  70

  def PBTerrain.isGrass?(tag)
    return tag==PBTerrain::Grass ||
           tag==PBTerrain::TallGrass ||
           tag==PBTerrain::UnderwaterGrass ||
           tag==PBTerrain::SootGrass ||
           tag==PBTerrain::FloresRojas ||
           tag==PBTerrain::FloresAzules ||
           tag==PBTerrain::FloresAmarillas
  end

end
Ya con esto las batallas salvajes de tipo Grass aparecerán en los terraintag número 68,69 y 70 (ejemplo), en el cual puedes colocar el tile de flor.

3 - (Opcional) Si quieres que la animación de hierba moviéndose al caminar por los tile de flor aparezca solo tienes que agregar los terrain al PBTerrain.isJustGrass?

Código:
  def PBTerrain.isJustGrass?(tag)   # The Poké Radar only works in these tiles
      return tag==PBTerrain::Grass ||
           tag==PBTerrain::SootGrass ||
           tag==PBTerrain::FloresRojas ||
           tag==PBTerrain::FloresAzules ||
           tag==PBTerrain::FloresAmarillas
  end
4 - Ahora agregaremos a flabebé en esos tiles de flor

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
   pokemon=e[0]
   tg=pbGetTerrainTag($game_player)
   if tg==PBTerrain::FloresRojas || tg==PBTerrain::FloresAzules || tg==PBTerrain::Amarillas
     if rand(100)>50
        pokemon.species=PBSpecies::FLABEBE
        pokemon.name="Flabébé"
        pokemon.form=1 if tg==PBTerrain::FloresAzules
        pokemon.form=2 if tg==PBTerrain::FloresAmarillaws
        pokemon.calcStats
        pokemon.resetMoves
     end
   end
}
Lo que esto hace es verificar si te encuentras sobre uno de los tiles de flor, luego te genera un número al azar entre el 0 y el 100 sin contar el 100 "rand(100)", si es mayor que 50 "rand(100)>50" (ejemplo) tendrá aprox el 50% de probabilidad de que aparezca un flabébé en lugar de uno de los pokémon que están en la lista de Encounters.txt de ese mapa.
Y dependiendo del tipo de tile en el que te encuentres será la forma que tomará ese flabébé; debido a que estas sustituyendo la especie del pokémon que normalmente saldría en la hierba, se tiene que cambiar el "nombre" sino en lugar de decir "Flabébé", dirá "Rattata" o "Pidgey", teniendo ya a flabébé como pokémon salvaje.

5 - (Opcional) En versiones reciente de Essentials, ya trae definido que la forma de flabébé se generé al azar y lo mismo para sus evoluciones.

Código:
MultipleForms.register(:FLABEBE,{
"getFormOnCreation"=>proc{|pokemon|
next rand(5)
}
})

MultipleForms.copy(:FLABEBE,:FLOETTE,:FLORGES)
Aunque esto no afecta lo que hemos hecho arriba, podríamos borrar la parte de pokemon.form en el paso 4 y agregarlo aquí, aunque repito, no afectaría lo que ya hemos hecho, quedaría algo así.

Código:
MultipleForms.register(:FLABEBE,{
"getFormOnCreation"=>proc{|pokemon|
  next 0
  next 1 if pbGetTerrainTag($game_player)==PBTerrain::FloresAzules
  next 2 if pbGetTerrainTag($game_player)==PBTerrain::FloresAmarillas
}
})

MultipleForms.copy(:FLABEBE,:FLOETTE,:FLORGES)
En un script quedaría así :

Código:
module PBTerrain
    FloresRojas          =  68
    FloresAzules         =  69
    FloresAmarillas     =  70

  def PBTerrain.isGrass?(tag)
    return tag==PBTerrain::Grass ||
           tag==PBTerrain::TallGrass ||
           tag==PBTerrain::UnderwaterGrass ||
           tag==PBTerrain::SootGrass ||
           tag==PBTerrain::FloresRojas ||
           tag==PBTerrain::FloresAzules ||
           tag==PBTerrain::FloresAmarillas
  end

  def PBTerrain.isJustGrass?(tag)
      return tag==PBTerrain::Grass ||
           tag==PBTerrain::SootGrass ||
           tag==PBTerrain::FloresRojas ||
           tag==PBTerrain::FloresAzules ||
           tag==PBTerrain::FloresAmarillas
  end

end

Events.onWildPokemonCreate+=proc {|sender,e|
   pokemon=e[0]
   tg=pbGetTerrainTag($game_player)
   if tg==PBTerrain::FloresRojas || tg==PBTerrain::FloresAzules || tg==PBTerrain::Amarillas
     if rand(100)>50
        pokemon.species=PBSpecies::FLABEBE
        pokemon.name="Flabébé"
        pokemon.form=1 if tg==PBTerrain::FloresAzules
        pokemon.form=2 if tg==PBTerrain::FloresAmarillaws
        pokemon.calcStats
        pokemon.resetMoves
     end
   end
}

MultipleForms.register(:FLABEBE,{
"getFormOnCreation"=>proc{|pokemon|
  next 0
  next 1 if pbGetTerrainTag($game_player)==PBTerrain::FloresAzules
  next 2 if pbGetTerrainTag($game_player)==PBTerrain::FloresAmarillas
}
})

Con eso sería suficiente para que funcione,solo agregas todos los terrain que necesites, espero que te sirva.
Saludos.
 

Morel X

Pues bueno aquí estamosxD
Re: Respuesta: Pokemon con diferentes formas en la misma ruta pero diferentes hierbas

Supongo que se podría hacer creando nuevos terrain, uno por cada tipo de flor y luego agregar esos terrain al PBTerrain.isGrass? para que funcionen como batalla salvaje.

1 - Se añaden los terrain nuevos al module PBTerrain

Código:
module PBTerrain
  FloresRojas          =  68
  FloresAzules         =  69
  FloresAmarillas     =  70
end
2 - Luego agregar esos terrain nuevos a PBTerrain.isGrass?

Código:
module PBTerrain
    FloresRojas          =  68
    FloresAzules         =  69
    FloresAmarillas     =  70

  def PBTerrain.isGrass?(tag)
    return tag==PBTerrain::Grass ||
           tag==PBTerrain::TallGrass ||
           tag==PBTerrain::UnderwaterGrass ||
           tag==PBTerrain::SootGrass ||
           tag==PBTerrain::FloresRojas ||
           tag==PBTerrain::FloresAzules ||
           tag==PBTerrain::FloresAmarillas
  end

end
Ya con esto las batallas salvajes de tipo Grass aparecerán en los terraintag número 68,69 y 70 (ejemplo), en el cual puedes colocar el tile de flor.

3 - (Opcional) Si quieres que la animación de hierba moviéndose al caminar por los tile de flor aparezca solo tienes que agregar los terrain al PBTerrain.isJustGrass?

Código:
  def PBTerrain.isJustGrass?(tag)   # The Poké Radar only works in these tiles
      return tag==PBTerrain::Grass ||
           tag==PBTerrain::SootGrass ||
           tag==PBTerrain::FloresRojas ||
           tag==PBTerrain::FloresAzules ||
           tag==PBTerrain::FloresAmarillas
  end
4 - Ahora agregaremos a flabebé en esos tiles de flor

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
   pokemon=e[0]
   tg=pbGetTerrainTag($game_player)
   if tg==PBTerrain::FloresRojas || tg==PBTerrain::FloresAzules || tg==PBTerrain::Amarillas
     if rand(100)>50
        pokemon.species=PBSpecies::FLABEBE
        pokemon.name="Flabébé"
        pokemon.form=1 if tg==PBTerrain::FloresAzules
        pokemon.form=2 if tg==PBTerrain::FloresAmarillaws
        pokemon.calcStats
        pokemon.resetMoves
     end
   end
}
Lo que esto hace es verificar si te encuentras sobre uno de los tiles de flor, luego te genera un número al azar entre el 0 y el 100 sin contar el 100 "rand(100)", si es mayor que 50 "rand(100)>50" (ejemplo) tendrá aprox el 50% de probabilidad de que aparezca un flabébé en lugar de uno de los pokémon que están en la lista de Encounters.txt de ese mapa.
Y dependiendo del tipo de tile en el que te encuentres será la forma que tomará ese flabébé; debido a que estas sustituyendo la especie del pokémon que normalmente saldría en la hierba, se tiene que cambiar el "nombre" sino en lugar de decir "Flabébé", dirá "Rattata" o "Pidgey", teniendo ya a flabébé como pokémon salvaje.

5 - (Opcional) En versiones reciente de Essentials, ya trae definido que la forma de flabébé se generé al azar y lo mismo para sus evoluciones.

Código:
MultipleForms.register(:FLABEBE,{
"getFormOnCreation"=>proc{|pokemon|
next rand(5)
}
})

MultipleForms.copy(:FLABEBE,:FLOETTE,:FLORGES)
Aunque esto no afecta lo que hemos hecho arriba, podríamos borrar la parte de pokemon.form en el paso 4 y agregarlo aquí, aunque repito, no afectaría lo que ya hemos hecho, quedaría algo así.

Código:
MultipleForms.register(:FLABEBE,{
"getFormOnCreation"=>proc{|pokemon|
  next 0
  next 1 if pbGetTerrainTag($game_player)==PBTerrain::FloresAzules
  next 2 if pbGetTerrainTag($game_player)==PBTerrain::FloresAmarillas
}
})

MultipleForms.copy(:FLABEBE,:FLOETTE,:FLORGES)
En un script quedaría así :

Código:
module PBTerrain
    FloresRojas          =  68
    FloresAzules         =  69
    FloresAmarillas     =  70

  def PBTerrain.isGrass?(tag)
    return tag==PBTerrain::Grass ||
           tag==PBTerrain::TallGrass ||
           tag==PBTerrain::UnderwaterGrass ||
           tag==PBTerrain::SootGrass ||
           tag==PBTerrain::FloresRojas ||
           tag==PBTerrain::FloresAzules ||
           tag==PBTerrain::FloresAmarillas
  end

  def PBTerrain.isJustGrass?(tag)
      return tag==PBTerrain::Grass ||
           tag==PBTerrain::SootGrass ||
           tag==PBTerrain::FloresRojas ||
           tag==PBTerrain::FloresAzules ||
           tag==PBTerrain::FloresAmarillas
  end

end

Events.onWildPokemonCreate+=proc {|sender,e|
   pokemon=e[0]
   tg=pbGetTerrainTag($game_player)
   if tg==PBTerrain::FloresRojas || tg==PBTerrain::FloresAzules || tg==PBTerrain::Amarillas
     if rand(100)>50
        pokemon.species=PBSpecies::FLABEBE
        pokemon.name="Flabébé"
        pokemon.form=1 if tg==PBTerrain::FloresAzules
        pokemon.form=2 if tg==PBTerrain::FloresAmarillaws
        pokemon.calcStats
        pokemon.resetMoves
     end
   end
}

MultipleForms.register(:FLABEBE,{
"getFormOnCreation"=>proc{|pokemon|
  next 0
  next 1 if pbGetTerrainTag($game_player)==PBTerrain::FloresAzules
  next 2 if pbGetTerrainTag($game_player)==PBTerrain::FloresAmarillas
}
})

Con eso sería suficiente para que funcione,solo agregas todos los terrain que necesites, espero que te sirva.
Saludos.
Gracias por molestarte en escribirmelo todo, solo una cosa y es que me da este error:

????? 'PBTerrain' ? 76 ??? NameError ????????

uninitialized constant PBTerrain::Events

He hecho yo algo mal o es otra cosa?

Vale al final lo he puesto como un script aparte en el main y me ha funcionado, otra cosa, se puede por ejemplo especificar el nivel al que saldrá el flabebe? por ejemplo quiero que salga entre el 5 y el 10, se puede? como sería? muchas gracias por todo la verdad con esto tengo mas que suficiente pero siempre que se pueda hacer algo más me gusta intentarlo jaja
 
Última edición:

Jessie

What goes around, comes around
Respuesta: Re: Respuesta: Pokemon con diferentes formas en la misma ruta pero diferentes hierbas

Gracias por molestarte en escribirmelo todo, solo una cosa y es que me da este error:

????? 'PBTerrain' ? 76 ??? NameError ????????

uninitialized constant PBTerrain::Events

He hecho yo algo mal o es otra cosa?

Vale al final lo he puesto como un script aparte en el main y me ha funcionado, otra cosa, se puede por ejemplo especificar el nivel al que saldrá el flabebe? por ejemplo quiero que salga entre el 5 y el 10, se puede? como sería? muchas gracias por todo la verdad con esto tengo mas que suficiente pero siempre que se pueda hacer algo más me gusta intentarlo jaja
Pues se supone que el nivel depende del nivel de los demás pokémon salvaje en la ruta para que este acorde.

No lo he probado, pero supongo que podría funcional algo así :

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
   pokemon=e[0]
   tg=pbGetTerrainTag($game_player)
   if tg==PBTerrain::FloresRojas || tg==PBTerrain::FloresAzules || tg==PBTerrain::Amarillas
     if rand(100)>50
        pokemon.species=PBSpecies::FLABEBE
        pokemon.name="Flabébé"
        pokemon.form=1 if tg==PBTerrain::FloresAzules
        pokemon.form=2 if tg==PBTerrain::FloresAmarillaws
        
        loop do
          pokemon.level=rand(11)
          break if pokemon.level>4
        end

        pokemon.calcStats
        pokemon.resetMoves
     end
   end
}
El loop do, te repetirá la acción hasta que se obtenga un resultado
El pokemon.level=rand(11) te generará el nivel al azar entre el 0 y 11 sin contar el 11
El break if pokemon.level>4 te dejará de repetir el loop do si el resultado anterior es mayor a 4
El end marca el final del loop

Esto hará que se generé un número entre 0 y 11 sin contar el 11, y si el número generado es mayor a 4 el ciclo se rompe y entonces el nivel será mayor a 4 y menor a 11 (5-10).

También puedes mirar la pagina de wiki para saber más de las caracteristicas que puedes editar.
http://pokemonessentials.wikia.com/wiki/Editing_a_Pokémon

Espero que eso te sirva, saludos.
 

Morel X

Pues bueno aquí estamosxD
Re: Respuesta: Re: Respuesta: Pokemon con diferentes formas en la misma ruta pero diferentes hierbas

Pues se supone que el nivel depende del nivel de los demás pokémon salvaje en la ruta para que este acorde.

No lo he probado, pero supongo que podría funcional algo así :

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
   pokemon=e[0]
   tg=pbGetTerrainTag($game_player)
   if tg==PBTerrain::FloresRojas || tg==PBTerrain::FloresAzules || tg==PBTerrain::Amarillas
     if rand(100)>50
        pokemon.species=PBSpecies::FLABEBE
        pokemon.name="Flabébé"
        pokemon.form=1 if tg==PBTerrain::FloresAzules
        pokemon.form=2 if tg==PBTerrain::FloresAmarillaws
        
        loop do
          pokemon.level=rand(11)
          break if pokemon.level>4
        end

        pokemon.calcStats
        pokemon.resetMoves
     end
   end
}
El loop do, te repetirá la acción hasta que se obtenga un resultado
El pokemon.level=rand(11) te generará el nivel al azar entre el 0 y 11 sin contar el 11
El break if pokemon.level>4 te dejará de repetir el loop do si el resultado anterior es mayor a 4
El end marca el final del loop

Esto hará que se generé un número entre 0 y 11 sin contar el 11, y si el número generado es mayor a 4 el ciclo se rompe y entonces el nivel será mayor a 4 y menor a 11 (5-10).

También puedes mirar la pagina de wiki para saber más de las caracteristicas que puedes editar.
Editing a Pokémon | Pokémon Essentials Wiki | FANDOM powered by Wikia

Espero que eso te sirva, saludos.
Perfecto, muchas gracias!
 

Jessie

What goes around, comes around
Al parecer hay un error, el nivel del pokémon no puede ser 0, así que habría que generar el número al azar en una variable aparte, quedaría algo así

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
   pokemon=e[0]
   tg=pbGetTerrainTag($game_player)
   if tg==PBTerrain::FloresRojas || tg==PBTerrain::FloresAzules || tg==PBTerrain::Amarillas
     if rand(100)>50
        pokemon.species=PBSpecies::FLABEBE
        pokemon.name="Flabébé"
        pokemon.form=1 if tg==PBTerrain::FloresAzules
        pokemon.form=2 if tg==PBTerrain::FloresAmarillaws
        
       loop do
          a=rand(14)
          pokemon.level=a if a!=0
       break if a>9
       end
       pokemon.calcStats
        pokemon.resetMoves
     end
   end
}
 

Morel X

Pues bueno aquí estamosxD
Al parecer hay un error, el nivel del pokémon no puede ser 0, así que habría que generar el número al azar en una variable aparte, quedaría algo así

Código:
Events.onWildPokemonCreate+=proc {|sender,e|
   pokemon=e[0]
   tg=pbGetTerrainTag($game_player)
   if tg==PBTerrain::FloresRojas || tg==PBTerrain::FloresAzules || tg==PBTerrain::Amarillas
     if rand(100)>50
        pokemon.species=PBSpecies::FLABEBE
        pokemon.name="Flabébé"
        pokemon.form=1 if tg==PBTerrain::FloresAzules
        pokemon.form=2 if tg==PBTerrain::FloresAmarillaws
        
       loop do
          a=rand(14)
          pokemon.level=a if a!=0
       break if a>9
       end
       pokemon.calcStats
        pokemon.resetMoves
     end
   end
}
Si, y ya está arreglado, ya no me ha dado ningun fallo, muchas gracias :D
 
Estado
Cerrado para nuevas respuestas.
Arriba