As for how the UPA_BlueprintFunctionLibrary is implemented in code (I removed the unnecessary bits, since the reply was getting too big);
if (BlahBlah)
{
FCollisionObjectQueryParams ObjectParams;
ObjectParams.AddObjectTypesToQuery(ECollisionChannel::ECC_Visibility);
ObjectParams.AddObjectTypesToQuery(ECollisionChannel::ECC_Pawn);
ObjectParams.AddObjectTypesToQuery(ECollisionChannel::ECC_WorldStatic);
ObjectParams.AddObjectTypesToQuery(ECollisionChannel::ECC_WorldDynamic);
FCollisionQueryParams TraceParams(TEXT(""), false, ToolOwner);
TraceParams.bTraceAsyncScene = true;
TraceParams.bTraceComplex = true;
TraceParams.bReturnPhysicalMaterial = true;
FVector MuzzleLoc = GetSocketLocation(MuzzleSocket);
FRotator MuzzleRot = GetSocketRotation(MuzzleSocket);
FVector TargetLoc = MuzzleLoc + (FRotationMatrix(MuzzleRot).GetScaledAxis(EAxis::X) * Range);
TargetLoc.X = ToolOwner->GetActorLocation().X;
FHitResult TraceHit(ForceInit);
bool bHit = GetWorld()->LineTraceSingleByObjectType(TraceHit, MuzzleLoc, TargetLoc, ObjectParams, TraceParams);
if (bHit)
{
UPA_BlueprintFunctionLibrary::DealRadialDamageWithFalloff(0.f,
Damage,
CurrentFlintlockBullet.InnerRadius,
CurrentFlintlockBullet.OuterRadius,
CurrentFlintlockBullet.FallOff,
TraceHit.ImpactPoint,
CurrentFlintlockBullet.DamageType,
ToolOwner->GetController(),
ToolOwner,
TraceHit,
false,
true
);
}
}