public override BaseAbilityMixin CreateInstancedAbilityMixin(ActorAbility instancedAbility, ActorModifier instancedModifier, ConfigAbilityMixin config) { BaseAbilityMixin mixin = config.MPCreateInstancedMixin(instancedAbility, instancedModifier); if (mixin == null) { return(null); } mixin.selfIdentity = Singleton <MPManager> .Instance.GetIdentity <BaseAbilityEntityIdentiy>(mixin.actor.runtimeID); return(mixin); }
public ActorAbility(BaseAbilityActor caster, ConfigAbility config, Dictionary <string, object> overrideMap) { this.caster = caster; this.config = config; this._overrideMap = overrideMap; List <BaseAbilityMixin> list = new List <BaseAbilityMixin>(); for (int i = 0; i < config.AbilityMixins.Length; i++) { BaseAbilityMixin item = caster.abilityPlugin.CreateInstancedAbilityMixin(this, null, config.AbilityMixins[i]); if (item != null) { list.Add(item); } } base.instancedMixins = list.ToArray(); for (int j = 0; j < base.instancedMixins.Length; j++) { base.instancedMixins[j].instancedMixinID = j; } }
public ActorModifier(ActorAbility parentAbility, BaseAbilityActor owner, ConfigAbilityModifier config) { this.parentAbility = parentAbility; this.config = config; this.owner = owner; List <BaseAbilityMixin> list = new List <BaseAbilityMixin>(); for (int i = 0; i < config.ModifierMixins.Length; i++) { BaseAbilityMixin item = owner.abilityPlugin.CreateInstancedAbilityMixin(parentAbility, this, config.ModifierMixins[i]); if (item != null) { list.Add(item); } } base.instancedMixins = list.ToArray(); for (int j = 0; j < base.instancedMixins.Length; j++) { base.instancedMixins[j].instancedMixinID = j; } this.stackIndices = new int[config.Properties.Count + config.EntityProperties.Count]; }
public void HandleInvokes(Packet_Ability_InvocationTable table, int fromPeerID) { int invokesLength = table.InvokesLength; for (int i = 0; i < invokesLength; i++) { AbilityInvokeEntry invokes = table.GetInvokes(i); if (invokes.LocalID == 0xff) { if (this._abilityIdentity.isAuthority) { this.MetaAuthorityInvokeHandler(invokes); } else { this.MetaRemoteInvokeHandler(invokes); } } else { ActorAbility parentAbility; ActorModifier instancedModifierByID; uint target = invokes.Target; BaseAbilityActor actor = (target != 0) ? Singleton <EventManager> .Instance.GetActor <BaseAbilityActor>(target) : base._owner; if (actor == null) { return; } int instancedModifierID = invokes.InstancedModifierID; if (instancedModifierID != 0) { instancedModifierByID = this.GetInstancedModifierByID(instancedModifierID); parentAbility = instancedModifierByID.parentAbility; } else { instancedModifierByID = null; parentAbility = this.GetInstancedAbilityByID(invokes.InstancedAbilityID); } BaseActionContainer container = parentAbility.config.InvokeSites[invokes.LocalID]; if (container is ConfigAbilityAction) { ConfigAbilityAction actionConfig = (ConfigAbilityAction)container; actionConfig.MPGetRemoteHandler(this)(actionConfig, parentAbility, instancedModifierByID, actor, invokes); } else { BaseAbilityMixin instancedMixin = null; if (instancedModifierByID != null) { instancedMixin = instancedModifierByID.GetInstancedMixin(invokes.LocalID); } if (instancedMixin == null) { instancedMixin = parentAbility.GetInstancedMixin(invokes.LocalID); } instancedMixin.HandleMixinInvokeEntry(invokes, fromPeerID); } } } }