Debug-Protokollierung in Factorio mod


8

Ich schreibe einen Factorio-Mod und versuche herauszufinden, warum er nicht funktioniert. Kann ich irgendwo eine Art Fehler- / Debug-Protokollierung durchführen? Sowohl manuelle (Druckvariablen) als auch einfache Fehlerberichte (Zugriff auf eine nicht vorhandene Eigenschaft) wären großartig. Ich kenne die player.printMethode, kann sie aber nur zum Drucken von Zeichenfolgenliteralen und nicht von Objekten verwenden:

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)

Ich habe auch die Protokolldatei im Anwendungsordner und die verschiedenen Debug-Modi (F5 / F6 im Spiel) ausprobiert, aber bisher nichts Nützliches gefunden.


Vielleicht nehmen Sie an, dass automatisch eine Zeichenfolge aus dem Objekt generiert wird? Möglicherweise müssen Sie erstellen und explizit eine Art verwenden ToString()Methode.
MichaelHouse

Antworten:


3

Nach diesem Forumsbeitrag

Sie können das Spiel von der Konsole aus starten, sodass die Standarddruckfunktion die Ausgabe dorthin sendet. Sie können diese Ausgabe in Dateien umleiten.

Es gibt einen hübschen Schlangendrucker, der Lua-Tabellen drucken kann - Syntax ist print(serpent.block(arg)).


1
Hört sich gut an, funktioniert aber nicht ganz. Das Ausführen factorio.exean der Eingabeaufforderung startet das Spiel, kehrt jedoch sofort zurück und ich sehe nur die Ausgabe der ersten Protokollzeile. Die Verwendung start factorio.exe /waitfunktioniert auch nicht, da sie nur ein Konsolenfenster öffnet und das Spiel überhaupt nicht startet.
Jorn

1

Sie können die Funktion error () verwenden, die an factorio-current.log gesendet wird

Zum Beispiel:

Fehler ("Hi Player")

oder

Fehler (Serpent_block (Tabellenname))


serpent_block -> serpent.block
Tony Baguette

Es zeigt tatsächlich ein "Fehler" -Popup mit der Meldung beim Laden des Spiels und verhindert, dass der Mod geladen wird.
Tony Baguette

0

In LuaGameScript gibt es eine write_file-Methode.

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 )

Die Datei wird in einem Ordner mit dem Namen script-outputunter %APPDATA%/Factorioneben Ihrem scenariosOrdner gespeichert .


1
Scheint nicht zu Arbeit von data.lua
LOST

1
data.lua ist kein normales Laufzeitskript. Ihr Zweck ist es, eine Datenstruktur und nichts anderes zu beschreiben. Auf die meisten (alle?) Laufzeitobjekte kann während der Interpretation nicht zugegriffen werden. Insbesondere das globale LuaGameScript-Objekt namens game existiert dann noch nicht einmal.
Martin Lütke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.