Beispiel #1
0
        protected Packet GetMovementPacketFor(NetState state)
        {
            if (MovementPacket == null)
            {
                MovementPacket = new SmoothMovement(this, _containedObjects);
                MovementPacket.SetStatic();
            }

            return(MovementPacket);
        }
Beispiel #2
0
        public override void SetLocationOnSmooth(Point3D newLocation)
        {
            Point3D oldLocation = Location;

            base.SetLocationOnSmooth(newLocation);

            int rx = newLocation.X - oldLocation.X;
            int ry = newLocation.Y - oldLocation.Y;

            m_ContainedObjects.ForEachObject(
                item => item.SetLocationOnSmooth(new Point3D(item.X + rx, item.Y + ry, item.Z)),
                mob => mob.SetLocationOnSmooth(new Point3D(mob.X + rx, mob.Y + ry, mob.Z)));

            SmoothMovement movementPacket = new SmoothMovement(this, m_ContainedObjects);

            movementPacket.SetStatic();

            IPooledEnumerable eable = Map.GetClientsInRange(Location, GetMaxUpdateRange());

            foreach (NetState state in eable)
            {
                Mobile m = state.Mobile;

                if (!m.CanSee(this))
                {
                    continue;
                }

                if (m.InRange(Location, GetUpdateRange(m)))
                {
                    state.Send(movementPacket);

                    if (!m.InRange(oldLocation, GetUpdateRange(m)))
                    {
                        SendInfoTo(state);
                    }
                }

                if (Utility.InUpdateRange(Location, m.Location) && !Utility.InUpdateRange(oldLocation, m.Location))
                {
                    SendInfoTo(state);
                }
            }
            eable.Free();
            movementPacket.Release();

            m_ContainedObjects.ForEachMobile(mob => mob.NotifyLocationChangeOnSmooth(new Point3D(mob.Location.X - rx, mob.Location.Y - ry, mob.Location.Z)));
        }