Guest User

newtrader.lua

a guest
Nov 1st, 2017
83
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --https://pastebin.com/L0Qn2LC2
  2. local component=require("component")
  3. local robot = require("robot")
  4. cs = {}
  5. overlap = {}
  6. drop = {}
  7. function setzero(mass)
  8.     for i = 1,15,1 do mass[i]=0 end
  9. end
  10. setzero(cs)
  11. setzero(overlap)
  12. setzero(drop)
  13. ----------------------------------
  14. --УСТАНОВКА ПАРАМЕТРОВ
  15. --Установить количество предметов За которые будет совершаться покупка для определенного слота
  16. --пример cs[1]=10 значит нужно сверять колиество предметов размером в 10 типа предмета, расположенного в 1 слоте
  17. --Слот 16 технический
  18. --1     2   3   4
  19. --5     6   7   8
  20. --9     10  11  12
  21. --13    14  15  16
  22. --============================================================-- МОЖНО МЕНЯТЬ
  23. --cs[1]=1
  24. cs[1]=90
  25. cs[2]=45
  26. cs[3]=10
  27. --Совпадение со всеми (true) или с любым из указанных предметов (false)
  28. all = false
  29. --коэф прожажи к покупке (т.е. за сколько принятых совпадений выдадим предметов) при
  30. ksb=1
  31. sales_array = false
  32. --============================================================--
  33. if sales_array and not all then --лист продаж выкидывает за n совпадений в слоте определенное колличество предметов
  34.     ksb = 1
  35.     buy = {}
  36.     for i = 1,15,1 do buy[i]=1 end
  37. --============================================================-- МОЖНО МЕНЯТЬ
  38.     --Размещаем сколько По умолчанию 1 каждого
  39.     --пример
  40. buy[1] = 1
  41. buy[2] = 1
  42. buy[3] = 1
  43. --============================================================--
  44. else  
  45.     buy = ksb
  46. end
  47.  
  48. inventory_loader = false
  49. ----------------------------------
  50. --Проверка на дибилов, кхм инициализация
  51. repeat bl, st = robot.detect(); if st~="air" then robot.turnLeft() end until st=="air" --Установка по месту air и поворот на лево
  52. robot.turnLeft()
  53. robot.select(16)
  54. robot.drop()
  55. for i=1,15,1 do --Сверка настроек
  56.     robot.select(i)
  57.     if cs[i]==0 then --если не задано cs[i] но в слоте есть предмет
  58.         if robot.count()~=0 then
  59.             if inventory_loader then
  60.                 cs[i] = robot.count()
  61.             else
  62.                 robot.drop()
  63.             end
  64.         end
  65.     end
  66.     if cs[i]~=0 then --если задано cs[i]
  67.         if robot.count()==0 then --Если нет предмета для сравнения - зануляем
  68.             cs[i]=0
  69.         else
  70.             for j=i+1,15,1 do
  71.                 if robot.compareTo(j) then --Если нашёл похожие, то объединит
  72.                     robot.select(j)
  73.                     if inventory_loader then
  74.                         cs[i]=cs[i]+robot.count()+cs[j]
  75.                     else
  76.                         cs[i]=cs[i]+cs[j]
  77.                     end
  78.                     robot.drop()
  79.                     cs[j]=0
  80.                 end
  81.                 robot.select(i)
  82.             end
  83.         end
  84.     end
  85. end
  86. robot.turnAround() --поворот к сундуку
  87. robot.select(16)
  88. maxbuy = 0
  89. while true do
  90.     --ожидание
  91.     while not robot.suck() do os.execute("sleep 4") end --Ожидание вещи
  92.     robot.drop()
  93.     --забор и сравниние
  94.     setzero(overlap)
  95.     setzero(drop)
  96.     maxbuy = 0
  97.     while robot.suck() do
  98.         for i = 1,15,1 do --Если взятый блок подходит - то поместить и в буферку
  99.             if robot.compareTo(i) then
  100.                 overlap[i] = overlap[i] + robot.count()
  101.                 drop[i]= drop[i] + robot.count() / cs[i]
  102.                 robot.dropDown()
  103.             end
  104.         end
  105.         if robot.count()~=0 then --Если блок не подходит - выбросить
  106.             robot.turnAround()
  107.             robot.drop()
  108.             robot.turnAround()
  109.         end
  110.     end
  111.     --вычисляем максимальное количество предметов, которое игрок может купить
  112.     for i = 1,15,1 do
  113.         if drop[i]>0 then
  114.             if all then
  115.                 if i==1 then maxbuy=(math.modf(drop[i])) end
  116.                 if maxbuy>drop[i] then maxbuy = (math.modf(drop[i])) end
  117.             else
  118.                 if sales_array then
  119.                     maxbuy = maxbuy + (math.modf(drop[i])) * buy[i]
  120.                 else
  121.                     maxbuy = maxbuy + (math.modf(drop[i]))
  122.                 end
  123.             end
  124.         end
  125.     end
  126.     --вычислить сдачу
  127.     for i = 1,15,1 do
  128.         if all then
  129.             drop[i] = overlap[i] - cs[i] * maxbuy
  130.         else
  131. --print(overlap[i],cs[i],drop[i])
  132.             drop[i] = overlap[i] - cs[i] * (math.modf(drop[i]))
  133.         end
  134.     end
  135.     robot.turnAround() --поворот к выбрасывателю, выдача сдачи, забор предметов из буферки
  136.     while robot.suckDown() do
  137.         if robot.count()~=0 then
  138.             for i = 1,15,1 do
  139.                 if robot.count()~=0 then
  140.                     if robot.compareTo(i) then
  141.                         if drop[i] > robot.count() then
  142.                             drop[i] = drop[i] - robot.count()
  143.                             robot.drop()
  144.                         else
  145.                             robot.drop(drop[i])
  146.                             drop[i] = 0
  147.                             robot.turnLeft()--
  148.                             robot.drop()
  149.                             robot.turnRight()--
  150.                         end
  151.                     end
  152.                 end
  153.             end
  154.         end
  155.     end
  156.     for i = 1,(maxbuy*ksb),1 do --Выдача товара
  157.         component.redstone.setOutput(3,15)
  158.         component.redstone.setOutput(3,0)
  159.     end
  160.     robot.turnAround()
  161. end
RAW Paste Data