Doob
-
Публикации
1 089 -
Зарегистрирован
-
Посещение
-
Победитель дней
141
Сообщения, опубликованные пользователем Doob
-
-
Я как-то тоже боролся с автокрафтом, все уперлось в скорость, потому-что робот с одним сундуком, без посторонней помощи не может крафтить абсолютно все, а с несколькими сундуками он будет медленно искать предметы.
Чтобы ускорить работу без разделения рецептов на диапазоны, для кучи роботов, необходимо сделать автоматизированное хранилище, к которому робот будет иметь доступ.
Сделал небольшой набросок:

Бирюзовые сундуки это хранилища, красные - буферы, синий - ввод.
Раз в несколько секунд компьютер должен проверять наличие во входном сундуке наличие предметов и распределять по хранилищу, обновляя базу данных.
Робот, когда ему поступает задание на крафт, запрашивает предметы из хранилища и почти моментально крафтит предметы.
Чтобы сделать такую систему хранилищ с транспозерами надо автоматизировать подключение новых ячеек. Я не смог сделать автоматическую биндилку, поэтому задавать направления переноса предметов, расположение буферов и хранилищ придется вручную, а это очень и очень нудное занятие.
Можно было-бы сделать быстрое создание хранилищ при помощи адаптеров, они могут получать названия контейнеров, следовательно можно легко сделать автоматическую конфигурацию по типам хранилищ, но мне лень с этим возиться, да и вряд-ли это кому-то нужно. Для одного человека совершенный автокрафт не особо нужен, а большой толпой в майне никто не уживается, потому-что чем больше народу, тем больше шума и меньше порядка.
-
1
-
-
Наниты ведь не роботы, так что все верно. Можно отключить урон в конфиге, а добавить невидимость.
-
1
-
-
Причем упорно лезут и лезут, некоторые регулярно приходят, раз в игровой час, постоят пару минут и уходят)))
-
4
-
-
Многие плачут по трубам, но у нас есть транспозер!
Долго думал, зачем нужен этот скрипт. Хотел применить для того, чтобы закидывать себе в инвентарь предметы через Inventory Binder, когда я далеко от дома (например на рынке), но т. к. чанклоадеры нам не светят, смысла от этого нет.
В общем, суть такова - имеется 4 функции, одна проверяет все контейнеры пристыкованные к транспозеру и заполняет таблицу предметов (в каком контейнере сколько и каких предметов лежит)Остальные работают с этой таблицей.
tItems = { [item_label] = { -- таблица для предмета создается по его лейблу [side] = { -- информация о контейнере по определенную сторону [slot] = size,-- количество предметов в слоте [slot] = size, .... }, [6] = count -- дополнительный счетчик, указывающий сколько всего предметов данного типа } }Один контейнер считается буфером - из него забираются запрошенные предметы и раскладываются по хранилищам. (строка #3, сторону задавать через sides API)
Функции:
"обновить" - заполняет таблицу.
"из буфера" - перемещает все предметы из буфера в хранилища
"в буфер" - принимает лейбл предмета и количество, ищет указанные предметы и перемещает в буфер
pastebin get gjRz1uB4 /bin/s_tube.lua
Функцию main сделал на коленке, так что ногами не пинать. Хотел сделать нормальную GUIшку, но не дошли руки. В планах сделать скрипт последовательной биндилки активных транспозеров, чтобы создавать цепи из хранилищ и буферов (автоматическое расширение хранилищ)
Думаю, может кому-то пригодится, хотя особого отличия от функции поиска через контроллер инвентаря нет, но никто про транспозер не говорит, только ноют, что труб нет.
-
6
-
-
Хм.. Я все не мог придумать, как экспортировать вермишель, про goto совсем забыл.
Главное, чтобы оно работало, а как оно будет работать это дело десятое

-
1
-
-
На CC есть несколько таких прог, вроде-бы и на OC что-то было.
Но с роботами это не рационально и возможностей у них мало.
-
Кто-то поставил это на входную дверь, постоянно вырубается, глючит, я посмотрел, не стал разбираться где ошибки - написал свою.
В общем, мой простой скрипт превращает pim в нажимную плиту - если на нее наступает игрок из белого списка, она посылает сигнал редстоуна на поршневую дверь (обычные двери требуют механизма обновления блока), если на нее наступает любой другой игрок, она забирает его вещи. С другой стороны стоит обычная нажимная плита,, которая пропускает всех подряд.
Конфиг простой: первая строка - белый список, вторая - направление на контейнер, третья - направление на обычную нажимную плиту, которая находится с внутренней стороны для redstone I/O
У меня скрипт запускается в autorun.lua - os.execute('smart_pplate >> log')
В одиночке это не так заметно, но на сервере, если ведется лог, то перенос лута идет дольше. Вообще, логгирование можно выкинуть, потому-что я его прикрутил просто, чтобы собирать статистику у кого какой лут.

local wList = {'Player1', 'Player2'} -- белый список игроков local chest = 'DOWN' -- направление на контейнер для лута local pplate = 5 -- направление на нажимную плиту local log = 1 -- вести запись лога local event = require('event') local component = require('component') local redstone = component.redstone local pim = component.pim local item = nil local function check(name) for i = 1, #wList do if wList[i] == name then return true end end return false end local function open() for side = 0, 5 do redstone.setOutput(side, 15) end os.sleep(2) for side = 0, 5 do redstone.setOutput(side, 0) end os.sleep(2) end print('Умная нажимная плита включена.') while 1 do local e = {event.pull()} if e[1] == 'player_on' then if check(e[2]) then print(e[2] .. ' прошел через дверь.') open() else io.write('\n\n' .. os.date() .. ' ' .. e[2]) for j = 1, pim.getInventorySize() do item = pim.getStackInSlot(j) if log == 1 and item ~= nil then io.write('\n ' .. item.qty .. ' ' .. item.display_name) end pim.pushItem(chest, j) end io.write('\n----------------------') print('\n' .. e[2] .. ' был обезврежен.') end elseif e[1] == 'redstone_changed' and e[3] == pplate then open() end e = nil end-
6
-
-
Годнота, только еще надо бы сделать возможность лепить несколько веревок на один вход/выход, а то чтобы прикрутить какой-нибудь код после if надо либо делать дублирование кода до if, либо составлять бороду из if if if, чтобы сделать необязательный if
P.S. формат для сохранения простой и понятный, такое можно сделать в OpenComputers
-
1
-
-
Они наносят урон игроку, когда заряд 0
Ммм.. На харде? Лично мне они ничего не наносят, даже когда 4 эффекта активны.
-
Как пользоваться функцией scan?
Итак, в этой функции можно задать два параметра, это относительные координаты по горизонтали (относительно блока геосканера/планшета или робота с геосканером), возвращаемое значение - таблица. Таблица содержит список плотностей блоков по вертикали.Чем дальше по вертикали находится блок (относительно геосканера), тем больше помех дает геосканер. Уровень помех можно настроить в конфиге мода.
Ну тут вроде-как все понятно, разберемся с вертикальными координатами.
При сканировании, геосканер возвращает таблицу, которая представляет собой столб из блоков. Кроме плотности ничего узнать нельзя.
Возьмем, к примеру, scan(0, 0) это будет столб, выстой 64 блока, в котором находится устройство (геосканер/робот/планшет)
В стандартнои конфиге радиус действия геосканера = 32 блока, следовательно можно просканировать кубоид 65x65x64 блока.
Геосканер у нас находится на уровне 33 (индекс таблицы), на этом уровне при сканировании устройстрво почти не дает шумов, т. е. по горизонтали можно легко узнать истинную плотность блока.
Индексы в таблице возрастают с высотой, т. е. блок с индексом 1 это -32 блок относительно устройства, 2 это -31 ... 33 это 0 и т. д.
Теперь разберемся с горизонтальными координатами.
Горизонтальные координаты хоть и относительные, но они не зависят от положения устройства в пространстве, т. е. отсчет идет по сторонам света.
scan(1, 0) это столб на один блок на восток от устройства, следовательно, scan(-1, 0) - на запад.
scan(0, 1) это южный столб, scan(0, -1) - северный.
Для примера возьмем двойной цикл, который будет сканировать столбы и заносить их в таблицу.
local tbl = {} for x = -32, 32 do for y = -32, 32 do if not tbl[x] then tbl[x] = {} end tbl[x][y] = geolyzer.scan(x, y) end endОн у нас будет сканировать с северо-запада на юго-восток, т. е. будет захватывать всю доступную зону.
К примеру, нам надо сканировать определенный квадрат, стоящий по-диагонали от геосканера, обозначим их вот так: NE - северо-восточный, NW - северо-западный, SE - юго-восточный, SW - юго-западный.
local function scan(d, r) -- направление, дальность if d == 'NE' then x1, x2, y1, y2 = 1, r, -r, -1 elseif d == 'NW' then x1, x2, y1, y2 = -r, -1, -r, -1 elseif d == 'SE' then x1, x2, y1, y2 = 1, r, 1, r elseif d == 'SW' then x1, x2, y1, y2 = -r, -1, 1, r end for x = x1, x2 do for y = y1, y2 do geolyzer.scan(x, y) -- тут должна быть фунция обработки или сохранения результатов сканирования end end endЧтобы просканировать квадрат со стороной 20 блоков, находящийся на юго-восток от геосканера надо запустить scan('SE', 20)
Вроде-бы все очевидно.
Функция analyze() намного проще, она возвращает таблицу с информацией о блоке, стоящем вплотную к устройству. Индексы таблицы не числовые, например, чтобы узнать плотность блока вводим analyze(сторона).hardness
Чтобы задать сторону можно использовать sides API, либо просто задать цифрой....Будет дополняться...
-
10
-
-
Знаем мы вас, сначала все чинно, культурно, а потом... ОЛОЛОПЕВЕПЕ!11ГДЕМОЯНАНКА!! Лаго-проги! И прочая ересь. Чем больше рыл в одном привате, тем больше безобразия на сервере. А вот если-бы у каждого свой приват, но с общим залом, тогда еще более-менее. А то как в DF, кошка упала в лаву - погибла крепость.
-
3
-
-
Что-то долго сканит базовый тест.
А, понял, это первый запуск глюканул.
P.S. что-то много опечаток, почти каждаый цикл обрывается, проверь еще раз все команды.
-
Вот такие дела... Прежде чем куда-то тыкать, надо почитать, поискать, в одиночке проверить.
-
1
-
-
Я сам видел, как он умирал прям на кровати, незнаю что там с зарядником, но я не мог к нему подойти, чтобы вырубить их планшетом, так что... Наниты - детям не игрушка.
А вообще, это похоже на глубокое читерстов и багоюз, только у двух человек был такой эпик, а у скольких есть наниты и они не жалуются?
-
1
-
-
Причем тут наниты и солярка, как они выключенные работают? Может ты возле зарядника возрождаешься?
-
1
-
-
Хм... стопэ... Я случайно не во время теста планшет на зарядку воткнул?))
-
1
-
-
Кто-то влетел на рес. Наверно это будет базарчик Сашки, видимо.

Да, иридий у меня пока кончился, заменим компьютером или роботами, остальное пока так-же.
NEO получил награду:

-
Запущен комп для тестов на рынке Фингера, координаты 650 66 472 (прямо перед входом)
Тот, кто юзерадднит себя на этом комп получит:
- 10 иридя
- 10 алмазных блоков
- 10 изумрудных блоков
- 10 золотых блоков
- 10 железных блоков
- 10 медных блоков
- 10 оловянных блоков

А так, можно творить с ним все, что вздумается (кроме написания лаго-прог)
-
4
-
Хм... Может быть урон был третьего уровня? Ни разу не видел, чтобы наниты давали несколько уровней одного эффекта.
-
Не моментально, моментальный урон убивает только через три удара, за это время один из эффектов отключается.
-
Добавлю от себя. Не обязательно убивать нанитов, если попался эффект урона, это не рационально, т. к. крафт у них дороговат. Просто возле зарядника должен быть комп (или несколько) с WiFi, который будет в цикле выключать все активные эффекты. Достаточно два раза подбежать к заряднику и наниты будут обезврежены ценой всего одной смерти.
Копка, как и все остальные эффекты присутствует не только в комбо, но и в одиночных активных эффектах.
Самый большой минус это шанс выпадения нескольких эффектов в один слот, к примеру копка и урон может выпасть в один слот и тогда нанитов придется вывести. Точно не помню, какие шансы выпадения нескольких эффектов в один слот, но если правильно помню, 4 эффекта выпадают с шансом 1/32 (вероятность, что в одной банке из 32 будет такой слот)
С комбо-эффектами еще не игрался, но если там шанс выпадения пустых слотов такой-же, то вероятность получить любой эффект повышается где-то в 1.7 раз
-
1
-
-
Я могу у Фингера на рынке комп поставить, чтобы все покупатели тестировали.
-
XML это очень круто, чуть-чуть допилить и будет попсовая рекламная панель.
-
Все в одном, неплохо...
А что дает перебор пар? Ни разу не пробовал, много времени занимает, да и опасно с дебаффами.

Заглючили наниты.
в Обсуждение модов
Опубликовано: