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.

Jorn
fuente
¿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)).

BlueRaja - Danny Pflughoeft
fuente
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))

DRY411S
fuente
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.

Martin Lütke
fuente
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