Advertisement
aidenmagrath

Menu 2

Aug 7th, 2014
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. os.unloadAPI("button")
  2. sleep(0.5)
  3. os.loadAPI("button")
  4. mon = peripheral.wrap("left")
  5. rednet.open("back")
  6.  
  7. items = {}
  8.  
  9. menu = "index"
  10.  
  11. label = ""
  12. inputName = ""
  13. intputId = ""
  14. intputMeta = ""
  15.  
  16. indexLetter = ""
  17. currentPage = 1 --Page number in letter index
  18. hasNextPage = false
  19.  
  20. currentItem = ""
  21. withdrawAmount = ""
  22. craftAmount = ""
  23.  
  24. function save(table, name)
  25.   local file = fs.open(name, "w")
  26.   file.write(textutils.serialize(table))
  27.   file.close()
  28. end
  29.  
  30. function load(name)
  31.   local file = fs.open(name, "r")
  32.   if file ~= nil then
  33.     local data = file.readAll()
  34.     file.close()
  35.     return textutils.unserialize(data)
  36.   else
  37.     return nil
  38.   end
  39. end
  40.  
  41. function split(pString, pPattern) --("A_Small_Dog", "_")
  42.   local Table = {}
  43.   local fpat = "(.-)" .. pPattern
  44.   local last_end = 1
  45.   local s, e, cap = pString:find(fpat, 1)
  46.   while s do
  47.     if s ~= 1 or cap ~= "" then
  48.       table.insert(Table, cap)
  49.     end
  50.     last_end = e + 1
  51.     s, e, cap = pString:find(fpat, last_end)
  52.   end
  53.   if last_end <= #pString then
  54.     cap = pString:sub(last_end)
  55.     table.insert(Table, cap)
  56.   end
  57.   return Table
  58. end
  59.  
  60. function getReply(uuid)
  61.   id, message = rednet.receive()
  62.   m = split(message, " ")
  63.   if m[1] == "inv" then
  64.     if m[2] == "replyAmount" then
  65.       if tonumber(m[3]) == tonumber(uuid) then
  66.         return m[4]
  67.       end
  68.     end
  69.   end
  70.   return nil
  71. end
  72.  
  73. function selectIndex(selected)
  74.   print("Selected " ..selected .." in " ..menu)
  75.   button.flash(selected)
  76.    
  77.   if selected == "Menu" then
  78.     menu = "index"
  79.     currentPage = 0
  80.     drawMenu()
  81.  
  82.   elseif menu == "index" then
  83.     if selected == "Add Item" then
  84.       inputName = ""
  85.       menu = "addItemName"
  86.       drawKeyboard("Enter Item Name: ")
  87.       selected = ""
  88.     elseif string.len(selected) == 1 and menu == "index" then
  89.       currentPage = 1
  90.       hasNextPage = false
  91.       menu = "itemList"
  92.       indexLetter = selected
  93.       drawList(selected)
  94.     end
  95.  
  96.   elseif menu == "itemList" then
  97.     if selected == "Prev" then
  98.       if currentPage > 1 then
  99.         currentPage = currentPage - 1
  100.         drawList(indexLetter)
  101.       else
  102.         c = string.byte(indexLetter) - 1
  103.         if c >= 65 then
  104.           currentPage = 1
  105.           hasNextPage = false
  106.           menu = "itemList"
  107.           indexLetter = string.char(c)
  108.           drawList(string.char(c))
  109.         else
  110.           currentPage = 1
  111.           hasNextPage = false
  112.           hasNextPage = false
  113.           menu = "itemList"
  114.           indexLetter = "Z"
  115.           drawList("Z")
  116.         end
  117.       end
  118.     elseif selected == "Next" then
  119.       if hasNextPage then
  120.         print("Has next")
  121.         currentPage = currentPage + 1
  122.         drawList(indexLetter)
  123.       else
  124.         print("No Next next")
  125.         c = string.byte(indexLetter) + 1
  126.         if c <= 90 then
  127.           currentPage = 1
  128.           hasNextPage = false
  129.           menu = "itemList"
  130.           indexLetter = string.char(c)
  131.           drawList(string.char(c))
  132.         else
  133.           currentPage = 1
  134.           hasNextPage = false
  135.           menu = "itemList"
  136.           indexLetter = "A"
  137.           drawList("A")
  138.         end
  139.       end
  140.     else
  141.       print("Clicked item")
  142.       menu = "item"
  143.       currentItem = selected
  144.       drawItem(selected)
  145.     end
  146.    
  147.   elseif menu == "item" then
  148.     if selected == "Withdraw" then
  149.       withdrawAmount = ""
  150.       menu = "withdraw"
  151.       drawNumpad("Enter Amount: ")
  152.       selected = ""
  153.     end
  154.  
  155.   elseif menu == "addItemName" then
  156.     print("In Add Item Name")
  157.     if selected ~= "Backspace"  and selected ~= "Menu" and string.len(selected) == 1 then
  158.       mon.setCursorPos(2, 8)
  159.       mon.clearLine()
  160.       inputName = inputName ..string.lower(selected)
  161.       mon.write(label ..inputName)
  162.       selected = ""
  163.     elseif selected == "Backspace" then
  164.       mon.setCursorPos(2, 8)
  165.       mon.clearLine()
  166.       inputName = string.sub(inputName, 1, string.len(inputName) - 1)
  167.       mon.write(label ..inputName)
  168.       selected = ""
  169.     elseif selected == "OK" and menu == "addItemName" then
  170.       inputId = ""
  171.       drawNumpad("Enter Item ID:")
  172.       menu = "addItemId"
  173.     end
  174.    
  175.   elseif menu == "withdraw" then
  176.     if selected ~= "Backspace" and selected ~= "Menu" and string.len(selected) == 1 then
  177.       mon.setCursorPos(2, 8)
  178.       mon.clearLine()
  179.       if withdrawAmount == nil then
  180.         withdrawAmount = string.lower(selected)
  181.       else
  182.         withdrawAmount = withdrawAmount ..string.lower(selected)
  183.       end
  184.       mon.write(label ..withdrawAmount)
  185.       selected = ""
  186.     elseif selected == "Backspace" then
  187.       mon.setCursorPos(2, 8)
  188.       mon.clearLine()
  189.       withdrawAmount = string.sub(withdrawAmount, 1, string.len(withdrawAmount) - 1)
  190.       mon.write(label ..withdrawAmount)
  191.       selected = ""
  192.     elseif selected == "OK" and menu == "withdraw" then
  193.       uuid = tostring(items[currentItem]["id"] + items[currentItem]["meta"] * 32768)
  194.       amount = nil
  195.  
  196.       rednet.broadcast("inv getAmount " ..uuid)
  197.       while amount == nil do
  198.         amount = getReply(uuid)
  199.       end
  200.  
  201.       if tonumber(amount) > tonumber(withdrawAmount) + 1 then
  202.         rednet.broadcast("inv withdraw " ..uuid .." " ..withdrawAmount)
  203.         drawItem(currentItem)
  204.         menu = "item"
  205.       else
  206.         button.clearTable()
  207.         button.setTable("Menu", selectIndex, 2, 80, 2, 4)
  208.         button.label(2, 8, "Not enough items to withdraw!")
  209.         button.label(2, 9, tostring(amount - 1) .." " ..currentItem .."(s) left in storage.")
  210.         button.screen()
  211.       end
  212.       selected = ""
  213.     end
  214.    
  215.   elseif menu == "addItemId" then
  216.     print("In Add Item Name")
  217.     if selected ~= "Backspace" and selected ~= "Menu" and string.len(selected) == 1 then
  218.       print("In Charachet")
  219.       mon.setCursorPos(2, 8)
  220.       mon.clearLine()
  221.       if inputId == nil then
  222.         inputId = string.lower(selected)
  223.       else
  224.         inputId = inputId ..string.lower(selected)
  225.       end
  226.       mon.write(label ..inputId)
  227.       selected = ""
  228.     elseif selected == "Backspace" then
  229.       mon.setCursorPos(2, 8)
  230.       mon.clearLine()
  231.       inputId = string.sub(inputId, 1, string.len(inputId) - 1)
  232.       mon.write(label ..inputId)
  233.       selected = ""
  234.     elseif selected == "OK" and menu == "addItemId" then
  235.       inputMeta = ""
  236.       drawNumpad("Enter Item Meta:")
  237.       menu = "addItemMeta"
  238.       selected = ""
  239.     end
  240.  
  241.   elseif menu == "addItemMeta" then
  242.     print("In Add Item Meta")
  243.     if selected ~= "Backspace" and selected ~= "Menu" and string.len(selected) == 1 then
  244.       mon.setCursorPos(2, 8)
  245.       mon.clearLine()
  246.       if inputMeta == nil then
  247.         inputMeta = string.lower(selected)
  248.       else
  249.         inputMeta = inputMeta ..string.lower(selected)
  250.       end
  251.       mon.write(label ..inputMeta)
  252.       selected = ""
  253.     elseif selected == "Backspace" then
  254.       mon.setCursorPos(2, 8)
  255.       mon.clearLine()
  256.       inputMeta = string.sub(inputMeta, 1, string.len(inputMeta) - 1)
  257.       mon.write(label ..inputMeta)
  258.       selected = ""
  259.     elseif selected == "OK" and menu == "addItemMeta" then
  260.       createItem()
  261.     end
  262.   end
  263. end
  264.  
  265. function pairsByKeys (t, f)
  266.   local a = {}
  267.   for n in pairs(t) do table.insert(a, n) end
  268.     table.sort(a, f)
  269.     local i = 0      -- iterator variable
  270.     local iter = function ()   -- iterator function
  271.     i = i + 1
  272.     if a[i] == nil then return nil
  273.       else return a[i], t[a[i]]
  274.     end
  275.   end
  276.   return iter
  277. end
  278.  
  279. function sortList(list)
  280.   sortedList = {}
  281.   for key, value in pairsByKeys(list) do
  282.     sortedList[key] = value
  283.   end
  284.  
  285.   return sortedList
  286. end
  287.  
  288. function drawItem(name)
  289.   button.clearTable()
  290.  
  291.   button.setTable("Prev", selectIndex, 2, 10, 2, 4)
  292.   button.setTable("Menu", selectIndex, 12, 70, 2, 4)
  293.   button.setTable("Next", selectIndex, 72, 80, 2, 4)
  294.  
  295.   button.setTable("Craft", selectIndex, 2, 40, 26, 32)
  296.   button.setTable("Withdraw", selectIndex, 42, 80, 26, 32)
  297.  
  298.   id = items[name]["id"]
  299.   meta = items[name]["meta"]
  300.   uuid = id + meta * 32768
  301.   amount = nil
  302.  
  303.   rednet.broadcast("inv getAmount " ..uuid)
  304.   while amount == nil do
  305.     amount = getReply(uuid)
  306.   end
  307.  
  308.   button.label(2, 6, "Item: " ..name)
  309.   button.label(2, 10, "ID: " ..tostring(id))
  310.   button.label(2, 14, "Meta: " ..tostring(meta))
  311.   button.label(2, 18, "UUID: " ..tostring(uuid))
  312.   button.label(2, 22, "Amount: " ..amount)
  313.  
  314.   button.screen()
  315. end
  316.  
  317. function addItem(name, id, meta)
  318.   if name == nil then
  319.     print("ITEM NAME IS NULL")
  320.   end
  321.  
  322.   print("NAME: " ..name)
  323.  
  324.   items[name] = {}
  325.   items[name]["id"] = tonumber(id)
  326.   items[name]["meta"] = tonumber(meta)
  327.  
  328.   itemName = ""
  329.   itemId = ""
  330.   itemMeta = ""
  331.  
  332.   items = sortList(items)
  333.  
  334.   save(items, "dictionary")
  335. end
  336.  
  337. function createItem()
  338.   button.clearTable()
  339.  
  340.   addItem(inputName, inputId, inputMeta)
  341.  
  342.   button.setTable("Menu", selectIndex, 2, 80, 2, 4)
  343.  
  344.   button.label(2, 8, "Added " ..inputName .." to item dictionary!")
  345.  
  346.   for k, v in pairs(items) do
  347.     print(k)
  348.   end
  349.  
  350.   menu = "addedItem"
  351.  
  352.   button.screen()
  353. end
  354.  
  355. function drawList(letter)
  356.   print("Drawing Item List!")
  357.   button.clearTable()
  358.  
  359.   button.setTable("Prev", selectIndex, 2, 10, 2, 4)
  360.   button.setTable("Menu", selectIndex, 12, 70, 2, 4)
  361.   button.setTable("Next", selectIndex, 72, 80, 2, 4)
  362.  
  363.  
  364.   lastLetter = ""
  365.   totalItemCount = 0
  366.   itemsInColumn = 0
  367.   column = 1
  368.   pageItemIsOn = 1
  369.   hasNextPage = false
  370.  
  371.  
  372.  
  373.   for k, v in pairsByKeys(items) do
  374.     --print("Subbed: " .. string.sub(k, 1, 1))
  375.     if lastLetter == string.lower(letter) and string.sub(k, 1, 1) ~= string.lower(letter) then
  376.       print("Breaking")
  377.       break
  378.     elseif string.sub(k, 1, 1) == string.lower(letter) then
  379.       pageItemIsOn = math.ceil(totalItemCount / 14)
  380.       --print("pageItemIsOn: " ..pageItemIsOn .. " Current Page: " ..currentPage)
  381.       if pageItemIsOn < 1 then
  382.         pageItemIsOn = 1
  383.       end
  384.  
  385.       --print("Page " ..currentPage)
  386.       if pageItemIsOn == currentPage then
  387.         if itemsInColumn == 7 then
  388.           itemsInColumn = 0;
  389.           if column == 1 then
  390.             column = 2
  391.           else
  392.             column = 1
  393.           end
  394.         end
  395.      
  396.         if column == 1 then
  397.          -- print("Adding to column 1")
  398.           button.setTable(k, selectIndex, 2, 40, 6 + itemsInColumn * 4, 6 + itemsInColumn * 4 + 2)
  399.         else
  400.           --print("Adding to column 2")
  401.           button.setTable(k, selectIndex, 42, 80, 6 + itemsInColumn * 4, 6 + itemsInColumn * 4 + 2)
  402.         end
  403.         itemsInColumn = itemsInColumn + 1
  404.       elseif pageItemIsOn > currentPage then
  405.         hasNextPage = true
  406.       end
  407.      
  408.       totalItemCount = totalItemCount + 1
  409.       lastLetter = string.lower(letter)
  410.     end
  411.   end
  412.  
  413.   print("Next? ", hasNextPage)
  414.   button.screen()
  415. end
  416.  
  417. function drawMenu()
  418.   button.clearTable()
  419.  
  420.   button.setTable("Menu", selectIndex, 2, 80, 2, 4)
  421.  
  422.   button.setTable("A", selectIndex, 2, 10, 6, 11)
  423.   button.setTable("B", selectIndex, 12, 20, 6, 11)
  424.   button.setTable("C", selectIndex, 22, 30, 6, 11)
  425.   button.setTable("D", selectIndex, 32, 40, 6, 11)
  426.   button.setTable("E", selectIndex, 42, 50, 6, 11)
  427.   button.setTable("F", selectIndex, 52, 60, 6, 11)
  428.   button.setTable("G", selectIndex, 62, 70, 6, 11)
  429.   button.setTable("H", selectIndex, 72, 80, 6, 11)
  430.  
  431.   button.setTable("I", selectIndex, 2, 10, 13, 18)
  432.   button.setTable("J", selectIndex, 12, 20, 13, 18)
  433.   button.setTable("K", selectIndex, 22, 30, 13, 18)
  434.   button.setTable("L", selectIndex, 32, 40, 13, 18)
  435.   button.setTable("M", selectIndex, 42, 50, 13, 18)
  436.   button.setTable("N", selectIndex, 52, 60, 13, 18)
  437.   button.setTable("O", selectIndex, 62, 70, 13, 18)
  438.   button.setTable("P", selectIndex, 72, 80, 13, 18)
  439.  
  440.   button.setTable("Q", selectIndex, 2, 10, 20, 25)
  441.   button.setTable("R", selectIndex, 12, 20, 20, 25)
  442.   button.setTable("S", selectIndex, 22, 30, 20, 25)
  443.   button.setTable("T", selectIndex, 32, 40, 20, 25)
  444.   button.setTable("U", selectIndex, 42, 50, 20, 25)
  445.   button.setTable("V", selectIndex, 52, 60, 20, 25)
  446.   button.setTable("W", selectIndex, 62, 70, 20, 25)
  447.   button.setTable("X", selectIndex, 72, 80, 20, 25)
  448.  
  449.   button.setTable("Y", selectIndex, 2, 10, 27, 32)
  450.   button.setTable("Z", selectIndex, 12, 20, 27, 32)
  451.   button.setTable("Add Item", selectIndex, 22, 80, 27, 32)
  452.  
  453.   button.screen()
  454. end
  455.  
  456. function drawKeyboard(tempLabel)
  457.   button.clearTable()
  458.  
  459.   label = tempLabel
  460.  
  461.   button.setTable("Menu", selectIndex, 2, 80, 2, 4)
  462.  
  463.   button.setTable("A", selectIndex, 2, 10, 12, 17)
  464.   button.setTable("B", selectIndex, 12, 20, 12, 17)
  465.   button.setTable("C", selectIndex, 22, 30, 12, 17)
  466.   button.setTable("D", selectIndex, 32, 40, 12, 17)
  467.   button.setTable("E", selectIndex, 42, 50, 12, 17)
  468.   button.setTable("F", selectIndex, 52, 60, 12, 17)
  469.   button.setTable("G", selectIndex, 62, 70, 12, 17)
  470.   button.setTable("H", selectIndex, 72, 80, 12, 17)
  471.  
  472.   button.setTable("I", selectIndex, 2, 10, 19, 24)
  473.   button.setTable("J", selectIndex, 12, 20, 19, 24)
  474.   button.setTable("K", selectIndex, 22, 30, 19, 24)
  475.   button.setTable("L", selectIndex, 32, 40, 19, 24)
  476.   button.setTable("M", selectIndex, 42, 50, 19, 24)
  477.   button.setTable("N", selectIndex, 52, 60, 19, 24)
  478.   button.setTable("O", selectIndex, 62, 70, 19, 24)
  479.   button.setTable("P", selectIndex, 72, 80, 19, 24)
  480.  
  481.   button.setTable("Q", selectIndex, 2, 10, 26, 28)
  482.   button.setTable("R", selectIndex, 12, 20, 26, 28)
  483.   button.setTable("S", selectIndex, 22, 30, 26, 28)
  484.   button.setTable("T", selectIndex, 32, 40, 26, 28)
  485.   button.setTable("U", selectIndex, 42, 50, 26, 28)
  486.  
  487.   button.setTable("V", selectIndex, 2, 10, 30, 32)
  488.   button.setTable("W", selectIndex, 12, 20, 30, 32)
  489.   button.setTable("X", selectIndex, 22, 30, 30, 32)
  490.   button.setTable("Y", selectIndex, 32, 40, 30, 32)
  491.   button.setTable("Z", selectIndex, 42, 50, 30, 32)
  492.  
  493.   button.setTable(" ", selectIndex, 52, 60, 26, 32)
  494.   button.setTable("Backspace", selectIndex, 62, 70, 26, 32)
  495.   button.setTable("OK", selectIndex, 72, 80, 26, 32)
  496.  
  497.   mon.setCursorPos(2, 8)
  498.   mon.write(label)
  499.  
  500.   button.screen()
  501. end
  502.  
  503. function drawNumpad(tempLabel)
  504.   button.clearTable()
  505.  
  506.   label = tempLabel
  507.  
  508.   button.setTable("Menu", selectIndex, 2, 80, 2, 4)
  509.  
  510.   button.setTable("0", selectIndex, 2, 10, 13, 32)
  511.  
  512.   button.setTable("1", selectIndex, 12, 20, 13, 18)
  513.   button.setTable("2", selectIndex, 22, 30, 13, 18)
  514.   button.setTable("3", selectIndex, 32, 40, 13, 18)
  515.  
  516.   button.setTable("4", selectIndex, 12, 20, 20, 25)
  517.   button.setTable("5", selectIndex, 22, 30, 20, 25)
  518.   button.setTable("6", selectIndex, 32, 40, 20, 25)
  519.  
  520.   button.setTable("7", selectIndex, 12, 20, 27, 32)
  521.   button.setTable("8", selectIndex, 22, 30, 27, 32)
  522.   button.setTable("9", selectIndex, 32, 40, 27, 32)
  523.  
  524.   button.setTable("Backspace", selectIndex, 42, 60, 13, 32)
  525.   button.setTable("OK", selectIndex, 62, 80, 13, 32)
  526.  
  527.   mon.setCursorPos(2, 8)
  528.   mon.write(label)
  529.  
  530.   button.screen()
  531. end
  532.  
  533. function getClick()
  534.   event, side, x, y = os.pullEvent("monitor_touch")
  535.   button.checkxy(x, y)
  536. end
  537.  
  538. items = load("dictionary")
  539.  
  540. if items == nil then
  541.   items = {}
  542. end
  543.  
  544. drawMenu()
  545.  
  546. while true do
  547.   getClick()
  548. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement