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.