Esempio n. 1
0
        /// <summary>
        /// 得到仇恨列表里仇恨值最大的可攻击对象
        /// </summary>
        public ulong GetFirstEnmityCanHit()
        {
            RoleActor target = GetTarget(mMaxEnmityObjID);

            if (null != target && target.CanBeAttacked())
            {
                return(mMaxEnmityObjID);
            }

            int tmp = 0;

            target = null;
            for (var i = 0; i < mEnmityList.Count(); i++)
            {
                EnmityInfo ite = mEnmityList[i];
                if (ite.mEnmityValue > tmp)
                {
                    RoleActor r = GetTarget(ite.playerID);
                    if (null != r && r.CanBeAttacked())
                    {
                        target = r;
                    }
                }
            }
            if (null == target)
            {
                return(0);
            }

            return(target.Id);
        }
Esempio n. 2
0
        /// <summary>
        /// //从仇恨列表里清除一个
        /// </summary>
        public void KickOneFromEnmityList(ulong ObjID)
        {
            if (mEnmityList.Count() == 0)
            {
                return;
            }

            for (var i = 0; i < mEnmityList.Count(); i++)
            {
                EnmityInfo ite = mEnmityList[i];
                if (ite.playerID == ObjID)
                {
                    mEnmityList.RemoveAt(i);
                    break;
                }
            }

            if (mMaxEnmityObjID == ObjID)     //如果把仇恨列表里第一的删了,通知属主换个目标
            {
                mMaxEnmityObjID = 0;
                mMaxEnmityValue = 0;
                for (var i = 0; i < mEnmityList.Count(); i++)
                {
                    EnmityInfo ite = mEnmityList[i];
                    if (ite.mEnmityValue > mMaxEnmityValue)
                    {
                        mMaxEnmityObjID = ite.playerID;
                        mMaxEnmityValue = ite.mEnmityValue;
                    }
                }
                OnMaxEnmityObjChanged(mMaxEnmityObjID);
            }
        }
Esempio n. 3
0
 /// <summary>
 /// 是否在仇恨列表中
 /// </summary>
 public bool IsInEnmityList(ulong playerId)
 {
     for (var i = 0; i < mEnmityList.Count(); i++)
     {
         EnmityInfo ite = mEnmityList[i];
         if (ite.playerID == playerId)
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 4
0
        int mMaxEnmityValue;                                     //最大仇恨值

        /// <summary>
        /// 受攻击时更新仇恨列表
        /// </summary>
        public void UpdateEnmityList(ulong ObjID, int value)
        {
            if (value < 0)
            {
                return;
            }

            if (!IsInEnmityList(ObjID))
            {
                mEnmityList.Add(new EnmityInfo(ObjID, value, IServer.timeGetTime()));
                if (value > mMaxEnmityValue)
                {
                    mMaxEnmityObjID = ObjID;
                    mMaxEnmityValue = value;
                }
            }
            else
            {
                for (var i = 0; i < mEnmityList.Count(); i++)
                {
                    EnmityInfo ite = mEnmityList[i];
                    if (ite.playerID == ObjID)
                    {
                        ite.mEnmityValue     += value;
                        ite.mUpdateEnmityTime = IServer.timeGetTime();
                        if (ite.mEnmityValue > mMaxEnmityValue)
                        {
                            mMaxEnmityObjID = ObjID;
                            mMaxEnmityValue = ite.mEnmityValue;
                        }
                        break;
                    }
                }
            }

            OnMaxEnmityObjChanged(mMaxEnmityObjID);
        }