Example #1
0
        //private CDamageInfo _damage = null;

        public override void AppliedFrom(IGameplayAbilityUnit instigator)
        {
            base.AppliedFrom(instigator);
            //buff自己销毁自己
            //CBuff beh = CBuff.Create(m_meta.Behavior, m_owner.gameObject);
            //beh.Apply(from, to);
        }
Example #2
0
        /// <summary>
        /// target的分组是否匹配
        /// </summary>
        protected bool IsTargetGroupMatch(IGameplayAbilityUnit target)
        {
            bool b = false;

            switch (MetaBase.TargetTeamRequire)
            {
            case CAbilityUnitTeamType.All:
                b = true;
                break;

            case CAbilityUnitTeamType.Me:
                b = (target == m_owner);
                break;

            case CAbilityUnitTeamType.Friend:
                b = m_owner.IsFriendTeam(target);
                break;

            case CAbilityUnitTeamType.Enemy:
                b = m_owner.IsEnemyTeam(target);
                break;
            }

            return(b);
        }
Example #3
0
        public override void Execute(IGameplayAbilityUnit instigator, IGameplayAbilityUnit victim)
        {
            base.Execute(instigator, victim);

            var sourceCtrl = victim as ActorController;
            var targetCtrl = instigator as ActorController;
            var source     = sourceCtrl.Pawn as ActorEntity;
            var target     = targetCtrl.Pawn as ActorEntity;
            var srcAttr    = source.AttributeSet;
            var targAttr   = target.AttributeSet;

            SwordDamagePacket damagePacket = new SwordDamagePacket();

            //damagePacket.MinRawAttackPower

            damagePacket.TargetDodgeChance = targAttr.DodgeChance;


            //1. 计算无敌, 如果无敌就无伤

            //2. 计算是否miss
            //2.1 先计算是否有无视闪避--必定命中
            //2.2 产生随机数来判定是否miss
            float dodgeChance = m_rand.Next();

            if (dodgeChance < damagePacket.TargetDodgeChance)
            {
                damagePacket.OutIsDodged = true;
                SendDamageEvent();
                return;
            }

            //3. 计算攻击属性包
        }
Example #4
0
 /// <summary>
 /// 给目标添加效果
 /// </summary>
 public void ApplyGameplayEffectToTarget(CEffectMeta effectMeta, IGameplayAbilityUnit target)
 {
     if (target == null)
     {
         return;
     }
     target.AbilitySystem.ApplyGameplayEffectToSelf(effectMeta, m_owner);
 }
Example #5
0
        //普攻, 那只能对敌人使用
        public override AffectDectectResult CanAffectOnTarget(IGameplayAbilityUnit target)
        {
            AffectDectectResult result = base.CanAffectOnTarget(target);

            if (result != AffectDectectResult.Success)
            {
                return(result);
            }

            return(AffectDectectResult.Success);
        }
Example #6
0
        /// <summary>
        /// 给自己添加效果, 要指定效果来源
        /// </summary>
        private void ApplyGameplayEffectToSelf(CEffectMeta effectMeta, IGameplayAbilityUnit instigator)
        {
            var effect = GetSleepingEffectOnSelf(effectMeta);

            if (effect == null)
            {
                Debug.Log("Effect MUST NOT Null here. Check the code or config");
                return;
            }

            effect.AppliedFrom(instigator);
        }
Example #7
0
        /// <summary>
        /// 对传入的目标施法
        /// </summary>
        public AffectDectectResult TryActivateAbility(IGameplayAbilityUnit target)
        {
            AffectDectectResult result = CanAffectOnTarget(target);

            if (result != AffectDectectResult.Success)
            {
                ReportNotReady();
                return(result);
            }

            m_target = target;
            Activate();

            return(result);
        }
Example #8
0
        /// <summary>
        /// 给owner创建一个Effect组件, 并挂在Effect Child Layer身上
        /// </summary>
        public static CEffect Create(string meta, IGameplayAbilityUnit owner)
        {
            CEffect     eff   = null;
            CEffectMeta emeta = CEffectMetaManager.GetMeta(meta);

            if (owner == null)
            {
                Debug.LogError("We can not get GameObject which effect attach on " + meta);
                return(null);
            }

            GameObject go = owner.EffectLayer;

            switch (emeta.Type)
            {
            case CEffectMeta.EffectType.LaunchMissle:
                eff            = go.AddComponent <CEffectLaunchMissile>();
                eff.EffectName = meta;
                break;

            case CEffectMeta.EffectType.Damage:
                eff            = go.AddComponent <CEffectDamage>();
                eff.EffectName = meta;
                break;

            case CEffectMeta.EffectType.ApplyBehaviour:
                eff            = go.AddComponent <CEffectApplyBuff>();
                eff.EffectName = meta;
                break;

            case CEffectMeta.EffectType.IssueOrder:
                eff            = go.AddComponent <CEffectIssueOrder>();
                eff.EffectName = meta;
                break;

            case CEffectMeta.EffectType.EnumArea:
                eff            = go.AddComponent <CEffectEnumArea>();
                eff.EffectName = meta;
                break;

            case CEffectMeta.EffectType.EffectSet:
                eff            = go.AddComponent <CEffectSet>();
                eff.EffectName = meta;
                break;
            }

            return(eff);
        }
