Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local component = require "component"
- local fs = require "filesystem"
- local sideToText = {
- [0] = "bottom",
- "top",
- "north",
- "south",
- "west",
- "east"
- }
- local function mustWrite(f, s)
- if not f:write(s) then
- io.stderr:write("Ошибка записи в файл.\n")
- os.exit(1)
- end
- end
- local function eJsonString(s)
- s = string.gsub(s, '\\', '\\\\')
- return string.gsub(s, '"', '\\"')
- end
- local function makeItemKey(item)
- local key = tostring(item.name)
- if item.damage > 0 then
- key = key..":"..item.damage
- end
- return key
- end
- local function writeItemDesc(f, item, comma)
- mustWrite(f, '"')
- mustWrite(f, item.key)
- mustWrite(f, '" : { "name" : "')
- mustWrite(f, eJsonString(item.label))
- mustWrite(f, '", "min" : 1, "max" : 1, "fortune" : 0.5}')
- if comma then
- mustWrite(f, ',')
- end
- mustWrite(f, '\n')
- end
- local function writeCaseFile(items, fname)
- local f, err = io.open(fname, "w")
- if not f then
- io.stderr:write("Не могу создать файл: '"..fname.."' : "..err.."\n")
- os.exit(1)
- end
- f:setvbuf("line")
- local n = #items
- for i = 1, n do
- writeItemDesc(f, items[i], i < n)
- end
- f:close()
- end
- local function scanInv(tp, side)
- local items = { }
- local keys = { }
- for slot = 1, tp.getInventorySize(side) do
- local stack = tp.getStackInSlot(side, slot)
- if stack then
- local itemKey = makeItemKey(stack)
- if keys[itemKey] then
- return nil, "Дублирование предмета '"..itemKey.."'"
- end
- keys[itemKey] = true
- table.insert(items, { key = itemKey, label = stack.label })
- end
- end
- return items
- end
- -- ======машинное время (время хоста)=======
- --(установить для своего часового пояса, -12 : +13, например: -2 или 6)
- local TIME_ZONE = 2
- --(не изменять!)
- local t_correction = TIME_ZONE * 3600
- local function getTimeHost()
- local file = io.open('/home/unix.tmp', 'w')
- file:write('')
- file:close()
- local lastmod = tonumber(string.sub(fs.lastModified('/home/unix.tmp'), 1, -4)) + t_correction
- -- Вариант 4, все в куче, как мы привыкли, в правильном формате
- local dt = os.date('%Y_%m_%d_%H_%M_%S', lastmod)
- return dt
- end
- local function main()
- local caseDir = "/home/cases_"..getTimeHost()
- local ok, err = fs.makeDirectory(caseDir)
- if not ok then
- io.stderr:write("Не могу создать каталог '"..caseDir.."' : "..err.."\n")
- os.exit(1)
- end
- for addr in component.list("transposer") do
- local tp = component.proxy(addr)
- for side = 0, 5 do
- if tp.getInventorySize(side) ~= nil then
- local id = tp.address:sub(1, 3).."_"..sideToText[side]:sub(1, 1)
- local items, errScan = scanInv(tp, side)
- if not items then
- io.stderr:write(errScan.." в сундуке "..id.."\n")
- os.exit(1)
- end
- local fname = fs.concat(caseDir, "case_"..id)
- writeCaseFile(items, fname)
- end
- end
- end
- end
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement