Function not replicating to client from server c++

So i am trying to replicate a function that is just visual effects to both the client and server. However right now the function is working properly the server can see the clients effects but the client cant see the servers effects. I dont know what i am doing wrong any help at all would be appreciated.

.h file

	/** [server] simulate ability */
	UFUNCTION(unreliable, Server, WithValidation)
	void ServerSimulate();

	/** [server] stop simulating ability */
	UFUNCTION(unreliable, Server, WithValidation)
	void ServerStopsimulating();


	/** Called in network play to do the cosmetic fx for the ability */
	UFUNCTION()
	virtual void SimulateAbility();

	/** Called in network play to stop cosmetic fx (e.g. for a looping ability). */
	UFUNCTION()
	virtual void StopSimulatingAbility()

.cpp

bool ABase_Ability::ServerSimulate_Validate()
{
	return true;
}
//TODO: Rename these functions!!
void ABase_Ability::ServerSimulate_Implementation()
{
	SimulateAbility();
}

bool ABase_Ability::ServerStopSimulating_Validate()
{
	return true;
}

void ABase_Ability::ServerStopSimulating_Implementation()
{
	StopSimulatingAbility();
}


void ABase_Ability::SimulateAbility()
{
	if (Role < ROLE_Authority)
	{
		ServerSimulate();
	}

	if (AbilityFX)
	{

		if (AbilityPSC == NULL)
		{
			AbilityPSC = UGameplayStatics::SpawnEmitterAttached(AbilityFX, AbilityMesh,FName::FName("Name_None"),MyPawn->GetActorLocation());
			AbilityPSC->bOwnerNoSee = false;
			AbilityPSC->bOnlyOwnerSee = false;
		}
		else
		{
			AbilityPSC = UGameplayStatics::SpawnEmitterAttached(AbilityFX, AbilityMesh);
		}
	}
}

void ABase_Ability::StopSimulatingAbility()
{
	if (Role < ROLE_Authority)
	{
		ServerStopSimulating();
	}

	if (AbilityPSC != NULL)
	{
		AbilityPSC->DeactivateSystem();
		AbilityPSC = NULL;
	}
}

Example of where i use it

void ABase_Ability::CastSimpleAbility()
{
	bIsActive = true;
	SimulateAbility();
	if (bIsRecharging != true)
	{
		AbilityAction();
	}
}