Advertisement
Lupino

drone.lua

Jul 3rd, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.58 KB | None | 0 0
  1. local drone = component.proxy(component.list("drone")())
  2. local ic = component.proxy(component.list("inventory_controller")())
  3. local maxSlot = drone.inventorySize()
  4. local valid_sides = {0, 1, 2, 3, 4, 5}
  5.  
  6. function getItemName(slot)
  7.     local item = ic.getStackInInternalSlot(slot)
  8.     if item then
  9.         return item.name
  10.     else
  11.         return ''
  12.     end
  13. end
  14.  
  15. function isItem(slot, name)
  16.     return getItemName(slot) == name
  17. end
  18.  
  19. function getSideItemName(side, slot)
  20.     local item = ic.getStackInSlot(side, slot)
  21.     if item then
  22.         return item.name
  23.     else
  24.         return ''
  25.     end
  26. end
  27.  
  28. function isSideItem(side, slot, name)
  29.     return getSideItemName(side, slot) == name
  30. end
  31.  
  32. function findSideItem(side, itemName)
  33.     local max = ic.getInventorySize(side)
  34.     if max then
  35.         for slot = 1, max, 1 do
  36.             if isSideItem(side, slot, itemName) then
  37.                 return slot
  38.             end
  39.         end
  40.     end
  41.     return 0
  42. end
  43.  
  44. function findItemOnSides(itemName)
  45.     for k, side in pairs(valid_sides) do
  46.         local slot = findSideItem(side, itemName)
  47.         if slot > 0 then
  48.             return suckFromSlot(side, slot)
  49.         end
  50.     end
  51.     return 0
  52. end
  53.  
  54. function suckFromSlot(side, slot)
  55.     local newSlot = findEmptySlot()
  56.     if newSlot == 0 then
  57.         newSlot = cleanASlot()
  58.     end
  59.  
  60.     if newSlot > 0 then
  61.         drone.select(newSlot)
  62.         ic.suckFromSlot(side, slot)
  63.         insertSideEmptySlots(side, slot)
  64.         return newSlot
  65.     end
  66.     return 0
  67. end
  68.  
  69.  
  70. function dropIntoSlot(slot)
  71.     drone.select(slot)
  72.     local name = getItemName(slot)
  73.     local side, newSlot = findEmptySlotOnSides()
  74.     if newSlot > 0 then
  75.         ic.dropIntoSlot(side, newSlot)
  76.         insertSideItems(side, newSlot, name)
  77.         return true
  78.     end
  79.     return false
  80. end
  81.  
  82. function findItem(itemName, slot)
  83.     for slot = slot, maxSlot, 1 do
  84.         if isItem(slot, itemName) then
  85.             return slot
  86.         end
  87.     end
  88.     return 0
  89. end
  90.  
  91. function findEmptySlot()
  92.     for slot = 1, maxSlot, 1 do
  93.         if isEmptySlot(slot) then
  94.             return slot
  95.         end
  96.     end
  97.     return 0
  98. end
  99.  
  100. function isEmptySlot(slot)
  101.     local count = drone.count(slot)
  102.     if count == 0 then
  103.         return true
  104.     else
  105.         return false
  106.     end
  107. end
  108.  
  109. function findEmptySideSlot(side)
  110.     local max = ic.getInventorySize(side)
  111.     if max then
  112.         for slot = 1, max, 1 do
  113.             if isEmptySideSlot(side, slot) then
  114.                 return slot
  115.             end
  116.         end
  117.     end
  118.     return 0
  119. end
  120.  
  121. function isEmptySideSlot(side, slot)
  122.     return ic.getSlotStackSize(side, slot) == 0
  123. end
  124.  
  125. function isFullSideSlot(side, slot)
  126.     return ic.getSlotStackSize(side, slot) == 64
  127. end
  128.  
  129. function findEmptySlotOnSides()
  130.     for k, side in pairs(valid_sides) do
  131.         local slot = findEmptySideSlot(side)
  132.         if slot > 0 then
  133.             return side, slot
  134.         end
  135.     end
  136.     return 0, 0
  137. end
  138.  
  139. function cleanASlot()
  140.     for slot = 1, maxSlot, 1 do
  141.         if isFullSlot(slot) then
  142.             if dropIntoSlot(slot) then
  143.                 return slot
  144.             end
  145.             break
  146.         end
  147.     end
  148.     return 0
  149. end
  150.  
  151. function isFullSlot(slot)
  152.     local count = drone.count(slot)
  153.     if count == 64 then
  154.         return true
  155.     else
  156.         return false
  157.     end
  158. end
  159.  
  160. drone.setStatusText(drone.name())
  161. local itemName
  162. local ret
  163.  
  164. while true do
  165.     computer.pullSignal(0.5)
  166.     itemName = getItemName(1)
  167.     ret = findItemOnSides(itemName)
  168.     drone.setStatusText(tostring(ret))
  169. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement