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

Why isn't my sword fighting mainscript not working properly?

Asked by 4 years ago

So in this MainScript, I'm experiencing some issues. I looked at the output and everything seems fine, but when I tested it out, things weren't working. The game wasn't function properly. 2 players joined in, and they were getting teleported in and out of the lobby to the map in a short time and the GUI was announcing people winning in a matter of seconds. No one was even fighting or killing.

Thanks in advance!

Below is a server script inside ServerScriptStorage, named "MainScript"

-- VARIABLES!

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local ServerStorage = game:GetService("ServerStorage")

local MapsFolder = ServerStorage:WaitForChild("Maps")

local Status = ReplicatedStorage:WaitForChild("Status")

local GameLegnth = 50

local reward = 25

-- Game loop

while true do

    Status.Value = "Waiting for enough players!"

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

    Status.Value = "Intermission"

    wait(10)

    local plrs = {}

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

        end
    end

    wait(2)

    local AvailableMaps = MapsFolder:GetChildren()

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

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

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

    -- Teleport the players into the map.

    local SpawnPoints = ClonedMap:FindFirstChild("SpawnPoints")

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

    local AvailableSpawnPoints = SpawnPoints:GetChildren()

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


            if character then
                -- Teleport

                character:FindFirstChild("HumanoidRootPart").CFrame = AvailableSpawnPoints[1].CFrame
                table.remove(AvailableSpawnPoints,1)


                -- Give them a sword.
                local Sword = ServerStorage.Sword:Clone()
                Sword.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 = GameLegnth,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're still alive!
                        print(player.Name.. "is still in the game!")
                    else
                        -- They're dead.
                        table.remove(plrs,x)
                        print(player.Name.. " has been removed.")
                    end
                end
            else
                table.remove(plrs,x)
            print(player.Name.. " has been removed.")
        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.Bucks.Value = plrs[1].leaderstats.Bucks.Value + reward
            break
        elseif #plrs == 0 then
            Status.Value = "Nobody won!"
            break
        elseif i == 0 then
            Status.Value = "Time up!"
            break
        end

        wait(1)

    end

    print("End of the game.")

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

        if not character then
            -- Ignore them
        else
            if character:FindFirstChild("GameTag") then
                character.GameTag:Destroy()
            end

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

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

        player:LoadCharacter()
    end

    ClonedMap:Destroy()

    wait(2)

    Status.Value = "Game ended!"
    end
end
0
Did you put a wait(1) in your GameLength for loop ? If not, the countdown will go to 0 immediately unless there is one present. laughablehaha 494 — 4y

1 answer

Log in to vote
0
Answered by 4 years ago

instead of doing "while true do" do "while wait(1") do"

Ad

Answer this question