示例#1
0
 protected override void OnDead(Avatar attacker)
 {
     base.OnDead(attacker);
     GameEntry.Entity.HideEntity(this, 3f);
     AICom.OnDead();
 }
示例#2
0
        //public GBuff buff;		//通过buff挂载的技能
        //public int nSlots;		//技能修正槽位

        public GSkillInitParam(Avatar pOwner, GTargetInfo targetInfo, DRSkillData pSkillData)
        {
            m_pOwner     = pOwner;
            m_TargetInfo = targetInfo;
            m_pSkillData = pSkillData;
        }
示例#3
0
 public virtual void SetOwner(Avatar logicObject)
 {
     this.Owner = logicObject;
 }
        public bool CheckNotify(GTriggerNotify pNotify)
        {
            if (!m_pOwner || m_pSkillData == null || pNotify == null)
            {
                return(false);
            }

            Avatar pCaster = GetCaster();

            if (!pCaster || !pCaster.SkillCom)
            {
                return(false);
            }

            if (m_pSkillData.IsTargetSelfOnly())
            {
                m_TargetInfo.m_nTargetID = pCaster.Id;
                m_TargetInfo.m_vSrcPos   = pCaster.GetPos();
                m_TargetInfo.m_vTarPos   = pCaster.GetPos();
                m_TargetInfo.m_vAimDir   = pCaster.GetDir();
            }
            else
            {
                m_TargetInfo.m_nTargetID = pNotify.m_nTargetID;
                m_TargetInfo.m_vTarPos   = pNotify.m_vTarPos;
                m_TargetInfo.m_vSrcPos   = pNotify.m_vSrcPos;
                if (pNotify.m_vDir == default(Vector3))
                {
                    m_TargetInfo.m_vAimDir = m_TargetInfo.m_vTarPos - m_TargetInfo.m_vSrcPos;
                }
                else
                {
                    m_TargetInfo.m_vAimDir = pNotify.m_vDir;
                }
                m_TargetInfo.m_vAimDir.Normalize2D();
            }

            //检查cd与消耗
            if (!m_pOwner.CDCom || m_pOwner.CDCom.CheckCD(m_pSkillData.MSV_CDGroup))
            {
                return(false);
            }
            if (!pCaster.SkillCom.CheckCost(m_pSkillData))
            {
                return(false);
            }

            if (!pNotify.CheckTrigger(pCaster, m_pSkillData))
            {
                return(false);
            }

            //if(m_pBuff && m_pBuff->IsInvalid())
            //	return false;

            if (!PassiveProcessCheck())
            {
                return(false);
            }

            return(true);
        }
示例#5
0
        public override List <Avatar> GetTargetList(DRSkillData pSkillData,
                                                    Avatar pCaster, GTargetInfo sTarInfo, HashSet <int> vExcludeList)
        {
            List <Avatar> vTargetList = new List <Avatar>();

            if (pSkillData == null || !pCaster)
            {
                return(vTargetList);
            }
            Avatar pTarget = GameEntry.Entity.GetGameEntity(sTarInfo.m_nTargetID) as Avatar;

            if (!pTarget)
            {
                pTarget = pCaster;
            }

            int   cnt    = GetTargetCount(pSkillData /*, vExcludeList*/);
            int   filter = pSkillData.MSV_AreaFilter;
            float minDis = pSkillData.MSV_AreaParam1;
            float maxDis = pSkillData.MSV_AreaParam2;
            float w      = pSkillData.MSV_AreaParam3;

            List <UnityGameFramework.Runtime.Entity> pList = new List <UnityGameFramework.Runtime.Entity>();

            GameEntry.Entity.GetAllLoadedEntities(pList);
            if (pList == null || pList.Count == 0)
            {
                return(vTargetList);
            }
            Vector3 pos    = /*pSkillData.IsAreaUseTarPos() ? sTarInfo.m_vTarPos :*/ sTarInfo.m_vSrcPos;
            Vector3 dir    = sTarInfo.m_vAimDir;
            Vector3 center = pos + dir * ((minDis + maxDis) / 2);

            SRect sRect = new SRect(center, maxDis - minDis, w);

            foreach (var item in pList)
            {
                Avatar actor = item.Logic as Avatar;
                if (actor == null || actor == pCaster)
                {
                    continue;
                }
                SSphere sTarSphere = new SSphere(actor.GetPos(), actor.ModelRadius);
                if (GCollider.RectCollideCheck(sRect, sTarSphere, dir))
                {
                    TryAddTarget(pSkillData, pCaster, actor, vExcludeList);
                    if (vTargetList.Count >= cnt)
                    {
                        if (filter > 0)
                        {
                            UpdateAreaFilter(filter, cnt, vTargetList);
                        }
                        else
                        {
                            return(vTargetList);
                        }
                    }
                    break;
                }
            }
            return(vTargetList);
        }
