예제 #1
0
        /// <summary>
        /// 删除NPC身上特定的触发器
        /// </summary>
        /// <returns>The trigger.</returns>
        /// <param name="TriggerId">Trigger identifier.</param>
        /// <param name="npcId">Npc identifier.</param>
        public ITriggerItem RemoveTrigger(int TriggerId, int npcId)
        {
            if (TriggerId <= 0)
            {
                return(null);
            }

            ITriggerItem one = null;

            foreach (WarMsg_Type key in OnWork.Keys)
            {
                List <ITriggerItem> list = null;
                //有队列
                if (OnWork.TryGetValue(key, out list))
                {
                    int count = list.Count;
                    if (count > 0)
                    {
                        int idx = -1;
                        for (int i = 0; i < count; ++i)
                        {
                            if (list[i].GetID() == TriggerId)
                            {
                                idx = i;
                                one = list[i];
                                break;
                            }
                        }

                        //删除管理器里面的
                        if (idx >= 0)
                        {
                            list.RemoveAt(idx);

                            //移回Idle
                            List <ITriggerItem> idleList = null;
                            if (!OnIdle.TryGetValue(key, out idleList))
                            {
                                idleList    = new List <ITriggerItem>();
                                OnIdle[key] = idleList;
                            }

                            one.OnRest();
                            OnIdle[key].Add(one);

                            break;
                        }
                    }
                }
            }

            //挂在Npc上删除
            ServerNPC npc = WarServerManager.Instance.npcMgr.GetNPCByUniqueID(npcId);

            npc.rmTrigger(TriggerId);

            return(one);
        }