From 537b5510f0887d1fd8327657c34e67121c579d38 Mon Sep 17 00:00:00 2001 From: Qwigs Date: Wed, 3 Jun 2026 13:49:14 -0700 Subject: [PATCH] Add Blueprint-accessible GetAbilityCostValues to UGMCAbility Added a helper function to easily retrieve and map the attribute costs associated with an ability. Functionality: Iterates through the AbilityCost effect CDO to extract the modifiers. Returns: A TMap that maps attribute tags directly to their exact modifier values. Use Case: Simplifies querying and accessing ability costs for UI display and Blueprint logic. --- .../GMCAbilitySystem/Private/Ability/GMCAbility.cpp | 13 +++++++++++++ Source/GMCAbilitySystem/Public/Ability/GMCAbility.h | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/Source/GMCAbilitySystem/Private/Ability/GMCAbility.cpp b/Source/GMCAbilitySystem/Private/Ability/GMCAbility.cpp index f405935..41144ec 100644 --- a/Source/GMCAbilitySystem/Private/Ability/GMCAbility.cpp +++ b/Source/GMCAbilitySystem/Private/Ability/GMCAbility.cpp @@ -144,6 +144,19 @@ void UGMCAbility::RemoveAbilityCost() { } } +TMap UGMCAbility::GetAbilityCostValues() const +{ + TMap CostMap; + if (!AbilityCost) return CostMap; + + const UGMCAbilityEffect* EffectCDO = AbilityCost->GetDefaultObject(); + + for (const FGMCAttributeModifier& Modifier : EffectCDO->EffectData.Modifiers) + { + CostMap.Add(Modifier.AttributeTag, Modifier.GetValue()); + } + return CostMap; +} void UGMCAbility::ModifyBlockOtherAbility(FGameplayTagContainer TagToAdd, FGameplayTagContainer TagToRemove) { for (auto Tag : TagToAdd) { diff --git a/Source/GMCAbilitySystem/Public/Ability/GMCAbility.h b/Source/GMCAbilitySystem/Public/Ability/GMCAbility.h index e7a1675..8174dab 100644 --- a/Source/GMCAbilitySystem/Public/Ability/GMCAbility.h +++ b/Source/GMCAbilitySystem/Public/Ability/GMCAbility.h @@ -164,6 +164,11 @@ class GMCABILITYSYSTEM_API UGMCAbility : public UObject, public IGameplayTaskOwn // Remove the ability cost effect (if applicable) UFUNCTION(BlueprintCallable, Category = "GMCAbilitySystem") virtual void RemoveAbilityCost(); + + // Retrieves the attribute costs of this ability from its AbilityCost effect class. + // @return A map of GameplayTags (Attributes) to their respective modifier values. + UFUNCTION(BlueprintPure, Category = "GMCAbilitySystem") + TMap GetAbilityCostValues() const; // Live modifying the BlockOtherAbility tags UFUNCTION(BlueprintCallable, Category = "GMCAbilitySystem")