A side comment, this check will never be true, and so that return will never be run.
AActor* SourceActor = this;
if (!SourceActor)
{
// Hero is dead
return;
}
this
will never be null unless you’re corrupting memory or something. If you want to see if the actor/component has had Destroy*() called recently you can instead call IsPendingKill(): UObjectBaseUtility::IsPendingKill | Unreal Engine Documentation