Advertisement
PancakePhD

slot client

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