예제 #1
0
        /// <summary>
        /// 创建触发器,
        /// </summary>
        private ITriggerItem CreateTrigger(WarMsg_Type care, int npcId, int trCfgNum, RtBufData buff)
        {
            int          id  = 0;
            ITriggerItem one = null;

            List <ITriggerItem> idleList = null;

            if (OnIdle.TryGetValue(care, out idleList))
            {
                one = idleList.Count > 0 ? idleList[0] : null;
                if (one == null)
                {
                    //Create the new one
                    one = CreateNewTrigger(care, trCfgNum);
                }
                else
                {
                    idleList.RemoveAt(0);
                    TriggerConfigData cfg = null;
                    if (trCfgNum > 0)
                    {
                        cfg = triggerLoader.get(trCfgNum);
                    }
                    ((Trigger)one).Init(cfg, -1);
                }
            }
            else
            {
                //Create the new one
                one = CreateNewTrigger(care, trCfgNum);
            }

            id = one.GetID();

            List <ITriggerItem> workList = null;

            if (OnWork.TryGetValue(care, out workList))
            {
                workList.Add(one);
            }
            else
            {
                workList = new List <ITriggerItem>();
                workList.Add(one);
                OnWork[care] = workList;
            }

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

            npc.addTrigger(id);

            ((Trigger)one).HangUpNpcId = npcId;

            //关联的Buff是否存在
            if (buff != null)
            {
                ((Trigger)one).HangUpBuffId = buff.ID;
                buff.TriggerID = id;
            }


            return(one);
        }