This is a read-only snapshot of the ComputerCraft forums, taken in April 2020.
TheeIntrepidGamer's profile picture

PassLockBasic V1.0

Started by TheeIntrepidGamer, 22 November 2013 - 01:55 AM
TheeIntrepidGamer #1
Posted 22 November 2013 - 02:55 AM
[indent=1]Today I bring you PassLockBasic, it's a program I had made originally for myself. Then it grew into a full blown project. I made this program at first due to me not being able to find a 'nice simple user friendly locking program'. I had made it so I could lock a door, and my computer with the same program. It is fully configurable, and I've tried to make it as user friendly as possible. I'll have a video showcasing it below, and the code/pastebin link.[/indent]

[indent=1]Install: "pastebin get umqCpkmH install"[/indent]


Video:


Code:

Spoiler
os.pullEvent = os.pullEventRaw
--[[Variables]]--
local w,h = term.getSize()
local x = 0
local y = 0
local z = 0
local f2 = 0
local f = 0
local g = 0
local pa = 0
--[[Functions]]--
function clear()
  term.clear()
end

function write(str,x2,y2)
  term.setCursorPos(x2,y2)
  term.write(str)
end

function cwrite(str,y2)
  term.setCursorPos(w/2 - #str/2,y2)
  term.write(str)
end

function title(str)
  cwrite(string.rep("-",w),1)
  cwrite(str,2)
  cwrite(string.rep("-",w),3)
end

function firstBootTitle()
  cwrite(string.rep("-",w),1)
  cwrite("<Installer Setup>",2)
  cwrite(string.rep("-",w),3)
end

function optionsTitle()
  cwrite(string.rep("-",w),1)
  cwrite("<Options>",2)
  cwrite(string.rep("-",w),3)
end

function DoTOptions()
  cwrite("What will you be locking today?",5)
  cwrite("Press 'A' for 'Computer'.",7)
  cwrite("Press 'B' for 'Door'.",8)
  while x == 0 do
	eva,p1a = os.pullEvent("char")
	if p1a == "a" then
	  hel = fs.open("PassLockFiles/DoT","w")
	  hel.write("term")
	  hel.close()
	  x = x + 1
	elseif p1a == "b" then
	  hel = fs.open("PassLockFiles/DoT","w")
	  hel.write("door")
	  hel.close()
	  x = x + 1
	end
  end
end

function doorSideOption()
  cwrite("What side is your door on?",5)
  cwrite("Press 'A' for 'Left'.",7)
  cwrite("Press 'B' for 'Right'.",8)
  cwrite("Press 'C' for 'Top'.",9)
  cwrite("Press 'D' for 'Bottom'.",10)
  hbl = fs.open("PassLockFiles/doorSide","w")
  while y == 0 do
	ev,p1 = os.pullEvent("char")
	if p1 == "a" then
	  hbl.write("left")
	  y = y + 1
	elseif p1 == "b" then
	  hbl.write("right")
	  y = y + 1
	elseif p1 == "c" then
	  hbl.write("top")
	  y = y + 1
	elseif p1 == "d" then
	  hbl.write("bottom")
	  y = y + 1
	end
  end
  hbl.close()
end

function passwordOption()
  while z == 0 do
	clear()
	title("<PASSWORD CENTER>")
	term.setCursorPos(3,7)
	term.write("NEW PASSWORD: ")
	chpass = read("*")
	term.setCursorPos(3,9)
	term.write("RETYPE PASSWORD: ")
	ch2pass = read("*")
	if chpass == ch2pass then
	  clear()
	  title("<PASSWORD SET!>")
	  hb = fs.open("PassLockFiles/PWFile","w")
	  hb.write(ch2pass)
	  hb.close()
	  sleep(2)
	  clear()
	  z = z + 1
	else
	  clear()
	  title("<PASSWORDS DON'T MATCH. TRY AGAIN.>")
	  sleep(2)
	  clear()
	end
  end
  z = z - 1
end

function optionMenu()
  while f2 == 0 do
	clear()
	title("<OPTIONS>")
	cwrite("Press 'A' to change password.",7)
	cwrite("Press 'U' to uninstall PassLockBasic.",9)
	cwrite("Press 'E' to exit.",11)
	ev,p1 = os.pullEvent("char")
	if p1 == "a" then
	  passwordOption()
	  clear()
	elseif p1 == "u" then
	  clear()
	  logo(8)
	  cwrite("Uninstalling...",4)
	  fs.delete("PassLockFiles")
	  fs.delete("startup")
	  if fs.exists("logoff") then
		fs.delete("logoff")
	  end
	  sleep(2)
	  clear()
	  cwrite("Uninstalled.",4)
	  logo(8)
	  sleep(1)
	  cwrite("Rebooting system to finalize uninstall...",4)
	  logo(8)
	  sleep(2)
	  clear()
	  os.reboot()
	elseif p1 == "e" then
	  f2 = f2 + 1
	  clear()
	end
  end
  f2 = f2 - 1
end

function openDoor(side)
  rs.setOutput(side,true)
  sleep(2)
  rs.setOutput(side,false)
end

function logo(ht)
  write("____________________________________________",4,ht)
  write("  ________________________________________  ",4,ht + 1)
  write("||		_______	___		___	   ||",4,ht + 2)
  write("||	   /   o  /   /  /	   / o \\	  ||",4,ht + 3)
  write("||	  /  /---/   /  /	   /  __/	  ||",4,ht + 4)
  write("||	 /  /	   /  /___	/  o  \\	  ||",4,ht + 5)
  write("||	/__/	   /______/   /______/	  ||",4,ht + 6)
  write("||________________________________________||",4,ht + 7)
  write("____________________________________________",4,ht + 8)
end
--[[Startup Checks]]--
clear()
logo(5)
sleep(3)

if fs.exists("PassLockFiles") == false then
  fs.makeDir("PassLockFiles")
end

if fs.exists("PassLockFiles/PassLockBasic") == false then
  fs.copy(shell.getRunningProgram(),"PassLockFiles/PassLockBasic")
  su = fs.open("startup","w")
  su.write("shell.run(\"PassLockFiles/PassLockBasic\")")
  su.close()
end

if fs.exists("PassLockFiles/DoT") == false then
  h15 = fs.open("PassLockFiles/DoT","w")
  h15.close()
end

if fs.exists("PassLockFiles/firstBoot") == false then
  h = fs.open("PassLockFiles/firstBoot","w")
  h.write("1")
  h.close()
end

if fs.exists("PassLockFiles/doorSide") == false then
  h13 = fs.open("PassLockFiles/doorSide","w")
  h13.close()
end

if fs.exists("PassLockFiles/PWFile") == false then
  h14 = fs.open("PassLockFiles/PWFile","w")
  h14.close()
end

ha = fs.open("PassLockFiles/firstBoot","r")
ha32 = ha.readAll()
ha.close()
if ha32 == "1" then
  clear()
  firstBootTitle()
  DoTOptions()
  clear()
  ha3 = fs.open("PassLockFiles/DoT","r")
  ha3a = ha3.readAll()
  ha3.close()
  if ha3a == "door" then
	firstBootTitle()
	doorSideOption()
  end
  passwordOption()
  ha2 = fs.open("PassLockFiles/firstBoot","w")
  ha2.write("0")
  ha2.close()
end

sos = fs.open("PassLockFiles/DoT","r")
sosr = sos.readAll()
sos.close()

if sosr == "term" then
  sos3 = fs.open("logoff","w")
  sos3.writeLine("shell.run(\"PassLockFiles/PassLockBasic\")")
  sos3.close()
end

clear()
term.setCursorPos(1,1)
--[[Locking Code]]--
while f == 0 do
  d3 = fs.open("PassLockFiles/DoT","r")
  d3a = d3.readAll()
  d3.close()
  clear()
  if d3a == "term" then
	title("<LOCKED TERMINAL>")
  elseif d3a == "door" then
	title("<LOCKED DOOR>")
  else
	title("<DEBUG MENU>")
  end
  write(string.rep("-",w),1,7)
  logo(9)
  term.setCursorPos(3,5)
  term.write("PASSWORD: ")
  pass = read("*")
  h3 = fs.open("PassLockFiles/PWFile","r")
  h3a = h3.readAll()
  if pass == h3a then
	pa = 0
	while g == 0 do
	  clear()
	  title("<PASS LOCK MENU>")
	  cwrite("Press 'U' to unlock.",5)
	  cwrite("Press 'O' to goto options.",6)
	  cwrite("Press 'E' to exit.",7)
	  logo(9)
	  ev,p1 = os.pullEvent("char")
	  if p1 == "u" then
	g = g + 1
	k2 = fs.open("PassLockFiles/DoT","r")
	k2a = k2.readAll()
	k2.close()
	ds2 = fs.open("PassLockFiles/doorSide","r")
		ds2a = ds2.readAll()
	ds2.close()
		if k2a == "term" then
		  f = f + 1
		  clear()
		  title("<TERMINAL UNLOCKED>")
		  cwrite("Type 'logoff' when you are done to",5)
		  cwrite("lock your computer.",6)
		  logo(9)
		  sleep(4)
		  clear()
		  term.setCursorPos(1,1)
		elseif k2a == "door" then
		  clear()
		  title("<DOOR UNLOCKED>")
		  logo(9)
		  if ds2a == "left" then
			rs.setOutput("left",true)
			sleep(2)
   	 rs.setOutput("left",false)
		  elseif ds2a == "right" then
			rs.setOutput("right",true)
   	 sleep(2)
   	 rs.setOutput("right",false)
		  elseif ds2a == "top" then
			rs.setOutput("top",true)
   	 sleep(2)
   	 rs.setOutput("top",false)
		  elseif ds2a == "bottom" then
			rs.setOutput("bottom",true)
			sleep(2)
   	 rs.setOutput("bottom",false)
		  else
			cwrite("DOORSIDE ERROR.",7)
		  end
		  clear()
		end
	  clear()
	  elseif p1 == "o" then
		optionMenu()
	  elseif p1 == "e" then
		clear()
		g = g + 1
	  end
	end
	g = 0
  else
	clear()
	pa = pa + 1
	if pa > 2 then
	  title("TOO MANY WRONG ATTEMPTS, SHUTTING DOWN...")
	  logo(9)
	  sleep(2)
	  os.shutdown()
	else
	  title("WRONG PASSWORD. TRY AGAIN.")
	  logo(9)
	  sleep(2)
	end
  end
end
clear()
title("<Booting Up CraftOS...>")
sleep(1.5)
cwrite("Welcome, User!",8)
sleep(1)
clear()
term.setCursorPos(1,1)


Pastebin:



Note: Variables are now localized.
Edited on 21 January 2014 - 10:12 PM
Zudo #2
Posted 22 November 2013 - 12:37 PM
Please localise your variables.