diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.dll b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.dll index 82fa17d..48fc711 100644 Binary files a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.dll and b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.dll differ diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_0.exe b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_0.exe index fd27a82..4de5ea9 100644 Binary files a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_0.exe and b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_0.exe differ diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_0.pdb b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_0.pdb index 109aba9..195b840 100644 Binary files a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_0.pdb and b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_0.pdb differ diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_1.exe b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_1.exe index be9efc6..a231a95 100644 Binary files a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_1.exe and b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_1.exe differ diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_1.pdb b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_1.pdb index fc7f879..747056e 100644 Binary files a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_1.pdb and b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.patch_1.pdb differ diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.pdb b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.pdb index 65ef337..288e195 100644 Binary files a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.pdb and b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Binaries/Win64/UnrealEditor-PS_AI_Behavior.pdb differ diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Source/PS_AI_Behavior/Private/BT/PS_AI_Behavior_BTTask_Attack.cpp b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Source/PS_AI_Behavior/Private/BT/PS_AI_Behavior_BTTask_Attack.cpp index 2c84b7d..a92d81a 100644 --- a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Source/PS_AI_Behavior/Private/BT/PS_AI_Behavior_BTTask_Attack.cpp +++ b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Source/PS_AI_Behavior/Private/BT/PS_AI_Behavior_BTTask_Attack.cpp @@ -227,8 +227,12 @@ void UPS_AI_Behavior_BTTask_Attack::TickTask( { // No LOS and idle → find a firing position // Check if investigation (last known position) is active + // ClearValue sets vectors to FAISystem::InvalidLocation, not zero — must check both const FVector LastKnownPos = BB->GetValueAsVector(PS_AI_Behavior_BB::LastKnownTargetPosition); - if (!LastKnownPos.IsZero()) + const bool bHasLastKnown = !LastKnownPos.IsZero() && + !LastKnownPos.ContainsNaN() && + LastKnownPos.X < 1e30f; // Filter out FLT_MAX / InvalidLocation + if (bHasLastKnown) { // Investigation mode: go to last known position AIC->MoveToLocation( @@ -336,6 +340,7 @@ void UPS_AI_Behavior_BTTask_Attack::TickTask( *AIC->GetName()); } } + } EBTNodeResult::Type UPS_AI_Behavior_BTTask_Attack::AbortTask( @@ -427,20 +432,9 @@ void UPS_AI_Behavior_BTTask_Attack::OnFiringPositionQueryFinished( AActor* Target = WeakTarget.Get(); - if (Result.IsValid() && Result->IsSuccessful()) + // Fallback lambda: advance directly toward target + auto FallbackAdvance = [&](const TCHAR* Reason) { - const FVector FiringPos = Result->GetItemAsLocation(0); - AIC->MoveToLocation( - FiringPos, 50.0f, /*bStopOnOverlap=*/true, - /*bUsePathfinding=*/true, /*bProjectGoal=*/false, /*bCanStrafe=*/false); - Memory->bSeekingFiringPos = true; - - UE_LOG(LogPS_AI_Behavior, Log, TEXT("[%s] Attack: EQS found firing position %s"), - *AIC->GetName(), *FiringPos.ToString()); - } - else - { - // EQS found nothing — fallback: advance toward target if (Target) { const float MidRange = (Memory->MinRange + Memory->MaxRange) * 0.5f; @@ -449,9 +443,32 @@ void UPS_AI_Behavior_BTTask_Attack::OnFiringPositionQueryFinished( /*bUsePathfinding=*/true, /*bProjectGoal=*/true, /*bCanStrafe=*/false); Memory->bSeekingFiringPos = true; } + UE_LOG(LogPS_AI_Behavior, Log, TEXT("[%s] Attack: %s, fallback advance toward target"), + *AIC->GetName(), Reason); + }; - UE_LOG(LogPS_AI_Behavior, Log, TEXT("[%s] Attack: EQS no result, fallback advance"), - *AIC->GetName()); + if (Result.IsValid() && Result->IsSuccessful()) + { + const FVector FiringPos = Result->GetItemAsLocation(0); + const EPathFollowingRequestResult::Type MoveResult = AIC->MoveToLocation( + FiringPos, 50.0f, /*bStopOnOverlap=*/true, + /*bUsePathfinding=*/true, /*bProjectGoal=*/true, /*bCanStrafe=*/false); + + if (MoveResult == EPathFollowingRequestResult::RequestSuccessful) + { + Memory->bSeekingFiringPos = true; + UE_LOG(LogPS_AI_Behavior, Log, TEXT("[%s] Attack: EQS moving to firing position %s"), + *AIC->GetName(), *FiringPos.ToString()); + } + else + { + // AlreadyAtGoal or Failed — EQS position is too close or unreachable + FallbackAdvance(TEXT("EQS position unreachable or too close")); + } + } + else + { + FallbackAdvance(TEXT("EQS no result")); } } diff --git a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Source/PS_AI_Behavior/Public/BT/PS_AI_Behavior_BTTask_Attack.h b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Source/PS_AI_Behavior/Public/BT/PS_AI_Behavior_BTTask_Attack.h index 8d1d0bb..cb819d7 100644 --- a/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Source/PS_AI_Behavior/Public/BT/PS_AI_Behavior_BTTask_Attack.h +++ b/Unreal/PS_AI_Agent/Plugins/PS_AI_Behavior/Source/PS_AI_Behavior/Public/BT/PS_AI_Behavior_BTTask_Attack.h @@ -48,6 +48,7 @@ public: UPROPERTY(EditAnywhere, Category = "Attack|LOS", meta = (ClampMin = "0.1", ClampMax = "1.0")) float LOSCheckInterval = 0.2f; + /** * EQS query asset for finding a firing position with clear LOS. * Compose in editor: OnCircle generator + LineOfSight filter + Distance tests.