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()); }
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); }
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); }
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); }
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); }
/// <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); } } }