Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- These are two ComputerCraft Lua programs that I've made for a Capture the Flag game in Tekkit.
- -- This is a rough program and not considered complete. I'm posting it here for a RFC.
- -- Check out my reddit thread at http://www.reddit.com/r/tekkit/comments/131787/work_in_progress_any_ideas_for_a_ctf_map/
- -- Referee
- -- The referee is a ComputerCraft computer that's intended to be in an observation area. It's programmed
- -- to read signals from three bundled cables, and then provide a simple display on a monitor.
- -- The bundled cable off the right is for the red team, the left is for the blue team, and the back is
- -- reserved for a transmitter that signals the start of the game.
- function checkError()
- -- this will check to see if there's an error for either team's computer and return a bool
- if (redstone.testBundledInput("left", colors.orange)) or (redstone.testBundledInput("right", colors.orange)) then
- return true
- else
- return false
- end
- end
- function checkReady()
- -- this will check to see that both teams are ready to start the game
- if (redstone.testBundledInput("left", colors.lime)) and (redstone.testBundledInput("right", colors.lime)) then
- return true
- else
- return false
- end
- end
- function setStart()
- redstone.setBundledOutput("back", colors.white)
- end
- while true do
- print("Please wait five seconds while I make sure there are no errors.\n")
- sleep(5)
- if (checkError()) then
- print("There has been an error and I am unable to continue.")
- print("Make sure there is a disk in the left disk drive of each team's computer.")
- break
- end
- print("Ready to start.")
- print("Waiting for each team to signal that they are ready.\n")
- while true do
- os.pullEvent("redstone")
- if checkReady() then
- print("Both teams ready!")
- print("Starting game!")
- setStart()
- break
- end
- end
- local win = false
- while true do
- monitor = peripheral.wrap("top")
- monitor.setTextScale(1.5)
- term.redirect(monitor)
- os.pullEvent("redstone")
- term.clear()
- term.setCursorPos(10,1)
- term.write("RED")
- term.setCursorPos(20,1)
- term.write("BLUE")
- term.setCursorPos(1,2)
- term.write("FLAG")
- -- stuff for flag here
- if (redstone.testBundledInput("right", colors.magenta)) then
- term.setCursorPos(10,2)
- term.write("STOLEN")
- end
- if (redstone.testBundledInput("left", colors.magenta)) then
- term.setCursorPos(20,2)
- term.write("STOLEN")
- end
- if (redstone.testBundledInput("left", colors.lightBlue)) then
- -- red team has captured blue flag
- term.setCursorPos(10,2)
- term.write("CAPTURED!")
- end
- if (redstone.testBundledInput("right", colors.lightBlue)) then
- term.setCursorPos(20,2)
- term.write("CAPTURED!")
- end
- if (redstone.testBundledInput("left", colors.yellow)) then
- term.clear()
- term.setCursorPos(20,4)
- term.write("GAME OVER!")
- term.setCursorPos(20,5)
- term.write("BLUE TEAM WINS!")
- win = true
- break
- end
- if (redstone.testBundledInput("right", colors.yellow)) then
- term.clear()
- term.setCursorPos(20,4)
- term.write("GAME OVER!")
- term.setCursorPos(17,5)
- term.write("RED TEAM WINS!")
- win = true
- break
- end
- end
- if win then
- term.setCursorPos(1,18)
- term.restore()
- break
- end
- end
- -- RedTeamBase
- -- Each base has a ComputerCraft setup with two disk drives with bundled cable off the back, and
- -- transmitters/receivers. The "flags" for the game are labeled floppy disks for ComputerCraft. The
- -- program for each base is identical except where the red/blue things have been transposed.
- function isStolen()
- if disk.hasData("left") then
- label = disk.getLabel("left")
- if label == "Red Flag" then
- return false
- end
- end
- if disk.hasData("right") then
- label = disk.getLabel("right")
- if label == "Red Flag" then
- return false
- end
- end
- return true
- end
- function isCaptured()
- if disk.hasData("left") then
- label = disk.getLabel("left")
- if label == "Blue Flag" then
- return true
- end
- end
- if disk.hasData("right") then
- label = disk.getLabel("right")
- if label == "Blue Flag" then
- return true
- end
- end
- return false
- end
- function amReady()
- if disk.hasData("left") then
- label = disk.getLabel("left")
- if label == "Red Flag" then
- return true
- else
- disk.setLabel("left", "Red Flag")
- return true
- end
- else
- return false
- end
- end
- while true do
- redstone.setBundledOutput("back",0)
- if amReady() then
- print("Ready to start!")
- print("Press any key to signal the referee that your team is ready to start.")
- local event, param1 = os.pullEvent("key")
- print("Regeree signaled. Game will start once other team is ready.")
- curOut = redstone.getBundledOutput("back")
- newOut = colors.combine(curOut, colors.lime)
- redstone.setBundledOutput("back",newOut)
- while true do
- if redstone.testBundledInput("back",colors.white) then -- start signal is on
- print("Game started!")
- while true do
- if (isStolen()) then
- -- turn on "stolen" signal
- curOut = redstone.getBundledOutput("back")
- newOut = colors.combine(curOut, colors.magenta)
- redstone.setBundledOutput("back",newOut)
- print("Flag stolen!")
- else
- -- turn off the "stolen" signal
- curOut = redstone.getBundledOutput("back")
- newOut = colors.subtract(curOut, colors.magenta)
- redstone.setBundledOutput("back",newOut)
- if isCaptured() then
- -- turn on "captured" signal
- curOut = redstone.getBundledOutput("back")
- newOut = colors.combine(curOut, colors.lightBlue)
- redstone.setBundledOutput("back",newOut)
- print("Enemy flag captured! You must now wait 30 seconds before claiming victory.")
- sleep(30) -- the team must hold onto the flag for a while before claiming victory
- if not (isStolen()) and (isCaptured()) then
- -- turn on win signal
- curOut = redstone.getBundledOutput("back")
- newOut = colors.combine(curOut, colors.yellow)
- redstone.setBundledOutput("back",newOut)
- print("Win conditions met. Check referee for final result.")
- break
- else
- -- turn off captured signal
- curOut = redstone.getBundledOutput("back")
- newOut = colors.subtract(curOut, colors.lightBlue)
- redstone.setBundledOutput("back",newOut)
- print("Enemy flag retaken! Game continues!")
- end
- end
- end
- sleep(1)
- end
- break
- else
- sleep(1)
- end
- end
- break
- else
- -- turn on the error signal
- curOut = redstone.getBundledOutput("back")
- newOut = colors.combine(curOut, colors.orange)
- redstone.setBundledOutput("back",newOut)
- print("ERROR: There must be a disk in the left drive before I can start.")
- print("Insert a disk and restart the computer.")
- break
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement