Guest User

startup

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