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)
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
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)