Why is my c++ function a Pure blueprint function

Alright, so you can remove the

void GetPerceptionLocRot_Implementation(FVector & OutLocation, FRotator & OutRotation) const;

declaration from the header file. It’s implied you’re going to override it. (intellisense will probably complain, but it should work).

Second, remove the

void AAI_Char::GetPerceptionLocRot(FVector &OutLocation, FRotator &OutRotation) const

definition from the source (cpp) file, you only need the _Implementation version.

Third, for GetActorEyesViewPoint, you need to add the virtual and const keywords, so it looks like:

virtual void GetActorEyesViewPoint( FVector& OutLocation, FRotator& OutRotation ) const override;

And then, you need to completely rewrite the source (cpp) implementation to look like:

 void AAI_Char::GetActorEyesViewPoint(FVector& Location, FRotator& Rotation) const
 {
     GetPerceptionLocRot(Location, Rotation);
 }

You don’t want to specifically call GetPerceptionLocRot_Implementation, because then any blueprint overriders wouldn’t get an opportunity to be used.

Let us know how you go!