13{
15
16 if (Data.TargetActor == nullptr || Data.GameplayEffectClass == nullptr)
17 {
18 LOG_ERROR(LogCKAbility,
"TargetActor 또는 GameplayEffectClass가 유효하지 않음");
19 return EStateTreeRunStatus::Failed;
20 }
21
22 UAbilitySystemComponent* ASC = UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(Data.TargetActor);
23 if (ASC == nullptr)
24 {
25 LOG_ERROR(LogCKAbility,
"TargetActor에 AbilitySystemComponent가 없음");
26 return EStateTreeRunStatus::Failed;
27 }
28
29 FGameplayEffectContextHandle EffectContext = ASC->MakeEffectContext();
30 EffectContext.AddSourceObject(Data.TargetActor);
31
32 FGameplayEffectSpecHandle SpecHandle = ASC->MakeOutgoingSpec(Data.GameplayEffectClass, 1.0f, EffectContext);
33 if (SpecHandle.IsValid() == false)
34 {
35 LOG_ERROR(LogCKAbility,
"GameplayEffectSpec 생성 실패");
36 return EStateTreeRunStatus::Failed;
37 }
38
39 if (Data.SetByCallerTag.IsValid())
40 {
41
42 SpecHandle.Data->SetSetByCallerMagnitude(Data.SetByCallerTag, Data.ModifierValue);
43 }
44
45
46 Data.ActiveHandle = ASC->ApplyGameplayEffectSpecToSelf(*SpecHandle.Data.Get());
47 if (!Data.ActiveHandle.WasSuccessfullyApplied())
48 {
50 return EStateTreeRunStatus::Failed;
51 }
52
53
54 return EStateTreeRunStatus::Running;
55}
#define LOG_ERROR(Category, Format,...)
Definition CK_UE.h:40
FTask_ApplyGE_Data FInstanceDataType
Definition Task_ApplyGE.h:40