コード例 #1
0
        void Movement(Entities.Monster mob)
        {
            if (!mob.Alive)
                return;

            try
            {
                if (mob.Target != null)
                {
                    if (DateTime.Now >= mob.MoveTime)
                    {
                        try
                        {
                            if (Core.Screen.GetDistance(mob.X, mob.Y, mob.Target.X, mob.Target.Y) >= mob.ViewRange)
                            {
                                byte dir = (byte)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(0, 8);
                                Maps.MapPoint movepoint = Packets.MovementPacket.CreateDirectionPoint(mob.X, mob.Y, dir);
                                if (mob.Map.ValidMoveCoord<Entities.Monster>(movepoint.X, movepoint.Y))
                                {
                                    mob.X = movepoint.X;
                                    mob.Y = movepoint.Y;
                                    mob.Direction = dir;
                                    using (var movepacket = new Packets.MovementPacket())
                                    {
                                        movepacket.EntityUID = mob.EntityUID;
                                        movepacket.TimeStamp = ProjectX_V3_Lib.Native.Winmm.timeGetTime();
                                        movepacket.Direction = (uint)dir;
                                        movepacket.WalkMode = Enums.WalkMode.Run;
                                        mob.Screen.UpdateScreen(movepacket);
                                    }
                                    mob.MoveTime = DateTime.Now.AddMilliseconds(mob.MoveSpeed * 5);
                                }
                                return;
                            }
                            else
                            {
                                byte dir = (byte)Core.Screen.GetFacing(Core.Screen.GetAngle(mob.X, mob.Y, mob.Target.X, mob.Target.Y));
                                Maps.MapPoint movepoint = Packets.MovementPacket.CreateDirectionPoint(mob.X, mob.Y, dir);
                                if (mob.Map.ValidMoveCoord<Entities.Monster>(movepoint.X, movepoint.Y))
                                {
                                    mob.X = movepoint.X;
                                    mob.Y = movepoint.Y;
                                    mob.Direction = dir;
                                    using (var movepacket = new Packets.MovementPacket())
                                    {
                                        movepacket.EntityUID = mob.EntityUID;
                                        movepacket.TimeStamp = ProjectX_V3_Lib.Native.Winmm.timeGetTime();
                                        movepacket.Direction = (uint)dir;
                                        movepacket.WalkMode = Enums.WalkMode.Run;
                                        mob.Screen.UpdateScreen(movepacket);
                                    }
                                }
                                int nextmove = ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(mob.MoveSpeed, mob.MoveSpeed * 2);
                                mob.MoveTime = DateTime.Now.AddMilliseconds(nextmove);
                            }
                        }
                        catch
                        {
                        } // target was removed again / out of range :s there is a concurrency problem, just cba to look for it as it's nothing major
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
コード例 #2
0
        private void Creature_Move_Thread()
        {
            if (!Alive)
            {
                return;
            }

            try
            {
                if (Target != null)
                {
                    if (DateTime.Now >= this.MoveTime)
                    {
                        if (Core.Screen.GetDistance(this.X, this.Y, this.Target.X, this.Target.Y) >= this.ViewRange)
                        {
                            byte          dir       = (byte)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(0, 8);
                            Maps.MapPoint movepoint = Packets.MovementPacket.CreateDirectionPoint(this.X, this.Y, dir);
                            if (this.Map.ValidMoveCoord <Entities.Monster>(movepoint.X, movepoint.Y))
                            {
                                this.X         = movepoint.X;
                                this.Y         = movepoint.Y;
                                this.Direction = dir;
                                using (var movepacket = new Packets.MovementPacket())
                                {
                                    movepacket.EntityUID = this.EntityUID;
                                    movepacket.TimeStamp = ProjectX_V3_Lib.Native.Winmm.timeGetTime();
                                    movepacket.Direction = (uint)dir;
                                    movepacket.WalkMode  = Enums.WalkMode.Run;
                                    this.Screen.UpdateScreen(movepacket);
                                }
                                this.MoveTime = DateTime.Now.AddMilliseconds(this.MoveSpeed * 5);
                            }
                        }
                        else
                        {
                            byte          dir       = (byte)Core.Screen.GetFacing(Core.Screen.GetAngle(this.X, this.Y, this.Target.X, this.Target.Y));
                            Maps.MapPoint movepoint = Packets.MovementPacket.CreateDirectionPoint(this.X, this.Y, dir);
                            if (this.Map.ValidMoveCoord <Entities.Monster>(movepoint.X, movepoint.Y))
                            {
                                this.X         = movepoint.X;
                                this.Y         = movepoint.Y;
                                this.Direction = dir;
                                using (var movepacket = new Packets.MovementPacket())
                                {
                                    movepacket.EntityUID = this.EntityUID;
                                    movepacket.TimeStamp = ProjectX_V3_Lib.Native.Winmm.timeGetTime();
                                    movepacket.Direction = (uint)dir;
                                    movepacket.WalkMode  = Enums.WalkMode.Run;
                                    this.Screen.UpdateScreen(movepacket);
                                }
                            }
                            int nextmove = ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(this.MoveSpeed, this.MoveSpeed * 2);
                            this.MoveTime = DateTime.Now.AddMilliseconds(nextmove);
                        }
                    }
                }
            }
            catch
            {
            }
        }
コード例 #3
0
        void Movement(Entities.Monster mob)
        {
            if (!mob.Alive)
            {
                return;
            }

            try
            {
                if (mob.Target != null)
                {
                    if (DateTime.Now >= mob.MoveTime)
                    {
                        try
                        {
                            if (Core.Screen.GetDistance(mob.X, mob.Y, mob.Target.X, mob.Target.Y) >= mob.ViewRange)
                            {
                                byte          dir       = (byte)ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(0, 8);
                                Maps.MapPoint movepoint = Packets.MovementPacket.CreateDirectionPoint(mob.X, mob.Y, dir);
                                if (mob.Map.ValidMoveCoord <Entities.Monster>(movepoint.X, movepoint.Y))
                                {
                                    mob.X         = movepoint.X;
                                    mob.Y         = movepoint.Y;
                                    mob.Direction = dir;
                                    using (var movepacket = new Packets.MovementPacket())
                                    {
                                        movepacket.EntityUID = mob.EntityUID;
                                        movepacket.TimeStamp = ProjectX_V3_Lib.Native.Winmm.timeGetTime();
                                        movepacket.Direction = (uint)dir;
                                        movepacket.WalkMode  = Enums.WalkMode.Run;
                                        mob.Screen.UpdateScreen(movepacket);
                                    }
                                    mob.MoveTime = DateTime.Now.AddMilliseconds(mob.MoveSpeed * 5);
                                }
                                return;
                            }
                            else
                            {
                                byte          dir       = (byte)Core.Screen.GetFacing(Core.Screen.GetAngle(mob.X, mob.Y, mob.Target.X, mob.Target.Y));
                                Maps.MapPoint movepoint = Packets.MovementPacket.CreateDirectionPoint(mob.X, mob.Y, dir);
                                if (mob.Map.ValidMoveCoord <Entities.Monster>(movepoint.X, movepoint.Y))
                                {
                                    mob.X         = movepoint.X;
                                    mob.Y         = movepoint.Y;
                                    mob.Direction = dir;
                                    using (var movepacket = new Packets.MovementPacket())
                                    {
                                        movepacket.EntityUID = mob.EntityUID;
                                        movepacket.TimeStamp = ProjectX_V3_Lib.Native.Winmm.timeGetTime();
                                        movepacket.Direction = (uint)dir;
                                        movepacket.WalkMode  = Enums.WalkMode.Run;
                                        mob.Screen.UpdateScreen(movepacket);
                                    }
                                }
                                int nextmove = ProjectX_V3_Lib.ThreadSafe.RandomGenerator.Generator.Next(mob.MoveSpeed, mob.MoveSpeed * 2);
                                mob.MoveTime = DateTime.Now.AddMilliseconds(nextmove);
                            }
                        }
                        catch
                        {
                        }                         // target was removed again / out of range :s there is a concurrency problem, just cba to look for it as it's nothing major
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }