Yes. What you should do is something along the lines of firing all of the clients with the arguments that contains the player’s name and the new faction. When a new player joins, just send a remote function to get that data.
It looks like this code is designed for changing UI. UI code should be done on the client in a LocalScript. Most of the time, client code & local scripts observe changes to relay information back to the user.
The code we’ve both posted is doing exactly that, it’s looking for changes in the faction value (which is presumably being changed by the server) and changing an image. When the server Script changes this faction value, the client is already set up to listen and display new information. We get that server → client replication for free.
There are cases where you may not have a StringValue on the server for the server code to manipulate. You could fire a RemoteEvent on the server and have the clients listen to that instead. StringValues sort of simplify this process for you.
The changing of values is done with a local script in a faction GUI.
Oh, right.
Thougt you should use LocalPlayer in order to find which player it was.
I got one error
23:11:32.436 - Players.ZacBytes.PlayerGui.Playerlist.Title.TextLabel.Frame.ScrollingFrame.LocalScript.Person.Faction.LocalScript:20: bad argument #3 to 'Image' (string expected, got nil)
UPDATE:
Nevermind it was a typo (tokyo beats lol)