/// <summary> /// 删除NPC身上所有的触发器 /// </summary> /// <param name="NpcId">Npc identifier.</param> public void RemoveAllTrigger(int NpcId) { //挂在Npc上删除 ServerNPC npc = WarServerManager.Instance.npcMgr.GetNPCByUniqueID(NpcId); int[] toBeRm = npc.getTriggerList.ToArray(); int rmCnt = toBeRm.Length; if (rmCnt > 0) { foreach (WarMsg_Type key in OnWork.Keys) { List <ITriggerItem> list = OnWork[key]; int cnt = list.Count; if (cnt > 0) { List <int> rmed = new List <int>(); /// /// ------------ 找到待删除的Trigger ------ /// for (int i = 0; i < cnt; ++i) { ITriggerItem one = list[i]; bool found = Utils.inArray <int>(one.GetID(), toBeRm); //清理脏数据 if (found) { rmed.Add(i); one.OnRest(); //移动到Idle //移回Idle List <ITriggerItem> idleList = null; if (!OnIdle.TryGetValue(key, out idleList)) { idleList = new List <ITriggerItem>(); OnIdle[key] = idleList; } OnIdle[key].Add(one); } } rmed.Sort(); int rmCount = rmed.Count; for (int i = rmCount - 1; i >= 0; i--) { list.RemoveAt(rmed[i]); } } } } npc.rmAllTrigger(); }