local checkpoint1 = game.Workspace.Checkpoint1
local checkpoint2 = game.Workspace.Checkpoint2
local checkpoint3 = game.Workspace.Checkpoint3
local show = false
local oldcars = game.ServerStorage:GetChildren()
local raceInProgress = false
function showVictoryMessage(playerName)
if show == false then
show = true
local message = Instance.new("Message")
message.Text = playerName .. " wins!"
message.Parent = game.Workspace
wait(2)
message:Destroy()
show = false
end
end
function destroyCars()
if raceInProgress == true then
for _, object in pairs (game.Workspace:GetChildren()) do
print(object.Name)
if object.Name == "Car" then
print("This is a car, we need to destroy it!")
object:Destroy()
end
end
end
end
function createCars()
for _, object in pairs(game.ServerStorage:GetChildren()) do
local oldcar = object:Clone()
oldcar.Parent = game.Workspace
oldcar:MakeJoints()
end
end
function CreateCarsV2()
for _, object in pairs (game.ServerStorage:GetChildren()) do
local carClone = object:Clone()
if carClone and carClone.Parent == game.ServerStorage then
carClone.Parent = game.Workspace
carClone:MakeJoints()
end
end
end
function checkpoint1hit(otherPart)
print("Checkpoint1 was hit!")
print(otherPart.Name)
if otherPart ~= nil and otherPart.Parent ~= nil and otherPart.Parent:FindFirstChild("Humanoid") then
print("A player hit me!")
if not checkpoint1:FindFirstChild(otherPart.Parent.Name) then
local playerTag = Instance.new("StringValue")
playerTag.Parent = checkpoint1
playerTag.Name = otherPart.Parent.Name
playerTag.Value = otherPart.Parent.Name
end
if checkpoint3:FindFirstChild(otherPart.Parent.Name) and raceInProgress == true then
print("Player wins")
showVictoryMessage(otherPart.Parent.Name)
raceInProgress = false
end
end
end
function checkpoint2hit(otherPart)
print("Checkpoint2 was hit!")
print(otherPart.Name)
if otherPart ~= nil and otherPart.Parent ~= nil and otherPart.Parent:FindFirstChild("Humanoid") then
print("A player hit me!")
if not checkpoint2:FindFirstChild(otherPart.Parent.Name) and checkpoint1:FindFirstChild(otherPart.Parent.Name) then
local playerTag = Instance.new("StringValue")
playerTag.Parent = checkpoint2
playerTag.Name = otherPart.Parent.Name
playerTag.Value = otherPart.Parent.Name
end
end
end
function checkpoint3hit(otherPart)
print("Checkpoint1 was hit!")
print(otherPart.Name)
if otherPart ~= nil and otherPart.Parent ~= nil and otherPart.Parent:FindFirstChild("Humanoid") then
print("A player hit me!")
if not checkpoint3:FindFirstChild(otherPart.Parent.Name) and checkpoint2:FindFirstChild(otherPart.Parent.Name) then
local playerTag = Instance.new("StringValue")
playerTag.Parent = checkpoint3
playerTag.Name = otherPart.Parent.Name
playerTag.Value = otherPart.Parent.Name
end
end
end
checkpoint1.Touched:connect(checkpoint1hit)
checkpoint2.Touched:connect(checkpoint2hit)
checkpoint3.Touched:connect(checkpoint3hit)
local redLight = game.Workspace.StartLight.RedModel.LightBulb.PointLight
local yellowLight = game.Workspace.StartLight.YellowModel.LightBulb.PointLight
local greenLight = game.Workspace.StartLight.GreenModel.LightBulb.PointLight
local startBarrier = game.Workspace.StartBarrier
function startLightCycle()
wait(5)
redLight.Enabled = true
wait(1)
redLight.Enabled = false
yellowLight.Enabled = true
wait(1)
yellowLight.Enabled = false
greenLight.Enabled = true
end
function removeBarrier()
startBarrier.Transparency = 1
startBarrier.CanCollide = false
end
function resetLights()
redLight.Enabled = false
yellowLight.Enabled = false
greenLight.Enabled = false
end
function resetBarrier()
startBarrier.Transparency = 0.5
startBarrier.CanCollide = true
end
function clearCheckpoint(checkpoint)
for _, object in pairs(checkpoint:GetChildren()) do
if object.Name ~= "TouchInterest" then
object:Destroy()
end
end
end
wait(10)
while true do
--setup racetrack
--turn off all lights
resetLights()
--reset barrier
resetBarrier()
--destroy cars
destroyCars()
--create cars
createCars()
--clear all checkpoints
clearCheckpoint(checkpoint1)
clearCheckpoint(checkpoint2)
clearCheckpoint(checkpoint3)
--start race
--start the light cycle
startLightCycle()
--remove barrier
removeBarrier()
raceInProgress = false
--wait for race to finish
while raceInProgress == true do
wait()
end
wait(10)
end
I watched the video and I copied the code character to character but it before the race is over, it will start the game loop from the beginning. It would make new cars and delete cars while the race is still in progress.
