Factorio modでのログのデバッグ


8

私はFactorio modを書いていて、それが機能しない理由を理解しようとしています。ある種のエラー/デバッグログをどこかで実行できますか?手動(変数を出力する)と単純なエラー報告(存在しないプロパティにアクセスする)の両方が素晴らしいでしょう。player.printメソッドについては知っていますが、オブジェクトではなく文字列リテラルを出力するためにのみ取得できます。

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)

アプリケーションフォルダーのログファイルとさまざまなデバッグモード(ゲームではF5 / F6)も試しましたが、これまでのところ、有用なものは何も見つかりませんでした。


おそらく、それがオブジェクトから文字列を自動的に生成すると想定しているのでしょうか?ある種のToString()メソッドを作成して明示的に使用する必要がある場合があります。
MichaelHouse

回答:


3

このフォーラムの投稿によると

コンソールからゲームを起動できるので、標準の印刷機能がその出力をそこに送信します。その出力をファイルにリダイレクトできます。

luaテーブルを印刷できる蛇のプリティプリンターがありますprint(serpent.block(arg))。構文はです。


1
いい感じですが、うまくいきません。factorio.exeコマンドプロンプトから実行するとゲームが開始されますが、すぐに戻り、最初のログ行の出力しか表示されません。を使用start factorio.exe /waitしても機能しません。コンソールウィンドウを開くだけで、ゲームはまったく起動しません。
ジョーン

1

factorio-current.logに送信するerror()関数を使用できます

例えば:

エラー( "こんにちはプレーヤー")

または

エラー(serpent_block(table_name))


serpent_block-> serpent.block
トニーバゲット

実際には、ゲームのロード時に「エラー」ポップアップが表示され、MODがロードされません。
トニーバゲット

0

LuaGameScriptにはwrite_fileメソッドがあります。

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

ファイルと呼ばれるフォルダになってしまいますscript-outputの下に%APPDATA%/Factorio、あなたの隣に、scenariosフォルダ。


1
data.luaからは機能しないようです
LOST

1
data.luaは通常のランタイムスクリプトではありません。その目的は、データ構造のみを記述することです。ほとんど(すべて?)のランタイムオブジェクトは、解釈中にアクセスできません。特に、gameと呼ばれるグローバルLuaGameScriptオブジェクトは存在しません。
MartinLütke2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.