Debug logging di Factorio mod

8

Saya sedang menulis mod Factorio, dan saya mencoba mencari tahu mengapa itu tidak berhasil. Bisakah saya melakukan semacam kesalahan / debug logging di suatu tempat? Baik manual (mencetak variabel) dan pelaporan kesalahan sederhana (mengakses properti yang tidak ada) akan bagus. Saya tahu tentang player.printmetode ini, tapi saya hanya bisa mencetak string literal, bukan objek:

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)

Saya juga sudah mencoba file log di folder aplikasi, dan berbagai mode debug (F5 / F6 dalam game), tetapi sejauh ini belum menemukan sesuatu yang berguna.

Jorn
sumber
Mungkin Anda menganggap itu akan secara otomatis menghasilkan string dari objek? Anda mungkin perlu membuat dan menggunakan semacam ToString()metode secara eksplisit .
MichaelHouse

Jawaban:

3

Menurut posting forum ini

Anda dapat meluncurkan game dari konsol, sehingga fungsi cetak standar akan mengirimkan hasilnya di sana. Anda dapat mengarahkan output itu ke file.

Ada printer cantik ular, yang dapat mencetak tabel lua - sintaks print(serpent.block(arg)).

BlueRaja - Danny Pflughoeft
sumber
1
Kedengarannya bagus, tetapi tidak cukup berhasil. Menjalankan factorio.exedari command prompt memulai permainan, tetapi segera kembali dan saya hanya melihat output dari baris log pertama. Menggunakan start factorio.exe /waittidak berfungsi, karena itu hanya membuka jendela konsol dan tidak memulai permainan sama sekali.
Jorn
1

Anda dapat menggunakan fungsi error () yang mengirim ke factorio-current.log

Sebagai contoh:

kesalahan ("Hai pemain")

atau

kesalahan (serpent_block (table_name))

DRY411S
sumber
serpent_block -> serpent.block
Tony Baguette
Ini benar-benar menunjukkan popup "kesalahan" dengan pesan di gim memuat dan mencegah mod dimuat.
Tony Baguette
0

Ada metode write_file di 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 )

File tersebut akan berakhir di folder bernama di script-outputbawah %APPDATA%/Factorio, di sebelah scenariosfolder Anda .

Martin Lütke
sumber
1
Tampaknya tidak berfungsi dari data.lua
LOST
1
data.lua bukan skrip runtime yang normal. Tujuannya adalah untuk menggambarkan struktur data dan tidak ada yang lain. Sebagian besar (semua?) Objek runtime tidak dapat diakses selama interpretasinya. Khususnya objek LuaGameScript global yang disebut game bahkan tidak ada.
Martin Lütke