Вот самая последняя версия программы для крафтов электросхем.
Код стал теперь короче чем был при крафте медных изолированных проводов но фиксов больше.
Код легко можно изменить под крафты других вещей, достаточно изменить массив "itemforcraft" и добавить проверку на null в цикле загрузки вещей из сундука(если в крафте используются не все 9 слотов верстака).
Скорость работы вполне приемлемая, быстрее чем автоверстак buildcraft.
Результат работы:
В планах сделать универсальную программу, чтобы можно было подстроить под любой крафт без изменения кода, задавать крафт прямо через сундук.
Код стал теперь короче чем был при крафте медных изолированных проводов но фиксов больше.
Код легко можно изменить под крафты других вещей, достаточно изменить массив "itemforcraft" и добавить проверку на null в цикле загрузки вещей из сундука(если в крафте используются не все 9 слотов верстака).
Скорость работы вполне приемлемая, быстрее чем автоверстак buildcraft.
Код:
local component = require("component")
local c = component.crafting
local ic = component.inventory_controller
local r = require("robot")
setkacrafta = {1, 2, 3,5, 6, 7,9, 10, 11}
itemforcraft = {"Insulated Copper Cable", "Insulated Copper Cable", "Insulated Copper Cable","Redstone", "Iron Ingot", "Redstone","Insulated Copper Cable", "Insulated Copper Cable", "Insulated Copper Cable"}
r.select(4)
function craftthis(counts)
i = 0
while i < counts do
c.craft(2)
r.dropUp(2)
i = i + 1
end
end
numslot = ic.getInventorySize(1)
if numslot == nil then
print("Сундук над роботом не найден!")
else
print("Всего слотов в сундуке:"..numslot)
end
function loadItem(robotslot, chestslot)
if chestslot == 0 then
print("В сундуке не найден нужный предмет!")
else
ic.suckFromSlot(1,chestslot,64)
r.transferTo(robotslot,64)
end
end
function finditem(nameitem)
i = 0
while i < numslot do
i = i + 1
ItemStack = ic.getStackInSlot(1,i)
if ItemStack ~= nil then
if ic.getStackInSlot(1,i)["label"] == nameitem then
return i
end
end
end
return 0
end
doWork = true
while doWork do
craftthis(16)
for j = 1, 9 do
if r.count(setkacrafta[j]) < 1 then
print("Кончилось "..itemforcraft[j].." в слоте "..setkacrafta[j].."...")
loadItem(setkacrafta[j],finditem(itemforcraft[j]))
if r.count(setkacrafta[j]) < 1 then
doWork = false
break
end
end
end
end
В планах сделать универсальную программу, чтобы можно было подстроить под любой крафт без изменения кода, задавать крафт прямо через сундук.