Exemplo n.º 1
0
        public override bool OnTransport(NPCInstance npc)
        {
            if (null == npc)
            {
                return(false);
            }

            if (npc.IsMoving)
            {
                return(false);
            }

            TriggerInstance trigger = npc.HostMap.InTriggerRange(npc);

            if (null == trigger)
            {
                npc.ChangeState(eNPCState.Pause);
                mPathNodes.CleanUp();
                npc.OnLeaveMap();
            }
            else
            {
                if (!mPathNodes.NextTargetPos())
                {
                    npc.ChangeState(eNPCState.Pause);
                    return(false);
                }

                npc.Trigger = trigger;
                npc.OnJumpToMap();
                npc.ChangeState(eNPCState.WaitJumpMap);
            }

            return(true);
        }
Exemplo n.º 2
0
        private static void __InstanceKillMonster_Listener(EventDispatcher listener, object data)
        {
            //获取副本数据
            ChallengeInstance instance = listener as ChallengeInstance;

            if (null == instance || null == instance.mCopyTplData)
            {
                return;
            }

            NPCInstance target = data as NPCInstance;

            if (null == target)
            {
                return;
            }

            instance.mKilledMobNum++;
            if (instance.mCopyTplData.targetId == 0) //杀光所有怪物
            {
                if (instance.mKilledMobNum == instance.mTotalMobNum)
                {
                    instance.OnFinish(true);
                }
            }
            else
            {
                if (instance.mCopyTplData.targetId == target.NPCData.TemplateId)
                {
                    instance.OnFinish(true);
                }
            }
        }
Exemplo n.º 3
0
        private static void __InstanceProtectTarget_Listener(EventDispatcher listener, object data)
        {
            //获取副本数据
            ChallengeInstance instance = listener as ChallengeInstance;

            if (null == instance || null == instance.mCopyTplData)
            {
                return;
            }

            NPCInstance target = data as NPCInstance;

            if (null == target)
            {
                return;
            }

            instance.mKilledMobNum++;
            if (instance.mCopyTplData.targetId == target.NPCData.TemplateId) //保护目标已死,任务失败
            {
                instance.OnFinish(false);
            }
            else
            {
                if (instance.mKilledMobNum == instance.mTotalMobNum)
                {
                    NPCInstance protectTarget = instance.GetNPC(instance.mCopyTplData.targetId);
                    if (null != protectTarget && !protectTarget.IsDie)
                    {
                        instance.OnFinish(true);
                    }
                }
            }
        }
Exemplo n.º 4
0
        public virtual bool OnKilled(NPCInstance npc)
        {
            npc.ChangeState(eNPCState.Dead);
            npc.mAttackTarget = 0;

            return(true);
        }
Exemplo n.º 5
0
 public void AddNPC(NPCInstance npc)
 {
     lock (mAddedNPCList)
     {
         mAddedNPCList.Add(npc);
     }
 }
Exemplo n.º 6
0
        public override bool FollowTarget(NPCInstance npc, RoleActor target)
        {
            if (!base.FollowTarget(npc, target))
            {
                return(false);
            }

            Vector3 standPos = target.GetSurroundPosition(npc.GetPosition(), (int)npc.mCastSpellDistance, npc.Id);

            if (!Util.PassableForMod(npc.HostMap.Navigator, standPos))
            {
                if (!Util.PassableForMod(npc.HostMap.Navigator, target.GetPosition()))
                {
                    return(false);
                }
                standPos = target.GetPosition();
            }

            if (!npc.MoveTo(standPos))
            {
                return(false);
            }

            npc.ChangeState(eNPCState.FollowTarget);

            return(true);
        }
Exemplo n.º 7
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);
                    }
                }
            }
        }
Exemplo n.º 8
0
 public void RemoveNPC(NPCInstance npc)
 {
     lock (mRemovedNPCList)
     {
         mRemovedNPCList.Add(npc);
     }
     //mNpcDictionary.Remove(npc.Id);
 }