Example #9
0
        /// <summary>
        /// 技能是否能够对目标施展
        /// </summary>
        public virtual AffectDectectResult CanAffectOnTarget(IGameplayAbilityUnit target)
        {
            if (!CD_Ready)
            {
                return(AffectDectectResult.CDNotReady);
            }
            if (m_running)
            {
                return(AffectDectectResult.StillRunning);
            }

            if (target == null || target.InValid)
            {
                return(AffectDectectResult.TargetDeadOrNull);
            }

            bool b = IsTargetGroupMatch(target);

            if (!b)
            {
                return(AffectDectectResult.TargetGroupNotMatch);
            }

            b = IsActivationTagMatchForSelf();
            if (!b)
            {
                return(AffectDectectResult.OwnerTagInvalid);
            }

            b = IsActivationTagMatchForTarget(target);
            if (!b)
            {
                return(AffectDectectResult.TargetTagInvalid);
            }

            float range2 = m_owner.GetSquaredXZDistanceTo_NoRadius(target);

            b = range2 <= (MetaBase.DectectRange * MetaBase.DectectRange);
            if (!b)
            {
                return(AffectDectectResult.OutOfRange);
            }

            return(AffectDectectResult.Success);
        }
Example #10
0
        public override AffectDectectResult CanAffectOnTarget(IGameplayAbilityUnit target)
        {
            AffectDectectResult result = base.CanAffectOnTarget(target);

            if (result != AffectDectectResult.Success)
            {
                return(result);
            }

            if (m_meta.Range > 0)
            {
                float dist = m_owner.GetSquaredXZDistanceTo_NoRadius(target);
                if (dist > (m_meta.Range * m_meta.Range))
                {
                    return(AffectDectectResult.OutOfRange);
                }
            }

            return(AffectDectectResult.Success);
        }
Example #11
0
 public override void AppliedFrom(IGameplayAbilityUnit instigator)
 {
     base.AppliedFrom(instigator);
     ApplyToPosition(m_owner.LocalPosition);
 }
Example #12
0
 protected bool IsActivationTagMatchForTarget(IGameplayAbilityUnit target)
 {
     return(false);
 }
Example #13
0
 /// <summary>
 /// 效果作用于某个坐标
 /// </summary>
 public virtual void ApplyToPosition(Vector3 localPosition)
 {
     m_instigator     = m_owner;
     m_targetLocalPos = localPosition;
 }
Example #14
0
 public void InitAbilityActorInfo(IGameplayAbilityUnit actor)
 {
     m_owner = actor;
 }
Example #15
0
 public virtual void AppliedFrom(IGameplayAbilityUnit instigator)
 {
     m_instigator = instigator;
 }
Example #16
0
 /// <summary>
 /// 使用已经选中的技能
 /// </summary>
 public void Launch(IGameplayAbilityUnit target)
 {
     m_selectedAbility.TryActivateAbility(target);
 }
Example #17
0
 public void Launch(int index, IGameplayAbilityUnit target)
 {
     SelectAbility(0);
     Launch(target);
 }
Example #18
0
 /// <summary>
 /// 传入本技能的owner和avatar
 /// </summary>
 public void InitAbilityActorInfo(IGameplayAbilityUnit actor, IGameplayAbilityUnit avatar)
 {
     m_owner  = actor;
     m_avatar = avatar;
 }
Example #19
0
        /// <summary>
        /// 两者是否敌人
        /// </summary>
        public bool IsEnemyTeam(IGameplayAbilityUnit target)
        {
            ActorController ac = target as ActorController;

            return(m_pawn.IsEnemyTeam(ac.Pawn));
        }
Example #20
0
 public float GetSquaredXZDistanceTo_NoRadius(IGameplayAbilityUnit target)
 {
     return(GetSquaredXZDistanceTo_NoRadius(target.LocalPosition));
 }
 /// <summary>
 /// victim 攻击 instigator
 /// </summary>
 public virtual void Execute(IGameplayAbilityUnit instigator, IGameplayAbilityUnit victim)
 {
 }