protected Packet GetMovementPacketFor(NetState state) { if (MovementPacket == null) { MovementPacket = new SmoothMovement(this, _containedObjects); MovementPacket.SetStatic(); } return(MovementPacket); }
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))); }