Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (os.getComputerLabel() == nil) then
- os.setComputerLabel("LapController")
- end
- function startChecker(num, name)
- if (num > 5) then
- local p = radar.getPlayers()
- for _, k in ipairs(p) do
- if (k["name"] == name) then
- return true
- end
- end
- else
- local p = rs[num].getPlayers()
- for _, k in ipairs(p) do
- if (k["name"] == name) then
- return true
- end
- end
- end
- return false
- end
- stat, err = pcall( function ()
- radar = peripheral.wrap("bottom")
- rs = {}
- rs[1] = peripheral.wrap("radar_3")
- rs[2] = peripheral.wrap("radar_2")
- rs[3] = peripheral.wrap("radar_0")
- rs[4] = peripheral.wrap("radar_1")
- rs[5] = peripheral.wrap("radar_4")
- modem = peripheral.wrap("top")
- modem.open(13)
- term.clear()
- term.setCursorPos(1,1)
- print("Working...")
- while true do
- if skip then
- print("Working...")
- end
- skip = false
- redstone.setOutput("right", false)
- event, side, chan, reply, message, dist = os.pullEvent("modem_message")
- if (message["m"] == "s") then
- redstone.setOutput("right", true)
- print("Starting...")
- racers = {}
- for i, n in ipairs(message["names"]) do
- racers[n] = {}
- racers[n]["lap"] = 0
- racers[n]["f"] = true
- racers[n]["start"] = true
- end
- sleep(message["pt"])
- winner = nil
- while (winner == nil) do
- temp = {}
- st = false
- for i, n in ipairs(message["names"]) do
- if (racers[n]["start"] == true) then
- status = {}
- for z=1,6,1 do
- status[z] = startChecker(z, n)
- end
- for _, s in ipairs(status) do
- if s then
- st = true
- end
- end
- if not st then
- racers[n]["start"] = false
- end
- end
- end
- players = radar.getPlayers()
- for i, p in ipairs(players) do
- --exec("say 1st for p name is: " .. p["name"])
- if not (racers[p["name"]] == nil) then
- --exec("say Found the racer var")
- temp[p["name"]] = true
- if not (racers[p["name"]]["f"]) and not (racers[p["name"]]["start"]) then
- --exec("say Found racer " .. p["name"] .. " unfronzen")
- racers[p["name"]]["lap"] = racers[p["name"]]["lap"] + 1
- racers[p["name"]]["f"] = true
- exec("scoreboard players add ".. p["name"] .. " lap 1")
- -- else
- -- exec("say Found racer " .. p["name"] .. " fronzen")
- end
- if (racers[p["name"]]["lap"] >= message["laps"]) then
- winner = p["name"]
- break
- end
- end
- end
- if (next(players) == nil) then
- for i, n in ipairs(message["names"]) do
- --exec("say Unfrezing " .. n)
- racers[n]["f"] = false
- end
- else
- for i, p in ipairs(players) do
- --exec("say 2nd for p name is: " .. p["name"])
- if not (racers[p["name"]] == nil) then
- --exec("say Found racer " .. p["name"] .. "in 2nd for. Checking frozen prop")
- if (temp[p["name"]] == nil) then
- --exec("say Unfroze " .. p["name"])
- racers[p["name"]]["f"] = false
- end
- end
- end
- end
- sleep(.5)
- if (redstone.getInput("left") == true) then
- print("Killed by Redstone!")
- sleep(10)
- skip = true
- break
- end
- end
- --After winner declared
- if not skip then
- exec("say Good win ".. winner .. "! Everyone back to the pits!")
- modem.transmit(12, 0, "f")
- modem.transmit(11, 0, "gg")
- print("Race Over. " .. winner .. " won!")
- end
- end
- end
- end)
- if not stat then
- exec("say " .. err)
- else
- exec("say I died!")
- end
Advertisement
Add Comment
Please, Sign In to add comment