Advertisement
whaamp

Untitled

Jan 10th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. chest = peripheral.wrap("bottom")
  2.  
  3. cur_lvl = 0
  4. cur_dir = 0
  5.  
  6. function save(t, n)
  7. local file = fs.open(n, "w")
  8. file.write(textutils.serialize(t))
  9. file.close()
  10. end
  11.  
  12. function load(n)
  13. local file = fs.open(n, "r")
  14. local data = file.readAll()
  15. file.close()
  16. return textutils.unserialize(data)
  17. end
  18.  
  19. function slice(tbl, first, last)
  20. local sliced = {}
  21. for i = first, last do
  22. table.insert(sliced, tbl[i])
  23. end
  24. return sliced
  25. end
  26.  
  27. function equals(item1, item2)
  28. check1 = item1.id == item2.id and item1.dmg == item2.dmg
  29. check2 = item1.raw == item2.raw and item1.display == item2.display
  30. return check1 and check2
  31. end
  32.  
  33. function contains(newItem)
  34. for n, item in pairs(items) do
  35. if equals(item, newItem) then
  36. return n
  37. end
  38. end
  39. return 0
  40. end
  41.  
  42. function next_position()
  43. pos = {}
  44. pos.lvl = math.floor(#items / 4) + 1
  45. pos.dir = #items % 4
  46. return pos
  47. end
  48.  
  49. function register_item(item)
  50. item.full = item.id..item.dmg..item.raw..item.display
  51. item.pos = next_position()
  52. item.qty = 0
  53. table.insert(items, item)
  54. save(items, "items")
  55. end
  56.  
  57. function to_item(stack)
  58. item = {}
  59. item.id = stack.basic().id
  60. item.dmg = stack.basic().dmg
  61. item.raw = stack.basic().raw_name
  62. item.display = stack.basic().display_name
  63. n = contains(item)
  64. if n == 0 then
  65. register_item(item)
  66. n = #items
  67. end
  68. return items[n]
  69. end
  70.  
  71. function go_to(pos)
  72. while cur_lvl > pos.lvl do
  73. turtle.down()
  74. cur_lvl = cur_lvl - 1
  75. end
  76. while cur_lvl < pos.lvl do
  77. turtle.up()
  78. cur_lvl = cur_lvl + 1
  79. end
  80. while cur_dir ~= pos.dir do
  81. turtle.turnRight()
  82. cur_dir = (cur_dir + 1) % 4
  83. end
  84. end
  85.  
  86. function store(item)
  87. n = contains(item)
  88. start_amt = turtle.getItemCount()
  89. turtle.drop()
  90. items[n].qty = items[n].qty + start_amt - turtle.getItemCount()
  91. end
  92.  
  93. function store_items(to_store)
  94. for i, item in pairs(to_store) do
  95. turtle.select(i)
  96. go_to(item.pos)
  97. store(item)
  98. end
  99. save(items, "items")
  100. end
  101.  
  102. function clear_inv()
  103. for i=1, 16 do
  104. turtle.select(i)
  105. turtle.drop()
  106. end
  107. turtle.select(1)
  108. end
  109.  
  110. function receive_items()
  111. chest.condenseItems()
  112. stacks = slice(chest.getAllStacks(), 1, 16)
  113. to_store = {}
  114. for _, stack in pairs(stacks) do
  115. if turtle.suckDown() then
  116. item = to_item(stack)
  117. table.insert(to_store, item)
  118. end
  119. end
  120. store_items(to_store)
  121. go_to({lvl=0,dir=0})
  122. clear_inv()
  123. end
  124.  
  125. items = load("items")
  126.  
  127. while true do
  128. cmd = io.read()
  129. if cmd == ">" then
  130. while #chest.getAllStacks() > 0 do
  131. receive_items()
  132. end
  133. end
  134. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement