Depuração de log no mod Factorio

8

Estou escrevendo um mod Factorio e tentando descobrir por que não funciona. Posso fazer algum tipo de log de erro / depuração em algum lugar? Seria ótimo tanto o manual (variáveis ​​de impressão) quanto o simples relatório de erros (acessar uma propriedade que não existe). Eu sei sobre o player.printmétodo, mas só consigo imprimir literais de string, não 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)

Eu também tentei o arquivo de log na pasta do aplicativo e os vários modos de depuração (F5 / F6 no jogo), mas até agora não encontrei nada útil.

Jorn
fonte
Talvez você esteja assumindo que ele gerará automaticamente uma string do objeto? Pode ser necessário criar e usar explicitamente algum tipo deToString() método.
Michaelhouse

Respostas:

3

De acordo com este post do fórum

Você pode iniciar o jogo no console, para que a função de impressão padrão envie sua saída para lá. Você pode redirecionar essa saída para arquivos.

Há uma impressora bonita serpente, que pode imprimir tabelas lua - a sintaxe é print(serpent.block(arg)).

BlueRaja - Danny Pflughoeft
fonte
11
Parece bom, mas não funciona. A execução factorio.exeno prompt de comando inicia o jogo, mas retorna imediatamente e só vejo a saída da primeira linha de log. O uso start factorio.exe /waittambém não funciona, porque apenas abre uma janela do console e não inicia o jogo.
Jorn
1

Você pode usar a função error () que envia para factorio-current.log

Por exemplo:

erro ("Oi player")

ou

erro (serpent_block (table_name))

DRY411S
fonte
serpent_block -> serpent.block #
Tony Baguette
Na verdade, ele mostra um pop-up de "erro" com a mensagem no carregamento do jogo e impede que o mod seja carregado.
Tony Baguette
0

Existe um método write_file no 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 )

O arquivo terminará em uma pasta chamada script-outputabaixo %APPDATA%/Factorio, ao lado da sua scenariospasta.

Martin Lütke
fonte
11
Não parece trabalho a partir data.lua
PERDIDO
11
data.lua não é um script de tempo de execução normal. Seu objetivo é descrever uma estrutura de dados e nada mais. A maioria dos objetos de tempo de execução (todos?) Não é acessível durante sua interpretação. Em particular, o objeto global LuaGameScript chamado game nem existe.
Martin Lütke