Exemplo n.º 9
0
 public override bool OnWaitJumpMap(NPCInstance npc)
 {
     if (npc.mStateLastTime > 1000)
     {
         npc.ChangeState(eNPCState.Idle);
     }
     return(true);
 }
Exemplo n.º 10
0
 public override bool OnPatrol(NPCInstance npc)
 {
     if (!npc.IsMoving)
     {
         npc.ChangeState(eNPCState.Idle);
     }
     return(true);
 }
Exemplo n.º 11
0
        public override bool OnKilled(NPCInstance npc)
        {
            if (!base.OnKilled(npc))
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 12
0
        public override bool OnIdle(NPCInstance npc)
        {
            if (npc.mStateLastTime > 1000)
            {
                StartTransport(npc);
            }

            return(true);
        }
Exemplo n.º 13
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));
 }
Exemplo n.º 14
0
        void OnTimeReborn(TimerEvent evt)
        {
            var map = evt.param as MapInstance;

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

            NPCInstance.CreateNPCInstance(InMapData, map);
        }
Exemplo n.º 15
0
 public override bool OnIdle(NPCInstance npc)
 {
     if (npc.mStateLastTime > GameSet.Instance.ChallengeWaitTime)
     {
         if (npc.SelectSpell())
         {
             npc.ChangeState(eNPCState.FollowTarget);
         }
     }
     return(true);
 }
Exemplo n.º 16
0
        public override bool SelectTarget(NPCInstance npc)
        {
            if (!base.SelectTarget(npc))
            {
                return(false);
            }

            RoleActor target = npc.GetTarget(npc.mAttackTarget);

            return(npc.FollowTarget(target));
        }
