示例#1
0
        public virtual void OnInit()
        {
            foreach (var NpcData in mMapInfo.MapDetail.NpcList)
            {
                try
                {
                    var tplNpc = CSTable.StaticDataManager.NPCTpl[NpcData.tid];
                    if (tplNpc.type == (int)CSCommon.eNpcType.FoodCar || tplNpc.type == (int)CSCommon.eNpcType.MoneyCar)
                    {
                        continue;
                    }

                    NPCInstance.CreateNPCInstance(NpcData, this);
                }
                catch (System.Exception ex)
                {
                    Log.Log.Server.Warning("CreateNPCInstance Error,id={0}", NpcData.tid);
                }
            }

            foreach (var portal in mMapInfo.MapDetail.PortalList)
            {
                try
                {
                    var p = TriggerInstance.CreateTriggerInstance(portal, this);
                    if (null == p)
                    {
                        continue;
                    }

                    AddTrigger(p);
                }
                catch (System.Exception ex)
                {
                    Log.Log.Server.Warning("CreateTriggerInstance Error,id={0}", portal.id);
                }
            }

            foreach (var path in mMapInfo.MapDetail.PathList)
            {
                foreach (var node in path.PatrolNodeList)
                {
                    try
                    {
                        var p = WayPoint.CreateWayPoint(node, this);
                        if (null == p)
                        {
                            continue;
                        }

                        AddWayPoint(path.id, p);
                    }
                    catch (System.Exception ex)
                    {
                        Log.Log.Server.Warning("CreateWayPoint Error,pathId={0},nodeId={1}", path.id, node.id);
                    }
                }
            }
        }
示例#2
0
 private NPCInstance CreateNpc(MapInfo_Npc NpcData)
 {
     NpcData.rebornTime = -1;
     NpcData.guardRange = 1000;
     if (NpcData.camp == (int)eCamp.Friend)
     {
         NpcData.camp = (int)Owner.Camp;
     }
     return(NPCInstance.CreateNPCInstance(NpcData, this));
 }
示例#3
0
        void OnTimeReborn(TimerEvent evt)
        {
            var map = evt.param as MapInstance;

            if (map == null || map.Planes == null)
            {
                return;
            }

            NPCInstance.CreateNPCInstance(InMapData, map);
        }
示例#4
0
        public void Tick(Int64 elapsedMiliSeccond)
        {
            try
            {
                mRpcProcessor.Tick();
                foreach (PlayerInstance i in mPlayerPool)
                {//这个不怕迭代中删除
                    if (i != null)
                    {
                        i.Tick(elapsedMiliSeccond);
                    }
                }

                lock (mAddedNPCList)
                {
                    foreach (var i in mAddedNPCList)
                    {
                        mNpcDictionary[i.Id] = i;
                    }
                    mAddedNPCList.Clear();
                }
                lock (mRemovedNPCList)
                {
                    foreach (var npc in mRemovedNPCList)
                    {
                        mNpcDictionary.Remove(npc.Id);
                    }
                    mRemovedNPCList.Clear();
                }

                foreach (var npc in mNpcDictionary)
                {
                    npc.Value.Tick(elapsedMiliSeccond);
                }


                foreach (var npc in mGatherDictionary)
                {
                    npc.Value.Tick(elapsedMiliSeccond);
                }

                // tick trigger
                foreach (var trigger in mTriggerDictionary.Values)
                {
                    trigger.Tick(elapsedMiliSeccond);
                }

                if (null == mTransmitingNpc && mNpcCreatingQueue.Count == 0)
                {
                    for (var i = 0; i < mNpcCreatingPool.Count; i++)
                    {
                        if (mNpcCreatingQueue.Count < mLimitCount)
                        {
                            mNpcCreatingQueue.Add(mNpcCreatingPool[i]);
                            mNpcCreatingPool.RemoveAt(i);
                            i--;
                        }
                    }
                }

                for (var i = 0; i < mNpcCreatingQueue.Count; i++)
                {
                    if (null == mNpcCreatingQueue[i])
                    {
                        continue;
                    }
                    if (IServer.timeGetTime() - mLastCreateTime >= mIntervalTime)
                    {
                        NPCInstance npc = NPCInstance.CreateNPCInstance(mNpcCreatingQueue[i], this);
                        mLastCreateTime      = IServer.timeGetTime();
                        mNpcCreatingQueue[i] = null;
                        if (i == (int)mLimitCount - 1)
                        {
                            mTransmitingNpc = npc;
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                Log.Log.Common.Print(ex.ToString() + "==>");
                Log.Log.Common.Print(ex.StackTrace.ToString());
            }
        }