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

Please Review my code and see if its right?

Asked by 2 years ago

--Define variables

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local ServerStorage = game:GetService("ServerStorage")

local MapsFolder = ServerStorage:WaitForChild("Maps")

local Status = ReplicatedStorage:WaitForChild("Status")

local GameLength = 300

local reward = 250

--Game Loop

while true do Status.Value = "Waiting for enough players"

repeat wait() until game.Players.NumPlayers >= 2

Status.Value = "Intermission"

wait(15)

local plrs = {}

for i,player in pairs(game.Players:GetPlayers()) do
    if player then
        table.insert(plrs,player) --Add each player into plrs table
    end
end

wait(5)

local AvaiableMaps = MapsFolder:GetChildren()

local ChosenMap = AvaiableMaps[math.random(1,#AvaiableMaps)]

Status.Value = ChosenMap.Name.." Chosen"


local ClonedMap = ChosenMap:Clone()
ClonedMap.Parent = Workspace

--teleport playes to map

local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints")

if not SpawnPoints then
    print("Spawnpoints not found!")
end

local AvaiableSpawnPoints = SpawnPoints:GetChildren()

for i,player in pairs(plrs) do
    if player then 
        character = player.Character

        if character then
            --telport them
            character:FindFirstChild("HumanoidRootPart").CFrame = AvaiableSpawnPoints[1].CFrame
            table.remove(AviableSpawnPoints,1)


            --there is no character
            if not player then 
                table.remove(plrs,i)

                --give them a sword

                local Knife = ServerStorage.Knife:Clone()
                Knife.Parent = player.Backpack

                local GameTag = Instance.new("BoolValue")
                Gametag.Name = "Gametag"
                Gametag.Parent = player.Character

            else
                --there is no character
                if not player then 
                    table.remove(plrs,i)
                end
            end
        end
    end

    Status.Value = "Get ready to play!"

    wait(2)

    for i = GameLength,0,-1 do

        for x,player in pairs(plrs) do 
            if player then

                character = player.Character

                if not character then
                    --Left the game
                else
                    if character:FindFirstChild("GameTag") then
                        --They are still alive
                        print(player.Name.."is still in the game")
                    else
                        --They are dead
                        table.remove(plrs,x)
                    end
                end
            else
                table.remove(plrs,x)
                print(player.Name.."has been removed")
            end
        end

        Status.Value = "There are"..i.." seconds remaining,and "..#plrs.." players left"

        if #plrs == 1 then
            --Last Person standing
            Status.Value = "The winner is"..plrs[1].Name
            plrs[1].leaderstats.Money.Value = plrs[1].leaderstats.Money.Value + reward
            break
        elseif #plrs == 0 then
            Status.Value = "Nobody Won!"
            break
        end
        wait(1)
    end 
    print("End of Game")

    for i, player in pairs(game.Players:GetPlayers()) do

        if not character then
            --ignore them

        else 
            if character:FindFirstChild("GameTag") then
                character.GameTag:Destroy()
            end

            if player.Backpack.FindFirstChild("Knife") then
                player.Backpack.Sword:Destroy()
            end

            if character:FindFirstChild("Knife") then
                character.Knife:Destroy()
            end

        end

        player:LoadCharacter()
    end

    ClonedMap:Destroy()

    Status.Value = "Game ended"

    wait(2)
end

end

1 answer

Log in to vote
0
Answered by
enes223 327 Moderation Voter
2 years ago

The line, "While true do" has no "end" after it and there are no waits too, if you don't add a wait to while true loop it will crash your game. And you don't need the while true do loop, you can just set the status value to "Waiting for enough players" and use the repeat on the next line, there is also an error in player spawn point teleporting, you are getting the character of the player and checking if the character exists THEN checking if the player exists which doesn't even make sense, you need to check if player exists first and you don't need to do 2 checks for it, you can use else statement for it. You can also not use else statements if you don't need them, on the 131th line you are checking if the character doesn't exist and using the main code on the else statement which doesn't even make sense, you can check if the character exists instead of NOT exists. Other than these I don't see an issue with the script, it's pretty good if you're a newbie.

Ad

Answer this question