Advertisement
PancakePhD

slot client

May 10th, 2024 (edited)
634
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.         monitor.setCursorPos(3,7)
  173.         i = string.find(token, ":")
  174.         monitor.write("Add ")
  175.         monitor.setTextColor(colors.yellow)
  176.         monitor.write(string.sub(token, i + 1))
  177.     end
  178.    
  179.     if (credits > 0) then
  180.         monitor.setCursorPos(1,8)
  181.         monitor.write("Pull the lever")
  182.         monitor.setCursorPos(1,9)
  183.         monitor.write("to play -->")
  184.     end
  185. end
  186.  
  187. adminMenu = {
  188.     "Collect Tokens",
  189.     "Change Token",
  190.     "Add Reward",
  191.     "Change Reward",
  192.     "Exit"
  193. }
  194.  
  195. selectedItem = 1;
  196.  
  197. local function showAdminMenu()
  198.     for i=1,#adminMenu do
  199.         if (i == selectedItem) then
  200.             monitor.setTextColor(colors.yellow)
  201.         end
  202.         monitor.setCursorPos(1,2+i)
  203.         monitor.write(adminMenu[i])
  204.         monitor.setTextColor(colors.white)
  205.     end
  206. end
  207.  
  208. local function showAdminScreen()
  209.     monitor.clear()
  210.     monitor.setCursorPos(2,1)
  211.     monitor.setTextColor(colors.red)
  212.     monitor.write("Welcome Admin")
  213.     monitor.setTextColor(colors.white)
  214.     monitor.setCursorPos(1,2)
  215.        
  216.     showAdminMenu()
  217.  
  218.     monitor.setCursorPos(1,9)
  219.     monitor.write("Submit:")
  220.     monitor.setCursorPos(1,10)
  221.     monitor.write("Insert Card")
  222. end
  223.  
  224. local function addReward()
  225.     turtle.suckDown()
  226.     turtle.drop()
  227.  
  228.     monitor.clear()
  229.     monitor.setCursorPos(1,1)
  230.     monitor.write("Add Reward:")
  231.     monitor.setCursorPos(1,2)
  232.     monitor.write(reward)
  233.    
  234.     monitor.setCursorPos(1,4)
  235.     monitor.write("Current Stock:")
  236.     monitor.setCursorPos(1,5)
  237.     monitor.write(rewardCount)
  238.  
  239.     monitor.setCursorPos(1,7)
  240.     monitor.write("Pull Lever")
  241.     monitor.setCursorPos(1,8)
  242.     monitor.write("to Exit")
  243. end
  244.  
  245. local function collect(tokenChest)
  246.     turtle.turnRight(1)
  247.    
  248.     if tokenChest then
  249.         turtle.turnRight(1)
  250.     end
  251.    
  252.     max = 16
  253.    
  254.     while max == 16 do
  255.         for i=1,max do
  256.             turtle.suck()
  257.        
  258.             if turtle.getItemCount(i) ~= 0 and max ~= 16 then
  259.                 max = max + 1
  260.             end
  261.         end
  262.    
  263.         turtle.turnLeft(1)
  264.        
  265.         if tokenChest then
  266.             turtle.turnLeft(1)
  267.         end
  268.        
  269.         emptySpace = turtle.getItemSpace()
  270.        
  271.         for i=1,max do
  272.             turtle.select(i)
  273.             turtle.drop()
  274.         end
  275.        
  276.         max = emptySpace
  277.        
  278.         turtle.select(1)
  279.     end
  280. end
  281.  
  282. local function changeToken()
  283.     turtle.suckDown()
  284.     turtle.drop()
  285.  
  286.     monitor.clear()
  287.     monitor.setCursorPos(1,1)
  288.     monitor.write("Change Token")
  289.     monitor.setCursorPos(1,3)
  290.     monitor.write("Drop the item")
  291.    
  292.     monitor.setCursorPos(1,5)
  293.     monitor.write("Current Token:")
  294.     monitor.setCursorPos(1,6)
  295.     monitor.write(token)
  296.    
  297.     os.sleep(2)
  298. end
  299.  
  300. local function changeReward()
  301.     turtle.suckDown()
  302.     turtle.drop()
  303.  
  304.     monitor.clear()
  305.     monitor.setCursorPos(1,1)
  306.     monitor.write("Change Reward")
  307.     monitor.setCursorPos(1,3)
  308.     monitor.write("Drop the item")
  309.    
  310.     monitor.setCursorPos(1,5)
  311.     monitor.write("Current Reward:")
  312.     monitor.setCursorPos(1,6)
  313.     monitor.write(reward)
  314.    
  315.     os.sleep(2)
  316. end
  317.  
  318. local function addCredits()    
  319.     turtle.select(1)
  320.     if (turtle.suck(64)) then
  321.         item = turtle.getItemDetail(1)
  322.        
  323.         print(item.name)
  324.        
  325.         if (selectedItem == 2) and (item.name ~= "computercraft:disk") then
  326.             tokenFile = fs.open("token",'w')
  327.             tokenFile.write(item.name)
  328.             tokenFile.close()
  329.             tokenCountFile = fs.open("tokenCount",'w')
  330.             tokenCountFile.write(0)
  331.             tokenCountFile.close()
  332.            
  333.             token = item.name
  334.            
  335.             monitor.clear()
  336.             monitor.setCursorPos(1,5)
  337.             monitor.write("Token set:")
  338.             monitor.setCursorPos(1,6)
  339.             monitor.write(item.name)
  340.            
  341.             os.sleep(2)
  342.            
  343.             collect(true)
  344.            
  345.             selectedItem = 1
  346.             adminScreen = false
  347.         elseif (selectedItem == 3) then
  348.             if rs.getInput(playSide) then
  349.                 monitor.clear()
  350.                 showAdminScreen()
  351.             elseif (item.name == reward) then
  352.                 turtle.turnRight(1)
  353.                 turtle.drop(64)
  354.                 turtle.turnLeft(1)
  355.                
  356.                 rewardCount = rewardCount + item.count
  357.  
  358.                 rewardCountFile = fs.open("rewardCount",'w')
  359.                 rewardCountFile.write(rewardCount)
  360.                 rewardCountFile.close()
  361.  
  362.                 addReward()
  363.             else
  364.                 addReward()
  365.             end
  366.         elseif (selectedItem == 4) and (item.name ~= "computercraft:disk") then
  367.             rewardFile = fs.open("reward","w")
  368.             rewardFile.write(item.name)
  369.             rewardFile.close()
  370.             rewardCountFile = fs.open("rewardCount",'w')
  371.             rewardCountFile.write(0)
  372.             rewardCountFile.close()
  373.            
  374.             reward = item.name
  375.             rewardCount = 0
  376.            
  377.             monitor.clear()
  378.             monitor.setCursorPos(1,5)
  379.             monitor.write("Reward set:")
  380.             monitor.setCursorPos(1,6)
  381.             monitor.write(item.name)
  382.            
  383.             os.sleep(2)
  384.  
  385.             turtle.drop()
  386.            
  387.             collect(false)
  388.            
  389.             selectedItem = 1
  390.             adminScreen = false
  391.         elseif (item.name == token) then
  392.             count = item.count
  393.            
  394.             turtle.turnRight(1)
  395.             turtle.turnRight(1)
  396.             turtle.drop(64)
  397.             turtle.turnLeft(1)
  398.             turtle.turnLeft(1)
  399.            
  400.             tokenCount = tokenCount + count
  401.            
  402.             credits = credits + count
  403.            
  404.             screenSaver(credits)
  405.         elseif (item.name == "computercraft:disk") then
  406.             monitor.clear()
  407.             monitor.setCursorPos(1,5)
  408.             monitor.setTextColor(colors.yellow)
  409.             monitor.write("Authenticating...")
  410.  
  411.             turtle.dropDown()
  412.             file = fs.open("disk/keycard", "r")
  413.            
  414.             if file then
  415.                 password = file.readAll()
  416.                 file.close()
  417.  
  418.                 modem.open(714)
  419.                 modem.transmit(816, 714, securityId..":"..diskDrive.getDiskID().."="..password)
  420.                 event, modemSide, senderChannel, replyChannel, message, senderDistance = os.pullEvent("modem_message")
  421.                
  422.                 if message then
  423.                     turtle.suckDown()
  424.                     turtle.drop()
  425.  
  426.                     if not adminScreen then
  427.                         showAdminScreen()      
  428.                         adminScreen = true
  429.                     elseif selectedItem == 4 then
  430.                         changeReward()
  431.                     elseif selectedItem == 3 then
  432.                         addReward()
  433.                     elseif selectedItem == 2 then
  434.                         changeToken()
  435.                     elseif selectedItem == 1 then
  436.                         collect(true)
  437.                     else
  438.                         adminScreen = false
  439.                         selectedItem = 1
  440.                     end
  441.                 else
  442.                     monitor.clear()
  443.                     monitor.setCursorPos(1,5)
  444.                     monitor.setTextColor(colors.red)
  445.                     monitor.write("Non-Owner Key.")
  446.                 end
  447.             end
  448.  
  449.             turtle.suckDown()          
  450.         end
  451.         turtle.drop()
  452.         os.sleep(2)
  453.     end
  454. end
  455.  
  456. local function main()
  457.     credits = 0
  458.    
  459.     players = radar.getPlayersInRange(2)
  460.  
  461.     if #players > 0 then
  462.         player = players[1]
  463.         rs.setOutput("bottom", true)
  464.         --print(player)
  465.     else
  466.         rs.setOutput("bottom", false)
  467.     end
  468.    
  469.     if adminScreen then
  470.         if rs.getInput(playSide) then
  471.             if selectedItem == #adminMenu then
  472.                 selectedItem = 1
  473.             else
  474.                 selectedItem = selectedItem + 1
  475.             end
  476.        
  477.         showAdminScreen()
  478.         os.sleep(1)
  479.         end
  480.     else
  481.         screenSaver(credits)
  482.     end
  483.    
  484.     addCredits()
  485.  
  486.     while credits > 0 do
  487.         addCredits()
  488.  
  489.         os.pullEvent("redstone")
  490.        
  491.         if (rs.getInput(playSide) and credits > 0) then
  492.        
  493.             play(credits)      
  494.                
  495.             credits = credits - 1
  496.            
  497.             if (credits == 0) then
  498.                 os.sleep(5)
  499.             end            
  500.         end
  501.        
  502.         if (credits == 0 and not adminScreen) then
  503.             screenSaver(0)
  504.         end
  505.     end
  506. end
  507.  
  508. while true do
  509.     main()
  510. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement