Server can move, Clients can not

I have managed to implement multiplayer across some of my functions by taking the following actions:

HomagePlayer.h

void MoveFoward(float value);

UFUNCTION(Server, Reliable, WithValidation)
void ServerMoveForward(float value);
void ServerMoveForward_Implementation(float value);
bool ServerMoveForward_Validate(float value);

UFUNCTION(NetMulticast, Reliable)
void BroadcastMoveForward(float value);
void BroadcastMoveForward_Implementation(float value);

HomagePlayer.cpp

void AHomagePlayer::MoveFoward(float value)
{
	ServerMoveForward(value);
}

bool AHomagePlayer::ServerMoveForward_Validate(float value)
{
	return true;
}

void AHomagePlayer::ServerMoveForward_Implementation(float value)
{
	if (Role == ROLE_Authority)
	{
		BroadcastMoveForward(value);
	}
}

void AHomagePlayer::BroadcastMoveForward_Implementation(float value)
{
	if (value != 0.0f)
		MovementInput.X = value;
}

Although there are still a couple of issues presented with this implementation:

  • The Server function is replicated to
    the Client although the Client is not
    replicated to the Server.
  • The movement somewhat de-syncs, for instance: Server stands near edge
    and stops, on the Client’s screen the
    Server falls off of the ledge.
  • Clients are completely unable to move at all.

I have tested PIE Server/Client and Dedicated Server with Client and both produce the same issue. Both the Characters are spawned although, only the Server can move but the Client can not (dedicated server doesn’t spawn a character obviously and client’s are unable to move).

I feel like there’s something I’m missing here completely. If someone is able to give me some further direction on this it would be greatly appreciated! :slight_smile: