For loop when given character Hit Result triggers multiple times

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