Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Timer wont run...IntValue wont trigger timer??? Help(GUI)

i am developing a game and my script wont run in serverscript service(longscript) first script(in startergui inside a textbox)

timer = script.Parent 
val = game.ReplicatedStorage.Timer
intro = game.ReplicatedStorage.Intro
t = game.ReplicatedStorage.T

while true do
	if intro.Value == 1 then -- part that was referenced in script below
		timer.Visible = true -- timer wont go visible
		timer.Text = "0:"..val.Value
	val.Value = val.Value - 1 -- timer wont go down a second
	end
	if timer.Text == "0:0" then -- this part works fine
		local it = game:WaitForChild("ReplicatedStorage").It
		it:FireServer()
		timer.Visible = false
		intro.Value = 0
		timer.Text = "0.0"
	end
end

this is the script with the problem(Below)

local gamie = game.ReplicatedStorage.Game
local intro = game.ReplicatedStorage.Intro
local timer = game.ReplicatedStorage.Timer
lava = game.ReplicatedStorage.Lava
local rs = game:GetService('ReplicatedStorage').Restart 
local t = game:GetService("ReplicatedStorage")

rs.Event:Connect(function(touch)
		timer.Value = 20 -- this is supposed to change the value of the timer to 20 to count down but that wont change either...???
	intro.Value = 1 --Part that is supposed to trigger timer(as shown in script above)
	local clone = game.ReplicatedStorage.Lava2:Clone()
	clone.Parent = game.Workspace	    
		if lava.Parent == game.ReplicatedStorage then 
			lava.Parent = game.Workspace
		end
		wait(1)
		if lava.Parent == game.Workspace then
			lava.Parent = game.ReplicatedStorage
		end
	wait(3)
	clone:Destroy()
	local tp = game.ReplicatedStorage.TP
	tp.Parent = game.Workspace
end)

2 comments

0

And my game keeps lagging HARD it crashes studio

0

yeah don’t use while true do use wait wait() do

2 answers

Usually, you would want to avoid any loop with the wait() function or not. It is often best to use :GetPropertyChangedSignal(property) to fire the function rather than always check for a value. This will reduce the lag significantly as it only functions when the value is changed.

timer = script.Parent 
val = game.ReplicatedStorage.Timer
intro = game.ReplicatedStorage.Intro
t = game.ReplicatedStorage.T

intro:GetPropertyChangedSignal("Value"):Connect(function()
    if intro.Value == 1 then -- part that was referenced in script below
        timer.Visible = true -- timer wont go visible
        timer.Text = "0:"..val.Value
    val.Value = val.Value - 1 -- timer wont go down a second
    end
    if timer.Text == "0:0" then -- this part works fine
        local it = game:WaitForChild("ReplicatedStorage").It
        it:FireServer()
        timer.Visible = false
        intro.Value = 0
        timer.Text = "0.0"
    end
end)

Additionally, you should also use the tonumber() function just so the timer doesn’t break if text is entered into the text box. As for the final thing I noticed, you should probably put some data into the :FireServer() event so that the server can read the values of the timer and other data you sent.

Edit: I can’t fully help you because you didn’t paste the entirety of the scripts

1 comment

0

although the long script in my question wont change the value of the timer and intro

I don't know the full context of your situation or what your trying to do but i hope this helps. I would insert a NumberValue in your ScreenGui or really where ever you want just change the script according to your game and set the text to the NumberValue. I would also use a for loop instead of a while loop for your timer that you can call with a remote event when you want to use this. Again not sure if this is what you were looking for but I hope this can help in some way.

game.ReplicatedStorage."Your remote event".OnClientEvent:Connect(function()--Instead of waiting for intro.Value == 1 call the timer using a remote event when you set the intro.Value to 1
local seconds = script.Parent.Parent.Parent.Time --This is the NumberValue within the ScreenGUI
local timer = script.Parent --The text label showing the time
seconds.Value = 20 
script.Parent.Text = seconds.Value --This sets the Text to whatever the NumberValue is so changing it will change the text

for i = 1,seconds.Value do	--Use a for loop instead of a while loop 
	wait(1)
 		seconds.Value = seconds.Value - 1
 		script.Parent.Text = seconds.Value
	end
end)

This discussion is preserved as it was. New answers, comments, and votes are closed.