示例#6
0
 protected override void OnDead(Avatar attacker)
 {
     GameEntry.Fsm.DestroyFsm(m_fsm);
 }
示例#7
0
 public abstract void TickMove(float fFrameTime, Avatar pCaster);
示例#8
0
 public abstract List <Avatar> GetTargetList(DRSkillData pSkillData,
                                             Avatar pCaster, GTargetInfo sTarInfo, HashSet <int> vExcludeList);
示例#9
0
 public override void TickMove(float fFrameTime, Avatar pCaster)
 {
 }
示例#10
0
        public virtual bool Init(DRSkillData pSkillData, GTargetInfo sTarInfo, SkillAValueData sSkillAValue, Avatar pCaster)
        {
            if (pSkillData == null)
            {
                return(false);
            }

            m_fCurTime              = 0;
            m_pSkillData            = pSkillData;
            m_TargetInfo            = sTarInfo;
            m_fSpeed                = m_pSkillData.MSV_ProjectileSpeed;
            m_fLifeTime             = m_pSkillData.MSV_ProjectileTime;
            m_fFirstEffectTime      = m_pSkillData.MSV_ProjectileFirstEffectTime;
            m_fEffectTime           = m_pSkillData.MSV_EffectTime;
            m_fCurEffectTime        = m_fFirstEffectTime;
            m_vExcludeList          = new GSkillExcludeList();
            m_vExcludeList.m_nCount = m_pSkillData.MSV_ProjectileEffectCount;
            m_vExcludeList.m_bCount = (m_vExcludeList.m_nCount > 0);

            //int nProjectileOffset = m_pSkillData.MSV_ProjectileOffset;
            //Vector3 vOffset = GSkillProjectileOffsetManager.Instance.GetProjectileOffset(nProjectileOffset);
            //m_TargetInfo.m_vSrcPos += vOffset;
            m_TargetInfo.m_vSrcPos += new Vector3(0, 1, 0);

            m_SkillAValue = sSkillAValue.CloneData();

            m_vPreCheckPos = m_TargetInfo.m_vSrcPos;
            return(true);
        }
示例#11
0
        public void ProcessSkillEffect(DRSkillData pSkillData, GTargetInfo sTarInfo, SkillAValueData AValue, GSkillExcludeList vExcludeList)
        {
            if (pSkillData == null)
            {
                return;
            }

            Avatar pCaster = Owner;

            if (!pCaster)
            {
                return;
            }

            int             nAreaLogic = pSkillData.MSV_AreaLogic;
            GSkillAreaLogic pAreaLogic = GSkillLogicManager.Instance.GetAreaLogic(nAreaLogic);

            if (pAreaLogic == null)
            {
                return;
            }

            if (nAreaLogic != (int)eSkillAreaLogic.SkillArea_Singleton && !pSkillData.IsAreaIncludeSelf())
            {
                vExcludeList.Add(pCaster.Id);
            }

            List <Avatar> vTargetList = pAreaLogic.GetTargetList(pSkillData, pCaster, sTarInfo, vExcludeList);

            if (vTargetList == null || vTargetList.Count == 0)
            {
                return;
            }

            ////合并攻击方属性 todo合并技能属性集和模板属性集
            //RoleAValue sSkillAValue;
            //sSkillAValue.Copy(sRoleValue);
            //sSkillAValue.Combine(pSkillData->m_RoleValue);

            //RoleAValue sCasterRoleValue;
            //sCasterRoleValue.Copy(sSkillAValue);
            //sCasterRoleValue.Combine(pCaster->GetRoleAValue());

            //属性合并节点 todo 等技能数据包裹修复后
            //if(pSkillData->IsCombineEffectNotify())
            //{
            //	PushTriggerNotifyAValue(pSkillData->m_nDataID, 0, NotifyType_CombineEffect, pSkillData->GetIntValue(MSV_EffectType), &sCasterRoleValue);
            //}

            int          nEffectLogic = pSkillData.MSV_EffectLogic;
            GSkillEffect pEffectLogic = GSkillLogicManager.Instance.GetEffectLogic(nEffectLogic);

            if (pEffectLogic == null)
            {
                return;
            }

            GTargetInfo tempTarInfo;

            foreach (var pTarget in vTargetList)
            {
                if (pTarget == null)
                {
                    continue;
                }

                if (vExcludeList.Contains(pTarget.Id))
                {
                    continue;
                }

                PlayerAValueData sCasterRoleValue = pCaster.GetRoleAValue();
                PlayerAValueData sTargetRoleValue = pTarget.GetRoleAValue();
                if (sCasterRoleValue == null || sCasterRoleValue == null)
                {
                    continue;
                }

                GSkillCalculation sCaluation = new GSkillCalculation();

                sCaluation.m_pSkillData   = pSkillData;
                sCaluation.m_pCaster      = pCaster;
                sCaluation.m_pTarget      = pTarget;
                sCaluation.m_CasterAValue = sCasterRoleValue.CloneData();
                sCaluation.m_TargetAValue = sTargetRoleValue.CloneData();
                sCaluation.m_SkillAValue  = AValue;
                sCaluation.TransfromEffectTarget();

                tempTarInfo             = sTarInfo;
                tempTarInfo.m_nTargetID = pTarget.Id;
                tempTarInfo.m_vTarPos   = pTarget.GetPos();

                if (pEffectLogic.Process(sCaluation, tempTarInfo, AValue))
                {
                    //todo 添加log范围
                    //pAreaLogic.Draw(pSkillData, pCaster, pTarget, sTarInfo);
                }
                //填充重复列表
                if (pSkillData.IsAreaAddExclude())
                {
                    vExcludeList.Add(pTarget.Id);
                }
                //减少效果次数
                if (vExcludeList.m_nCount > 0)
                {
                    --vExcludeList.m_nCount;
                }
            }
        }
示例#12
0
        public override int AimAssist(DRSkillData pSkillData, Avatar pOwner)
        {
            if (pOwner == null)
            {
                return(0);
            }
            Vector3 vPos = pOwner.GetPos();
            Vector3 vDir = GameEntry.CameraMgr.GetCamDir().normalized2d();

            float fMinActorWeight = 3600000;
            int   nAvatarID       = 0;

            IEntity[] list = GetEnemyGroup(pOwner.Camp);
            if (list == null || list.Length == 0)
            {
                return(0);
            }

            foreach (IEntity item in list)
            {
                Avatar actor = GameEntry.Entity.GetGameEntity(item.Id) as Avatar;
                if (actor == null || actor.IsDead)
                {
                    continue;
                }

                if (AIUtility.GetRelation(pOwner.Camp, actor.Camp) != RelationType.Hostile)
                {
                    continue;
                }

                Vector3 vOffestPos = actor.GetPos() - vPos;
                vOffestPos.y = 0;
                float fMagnitude = vOffestPos.magnitude + 0.5f;

                // 排除最远距离外的目标
                if (fMagnitude > GetMaxRange(pSkillData))
                {
                    continue;
                }

                //计算各个角度的权重  以距离为权重
                float fCurActorWeight;
                float angle = Vector3.Angle(vDir, vOffestPos);
                if (angle <= 45f)
                {
                    fCurActorWeight = 9000 + fMagnitude;
                }
                else if (angle > 45f && angle < 90f)
                {
                    fCurActorWeight = 18000 + fMagnitude;
                }
                else
                {
                    fCurActorWeight = 36000 + fMagnitude;
                }

                if (fCurActorWeight < fMinActorWeight)
                {
                    fMinActorWeight = fCurActorWeight;
                    nAvatarID       = actor.Id;
                }
            }
            return(nAvatarID != 0 ? nAvatarID : 0);
        }
示例#13
0
 public abstract int AimAssist(DRSkillData pSkillData, Avatar pOwner);
示例#14
0
 public override void OnComponentStart()
 {
     m_CurTarget  = null;
     m_TargetList = new List <Avatar>();
     m_fTimer     = fTickTime;
 }
示例#15
0
 public void ResetTarget()
 {
     m_CurTarget = null;
 }