private EffectiveAttachModifier AttachLevelBuffModifier(PendingApplyModifierEntry entry) { BaseAbilityActor actor = Singleton <EventManager> .Instance.GetActor <BaseAbilityActor>(entry.ownerID); if (actor == null) { return(null); } ActorAbility instancedAbilityByID = actor.mpAbilityPlugin.GetInstancedAbilityByID(entry.instancedAbilityID); if (instancedAbilityByID == null) { return(null); } BaseAbilityActor other = Singleton <EventManager> .Instance.GetActor <BaseAbilityActor>(entry.otherTargetID); EffectiveAttachModifier modifier = new EffectiveAttachModifier { ownerID = entry.ownerID, config = entry.config, instancedAbilityID = entry.instancedAbilityID }; foreach (AttachModifier modifier2 in entry.config.AttachModifiers) { BaseAbilityActor actor3; BaseAbilityActor[] actorArray; bool flag; actor.mpAbilityPlugin.ExternalResolveTarget(modifier2.Target, modifier2.TargetOption, instancedAbilityByID, other, out actor3, out actorArray, out flag); ConfigAbilityModifier modifier3 = instancedAbilityByID.config.Modifiers[modifier2.ModifierName]; int localID = modifier3.localID; if (actor3 != null) { Singleton <MPManager> .Instance.GetIdentity <BaseAbilityEntityIdentiy>(actor3.runtimeID).Command_TryApplyModifier(entry.ownerID, entry.instancedAbilityID, localID); SubModifierLocater item = new SubModifierLocater { modifierOwnerID = actor3.runtimeID, modifierLocalID = localID }; modifier.attachedModifiers.Add(item); } else if (actorArray != null) { for (int i = 0; i < actorArray.Length; i++) { if (actorArray[i] != null) { Singleton <MPManager> .Instance.GetIdentity <BaseAbilityEntityIdentiy>(actorArray[i].runtimeID).Command_TryApplyModifier(entry.ownerID, entry.instancedAbilityID, localID); SubModifierLocater locater2 = new SubModifierLocater { modifierOwnerID = actorArray[i].runtimeID, modifierLocalID = localID }; modifier.attachedModifiers.Add(locater2); } } } } return(modifier); }
private void DetachLevelBuffModifiers(EffectiveAttachModifier entry) { for (int i = 0; i < entry.attachedModifiers.Count; i++) { SubModifierLocater locater = entry.attachedModifiers[i]; BaseAbilityEntityIdentiy identiy = Singleton <MPManager> .Instance.TryGetIdentity <BaseAbilityEntityIdentiy>(locater.modifierOwnerID); if (identiy != null) { SubModifierLocater locater2 = entry.attachedModifiers[i]; identiy.Command_TryRemoveModifier(entry.ownerID, entry.instancedAbilityID, locater2.modifierLocalID); } } }