DispatchBeginPlay is not executing?

My objective is to have my FPSAIGuard class’ BeginPlay function run before my FPSPatrol class’BeginPlay function. My FPSAIGuard class derives from ACharacter and my FPSPatrol from AAIController. According to my log messages, DispatchBeginPlay should be getting called, but it is not calling the BeginPlay function from my AIGuard beforehand, it still calls it after.

AFPSAIGuard.cpp:

#include "FPSAIGuard.h"
#include "Perception/PawnSensingComponent.h"
#include "DrawDebugHelpers.h"
#include "TimerManager.h"
#include "FPSGameMode.h"

// Sets default values
AFPSAIGuard::AFPSAIGuard()
{
 	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	PawnSensingComp = CreateDefaultSubobject<UPawnSensingComponent>(TEXT("PawnSensingComp"));
	
	SetGuardState(EAIState::Idle);
}

// Called when the game starts or when spawned
void AFPSAIGuard::BeginPlay()
{
	Super::BeginPlay();
	PawnSensingComp->OnSeePawn.AddDynamic(this, &AFPSAIGuard::OnPawnSeen);
	PawnSensingComp->OnHearNoise.AddDynamic(this, &AFPSAIGuard::OnHearNoise);

	OriginalRotation = GetActorRotation();

	NumTargets = TargetPathPoints.Num();

	UE_LOG(LogTemp, Warning, TEXT("NumTargets = %d"), NumTargets);
	if ( NumTargets > 0)
	{
		UE_LOG(LogTemp, Warning, TEXT("Should be patrolling now!"), NumTargets);
		SetGuardState(EAIState::Patrolling);
		if (GetGuardState() == EAIState::Patrolling) 
		{
			//UE_LOG(LogTemp, Warning, TEXT("Patrolling!"), NumTargets);
		}
		PathIndex = -1;
		//NextPath = TargetPathPoints[PathIndex];
		PreparePatrolPath(TargetPathPoints);
		//LookTowards(NextPath);
	}
}

FPSPatrol.cpp:

#include "FPSPatrol.h"
#include "EngineUtils.h"


void AFPSPatrol::BeginPlay()
{
	Super::BeginPlay();

	AActor* worldSet = nullptr;
	// Iterate through UWorld to find the object, worldSet
	for (TActorIterator<AActor> ActorItr(GetWorld()); ActorItr; ++ActorItr)
	{
		// Same as with the Object Iterator, access the subclass instance with the * or -> operators.
		worldSet = *ActorItr;
		if (worldSet->IsA<AFPSAIGuard>())
		{
			UE_LOG(LogTemp, Warning, TEXT("%s!"), *worldSet->GetName());
		}
		//UE_LOG(LogTemp, Warning, TEXT("Patrolling!"))

		//ClientMessage(ActorItr->GetName());
		//ClientMessage(ActorItr->GetActorLocation().ToString());
	}

	
	if (worldSet && !worldSet->HasActorBegunPlay())
	{
		worldSet->DispatchBeginPlay();
		UE_LOG(LogTemp, Warning, TEXT("ONLY SETTING ONE GUARD #TODO!"));
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("WorldSet is NULL!"));
	}
	

	if (GetGuardState() == EAIState::Patrolling)
	{
		UE_LOG(LogTemp, Warning, TEXT("Patrolling!"));
		PrevState = EAIState::Patrolling;
		GoToNextPath();
		//PreparePatrolPath();
	}
	else if (GetGuardState() == EAIState::Null)
	{
		UE_LOG(LogTemp, Warning, TEXT("Null!"));

	}
}

Appreciate the help!