Esempio n. 1
0
        public bool Conform(ICreature en)
        {
            if (en == null)
            {
                return(false);
            }
            if (en.IsDead())
            {
                return(false);
            }
            int error = 0;

            if (m_skillPart != null && m_skillPart.CheckCanAttackTarget(en, out error) == false)
            {
                return(false);
            }

            float fDis = Vector3.Distance(m_centerpos, en.GetPos());

            if (fDis > m_rang)
            {
                return(false);
            }
            return(!en.IsDead());
        }
Esempio n. 2
0
        public bool Conform(IPlayer en)
        {
            if (en.IsDead())
            {
                return(false);
            }
            if (en.IsHide())
            {
                return(false);
            }
            IPlayer    player      = EntitySystem.m_ClientGlobal.MainPlayer;
            ISkillPart m_skillPart = player.GetPart(Client.EntityPart.Skill) as ISkillPart;

            if (m_skillPart != null)
            {
                int error = 0;
                if (!m_skillPart.CheckCanAttackTarget(en, out error))
                {
                    return(false);
                }
                else
                {
                    float dis = EntityHelper.GetEntityDistance(player, en);
                    if (dis <= m_nRange && !en.IsDead())
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Esempio n. 3
0
        public bool Conform(INPC en)
        {
            if (en.IsCanAttackNPC())
            {
                return(false);
            }
            if (CommonCondition.IsPetAndSummon(en))
            {
                return(false);
            }
            if (!CommonCondition.IsNpcCanAttackByTable(en))
            {
                return(false);
            }
            IPlayer    player      = EntitySystem.m_ClientGlobal.MainPlayer;
            ISkillPart m_skillPart = player.GetPart(Client.EntityPart.Skill) as ISkillPart;

            if (m_skillPart != null)
            {
                int error = 0;
                if (m_skillPart.CheckCanAttackTarget(en, out error))
                {
                    return(false);
                }
                else
                {
                    float dis = EntityHelper.GetEntityDistance(player, en);
                    if (dis <= m_nRange && en.IsDead())
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Esempio n. 4
0
        public bool Conform(INPC en)
        {
            int error = 0;

            if (!CommonCondition.IsNpcCanAttackByTable(en))
            {
                return(false);
            }
            if (en.IsPet() || en.IsSummon())
            {
                int           masterID = en.GetProp((int)NPCProp.Masterid);
                IEntitySystem es       = EntitySystem.m_ClientGlobal.GetEntitySystem();
                if (es != null)
                {
                    IPlayer p = es.FindEntity <IPlayer>((uint)masterID);
                    if (p != null)
                    {
                        if (EntitySystem.m_ClientGlobal.MainPlayer.GetUID() == p.GetUID())
                        {
                            return(false);
                        }
                    }
                }
            }
            if (m_skillPart != null && m_skillPart.CheckCanAttackTarget(en, out error) == false)
            {
                return(false);
            }

            float fDis = Vector3.Distance(m_centerpos, en.GetPos());

            if (fDis > m_rang)
            {
                return(false);
            }
            return(true);
        }
Esempio n. 5
0
        public IEntity FindMinHpTeamer(uint range)
        {
            IControllerSystem cs = EntitySystem.m_ClientGlobal.GetControllerSystem();

            if (cs == null)
            {
                return(null);
            }
            IControllerHelper ch = cs.GetControllerHelper();

            if (ch == null)
            {
                return(null);
            }
            m_minHpPlayerList.Clear();
            FindAllEntity <IPlayer>(ref m_minHpPlayerList);
            List <IPlayer> myTeamList = new List <IPlayer>();

            for (int i = 0; i < m_minHpPlayerList.Count; i++)
            {
                IPlayer player = m_minHpPlayerList[i];

                if (ch.IsSameTeam(player))
                {
                    IPlayer mainPlayer = m_ClientGlobal.MainPlayer;
                    if (mainPlayer != null)
                    {
                        ISkillPart sp = mainPlayer.GetPart(EntityPart.Skill) as ISkillPart;
                        if (sp != null)
                        {
                            int error = 0;
                            if (!sp.CheckCanAttackTarget(player, out error))
                            {
                                myTeamList.Add(player);
                            }
                        }
                    }
                }
            }
            IEntity en = null;

            for (int i = 0; i < myTeamList.Count; i++)
            {
                IPlayer player = myTeamList[i];
                if (en == null)
                {
                    en = player;
                }
                int   maxHp       = en.GetProp((int)CreatureProp.MaxHp);
                int   curHP       = en.GetProp((int)CreatureProp.Hp);
                float oldScale    = (maxHp - curHP) * 1.0f / maxHp;
                int   playermaxHp = player.GetProp((int)CreatureProp.MaxHp);
                int   playercurHP = player.GetProp((int)CreatureProp.Hp);
                float newScale    = (playermaxHp - playercurHP) * 1.0f / playermaxHp;
                if (newScale > oldScale)
                {
                    en = player;
                }
            }
            return(en);
        }
Esempio n. 6
0
    /// <summary>
    /// 刷数据
    /// </summary>
    void RefreshTargetGridData()
    {
        IEntitySystem entitySystem = ClientGlobal.Instance().GetEntitySystem();
        IPlayer       mainPlayer   = ClientGlobal.Instance().MainPlayer;

        if (entitySystem == null)
        {
            return;
        }

        if (mainPlayer == null)
        {
            return;
        }

        ISkillPart sp = mainPlayer.GetPart(EntityPart.Skill) as ISkillPart;

        if (sp == null)
        {
            return;
        }

        m_lstAllEnemy.Clear();
        m_lstTargetEnemyId.Clear();

        //加入已经锁的敌人
        for (int i = 0; i < m_lstLockEnemyId.Count; i++)
        {
            if (m_lstTargetEnemyId.Count < 5)
            {
                m_lstTargetEnemyId.Add(m_lstLockEnemyId[i]);
            }
        }

        //所有人
        entitySystem.FindNearstPlayer(ref m_lstAllPlayer);

        //所有敌人
        for (int i = 0; i < m_lstAllPlayer.Count; i++)
        {
            int nSkillError;

            //最多选取5个可攻击敌人(减少计算量)
            if (m_lstAllEnemy.Count >= 5)
            {
                break;
            }

            bool b = sp.CheckCanAttackTarget(m_lstAllPlayer[i], out nSkillError);
            if (b)
            {
                m_lstAllEnemy.Add(m_lstAllPlayer[i]);
            }
        }

        //加入选中的敌人
        if (m_lstTargetEnemyId.Count < 5 && false == m_lstTargetEnemyId.Contains(m_selectEnemyId))
        {
            bool b = false;
            for (int i = 0; i < m_lstAllEnemy.Count; i++)
            {
                if (m_lstAllEnemy[i].GetID() == m_selectEnemyId)
                {
                    b = true;
                    m_lstTargetEnemyId.Add(m_selectEnemyId);
                }
            }

            //无选中的
            if (false == b)
            {
                this.m_selectEnemyId = 0;
            }
        }

        //清除不在九宫格的
        //for (int i = m_lstTargetEnemyId.Count - 1; i >= 0; i--)
        //{
        //    if (m_lstLockEnemyId.Contains(m_lstTargetEnemyId[i]))
        //    {
        //        continue;
        //    }

        //    bool exist = false;
        //    for (int j = 0; j < m_lstAllEnemy.Count; j++)
        //    {
        //        if (m_lstAllEnemy[j].GetID() == m_lstTargetEnemyId[i])
        //        {
        //            exist = true;
        //        }
        //    }

        //    if (false == exist)
        //    {
        //        m_lstTargetEnemyId.Remove(m_lstTargetEnemyId[i]);
        //    }
        //}


        for (int i = 0; i < m_lstAllEnemy.Count; i++)
        {
            //排除玩家自己
            uint enemyId      = m_lstAllEnemy[i].GetID();
            uint mainPlayerId = mainPlayer.GetID();

            //玩家自己,排除
            if (enemyId == mainPlayerId)
            {
                continue;
            }

            //string name = string.Format("--->>> enemyName = {0}", m_lstAllEnemy[i].GetName());
            //Debug.LogError(name);

            //已经在列表中
            if (m_lstTargetEnemyId.Contains(enemyId))
            {
                continue;
            }

            //新加入进来的(最多5个)
            if (m_lstTargetEnemyId.Count < 5)
            {
                m_lstTargetEnemyId.Add(enemyId);
            }
        }
    }