예제 #1
0
        /// <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();
        }