irnotbeowulf

requester.lua

May 21st, 2021 (edited)
598
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.69 KB | None | 0 0
  1. local windows = require "apiWin"
  2. player = peripheral.find("playerDetector")
  3. rs.setOutput("right",false)
  4. os.pullEvent=os.pullEvent
  5. os.startTimer=os.startTimer
  6. os.cancelTimer=os.cancelTimer
  7. rs = redstone
  8. router = peripheral.find("modularrouters:item_router")
  9. storage = peripheral.find("rsBridge")
  10. barrel = peripheral.find("metalbarrels:diamond_tile")
  11. chat = peripheral.find("chatBox")
  12.  
  13. bom = "/requester/BOM.dat"
  14. barrelName = "metalbarrels:diamond_tile_0"
  15. routerName = "modularrouters:item_router_0"
  16. top.setColors(colors.lime,colors.black)
  17. fullscreen.setColors(colors.red,colors.blue)
  18. top.drawCenter({"Welcome","line2"})
  19.  
  20. local vendArea1 = vector.new(1215,62,-503)
  21. local vendArea2 = vector.new(1223,64,-497)
  22. --[[
  23. --test area coordinates
  24. local vendArea1 = vector.new(-10,4,473)
  25. local vendArea2 = vector.new(-3,20,480)
  26. --]]
  27. function loadBom()
  28.     local billofmaterials = {}
  29.     if fs.exists(bom) then
  30.         db = fs.open(bom,"r")
  31.         billofmaterials = textutils.unserialise(db.readAll())
  32.         db.close()
  33.         return billofmaterials
  34.     end
  35.     return false
  36. end
  37. function saveBom(bomlist)
  38.     if fs.exists(bom) then
  39.         if fs.exists(bom..".bak") then
  40.             fs.delete(bom..".bak")
  41.         end
  42.         fs.copy(bom,bom..".bak")
  43.         billofmaterials = fs.open(bom,"w")
  44.         billofmaterials.write(textutils.serialise(bomlist))
  45.         billofmaterials.close()
  46.     end
  47. end
  48.  
  49. function eject()
  50.     rs.setAnalogOutput("right",5)
  51.     sleep(4)
  52.     rs.setAnalogOutput("right",0)
  53. end
  54. function dispense(item)
  55.     if router.getItemDetail(1) then
  56.         eject()
  57.         storage.exportItemToChest(item, routerName)
  58.         eject()
  59.     else
  60.         storage.exportItemToChest(item, routerName)
  61.         eject()
  62.     end
  63. end
  64. function getBarrel(slot)
  65.     if barrel.getItemDetail(slot) then
  66.     return barrel.getItemDetail(slot)
  67.     else return nil
  68.     end
  69. end
  70. --read contents of item router
  71. function getInput()
  72.     if router.getItemDetail(1) then
  73.         return router.getItemDetail(1)
  74.     else return nil
  75.     end
  76. end
  77. function getPlayers()
  78.     local players = player.getPlayersInRange(6)
  79.     local playersInRange = {}
  80.     for i=1, #players do
  81.         local playerPos = player.getPlayerPos(players[i])
  82.         if not playerPos then
  83.             return false
  84.         end
  85.         local playerV = vector.new(playerPos.x, playerPos.y, playerPos.z)
  86.         if playerV.y >= vendArea1.y and playerV.y <= vendArea2.y then
  87.             if playerV.x >= vendArea1.x and playerV.x <= vendArea2.x then
  88.                 if playerV.z >= vendArea1.z and playerV.z <= vendArea2.z then
  89.                     playersInRange[i] = players[i]
  90.                 else
  91.                 end
  92.             else
  93.             end
  94.         else
  95.         end
  96.     end
  97.     if #playersInRange >= 1 then
  98.         return playersInRange
  99.     else
  100.         return false
  101.     end
  102. end
  103. local function verifyPlayer(player)
  104.     local playersInRange = getPlayers()
  105.     if playersInRange then
  106.         for i=1, #playersInRange do
  107.             if playersInRange == player then
  108.                 return true
  109.             end
  110.         end
  111.     end
  112.     return false
  113. end
  114.  
  115. while true do
  116.     local bomlist = loadBom()
  117.     input = getInput()
  118.     fullscreen.drawList(bomlist)
  119.     plyr = getPlayers()
  120.     if plyr then    
  121.         if input then
  122.             total = 0
  123.  
  124.             for k,v in pairs(bomlist) do
  125.                 if not bomlist[k].tally then
  126.                     bomlist[k].tally = 0
  127.                 end
  128.                 if bomlist[k].name == input.name then
  129.                     bomlist[k].tally = bomlist[k].tally + input.count
  130.                     saveBom(bomlist)
  131.                     storage.importItemFromChest(input,routerName)
  132.                     log = fs.open("/requester/log","a")
  133.                     log.write(os.date("%m/%d/%Y,"))
  134.                     log.write(os.date("%H:%M,"))
  135.                     log.write(plyr[1]..",")
  136.                     log.write(input.name..",")
  137.                     log.write(input.count)
  138.                     log.write("\n")
  139.                     log.close()
  140.                 elseif bomlist[k].tags then
  141.                     for h,g in pairs(bomlist[k].tags) do
  142.                         if input.tags[h] then
  143.                             bomlist[k].tally = bomlist[k].tally + input.count
  144.                             saveBom(bomlist)
  145.                             storage.importItemFromChest(input,routerName)
  146.                             log = fs.open("/requester/log","a")
  147.                             log.write(os.date("%m/%d/%Y,"))
  148.                             log.write(os.date("%H:%M,"))
  149.                             log.write(plyr[1]..",")
  150.                             log.write(input.name..",")
  151.                             log.write(input.count)
  152.                             log.write("\n")
  153.                             log.close()
  154.                         end
  155.                     end
  156.                 end
  157.  
  158.             end
  159.             if getInput() then
  160.                 eject()
  161.             end
  162.         end
  163.  
  164.     else sleep(1)
  165.     end
  166. sleep(1)
  167. end
  168.  
Add Comment
Please, Sign In to add comment