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