Перейти к содержимому
Zer0Galaxy

Программа "Перенос строений"

Рекомендуемые сообщения

Хочу перенести на сервер строение, которое когда то строил в сингле. Для этой цели планирую использовать компьютер с отладочной платой.

 

Описание: Требуется программа, позволяющая сканировать некую область пространства, сохранять в виде файла и в последствии восстанавливать эту область в другом месте. Возможно это будут две программы: одна сохраняет, другая строит. Такую программу я мог бы создать и сам, а может даже перенести админскими методами, но хочется дать кому то возможность попасть в белый список, поэтому ...

 

Награда: - белый список.

 

Установка: ПК любой комплектации + отладочная плата.

 

Требования: программа сканирования должна принимать в качестве параметров координаты левого нижнего угла области сканирования, размер области и имя файла, в который будет сохраняться результат. При сохранении в файл следует учитывать, что строение состоит из большого количества однотипных блоков, расположенных рядом. А значит не нужно каждый блок сохранять по отдельности иначе никакого диска не хватит. Как вариант, сохранять области, занятые однотипными блоками. При сканировании допускается разрушение сканируемой постройки.

 

Вопросы и предложения в этой теме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ооооочень медленно...


Сканирование почти готово. Вопрос: важна-ли метадата?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Без метадаты - уже готово. Сканирует местность, записывает в файл. Потом читает из файла и сетит блоки дебаг картой

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А  как же без нее, конечно, и ид и мета нужны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А  как же без нее, конечно, и ид и мета нужны.

Хорошо.

Итак, вот программа:

 

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. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Asummonster, меня интересует именно упаковка данных. Ты какой способ используешь?

И еще. У тебя как бы особый статус. Пустит ли тебя Алекс на сервер? Я не против, но надо уточнить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Asummonster, меня интересует именно упаковка данных. Ты какой способ используешь?

И еще. У тебя как бы особый статус. Пустит ли тебя Алекс на сервер? Я не против, но надо уточнить.

Я использую table.insert(<table>, {x, y, z, world.getBlockId(x, y, z), world.getMetadata(x, y, z)})

А в файл записываю с помощью serialization

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Asummonster, меня интересует именно упаковка данных. Ты какой способ используешь?

И еще. У тебя как бы особый статус. Пустит ли тебя Алекс на сервер? Я не против, но надо уточнить.

Дело N00987-A  c пометкой на папке красным уголком "Особо опасен" :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Я использую table.insert(, {x, y, z, world.getBlockId(x, y, z), world.getMetadata(x, y, z)})

Не-е-е. Так не пойдет. У тебя сколько блоков, столько записей в таблице. Включая пустоты. Я хочу перенести область размерами 100х100х60. Сколько ж мне жестких дисков понадобится. Давай уплотнять. Скажем, одна запись - прямоугольная область, заполненная однотипными блоками.

Изменено пользователем Zer0Galaxy

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не-е-е. Так не пойдет. У тебя сколько блоков, столько записей в таблице. Включая пустоты. Я хочу перенести область размерами 100х100х60. Сколько ж мне жестких дисков понадобится. Давай уплотнять. Скажем, одна запись - прямоугольная область, заполненная однотипными блоками.

То есть, ты хочешь такую-же штуку, как и у крутого в его конвентtре?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

То есть, ты хочешь такую-же штуку, как и у крутого в его конвентtре?

вроде такой, но можно и другую

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Оптимизированный ридер мира готов)

Изменено пользователем SergOmarov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Оптимизированный ридер мира готов)

Если не сможете зайти, напишите:https://ide.c9.io/sergomarov/copy-world

Зачем ты закрытый c9 создал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Монстр, прога по копированию, которую ты мне показывал - не пашет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Монстр, прога по копированию, которую ты мне показывал - не пашет.

Хах. А как ты её вызывал?:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как в конце в хелпе написано.


Результ: выполнилась без ошибок, но файл содержит только 2 скобки)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстро выполнилась?

Надо вызывать так: build save <х, который меньше> <у, который меньше> <z, который меньше> <x, который больше> <y, который больше> <z, который больше>

Изменено пользователем Asummonster

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Блин! По такому правилу и моя прога пашет))

Монстер, спасибо)

Изменено пользователем SergOmarov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...