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

Can someone help me to put maps in a script and designs on victory message?

Asked by 10 years ago

I already made a script for my game, but people have been saying they want more maps in it. Is there anyway I can add maps to my games with this script (same question I asked before):

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 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 on the victory message, how do I add designs to it. Like instead of plain names and shaded background, it has like a border and trophy and other things, like other racing games.

2 answers

Log in to vote
0
Answered by 10 years ago

Judging by lines 1-13, the code is only designed for one pre built map already located in the workspace. After a race ends, though, you could clone a new map and re-define the variables to work with the new map.

The victory message could be changed by showing a GUI to every in showVictoryMessage() on line 36.

0
Thanks User#5689 -1 — 10y
Ad
Log in to vote
0
Answered by 10 years ago

Make a master script that picks the map and judging by the map enables/disables different scripts such as this one.

Also, for the Victory Message, use a custom GUI instead of the built-in message system. It is much more creative and looks better. To add in a trophy use an ImageLabel.

0
Thanks User#5689 -1 — 10y
0
You're welcome... btw could you vote dis up so i can get a better rep please? xD dudemanloserr 15 — 10y

Answer this question