thezer0th

Untitled

Dec 24th, 2018
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. local component = require("component")
  2. local sides = require("sides")
  3. local os = require("os")
  4. local thread = require("thread")
  5. local event = require("event")
  6. local shell = require("shell")
  7.  
  8. local modem = component.modem
  9. local port = 666
  10.  
  11. local sleep_t = 0.10
  12. local timeout_t = 1.00
  13.  
  14. function transfer_to(tp, in_side, in_slot, out_side, out_slot)
  15. tp.transferItem(in_side, out_side, tp.getStackInSlot(in_side, in_slot).count, in_slot, out_slot)
  16. end
  17.  
  18. function transfer_all(tp, in_side, out_side)
  19. local in_stacks = tp.getAllStacks(in_side)
  20. local out_slot = 1
  21. for in_slot = 1, in_stacks.count() do
  22. while tp.getStackInSlot(out_side, out_slot) ~= nil do out_slot = out_slot + 1 end
  23. if in_stacks[in_slot] ~= nil then tp.transferItem(in_side, out_side, in_stacks[in_slot].count, in_slot, out_slot) end
  24. end
  25. end
  26.  
  27. function is_empty(tp, side)
  28. local stacks = tp.getAllStacks(side)
  29. for slot = 1, stacks.count() do
  30. if stacks[slot] ~= nil then return false end
  31. end
  32. return true
  33. end
  34.  
  35. function slave_loop()
  36. local tp = component.transposer
  37. local prim_in_side = sides.west
  38. local prim_out_side = sides.down
  39. local auxl_in_side = sides.east
  40. local auxl_out_side = sides.south
  41. local output_side = sides.north
  42. modem.open(port)
  43. modem.setStrength(512)
  44. while true do
  45. function wait_for_crafting_request(event_name, ...)
  46. if event_name == "modem_message" then
  47. local message = select(5, ...)
  48. if message == "reply_if_available" then return true end
  49. end
  50. return false
  51. end
  52. local master_addr, port = select(1 + 2, event.pullFiltered(wait_for_crafting_request))
  53. modem.send(master_addr, port, "altar_available")
  54. function wait_for_master_response(event_name, ...)
  55. if event_name == "modem_message" then
  56. local message = select(5, ...)
  57. if message == "proceed" or message == "cease" then return true end
  58. end
  59. return false
  60. end
  61. local message = select(1 + 5, event.pullFiltered(wait_for_master_response))
  62. if message == "proceed" then
  63. modem.send(master_addr, port, "proceed_ack")
  64. transfer_all(tp, auxl_in_side, auxl_out_side)
  65. while not is_empty(tp, auxl_out_side) do os.sleep(sleep_t) end
  66. local orig = tp.getStackInSlot(prim_in_side, 1)
  67. transfer_to(tp, prim_in_side, 1, prim_out_side, 1)
  68. modem.send(master_addr, port, "buffers_freed")
  69. local function is_same(stack, cmp)
  70. return stack ~= nil and stack.label == cmp.label and stack.count == cmp.count
  71. end
  72. while is_same(tp.getStackInSlot(prim_out_side, 1), orig) do os.sleep(sleep_t) end
  73. transfer_to(tp, prim_out_side, 1, output_side, 1)
  74. while not is_empty(tp, output_side) do os.sleep(sleep_t) end
  75. end
  76. end
  77. end
  78.  
  79. slave_loop()
Add Comment
Please, Sign In to add comment