Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local sModemSide = nil
- for n, sSide in ipairs(rs.getSides()) do
- if peripheral.getType(sSide) == "modem" and peripheral.call(sSide, "isWireless") then
- sModemSide = sSide
- break
- end
- end
- local modem = peripheral.wrap(sModemSide)
- local x, y, z, x1, y1, z1, x2, y2, z2, a, b, c, e, m
- local port, distance = 9991, 20
- local posX, posY, posZ = commands.getBlockPosition()
- local tSound = {'tile.piston.in', 'tile.piston.out'}
- local tCube = {}
- local function fill(x1, y1, z1, x2, y2, z2, c) -- заполнение указанного региона определенным цветом
- for x = x1, x2 do
- for y = y1, y2 do
- for z = z1, z2 do
- if not tCube[x] then
- tCube[x] = {}
- end
- if not tCube[x][y] then
- tCube[x][y] = {}
- end
- tCube[x][y][z] = c
- end
- end
- end
- end
- local function draw(x1, y1, z1, x2, y2, z2) -- отрисовка региона
- for x = x1, x2 do
- for y = y1, y2 do
- for z = z1, z2 do
- if tCube[x][y][z] then
- commands.exec('setblock ~'.. x ..' ~'.. y ..' ~'.. z ..' wool '.. tCube[x][y][z])
- end
- end
- end
- end
- commands.exec('playsound '.. tSound[math.random(1, #tSound)] ..' @a '.. posX ..' '.. posY ..' '.. posZ ..' 2 '.. 1/math.random(1, 3))
- end
- function rotator(x, y) -- принимает координаты и направление, возвращает новые координаты
- x = x-(x*2)
- return y, x
- end
- local function action(n)
- local tbl = {} -- копирование содержимого таблицы, лол
- for x = -2, 2 do
- for y = -2, 2 do
- for z = -2, 2 do
- if not tbl[x] then
- tbl[x] = {}
- end
- if not tbl[x][y] then
- tbl[x][y] = {}
- end
- tbl[x][y][z] = tCube[x][y][z]
- end
- end
- end
- -- команды вращения
- if n%2 == 1 then
- y1 = 1
- else
- y1 = -2
- end
- for y = y1, y1+1 do
- for x = -2, 2 do
- for z = -2, 2 do
- x1, z1 = rotator(x, z)
- if n == 1 or n == 2 then -- U, D
- tCube[x][y][z] = tbl[x1][y][z1]
- elseif n == 3 or n == 4 then -- R, L
- tCube[x][z][y] = tbl[x1][z1][y]
- elseif n == 5 or n == 6 then -- F, B
- tCube[y][x][z] = tbl[y][x1][z1]
- end
- end
- end
- end
- end
- local function shft(a, b)
- for i = 1, b do
- action(a)
- end
- end
- fill(-2, -2, -2, 2, 2, 2, 15)
- fill(-1, -1, -1, 1, 1, 1, nil)
- fill(-1, 2, -1, 1, 2, 1, 14)
- fill(-1, -2, -1, 1, -2, 1, 1)
- fill(2, -1, -1, 2, 1, 1, 5)
- fill(-2, -1, -1, -2, 1, 1, 11)
- fill(-1, -1, 2, 1, 1, 2, 0)
- fill(-1, -1, -2, 1, 1, -2, 4)
- draw(-2, -2, -2, 2, 2, 2)
- modem.open(port)
- while true do
- e = {os.pullEvent("modem_message")}
- if e[6] < distance then
- m = e[5]:sub(1, 1)
- if e[5]:sub(2, 2) == "'" then
- c = 3
- else
- c = 1
- end
- if m == "U" then
- shft(1, c)
- draw(-2, 1, -2, 2, 2, 2)
- elseif m == "D" then
- shft(2, c)
- draw(-2, -2, -2, 2, -1, 2)
- elseif m == "L" then
- shft(3, c)
- draw(-2, -2, 1, 2, 2, 2)
- elseif m == "R" then
- shft(4, c)
- draw(-2, -2, -2, 2, 2, -1)
- elseif m == "F" then
- shft(5, c)
- draw(1, -2, -2, 2, 2, 2)
- elseif m == "B" then
- shft(6, c)
- draw(-2, -2, -2, -1, 2, 2)
- elseif m == "C" then
- os.reboot()
- elseif m == "S" then
- for i = 1, 25 do
- shft(math.random(1, 6), math.random(1, 3))
- end
- draw(-2, -2, -2, 2, 2, 2)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement