BeastmodeJD

RaceControl2-LapController

Nov 20th, 2020 (edited)
1,254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. if (os.getComputerLabel() == nil) then
  2.         os.setComputerLabel("LapController")
  3. end
  4. function startChecker(num, name)
  5.     if (num > 5) then
  6.         local p = radar.getPlayers()
  7.         for _, k in ipairs(p) do
  8.             if (k["name"] == name) then
  9.                 return true
  10.             end
  11.         end
  12.     else
  13.         local p = rs[num].getPlayers()
  14.         for _, k in ipairs(p) do
  15.             if (k["name"] == name) then
  16.                 return true
  17.             end
  18.         end
  19.     end
  20.     return false
  21. end
  22. stat, err = pcall( function ()
  23.     radar = peripheral.wrap("bottom")
  24.     rs = {}
  25.     rs[1] = peripheral.wrap("radar_3")
  26.     rs[2] = peripheral.wrap("radar_2")
  27.     rs[3] = peripheral.wrap("radar_0")
  28.     rs[4] = peripheral.wrap("radar_1")
  29.     rs[5] = peripheral.wrap("radar_4")
  30.     modem = peripheral.wrap("top")
  31.     modem.open(13)
  32.     term.clear()
  33.     term.setCursorPos(1,1)
  34.     print("Working...")
  35.     while true do
  36.         if skip then
  37.             print("Working...")
  38.         end
  39.         skip = false
  40.         redstone.setOutput("right", false)
  41.         event, side, chan, reply, message, dist = os.pullEvent("modem_message")
  42.         if (message["m"] == "s") then
  43.             redstone.setOutput("right", true)
  44.             print("Starting...")
  45.             racers = {}
  46.             for i, n in ipairs(message["names"]) do
  47.                 racers[n] = {}
  48.                 racers[n]["lap"] = 0
  49.                 racers[n]["f"] = true
  50.                 racers[n]["start"] = true
  51.             end
  52.             sleep(message["pt"])
  53.             winner = nil
  54.             while (winner == nil) do
  55.                 temp = {}
  56.                 st = false
  57.                 for i, n in ipairs(message["names"]) do
  58.                     if (racers[n]["start"] == true) then
  59.                         status = {}
  60.                         for z=1,6,1 do
  61.                             status[z] = startChecker(z, n)
  62.                         end
  63.                         for _, s in ipairs(status) do
  64.                             if s then
  65.                                 st = true
  66.                             end
  67.                         end
  68.                         if not st then
  69.                             racers[n]["start"] = false
  70.                         end
  71.                     end
  72.                 end
  73.                 players = radar.getPlayers()
  74.                 for i, p in ipairs(players) do
  75.                     --exec("say 1st for p name is: " .. p["name"])
  76.                     if not (racers[p["name"]] == nil) then
  77.                         --exec("say Found the racer var")
  78.                         temp[p["name"]] = true
  79.                         if not (racers[p["name"]]["f"]) and not (racers[p["name"]]["start"]) then
  80.                             --exec("say Found racer " .. p["name"] .. " unfronzen")
  81.                             racers[p["name"]]["lap"] = racers[p["name"]]["lap"] + 1
  82.                             racers[p["name"]]["f"] = true
  83.                             exec("scoreboard players add ".. p["name"] .. " lap 1")
  84.                         -- else
  85.                         --     exec("say Found racer " .. p["name"] .. " fronzen")
  86.                         end
  87.                         if (racers[p["name"]]["lap"] >= message["laps"]) then
  88.                             winner = p["name"]
  89.                             break
  90.                         end
  91.                     end
  92.                 end
  93.                 if (next(players) == nil) then
  94.                     for i, n in ipairs(message["names"]) do
  95.                         --exec("say Unfrezing " .. n)
  96.                         racers[n]["f"] = false
  97.                     end
  98.                 else
  99.                     for i, p in ipairs(players) do
  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
Advertisement
Add Comment
Please, Sign In to add comment