SHOW:
|
|
- or go back to the newest paste.
| 1 | - | modem = peripheral.wrap("top")
|
| 1 | + | if (os.getComputerLabel() == nil) then |
| 2 | - | radar = peripheral.wrap("back")
|
| 2 | + | os.setComputerLabel("LapController")
|
| 3 | - | modem.open(12) |
| 3 | + | |
| 4 | - | modem.open(13) |
| 4 | + | function startChecker(num, name) |
| 5 | - | term.clear() |
| 5 | + | if (num > 5) then |
| 6 | - | term.setCursorPos(1,1) |
| 6 | + | local p = radar.getPlayers() |
| 7 | - | settings.load("/.settings")
|
| 7 | + | for _, k in ipairs(p) do |
| 8 | - | if (settings.get("player") == nil) then
|
| 8 | + | if (k["name"] == name) then |
| 9 | - | print("Need to set the player to watch. Run 'set player <username>'")
|
| 9 | + | return true |
| 10 | - | return |
| 10 | + | end |
| 11 | end | |
| 12 | - | if (settings.get("channel") == nil) then
|
| 12 | + | else |
| 13 | - | print("Need to set the computer Channel! Run 'set channel <number>'")
|
| 13 | + | local p = rs[num].getPlayers() |
| 14 | - | return |
| 14 | + | for _, k in ipairs(p) do |
| 15 | if (k["name"] == name) then | |
| 16 | - | if (tonumber(settings.get("channel")) == nil) then
|
| 16 | + | return true |
| 17 | - | print("The setting 'channel' with value '" .. settings.get("channel") .."' is not a numebr. Please make it a number!")
|
| 17 | + | end |
| 18 | - | return |
| 18 | + | |
| 19 | end | |
| 20 | - | modem.open(tonumber(settings.get("channel")))
|
| 20 | + | return false |
| 21 | - | print("Working...")
|
| 21 | + | |
| 22 | - | t = 1 |
| 22 | + | stat, err = pcall( function () |
| 23 | - | function timer() |
| 23 | + | radar = peripheral.wrap("bottom")
|
| 24 | - | sleep(3) |
| 24 | + | rs = {}
|
| 25 | - | return |
| 25 | + | rs[1] = peripheral.wrap("radar_3")
|
| 26 | rs[2] = peripheral.wrap("radar_2")
| |
| 27 | - | function mess() |
| 27 | + | rs[3] = peripheral.wrap("radar_0")
|
| 28 | rs[4] = peripheral.wrap("radar_1")
| |
| 29 | - | e, s, c, r, m, d = os.pullEvent("modem_message")
|
| 29 | + | rs[5] = peripheral.wrap("radar_4")
|
| 30 | - | if (c == tonumber(settings.get("channel"))) and (m == "gg") then
|
| 30 | + | modem = peripheral.wrap("top")
|
| 31 | - | return |
| 31 | + | modem.open(13) |
| 32 | term.clear() | |
| 33 | term.setCursorPos(1,1) | |
| 34 | print("Working...")
| |
| 35 | - | function red() |
| 35 | + | |
| 36 | - | os.pullEvent("redstone")
|
| 36 | + | if skip then |
| 37 | print("Working...")
| |
| 38 | - | function dead() |
| 38 | + | |
| 39 | skip = false | |
| 40 | - | e2, s2, c2, r2, m2, d2 = os.pullEvent("modem_message")
|
| 40 | + | redstone.setOutput("right", false)
|
| 41 | - | if (c2 == 12) and (m2 == "f") then |
| 41 | + | event, side, chan, reply, message, dist = os.pullEvent("modem_message")
|
| 42 | - | return |
| 42 | + | if (message["m"] == "s") then |
| 43 | redstone.setOutput("right", true)
| |
| 44 | print("Starting...")
| |
| 45 | racers = {}
| |
| 46 | - | while true do |
| 46 | + | for i, n in ipairs(message["names"]) do |
| 47 | - | event, side, chan, reply, message, dist = os.pullEvent("modem_message")
|
| 47 | + | racers[n] = {}
|
| 48 | - | if (message["m"] == "s") and (chan == 13) and (message["name"] == settings.get("player")) then
|
| 48 | + | racers[n]["lap"] = 0 |
| 49 | - | print("Start good!")
|
| 49 | + | racers[n]["f"] = true |
| 50 | - | laps = message["laps"] |
| 50 | + | racers[n]["start"] = true |
| 51 | - | num = 0 |
| 51 | + | end |
| 52 | - | stop = false |
| 52 | + | sleep(message["pt"]) |
| 53 | - | me = false |
| 53 | + | winner = nil |
| 54 | - | print("Waiting for start...")
|
| 54 | + | while (winner == nil) do |
| 55 | - | sleep(message["pt"] + 19) |
| 55 | + | temp = {}
|
| 56 | - | print("Racing...")
|
| 56 | + | st = false |
| 57 | - | while (num < laps) and not stop do |
| 57 | + | for i, n in ipairs(message["names"]) do |
| 58 | - | print("Laps: " .. num .."/"..laps)
|
| 58 | + | if (racers[n]["start"] == true) then |
| 59 | - | f = parallel.waitForAny(red, dead) |
| 59 | + | status = {}
|
| 60 | - | if (f == 2) then |
| 60 | + | for z=1,6,1 do |
| 61 | - | stop = true |
| 61 | + | status[z] = startChecker(z, n) |
| 62 | - | else |
| 62 | + | end |
| 63 | - | y = 4 |
| 63 | + | for _, s in ipairs(status) do |
| 64 | - | while y > 0 do |
| 64 | + | if s then |
| 65 | - | players = radar.getPlayers() |
| 65 | + | st = true |
| 66 | - | for i, p in ipairs(players) do |
| 66 | + | end |
| 67 | - | if (p["name"] == settings.get("player")) then
|
| 67 | + | end |
| 68 | - | print("Found player!")
|
| 68 | + | if not st then |
| 69 | - | sleep(2.5) |
| 69 | + | racers[n]["start"] = false |
| 70 | - | num = num + 1 |
| 70 | + | end |
| 71 | - | exec("scoreboard players add ".. settings.get("player") .. " lap 1")
|
| 71 | + | end |
| 72 | - | y = 0 |
| 72 | + | end |
| 73 | - | break |
| 73 | + | players = radar.getPlayers() |
| 74 | - | end |
| 74 | + | for i, p in ipairs(players) do |
| 75 | - | end |
| 75 | + | --exec("say 1st for p name is: " .. p["name"])
|
| 76 | - | y = y - 1 |
| 76 | + | if not (racers[p["name"]] == nil) then |
| 77 | - | end |
| 77 | + | --exec("say Found the racer var")
|
| 78 | - | end |
| 78 | + | temp[p["name"]] = true |
| 79 | - | end |
| 79 | + | if not (racers[p["name"]]["f"]) and not (racers[p["name"]]["start"]) then |
| 80 | - | if not stop then |
| 80 | + | --exec("say Found racer " .. p["name"] .. " unfronzen")
|
| 81 | - | sleep(3) |
| 81 | + | racers[p["name"]]["lap"] = racers[p["name"]]["lap"] + 1 |
| 82 | - | modem.transmit(12, settings.get("channel"), "f")
|
| 82 | + | racers[p["name"]]["f"] = true |
| 83 | - | func = parallel.waitForAny(timer, mess) |
| 83 | + | exec("scoreboard players add ".. p["name"] .. " lap 1")
|
| 84 | - | if (func == 2) then |
| 84 | + | -- else |
| 85 | - | print("Race Over: My player won!")
|
| 85 | + | -- exec("say Found racer " .. p["name"] .. " fronzen")
|
| 86 | - | exec("say Good win ".. settings.get("player") .. "! Everyone back to the pits!")
|
| 86 | + | end |
| 87 | - | modem.transmit(11, 0, "gg") |
| 87 | + | if (racers[p["name"]]["lap"] >= message["laps"]) then |
| 88 | - | rep = 0 |
| 88 | + | winner = p["name"] |
| 89 | - | while rep < 5 do |
| 89 | + | break |
| 90 | - | modem.transmit(13, 0, "f") |
| 90 | + | end |
| 91 | - | sleep(1) |
| 91 | + | end |
| 92 | - | rep = rep + 1 |
| 92 | + | end |
| 93 | - | end |
| 93 | + | if (next(players) == nil) then |
| 94 | - | else |
| 94 | + | for i, n in ipairs(message["names"]) do |
| 95 | - | print("Race Over: Someone else won.")
|
| 95 | + | --exec("say Unfrezing " .. n)
|
| 96 | - | end |
| 96 | + | racers[n]["f"] = false |
| 97 | - | else |
| 97 | + | end |
| 98 | - | print("Race Over: Someone else won.")
|
| 98 | + | else |
| 99 | - | end |
| 99 | + | for i, p in ipairs(players) do |
| 100 | - | end |
| 100 | + | --exec("say 2nd for p name is: " .. p["name"])
|
| 101 | if not (racers[p["name"]] == nil) then | |
| 102 | --exec("say Found racer " .. p["name"] .. "in 2nd for. Checking frozen prop")
| |
| 103 | if (temp[p["name"]] == nil) then | |
| 104 | --exec("say Unfroze " .. p["name"])
| |
| 105 | racers[p["name"]]["f"] = false | |
| 106 | end | |
| 107 | end | |
| 108 | end | |
| 109 | end | |
| 110 | sleep(.5) | |
| 111 | if (redstone.getInput("left") == true) then
| |
| 112 | print("Killed by Redstone!")
| |
| 113 | sleep(10) | |
| 114 | skip = true | |
| 115 | break | |
| 116 | end | |
| 117 | end | |
| 118 | --After winner declared | |
| 119 | if not skip then | |
| 120 | exec("say Good win ".. winner .. "! Everyone back to the pits!")
| |
| 121 | modem.transmit(12, 0, "f") | |
| 122 | modem.transmit(11, 0, "gg") | |
| 123 | print("Race Over. " .. winner .. " won!")
| |
| 124 | end | |
| 125 | end | |
| 126 | end | |
| 127 | end) | |
| 128 | if not stat then | |
| 129 | exec("say " .. err)
| |
| 130 | else | |
| 131 | exec("say I died!")
| |
| 132 | end |