164{
166
167 if (EffectCDO == nullptr)
168 {
169 LOG_WARNING(LogCKAbility,
"버프 '%s'의 GE(%s)가 %s 파생이 아니라 무기별 수치를 넣을 수 없습니다. SetByCaller 모디파이어는 0 으로 적용됩니다.",
171 return;
172 }
173
175 {
176
177
178 auto UsesSetByCaller = [](const FGameplayModifierInfo& Modifier)
179 {
180 return Modifier.ModifierMagnitude.GetMagnitudeCalculationType() == EGameplayEffectMagnitudeCalculation::SetByCaller;
181 };
182
183 if (EffectCDO->Modifiers.ContainsByPredicate(UsesSetByCaller))
184 {
185 LOG_WARNING(LogCKAbility,
"버프 '%s'의 GE(%s)는 SetByCaller 모디파이어를 쓰는데 WeaponMagnitudes 가 비어 있습니다. 수치가 0 으로 적용됩니다.",
187 }
188
189 return;
190 }
191
194
195
196 if (ActiveEntry == nullptr)
197 {
198 TArray<FGameplayTag> RegisteredWeaponTags;
200
201 FString RegisteredTagNames;
202
203 for (const FGameplayTag& WeaponTag : RegisteredWeaponTags)
204 {
205 RegisteredTagNames += (RegisteredTagNames.IsEmpty() ? TEXT("") : TEXT(", ")) + WeaponTag.ToString();
206 }
207
208 LOG_WARNING(LogCKAbility,
"버프 '%s': 현재 무기 태그 '%s' 가 WeaponMagnitudes 키에 없어 모든 모디파이어가 무력화됩니다. 등록된 키: [%s]",
210 CurrentWeaponTag.IsValid() ? *CurrentWeaponTag.ToString() : TEXT("(없음)"),
211 *RegisteredTagNames);
212 }
213
214 bool bAppliedAnyMagnitude = false;
215
216
217
218
219 for (const FGameplayModifierInfo& Modifier : EffectCDO->Modifiers)
220 {
221 if (Modifier.ModifierMagnitude.GetMagnitudeCalculationType() != EGameplayEffectMagnitudeCalculation::SetByCaller)
222 {
223 continue;
224 }
225
226 const FGameplayTag MagnitudeTag = Modifier.ModifierMagnitude.GetSetByCallerFloat().DataTag;
227
228 if (MagnitudeTag.IsValid() == false)
229 {
230 continue;
231 }
232
233
234 if (ActiveEntry && ActiveEntry->
MagnitudeTag == MagnitudeTag)
235 {
236 SpecHandle.Data->SetSetByCallerMagnitude(MagnitudeTag, ActiveEntry->
Magnitude);
237 bAppliedAnyMagnitude = true;
238 continue;
239 }
240
241
242 switch (Modifier.ModifierOp.GetValue())
243 {
244 case EGameplayModOp::AddBase:
245 case EGameplayModOp::AddFinal:
246 SpecHandle.Data->SetSetByCallerMagnitude(MagnitudeTag, 0.0f);
247 break;
248
249 case EGameplayModOp::MultiplyAdditive:
250 case EGameplayModOp::MultiplyCompound:
251 case EGameplayModOp::DivideAdditive:
252 SpecHandle.Data->SetSetByCallerMagnitude(MagnitudeTag, 1.0f);
253 break;
254
255 default:
256
258 break;
259 }
260 }
261
262
263 if (ActiveEntry && bAppliedAnyMagnitude == false)
264 {
265 LOG_WARNING(LogCKAbility,
"버프 '%s': 무기 '%s' 의 MagnitudeTag('%s')와 일치하는 SetByCaller 모디파이어가 GE 에 없습니다.",
267 *CurrentWeaponTag.ToString(),
269 }
270}
float Magnitude
Definition GE_ConstellationBuffBase.h:27
FGameplayTag MagnitudeTag
Definition GE_ConstellationBuffBase.h:24