Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4075 miembros registrados.
El último usuario registrado es chuwakal.

Nuestros miembros han publicado un total de 84153 mensajes en 11989 argumentos.

Guía: Solucionar mensajes de error de scripts (para inexpertos)

Ver el tema anterior Ver el tema siguiente Ir abajo

Guía: Solucionar mensajes de error de scripts (para inexpertos)

Mensaje por Wecoc el 2012-12-30, 04:30

Seguramente ya hay guías de esto para dar y regalar, por si no las hay, hice una sencilla e intuïtiva xD

MENSAJES DE ERROR

Supongamos que encontramos un script super guay del maker que nosotros usamos por la red (si es super guay seguramente sea de Wecoc xD)
Y probamos el script en nuestro proyecto copiándolo encima de main y nos salta un error nada más empezar (entonces no, no era de Wecoc xDD).
¿Os ha pasado alguna vez? Seguro que sí. ¡Pues por esto creo este tutorial, para decir qué hay que hacer para solucionar ese putadón de los grandes contratiempo!

Hay varios tipos de errores de script, y muchos se pueden solucionar sin demasiados conocimientos de scripting.
Lo pondré para XP. Para VX y VXAce supongo que son casi los mismos, pero yo no lo controlo.

Quiero hacer notar que aunque esta guía está generalizada, de entrada es difícil saber a qué 'nos enfrentamos'. Así que cuando os salga un error y pidais ayuda en el foro para solucionarlo, lo ideal es que posteéis una screen con el error Y EL SCRIPT en cuestión para poder mirarlo detalladamente.

Analizémoslos uno por uno.

-------------------------------------



Este es el típico error de "No se encontró archivo".
Esto no es un error del script, sinó del directorio. En principio no hace falta modificar NADA del script, solo hay que mirar ese error a ver qué archivo le falta. Normalmente será un recurso gráfico o un archivo de audio, pero como excepción hay scripts (muy pocos) que usan códigos .rb y el error que saltará será más o menos el mismo.
Lo que hay que hacer para solucionar eso es poner el archivo que le falta a la carpeta correspondiente (en el mensaje de error sale la carpeta también), en este caso pondríamos la imagen "piano" en la carpeta "Pictures" del juego usando el gestor de archivos. ¿De donde sacamos esa imagen? Bueno, pues o de la carpeta de la demo si existe, o de donde hayamos sacado el script. Como último recurso podemos usar una imagen vacía con ese nombre, al menos el error no saltará.

-------------------------------------



Error de "stack level too deep" o como yo lo llamo "Se creó un bucle infinito y no puedo salir de allí".
Puede darse por varios motivos, entre ellos incompatibilidades, sobretodo si el error se da nada más empezar. Según qué caso no podrás hacer nada por tú mismo.
Si el error sale cuando pulsas F12 en cambio, sí puedes arreglarlo. Es culpa de los malvados alias.
Los alias son métodos de script que lo que hacen es redefinir un segmento concreto de script en sí mismo para añadirle cosas a posteriori sin tener que reescribirlo todo.
No hace falta que entendáis la frase anterior, solo quedaos en que si ese alias se lee más de una vez como se está reescribiendo a sí mismo da problemas, y da ese error de bucle.
Basta con hacer que el alias no se lea si ya se leyó. Hay que buscar la línea de script que de error. Pondrá lo que sea, no sé, "font_fix_initialize" por ejemplo. Luego hay que buscar un alias que tenga ese font_fix_initialize (estará más arriba y cerca normalmente) y luego hay dos maneras de solucionar el problema.

Primera) Detrás de esa línea alias (blabla) escribir esto: unless $@
Eso significa "Excepto si ya se ha leído", y solucionará el error.

Segunda) Esa línea alias a parte del alias tiene dos nombres, por ejemplo alias hola mundo. Detrás de la línea hay que añadir unless self.method_defined? y el primer nombre con dos puntos : delante.
Ejemplo: alias hola mundo unless self.method_defined?(:hola)
Eso significa "Excepto si el método hola ya ha sido definido", y también solucionará el error.

-------------------------------------



Failed to create bitmap. Este ya es más serio.
En el caso concreto que usé de ejemplo, el error de script 'Cache' línea 80 está causado por un archivo inválido que el Cache (el script que se encarga de cargar los archivos al juego) no puede leer. Eso puede ser debido a que tiene una extensión que el maker no reconoce (.gif por ejemplo). Para arreglarlo hay que detectar el archivo dañado o inválido y reemplazarlo por otro que sí se pueda cargar. También puede ser que en la carpeta haya dos archivos con el mismo nombre, uno con extensión válida y otro con extensión inválida, y el script se haya liado. Eso suele pasar cuando por error guardas con el formato del programa y no el que debe ser. En ese caso solo habría que borrar el inválido o cambiarlo a otra carpeta, y dejar solo el bueno.

