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")