So I’ve managed to find a way to do what I was trying to do, but I’m not sure if it is the ‘recommended’ way. The Gameplay Ability System can feel overwhelming at times.
void UBaseToHitCalculation::Execute_Implementation(const FGameplayEffectCustomExecutionParameters& ExecutionParams, FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const {
int32 d20Roll = FMath::RandRange(1, 20);
UE_LOG(LogTemp, Error, TEXT("D20 roll: %d"), d20Roll);
if (d20Roll > 10) {
FGameplayModifierEvaluatedData DamageModifier = FGameplayModifierEvaluatedData();
DamageModifier.Attribute = URPGAttributes::GetHpAttribute();
DamageModifier.ModifierOp = EGameplayModOp::Type::Additive;
DamageModifier.IsValid = true;
DamageModifier.Magnitude = -1.0f;
OutExecutionOutput.AddOutputModifier(DamageModifier);
}
}