En otro caso distinto que no sea 'Cache' línea 80 es otro caso, y sucede cuando el script intenta cargar una imagen que mide de ancho o de alto menos de 1, es decir, cuando carga una "imagen" nula y luego intenta hacer cálculos con ella. Para arreglarlo, solo hay que cambiar esa imagen por una que tenga al menos 1x1 píxeles, ni que sea transparente. Por el contrario, también sale el error cuando la imagen es excesivamente alta o ancha, tanto que no la puede cargar. Eso nos enseña que conviene no trabajar nunca con resoluciones tan bestias con el maker o lo podemos joder. Para arreglar eso habría que modificar el tamaño de la imagen con algún programa. Por último, puede que salga este error porque se intentaron crear demasiadas imagenes muy seguidamente y el lag fue tal que todo se colgó. La cantidad de imagenes simultáneas que soporta el maker, aunque es alta es limitada, así que conviene vigilar eso.

---------------------------------------



Undefined local variable or method (o a veces solo pone Undefined method) for "algo" (ese algo suele ser 'nil nilclass', '0 fixnum' o algo tipo el ejemplo)
Este error puede ser debido a tantas cosas, que me asusta xD
En general este error significa que estás intentando hacer algo que el script no reconoce porque no ha sido definido antes.

En primer lugar, asegúrate de que estás usando todo el código, no solo una parte. Si iba en una demo o post y allí había más de un script, úsalos todos a no ser que ya veas que no estan relacionados. Porque si no este error puede ser por eso.

Como he dicho el error sucede cuando intentas leer algo que no ha sido definido AÚN, así que puede que hayas puesto los códigos al revés (el que se tenía que poner antes lo has puesto debajo y no arriba) y por esto aún no conoce eso. Este caso aún así es menos usual porque muchas veces no afecta.

También puede ser que el código te salga cuando estás intentando cargar una partida guardada de antes de que pusieras el nuevo script y por eso te da error. Para solucionar esto tienes que omitir esa partida guardada y comenzar una nueva. Esto pasa porque algunos scripts parten de cosas que solo se inician una vez, cuando se inicia el juego.

Otro caso es que esa línea del script esté mal escrita y por eso el código no reconozca lo que está leyendo. Es poco usual si tú no eres el creador del script, porque los scripters cuando publican sus scripts normalmente es lo primero que miran; que no haya errores de ese tipo. Para solucionarlo solo tendrías que ir a la línea que te dice que hay error y buscar ese error. acctor, gusrd_item... Muchas veces lo detectarás fácilmente si ese es el caso.

El último motivo por el que puede salir este error es la incompatibilidad con otros scripts.

-------------------------------------------



El Syntax Error suele salir cuando el autor del código la lió parda escribiendo algo, ya sea una coma de más, un ( inicial y ] final o un 3 a principio de línea en vez de un #. Este error sale nada más empezar el juego, antes de salir la pantalla de título. Si el error no da ningun Script ni ninguna línea y dice simplemente ???? Syntax Error, es muy probable que el error esté en un Llamar Script desde un evento. Otros casos es raro encontrarlos en scripts ya publicados... Puede que te salga porque el código en el post del mensaje fue corrompido por BBcode o html, o porque no copiaste bien todo el script y te dejaste algunas líneas (por ejemplo si falta algún end dará ese error). Así que si te sale ese error raro lo primero que puedes hacer es recopiarlo de donde lo sacaras. A veces la línea que te diga el mensaje que hay error no tiene por qué ser realmente la que tiene el error, así que si no encuentras ningún error allí busca a algunas líneas anteriores a ver si encuentras algo.

-------------------------------------------



Con los TypeError poco puedes hacer mas que buscar en la línea que da error y/o algunas anteriores a ésta a ver si hay alguna tontería que cante mucho que está mal, y contactar con el autor del script. Es raro encontrarte con esto en un script ya publicado. Muy raro.

-------------------------------------------



Cuando hagas un llamar script y en ese haya algo que inicíe algo (lo más típico en Llamar Script; del tipo $scene = scene.new(a,b...)) asegúrate de poner el número correcto de valores entre comas dentro del paréntesis o saldrá este bonito error. Si el error sale dentro del script es muy probable que sea por incompatibilidad con otro script, ya que el nuevo script modifique esa llamada poniendo argumentos de más o menos. Si ese es el caso comprueba qué argumentos son los que te sobran o faltan dentro de ese paréntesis en el que te da error el script, y cámbialo para que se adapte bien al otro. Recomiendo poner en un comentario (#) detrás la línea tal y como era antes de hacer la modificación.

------------------------------------------



El ejemplo es poco ilustrativo, porque puede ser un NameError pero puede ser otro según qué casos. En cualquier caso sería un error de Llamar Script. A veces, sin cometer ningún error al escribirlo, Llamar Script da error por culpa de sus molestos saltos de línea. Para arreglarlo hay que fragmentar esa línea por partes para que no haya saltos de línea indeseados. Lo que se hace es igualar una parte de la línea larga a otra más corta, por ejemplo "a = $game_party.actors[1]" y luego justo debajo en el mismo Llamar Evento poner la línea larga pero con la sustitución adecuada.

==============================================

INCOMPATIBILIDADES

Ya que lo redacté para una amigo por MP lo posteo públicamente para sembrar la sabiduría de la scriptencia suprema.
Las incompatibilidades suelen "salir a la luz" con mensajes de error, por esto pongo esto aquí, aunque solo es un resumen.

Muchos problemas de incompatibilidad se pueden resolver sin demasiados conocimientos de scripting.

Dos scripts son incompetibles cuando:

A) Los dos usan una class (o module) en principio distintos y para fines distintos, pero da la casualidad de que tienen el mismo nombre (es algo raro pero puede pasar con algunas de nombre muy genérico como "class Foo" o "class Cursor")
- Cómo solucionarlo: Basta con cambiar de nombre esa clase a uno de los dos scripts, y también cambiarle las líneas que llamen a esa clase con un .new pero solo de uno de los scripts y el otro dejarlo todo igual. Normalmente eso será suficiente para solucionar la incompatibilidad.

B) Los dos modifican una misma class, y en concreto unos mismos def de la class y por eso hay incompatibilidad.

B1) Alguno utiliza alias (lo verás porque antes del def repetido hay un "alias"
- Cómo solucionarlo: Se soluciona poniendo el script que utiliza alias debajo del otro script. Normalmente eso ya lo arregla aunque hay excepciones.

B2) Ninguno utiliza alias. Tenemos que los dos scripts modifican a su manera un def concreto (o más) de una class concreta, y como el lector de scripts solo lee la última modificación, luego lo del primero se ignora y salta error del primer script. Esto es seguramente lo más típico.
- Cómo solucionarlo: Lo que hay que hacer es mirar cual es ese def repetido y mirar en cada uno qué hay de diferente. Sin borrar nada del primer script, lo que tienes que hacer es copiar lo nuevo (o no repetido) del segundo script allí mismo al primero, que quede todo junto y con el órden que te parezca más lógico. Luego una vez copiado lo distinto, borra el def entero del segundo script. (Bórralo poniendo # deltante de todas las líneas y no eliminándolo directamente por si acaso)
En principio si no hay más def repetidos, debería irte bien.

C) Otros motivos poco usuales (entre ellos alguno quizá imposible de solucionar)

Esto es todo, espero que os sea de ayuda esta guía. Postead cualquier duda o comentario que tengais sobre esto. Sé que se puede profundizar más.
avatar
Wecoc
Administrador
Administrador



Créditos 9138

Gracias : 472

Volver arriba Ir abajo

Re: Guía: Solucionar mensajes de error de scripts (para inexpertos)

Mensaje por youkai el 2012-12-30, 04:51

Esto es para ayudar a reconocer errores o un tuto para enseñar a programar a los users del foro?? XDDDD
En cualquier caso esta muy buena la guia(yo la lei completa) y para aquellos que se arrancan los pelos por una letra que se salio de un comentario, pues les viene de maravilla XD
Saludos,
¥oukai
avatar
youkai
Soñador
Soñador

0/3

Créditos 280

Gracias : 10

http://sharingannf.wordpress.com/

Volver arriba Ir abajo

Re: Guía: Solucionar mensajes de error de scripts (para inexpertos)

Mensaje por orochii el 2012-12-30, 05:27

Vaya proyectos los que tienes Wecoc xD!!!.
===
Pues qué decir, una explicación sencilla para los errores xD. Aunque, si este tutorial cumple su cometido, el empleo para los scripters disminuirá D:!. Mal Wecoc, mal (yo me salvo porque yo no soy scripter :ribbu: :yaoming:).

xD, lindo wecorial como siempre. Algo práctico creo,
Orochii Zouveleki
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6360

Gracias : 325

http://ragnarokrproject.com/

Volver arriba Ir abajo

Re: Guía: Solucionar mensajes de error de scripts (para inexpertos)

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.