Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local events = require("/events")
- local door = require("/door")
- local md5 = require("/md5")
- term.clear()
- term.setCursorPos(1,1)
- if not fs.exists("/.password") then
- local file = fs.open("/.password", "w")
- print("Enter password for first time setup...")
- local password
- repeat
- term.clear()
- term.setCursorPos(1,1)
- term.write("> ")
- password = read("*")
- until password
- file.writeLine(md5:hash(password))
- file.close()
- end
- local file = fs.open("/.password", "r")
- local password = file.readLine()
- file.close()
- local input = ""
- local keyLookup = {
- [colors.white] = { value = keys.q, pressed = false },
- [colors.orange] = { value = keys.w, pressed = false },
- [colors.magenta] = { value = keys.e, pressed = false },
- [colors.lightBlue] = { value = keys.r, pressed = false },
- [colors.yellow] = { value = keys.t, pressed = false },
- [colors.lime] = { value = keys.y, pressed = false },
- [colors.pink] = { value = keys.u, pressed = false },
- [colors.gray] = { value = keys.i, pressed = false },
- [colors.lightGray] = { value = keys.o, pressed = false },
- [colors.cyan] = { value = keys.p, pressed = false },
- [colors.purple] = { value = keys.a, pressed = false },
- [colors.blue] = { value = keys.s, pressed = false },
- [colors.brown] = { value = keys.d, pressed = false },
- [colors.green] = { value = keys.f, pressed = false },
- [colors.red] = { value = keys.g, pressed = false },
- [colors.black] = { value = keys.h, pressed = false },
- [colors.black + colors.white] = { value = keys.j, pressed = false },
- [colors.black + colors.orange] = { value = keys.k, pressed = false },
- [colors.black + colors.magenta] = { value = keys.l, pressed = false },
- [colors.black + colors.lightBlue] = { value = keys.z, pressed = false },
- [colors.black + colors.yellow] = { value = keys.x, pressed = false },
- [colors.black + colors.lime] = { value = keys.c, pressed = false },
- [colors.black + colors.pink] = { value = keys.v, pressed = false },
- [colors.black + colors.gray] = { value = keys.b, pressed = false },
- [colors.black + colors.lightGray] = { value = keys.n, pressed = false },
- [colors.black + colors.cyan] = { value = keys.m, pressed = false },
- [colors.black + colors.purple] = { value = keys.space, pressed = false },
- [colors.black + colors.blue] = { value = keys.enter, pressed = false }
- }
- local charLookup = {
- [keys.a] = "a",
- [keys.b] = "b",
- [keys.c] = "c",
- [keys.d] = "d",
- [keys.e] = "e",
- [keys.f] = "f",
- [keys.g] = "g",
- [keys.h] = "h",
- [keys.i] = "i",
- [keys.j] = "j",
- [keys.k] = "k",
- [keys.l] = "l",
- [keys.m] = "m",
- [keys.n] = "n",
- [keys.o] = "o",
- [keys.p] = "p",
- [keys.q] = "q",
- [keys.r] = "r",
- [keys.s] = "s",
- [keys.t] = "t",
- [keys.u] = "u",
- [keys.v] = "v",
- [keys.w] = "w",
- [keys.x] = "x",
- [keys.y] = "y",
- [keys.z] = "z",
- [keys.space] = " "
- }
- function onRedstoneEvent()
- local line1, line2 = rs.getBundledInput("left"), rs.getBundledInput("right")
- for color, key in pairs(keyLookup) do
- local pressed = false
- if color <= colors.black then pressed = colors.test(line1, color)
- else pressed = colors.test(line2, color - colors.black)
- end
- if pressed and not key.pressed then
- events:emit("key", key.value, false)
- local char = charLookup[key.value]
- if char then events:emit("char", char)
- end
- elseif not pressed and key.pressed then
- events:emit("key_up", key.value)
- end
- keyLookup[color].pressed = pressed
- end
- end
- function onKeyEvent(key, isHeld)
- if key == keys.enter then
- if input then print("> "..input) end
- if md5:hash(input) == password then door:open()
- else door:close()
- end
- input = ""
- end
- end
- function onCharEvent(char)
- input = input..char
- end
- local line0 = rs.getBundledInput("bottom")
- door:initialize(colors.test(line0, colors.blue))
- events:connect("key", onKeyEvent)
- events:connect("redstone", onRedstoneEvent)
- events:connect("char", onCharEvent)
- while true do events() end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement