Сырое чтение и запись файлов в собственном каталоге плагина.file читает и пишет обычные файлы — байтовую строку целиком, без разбора
формата. Для структурированных данных (таблиц) есть store/datafile; file
для всего остального: csv-экспорт, готовый json, любой текстовый или бинарный
формат, который плагин собирает сам.
Все имена — только внутри plugin.data_dir(), той же папки, куда пишут
db.open() и store. Подпапок нет — name не может содержать /, \
или что-то похожее на путь.Имя — это stem или stem.ext:
stem: буквы, цифры, _, -
.ext — необязательно, ровно одна точка на всё имя, только буквы и цифры
Одно чтение или одна запись/дозапись — не больше 4 МиБ. Больше — nil и
причина, ещё до того, как файл открыт: частично записанного файла при отказе
не остаётся.
hook.add("player:death", "myplugin.kills_log", function(e) file.append("kills.csv", ("%s,%s\n"):format(e.attacker and e.attacker:name() or "world", e.player:name()))end)
Предел 4 МиБ — на один вызов, не на итоговый размер файла: у file.append
нет ограничения на то, насколько большим станет файл со временем. Для
самоограничивающегося лога с ротацией по дням — log.write.