Exemplo n.º 17
0
        public virtual bool FollowTarget(NPCInstance npc, RoleActor target)
        {
            if (null == npc)
            {
                return(false);
            }

            if (null == target || target.IsDie)
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 18
0
        public override bool StartTransport(NPCInstance npc)
        {
            if (null == npc.HostMap)
            {
                return(false);
            }

            if (mPathNodes.targetPosNode.Count == 0)
            {
                var tplMapWay = CommonUtil.GetMapWayDataByType(npc.Camp, eCarType.FoodCar);
                if (null == tplMapWay)
                {
                    return(false);
                }

                mPathNodes.CleanUp();
                mPathNodes.targetPosNode.AddLast(tplMapWay.path1);
                mPathNodes.targetPosNode.AddLast(tplMapWay.path2);
                mPathNodes.targetPosNode.AddLast(tplMapWay.path3);
                mPathNodes.targetPosNode.AddLast(tplMapWay.path4);
                mPathNodes.targetPosNode.AddLast(tplMapWay.path5);
                mPathNodes.currNode = mPathNodes.targetPosNode.First;
            }

            int targetPath = 0;

            if (!mPathNodes.GetCurTargetPos(ref targetPath))
            {
                return(false);
            }

            List <UInt64>        wayPoints = npc.HostMap.GetWayPointList(targetPath);
            LinkedList <Vector3> nodes     = new LinkedList <Vector3>();

            foreach (var id in wayPoints)
            {
                WayPoint wp = npc.HostMap.GetWayPoint(id);
                if (null == wp)
                {
                    continue;
                }
                nodes.AddLast(wp.GetPosition());
            }
            npc.SetMoveNodes(nodes);

            npc.ChangeState(eNPCState.Transport);

            return(true);
        }
Exemplo n.º 19
0
        public virtual void OnRoleLeaveMap(RoleActor role)
        {
            // 广播给客户端
            BroadcastRoleLeave(role);

            var loc     = role.GetPosition();
            var mapCell = GetMapCell(loc.X, loc.Z);

            mapCell.RemoveRole(role);
            if (mTransmitingNpc == role)
            {
                mTransmitingNpc = null;
                mNpcCreatingQueue.Clear();
            }
        }
Exemplo n.º 20
0
        public override bool FollowTarget(NPCInstance npc, RoleActor target)
        {
            if (!base.FollowTarget(npc, target))
            {
                return(false);
            }

            //超出追击范围
            if (Util.DistanceH(npc.GetPosition(), npc.mSpawnPoint) > npc.InMapData.followRange)
            {
                return(false);
            }

            npc.SelectSpell();

            if (npc.CanCastSpell())
            {
                //到释放技能距离
                npc.ChangeState(eNPCState.WaitCoolDown);
            }
            else
            {
                if (npc.InMapData.followRange > 0)
                {
                    Vector3 standPos = target.GetSurroundPosition(npc.GetPosition(), (int)npc.mCastSpellDistance, npc.Id);
                    if (!Util.PassableForMod(npc.HostMap.Navigator, standPos))
                    {
                        if (!Util.PassableForMod(npc.HostMap.Navigator, target.GetPosition()))
                        {
                            return(false);
                        }

                        standPos = target.GetPosition();
                    }

                    if (!npc.MoveTo(standPos))
                    {
                        return(false);
                    }
                }

                npc.ChangeState(eNPCState.FollowTarget);
            }

            return(true);
        }
Exemplo n.º 21
0
 public override bool OnIdle(NPCInstance npc)
 {
     if (npc.mNextPatrolTime == 0)
     {
         int minMillisecond = (int)npc.InMapData.patrolInternalMin * 1000;
         int maxMillisecond = (int)npc.InMapData.patrolInternalMax * 1000;
         npc.mNextPatrolTime = (uint)Util.Rand.Next(minMillisecond, maxMillisecond);
     }
     if (npc.mStateLastTime > npc.mNextPatrolTime)
     {
         if (!StartPatrol(npc))
         {
             npc.ChangeState(eNPCState.Idle);
         }
         npc.mNextPatrolTime = 0;
     }
     return(true);
 }
Exemplo n.º 22
0
 public void RolePositionChanged(RoleActor role, ref SlimDX.Vector3 loc)
 {
     if (this.IsNullMap)
     {
         Log.Log.Common.Print(string.Format("Role {0} call RoleDirectionChanged in nullmap", role.RoleName));
         return;
     }
     if (role is NPCInstance)
     {
         NPCInstance npc = role as NPCInstance;
         if (npc.Type == eNpcType.FoodCar)
         {
             var a = 0;
             a++;
         }
     }
     RPC.PackageWriter pkg = new RPC.PackageWriter();
     Wuxia.H_RpcRoot.smInstance.HIndex(pkg, role.Id).RPC_SyncPostion(pkg, loc.X, loc.Z);
     this.SendPkg2Clients(role, loc, pkg);
 }
Exemplo n.º 23
0
        private static void __TaskKillMonster_Listener(EventDispatcher listener, object data)
        {
            Task task = listener as Task;

            if (null == task)
            {
                return;
            }

            if (task.TaskData.Template == null)
            {
                Log.Log.Common.Info("mTaskData Template is null");
                return;
            }
            if (string.IsNullOrEmpty(task.TaskData.Template.arg1) || string.IsNullOrEmpty(task.TaskData.Template.arg2))
            {
                Log.Log.Common.Info("mTaskData Template arg1 is null{0}", task.TaskData.TemplateId);
                return;
            }

            NPCInstance target = data as NPCInstance;

            if (null == target)
            {
                return;
            }


            if (target.NPCData.TemplateId == Convert.ToInt32(task.TaskData.Template.arg1))
            {
                var pro = task.TaskData.Process + 1;
                task.SetTaskProcess(pro);

                var needcount = Convert.ToInt32(task.TaskData.Template.arg2);
                if (task.TaskData.Process >= needcount)
                {
                    task.SetTaskProcess(needcount);
                    task.OnFinish();
                }
            }
        }
Exemplo n.º 24
0
        public bool MapNpcGuid2UInt32(NPCInstance role)
        {
            if (role.SingleId != 0)
            {
                return(false);
            }
            NPCInstance temp;

            if (mTableNpcs.TryGetValue(role.Id, out temp))
            {
                return(false);
            }
            UInt32 singleId = 0;

            for (int count = 0; count < (UInt32)EIdIndexInfo.MaxNpcInPlanes; count++)
            {
                if (mSingeIdNPCs.TryGetValue(mNextNpcId, out temp) == false)
                {
                    singleId = mNextNpcId;
                    mNextNpcId++;
                    break;
                }
                else
                {
                    ++mNextNpcId;
                    if (mNextNpcId >= (UInt32)EIdIndexInfo.NpcEnd)
                    {
                        mNextNpcId = (UInt32)EIdIndexInfo.NpcStart;
                    }
                }
            }

            if (singleId == 0)
            {
                return(false);
            }
            role._SetSingleId(singleId);
            mTableNpcs.Add(role.Id, role);
            mSingeIdNPCs.Add(singleId, role);
            return(true);
        }
Exemplo n.º 25
0
        public override bool StartPatrol(NPCInstance npc)
        {
            if (npc.InMapData.patrolRange <= 0)
            {
                return(false);
            }

            Vector3 randPos = new Vector3();

            //Vector3 randPos = Util.RandInRadius(npc.mSpawnPoint, npc.InMapData.patrolRange);
            //if (Util.PassableForMod(npc.HostMap.Navigator, randPos))
            if (Util.FindRandomPoint(npc.HostMap.Navigator, npc.GetPosition(), npc.mSpawnPoint, npc.InMapData.patrolRange, ref randPos))
            {
                if (npc.MoveTo(randPos))
                {
                    npc.ChangeState(eNPCState.Patrol);
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 26
0
        public MoveNodes <int> mPathNodes = new MoveNodes <int>(); //镖车行走路线

        public static NPCInstance CreateNPCInstance(CSCommon.MapInfo_Npc nd, MapInstance map)
        {
            NPCInstance ret = new NPCInstance();

            ret.mId = ServerFrame.Util.GenerateObjID(ServerFrame.GameObjectType.NPC);

            var init = new NpcInit();

            init.GameType     = eActorGameType.Npc;
            init.Data         = nd;
            init.OwnerMapData = map.MapInfo;
            if (!ret.Initialize(init))
            {
                return(null);
            }

            ret.Reborn();
            ret.OnEnterMap(map);

            return(ret);
        }
Exemplo n.º 27
0
        private static void __Kill_Listener(EventDispatcher listener, object data)
        {
            var achieve = listener as Achieve;

            if (null == achieve)
            {
                return;
            }
            NPCInstance target = data as NPCInstance;

            if (null == target)
            {
                return;
            }
            List <int> targetIds = GetListIdParseString(achieve.mTemplate.target);

            if (targetIds.Count > 0 && !targetIds.Contains(target.NPCData.TemplateId))
            {
                return;
            }
            achieve.AddTargetNum(1);
        }
Exemplo n.º 28
0
        public override bool OnFollowTarget(NPCInstance npc)
        {
            if (npc.CanCastSpell())
            {
                //到释放技能距离
                npc.ChangeState(eNPCState.WaitCoolDown);
            }
            else
            {
                if (npc.IsMoving)
                {
                    return(false);
                }

                if (!npc.FollowTarget(npc.GetTarget(npc.mAttackTarget)))
                {
                    npc.ReturnSpawnPoint();
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 29
0
        public virtual bool SelectTarget(NPCInstance npc)
        {
            RoleActor target = null;

            npc.mScanLastTime = 0;
            if (npc.mAttackTarget != 0)
            {
                target = npc.GetTarget(npc.mAttackTarget);
                if (null != target)
                {
                    if (target.IsDie)
                    {
                        npc.KickOneFromEnmityList(npc.mAttackTarget);
                        npc.mAttackTarget = 0;
                        target            = null;
                    }
                }
                else
                {
                    npc.mAttackTarget = 0;
                }
            }
            //从警戒范围找目标
            if (null == target)
            {
                target = npc.FindHatredTarget();
            }
            if (null == target)
            {
                return(false);
            }

            npc.UpdateEnmityList(target.Id, 1);

            return(true);
        }
Exemplo n.º 30
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());
            }
        }