I'm trying to add a timer script where when I type a message, a timer starts ticking down on everyone's GUI. The trouble I am having is accessing everyone's GUI's at the same time to change them all at the same time. The script is currently in ServerScriptService and the GUI itself is in StarterGUI. I guess you could say that this kind of GUI is like a server-wide message that I control when it starts.
01 | --This is an attempt of me doing it. |
02 | local p = "elian11" ; |
03 |
04 | local t = game.Players:GetChildren(); |
05 | local timer = t.PlayerGui.Timer.Frame.TextLabel |
06 |
07 | game.Players.ChildAdded:connect( function (newPlayer) |
08 | if (newPlayer.Name ~ = p) then return ; end |
09 | newPlayer.Chatted:connect( function (msg) |
10 | msg = msg:lower(); |
11 | if (msg = = "raid/timerstart" ) then |
12 | timer.Text = "This script works" |
13 | --You can ignore this part, I will add it once it starts working. |
14 |
15 | end |
16 | end ); |
17 | end ); |
http://wiki.roblox.com/index.php?title=API:Class/Instance/GetChildren
you are missing for i,v in pairs () do
use the link above to fix your script.
Hi! I see your problem, and the best solution to your problem is to use an in pairs loop. Basically, I have fixed up your script and this is the fixed version:
01 | local p = "elian11" ; |
02 |
03 | local t = game.Players:GetChildren(); |
04 | local timer = t.PlayerGui.Timer.Frame.TextLabel |
05 |
06 | game.Players.ChildAdded:connect( function (newPlayer) |
07 | if (newPlayer.Name ~ = p) then return ; end |
08 | newPlayer.Chatted:connect( function (msg) |
09 | msg = msg:lower(); |
10 | if (msg = = "raid/timerstart" ) then |
11 | for i,v in pairs (t) do |
12 | v.PlayerGui.Timer.Frame.TextLabel.Text = "This script works." |
13 | end |
14 | end |
15 | end ); |
16 | end ); |
What I did was I used an in pairs loop to loop through all the players, and if the player has the gui then it will change the timer's textlabel' for every player.