Getting all playercontrollers from server as a client

I am having some issues wrapping my head around replication.

I have a lobby level that has a 3d Widget in there that i would like to display some information for each pc connected to the server.

I want all this info to come from the server.

So I created a GameMode and GameState

Using the following code for the game state.

class ALLSPARK_API AAllSparkGameState : public AGameState

	UFUNCTION(Reliable, Server, WithValidation, BlueprintCallable, Category = "GameState")
	void UpdateConnectedPCs();
	void UpdateConnectedPCs_Implementation();
	bool UpdateConnectedPCs_Validate();

	UFUNCTION(BlueprintPure, Category = "GameState")
	TArray<APlayerController*> GetConnectedPCs() const;

	TArray<APlayerController*> ConnectedPCs;

TArray<APlayerController*> AAllSparkGameState::GetConnectedPCs() const {
	return ConnectedPCs;

void AAllSparkGameState::UpdateConnectedPCs_Implementation() {

	if (Role == ROLE_Authority)
		for (auto allPCs = GetWorld()->GetPlayerControllerIterator(); allPCs; ++allPCs)
			bool found = false;
			auto CurrentPC = Cast<APlayerController>((*allPCs));
			if (CurrentPC)
				for (auto inArray(ConnectedPCs.CreateIterator()); inArray; inArray++)
					auto inArrayPC = Cast<APlayerController>((*inArray));

					if (inArrayPC == CurrentPC) {
						found = true;

				if (found == false) {

bool AAllSparkGameState::UpdateConnectedPCs_Validate() {
	return true;

This all works fine for the server but the clients are getting nothing in the array.

Can anyone see what i’m doing wrong its probably real obvious :S

I have solved this issue by accessing the player states form the game state.

As i understand what was happening my code was finding them all correctly but they didnt exist on the clients because of the replication settings.

Hope this helps someone. :slight_smile: