From 0066107a585677e324f195ece77318b19fa7add6 Mon Sep 17 00:00:00 2001 From: Thibaut Spreux Date: Mon, 14 Apr 2025 13:57:20 +0200 Subject: [PATCH 1/2] fix add abilities GameFeatureAction properly get ASC --- .../GBFGameFeatureAction_AddAbilities.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Source/GameBaseFramework/Private/GameFeatures/GBFGameFeatureAction_AddAbilities.cpp b/Source/GameBaseFramework/Private/GameFeatures/GBFGameFeatureAction_AddAbilities.cpp index a40026c7..809d305c 100644 --- a/Source/GameBaseFramework/Private/GameFeatures/GBFGameFeatureAction_AddAbilities.cpp +++ b/Source/GameBaseFramework/Private/GameFeatures/GBFGameFeatureAction_AddAbilities.cpp @@ -9,6 +9,7 @@ #include "DVEDataValidator.h" #endif +#include #include #define LOCTEXT_NAMESPACE "UGBFGameFeatureAction_AddAbilities" @@ -224,7 +225,7 @@ void UGBFGameFeatureAction_AddAbilities::AddActorAbilities( AActor * actor, cons return; } - if ( auto * ability_system_component = FindOrAddComponentForActor< UAbilitySystemComponent >( actor, abilities_entry, active_data ) ) + if ( auto * ability_system_component = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent( actor ) ) { FActorExtensions AddedExtensions; AddedExtensions.Abilities.Reserve( abilities_entry.GrantedAbilities.Num() ); @@ -246,7 +247,7 @@ void UGBFGameFeatureAction_AddAbilities::AddActorAbilities( AActor * actor, cons if ( !attributes.AttributeSetType.IsNull() ) { if ( auto attribute_set_class = attributes.AttributeSetType.LoadSynchronous(); - attribute_set_class != nullptr ) + attribute_set_class != nullptr ) { auto * new_set = NewObject< UAttributeSet >( ability_system_component, attribute_set_class ); if ( !attributes.InitializationData.IsNull() ) @@ -268,7 +269,7 @@ void UGBFGameFeatureAction_AddAbilities::AddActorAbilities( AActor * actor, cons if ( !effect.IsNull() ) { if ( auto gameplay_effect_class = effect.LoadSynchronous(); - gameplay_effect_class != nullptr ) + gameplay_effect_class != nullptr ) { auto effect_context = ability_system_component->MakeEffectContext(); const auto spec_handle = ability_system_component->MakeOutgoingSpec( gameplay_effect_class, 1, effect_context ); @@ -281,7 +282,7 @@ void UGBFGameFeatureAction_AddAbilities::AddActorAbilities( AActor * actor, cons for ( const auto & ability_set_ptr : abilities_entry.GrantedAbilitySets ) { if ( const auto * ability_set = ability_set_ptr.LoadSynchronous(); - ability_set != nullptr ) + ability_set != nullptr ) { ability_set->GiveToAbilitySystem( ability_system_component, &AddedExtensions.AbilitySetHandles.AddDefaulted_GetRef() ); } @@ -292,6 +293,10 @@ void UGBFGameFeatureAction_AddAbilities::AddActorAbilities( AActor * actor, cons active_data.ActiveExtensions.Add( actor, AddedExtensions ); } + else + { + UE_LOG( LogGameFeatures, Error, TEXT( "Failed to find `AbilitySystemComponent` for given actor. `Add abilities` GameFeature Action will not be processed" ) ); + } } void UGBFGameFeatureAction_AddAbilities::RemoveActorAbilities( AActor * actor, FPerContextData & active_data ) From 25bae1b93bfc05f3392b59922c7e606caee2b64f Mon Sep 17 00:00:00 2001 From: Thibaut Spreux Date: Mon, 14 Apr 2025 14:04:08 +0200 Subject: [PATCH 2/2] clang --- .../GameFeatures/GBFGameFeatureAction_AddAbilities.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/GameBaseFramework/Private/GameFeatures/GBFGameFeatureAction_AddAbilities.cpp b/Source/GameBaseFramework/Private/GameFeatures/GBFGameFeatureAction_AddAbilities.cpp index 809d305c..d06ca1df 100644 --- a/Source/GameBaseFramework/Private/GameFeatures/GBFGameFeatureAction_AddAbilities.cpp +++ b/Source/GameBaseFramework/Private/GameFeatures/GBFGameFeatureAction_AddAbilities.cpp @@ -247,7 +247,7 @@ void UGBFGameFeatureAction_AddAbilities::AddActorAbilities( AActor * actor, cons if ( !attributes.AttributeSetType.IsNull() ) { if ( auto attribute_set_class = attributes.AttributeSetType.LoadSynchronous(); - attribute_set_class != nullptr ) + attribute_set_class != nullptr ) { auto * new_set = NewObject< UAttributeSet >( ability_system_component, attribute_set_class ); if ( !attributes.InitializationData.IsNull() ) @@ -269,7 +269,7 @@ void UGBFGameFeatureAction_AddAbilities::AddActorAbilities( AActor * actor, cons if ( !effect.IsNull() ) { if ( auto gameplay_effect_class = effect.LoadSynchronous(); - gameplay_effect_class != nullptr ) + gameplay_effect_class != nullptr ) { auto effect_context = ability_system_component->MakeEffectContext(); const auto spec_handle = ability_system_component->MakeOutgoingSpec( gameplay_effect_class, 1, effect_context ); @@ -282,7 +282,7 @@ void UGBFGameFeatureAction_AddAbilities::AddActorAbilities( AActor * actor, cons for ( const auto & ability_set_ptr : abilities_entry.GrantedAbilitySets ) { if ( const auto * ability_set = ability_set_ptr.LoadSynchronous(); - ability_set != nullptr ) + ability_set != nullptr ) { ability_set->GiveToAbilitySystem( ability_system_component, &AddedExtensions.AbilitySetHandles.AddDefaulted_GetRef() ); }