Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local windows = require "apiWin"
- player = peripheral.find("playerDetector")
- rs.setOutput("right",false)
- os.pullEvent=os.pullEvent
- os.startTimer=os.startTimer
- os.cancelTimer=os.cancelTimer
- rs = redstone
- router = peripheral.find("modularrouters:item_router")
- storage = peripheral.find("rsBridge")
- barrel = peripheral.find("metalbarrels:diamond_tile")
- chat = peripheral.find("chatBox")
- bom = "/requester/BOM.dat"
- barrelName = "metalbarrels:diamond_tile_0"
- routerName = "modularrouters:item_router_0"
- top.setColors(colors.lime,colors.black)
- fullscreen.setColors(colors.red,colors.blue)
- top.drawCenter({"Welcome","line2"})
- local vendArea1 = vector.new(1215,62,-503)
- local vendArea2 = vector.new(1223,64,-497)
- --[[
- --test area coordinates
- local vendArea1 = vector.new(-10,4,473)
- local vendArea2 = vector.new(-3,20,480)
- --]]
- function loadBom()
- local billofmaterials = {}
- if fs.exists(bom) then
- db = fs.open(bom,"r")
- billofmaterials = textutils.unserialise(db.readAll())
- db.close()
- return billofmaterials
- end
- return false
- end
- function saveBom(bomlist)
- if fs.exists(bom) then
- if fs.exists(bom..".bak") then
- fs.delete(bom..".bak")
- end
- fs.copy(bom,bom..".bak")
- billofmaterials = fs.open(bom,"w")
- billofmaterials.write(textutils.serialise(bomlist))
- billofmaterials.close()
- end
- end
- function eject()
- rs.setAnalogOutput("right",5)
- sleep(4)
- rs.setAnalogOutput("right",0)
- end
- function dispense(item)
- if router.getItemDetail(1) then
- eject()
- storage.exportItemToChest(item, routerName)
- eject()
- else
- storage.exportItemToChest(item, routerName)
- eject()
- end
- end
- function getBarrel(slot)
- if barrel.getItemDetail(slot) then
- return barrel.getItemDetail(slot)
- else return nil
- end
- end
- --read contents of item router
- function getInput()
- if router.getItemDetail(1) then
- return router.getItemDetail(1)
- else return nil
- end
- end
- function getPlayers()
- local players = player.getPlayersInRange(6)
- local playersInRange = {}
- for i=1, #players do
- local playerPos = player.getPlayerPos(players[i])
- if not playerPos then
- return false
- end
- local playerV = vector.new(playerPos.x, playerPos.y, playerPos.z)
- if playerV.y >= vendArea1.y and playerV.y <= vendArea2.y then
- if playerV.x >= vendArea1.x and playerV.x <= vendArea2.x then
- if playerV.z >= vendArea1.z and playerV.z <= vendArea2.z then
- playersInRange[i] = players[i]
- else
- end
- else
- end
- else
- end
- end
- if #playersInRange >= 1 then
- return playersInRange
- else
- return false
- end
- end
- local function verifyPlayer(player)
- local playersInRange = getPlayers()
- if playersInRange then
- for i=1, #playersInRange do
- if playersInRange == player then
- return true
- end
- end
- end
- return false
- end
- while true do
- local bomlist = loadBom()
- input = getInput()
- fullscreen.drawList(bomlist)
- plyr = getPlayers()
- if plyr then
- if input then
- total = 0
- for k,v in pairs(bomlist) do
- if not bomlist[k].tally then
- bomlist[k].tally = 0
- end
- if bomlist[k].name == input.name then
- bomlist[k].tally = bomlist[k].tally + input.count
- saveBom(bomlist)
- storage.importItemFromChest(input,routerName)
- log = fs.open("/requester/log","a")
- log.write(os.date("%m/%d/%Y,"))
- log.write(os.date("%H:%M,"))
- log.write(plyr[1]..",")
- log.write(input.name..",")
- log.write(input.count)
- log.write("\n")
- log.close()
- elseif bomlist[k].tags then
- for h,g in pairs(bomlist[k].tags) do
- if input.tags[h] then
- bomlist[k].tally = bomlist[k].tally + input.count
- saveBom(bomlist)
- storage.importItemFromChest(input,routerName)
- log = fs.open("/requester/log","a")
- log.write(os.date("%m/%d/%Y,"))
- log.write(os.date("%H:%M,"))
- log.write(plyr[1]..",")
- log.write(input.name..",")
- log.write(input.count)
- log.write("\n")
- log.close()
- end
- end
- end
- end
- if getInput() then
- eject()
- end
- end
- else sleep(1)
- end
- sleep(1)
- end
Add Comment
Please, Sign In to add comment