Отладка логов в моде Factorio

8

Я пишу мод Factorio и пытаюсь понять, почему он не работает. Могу ли я где-нибудь сделать какую-нибудь запись ошибок / отладки? И ручное (печать переменных), и простое сообщение об ошибке (доступ к несуществующему свойству) было бы здорово. Я знаю о 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)).

BlueRaja - Дэнни Пфлугхофт
источник
1
Звучит хорошо, но это не совсем работает. Запуск factorio.exeиз командной строки запускает игру, но сразу возвращается, и я вижу только вывод первой строки журнала. Использование start factorio.exe /waitтакже не работает, потому что оно только открывает окно консоли и вообще не запускает игру.
Jorn
1

Вы можете использовать функцию error (), которая отправляет factorio-current.log

Например:

ошибка («Привет, игрок»)

или

Ошибка (serpent_block (table_name))

DRY411S
источник
serpent_block -> serpent.block
Тони Багет
Это фактически показывает всплывающее окно «ошибка» с сообщением при загрузке игры и предотвращает загрузку мода.
Тони Багет
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 - это не обычный сценарий выполнения. Его цель - описать структуру данных и ничего больше. Большинство (все?) Объекты времени выполнения недоступны во время его интерпретации. В частности, глобальный объект LuaGameScript, называемый game, тогда даже не существует.
Мартин Лютке