Registrazione debug in Factorio mod


8

Sto scrivendo un mod Factorio e sto cercando di capire perché non funziona. Posso fare una sorta di registrazione errori / debug da qualche parte? Sia la segnalazione manuale (variabili di stampa) che la semplice segnalazione di errori (accesso a una proprietà che non esiste) sarebbe ottima. Conosco il player.printmetodo, ma posso ottenerlo solo per stampare letterali di stringhe, non oggetti:

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)

Ho anche provato il file di registro nella cartella dell'applicazione e le varie modalità di debug (F5 / F6 nel gioco), ma finora non ho trovato nulla di utile.


Forse stai supponendo che genererà automaticamente una stringa dall'oggetto? Potrebbe essere necessario creare e utilizzare esplicitamente un qualche tipo di ToString()metodo.
MichaelHouse

Risposte:


3

Secondo questo post sul forum

Puoi avviare il gioco dalla console, quindi la funzione di stampa standard invierà il suo output lì. È possibile reindirizzare l'output su file.

C'è una bella stampante serpent, che può stampare tabelle lua - la sintassi è print(serpent.block(arg)).


1
Sembra buono, ma non funziona del tutto. L'esecuzione factorio.exedal prompt dei comandi avvia il gioco, ma ritorna immediatamente e vedo solo l'output della prima riga di registro. Anche l'utilizzo start factorio.exe /waitnon funziona, perché apre solo una finestra della console e non avvia affatto il gioco.
Jorn,

1

È possibile utilizzare la funzione error () che invia a factorio-current.log

Per esempio:

errore ("Ciao giocatore")

o

errore (serpent_block (table_name))


serpent_block -> serpent.block
Tony Baguette

In realtà mostra un popup "errore" con il messaggio durante il caricamento del gioco e impedisce il caricamento della mod.
Tony Baguette,

0

Esiste un metodo write_file in 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 )

Il file finirà in una cartella chiamata script-outputsotto %APPDATA%/Factorio, accanto alla tua scenarioscartella.


1
Non sembra funzionare da data.lua
PERSO il

1
data.lua non è uno script di runtime normale. Il suo scopo è descrivere una struttura di dati e nient'altro. La maggior parte degli oggetti (tutti?) Di runtime non sono accessibili durante la sua interpretazione. In particolare, l'oggetto globale LuaGameScript chiamato game non esiste nemmeno allora.
Martin Lütke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.