コード例 #1
0
        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);
        }
コード例 #2
0
        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);
                }
            }
        }