PancakePhD

Slot Client

Feb 19th, 2020 (edited)
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 11.18 KB | None | 0 0
  1. securityId = 1
  2.  
  3. diskDrive = peripheral.wrap("bottom")
  4. monitor = peripheral.wrap("top")
  5. modem = peripheral.wrap("right")
  6.  
  7. file = fs.open("reward","r")
  8. if file then
  9.     reward = file.readAll()
  10.     file.close()
  11. else
  12.     reward = "minecraft:diamond"
  13. end
  14.  
  15. file = fs.open("rewardCount","r")
  16. if file then
  17.     rewardCount = file.readAll()
  18.     file.close()
  19. else
  20.     rewardCount = 0
  21. end
  22.  
  23. file = fs.open("token","r")
  24. if file then
  25.     token = file.readAll()
  26.     file.close()
  27. else
  28.     token = "minecraft:diamond"
  29. end
  30.  
  31. file = fs.open("tokenCount","r")
  32. if file then
  33.     tokenCount = file.readAll()
  34.     file.close()
  35. else
  36.     tokenCount = 0
  37. end
  38.  
  39. playSide = "left"
  40.  
  41. winRate = .4
  42. winAmount = 2
  43.  
  44. adminScreen = false
  45.  
  46. monitor.setTextScale(.5)
  47.  
  48. local function checkWins(values)
  49.     local wins = 0
  50.                    
  51.     for i=1,3 do    
  52.         if (values[i] == "X" and values[i+3] == "X" and values[i+6] == "X") then
  53.             wins = wins + 1
  54.         end
  55.     end
  56.  
  57.     return wins
  58. end
  59.  
  60. local function doDisplay(values, win, credits)
  61.     monitor.clear()
  62.    
  63.     monitor.setCursorPos(5,1)
  64.  
  65.     if win then
  66.         monitor.write("Win!")
  67.         boardShowsWin = false
  68.     else
  69.         monitor.write("You Lose")
  70.         boardShowsWin = true
  71.     end
  72.  
  73.     local valuePool = {"O","O","O","O","O","O","X","X","X","X"}
  74.    
  75.     local values = {}
  76.  
  77.     while ((win and not boardShowsWin) or (not win and boardShowsWin)) and #values ~= 9 do
  78.       for i=1,10 do
  79.         values[i] = valuePool[math.random(1, 10)]
  80.       end
  81.  
  82.       if checkWins(values) == 1 then
  83.         boardShowsWin = true
  84.       elseif checkWins(values) == 0 then
  85.         boardShowsWin = false
  86.       end
  87.     end
  88.  
  89.     monitor.setCursorPos(5,3)
  90.     monitor.write("+-+-+-+")
  91.     monitor.setCursorPos(5,4)
  92.     monitor.write("|"..values[1].."|"..values[4].."|"..values[7].."|")
  93.     monitor.setCursorPos(5,5)
  94.     monitor.write("+-+-+-+")
  95.     monitor.setCursorPos(5,6)
  96.     monitor.write("|"..values[2].."|"..values[5].."|"..values[8].."|")
  97.     monitor.setCursorPos(5,7)
  98.     monitor.write("+-+-+-+")
  99.     monitor.setCursorPos(5,8)
  100.     monitor.write("|"..values[3].."|"..values[6].."|"..values[9].."|")
  101.     monitor.setCursorPos(5,9)
  102.     monitor.write("+-+-+-+")
  103.    
  104.     monitor.setCursorPos(1,10)
  105.     monitor.write("Credits: "..credits - 1)
  106. end
  107.  
  108. local function play(credits)
  109.     random = math.random(1, 10);
  110.  
  111.     win = false;
  112.  
  113.     if (random - 1 < 10  * winRate) then
  114.       win = true
  115.     end
  116.    
  117.     doDisplay(randomValues, win, credits)
  118.    
  119.     if win then
  120.         turtle.turnRight(1)
  121.         turtle.suck(winAmount)
  122.         turtle.turnLeft(1)
  123.         turtle.drop(winAmount)
  124.  
  125.         rewardCount = rewardCount - 1
  126.     end            
  127. end
  128.  
  129. local function screenSaver(credits)
  130.     monitor.clear()
  131.     monitor.setCursorPos(1,1)
  132.     monitor.write("Token:")
  133.     monitor.setCursorPos(1,2)
  134.     i = string.find(token, ":")
  135.     monitor.write("1 "..string.sub(token, i + 1))
  136.    
  137.     monitor.setCursorPos(1,3)
  138.     monitor.write("Reward: ")
  139.     monitor.setCursorPos(1,4)
  140.     i = string.find(reward, ":")
  141.     monitor.write(winAmount.." "..string.sub(reward, i + 1))
  142.    
  143.     monitor.setCursorPos(3,6)
  144.     monitor.write("Credits: "..credits, 0)
  145.    
  146.     if (credits == 0) then
  147.         monitor.setCursorPos(3,8)
  148.         monitor.write("Add credits", 1)
  149.     end
  150.    
  151.     if (credits > 0) then
  152.         monitor.setCursorPos(1,8)
  153.         monitor.write("Pull the lever")
  154.         monitor.setCursorPos(1,9)
  155.         monitor.write("to play -->")
  156.     end
  157. end
  158.  
  159. adminMenu = {
  160.     "Collect Tokens",
  161.     "Change Token",
  162.     "Add Reward",
  163.     "Change Reward",
  164.     "Exit"
  165. }
  166.  
  167. selectedItem = 1;
  168.  
  169. local function showAdminMenu()
  170.     for i=1,#adminMenu do
  171.         if (i == selectedItem) then
  172.             monitor.setTextColor(colors.yellow)
  173.         end
  174.         monitor.setCursorPos(1,2+i)
  175.         monitor.write(adminMenu[i])
  176.         monitor.setTextColor(colors.white)
  177.     end
  178. end
  179.  
  180. local function showAdminScreen()
  181.     monitor.clear()
  182.     monitor.setCursorPos(2,1)
  183.     monitor.write("Welcome Admin")
  184.     monitor.setCursorPos(1,2)
  185.        
  186.     showAdminMenu()
  187.  
  188.     monitor.setCursorPos(1,9)
  189.     monitor.write("Submit:")
  190.     monitor.setCursorPos(1,10)
  191.     monitor.write("Insert Card")
  192. end
  193.  
  194. local function addReward()
  195.     turtle.suckDown()
  196.     turtle.drop()
  197.  
  198.     monitor.clear()
  199.     monitor.setCursorPos(1,1)
  200.     monitor.write("Add Reward:")
  201.     monitor.setCursorPos(1,2)
  202.     monitor.write(reward)
  203.    
  204.     monitor.setCursorPos(1,4)
  205.     monitor.write("Current Stock:")
  206.     monitor.setCursorPos(1,5)
  207.     monitor.write(rewardCount)
  208.  
  209.     monitor.setCursorPos(1,7)
  210.     monitor.write("Pull Lever")
  211.     monitor.setCursorPos(1,8)
  212.     monitor.write("to Exit")
  213. end
  214.  
  215. local function collect(tokenChest)
  216.     turtle.turnRight(1)
  217.    
  218.     if tokenChest then
  219.         turtle.turnRight(1)
  220.     end
  221.    
  222.     max = 16
  223.    
  224.     while max == 16 do
  225.         for i=1,max do
  226.             turtle.suck()
  227.        
  228.             if turtle.getItemCount(i) ~= 0 and max ~= 16 then
  229.                 max = max + 1
  230.             end
  231.         end
  232.    
  233.         turtle.turnLeft(1)
  234.        
  235.         if tokenChest then
  236.             turtle.turnLeft(1)
  237.         end
  238.        
  239.         emptySpace = turtle.getItemSpace()
  240.        
  241.         for i=1,max do
  242.             turtle.select(i)
  243.             turtle.drop()
  244.         end
  245.        
  246.         max = emptySpace
  247.        
  248.         turtle.select(1)
  249.     end
  250. end
  251.  
  252. local function changeToken()
  253.     turtle.suckDown()
  254.     turtle.drop()
  255.  
  256.     monitor.clear()
  257.     monitor.setCursorPos(1,1)
  258.     monitor.write("Change Token")
  259.     monitor.setCursorPos(1,3)
  260.     monitor.write("Drop the item")
  261.    
  262.     monitor.setCursorPos(1,5)
  263.     monitor.write("Current Token:")
  264.     monitor.setCursorPos(1,6)
  265.     monitor.write(token)
  266.    
  267.     os.sleep(2)
  268. end
  269.  
  270. local function changeReward()
  271.     turtle.suckDown()
  272.     turtle.drop()
  273.  
  274.     monitor.clear()
  275.     monitor.setCursorPos(1,1)
  276.     monitor.write("Change Reward")
  277.     monitor.setCursorPos(1,3)
  278.     monitor.write("Drop the item")
  279.    
  280.     monitor.setCursorPos(1,5)
  281.     monitor.write("Current Reward:")
  282.     monitor.setCursorPos(1,6)
  283.     monitor.write(reward)
  284.    
  285.     os.sleep(2)
  286. end
  287.  
  288. local function addCredits()    
  289.     turtle.select(1)
  290.     if (turtle.suck()) then
  291.         item = turtle.getItemDetail(1)
  292.        
  293.         print(item.name)
  294.        
  295.         if (selectedItem == 2) and (item.name ~= "computercraft:disk") then
  296.             tokenFile = fs.open("token",'w')
  297.             tokenFile.write(item.name)
  298.             tokenFile.close()
  299.             tokenCountFile = fs.open("tokenCount",'w')
  300.             tokenCountFile.write(0)
  301.             tokenCountFile.close()
  302.            
  303.             token = item.name
  304.            
  305.             monitor.clear()
  306.             monitor.setCursorPos(1,5)
  307.             monitor.write("Token set:")
  308.             monitor.setCursorPos(1,6)
  309.             monitor.write(item.name)
  310.            
  311.             os.sleep(2)
  312.            
  313.             collect(true)
  314.            
  315.             selectedItem = 1
  316.             adminScreen = false
  317.         elseif (selectedItem == 3) then
  318.             if rs.getInput(playSide) then
  319.                 monitor.clear()
  320.                 showAdminScreen()
  321.             elseif (item.name == reward) then
  322.                 turtle.turnRight(1)
  323.                 turtle.drop(64)
  324.                 turtle.turnLeft(1)
  325.                
  326.                 rewardCount = rewardCount + item.count
  327.  
  328.                 rewardCountFile = fs.open("rewardCount",'w')
  329.                 rewardCountFile.write(rewardCount)
  330.                 rewardCountFile.close()
  331.  
  332.                 addReward()
  333.             else
  334.                 addReward()
  335.             end
  336.         elseif (selectedItem == 4) and (item.name ~= "computercraft:disk") then
  337.             rewardFile = fs.open("reward","w")
  338.             rewardFile.write(item.name)
  339.             rewardFile.close()
  340.             rewardCountFile = fs.open("rewardCount",'w')
  341.             rewardCountFile.write(0)
  342.             rewardCountFile.close()
  343.            
  344.             reward = item.name
  345.             rewardCount = 0
  346.            
  347.             monitor.clear()
  348.             monitor.setCursorPos(1,5)
  349.             monitor.write("Reward set:")
  350.             monitor.setCursorPos(1,6)
  351.             monitor.write(item.name)
  352.            
  353.             os.sleep(2)
  354.  
  355.             turtle.drop()
  356.            
  357.             collect(false)
  358.            
  359.             selectedItem = 1
  360.             adminScreen = false
  361.         elseif (item.name == token) then
  362.             count = item.count
  363.            
  364.             turtle.turnRight(1)
  365.             turtle.turnRight(1)
  366.             turtle.drop(64)
  367.             turtle.turnLeft(1)
  368.             turtle.turnLeft(1)
  369.            
  370.             tokenCount = tokenCount + count
  371.            
  372.             credits = credits + count
  373.            
  374.             screenSaver(credits)
  375.         elseif (item.name == "computercraft:disk") then
  376.             turtle.dropDown()
  377.             file = fs.open("disk/keycard", "r")
  378.            
  379.             if file then
  380.                 password = file.readAll()
  381.                 file.close()
  382.  
  383.                 modem.open(714)
  384.                 modem.transmit(816, 714, securityId..": "..diskDrive.getDiskID().."="..password)
  385.                 event, modemSide, senderChannel, replyChannel, message, senderDistance = os.pullEvent("modem_message")
  386.                
  387.                 if message then
  388.                     turtle.suckDown()
  389.                     turtle.drop()
  390.  
  391.                     if not adminScreen then
  392.                         showAdminScreen()      
  393.                         adminScreen = true
  394.                     elseif selectedItem == 4 then
  395.                         changeReward()
  396.                     elseif selectedItem == 3 then
  397.                         addReward()
  398.                     elseif selectedItem == 2 then
  399.                         changeToken()
  400.                     elseif selectedItem == 1 then
  401.                         collect(true)
  402.                     else
  403.                         adminScreen = false
  404.                         selectedItem = 1
  405.                     end
  406.                 end
  407.             end
  408.  
  409.             turtle.suckDown()          
  410.         else
  411.             turtle.drop()
  412.             os.sleep(2)
  413.         end
  414.     end
  415. end
  416.  
  417. local function main()
  418.     credits = 0
  419.    
  420.     if adminScreen then
  421.         if rs.getInput(playSide) then
  422.             if selectedItem == #adminMenu then
  423.                 selectedItem = 1
  424.             else
  425.                 selectedItem = selectedItem + 1
  426.             end
  427.        
  428.         showAdminScreen()
  429.         os.sleep(1)
  430.         end
  431.     else
  432.         screenSaver(credits)
  433.     end
  434.    
  435.     addCredits()
  436.  
  437.     while credits > 0 do
  438.         addCredits()
  439.  
  440.         os.pullEvent("redstone")
  441.        
  442.         if (rs.getInput(playSide) and credits > 0) then
  443.        
  444.             play(credits)      
  445.                
  446.             credits = credits - 1
  447.            
  448.             if (credits == 0) then
  449.                 os.sleep(5)
  450.             end            
  451.         end
  452.        
  453.         if (credits == 0 and not adminScreen) then
  454.             screenSaver(0)
  455.         end
  456.     end
  457. end
  458.  
  459. while true do
  460.     main()
  461. end
Advertisement
Add Comment
Please, Sign In to add comment