Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --https://pastebin.com/L0Qn2LC2
- local component=require("component")
- local robot = require("robot")
- cs = {}
- overlap = {}
- drop = {}
- function setzero(mass)
- for i = 1,15,1 do mass[i]=0 end
- end
- setzero(cs)
- setzero(overlap)
- setzero(drop)
- ----------------------------------
- --УСТАНОВКА ПАРАМЕТРОВ
- --Установить количество предметов За которые будет совершаться покупка для определенного слота
- --пример cs[1]=10 значит нужно сверять колиество предметов размером в 10 типа предмета, расположенного в 1 слоте
- --Слот 16 технический
- --1 2 3 4
- --5 6 7 8
- --9 10 11 12
- --13 14 15 16
- --============================================================-- МОЖНО МЕНЯТЬ
- --cs[1]=1
- cs[1]=90
- cs[2]=45
- cs[3]=10
- --Совпадение со всеми (true) или с любым из указанных предметов (false)
- all = false
- --коэф прожажи к покупке (т.е. за сколько принятых совпадений выдадим предметов) при
- ksb=1
- sales_array = false
- --============================================================--
- if sales_array and not all then --лист продаж выкидывает за n совпадений в слоте определенное колличество предметов
- ksb = 1
- buy = {}
- for i = 1,15,1 do buy[i]=1 end
- --============================================================-- МОЖНО МЕНЯТЬ
- --Размещаем сколько По умолчанию 1 каждого
- --пример
- buy[1] = 1
- buy[2] = 1
- buy[3] = 1
- --============================================================--
- else
- buy = ksb
- end
- inventory_loader = false
- ----------------------------------
- --Проверка на дибилов, кхм инициализация
- repeat bl, st = robot.detect(); if st~="air" then robot.turnLeft() end until st=="air" --Установка по месту air и поворот на лево
- robot.turnLeft()
- robot.select(16)
- robot.drop()
- for i=1,15,1 do --Сверка настроек
- robot.select(i)
- if cs[i]==0 then --если не задано cs[i] но в слоте есть предмет
- if robot.count()~=0 then
- if inventory_loader then
- cs[i] = robot.count()
- else
- robot.drop()
- end
- end
- end
- if cs[i]~=0 then --если задано cs[i]
- if robot.count()==0 then --Если нет предмета для сравнения - зануляем
- cs[i]=0
- else
- for j=i+1,15,1 do
- if robot.compareTo(j) then --Если нашёл похожие, то объединит
- robot.select(j)
- if inventory_loader then
- cs[i]=cs[i]+robot.count()+cs[j]
- else
- cs[i]=cs[i]+cs[j]
- end
- robot.drop()
- cs[j]=0
- end
- robot.select(i)
- end
- end
- end
- end
- robot.turnAround() --поворот к сундуку
- robot.select(16)
- maxbuy = 0
- while true do
- --ожидание
- while not robot.suck() do os.execute("sleep 4") end --Ожидание вещи
- robot.drop()
- --забор и сравниние
- setzero(overlap)
- setzero(drop)
- maxbuy = 0
- while robot.suck() do
- for i = 1,15,1 do --Если взятый блок подходит - то поместить и в буферку
- if robot.compareTo(i) then
- overlap[i] = overlap[i] + robot.count()
- drop[i]= drop[i] + robot.count() / cs[i]
- robot.dropDown()
- end
- end
- if robot.count()~=0 then --Если блок не подходит - выбросить
- robot.turnAround()
- robot.drop()
- robot.turnAround()
- end
- end
- --вычисляем максимальное количество предметов, которое игрок может купить
- for i = 1,15,1 do
- if drop[i]>0 then
- if all then
- if i==1 then maxbuy=(math.modf(drop[i])) end
- if maxbuy>drop[i] then maxbuy = (math.modf(drop[i])) end
- else
- if sales_array then
- maxbuy = maxbuy + (math.modf(drop[i])) * buy[i]
- else
- maxbuy = maxbuy + (math.modf(drop[i]))
- end
- end
- end
- end
- --вычислить сдачу
- for i = 1,15,1 do
- if all then
- drop[i] = overlap[i] - cs[i] * maxbuy
- else
- --print(overlap[i],cs[i],drop[i])
- drop[i] = overlap[i] - cs[i] * (math.modf(drop[i]))
- end
- end
- robot.turnAround() --поворот к выбрасывателю, выдача сдачи, забор предметов из буферки
- while robot.suckDown() do
- if robot.count()~=0 then
- for i = 1,15,1 do
- if robot.count()~=0 then
- if robot.compareTo(i) then
- if drop[i] > robot.count() then
- drop[i] = drop[i] - robot.count()
- robot.drop()
- else
- robot.drop(drop[i])
- drop[i] = 0
- robot.turnLeft()--
- robot.drop()
- robot.turnRight()--
- end
- end
- end
- end
- end
- end
- for i = 1,(maxbuy*ksb),1 do --Выдача товара
- component.redstone.setOutput(3,15)
- component.redstone.setOutput(3,0)
- end
- robot.turnAround()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement