Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
-2

Why isn't my script doing what it supposed to do?

Asked by 9 years ago

Please make your question title relevant to your question content. It should be a one-sentence summary in question form.

I asked bunch of question with this type of script. But when I tested the script out, what makes me confuse is that the barrier to this script is not making the Collision false or the transparency into 1. This is the script:

local checkpoint1 = game.Workspace.MapHolder.Map1Beginner.Checkpoint1
local checkpoint2 = game.Workspace.MapHolder.Map1Beginner.Checkpoint2
local checkpoint3 = game.Workspace.MapHolder.Map1Beginner.Checkpoint3

local redLight = game.Workspace.MapHolder.Map1Beginner.StartLight.RedModel.LightBulb.PointLight
local yellowLight = game.Workspace.MapHolder.Map1Beginner.StartLight.YellowModel.LightBulb.PointLight
local greenLight = game.Workspace.MapHolder.Map1Beginner.StartLight.GreenModel.LightBulb.PointLight
local startBarrier = game.Workspace.MapHolder.Map1Beginner.StartBarrier

local raceInProgress = false

local lobbySpawn = game.Workspace.LobbySpawn
local trackSpawn = game.Workspace.MapHolder.Map1Beginner.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 message = Instance.new("Message")
    message.Text = playerName .. " has won!"
    message.Parent = game.Workspace
    wait(2)
    message:Destroy()
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

Also I made a map script as well where I make one script disable and the other one enabled. What I want to do is that after the race, it should disable the other script and enable script2 which is Map2. What I am saying here is that after the race, you wait 5 to 10 sec. and go to the next map. This is what I put:

script1 = game.ServerScriptService.Map1
script2 = game.ServerScriptService.Map2

while true do
    script1.Disabled = true
    wait()
    script1.Disabled = false
end

while true do
    script2.Disabled = true
    wait()
    script2.Enabled = false
end

Thanks :D

1 answer

Log in to vote
0
Answered by 9 years ago

Thanks for down voting on this. Because it is telling me that I am asking some stupid question that roblox must have heard, by roblox I mean the members. I am sorry if I did ask like that and answered it with this, but I am just wanting to say that since I am getting mad at myself for getting down votes.

Ad

Answer this question