I asked a question about decal popping up after a player wins a race. Well, I got that answered and tested it out. But it didn't pop up the decal and it didn't pop up the winner of the player either. This is the script with someone answering it:
local checkpoint1 = game.Workspace.Checkpoint1
local checkpoint2 = game.Workspace.Checkpoint2
local checkpoint3 = game.Workspace.Checkpoint3
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
local raceInProgress = false
local lobbySpawn = game.Workspace.LobbySpawn
local trackSpawn = game.Workspace.TrackSpawn
local minimumPlayers = 2
function destroyCars()
for _, object in pairs(game.Workspace:GetChildren()) do
print(object.Name)
if object.Name == "RaceCar" then
print("This is the RC. Destroy it!")
object:Destroy()
end
end
end
function createCars()
for _, object in pairs(game.ServerStorage:GetChildren()) do
local carCopy = object:Clone()
carCopy.Parent = game.Workspace
carCopy:MakeJoints()
end
end
function showVictoryMessage(playerName)
local player = game.Players:FindFirstChild(playerName)
createGui(player.PlayerGui)
local screengui = player.PlayerGui.ScreenGui
screengui.Frame.TextLabel.Text = playerName .. "has won!"
for e = 1,0,0.05 do
screengui.Frame.Transparency = e
wait(0)
end
wait(1.5)
for e = 0,1,0.05 do
screengui.Frame.Transparency = e
wait(0)
end
end
function createGui(playerGui)
local screengui = Instance.new("ScreenGui",playerGui)
local frame = Instance.new("Frame",screengui).Size UDim2.new(1,0,0.1,0)
local imageLabel = Instance.new("ImageLabel",frame).Size UDim2.new(1,0,0,0)
wait()
imageLabel.Size = UDim2.new(1,0,0,imageLabel.AbsoluteSize.X)--kind of a trick to get x and y the same
imageLabel.Image = "rbxgameasset://Images/Background"
local textLabel = Instance.new("TextLabel",frame).Size UDim2.new(0,frame.AbsoluteSize.X-imageLabel.AbsoluteSize.X,1,0)
--Any Formatting to the TextLabel/Frame/ImageLabel would be done HERE
end
function checkpoint1hit(otherPart)
print("Checkpoint 1")
print(otherPart.Name)
if otherPart ~= nil and otherPart.Parent ~= nil and otherPart.Parent:FindFirstChild("Humanoid") then
print("Someone hit me!")
if not checkpoint1:FindFirstChild(otherPart.Parent.Name) then
local playerTag = Instance.new("StringValue")
playerTag.Parent = checkpoint1
playerTag.Name = otherPart.Parent.Name
end
if checkpoint3:FindFirstChild(otherPart.Parent.Name) and raceInProgress then
print("Player wins!")
raceInProgress = false
showVictoryMessage(otherPart.Parent.Name)
end
end
end
function checkpoint2hit(otherPart)
print("Checkpoint 2")
print(otherPart.Name)
if otherPart ~= nil and otherPart.Parent ~= nil and otherPart.Parent:FindFirstChild("Humanoid") then
print("Someone 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
end
end
end
function checkpoint3hit(otherPart)
print("Checkpoint 3")
print(otherPart.Name)
if otherPart ~= nil and otherPart.Parent ~= nil and otherPart.Parent:FindFirstChild("Humanoid") then
print("Someone 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
end
end
end
checkpoint1.Touched:connect(checkpoint1hit)
checkpoint2.Touched:connect(checkpoint2hit)
checkpoint3.Touched:connect(checkpoint3hit)
function startLightCycle()
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 = .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
function teleportPlayers(target)
for _, player in pairs(game.Players:GetChildren()) do
while player.Character == nil do
wait()
end
local character = player.Character
local torso = character:WaitForChild("Torso")
torso.CFrame = target.CFrame
end
end
wait(10)
while true do
-- wait for enough players before we start the game
while game.Players.NumPlayers < minimumPlayers do
wait()
end
-- setup racetrack
-- turn off all lights
resetLights()
-- reset barrier
resetBarrier()
-- create all cars
createCars()
-- clear all checkpoints
clearCheckpoint(checkpoint1)
clearCheckpoint(checkpoint2)
clearCheckpoint(checkpoint3)
-- teleport all players to the racetrack
teleportPlayers(trackSpawn)
wait(5)
-- start race
-- start light cycle
startLightCycle()
-- remove barrier
removeBarrier()
raceInProgress = true
-- wait for race to finish
while raceInProgress == true do
wait()
end
wait(2)
-- delete all cars
destroyCars()
wait(2)
-- teleport all players to the lobby
teleportPlayers(lobbySpawn)
wait(10)
end
