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

Why does a certain function restart after timer hits zero?

Asked by 6 years ago

This is a script for a new game that i'm working on. It starts to check for players whenever two or more players enter the game, then the timer starts running. The problem is that whenever the timer hits zero, the enterplr function restarts. what seems to be the problem?

Data = game.Workspace.GameData
TimeLeft = game.Workspace.GameData.Timer
Players = game.Players
Plr_amnt = Data.Plrs

function enter(plr)
    wait()
    Plr_amnt.Value = Players.NumPlayers
end

function check()
    wait(2)
    if Plr_amnt.Value >= 1 then
        gamestart()
    elseif Plr_amnt.Value == 1 then
        print("Retrying...")
        wait(2)
        check()
    end
    end


function gamestart()
    TimeLeft.Value = 50
    for i=1,50 do
        wait(1)
        TimeLeft.Value = TimeLeft.Value - 1
    end
end

while wait(enter()) do
check()
end

game.Players.PlayerAdded:connect(enter)
0
GameData is a folder and TimeLeft, Plr_amount are numvalues splat_rt 2 — 6y

1 answer

Log in to vote
1
Answered by
Zafirua 1348 Badge of Merit Moderation Voter
6 years ago
Edited 6 years ago

Here is the updated Code. It is LocalScript I only realized the flaw of the script after I was fully done. You will notice that the Player1's output is different from Player2 output. You would have to change the following script into Server script but I think you are more than capabale enough to do so.

-- DeclarationS Section
-- //Game Services  
local Workspace = game:GetService("Workspace");
local Player = game:GetService("Players");
local PlayerList = Player:GetChildren();
local PlayerAmount = #PlayerList;

-- //Game Data and its Number Values 
local GameData = Workspace:WaitForChild("GameData");
local DataValue = GameData:WaitForChild("DataValue");
local PlayerAmountValue = GameData:WaitForChild("PlayerAmountValue");

-- //Variables 
local MinimumPlayerCount = 1;
local PremierTime = 50; 
local isRoundFinished = false;
local AmountOfWaitTime = 10;

-- Processing Section 

-- //Start Round 
function BeginRound ()
    print("Envoked Function");
    DataValue.Value = PremierTime;
    isRoundFinished = false;

    if isRoundFinished == false then 
        for i = PremierTime, 1, -1 do
            DataValue.Value = i;
            print(DataValue.Value);
            wait(1);
        end;

        isRoundFinished = true; 

        wait(AmountOfWaitTime); 

        -- This is where you add you Minigame code
        spawn(MinigameCode) 
        spawn(CountAmountOfPlayers);
    else 
        wait(AmountOfWaitTime);
        print(AmountOfWaitTime);

        isRoundFinished = false;
    end;
end;

-- //Counting #Players 
function CountAmountOfPlayers ()
    print("Envoked CountAmountPlayers Function");
    PlayerAmountValue.Value = PlayerAmount; 
    wait();

    if PlayerAmountValue.Value > MinimumPlayerCount then 
        print("Enough Player");
        spawn(BeginRound);
    elseif PlayerAmountValue.Value <= MinimumPlayerCount then 
        print("Not Enough Players");
        wait(2);
        spawn(CountAmountOfPlayers);
    end
end;


-- Connecting Section 
Player.PlayerAdded:Connect(CountAmountOfPlayers)

Sorry the video got cut off but you can still check the code if you want to.

Ad

Answer this question