Journalisation du débogage dans le mod Factorio

8

J'écris un mod Factorio et j'essaie de comprendre pourquoi cela ne fonctionne pas. Puis-je effectuer une sorte de journalisation des erreurs / débogages quelque part? Les rapports manuels (variables d'impression) et simples (erreur d'accès à une propriété qui n'existe pas) seraient parfaits. Je connais la player.printméthode, mais je ne peux l'obtenir que pour imprimer des littéraux de chaîne, pas des objets:

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)

J'ai également essayé le fichier journal dans le dossier d'application et les différents modes de débogage (F5 / F6 dans le jeu), mais jusqu'à présent, je n'ai rien trouvé d'utile.

Jorn
la source
Vous supposez peut-être qu'il générera automatiquement une chaîne à partir de l'objet? Vous devrez peut-être créer et utiliser explicitement une sorte de ToString()méthode.
MichaelHouse

Réponses:

3

Selon ce post du forum

Vous pouvez lancer le jeu à partir de la console, donc la fonction d'impression standard enverrait sa sortie là-bas. Vous pouvez rediriger cette sortie vers des fichiers.

Il y a une jolie imprimante serpent, qui peut imprimer des tables lua - la syntaxe est print(serpent.block(arg)).

BlueRaja - Danny Pflughoeft
la source
1
Sonne bien, mais ça ne marche pas tout à fait. L'exécution à factorio.exepartir de l'invite de commande démarre le jeu, mais revient immédiatement et je ne vois que la sortie de la première ligne de journal. L'utilisation start factorio.exe /waitne fonctionne pas non plus, car elle ouvre uniquement une fenêtre de console et ne démarre pas du tout le jeu.
Jorn
1

Vous pouvez utiliser la fonction error () qui envoie à factorio-current.log

Par exemple:

erreur ("Salut joueur")

ou

erreur (serpent_block (nom_table))

DRY411S
la source
serpent_block -> serpent.block
Tony Baguette
Il affiche en fait une fenêtre "erreur" avec le message lors du chargement du jeu et empêche le chargement du mod.
Tony Baguette le
0

Il existe une méthode write_file dans 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 )

Le fichier se retrouvera dans un dossier appelé script-outputsous %APPDATA%/Factorio, à côté de votre scenariosdossier.

Martin Lütke
la source
1
Ne semble pas fonctionner de data.lua
LOST
1
data.lua n'est pas un script d'exécution normal. Son but est de décrire une structure de données et rien d'autre. La plupart (tous?) Des objets d'exécution ne sont pas accessibles lors de son interprétation. En particulier, l'objet global LuaGameScript appelé jeu n'existe même pas alors.
Martin Lütke