DubstepDentist icon

Computer Craft - Portal

DubstepDentist | PRO | 03/30/15 05:52:14 AM UTC | 0 ⭐ | 378 👁️ | Never ⏰ | []
Lua |

4.1 KB

|

None

|

0 👍

/

0 👎

sleep(10)
os.loadAPI("button")
m = peripheral.wrap("top")
m.clear()
rednet.open("bottom")
local page = 1
local pages = 0
local names = {}
local turtles = {}
local remove = false
 
function fillTurtles()
   turtles[1] = 44
--   turtles[2] = 114
--   turtles[3] = 117
end
 
function fillTable()
   m.clear()
   button.clearTable()
   local totalrows = 0
   local numNames = 0
   local col = 2
   local row = 12
   local countRow = 1
   local currName = 0
   local npp = 12 --names per page
   for turt, data in pairs(names) do
      for i,j in pairs(data) do
         totalrows = totalrows+1
      end
   end
   pages = math.ceil(totalrows/npp)
   print(totalrows)
   for turt, data in pairs(names) do
      currName = 0
      for slot, name in pairs(data) do
       currName = currName + 1
       if currName > npp*(page-1) and currName < npp*page+1 then
         row = 4+(countRow)
         names[turt][slot] = string.sub(name, 0, 17)
         button.setTable(string.sub(name, 0, 17), runStuff, turt..":"..slot, col, col+17 , row, row)
         if col == 21 then 
           col = 2 
           countRow = countRow + 2
         else 
           col = col+19 
         end
       end
      end
   end
   button.setTable("Next Page", nextPage, "", 21, 38, 1, 1)
   button.setTable("Prev Page", prevPage, "", 2, 19, 1, 1)
   button.setTable("Refresh", checkNames, "", 2, 38, 19, 19)
   button.label(15,3, "Page: "..tostring(page).." of "..tostring(pages))
   button.screen()
end      
 
function nextPage()
   if page+1 <= pages then 
      page = page+1 
   end
   fillTable()
   sleep(0.25)
end
 
function prevPage()
   if page-1 >= 1 then page = page-1 end
   fillTable()
   sleep(0.25)
end   
                           
function getNames()
   names = {}
   for x, y in pairs(turtles) do
      names[y] = {}
      rednet.send(y, "getNames")
      local id, msg, dist = rednet.receive(2)
--      print(msg)
      names[y] = textutils.unserialize(msg)
   end
end
 
function removeIt()
   remove = not remove
--   print(remove)
   button.toggleButton("Remove Book")
end
 
function runStuff(info)
   if remove == true then
      removeBook(info)
   else
      openPortal(info)
   end      
end
 
function removeBook(info)
   local turt, slot = string.match(info, "(%d+):(%d+)")
   button.toggleButton(names[tonumber(turt)][tonumber(slot)])
   data = "remove"..tostring(slot)
   rednet.send(tonumber(turt), data)
   rednet.receive()
   button.toggleButton(names[tonumber(turt)][tonumber(slot)])
   remove=false
   button.toggleButton("Remove Book")
--   sleep(1)
   checkNames()
end   
 
function openPortal(info)
   local turt,slot = string.match(info, "(%d+):(%d+)")
--   print(names[tonumber(turt)][tonumber(slot)])
   button.toggleButton(names[tonumber(turt)][tonumber(slot)])
   print(names[tonumber(turt)][tonumber(slot)])
   data = "books"..tostring(slot)
   rednet.send(tonumber(turt), data)
   rednet.receive()
   button.toggleButton(names[tonumber(turt)][tonumber(slot)])
end
 
function checkNames()
   button.flash("Refresh")
   for num, turt in pairs(turtles) do
     rednet.send(turt, "checkSlots")
     msg = ""
     while msg ~= "done" do
       id, msg, dist = rednet.receive()
       if msg == "getName" then
          m.clear()
          m.setCursorPos(5, 12)
          m.write("New book detected.")
          m.setCursorPos(5, 14)
          m.write("Please enter the name")
          m.setCursorPos(5, 16)
          m.write("On the computer")
          m.setCursorPos(5, 18)
          m.write("<<----")
          term.clear()
          term.write("Please enter a name for the new book: ")
          name = read()
          rednet.send(id, name)
       end
     end
   end
   getNames()
   fillTable()
end
 
function getClick()
   event, side, x,y = os.pullEvent()
   if event == "monitor_touch" then
      button.checkxy(x,y)
   elseif event == "redstone" then
      print("redstone")
      sleep(5)
      checkNames()      
   end
end
 
fillTurtles()
fillTable()
checkNames()
 
 
while true do
   getClick()
--   checkNames()
end

Comments