FGAEffectHandle FGAActiveEffectContainer::HandleInstigatorEffectOverride(FGAEffectSpec& EffectIn, const FGAEffectContext& Ctx) { FGAInstigatorEffectContainer& instCont = InstigatorEffects.FindOrAdd(Ctx.InstigatorComp); FGAEffectHandle foundHandle;// = instCont.EffectsByName.FindRef(EffectIn.EffectName); for (FGAEffectTagHandle& eff : instCont.Effects) { if (eff.EffectName == EffectIn.EffectName) { foundHandle = eff.Handle; break; } } ModifierContainer.RemoveModifiersByType(EffectIn.EffectSpec->RequiredTags, EffectIn.EffectSpec->EffectModifiers); /* 1. If effect is set to override should: a). Remove all attribute modifiers, which are the same as ours ? b). Or should we just override modifiers, applied by the same effect (identified, by effects name/handle). */ TArray<FGAAttributeData> AttributeModifiers = EffectIn.EffectSpec->GetDurationAttribute(Ctx); for (const FGAAttributeData& data : AttributeModifiers) { FGAAttributeBase* AtrPtr = Ctx.TargetComp->GetAttribute(data.Attribute); if (AtrPtr) { AtrPtr->RemoveBonusByType(data.Mod); } } RemoveActiveEffect(foundHandle); FGAEffectHandle handle = AddActiveEffect(EffectIn, Ctx); FGAEffectTagHandle nameHandle(EffectIn.EffectName, handle); instCont.Effects.Add(nameHandle); return handle; }