Advertisement
Marlingaming

Ticket Gate System V3

Dec 14th, 2023 (edited)
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. local Credits = 0
  2.  
  3. local Status = false
  4.  
  5. local Hopper
  6. local Store_Box
  7. local Despenser
  8. local Ticket_Data = {}
  9.  
  10. local Door
  11. local Display
  12.  
  13. local BankDetails = {0,{"user","amount","action","reason"}}--net,format
  14.  
  15. local Charge = -1
  16. local Currency = {{"createdeco:brass_coin",64},{"createdeco:iron_coin",16},{"createdeco:copper_coin",1}}
  17.  
  18. function Setup()
  19. local file = fs.open("settings.txt","w")
  20. local a, b, c, d
  21. Hopper = "top"
  22. Store_Box = "bottom"
  23. Door = "back"
  24. Display = "left"
  25. Despenser = "right"
  26. local Check = peripheral.wrap(Hopper)
  27. local AllPass = true
  28. for i = 1, Check.size() do
  29. local Slot = Check.getItemDetail(i)
  30. if Slot ~= nil then Ticket_Data[#Ticket_Data+1] = {Slot.nbt,AllPass} if AllPass == true then AllPass = false end end
  31. end
  32. file.write(textutils.serialize({Hopper,Store_Box,Door,Display,Depsenser,Ticket_Data,BankDetails,Charge}))
  33. file.close()
  34. os.shutdown()
  35. end
  36.  
  37. function boot()
  38. local file = fs.open("settings.txt","r")
  39. local Data = textutils.unserialize(file.readAll())
  40. Hopper,Store_Box,Door,Display,Pass,Ticket_Data,BankDetails,Charge= Data[1], Data[2], Data[3], Data[4], Data[5], Data[6], Data[7], Data[8]
  41. file.close()
  42. Status = redstone.getInput("front")
  43. if Status == false then UI("closed") os.shutdown() else Main() end
  44. end
  45.  
  46. function UI(screen)
  47. local Monitor = peripheral.wrap(Display)
  48. Monitor.clear()
  49. Monitor.setCursorPos(1,1)
  50. if screen == "home" then
  51. Monitor.write("Insert")
  52. Monitor.setCursorPos(1,2)
  53. Monitor.write("Card")
  54. if Charge ~= -1 and Charge ~= 0 then Monitor.setCursorPos(1,3) Monitor.write("or cash") Monitor.setCursorPos(1,4) Monitor.write("Pay:$"..Charge) Monitor.setCursorPos(1,5) Monitor.write("C:$"..Credits) end
  55. elseif screen == "pass" then
  56. Monitor.write("ENTER")
  57. elseif screen == "closed" then
  58. Monitor.write("CLOSED")
  59. end
  60. end
  61.  
  62. function Main()
  63. local Deposit = peripheral.wrap(Hopper)
  64. local Store = peripheral.wrap(Store_Box)
  65. local Return = peripheral.wrap(Despenser)
  66. while Status == true do
  67. local Pass = false
  68. local Slot = Deposit.getItemDetail(1)
  69. UI("home")
  70. if Slot ~= nil then
  71. if Slot.name == "minecraft:paper" then
  72. for i = 1, #Ticket_Data do
  73. if Ticket_Data[i][1] == Slot.nbt then
  74. Pass = true
  75. if Ticket Data[i][2] == true then
  76. Deposit.pushItem(Despenser,i)
  77. redstone.setOutput(Despenser,true)
  78. os.sleep(2)
  79. redstone.setOutput(Despenser,false)
  80. else
  81. Deposit.pushItem(Store_Box,i)
  82. end
  83. end
  84. end
  85. elseif Charge ~= -1 and Charge ~= 0 then
  86. for i = 1, #Currency do
  87. if Slot.name == Currency[i][1] then
  88. Credits = Credits + Currency[i][2] * Slot.count
  89. end
  90. end
  91. if Credits >= Charge then Credits = 0 Pass = true end
  92. else
  93. --bank check
  94. end
  95. if Pass == true then
  96. UI("pass")
  97. redstone.setOutput(Door,true)
  98. os.sleep(2)
  99. redstone.setOutput(Door,false)
  100. end
  101. end
  102. end
  103.  
  104. if fs.exists("settings.txt") then boot() else Setup() end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement