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.registerGASTRODON,{
"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
}
})
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
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.
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
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
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).
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).
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
}
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
}
¡Es más fácil en nuestro Discord! Actualmente la comunidad está más activa en nuestro Discord oficial. Todavía puedes crear tu duda aquí si lo prefieres, pero recuerda que estamos en Discord para poder ayudarte de una forma más ágil.