Zer0Galaxy 2 187 Опубликовано: 8 июля, 2015 Хочу перенести на сервер строение, которое когда то строил в сингле. Для этой цели планирую использовать компьютер с отладочной платой. Описание: Требуется программа, позволяющая сканировать некую область пространства, сохранять в виде файла и в последствии восстанавливать эту область в другом месте. Возможно это будут две программы: одна сохраняет, другая строит. Такую программу я мог бы создать и сам, а может даже перенести админскими методами, но хочется дать кому то возможность попасть в белый список, поэтому ... Награда: - белый список. Установка: ПК любой комплектации + отладочная плата. Требования: программа сканирования должна принимать в качестве параметров координаты левого нижнего угла области сканирования, размер области и имя файла, в который будет сохраняться результат. При сохранении в файл следует учитывать, что строение состоит из большого количества однотипных блоков, расположенных рядом. А значит не нужно каждый блок сохранять по отдельности иначе никакого диска не хватит. Как вариант, сохранять области, занятые однотипными блоками. При сканировании допускается разрушение сканируемой постройки. Вопросы и предложения в этой теме. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asummonster 592 Опубликовано: 8 июля, 2015 Ооооочень медленно... Сканирование почти готово. Вопрос: важна-ли метадата? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asummonster 592 Опубликовано: 8 июля, 2015 Без метадаты - уже готово. Сканирует местность, записывает в файл. Потом читает из файла и сетит блоки дебаг картой Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 8 июля, 2015 А как же без нее, конечно, и ид и мета нужны. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asummonster 592 Опубликовано: 8 июля, 2015 А как же без нее, конечно, и ид и мета нужны. Хорошо. Итак, вот программа: debug=require("component").debug.getWorld() serlib=require("serialization") ser=serlib.serialize unser=serlib.unserialize args={...} function scan(xstart, ystart, zstart, xstop, ystop, zstop) tableTMP={} for y=ystart, ystop do for x=xstart, xstop do for z=zstart, zstop do tmp={x-xstop, y-ystop, z-zstop, debug.getBlockId(x, y, z), debug.getMetadata(x, y, z)} table.insert(tableTMP, tmp) print(x-xstop, y-ystop, z-zstop) end end end return tableTMP end function saveFile() file=io.open(args[8], "w") file:write(ser(scan(args[2], args[3], args[4], args[5], args[6], args[7]))) file:flush() file:close() end function place(filename, X, Y, Z) home=unser(io.lines(filename)()) for i=1, #home do x, y, z, id, meta = home[i][1]+X, home[i][2]+Y, home[i][3]+Z, home[i][4], home[i][5] debug.setBlock(x, y, z, id, meta) print(x, y, z, id) end end if args[1]==nil then print("Использование: save <xstart> <ystart> <zstart> <xstop> <ystop> <zstop> <filename>\nplace <filename> <x> <y> <z>") elseif args[1]=="save" then saveFile() elseif args[1]=="place" then place(args[2], args[3], args[4], args[5]) end Ключевой момент: все первые значения координат должны быть меньше других.То есть xstart=-150 xstop=-120; xstart=20, xstop=96. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy Автор темы 2 187 Опубликовано: 8 июля, 2015 Asummonster, меня интересует именно упаковка данных. Ты какой способ используешь? И еще. У тебя как бы особый статус. Пустит ли тебя Алекс на сервер? Я не против, но надо уточнить. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asummonster 592 Опубликовано: 8 июля, 2015 Asummonster, меня интересует именно упаковка данных. Ты какой способ используешь? И еще. У тебя как бы особый статус. Пустит ли тебя Алекс на сервер? Я не против, но надо уточнить. Я использую table.insert(<table>, {x, y, z, world.getBlockId(x, y, z), world.getMetadata(x, y, z)}) А в файл записываю с помощью serialization Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 8 июля, 2015 Asummonster, меня интересует именно упаковка данных. Ты какой способ используешь? И еще. У тебя как бы особый статус. Пустит ли тебя Алекс на сервер? Я не против, но надо уточнить. Дело N00987-A c пометкой на папке красным уголком "Особо опасен" Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy Автор темы 2 187 Опубликовано: 8 июля, 2015 (изменено) Я использую table.insert(, {x, y, z, world.getBlockId(x, y, z), world.getMetadata(x, y, z)}) Не-е-е. Так не пойдет. У тебя сколько блоков, столько записей в таблице. Включая пустоты. Я хочу перенести область размерами 100х100х60. Сколько ж мне жестких дисков понадобится. Давай уплотнять. Скажем, одна запись - прямоугольная область, заполненная однотипными блоками. Изменено 8 июля, 2015 пользователем Zer0Galaxy Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asummonster 592 Опубликовано: 8 июля, 2015 Не-е-е. Так не пойдет. У тебя сколько блоков, столько записей в таблице. Включая пустоты. Я хочу перенести область размерами 100х100х60. Сколько ж мне жестких дисков понадобится. Давай уплотнять. Скажем, одна запись - прямоугольная область, заполненная однотипными блоками. То есть, ты хочешь такую-же штуку, как и у крутого в его конвентtре? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy Автор темы 2 187 Опубликовано: 8 июля, 2015 То есть, ты хочешь такую-же штуку, как и у крутого в его конвентtре? вроде такой, но можно и другую Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov 34 Опубликовано: 15 июля, 2015 Попробую сделать. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov 34 Опубликовано: 15 июля, 2015 (изменено) Оптимизированный ридер мира готов) Изменено 16 июля, 2015 пользователем SergOmarov Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asummonster 592 Опубликовано: 15 июля, 2015 Оптимизированный ридер мира готов) Если не сможете зайти, напишите:https://ide.c9.io/sergomarov/copy-world Зачем ты закрытый c9 создал? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov 34 Опубликовано: 15 июля, 2015 Хз, вроде открытый, ща... Открыл. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov 34 Опубликовано: 24 июля, 2015 Монстр, прога по копированию, которую ты мне показывал - не пашет. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asummonster 592 Опубликовано: 24 июля, 2015 Монстр, прога по копированию, которую ты мне показывал - не пашет. Хах. А как ты её вызывал? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov 34 Опубликовано: 24 июля, 2015 Как в конце в хелпе написано. Результ: выполнилась без ошибок, но файл содержит только 2 скобки) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Asummonster 592 Опубликовано: 24 июля, 2015 (изменено) Быстро выполнилась? Надо вызывать так: build save <х, который меньше> <у, который меньше> <z, который меньше> <x, который больше> <y, который больше> <z, который больше> Изменено 24 июля, 2015 пользователем Asummonster Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov 34 Опубликовано: 24 июля, 2015 (изменено) Блин! По такому правилу и моя прога пашет)) Монстер, спасибо) Изменено 24 июля, 2015 пользователем SergOmarov Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах