Doob
-
Публикации
1 089 -
Зарегистрирован
-
Посещение
-
Победитель дней
141
Сообщения, опубликованные пользователем Doob
-
-
Можно, но потребуется массив из 12 проекторов.
-

Потому-что можем!
-
2
-
-
Можно сделать так:

Но из-за прозрачности, мне голограммы не очень нравятся, с таким кубиком можно будет играть только в тёмной комнате из черной шерсти.
-
1
-
-
Я думал об этом, но первое, что пришло на ум это копирование заготовок, а это убогий костыль и в 1.7.10 копирования нет.
Если состояние блока можно задавать одним параметром как для ванильных (ступеньки/таблички), то надо только добавить пару строк в функцию отрисовки.
-
В честь "недели игр" на форуме, решил выложить данное поделие.
Собственно, для запуска необходим микроконтроллер, содержащий дебаг-карту и WiFi.
Устанавливаем эту прошивку: pastebin get PX0k2kb8 cube
Управляется командами из стандартной нотации UDFBLR, для поворота в обратную сторону, к команде добавляется апостроф (U' R').
Дополнительные команды:
C - сброс к исходному состоянию
S - случайное перемешивание

-
11
-
-
У каждого своя шиза (с)
-
Ага, но это не граф, а алгоритм, т. к. он постоянно меняется, вследствие имитации многомерности (скорее это просто набор правил для генерации графов). Похожесть комнат на кубы это всего-лишь условность, будто реальность преобразуется в привычный для игрока вид, а все, что игрок не видит, смещено относительно его реальности и недоступно для взаимодействия (хотя весь смысл в наличии косвенного воздействия на лабиринт).
Подобные примеры есть в играх knossu, Antichamber и еще в куче инди-самоделок, там связанные переходы не имитируются, а в майне такого не провернуть, т. к. нет доступа к рендер-движку, для имитации доступен только setblock и tp, поэтому все так хардкорно.
-
Глянул код, функция зарядки вообще не используется, надо будет поправить. Хотя, я на ванильке играл, без чанклоадера на 32x32 вполне хватает энергии.
-
Пробный шарик: http://pastebin.com/0agG1q18
Имитация магнитной пленки неудачная, но можно оставить так и разбивать голограмму на 4 блока, т. к. можно только жертвовать памятью или указывать позицию вручную (хотя, можно сделать более рациональный алгоритм, я об этом не думал) -
Лабиринт уже давно готов, строить его никому не надо, он сам строится. Нету самого главного - единой системы управления ловушками.
Если накидают идей с ловушками, то остается их реализовать и создать мирок для лабиринта.
-
Не все так просто, чтобы поставить ступеньку вверх ногами, над ней должен быть блок, т. к. робот проверяет сверху наличие блока для опоры, для других сторон так же. Ангел-апгрейд не поможет.
-
1
-
-
Что-то типа такого?
local component = require('component') local gpu = component.gpu local event = require('event') local term = require('term') local reactor if component.isAvailable('reactor') then reactor = component.reactor elseif component.isAvailable('reactor_chamber') then reactor = component.reactor_chamber end local tbl = { { {3, 2}, {9, 2}, {15, 2}, {3, 5}, {9, 5}, {15, 5}, {3, 8}, {9, 8}, {15, 8}, {3, 11}, {9, 11}, {15, 11}, {3, 14}, {9, 14}, {15, 14}, {3, 17}, {9, 17}, {15, 17} }, { {3, 2}, {9, 2}, {15, 2}, {21, 2}, {3, 5}, {9, 5}, {15, 5}, {21, 5}, {3, 8}, {9, 8}, {15, 8}, {21, 8}, {3, 11}, {9, 11}, {15, 11}, {21, 11}, {3, 14}, {9, 14}, {15, 14}, {21, 14}, {3, 17}, {9, 17}, {15, 17}, {21, 17}}, { {3, 2}, {9, 2}, {15, 2}, {21, 2}, {27, 2}, {3, 5}, {9, 5}, {15, 5}, {21, 5}, {27, 5}, {3, 8}, {9, 8}, {15, 8}, {21, 8}, {27, 8}, {3, 11}, {9, 11}, {15, 11}, {21, 11}, {27, 11}, {3, 14}, {9, 14}, {15, 14}, {21, 14}, {27, 14}, {3, 17}, {9, 17}, {15, 17}, {21, 17}, {27, 17}}, { {3, 2}, {9, 2}, {15, 2}, {21, 2}, {27, 2}, {33, 2}, {3, 5}, {9, 5}, {15, 5}, {21, 5}, {27, 5}, {33, 5}, {3, 8}, {9, 8}, {15, 8}, {21, 8}, {27, 8}, {33, 8}, {3, 11}, {9, 11}, {15, 11}, {21, 11}, {27, 11}, {33, 11}, {3, 14}, {9, 14}, {15, 14}, {21, 14}, {27, 14}, {33, 14}, {3, 17}, {9, 17}, {15, 17}, {21, 17}, {27, 17}, {33, 17}}, { {3, 2}, {9, 2}, {15, 2}, {21, 2}, {27, 2}, {33, 2}, {39, 2}, {3, 5}, {9, 5}, {15, 5}, {21, 5}, {27, 5}, {33, 5}, {39, 5}, {3, 8}, {9, 8}, {15, 8}, {21, 8}, {27, 8}, {33, 8}, {39, 8}, {3, 11}, {9, 11}, {15, 11}, {21, 11}, {27, 11}, {33, 11}, {39, 11}, {3, 14}, {9, 14}, {15, 14}, {21, 14}, {27, 14}, {33, 14}, {39, 14}, {3, 17}, {9, 17}, {15, 17}, {21, 17}, {27, 17}, {33, 17}, {39, 17}}, { {3, 2}, {9, 2}, {15, 2}, {21, 2}, {27, 2}, {33, 2}, {39, 2}, {45, 2}, {3, 5}, {9, 5}, {15, 5}, {21, 5}, {27, 5}, {33, 5}, {39, 5}, {45, 5}, {3, 8}, {9, 8}, {15, 8}, {21, 8}, {27, 8}, {33, 8}, {39, 8}, {45, 8}, {3, 11}, {9, 11}, {15, 11}, {21, 11}, {27, 11}, {33, 11}, {39, 11}, {45, 11}, {3, 14}, {9, 14}, {15, 14}, {21, 14}, {27, 14}, {33, 14}, {39, 14}, {45, 14}, {3, 17}, {9, 17}, {15, 17}, {21, 17}, {27, 17}, {33, 17}, {39, 17}, {45, 17}}, { {3, 2}, {9, 2}, {15, 2}, {21, 2}, {27, 2}, {33, 2}, {39, 2}, {45, 2}, {51, 2}, {3, 5}, {9, 5}, {15, 5}, {21, 5}, {27, 5}, {33, 5}, {39, 5}, {45, 5}, {51, 5}, {3, 8}, {9, 8}, {15, 8}, {21, 8}, {27, 8}, {33, 8}, {39, 8}, {45, 8}, {51, 8}, {3, 11}, {9, 11}, {15, 11}, {21, 11}, {27, 11}, {33, 11}, {39, 11}, {45, 11}, {51, 11}, {3, 14}, {9, 14}, {15, 14}, {21, 14}, {27, 14}, {33, 14}, {39, 14}, {45, 14}, {51, 14}, {3, 17}, {9, 17}, {15, 17}, {21, 17}, {27, 17}, {33, 17}, {39, 17}, {45, 17}, {51, 17}} } local tSize = {[22] = 1, [28] = 2, [34] = 3, [40] = 4, [46] = 5, [52] = 6, [58] = 7} local r_t = tSize[reactor.getInventorySize()] local side_r = 3 local function list() for k = 1, #tbl[r_t] do local item = reactor.getStackInSlot(k) if item ~= nil then gpu.fill(tbl[r_t][k][1], tbl[r_t][k][2], 3, 2, '#') end end end local function setka() for i = 1, #tbl[7] do gpu.fill(tbl[7][i][1], tbl[7][i][2], 3, 2, 'X') end end local function click() while 1 do local e = {event.pull('touch')} for j = 1, #tbl[r_t] do if e[3] >= tbl[r_t][j][1] and e[4] >= tbl[r_t][j][2] and e[3] <= tbl[r_t][j][1]+3 and e[4] <= tbl[r_t][j][2]+2 then term.clear() setka() list() local item = reactor.getStackInSlot(j) if item ~= nil then gpu.set(1, 20, 'item: '..item.display_name) if item.dmg ~= nil and item.max_dmg ~= nil then gpu.set(30, 20, ' '.. string.sub(item.dmg/item.max_dmg, 1, 4) .. '%') end break end end end gpu.set(1, 21, 'energy: '..reactor.getEUOutput()) gpu.set(1, 22, 'heat: '..string.sub(reactor.getHeat()/reactor.getMaxHeat(), 1, 4)..' %') end end term.clear() setka() list() click()Как руки дойдут - доведу до ума.
-
пересмотрите пожалуйста весь код, очень часто попадается ошибка двойного написания local. а также ругается на inv_scaner в 615 строке, разобраться что он требует не вышло
Спасибо за информацию, правил все автозаменой, даже не смотрел в код.
Проверил в майнерсе, работает, но из-за неизвестного препятствия вернулся, не обработав весь объем.
Бедрок плоский, не знаю, во что там можно упереться, зато работает.
Ты оптимизировал код Артёма или это свой ?
Выше написано, я немного подчистил мусор и добавил использование связанной карты.
Могу выложить свой, но этих геокопалок и так уже, как грязи.
-
По сравнению с мониторами, голограмма заливается быстрее, (правда, шрифт я использовал 3x3 пикселя)
Для каких-нибудь динамичных рекламных панелей вполне сгодится (масштаб-то ого-го! да и просунуть можно туда, куда монитор не влезет), а клавиатуру заменить не трудно.
-
2
-
-
Да ладно, было-бы меньше возни и больше места, я бы проекторы вместо мониторов использовал, у них скорость вывода намного больше, чем у gpu
-
1
-
-
-7 базовых компонентов, итого: 57 батбоксов максимум
-
12 адаптеров? Может быть 12 хранилищ? Потому-что 60 компонентов ни один сервер не потянет.
Сделал небольшой скрипт вывода информации, можно добавлять компоненты в определенном порядке, воспользовавшись функцией 'add'
local component = require('component') local event = require('event') local term = require('term') local e local tType = { 'batbox', 'cesu', 'mfe', 'mfsu', 'chargepad_batbox', 'chargepad_cesu', 'chargepad_mfe', 'chargepad_mfsu' } local tStore = {} local function add() while 1 do e = {event.pull()} for i = 1, #tType do if e[1] == 'component_added' and tType[i] == e[3] then table.insert(tStore, e[2]) print('added', e[2]) elseif e[1] == 'key_down' then return true end end end end local function status() tStore = {} for i = 1, #tType do for j in pairs(component.list(tType[i])) do table.insert(tStore, j) end end print('#', 'type', 'address', 'stored', 'output') for s = 1, #tStore do print(s, component.proxy(tStore[s]).getInventoryName(), string.sub(tStore[s], 1, 7), string.sub((component.proxy(tStore[s]).getEUStored()/component.proxy(tStore[s]).getEUCapacity())*100, 1, 4) .. '%', component.proxy(tStore[s]).getEUOutputPerTick()) end end local function main() term.clear() status() while 1 do print('Команды: [L]ist, [A]dd') local cmd = io.read() if cmd:upper() == 'L' or cmd:upper() == 'LIST' then term.clear() status() elseif cmd:upper() == 'A' or cmd:upper() == 'ADD' then print('Press any key to continue.') add() end end end main()Чтобы включать и выключать произвольные хранилища, придется сделать фиксированную конструкцию, поэтому абы как хранилища не расставить, могу дать инструкции, как это сделать.
-
Можно подключить еще один цветной проектор, чтобы наложением на ёлку рисовать трехцветную гирлянду.
-
Сделал набросок файлопомойки.
Очень примитивная штука, даже не факт, что работает.Сервер:
local filesystem = require('filesystem') local component = require('component') local modem = component.modem local event = require('event') local file, file1, e local port = 1234 --[[ name, pass, cmd, filename, file /pomojka /name /name_share ]] local function main() while 1 do e = {event.pull()} if e[1] == 'modem_message' then local path = '/pomojka/'..e[6]..'/' if not fs.exists(path) then filesystem.makeDirectory(path) filesystem.makeDirectory('/pomojka/'..e[6]..'_share/') file = io.open(path..'pass.cfg', 'w') file:write(e[7]) file:close() end file = io.open(path..'pass.cfg', 'r') if file:read() == e[7] then if e[8] == 'list' then if component.filesystem.list(path) ~= nil then modem.send(e[3], port, table.unpack(component.filesystem.list(path))) end elseif e[8] == 'upload' then if filesystem.size(path..e[9]) < 2048 then print(path..e[9]) print(e[10]) file1 = io.open(path..e[9], 'w') file1:write(e[10]) file1:close() end elseif e[8] == 'download' then file1 = io.open(path..e[9], 'r') modem.send(e[3], port, file1:read()) file1:close() elseif e[8] == 'delete' then filesystem.remove(path..e[9]) end end file:close() elseif e[1] == 'component_added' and e[3] == 'filesystem' then os.excute('mount '..e[2].sub(1, 3)..' /pomojka/') end end end modem.open(port) main()Клиент:
local component = require('component') local modem = component.modem local event = require('event') local file, e local server = 'address' local port = 1234 tArgs = {...} modem.open(port) if tArgs[3] == 'list' then modem.send(server, port, table.unpack(tArgs)) e = {event.pull(5, 'modem_message')} if e[3] == server then list = table.pack(e) for i = 5, #list do io.write(list[i]..'\n') end end elseif tArgs[3] == 'download' then modem.send(server, port, table.unpack(tArgs)) e = {event.pull(5, 'modem_message')} if e[3] == server then file = io.open(tArgs[4], 'w') file:write(e[6]) file:close() end elseif tArgs[3] == 'upload' then file = io.open(tArgs[4], 'r') modem.send(server, port, table.unpack(tArgs), file:read()) file:close() elseif tArgs[3] == 'delete' then modem.send(server, port, table.unpack(tArgs)) else print('Использование:\n <имя> <пароль> [list]\n <имя> <пароль> [download] <файл>\n <имя> <пароль> [upload] <файл>\n <имя> <пароль> [delete] <файл>') end modem.close(port)Можно устанавливать RAID на лету.
Загружать/читать/удалять файлы.
Ограничение 2 кб на одного пользователя.
-
Я не понял, надо сделать интерфейс к уже существующему облаку или сделать облако на основе файловой системы OpenComputers?
-
-
исправте код робот без загрузчика не запускаетса
Сделал одним файлом:
pastebin get DrQ1VG7x /bin/kopalka.lua
-
1
-
-
На входе должен быть комп, который отрубает все права на варпы, хомки, телепортации и переключает игровой режим на приключенца.
Основа для лабиринта будет очень простая, но на деле, алгоритм связей разгадать довольно сложно (может-быть, в качестве бонуса будут выдаваться очки с подсказками)
Лабиринт состоит из комнат, связанных друг с другом переходами. После каждого перемещения из одной комнаты в другую, связи между комнатами меняются, по заданному алгоритму перемешивания.
Помимо обычных комнат с ловушками, есть секретные комнаты, в которые можно попасть только при выполнении определенных условий (жертвоприношение, выполнение переходов, в определенной последовательности)
При выполнении заданных условий, определенные переходы в основном лабиринте подменяются на переходы к секретным комнатам.
Самое сложное это придумать наполнение - ловушки, условия, отслеживание игроков в лабиринте.
-
2
-
-
У меня работало на любой высоте, но я этой прогой пользовался всего пару раз, от других игроков жалоб нет.

Кубик Рубика на микроконтроллере
в Игры
Опубликовано:
Можно и так, но все-равно, не вижу смысла так заморачиваться, в любом случае придется весь кубик заново отрисовывать, а анимация еще и замедлит.