View difference between Paste ID: MxYGfbss and GVfZpWe1
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