Registrarse

[RPG - Scripting] Ayuda error con los motes

Estado
Cerrado para nuevas respuestas.

Parritoso

Usuario de oro
Bueno, como dice el titulo, un amigo encontró un error que al principio solo ocurría en el juego sin el modo debug, pero ahora ocurre también en el debug. La cosa es un error de script para la versión 16.2 del essentials, con el script de Nuzlocke de pokeliberty. Como estoy usando la 17.2 del essentials tuve que actualizar el script, pero este error me esta dando problemas. He dejado aquí el script que da problemas tanto la nueva versión, como la original. Agradecería si alguien pudiera ayudar.
Código:
[Pokémon Essentials version 17.2]
Exception: RuntimeError
Message: Script error within event 5 (coords 19,4), map 26 (Laboratorio Pokemon):
Exception: NoMethodError
Message: NUZLOCKE SCRIPT:501:in `pbNickname'undefined method `[]' for nil:NilClass
***Full script:
PokemonStarterSelection.new(
252,4,393)
poke=$Trainer.lastPokemon
poke.setRandomZodiac
poke.language=1
poke.calcStats

Interpreter:243:in `pbExecuteScript'
PSystem_PokemonUtilities:59:in `pbNicknameAndStore'
PSystem_PokemonUtilities:83:in `pbAddPokemon'
Pokemon Starter Selection:182:in `pressBall'
Pokemon Starter Selection:155:in `gettinginput'
Pokemon Starter Selection:215:in `input_action'
Pokemon Starter Selection:114:in `openscene'
Pokemon Starter Selection:100:in `initialize'
(eval):1:in `new'
(eval):1:in `pbExecuteScript'

Interpreter:276:in `pbExecuteScript'
Interpreter:1606:in `command_355'
Interpreter:494:in `execute_command'
Interpreter:193:in `update'
Interpreter:106:in `loop'
Interpreter:198:in `update'
Scene_Map:163:in `follow_update'
Scene_Map:161:in `loop'
Scene_Map:170:in `follow_update'
Pokemonfollowin:1738:in `update'
Ruby:
def pbNickname(pokemon)
  speciesname=PBSpecies.getName(pokemon.species)
  helptext=_INTL("Apodo de {1}",speciesname)
  if $PokemonGlobal.nuzlocke["motes"]
    while pokemon.name.upcase==speciesname.upcase
      newname=pbEnterPokemonName(helptext,0,PokeBattle_Pokemon::NAMELIMIT,"",pokemon)
      pokemon.name=newname if newname!=""
      Kernel.pbMessage(_INTL("¡Tienes que ponerle un mote a tu Pokémon!")) if pokemon.name.upcase==speciesname.upcase
    end
  elsif Kernel.pbConfirmMessage(_INTL("¿Quieres ponerle un mote a {1}?",speciesname))
    newname=pbEnterPokemonName(helptext,0,PokeBattle_Pokemon::NAMELIMIT,"",pokemon)
    pokemon.name=newname if newname!=""
  end
end
Ruby:
def pbNickname(pokemon)
  speciesname=PBSpecies.getName(pokemon.species)
  helptext=_INTL("Apodo de {1}",speciesname)
  if $PokemonGlobal.nuzlocke["motes"]
    while pokemon.name.upcase==speciesname.upcase
      newname=pbEnterPokemonName(helptext,0,10,"",pokemon)
      pokemon.name=newname if newname!=""
      Kernel.pbMessage(_INTL("¡Tienes que ponerle un mote a tu Pokémon!")) if pokemon.name.upcase==speciesname.upcase
    end
  elsif Kernel.pbConfirmMessage(_INTL("¿Quieres ponerle un mote a {1}?",speciesname))
    newname=pbEnterPokemonName(helptext,0,10,"",pokemon)
    pokemon.name=newname if newname!=""
  end
end
 

SenorX

Tipo de incógnito
Miembro de honor
Está mal hecho de por sí, no te ralles. Consejo: no uses cosas para 16.2 en 17.2.
 

Caeles

Midnight Melody
Está mal hecho de por sí, no te ralles. Consejo: no uses cosas para 16.2 en 17.2.
¿Mal hecho por qué? ¿Por ser de una versión anterior? El script funciona. Eso no es "mal hecho" en mi diccionario. Si no sabes solucionarlo, indica algún lugar donde podría resolverlo, pero mejor no decir chorradas sin fundamento.

@Parritoso He testeado el código que has pasado y funciona todo correcto, el error no viene de ahí. Intuyo que lo que sea que le estás pasando a la variable (pokemon) en pbNickname no es aceptable, probablemente algo derivado del script de PokemonStarterSelection. Si puedes capturar Pokémon u obtenerlos con el givepokemon de forma habitual, eso confirmaría mis sospechas. Si aún con eso no logras solucionarlo, los autores del script están o en el propio Discord de PokéLiberty o en el gremio, si quisieras contactar con ellos para ver en más profundidad el problema.
 
Última edición:

Fran Agustín

Si el sol besa tus ojos, ni cuenta te das.
Miembro insignia
@Parritoso Hola, ¿cómo va?
Tal cual te ha dicho Caeles, tienes un problema de tipos, algo que debería tener un valor es nil.

Por el mensaje de error, yo intuiría que es en esta línea:

Ruby:
if $PokemonGlobal.nuzlocke["motes"]
Si el valor de $PokemonGlobal.nuzlocke es nil, entonces lógicamente no puedes acceder a sus elementos con ["motes"] porque no los tiene.
Viendo el script original noto que en la línea 52 es cuando se le asigna un valor $PokemonGlobal.nuzlocke. En PokeLiberty, puedes notar que dice lo siguiente:

Por último, hay que añadir NuzlockeScene.new() en la intro del juego para llamar a la pantalla de configuración.
¿Has hecho eso? Porque llamar a NuzlockeScene.new() es precisamente lo que asigna el valor a $PokemonGlobal.nuzlocke. Recuerda que debes hacerlo antes de cualquier momento en que se ejecute esta otra función pbNickname.

Si no he sido lo suficientemente claro, si logras arreglarlo o si no, nos avisas. ¡Un saludo!
 

Parritoso

Usuario de oro
@Fran Agustín Gracias por preocuparte, pero el error viene cuando el modo nuzlocke no esta activado. Además, hay otros errores, así que como el script daba muchos problemas, hemos decidido borrarlo, aunque gracias a ti, creo que se me ha ocurrido donde podría estar el error, es a la hora de la selección de modo, cuando elijes el modo normal, se salta la elección que viene en el script. Cuando pueda voy a probar a cambiar eso, gracias Fran. Ya diré si consigo arreglarlo. Muchas gracias a todos.
 
Estado
Cerrado para nuevas respuestas.
Arriba