Advertisement
Guest User

the code

a guest
Aug 17th, 2024
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.23 KB | Source Code | 0 0
  1. function table.contains(table, element)
  2.     for _, value in pairs(table) do
  3.         if value == element then
  4.             return true
  5.         end
  6.     end
  7.     return false
  8. end
  9.  
  10. function table.remove_from(table_, element)
  11.     for _, value in pairs(table_) do
  12.       if value == element then
  13.         local a = table.remove(table_, _)
  14.         print(a)
  15.         return true
  16.       end
  17.     end
  18.     return false
  19. end
  20.  
  21. function Key_contains(table, element)
  22.     for _, value in pairs(table) do
  23.       if _ == element then
  24.         return true
  25.       end
  26.     end
  27.     return false
  28. end
  29.  
  30. peripheral.find("modem", rednet.open)
  31. G_requests = {}
  32. local turtles = {}
  33. local turtles_used = {}
  34. local turtles_used_remove = {}
  35.  
  36. require("storage")
  37.  
  38. for index, value in ipairs(peripheral.getNames()) do
  39.     if peripheral.hasType(value, "turtle")then
  40.         turtles[#turtles+1] = peripheral.getNames()[index]
  41.     end
  42. end
  43.  
  44. local function listen()
  45.     while true do
  46.         sleep(0.05)
  47.         local id, data = rednet.receive("craft_request")
  48.  
  49.         print(#data)
  50.  
  51.         G_requests[#G_requests+1] = data
  52.     end
  53. end
  54.  
  55. local function listen2()
  56.     while true do
  57.         sleep(0.05)
  58.         local id, data = rednet.receive("unused_crafter")
  59.  
  60.  
  61.         local inv = peripheral.wrap(Inv_Num(1))
  62.  
  63.         inv.pullItems(data, 1)
  64.  
  65.         turtles_used_remove[#turtles_used_remove+1] = data
  66.  
  67.     end
  68. end
  69.  
  70.  
  71. function table.num_of_same_element(table)
  72.     local count = {}
  73.     for i in pairs(table) do
  74.         if not Key_contains(count, table[i]) then
  75.             count[table[i]] = 1
  76.         else
  77.             count[table[i]] = count[table[i]] + 1
  78.         end
  79.     end
  80.     return count
  81. end
  82.  
  83.  
  84. local function send_craft(key)
  85.    
  86. end
  87.  
  88.  
  89. local function Main()
  90.     while true do
  91.  
  92.         sleep(0.05)
  93.         for key, value in pairs(G_requests) do
  94.  
  95.             for i, v in pairs(turtles_used_remove) do
  96.                 table.remove_from(turtles_used, v)
  97.                 print("removed from table.")
  98.             end
  99.             turtles_used_remove = {}
  100.  
  101.             local station = nil
  102.  
  103.             for key, value in pairs(turtles) do
  104.                 if not table.contains(turtles_used, value) then
  105.                     station = value
  106.                     turtles_used[#turtles_used+1] = value
  107.                 end
  108.                 if station ~= nil then
  109.                     break
  110.                 end
  111.             end
  112.  
  113.             if station == nil then
  114.                 print(station)
  115.                 break
  116.             end
  117.  
  118.  
  119.             local count = table.num_of_same_element(G_requests[key])
  120.  
  121.             local has_enough = true
  122.             local list = {}
  123.  
  124.             for key2, value2 in pairs(G_requests[key]) do
  125.                 for i, val in pairs(Get_items_num()) do
  126.            
  127.                     if val.name ~= nil then
  128.                         --print("value == "..value2..", val.name == "..val.name)
  129.                         print(value2)
  130.                         if val.name == value2 then
  131.                             print(val.name)
  132.                            if val.count >= count[value2] then
  133.                                 --has_enough = true
  134.                                 --print("set to true")
  135.                                 list[value2] = true
  136.                             else
  137.                                 --has_enough = false
  138.                                 list[value2] = false
  139.                                 turtles_used_remove[#turtles_used_remove+1] = station
  140.                                 --print("set to false1")
  141.                             end
  142.                         else
  143.                             --list[value2] = false
  144.                             ---print("false...")
  145.                             --if table.contains(G_requests[key], val.name) then
  146.                             --    has_enough = false
  147.                             --turtles_used_remove[#turtles_used_remove+1] = station
  148.                             --    print("set to false2")
  149.                             --end
  150.                         end
  151.                     end
  152.                 end
  153.             end
  154.  
  155.             for key2, value2 in pairs(G_requests[key]) do
  156.                 if list[value2] == true and has_enough == true then
  157.                     has_enough = true
  158.                 else
  159.                     has_enough = false
  160.                 end
  161.             end
  162.  
  163.             --has_enough = table.contains_more(Get_items_num(), G_requests[key])
  164.  
  165.             print(has_enough)
  166.  
  167.             if has_enough then
  168.                 for key2, value2 in pairs(G_requests[key]) do
  169.                     local slot = key2
  170.  
  171.                     if slot >= 4 then
  172.                         slot = slot + 1
  173.                     end
  174.                     if slot >= 8 then
  175.                         slot = slot + 1
  176.                     end
  177.  
  178.                     if value2 ~= nil then
  179.                         send_to(station, value2, 1, slot)
  180.                     end
  181.                 end
  182.                 table.remove(G_requests, key)
  183.             else
  184.                 table.remove(G_requests, key)
  185.                 turtles_used_remove[#turtles_used_remove+1] = station
  186.             end
  187.         end
  188.     end
  189. end
  190.  
  191. parallel.waitForAll(listen, listen2, Main)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement