mwBot
Get test api key
English zone
sección española
MW Bot Usage Calculator
Download bot
last update files

 

Manejo de errores de juego y errores de script

Started by Nikolaj, 21 July 2024, 19:16

Previous topic - Next topic

Nikolaj

Manejo de errores en la operación del script

Durante la ejecución del script, pueden ocurrir algunos errores, por ejemplo, el menú no se ha cargado y el bot está intentando encontrar una línea, en cuyo caso el script terminará con un error.
También, el script se interrumpirá si no encuentra la línea que necesitas, por ejemplo, quieres que el bot tome una botella azul del almacén, pero no está allí, en cuyo caso el script se saldrá y lanzará un error.
Para tales casos, el bot proporciona los siguientes manejadores de eventos:
La línea de abajo procesará todo un bloque de pulsaciones de teclas y, en caso de error, el bot procederá a ejecutar el script desde la línea 20:. Puedes escribir el nombre del manejador de eventos arbitrariamente.
add_action_speak=error={"text":["^event_keypress_error"], "command":["go_to_line", 20]}La línea de abajo procesará el error punto por punto; en este ejemplo, el error puede ocurrir en la línea 20, en cuyo caso el bot procederá a ejecutar el script desde la línea 10.
add_action_speak=k_error1={"text":["^event_keypress_error_20"], "command": ["go_to_line", 10]}La línea de abajo funcionará si se cumple la condición y no hay error, entonces el bot ejecutará el script desde la línea 32.
add_action_speak=k_ok={"text":["^event_keypress_ok"], "command":["go_to_line", 32]}La línea de abajo funcionará si se cumple la condición en la línea 29, entonces el bot procederá a ejecutar el script desde la línea 32.
add_action_speak=k_ok1={"text":["^event_keypress_ok_29"], "command":["go_to_line", 32]}La línea de abajo te permite ignorar errores puntuales en la función keypress=keyname=text
skip_keypress_error
Es decir, si trabajas con el menú, necesitas escribir skip_keypress_error antes de cada pulsación de tecla keypress=keyname. Los errores serán manejados usando manejadores de eventos.
Para mayor claridad, publicaré un ejemplo de un script que pondrá los ítems que necesitas en un almacén.
Cuando el script no encuentra los ítems especificados en tu bolsa, simplemente se saldrá.
Este script es universal y funciona igual con la interfaz de juego en inglés y español.
Debajo hay una variable en la que especificas una lista de ítems que el bot pondrá automáticamente en el almacén
var=items=(Goblin|Gnome|Dark elf|Dwarf)Debajo necesitas indicar el primer ítem en tu bolsa, el cual el juego menciona cuando se abre el menú para seleccionar ítems para poner en el almacén.
var=firstitem=^\d+\sArnebia
enable_restart
open_game_window
Deshabilita la pulsación periódica de la tecla Escape para que el bot no cierre el menú.
disable_key_escEstablece la velocidad de búsqueda de objetivo, en nuestro caso es npc (Almacén)
search_object_timeout=0.1Debajo creamos un manejador de eventos; si ocurre un error durante la ejecución del script, el bot ejecutará el script desde la línea 26.
add_action_speak=error={"text":["^event_keypress_error"], "command":["go_to_line", 26]}Ignorar errores al presionar keypress
skip_keypress_error
enable_search_object=Almacén espaciotemporal|Ansible Space-Time Storehouse=10
keypress=enter
Esperamos a que se abra el menú del almacén
waitspeak=Almacén de objetos|item storagePuede ocurrir un error en la línea de abajo, lo hemos manejado arriba. Este script puede ser procesado punto por punto. Si hay un error en la línea de abajo, es mejor ejecutar el script de nuevo. En el ejemplo actual, el script simplemente saldrá. No preví esto cuando escribí este script.
keypress=s=Depositar objetos|deposit item
timewait=0.1
Abre la lista de ítems que pueden ser puestos en almacenamiento
keypress=enterEsperamos a que el juego diga el nombre del primer ítem en nuestra bolsa
waitspeak=%firstitem%Ignorar el error
skip_keypress_errorEstamos buscando objetos cuyos nombres indicamos en la variable. Si el bot no los encuentra, considerará que todos los ítems han sido puestos en el almacén y completará su trabajo. Ten en cuenta que puse el valor numérico en paréntesis; usaré este valor más adelante en la variable.
keypress=w=(\d+).*?%items%
timewait=0.01
keypress=enter
timewait=1
Se ha abierto un campo para ingresar el número de ítems, escribo el valor usando la variable que mencioné anteriormente.
write=~~1
timewait=0.05
keypress=enter
Esperamos un mensaje de éxito.
waitspeak=^Depositado|depositedIniciamos el ciclo nuevamente y añadimos ítems hasta que pongamos todo lo que se especificó en la variable al inicio del script.
go_to_line=10Debajo está la línea 26, a la que el script irá si recibe un error.
sleep=1
break
Manejo de errores del juego

El juego también tiene errores, cuando presionas teclas el personaje no reacciona, y solo escuchas los nombres de las teclas que presionas.
Para manejar esto, el bot tiene la función enable_key_esc
Está habilitada por defecto, para trabajar con el menú del juego, necesitas deshabilitarla usando la función
disable_key_escNo olvides encenderla si, por ejemplo, después de trabajar con el menú tu personaje necesita ir a algún lugar.
El bot presiona brevemente la tecla Escape periódicamente. De esta manera el juego se cerrará y el bot lo reiniciará y continuará con el script.
También a veces el juego puede congelarse por razones desconocidas, tu personaje puede moverse, pero cuando presionas la tecla "R", no obtienes el estado de salud del personaje.
Hay una función para manejar este error
no_regen_data=int númeroSi después de un número de veces no es posible obtener los indicadores de hp/mp, entonces consideramos que el juego está congelado y terminamos el proceso con el juego.
El valor predeterminado es 5. Si el bot no recibe un valor de salud 5 veces, el juego se reiniciará.
Otros

Puedes reportar errores encontrados en el bot enviando el siguiente comando en la ventana de chat:
/report tu mensaje