Difference between revisions of "Making a Password Protected Door"

From ComputerCraft Wiki
Jump to: navigation, search
Line 20: Line 20:
 
Once you access the startup file, enter in these five lines.
 
Once you access the startup file, enter in these five lines.
  
<pre>
+
 
while true do
+
[[Loops#The_While_loop|while]] true do
term.clear()
+
  [[term.clear]]()
term.setCursorPos(1, 1)
+
  [[term.setCursorPos]](1, 1)
print("Please Enter Password:")
+
  [[print]]("Please Enter Password:")
input = read("*")
+
  input = [[read]]("*")
</pre>
+
 
  
 
The first line opens a loop that will continue running forever, or until we explicitly exit it with the 'break' keyword. The second and third lines clear the screen of whatever may have been on it, and then set the cursor position to the top-left corner of the screen. This ensures that each time the program loops, the text appears in the same place. The fifth line assigns whatever the user types to the variable 'input'. So for example, if I typed "qwerty", it would be assigning "qwerty" to the 'input' variable. In the read call on the third line ('read("*")'), the asterisk character will be used to replace each letter typed by the user, so that the password stays hidden.
 
The first line opens a loop that will continue running forever, or until we explicitly exit it with the 'break' keyword. The second and third lines clear the screen of whatever may have been on it, and then set the cursor position to the top-left corner of the screen. This ensures that each time the program loops, the text appears in the same place. The fifth line assigns whatever the user types to the variable 'input'. So for example, if I typed "qwerty", it would be assigning "qwerty" to the 'input' variable. In the read call on the third line ('read("*")'), the asterisk character will be used to replace each letter typed by the user, so that the password stays hidden.
Line 32: Line 32:
 
Here are the next few lines added on:
 
Here are the next few lines added on:
  
<pre>
+
 
while true do
+
[[Loops#The_While_loop|while]] true do
term.clear()
+
  [[term.clear]]()
term.setCursorPos(1, 1)
+
  [[term.setCursorPos]](1, 1)
print("Please Enter Password:")
+
  [[print]]("Please Enter Password:")
input = read("*")
+
  input = [[read]]("*")
if input == "password" then
+
  if input == "password" then
  redstone.setOutput("back", true)
+
  [[redstone.setOutput]]("back", true)
  sleep(2)
+
  [[sleep]](2)
  redstone.setOutput("back", false)
+
  [[redstone.setOutput]]("back", false)
 +
  end
 
  end
 
  end
end
+
 
</pre>
+
  
 
The first line we add, 'if input == "password" then' checks whether or not the 'input' variable contains the string "password". The three lines immediately following are only executed if the password is correct. So if it's correct, 'redstone.setOutput("back", true)' sets the redstone output on the back side to true (on), which opens the door. The program then wait two seconds ('sleep(2)'), and turns the redstone output back off again. The program then reaches the end of the loop and repeats.
 
The first line we add, 'if input == "password" then' checks whether or not the 'input' variable contains the string "password". The three lines immediately following are only executed if the password is correct. So if it's correct, 'redstone.setOutput("back", true)' sets the redstone output on the back side to true (on), which opens the door. The program then wait two seconds ('sleep(2)'), and turns the redstone output back off again. The program then reaches the end of the loop and repeats.
Line 56: Line 56:
 
Type 'edit startup' and type in this code:  
 
Type 'edit startup' and type in this code:  
 
(Use Ctrl + T to terminate the program, all code is explained in the comments, the --'s. It's good to read the comments, so you actually know what the code does, you do not need to have the comments in your code, of course)
 
(Use Ctrl + T to terminate the program, all code is explained in the comments, the --'s. It's good to read the comments, so you actually know what the code does, you do not need to have the comments in your code, of course)
<pre>
+
local side = "left" -- Change left to whatever side your door / redstone is on, E.G: left, right, front, back, bottom, top. Be sure to leave the "s around it, though
while true do
+
local password = "bacon" -- Change bacon to what you want your password to be. Be sure to leave the "s around it, though
  local side = "left" -- Change left to whatever side your door / redstone is on, E.G: left, right, front, back, bottom, top. Be sure to leave the "s around it, though
+
local opentime = 5 -- Change 5 to how long (in seconds) you want the redstone current to be on. Don't put "s around it, though
  local password = "bacon" -- Change bacon to what you want your password to be. Be sure to leave the "s around it, though
+
[[Loops#The_While_loop|while]] true do
  local opentime = 5 -- Change 5 to how long (in seconds) you want the redstone current to be on. Don't put "s around it, though
+
   [[term.clear]]() -- Clears the screen
   term.clear() -- Clears the screen
+
   [[term.setCursorPos]](1,1) -- Fixes the cursor position
   term.setCursorPos(1,1) -- Fixes the cursor position
+
   [[write]]("Password: ") -- Prints 'Password: ' to the screen
   write("Password: ") -- Prints 'Password: ' to the screen
+
   local input = [[read]]("*") -- Makes the variable 'input' have the contents of what the user types in, the "*" part censors out the password
   local input = read("*") -- Makes the variable 'input' have the contents of what the user types in, the "*" part censors out the password
+
   [[term.clear]]() -- Already explained up top
   term.clear() -- Already explained up top
+
   [[term.setCursorPos]](1,1)
   term.setCursorPos(1,1)
+
 
   if input == password then -- Checks if the user inputted the correct password
 
   if input == password then -- Checks if the user inputted the correct password
    print("Password correct!") -- Prints 'Password correct!' to the screen
+
  [[print]]("Password correct!") -- Prints 'Password correct!' to the screen
    rs.setOutput(side,true) -- Output a redstone current to the side you specified
+
  [[rs.setOutput]](side,true) -- Output a redstone current to the side you specified
    sleep(opentime) -- Wait the amount of seconds you specifed, then..
+
  [[sleep]](opentime) -- Wait the amount of seconds you specifed, then..
    rs.setOutput(side,false) -- Stop outputting a redstone current
+
  [[rs.setOutput]](side,false) -- Stop outputting a redstone current
 
   else -- Checks if the user didn't input the correct password
 
   else -- Checks if the user didn't input the correct password
    print("Password incorrect!") -- Prints 'Password incorrect!' to the screen
+
  [[print]]("Password incorrect!") -- Prints 'Password incorrect!' to the screen
    sleep(2) -- Waits 2 seconds
+
  [[sleep]](2) -- Waits 2 seconds
 
   end
 
   end
end
+
end
</pre>
+
 
  
 
= Stop people from terminating your lock =
 
= Stop people from terminating your lock =

Revision as of 10:36, 25 July 2012

This tutorial covers on how to make a computer output redstone current when the right password is typed in. The current is then used to trigger an iron door.


How to make it

A password protected door is actually pretty easy, if you break it into steps.


First, you need to craft a computer, and connect the back to an iron door with redstone. Like this:

Tutorial1.png

CTutorial2.png

Once you're done with the basics, open the computer and edit the "startup" file. (type in 'edit startup') This will make it so the program will be executed when the computer boots.

Once you access the startup file, enter in these five lines.


while true do
 term.clear()
 term.setCursorPos(1, 1)
 print("Please Enter Password:")
 input = read("*")


The first line opens a loop that will continue running forever, or until we explicitly exit it with the 'break' keyword. The second and third lines clear the screen of whatever may have been on it, and then set the cursor position to the top-left corner of the screen. This ensures that each time the program loops, the text appears in the same place. The fifth line assigns whatever the user types to the variable 'input'. So for example, if I typed "qwerty", it would be assigning "qwerty" to the 'input' variable. In the read call on the third line ('read("*")'), the asterisk character will be used to replace each letter typed by the user, so that the password stays hidden.

Here are the next few lines added on:


while true do
 term.clear()
 term.setCursorPos(1, 1)
 print("Please Enter Password:")
 input = read("*")
 if input == "password" then
  redstone.setOutput("back", true)
  sleep(2)
  redstone.setOutput("back", false)
 end
end


The first line we add, 'if input == "password" then' checks whether or not the 'input' variable contains the string "password". The three lines immediately following are only executed if the password is correct. So if it's correct, 'redstone.setOutput("back", true)' sets the redstone output on the back side to true (on), which opens the door. The program then wait two seconds ('sleep(2)'), and turns the redstone output back off again. The program then reaches the end of the loop and repeats.

Please note that this is the basic format for a computer protection program as well. We would put this program in the startup file and instead of outputting redstone signals if the password was correct, we would use the break keyword instead to exit the loop and allow access to the rest of the computer.

Note also that if the program fails somehow, pressing and holding Ctrl + T will terminate it and allow you to edit it, see the No termination section to stop people from exiting your lock.

Alternative Code

Type 'edit startup' and type in this code: (Use Ctrl + T to terminate the program, all code is explained in the comments, the --'s. It's good to read the comments, so you actually know what the code does, you do not need to have the comments in your code, of course)

local side = "left" -- Change left to whatever side your door / redstone is on, E.G: left, right, front, back, bottom, top. Be sure to leave the "s around it, though
local password = "bacon" -- Change bacon to what you want your password to be. Be sure to leave the "s around it, though
local opentime = 5 -- Change 5 to how long (in seconds) you want the redstone current to be on. Don't put "s around it, though
while true do 
 term.clear() -- Clears the screen
 term.setCursorPos(1,1) -- Fixes the cursor position
 write("Password: ") -- Prints 'Password: ' to the screen
 local input = read("*") -- Makes the variable 'input' have the contents of what the user types in, the "*" part censors out the password
 term.clear() -- Already explained up top
 term.setCursorPos(1,1)
 if input == password then -- Checks if the user inputted the correct password
  print("Password correct!") -- Prints 'Password correct!' to the screen
  rs.setOutput(side,true) -- Output a redstone current to the side you specified
  sleep(opentime) -- Wait the amount of seconds you specifed, then..
  rs.setOutput(side,false) -- Stop outputting a redstone current
 else -- Checks if the user didn't input the correct password
  print("Password incorrect!") -- Prints 'Password incorrect!' to the screen
  sleep(2) -- Waits 2 seconds
 end
end


Stop people from terminating your lock

If you don't want people holding CTRL+T and quitting your lock, use this code at the top of your program:

os.pullEvent = os.pullEventRaw