Registro de depuración en Factorio mod


8

Estoy escribiendo un mod Factorio, y estoy tratando de descubrir por qué no funciona. ¿Puedo hacer algún tipo de registro de error / depuración en alguna parte? Tanto el manual (variables de impresión) como el simple informe de errores (acceder a una propiedad que no existe) sería genial. Conozco el player.printmétodo, pero solo puedo hacer que imprima literales de cadena, no objetos:

script.on_event(defines.events.on_player_created, function(event)
    pcall(function()
        local player = game.get_player(event.player_index)
        player.print("Hi player") -- works
        player.print(player) -- does not work. Any error message would be nice
    end)
end)

También probé el archivo de registro en la carpeta de la aplicación y los diversos modos de depuración (F5 / F6 en el juego), pero hasta ahora no he encontrado nada útil.


¿Tal vez estás asumiendo que generará automáticamente una cadena del objeto? Es posible que deba crear y utilizar explícitamente algún tipo de ToString()método.
— MichaelHouse

Respuestas:


3

De acuerdo con esta publicación del foro

Puede iniciar el juego desde la consola, por lo que la función de impresión estándar enviaría su salida allí. Puede redirigir esa salida a los archivos.

Hay una impresora bonita serpiente, que puede imprimir tablas lua, la sintaxis es print(serpent.block(arg)).


1
Suena bien, pero no funciona del todo. Ejecutar factorio.exedesde el símbolo del sistema inicia el juego, pero regresa de inmediato y solo veo el resultado de la primera línea de registro. El uso start factorio.exe /waittampoco funciona, porque solo abre una ventana de consola y no inicia el juego en absoluto.
— Jorn

1

Puede usar la función error () que se envía a factorio-current.log

Por ejemplo:

error ("Hola jugador")

o

error (serpent_block (nombre_tabla))


serpent_block -> serpent.block
— Tony Baguette

En realidad, muestra una ventana emergente de "error" con el mensaje al cargar el juego y evita que se cargue el mod.
— Tony Baguette

0

Hay un método write_file en LuaGameScript.

game.write_file("mylog.log", serpent_block(table_name)) -- normal write
game.write_file("mylog.log", serpent_block(table_name), true) -- appending

( http://lua-api.factorio.com/0.15.23/LuaGameScript.html#LuaGameScript.write_file )

El archivo terminará en una carpeta llamada script-outputdebajo %APPDATA%/Factorio, al lado de su scenarioscarpeta.


1
No parece funcionar a partir de data.lua
— PERDIDO el

1
data.lua no es un script de tiempo de ejecución normal. Su propósito es describir una estructura de datos y nada más. La mayoría de los objetos de tiempo de ejecución (¿todos?) No son accesibles durante su interpretación. En particular, el objeto global LuaGameScript llamado juego ni siquiera existe entonces.
— Martin Lütke
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.